@objectstack/console 14.5.0 → 14.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/dist/.objectui-sha +1 -1
  2. package/dist/assets/{AdapterProvider-VM9K3D39.js → AdapterProvider-cnK1q1oP.js} +1 -1
  3. package/dist/assets/{ApiConsolePage-CW5efCG0.js → ApiConsolePage-fUV9bmEg.js} +1 -1
  4. package/dist/assets/{AppDocsIndex-xfVoWnj-.js → AppDocsIndex-Bzh_4ehZ.js} +1 -1
  5. package/dist/assets/{AppManagementPage-DjerO44R.js → AppManagementPage-BRmzB5eR.js} +1 -1
  6. package/dist/assets/{ApprovalsInboxPage-CaCSwwcc.js → ApprovalsInboxPage-DKgnvZ-2.js} +1 -1
  7. package/dist/assets/ConsoleFloatingChatbot-BW-g5YTu.js +1 -0
  8. package/dist/assets/{CreateViewDialog-FNntBig_.js → CreateViewDialog-BhCe1ZPc.js} +1 -1
  9. package/dist/assets/{DashboardView-Bi3eGvU3.js → DashboardView-CUXRWKPH.js} +1 -1
  10. package/dist/assets/{FlowRunsPage-DUZnmBwd.js → FlowRunsPage-C4Setjuz.js} +1 -1
  11. package/dist/assets/{InterfaceListPage-2m_Tj1YU.js → InterfaceListPage-BFlwb0U7.js} +1 -1
  12. package/dist/assets/{MarketplaceInstalledPage-DVOm5x-8.js → MarketplaceInstalledPage-4MFyBXDW.js} +1 -1
  13. package/dist/assets/{MarketplacePackagePage-CjH5GQ5Z.js → MarketplacePackagePage-BDeaeKiT.js} +1 -1
  14. package/dist/assets/{MarketplacePage-gPtkwtQv.js → MarketplacePage-DXMWpCHb.js} +1 -1
  15. package/dist/assets/MetadataProvider-C8ABa_gQ.js +1 -0
  16. package/dist/assets/{ObjectDataPage-Dj2xHQH3.js → ObjectDataPage-BSvqdmym.js} +1 -1
  17. package/dist/assets/{PageView-l4f-5mgO.js → PageView-Dlpz3HgH.js} +1 -1
  18. package/dist/assets/{ProfilePage-CQlOfGDf.js → ProfilePage-2H6e2j4o.js} +1 -1
  19. package/dist/assets/{PublicFormsPage-Mu0E7e5y.js → PublicFormsPage-DXYBK10A.js} +1 -1
  20. package/dist/assets/RecordDetailView-CEdkDgV8.js +9 -0
  21. package/dist/assets/{RecordFormPage-BtK8VUj9.js → RecordFormPage-Bj3lDGqC.js} +1 -1
  22. package/dist/assets/{ReportDefaultInspector-Borp5kRd.js → ReportDefaultInspector-BNtsE5kW.js} +1 -1
  23. package/dist/assets/{ReportView-BrjYjp74.js → ReportView-COxfnluU.js} +1 -1
  24. package/dist/assets/{SearchResultsPage-CfxZkWx7.js → SearchResultsPage-B3ShD29d.js} +1 -1
  25. package/dist/assets/{SystemHubPage-_NMRZfpb.js → SystemHubPage-A9Z1FplZ.js} +1 -1
  26. package/dist/assets/data-adapter-CAqKExcJ.js +7 -0
  27. package/dist/assets/index-BhMd7RVY.js +2 -0
  28. package/dist/assets/infrastructure-DexdbqHf.js +3 -0
  29. package/dist/assets/{marketplaceApi-BN-VhaRz.js → marketplaceApi-1mMRJWDq.js} +1 -1
  30. package/dist/assets/{metadata-admin-BcCYhjRC.js → metadata-admin-R79BWSDJ.js} +2 -2
  31. package/dist/assets/{plugin-calendar-CSE3oYMl.js → plugin-calendar-GOvhSPjZ.js} +1 -1
  32. package/dist/assets/{plugin-form-mON2217z.js → plugin-form-QFhBvb96.js} +1 -1
  33. package/dist/assets/plugin-gantt-2HGBxhYq.js +93 -0
  34. package/dist/assets/{plugin-kanban-CAw-uo9I.js → plugin-kanban-D8kWLfql.js} +1 -1
  35. package/dist/assets/{plugin-view-BYrkl7Kl.js → plugin-view-CTBpbehM.js} +1 -1
  36. package/dist/assets/{plugins-views-Bf2gkCfN.js → plugins-views-BxKprmRN.js} +3 -3
  37. package/dist/assets/src-TG89vY9R.js +18 -0
  38. package/dist/assets/surfaceAgent-qmokOosD.js +1 -0
  39. package/dist/assets/useMetadata-DemWIEqg.js +1 -0
  40. package/dist/assets/{useRecordApprovals-CL4YRGv_.js → useRecordApprovals-R3Q7Bt7f.js} +1 -1
  41. package/dist/index.html +1 -1
  42. package/package.json +1 -1
  43. package/dist/assets/ConsoleFloatingChatbot-DtJ5G3pF.js +0 -1
  44. package/dist/assets/MetadataProvider-ByLpS5Ra.js +0 -1
  45. package/dist/assets/RecordDetailView-B_B-3fuJ.js +0 -9
  46. package/dist/assets/conversationLanguage-C4kzQvae.js +0 -1
  47. package/dist/assets/data-adapter-Cz11MUug.js +0 -7
  48. package/dist/assets/index-052ojABv.js +0 -2
  49. package/dist/assets/infrastructure-B9dLsgB4.js +0 -3
  50. package/dist/assets/plugin-gantt-BrBwlK5S.js +0 -93
  51. package/dist/assets/src-WC2Ki4jb.js +0 -18
  52. package/dist/assets/useMetadata-DdvHABxD.js +0 -1
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./ui-components-BL3SEdAz.css","./plugin-dashboard-DnNKJB60.css"])))=>i.map(i=>d[i]);
2
- import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{a as n,d as r,f as i,g as a,h as o,m as s,r as c,s as l,y as u}from"./vendor-react-BGDDiZfJ.js";import{m as d}from"./infrastructure-B9dLsgB4.js";import{G as f,L as p,R as m,Ut as h,Vt as g,Y as _,dt as v,ft as y,j as b,ut as x}from"./framework-CWU64Lvg.js";import{G as S,_ as C,b as w,g as T,m as E,w as D,x as O,y as k}from"./vendor-objectstack-6Mgxtaa1.js";import{$a as A,$i as j,$n as M,$o as ee,$r as te,$s as N,Aa as ne,Ai as re,Ar as P,As as ie,Bn as ae,Bo as F,Bs as oe,Bt as se,Ca as ce,Cc as le,Ci as ue,Co as de,Cr as I,Da as fe,Dc as pe,Do as me,Dr as he,E as ge,Ec as _e,Ei as ve,Eo as ye,Er as be,Fa as xe,Fo as Se,G as Ce,Gn as we,Go as Te,Gr as Ee,Gs as De,Gt as Oe,Ha as L,Hn as ke,Ho as Ae,Hr as je,Hs as Me,Ht as Ne,Ic as Pe,Io as Fe,Is as Ie,Ja as Le,Jn as Re,Jo as ze,Jr as Be,Js as Ve,Jt as He,K as Ue,Kn as We,Kr as R,Ks as Ge,Kt as Ke,La as qe,Li as Je,Ln as Ye,Lr as Xe,Mi as Ze,Mo as Qe,Mr as $e,Na as et,Ni as tt,Oa as nt,Oc as rt,Oi as it,Oo as at,Or as ot,Os as st,Pa as ct,Pi as lt,Po as ut,Ps as dt,Qa as ft,Qi as z,Qn as pt,Qo as mt,Qr as ht,Qs as gt,Qt as _t,Ra as vt,Ro as yt,Rr as bt,Rs as xt,Si as St,So as Ct,Ss as wt,T as Tt,Ti as Et,To as Dt,Tr as Ot,Ua as kt,Ui as At,Un as jt,Us as Mt,Ut as Nt,Va as Pt,Vi as Ft,Vn as It,Vr as Lt,Wi as Rt,Wo as zt,Wr as Bt,Wt as Vt,X as Ht,Xi as Ut,Xn as Wt,Xo as Gt,Xs as Kt,Xt as qt,Ya as Jt,Yn as Yt,Yo as Xt,Yr as Zt,Ys as Qt,Yt as $t,Zi as en,Zn as tn,Zs as nn,Zt as rn,_a as an,_c as on,_i as sn,_t as cn,aa as ln,ac as un,ai as dn,ao as fn,ba as pn,bi as mn,bo as hn,bs as gn,bt as _n,cc as vn,cn as yn,co as bn,cs as xn,da as Sn,ds as Cn,dt as wn,ea as Tn,en as En,eo as Dn,er as On,es as kn,et as An,fa as jn,fi as Mn,fs as Nn,ft as Pn,ga as Fn,gc as In,gs as Ln,gt as Rn,hi as zn,ho as Bn,ht as Vn,ic as Hn,ii as Un,is as Wn,ja as Gn,ji as Kn,jo as qn,jr as Jn,js as Yn,ka as Xn,kc as B,ki as Zn,ko as Qn,kr as $n,ks as er,la as tr,li as nr,ln as V,ls as rr,lt as ir,mo as ar,mt as or,nc as sr,nn as cr,no as lr,ns as ur,oc as dr,oi as fr,on as pr,pa as mr,pn as H,po as hr,pt as gr,q as _r,qa as vr,qi as yr,qn as br,qo as xr,qt as Sr,ra as Cr,rs as wr,sa as Tr,sc as Er,sn as Dr,so as Or,sr as U,tc as kr,tn as Ar,to as jr,ua as Mr,uc as Nr,ui as Pr,uo as Fr,us as Ir,ut as Lr,vc as Rr,vo as zr,vt as Br,wa as Vr,wc as Hr,wo as Ur,ws as Wr,xc as Gr,xi as Kr,xo as qr,xs as Jr,ya as Yr,yi as Xr,yt as Zr,zi as Qr,zn as $r}from"./ui-components-DHIW7RSX.js";import{r as ei}from"./vendor-ui-utils-BzQBRdq3.js";import"./AdapterProvider-VM9K3D39.js";import"./MetadataProvider-ByLpS5Ra.js";import{c as ti,r as ni}from"./assistantBus-BFk4fCbM.js";import{o as ri}from"./useRecordApprovals-CL4YRGv_.js";import{f as ii}from"./plugin-chatbot-BT49v2CR.js";import{a as ai,c as oi,l as si,o as ci,s as li}from"./RecordDetailView-B_B-3fuJ.js";import{n as ui}from"./ui-layout-DeDkO2oG.js";import{i as di,n as fi,r as pi,t as mi}from"./useMetadata-DdvHABxD.js";import{A as hi,B as gi,C as W,D as _i,E as vi,F as yi,H as bi,I as xi,L as Si,M as Ci,N as wi,O as Ti,P as Ei,R as Di,S as Oi,T as G,V as ki,W as Ai,_ as ji,a as Mi,b as Ni,c as Pi,d as Fi,f as Ii,g as Li,h as Ri,i as zi,j as Bi,k as Vi,l as Hi,m as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi,v as K,w as Zi,x as Qi,y as $i,z as ea}from"./ReportDefaultInspector-Borp5kRd.js";import{t as ta}from"./getIcon-p-vXfFiY.js";import{t as na}from"./InterfaceListPage-2m_Tj1YU.js";import{n as ra}from"./plugins-views-Bf2gkCfN.js";import{a as ia,i as aa,n as q,o as oa,r as J,s as sa,t as ca}from"./i18n-DGsfMUMn.js";import{r as la}from"./dist-YwlXXOlT.js";var Y=c(),X=e(u(),1);function ua(){let e={BASE_URL:`./`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_SENTRY_DSN:`https://1373a588ceb9da150b11e64bf85f583d@o4510356161757184.ingest.us.sentry.io/4511439670673408`,VITE_SENTRY_ENVIRONMENT:`production`,VITE_SENTRY_SEND_DEFAULT_PII:`true`,VITE_SERVER_URL:``,VITE_USE_MOCK_SERVER:`false`},t=e.VITE_AI_BASE_URL;return t?t.replace(/\/$/,``):`${(e.VITE_SERVER_URL??``).replace(/\/$/,``)}/api/v1/ai`}function da(){let{agents:e,isLoading:t}=ii({apiBase:ua()}),n=(0,X.useRef)(!1);t&&(n.current=!0);let r=e.length>0;return{enabled:r,isLoading:r?!1:t||!n.current}}function fa(e,t){if(!t)return!0;let n=t.toLowerCase();return e.value.toLowerCase().includes(n)||e.label.toLowerCase().includes(n)||(e.group?.toLowerCase().includes(n)??!1)}function pa({label:e,value:t,onCommit:n,options:r,placeholder:i=`Select…`,searchPlaceholder:a=`Search or type…`,emptyText:o=`No match — keep typing to use a custom value.`,disabled:s,loading:c,allowCustom:l=!0,mono:u,className:d}){let[f,p]=X.useState(!1),[m,h]=X.useState(``),g=r.find(e=>e.value===t),_=g?g.label:t||(c?`Loading…`:i),v=X.useMemo(()=>r.filter(e=>fa(e,m)),[r,m]),y=X.useMemo(()=>{let e=[],t=new Map;for(let n of v){let r=n.group??``;t.has(r)||(t.set(r,[]),e.push(r)),t.get(r).push(n)}return e.map(e=>({heading:e,items:t.get(e)}))},[v]),b=m.trim(),x=l&&!!b&&!r.some(e=>e.value===b),S=e=>{n(e),p(!1),h(``)},C=(0,Y.jsxs)(pr,{open:f,onOpenChange:e=>{p(e),e||h(``)},children:[(0,Y.jsx)(yn,{asChild:!0,children:(0,Y.jsxs)(I,{type:`button`,variant:`outline`,role:`combobox`,"aria-expanded":f,disabled:s,className:B(`h-8 w-full justify-between px-2 text-sm font-normal`,d),children:[(0,Y.jsx)(`span`,{className:B(`truncate`,u&&`font-mono`,!g&&!t&&`text-muted-foreground`),children:_}),(0,Y.jsx)(Ie,{className:`ml-2 h-3.5 w-3.5 shrink-0 opacity-50`})]})}),(0,Y.jsx)(Dr,{align:`start`,className:`w-[var(--radix-popover-trigger-width)] min-w-[14rem] p-0`,children:(0,Y.jsxs)(Ye,{shouldFilter:!1,children:[(0,Y.jsx)(It,{value:m,onValueChange:h,placeholder:a}),(0,Y.jsxs)(jt,{children:[!x&&v.length===0&&(0,Y.jsx)($r,{children:o}),x&&(0,Y.jsx)(ae,{children:(0,Y.jsx)(ke,{value:`__custom__${b}`,onSelect:()=>S(b),children:(0,Y.jsxs)(`span`,{className:`truncate`,children:[`Use `,(0,Y.jsxs)(`span`,{className:`font-mono`,children:[`“`,b,`”`]})]})})}),y.map((e,n)=>(0,Y.jsx)(ae,{heading:e.heading||void 0,children:e.items.map(e=>(0,Y.jsxs)(ke,{value:e.value,onSelect:()=>S(e.value),children:[(0,Y.jsx)(Mt,{className:B(`h-3.5 w-3.5`,e.value===t?`opacity-100`:`opacity-0`)}),(0,Y.jsx)(`span`,{className:`truncate font-mono`,children:e.value}),e.label&&e.label!==e.value&&(0,Y.jsx)(`span`,{className:`ml-1 truncate text-muted-foreground`,children:e.label}),e.hint&&(0,Y.jsx)(`span`,{className:`ml-auto pl-2 text-[10px] text-muted-foreground`,children:e.hint})]},e.value))},e.heading||`g${n}`))]})]})})]});return e?(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),C]}):C}var ma=new Set([`lookup`,`master_detail`,`masterdetail`,`master-detail`]);function ha(e,t){if(typeof e==`string`&&e)return e;if(e&&typeof e==`object`){let t=e.default;if(typeof t==`string`&&t)return t}return t}function ga(e){let t=e.reference??e.reference_to??e.referenceTo??e.reference_to_object;if(typeof t==`string`&&t)return t;if(Array.isArray(t)&&typeof t[0]==`string`)return t[0];if(t&&typeof t==`object`){let e=t.object;if(typeof e==`string`&&e)return e}}function _a(e){switch(e){case`lookup`:case`master_detail`:case`masterDetail`:case`master-detail`:return`lookup`;case`date`:case`datetime`:case`time`:return`date`;case`number`:case`currency`:case`percent`:case`int`:case`integer`:case`float`:case`double`:case`autonumber`:return`number`;case`boolean`:case`toggle`:return`boolean`;default:return`string`}}function va(e,t){if(!e)return{label:t,fields:[],relationships:[]};let n=ha(e.label,t),r=Si(e.fields).entries.map(e=>({name:e.name,label:ha(e.def.label,e.name),type:typeof e.def.type==`string`?e.def.type:void 0,def:e.def}));return{label:n,fields:r,relationships:r.filter(e=>e.type&&ma.has(e.type.toLowerCase())).map(e=>({name:e.name,label:e.label,referenceTo:ga(e.def)}))}}function ya(e,t,n){let r=e,i=[];for(let e of t.split(`.`)){let t=r.relationships.find(t=>t.name===e);if(!t?.referenceTo)return;let a=n[t.referenceTo];if(!a)return;i.push(t.label),r=a}return{target:r,labels:i}}function ba(e,t,n){let r=e.fields.map(t=>({value:t.name,label:t.label,type:t.type,group:e.label}));for(let i of t){let t=ya(e,i,n);if(!t)continue;let a=[...t.labels,t.target.label].join(` → `);for(let e of t.target.fields)r.push({value:`${i}.${e.name}`,label:e.label,type:e.type,group:a})}return r}function xa(e,t){if(!e||typeof e!=`object`)return!1;if(Array.isArray(e))return e.some(e=>xa(e,t));let n=e;return typeof n.dataset==`string`&&n.dataset===t?!0:Object.values(n).some(e=>e&&typeof e==`object`&&xa(e,t))}function Sa(){let e=pi(),[t,n]=X.useState({options:[],loading:!0});return X.useEffect(()=>{let t=!1;return n(e=>({...e,loading:!0})),e.list(`object`).then(e=>{if(t)return;let r=(Array.isArray(e)?e:[]).map(e=>({name:typeof e.name==`string`?e.name:``,label:ha(e.label,typeof e.name==`string`?e.name:``)})).filter(e=>!!e.name).sort((e,t)=>e.label.localeCompare(t.label));n({options:r,loading:!1})}).catch(()=>{t||n({options:[],loading:!1})}),()=>{t=!0}},[e]),t}function Ca(e,t){let n=pi(),r=t.join(`\0`),[i,a]=X.useState({relationships:[],fieldOptions:[],loading:!!e});return X.useEffect(()=>{if(!e){a({relationships:[],fieldOptions:[],loading:!1});return}let t=!1;return a(e=>({...e,loading:!0})),(async()=>{try{let i=await n.get(`object`,e);if(t)return;let o=va(i,e),s=r?r.split(`\0`):[],c={[e]:o},l=async e=>{if(c[e])return c[e];let t;try{t=va(await n.get(`object`,e),e)}catch{t=va(null,e)}return c[e]=t,t};for(let e of s){let t=o;for(let n of e.split(`.`)){let e=t.relationships.find(e=>e.name===n);if(!e?.referenceTo)break;t=await l(e.referenceTo)}}if(t)return;let u=[...o.relationships];for(let e of s){if(e.split(`.`).length>=3)continue;let t=ya(o,e,c);if(t)for(let n of t.target.relationships)u.push({name:`${e}.${n.name}`,label:`${e}.${n.name}`,referenceTo:n.referenceTo})}a({relationships:u,fieldOptions:ba(o,s,c),loading:!1})}catch{t||a({relationships:[],fieldOptions:[],loading:!1})}})(),()=>{t=!0}},[n,e,r]),i}function wa(e){let t=pi(),[n,r]=X.useState({reports:0,dashboards:0,loading:!!e});return X.useEffect(()=>{if(!e){r({reports:0,dashboards:0,loading:!1});return}let n=!1;return r(e=>({...e,loading:!0})),(async()=>{let[i,a]=await Promise.all([t.list(`report`).catch(()=>[]),t.list(`dashboard`).catch(()=>[])]);n||r({reports:(Array.isArray(i)?i:[]).filter(t=>xa(t,e)).length,dashboards:(Array.isArray(a)?a:[]).filter(t=>xa(t,e)).length,loading:!1})})(),()=>{n=!0}},[t,e]),n}function Ta(e,t){if(typeof e==`string`)return e||`col ${t+1}`;if(e&&typeof e==`object`){let n=e;return String(n.label??n.header??n.field??n.accessorKey??`col ${t+1}`)}return`col ${t+1}`}function Ea(e){if(typeof e==`string`)return e||void 0;if(e&&typeof e==`object`){let t=e,n=t.field??t.accessorKey;return typeof n==`string`&&n?n:void 0}}function Da(e){let t=new Set;for(let n of e){let e=Ea(n);e&&t.add(e)}return t}function Oa(e,t,n){if(e)return t;let r={field:t};return n&&n!==t&&(r.label=n),r}function ka(e,t){return e===t?null:e>t?e-1:e}function Aa(e,t,n){if(e===t)return n;let r=e;return t<r&&--r,n<=r&&(r+=1),r}function ja({variantKey:e,schema:t,columns:n,allStrings:r,objectName:i,objectFieldsOverride:a,selectedIndex:o,readOnly:s,onPatch:c,onSelectionChange:l}){let u=!s,{fields:d,loading:f,error:p}=Li(i||void 0,a),m=X.useMemo(()=>{let e=new Map;for(let t of d)e.set(t.name,t.type);return e},[d]),[h,g]=X.useState(null),[_,v]=X.useState(null),y=X.useCallback(n=>{c({[e]:{...t,columns:n}})},[c,e,t]),b=X.useCallback(t=>{let i=vi(n,Oa(r,t.name,t.label));y(i),l?.({kind:`column`,id:`${e}.columns[${i.length-1}]`,label:t.label})},[r,n,y,e,l]),x=X.useCallback(t=>{let r=Ti(n,t,null);if(y(r),o!=null){let n=ka(o,t);n==null?l?.(null):l?.({kind:`column`,id:`${e}.columns[${n}]`,label:Ta(r[n],n)})}},[n,y,o,e,l]),S=X.useCallback((t,r)=>{if(t===r)return;let i=_i(n,t,r);if(y(i),o!=null){let n=Aa(o,t,r);l?.({kind:`column`,id:`${e}.columns[${n}]`,label:Ta(i[n],n)})}},[n,y,o,e,l]),C=X.useCallback(t=>{l?.({kind:`column`,id:`${e}.columns[${t}]`,label:Ta(n[t],t)})},[n,e,l]),w=Da(n);return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:n.length})]}),n.length===0?(0,Y.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-3 text-center text-[11px] text-muted-foreground`,children:`No columns yet. Add a field below.`}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:n.map((e,t)=>(0,Y.jsx)(Ji,{index:t,label:Ta(e,t),fieldName:Ea(e),fieldType:m.get(Ea(e)??``)??`text`,selected:o===t,canEdit:u,dragging:h!==null,dropBefore:_===t&&h!==null&&h!==t,onSelect:()=>C(t),onRemove:()=>x(t),onDragStart:()=>g(t),onDragEnd:()=>{g(null),v(null)},onDragOverRow:()=>v(t),onDropRow:()=>{h!=null&&h!==t&&S(h,t),g(null),v(null)}},t))}),u&&(0,Y.jsx)(Gi,{fields:d,usedNames:w,loading:f,error:p,onAdd:b})]})}var Ma={io:`input`,unrepresentable:`any`},Na=new Set([`columns`,`data`,`name`]),Pa,Fa=!1;function Ia(){if(Pa||Fa)return Pa;try{Pa=S(k,Ma)}catch(e){Fa=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive View JSONSchema from spec`,e)}return Pa}function La(){return Ia()?.properties?.list}function Ra(){return Ia()?.properties?.form}var za,Ba=!1;function Va(){if(za||Ba)return za;try{za=S(T,Ma)}catch(e){Ba=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive ListColumn JSONSchema from spec`,e)}return za}var Ha;function Ua(){if(Ha)return Ha;if(!(!D||typeof D!=`object`)){try{let e=JSON.parse(JSON.stringify(D));for(let t of e.sections??[])t.fields=(t.fields??[]).filter(e=>{let t=typeof e==`string`?e:e?.field;return!Na.has(t)});e.sections=(e.sections??[]).filter(e=>(e.fields??[]).length>0),Ha=e}catch(e){typeof console<`u`&&console.warn(`[view-schema] failed to prepare viewForm from spec`,e);return}return Ha}}var Wa=new Set([`form`,`detail`]);function Ga(e){return Wa.has(e)}function Ka(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function qa(e,t){return typeof e==`string`&&Wa.has(e)?e:typeof e==`string`&&e?`list`:typeof t==`string`&&Wa.has(t)?`form`:`list`}function Ja(e){let t=e.config;return Ka(t)?[{storeKey:`config`,familyKey:qa(e.viewKind,t.type),schema:t}]:[]}function Ya(e){return Ja(e)[0]}function Xa(e,t){return Ya(e)}function Za({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){let{options:a,loading:o}=Sa();return(0,Y.jsx)(pa,{label:e,value:t,onCommit:n,options:a.map(e=>({value:e.name,label:e.label})),loading:o,placeholder:r,searchPlaceholder:`Search objects…`,disabled:i,mono:!0})}var Qa=new Set([`type`,`object`,`label`,`columns`]),$a={grid:`Table / List`,kanban:`Kanban`,calendar:`Calendar`,gallery:`Gallery`,gantt:`Gantt`,timeline:`Timeline`,map:`Map`,chart:`Chart`};function eo(e,t){let n=`engine.inspector.view.type.${e}`,r=q(n,t);return r===n?$a[e]??e:r}var to=[`columns`,`data`,`name`];function no(e,t){let n=e.data;return n&&typeof n==`object`&&typeof n.object==`string`&&n.object?{value:n.object,path:`data.object`}:typeof e.object==`string`&&e.object?{value:e.object,path:`object`}:typeof t.object==`string`&&t.object?{value:t.object,path:`top`}:{value:``,path:`top`}}function ro(e,t){return X.useMemo(()=>{let n=La()?.properties?.type?.enum,r=(Array.isArray(n)&&n.length?n.filter(e=>typeof e==`string`):[`grid`,`kanban`,`calendar`,`gallery`,`gantt`,`timeline`]).map(e=>({value:e,label:eo(e,t)}));return!r.some(t=>t.value===e)&&e&&r.push({value:e,label:eo(e,t)}),r},[e,t])}function io({draft:e,variantKey:t,familyKey:n,isHome:r,onPatch:i,readOnly:a,onClearSelection:o,onSelectionChange:s,objectFieldsOverride:c,locale:l,serverSchema:u}){let d=e[t]??{},f=Ga(n??t),p=typeof d.type==`string`?d.type:`grid`,m=ro(p,l),h=no(d,e),g=typeof e.label==`string`&&e.label||(typeof d.label==`string`?d.label:``)||``,_=Array.isArray(d.columns)?d.columns:[],v=_.length>0&&_.every(e=>typeof e==`string`),{fields:y}=Li(h.value||void 0,c),b=X.useMemo(()=>({objectFields:y.map(e=>({name:e.name,label:e.label,type:e.type}))}),[y]),x=(()=>{let e=u?.properties;return f?e?.form:e?.list})(),{schema:S,form:C}=X.useMemo(()=>Mi({bundledSchema:f?Ra():La(),bundledForm:f?void 0:Ua(),serverSchema:x,excludeFields:Qa,sectionTitle:q(`engine.inspector.moreFields`,l)}),[f,x,l]),w=e=>{i({[t]:{...d,...e}})};return(0,Y.jsxs)(Zi,{kindLabel:q(`engine.inspector.view.kind`,l),title:String(g||e.name||t),onClose:()=>o?.(),closeLabel:q(`engine.inspector.view.close`,l),hideClose:r,children:[(0,Y.jsx)(G,{label:q(`engine.inspector.view.label`,l),value:g,onCommit:e=>{i({label:e,[t]:{...d,label:e}})},placeholder:q(`engine.inspector.view.labelPlaceholder`,l),disabled:a}),(0,Y.jsx)(W,{label:q(`engine.inspector.view.type`,l),value:p,options:m,onCommit:e=>w({type:e}),disabled:a}),(0,Y.jsx)(Za,{label:q(`engine.inspector.view.object`,l),value:h.value,onCommit:e=>{let n={object:e};d.data&&typeof d.data==`object`?n[t]={...d,data:{...d.data,object:e}}:h.path===`object`&&(n[t]={...d,object:e}),i(n)},placeholder:q(`engine.inspector.view.objectPlaceholder`,l),disabled:a}),!f&&(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(ja,{variantKey:t,schema:d,columns:_,allStrings:v,objectName:h.value||void 0,objectFieldsOverride:c,selectedIndex:null,readOnly:a,onPatch:i,onSelectionChange:s})}),(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:S?(0,Y.jsx)(Ki,{schema:S,form:C,value:d,hiddenFields:[`type`,`object`,`label`],readOnly:a,widgetContext:b,onChange:e=>{let n={...e};for(let e of to)e in d?n[e]=d[e]:delete n[e];i({[t]:n})}}):(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:q(`engine.inspector.view.noSchema`,l)})})]})}function ao({appSlug:e}={}){let t=i(),n=pi(),{entries:r}=di(n),[a,o]=X.useState(!1),[s,c]=X.useState(``),[l,u]=X.useState(null),[d,f]=X.useState(!1),[p,m]=X.useState(0),h=X.useMemo(()=>ca(),[]);X.useEffect(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.shiftKey&&e.key.toLowerCase()===`m`&&(e.preventDefault(),o(e=>!e))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),X.useEffect(()=>{if(!a||l!=null||d||r.length===0)return;f(!0);let e=!1;return(async()=>{try{let t=[];await Promise.all(r.map(async e=>{try{let r=await n.list(e.type);for(let n of r??[]){let r=(n&&typeof n==`object`&&`item`in n?n.item:n)??{},i=r?.name;i&&t.push({kind:`item`,type:e.type,name:String(i),label:r?.label,description:r?.description,lock:typeof r?._lock==`string`?r._lock:void 0,lockReason:typeof r?._lockReason==`string`?r._lockReason:void 0})}}catch{}})),e||u(t)}finally{e||f(!1)}})(),()=>{e=!0}},[a,l,d,r,n]);let g=X.useMemo(()=>{let e=s.trim().toLowerCase();if(!e)return r.slice(0,20).map(e=>({kind:`type`,entry:e}));let t=r.filter(t=>t.type.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e)||ia(t.type,h,t.label).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)).slice(0,8).map(e=>({kind:`type`,entry:e})),n=(l??[]).filter(t=>t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)||t.type.toLowerCase().includes(e)).slice(0,40);return[...t,...n]},[s,r,l]);X.useEffect(()=>{m(0)},[s,a]);function _(n){o(!1);let r=e?`/apps/${e}`:`..`;n.kind===`type`?t(`${r}/metadata/${encodeURIComponent(n.entry.type)}`):t(`${r}/metadata/${encodeURIComponent(n.type)}/${encodeURIComponent(n.name)}`)}function v(e){e.key===`ArrowDown`?(e.preventDefault(),m(e=>Math.min(e+1,g.length-1))):e.key===`ArrowUp`?(e.preventDefault(),m(e=>Math.max(e-1,0))):e.key===`Enter`&&g[p]&&(e.preventDefault(),_(g[p]))}return(0,Y.jsx)(we,{open:a,onOpenChange:o,children:(0,Y.jsxs)(We,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(Yt,{className:`sr-only`,children:(0,Y.jsx)(Wt,{children:q(`engine.quickfind.title`,h)})}),(0,Y.jsxs)(`div`,{className:`border-b px-3 py-2 flex items-center gap-2`,children:[(0,Y.jsx)(Kn,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{autoFocus:!0,placeholder:q(`engine.quickfind.placeholder`,h),value:s,onChange:e=>c(e.target.value),onKeyDown:v,className:`border-0 shadow-none focus-visible:ring-0 px-0`}),(0,Y.jsx)(Ce,{children:`esc`})]}),(0,Y.jsxs)(`div`,{className:`max-h-[440px] overflow-auto`,children:[d&&(0,Y.jsxs)(`div`,{className:`px-3 py-4 text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}),q(`engine.quickfind.indexing`,h),` `,r.length,`…`]}),!d&&g.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-6 text-xs text-muted-foreground text-center`,children:q(`engine.quickfind.noMatches`,h)}),(0,Y.jsx)(`ul`,{role:`listbox`,children:g.map((e,t)=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>_(e),onMouseEnter:()=>m(t),className:`w-full text-left px-3 py-2 flex items-center gap-3 hover:bg-accent `+(t===p?`bg-accent`:``),children:[(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono shrink-0`,children:e.kind===`type`?`type`:e.type}),(0,Y.jsx)(`div`,{className:`min-w-0 flex-1`,children:e.kind===`type`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium truncate`,children:ia(e.entry.type,h,e.entry.label)}),e.entry.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.entry.description})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`text-sm font-mono truncate flex items-center gap-1.5`,children:[e.lock&&e.lock!==`none`&&(0,Y.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400 shrink-0`,title:e.lockReason??`_lock=${e.lock}`,"aria-label":`locked`,children:(0,Y.jsx)(Pt,{className:`h-3 w-3`})}),e.name,e.label&&(0,Y.jsx)(`span`,{className:`text-muted-foreground font-sans ml-2`,children:e.label})]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.description})]})})]})},e.kind===`type`?`t:${e.entry.type}`:`i:${e.type}:${e.name}`))})]}),(0,Y.jsxs)(`div`,{className:`border-t px-3 py-1.5 flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Ce,{children:`↑`}),` `,(0,Y.jsx)(Ce,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Ce,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(Ce,{children:`⌘`}),(0,Y.jsx)(Ce,{children:`⇧`}),(0,Y.jsx)(Ce,{children:`M`}),` toggle`]})]})]})})}var oo=new Set([`system`,`cloud`]);function so(e){let t=(e??[]).map(e=>{let t=e&&typeof e==`object`&&`item`in e?e.item:e,n=t?.manifest??t??{};return{id:n.id,scope:n.scope,name:n.name||n.id}}).filter(e=>e.id&&!oo.has(e.scope));return t.sort((e,t)=>e.name.localeCompare(t.name)),t.map(e=>({id:e.id,name:e.name}))}var co={data:wr,ui:Dn,automation:$e,ai:sn,system:it,platform:it,identity:Et,security:Et},lo=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],uo=new Set([`field`,`package`]);function fo(){let e=pi(),{loading:t,error:r,entries:i}=di(e),a=X.useMemo(()=>ca(),[]),[s,c]=X.useState(``),[l,u]=X.useState(`all`),[d,f]=X.useState(!1),[p,m]=o(),[h,g]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;g(so(n))}catch{t||g([])}})(),()=>{t=!0}},[e]);let _=p.get(`package`),v=X.useMemo(()=>h?_&&h.some(e=>e.id===_)?_:h[0]?.id??null:null,[h,_]);X.useEffect(()=>{if(!h||h.length===0||_&&h.some(e=>e.id===_))return;let e=new URLSearchParams(p);e.set(`package`,h[0].id),m(e,{replace:!0})},[h,_]);let{byType:y,warnByType:b,summary:x,countsByType:S,lockedByType:C,packagesByType:w,loading:T}=fi(e,`warning`,v??void 0),E=X.useMemo(()=>i.filter(e=>uo.has(e.type)||!v?!1:(w[e.type]??[]).includes(v)),[i,v,w]),D=X.useMemo(()=>{let e={all:E.length};for(let t of E){let n=t.domain??`other`;e[n]=(e[n]??0)+1}return e},[E]),O=E.filter(e=>e.allowOrgOverride||e.allowRuntimeCreate).length,k=E.filter(e=>{if(d&&!(e.allowOrgOverride||e.allowRuntimeCreate)||l!==`all`&&(e.domain??`other`)!==l)return!1;if(s){let t=s.toLowerCase();if(!(e.type.toLowerCase().includes(t)||(e.label??``).toLowerCase().includes(t)||ia(e.type,a,e.label).toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)))return!1}return!0}),A=X.useMemo(()=>{let e={};for(let t of k)(e[t.domain??`other`]??=[]).push(t);return Object.entries(e).sort(([e],[t])=>{let n=lo.indexOf(e),r=lo.indexOf(t);return(n===-1?99:n)-(r===-1?99:r)})},[k]);return t||h===null||v&&T?(0,Y.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:q(`engine.directory.loading`,a)}):r?(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-destructive`,children:[q(`engine.directory.loadFailed`,a),`: `,r]}):(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold`,children:q(`engine.directory.title`,a)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,dangerouslySetInnerHTML:{__html:J(`engine.directory.description`,a,{count:`<strong class="text-foreground">${E.length}</strong>`,writable:O})}}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 mt-4 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 min-w-[240px] max-w-lg`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.directory.search`,a),value:s,onChange:e=>c(e.target.value)})]}),(0,Y.jsxs)(I,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[q(`engine.directory.writableOnly`,a),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(I,{asChild:!0,variant:`outline`,size:`sm`,className:`border-destructive/40 text-destructive hover:bg-destructive/10 hover:text-destructive`,children:(0,Y.jsxs)(n,{to:`./_diagnostics`,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.directory.diagnosticsLink`,a,{count:x.total})]})}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-1.5`,children:[q(`engine.directory.quickFind`,a),` `,(0,Y.jsx)(Ce,{children:`⌘`}),(0,Y.jsx)(Ce,{children:`⇧`}),(0,Y.jsx)(Ce,{children:`M`})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-3 flex-wrap`,children:[(0,Y.jsx)(po,{domain:`all`,label:q(`engine.directory.all`,a),active:l===`all`,count:D.all??0,onClick:()=>u(`all`)}),lo.filter(e=>D[e]).map(e=>(0,Y.jsx)(po,{domain:e,label:aa(e,a),active:l===e,count:D[e]??0,onClick:()=>u(e)},e))]})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[h.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No project packages installed`}),(0,Y.jsx)(_r,{children:`Studio only shows metadata that belongs to a project software package. Install or create a project package to manage its metadata here.`})]}),h.length>0&&k.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.directory.noMatches`,a)}),(0,Y.jsx)(_r,{children:q(`engine.directory.noMatchesHint`,a)})]}),A.map(([e,t])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5`,children:[(0,Y.jsx)(co[e]??Er,{className:`h-3.5 w-3.5`}),aa(e,a),` (`,t.length,`)`]}),(0,Y.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:t.map(e=>{let t=S[e.type]??0;return(0,Y.jsx)(mo,{entry:e,locale:a,invalidCount:y[e.type]??0,warnCount:b[e.type]??0,lockedCount:C[e.type]??0,itemCount:t,packageFilter:v??void 0},e.type)})})]},e))]}),(0,Y.jsx)(ao,{})]})}function po({domain:e,label:t,active:n,count:r,onClick:i}){return(0,Y.jsxs)(`button`,{type:`button`,onClick:i,className:`px-2.5 py-1 rounded-full text-xs border transition-colors `+(n?`bg-primary text-primary-foreground border-primary`:`bg-background hover:bg-accent border-border text-muted-foreground`),children:[t??e,` `,(0,Y.jsxs)(`span`,{className:`opacity-70 ml-0.5`,children:[`(`,r,`)`]})]})}function mo({entry:e,locale:t,invalidCount:r=0,warnCount:i=0,itemCount:a=0,lockedCount:o=0,packageFilter:s}){let c=ia(e.type,t,e.label);return(0,Y.jsxs)(n,{to:s?`./${encodeURIComponent(e.type)}?package=${encodeURIComponent(s)}`:`./${encodeURIComponent(e.type)}`,className:`block p-4 border rounded-lg hover:bg-accent transition-colors `+(r>0?`border-destructive/40 hover:border-destructive`:`hover:border-primary`),children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`font-medium truncate flex items-center gap-1.5`,children:[r>0&&(0,Y.jsx)(`span`,{title:J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),"aria-label":J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),children:(0,Y.jsx)(R,{className:`h-3.5 w-3.5 text-destructive shrink-0`})}),c]}),(0,Y.jsx)(`code`,{className:`text-xs text-muted-foreground font-mono`,children:e.type})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:J(`engine.directory.itemCountTooltip`,t??`en`,{count:a}),children:a}),r>0&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,title:J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),children:r}),i>0&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06]`,title:J(`engine.directory.warnTooltip`,t??`en`,{count:i}),children:i}),o>0&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06] inline-flex items-center gap-0.5 px-1.5`,title:`${o} locked item${o===1?``:`s`} — see ADR-0010`,"aria-label":`${o} locked items`,children:[(0,Y.jsx)(Pt,{className:`h-2.5 w-2.5`}),o]}),e.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,t)}):e.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,t)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:q(`engine.badge.readOnly`,t)})]})]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-2 line-clamp-2`,children:e.description})]})}var ho=`/api/v1/packages`;async function go(e,t){let n=await fetch(e,{credentials:`include`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=await n.text(),i=r?JSON.parse(r):null;if(!n.ok||i?.success===!1){let e=i?.error?.message||i?.error||i?.message||`Request failed (${n.status})`;throw Error(typeof e==`string`?e:`Request failed (${n.status})`)}return i?.data??i}function _o({scope:e}){let t=X.useMemo(()=>ca(),[]);if(!e)return(0,Y.jsx)(U,{className:`bg-emerald-400/15 text-emerald-600 hover:bg-emerald-400/15 dark:text-emerald-300`,children:q(`engine.packages.scope.writable`,t)});let n=e===`project`?`default`:e===`system`?`secondary`:`outline`,r=e===`project`?`engine.packages.scope.project`:e===`system`?`engine.packages.scope.system`:e===`cloud`?`engine.packages.scope.cloud`:``;return(0,Y.jsx)(U,{variant:n,children:r?q(r,t):e})}function vo({pkg:e}){let t=X.useMemo(()=>ca(),[]),n=e.enabled!==!1&&e.status!==`disabled`;return(0,Y.jsx)(U,{variant:n?`default`:`outline`,children:q(n?`engine.packages.status.enabled`:`engine.packages.status.disabled`,t)})}var yo=/^[a-z0-9][a-z0-9._-]{1,254}$/i,bo=/^\d+\.\d+\.\d+$/;function xo({open:e,onOpenChange:t,onCreated:n}){let r=X.useMemo(()=>ca(),[]),[i,a]=X.useState(``),[o,s]=X.useState(``),[c,l]=X.useState(`0.1.0`),[u,d]=X.useState(!1),[f,p]=X.useState(null);X.useEffect(()=>{e&&(a(``),s(``),l(`0.1.0`),p(null),d(!1))},[e]);let m=yo.test(i),h=bo.test(c),g=m&&h&&!!o.trim()&&!u;async function _(){if(g){d(!0),p(null);try{await go(ho,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:{id:i.trim(),name:o.trim(),version:c.trim(),type:`app`}})}),n(i.trim());try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}t(!1)}catch(e){p(e?.message??q(`engine.packages.create.failed`,r))}finally{d(!1)}}}return(0,Y.jsx)(we,{open:e,onOpenChange:t,children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:q(`engine.packages.create.title`,r)}),(0,Y.jsx)(br,{children:J(`engine.packages.create.description`,r,{example:`com.acme.crm`})})]}),(0,Y.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-id`,children:q(`engine.packages.create.id`,r)}),(0,Y.jsx)(V,{id:`pkg-id`,"data-testid":`package-id-input`,placeholder:`com.acme.crm`,value:i,onChange:e=>a(e.target.value),"aria-invalid":!!i&&!m}),!!i&&!m&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-name`,children:q(`engine.packages.create.name`,r)}),(0,Y.jsx)(V,{id:`pkg-name`,"data-testid":`package-name-input`,placeholder:`Acme CRM`,value:o,onChange:e=>s(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-version`,children:q(`engine.packages.create.version`,r)}),(0,Y.jsx)(V,{id:`pkg-version`,placeholder:`0.1.0`,value:c,onChange:e=>l(e.target.value),"aria-invalid":!!c&&!h}),!!c&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.versionInvalid`,r)})]}),f&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:q(`engine.cancel`,r)}),(0,Y.jsx)(I,{onClick:_,disabled:!g,children:q(u?`engine.packages.create.creating`:`engine.packages.create.submit`,r)})]})]})})}function So({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:e}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-right break-all`,children:t})]})}function Co({pkg:e,open:t,onOpenChange:n,onSaved:r}){let i=X.useMemo(()=>ca(),[]),[a,o]=X.useState(``),[s,c]=X.useState(``),[l,u]=X.useState(``),[d,f]=X.useState(!1),[p,m]=X.useState(null);X.useEffect(()=>{t&&e&&(o(e.manifest.name??``),c(e.manifest.description??``),u(e.manifest.version??``),m(null),f(!1))},[t,e]);let h=!l.trim()||bo.test(l.trim()),g=!!a.trim()&&h&&!d;async function _(){if(!(!g||!e)){f(!0),m(null);try{let t=await go(`${ho}/${encodeURIComponent(e.manifest.id)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:a.trim(),description:s.trim(),version:l.trim()})});try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}r(t),n(!1)}catch(e){m(e?.message??q(`engine.packages.edit.failed`,i))}finally{f(!1)}}}return(0,Y.jsx)(we,{open:t,onOpenChange:n,children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:q(`engine.packages.edit.title`,i)}),(0,Y.jsx)(br,{className:`font-mono text-xs`,children:e?.manifest.id})]}),(0,Y.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-name`,children:q(`engine.packages.create.name`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-name`,"data-testid":`package-edit-name-input`,value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-desc`,children:q(`engine.packages.detail.description`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-desc`,"data-testid":`package-edit-desc-input`,value:s,onChange:e=>c(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-version`,children:q(`engine.packages.create.version`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-version`,value:l,onChange:e=>u(e.target.value),"aria-invalid":!!l.trim()&&!h}),!!l.trim()&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.versionInvalid`,i)})]}),p&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:p})]})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`outline`,onClick:()=>n(!1),disabled:d,children:q(`engine.cancel`,i)}),(0,Y.jsx)(I,{onClick:_,disabled:!g,"data-testid":`package-edit-save`,children:q(d?`engine.packages.edit.saving`:`engine.packages.edit.save`,i)})]})]})})}function wo({pkg:e,appBase:t,open:r,onOpenChange:i,onChanged:a}){let o=X.useMemo(()=>ca(),[]),[s,c]=X.useState(null),[l,u]=X.useState(null),[d,f]=X.useState(null),[p,m]=X.useState(!1);if(X.useEffect(()=>{u(null),c(null)},[e?.manifest.id]),X.useEffect(()=>{let t=e?.manifest.id;if(!r||!t){f(null);return}let n=!1;return go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(t)}`).then(e=>{n||f(e?.drafts??[])}).catch(()=>{n||f([])}),()=>{n=!0}},[r,e?.manifest.id]),!e)return null;let h=e.manifest.id,g=e.enabled!==!1&&e.status!==`disabled`,_=e.manifest.scope===`system`||e.manifest.scope===`cloud`;async function v(e,t,n){c(e),u(null);try{await t(),u({kind:`ok`,text:n}),a()}catch(e){u({kind:`err`,text:e?.message??q(`engine.packages.detail.actionFailed`,o)})}finally{c(null)}}return(0,Y.jsx)(Ne,{open:r,onOpenChange:i,children:(0,Y.jsxs)(Nt,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Oe,{children:[(0,Y.jsxs)(Ke,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Yr,{className:`h-4 w-4`}),e.manifest.name||h]}),(0,Y.jsx)(Vt,{className:`font-mono text-xs`,children:h})]}),(0,Y.jsxs)(`div`,{className:`mt-4`,children:[(0,Y.jsx)(So,{label:q(`engine.packages.col.version`,o),children:e.manifest.version||`—`}),(0,Y.jsx)(So,{label:q(`engine.packages.detail.type`,o),children:e.manifest.type||`—`}),(0,Y.jsx)(So,{label:q(`engine.packages.col.scope`,o),children:(0,Y.jsx)(_o,{scope:e.manifest.scope})}),(0,Y.jsx)(So,{label:q(`engine.packages.col.status`,o),children:(0,Y.jsx)(vo,{pkg:e})}),e.manifest.description&&(0,Y.jsx)(So,{label:q(`engine.packages.detail.description`,o),children:e.manifest.description})]}),t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Sr,{className:`my-4`}),(0,Y.jsxs)(n,{to:`${t}/metadata/object?package=${encodeURIComponent(h)}`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5`}),q(`engine.packages.detail.browseMetadata`,o)]})]}),d&&d.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Sr,{className:`my-4`}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`p`,{className:`flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:[q(`engine.packages.detail.pendingChanges`,o),(0,Y.jsx)(U,{variant:`secondary`,children:d.length})]}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:q(`engine.packages.detail.pendingHint`,o)}),!_&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(I,{size:`sm`,onClick:()=>v(`publish-drafts`,()=>go(`${ho}/${encodeURIComponent(h)}/publish-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{let e=await go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(h)}`);f(e?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(J(`engine.packages.detail.publishDraftsPartial`,o,{published:e.publishedCount??0,failed:e.failedCount}));return e}),q(`engine.packages.detail.publishDraftsOk`,o)),disabled:!!s,children:[(0,Y.jsx)(je,{className:`mr-1.5 h-3.5 w-3.5`}),s===`publish-drafts`?q(`engine.packages.detail.publishing`,o):J(`engine.packages.detail.publishApp`,o,{count:d.length})]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`discard-drafts`,()=>go(`${ho}/${encodeURIComponent(h)}/discard-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{let e=await go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(h)}`);f(e?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(J(`engine.packages.detail.discardDraftsPartial`,o,{discarded:e.discardedCount??0,failed:e.failedCount}));return e}),q(`engine.packages.detail.discardDraftsOk`,o)),disabled:!!s,children:[(0,Y.jsx)(Bt,{className:`mr-1.5 h-3.5 w-3.5`}),s===`discard-drafts`?q(`engine.packages.detail.discarding`,o):J(`engine.packages.detail.discardChanges`,o,{count:d.length})]})]}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:d.map(e=>t?(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(n,{to:`${t}/metadata/${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}?review=1`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,Y.jsx)(Se,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]})},`${e.type}/${e.name}`):(0,Y.jsxs)(`li`,{className:`inline-flex items-center gap-1.5 text-sm`,children:[(0,Y.jsx)(Se,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]},`${e.type}/${e.name}`))})]})]}),(0,Y.jsx)(Sr,{className:`my-4`}),_?(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:q(`engine.packages.detail.kernelReadOnly`,o)}):(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.packages.detail.actions`,o)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>m(!0),disabled:!!s,children:[(0,Y.jsx)(ln,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.detail.edit`,o)]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>v(`publish`,()=>go(`${ho}/${encodeURIComponent(h)}/publish`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(e=>{if(e&&e.success===!1){let t=e.validationErrors?.length??0;throw Error(t?J(`engine.packages.detail.publishBlocked`,o,{count:t}):e.validationErrors?.[0]?.message||q(`engine.packages.detail.nothingToPublish`,o))}return e}),q(`engine.packages.detail.published`,o)),disabled:!!s,children:[(0,Y.jsx)(je,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`publish`?`engine.packages.detail.publishing`:`engine.packages.detail.publish`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`revert`,()=>go(`${ho}/${encodeURIComponent(h)}/revert`,{method:`POST`}),q(`engine.packages.detail.reverted`,o)),disabled:!!s,children:[(0,Y.jsx)(Bt,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.detail.revert`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`toggle`,()=>go(`${ho}/${encodeURIComponent(h)}/${g?`disable`:`enable`}`,{method:`PATCH`}),q(g?`engine.packages.detail.disabled`:`engine.packages.detail.enabled`,o)),disabled:!!s,children:[g?(0,Y.jsx)(en,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(Ut,{className:`mr-1.5 h-3.5 w-3.5`}),q(g?`engine.packages.detail.disable`:`engine.packages.detail.enable`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`export`,async()=>{let e=await go(`${ho}/${encodeURIComponent(h)}/export`),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${h}.package.json`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)},q(`engine.packages.detail.exported`,o)),disabled:!!s,children:[(0,Y.jsx)(ee,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`export`?`engine.packages.detail.exporting`:`engine.packages.detail.export`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{let t=window.prompt(q(`engine.packages.detail.duplicatePrompt`,o),`${h}-copy`);if(!(!t||!t.trim())){c(`duplicate`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}/duplicate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({targetPackageId:t.trim(),targetName:`${e?.manifest.name??h} (copy)`})}),u({kind:`ok`,text:q(`engine.packages.detail.duplicated`,o)}),a()}catch(e){u({kind:`err`,text:e?.message??`Duplicate failed`})}finally{c(null)}}},disabled:!!s,children:[(0,Y.jsx)(xn,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`duplicate`?`engine.packages.detail.duplicating`:`engine.packages.detail.duplicate`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{if(window.confirm(J(`engine.packages.detail.adoptConfirm`,o,{name:e?.manifest.name||h}))){c(`adopt`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}/adopt-orphans`,{method:`POST`}),u({kind:`ok`,text:q(`engine.packages.detail.adopted`,o)}),a()}catch(e){u({kind:`err`,text:e?.message??`Adopt failed`})}finally{c(null)}}},disabled:!!s,children:[(0,Y.jsx)(bn,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`adopt`?`engine.packages.detail.adopting`:`engine.packages.detail.adoptOrphans`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{if(!window.confirm(J(`engine.packages.detail.deleteConfirm`,o,{name:e?.manifest.name||h})))return;let t=window.confirm(q(`engine.packages.detail.deleteKeepData`,o))?``:`?keepData=true`;c(`delete`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}${t}`,{method:`DELETE`}),a(),i(!1)}catch(e){u({kind:`err`,text:e?.message??q(`engine.packages.detail.deleteFailed`,o)})}finally{c(null)}},disabled:!!s,className:`text-destructive hover:bg-destructive/10 hover:text-destructive`,children:[(0,Y.jsx)(Zt,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`delete`?`engine.packages.detail.deleting`:`engine.packages.detail.deleteApp`,o)]})]})]}),l&&(0,Y.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${l.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:l.text}),(0,Y.jsx)(Co,{pkg:e,open:p,onOpenChange:m,onSaved:()=>{u({kind:`ok`,text:q(`engine.packages.edit.saved`,o)}),a()}})]})})}function To(){let e=X.useMemo(()=>ca(),[]),{pathname:t}=r(),n=X.useMemo(()=>{let e=t.indexOf(`/component`);return e>=0?t.slice(0,e):t},[t]),[i,a]=X.useState([]),[o,s]=X.useState(!0),[c,l]=X.useState(null),[u,d]=X.useState(``),[f,p]=X.useState(!1),[m,h]=X.useState(!1),[g,_]=X.useState(null),[v,y]=X.useState(!1),b=X.useRef(null),[x,S]=X.useState(!1),[C,w]=X.useState(null),T=X.useCallback(async()=>{s(!0),l(null);try{let e=await go(ho),t=Array.isArray(e?.packages)?e.packages:[];t.sort((e,t)=>{let n=e.manifest.scope===`project`?0:1,r=t.manifest.scope===`project`?0:1;return n===r?(e.manifest.name||e.manifest.id).localeCompare(t.manifest.name||t.manifest.id):n-r}),a(t)}catch(t){l(t?.message??q(`engine.packages.loadFailed`,e))}finally{s(!1)}},[e]);X.useEffect(()=>{T()},[T]),X.useEffect(()=>{if(!g)return;let e=i.find(e=>e.manifest.id===g.manifest.id);e&&e!==g&&_(e)},[i,g]);let E=X.useMemo(()=>{let e=u.trim().toLowerCase();return i.filter(t=>(t.manifest.scope===`system`||t.manifest.scope===`cloud`)&&!f?!1:e?t.manifest.id.toLowerCase().includes(e)||(t.manifest.name||``).toLowerCase().includes(e):!0)},[i,u,f]),D=e=>{_(e),y(!0)},O=async t=>{let n=t.target.files?.[0];if(t.target.value=``,n){S(!0),w(null);try{let t=await n.text(),r;try{r=JSON.parse(t)}catch{throw Error(q(`engine.packages.import.invalidJson`,e))}if(!r||typeof r!=`object`||!r.id&&!r.name)throw Error(q(`engine.packages.import.invalidPackage`,e));let i=await go(`/api/v1/marketplace/install-local`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:r})});w({kind:`ok`,text:J(`engine.packages.import.success`,e,{id:i?.manifestId??r.id})}),await T()}catch(t){w({kind:`err`,text:t?.message??q(`engine.packages.import.failed`,e)})}finally{S(!1)}}},k=i.filter(e=>e.manifest.scope===`system`||e.manifest.scope===`cloud`).length;return(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl px-6 py-6`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`rounded-lg bg-primary/10 p-2 text-primary`,children:(0,Y.jsx)(Yr,{className:`h-5 w-5`})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:q(`engine.packages.title`,e)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:q(`engine.packages.description`,e)})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Rt,{className:`mr-1.5 h-3.5 w-3.5 ${o?`animate-spin`:``}`}),q(`engine.packages.refresh`,e)]}),(0,Y.jsx)(`input`,{ref:b,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:O}),(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(Se,{className:`mr-1.5 h-3.5 w-3.5`}),q(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(z,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.new`,e)]})]})]}),C&&(0,Y.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${C.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:C.text}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`relative w-full max-w-xs`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.packages.search`,e),value:u,onChange:e=>d(e.target.value)})]}),k>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(_n,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(H,{htmlFor:`show-kernel`,className:`text-sm text-muted-foreground`,children:J(`engine.packages.showPlatform`,e,{count:k})})]})]}),(0,Y.jsx)(`div`,{className:`mt-4 rounded-lg border`,children:o?(0,Y.jsx)(`div`,{className:`space-y-2 p-4`,children:[0,1,2].map(e=>(0,Y.jsx)(se,{className:`h-10 w-full`},e))}):c?(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 p-4 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:c})]}):E.length===0?(0,Y.jsx)(`div`,{className:`p-8`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.packages.empty`,e)}),(0,Y.jsx)(_r,{children:i.length===0?q(`engine.packages.emptyCreate`,e):q(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(or,{children:[(0,Y.jsx)(Br,{children:(0,Y.jsxs)(Zr,{children:[(0,Y.jsx)(cn,{children:q(`engine.packages.col.name`,e)}),(0,Y.jsx)(cn,{children:`ID`}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.version`,e)}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.scope`,e)}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(Vn,{children:E.map(e=>(0,Y.jsxs)(Zr,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(Rn,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(Rn,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(Rn,{children:e.manifest.version||`—`}),(0,Y.jsx)(Rn,{children:(0,Y.jsx)(_o,{scope:e.manifest.scope})}),(0,Y.jsx)(Rn,{children:(0,Y.jsx)(vo,{pkg:e})})]},e.manifest.id))})]})}),(0,Y.jsx)(xo,{open:m,onOpenChange:h,onCreated:async()=>{await T()}}),(0,Y.jsx)(wo,{pkg:g,appBase:n,open:v,onOpenChange:y,onChanged:()=>void T()})]})}var Eo=new Set([`field`,`package`]),Do={data:wr,ui:Dn,automation:$e,ai:sn,system:it,platform:it,identity:Et,security:Et},Oo={data:{from:`from-sky-500`,to:`to-blue-600`,ring:`hover:ring-sky-400/40`,text:`text-sky-600 dark:text-sky-400`},ui:{from:`from-violet-500`,to:`to-fuchsia-600`,ring:`hover:ring-violet-400/40`,text:`text-violet-600 dark:text-violet-400`},automation:{from:`from-amber-500`,to:`to-orange-600`,ring:`hover:ring-amber-400/40`,text:`text-amber-600 dark:text-amber-400`},ai:{from:`from-pink-500`,to:`to-rose-600`,ring:`hover:ring-pink-400/40`,text:`text-pink-600 dark:text-pink-400`},identity:{from:`from-emerald-500`,to:`to-teal-600`,ring:`hover:ring-emerald-400/40`,text:`text-emerald-600 dark:text-emerald-400`},security:{from:`from-emerald-500`,to:`to-teal-600`,ring:`hover:ring-emerald-400/40`,text:`text-emerald-600 dark:text-emerald-400`},system:{from:`from-slate-500`,to:`to-slate-700`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`},platform:{from:`from-slate-500`,to:`to-slate-700`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`},other:{from:`from-slate-400`,to:`to-slate-600`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`}},ko=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ao=[`object`,`view`,`page`,`dashboard`,`report`,`flow`,`action`,`agent`],jo={object:fr,dashboard:A,page:Fe,report:nn,record:Er,metadata:Dn};function Mo(){let e=new Date().getHours();return e<12?`engine.home.greetingMorning`:e<18?`engine.home.greetingAfternoon`:`engine.home.greetingEvening`}function No(e,t){let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Date.now()-n,i=t.startsWith(`zh`),a=Math.floor(r/6e4);if(a<1)return i?`刚刚`:`just now`;if(a<60)return i?`${a} 分钟前`:`${a}m ago`;let o=Math.floor(a/60);if(o<24)return i?`${o} 小时前`:`${o}h ago`;let s=Math.floor(o/24);if(s<7)return i?`${s} 天前`:`${s}d ago`;let c=Math.floor(s/7);return i?`${c} 周前`:`${c}w ago`}function Po(){let e=pi(),{loading:t,entries:r}=di(e),{recentItems:i}=ri(),a=X.useMemo(()=>ca(),[]),[s,c]=o(),[l,u]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;u(so(n))}catch{t||u([])}})(),()=>{t=!0}},[e]);let d=s.get(`package`),f=X.useMemo(()=>l?d&&l.some(e=>e.id===d)?d:l[0]?.id??null:null,[l,d]);X.useEffect(()=>{if(!l||l.length===0||d&&l.some(e=>e.id===d))return;let e=new URLSearchParams(s);e.set(`package`,l[0].id),c(e,{replace:!0})},[l,d]);let p=f?`?package=${encodeURIComponent(f)}`:``,m=`metadata${p}`,h=`component/developer/packages${p}`,{summary:g,countsByType:_,packagesByType:v,loading:y}=fi(e,`warning`,f??void 0),b=X.useMemo(()=>r.filter(e=>Eo.has(e.type)||!f?!1:(v[e.type]??[]).includes(f)),[f,r,v]),x=X.useMemo(()=>b.filter(e=>e.allowOrgOverride||e.allowRuntimeCreate),[b]),S=X.useMemo(()=>{let e={};for(let t of b)(e[t.domain??`other`]??=[]).push(t);for(let t of Object.values(e))t.sort((e,t)=>(_[t.type]??0)-(_[e.type]??0));return Object.entries(e).sort(([e],[t])=>(ko.indexOf(e)===-1?99:ko.indexOf(e))-(ko.indexOf(t)===-1?99:ko.indexOf(t)))},[b,_]),C=X.useMemo(()=>{let e=new Map(x.map(e=>[e.type,e]));return Ao.map(t=>e.get(t)).filter(Boolean)},[x]),w=g.total,T=!t&&!y&&w===0;return t||l===null||f&&y?(0,Y.jsx)(`div`,{className:`flex h-full items-center justify-center p-8 text-sm text-muted-foreground`,children:q(`engine.home.loading`,a)}):(0,Y.jsxs)(`div`,{className:`h-full overflow-auto bg-gradient-to-b from-muted/40 to-background`,children:[(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-6xl px-6 py-6 space-y-6`,children:[(0,Y.jsxs)(`section`,{className:`relative overflow-hidden rounded-3xl bg-gradient-to-br from-indigo-600 via-violet-600 to-fuchsia-600 px-7 py-8 text-white shadow-xl shadow-violet-500/20`,children:[(0,Y.jsx)(`div`,{className:`pointer-events-none absolute -right-16 -top-20 h-64 w-64 rounded-full bg-white/15 blur-3xl`}),(0,Y.jsx)(`div`,{className:`pointer-events-none absolute -bottom-24 left-1/3 h-56 w-56 rounded-full bg-fuchsia-300/20 blur-3xl`}),(0,Y.jsx)(`div`,{className:`pointer-events-none absolute inset-0 opacity-[0.12]`,style:{backgroundImage:`radial-gradient(currentColor 1px, transparent 1px)`,backgroundSize:`18px 18px`}}),(0,Y.jsxs)(`div`,{className:`relative flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`max-w-xl`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-white/80`,children:[(0,Y.jsx)(sn,{className:`h-4 w-4`}),q(Mo(),a)]}),(0,Y.jsx)(`h1`,{className:`mt-2 text-3xl font-bold tracking-tight sm:text-4xl`,children:`Studio`}),(0,Y.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-white/85 sm:text-base`,children:q(`engine.home.subtitle`,a)}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2.5`,children:[(0,Y.jsx)(I,{asChild:!0,size:`sm`,variant:`ghost`,className:`bg-white/10 text-white shadow-sm ring-1 ring-white/25 hover:bg-white/20 hover:text-white`,children:(0,Y.jsxs)(n,{to:m,children:[(0,Y.jsx)(Dn,{className:`mr-1.5 h-4 w-4`}),q(`engine.home.browseAll`,a)]})}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 rounded-full bg-white/15 px-3 py-1.5 text-xs font-medium text-white/90 backdrop-blur-sm`,children:[(0,Y.jsx)(Kn,{className:`h-3.5 w-3.5`}),q(`engine.directory.quickFind`,a),` ⌘⇧M`]})]})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,Y.jsx)(Fo,{value:b.length,label:q(`engine.home.statTypes`,a)}),(0,Y.jsx)(Fo,{value:x.length,label:q(`engine.home.statWritable`,a)}),(0,Y.jsx)(Fo,{value:l.length,label:q(`engine.home.statPackages`,a)})]})]})]}),(0,Y.jsxs)(`section`,{className:`grid grid-cols-2 gap-4 lg:grid-cols-4`,children:[(0,Y.jsx)(Io,{icon:Dn,from:`from-indigo-500`,to:`to-violet-600`,value:b.length,label:q(`engine.home.statTypes`,a),to_link:m}),(0,Y.jsx)(Io,{icon:Yn,from:`from-sky-500`,to:`to-blue-600`,value:x.length,label:q(`engine.home.statWritable`,a),to_link:m}),(0,Y.jsx)(Io,{icon:Yr,from:`from-emerald-500`,to:`to-teal-600`,value:l.length,label:q(`engine.home.statPackages`,a),to_link:h}),(0,Y.jsxs)(n,{to:T?m:`metadata/_diagnostics${p}`,className:`group relative flex flex-col justify-between overflow-hidden rounded-2xl border p-4 transition-all hover:-translate-y-0.5 hover:shadow-lg `+(T?`border-emerald-200 bg-emerald-50/60 dark:border-emerald-900/50 dark:bg-emerald-950/30`:`border-amber-300 bg-amber-50/70 dark:border-amber-900/50 dark:bg-amber-950/30`),children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br text-white shadow-sm `+(T?`from-emerald-500 to-teal-600`:`from-amber-500 to-orange-600`),children:T?(0,Y.jsx)(Yn,{className:`h-5 w-5`}):(0,Y.jsx)(R,{className:`h-5 w-5`})}),(0,Y.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground transition-transform group-hover:translate-x-0.5`})]}),(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums`,children:T?q(`engine.home.allHealthy`,a):w}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:q(T?`engine.home.allHealthyHint`:`engine.home.statIssues`,a)})]})]})]}),C.length>0&&(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(Lo,{icon:z,title:q(`engine.home.quickActions`,a),hint:q(`engine.home.quickActionsHint`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2.5`,children:C.map(e=>(0,Y.jsx)(I,{asChild:!0,variant:`outline`,size:`sm`,className:`group rounded-full border-transparent bg-muted hover:bg-primary/10 hover:text-primary`,children:(0,Y.jsxs)(n,{to:`metadata/${encodeURIComponent(e.type)}/new${p}`,children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5 text-primary transition-transform group-hover:rotate-90`}),J(`engine.home.newItem`,a,{label:ia(e.type,a,e.label)})]})},e.type))})]}),(0,Y.jsxs)(`div`,{className:`grid gap-6 lg:grid-cols-3`,children:[(0,Y.jsxs)(`section`,{className:`lg:col-span-2`,children:[(0,Y.jsx)(Lo,{icon:Dn,title:q(`engine.home.explore`,a),hint:q(`engine.home.exploreHint`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 grid gap-4 sm:grid-cols-2`,children:S.map(([e,t])=>(0,Y.jsx)(Ro,{domain:e,group:t,countsByType:_,locale:a,packageSuffix:p},e))})]}),(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(Lo,{icon:Ln,title:q(`engine.home.recent`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 rounded-2xl border bg-card p-2`,children:i.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-8 text-center text-xs text-muted-foreground`,children:q(`engine.home.recentEmpty`,a)}):(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:i.slice(0,8).map(e=>{let t=jo[e.type]??Er;return(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(n,{to:e.href,className:`group flex items-center gap-3 rounded-xl px-3 py-2 transition-colors hover:bg-accent`,children:[(0,Y.jsx)(`span`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground transition-colors group-hover:bg-primary/10 group-hover:text-primary`,children:(0,Y.jsx)(t,{className:`h-4 w-4`})}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:e.label}),(0,Y.jsx)(`span`,{className:`block text-[11px] text-muted-foreground`,children:No(e.visitedAt,a)})]}),(0,Y.jsx)(Gr,{className:`h-3.5 w-3.5 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})},e.id)})})})]})]})]}),(0,Y.jsx)(ao,{})]})}function Fo({value:e,label:t}){return(0,Y.jsxs)(`div`,{className:`rounded-2xl bg-white/15 px-4 py-3 text-center backdrop-blur-sm ring-1 ring-white/20`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums leading-none`,children:e}),(0,Y.jsx)(`div`,{className:`mt-1 text-[11px] font-medium text-white/80`,children:t})]})}function Io({icon:e,from:t,to:r,value:i,label:a,to_link:o}){return(0,Y.jsxs)(n,{to:o,className:`group relative flex flex-col justify-between overflow-hidden rounded-2xl border bg-card p-4 transition-all hover:-translate-y-0.5 hover:border-primary/40 hover:shadow-lg`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${t} ${r} text-white shadow-sm`,children:(0,Y.jsx)(e,{className:`h-5 w-5`})}),(0,Y.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground opacity-0 transition-all group-hover:translate-x-0.5 group-hover:opacity-100`})]}),(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums`,children:i}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:a})]})]})}function Lo({icon:e,title:t,hint:n}){return(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2.5`,children:[(0,Y.jsxs)(`h2`,{className:`flex items-center gap-2 text-base font-semibold`,children:[(0,Y.jsx)(e,{className:`h-4 w-4 text-muted-foreground`}),t]}),n&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n})]})}function Ro({domain:e,group:t,countsByType:r,locale:i,packageSuffix:a}){let o=Do[e]??Er,s=Oo[e]??Oo.other,c=t.slice(0,6),l=t.length-c.length;return(0,Y.jsxs)(`div`,{className:`group rounded-2xl border bg-card p-4 ring-1 ring-transparent transition-all hover:-translate-y-0.5 hover:shadow-lg ${s.ring}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br ${s.from} ${s.to} text-white shadow-sm`,children:(0,Y.jsx)(o,{className:`h-[18px] w-[18px]`})}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`truncate text-sm font-semibold`,children:aa(e,i)}),(0,Y.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.length,` `,q(`engine.home.typesLower`,i)]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:[c.map(e=>(0,Y.jsxs)(n,{to:`metadata/${encodeURIComponent(e.type)}${a}`,className:`inline-flex items-center gap-1.5 rounded-lg border bg-background px-2 py-1 text-xs transition-colors hover:border-primary/50 hover:bg-accent`,children:[(0,Y.jsx)(`span`,{className:`truncate max-w-[10rem]`,children:ia(e.type,i,e.label)}),(0,Y.jsx)(`span`,{className:`tabular-nums text-[10px] text-muted-foreground`,children:r[e.type]??0})]},e.type)),l>0&&(0,Y.jsxs)(n,{to:`metadata${a}`,className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-xs font-medium ${s.text} hover:underline`,children:[`+`,l]})]})]})}function zo({entry:e,itemName:t,subtitle:i,stats:a,actions:o,children:s}){let c=e?.type??``,l=X.useMemo(()=>ca(),[]),u=ia(c,l,e?.label),{pathname:d}=r(),f=X.useMemo(()=>{let e=d.indexOf(`/metadata`);return e>=0?d.slice(0,e+9):`/metadata`},[d]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[t?(0,Y.jsxs)(`div`,{className:`px-6 py-2.5 border-b bg-background flex items-center gap-3 min-h-[44px]`,children:[(0,Y.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground min-w-0`,children:[(0,Y.jsx)(n,{to:f,className:`hover:text-foreground shrink-0`,children:q(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(oe,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(n,{to:`${f}/${encodeURIComponent(c)}`,className:`hover:text-foreground shrink-0`,children:u}),(0,Y.jsx)(oe,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-foreground font-medium font-mono truncate`,title:t,children:t})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[e?.domain&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:aa(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] h-5 px-1.5 `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] h-5 px-1.5 bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,l)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] h-5 px-1.5 text-muted-foreground`,children:q(`engine.badge.readOnly`,l)})]}),i&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:i}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[a?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-1 px-2 py-0.5 rounded border bg-muted/30`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,Y.jsx)(`span`,{className:`text-xs font-semibold tabular-nums`,children:e.value})]},t)),o]})]}):(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground mb-2`,children:[(0,Y.jsx)(n,{to:f,className:`hover:text-foreground`,children:q(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(oe,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{className:`text-foreground font-medium`,children:u})]}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold truncate`,children:u}),(0,Y.jsx)(`code`,{className:`text-xs font-mono text-muted-foreground`,children:c}),e?.domain&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:aa(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,l)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:q(`engine.badge.readOnly`,l)})]}),i&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1`,children:i}),!i&&e?.description&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,children:e.description})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[a?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex flex-col items-end px-3 py-1 rounded border bg-muted/30 min-w-[64px]`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,Y.jsx)(`span`,{className:`text-sm font-semibold tabular-nums`,children:e.value})]},t)),o]})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:s})]})}var Bo={primary:`default`,secondary:`secondary`,danger:`destructive`,ghost:`ghost`,link:`link`};function Vo(e,t,n){return e.indexOf("${")===-1?e:e.replace(/\$\{(param|ctx)\.([\w.]+)\}/g,(e,r,i)=>{let a=r===`param`?n:t,o=i.split(`.`).reduce((e,t)=>e?.[t],a);return o==null?``:encodeURIComponent(String(o))})}function Ho({entry:e,location:t,recordId:n,onAfter:r}){let[i,a]=X.useState(null),[o,s]=X.useState({open:!1,params:[]}),[c,l]=X.useState({open:!1}),u=X.useMemo(()=>d(),[]),f=X.useMemo(()=>(e?.actions??[]).filter(e=>!e.locations||e.locations.length===0||e.locations.includes(t)),[e?.actions,t]);if(f.length===0)return null;let p=(e,t)=>new Promise(n=>{s({open:!0,params:e,title:t,resolve:n})}),m=async e=>{let t=e.label??e.name;if(e.type!==`api`){ei.error(`Action “${t}”: type "${e.type??`script`}" is not supported here yet.`);return}if(e.confirmText&&!window.confirm(e.confirmText))return;let i;if(Array.isArray(e.params)&&e.params.length>0){let n=await p(e.params,t);if(n==null)return;i=n}else i=e.params??{};let o={recordId:n,origin:window.location.origin},s=Vo(e.target??``,o,i);if(!s){ei.error(`Action “${t}” has no target.`);return}let c=``.replace(/\/+$/,``),d=/^https?:\/\//i.test(s)?s:`${c}${s}`,f=(e.method||`POST`).toUpperCase();a(e.name);try{let n={method:f,headers:{"Content-Type":`application/json`},credentials:`include`};f!==`GET`&&f!==`DELETE`&&(n.body=JSON.stringify(i));let a=await u(d,n),o=null;try{o=await a.json()}catch{}if(!a.ok||o&&o.success===!1){let n=o?.error||o?.message||`HTTP ${a.status} ${a.statusText}`.trim();ei.error(`${e.errorMessage?`${e.errorMessage}: `:``}${t}: ${n}`);return}if(e.resultDialog)l({open:!0,spec:e.resultDialog,data:o??{}});else{let n=e.successMessage||(typeof o?.message==`string`?o.message:`${t} ✓`);ei.success(n)}e.refreshAfter&&r?.()}catch(e){ei.error(`${t}: ${e?.message??String(e)}`)}finally{a(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[f.map(e=>{let t=e.icon?ta(e.icon):null,n=i===e.name;return(0,Y.jsxs)(I,{size:`sm`,variant:Bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):t?(0,Y.jsx)(t,{className:`h-4 w-4 mr-1`}):null,e.label??e.name]},e.name)}),(0,Y.jsx)(si,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(oi,{state:c,onAcknowledge:()=>l({open:!1})})]})}function Uo(e){let t=(Array.isArray(e)?e:[e]).map(e=>e.split(`.`));return(e,n)=>{for(let r of t){let t=e;for(let e of r)if(t&&typeof t==`object`&&e in t)t=t[e];else{t=void 0;break}if(t===n)return!0}return!1}}var Wo=new Map;function Go(e){let t=Wo.get(e.type);if(!t){Wo.set(e.type,e);return}let n={...t};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);Wo.set(e.type,n)}function Ko(e){return Wo.get(e)}function qo(e){let t=[];for(let n of Wo.values())if(n.anchors?.length)for(let r of n.anchors)r.anchorType===e&&t.push({type:n.type,config:n,anchor:r});return t.sort((e,t)=>{let n=e.anchor.order??100,r=t.anchor.order??100;if(n!==r)return n-r;let i=e.anchor.groupLabel??e.config.label??e.type,a=t.anchor.groupLabel??t.config.label??t.type;return i.localeCompare(a)}),t}function Jo(e,t){let n=Wo.get(e)??{type:e};return{...n,type:e,label:n.label??t?.label??e,description:n.description??t?.description,domain:n.domain??t?.domain??`other`,allowOrgOverride:t?.allowOrgOverride,defaultSchema:n.defaultSchema}}function Yo(e,t){if(t===`overlay`||t===`runtime`)return`runtime`;if(t===`code`||t===`artifact`)return`artifact`;let n=e._packageId;return!n||n===`sys_metadata`?`runtime`:`artifact`}function Xo({type:e}){let t=s(),n=e??t.type??``;if(n===`package`)return(0,Y.jsx)(l,{to:`/apps/${t.appName??`studio`}/component/developer/packages`,replace:!0});let r=Ko(n);if(r?.ListPage){let e=r.ListPage;return(0,Y.jsx)(e,{type:n})}return(0,Y.jsx)(Zo,{type:n,appName:t.appName})}function Zo({type:e,appName:t}){let r=i(),a=pi(),{entries:s}=di(a),c=s.find(t=>t.type===e),l=Jo(e,c),[u,d]=X.useState([]),[f,p]=X.useState(!0),[m,h]=X.useState(null),[g,_]=X.useState(``),[v,y]=X.useState(`all`),[b,x]=o(),[S,C]=X.useState(0),[w,T]=X.useState(null);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await a.list(`package`);if(e)return;T(so(t))}catch{e||T([])}})(),()=>{e=!0}},[a]);let[E,D]=X.useState(null);X.useEffect(()=>{let e=!1;if(!t){D(null);return}return(async()=>{try{let n=await a.list(`app`);if(e)return;let r=(n??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).find(e=>e?.name===t||e?._packageId===t);D(r?._packageId??null)}catch{e||D(null)}})(),()=>{e=!0}},[a,t]);let O=b.get(`package`),k=X.useMemo(()=>{if(!w)return null;if(O&&w.some(e=>e.id===O))return O;if(w.length===0)return null;if(E&&w.some(e=>e.id===E))return E;let e=new Map;for(let t of u){let n=t.item?._packageId;n&&n!==`sys_metadata`&&e.set(n,(e.get(n)??0)+1)}let t=null,n=0;for(let r of w){let i=e.get(r.id)??0;i>n&&(t=r.id,n=i)}return t??w[0]?.id??null},[w,O,u,E]);X.useEffect(()=>{if(!w||w.length===0||O&&w.some(e=>e.id===O)||!(E&&w.some(e=>e.id===E))&&u.length===0||!k)return;let e=new URLSearchParams(b);e.set(`package`,k),x(e,{replace:!0})},[w,O,u,k,E]);let A=k?`?package=${encodeURIComponent(k)}`:``,[j,M]=X.useState(!1),ee=X.useCallback(()=>{let e=w??[];if(w!==null&&e.length===0){M(!0);return}if(e.length>0&&!k){r(`./new?package=${encodeURIComponent(e[0].id)}`);return}r(`./new${A}`)},[w,k,A,r]);X.useEffect(()=>{let t=!1;return p(!0),h(null),(async()=>{try{let n=await a.list(e);if(t)return;let r=(n??[]).map(e=>{let t=(e&&typeof e==`object`&&`item`in e?e.item:e)??{},n=t?._diagnostics??e?._diagnostics??void 0;return{raw:e,item:t,source:Yo(t,e?.source),diagnostics:n}});d(r),p(!1)}catch(e){t||(h(e?.message??String(e)),p(!1))}})(),()=>{t=!0}},[a,e,S]);let te=l.searchableFields??[`name`,`label`,`description`],N=X.useMemo(()=>u.filter(e=>l.listFilter&&!l.listFilter(e.item)||!k?!1:e.item?._packageId===k),[u,k,l]),ne=N.filter(e=>!(!mi(e.item,g,te)||v!==`all`&&e.source!==v)),re=X.useMemo(()=>{let e={all:N.length,artifact:0,runtime:0};for(let t of N)e[t.source]++;return e},[N]),P=X.useMemo(()=>N.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[N]),ie=X.useMemo(()=>N.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[N]),ae=l.listColumns??Qo(l.primaryKey??`name`),F=ca(),oe=ia(e,F,c?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=q(t,F);return n===t?e.label:n};return(0,Y.jsx)(zo,{entry:c??{type:e,label:e},stats:[{label:q(`engine.list.items`,F),value:N.length},{label:q(`engine.list.filtered`,F),value:ne.length},...P>0?[{label:q(`engine.list.invalid`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(R,{className:`w-3.5 h-3.5`}),P]})}]:[],...ie>0?[{label:q(`engine.list.warnings`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(R,{className:`w-3.5 h-3.5`}),ie]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ho,{entry:c,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:q(`engine.list.refresh`,F),children:(0,Y.jsx)(Rt,{className:`h-4 w-4`})}),(c?.allowOrgOverride||c?.allowRuntimeCreate)&&(0,Y.jsxs)(I,{size:`sm`,variant:l.createFields?`default`:`outline`,onClick:ee,title:l.createFields?J(`engine.list.createHint`,F,{type:oe}):void 0,children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),q(`engine.list.create`,F)]})]}),children:(0,Y.jsxs)(`div`,{className:`p-6 space-y-4`,children:[(0,Y.jsx)(xo,{open:j,onOpenChange:M,onCreated:e=>r(`./new?package=${encodeURIComponent(e)}`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 min-w-[200px] max-w-md`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.list.search`,F),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(He,{value:v,onValueChange:y,children:[(0,Y.jsx)(rn,{className:`w-[180px]`,children:(0,Y.jsx)(_t,{})}),(0,Y.jsxs)($t,{children:[(0,Y.jsxs)(qt,{value:`all`,children:[q(`engine.list.allSources`,F),` (`,re.all,`)`]}),(0,Y.jsxs)(qt,{value:`artifact`,children:[q(`engine.list.source.artifact`,F),` (`,re.artifact,`)`]}),(0,Y.jsxs)(qt,{value:`runtime`,children:[q(`engine.list.source.runtime`,F),` (`,re.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[q(`engine.edit.loading`,F),` `,e,`…`]}),m&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:m}),!f&&!m&&w!==null&&w.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No project packages installed`}),(0,Y.jsx)(_r,{children:`Studio only shows metadata that belongs to a project software package. Install or create a project package to manage its metadata here.`})]}),!f&&!m&&w!==null&&w.length>0&&ne.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:N.length===0?J(`engine.list.emptyType`,F,{type:oe}):J(`engine.list.emptyQuery`,F,{query:g})}),(0,Y.jsx)(_r,{children:l.emptyStateHint??(c?.allowOrgOverride||c?.allowRuntimeCreate?J(`engine.list.createHint`,F,{type:oe}):q(`engine.list.readOnlyHint`,F))}),N.length===0&&(c?.allowOrgOverride||c?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(I,{onClick:ee,children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),q(`engine.list.create`,F)]})})]}),!f&&ne.length>0&&(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[ae.map(e=>(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,style:e.width?{width:e.width}:void 0,children:se(e)},e.key)),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-right font-medium w-[80px]`,children:q(`engine.list.col.source`,F)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:ne.map((e,t)=>{let r=l.primaryKey??`name`,i=String(e.item[r]??`(unnamed-${t})`),a=e.item._packageId,o=a&&a!==`sys_metadata`?`?package=${encodeURIComponent(a)}`:A,s=e.diagnostics?.valid===!1,c=e.diagnostics?.errors??[],u=e.diagnostics?.warnings??[],d=!s&&u.length>0,f=s?c.slice(0,3).map(e=>`${e.path||`(root)`}: ${e.message}`).join(`
2
+ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{a as n,d as r,f as i,g as a,h as o,m as s,r as c,s as l,y as u}from"./vendor-react-BGDDiZfJ.js";import{m as d}from"./infrastructure-DexdbqHf.js";import{G as f,L as p,R as m,Ut as h,Vt as g,Y as _,dt as v,ft as y,j as b,ut as x}from"./framework-CWU64Lvg.js";import{G as S,_ as C,b as w,g as T,m as E,w as D,x as O,y as k}from"./vendor-objectstack-6Mgxtaa1.js";import{$a as A,$i as j,$n as M,$o as ee,$r as te,$s as N,Aa as ne,Ai as re,Ar as P,As as ie,Bn as ae,Bo as F,Bs as oe,Bt as se,Ca as ce,Cc as le,Ci as ue,Co as de,Cr as I,Da as fe,Dc as pe,Do as me,Dr as he,E as ge,Ec as _e,Ei as ve,Eo as ye,Er as be,Fa as xe,Fo as Se,G as Ce,Gn as we,Go as Te,Gr as Ee,Gs as De,Gt as Oe,Ha as L,Hn as ke,Ho as Ae,Hr as je,Hs as Me,Ht as Ne,Ic as Pe,Io as Fe,Is as Ie,Ja as Le,Jn as Re,Jo as ze,Jr as Be,Js as Ve,Jt as He,K as Ue,Kn as We,Kr as R,Ks as Ge,Kt as Ke,La as qe,Li as Je,Ln as Ye,Lr as Xe,Mi as Ze,Mo as Qe,Mr as $e,Na as et,Ni as tt,Oa as nt,Oc as rt,Oi as it,Oo as at,Or as ot,Os as st,Pa as ct,Pi as lt,Po as ut,Ps as dt,Qa as ft,Qi as z,Qn as pt,Qo as mt,Qr as ht,Qs as gt,Qt as _t,Ra as vt,Ro as yt,Rr as bt,Rs as xt,Si as St,So as Ct,Ss as wt,T as Tt,Ti as Et,To as Dt,Tr as Ot,Ua as kt,Ui as At,Un as jt,Us as Mt,Ut as Nt,Va as Pt,Vi as Ft,Vn as It,Vr as Lt,Wi as Rt,Wo as zt,Wr as Bt,Wt as Vt,X as Ht,Xi as Ut,Xn as Wt,Xo as Gt,Xs as Kt,Xt as qt,Ya as Jt,Yn as Yt,Yo as Xt,Yr as Zt,Ys as Qt,Yt as $t,Zi as en,Zn as tn,Zs as nn,Zt as rn,_a as an,_c as on,_i as sn,_t as cn,aa as ln,ac as un,ai as dn,ao as fn,ba as pn,bi as mn,bo as hn,bs as gn,bt as _n,cc as vn,cn as yn,co as bn,cs as xn,da as Sn,ds as Cn,dt as wn,ea as Tn,en as En,eo as Dn,er as On,es as kn,et as An,fa as jn,fi as Mn,fs as Nn,ft as Pn,ga as Fn,gc as In,gs as Ln,gt as Rn,hi as zn,ho as Bn,ht as Vn,ic as Hn,ii as Un,is as Wn,ja as Gn,ji as Kn,jo as qn,jr as Jn,js as Yn,ka as Xn,kc as B,ki as Zn,ko as Qn,kr as $n,ks as er,la as tr,li as nr,ln as V,ls as rr,lt as ir,mo as ar,mt as or,nc as sr,nn as cr,no as lr,ns as ur,oc as dr,oi as fr,on as pr,pa as mr,pn as H,po as hr,pt as gr,q as _r,qa as vr,qi as yr,qn as br,qo as xr,qt as Sr,ra as Cr,rs as wr,sa as Tr,sc as Er,sn as Dr,so as Or,sr as U,tc as kr,tn as Ar,to as jr,ua as Mr,uc as Nr,ui as Pr,uo as Fr,us as Ir,ut as Lr,vc as Rr,vo as zr,vt as Br,wa as Vr,wc as Hr,wo as Ur,ws as Wr,xc as Gr,xi as Kr,xo as qr,xs as Jr,ya as Yr,yi as Xr,yt as Zr,zi as Qr,zn as $r}from"./ui-components-DHIW7RSX.js";import{r as ei}from"./vendor-ui-utils-BzQBRdq3.js";import"./AdapterProvider-cnK1q1oP.js";import"./MetadataProvider-C8ABa_gQ.js";import{c as ti,r as ni}from"./assistantBus-BFk4fCbM.js";import{o as ri}from"./useRecordApprovals-R3Q7Bt7f.js";import{f as ii}from"./plugin-chatbot-BT49v2CR.js";import{a as ai,c as oi,l as si,o as ci,s as li}from"./RecordDetailView-CEdkDgV8.js";import{n as ui}from"./ui-layout-DeDkO2oG.js";import{i as di,n as fi,r as pi,t as mi}from"./useMetadata-DemWIEqg.js";import{A as hi,B as gi,C as W,D as _i,E as vi,F as yi,H as bi,I as xi,L as Si,M as Ci,N as wi,O as Ti,P as Ei,R as Di,S as Oi,T as G,V as ki,W as Ai,_ as ji,a as Mi,b as Ni,c as Pi,d as Fi,f as Ii,g as Li,h as Ri,i as zi,j as Bi,k as Vi,l as Hi,m as Ui,n as Wi,o as Gi,p as Ki,r as qi,s as Ji,t as Yi,u as Xi,v as K,w as Zi,x as Qi,y as $i,z as ea}from"./ReportDefaultInspector-BNtsE5kW.js";import{t as ta}from"./getIcon-p-vXfFiY.js";import{t as na}from"./InterfaceListPage-BFlwb0U7.js";import{n as ra}from"./plugins-views-BxKprmRN.js";import{a as ia,i as aa,n as q,o as oa,r as J,s as sa,t as ca}from"./i18n-DGsfMUMn.js";import{r as la}from"./dist-YwlXXOlT.js";var Y=c(),X=e(u(),1);function ua(){let e={BASE_URL:`./`,DEV:!1,MODE:`production`,PROD:!0,SSR:!1,VITE_SENTRY_DSN:`https://1373a588ceb9da150b11e64bf85f583d@o4510356161757184.ingest.us.sentry.io/4511439670673408`,VITE_SENTRY_ENVIRONMENT:`production`,VITE_SENTRY_SEND_DEFAULT_PII:`true`,VITE_SERVER_URL:``,VITE_USE_MOCK_SERVER:`false`},t=e.VITE_AI_BASE_URL;return t?t.replace(/\/$/,``):`${(e.VITE_SERVER_URL??``).replace(/\/$/,``)}/api/v1/ai`}function da(){let{agents:e,isLoading:t}=ii({apiBase:ua()}),n=(0,X.useRef)(!1);t&&(n.current=!0);let r=e.length>0;return{enabled:r,isLoading:r?!1:t||!n.current}}function fa(e,t){if(!t)return!0;let n=t.toLowerCase();return e.value.toLowerCase().includes(n)||e.label.toLowerCase().includes(n)||(e.group?.toLowerCase().includes(n)??!1)}function pa({label:e,value:t,onCommit:n,options:r,placeholder:i=`Select…`,searchPlaceholder:a=`Search or type…`,emptyText:o=`No match — keep typing to use a custom value.`,disabled:s,loading:c,allowCustom:l=!0,mono:u,className:d}){let[f,p]=X.useState(!1),[m,h]=X.useState(``),g=r.find(e=>e.value===t),_=g?g.label:t||(c?`Loading…`:i),v=X.useMemo(()=>r.filter(e=>fa(e,m)),[r,m]),y=X.useMemo(()=>{let e=[],t=new Map;for(let n of v){let r=n.group??``;t.has(r)||(t.set(r,[]),e.push(r)),t.get(r).push(n)}return e.map(e=>({heading:e,items:t.get(e)}))},[v]),b=m.trim(),x=l&&!!b&&!r.some(e=>e.value===b),S=e=>{n(e),p(!1),h(``)},C=(0,Y.jsxs)(pr,{open:f,onOpenChange:e=>{p(e),e||h(``)},children:[(0,Y.jsx)(yn,{asChild:!0,children:(0,Y.jsxs)(I,{type:`button`,variant:`outline`,role:`combobox`,"aria-expanded":f,disabled:s,className:B(`h-8 w-full justify-between px-2 text-sm font-normal`,d),children:[(0,Y.jsx)(`span`,{className:B(`truncate`,u&&`font-mono`,!g&&!t&&`text-muted-foreground`),children:_}),(0,Y.jsx)(Ie,{className:`ml-2 h-3.5 w-3.5 shrink-0 opacity-50`})]})}),(0,Y.jsx)(Dr,{align:`start`,className:`w-[var(--radix-popover-trigger-width)] min-w-[14rem] p-0`,children:(0,Y.jsxs)(Ye,{shouldFilter:!1,children:[(0,Y.jsx)(It,{value:m,onValueChange:h,placeholder:a}),(0,Y.jsxs)(jt,{children:[!x&&v.length===0&&(0,Y.jsx)($r,{children:o}),x&&(0,Y.jsx)(ae,{children:(0,Y.jsx)(ke,{value:`__custom__${b}`,onSelect:()=>S(b),children:(0,Y.jsxs)(`span`,{className:`truncate`,children:[`Use `,(0,Y.jsxs)(`span`,{className:`font-mono`,children:[`“`,b,`”`]})]})})}),y.map((e,n)=>(0,Y.jsx)(ae,{heading:e.heading||void 0,children:e.items.map(e=>(0,Y.jsxs)(ke,{value:e.value,onSelect:()=>S(e.value),children:[(0,Y.jsx)(Mt,{className:B(`h-3.5 w-3.5`,e.value===t?`opacity-100`:`opacity-0`)}),(0,Y.jsx)(`span`,{className:`truncate font-mono`,children:e.value}),e.label&&e.label!==e.value&&(0,Y.jsx)(`span`,{className:`ml-1 truncate text-muted-foreground`,children:e.label}),e.hint&&(0,Y.jsx)(`span`,{className:`ml-auto pl-2 text-[10px] text-muted-foreground`,children:e.hint})]},e.value))},e.heading||`g${n}`))]})]})})]});return e?(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),C]}):C}var ma=new Set([`lookup`,`master_detail`,`masterdetail`,`master-detail`]);function ha(e,t){if(typeof e==`string`&&e)return e;if(e&&typeof e==`object`){let t=e.default;if(typeof t==`string`&&t)return t}return t}function ga(e){let t=e.reference??e.reference_to??e.referenceTo??e.reference_to_object;if(typeof t==`string`&&t)return t;if(Array.isArray(t)&&typeof t[0]==`string`)return t[0];if(t&&typeof t==`object`){let e=t.object;if(typeof e==`string`&&e)return e}}function _a(e){switch(e){case`lookup`:case`master_detail`:case`masterDetail`:case`master-detail`:return`lookup`;case`date`:case`datetime`:case`time`:return`date`;case`number`:case`currency`:case`percent`:case`int`:case`integer`:case`float`:case`double`:case`autonumber`:return`number`;case`boolean`:case`toggle`:return`boolean`;default:return`string`}}function va(e,t){if(!e)return{label:t,fields:[],relationships:[]};let n=ha(e.label,t),r=Si(e.fields).entries.map(e=>({name:e.name,label:ha(e.def.label,e.name),type:typeof e.def.type==`string`?e.def.type:void 0,def:e.def}));return{label:n,fields:r,relationships:r.filter(e=>e.type&&ma.has(e.type.toLowerCase())).map(e=>({name:e.name,label:e.label,referenceTo:ga(e.def)}))}}function ya(e,t,n){let r=e,i=[];for(let e of t.split(`.`)){let t=r.relationships.find(t=>t.name===e);if(!t?.referenceTo)return;let a=n[t.referenceTo];if(!a)return;i.push(t.label),r=a}return{target:r,labels:i}}function ba(e,t,n){let r=e.fields.map(t=>({value:t.name,label:t.label,type:t.type,group:e.label}));for(let i of t){let t=ya(e,i,n);if(!t)continue;let a=[...t.labels,t.target.label].join(` → `);for(let e of t.target.fields)r.push({value:`${i}.${e.name}`,label:e.label,type:e.type,group:a})}return r}function xa(e,t){if(!e||typeof e!=`object`)return!1;if(Array.isArray(e))return e.some(e=>xa(e,t));let n=e;return typeof n.dataset==`string`&&n.dataset===t?!0:Object.values(n).some(e=>e&&typeof e==`object`&&xa(e,t))}function Sa(){let e=pi(),[t,n]=X.useState({options:[],loading:!0});return X.useEffect(()=>{let t=!1;return n(e=>({...e,loading:!0})),e.list(`object`).then(e=>{if(t)return;let r=(Array.isArray(e)?e:[]).map(e=>({name:typeof e.name==`string`?e.name:``,label:ha(e.label,typeof e.name==`string`?e.name:``)})).filter(e=>!!e.name).sort((e,t)=>e.label.localeCompare(t.label));n({options:r,loading:!1})}).catch(()=>{t||n({options:[],loading:!1})}),()=>{t=!0}},[e]),t}function Ca(e,t){let n=pi(),r=t.join(`\0`),[i,a]=X.useState({relationships:[],fieldOptions:[],loading:!!e});return X.useEffect(()=>{if(!e){a({relationships:[],fieldOptions:[],loading:!1});return}let t=!1;return a(e=>({...e,loading:!0})),(async()=>{try{let i=await n.get(`object`,e);if(t)return;let o=va(i,e),s=r?r.split(`\0`):[],c={[e]:o},l=async e=>{if(c[e])return c[e];let t;try{t=va(await n.get(`object`,e),e)}catch{t=va(null,e)}return c[e]=t,t};for(let e of s){let t=o;for(let n of e.split(`.`)){let e=t.relationships.find(e=>e.name===n);if(!e?.referenceTo)break;t=await l(e.referenceTo)}}if(t)return;let u=[...o.relationships];for(let e of s){if(e.split(`.`).length>=3)continue;let t=ya(o,e,c);if(t)for(let n of t.target.relationships)u.push({name:`${e}.${n.name}`,label:`${e}.${n.name}`,referenceTo:n.referenceTo})}a({relationships:u,fieldOptions:ba(o,s,c),loading:!1})}catch{t||a({relationships:[],fieldOptions:[],loading:!1})}})(),()=>{t=!0}},[n,e,r]),i}function wa(e){let t=pi(),[n,r]=X.useState({reports:0,dashboards:0,loading:!!e});return X.useEffect(()=>{if(!e){r({reports:0,dashboards:0,loading:!1});return}let n=!1;return r(e=>({...e,loading:!0})),(async()=>{let[i,a]=await Promise.all([t.list(`report`).catch(()=>[]),t.list(`dashboard`).catch(()=>[])]);n||r({reports:(Array.isArray(i)?i:[]).filter(t=>xa(t,e)).length,dashboards:(Array.isArray(a)?a:[]).filter(t=>xa(t,e)).length,loading:!1})})(),()=>{n=!0}},[t,e]),n}function Ta(e,t){if(typeof e==`string`)return e||`col ${t+1}`;if(e&&typeof e==`object`){let n=e;return String(n.label??n.header??n.field??n.accessorKey??`col ${t+1}`)}return`col ${t+1}`}function Ea(e){if(typeof e==`string`)return e||void 0;if(e&&typeof e==`object`){let t=e,n=t.field??t.accessorKey;return typeof n==`string`&&n?n:void 0}}function Da(e){let t=new Set;for(let n of e){let e=Ea(n);e&&t.add(e)}return t}function Oa(e,t,n){if(e)return t;let r={field:t};return n&&n!==t&&(r.label=n),r}function ka(e,t){return e===t?null:e>t?e-1:e}function Aa(e,t,n){if(e===t)return n;let r=e;return t<r&&--r,n<=r&&(r+=1),r}function ja({variantKey:e,schema:t,columns:n,allStrings:r,objectName:i,objectFieldsOverride:a,selectedIndex:o,readOnly:s,onPatch:c,onSelectionChange:l}){let u=!s,{fields:d,loading:f,error:p}=Li(i||void 0,a),m=X.useMemo(()=>{let e=new Map;for(let t of d)e.set(t.name,t.type);return e},[d]),[h,g]=X.useState(null),[_,v]=X.useState(null),y=X.useCallback(n=>{c({[e]:{...t,columns:n}})},[c,e,t]),b=X.useCallback(t=>{let i=vi(n,Oa(r,t.name,t.label));y(i),l?.({kind:`column`,id:`${e}.columns[${i.length-1}]`,label:t.label})},[r,n,y,e,l]),x=X.useCallback(t=>{let r=Ti(n,t,null);if(y(r),o!=null){let n=ka(o,t);n==null?l?.(null):l?.({kind:`column`,id:`${e}.columns[${n}]`,label:Ta(r[n],n)})}},[n,y,o,e,l]),S=X.useCallback((t,r)=>{if(t===r)return;let i=_i(n,t,r);if(y(i),o!=null){let n=Aa(o,t,r);l?.({kind:`column`,id:`${e}.columns[${n}]`,label:Ta(i[n],n)})}},[n,y,o,e,l]),C=X.useCallback(t=>{l?.({kind:`column`,id:`${e}.columns[${t}]`,label:Ta(n[t],t)})},[n,e,l]),w=Da(n);return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:n.length})]}),n.length===0?(0,Y.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-3 text-center text-[11px] text-muted-foreground`,children:`No columns yet. Add a field below.`}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:n.map((e,t)=>(0,Y.jsx)(Ji,{index:t,label:Ta(e,t),fieldName:Ea(e),fieldType:m.get(Ea(e)??``)??`text`,selected:o===t,canEdit:u,dragging:h!==null,dropBefore:_===t&&h!==null&&h!==t,onSelect:()=>C(t),onRemove:()=>x(t),onDragStart:()=>g(t),onDragEnd:()=>{g(null),v(null)},onDragOverRow:()=>v(t),onDropRow:()=>{h!=null&&h!==t&&S(h,t),g(null),v(null)}},t))}),u&&(0,Y.jsx)(Gi,{fields:d,usedNames:w,loading:f,error:p,onAdd:b})]})}var Ma={io:`input`,unrepresentable:`any`},Na=new Set([`columns`,`data`,`name`]),Pa,Fa=!1;function Ia(){if(Pa||Fa)return Pa;try{Pa=S(k,Ma)}catch(e){Fa=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive View JSONSchema from spec`,e)}return Pa}function La(){return Ia()?.properties?.list}function Ra(){return Ia()?.properties?.form}var za,Ba=!1;function Va(){if(za||Ba)return za;try{za=S(T,Ma)}catch(e){Ba=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive ListColumn JSONSchema from spec`,e)}return za}var Ha;function Ua(){if(Ha)return Ha;if(!(!D||typeof D!=`object`)){try{let e=JSON.parse(JSON.stringify(D));for(let t of e.sections??[])t.fields=(t.fields??[]).filter(e=>{let t=typeof e==`string`?e:e?.field;return!Na.has(t)});e.sections=(e.sections??[]).filter(e=>(e.fields??[]).length>0),Ha=e}catch(e){typeof console<`u`&&console.warn(`[view-schema] failed to prepare viewForm from spec`,e);return}return Ha}}var Wa=new Set([`form`,`detail`]);function Ga(e){return Wa.has(e)}function Ka(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function qa(e,t){return typeof e==`string`&&Wa.has(e)?e:typeof e==`string`&&e?`list`:typeof t==`string`&&Wa.has(t)?`form`:`list`}function Ja(e){let t=e.config;return Ka(t)?[{storeKey:`config`,familyKey:qa(e.viewKind,t.type),schema:t}]:[]}function Ya(e){return Ja(e)[0]}function Xa(e,t){return Ya(e)}function Za({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){let{options:a,loading:o}=Sa();return(0,Y.jsx)(pa,{label:e,value:t,onCommit:n,options:a.map(e=>({value:e.name,label:e.label})),loading:o,placeholder:r,searchPlaceholder:`Search objects…`,disabled:i,mono:!0})}var Qa=new Set([`type`,`object`,`label`,`columns`]),$a={grid:`Table / List`,kanban:`Kanban`,calendar:`Calendar`,gallery:`Gallery`,gantt:`Gantt`,timeline:`Timeline`,map:`Map`,chart:`Chart`};function eo(e,t){let n=`engine.inspector.view.type.${e}`,r=q(n,t);return r===n?$a[e]??e:r}var to=[`columns`,`data`,`name`];function no(e,t){let n=e.data;return n&&typeof n==`object`&&typeof n.object==`string`&&n.object?{value:n.object,path:`data.object`}:typeof e.object==`string`&&e.object?{value:e.object,path:`object`}:typeof t.object==`string`&&t.object?{value:t.object,path:`top`}:{value:``,path:`top`}}function ro(e,t){return X.useMemo(()=>{let n=La()?.properties?.type?.enum,r=(Array.isArray(n)&&n.length?n.filter(e=>typeof e==`string`):[`grid`,`kanban`,`calendar`,`gallery`,`gantt`,`timeline`]).map(e=>({value:e,label:eo(e,t)}));return!r.some(t=>t.value===e)&&e&&r.push({value:e,label:eo(e,t)}),r},[e,t])}function io({draft:e,variantKey:t,familyKey:n,isHome:r,onPatch:i,readOnly:a,onClearSelection:o,onSelectionChange:s,objectFieldsOverride:c,locale:l,serverSchema:u}){let d=e[t]??{},f=Ga(n??t),p=typeof d.type==`string`?d.type:`grid`,m=ro(p,l),h=no(d,e),g=typeof e.label==`string`&&e.label||(typeof d.label==`string`?d.label:``)||``,_=Array.isArray(d.columns)?d.columns:[],v=_.length>0&&_.every(e=>typeof e==`string`),{fields:y}=Li(h.value||void 0,c),b=X.useMemo(()=>({objectFields:y.map(e=>({name:e.name,label:e.label,type:e.type}))}),[y]),x=(()=>{let e=u?.properties;return f?e?.form:e?.list})(),{schema:S,form:C}=X.useMemo(()=>Mi({bundledSchema:f?Ra():La(),bundledForm:f?void 0:Ua(),serverSchema:x,excludeFields:Qa,sectionTitle:q(`engine.inspector.moreFields`,l)}),[f,x,l]),w=e=>{i({[t]:{...d,...e}})};return(0,Y.jsxs)(Zi,{kindLabel:q(`engine.inspector.view.kind`,l),title:String(g||e.name||t),onClose:()=>o?.(),closeLabel:q(`engine.inspector.view.close`,l),hideClose:r,children:[(0,Y.jsx)(G,{label:q(`engine.inspector.view.label`,l),value:g,onCommit:e=>{i({label:e,[t]:{...d,label:e}})},placeholder:q(`engine.inspector.view.labelPlaceholder`,l),disabled:a}),(0,Y.jsx)(W,{label:q(`engine.inspector.view.type`,l),value:p,options:m,onCommit:e=>w({type:e}),disabled:a}),(0,Y.jsx)(Za,{label:q(`engine.inspector.view.object`,l),value:h.value,onCommit:e=>{let n={object:e};d.data&&typeof d.data==`object`?n[t]={...d,data:{...d.data,object:e}}:h.path===`object`&&(n[t]={...d,object:e}),i(n)},placeholder:q(`engine.inspector.view.objectPlaceholder`,l),disabled:a}),!f&&(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(ja,{variantKey:t,schema:d,columns:_,allStrings:v,objectName:h.value||void 0,objectFieldsOverride:c,selectedIndex:null,readOnly:a,onPatch:i,onSelectionChange:s})}),(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:S?(0,Y.jsx)(Ki,{schema:S,form:C,value:d,hiddenFields:[`type`,`object`,`label`],readOnly:a,widgetContext:b,onChange:e=>{let n={...e};for(let e of to)e in d?n[e]=d[e]:delete n[e];i({[t]:n})}}):(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:q(`engine.inspector.view.noSchema`,l)})})]})}function ao({appSlug:e}={}){let t=i(),n=pi(),{entries:r}=di(n),[a,o]=X.useState(!1),[s,c]=X.useState(``),[l,u]=X.useState(null),[d,f]=X.useState(!1),[p,m]=X.useState(0),h=X.useMemo(()=>ca(),[]);X.useEffect(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.shiftKey&&e.key.toLowerCase()===`m`&&(e.preventDefault(),o(e=>!e))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),X.useEffect(()=>{if(!a||l!=null||d||r.length===0)return;f(!0);let e=!1;return(async()=>{try{let t=[];await Promise.all(r.map(async e=>{try{let r=await n.list(e.type);for(let n of r??[]){let r=(n&&typeof n==`object`&&`item`in n?n.item:n)??{},i=r?.name;i&&t.push({kind:`item`,type:e.type,name:String(i),label:r?.label,description:r?.description,lock:typeof r?._lock==`string`?r._lock:void 0,lockReason:typeof r?._lockReason==`string`?r._lockReason:void 0})}}catch{}})),e||u(t)}finally{e||f(!1)}})(),()=>{e=!0}},[a,l,d,r,n]);let g=X.useMemo(()=>{let e=s.trim().toLowerCase();if(!e)return r.slice(0,20).map(e=>({kind:`type`,entry:e}));let t=r.filter(t=>t.type.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e)||ia(t.type,h,t.label).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)).slice(0,8).map(e=>({kind:`type`,entry:e})),n=(l??[]).filter(t=>t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)||t.type.toLowerCase().includes(e)).slice(0,40);return[...t,...n]},[s,r,l]);X.useEffect(()=>{m(0)},[s,a]);function _(n){o(!1);let r=e?`/apps/${e}`:`..`;n.kind===`type`?t(`${r}/metadata/${encodeURIComponent(n.entry.type)}`):t(`${r}/metadata/${encodeURIComponent(n.type)}/${encodeURIComponent(n.name)}`)}function v(e){e.key===`ArrowDown`?(e.preventDefault(),m(e=>Math.min(e+1,g.length-1))):e.key===`ArrowUp`?(e.preventDefault(),m(e=>Math.max(e-1,0))):e.key===`Enter`&&g[p]&&(e.preventDefault(),_(g[p]))}return(0,Y.jsx)(we,{open:a,onOpenChange:o,children:(0,Y.jsxs)(We,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(Yt,{className:`sr-only`,children:(0,Y.jsx)(Wt,{children:q(`engine.quickfind.title`,h)})}),(0,Y.jsxs)(`div`,{className:`border-b px-3 py-2 flex items-center gap-2`,children:[(0,Y.jsx)(Kn,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{autoFocus:!0,placeholder:q(`engine.quickfind.placeholder`,h),value:s,onChange:e=>c(e.target.value),onKeyDown:v,className:`border-0 shadow-none focus-visible:ring-0 px-0`}),(0,Y.jsx)(Ce,{children:`esc`})]}),(0,Y.jsxs)(`div`,{className:`max-h-[440px] overflow-auto`,children:[d&&(0,Y.jsxs)(`div`,{className:`px-3 py-4 text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}),q(`engine.quickfind.indexing`,h),` `,r.length,`…`]}),!d&&g.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-6 text-xs text-muted-foreground text-center`,children:q(`engine.quickfind.noMatches`,h)}),(0,Y.jsx)(`ul`,{role:`listbox`,children:g.map((e,t)=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>_(e),onMouseEnter:()=>m(t),className:`w-full text-left px-3 py-2 flex items-center gap-3 hover:bg-accent `+(t===p?`bg-accent`:``),children:[(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono shrink-0`,children:e.kind===`type`?`type`:e.type}),(0,Y.jsx)(`div`,{className:`min-w-0 flex-1`,children:e.kind===`type`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium truncate`,children:ia(e.entry.type,h,e.entry.label)}),e.entry.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.entry.description})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`text-sm font-mono truncate flex items-center gap-1.5`,children:[e.lock&&e.lock!==`none`&&(0,Y.jsx)(`span`,{className:`text-amber-600 dark:text-amber-400 shrink-0`,title:e.lockReason??`_lock=${e.lock}`,"aria-label":`locked`,children:(0,Y.jsx)(Pt,{className:`h-3 w-3`})}),e.name,e.label&&(0,Y.jsx)(`span`,{className:`text-muted-foreground font-sans ml-2`,children:e.label})]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.description})]})})]})},e.kind===`type`?`t:${e.entry.type}`:`i:${e.type}:${e.name}`))})]}),(0,Y.jsxs)(`div`,{className:`border-t px-3 py-1.5 flex items-center gap-3 text-[10px] text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Ce,{children:`↑`}),` `,(0,Y.jsx)(Ce,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Ce,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(Ce,{children:`⌘`}),(0,Y.jsx)(Ce,{children:`⇧`}),(0,Y.jsx)(Ce,{children:`M`}),` toggle`]})]})]})})}var oo=new Set([`system`,`cloud`]);function so(e){let t=(e??[]).map(e=>{let t=e&&typeof e==`object`&&`item`in e?e.item:e,n=t?.manifest??t??{};return{id:n.id,scope:n.scope,name:n.name||n.id}}).filter(e=>e.id&&!oo.has(e.scope));return t.sort((e,t)=>e.name.localeCompare(t.name)),t.map(e=>({id:e.id,name:e.name}))}var co={data:wr,ui:Dn,automation:$e,ai:sn,system:it,platform:it,identity:Et,security:Et},lo=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],uo=new Set([`field`,`package`]);function fo(){let e=pi(),{loading:t,error:r,entries:i}=di(e),a=X.useMemo(()=>ca(),[]),[s,c]=X.useState(``),[l,u]=X.useState(`all`),[d,f]=X.useState(!1),[p,m]=o(),[h,g]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;g(so(n))}catch{t||g([])}})(),()=>{t=!0}},[e]);let _=p.get(`package`),v=X.useMemo(()=>h?_&&h.some(e=>e.id===_)?_:h[0]?.id??null:null,[h,_]);X.useEffect(()=>{if(!h||h.length===0||_&&h.some(e=>e.id===_))return;let e=new URLSearchParams(p);e.set(`package`,h[0].id),m(e,{replace:!0})},[h,_]);let{byType:y,warnByType:b,summary:x,countsByType:S,lockedByType:C,packagesByType:w,loading:T}=fi(e,`warning`,v??void 0),E=X.useMemo(()=>i.filter(e=>uo.has(e.type)||!v?!1:(w[e.type]??[]).includes(v)),[i,v,w]),D=X.useMemo(()=>{let e={all:E.length};for(let t of E){let n=t.domain??`other`;e[n]=(e[n]??0)+1}return e},[E]),O=E.filter(e=>e.allowOrgOverride||e.allowRuntimeCreate).length,k=E.filter(e=>{if(d&&!(e.allowOrgOverride||e.allowRuntimeCreate)||l!==`all`&&(e.domain??`other`)!==l)return!1;if(s){let t=s.toLowerCase();if(!(e.type.toLowerCase().includes(t)||(e.label??``).toLowerCase().includes(t)||ia(e.type,a,e.label).toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)))return!1}return!0}),A=X.useMemo(()=>{let e={};for(let t of k)(e[t.domain??`other`]??=[]).push(t);return Object.entries(e).sort(([e],[t])=>{let n=lo.indexOf(e),r=lo.indexOf(t);return(n===-1?99:n)-(r===-1?99:r)})},[k]);return t||h===null||v&&T?(0,Y.jsx)(`div`,{className:`p-6 text-sm text-muted-foreground`,children:q(`engine.directory.loading`,a)}):r?(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-destructive`,children:[q(`engine.directory.loadFailed`,a),`: `,r]}):(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold`,children:q(`engine.directory.title`,a)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,dangerouslySetInnerHTML:{__html:J(`engine.directory.description`,a,{count:`<strong class="text-foreground">${E.length}</strong>`,writable:O})}}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 mt-4 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 min-w-[240px] max-w-lg`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.directory.search`,a),value:s,onChange:e=>c(e.target.value)})]}),(0,Y.jsxs)(I,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[q(`engine.directory.writableOnly`,a),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(I,{asChild:!0,variant:`outline`,size:`sm`,className:`border-destructive/40 text-destructive hover:bg-destructive/10 hover:text-destructive`,children:(0,Y.jsxs)(n,{to:`./_diagnostics`,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.directory.diagnosticsLink`,a,{count:x.total})]})}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-1.5`,children:[q(`engine.directory.quickFind`,a),` `,(0,Y.jsx)(Ce,{children:`⌘`}),(0,Y.jsx)(Ce,{children:`⇧`}),(0,Y.jsx)(Ce,{children:`M`})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-3 flex-wrap`,children:[(0,Y.jsx)(po,{domain:`all`,label:q(`engine.directory.all`,a),active:l===`all`,count:D.all??0,onClick:()=>u(`all`)}),lo.filter(e=>D[e]).map(e=>(0,Y.jsx)(po,{domain:e,label:aa(e,a),active:l===e,count:D[e]??0,onClick:()=>u(e)},e))]})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[h.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No project packages installed`}),(0,Y.jsx)(_r,{children:`Studio only shows metadata that belongs to a project software package. Install or create a project package to manage its metadata here.`})]}),h.length>0&&k.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.directory.noMatches`,a)}),(0,Y.jsx)(_r,{children:q(`engine.directory.noMatchesHint`,a)})]}),A.map(([e,t])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-1.5`,children:[(0,Y.jsx)(co[e]??Er,{className:`h-3.5 w-3.5`}),aa(e,a),` (`,t.length,`)`]}),(0,Y.jsx)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-3`,children:t.map(e=>{let t=S[e.type]??0;return(0,Y.jsx)(mo,{entry:e,locale:a,invalidCount:y[e.type]??0,warnCount:b[e.type]??0,lockedCount:C[e.type]??0,itemCount:t,packageFilter:v??void 0},e.type)})})]},e))]}),(0,Y.jsx)(ao,{})]})}function po({domain:e,label:t,active:n,count:r,onClick:i}){return(0,Y.jsxs)(`button`,{type:`button`,onClick:i,className:`px-2.5 py-1 rounded-full text-xs border transition-colors `+(n?`bg-primary text-primary-foreground border-primary`:`bg-background hover:bg-accent border-border text-muted-foreground`),children:[t??e,` `,(0,Y.jsxs)(`span`,{className:`opacity-70 ml-0.5`,children:[`(`,r,`)`]})]})}function mo({entry:e,locale:t,invalidCount:r=0,warnCount:i=0,itemCount:a=0,lockedCount:o=0,packageFilter:s}){let c=ia(e.type,t,e.label);return(0,Y.jsxs)(n,{to:s?`./${encodeURIComponent(e.type)}?package=${encodeURIComponent(s)}`:`./${encodeURIComponent(e.type)}`,className:`block p-4 border rounded-lg hover:bg-accent transition-colors `+(r>0?`border-destructive/40 hover:border-destructive`:`hover:border-primary`),children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`font-medium truncate flex items-center gap-1.5`,children:[r>0&&(0,Y.jsx)(`span`,{title:J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),"aria-label":J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),children:(0,Y.jsx)(R,{className:`h-3.5 w-3.5 text-destructive shrink-0`})}),c]}),(0,Y.jsx)(`code`,{className:`text-xs text-muted-foreground font-mono`,children:e.type})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:J(`engine.directory.itemCountTooltip`,t??`en`,{count:a}),children:a}),r>0&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,title:J(`engine.directory.invalidTooltip`,t??`en`,{count:r}),children:r}),i>0&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06]`,title:J(`engine.directory.warnTooltip`,t??`en`,{count:i}),children:i}),o>0&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06] inline-flex items-center gap-0.5 px-1.5`,title:`${o} locked item${o===1?``:`s`} — see ADR-0010`,"aria-label":`${o} locked items`,children:[(0,Y.jsx)(Pt,{className:`h-2.5 w-2.5`}),o]}),e.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,t)}):e.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,t)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:q(`engine.badge.readOnly`,t)})]})]}),e.description&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-2 line-clamp-2`,children:e.description})]})}var ho=`/api/v1/packages`;async function go(e,t){let n=await fetch(e,{credentials:`include`,headers:{Accept:`application/json`,...t?.headers||{}},...t}),r=await n.text(),i=r?JSON.parse(r):null;if(!n.ok||i?.success===!1){let e=i?.error?.message||i?.error||i?.message||`Request failed (${n.status})`;throw Error(typeof e==`string`?e:`Request failed (${n.status})`)}return i?.data??i}function _o({scope:e}){let t=X.useMemo(()=>ca(),[]);if(!e)return(0,Y.jsx)(U,{className:`bg-emerald-400/15 text-emerald-600 hover:bg-emerald-400/15 dark:text-emerald-300`,children:q(`engine.packages.scope.writable`,t)});let n=e===`project`?`default`:e===`system`?`secondary`:`outline`,r=e===`project`?`engine.packages.scope.project`:e===`system`?`engine.packages.scope.system`:e===`cloud`?`engine.packages.scope.cloud`:``;return(0,Y.jsx)(U,{variant:n,children:r?q(r,t):e})}function vo({pkg:e}){let t=X.useMemo(()=>ca(),[]),n=e.enabled!==!1&&e.status!==`disabled`;return(0,Y.jsx)(U,{variant:n?`default`:`outline`,children:q(n?`engine.packages.status.enabled`:`engine.packages.status.disabled`,t)})}var yo=/^[a-z0-9][a-z0-9._-]{1,254}$/i,bo=/^\d+\.\d+\.\d+$/;function xo({open:e,onOpenChange:t,onCreated:n}){let r=X.useMemo(()=>ca(),[]),[i,a]=X.useState(``),[o,s]=X.useState(``),[c,l]=X.useState(`0.1.0`),[u,d]=X.useState(!1),[f,p]=X.useState(null);X.useEffect(()=>{e&&(a(``),s(``),l(`0.1.0`),p(null),d(!1))},[e]);let m=yo.test(i),h=bo.test(c),g=m&&h&&!!o.trim()&&!u;async function _(){if(g){d(!0),p(null);try{await go(ho,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:{id:i.trim(),name:o.trim(),version:c.trim(),type:`app`}})}),n(i.trim());try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}t(!1)}catch(e){p(e?.message??q(`engine.packages.create.failed`,r))}finally{d(!1)}}}return(0,Y.jsx)(we,{open:e,onOpenChange:t,children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:q(`engine.packages.create.title`,r)}),(0,Y.jsx)(br,{children:J(`engine.packages.create.description`,r,{example:`com.acme.crm`})})]}),(0,Y.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-id`,children:q(`engine.packages.create.id`,r)}),(0,Y.jsx)(V,{id:`pkg-id`,"data-testid":`package-id-input`,placeholder:`com.acme.crm`,value:i,onChange:e=>a(e.target.value),"aria-invalid":!!i&&!m}),!!i&&!m&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-name`,children:q(`engine.packages.create.name`,r)}),(0,Y.jsx)(V,{id:`pkg-name`,"data-testid":`package-name-input`,placeholder:`Acme CRM`,value:o,onChange:e=>s(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-version`,children:q(`engine.packages.create.version`,r)}),(0,Y.jsx)(V,{id:`pkg-version`,placeholder:`0.1.0`,value:c,onChange:e=>l(e.target.value),"aria-invalid":!!c&&!h}),!!c&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.versionInvalid`,r)})]}),f&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:q(`engine.cancel`,r)}),(0,Y.jsx)(I,{onClick:_,disabled:!g,children:q(u?`engine.packages.create.creating`:`engine.packages.create.submit`,r)})]})]})})}function So({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`flex items-baseline justify-between gap-4 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:e}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-right break-all`,children:t})]})}function Co({pkg:e,open:t,onOpenChange:n,onSaved:r}){let i=X.useMemo(()=>ca(),[]),[a,o]=X.useState(``),[s,c]=X.useState(``),[l,u]=X.useState(``),[d,f]=X.useState(!1),[p,m]=X.useState(null);X.useEffect(()=>{t&&e&&(o(e.manifest.name??``),c(e.manifest.description??``),u(e.manifest.version??``),m(null),f(!1))},[t,e]);let h=!l.trim()||bo.test(l.trim()),g=!!a.trim()&&h&&!d;async function _(){if(!(!g||!e)){f(!0),m(null);try{let t=await go(`${ho}/${encodeURIComponent(e.manifest.id)}`,{method:`PATCH`,headers:{"Content-Type":`application/json`},body:JSON.stringify({name:a.trim(),description:s.trim(),version:l.trim()})});try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}r(t),n(!1)}catch(e){m(e?.message??q(`engine.packages.edit.failed`,i))}finally{f(!1)}}}return(0,Y.jsx)(we,{open:t,onOpenChange:n,children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:q(`engine.packages.edit.title`,i)}),(0,Y.jsx)(br,{className:`font-mono text-xs`,children:e?.manifest.id})]}),(0,Y.jsxs)(`div`,{className:`space-y-4 py-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-name`,children:q(`engine.packages.create.name`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-name`,"data-testid":`package-edit-name-input`,value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-desc`,children:q(`engine.packages.detail.description`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-desc`,"data-testid":`package-edit-desc-input`,value:s,onChange:e=>c(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{htmlFor:`pkg-edit-version`,children:q(`engine.packages.create.version`,i)}),(0,Y.jsx)(V,{id:`pkg-edit-version`,value:l,onChange:e=>u(e.target.value),"aria-invalid":!!l.trim()&&!h}),!!l.trim()&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:q(`engine.packages.create.versionInvalid`,i)})]}),p&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/10 p-2 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:p})]})]}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`outline`,onClick:()=>n(!1),disabled:d,children:q(`engine.cancel`,i)}),(0,Y.jsx)(I,{onClick:_,disabled:!g,"data-testid":`package-edit-save`,children:q(d?`engine.packages.edit.saving`:`engine.packages.edit.save`,i)})]})]})})}function wo({pkg:e,appBase:t,open:r,onOpenChange:i,onChanged:a}){let o=X.useMemo(()=>ca(),[]),[s,c]=X.useState(null),[l,u]=X.useState(null),[d,f]=X.useState(null),[p,m]=X.useState(!1);if(X.useEffect(()=>{u(null),c(null)},[e?.manifest.id]),X.useEffect(()=>{let t=e?.manifest.id;if(!r||!t){f(null);return}let n=!1;return go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(t)}`).then(e=>{n||f(e?.drafts??[])}).catch(()=>{n||f([])}),()=>{n=!0}},[r,e?.manifest.id]),!e)return null;let h=e.manifest.id,g=e.enabled!==!1&&e.status!==`disabled`,_=e.manifest.scope===`system`||e.manifest.scope===`cloud`;async function v(e,t,n){c(e),u(null);try{await t(),u({kind:`ok`,text:n}),a()}catch(e){u({kind:`err`,text:e?.message??q(`engine.packages.detail.actionFailed`,o)})}finally{c(null)}}return(0,Y.jsx)(Ne,{open:r,onOpenChange:i,children:(0,Y.jsxs)(Nt,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Oe,{children:[(0,Y.jsxs)(Ke,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Yr,{className:`h-4 w-4`}),e.manifest.name||h]}),(0,Y.jsx)(Vt,{className:`font-mono text-xs`,children:h})]}),(0,Y.jsxs)(`div`,{className:`mt-4`,children:[(0,Y.jsx)(So,{label:q(`engine.packages.col.version`,o),children:e.manifest.version||`—`}),(0,Y.jsx)(So,{label:q(`engine.packages.detail.type`,o),children:e.manifest.type||`—`}),(0,Y.jsx)(So,{label:q(`engine.packages.col.scope`,o),children:(0,Y.jsx)(_o,{scope:e.manifest.scope})}),(0,Y.jsx)(So,{label:q(`engine.packages.col.status`,o),children:(0,Y.jsx)(vo,{pkg:e})}),e.manifest.description&&(0,Y.jsx)(So,{label:q(`engine.packages.detail.description`,o),children:e.manifest.description})]}),t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Sr,{className:`my-4`}),(0,Y.jsxs)(n,{to:`${t}/metadata/object?package=${encodeURIComponent(h)}`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5`}),q(`engine.packages.detail.browseMetadata`,o)]})]}),d&&d.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Sr,{className:`my-4`}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`p`,{className:`flex items-center gap-2 text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:[q(`engine.packages.detail.pendingChanges`,o),(0,Y.jsx)(U,{variant:`secondary`,children:d.length})]}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:q(`engine.packages.detail.pendingHint`,o)}),!_&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(I,{size:`sm`,onClick:()=>v(`publish-drafts`,()=>go(`${ho}/${encodeURIComponent(h)}/publish-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{let e=await go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(h)}`);f(e?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(J(`engine.packages.detail.publishDraftsPartial`,o,{published:e.publishedCount??0,failed:e.failedCount}));return e}),q(`engine.packages.detail.publishDraftsOk`,o)),disabled:!!s,children:[(0,Y.jsx)(je,{className:`mr-1.5 h-3.5 w-3.5`}),s===`publish-drafts`?q(`engine.packages.detail.publishing`,o):J(`engine.packages.detail.publishApp`,o,{count:d.length})]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`discard-drafts`,()=>go(`${ho}/${encodeURIComponent(h)}/discard-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{let e=await go(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(h)}`);f(e?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(J(`engine.packages.detail.discardDraftsPartial`,o,{discarded:e.discardedCount??0,failed:e.failedCount}));return e}),q(`engine.packages.detail.discardDraftsOk`,o)),disabled:!!s,children:[(0,Y.jsx)(Bt,{className:`mr-1.5 h-3.5 w-3.5`}),s===`discard-drafts`?q(`engine.packages.detail.discarding`,o):J(`engine.packages.detail.discardChanges`,o,{count:d.length})]})]}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:d.map(e=>t?(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(n,{to:`${t}/metadata/${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}?review=1`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>i(!1),children:[(0,Y.jsx)(Se,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]})},`${e.type}/${e.name}`):(0,Y.jsxs)(`li`,{className:`inline-flex items-center gap-1.5 text-sm`,children:[(0,Y.jsx)(Se,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs`,children:e.type}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`·`}),e.name]},`${e.type}/${e.name}`))})]})]}),(0,Y.jsx)(Sr,{className:`my-4`}),_?(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:q(`engine.packages.detail.kernelReadOnly`,o)}):(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(`p`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.packages.detail.actions`,o)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>m(!0),disabled:!!s,children:[(0,Y.jsx)(ln,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.detail.edit`,o)]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>v(`publish`,()=>go(`${ho}/${encodeURIComponent(h)}/publish`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(e=>{if(e&&e.success===!1){let t=e.validationErrors?.length??0;throw Error(t?J(`engine.packages.detail.publishBlocked`,o,{count:t}):e.validationErrors?.[0]?.message||q(`engine.packages.detail.nothingToPublish`,o))}return e}),q(`engine.packages.detail.published`,o)),disabled:!!s,children:[(0,Y.jsx)(je,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`publish`?`engine.packages.detail.publishing`:`engine.packages.detail.publish`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`revert`,()=>go(`${ho}/${encodeURIComponent(h)}/revert`,{method:`POST`}),q(`engine.packages.detail.reverted`,o)),disabled:!!s,children:[(0,Y.jsx)(Bt,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.detail.revert`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`toggle`,()=>go(`${ho}/${encodeURIComponent(h)}/${g?`disable`:`enable`}`,{method:`PATCH`}),q(g?`engine.packages.detail.disabled`:`engine.packages.detail.enabled`,o)),disabled:!!s,children:[g?(0,Y.jsx)(en,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(Ut,{className:`mr-1.5 h-3.5 w-3.5`}),q(g?`engine.packages.detail.disable`:`engine.packages.detail.enable`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>v(`export`,async()=>{let e=await go(`${ho}/${encodeURIComponent(h)}/export`),t=new Blob([JSON.stringify(e,null,2)],{type:`application/json`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${h}.package.json`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)},q(`engine.packages.detail.exported`,o)),disabled:!!s,children:[(0,Y.jsx)(ee,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`export`?`engine.packages.detail.exporting`:`engine.packages.detail.export`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{let t=window.prompt(q(`engine.packages.detail.duplicatePrompt`,o),`${h}-copy`);if(!(!t||!t.trim())){c(`duplicate`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}/duplicate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({targetPackageId:t.trim(),targetName:`${e?.manifest.name??h} (copy)`})}),u({kind:`ok`,text:q(`engine.packages.detail.duplicated`,o)}),a()}catch(e){u({kind:`err`,text:e?.message??`Duplicate failed`})}finally{c(null)}}},disabled:!!s,children:[(0,Y.jsx)(xn,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`duplicate`?`engine.packages.detail.duplicating`:`engine.packages.detail.duplicate`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{if(window.confirm(J(`engine.packages.detail.adoptConfirm`,o,{name:e?.manifest.name||h}))){c(`adopt`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}/adopt-orphans`,{method:`POST`}),u({kind:`ok`,text:q(`engine.packages.detail.adopted`,o)}),a()}catch(e){u({kind:`err`,text:e?.message??`Adopt failed`})}finally{c(null)}}},disabled:!!s,children:[(0,Y.jsx)(bn,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`adopt`?`engine.packages.detail.adopting`:`engine.packages.detail.adoptOrphans`,o)]}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:async()=>{if(!window.confirm(J(`engine.packages.detail.deleteConfirm`,o,{name:e?.manifest.name||h})))return;let t=window.confirm(q(`engine.packages.detail.deleteKeepData`,o))?``:`?keepData=true`;c(`delete`),u(null);try{await go(`${ho}/${encodeURIComponent(h)}${t}`,{method:`DELETE`}),a(),i(!1)}catch(e){u({kind:`err`,text:e?.message??q(`engine.packages.detail.deleteFailed`,o)})}finally{c(null)}},disabled:!!s,className:`text-destructive hover:bg-destructive/10 hover:text-destructive`,children:[(0,Y.jsx)(Zt,{className:`mr-1.5 h-3.5 w-3.5`}),q(s===`delete`?`engine.packages.detail.deleting`:`engine.packages.detail.deleteApp`,o)]})]})]}),l&&(0,Y.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${l.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:l.text}),(0,Y.jsx)(Co,{pkg:e,open:p,onOpenChange:m,onSaved:()=>{u({kind:`ok`,text:q(`engine.packages.edit.saved`,o)}),a()}})]})})}function To(){let e=X.useMemo(()=>ca(),[]),{pathname:t}=r(),n=X.useMemo(()=>{let e=t.indexOf(`/component`);return e>=0?t.slice(0,e):t},[t]),[i,a]=X.useState([]),[o,s]=X.useState(!0),[c,l]=X.useState(null),[u,d]=X.useState(``),[f,p]=X.useState(!1),[m,h]=X.useState(!1),[g,_]=X.useState(null),[v,y]=X.useState(!1),b=X.useRef(null),[x,S]=X.useState(!1),[C,w]=X.useState(null),T=X.useCallback(async()=>{s(!0),l(null);try{let e=await go(ho),t=Array.isArray(e?.packages)?e.packages:[];t.sort((e,t)=>{let n=e.manifest.scope===`project`?0:1,r=t.manifest.scope===`project`?0:1;return n===r?(e.manifest.name||e.manifest.id).localeCompare(t.manifest.name||t.manifest.id):n-r}),a(t)}catch(t){l(t?.message??q(`engine.packages.loadFailed`,e))}finally{s(!1)}},[e]);X.useEffect(()=>{T()},[T]),X.useEffect(()=>{if(!g)return;let e=i.find(e=>e.manifest.id===g.manifest.id);e&&e!==g&&_(e)},[i,g]);let E=X.useMemo(()=>{let e=u.trim().toLowerCase();return i.filter(t=>(t.manifest.scope===`system`||t.manifest.scope===`cloud`)&&!f?!1:e?t.manifest.id.toLowerCase().includes(e)||(t.manifest.name||``).toLowerCase().includes(e):!0)},[i,u,f]),D=e=>{_(e),y(!0)},O=async t=>{let n=t.target.files?.[0];if(t.target.value=``,n){S(!0),w(null);try{let t=await n.text(),r;try{r=JSON.parse(t)}catch{throw Error(q(`engine.packages.import.invalidJson`,e))}if(!r||typeof r!=`object`||!r.id&&!r.name)throw Error(q(`engine.packages.import.invalidPackage`,e));let i=await go(`/api/v1/marketplace/install-local`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:r})});w({kind:`ok`,text:J(`engine.packages.import.success`,e,{id:i?.manifestId??r.id})}),await T()}catch(t){w({kind:`err`,text:t?.message??q(`engine.packages.import.failed`,e)})}finally{S(!1)}}},k=i.filter(e=>e.manifest.scope===`system`||e.manifest.scope===`cloud`).length;return(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-5xl px-6 py-6`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`rounded-lg bg-primary/10 p-2 text-primary`,children:(0,Y.jsx)(Yr,{className:`h-5 w-5`})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:q(`engine.packages.title`,e)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:q(`engine.packages.description`,e)})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Rt,{className:`mr-1.5 h-3.5 w-3.5 ${o?`animate-spin`:``}`}),q(`engine.packages.refresh`,e)]}),(0,Y.jsx)(`input`,{ref:b,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:O}),(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(Se,{className:`mr-1.5 h-3.5 w-3.5`}),q(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(z,{className:`mr-1.5 h-3.5 w-3.5`}),q(`engine.packages.new`,e)]})]})]}),C&&(0,Y.jsx)(`div`,{className:`mt-4 rounded-md border p-2 text-sm ${C.kind===`ok`?`border-emerald-500/40 bg-emerald-500/10 text-emerald-700 dark:text-emerald-400`:`border-destructive/40 bg-destructive/10 text-destructive`}`,children:C.text}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`relative w-full max-w-xs`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.packages.search`,e),value:u,onChange:e=>d(e.target.value)})]}),k>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(_n,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(H,{htmlFor:`show-kernel`,className:`text-sm text-muted-foreground`,children:J(`engine.packages.showPlatform`,e,{count:k})})]})]}),(0,Y.jsx)(`div`,{className:`mt-4 rounded-lg border`,children:o?(0,Y.jsx)(`div`,{className:`space-y-2 p-4`,children:[0,1,2].map(e=>(0,Y.jsx)(se,{className:`h-10 w-full`},e))}):c?(0,Y.jsxs)(`div`,{className:`flex items-start gap-2 p-4 text-sm text-destructive`,children:[(0,Y.jsx)(R,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:c})]}):E.length===0?(0,Y.jsx)(`div`,{className:`p-8`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.packages.empty`,e)}),(0,Y.jsx)(_r,{children:i.length===0?q(`engine.packages.emptyCreate`,e):q(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(or,{children:[(0,Y.jsx)(Br,{children:(0,Y.jsxs)(Zr,{children:[(0,Y.jsx)(cn,{children:q(`engine.packages.col.name`,e)}),(0,Y.jsx)(cn,{children:`ID`}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.version`,e)}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.scope`,e)}),(0,Y.jsx)(cn,{className:`w-24`,children:q(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(Vn,{children:E.map(e=>(0,Y.jsxs)(Zr,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(Rn,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(Rn,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(Rn,{children:e.manifest.version||`—`}),(0,Y.jsx)(Rn,{children:(0,Y.jsx)(_o,{scope:e.manifest.scope})}),(0,Y.jsx)(Rn,{children:(0,Y.jsx)(vo,{pkg:e})})]},e.manifest.id))})]})}),(0,Y.jsx)(xo,{open:m,onOpenChange:h,onCreated:async()=>{await T()}}),(0,Y.jsx)(wo,{pkg:g,appBase:n,open:v,onOpenChange:y,onChanged:()=>void T()})]})}var Eo=new Set([`field`,`package`]),Do={data:wr,ui:Dn,automation:$e,ai:sn,system:it,platform:it,identity:Et,security:Et},Oo={data:{from:`from-sky-500`,to:`to-blue-600`,ring:`hover:ring-sky-400/40`,text:`text-sky-600 dark:text-sky-400`},ui:{from:`from-violet-500`,to:`to-fuchsia-600`,ring:`hover:ring-violet-400/40`,text:`text-violet-600 dark:text-violet-400`},automation:{from:`from-amber-500`,to:`to-orange-600`,ring:`hover:ring-amber-400/40`,text:`text-amber-600 dark:text-amber-400`},ai:{from:`from-pink-500`,to:`to-rose-600`,ring:`hover:ring-pink-400/40`,text:`text-pink-600 dark:text-pink-400`},identity:{from:`from-emerald-500`,to:`to-teal-600`,ring:`hover:ring-emerald-400/40`,text:`text-emerald-600 dark:text-emerald-400`},security:{from:`from-emerald-500`,to:`to-teal-600`,ring:`hover:ring-emerald-400/40`,text:`text-emerald-600 dark:text-emerald-400`},system:{from:`from-slate-500`,to:`to-slate-700`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`},platform:{from:`from-slate-500`,to:`to-slate-700`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`},other:{from:`from-slate-400`,to:`to-slate-600`,ring:`hover:ring-slate-400/40`,text:`text-slate-600 dark:text-slate-300`}},ko=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ao=[`object`,`view`,`page`,`dashboard`,`report`,`flow`,`action`,`agent`],jo={object:fr,dashboard:A,page:Fe,report:nn,record:Er,metadata:Dn};function Mo(){let e=new Date().getHours();return e<12?`engine.home.greetingMorning`:e<18?`engine.home.greetingAfternoon`:`engine.home.greetingEvening`}function No(e,t){let n=new Date(e).getTime();if(Number.isNaN(n))return``;let r=Date.now()-n,i=t.startsWith(`zh`),a=Math.floor(r/6e4);if(a<1)return i?`刚刚`:`just now`;if(a<60)return i?`${a} 分钟前`:`${a}m ago`;let o=Math.floor(a/60);if(o<24)return i?`${o} 小时前`:`${o}h ago`;let s=Math.floor(o/24);if(s<7)return i?`${s} 天前`:`${s}d ago`;let c=Math.floor(s/7);return i?`${c} 周前`:`${c}w ago`}function Po(){let e=pi(),{loading:t,entries:r}=di(e),{recentItems:i}=ri(),a=X.useMemo(()=>ca(),[]),[s,c]=o(),[l,u]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;u(so(n))}catch{t||u([])}})(),()=>{t=!0}},[e]);let d=s.get(`package`),f=X.useMemo(()=>l?d&&l.some(e=>e.id===d)?d:l[0]?.id??null:null,[l,d]);X.useEffect(()=>{if(!l||l.length===0||d&&l.some(e=>e.id===d))return;let e=new URLSearchParams(s);e.set(`package`,l[0].id),c(e,{replace:!0})},[l,d]);let p=f?`?package=${encodeURIComponent(f)}`:``,m=`metadata${p}`,h=`component/developer/packages${p}`,{summary:g,countsByType:_,packagesByType:v,loading:y}=fi(e,`warning`,f??void 0),b=X.useMemo(()=>r.filter(e=>Eo.has(e.type)||!f?!1:(v[e.type]??[]).includes(f)),[f,r,v]),x=X.useMemo(()=>b.filter(e=>e.allowOrgOverride||e.allowRuntimeCreate),[b]),S=X.useMemo(()=>{let e={};for(let t of b)(e[t.domain??`other`]??=[]).push(t);for(let t of Object.values(e))t.sort((e,t)=>(_[t.type]??0)-(_[e.type]??0));return Object.entries(e).sort(([e],[t])=>(ko.indexOf(e)===-1?99:ko.indexOf(e))-(ko.indexOf(t)===-1?99:ko.indexOf(t)))},[b,_]),C=X.useMemo(()=>{let e=new Map(x.map(e=>[e.type,e]));return Ao.map(t=>e.get(t)).filter(Boolean)},[x]),w=g.total,T=!t&&!y&&w===0;return t||l===null||f&&y?(0,Y.jsx)(`div`,{className:`flex h-full items-center justify-center p-8 text-sm text-muted-foreground`,children:q(`engine.home.loading`,a)}):(0,Y.jsxs)(`div`,{className:`h-full overflow-auto bg-gradient-to-b from-muted/40 to-background`,children:[(0,Y.jsxs)(`div`,{className:`mx-auto w-full max-w-6xl px-6 py-6 space-y-6`,children:[(0,Y.jsxs)(`section`,{className:`relative overflow-hidden rounded-3xl bg-gradient-to-br from-indigo-600 via-violet-600 to-fuchsia-600 px-7 py-8 text-white shadow-xl shadow-violet-500/20`,children:[(0,Y.jsx)(`div`,{className:`pointer-events-none absolute -right-16 -top-20 h-64 w-64 rounded-full bg-white/15 blur-3xl`}),(0,Y.jsx)(`div`,{className:`pointer-events-none absolute -bottom-24 left-1/3 h-56 w-56 rounded-full bg-fuchsia-300/20 blur-3xl`}),(0,Y.jsx)(`div`,{className:`pointer-events-none absolute inset-0 opacity-[0.12]`,style:{backgroundImage:`radial-gradient(currentColor 1px, transparent 1px)`,backgroundSize:`18px 18px`}}),(0,Y.jsxs)(`div`,{className:`relative flex flex-col gap-6 lg:flex-row lg:items-end lg:justify-between`,children:[(0,Y.jsxs)(`div`,{className:`max-w-xl`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium text-white/80`,children:[(0,Y.jsx)(sn,{className:`h-4 w-4`}),q(Mo(),a)]}),(0,Y.jsx)(`h1`,{className:`mt-2 text-3xl font-bold tracking-tight sm:text-4xl`,children:`Studio`}),(0,Y.jsx)(`p`,{className:`mt-2 text-sm leading-relaxed text-white/85 sm:text-base`,children:q(`engine.home.subtitle`,a)}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2.5`,children:[(0,Y.jsx)(I,{asChild:!0,size:`sm`,variant:`ghost`,className:`bg-white/10 text-white shadow-sm ring-1 ring-white/25 hover:bg-white/20 hover:text-white`,children:(0,Y.jsxs)(n,{to:m,children:[(0,Y.jsx)(Dn,{className:`mr-1.5 h-4 w-4`}),q(`engine.home.browseAll`,a)]})}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 rounded-full bg-white/15 px-3 py-1.5 text-xs font-medium text-white/90 backdrop-blur-sm`,children:[(0,Y.jsx)(Kn,{className:`h-3.5 w-3.5`}),q(`engine.directory.quickFind`,a),` ⌘⇧M`]})]})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,Y.jsx)(Fo,{value:b.length,label:q(`engine.home.statTypes`,a)}),(0,Y.jsx)(Fo,{value:x.length,label:q(`engine.home.statWritable`,a)}),(0,Y.jsx)(Fo,{value:l.length,label:q(`engine.home.statPackages`,a)})]})]})]}),(0,Y.jsxs)(`section`,{className:`grid grid-cols-2 gap-4 lg:grid-cols-4`,children:[(0,Y.jsx)(Io,{icon:Dn,from:`from-indigo-500`,to:`to-violet-600`,value:b.length,label:q(`engine.home.statTypes`,a),to_link:m}),(0,Y.jsx)(Io,{icon:Yn,from:`from-sky-500`,to:`to-blue-600`,value:x.length,label:q(`engine.home.statWritable`,a),to_link:m}),(0,Y.jsx)(Io,{icon:Yr,from:`from-emerald-500`,to:`to-teal-600`,value:l.length,label:q(`engine.home.statPackages`,a),to_link:h}),(0,Y.jsxs)(n,{to:T?m:`metadata/_diagnostics${p}`,className:`group relative flex flex-col justify-between overflow-hidden rounded-2xl border p-4 transition-all hover:-translate-y-0.5 hover:shadow-lg `+(T?`border-emerald-200 bg-emerald-50/60 dark:border-emerald-900/50 dark:bg-emerald-950/30`:`border-amber-300 bg-amber-50/70 dark:border-amber-900/50 dark:bg-amber-950/30`),children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br text-white shadow-sm `+(T?`from-emerald-500 to-teal-600`:`from-amber-500 to-orange-600`),children:T?(0,Y.jsx)(Yn,{className:`h-5 w-5`}):(0,Y.jsx)(R,{className:`h-5 w-5`})}),(0,Y.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground transition-transform group-hover:translate-x-0.5`})]}),(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums`,children:T?q(`engine.home.allHealthy`,a):w}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:q(T?`engine.home.allHealthyHint`:`engine.home.statIssues`,a)})]})]})]}),C.length>0&&(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(Lo,{icon:z,title:q(`engine.home.quickActions`,a),hint:q(`engine.home.quickActionsHint`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2.5`,children:C.map(e=>(0,Y.jsx)(I,{asChild:!0,variant:`outline`,size:`sm`,className:`group rounded-full border-transparent bg-muted hover:bg-primary/10 hover:text-primary`,children:(0,Y.jsxs)(n,{to:`metadata/${encodeURIComponent(e.type)}/new${p}`,children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5 text-primary transition-transform group-hover:rotate-90`}),J(`engine.home.newItem`,a,{label:ia(e.type,a,e.label)})]})},e.type))})]}),(0,Y.jsxs)(`div`,{className:`grid gap-6 lg:grid-cols-3`,children:[(0,Y.jsxs)(`section`,{className:`lg:col-span-2`,children:[(0,Y.jsx)(Lo,{icon:Dn,title:q(`engine.home.explore`,a),hint:q(`engine.home.exploreHint`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 grid gap-4 sm:grid-cols-2`,children:S.map(([e,t])=>(0,Y.jsx)(Ro,{domain:e,group:t,countsByType:_,locale:a,packageSuffix:p},e))})]}),(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(Lo,{icon:Ln,title:q(`engine.home.recent`,a)}),(0,Y.jsx)(`div`,{className:`mt-3 rounded-2xl border bg-card p-2`,children:i.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-8 text-center text-xs text-muted-foreground`,children:q(`engine.home.recentEmpty`,a)}):(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:i.slice(0,8).map(e=>{let t=jo[e.type]??Er;return(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(n,{to:e.href,className:`group flex items-center gap-3 rounded-xl px-3 py-2 transition-colors hover:bg-accent`,children:[(0,Y.jsx)(`span`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-muted text-muted-foreground transition-colors group-hover:bg-primary/10 group-hover:text-primary`,children:(0,Y.jsx)(t,{className:`h-4 w-4`})}),(0,Y.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`span`,{className:`block truncate text-sm font-medium`,children:e.label}),(0,Y.jsx)(`span`,{className:`block text-[11px] text-muted-foreground`,children:No(e.visitedAt,a)})]}),(0,Y.jsx)(Gr,{className:`h-3.5 w-3.5 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})},e.id)})})})]})]})]}),(0,Y.jsx)(ao,{})]})}function Fo({value:e,label:t}){return(0,Y.jsxs)(`div`,{className:`rounded-2xl bg-white/15 px-4 py-3 text-center backdrop-blur-sm ring-1 ring-white/20`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums leading-none`,children:e}),(0,Y.jsx)(`div`,{className:`mt-1 text-[11px] font-medium text-white/80`,children:t})]})}function Io({icon:e,from:t,to:r,value:i,label:a,to_link:o}){return(0,Y.jsxs)(n,{to:o,className:`group relative flex flex-col justify-between overflow-hidden rounded-2xl border bg-card p-4 transition-all hover:-translate-y-0.5 hover:border-primary/40 hover:shadow-lg`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`div`,{className:`flex h-10 w-10 items-center justify-center rounded-xl bg-gradient-to-br ${t} ${r} text-white shadow-sm`,children:(0,Y.jsx)(e,{className:`h-5 w-5`})}),(0,Y.jsx)(Gr,{className:`h-4 w-4 text-muted-foreground opacity-0 transition-all group-hover:translate-x-0.5 group-hover:opacity-100`})]}),(0,Y.jsxs)(`div`,{className:`mt-3`,children:[(0,Y.jsx)(`div`,{className:`text-2xl font-bold tabular-nums`,children:i}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:a})]})]})}function Lo({icon:e,title:t,hint:n}){return(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2.5`,children:[(0,Y.jsxs)(`h2`,{className:`flex items-center gap-2 text-base font-semibold`,children:[(0,Y.jsx)(e,{className:`h-4 w-4 text-muted-foreground`}),t]}),n&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n})]})}function Ro({domain:e,group:t,countsByType:r,locale:i,packageSuffix:a}){let o=Do[e]??Er,s=Oo[e]??Oo.other,c=t.slice(0,6),l=t.length-c.length;return(0,Y.jsxs)(`div`,{className:`group rounded-2xl border bg-card p-4 ring-1 ring-transparent transition-all hover:-translate-y-0.5 hover:shadow-lg ${s.ring}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br ${s.from} ${s.to} text-white shadow-sm`,children:(0,Y.jsx)(o,{className:`h-[18px] w-[18px]`})}),(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`div`,{className:`truncate text-sm font-semibold`,children:aa(e,i)}),(0,Y.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.length,` `,q(`engine.home.typesLower`,i)]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:[c.map(e=>(0,Y.jsxs)(n,{to:`metadata/${encodeURIComponent(e.type)}${a}`,className:`inline-flex items-center gap-1.5 rounded-lg border bg-background px-2 py-1 text-xs transition-colors hover:border-primary/50 hover:bg-accent`,children:[(0,Y.jsx)(`span`,{className:`truncate max-w-[10rem]`,children:ia(e.type,i,e.label)}),(0,Y.jsx)(`span`,{className:`tabular-nums text-[10px] text-muted-foreground`,children:r[e.type]??0})]},e.type)),l>0&&(0,Y.jsxs)(n,{to:`metadata${a}`,className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-xs font-medium ${s.text} hover:underline`,children:[`+`,l]})]})]})}function zo({entry:e,itemName:t,subtitle:i,stats:a,actions:o,children:s}){let c=e?.type??``,l=X.useMemo(()=>ca(),[]),u=ia(c,l,e?.label),{pathname:d}=r(),f=X.useMemo(()=>{let e=d.indexOf(`/metadata`);return e>=0?d.slice(0,e+9):`/metadata`},[d]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[t?(0,Y.jsxs)(`div`,{className:`px-6 py-2.5 border-b bg-background flex items-center gap-3 min-h-[44px]`,children:[(0,Y.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground min-w-0`,children:[(0,Y.jsx)(n,{to:f,className:`hover:text-foreground shrink-0`,children:q(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(oe,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(n,{to:`${f}/${encodeURIComponent(c)}`,className:`hover:text-foreground shrink-0`,children:u}),(0,Y.jsx)(oe,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(`span`,{className:`text-foreground font-medium font-mono truncate`,title:t,children:t})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[e?.domain&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:aa(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] h-5 px-1.5 `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] h-5 px-1.5 bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,l)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] h-5 px-1.5 text-muted-foreground`,children:q(`engine.badge.readOnly`,l)})]}),i&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:i}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[a?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-1 px-2 py-0.5 rounded border bg-muted/30`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,Y.jsx)(`span`,{className:`text-xs font-semibold tabular-nums`,children:e.value})]},t)),o]})]}):(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsxs)(`nav`,{className:`flex items-center gap-1.5 text-xs text-muted-foreground mb-2`,children:[(0,Y.jsx)(n,{to:f,className:`hover:text-foreground`,children:q(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(oe,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{className:`text-foreground font-medium`,children:u})]}),(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-3 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold truncate`,children:u}),(0,Y.jsx)(`code`,{className:`text-xs font-mono text-muted-foreground`,children:c}),e?.domain&&(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:aa(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(U,{className:`text-[10px] `+(e.overrideSource===`env`?`bg-amber-100 text-amber-800 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),title:e.overrideSource===`env`?`Writable via OBJECTSTACK_METADATA_WRITABLE env var`:`Writable per ADR-0005 overlay opt-in`,children:q(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(U,{className:`text-[10px] bg-sky-100 text-sky-800 hover:bg-sky-100`,title:`Code-shipped items are locked; new items can be created at runtime`,children:q(`engine.badge.createOnly`,l)}):(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:q(`engine.badge.readOnly`,l)})]}),i&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1`,children:i}),!i&&e?.description&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,children:e.description})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[a?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex flex-col items-end px-3 py-1 rounded border bg-muted/30 min-w-[64px]`,children:[(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:e.label}),(0,Y.jsx)(`span`,{className:`text-sm font-semibold tabular-nums`,children:e.value})]},t)),o]})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:s})]})}var Bo={primary:`default`,secondary:`secondary`,danger:`destructive`,ghost:`ghost`,link:`link`};function Vo(e,t,n){return e.indexOf("${")===-1?e:e.replace(/\$\{(param|ctx)\.([\w.]+)\}/g,(e,r,i)=>{let a=r===`param`?n:t,o=i.split(`.`).reduce((e,t)=>e?.[t],a);return o==null?``:encodeURIComponent(String(o))})}function Ho({entry:e,location:t,recordId:n,onAfter:r}){let[i,a]=X.useState(null),[o,s]=X.useState({open:!1,params:[]}),[c,l]=X.useState({open:!1}),u=X.useMemo(()=>d(),[]),f=X.useMemo(()=>(e?.actions??[]).filter(e=>!e.locations||e.locations.length===0||e.locations.includes(t)),[e?.actions,t]);if(f.length===0)return null;let p=(e,t)=>new Promise(n=>{s({open:!0,params:e,title:t,resolve:n})}),m=async e=>{let t=e.label??e.name;if(e.type!==`api`){ei.error(`Action “${t}”: type "${e.type??`script`}" is not supported here yet.`);return}if(e.confirmText&&!window.confirm(e.confirmText))return;let i;if(Array.isArray(e.params)&&e.params.length>0){let n=await p(e.params,t);if(n==null)return;i=n}else i=e.params??{};let o={recordId:n,origin:window.location.origin},s=Vo(e.target??``,o,i);if(!s){ei.error(`Action “${t}” has no target.`);return}let c=``.replace(/\/+$/,``),d=/^https?:\/\//i.test(s)?s:`${c}${s}`,f=(e.method||`POST`).toUpperCase();a(e.name);try{let n={method:f,headers:{"Content-Type":`application/json`},credentials:`include`};f!==`GET`&&f!==`DELETE`&&(n.body=JSON.stringify(i));let a=await u(d,n),o=null;try{o=await a.json()}catch{}if(!a.ok||o&&o.success===!1){let n=o?.error||o?.message||`HTTP ${a.status} ${a.statusText}`.trim();ei.error(`${e.errorMessage?`${e.errorMessage}: `:``}${t}: ${n}`);return}if(e.resultDialog)l({open:!0,spec:e.resultDialog,data:o??{}});else{let n=e.successMessage||(typeof o?.message==`string`?o.message:`${t} ✓`);ei.success(n)}e.refreshAfter&&r?.()}catch(e){ei.error(`${t}: ${e?.message??String(e)}`)}finally{a(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[f.map(e=>{let t=e.icon?ta(e.icon):null,n=i===e.name;return(0,Y.jsxs)(I,{size:`sm`,variant:Bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):t?(0,Y.jsx)(t,{className:`h-4 w-4 mr-1`}):null,e.label??e.name]},e.name)}),(0,Y.jsx)(si,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(oi,{state:c,onAcknowledge:()=>l({open:!1})})]})}function Uo(e){let t=(Array.isArray(e)?e:[e]).map(e=>e.split(`.`));return(e,n)=>{for(let r of t){let t=e;for(let e of r)if(t&&typeof t==`object`&&e in t)t=t[e];else{t=void 0;break}if(t===n)return!0}return!1}}var Wo=new Map;function Go(e){let t=Wo.get(e.type);if(!t){Wo.set(e.type,e);return}let n={...t};for(let[t,r]of Object.entries(e))r!==void 0&&(n[t]=r);Wo.set(e.type,n)}function Ko(e){return Wo.get(e)}function qo(e){let t=[];for(let n of Wo.values())if(n.anchors?.length)for(let r of n.anchors)r.anchorType===e&&t.push({type:n.type,config:n,anchor:r});return t.sort((e,t)=>{let n=e.anchor.order??100,r=t.anchor.order??100;if(n!==r)return n-r;let i=e.anchor.groupLabel??e.config.label??e.type,a=t.anchor.groupLabel??t.config.label??t.type;return i.localeCompare(a)}),t}function Jo(e,t){let n=Wo.get(e)??{type:e};return{...n,type:e,label:n.label??t?.label??e,description:n.description??t?.description,domain:n.domain??t?.domain??`other`,allowOrgOverride:t?.allowOrgOverride,defaultSchema:n.defaultSchema}}function Yo(e,t){if(t===`overlay`||t===`runtime`)return`runtime`;if(t===`code`||t===`artifact`)return`artifact`;let n=e._packageId;return!n||n===`sys_metadata`?`runtime`:`artifact`}function Xo({type:e}){let t=s(),n=e??t.type??``;if(n===`package`)return(0,Y.jsx)(l,{to:`/apps/${t.appName??`studio`}/component/developer/packages`,replace:!0});let r=Ko(n);if(r?.ListPage){let e=r.ListPage;return(0,Y.jsx)(e,{type:n})}return(0,Y.jsx)(Zo,{type:n,appName:t.appName})}function Zo({type:e,appName:t}){let r=i(),a=pi(),{entries:s}=di(a),c=s.find(t=>t.type===e),l=Jo(e,c),[u,d]=X.useState([]),[f,p]=X.useState(!0),[m,h]=X.useState(null),[g,_]=X.useState(``),[v,y]=X.useState(`all`),[b,x]=o(),[S,C]=X.useState(0),[w,T]=X.useState(null);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await a.list(`package`);if(e)return;T(so(t))}catch{e||T([])}})(),()=>{e=!0}},[a]);let[E,D]=X.useState(null);X.useEffect(()=>{let e=!1;if(!t){D(null);return}return(async()=>{try{let n=await a.list(`app`);if(e)return;let r=(n??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).find(e=>e?.name===t||e?._packageId===t);D(r?._packageId??null)}catch{e||D(null)}})(),()=>{e=!0}},[a,t]);let O=b.get(`package`),k=X.useMemo(()=>{if(!w)return null;if(O&&w.some(e=>e.id===O))return O;if(w.length===0)return null;if(E&&w.some(e=>e.id===E))return E;let e=new Map;for(let t of u){let n=t.item?._packageId;n&&n!==`sys_metadata`&&e.set(n,(e.get(n)??0)+1)}let t=null,n=0;for(let r of w){let i=e.get(r.id)??0;i>n&&(t=r.id,n=i)}return t??w[0]?.id??null},[w,O,u,E]);X.useEffect(()=>{if(!w||w.length===0||O&&w.some(e=>e.id===O)||!(E&&w.some(e=>e.id===E))&&u.length===0||!k)return;let e=new URLSearchParams(b);e.set(`package`,k),x(e,{replace:!0})},[w,O,u,k,E]);let A=k?`?package=${encodeURIComponent(k)}`:``,[j,M]=X.useState(!1),ee=X.useCallback(()=>{let e=w??[];if(w!==null&&e.length===0){M(!0);return}if(e.length>0&&!k){r(`./new?package=${encodeURIComponent(e[0].id)}`);return}r(`./new${A}`)},[w,k,A,r]);X.useEffect(()=>{let t=!1;return p(!0),h(null),(async()=>{try{let n=await a.list(e);if(t)return;let r=(n??[]).map(e=>{let t=(e&&typeof e==`object`&&`item`in e?e.item:e)??{},n=t?._diagnostics??e?._diagnostics??void 0;return{raw:e,item:t,source:Yo(t,e?.source),diagnostics:n}});d(r),p(!1)}catch(e){t||(h(e?.message??String(e)),p(!1))}})(),()=>{t=!0}},[a,e,S]);let te=l.searchableFields??[`name`,`label`,`description`],N=X.useMemo(()=>u.filter(e=>l.listFilter&&!l.listFilter(e.item)||!k?!1:e.item?._packageId===k),[u,k,l]),ne=N.filter(e=>!(!mi(e.item,g,te)||v!==`all`&&e.source!==v)),re=X.useMemo(()=>{let e={all:N.length,artifact:0,runtime:0};for(let t of N)e[t.source]++;return e},[N]),P=X.useMemo(()=>N.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[N]),ie=X.useMemo(()=>N.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[N]),ae=l.listColumns??Qo(l.primaryKey??`name`),F=ca(),oe=ia(e,F,c?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=q(t,F);return n===t?e.label:n};return(0,Y.jsx)(zo,{entry:c??{type:e,label:e},stats:[{label:q(`engine.list.items`,F),value:N.length},{label:q(`engine.list.filtered`,F),value:ne.length},...P>0?[{label:q(`engine.list.invalid`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(R,{className:`w-3.5 h-3.5`}),P]})}]:[],...ie>0?[{label:q(`engine.list.warnings`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(R,{className:`w-3.5 h-3.5`}),ie]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ho,{entry:c,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:q(`engine.list.refresh`,F),children:(0,Y.jsx)(Rt,{className:`h-4 w-4`})}),(c?.allowOrgOverride||c?.allowRuntimeCreate)&&(0,Y.jsxs)(I,{size:`sm`,variant:l.createFields?`default`:`outline`,onClick:ee,title:l.createFields?J(`engine.list.createHint`,F,{type:oe}):void 0,children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),q(`engine.list.create`,F)]})]}),children:(0,Y.jsxs)(`div`,{className:`p-6 space-y-4`,children:[(0,Y.jsx)(xo,{open:j,onOpenChange:M,onCreated:e=>r(`./new?package=${encodeURIComponent(e)}`)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 min-w-[200px] max-w-md`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:q(`engine.list.search`,F),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(He,{value:v,onValueChange:y,children:[(0,Y.jsx)(rn,{className:`w-[180px]`,children:(0,Y.jsx)(_t,{})}),(0,Y.jsxs)($t,{children:[(0,Y.jsxs)(qt,{value:`all`,children:[q(`engine.list.allSources`,F),` (`,re.all,`)`]}),(0,Y.jsxs)(qt,{value:`artifact`,children:[q(`engine.list.source.artifact`,F),` (`,re.artifact,`)`]}),(0,Y.jsxs)(qt,{value:`runtime`,children:[q(`engine.list.source.runtime`,F),` (`,re.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[q(`engine.edit.loading`,F),` `,e,`…`]}),m&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:m}),!f&&!m&&w!==null&&w.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No project packages installed`}),(0,Y.jsx)(_r,{children:`Studio only shows metadata that belongs to a project software package. Install or create a project package to manage its metadata here.`})]}),!f&&!m&&w!==null&&w.length>0&&ne.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:N.length===0?J(`engine.list.emptyType`,F,{type:oe}):J(`engine.list.emptyQuery`,F,{query:g})}),(0,Y.jsx)(_r,{children:l.emptyStateHint??(c?.allowOrgOverride||c?.allowRuntimeCreate?J(`engine.list.createHint`,F,{type:oe}):q(`engine.list.readOnlyHint`,F))}),N.length===0&&(c?.allowOrgOverride||c?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(I,{onClick:ee,children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),q(`engine.list.create`,F)]})})]}),!f&&ne.length>0&&(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[ae.map(e=>(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,style:e.width?{width:e.width}:void 0,children:se(e)},e.key)),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-right font-medium w-[80px]`,children:q(`engine.list.col.source`,F)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:ne.map((e,t)=>{let r=l.primaryKey??`name`,i=String(e.item[r]??`(unnamed-${t})`),a=e.item._packageId,o=a&&a!==`sys_metadata`?`?package=${encodeURIComponent(a)}`:A,s=e.diagnostics?.valid===!1,c=e.diagnostics?.errors??[],u=e.diagnostics?.warnings??[],d=!s&&u.length>0,f=s?c.slice(0,3).map(e=>`${e.path||`(root)`}: ${e.message}`).join(`
3
3
  `)+(c.length>3?`\n+${c.length-3} more`:``):d?u.slice(0,3).map(e=>`${e.path||`(root)`}: ${e.message}`).join(`
4
4
  `)+(u.length>3?`\n+${u.length-3} more`:``):``;return(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50 `+(s?`bg-destructive/[0.04]`:d?`bg-amber-500/[0.05]`:``),children:[ae.map((t,r)=>{let a=e.item[t.key],l=t.render?t.render(a,e.item):$o(a);return(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:r===0?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[s&&(0,Y.jsx)(`span`,{className:`inline-flex`,"aria-label":q(`engine.list.invalidTitle`,F),title:`${J(`engine.list.invalidCount`,F,{count:c.length})}\n${f}`,children:(0,Y.jsx)(R,{className:`w-3.5 h-3.5 text-destructive shrink-0`})}),d&&(0,Y.jsx)(`span`,{className:`inline-flex`,"aria-label":q(`engine.list.warnTitle`,F),title:`${J(`engine.list.warnCount`,F,{count:u.length})}\n${f}`,children:(0,Y.jsx)(R,{className:`w-3.5 h-3.5 text-amber-600 dark:text-amber-400 shrink-0`})}),(0,Y.jsx)(n,{to:`./${encodeURIComponent(i)}${o}`,className:`text-primary hover:underline font-mono`,children:l})]}):l},t.key)}),(0,Y.jsxs)(`td`,{className:`px-3 py-2 text-right align-top`,children:[e.item._lock&&e.item._lock!==`none`&&(0,Y.jsx)(`span`,{className:`inline-flex items-center mr-1 text-amber-600 dark:text-amber-400`,title:e.item._lockReason??`_lock=${String(e.item._lock)}`,children:(0,Y.jsx)(Pt,{className:`h-3 w-3`})}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] `+(e.source===`artifact`?`border-sky-500/50 text-sky-700 dark:text-sky-300`:`border-emerald-500/50 text-emerald-700 dark:text-emerald-300`),title:e.source===`artifact`?`${q(`engine.list.source.artifactDesc`,F)}${e.item._packageId?` (${e.item._packageId})`:``}`:q(`engine.list.source.runtimeDesc`,F),children:q(`engine.list.source.${e.source}`,F)})]})]},i+t)})})]})})]})})}function Qo(e){return[{key:e,label:e,width:`30%`},{key:`label`,label:`Label`,width:`30%`},{key:`description`,label:`Description`}]}function $o(e){if(e==null||e===``)return(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`—`});if(typeof e==`boolean`)return e?`✓`:`✗`;if(typeof e==`object`)try{return(0,Y.jsx)(`code`,{className:`font-mono text-xs`,children:JSON.stringify(e).slice(0,60)})}catch{return String(e)}return String(e)}var es=[`object`,`page`,`dashboard`,`report`,`url`,`group`],ts=[`default`,`view`,`record`,`filters`],ns={object:{targetKey:`objectName`,metaType:`object`},page:{targetKey:`pageName`,metaType:`page`},dashboard:{targetKey:`dashboardName`,metaType:`dashboard`},report:{targetKey:`reportName`,metaType:`report`},url:{targetKey:`url`},group:{}},rs=[`objectName`,`viewName`,`recordId`,`recordMode`,`filters`,`pageName`,`dashboardName`,`reportName`,`url`,`target`,`params`],is=[`path`,`kind`,`href`,`route`,`object`,`page`,`dashboard`,`report`],as={object:`object`,page:`page`,dashboard:`dashboard`,report:`report`,link:`url`,url:`url`,group:`group`};function os(e){let t=e.type;if(typeof t==`string`&&es.includes(t))return t;let n=e.kind;if(typeof n==`string`&&as[n])return as[n];if(e.objectName||e.object)return`object`;if(e.pageName||e.page)return`page`;if(e.dashboardName||e.dashboard)return`dashboard`;if(e.reportName||e.report)return`report`;if(e.url||e.href)return`url`;if(Array.isArray(e.children)&&e.children.length>0)return`group`;let r=e.path;return typeof r==`string`&&/^https?:/i.test(r)?`url`:null}function ss(e){if(e.recordId)return`record`;let t=e.filters;return t&&typeof t==`object`&&!Array.isArray(t)?`filters`:e.viewName?`view`:`default`}function cs(e=[]){let t={};for(let n of[...rs,...is])e.includes(n)||(t[n]=void 0);return t}var ls={default:[`objectName`],view:[`objectName`,`viewName`],record:[`objectName`,`recordId`,`recordMode`],filters:[`objectName`,`filters`]};function us(e,t,n){let r=e.id;if(typeof r==`string`&&r)return r;let i=`nav_${(n??String(e.objectName??e.label??`item`)).toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`item`}`,a=new Set(t.map(e=>typeof e.id==`string`?e.id:``).filter(Boolean));if(!a.has(i))return i;let o=2;for(;a.has(`${i}_${o}`);)o++;return`${i}_${o}`}var ds=[`nav`,`navigation`,`tabs`,`items`,`menu`];function fs(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)\[(\d+)\]$/.exec(e);if(!t)return null;n.push({key:t[1],index:Number(t[2])})}return n.length>0?n:null}function ps(e,t){let n=e[t[0].key];if(!Array.isArray(n))return{parent:[],node:null,index:-1};let r=n[t[0].index]??null;for(let e=1;e<t.length;e++){if(!r)return{parent:n,node:null,index:t[e].index};if(n=r[t[e].key],!Array.isArray(n))return{parent:[],node:null,index:-1};r=n[t[e].index]??null}return{parent:n,node:r,index:t[t.length-1].index}}function ms(e,t,n){let r=t[0].key,i=Array.isArray(e[r])?[...e[r]]:[];if(t.length===1)return{[r]:Ti(i,t[0].index,n)};let a=i,o=[];for(let e=0;e<t.length-1;e++){let n={...a[t[e].index]??{}};o.push({arr:a,index:t[e].index,node:n});let r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let s=Ti(a,t[t.length-1].index,n);return o[o.length-1].node[t[t.length-1].key]=s,{[r]:i}}function hs(e,t,n){let r=t[0].key;if(t.length===1)return{[r]:n};let i=Array.isArray(e[r])?[...e[r]]:[],a=i;for(let e=0;e<t.length-2;e++){let n={...a[t[e].index]??{}},r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let o=t[t.length-2],s=t[t.length-1].key,c={...a[o.index]??{}};return c[s]=n,a[o.index]=c,{[r]:i}}function gs(e){let t=pi(),[n,r]=X.useState({options:[],loading:!!e});return X.useEffect(()=>{if(!e){r({options:[],loading:!1});return}let n=!1;return r(e=>({...e,loading:!0})),t.list(e).then(e=>{if(n)return;let t=(Array.isArray(e)?e:[]).filter(e=>e&&typeof e.name==`string`&&e.name).map(e=>({value:String(e.name),label:typeof e.label==`string`&&e.label&&e.label!==e.name?`${e.label} (${e.name})`:String(e.name)}));r({options:t,loading:!1})}).catch(()=>{n||r({options:[],loading:!1})}),()=>{n=!0}},[t,e]),n}var _s={currentUserId:`{current_user_id}`,currentOrgId:`{current_org_id}`};function vs({objectName:e,filters:t,onCommit:n,disabled:r,locale:i}){let{fields:a}=Li(e||void 0),o=X.useMemo(()=>a.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[a]),s=Object.entries(t),c=(e,t,r)=>{let i=s.slice();i[e]=[t,r],n(Object.fromEntries(i.filter(([e])=>e!==``)))},l=e=>{let t=s.slice();t.splice(e,1),n(Object.fromEntries(t))};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground`,children:q(`engine.inspector.appNav.filters`,i)}),s.map(([e,t],n)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Y.jsx)(pa,{value:e,onCommit:e=>c(n,e,t),options:o,placeholder:q(`engine.inspector.appNav.filtersField`,i),disabled:r,mono:!0})}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`=`}),(0,Y.jsx)(`input`,{value:t,onChange:t=>c(n,e,t.target.value),placeholder:q(`engine.inspector.appNav.filtersValue`,i),disabled:r,className:`h-7 w-0 min-w-0 flex-1 rounded border bg-background px-2 font-mono text-xs`,"data-testid":`nav-filter-value-${e||`new`}`}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>l(n),disabled:r,className:`rounded p-1 text-muted-foreground hover:bg-muted`,"aria-label":q(`engine.inspector.appNav.filtersRemove`,i),"data-testid":`nav-filter-remove-${e||`new`}`,children:(0,Y.jsx)(P,{className:`h-3 w-3`})})]},`${e}-${n}`)),(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>n({...t,"":``}),disabled:r||Object.prototype.hasOwnProperty.call(t,``),className:`inline-flex items-center gap-1 rounded border px-2 py-1 text-[11px] text-muted-foreground hover:bg-muted`,"data-testid":`nav-filter-add`,children:[(0,Y.jsx)(z,{className:`h-3 w-3`}),q(`engine.inspector.appNav.filtersAdd`,i)]}),(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:q(`engine.inspector.appNav.filtersHint`,i)})]})}function ys({selection:e,draft:t,name:n,onPatch:r,onClearSelection:i,onSelectionChange:a,locale:o,readOnly:s}){let c=fs(e.id),{node:l,parent:u,index:d}=c?ps(t,c):{node:null,parent:[],index:-1},f=l?os(l):null,p=l?ss(l):`default`,m=String(l?.objectName??l?.object??``),h=gs(f===`object`?`object`:void 0),g=gs(f&&f!==`object`?ns[f].metaType:void 0),_=gs(f===`object`&&p===`view`?`view`:void 0),v=X.useMemo(()=>m?_.options.filter(e=>e.value.startsWith(`${m}.`)||!e.value.includes(`.`)):_.options,[_.options,m]);if(!c||!l)return(0,Y.jsx)(Zi,{kindLabel:q(`engine.inspector.appNav.kind`,o),title:e.label??e.id,onClose:i,closeLabel:q(`engine.inspector.appNav.close`,o),children:(0,Y.jsx)($i,{message:e.id})});let y=l.label??l.title??l.name??e.id,b=e=>{let n=e.type??l.type??f??void 0;r(ms(t,c,{...l,id:us(l,u),...n?{type:n}:{},...e}))},x=e=>{let t=ns[e].targetKey,n=e===`object`?ls.default:t?[t]:[];b({type:e,...cs(n)})},S=e=>{let t=cs(ls[e]);b(e===`filters`?{...t,objectName:m,filters:l.filters??{}}:{...t,objectName:m})},C=()=>{r(ms(t,c,null)),i()},w=e=>{let n=_i(u,d,e);r(hs(t,c,n));let i=c.slice(0,-1).map(e=>`${e.key}[${e.index}]`).join(`.`),o=c[c.length-1].key,s=i?`${i}.${o}[${e}]`:`${o}[${e}]`;a?.({kind:`nav`,id:s,label:String(y)})},T=f&&f!==`group`?ui({...l,type:f},`/apps/${n||`app`}`,_s).href:null,E=ns[f??`group`];return(0,Y.jsxs)(Zi,{kindLabel:q(`engine.inspector.appNav.kind`,o),title:String(y),onClose:i,closeLabel:q(`engine.inspector.appNav.close`,o),headerActions:(0,Y.jsx)(Oi,{index:d,total:u.length,onMove:w,upLabel:q(`engine.inspector.reorder.up`,o),downLabel:q(`engine.inspector.reorder.down`,o),disabled:s}),footer:(0,Y.jsx)(Qi,{label:q(`engine.inspector.appNav.remove`,o),onClick:C,disabled:s}),children:[(0,Y.jsx)(G,{label:q(`engine.inspector.appNav.label`,o),value:String(l.label??l.title??l.name??``),onCommit:e=>b({label:e}),disabled:s}),(0,Y.jsx)(G,{label:q(`engine.inspector.appNav.icon`,o),value:String(l.icon??``),onCommit:e=>b({icon:e}),disabled:s}),(0,Y.jsx)(W,{label:q(`engine.inspector.appNav.typeField`,o),value:f??``,options:es.map(e=>({value:e,label:q(`engine.inspector.appNav.type.${e}`,o)})),onCommit:e=>x(e),disabled:s}),f===`object`&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(pa,{label:q(`engine.inspector.appNav.object`,o),value:m,options:h.options,loading:h.loading,onCommit:e=>b({objectName:e,object:void 0}),disabled:s,mono:!0}),(0,Y.jsx)(W,{label:q(`engine.inspector.appNav.targetMode`,o),value:p,options:ts.map(e=>({value:e,label:q(`engine.inspector.appNav.mode.${e}`,o)})),onCommit:e=>S(e),disabled:s||!m}),p===`view`&&(0,Y.jsx)(pa,{label:q(`engine.inspector.appNav.view`,o),value:String(l.viewName??``),options:v,loading:_.loading,onCommit:e=>b({viewName:e}),disabled:s,mono:!0}),p===`record`&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(G,{label:q(`engine.inspector.appNav.recordId`,o),value:String(l.recordId??``),onCommit:e=>b({recordId:e}),disabled:s,mono:!0}),(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:q(`engine.inspector.appNav.recordIdHint`,o)}),(0,Y.jsx)(W,{label:q(`engine.inspector.appNav.recordMode`,o),value:String(l.recordMode??`view`),options:[{value:`view`,label:q(`engine.inspector.appNav.recordModeView`,o)},{value:`edit`,label:q(`engine.inspector.appNav.recordModeEdit`,o)}],onCommit:e=>b({recordMode:e}),disabled:s})]}),p===`filters`&&(0,Y.jsx)(vs,{objectName:m,filters:l.filters??{},onCommit:e=>b({filters:e}),disabled:s,locale:o})]}),f&&f!==`object`&&f!==`group`&&E.targetKey&&(E.metaType?(0,Y.jsx)(pa,{label:q(`engine.inspector.appNav.type.${f}`,o),value:String(l[E.targetKey]??``),options:g.options,loading:g.loading,onCommit:e=>b({[E.targetKey]:e}),disabled:s,mono:!0}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(G,{label:q(`engine.inspector.appNav.url`,o),value:String(l.url??l.href??``),onCommit:e=>b({url:e,href:void 0}),disabled:s,mono:!0}),(0,Y.jsx)(W,{label:q(`engine.inspector.appNav.urlTarget`,o),value:String(l.target??`_self`),options:[{value:`_self`,label:q(`engine.inspector.appNav.urlTargetSelf`,o)},{value:`_blank`,label:q(`engine.inspector.appNav.urlTargetBlank`,o)}],onCommit:e=>b({target:e}),disabled:s})]})),T&&(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 px-2 py-1.5`,"data-testid":`nav-target-preview`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.inspector.appNav.preview`,o)}),(0,Y.jsx)(`div`,{className:`break-all font-mono text-[11px]`,children:T})]})]})}var bs=ds;function xs(e){if(!e||!e.startsWith(`nav:`))return null;let t=e.slice(4);return t.length>0?t:null}function Ss(e){return`nav:${e}`}var Cs=`surface`;function ws(e){return`${e.type}:${e.name}`}function Ts(e){if(!e)return null;let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return n&&r?{type:n,name:r}:null}function Es(e,t){let n=(e,r)=>{for(let i=0;i<e.length;i++){let a=e[i];if(!a||typeof a!=`object`)continue;let o=`${r}[${i}]`;if(a.id===t){let e=a.label??a.title??a.name;return{selectionId:o,label:typeof e==`string`?e:void 0}}if(Array.isArray(a.children)){let e=n(a.children,`${o}.children`);if(e)return e}}return null};for(let t of bs){let r=e[t];if(!Array.isArray(r))continue;let i=n(r,t);if(i)return i}return null}function Ds(e,t){let n=t.split(`.`),r;for(let t=0;t<n.length;t++){let i=/^([a-zA-Z_]\w*)\[(\d+)\]$/.exec(n[t]);if(!i)return null;let a=i[1],o=Number(i[2]),s=t===0?e[a]:r?.[a];if(!Array.isArray(s)||(r=s[o],!r||typeof r!=`object`))return null}return typeof r?.id==`string`&&r.id?r.id:null}var Os={unchanged:{badge:`bg-muted text-muted-foreground border border-border`,row:``},modified:{badge:`bg-amber-100 text-amber-900 border border-amber-300 dark:bg-amber-950/60 dark:text-amber-200 dark:border-amber-800`,row:`bg-amber-50/50 dark:bg-amber-950/20`},added:{badge:`bg-emerald-100 text-emerald-900 border border-emerald-300 dark:bg-emerald-950/60 dark:text-emerald-200 dark:border-emerald-800`,row:`bg-emerald-50/50 dark:bg-emerald-950/20`},removed:{badge:`bg-rose-100 text-rose-900 border border-rose-300 dark:bg-rose-950/60 dark:text-rose-200 dark:border-rose-800`,row:`bg-rose-50/50 dark:bg-rose-950/20`}};function ks(e,t){let n=As(e)?e:{},r=As(t)?t:{},i=new Set([...Object.keys(n),...Object.keys(r)]),a=[];for(let e of i){let t=e in n,i=e in r,o=n[e],s=r[e],c;c=t&&!i?`removed`:!t&&i?`added`:js(o)===js(s)?`unchanged`:`modified`,a.push({key:e,status:c,codeValue:o,effectiveValue:s})}let o={modified:0,added:1,removed:2,unchanged:3};return a.sort((e,t)=>o[e.status]===o[t.status]?e.key.localeCompare(t.key):o[e.status]-o[t.status]),a}function As(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function js(e){try{return JSON.stringify(e,(e,t)=>As(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}catch{return String(e)}}function Ms(e){if(e===void 0)return`—`;if(e===null)return`null`;if(typeof e==`string`)return e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return String(e)}}function Ns(e,t){if(e==null)return 0;let n=0;for(let r of ks(e,t))r.status!==`unchanged`&&(n+=1);return n}function Ps({layered:e,loading:t,locale:n}){if(t)return(0,Y.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground`,children:q(`engine.edit.loading`,n)});if(!e)return(0,Y.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground`,children:q(`engine.layers.diff.noBaseline`,n)});let r=e.overlay!=null;return(0,Y.jsxs)(Lr,{defaultValue:`diff`,className:`w-full`,children:[(0,Y.jsxs)(Pn,{className:`grid grid-cols-4 w-fit`,children:[(0,Y.jsx)(gr,{value:`diff`,children:q(`engine.layers.diff`,n)}),(0,Y.jsxs)(gr,{value:`code`,children:[q(`engine.layers.code`,n),(0,Y.jsx)(U,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`artifact`})]}),(0,Y.jsxs)(gr,{value:`overlay`,children:[q(`engine.layers.overlay`,n),r?(0,Y.jsx)(U,{className:`ml-1.5 text-[10px] bg-emerald-600 text-emerald-50`,children:e.overlayScope??`set`}):(0,Y.jsx)(U,{variant:`outline`,className:`ml-1.5 text-[10px] text-muted-foreground`,children:`none`})]}),(0,Y.jsxs)(gr,{value:`effective`,children:[q(`engine.layers.effective`,n),(0,Y.jsx)(U,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`merged`})]})]}),(0,Y.jsx)(wn,{value:`diff`,className:`mt-3`,children:(0,Y.jsx)(Fs,{code:e.code,effective:e.effective,locale:n})}),(0,Y.jsx)(wn,{value:`code`,className:`mt-3`,children:(0,Y.jsx)(Ls,{payload:e.code,emptyHint:q(`engine.layers.diff.noBaseline`,n)})}),(0,Y.jsx)(wn,{value:`overlay`,className:`mt-3`,children:(0,Y.jsx)(Ls,{payload:e.overlay,emptyHint:q(`engine.layers.diff.noChanges`,n)})}),(0,Y.jsx)(wn,{value:`effective`,className:`mt-3`,children:(0,Y.jsx)(Ls,{payload:e.effective,emptyHint:`No effective value resolved.`})})]})}function Fs({code:e,effective:t,locale:n}){let[r,i]=X.useState(!1);if(e==null)return(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-4 text-xs text-muted-foreground`,children:q(`engine.layers.diff.noBaseline`,n)});let a=X.useMemo(()=>ks(e,t),[e,t]),o=X.useMemo(()=>a.reduce((e,t)=>(e[t.status]+=1,e),{unchanged:0,modified:0,added:0,removed:0}),[a]),s=r?a:a.filter(e=>e.status!==`unchanged`),c=o.modified>0||o.added>0||o.removed>0;return(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 flex-wrap`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:J(`engine.layers.diff.summary`,n,{modified:o.modified,added:o.added,removed:o.removed})}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground cursor-pointer select-none`,children:[(0,Y.jsx)(_n,{checked:r,onCheckedChange:i,"aria-label":q(`engine.layers.diff.showUnchanged`,n)}),q(`engine.layers.diff.showUnchanged`,n),(0,Y.jsx)(U,{variant:`outline`,className:`ml-1 text-[10px]`,children:o.unchanged})]})]}),!c&&!r?(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-4 text-xs text-muted-foreground`,children:q(`engine.layers.diff.noChanges`,n)}):(0,Y.jsxs)(`div`,{className:`rounded border overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-[minmax(140px,1fr)_minmax(160px,1.4fr)_minmax(160px,1.4fr)_auto] bg-muted/50 text-[11px] font-medium uppercase tracking-wide text-muted-foreground`,children:[(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:q(`engine.layers.diff.field`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:q(`engine.layers.diff.code`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:q(`engine.layers.diff.effective`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:q(`engine.layers.diff.status`,n)})]}),(0,Y.jsx)(`div`,{className:`divide-y`,children:s.map(e=>{let t=Os[e.status];return(0,Y.jsxs)(`div`,{className:B(`grid grid-cols-[minmax(140px,1fr)_minmax(160px,1.4fr)_minmax(160px,1.4fr)_auto] text-xs`,t.row),children:[(0,Y.jsx)(`div`,{className:`px-3 py-2 font-mono text-foreground truncate`,title:e.key,children:e.key}),(0,Y.jsx)(Is,{value:e.codeValue,muted:e.status===`added`}),(0,Y.jsx)(Is,{value:e.effectiveValue,muted:e.status===`removed`}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:(0,Y.jsx)(`span`,{className:B(`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium`,t.badge),children:q(`engine.layers.diff.${e.status}`,n)})})]},e.key)})})]})]})}function Is({value:e,muted:t}){let n=Ms(e);return(0,Y.jsx)(`div`,{className:B(`px-3 py-2 font-mono break-all`,t||e===void 0?`text-muted-foreground italic`:`text-foreground`),title:n.length>200?n:void 0,children:n.length>200?`${n.slice(0,200)}…`:n})}function Ls({payload:e,emptyHint:t}){if(e==null)return(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-4 text-xs text-muted-foreground`,children:t});let n;try{n=JSON.stringify(e,null,2)}catch{n=String(e)}return(0,Y.jsx)(`pre`,{className:`rounded border bg-muted/30 p-3 text-xs font-mono overflow-auto max-h-[420px]`,children:n})}var Rs={modified:`bg-amber-100 text-amber-900 border border-amber-300 dark:bg-amber-950/60 dark:text-amber-200 dark:border-amber-800`,added:`bg-emerald-100 text-emerald-900 border border-emerald-300 dark:bg-emerald-950/60 dark:text-emerald-200 dark:border-emerald-800`,removed:`bg-rose-100 text-rose-900 border border-rose-300 dark:bg-rose-950/60 dark:text-rose-200 dark:border-rose-800`},zs={modified:`bg-amber-50/50 dark:bg-amber-950/20`,added:`bg-emerald-50/50 dark:bg-emerald-950/20`,removed:`bg-rose-50/50 dark:bg-rose-950/20`};function Bs(e,t){return q(e===`added`?`designer.canvas.diffAdded`:e===`removed`?`designer.canvas.diffRemoved`:`designer.canvas.diffChanged`,t)}function Vs(e){if(e===void 0)return`—`;if(e===null)return`null`;if(typeof e==`string`)return e.length>200?`${e.slice(0,200)}…`:e;if(typeof e==`number`||typeof e==`boolean`)return String(e);try{let t=JSON.stringify(e);return t.length>200?`${t.slice(0,200)}…`:t}catch{return String(e)}}function Hs(e,t){let n=0;for(let r of ks(e,t))r.status!==`unchanged`&&(n+=1);return n}function Us({published:e,draft:t,locale:n,className:r}){let i=X.useMemo(()=>ks(e,t).filter(e=>e.status!==`unchanged`),[e,t]);return i.length===0?(0,Y.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground ${r??``}`,children:q(`designer.draftReview.empty`,n)}):(0,Y.jsx)(`div`,{className:`flex flex-col gap-1.5 ${r??``}`,"data-testid":`draft-review-panel`,children:i.map(e=>{let t=e.status;return(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-2 rounded-md px-2.5 py-1.5 text-xs ${zs[t]}`,children:[(0,Y.jsx)(`span`,{className:`inline-flex shrink-0 items-center rounded px-1.5 py-px text-[10px] font-medium uppercase tracking-wide ${Rs[t]}`,children:Bs(t,n)}),(0,Y.jsx)(`code`,{className:`font-mono font-medium text-foreground`,children:e.key}),t===`added`?(0,Y.jsx)(`ins`,{className:`text-emerald-700 no-underline dark:text-emerald-400`,children:Vs(e.effectiveValue)}):t===`removed`?(0,Y.jsx)(`del`,{className:`text-rose-700 dark:text-rose-400`,children:Vs(e.codeValue)}):(0,Y.jsxs)(`span`,{className:`inline-flex items-baseline gap-1.5 text-muted-foreground`,children:[(0,Y.jsx)(`del`,{className:`text-rose-700 dark:text-rose-400`,children:Vs(e.codeValue)}),(0,Y.jsx)(`span`,{"aria-hidden":`true`,children:`→`}),(0,Y.jsx)(`ins`,{className:`text-emerald-700 no-underline dark:text-emerald-400`,children:Vs(e.effectiveValue)})]})]},e.key)})})}function Ws(e){if(typeof e!=`string`)return``;let t=e.normalize(`NFKD`).replace(/[\u0300-\u036f]/g,``).toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``);return/^\d/.test(t)&&(t=`n_${t}`),t.length>64&&(t=t.slice(0,64).replace(/_+$/g,``)),t}function Gs(e){if(typeof e!=`string`)return``;let t=e.trim();return t?!/[A-Za-z]/.test(t)||/(s|ses|xes|zes|ches|shes|ies)$/i.test(t)?t:/[^aeiou]y$/i.test(t)?t.replace(/y$/i,`ies`):/(s|x|z|ch|sh)$/i.test(t)?`${t}es`:`${t}s`:``}function Ks(e){return typeof e==`string`?e.replace(/[_-]+/g,` `).split(/\s+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `):``}function qs(e){if(typeof e!=`string`)return``;let t=e.trim().match(/^[^\s_-]+/);return t?t[0]:``}function Js(e,t){let n=typeof t==`string`?t:t==null?``:String(t);switch(e){case`slugify`:return Ws(n);case`plural-en`:return Gs(n);case`titlecase`:return Ks(n);case`first-token`:return qs(n);default:return n}}function Ys(e){let{rules:t,draft:n,onPatch:r,enabled:i=!0}=e,a=(0,X.useRef)(new Set),o=(0,X.useRef)({}),s=(0,X.useCallback)(e=>{a.current.add(e)},[]);return(0,X.useEffect)(()=>{if(!i||!t||t.length===0)return;let e={},s=o.current,c={};for(let r of t){let t=n[r.from];if(c[r.from]=t,Object.is(s[r.from],t)||r.untilUserEdits!==!1&&a.current.has(r.to)||r.to in e)continue;let i=Js(r.transform,t);n[r.to]!==i&&(e[r.to]=i)}o.current={...s,...c},Object.keys(e).length>0&&r(e)},[n,i]),{markTouched:s,touched:a.current}}function Xs(e,t){let n=e?Object.keys(e):[],r=[],i=e=>{!r.includes(e)&&n.includes(e)&&r.push(e)};for(let e of n)t?.includes(e)&&i(e);for(let e of[`label`,`pluralLabel`,`name`,`description`])i(e);return r}function Zs({type:e,name:t,parentItem:n,onOpen:r}){let a=pi(),o=i(),s=X.useMemo(()=>qo(e),[e]),[c,l]=X.useState([]),[u,d]=X.useState(``),[f,p]=X.useState({});if(X.useEffect(()=>{if(s.length===0){l([]);return}let e=!1,r=[...s].sort((e,t)=>(e.anchor.order??999)-(t.anchor.order??999)).map(e=>{if(e.anchor.source===`embedded`){let t=e.anchor.extract&&n?e.anchor.extract(n):[];return{childType:e.type,anchor:e.anchor,loading:!1,error:null,items:t.map(Qs)}}return{childType:e.type,anchor:e.anchor,loading:!0,error:null,items:[]}});return l(r),Promise.all(r.map(async n=>{if(n.anchor.source===`embedded`)return n;try{let r=await a.list(n.childType);if(e)return n;let i=n.anchor.match??(()=>!1),o=r.filter(e=>i(e,t)).map(e=>Qs(e));return{...n,loading:!1,items:o}}catch(t){return e?n:{...n,loading:!1,error:t instanceof Error?t.message:String(t)}}})).then(t=>{e||l(t)}),()=>{e=!0}},[a,e,t,s,n]),s.length===0)return(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No related metadata`}),(0,Y.jsxs)(_r,{children:[`No metadata types are configured to anchor at `,(0,Y.jsx)(`code`,{children:e}),`. You can register one via`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`registerMetadataResource`}),`.`]})]});let m=c.reduce((e,t)=>e+t.items.length,0),h=c.some(e=>e.loading),g=u.trim().toLowerCase();return(0,Y.jsxs)(`div`,{className:`space-y-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 max-w-sm`,children:[(0,Y.jsx)(Kn,{className:`absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{placeholder:`Search related…`,value:u,onChange:e=>d(e.target.value),className:`pl-8 h-8 text-sm`})]}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:h?`Scanning…`:`${m} item${m===1?``:`s`}`})]}),c.map(n=>{let i=g?n.items.filter(e=>e.name.toLowerCase().includes(g)||(e.label??``).toLowerCase().includes(g)):n.items,a=f[n.childType]??!1;return!(!g||i.length>0)&&!n.loading?null:(0,Y.jsxs)(`div`,{className:`border rounded-lg overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`w-full flex items-center gap-2 px-3 py-2 bg-muted/40`,children:[(0,Y.jsxs)(`button`,{type:`button`,className:`flex items-center gap-2 flex-1 text-left hover:opacity-80`,onClick:()=>p(e=>({...e,[n.childType]:!a})),children:[(0,Y.jsx)(oe,{className:B(`h-4 w-4 text-muted-foreground transition-transform`,!a&&`rotate-90`)}),(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:n.anchor.groupLabel??n.childType}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:n.loading?`…`:i.length})]}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-7 px-2`,onClick:()=>{if(n.anchor.source===`embedded`){if(typeof window<`u`){let e=new URL(window.location.href);e.searchParams.set(`tab`,`form`),e.searchParams.delete(`open`),window.location.assign(e.toString())}return}o(`../../${encodeURIComponent(n.childType)}/_new?anchor=${encodeURIComponent(`${e}:${t}`)}`)},title:n.anchor.source===`embedded`?`Edit in Form tab`:`New ${n.childType}`,children:(0,Y.jsx)(z,{className:`h-3.5 w-3.5`})})]}),!a&&(0,Y.jsxs)(`div`,{children:[n.loading&&(0,Y.jsxs)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}),`Loading `,n.childType,`…`]}),!n.loading&&n.error&&(0,Y.jsxs)(`div`,{className:`px-3 py-3 text-xs text-destructive`,children:[`Failed: `,n.error]}),!n.loading&&!n.error&&i.length===0&&(0,Y.jsx)(`div`,{className:`px-3 py-3 text-xs text-muted-foreground`,children:g?`No matches.`:`Nothing here yet.`}),!n.loading&&!n.error&&i.length>0&&(0,Y.jsxs)(`table`,{className:`w-full text-sm border-t`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`bg-muted/30 text-[10px] uppercase tracking-wider text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`text-left font-medium px-3 py-1.5 w-[45%]`,children:`Name`}),(0,Y.jsx)(`th`,{className:`text-left font-medium px-3 py-1.5`,children:`Label`}),(0,Y.jsx)(`th`,{className:`w-8`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:i.map((i,a)=>(0,Y.jsxs)(`tr`,{role:`button`,tabIndex:0,onClick:()=>r(n.anchor.source===`embedded`?{kind:`embedded`,parentType:e,parentName:t,groupLabel:n.anchor.groupLabel??n.childType,itemName:i.name,raw:i.raw,editAs:n.anchor.editAs,embeddedPath:n.anchor.embeddedPath}:{kind:`metadata`,type:n.childType,name:i.name}),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&e.currentTarget.click()},className:`hover:bg-accent/50 cursor-pointer`,children:[(0,Y.jsx)(`td`,{className:`px-3 py-1.5 font-mono text-xs truncate max-w-0`,children:i.name}),(0,Y.jsx)(`td`,{className:`px-3 py-1.5 text-xs text-muted-foreground truncate max-w-0`,children:i.label&&i.label!==i.name?i.label:``}),(0,Y.jsx)(`td`,{className:`px-3 py-1.5 text-right`,children:(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5 text-muted-foreground inline`})})]},`${i.name}-${a}`))})]})]})]},n.childType)})]})}function Qs(e){return{name:$s(e,[`name`,`id`,`key`])??`(unnamed)`,label:$s(e,[`label`,`title`,`displayName`]),description:$s(e,[`description`,`summary`]),raw:e}}function $s(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function ec({parentType:e,parentName:t,embeddedPath:n,itemName:r,editAs:i,initialRaw:a,onSaved:o}){let s=X.useMemo(()=>ca(),[]),c=pi(),{entries:l}=di(c),u=i?l.find(e=>e.type===i):void 0,d=!u?.schema&&i?nc[i]:void 0,f=u?.schema??d?.schema,p=u?.form??d?.form,[m,h]=X.useState(a),[g,_]=X.useState(!1),[v,y]=X.useState(null),[b,x]=X.useState([]),[S,C]=X.useState(null);X.useEffect(()=>{h(a),y(null),x([]),C(null)},[a,r,e,t]);let w=u!=null&&!u.allowOrgOverride&&!u.allowRuntimeCreate;async function T(){if(!n){y(q(`engine.embedded.saveNoPath`,s));return}_(!0),y(null),x([]);try{let i=await c.layered(e,t),a=tc(i.effective??i.code??{},n,r,m);await c.save(e,t,a),C(Date.now()),o?.(m)}catch(e){if(e?.status===422||e?.code===`invalid_metadata`||e?.code===`invalid_payload`){let t=e?.body?.issues??[],i=(Array.isArray(t)?t:[]).map(e=>{let t=Array.isArray(e.path)?e.path.join(`.`):String(e.path??``),i=`${n}.${r}.`;return{path:t.startsWith(i)?t.slice(i.length):t,message:oa(String(e.message??`Invalid`),s)}});x(i),y(i.length===1?q(`engine.validation.failedOne`,s):J(`engine.validation.failed`,s,{count:i.length}))}else y(e?.message??String(e))}finally{_(!1)}}return f?(0,Y.jsxs)(`div`,{className:`p-4 space-y-4`,children:[v&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:v}),S!=null&&!v&&(0,Y.jsx)(`div`,{className:`text-sm text-emerald-700 border border-emerald-300 bg-emerald-50 rounded p-2`,children:q(`engine.embedded.saved`,s)}),w&&(0,Y.jsx)(`div`,{className:`text-xs text-amber-800 border border-amber-300 bg-amber-50 rounded p-2`,children:q(`engine.embedded.readOnlyParent`,s)}),(0,Y.jsx)(Ki,{schema:f,form:p,value:m,onChange:h,issues:b}),(0,Y.jsx)(`div`,{className:`flex justify-end gap-2 pt-2 border-t`,children:(0,Y.jsxs)(I,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(lt,{className:`h-4 w-4 mr-1`}),J(`engine.embedded.saveIntoParent`,s,{parentType:e})]})}),!n&&(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground border rounded p-3`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:q(`engine.embedded.readOnly`,s)}),(0,Y.jsx)(`div`,{children:q(`engine.embedded.noPathHint`,s)})]})]}):(0,Y.jsxs)(`div`,{className:`p-4 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:J(`engine.embedded.noSchema`,s,{type:i??`this item`,target:`${e}/${t}.${n}.${r}`})}),(0,Y.jsx)(`textarea`,{className:`w-full h-[60vh] font-mono text-xs border rounded p-3 bg-muted/30`,value:JSON.stringify(m,null,2),onChange:e=>{try{h(JSON.parse(e.target.value)),y(null)}catch(e){y(`${q(`engine.form.invalidJson`,s)}: ${e.message}`)}}}),v&&(0,Y.jsxs)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-2 bg-destructive/5`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 inline mr-1`}),` `,v]}),(0,Y.jsx)(`div`,{className:`flex justify-end`,children:(0,Y.jsxs)(I,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(lt,{className:`h-4 w-4 mr-1`}),J(`engine.embedded.saveIntoParent`,s,{parentType:`parent`})]})})]})}function tc(e,t,n,r){let i=t.split(`.`),a=structuredClone(e),o=a;for(let e=0;e<i.length-1;e++)o[i[e]]??(o[i[e]]={}),o=o[i[e]];let s=i[i.length-1],c=o[s];if(Array.isArray(c)){let e=c.findIndex(e=>e&&typeof e==`object`&&e.name===n);e>=0?c[e]=r:c.push(r)}else if(c&&typeof c==`object`){let{name:e,...t}=r;c[n]=t}else{let{name:e,...t}=r;o[s]={[n]:t}}return a}var nc={index:{schema:{type:`object`,required:[`fields`],properties:{name:{type:`string`,title:`Name`,description:`Synthesised from columns if omitted (e.g. idx_email).`},fields:{type:`array`,title:`Fields`,description:`Columns to index, in order.`,items:{type:`string`}},type:{type:`string`,title:`Algorithm`,enum:[`btree`,`hash`,`gin`,`gist`,`brin`],default:`btree`},unique:{type:`boolean`,title:`Unique`,description:`Enforce uniqueness across the indexed columns.`},where:{type:`string`,title:`Partial-index predicate`,description:`Optional WHERE clause for a partial index.`}}}}};function rc({target:e,onClose:t,parentContext:n}){let r=i(),a=e?.kind===`metadata`,o=e?.kind===`embedded`,s=a?e.type:o?e.groupLabel:``,c=a?e.name:o?e.itemName:``;return(0,Y.jsx)(Ne,{open:e!==null,onOpenChange:e=>{e||t()},children:(0,Y.jsxs)(Nt,{side:`right`,className:B(`w-[92vw] sm:max-w-[1100px] p-0 flex flex-col gap-0`),children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(U,{variant:`outline`,className:`font-mono text-[10px]`,children:s}),(0,Y.jsx)(Ke,{className:`font-mono text-base truncate`,children:c}),(0,Y.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:a&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>{r(`../../${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}`),t()},title:`Open in full page`,children:[(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5 mr-1`}),`Open full page`]})})]}),n&&(0,Y.jsxs)(Vt,{className:`text-xs`,children:[o?`Embedded in `:`Related to `,(0,Y.jsxs)(`span`,{className:`font-mono`,children:[n.type,`/`,n.name]})]})]}),(0,Y.jsxs)(`div`,{className:`flex-1 min-h-0 overflow-auto`,children:[a&&(0,Y.jsx)(il,{type:e.type,name:e.name,embedded:!0},`${e.type}/${e.name}`),o&&(0,Y.jsx)(ec,{parentType:e.parentType,parentName:e.parentName,embeddedPath:e.embeddedPath,itemName:e.itemName,editAs:e.editAs,initialRaw:e.raw},`${e.parentType}/${e.parentName}/${e.embeddedPath}/${e.itemName}`)]})]})})}function ic({type:e,name:t}){let n=s(),r=e??n.type??``,a=t??n.name??``,o=i(),c=pi(),{entries:l}=di(c),u=l.find(e=>e.type===r),[d,f]=X.useState(0),[p,m]=X.useState(0);return(0,Y.jsx)(zo,{entry:u??{type:r,label:r},itemName:a,subtitle:`Version history`,stats:[{label:`Events`,value:p}],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>o(`../${encodeURIComponent(a)}`),children:[(0,Y.jsx)(le,{className:`h-4 w-4 mr-1`}),`Back to item`]}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>f(e=>e+1),children:(0,Y.jsx)(Rt,{className:`h-4 w-4`})})]}),children:(0,Y.jsx)(`div`,{className:`p-6 max-w-4xl`,children:(0,Y.jsx)(ac,{type:r,name:a,refreshKey:d,onCount:m,client:c,onRollback:()=>f(e=>e+1)})})})}function ac({type:e,name:t,refreshKey:n=0,onCount:r,client:i,onRollback:a,rollbackConfirm:o,rollbackLabel:s}){let[c,l]=X.useState([]),[u,d]=X.useState(!0),[f,p]=X.useState(null),[m,h]=X.useState(null),[g,_]=X.useState(null),[v,y]=X.useState(0);X.useEffect(()=>{let n=!1;return d(!0),p(null),(async()=>{try{let a=await i.history(e,t,{limit:100});if(n)return;let o=[...Array.isArray(a)?a:Array.isArray(a?.events)?a.events:[]].sort((e,t)=>(t.seq??0)-(e.seq??0));l(o),r?.(o.length),d(!1)}catch(e){n||(p(e?.message??String(e)),d(!1))}})(),()=>{n=!0}},[i,e,t,n,v]);async function b(n){let r=o?o(n):`Restore version ${n}? This writes the historical body back as the current overlay.`;if(confirm(r)){_(n),p(null);try{await i.rollback(e,t,n),a?.(n),y(e=>e+1)}catch(e){p(e?.message??String(e))}finally{_(null)}}}return(0,Y.jsxs)(Y.Fragment,{children:[u&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading history…`]}),f&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:f}),!u&&!f&&c.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No history yet`}),(0,Y.jsx)(_r,{children:`This item has never been edited via an overlay. The first save will create the initial history record.`})]}),!u&&c.length>0&&(0,Y.jsx)(`ol`,{className:`space-y-2 relative pl-6 border-l`,children:c.map((e,t)=>{let n=m===t,r=e.op??e.kind,i=e.ts??e.at,o=!!a&&typeof e.version==`number`&&r!==`delete`&&r!==`tombstone`;return(0,Y.jsxs)(`li`,{className:`relative`,children:[(0,Y.jsx)(`span`,{className:`absolute -left-[27px] top-2 w-3 h-3 rounded-full bg-primary ring-4 ring-background`}),(0,Y.jsxs)(`div`,{role:`button`,tabIndex:0,onClick:()=>h(n?null:t),onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&h(n?null:t)},className:`border rounded-lg p-3 hover:border-primary/50 cursor-pointer transition-colors`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] font-mono`,children:[`seq `,e.seq??`–`]}),typeof e.version==`number`&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] font-mono`,children:[`v`,e.version]}),r&&(0,Y.jsx)(U,{className:`text-[10px] `+(r===`delete`||r===`tombstone`?`bg-red-100 text-red-800 hover:bg-red-100`:r===`create`?`bg-blue-100 text-blue-800 hover:bg-blue-100`:r===`publish`?`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`:r===`revert`?`bg-amber-100 text-amber-900 hover:bg-amber-100`:`bg-emerald-100 text-emerald-800 hover:bg-emerald-100`),children:String(r)}),e.actor&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`by`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:String(e.actor)})]}),i&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:oc(i)}),o&&(0,Y.jsx)(I,{size:`sm`,variant:`ghost`,className:`h-6 w-6 p-0`,title:s??`Rollback to this version`,disabled:g!==null,onClick:t=>{t.stopPropagation(),b(e.version)},children:g===e.version?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Qr,{className:`h-3.5 w-3.5`})})]}),n&&(0,Y.jsx)(`pre`,{className:`mt-2 text-xs font-mono bg-muted/30 rounded p-2 overflow-auto max-h-[280px]`,children:sc(e)})]})]},`${e.seq??t}-${t}`)})})]})}function oc(e){try{let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString()}catch{return String(e)}}function sc(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function cc(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function lc(e){let t={allowed:{label:`allowed`,cls:`bg-emerald-50 text-emerald-700 border-emerald-200`,Icon:Et},denied:{label:`denied`,cls:`bg-rose-50 text-rose-700 border-rose-200`,Icon:ue},forced:{label:`forced`,cls:`bg-amber-50 text-amber-700 border-amber-200`,Icon:ve}},n=t[e]??t.allowed;return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide ${n.cls}`,children:[(0,Y.jsx)(n.Icon,{className:`h-3 w-3`}),n.label]})}function uc({type:e,name:t,client:n,locale:r=`en-US`}){let[i,a]=X.useState(!1),[o,s]=X.useState(null),[c,l]=X.useState(null),u=X.useCallback(async()=>{a(!0),s(null);try{let r=await n.audit(e,t,{limit:100});l(r.events??[])}catch(e){s(String(e?.message??e)),l([])}finally{a(!1)}},[n,e,t]);return X.useEffect(()=>{u()},[u]),(0,Y.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-1 pb-2`,children:[(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground`,children:[c?.length??0,` `,q(`engine.edit.auditCount`,r)]}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>void u(),disabled:i,className:`h-7 gap-1 text-xs`,title:q(`engine.edit.refresh`,r),children:[i?(0,Y.jsx)(L,{className:`h-3 w-3 animate-spin`}):(0,Y.jsx)(Rt,{className:`h-3 w-3`}),q(`engine.edit.refresh`,r)]})]}),o&&(0,Y.jsx)(`div`,{className:`m-2 rounded border border-rose-200 bg-rose-50 p-2 text-xs text-rose-700`,children:o}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:i&&(!c||c.length===0)?(0,Y.jsxs)(`div`,{className:`flex h-32 items-center justify-center text-xs text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`mr-2 h-3 w-3 animate-spin`}),q(`engine.edit.loading`,r)]}):!c||c.length===0?(0,Y.jsxs)(Ue,{className:`py-10`,children:[(0,Y.jsx)(Ht,{children:q(`engine.edit.auditEmptyTitle`,r)}),(0,Y.jsx)(_r,{children:q(`engine.edit.auditEmptyDescription`,r)})]}):(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 bg-muted/40 text-left text-[10px] uppercase tracking-wide text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColTime`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColActor`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColOperation`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColOutcome`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColLock`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:q(`engine.edit.auditColNote`,r)})]})}),(0,Y.jsx)(`tbody`,{children:c.map(e=>(0,Y.jsxs)(`tr`,{className:`border-t border-border/50 align-top hover:bg-muted/20`,children:[(0,Y.jsx)(`td`,{className:`whitespace-nowrap px-2 py-1.5 font-mono text-[11px]`,children:cc(e.occurredAt)}),(0,Y.jsx)(`td`,{className:`px-2 py-1.5`,children:e.actor}),(0,Y.jsx)(`td`,{className:`px-2 py-1.5`,children:(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:e.operation})}),(0,Y.jsx)(`td`,{className:`px-2 py-1.5`,children:lc(e.outcome)}),(0,Y.jsx)(`td`,{className:`px-2 py-1.5`,children:e.lockState&&e.lockState!==`none`?(0,Y.jsxs)(`span`,{className:`font-mono text-[11px]`,children:[e.lockState,e.lockOverridden?` *`:``]}):(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`—`})}),(0,Y.jsx)(`td`,{className:`max-w-[28ch] truncate px-2 py-1.5 text-muted-foreground`,title:e.note??e.code,children:e.note??e.code})]},String(e.id)))})]})})]})}var dc=new Map;function fc(e,t){dc.set(e,t)}function pc(e){return dc.get(e)}var mc=new Map;function hc(e,t){mc.set(e,t)}function gc(e){return mc.get(e)}var _c=new Map;function vc(e,t){_c.set(e,t)}function yc(e){return _c.get(e)}function bc(e,t=!1){let n=e.length,r=0,i=``,a=0,o=16,s=0,c=0,l=0,u=0,d=0;function f(t,n){let i=0,a=0;for(;i<t||!n;){let t=e.charCodeAt(r);if(t>=48&&t<=57)a=a*16+t-48;else if(t>=65&&t<=70)a=a*16+t-65+10;else if(t>=97&&t<=102)a=a*16+t-97+10;else break;r++,i++}return i<t&&(a=-1),a}function p(e){r=e,i=``,a=0,o=16,d=0}function m(){let t=r;if(e.charCodeAt(r)===48)r++;else for(r++;r<e.length&&Cc(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&Cc(e.charCodeAt(r)))for(r++;r<e.length&&Cc(e.charCodeAt(r));)r++;else return d=3,e.substring(t,r);let n=r;if(r<e.length&&(e.charCodeAt(r)===69||e.charCodeAt(r)===101))if(r++,(r<e.length&&e.charCodeAt(r)===43||e.charCodeAt(r)===45)&&r++,r<e.length&&Cc(e.charCodeAt(r))){for(r++;r<e.length&&Cc(e.charCodeAt(r));)r++;n=r}else d=3;return e.substring(t,n)}function h(){let t=``,i=r;for(;;){if(r>=n){t+=e.substring(i,r),d=2;break}let a=e.charCodeAt(r);if(a===34){t+=e.substring(i,r),r++;break}if(a===92){if(t+=e.substring(i,r),r++,r>=n){d=2;break}switch(e.charCodeAt(r++)){case 34:t+=`"`;break;case 92:t+=`\\`;break;case 47:t+=`/`;break;case 98:t+=`\b`;break;case 102:t+=`\f`;break;case 110:t+=`
5
5
  `;break;case 114:t+=`\r`;break;case 116:t+=` `;break;case 117:let e=f(4,!0);e>=0?t+=String.fromCharCode(e):d=4;break;default:d=5}i=r;continue}if(a>=0&&a<=31)if(Sc(a)){t+=e.substring(i,r),d=2;break}else d=6;r++}return t}function g(){if(i=``,d=0,a=r,c=s,u=l,r>=n)return a=n,o=17;let t=e.charCodeAt(r);if(xc(t)){do r++,i+=String.fromCharCode(t),t=e.charCodeAt(r);while(xc(t));return o=15}if(Sc(t))return r++,i+=String.fromCharCode(t),t===13&&e.charCodeAt(r)===10&&(r++,i+=`
@@ -7,7 +7,7 @@ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{a as n,d as r,f
7
7
  `+` `.repeat(t)),Array(Tc).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(Tc).fill(0).map((e,t)=>`\r
8
8
  `+` `.repeat(t)),Array(Tc).fill(0).map((e,t)=>`
9
9
  `+` `.repeat(t)),Array(Tc).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(Tc).fill(0).map((e,t)=>`\r
10
- `+` `.repeat(t));var Ec;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Ec||={});function Dc(e,t=[],n=Ec.DEFAULT){let r={type:`array`,offset:-1,length:-1,children:[],parent:void 0};function i(e){r.type===`property`&&(r.length=e-r.offset,r=r.parent)}function a(e){return r.children.push(e),e}kc(e,{onObjectBegin:e=>{r=a({type:`object`,offset:e,length:-1,parent:r,children:[]})},onObjectProperty:(e,t,n)=>{r=a({type:`property`,offset:t,length:-1,parent:r,children:[]}),r.children.push({type:`string`,value:e,offset:t,length:n,parent:r})},onObjectEnd:(e,t)=>{i(e+t),r.length=e+t-r.offset,r=r.parent,i(e+t)},onArrayBegin:(e,t)=>{r=a({type:`array`,offset:e,length:-1,parent:r,children:[]})},onArrayEnd:(e,t)=>{r.length=e+t-r.offset,r=r.parent,i(e+t)},onLiteralValue:(e,t,n)=>{a({type:Ac(e),offset:t,length:n,parent:r,value:e}),i(t+n)},onSeparator:(e,t,n)=>{r.type===`property`&&(e===`:`?r.colonOffset=t:e===`,`&&i(t))},onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n);let o=r.children[0];return o&&delete o.parent,o}function Oc(e,t){if(!e)return;let n=e;for(let e of t)if(typeof e==`string`){if(n.type!==`object`||!Array.isArray(n.children))return;let t=!1;for(let r of n.children)if(Array.isArray(r.children)&&r.children[0].value===e&&r.children.length===2){n=r.children[1],t=!0;break}if(!t)return}else{let t=e;if(n.type!==`array`||t<0||!Array.isArray(n.children)||t>=n.children.length)return;n=n.children[t]}return n}function kc(e,t,n=Ec.DEFAULT){let r=bc(e,!1),i=[],a=0;function o(e){return e?()=>a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function s(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function c(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice()):()=>!0}function l(e){return e?()=>{a>0?a++:e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice())===!1&&(a=1)}:()=>!0}function u(e){return e?()=>{a>0&&a--,a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}let d=l(t.onObjectBegin),f=c(t.onObjectProperty),p=u(t.onObjectEnd),m=l(t.onArrayBegin),h=u(t.onArrayEnd),g=c(t.onLiteralValue),_=s(t.onSeparator),v=o(t.onComment),y=s(t.onError),b=n&&n.disallowComments,x=n&&n.allowTrailingComma;function S(){for(;;){let e=r.scan();switch(r.getTokenError()){case 4:C(14);break;case 5:C(15);break;case 3:C(13);break;case 1:b||C(11);break;case 2:C(12);break;case 6:C(16);break}switch(e){case 12:case 13:b?C(10):v();break;case 16:C(1);break;case 15:case 14:break;default:return e}}}function C(e,t=[],n=[]){if(y(e),t.length+n.length>0){let e=r.getToken();for(;e!==17;){if(t.indexOf(e)!==-1){S();break}else if(n.indexOf(e)!==-1)break;e=S()}}}function w(e){let t=r.getTokenValue();return e?g(t):(f(t),i.push(t)),S(),!0}function T(){switch(r.getToken()){case 11:let e=r.getTokenValue(),t=Number(e);isNaN(t)&&(C(2),t=0),g(t);break;case 7:g(null);break;case 8:g(!0);break;case 9:g(!1);break;default:return!1}return S(),!0}function E(){return r.getToken()===10?(w(!1),r.getToken()===6?(_(`:`),S(),k()||C(4,[],[2,5])):C(5,[],[2,5]),i.pop(),!0):(C(3,[],[2,5]),!1)}function D(){d(),S();let e=!1;for(;r.getToken()!==2&&r.getToken()!==17;){if(r.getToken()===5){if(e||C(4,[],[]),_(`,`),S(),r.getToken()===2&&x)break}else e&&C(6,[],[]);E()||C(4,[],[2,5]),e=!0}return p(),r.getToken()===2?S():C(7,[2],[]),!0}function O(){m(),S();let e=!0,t=!1;for(;r.getToken()!==4&&r.getToken()!==17;){if(r.getToken()===5){if(t||C(4,[],[]),_(`,`),S(),r.getToken()===4&&x)break}else t&&C(6,[],[]);e?(i.push(0),e=!1):i[i.length-1]++,k()||C(4,[],[4,5]),t=!0}return h(),e||i.pop(),r.getToken()===4?S():C(8,[4],[]),!0}function k(){switch(r.getToken()){case 3:return O();case 1:return D();case 10:return w(!0);default:return T()}}return S(),r.getToken()===17?n.allowEmptyContent?!0:(C(4,[],[]),!1):k()?(r.getToken()!==17&&C(9,[],[]),!0):(C(4,[],[]),!1)}function Ac(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`;case`object`:return e?Array.isArray(e)?`array`:`object`:`null`;default:return`null`}}var jc;(function(e){e[e.None=0]=`None`,e[e.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=4]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=6]=`InvalidCharacter`})(jc||={});var Mc;(function(e){e[e.OpenBraceToken=1]=`OpenBraceToken`,e[e.CloseBraceToken=2]=`CloseBraceToken`,e[e.OpenBracketToken=3]=`OpenBracketToken`,e[e.CloseBracketToken=4]=`CloseBracketToken`,e[e.CommaToken=5]=`CommaToken`,e[e.ColonToken=6]=`ColonToken`,e[e.NullKeyword=7]=`NullKeyword`,e[e.TrueKeyword=8]=`TrueKeyword`,e[e.FalseKeyword=9]=`FalseKeyword`,e[e.StringLiteral=10]=`StringLiteral`,e[e.NumericLiteral=11]=`NumericLiteral`,e[e.LineCommentTrivia=12]=`LineCommentTrivia`,e[e.BlockCommentTrivia=13]=`BlockCommentTrivia`,e[e.LineBreakTrivia=14]=`LineBreakTrivia`,e[e.Trivia=15]=`Trivia`,e[e.Unknown=16]=`Unknown`,e[e.EOF=17]=`EOF`})(Mc||={});var Nc=Dc,Pc=Oc,Fc;(function(e){e[e.InvalidSymbol=1]=`InvalidSymbol`,e[e.InvalidNumberFormat=2]=`InvalidNumberFormat`,e[e.PropertyNameExpected=3]=`PropertyNameExpected`,e[e.ValueExpected=4]=`ValueExpected`,e[e.ColonExpected=5]=`ColonExpected`,e[e.CommaExpected=6]=`CommaExpected`,e[e.CloseBraceExpected=7]=`CloseBraceExpected`,e[e.CloseBracketExpected=8]=`CloseBracketExpected`,e[e.EndOfFileExpected=9]=`EndOfFileExpected`,e[e.InvalidCommentToken=10]=`InvalidCommentToken`,e[e.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=14]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=16]=`InvalidCharacter`})(Fc||={});function Ic(e=4e3){let t=X.useRef(null),[n,r]=X.useState(!1);return X.useEffect(()=>{if(n)return;let e=!1,t=la?.init?.();return t&&typeof t.catch==`function`&&t.catch(()=>{e||r(!0)}),()=>{e=!0}},[n]),X.useEffect(()=>{if(n)return;let i=setTimeout(()=>{let e=t.current;(!e||!e.querySelector(`.view-line`))&&r(!0)},e);return()=>clearTimeout(i)},[n,e]),[n,t]}var Lc=X.lazy(async()=>({default:(await a(()=>import(`./dist-YwlXXOlT.js`).then(e=>e.n),[],import.meta.url)).default}));function Rc(e){try{return JSON.stringify(e??{},null,2)}catch{return`{}`}}function zc(e){return e?e.split(`.`).map(e=>{let t=Number(e);return Number.isInteger(t)&&String(t)===e?t:e}):[]}function Bc({value:e,onChange:t,readOnly:n,issues:r,height:i=`60vh`,fallbackDelayMs:a=4e3}){let o=X.useMemo(()=>ca(),[]),[s,c]=X.useState(()=>Rc(e)),[l,u]=X.useState(null),d=X.useRef(s),f=X.useRef(null),p=X.useRef(null),[m,h]=Ic(a),[g,_]=X.useState(()=>typeof document>`u`?`light`:document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>_(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let v=X.useCallback(()=>{let e=f.current,t=p.current;if(!e||!t)return;let n=e.getModel();if(!n)return;if(!r||r.length===0){t.editor.setModelMarkers(n,`objectui-diagnostics`,[]);return}let i;try{i=Nc(s)}catch{i=void 0}let a=r.map(e=>{let r=zc(e.path),a=1,o=1,s=1,c=2,l=i?Pc(i,r):void 0;if(l){let e=n.getPositionAt(l.offset),t=n.getPositionAt(l.offset+l.length);a=e.lineNumber,o=e.column,s=t.lineNumber,c=t.column}return{severity:e.severity===`warning`?t.MarkerSeverity.Warning:t.MarkerSeverity.Error,message:e.path?`${e.path}: ${e.message}`:e.message,startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,source:`metadata`}});t.editor.setModelMarkers(n,`objectui-diagnostics`,a)},[r,s]);X.useEffect(()=>{v()},[v]),X.useEffect(()=>{let t=Rc(e);t!==d.current&&(c(t),d.current=t,u(null))},[e]);let y=e=>{let n=e??``;c(n);try{let e=JSON.parse(n);e&&typeof e==`object`&&!Array.isArray(e)?(u(null),d.current=n,t(e)):u(q(`engine.form.rootJsonObject`,o))}catch(e){u(e?.message??q(`engine.form.invalidJson`,o))}};return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{ref:h,"data-testid":`source-editor`,className:`border rounded overflow-hidden bg-background`,style:{height:typeof i==`number`?`${i}px`:i},children:m?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>y(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`JSON source`,className:`w-full h-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(se,{className:`w-full h-full`}),children:(0,Y.jsx)(Lc,{value:s,language:`json`,theme:g,onChange:y,onMount:(e,t)=>{f.current=e,p.current=t,setTimeout(v,0)},options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,renderLineHighlight:`line`,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),l&&(0,Y.jsxs)(`div`,{className:`text-xs text-destructive flex items-start gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`⚠`}),(0,Y.jsx)(`span`,{children:l})]})]})}var Vc={object:async()=>(await a(async()=>{let{ObjectSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{ObjectSchema:e}},[],import.meta.url)).ObjectSchema,hook:async()=>(await a(async()=>{let{HookSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{HookSchema:e}},[],import.meta.url)).HookSchema,mapping:async()=>(await a(async()=>{let{MappingSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{MappingSchema:e}},[],import.meta.url)).MappingSchema,analytics_cube:async()=>(await a(async()=>{let{CubeSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{CubeSchema:e}},[],import.meta.url)).CubeSchema,view:async()=>(await a(async()=>{let{ViewSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ViewSchema:e}},[],import.meta.url)).ViewSchema,page:async()=>(await a(async()=>{let{PageSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{PageSchema:e}},[],import.meta.url)).PageSchema,app:async()=>(await a(async()=>{let{AppSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{AppSchema:e}},[],import.meta.url)).AppSchema,dashboard:async()=>(await a(async()=>{let{DashboardSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{DashboardSchema:e}},[],import.meta.url)).DashboardSchema,report:async()=>(await a(async()=>{let{ReportSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ReportSchema:e}},[],import.meta.url)).ReportSchema,action:async()=>(await a(async()=>{let{ActionSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ActionSchema:e}},[],import.meta.url)).ActionSchema,theme:async()=>(await a(async()=>{let{ThemeSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ThemeSchema:e}},[],import.meta.url)).ThemeSchema,flow:async()=>(await a(async()=>{let{FlowSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.o);return{FlowSchema:e}},[],import.meta.url)).FlowSchema,webhook:async()=>(await a(async()=>{let{WebhookSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.o);return{WebhookSchema:e}},[],import.meta.url)).WebhookSchema,agent:async()=>(await a(async()=>{let{AgentSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{AgentSchema:e}},[],import.meta.url)).AgentSchema,tool:async()=>(await a(async()=>{let{ToolSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{ToolSchema:e}},[],import.meta.url)).ToolSchema,skill:async()=>(await a(async()=>{let{SkillSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{SkillSchema:e}},[],import.meta.url)).SkillSchema,email_template:async()=>(await a(async()=>{let{EmailTemplateSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.t);return{EmailTemplateSchema:e}},[],import.meta.url)).EmailTemplateSchema,job:async()=>(await a(async()=>{let{JobSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.t);return{JobSchema:e}},[],import.meta.url)).JobSchema,permission:async()=>(await a(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.s);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,position:async()=>(await a(async()=>{let{PositionSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.n);return{PositionSchema:e}},[],import.meta.url)).PositionSchema,api:async()=>(await a(async()=>{let{ApiEndpointSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.r);return{ApiEndpointSchema:e}},[],import.meta.url)).ApiEndpointSchema},Hc=new Set([`approval`,`connector_action`]),Uc=/^nodes\.(\d+)\.type$/;function Wc(e,t){let n=e?.nodes;if(!Array.isArray(n))return;let r=n[t];return typeof r?.type==`string`?r.type:void 0}var Gc=new Map;async function Kc(e){if(Gc.has(e))return Gc.get(e)??null;let t=Vc[e];if(!t)return Gc.set(e,null),null;try{let n=await t(),r=n&&typeof n.safeParse==`function`?n:null;return Gc.set(e,r),r}catch{return Gc.set(e,null),null}}function qc(e){return e in Vc}async function Jc(e,t,n){let r=await Kc(e);if(!r)return{ok:!0,issues:[]};let i=r.safeParse(t);if(i.success)return{ok:!0,issues:[]};let a=i.error?.issues??[],o=Array.isArray(n?.required)?new Set(n.required.map(e=>String(e))):void 0;if(o&&t&&typeof t==`object`&&!Array.isArray(t)){let e=t;a=a.filter(t=>{let n=t.path??[];if(n.length!==1)return!0;let r=String(n[0]);return!((e[r]===void 0||e[r]===null)&&!o.has(r))})}return e===`flow`&&(a=a.filter(e=>{let n=(e.path??[]).map(e=>String(e)).join(`.`),r=Uc.exec(n);if(!r)return!0;let i=Wc(t,Number(r[1]));return!(i&&Hc.has(i))})),a.length===0?{ok:!0,issues:[]}:{ok:!1,issues:a.map(e=>({path:(e.path??[]).map(e=>String(e)).join(`.`),message:e.message}))}}function Yc(e,t,n){let r=t.split(`.`);if(r.length<=1)return e;let i=[e],a=Zc(n)?.[r[0]];for(let e=1;e<r.length;e++){let t=r[e];if(/^\d+$/.test(t)){let e=Number(t),n=Array.isArray(a)?a[e]:void 0;i.push(Xc(n)??`#${e+1}`),a=n}else i.push(t),a=Zc(a)?.[t]}return i.join(` → `)}function Xc(e){let t=Zc(e);if(t)for(let e of[`id`,`name`,`key`,`title`,`label`]){let n=t[e];if(typeof n==`string`&&n.trim())return n;let r=Zc(n);if(r){let e=r.defaultValue??r.key;if(typeof e==`string`&&e.trim())return e}}}function Zc(e){return e&&typeof e==`object`?e:void 0}function Qc(e,t,n){return e.createBuildBody?e.createBuildBody(t):{...n??e.createDefaults??{},...t}}var $c=cr,el=new Set([`object`,`report`,`dataset`]),tl={object:[`fields`,`fieldGroups`]};function nl(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`?null:Object.keys(n).length>0?n:null}function rl(e){return e.loadFailed?!1:e.hasDiag||e.hasClientValidator}function il({type:e,name:t,createMode:n=!1,embedded:r=!1}){let i=s(),a=e??i.type??``,o=t??i.name??``,c=Ko(a);if(c?.EditPage&&!n){let e=c.EditPage;return(0,Y.jsx)(e,{type:a,name:o})}if(c?.CreatePage&&n){let e=c.CreatePage;return(0,Y.jsx)(e,{type:a})}return(0,Y.jsx)(al,{type:a,name:o,createMode:n,embedded:r})}function al({type:e,name:t,createMode:n,embedded:r}){let a=i(),[s,c]=o(),l=s.get(`package`)??void 0,u=pi(),{entries:d}=di(u),f=d.find(t=>t.type===e),p=Jo(e,f),m=(n&&p.createSchema?p.createSchema:f?.schema)??p.defaultSchema,h=X.useMemo(()=>ca(),[]),[g,_]=X.useState(null),v=p.identityField??`name`,[y,b]=X.useState(()=>n?{...p.createDefaults??{},[v]:``}:{}),[x,S]=X.useState(null),[C,w]=X.useState(!n),[T,E]=X.useState(!1),[D,O]=X.useState(null),[k,A]=X.useState(!1),[j,M]=X.useState([]),[ee,te]=X.useState(!1),N=X.useCallback(e=>{b(t=>{let n=typeof e==`function`?e(t):e,r=new Set,i=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of i)Object.is(t?.[e],n?.[e])||r.add(e);return r.size>0&&(te(!0),M(e=>e.filter(e=>{let t=(e.path??``).split(`.`)[0];return!r.has(t)}))),n})},[]),[ne,ie]=X.useState(null),[ae,F]=X.useState(null),oe=X.useCallback(e=>{N(t=>({...t,...e}))},[N]),{markTouched:se}=Ys({rules:p.createDerive,draft:y,onPatch:oe,enabled:!!n}),ce=X.useMemo(()=>{if(n)return p.createFields&&p.createFields.length>0?p.createFields:Xs(m?.properties??void 0,m?.required??void 0)},[n,p.createFields,m]),le=X.useMemo(()=>{let t=tl[e]??[];if(!n||!ce)return t.length===0?p.hiddenFields:Array.from(new Set([...p.hiddenFields??[],...t]));let r=m?.properties??{},i=new Set(ce),a=Object.keys(r).filter(e=>!i.has(e));if(p.hiddenFields)for(let e of p.hiddenFields)a.includes(e)||a.push(e);for(let e of t)a.includes(e)||a.push(e);return a},[n,ce,m,p.hiddenFields,e]),ue=X.useMemo(()=>n&&ce?ce:p.fieldOrder,[n,ce,p.fieldOrder]),de=X.useCallback(e=>{if(n){let t=y,n=typeof e==`function`?e(t):e,r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of r)Object.is(t?.[e],n?.[e])||se(e)}N(e)},[n,y,N,se]);X.useEffect(()=>{if(!qc(e))return;let t=!1,n=window.setTimeout(()=>{Jc(e,y,f?.schema).then(e=>{t||M(e.issues)})},200);return()=>{t=!0,window.clearTimeout(n)}},[e,y,f?.schema]);let fe=X.useMemo(()=>n&&!ee?[]:j,[n,ee,j]),pe=X.useMemo(()=>{let t=g?._diagnostics,n=qc(e)?fe.map(e=>({path:e.path,message:oa(e.message,h)})):(t?.errors??[]).map(e=>({path:e.path,message:oa(e.message,h)})),r=(t?.warnings??[]).map(e=>({path:e.path,message:oa(e.message,h)}));return[...n.map(e=>({path:e.path||void 0,message:e.message,severity:`error`})),...r.map(e=>({path:e.path||void 0,message:e.message,severity:`warning`}))]},[g,fe,e,h]),[me,he]=X.useState(!1),[ge,_e]=X.useState(!1),[ve,ye]=X.useState(0),[be,Se]=X.useState(!!n),[Ce,Te]=X.useState(null);X.useEffect(()=>{Te(null)},[e,t]),X.useEffect(()=>{be||Te(null)},[be]);let Ee=xs(s.get(`sel`)),De=X.useRef(null);X.useEffect(()=>{if(e!==`app`||!Ee||De.current===`${t}:${Ee}`||!y||Object.keys(y).length===0)return;let n=Es(y,Ee);n&&(De.current=`${t}:${Ee}`,Se(!0),Te({kind:`nav`,id:n.selectionId,label:n.label}))},[e,t,Ee,y]),X.useEffect(()=>{if(e!==`app`)return;let t=Ce?.kind===`nav`?Ds(y,Ce.id):null;c(e=>{let n=new URLSearchParams(e);return t?n.set(`sel`,Ss(t)):n.delete(`sel`),n},{replace:!0})},[e,Ce]);let ke=X.useRef(null),[Ae,je]=X.useState(null),[Me,Pe]=X.useState(()=>{if(typeof window>`u`)return!0;try{let e=window.localStorage.getItem(`metadata-admin:autosave`);return e===null?!0:e===`1`}catch{return!0}});X.useEffect(()=>{try{window.localStorage.setItem(`metadata-admin:autosave`,Me?`1`:`0`)}catch{}},[Me]);let Fe=X.useRef(null),[Ie,Le]=X.useState([]),[ze,Be]=X.useState(!0);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await u.list(`object`);if(e)return;Le(t.map(e=>e?.name).filter(e=>!!e).sort())}catch{e||Le([])}finally{e||Be(!1)}})(),()=>{e=!0}},[u]);let Ve=y?.interfaceConfig?.source||y?.object||y?.objectName,[He,Ue]=X.useState([]),[Ge,qe]=X.useState(!1),[Je,Ye]=X.useState([]);X.useEffect(()=>{let e=!1;if(!Ve){Ue([]),Ye([]);return}return qe(!0),(async()=>{try{let t=await u.get(`object`,Ve);if(e)return;let n=t?.fields,r=Array.isArray(n)?n.map(e=>({name:e?.name,label:e?.label,type:e?.type})):n&&typeof n==`object`?Object.entries(n).map(([e,t])=>({name:e,label:t?.label,type:t?.type})):[];Ue(r.filter(e=>!!e.name));let i=t?.actions,a=Array.isArray(i)?i.map(e=>({name:e?.name,label:e?.label,locations:e?.locations})).filter(e=>!!e.name):[];e||Ye(a)}catch{e||(Ue([]),Ye([]))}finally{e||qe(!1)}})(),()=>{e=!0}},[u,Ve]);let[Xe,Ze]=X.useState([]),[Qe,$e]=X.useState(!1);X.useEffect(()=>{let e=!1;if(!Ve){Ze([]);return}return $e(!0),(async()=>{try{let t=await u.list(`view`);if(e)return;let n=(t||[]).filter(e=>(e?.objectName??e?.object??e?.object_name)===Ve),r=new Set,i=n.map(e=>({name:e?.name,label:e?.label||void 0})).filter(e=>!!e.name&&!r.has(e.name)&&r.add(e.name));Ze(i)}catch{e||Ze([])}finally{e||$e(!1)}})(),()=>{e=!0}},[u,Ve]);let et=X.useMemo(()=>({objectNames:Ie,objectsLoading:ze,objectFields:He,objectFieldsLoading:Ge,objectViews:Xe,objectViewsLoading:Qe,objectActions:Je}),[Ie,ze,He,Ge,Xe,Qe,Je]);X.useEffect(()=>{if(n){w(!1);return}let r=!1;return w(!0),O(null),A(!1),(async()=>{try{let n=l?{packageId:l}:{},[i,a]=await Promise.all([u.layered(e,t,n),u.getDraft(e,t,n).catch(()=>null)]);if(r)return;_(i);let o=i?._diagnostics;o&&o.valid===!1&&Array.isArray(o.errors)?M(o.errors.map(e=>({path:e.path||``,message:e.message}))):M([]);let s=nl(a),c=i.effective??i.code??{},d=s?{...c,...s}:c,f=p.toDraft?p.toDraft(d):d;b(f),ke.current=f,he(!!s),w(!1)}catch(n){r||(A(!0),O(J(`engine.edit.loadFailed`,h,{type:e,name:t??``,message:n?.message??String(n)})),w(!1))}})(),()=>{r=!0}},[u,e,t,l,n,ve,h]);let[tt,nt]=X.useState(!1);async function rt(){if(!(x!=null||tt)){nt(!0);try{let n=await u.references(e,t);S(n)}catch(e){S([]),console.error(`references() failed`,e)}finally{nt(!1)}}}let[it,at]=X.useState(null),st=X.useMemo(()=>!n&&!r&&qo(e).length>0,[e,n,r]),ct=X.useRef(null),[ut,dt]=X.useState(null),ft=s.get(`review`),z=X.useRef(!1);X.useEffect(()=>{if(!(ft!==`1`||n)){if(!z.current){z.current=!0,ye(e=>e+1);return}if(!C){me&&dt(`review`);let e=new URLSearchParams(s);e.delete(`review`),c(e,{replace:!0}),z.current=!1}}},[ft,n,C,me]);let[pt,mt]=X.useState(`properties`);X.useEffect(()=>{if(ut===`references`&&rt(),typeof window<`u`&&!r){let e=new URL(window.location.href);ut?e.searchParams.set(`tab`,ut):e.searchParams.delete(`tab`),window.history.replaceState({},``,e.toString())}},[ut,r]);let ht=`metadata-edit:inspector-collapsed`,gt=`metadata-edit:inspector-size`,[_t,vt]=X.useState(()=>typeof window>`u`?!1:window.localStorage.getItem(ht)===`1`),yt=X.useRef(38);X.useEffect(()=>{if(typeof window>`u`)return;let e=Number(window.localStorage.getItem(gt));Number.isFinite(e)&&e>=22&&e<=80&&(yt.current=e)},[]);let bt=X.useRef(null),xt=X.useCallback(()=>{vt(e=>{let t=!e;return typeof window<`u`&&window.localStorage.setItem(ht,t?`1`:`0`),t})},[]);X.useEffect(()=>{let e=bt.current;if(e)if(_t)e.resize?.(`0%`);else{let t=yt.current||38;e.resize?.(`${t}%`)}},[_t]);let[St,wt]=X.useState(!1),[Tt,Dt]=X.useState(!1);X.useEffect(()=>{if(typeof document>`u`||!Tt)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[Tt]),X.useEffect(()=>{if(typeof window>`u`||!Tt)return;function e(e){e.key===`Escape`&&(e.preventDefault(),Dt(!1))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Tt]);let Ot=X.useRef(null);X.useEffect(()=>{Ot.current=null},[e,t]),X.useEffect(()=>{if(n||r||C)return;let i=`${e}/${t??``}`;Ot.current!==i&&pc(e)&&(g?.code!=null&&g.code?._packageId!==`sys_metadata`?f?.allowOrgOverride:f?.allowOrgOverride||f?.allowRuntimeCreate)&&(Ot.current=i,Se(!0))},[e,t,n,r,C,f,g]),X.useEffect(()=>{if(typeof window>`u`||r)return;function e(e){if(!(e.metaKey||e.ctrlKey)||e.shiftKey||e.altKey||e.key!==`\\`)return;let t=e.target;t&&(t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),xt())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,xt]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URLSearchParams(window.location.search),t=e.get(`tab`);(t===`layers`||t===`references`||t===`related`||t===`audit`)&&dt(t),ct.current=t;let n=e.get(`open`);if(n&&n.includes(`:`)){let[e,t]=n.split(`:`,2);e&&t&&at({kind:`metadata`,type:e,name:t})}},[]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URL(window.location.href);it?.kind===`metadata`?e.searchParams.set(`open`,`${it.type}:${it.name}`):e.searchParams.delete(`open`),window.history.replaceState({},``,e.toString())},[it,r]);function kt(e){let t=e.split(`.`)[0];return t?Yc((()=>{let e=n&&p.createSchema?void 0:f?.form,r=Array.isArray(e?.sections)?e.sections:[];for(let e of r){let n=Array.isArray(e?.fields)?e.fields:[];for(let e of n)if(typeof e==`string`){if(e===t)return e}else if(e?.field===t)return String(e.label??t)}let i=m?.properties??{};return String(i[t]?.title??t)})(),e,y):e}async function At(r){E(!0),O(null),M([]);try{let i=f?.createSeed,o=n?Qc(p,y,i):p.fromDraft?p.fromDraft(y):y;if(n&&p.createSeed)try{let e=await p.createSeed(y,{client:u});e&&typeof e==`object`&&(o={...o,...e})}catch{}let c=String(o[v]??y[v]??t),d=n?{...o,[v]:c}:o;if(!c){O(q(`engine.validation.nameRequired`,h)),E(!1);return}let m=(()=>{try{let e=new URLSearchParams(window.location.search).get(`package`);return e&&e!==`all`?e:void 0}catch{return}})();await u.save(e,c,d,{force:r,mode:`draft`,...m?{packageId:m}:{}});let g=l?{packageId:l}:{},[x,S]=await Promise.all([u.layered(e,c,g),u.getDraft(e,c,g).catch(()=>null)]);_(x);let C=nl(S);he(!!C);let w=x.effective??d,T=C?{...w,...C}:w,D=p.toDraft?p.toDraft(T):T;b(D),ke.current=D,je(new Date),Fe.current=JSON.stringify(D),ie(null),F(null);let k=!n&&!!pc(e);if(!n&&!k&&Se(!1),n){let e=s.toString();a(`../${encodeURIComponent(c)}${e?`?${e}`:``}`,{relative:`path`})}}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];ie(Array.isArray(t)?t:[]),F(y)}else if(e?.code===`writable_package_required`)O(q(`engine.package.writableRequired`,h));else if(e?.status===422||e?.code===`invalid_metadata`||e?.code===`invalid_payload`){let t=e?.body?.issues??[],n=(Array.isArray(t)?t:[]).map(e=>({path:Array.isArray(e.path)?e.path.join(`.`):String(e.path??``),message:oa(String(e.message??`Invalid`),h)})),r=String(e?.body?.error??e?.message??``);if(n.length===0&&r){let e=r.match(/failed spec validation:\s*(.+?):\s*(.+)$/);n=e?[{path:e[1].trim(),message:oa(e[2].trim(),h)}]:[{path:``,message:oa(r,h)}]}M(n),n.length===1&&!n[0].path?O(n[0].message):n.length===1?O(`${kt(n[0].path)}: ${n[0].message}`):O(J(`engine.validation.failed`,h,{count:n.length}))}else O(e?.message??String(e))}finally{E(!1)}}async function jt(){let r=!n&&g?.code!=null;if(confirm(J(r?`engine.edit.resetConfirm`:`engine.edit.deleteConfirm`,h,{type:e,name:t??``}))){E(!0),O(null);try{if(await u.reset(e,t),r){let n=await u.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),ke.current=r,pc(e)?Ot.current=null:Se(!1)}else a(`../`,{relative:`path`})}catch(e){O(e?.message??String(e))}finally{E(!1)}}}async function Mt(){_e(!0),O(null);try{await u.publish(e,t);let[n,r]=await Promise.all([u.layered(e,t),u.getDraft(e,t).catch(()=>null)]);_(n);let i=nl(r);he(!!i);let a=n.effective??y,o=i?{...a,...i}:a;b(o),ke.current=o}catch(e){O(e?.message??String(e))}finally{_e(!1)}}async function Ft(){if(confirm(J(`engine.edit.discardDraftConfirm`,h,{type:e,name:t??``}))){E(!0),O(null);try{await u.reset(e,t,{state:`draft`});let n=await u.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),ke.current=r,he(!1)}catch(e){O(e?.message??String(e))}finally{E(!1)}}}let It=X.useMemo(()=>{if(n)return Object.keys(y).length>0;let e=ke.current;if(!e)return!1;try{return JSON.stringify(y)!==JSON.stringify(e)}catch{return!1}},[y,n]),Lt=!n&&g?.code!=null&&g.code?._packageId!==`sys_metadata`,Rt=g?.editable!==!1,Ht=g?.deletable!==!1,Ut=g?.resettable!==!1,Gt=g?.lockReason,Kt=g?.lock&&g.lock!==`none`,qt=(n?!!(f?.allowOrgOverride||f?.allowRuntimeCreate):Lt?!!f?.allowOrgOverride:!!(f?.allowOrgOverride||f?.allowRuntimeCreate))&&(n||Rt),Xt=!qt&&!n,Qt=X.useRef(At);if(X.useEffect(()=>{Qt.current=At}),X.useEffect(()=>{if(!Me||n||Xt||!be||!It||T)return;let e;try{e=JSON.stringify(y)}catch{return}if(e===Fe.current)return;let t=window.setTimeout(()=>{Fe.current=e,Qt.current(!1)},1500);return()=>window.clearTimeout(t)},[y,It,be,T,n,Xt,Me]),X.useEffect(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`s`){if(!qt||Xt||!be&&!n)return;e.preventDefault(),!T&&(n||It)&&Qt.current(!1)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[qt,Xt,be,n,T,It]),X.useEffect(()=>{if(!It)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[It]),X.useEffect(()=>{if(!It)return;let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t&&!(t.target&&t.target!==`_self`)&&!t.hasAttribute(`download`)){try{let e=new URL(t.href,window.location.href);if(e.origin!==window.location.origin||e.pathname===window.location.pathname)return}catch{return}confirm(q(`engine.edit.unsavedLeaveConfirm`,h))||(e.preventDefault(),e.stopPropagation())}};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[It,h]),ti(X.useMemo(()=>{if(r)return null;let n=String(y.name??t??``);if(!n)return null;let i={type:e,name:n,label:typeof y.label==`string`?y.label:void 0};return e===`object`&&(i.fields=Si(y.fields).entries.slice(0,60).map(e=>({name:e.name,type:typeof e.def.type==`string`?e.def.type:void 0,label:typeof e.def.label==`string`?e.def.label:void 0,required:!!e.def.required||void 0}))),i},[r,e,t,y])),C)return(0,Y.jsx)(zo,{entry:f,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading `,e,`/`,t,`…`]})});let $t=Xt&&Lt&&!!f?.allowRuntimeCreate,en=el.has(e),tn=!r&&(!n||en)?pc(e):void 0,nn=gc(e),rn=yc(e);function an(){ke.current&&b(ke.current),M([]),O(null),Se(!1)}let on=Xt||!be&&!n,sn=(0,Y.jsxs)(Y.Fragment,{children:[!n&&(0,Y.jsx)(Ho,{entry:f,location:`record_header`,recordId:t,onAfter:()=>ye(e=>e+1)}),(!n||st)&&(0,Y.jsxs)(`div`,{className:`flex items-center rounded-md border bg-background p-0.5`,children:[!n&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`layers`),title:q(`engine.edit.layers`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Dn,{className:`h-3.5 w-3.5`}),g?.overlay&&(()=>{let e=Ns(g.code,g.effective);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-emerald-600 text-emerald-50 text-[9px] leading-[14px] text-center font-medium`,title:q(`engine.layers.diff`,h),children:e}):null})()]}),!n&&me&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`review`),title:q(`designer.draftReview.title`,h),className:`h-7 w-7 p-0 relative`,"data-testid":`resource-review-trigger`,children:[(0,Y.jsx)(Ct,{className:`h-3.5 w-3.5`}),(()=>{let e=Hs(g?.effective??null,y);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-amber-500 text-amber-50 text-[9px] leading-[14px] text-center font-medium`,title:J(`designer.draftReview.badge`,h,{n:e}),children:e}):null})()]}),!n&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`references`),title:q(`engine.edit.references`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),x&&x.length>0&&(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-muted text-foreground text-[9px] leading-[14px] text-center font-medium border`,children:x.length})]}),st&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`related`),title:q(`engine.edit.related`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(dr,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`history`),title:q(`engine.edit.history`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(hr,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`audit`),title:q(`engine.edit.auditTab`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(Et,{className:`h-3.5 w-3.5`})})]}),!n&&qt&&g?.overlay&&(Lt?Ut:Ht)&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:jt,disabled:T,title:q(Lt?`engine.edit.reset`:`engine.edit.delete`,h),className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive`,children:Lt?(0,Y.jsx)(Qr,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Zt,{className:`h-3.5 w-3.5`})}),qt&&!n&&!be&&!tn&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>Se(!0),className:`h-7`,children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.edit.edit`,h)]}),qt&&(be||n)&&(0,Y.jsx)(sl,{saving:T,isDirty:It,autoSaveEnabled:Me,lastSavedAt:Ae,createMode:!!n,locale:h}),qt&&(be||n)&&!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>Pe(e=>!e),className:`h-7 w-7 p-0 text-muted-foreground`,title:q(Me?`engine.edit.autoSaveOn`:`engine.edit.autoSaveOff`,h),children:Me?(0,Y.jsx)($n,{className:`h-3.5 w-3.5 text-emerald-600`}):(0,Y.jsx)(ot,{className:`h-3.5 w-3.5`})}),qt&&!n&&be&&!tn&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:an,disabled:T,className:`h-7 w-7 p-0`,title:q(`engine.cancel`,h),children:(0,Y.jsx)(P,{className:`h-3.5 w-3.5`})}),qt&&(be||n)&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>At(!1),disabled:T||!n&&!It,className:`h-7 w-7 p-0 relative`,title:T?q(`engine.edit.saving`,h):!n&&!It?q(`engine.edit.noChanges`,h):`${q(`engine.edit.save`,h)} (⌘S)`,children:[T?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(lt,{className:`h-3.5 w-3.5`}),It&&!T&&(0,Y.jsx)(`span`,{"aria-hidden":!0,className:`absolute -top-0.5 -right-0.5 inline-block h-2 w-2 rounded-full bg-amber-300 ring-2 ring-background`})]}),qt&&!n&&me&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:Ft,disabled:T||ge,className:`h-7 w-7 p-0 text-muted-foreground`,title:q(`engine.edit.discardDraft`,h),children:(0,Y.jsx)(Bt,{className:`h-3.5 w-3.5`})}),qt&&!n&&me&&(0,Y.jsx)(I,{size:`sm`,onClick:Mt,disabled:T||ge||It,className:`h-7 px-2 relative bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,title:q(It?`engine.edit.publishBlockedDirty`:`engine.edit.publish`,h),children:ge?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(re,{className:`h-3.5 w-3.5 mr-1`}),(0,Y.jsx)(`span`,{className:`text-xs`,children:q(`engine.edit.publish`,h)})]})})]});return(0,Y.jsxs)(zo,{entry:f??{type:e,label:e},itemName:n?`(new)`:t,subtitle:n?q(`engine.edit.createNew`,h):void 0,actions:tn?null:sn,children:[(0,Y.jsxs)(`div`,{className:tn?`flex h-full min-h-0 flex-col`:`p-6 space-y-6 max-w-7xl`,children:[(D||Xt||me||Kt)&&(0,Y.jsxs)(`div`,{className:tn?`px-6 pt-4 space-y-3`:`space-y-3`,children:[D&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:D}),Kt&&(0,Y.jsxs)(`div`,{className:`text-xs text-amber-900 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-2.5`,children:[(0,Y.jsx)(Pt,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 opacity-80`}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`font-medium`,children:[g?.lock===`full`&&q(`engine.edit.lockFull`,h),g?.lock===`no-overlay`&&q(`engine.edit.lockNoOverlay`,h),g?.lock===`no-delete`&&q(`engine.edit.lockNoDelete`,h)]}),Gt&&(0,Y.jsx)(`div`,{className:`mt-0.5 opacity-90`,children:Gt}),g?.lockDocsUrl&&(0,Y.jsxs)(`a`,{href:g.lockDocsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-amber-800 underline hover:text-amber-900 dark:text-amber-200 dark:hover:text-amber-100`,children:[h===`zh-CN`?`查看文档`:`View docs`,` →`]}),g?.packageId&&(0,Y.jsx)(`div`,{className:`mt-0.5 text-amber-700 dark:text-amber-300/80`,children:(0,Y.jsxs)(`code`,{className:`font-mono`,children:[g.packageId,g.packageVersion?`@${g.packageVersion}`:``]})})]}),$t&&(0,Y.jsx)(I,{size:`sm`,variant:`outline`,className:`shrink-0 h-7 bg-background/60`,onClick:()=>a(`../new`,{relative:`path`}),children:q(`engine.list.create`,h)})]}),me&&!n&&(0,Y.jsxs)(`div`,{className:`text-xs text-emerald-900 border border-emerald-300 bg-emerald-50 rounded p-3 dark:text-emerald-200 dark:border-emerald-700/50 dark:bg-emerald-950/30 flex items-center gap-3`,children:[(0,Y.jsx)(re,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:q(`engine.edit.draftPending`,h)}),qt&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(I,{size:`sm`,variant:`ghost`,onClick:Ft,disabled:T||ge,className:`h-7`,children:q(`engine.edit.discardDraft`,h)}),(0,Y.jsx)(I,{size:`sm`,onClick:Mt,disabled:T||ge||It,className:`h-7 bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,children:ge?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):q(`engine.edit.publish`,h)})]})]}),Xt&&!Kt&&(0,Y.jsxs)(`div`,{"data-testid":`readonly-banner`,className:`text-xs text-amber-800 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex-1`,children:$t?q(`engine.edit.artifactLockedBanner`,h).split(/(\{type\})/).map((t,n)=>t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):(0,Y.jsx)(X.Fragment,{children:t},n)):q(`engine.edit.readOnlyTypeBanner`,h).split(/(\{flag\}|\{type\}|\{override\})/).map((t,n)=>t===`{flag}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`OBJECTSTACK_METADATA_WRITABLE`},n):t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):t===`{override}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`allowOrgOverride`},n):(0,Y.jsx)(X.Fragment,{children:t},n))}),$t&&(0,Y.jsx)(I,{size:`sm`,variant:`outline`,className:`shrink-0`,onClick:()=>a(`../new`,{relative:`path`}),children:q(`engine.list.create`,h)})]})]}),(0,Y.jsx)(`div`,{className:tn?`flex w-full flex-1 min-h-0 flex-col`:`w-full`,children:(0,Y.jsxs)(`div`,{className:tn?`mt-2 flex-1 min-h-0 flex flex-col px-6 pb-4`:`mt-4 space-y-3`,children:[!tn&&on&&!Xt&&qt&&!n&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 text-xs text-muted-foreground border rounded p-2.5 bg-muted/30`,children:[(0,Y.jsx)(`span`,{children:q(`engine.edit.readOnlyBanner`,h).split(/\{edit\}/).map((e,t,n)=>(0,Y.jsxs)(X.Fragment,{children:[e,t<n.length-1&&(0,Y.jsx)(`strong`,{children:q(`engine.edit.edit`,h)})]},t))}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>Se(!0),children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.edit.edit`,h)]})]}),(()=>{let t=g?._diagnostics,r=qc(e)?j.map(e=>({path:e.path,message:oa(e.message,h)})):(t?.errors??[]).map(e=>({...e,message:oa(e.message,h)})),i=qc(e)?r.length===0:t?.valid!==!1;if(n&&!ee||!rl({loadFailed:k,hasDiag:!!t,hasClientValidator:qc(e)}))return null;let a=r,o=t?.warnings??[],s=!i&&a.length>0,c=o.length>0;if(!s&&!c)return null;let l=(e,t)=>{let n=t.slice(0,3),r=Math.max(0,t.length-n.length),i=e===`error`?`border-destructive/40 bg-destructive/[0.06] text-destructive`:`border-amber-500/40 bg-amber-500/[0.08] text-amber-800 dark:text-amber-200`,a=e===`error`?`engine.edit.diagnostics.title`:`engine.edit.diagnostics.warnTitle`;return(0,Y.jsxs)(`div`,{"data-testid":e===`error`?`metadata-validation-banner`:void 0,className:`flex items-start gap-2 text-xs border rounded p-2.5 ${i}`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:J(a,h,{count:t.length})}),(0,Y.jsxs)(`ul`,{className:`mt-1 space-y-0.5 font-mono text-[11px]`,children:[n.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`opacity-70`,children:e.path?kt(e.path):`(root)`}),`: `,e.message]},t)),r>0&&(0,Y.jsx)(`li`,{className:`opacity-70`,children:J(`engine.edit.diagnostics.more`,h,{count:r})})]})]})]},e)};return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[s&&l(`error`,a),c&&l(`warning`,o)]})})(),tn?(0,Y.jsx)(`div`,{className:Tt?`fixed inset-0 z-50 bg-background flex flex-col p-3`:`relative flex-1 min-h-0 flex`,children:(0,Y.jsxs)($c,{direction:`horizontal`,className:`flex-1 min-h-0 rounded-md border bg-background overflow-hidden`,id:`metadata-edit-${e}`,children:[(0,Y.jsx)(Ar,{defaultSize:62,minSize:30,children:(0,Y.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b bg-background/95 backdrop-blur px-3 py-2 sticky top-0 z-10`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1`,children:qt&&(0,Y.jsxs)(`div`,{role:`tablist`,"aria-label":q(`engine.edit.designer`,h),className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":!St,onClick:()=>wt(!1),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(St?`text-muted-foreground hover:text-foreground`:`bg-background shadow-sm text-foreground`),title:q(`engine.edit.designMode`,h),children:[(0,Y.jsx)(Vr,{className:`h-3.5 w-3.5`}),q(`engine.edit.designMode`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":St,onClick:()=>wt(!0),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(St?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.previewMode`,h),children:[(0,Y.jsx)(xr,{className:`h-3.5 w-3.5`}),q(`engine.edit.previewMode`,h)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[sn,(0,Y.jsx)(`span`,{className:`mx-1 h-5 w-px bg-border`,"aria-hidden":!0}),tn&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:xt,className:`h-7 w-7 p-0`,title:q(_t?`engine.edit.showInspector`:`engine.edit.hideInspector`,h)+` (⌘\\)`,children:_t?(0,Y.jsx)(Sn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(mr,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>Dt(e=>!e),className:`h-7 w-7 p-0`,title:q(Tt?`engine.edit.exitFullscreen`:`engine.edit.fullscreen`,h),children:Tt?(0,Y.jsx)(Xn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(xe,{className:`h-3.5 w-3.5`})})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4 bg-[radial-gradient(circle_at_1px_1px,theme(colors.border)_1px,transparent_0)] [background-size:16px_16px] bg-muted/30`,children:(0,Y.jsx)(tn,{type:e,name:t,draft:y,baseline:n?void 0:g?.effective??void 0,editing:be&&!St,selection:St?null:Ce,onSelectionChange:Te,locale:h,diagnostics:pe,onPatch:e=>N(t=>({...t,...e}))})})]})}),(0,Y.jsx)(En,{withHandle:!0,className:_t?`hidden`:`w-1.5 bg-border/40 hover:bg-primary/40 active:bg-primary/60 transition-colors`}),(0,Y.jsx)(Ar,{panelRef:bt,defaultSize:yt.current,minSize:22,collapsible:!0,collapsedSize:0,onResize:e=>{let t=e.asPercentage,n=t<=.5;n||(yt.current=t,typeof window<`u`&&window.localStorage.setItem(gt,String(Math.round(t)))),vt(e=>e===n?e:(typeof window<`u`&&window.localStorage.setItem(ht,n?`1`:`0`),n))},children:(0,Y.jsxs)(`div`,{className:`h-full overflow-auto`,children:[(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-background/95 backdrop-blur px-3 py-2`,children:[(0,Y.jsxs)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":pt===`properties`,onClick:()=>mt(`properties`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(pt===`properties`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.inspector.properties`,h),children:[(0,Y.jsx)(Xr,{className:`h-3.5 w-3.5`}),q(`engine.edit.inspector.properties`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":pt===`source`,onClick:()=>mt(`source`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(pt===`source`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.inspector.source`,h),children:[(0,Y.jsx)(zt,{className:`h-3.5 w-3.5`}),q(`engine.edit.inspector.source`,h)]})]}),It&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] border-amber-400/60 text-amber-600 dark:text-amber-300`,children:[(0,Y.jsx)(`span`,{className:`mr-1 inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),q(`engine.edit.unsaved`,h)]})]}),(0,Y.jsx)(`div`,{className:`p-4`,children:pt===`source`?(0,Y.jsx)(Bc,{value:y,onChange:N,readOnly:on,issues:fe.map(e=>({path:e.path??``,message:e.message}))}):Ce&&nn?(0,Y.jsx)(nn,{type:e,name:t,draft:y,selection:Ce,onPatch:e=>N(t=>({...t,...e})),onClearSelection:()=>Te(null),onSelectionChange:Te,readOnly:on,locale:h}):!Ce&&rn?(0,Y.jsx)(rn,{type:e,name:t,draft:y,onPatch:e=>N(t=>({...t,...e})),onSelectionChange:Te,readOnly:on,locale:h,serverSchema:f?.schema}):(0,Y.jsx)(Ki,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:de,issues:fe,hiddenFields:le,fieldOrder:ue,readOnly:on,createMode:n,widgetContext:et})})]})})]})}):(0,Y.jsx)(Ki,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:de,issues:fe,hiddenFields:le,fieldOrder:ue,readOnly:on,createMode:n,widgetContext:et})]})})]}),(0,Y.jsx)(Ne,{open:ut===`layers`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.layers`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Ps,{layered:g,locale:h})})]})}),(0,Y.jsx)(Ne,{open:ut===`review`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`designer.draftReview.title`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t,` · `,q(`designer.canvas.reviewVsPublished`,h)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Us,{published:g?.effective??null,draft:y,locale:h})})]})}),(0,Y.jsx)(Ne,{open:ut===`references`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsxs)(Ke,{className:`text-base`,children:[q(`engine.edit.references`,h),x&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px]`,children:x.length})]}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ol,{refs:x,loading:tt})})]})}),st&&(0,Y.jsx)(Ne,{open:ut===`related`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.related`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Zs,{type:e,name:t,parentItem:y,onOpen:e=>at(e)})})]})}),!n&&(0,Y.jsx)(Ne,{open:ut===`history`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.history`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ac,{type:e,name:t,client:u,onRollback:()=>ye(e=>e+1),rollbackLabel:q(`engine.edit.rollback`,h),rollbackConfirm:e=>q(`engine.edit.rollbackConfirm`,h).replace(`{version}`,String(e))})})]})}),!n&&(0,Y.jsx)(Ne,{open:ut===`audit`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.auditTab`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden p-3`,children:(0,Y.jsx)(uc,{type:e,name:t,client:u,locale:h})})]})}),(0,Y.jsx)(rc,{target:it,onClose:()=>at(null),parentContext:{type:e,name:t}}),(0,Y.jsx)(we,{open:ne!=null,onOpenChange:e=>{e||(ie(null),F(null))},children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-5 w-5 text-amber-600`}),`Destructive change detected`]}),(0,Y.jsx)(br,{children:`The framework refused this save because it would drop or narrow data already in use. Review the issues and confirm to override.`})]}),(0,Y.jsx)(`div`,{className:`max-h-[300px] overflow-auto space-y-2 my-2`,children:ne?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded border bg-amber-50 border-amber-200 p-2 text-xs`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-amber-900`,children:e.kind??`change`}),e.path&&(0,Y.jsx)(`div`,{className:`text-amber-800 font-mono mt-0.5`,children:e.path}),(0,Y.jsx)(`div`,{className:`text-amber-900 mt-1`,children:e.message})]},t))}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`ghost`,onClick:()=>ie(null),children:`Cancel`}),(0,Y.jsx)(I,{variant:`destructive`,onClick:()=>At(!0),disabled:T,children:T?`Forcing…`:`Force save`})]})]})})]})}function ol({refs:e,loading:t}){return t||e==null?(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Scanning references…`]}):e.length===0?(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No references found`}),(0,Y.jsx)(_r,{children:`Nothing in the metadata graph points at this item. Safe to delete.`})]}):(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From type`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From name`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`Path`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:e.map((e,t)=>(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50`,children:[(0,Y.jsx)(`td`,{className:`px-3 py-2`,children:(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono`,children:e.fromType})}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs`,children:e.fromName}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e.path})]},t))})]})})}function sl({saving:e,isDirty:t,autoSaveEnabled:n,lastSavedAt:r,createMode:i,locale:a}){let[,o]=X.useReducer(e=>e+1,0);return X.useEffect(()=>{if(!r)return;let e=window.setInterval(o,3e4);return()=>window.clearInterval(e)},[r]),e?(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(L,{className:`h-3 w-3 animate-spin`}),q(`engine.edit.saving`,a)]}):t?i?null:(0,Y.jsxs)(`span`,{className:`text-xs text-amber-600 dark:text-amber-300 hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),q(n?`engine.edit.autoSavingShortly`:`engine.edit.unsaved`,a)]}):r?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:J(`engine.edit.savedAt`,a,{time:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`})}):null}function cl({type:e}){let t=r(),[n]=o(),i=e??n.get(`type`)??``;if(!i)return(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`Missing metadata type`}),(0,Y.jsxs)(_r,{children:[`This page expects a `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=`}),` query param (e.g. `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=view`}),`) or a nav-metadata `,(0,Y.jsxs)(`code`,{className:`font-mono`,children:[`params: `,`{ type: 'view' }`]}),`.`]})]})});let a=ll(t.pathname),s=a.split(`/`).filter(Boolean);return s.length===0?(0,Y.jsx)(Xo,{type:i}):s[0]===`new`&&s.length===1?(0,Y.jsx)(il,{type:i,name:``,createMode:!0},`${i}:__new__`):s.length===2&&s[1]===`history`?(0,Y.jsx)(ic,{type:i,name:decodeURIComponent(s[0])}):s.length===1?(0,Y.jsx)(il,{type:i,name:decodeURIComponent(s[0])},`${i}:${s[0]}`):(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`Unknown sub-path`}),(0,Y.jsxs)(_r,{children:[`The path `,(0,Y.jsx)(`code`,{className:`font-mono`,children:a}),` isn't recognized. Valid forms are `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/`}),` (list),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/new`}),` (create),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name`}),` (edit),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name/history`}),`.`]})]})})}function ll(e){let t=e.indexOf(`/metadata/resource`);return t===-1?``:e.slice(t+18)}function ul(){let e=pi(),t=X.useMemo(()=>ca(),[]),[r,i]=X.useState(`error`),{loading:a,error:o,summary:s,reload:c}=fi(e,r),{entries:l}=di(e),u=X.useMemo(()=>{let e={};for(let n of l)e[n.type]=ia(n.type,t,n.label);return e},[l,t]),d=X.useMemo(()=>{let e={};for(let t of s.entries)(e[t.type]??=[]).push(t);return Object.entries(e).sort(([,e],[,t])=>t.length-e.length)},[s]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`nav`,{className:`text-xs text-muted-foreground mb-2`,children:(0,Y.jsxs)(n,{to:`..`,className:`hover:text-foreground inline-flex items-center gap-1`,children:[(0,Y.jsx)(le,{className:`h-3 w-3`}),q(`engine.diagnostics.back`,t)]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`h1`,{className:`text-xl font-semibold flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-5 w-5 text-destructive`}),q(`engine.diagnostics.title`,t)]}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[11px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:J(`engine.diagnostics.summary`,t,{count:s.total,items:s.scannedItems,types:s.scannedTypes})}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsx)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5 text-xs`,children:[`error`,`warning`].map(e=>(0,Y.jsx)(`button`,{role:`tab`,type:`button`,"aria-selected":r===e,onClick:()=>i(e),className:`px-2.5 py-1 rounded transition-colors `+(r===e?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),children:q(`engine.diagnostics.severity.${e}`,t)},e))}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:c,children:[(0,Y.jsx)(Rt,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.diagnostics.refresh`,t)]})]}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 max-w-3xl`,children:q(`engine.diagnostics.description`,t)})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[a&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:q(`engine.diagnostics.loading`,t)}),!a&&o&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/[0.06]`,children:J(`engine.diagnostics.loadFailed`,t,{error:o})}),!a&&!o&&d.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.diagnostics.cleanTitle`,t)}),(0,Y.jsx)(_r,{children:J(`engine.diagnostics.cleanHint`,t,{items:s.scannedItems,types:s.scannedTypes})})]}),d.map(([e,i])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(n,{to:`../${encodeURIComponent(e)}`,className:`hover:text-foreground hover:underline`,children:u[e]??e}),(0,Y.jsx)(`span`,{className:`font-mono normal-case tracking-normal text-[10px] opacity-70`,children:e}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:i.length})]}),(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium w-[28%]`,children:q(`engine.diagnostics.col.name`,t)}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:q(`engine.diagnostics.col.issues`,t)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:i.map(i=>{let a=i.diagnostics.errors??[],o=i.diagnostics.warnings??[],s=(r===`warning`&&a.length===0?o:a).slice(0,3),c=Math.max(0,(a.length||o.length)-s.length);return(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50 align-top`,children:[(0,Y.jsxs)(`td`,{className:`px-3 py-2 align-top`,children:[(0,Y.jsx)(n,{to:`../${encodeURIComponent(e)}/${encodeURIComponent(i.name)}`,className:`text-primary hover:underline font-mono`,children:i.name}),a.length>0&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] border-destructive/40 text-destructive`,children:J(`engine.diagnostics.errorN`,t,{count:a.length})}),o.length>0&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300`,children:J(`engine.diagnostics.warnN`,t,{count:o.length})})]}),(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:(0,Y.jsxs)(`ul`,{className:`space-y-0.5 font-mono text-[11px]`,children:[s.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:e.path||`(root)`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`: `}),e.message]},t)),c>0&&(0,Y.jsx)(`li`,{className:`text-muted-foreground`,children:J(`engine.diagnostics.more`,t,{count:c})})]})})]},i.name)})})]})})]},e))]})]})}var dl=[`all`,`select`,`insert`,`update`,`delete`],fl=[`visible`,`hidden`,`default_on`,`default_off`];function pl(e){if(Array.isArray(e))return e;if(typeof e==`string`&&e.trim())try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]}function ml(e){if(e&&typeof e==`object`&&!Array.isArray(e))return e;if(typeof e==`string`&&e.trim())try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{}}var hl=`h-8 rounded-md border border-input bg-background px-2 text-sm disabled:opacity-50`;function gl({title:e,icon:t,count:n,children:r,defaultOpen:i}){let[a,o]=X.useState(!!i);return(0,Y.jsxs)(tn,{open:a,onOpenChange:o,className:`border-b`,children:[(0,Y.jsxs)(M,{className:`flex w-full items-center gap-2 px-6 py-2.5 text-left hover:bg-muted/40`,children:[(0,Y.jsx)(oe,{className:B(`h-4 w-4 text-muted-foreground transition-transform`,a&&`rotate-90`)}),t,(0,Y.jsx)(`span`,{className:`text-sm font-medium`,children:e}),n!=null&&n>0&&(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px]`,children:n})]}),(0,Y.jsx)(pt,{className:`px-6 pb-4 pt-1`,children:r})]})}function _l({draft:e,setDraft:t,writable:n,allSetNames:r,t:i}){let a=X.useMemo(()=>pl(e.rowLevelSecurity),[e.rowLevelSecurity]),o=X.useMemo(()=>ml(e.adminScope),[e.adminScope]),s=X.useMemo(()=>ml(e.tabPermissions),[e.tabPermissions]),c=e=>t(t=>({...t,rowLevelSecurity:e})),l=e=>t(t=>({...t,adminScope:{...ml(t.adminScope),...e}})),u=e=>t(t=>({...t,tabPermissions:e})),d=Object.entries(s);return(0,Y.jsxs)(`div`,{className:`border-b bg-muted/10`,children:[(0,Y.jsxs)(gl,{title:i(`perm.rls.title`),icon:(0,Y.jsx)(Pt,{className:`h-4 w-4 text-muted-foreground`}),count:a.length,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.rls.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[a.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2 bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(V,{value:e.name??``,disabled:!n,placeholder:i(`perm.rls.name`),onChange:n=>{let r=[...a];r[t]={...e,name:n.target.value},c(r)},className:`h-8 w-48`}),(0,Y.jsx)(V,{value:e.object??``,disabled:!n,placeholder:i(`perm.rls.object`),onChange:n=>{let r=[...a];r[t]={...e,object:n.target.value},c(r)},className:`h-8 w-40`}),(0,Y.jsx)(`select`,{value:e.operation??`all`,disabled:!n,onChange:n=>{let r=[...a];r[t]={...e,operation:n.target.value},c(r)},className:hl,children:dl.map(e=>(0,Y.jsx)(`option`,{value:e,children:e},e))}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(_n,{checked:e.enabled!==!1,disabled:!n,onCheckedChange:n=>{let r=[...a];r[t]={...e,enabled:!!n},c(r)}}),i(`perm.rls.enabled`)]}),n&&(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-7 w-7 ml-auto text-muted-foreground hover:text-destructive`,onClick:()=>c(a.filter((e,n)=>n!==t)),children:(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]}),(0,Y.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-[10px] uppercase text-muted-foreground`,children:i(`perm.rls.using`)}),(0,Y.jsx)(ir,{value:e.using??``,disabled:!n,rows:2,placeholder:`organization_id == current_user.organization_id`,onChange:n=>{let r=[...a];r[t]={...e,using:n.target.value},c(r)},className:`font-mono text-xs`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-[10px] uppercase text-muted-foreground`,children:i(`perm.rls.check`)}),(0,Y.jsx)(ir,{value:e.check??``,disabled:!n,rows:2,placeholder:i(`perm.rls.checkPlaceholder`),onChange:n=>{let r=[...a];r[t]={...e,check:n.target.value},c(r)},className:`font-mono text-xs`})]})]})]},t)),a.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:i(`perm.rls.empty`)}),n&&(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>c([...a,{name:``,object:`*`,operation:`all`,using:``,enabled:!0,priority:0}]),children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),` `,i(`perm.rls.add`)]})]})]}),(0,Y.jsxs)(gl,{title:i(`perm.tabs.title`),icon:(0,Y.jsx)(tr,{className:`h-4 w-4 text-muted-foreground`}),count:d.length,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.tabs.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[d.map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(V,{value:e,disabled:!n,onChange:t=>{let n=t.target.value,r={};for(let[t,i]of d)r[t===e?n:t]=i;u(r)},className:`h-8 w-64`}),(0,Y.jsx)(`select`,{value:t,disabled:!n,onChange:t=>u({...s,[e]:t.target.value}),className:hl,children:fl.map(e=>(0,Y.jsx)(`option`,{value:e,children:i(`perm.tabs.vis.${e}`)},e))}),n&&(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-muted-foreground hover:text-destructive`,onClick:()=>{let t={...s};delete t[e],u(t)},children:(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]},e)),d.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:i(`perm.tabs.empty`)}),n&&(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>{s[``]===void 0&&u({...s,"":`visible`})},children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),` `,i(`perm.tabs.add`)]})]})]}),(0,Y.jsxs)(gl,{title:i(`perm.admin.title`),icon:(0,Y.jsx)(St,{className:`h-4 w-4 text-muted-foreground`}),count:o.businessUnit||(o.assignablePermissionSets?.length??0)?1:0,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.admin.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-3 max-w-2xl`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:i(`perm.admin.businessUnit`)}),(0,Y.jsx)(V,{value:o.businessUnit??``,disabled:!n,onChange:e=>l({businessUnit:e.target.value}),className:`h-8 w-64`})]}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs pb-1.5`,children:[(0,Y.jsx)(_n,{checked:!!o.includeSubtree,disabled:!n,onCheckedChange:e=>l({includeSubtree:!!e})}),i(`perm.admin.includeSubtree`)]})]}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-x-6 gap-y-2`,children:[[`manageAssignments`,`perm.admin.manageAssignments`],[`manageBindings`,`perm.admin.manageBindings`],[`authorEnvironmentSets`,`perm.admin.authorEnvironmentSets`]].map(([e,t])=>(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(_n,{checked:!!o[e],disabled:!n,onCheckedChange:t=>l({[e]:!!t})}),i(t)]},e))}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:i(`perm.admin.assignableSets`)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[r.length===0&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i(`perm.admin.noSets`)}),r.map(e=>{let t=(o.assignablePermissionSets??[]).includes(e);return(0,Y.jsx)(`button`,{type:`button`,disabled:!n,"aria-pressed":t,onClick:()=>{let n=o.assignablePermissionSets??[],r=t?n.filter(t=>t!==e):[...n,e];l({assignablePermissionSets:r})},className:B(`rounded-full border px-3 py-1 text-xs transition-colors disabled:opacity-50`,t?`border-primary bg-primary text-primary-foreground`:`border-input bg-background hover:bg-accent`),children:e},e)})]})]})]})]})]})}function vl(e){let t=e.indexOf(`.`);return t===-1?e:e.slice(0,t)}function yl(e){return e instanceof Set?e:new Set(e)}function bl(e,t){let n=yl(t),r={};for(let[t,i]of Object.entries(e.objects??{}))n.has(t)&&(r[t]=i);let i={};for(let[t,r]of Object.entries(e.fields??{}))n.has(vl(t))&&(i[t]=r);return{objects:r,fields:i}}function xl(e,t,n){let r=yl(n),i={};for(let[t,n]of Object.entries(e.objects??{}))r.has(t)||(i[t]=n);for(let[e,n]of Object.entries(t.objects??{}))r.has(e)&&(i[e]=n);let a={};for(let[t,n]of Object.entries(e.fields??{}))r.has(vl(t))||(a[t]=n);for(let[e,n]of Object.entries(t.fields??{}))r.has(vl(e))&&(a[e]=n);return{...e,name:t.name,label:t.label,isDefault:t.isDefault,objects:i,fields:a}}function Sl(e,t){let n={private:`perm.owd.private`,public_read:`perm.owd.public_read`,public_read_write:`perm.owd.public_read_write`,controlled_by_parent:`perm.owd.controlled_by_parent`};return n[t]?e(n[t]):t}function Cl(e){return[{key:`allowCreate`,short:`C`,tip:q(`perm.action.create`,e)},{key:`allowRead`,short:`R`,tip:q(`perm.action.read`,e)},{key:`allowEdit`,short:`U`,tip:q(`perm.action.edit`,e)},{key:`allowDelete`,short:`D`,tip:q(`perm.action.delete`,e)},{key:`allowTransfer`,short:`Tr`,tip:q(`perm.action.transfer`,e)},{key:`allowRestore`,short:`Re`,tip:q(`perm.action.restore`,e)},{key:`allowPurge`,short:`Pu`,tip:q(`perm.action.purge`,e)},{key:`viewAllRecords`,short:`VA`,tip:q(`perm.action.viewAll`,e)},{key:`modifyAllRecords`,short:`MA`,tip:q(`perm.action.modifyAll`,e)}]}function wl({type:e,name:t,packageId:n,onDraftSaved:r,publishNonce:a}){let o=i(),s=pi(),c=p(),{entries:l}=di(s),u=l.find(t=>t.type===e),d=!!Jo(e,u).allowOrgOverride,f=X.useMemo(()=>ca(),[]),m=X.useCallback(e=>q(e,f),[f]),h=X.useMemo(()=>Cl(f),[f]),[g,_]=X.useState({name:t,objects:{},fields:{}}),[v,y]=X.useState([]),[b,x]=X.useState({}),[S,C]=X.useState(new Set),[w,T]=X.useState(!0),[E,D]=X.useState(!1),[O,k]=X.useState(null),[A,j]=X.useState(null),[M,ee]=X.useState(``),[te,N]=X.useState(!1),[ne,re]=X.useState([]);X.useEffect(()=>{let e=!1;return s.list(`permission`,{}).then(t=>{e||re((t||[]).map(e=>e?.name).filter(e=>!!e))}).catch(()=>{}),()=>{e=!0}},[s]),X.useEffect(()=>{let r=!1;return T(!0),(async()=>{try{let[i,a,o]=await Promise.all([s.layered(e,t).catch(()=>null),s.list(`object`,n?{packageId:n}:{}).catch(()=>[]),n?s.getDraft(e,t,{packageId:n}).catch(()=>null):Promise.resolve(null)]);if(r)return;let c=(o?o.item??o:null)??i?.effective??i?.code??{name:t,objects:{}},l=(a??[]).map(e=>{let t=e?.item??e;return{name:String(t?.name??``),label:t?.label,accessDefault:t?.access?.default,owd:typeof t?.sharingModel==`string`?t.sharingModel:void 0,owdExternal:typeof t?.externalSharingModel==`string`?t.externalSharingModel:void 0}}).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));y(l);let u={...c,name:String(c?.name??t),objects:c?.objects??{},fields:c?.fields??{}};if(n){let e=bl(u,l.map(e=>e.name));_({...u,objects:e.objects,fields:e.fields})}else _(u)}catch(e){k(e?.message??String(e))}finally{r||T(!1)}})(),()=>{r=!0}},[s,e,t,n,a]);async function P(e){if(!b[e])try{let t=(await s.get(`object`,e))?.fields,n=(Array.isArray(t)?t.map(e=>({name:String(e?.name??``),label:e?.label})):t&&typeof t==`object`?Object.entries(t).map(([e,t])=>({name:String(t?.name??e),label:t?.label})):[]).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));x(t=>({...t,[e]:n}))}catch{x(t=>({...t,[e]:[]}))}}function ie(e){C(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),P(e)),n})}function ae(e,t,n){_(r=>{let i={...r.objects[e]??{},[t]:n};return t===`viewAllRecords`&&n&&(i.allowRead=!0),t===`modifyAllRecords`&&n&&(i.allowEdit=!0,i.allowRead=!0),{...r,objects:{...r.objects,[e]:i}}})}function F(e,t){_(n=>{let r=t===`none`?{}:t===`all`?Object.fromEntries(h.map(e=>[e.key,!0])):t===`crud`?{allowCreate:!0,allowRead:!0,allowEdit:!0,allowDelete:!0}:{allowRead:!0};return{...n,objects:{...n.objects,[e]:r}}})}function oe(e,t,n,r){let i=`${e}.${t}`;_(e=>{let t={...e.fields??{}},a={...t[i]??{readable:!0,editable:!1},[n]:r};return n===`readable`&&!r&&(a.editable=!1),n===`editable`&&r&&(a.readable=!0),t[i]=a,{...e,fields:t}})}function se(e){if(!n)return e;let t=bl(e,v.map(e=>e.name));return{...e,objects:t.objects,fields:t.fields}}async function ce(t,i){let a=i??g;D(!0),k(null);try{let i=a;if(n){let t=v.map(e=>e.name);i=xl((await s.layered(e,a.name).catch(()=>null))?.effective??a,a,t)}if(await s.save(e,a.name,i,{force:t,...n?{mode:`draft`,packageId:n}:{}}),n)_(se(i)),r?.();else{let t=await s.layered(e,a.name);_(se(t.effective??i))}j(null)}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];j({issues:Array.isArray(t)?t:[],pending:a})}else k(e?.message??String(e))}finally{D(!1)}}let le=X.useMemo(()=>{let e=M.trim().toLowerCase();return v.filter(t=>{if(te){let e=g.objects[t.name];if(!e||!Object.values(e).some(Boolean))return!1}return e?t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e):!0})},[v,M,te,g.objects]),ue=[{label:m(`perm.stat.objectsGranted`),value:Object.values(g.objects).filter(e=>Object.values(e).some(Boolean)).length},{label:m(`perm.stat.fieldOverrides`),value:Object.keys(g.fields??{}).length}];return w?(0,Y.jsx)(zo,{entry:u,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` `,m(`perm.loading`).replace(`{name}`,t)]})}):(0,Y.jsxs)(zo,{entry:u??{type:e,label:e},itemName:t,subtitle:m(`perm.subtitle.set`),stats:ue,actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>o(`./history?type=${encodeURIComponent(e)}`),children:[(0,Y.jsx)(hr,{className:`h-4 w-4 mr-1`}),` `,m(`engine.edit.history`)]}),d&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>ce(!1),disabled:E,children:[E?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(lt,{className:`h-4 w-4 mr-1`}),m(`engine.edit.save`)]})]}),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[O&&(0,Y.jsxs)(`div`,{className:`m-4 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive flex items-start gap-2`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:O})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b bg-muted/30 flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{htmlFor:`perm-name`,className:`text-xs`,children:m(`perm.field.name`)}),(0,Y.jsx)(V,{id:`perm-name`,value:g.name,disabled:!d,onChange:e=>_(t=>({...t,name:e.target.value})),className:`h-8 w-56`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{htmlFor:`perm-label`,className:`text-xs`,children:m(`perm.field.label`)}),(0,Y.jsx)(V,{id:`perm-label`,value:g.label??``,disabled:!d,onChange:e=>_(t=>({...t,label:e.target.value})),className:`h-8 w-72`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 pb-1`,children:[(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:g.managedBy===`package`||n?m(`perm.badge.package`):m(`perm.badge.custom`)}),!!g.isDefault&&(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px]`,children:m(`perm.badge.default`)})]}),!d&&(0,Y.jsx)(U,{variant:`secondary`,className:`ml-auto`,children:m(`perm.readOnly`)})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:m(`perm.field.systemCapabilities`)}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5 mb-2`,children:m(`perm.field.systemCapabilitiesHelp`)}),(0,Y.jsx)(Tt,{value:JSON.stringify(g.systemPermissions??[]),onChange:e=>_(t=>({...t,systemPermissions:ge(e)})),field:{name:`system_permissions`},dataSource:c,readonly:!d})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b flex items-center gap-3`,children:[(0,Y.jsx)(V,{placeholder:m(`perm.filter.placeholder`),value:M,onChange:e=>ee(e.target.value),className:`h-8 w-72`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(_n,{id:`only-enabled`,checked:te,onCheckedChange:e=>N(!!e)}),(0,Y.jsx)(H,{htmlFor:`only-enabled`,className:`text-xs`,children:m(`perm.filter.onlyGranted`)})]}),(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:[le.length,` / `,v.length,` `,m(`perm.stat.objectsSuffix`)]})]}),(0,Y.jsx)(`div`,{className:`px-6 py-2 border-b flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:h.map(e=>(0,Y.jsxs)(`span`,{className:`whitespace-nowrap`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:e.short}),` `,e.tip]},e.key))}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto`,children:[(0,Y.jsx)(Tl,{objects:le,draft:g,expanded:S,fieldsByObject:b,writable:d,objectActions:h,t:m,onToggleExpand:ie,onObjectPerm:ae,onFieldPerm:oe,onBulkSet:F}),(0,Y.jsx)(_l,{draft:g,setDraft:_,writable:d,allSetNames:ne,t:m})]})]}),(0,Y.jsx)(we,{open:!!A,onOpenChange:e=>!e&&j(null),children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 text-amber-500`}),` `,m(`engine.edit.destructive`)]}),(0,Y.jsx)(br,{children:m(`engine.edit.destructiveHint`)})]}),(0,Y.jsx)(`ul`,{className:`text-sm space-y-1 max-h-64 overflow-auto`,children:A?.issues.map((e,t)=>(0,Y.jsxs)(`li`,{className:`border-l-2 border-amber-500 pl-2`,children:[e.kind&&(0,Y.jsx)(U,{variant:`outline`,className:`mr-2`,children:e.kind}),e.message??JSON.stringify(e)]},t))}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`ghost`,onClick:()=>j(null),children:m(`engine.cancel`)}),(0,Y.jsxs)(I,{variant:`destructive`,onClick:()=>A&&ce(!0,A.pending),disabled:E,children:[E&&(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}),m(`engine.edit.forceSave`)]})]})]})})]})}function Tl({objects:e,draft:t,expanded:n,fieldsByObject:r,writable:i,objectActions:a,t:o,onToggleExpand:s,onObjectPerm:c,onFieldPerm:l,onBulkSet:u}){return(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 bg-background border-b z-10`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`text-left px-4 py-2 font-medium w-72`,children:o(`perm.col.object`)}),a.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium text-center w-14`,title:e.tip,children:e.short},e.key)),(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium w-44 text-right`,children:o(`perm.col.bulk`)})]})}),(0,Y.jsxs)(`tbody`,{children:[e.length===0&&(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-4 py-8 text-center text-muted-foreground`,children:o(`perm.filter.empty`)})}),e.map(e=>{let d=t.objects[e.name]??{},f=n.has(e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsxs)(`tr`,{className:`border-b hover:bg-muted/30`,children:[(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 align-middle`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>s(e.name),className:`inline-flex items-center gap-1.5 hover:text-foreground`,children:[f?(0,Y.jsx)(Me,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(oe,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label??e.name}),e.label&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`(`,e.name,`)`]})]}),e.accessDefault===`private`&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 border-amber-500/50 text-amber-600 dark:text-amber-400 text-[10px] px-1.5 py-0 align-middle`,title:o(`perm.posture.private.tip`),children:o(`perm.posture.private`)}),(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] px-1.5 py-0 align-middle text-muted-foreground`,title:o(`perm.owd.tip`),children:`OWD ${e.owd?Sl(o,e.owd):o(`perm.owd.defaultPrivate`)}`}),e.owdExternal&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-1 text-[10px] px-1.5 py-0 align-middle text-muted-foreground`,title:o(`perm.owd.ext.tip`),children:`Ext ${Sl(o,e.owdExternal)}`})]}),a.map(t=>(0,Y.jsx)(`td`,{className:`text-center px-2 py-1.5`,children:(0,Y.jsx)(On,{checked:!!d[t.key],disabled:!i,onCheckedChange:n=>c(e.name,t.key,!!n),"aria-label":`${e.name} ${t.tip}`})},t.key)),(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 text-right space-x-1`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`read`),children:o(`perm.bulk.read`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`crud`),children:o(`perm.bulk.crud`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`all`),children:o(`perm.bulk.all`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`none`),children:o(`perm.bulk.none`)})]})]}),f&&(0,Y.jsx)(`tr`,{className:`bg-muted/10`,children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-12 py-3`,children:(0,Y.jsx)(El,{objectName:e.name,fields:r[e.name],fieldsState:t.fields??{},writable:i,t:o,onFieldPerm:l})})})]},e.name)})]})]})}function El({objectName:e,fields:t,fieldsState:n,writable:r,t:i,onFieldPerm:a}){return t?t.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(`perm.field.empty`)}):(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`text-left py-1 font-medium`,children:i(`perm.field.col.name`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.read`),children:i(`perm.field.read`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.edit`),children:i(`perm.field.edit`)})]})}),(0,Y.jsx)(`tbody`,{children:t.map(t=>{let i=n[`${e}.${t.name}`]??{readable:!0,editable:!1};return(0,Y.jsxs)(`tr`,{className:`border-t border-muted`,children:[(0,Y.jsxs)(`td`,{className:`py-1`,children:[t.label??t.name,t.label&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,t.name,`)`]})]}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(On,{checked:!!i.readable,disabled:!r,onCheckedChange:n=>a(e,t.name,`readable`,!!n),"aria-label":`${e}.${t.name} readable`})}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(On,{checked:!!i.editable,disabled:!r,onCheckedChange:n=>a(e,t.name,`editable`,!!n),"aria-label":`${e}.${t.name} editable`})})]},t.name)})})]}):(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-3 w-3 animate-spin`}),` `,i(`perm.field.loading`)]})}function Dl(){Go({type:`__object_field`,label:`Field`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`field`,embeddedPath:`fields`,extract:e=>Ol(e.fields),groupLabel:`Fields`,order:5}]}),Go({type:`__object_index`,label:`Index`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`index`,embeddedPath:`indexes`,extract:e=>{let t=e.indexes;return Array.isArray(t)?t.map((e,t)=>{let n=Array.isArray(e.fields)?e.fields.join(`,`):``;return{name:n?`idx_${n}`:`index_${t}`,...e}}):[]},groupLabel:`Indexes`,order:10}]}),Go({type:`__object_validation`,label:`Embedded validation`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`validation`,embeddedPath:`validations`,extract:e=>Ol(e.validations),groupLabel:`Embedded Validations`,order:15}]}),Go({type:`hook`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Hooks`,order:20}],createFields:[`label`,`name`,`object`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{events:[]}}),Go({type:`page`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Pages`,order:40}],createFields:[`label`,`name`,`object`,`type`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`type`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable page title.`},name:{type:`string`,title:`Name`,description:`Page key (snake_case).`,pattern:`^[a-z_][a-z0-9_]*$`},type:{type:`string`,title:`Page type`,enum:[`list`,`record`,`home`,`app`,`utility`],default:`list`,description:`List / Interface page = a data view (Airtable-style: columns, filters, visualizations). Record page renders one object record.`},object:{type:`string`,title:`Object`,widget:`ref:object`,description:`The object this page reads from — the data source for a list page, or the record object for a record page.`},kind:{type:`string`,title:`Kind`,enum:[`full`,`slotted`],default:`full`,description:`full = the whole page; slotted = override only named slots of the default.`}}},createDefaults:{type:`list`,kind:`full`,regions:[]},createSeed:async(e,{client:t})=>{if(e?.type===`list`)return e?.object?{interfaceConfig:{source:String(e.object)}}:{};if(e?.type!==`record`||!e?.object)return{};try{let n=await t.get(`object`,String(e.object));if(!n||typeof n!=`object`)return{};let{buildDefaultPageSchema:r}=await a(async()=>{let{buildDefaultPageSchema:e}=await import(`./plugins-views-Bf2gkCfN.js`).then(e=>e.t);return{buildDefaultPageSchema:e}},__vite__mapDeps([0]),import.meta.url),i=r(n),o={};return Array.isArray(i?.regions)&&i.regions.length&&(o.regions=i.regions),i?.template&&(o.template=i.template),o}catch{return{}}}}),Go({type:`view`,anchors:[{anchorType:`object`,match:Uo([`object`,`config.data.object`]),groupLabel:`Views`,order:30}],createFields:[`label`,`name`,`object`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`object`,`kind`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable view name.`},name:{type:`string`,title:`Name`,description:`View key (snake_case). Qualified to <object>.<key> on save.`,pattern:`^[a-z_][a-z0-9_]*$`},object:{type:`string`,title:`Object`,description:`The object this view displays.`},kind:{type:`string`,title:`View kind`,enum:[`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`chart`],default:`grid`,description:`Pick a starter layout. Switch later in the designer.`}}},createBuildBody:e=>{let t=String(e.object??``),n=String(e.name??``);return{name:n.includes(`.`)||!t?n:`${t}.${n}`,object:t,viewKind:`list`,label:e.label,config:{type:e.kind||`grid`,columns:[],data:{provider:`object`,object:t}}}}}),Go({type:`flow`,anchors:[{anchorType:`object`,match:Uo([`object`,`on.object`,`trigger.object`]),groupLabel:`Flows`,order:50}],createFields:[`label`,`name`,`type`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{nodes:[],edges:[]}}),Go({type:`trigger`,anchors:[{anchorType:`object`,match:Uo([`object`,`on.object`]),groupLabel:`Triggers`,order:52}],createFields:[`label`,`name`,`object`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}]}),Go({type:`validation`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Validations`,order:25}],createFields:[`label`,`name`,`message`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`message`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable rule name.`},name:{type:`string`,title:`Name`,description:`Machine name (snake_case). Used in URLs.`,pattern:`^[a-z_][a-z0-9_]*$`},message:{type:`string`,title:`Error message`,description:`Shown to the user when the rule blocks save.`}}},createDefaults:{type:`script`,active:!0,events:[`insert`,`update`],priority:10,severity:`error`,condition:`false`}}),Go({type:`permission`,anchors:[{anchorType:`object`,match:(e,t)=>{let n=e?.objects;return!!n&&typeof n==`object`&&t in n},groupLabel:`Permissions`,order:60}],createFields:[`label`,`name`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{objects:{}}}),Go({type:`action`,anchors:[{anchorType:`object`,match:Uo([`object`,`target.object`,`on.object`]),groupLabel:`Actions`,order:55}],createFields:[`label`,`name`,`objectName`,`icon`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`script`,body:{language:`js`,source:`return { success: true };`}}}),Go({type:`dashboard`,anchors:[{anchorType:`object`,match:Uo([`object`,`data.object`]),groupLabel:`Dashboards`,order:80}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{widgets:[]}}),Go({type:`report`,anchors:[{anchorType:`object`,match:Uo([`object`,`data.object`]),groupLabel:`Reports`,order:81}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`summary`,drilldown:!0}}),Go({type:`object`,iconName:`database`,domain:`data`,createFields:[`label`,`pluralLabel`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0},{from:`label`,to:`pluralLabel`,transform:`plural-en`,untilUserEdits:!0}],createDefaults:{fields:{}},searchableFields:[`name`,`label`,`pluralLabel`,`description`],listColumns:[{key:`name`,label:`Name`,width:`24%`},{key:`label`,label:`Label`,width:`22%`},{key:`pluralLabel`,label:`Plural`,width:`22%`},{key:`fields`,label:`Fields`,width:`90px`,render:e=>e==null?`—`:Array.isArray(e)?e.length:typeof e==`object`?Object.keys(e).length:0},{key:`description`,label:`Description`}]})}function Ol(e){return Array.isArray(e)?e:e&&typeof e==`object`?Object.entries(e).map(([e,t])=>({name:e,...t&&typeof t==`object`?t:{}})):[]}var kl={name:{type:`string`,title:`Name`,description:`Machine name. snake_case, used as the URL path and DB key.`,pattern:`^[a-z_][a-z0-9_]*$`},label:{type:`string`,title:`Label`,description:`Human-readable display name.`},description:{type:`string`,title:`Description`,format:`multiline`}},Al={position:{type:`object`,title:`Position`,required:[`name`],properties:{...kl}},permission:{type:`object`,title:`Permission`,required:[`id`,`resource`,`actions`,`description`],properties:{id:{type:`string`,title:`ID`,description:`Stable identifier (e.g. crm.account.read).`},resource:{type:`string`,title:`Resource`,description:`What this permission applies to.`,enum:[`data.object`,`data.record`,`data.field`,`ui.view`,`ui.dashboard`,`ui.report`,`system.config`,`system.plugin`,`system.api`,`system.service`,`storage.file`,`storage.database`,`network.http`,`network.websocket`,`process.spawn`,`process.env`]},actions:{type:`array`,title:`Actions`,description:`Permitted operations on the resource.`,items:{type:`string`,enum:[`create`,`read`,`update`,`delete`,`execute`,`admin`,`manage`,`configure`,`import`,`export`,`share`]}},description:{type:`string`,title:`Description`,description:`Why this permission exists (shown in admin UIs).`},scope:{type:`string`,title:`Scope`,enum:[`tenant`,`user`,`plugin`,`global`,`resource`],default:`tenant`},required:{type:`boolean`,title:`Required`,description:`Must be present for the holder to function.`},justification:{type:`string`,title:`Justification`}}},translation:{type:`object`,title:`Translation Bundle`,required:[`name`],properties:{name:{...kl.name,description:`Bundle id (e.g. zh_CN, en_US, package-locale).`},label:kl.label,description:kl.description,locale:{type:`string`,title:`Locale`,description:`BCP-47 tag, e.g. en, zh-Hans, ja-JP.`},strings:{type:`object`,title:`Strings`,description:`Key → translated string map.`}}},tool:{type:`object`,title:`AI Tool`,required:[`name`],properties:{...kl,kind:{type:`string`,title:`Kind`,enum:[`function`,`http`,`mcp`]},inputSchema:{type:`object`,title:`Input Schema (JSON Schema)`},outputSchema:{type:`object`,title:`Output Schema (JSON Schema)`}}},skill:{type:`object`,title:`AI Skill`,required:[`name`],properties:{...kl,instructions:{type:`string`,title:`Instructions`,format:`multiline`},tools:{type:`array`,title:`Tools`,items:{type:`string`}}}},app:{type:`object`,title:`Application`,required:[`name`],properties:{...kl,icon:{type:`string`,title:`Icon`},navigation:{type:`array`,title:`Navigation`,items:{type:`object`}}}},page:{type:`object`,title:`Page`,required:[`name`],properties:{...kl,route:{type:`string`,title:`Route`,description:`URL path under the app.`},layout:{type:`string`,title:`Layout`}}},view:{type:`object`,title:`View`,required:[`name`],properties:{...kl,type:{type:`string`,title:`View Type`,enum:[`grid`,`kanban`,`calendar`,`gantt`,`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]}}},dashboard:{type:`object`,title:`Dashboard`,required:[`name`],properties:{...kl,widgets:{type:`array`,title:`Widgets`,items:{type:`object`}}}},report:{type:`object`,title:`Report`,required:[`name`],properties:{...kl,object:{type:`string`,title:`Object`},filters:{type:`array`,title:`Filters`,items:{type:`object`}}}},book:{type:`object`,title:`Documentation Book`,required:[`name`,`groups`],properties:{...kl,slug:{type:`string`,title:`Slug`,description:`Portal URL segment; defaults to the name without its package prefix.`},icon:{type:`string`,title:`Icon`},order:{type:`number`,title:`Order`,description:`Orders books within the portal.`},audience:{title:`Audience`,description:`Access audience. 'org' (default) inherits the package grant; 'public' is anonymously readable; { permissionSet } gates by a permission set the reader must hold (ADR-0090).`,oneOf:[{type:`string`,enum:[`org`,`public`]},{type:`object`,title:`Permission-set gated`,properties:{permissionSet:{type:`string`,title:`Permission set`}},required:[`permissionSet`]}]},groups:{type:`array`,title:`Groups (spine)`,description:`Ordered sections. Membership is derived from each group's include rule — edit the structure visually in the Preview tab.`,items:{type:`object`,required:[`key`,`label`],properties:{key:{type:`string`,title:`Key`,pattern:`^[a-z][a-z0-9_]*$`},label:{type:`string`,title:`Label`},order:{type:`number`,title:`Order`},include:{title:`Include rule`,description:`Glob over doc names (e.g. crm_guide_*) or { tag }.`},package:{type:`string`,title:`Package scope`},pages:{type:`array`,title:`Explicit pages (override)`,items:{}}}}}}},email_template:{type:`object`,title:`Email Template`,required:[`name`,`label`,`subject`,`bodyHtml`],properties:{...kl,category:{type:`string`,title:`Category`,enum:[`auth`,`notification`,`workflow`,`marketing`,`custom`],default:`custom`},locale:{type:`string`,title:`Locale`,default:`en-US`,description:`BCP-47 tag (en-US, zh-CN, …)`},subject:{type:`string`,title:`Subject`,description:`Supports {{var.path}} interpolation`},bodyHtml:{type:`string`,title:`HTML Body`,format:`multiline`},bodyText:{type:`string`,title:`Plain-Text Body`,format:`multiline`},variables:{type:`array`,title:`Variables`,items:{type:`object`}},fromOverride:{type:`object`,title:`From Override`},replyTo:{type:`string`,title:`Reply-To`},active:{type:`boolean`,title:`Active`,default:!0},isSystem:{type:`boolean`,title:`System Template`,default:!1}}}};function jl(){for(let[e,t]of Object.entries(Al))Go({type:e,defaultSchema:t,fieldOrder:[`name`,`label`,`description`]})}var Ml=[{value:`managed`,label:`Managed (ObjectStack owns the schema)`},{value:`external`,label:`External (read existing schema as-is)`},{value:`validate-only`,label:`Validate only`}],Nl=``.replace(/\/+$/,``),Pl=e=>e.format===`password`;function Fl(e){let t=e?.configSchema?.properties??{},n={};for(let[e,r]of Object.entries(t))Pl(r)||r.default!==void 0&&(n[e]=r.default);return n}function Il(e){let t=X.useMemo(()=>d(),[]),n=pi(),[r,i]=X.useState([]),[a,o]=X.useState(!0),[s,c]=X.useState(null),l=X.useCallback(async(e,n)=>{let r=await t(`${Nl}${e}`,{credentials:`include`,headers:{"Content-Type":`application/json`},...n}),i=await r.text(),a=i;try{a=JSON.parse(i)}catch{}if(!r.ok)throw Error(a&&(a.message||a.error)||`HTTP ${r.status}`);return a},[t]),u=X.useCallback(async()=>{o(!0);try{let e=await l(`/api/v1/datasources`);i(Array.isArray(e?.datasources)?e.datasources:[])}catch(e){ei.error(`Load datasources: ${e.message}`),i([])}finally{o(!1)}},[l]);X.useEffect(()=>{u()},[u]);let f=async e=>{c(`test:${e}`);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/test`,{method:`POST`,body:`{}`});ei.success(t?.ok===!1?`${e}: ${t?.error??`failed`}`:`${e}: connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`),u()}catch(t){ei.error(`${e}: ${t.message}`)}finally{c(null)}},p=async e=>{if(window.confirm(`Delete datasource “${e}”? This cannot be undone.`)){c(`del:${e}`);try{await l(`/api/v1/datasources/${encodeURIComponent(e)}`,{method:`DELETE`}),ei.success(`Deleted ${e}.`),u()}catch(t){ei.error(`Delete ${e}: ${t.message}`)}finally{c(null)}}},[m,h]=X.useState([]),[g,_]=X.useState(!1),[v,y]=X.useState(null),[b,x]=X.useState(null),[S,C]=X.useState(!1),[w,T]=X.useState(!1),[E,D]=X.useState(null),[O,k]=X.useState(!1),A=X.useCallback(async()=>{if(m.length)return m;try{let e=await l(`/api/v1/datasources/drivers`),t=Array.isArray(e?.drivers)?e.drivers:[];return h(t),t}catch(e){return ei.error(`Load drivers: ${e.message}`),[]}},[l,m]),M=X.useMemo(()=>m.find(e=>e.id===b?.driver),[m,b?.driver]),ee=async()=>{let e=await A(),t=e.find(e=>e.id!==`memory`)??e[0];y(null),C(!1),D(null),x({name:``,label:``,driver:t?.id??``,schemaMode:`managed`,config:Fl(t),secret:``}),_(!0)},te=async e=>{let t=await A();c(`edit:${e.name}`);try{let n=(await l(`/api/v1/datasources/${encodeURIComponent(e.name)}`))?.datasource??{};y(e.name),C(!!n.hasSecret),D(null),x({name:n.name??e.name,label:n.label??``,driver:n.driver??e.driver??t[0]?.id??``,schemaMode:n.schemaMode??`managed`,config:{...n.config??{}},secret:``}),_(!0)}catch(t){ei.error(`Open ${e.name}: ${t.message}`)}finally{c(null)}},N=e=>{x(t=>t&&{...t,driver:e,config:Fl(m.find(t=>t.id===e)),secret:``}),D(null)},ne=(e,t)=>x(n=>n&&{...n,config:{...n.config,[e]:t}}),re=e=>{let t={label:e.label||void 0,driver:e.driver,schemaMode:e.schemaMode,config:e.config};return e.secret&&(t.secret=e.secret),t},P=async()=>{if(b){k(!0),D(null);try{let e=await l(`/api/v1/datasources/test`,{method:`POST`,body:JSON.stringify({driver:b.driver,config:b.config,...b.secret?{secret:b.secret}:{}})}),t=e?.result??e;t?.ok===!1?D({ok:!1,text:t?.error??`Connection failed`}):D({ok:!0,text:`Connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`})}catch(e){D({ok:!1,text:e.message})}finally{k(!1)}}},ie=async()=>{if(b){T(!0);try{v?(await l(`/api/v1/datasources/${encodeURIComponent(v)}`,{method:`PATCH`,body:JSON.stringify(re(b))}),ei.success(`Updated ${v}.`)):(await l(`/api/v1/datasources`,{method:`POST`,body:JSON.stringify({name:b.name,...re(b)})}),ei.success(`Created ${b.name}.`)),_(!1),u()}catch(e){ei.error(`Save: ${e.message}`)}finally{T(!1)}}},ae=v?!0:/^[a-z_][a-z0-9_]*$/.test(b?.name??``),F=!!b&&!!b.driver&&ae&&!w,[oe,se]=X.useState(null),[ce,le]=X.useState(null),[ue,de]=X.useState(new Set),[fe,pe]=X.useState(!1),me=async e=>{se(e),le(null),de(new Set);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/remote-tables`);le(Array.isArray(t?.tables)?t.tables:[])}catch(t){ei.error(`Introspect ${e}: ${t.message}`),le([])}},he=e=>de(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),ge=async()=>{if(!oe||ue.size===0)return;pe(!0);let e=0,t=[];for(let r of ue)try{let{draft:t}=await l(`/api/v1/datasources/${encodeURIComponent(oe)}/object-draft`,{method:`POST`,body:JSON.stringify({table:r})});await n.save(`object`,t.name,t.definition),e+=1}catch(e){t.push(`${r}: ${e.message}`)}pe(!1),e&&ei.success(`Synced ${e} object${e>1?`s`:``} from ${oe}.`),t.length&&ei.error(`Failed: ${t.join(`; `)}`),se(null)},_e=(e,t)=>{let n=t.title||e,r=(M?.configSchema?.required??[]).includes(e);if(Pl(t))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r&&!v?` *`:``]}),(0,Y.jsx)(V,{type:`password`,value:b?.secret??``,placeholder:v&&S?`•••••••• (leave blank to keep)`:``,onChange:e=>x(t=>t&&{...t,secret:e.target.value})}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e);let i=b?.config[e];if(t.type===`boolean`)return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 py-1`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-xs`,children:n}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(_n,{checked:!!i,onCheckedChange:t=>ne(e,t)})]},e);if(Array.isArray(t.enum))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsxs)(He,{value:i==null?``:String(i),onValueChange:t=>ne(e,t),children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{placeholder:`Select…`})}),(0,Y.jsx)($t,{children:t.enum.map(e=>(0,Y.jsx)(qt,{value:String(e),children:String(e)},String(e)))})]})]},e);let a=t.type===`number`||t.type===`integer`;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsx)(V,{type:a?`number`:`text`,value:i==null?``:String(i),onChange:t=>ne(e,a?t.target.value===``?void 0:Number(t.target.value):t.target.value)}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)};return(0,Y.jsxs)(`div`,{className:`mx-auto max-w-4xl px-6 py-8`,children:[(0,Y.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`h1`,{className:`flex items-center gap-2 text-xl font-semibold`,children:[(0,Y.jsx)(wr,{className:`h-5 w-5`}),` Datasources`]}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Connect external databases and sync their tables in as objects.`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>void u(),disabled:a,children:[(0,Y.jsx)(Rt,{className:`mr-1.5 h-4 w-4`+(a?` animate-spin`:``)}),` Refresh`]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>void ee(),children:[(0,Y.jsx)(z,{className:`mr-1.5 h-4 w-4`}),` New datasource`]})]})]}),a?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-12 text-sm text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading…`]}):r.length===0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dashed bg-muted/20 py-16 text-center text-sm text-muted-foreground`,children:[`No datasources yet. Click `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`New datasource`}),` to connect one.`]}):(0,Y.jsx)(`div`,{className:`divide-y rounded-lg border bg-card`,children:r.map(e=>{let t=e.origin===`code`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Y.jsx)(wr,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label||e.name}),(0,Y.jsx)(`code`,{className:`text-[11px] text-muted-foreground`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:e.driver}),e.status&&(0,Y.jsxs)(`span`,{children:[`· `,e.status]}),e.origin&&(0,Y.jsxs)(`span`,{children:[`· `,e.origin]})]})]}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,disabled:s===`test:${e.name}`,onClick:()=>void f(e.name),children:[s===`test:${e.name}`?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(j,{className:`mr-1.5 h-4 w-4`}),` Test`]}),(0,Y.jsxs)(I,{variant:`secondary`,size:`sm`,onClick:()=>void me(e.name),children:[(0,Y.jsx)(dr,{className:`mr-1.5 h-4 w-4`}),` Sync objects`]}),!t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,title:`Edit`,disabled:s===`edit:${e.name}`,onClick:()=>void te(e),children:s===`edit:${e.name}`?(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(ln,{className:`h-4 w-4`})}),(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,title:`Delete`,disabled:s===`del:${e.name}`,onClick:()=>void p(e.name),children:s===`del:${e.name}`?(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]})]},e.name)})}),(0,Y.jsx)(we,{open:g,onOpenChange:e=>{e||_(!1)},children:(0,Y.jsxs)(We,{className:`max-w-lg`,children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:v?`Edit “${v}”`:`New datasource`}),(0,Y.jsx)(br,{children:v?`Update the connection. Leave the credential blank to keep the current one.`:`Connect an external database. Credentials are encrypted and never stored in metadata.`})]}),b&&(0,Y.jsxs)(`div`,{className:`max-h-[60vh] space-y-3 overflow-y-auto pr-1`,children:[!v&&(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Name *`}),(0,Y.jsx)(V,{value:b.name,placeholder:`my_database`,onChange:e=>x(t=>t&&{...t,name:e.target.value})}),!ae&&b.name.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Lowercase letters, digits, and underscores; must not start with a digit.`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Label`}),(0,Y.jsx)(V,{value:b.label,placeholder:`Human-friendly name`,onChange:e=>x(t=>t&&{...t,label:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Driver *`}),(0,Y.jsxs)(He,{value:b.driver,onValueChange:N,disabled:!!v,children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{placeholder:`Choose a driver`})}),(0,Y.jsx)($t,{children:m.map(e=>(0,Y.jsx)(qt,{value:e.id,children:e.label},e.id))})]}),M?.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:M.description})]}),Object.entries(M?.configSchema?.properties??{}).map(([e,t])=>_e(e,t)),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Schema mode`}),(0,Y.jsxs)(He,{value:b.schemaMode,onValueChange:e=>x(t=>t&&{...t,schemaMode:e}),children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{})}),(0,Y.jsx)($t,{children:Ml.map(e=>(0,Y.jsx)(qt,{value:e.value,children:e.label},e.value))})]})]}),E&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs `+(E.ok?`text-emerald-600`:`text-destructive`),children:[E.ok?(0,Y.jsx)(Yn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(wt,{className:`h-3.5 w-3.5`}),E.text]})]}),(0,Y.jsxs)(Re,{className:`gap-2 sm:justify-between`,children:[(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,disabled:!b?.driver||O,onClick:()=>void P(),children:[O?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(j,{className:`mr-1.5 h-4 w-4`}),` Test connection`]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>_(!1),children:`Cancel`}),(0,Y.jsxs)(I,{size:`sm`,disabled:!F,onClick:()=>void ie(),children:[w&&(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}),v?`Save changes`:`Create datasource`]})]})]})]})}),(0,Y.jsx)(we,{open:!!oe,onOpenChange:e=>{e||se(null)},children:(0,Y.jsxs)(We,{className:`max-w-lg`,children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{children:[`Sync objects from “`,oe,`”`]}),(0,Y.jsx)(br,{children:`Pick the remote tables to import as objects. Each becomes an object definition.`})]}),ce==null?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 text-sm text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Introspecting…`]}):ce.length===0?(0,Y.jsx)(`p`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No remote tables found on this datasource.`}):(0,Y.jsx)(`div`,{className:`max-h-[50vh] space-y-1 overflow-y-auto`,children:ce.map(e=>{let t=e.schema?`${e.schema}.${e.name}`:e.name;return(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-accent`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:ue.has(e.name),onChange:()=>he(e.name),className:`h-4 w-4`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:t}),e.columnCount!=null&&(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[e.columnCount,` cols`]})]},t)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>se(null),children:`Cancel`}),(0,Y.jsxs)(I,{size:`sm`,disabled:fe||ue.size===0,onClick:()=>void ge(),children:[fe?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(dr,{className:`mr-1.5 h-4 w-4`}),`Create `,ue.size||``,` object`,ue.size===1?``:`s`]})]})]})})]})}var Ll=!1;function Rl(){Ll||(Ll=!0,Go({type:`datasource`,label:`Datasources`,domain:`data`,ListPage:Il}))}function Z({toolbar:e,children:t}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border bg-background overflow-hidden flex flex-col h-full`,children:[e!=null&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-b bg-muted/20 px-2 py-1 min-h-[32px]`,children:e}),(0,Y.jsx)(`div`,{className:`bg-background flex-1 min-h-0 overflow-auto`,children:t})]})}function zl({tone:e=`info`,children:t}){return(0,Y.jsxs)(`div`,{className:`m-4 rounded border p-3 text-sm flex items-start gap-2 ${e===`warn`?`text-amber-800 bg-amber-50 border-amber-200`:e===`error`?`text-destructive bg-destructive/5 border-destructive/30`:`text-muted-foreground border-muted`}`,children:[e!==`info`&&(0,Y.jsx)(dt,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`div`,{className:`flex-1`,children:t})]})}function Bl({icon:e,title:t,description:n,action:r,tone:i=`info`}){let a=i===`warn`?`text-amber-700 bg-amber-50/40 border-amber-200/60`:`text-muted-foreground border-dashed border-muted-foreground/25 bg-muted/10`,o=e??(0,Y.jsx)(bn,{className:`h-8 w-8 opacity-50`});return(0,Y.jsx)(`div`,{className:`h-full w-full flex items-center justify-center p-6`,children:(0,Y.jsxs)(`div`,{className:`max-w-md w-full rounded-lg border ${a} px-6 py-10 flex flex-col items-center gap-3 text-center`,children:[(0,Y.jsx)(`div`,{className:`text-foreground/60`,children:o}),(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground/90`,children:t}),n&&(0,Y.jsx)(`div`,{className:`text-xs leading-relaxed`,children:n}),r&&(0,Y.jsx)(`div`,{className:`mt-1`,children:r})]})})}var Q=class extends X.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e){console.error(`[MetadataPreview] render failed`,e)}render(){return this.state.error?(0,Y.jsxs)(zl,{tone:`error`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Preview failed to render`}),(0,Y.jsx)(`div`,{className:`text-xs mt-1 font-mono opacity-80`,children:this.state.error.message}),this.props.fallbackHint&&(0,Y.jsx)(`div`,{className:`text-xs mt-2 opacity-70`,children:this.props.fallbackHint})]}):this.props.children}};function Vl({title:e,entries:t,selectedId:n,onSelect:r,onAdd:i,addLabel:a}){return t.length===0&&!i?null:(0,Y.jsxs)(`div`,{className:`border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground mb-1.5`,children:e}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),r(e)},className:B(`rounded border bg-background px-2 py-0.5 text-xs hover:border-primary/50 cursor-pointer`,n===e.id&&`ring-2 ring-primary border-primary`),children:e.label},e.id)),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i()},className:`rounded border border-dashed bg-background px-2 py-0.5 text-xs text-muted-foreground hover:border-primary hover:text-primary cursor-pointer inline-flex items-center gap-1`,"aria-label":a??`Add`,title:a??`Add`,children:[(0,Y.jsx)(z,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:a??`Add`})]})]})]})}var Hl=X.lazy(async()=>({default:(await a(()=>import(`./dist-YwlXXOlT.js`).then(e=>e.n),[],import.meta.url)).default}));function Ul(e){let t=e.languages.typescript;t.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0}),t.typescriptDefaults.setCompilerOptions({jsx:t.JsxEmit.React,target:t.ScriptTarget.Latest,allowNonTsExtensions:!0,allowJs:!0,noEmit:!0})}function Wl({draft:e,onPatch:t,readOnly:n,fallbackDelayMs:r=4e3,mode:i=`split`}){let a=e.kind===`react`?`react`:`html`,o=typeof e.source==`string`?e.source:``,[s,c]=X.useState(o),l=X.useRef(o);X.useEffect(()=>{o!==l.current&&(c(o),l.current=o)},[o]);let[u,d]=Ic(r),[f,p]=X.useState(()=>typeof document<`u`&&document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>p(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let m=e=>{let n=e??``;c(n),l.current=n,t?.({source:n})},h=X.useMemo(()=>({...e,type:e.type??`page`}),[e]),g=(0,Y.jsx)(`div`,{ref:d,className:`h-full min-h-[260px] overflow-hidden bg-background`,children:u?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>m(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`Page source`,className:`h-full w-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(se,{className:`h-full w-full`}),children:(0,Y.jsx)(Hl,{value:s,language:`typescript`,path:a===`react`?`page.tsx`:`page.html.tsx`,theme:f,beforeMount:Ul,onChange:m,options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),v=(0,Y.jsx)(`div`,{className:`h-full min-h-[260px] overflow-auto bg-muted/20`,children:(0,Y.jsx)(Q,{fallbackHint:`The page source threw while rendering — fix the code in the Source tab.`,children:(0,Y.jsx)(_,{schema:h})})});return i===`editor`?g:i===`preview`?(0,Y.jsx)(Z,{hint:`page · ${a} source`,children:v}):(0,Y.jsx)(Z,{hint:`page · ${a} source`,children:(0,Y.jsxs)(`div`,{className:`grid h-full grid-cols-1 divide-y divide-border lg:grid-cols-2 lg:divide-x lg:divide-y-0`,children:[g,v]})})}var Gl={grid:{label:`Grid`,category:`data`,Icon:ft},"object-grid":{label:`Table`,category:`data`,Icon:dn},"object-form":{label:`Form`,category:`data`,Icon:yr},"object-metric":{label:`Metric`,category:`data`,Icon:Ur},"object-kanban":{label:`Kanban`,category:`data`,Icon:Ir},"page:header":{label:`Header`,category:`layout`,Icon:tr},"page:footer":{label:`Footer`,category:`layout`,Icon:Fn},"page:sidebar":{label:`Sidebar`,category:`layout`,Icon:jn},"page:tabs":{label:`Tabs`,category:`layout`,Icon:ye},"page:accordion":{label:`Accordion`,category:`layout`,Icon:Ie},"page:card":{label:`Card`,category:`layout`,Icon:Mn},"page:section":{label:`Section`,category:`layout`,Icon:Dn},"record:details":{label:`Record details`,category:`record`,Icon:Fe},"record:highlights":{label:`Highlights`,category:`record`,Icon:Un},"record:related_list":{label:`Related list`,category:`record`,Icon:vr},"record:activity":{label:`Activity timeline`,category:`record`,Icon:rt},"record:chatter":{label:`Chatter feed`,category:`record`,Icon:Gn},"record:path":{label:`Stage path`,category:`record`,Icon:rr},"record:alert":{label:`Alert banner`,category:`record`,Icon:R},"record:quick_actions":{label:`Quick actions`,category:`record`,Icon:$n},"record:reference_rail":{label:`Reference rail`,category:`record`,Icon:Nr},"record:history":{label:`History`,category:`record`,Icon:hr},"nav:menu":{label:`Nav menu`,category:`navigation`,Icon:ct},"nav:breadcrumb":{label:`Breadcrumb`,category:`navigation`,Icon:rr},"global:search":{label:`Global search`,category:`navigation`,Icon:Kn},"ai:chat_window":{label:`AI chat window`,category:`ai`,Icon:vn},"ai:suggestion":{label:`AI suggestion`,category:`ai`,Icon:sn},"element:text":{label:`Text`,category:`element`,Icon:Ee},"element:number":{label:`Number`,category:`element`,Icon:ar},"element:image":{label:`Image`,category:`element`,Icon:Fr},"element:divider":{label:`Divider`,category:`element`,Icon:nt},"element:button":{label:`Button`,category:`element`,Icon:ce},"element:definition-list":{label:`Definition list`,category:`element`,Icon:kt},"element:repeater":{label:`Repeater`,category:`element`,Icon:Je}},Kl={data:`Data`,layout:`Layout`,record:`Record context`,navigation:`Navigation`,element:`Elements`,ai:`AI`,misc:`Other`},ql=(()=>{let e={data:[],layout:[],record:[],navigation:[],element:[],ai:[],misc:[]};for(let[t,n]of Object.entries(Gl))e[n.category].push(t);return[`data`,`layout`,`record`,`element`,`navigation`,`ai`,`misc`].map(t=>({category:t,types:e[t]})).filter(e=>e.types.length>0)})(),Jl=Er,Yl={data:{icon:`text-emerald-500 dark:text-emerald-400`,badge:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300`},layout:{icon:`text-slate-500 dark:text-slate-400`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},record:{icon:`text-blue-500 dark:text-blue-400`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},navigation:{icon:`text-indigo-500 dark:text-indigo-400`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},element:{icon:`text-teal-500 dark:text-teal-400`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},ai:{icon:`text-violet-500 dark:text-violet-400`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},misc:{icon:`text-zinc-500 dark:text-zinc-400`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function Xl(e){return Yl[Gl[e]?.category??`misc`]}var Zl={"object-grid":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`columns`,label:`Columns`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`pageSize`,label:`Page size`,kind:`number`,placeholder:`20`},{name:`striped`,label:`Striped rows`,kind:`boolean`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"object-form":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`mode`,label:`Mode`,kind:`select`,options:[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`view`,label:`View`}]},{name:`formType`,label:`Form type`,kind:`select`,options:[{value:`simple`,label:`Simple`},{value:`tabbed`,label:`Tabbed`},{value:`wizard`,label:`Wizard`},{value:`split`,label:`Split`},{value:`drawer`,label:`Drawer`},{value:`modal`,label:`Modal`}]},{name:`layout`,label:`Layout`,kind:`select`,options:[{value:`vertical`,label:`Vertical`},{value:`horizontal`,label:`Horizontal`},{value:`inline`,label:`Inline`},{value:`grid`,label:`Grid`}]},{name:`columns`,label:`Columns (grid layout)`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`description`,label:`Description`,kind:`text`}],"object-metric":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`label`,label:`Label`,kind:`text`},{name:`description`,label:`Description`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`colorVariant`,label:`Color`,kind:`color`,options:[{value:`default`,label:`Default`},{value:`blue`,label:`Blue`},{value:`teal`,label:`Teal`},{value:`orange`,label:`Orange`},{value:`purple`,label:`Purple`},{value:`success`,label:`Success`},{value:`warning`,label:`Warning`},{value:`danger`,label:`Danger`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"object-kanban":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`groupField`,label:`Group by field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`cardFields`,label:`Card fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`}],grid:[{name:`columns`,label:`Columns`,kind:`number`,placeholder:`3`},{name:`gap`,label:`Gap`,kind:`number`,placeholder:`4`}],"element:text":[{name:`content`,label:`Content`,kind:`text`,placeholder:`Text…`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`heading`,label:`Heading`},{value:`subheading`,label:`Subheading`},{value:`body`,label:`Body`},{value:`caption`,label:`Caption`}]},{name:`align`,label:`Align`,kind:`select`,options:[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}]}],"element:image":[{name:`src`,label:`Source URL`,kind:`text`,placeholder:`https://…`},{name:`alt`,label:`Alt text`,kind:`text`},{name:`fit`,label:`Fit`,kind:`select`,options:[{value:`cover`,label:`Cover`},{value:`contain`,label:`Contain`},{value:`fill`,label:`Fill`}]}],"element:definition-list":[{name:`items`,label:`Items`,kind:`array`,addLabel:`Add item`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`value`,label:`Value`,kind:`text`}]},{name:`columns`,label:`Columns (1 or 2)`,kind:`number`,placeholder:`1`},{name:`inline`,label:`Inline (label · value)`,kind:`boolean`}],"element:repeater":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`object`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`},{name:`emptyText`,label:`Empty text`,kind:`text`},{name:`divided`,label:`Dividers between rows`,kind:`boolean`}],"element:number":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`field`,label:`Field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`aggregate`,label:`Aggregate`,kind:`select`,options:[{value:`count`,label:`Count`},{value:`sum`,label:`Sum`},{value:`avg`,label:`Average`},{value:`min`,label:`Min`},{value:`max`,label:`Max`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"element:button":[{name:`label`,label:`Label`,kind:`text`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}]},{name:`size`,label:`Size`,kind:`select`,options:[{value:`small`,label:`Small`},{value:`medium`,label:`Medium`},{value:`large`,label:`Large`}]},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`}],"page:header":[{name:`title`,label:`Title`,kind:`text`},{name:`subtitle`,label:`Subtitle`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`breadcrumb`,label:`Show breadcrumb`,kind:`boolean`}],"page:card":[{name:`title`,label:`Title`,kind:`text`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"page:tabs":[{name:`items`,label:`Tabs`,kind:`array`,addLabel:`Add tab`,itemFields:[{name:`key`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"page:accordion":[{name:`title`,label:`Title`,kind:`text`},{name:`items`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`value`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:related_list":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`relationshipField`,label:`Relationship field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`}],"record:highlights":[{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}],"record:details":[{name:`sections`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`columns`,label:`Columns`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}]}],"record:alert":[{name:`severity`,label:`Severity`,kind:`select`,options:[{value:`info`,label:`Info`},{value:`warning`,label:`Warning`},{value:`error`,label:`Error`},{value:`success`,label:`Success`}]},{name:`title`,label:`Title`,kind:`text`},{name:`body`,label:`Body`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`dismissible`,label:`Dismissible`,kind:`boolean`}],"record:path":[{name:`statusField`,label:`Status field`,kind:`field-picker`,objectFrom:`page`},{name:`stages`,label:`Stages`,kind:`array`,addLabel:`Add stage`,itemFields:[{name:`value`,label:`Value`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:quick_actions":[{name:`actionNames`,label:`Action names`,kind:`string-list`,placeholder:`action name`},{name:`location`,label:`Location`,kind:`select`,options:[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record more menu`},{value:`record_section`,label:`Record section`},{value:`record_related`,label:`Record related`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List item`},{value:`global_nav`,label:`Global nav`}]}],"ai:chat_window":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}],"ai:input":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}]};function Ql(e){return!!e&&Array.isArray(Zl[e])&&Zl[e].length>0}function $l(){let e=pi(),[t,n]=X.useState([]),[r,i]=X.useState(!0);return X.useEffect(()=>{let t=!1;return i(!0),e.list(`object`).then(e=>{if(t)return;let r=(e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value));n(r),i(!1)}).catch(()=>{t||(n([]),i(!1))}),()=>{t=!0}},[e]),{options:t,loading:r}}function eu(e){let{fields:t}=Li(e);return X.useMemo(()=>t.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[t])}function tu({label:e,value:t,onCommit:n,disabled:r}){let{options:i}=$l();return i.length===0?(0,Y.jsx)(G,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(W,{label:e,value:t||void 0,options:i,onCommit:n,disabled:r})}function nu({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let a=eu(t);return!t||a.length===0?(0,Y.jsx)(G,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(W,{label:e,value:n||void 0,options:a,onCommit:r,disabled:i})}function ru({label:e,objectName:t,value:n,onChange:r,disabled:i}){let a=eu(t),o=Array.isArray(n)?n:[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),o.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[a.length>0?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsxs)(He,{value:e?String(e):``,onValueChange:e=>{let n=[...o];n[t]=e,r(n)},disabled:i,children:[(0,Y.jsx)(rn,{className:`h-8`,children:(0,Y.jsx)(_t,{placeholder:`—`})}),(0,Y.jsx)($t,{children:a.map(e=>(0,Y.jsx)(qt,{value:e.value,children:e.label},e.value))})]})}):(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(e??``),placeholder:`field name`,disabled:i,onChange:e=>{let n=[...o];n[t]=e.target.value,r(n)}}),(0,Y.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:i,"aria-label":`Remove`,onClick:()=>r(o.filter((e,n)=>n!==t)),children:(0,Y.jsx)(P,{className:`h-4 w-4`})})]},t)),!i&&(0,Y.jsxs)(I,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r([...o,``]),children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]})}function iu(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function au({label:e,value:t,onCommit:n,disabled:r}){let i=X.useMemo(()=>iu(t),[t]),[a,o]=X.useState(i),[s,c]=X.useState(null);return X.useEffect(()=>{o(i),c(null)},[i]),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:a,onChange:e=>o(e.target.value),onBlur:()=>{if(r)return;let e=a.trim();if(e===``){c(null),n(void 0);return}try{let t=JSON.parse(e);c(null),n(t)}catch{c(`Invalid JSON`)}},disabled:r,spellCheck:!1,rows:Math.min(12,Math.max(2,a.split(`
10
+ `+` `.repeat(t));var Ec;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Ec||={});function Dc(e,t=[],n=Ec.DEFAULT){let r={type:`array`,offset:-1,length:-1,children:[],parent:void 0};function i(e){r.type===`property`&&(r.length=e-r.offset,r=r.parent)}function a(e){return r.children.push(e),e}kc(e,{onObjectBegin:e=>{r=a({type:`object`,offset:e,length:-1,parent:r,children:[]})},onObjectProperty:(e,t,n)=>{r=a({type:`property`,offset:t,length:-1,parent:r,children:[]}),r.children.push({type:`string`,value:e,offset:t,length:n,parent:r})},onObjectEnd:(e,t)=>{i(e+t),r.length=e+t-r.offset,r=r.parent,i(e+t)},onArrayBegin:(e,t)=>{r=a({type:`array`,offset:e,length:-1,parent:r,children:[]})},onArrayEnd:(e,t)=>{r.length=e+t-r.offset,r=r.parent,i(e+t)},onLiteralValue:(e,t,n)=>{a({type:Ac(e),offset:t,length:n,parent:r,value:e}),i(t+n)},onSeparator:(e,t,n)=>{r.type===`property`&&(e===`:`?r.colonOffset=t:e===`,`&&i(t))},onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n);let o=r.children[0];return o&&delete o.parent,o}function Oc(e,t){if(!e)return;let n=e;for(let e of t)if(typeof e==`string`){if(n.type!==`object`||!Array.isArray(n.children))return;let t=!1;for(let r of n.children)if(Array.isArray(r.children)&&r.children[0].value===e&&r.children.length===2){n=r.children[1],t=!0;break}if(!t)return}else{let t=e;if(n.type!==`array`||t<0||!Array.isArray(n.children)||t>=n.children.length)return;n=n.children[t]}return n}function kc(e,t,n=Ec.DEFAULT){let r=bc(e,!1),i=[],a=0;function o(e){return e?()=>a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function s(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function c(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice()):()=>!0}function l(e){return e?()=>{a>0?a++:e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice())===!1&&(a=1)}:()=>!0}function u(e){return e?()=>{a>0&&a--,a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}let d=l(t.onObjectBegin),f=c(t.onObjectProperty),p=u(t.onObjectEnd),m=l(t.onArrayBegin),h=u(t.onArrayEnd),g=c(t.onLiteralValue),_=s(t.onSeparator),v=o(t.onComment),y=s(t.onError),b=n&&n.disallowComments,x=n&&n.allowTrailingComma;function S(){for(;;){let e=r.scan();switch(r.getTokenError()){case 4:C(14);break;case 5:C(15);break;case 3:C(13);break;case 1:b||C(11);break;case 2:C(12);break;case 6:C(16);break}switch(e){case 12:case 13:b?C(10):v();break;case 16:C(1);break;case 15:case 14:break;default:return e}}}function C(e,t=[],n=[]){if(y(e),t.length+n.length>0){let e=r.getToken();for(;e!==17;){if(t.indexOf(e)!==-1){S();break}else if(n.indexOf(e)!==-1)break;e=S()}}}function w(e){let t=r.getTokenValue();return e?g(t):(f(t),i.push(t)),S(),!0}function T(){switch(r.getToken()){case 11:let e=r.getTokenValue(),t=Number(e);isNaN(t)&&(C(2),t=0),g(t);break;case 7:g(null);break;case 8:g(!0);break;case 9:g(!1);break;default:return!1}return S(),!0}function E(){return r.getToken()===10?(w(!1),r.getToken()===6?(_(`:`),S(),k()||C(4,[],[2,5])):C(5,[],[2,5]),i.pop(),!0):(C(3,[],[2,5]),!1)}function D(){d(),S();let e=!1;for(;r.getToken()!==2&&r.getToken()!==17;){if(r.getToken()===5){if(e||C(4,[],[]),_(`,`),S(),r.getToken()===2&&x)break}else e&&C(6,[],[]);E()||C(4,[],[2,5]),e=!0}return p(),r.getToken()===2?S():C(7,[2],[]),!0}function O(){m(),S();let e=!0,t=!1;for(;r.getToken()!==4&&r.getToken()!==17;){if(r.getToken()===5){if(t||C(4,[],[]),_(`,`),S(),r.getToken()===4&&x)break}else t&&C(6,[],[]);e?(i.push(0),e=!1):i[i.length-1]++,k()||C(4,[],[4,5]),t=!0}return h(),e||i.pop(),r.getToken()===4?S():C(8,[4],[]),!0}function k(){switch(r.getToken()){case 3:return O();case 1:return D();case 10:return w(!0);default:return T()}}return S(),r.getToken()===17?n.allowEmptyContent?!0:(C(4,[],[]),!1):k()?(r.getToken()!==17&&C(9,[],[]),!0):(C(4,[],[]),!1)}function Ac(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`;case`object`:return e?Array.isArray(e)?`array`:`object`:`null`;default:return`null`}}var jc;(function(e){e[e.None=0]=`None`,e[e.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=4]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=6]=`InvalidCharacter`})(jc||={});var Mc;(function(e){e[e.OpenBraceToken=1]=`OpenBraceToken`,e[e.CloseBraceToken=2]=`CloseBraceToken`,e[e.OpenBracketToken=3]=`OpenBracketToken`,e[e.CloseBracketToken=4]=`CloseBracketToken`,e[e.CommaToken=5]=`CommaToken`,e[e.ColonToken=6]=`ColonToken`,e[e.NullKeyword=7]=`NullKeyword`,e[e.TrueKeyword=8]=`TrueKeyword`,e[e.FalseKeyword=9]=`FalseKeyword`,e[e.StringLiteral=10]=`StringLiteral`,e[e.NumericLiteral=11]=`NumericLiteral`,e[e.LineCommentTrivia=12]=`LineCommentTrivia`,e[e.BlockCommentTrivia=13]=`BlockCommentTrivia`,e[e.LineBreakTrivia=14]=`LineBreakTrivia`,e[e.Trivia=15]=`Trivia`,e[e.Unknown=16]=`Unknown`,e[e.EOF=17]=`EOF`})(Mc||={});var Nc=Dc,Pc=Oc,Fc;(function(e){e[e.InvalidSymbol=1]=`InvalidSymbol`,e[e.InvalidNumberFormat=2]=`InvalidNumberFormat`,e[e.PropertyNameExpected=3]=`PropertyNameExpected`,e[e.ValueExpected=4]=`ValueExpected`,e[e.ColonExpected=5]=`ColonExpected`,e[e.CommaExpected=6]=`CommaExpected`,e[e.CloseBraceExpected=7]=`CloseBraceExpected`,e[e.CloseBracketExpected=8]=`CloseBracketExpected`,e[e.EndOfFileExpected=9]=`EndOfFileExpected`,e[e.InvalidCommentToken=10]=`InvalidCommentToken`,e[e.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=14]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=16]=`InvalidCharacter`})(Fc||={});function Ic(e=4e3){let t=X.useRef(null),[n,r]=X.useState(!1);return X.useEffect(()=>{if(n)return;let e=!1,t=la?.init?.();return t&&typeof t.catch==`function`&&t.catch(()=>{e||r(!0)}),()=>{e=!0}},[n]),X.useEffect(()=>{if(n)return;let i=setTimeout(()=>{let e=t.current;(!e||!e.querySelector(`.view-line`))&&r(!0)},e);return()=>clearTimeout(i)},[n,e]),[n,t]}var Lc=X.lazy(async()=>({default:(await a(()=>import(`./dist-YwlXXOlT.js`).then(e=>e.n),[],import.meta.url)).default}));function Rc(e){try{return JSON.stringify(e??{},null,2)}catch{return`{}`}}function zc(e){return e?e.split(`.`).map(e=>{let t=Number(e);return Number.isInteger(t)&&String(t)===e?t:e}):[]}function Bc({value:e,onChange:t,readOnly:n,issues:r,height:i=`60vh`,fallbackDelayMs:a=4e3}){let o=X.useMemo(()=>ca(),[]),[s,c]=X.useState(()=>Rc(e)),[l,u]=X.useState(null),d=X.useRef(s),f=X.useRef(null),p=X.useRef(null),[m,h]=Ic(a),[g,_]=X.useState(()=>typeof document>`u`?`light`:document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>_(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let v=X.useCallback(()=>{let e=f.current,t=p.current;if(!e||!t)return;let n=e.getModel();if(!n)return;if(!r||r.length===0){t.editor.setModelMarkers(n,`objectui-diagnostics`,[]);return}let i;try{i=Nc(s)}catch{i=void 0}let a=r.map(e=>{let r=zc(e.path),a=1,o=1,s=1,c=2,l=i?Pc(i,r):void 0;if(l){let e=n.getPositionAt(l.offset),t=n.getPositionAt(l.offset+l.length);a=e.lineNumber,o=e.column,s=t.lineNumber,c=t.column}return{severity:e.severity===`warning`?t.MarkerSeverity.Warning:t.MarkerSeverity.Error,message:e.path?`${e.path}: ${e.message}`:e.message,startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,source:`metadata`}});t.editor.setModelMarkers(n,`objectui-diagnostics`,a)},[r,s]);X.useEffect(()=>{v()},[v]),X.useEffect(()=>{let t=Rc(e);t!==d.current&&(c(t),d.current=t,u(null))},[e]);let y=e=>{let n=e??``;c(n);try{let e=JSON.parse(n);e&&typeof e==`object`&&!Array.isArray(e)?(u(null),d.current=n,t(e)):u(q(`engine.form.rootJsonObject`,o))}catch(e){u(e?.message??q(`engine.form.invalidJson`,o))}};return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{ref:h,"data-testid":`source-editor`,className:`border rounded overflow-hidden bg-background`,style:{height:typeof i==`number`?`${i}px`:i},children:m?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>y(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`JSON source`,className:`w-full h-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(se,{className:`w-full h-full`}),children:(0,Y.jsx)(Lc,{value:s,language:`json`,theme:g,onChange:y,onMount:(e,t)=>{f.current=e,p.current=t,setTimeout(v,0)},options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,renderLineHighlight:`line`,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),l&&(0,Y.jsxs)(`div`,{className:`text-xs text-destructive flex items-start gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`⚠`}),(0,Y.jsx)(`span`,{children:l})]})]})}var Vc={object:async()=>(await a(async()=>{let{ObjectSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{ObjectSchema:e}},[],import.meta.url)).ObjectSchema,hook:async()=>(await a(async()=>{let{HookSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{HookSchema:e}},[],import.meta.url)).HookSchema,mapping:async()=>(await a(async()=>{let{MappingSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{MappingSchema:e}},[],import.meta.url)).MappingSchema,analytics_cube:async()=>(await a(async()=>{let{CubeSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.l);return{CubeSchema:e}},[],import.meta.url)).CubeSchema,view:async()=>(await a(async()=>{let{ViewSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ViewSchema:e}},[],import.meta.url)).ViewSchema,page:async()=>(await a(async()=>{let{PageSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{PageSchema:e}},[],import.meta.url)).PageSchema,app:async()=>(await a(async()=>{let{AppSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{AppSchema:e}},[],import.meta.url)).AppSchema,dashboard:async()=>(await a(async()=>{let{DashboardSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{DashboardSchema:e}},[],import.meta.url)).DashboardSchema,report:async()=>(await a(async()=>{let{ReportSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ReportSchema:e}},[],import.meta.url)).ReportSchema,action:async()=>(await a(async()=>{let{ActionSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ActionSchema:e}},[],import.meta.url)).ActionSchema,theme:async()=>(await a(async()=>{let{ThemeSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.C);return{ThemeSchema:e}},[],import.meta.url)).ThemeSchema,flow:async()=>(await a(async()=>{let{FlowSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.o);return{FlowSchema:e}},[],import.meta.url)).FlowSchema,webhook:async()=>(await a(async()=>{let{WebhookSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.o);return{WebhookSchema:e}},[],import.meta.url)).WebhookSchema,agent:async()=>(await a(async()=>{let{AgentSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{AgentSchema:e}},[],import.meta.url)).AgentSchema,tool:async()=>(await a(async()=>{let{ToolSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{ToolSchema:e}},[],import.meta.url)).ToolSchema,skill:async()=>(await a(async()=>{let{SkillSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.i);return{SkillSchema:e}},[],import.meta.url)).SkillSchema,email_template:async()=>(await a(async()=>{let{EmailTemplateSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.t);return{EmailTemplateSchema:e}},[],import.meta.url)).EmailTemplateSchema,job:async()=>(await a(async()=>{let{JobSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.t);return{JobSchema:e}},[],import.meta.url)).JobSchema,permission:async()=>(await a(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.s);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,position:async()=>(await a(async()=>{let{PositionSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.n);return{PositionSchema:e}},[],import.meta.url)).PositionSchema,api:async()=>(await a(async()=>{let{ApiEndpointSchema:e}=await import(`./vendor-objectstack-6Mgxtaa1.js`).then(e=>e.r);return{ApiEndpointSchema:e}},[],import.meta.url)).ApiEndpointSchema},Hc=new Set([`approval`,`connector_action`]),Uc=/^nodes\.(\d+)\.type$/;function Wc(e,t){let n=e?.nodes;if(!Array.isArray(n))return;let r=n[t];return typeof r?.type==`string`?r.type:void 0}var Gc=new Map;async function Kc(e){if(Gc.has(e))return Gc.get(e)??null;let t=Vc[e];if(!t)return Gc.set(e,null),null;try{let n=await t(),r=n&&typeof n.safeParse==`function`?n:null;return Gc.set(e,r),r}catch{return Gc.set(e,null),null}}function qc(e){return e in Vc}async function Jc(e,t,n){let r=await Kc(e);if(!r)return{ok:!0,issues:[]};let i=r.safeParse(t);if(i.success)return{ok:!0,issues:[]};let a=i.error?.issues??[],o=Array.isArray(n?.required)?new Set(n.required.map(e=>String(e))):void 0;if(o&&t&&typeof t==`object`&&!Array.isArray(t)){let e=t;a=a.filter(t=>{let n=t.path??[];if(n.length!==1)return!0;let r=String(n[0]);return!((e[r]===void 0||e[r]===null)&&!o.has(r))})}return e===`flow`&&(a=a.filter(e=>{let n=(e.path??[]).map(e=>String(e)).join(`.`),r=Uc.exec(n);if(!r)return!0;let i=Wc(t,Number(r[1]));return!(i&&Hc.has(i))})),a.length===0?{ok:!0,issues:[]}:{ok:!1,issues:a.map(e=>({path:(e.path??[]).map(e=>String(e)).join(`.`),message:e.message}))}}function Yc(e,t,n){let r=t.split(`.`);if(r.length<=1)return e;let i=[e],a=Zc(n)?.[r[0]];for(let e=1;e<r.length;e++){let t=r[e];if(/^\d+$/.test(t)){let e=Number(t),n=Array.isArray(a)?a[e]:void 0;i.push(Xc(n)??`#${e+1}`),a=n}else i.push(t),a=Zc(a)?.[t]}return i.join(` → `)}function Xc(e){let t=Zc(e);if(t)for(let e of[`id`,`name`,`key`,`title`,`label`]){let n=t[e];if(typeof n==`string`&&n.trim())return n;let r=Zc(n);if(r){let e=r.defaultValue??r.key;if(typeof e==`string`&&e.trim())return e}}}function Zc(e){return e&&typeof e==`object`?e:void 0}function Qc(e,t,n){return e.createBuildBody?e.createBuildBody(t):{...n??e.createDefaults??{},...t}}var $c=cr,el=new Set([`object`,`report`,`dataset`]),tl={object:[`fields`,`fieldGroups`]};function nl(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`?null:Object.keys(n).length>0?n:null}function rl(e){return e.loadFailed?!1:e.hasDiag||e.hasClientValidator}function il({type:e,name:t,createMode:n=!1,embedded:r=!1}){let i=s(),a=e??i.type??``,o=t??i.name??``,c=Ko(a);if(c?.EditPage&&!n){let e=c.EditPage;return(0,Y.jsx)(e,{type:a,name:o})}if(c?.CreatePage&&n){let e=c.CreatePage;return(0,Y.jsx)(e,{type:a})}return(0,Y.jsx)(al,{type:a,name:o,createMode:n,embedded:r})}function al({type:e,name:t,createMode:n,embedded:r}){let a=i(),[s,c]=o(),l=s.get(`package`)??void 0,u=pi(),{entries:d}=di(u),f=d.find(t=>t.type===e),p=Jo(e,f),m=(n&&p.createSchema?p.createSchema:f?.schema)??p.defaultSchema,h=X.useMemo(()=>ca(),[]),[g,_]=X.useState(null),v=p.identityField??`name`,[y,b]=X.useState(()=>n?{...p.createDefaults??{},[v]:``}:{}),[x,S]=X.useState(null),[C,w]=X.useState(!n),[T,E]=X.useState(!1),[D,O]=X.useState(null),[k,A]=X.useState(!1),[j,M]=X.useState([]),[ee,te]=X.useState(!1),N=X.useCallback(e=>{b(t=>{let n=typeof e==`function`?e(t):e,r=new Set,i=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of i)Object.is(t?.[e],n?.[e])||r.add(e);return r.size>0&&(te(!0),M(e=>e.filter(e=>{let t=(e.path??``).split(`.`)[0];return!r.has(t)}))),n})},[]),[ne,ie]=X.useState(null),[ae,F]=X.useState(null),oe=X.useCallback(e=>{N(t=>({...t,...e}))},[N]),{markTouched:se}=Ys({rules:p.createDerive,draft:y,onPatch:oe,enabled:!!n}),ce=X.useMemo(()=>{if(n)return p.createFields&&p.createFields.length>0?p.createFields:Xs(m?.properties??void 0,m?.required??void 0)},[n,p.createFields,m]),le=X.useMemo(()=>{let t=tl[e]??[];if(!n||!ce)return t.length===0?p.hiddenFields:Array.from(new Set([...p.hiddenFields??[],...t]));let r=m?.properties??{},i=new Set(ce),a=Object.keys(r).filter(e=>!i.has(e));if(p.hiddenFields)for(let e of p.hiddenFields)a.includes(e)||a.push(e);for(let e of t)a.includes(e)||a.push(e);return a},[n,ce,m,p.hiddenFields,e]),ue=X.useMemo(()=>n&&ce?ce:p.fieldOrder,[n,ce,p.fieldOrder]),de=X.useCallback(e=>{if(n){let t=y,n=typeof e==`function`?e(t):e,r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of r)Object.is(t?.[e],n?.[e])||se(e)}N(e)},[n,y,N,se]);X.useEffect(()=>{if(!qc(e))return;let t=!1,n=window.setTimeout(()=>{Jc(e,y,f?.schema).then(e=>{t||M(e.issues)})},200);return()=>{t=!0,window.clearTimeout(n)}},[e,y,f?.schema]);let fe=X.useMemo(()=>n&&!ee?[]:j,[n,ee,j]),pe=X.useMemo(()=>{let t=g?._diagnostics,n=qc(e)?fe.map(e=>({path:e.path,message:oa(e.message,h)})):(t?.errors??[]).map(e=>({path:e.path,message:oa(e.message,h)})),r=(t?.warnings??[]).map(e=>({path:e.path,message:oa(e.message,h)}));return[...n.map(e=>({path:e.path||void 0,message:e.message,severity:`error`})),...r.map(e=>({path:e.path||void 0,message:e.message,severity:`warning`}))]},[g,fe,e,h]),[me,he]=X.useState(!1),[ge,_e]=X.useState(!1),[ve,ye]=X.useState(0),[be,Se]=X.useState(!!n),[Ce,Te]=X.useState(null);X.useEffect(()=>{Te(null)},[e,t]),X.useEffect(()=>{be||Te(null)},[be]);let Ee=xs(s.get(`sel`)),De=X.useRef(null);X.useEffect(()=>{if(e!==`app`||!Ee||De.current===`${t}:${Ee}`||!y||Object.keys(y).length===0)return;let n=Es(y,Ee);n&&(De.current=`${t}:${Ee}`,Se(!0),Te({kind:`nav`,id:n.selectionId,label:n.label}))},[e,t,Ee,y]),X.useEffect(()=>{if(e!==`app`)return;let t=Ce?.kind===`nav`?Ds(y,Ce.id):null;c(e=>{let n=new URLSearchParams(e);return t?n.set(`sel`,Ss(t)):n.delete(`sel`),n},{replace:!0})},[e,Ce]);let ke=X.useRef(null),[Ae,je]=X.useState(null),[Me,Pe]=X.useState(()=>{if(typeof window>`u`)return!0;try{let e=window.localStorage.getItem(`metadata-admin:autosave`);return e===null?!0:e===`1`}catch{return!0}});X.useEffect(()=>{try{window.localStorage.setItem(`metadata-admin:autosave`,Me?`1`:`0`)}catch{}},[Me]);let Fe=X.useRef(null),[Ie,Le]=X.useState([]),[ze,Be]=X.useState(!0);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await u.list(`object`);if(e)return;Le(t.map(e=>e?.name).filter(e=>!!e).sort())}catch{e||Le([])}finally{e||Be(!1)}})(),()=>{e=!0}},[u]);let Ve=y?.interfaceConfig?.source||y?.object||y?.objectName,[He,Ue]=X.useState([]),[Ge,qe]=X.useState(!1),[Je,Ye]=X.useState([]);X.useEffect(()=>{let e=!1;if(!Ve){Ue([]),Ye([]);return}return qe(!0),(async()=>{try{let t=await u.get(`object`,Ve);if(e)return;let n=t?.fields,r=Array.isArray(n)?n.map(e=>({name:e?.name,label:e?.label,type:e?.type})):n&&typeof n==`object`?Object.entries(n).map(([e,t])=>({name:e,label:t?.label,type:t?.type})):[];Ue(r.filter(e=>!!e.name));let i=t?.actions,a=Array.isArray(i)?i.map(e=>({name:e?.name,label:e?.label,locations:e?.locations})).filter(e=>!!e.name):[];e||Ye(a)}catch{e||(Ue([]),Ye([]))}finally{e||qe(!1)}})(),()=>{e=!0}},[u,Ve]);let[Xe,Ze]=X.useState([]),[Qe,$e]=X.useState(!1);X.useEffect(()=>{let e=!1;if(!Ve){Ze([]);return}return $e(!0),(async()=>{try{let t=await u.list(`view`);if(e)return;let n=(t||[]).filter(e=>(e?.objectName??e?.object??e?.object_name)===Ve),r=new Set,i=n.map(e=>({name:e?.name,label:e?.label||void 0})).filter(e=>!!e.name&&!r.has(e.name)&&r.add(e.name));Ze(i)}catch{e||Ze([])}finally{e||$e(!1)}})(),()=>{e=!0}},[u,Ve]);let et=X.useMemo(()=>({objectNames:Ie,objectsLoading:ze,objectFields:He,objectFieldsLoading:Ge,objectViews:Xe,objectViewsLoading:Qe,objectActions:Je}),[Ie,ze,He,Ge,Xe,Qe,Je]);X.useEffect(()=>{if(n){w(!1);return}let r=!1;return w(!0),O(null),A(!1),(async()=>{try{let n=l?{packageId:l}:{},[i,a]=await Promise.all([u.layered(e,t,n),u.getDraft(e,t,n).catch(()=>null)]);if(r)return;_(i);let o=i?._diagnostics;o&&o.valid===!1&&Array.isArray(o.errors)?M(o.errors.map(e=>({path:e.path||``,message:e.message}))):M([]);let s=nl(a),c=i.effective??i.code??{},d=s?{...c,...s}:c,f=p.toDraft?p.toDraft(d):d;b(f),ke.current=f,he(!!s),w(!1)}catch(n){r||(A(!0),O(J(`engine.edit.loadFailed`,h,{type:e,name:t??``,message:n?.message??String(n)})),w(!1))}})(),()=>{r=!0}},[u,e,t,l,n,ve,h]);let[tt,nt]=X.useState(!1);async function rt(){if(!(x!=null||tt)){nt(!0);try{let n=await u.references(e,t);S(n)}catch(e){S([]),console.error(`references() failed`,e)}finally{nt(!1)}}}let[it,at]=X.useState(null),st=X.useMemo(()=>!n&&!r&&qo(e).length>0,[e,n,r]),ct=X.useRef(null),[ut,dt]=X.useState(null),ft=s.get(`review`),z=X.useRef(!1);X.useEffect(()=>{if(!(ft!==`1`||n)){if(!z.current){z.current=!0,ye(e=>e+1);return}if(!C){me&&dt(`review`);let e=new URLSearchParams(s);e.delete(`review`),c(e,{replace:!0}),z.current=!1}}},[ft,n,C,me]);let[pt,mt]=X.useState(`properties`);X.useEffect(()=>{if(ut===`references`&&rt(),typeof window<`u`&&!r){let e=new URL(window.location.href);ut?e.searchParams.set(`tab`,ut):e.searchParams.delete(`tab`),window.history.replaceState({},``,e.toString())}},[ut,r]);let ht=`metadata-edit:inspector-collapsed`,gt=`metadata-edit:inspector-size`,[_t,vt]=X.useState(()=>typeof window>`u`?!1:window.localStorage.getItem(ht)===`1`),yt=X.useRef(38);X.useEffect(()=>{if(typeof window>`u`)return;let e=Number(window.localStorage.getItem(gt));Number.isFinite(e)&&e>=22&&e<=80&&(yt.current=e)},[]);let bt=X.useRef(null),xt=X.useCallback(()=>{vt(e=>{let t=!e;return typeof window<`u`&&window.localStorage.setItem(ht,t?`1`:`0`),t})},[]);X.useEffect(()=>{let e=bt.current;if(e)if(_t)e.resize?.(`0%`);else{let t=yt.current||38;e.resize?.(`${t}%`)}},[_t]);let[St,wt]=X.useState(!1),[Tt,Dt]=X.useState(!1);X.useEffect(()=>{if(typeof document>`u`||!Tt)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[Tt]),X.useEffect(()=>{if(typeof window>`u`||!Tt)return;function e(e){e.key===`Escape`&&(e.preventDefault(),Dt(!1))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Tt]);let Ot=X.useRef(null);X.useEffect(()=>{Ot.current=null},[e,t]),X.useEffect(()=>{if(n||r||C)return;let i=`${e}/${t??``}`;Ot.current!==i&&pc(e)&&(g?.code!=null&&g.code?._packageId!==`sys_metadata`?f?.allowOrgOverride:f?.allowOrgOverride||f?.allowRuntimeCreate)&&(Ot.current=i,Se(!0))},[e,t,n,r,C,f,g]),X.useEffect(()=>{if(typeof window>`u`||r)return;function e(e){if(!(e.metaKey||e.ctrlKey)||e.shiftKey||e.altKey||e.key!==`\\`)return;let t=e.target;t&&(t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),xt())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,xt]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URLSearchParams(window.location.search),t=e.get(`tab`);(t===`layers`||t===`references`||t===`related`||t===`audit`)&&dt(t),ct.current=t;let n=e.get(`open`);if(n&&n.includes(`:`)){let[e,t]=n.split(`:`,2);e&&t&&at({kind:`metadata`,type:e,name:t})}},[]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URL(window.location.href);it?.kind===`metadata`?e.searchParams.set(`open`,`${it.type}:${it.name}`):e.searchParams.delete(`open`),window.history.replaceState({},``,e.toString())},[it,r]);function kt(e){let t=e.split(`.`)[0];return t?Yc((()=>{let e=n&&p.createSchema?void 0:f?.form,r=Array.isArray(e?.sections)?e.sections:[];for(let e of r){let n=Array.isArray(e?.fields)?e.fields:[];for(let e of n)if(typeof e==`string`){if(e===t)return e}else if(e?.field===t)return String(e.label??t)}let i=m?.properties??{};return String(i[t]?.title??t)})(),e,y):e}async function At(r){E(!0),O(null),M([]);try{let i=f?.createSeed,o=n?Qc(p,y,i):p.fromDraft?p.fromDraft(y):y;if(n&&p.createSeed)try{let e=await p.createSeed(y,{client:u});e&&typeof e==`object`&&(o={...o,...e})}catch{}let c=String(o[v]??y[v]??t),d=n?{...o,[v]:c}:o;if(!c){O(q(`engine.validation.nameRequired`,h)),E(!1);return}let m=(()=>{try{let e=new URLSearchParams(window.location.search).get(`package`);return e&&e!==`all`?e:void 0}catch{return}})();await u.save(e,c,d,{force:r,mode:`draft`,...m?{packageId:m}:{}});let g=l?{packageId:l}:{},[x,S]=await Promise.all([u.layered(e,c,g),u.getDraft(e,c,g).catch(()=>null)]);_(x);let C=nl(S);he(!!C);let w=x.effective??d,T=C?{...w,...C}:w,D=p.toDraft?p.toDraft(T):T;b(D),ke.current=D,je(new Date),Fe.current=JSON.stringify(D),ie(null),F(null);let k=!n&&!!pc(e);if(!n&&!k&&Se(!1),n){let e=s.toString();a(`../${encodeURIComponent(c)}${e?`?${e}`:``}`,{relative:`path`})}}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];ie(Array.isArray(t)?t:[]),F(y)}else if(e?.code===`writable_package_required`)O(q(`engine.package.writableRequired`,h));else if(e?.status===422||e?.code===`invalid_metadata`||e?.code===`invalid_payload`){let t=e?.body?.issues??[],n=(Array.isArray(t)?t:[]).map(e=>({path:Array.isArray(e.path)?e.path.join(`.`):String(e.path??``),message:oa(String(e.message??`Invalid`),h)})),r=String(e?.body?.error??e?.message??``);if(n.length===0&&r){let e=r.match(/failed spec validation:\s*(.+?):\s*(.+)$/);n=e?[{path:e[1].trim(),message:oa(e[2].trim(),h)}]:[{path:``,message:oa(r,h)}]}M(n),n.length===1&&!n[0].path?O(n[0].message):n.length===1?O(`${kt(n[0].path)}: ${n[0].message}`):O(J(`engine.validation.failed`,h,{count:n.length}))}else O(e?.message??String(e))}finally{E(!1)}}async function jt(){let r=!n&&g?.code!=null;if(confirm(J(r?`engine.edit.resetConfirm`:`engine.edit.deleteConfirm`,h,{type:e,name:t??``}))){E(!0),O(null);try{if(await u.reset(e,t),r){let n=await u.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),ke.current=r,pc(e)?Ot.current=null:Se(!1)}else a(`../`,{relative:`path`})}catch(e){O(e?.message??String(e))}finally{E(!1)}}}async function Mt(){_e(!0),O(null);try{await u.publish(e,t);let[n,r]=await Promise.all([u.layered(e,t),u.getDraft(e,t).catch(()=>null)]);_(n);let i=nl(r);he(!!i);let a=n.effective??y,o=i?{...a,...i}:a;b(o),ke.current=o}catch(e){O(e?.message??String(e))}finally{_e(!1)}}async function Ft(){if(confirm(J(`engine.edit.discardDraftConfirm`,h,{type:e,name:t??``}))){E(!0),O(null);try{await u.reset(e,t,{state:`draft`});let n=await u.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),ke.current=r,he(!1)}catch(e){O(e?.message??String(e))}finally{E(!1)}}}let It=X.useMemo(()=>{if(n)return Object.keys(y).length>0;let e=ke.current;if(!e)return!1;try{return JSON.stringify(y)!==JSON.stringify(e)}catch{return!1}},[y,n]),Lt=!n&&g?.code!=null&&g.code?._packageId!==`sys_metadata`,Rt=g?.editable!==!1,Ht=g?.deletable!==!1,Ut=g?.resettable!==!1,Gt=g?.lockReason,Kt=g?.lock&&g.lock!==`none`,qt=(n?!!(f?.allowOrgOverride||f?.allowRuntimeCreate):Lt?!!f?.allowOrgOverride:!!(f?.allowOrgOverride||f?.allowRuntimeCreate))&&(n||Rt),Xt=!qt&&!n,Qt=X.useRef(At);if(X.useEffect(()=>{Qt.current=At}),X.useEffect(()=>{if(!Me||n||Xt||!be||!It||T)return;let e;try{e=JSON.stringify(y)}catch{return}if(e===Fe.current)return;let t=window.setTimeout(()=>{Fe.current=e,Qt.current(!1)},1500);return()=>window.clearTimeout(t)},[y,It,be,T,n,Xt,Me]),X.useEffect(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`s`){if(!qt||Xt||!be&&!n)return;e.preventDefault(),!T&&(n||It)&&Qt.current(!1)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[qt,Xt,be,n,T,It]),X.useEffect(()=>{if(!It)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[It]),X.useEffect(()=>{if(!It)return;let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t&&!(t.target&&t.target!==`_self`)&&!t.hasAttribute(`download`)){try{let e=new URL(t.href,window.location.href);if(e.origin!==window.location.origin||e.pathname===window.location.pathname)return}catch{return}confirm(q(`engine.edit.unsavedLeaveConfirm`,h))||(e.preventDefault(),e.stopPropagation())}};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[It,h]),ti(X.useMemo(()=>{if(r)return null;let n=String(y.name??t??``);if(!n)return null;let i={type:e,name:n,label:typeof y.label==`string`?y.label:void 0};return e===`object`&&(i.fields=Si(y.fields).entries.slice(0,60).map(e=>({name:e.name,type:typeof e.def.type==`string`?e.def.type:void 0,label:typeof e.def.label==`string`?e.def.label:void 0,required:!!e.def.required||void 0}))),i},[r,e,t,y])),C)return(0,Y.jsx)(zo,{entry:f,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading `,e,`/`,t,`…`]})});let $t=Xt&&Lt&&!!f?.allowRuntimeCreate,en=el.has(e),tn=!r&&(!n||en)?pc(e):void 0,nn=gc(e),rn=yc(e);function an(){ke.current&&b(ke.current),M([]),O(null),Se(!1)}let on=Xt||!be&&!n,sn=(0,Y.jsxs)(Y.Fragment,{children:[!n&&(0,Y.jsx)(Ho,{entry:f,location:`record_header`,recordId:t,onAfter:()=>ye(e=>e+1)}),(!n||st)&&(0,Y.jsxs)(`div`,{className:`flex items-center rounded-md border bg-background p-0.5`,children:[!n&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`layers`),title:q(`engine.edit.layers`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Dn,{className:`h-3.5 w-3.5`}),g?.overlay&&(()=>{let e=Ns(g.code,g.effective);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-emerald-600 text-emerald-50 text-[9px] leading-[14px] text-center font-medium`,title:q(`engine.layers.diff`,h),children:e}):null})()]}),!n&&me&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`review`),title:q(`designer.draftReview.title`,h),className:`h-7 w-7 p-0 relative`,"data-testid":`resource-review-trigger`,children:[(0,Y.jsx)(Ct,{className:`h-3.5 w-3.5`}),(()=>{let e=Hs(g?.effective??null,y);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-amber-500 text-amber-50 text-[9px] leading-[14px] text-center font-medium`,title:J(`designer.draftReview.badge`,h,{n:e}),children:e}):null})()]}),!n&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`references`),title:q(`engine.edit.references`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),x&&x.length>0&&(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-muted text-foreground text-[9px] leading-[14px] text-center font-medium border`,children:x.length})]}),st&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`related`),title:q(`engine.edit.related`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(dr,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`history`),title:q(`engine.edit.history`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(hr,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>dt(`audit`),title:q(`engine.edit.auditTab`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(Et,{className:`h-3.5 w-3.5`})})]}),!n&&qt&&g?.overlay&&(Lt?Ut:Ht)&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:jt,disabled:T,title:q(Lt?`engine.edit.reset`:`engine.edit.delete`,h),className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive`,children:Lt?(0,Y.jsx)(Qr,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Zt,{className:`h-3.5 w-3.5`})}),qt&&!n&&!be&&!tn&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>Se(!0),className:`h-7`,children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.edit.edit`,h)]}),qt&&(be||n)&&(0,Y.jsx)(sl,{saving:T,isDirty:It,autoSaveEnabled:Me,lastSavedAt:Ae,createMode:!!n,locale:h}),qt&&(be||n)&&!n&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>Pe(e=>!e),className:`h-7 w-7 p-0 text-muted-foreground`,title:q(Me?`engine.edit.autoSaveOn`:`engine.edit.autoSaveOff`,h),children:Me?(0,Y.jsx)($n,{className:`h-3.5 w-3.5 text-emerald-600`}):(0,Y.jsx)(ot,{className:`h-3.5 w-3.5`})}),qt&&!n&&be&&!tn&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:an,disabled:T,className:`h-7 w-7 p-0`,title:q(`engine.cancel`,h),children:(0,Y.jsx)(P,{className:`h-3.5 w-3.5`})}),qt&&(be||n)&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>At(!1),disabled:T||!n&&!It,className:`h-7 w-7 p-0 relative`,title:T?q(`engine.edit.saving`,h):!n&&!It?q(`engine.edit.noChanges`,h):`${q(`engine.edit.save`,h)} (⌘S)`,children:[T?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(lt,{className:`h-3.5 w-3.5`}),It&&!T&&(0,Y.jsx)(`span`,{"aria-hidden":!0,className:`absolute -top-0.5 -right-0.5 inline-block h-2 w-2 rounded-full bg-amber-300 ring-2 ring-background`})]}),qt&&!n&&me&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:Ft,disabled:T||ge,className:`h-7 w-7 p-0 text-muted-foreground`,title:q(`engine.edit.discardDraft`,h),children:(0,Y.jsx)(Bt,{className:`h-3.5 w-3.5`})}),qt&&!n&&me&&(0,Y.jsx)(I,{size:`sm`,onClick:Mt,disabled:T||ge||It,className:`h-7 px-2 relative bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,title:q(It?`engine.edit.publishBlockedDirty`:`engine.edit.publish`,h),children:ge?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(re,{className:`h-3.5 w-3.5 mr-1`}),(0,Y.jsx)(`span`,{className:`text-xs`,children:q(`engine.edit.publish`,h)})]})})]});return(0,Y.jsxs)(zo,{entry:f??{type:e,label:e},itemName:n?`(new)`:t,subtitle:n?q(`engine.edit.createNew`,h):void 0,actions:tn?null:sn,children:[(0,Y.jsxs)(`div`,{className:tn?`flex h-full min-h-0 flex-col`:`p-6 space-y-6 max-w-7xl`,children:[(D||Xt||me||Kt)&&(0,Y.jsxs)(`div`,{className:tn?`px-6 pt-4 space-y-3`:`space-y-3`,children:[D&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:D}),Kt&&(0,Y.jsxs)(`div`,{className:`text-xs text-amber-900 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-2.5`,children:[(0,Y.jsx)(Pt,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 opacity-80`}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`font-medium`,children:[g?.lock===`full`&&q(`engine.edit.lockFull`,h),g?.lock===`no-overlay`&&q(`engine.edit.lockNoOverlay`,h),g?.lock===`no-delete`&&q(`engine.edit.lockNoDelete`,h)]}),Gt&&(0,Y.jsx)(`div`,{className:`mt-0.5 opacity-90`,children:Gt}),g?.lockDocsUrl&&(0,Y.jsxs)(`a`,{href:g.lockDocsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-amber-800 underline hover:text-amber-900 dark:text-amber-200 dark:hover:text-amber-100`,children:[h===`zh-CN`?`查看文档`:`View docs`,` →`]}),g?.packageId&&(0,Y.jsx)(`div`,{className:`mt-0.5 text-amber-700 dark:text-amber-300/80`,children:(0,Y.jsxs)(`code`,{className:`font-mono`,children:[g.packageId,g.packageVersion?`@${g.packageVersion}`:``]})})]}),$t&&(0,Y.jsx)(I,{size:`sm`,variant:`outline`,className:`shrink-0 h-7 bg-background/60`,onClick:()=>a(`../new`,{relative:`path`}),children:q(`engine.list.create`,h)})]}),me&&!n&&(0,Y.jsxs)(`div`,{className:`text-xs text-emerald-900 border border-emerald-300 bg-emerald-50 rounded p-3 dark:text-emerald-200 dark:border-emerald-700/50 dark:bg-emerald-950/30 flex items-center gap-3`,children:[(0,Y.jsx)(re,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:q(`engine.edit.draftPending`,h)}),qt&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(I,{size:`sm`,variant:`ghost`,onClick:Ft,disabled:T||ge,className:`h-7`,children:q(`engine.edit.discardDraft`,h)}),(0,Y.jsx)(I,{size:`sm`,onClick:Mt,disabled:T||ge||It,className:`h-7 bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,children:ge?(0,Y.jsx)(L,{className:`h-3.5 w-3.5 animate-spin`}):q(`engine.edit.publish`,h)})]})]}),Xt&&!Kt&&(0,Y.jsxs)(`div`,{"data-testid":`readonly-banner`,className:`text-xs text-amber-800 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex-1`,children:$t?q(`engine.edit.artifactLockedBanner`,h).split(/(\{type\})/).map((t,n)=>t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):(0,Y.jsx)(X.Fragment,{children:t},n)):q(`engine.edit.readOnlyTypeBanner`,h).split(/(\{flag\}|\{type\}|\{override\})/).map((t,n)=>t===`{flag}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`OBJECTSTACK_METADATA_WRITABLE`},n):t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):t===`{override}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`allowOrgOverride`},n):(0,Y.jsx)(X.Fragment,{children:t},n))}),$t&&(0,Y.jsx)(I,{size:`sm`,variant:`outline`,className:`shrink-0`,onClick:()=>a(`../new`,{relative:`path`}),children:q(`engine.list.create`,h)})]})]}),(0,Y.jsx)(`div`,{className:tn?`flex w-full flex-1 min-h-0 flex-col`:`w-full`,children:(0,Y.jsxs)(`div`,{className:tn?`mt-2 flex-1 min-h-0 flex flex-col px-6 pb-4`:`mt-4 space-y-3`,children:[!tn&&on&&!Xt&&qt&&!n&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 text-xs text-muted-foreground border rounded p-2.5 bg-muted/30`,children:[(0,Y.jsx)(`span`,{children:q(`engine.edit.readOnlyBanner`,h).split(/\{edit\}/).map((e,t,n)=>(0,Y.jsxs)(X.Fragment,{children:[e,t<n.length-1&&(0,Y.jsx)(`strong`,{children:q(`engine.edit.edit`,h)})]},t))}),(0,Y.jsxs)(I,{size:`sm`,variant:`outline`,onClick:()=>Se(!0),children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.edit.edit`,h)]})]}),(()=>{let t=g?._diagnostics,r=qc(e)?j.map(e=>({path:e.path,message:oa(e.message,h)})):(t?.errors??[]).map(e=>({...e,message:oa(e.message,h)})),i=qc(e)?r.length===0:t?.valid!==!1;if(n&&!ee||!rl({loadFailed:k,hasDiag:!!t,hasClientValidator:qc(e)}))return null;let a=r,o=t?.warnings??[],s=!i&&a.length>0,c=o.length>0;if(!s&&!c)return null;let l=(e,t)=>{let n=t.slice(0,3),r=Math.max(0,t.length-n.length),i=e===`error`?`border-destructive/40 bg-destructive/[0.06] text-destructive`:`border-amber-500/40 bg-amber-500/[0.08] text-amber-800 dark:text-amber-200`,a=e===`error`?`engine.edit.diagnostics.title`:`engine.edit.diagnostics.warnTitle`;return(0,Y.jsxs)(`div`,{"data-testid":e===`error`?`metadata-validation-banner`:void 0,className:`flex items-start gap-2 text-xs border rounded p-2.5 ${i}`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:J(a,h,{count:t.length})}),(0,Y.jsxs)(`ul`,{className:`mt-1 space-y-0.5 font-mono text-[11px]`,children:[n.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`opacity-70`,children:e.path?kt(e.path):`(root)`}),`: `,e.message]},t)),r>0&&(0,Y.jsx)(`li`,{className:`opacity-70`,children:J(`engine.edit.diagnostics.more`,h,{count:r})})]})]})]},e)};return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[s&&l(`error`,a),c&&l(`warning`,o)]})})(),tn?(0,Y.jsx)(`div`,{className:Tt?`fixed inset-0 z-50 bg-background flex flex-col p-3`:`relative flex-1 min-h-0 flex`,children:(0,Y.jsxs)($c,{direction:`horizontal`,className:`flex-1 min-h-0 rounded-md border bg-background overflow-hidden`,id:`metadata-edit-${e}`,children:[(0,Y.jsx)(Ar,{defaultSize:62,minSize:30,children:(0,Y.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b bg-background/95 backdrop-blur px-3 py-2 sticky top-0 z-10`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1`,children:qt&&(0,Y.jsxs)(`div`,{role:`tablist`,"aria-label":q(`engine.edit.designer`,h),className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":!St,onClick:()=>wt(!1),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(St?`text-muted-foreground hover:text-foreground`:`bg-background shadow-sm text-foreground`),title:q(`engine.edit.designMode`,h),children:[(0,Y.jsx)(Vr,{className:`h-3.5 w-3.5`}),q(`engine.edit.designMode`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":St,onClick:()=>wt(!0),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(St?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.previewMode`,h),children:[(0,Y.jsx)(xr,{className:`h-3.5 w-3.5`}),q(`engine.edit.previewMode`,h)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[sn,(0,Y.jsx)(`span`,{className:`mx-1 h-5 w-px bg-border`,"aria-hidden":!0}),tn&&(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:xt,className:`h-7 w-7 p-0`,title:q(_t?`engine.edit.showInspector`:`engine.edit.hideInspector`,h)+` (⌘\\)`,children:_t?(0,Y.jsx)(Sn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(mr,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>Dt(e=>!e),className:`h-7 w-7 p-0`,title:q(Tt?`engine.edit.exitFullscreen`:`engine.edit.fullscreen`,h),children:Tt?(0,Y.jsx)(Xn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(xe,{className:`h-3.5 w-3.5`})})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4 bg-[radial-gradient(circle_at_1px_1px,theme(colors.border)_1px,transparent_0)] [background-size:16px_16px] bg-muted/30`,children:(0,Y.jsx)(tn,{type:e,name:t,draft:y,baseline:n?void 0:g?.effective??void 0,editing:be&&!St,selection:St?null:Ce,onSelectionChange:Te,locale:h,diagnostics:pe,onPatch:e=>N(t=>({...t,...e}))})})]})}),(0,Y.jsx)(En,{withHandle:!0,className:_t?`hidden`:`w-1.5 bg-border/40 hover:bg-primary/40 active:bg-primary/60 transition-colors`}),(0,Y.jsx)(Ar,{panelRef:bt,defaultSize:yt.current,minSize:22,collapsible:!0,collapsedSize:0,onResize:e=>{let t=e.asPercentage,n=t<=.5;n||(yt.current=t,typeof window<`u`&&window.localStorage.setItem(gt,String(Math.round(t)))),vt(e=>e===n?e:(typeof window<`u`&&window.localStorage.setItem(ht,n?`1`:`0`),n))},children:(0,Y.jsxs)(`div`,{className:`h-full overflow-auto`,children:[(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-background/95 backdrop-blur px-3 py-2`,children:[(0,Y.jsxs)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":pt===`properties`,onClick:()=>mt(`properties`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(pt===`properties`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.inspector.properties`,h),children:[(0,Y.jsx)(Xr,{className:`h-3.5 w-3.5`}),q(`engine.edit.inspector.properties`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":pt===`source`,onClick:()=>mt(`source`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(pt===`source`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:q(`engine.edit.inspector.source`,h),children:[(0,Y.jsx)(zt,{className:`h-3.5 w-3.5`}),q(`engine.edit.inspector.source`,h)]})]}),It&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] border-amber-400/60 text-amber-600 dark:text-amber-300`,children:[(0,Y.jsx)(`span`,{className:`mr-1 inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),q(`engine.edit.unsaved`,h)]})]}),(0,Y.jsx)(`div`,{className:`p-4`,children:pt===`source`?(0,Y.jsx)(Bc,{value:y,onChange:N,readOnly:on,issues:fe.map(e=>({path:e.path??``,message:e.message}))}):Ce&&nn?(0,Y.jsx)(nn,{type:e,name:t,draft:y,selection:Ce,onPatch:e=>N(t=>({...t,...e})),onClearSelection:()=>Te(null),onSelectionChange:Te,readOnly:on,locale:h}):!Ce&&rn?(0,Y.jsx)(rn,{type:e,name:t,draft:y,onPatch:e=>N(t=>({...t,...e})),onSelectionChange:Te,readOnly:on,locale:h,serverSchema:f?.schema}):(0,Y.jsx)(Ki,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:de,issues:fe,hiddenFields:le,fieldOrder:ue,readOnly:on,createMode:n,widgetContext:et})})]})})]})}):(0,Y.jsx)(Ki,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:de,issues:fe,hiddenFields:le,fieldOrder:ue,readOnly:on,createMode:n,widgetContext:et})]})})]}),(0,Y.jsx)(Ne,{open:ut===`layers`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.layers`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Ps,{layered:g,locale:h})})]})}),(0,Y.jsx)(Ne,{open:ut===`review`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`designer.draftReview.title`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t,` · `,q(`designer.canvas.reviewVsPublished`,h)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Us,{published:g?.effective??null,draft:y,locale:h})})]})}),(0,Y.jsx)(Ne,{open:ut===`references`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsxs)(Ke,{className:`text-base`,children:[q(`engine.edit.references`,h),x&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px]`,children:x.length})]}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ol,{refs:x,loading:tt})})]})}),st&&(0,Y.jsx)(Ne,{open:ut===`related`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.related`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Zs,{type:e,name:t,parentItem:y,onOpen:e=>at(e)})})]})}),!n&&(0,Y.jsx)(Ne,{open:ut===`history`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.history`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ac,{type:e,name:t,client:u,onRollback:()=>ye(e=>e+1),rollbackLabel:q(`engine.edit.rollback`,h),rollbackConfirm:e=>q(`engine.edit.rollbackConfirm`,h).replace(`{version}`,String(e))})})]})}),!n&&(0,Y.jsx)(Ne,{open:ut===`audit`,onOpenChange:e=>!e&&dt(null),children:(0,Y.jsxs)(Nt,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Oe,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(Ke,{className:`text-base`,children:q(`engine.edit.auditTab`,h)}),(0,Y.jsxs)(Vt,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden p-3`,children:(0,Y.jsx)(uc,{type:e,name:t,client:u,locale:h})})]})}),(0,Y.jsx)(rc,{target:it,onClose:()=>at(null),parentContext:{type:e,name:t}}),(0,Y.jsx)(we,{open:ne!=null,onOpenChange:e=>{e||(ie(null),F(null))},children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-5 w-5 text-amber-600`}),`Destructive change detected`]}),(0,Y.jsx)(br,{children:`The framework refused this save because it would drop or narrow data already in use. Review the issues and confirm to override.`})]}),(0,Y.jsx)(`div`,{className:`max-h-[300px] overflow-auto space-y-2 my-2`,children:ne?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded border bg-amber-50 border-amber-200 p-2 text-xs`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-amber-900`,children:e.kind??`change`}),e.path&&(0,Y.jsx)(`div`,{className:`text-amber-800 font-mono mt-0.5`,children:e.path}),(0,Y.jsx)(`div`,{className:`text-amber-900 mt-1`,children:e.message})]},t))}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`ghost`,onClick:()=>ie(null),children:`Cancel`}),(0,Y.jsx)(I,{variant:`destructive`,onClick:()=>At(!0),disabled:T,children:T?`Forcing…`:`Force save`})]})]})})]})}function ol({refs:e,loading:t}){return t||e==null?(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Scanning references…`]}):e.length===0?(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`No references found`}),(0,Y.jsx)(_r,{children:`Nothing in the metadata graph points at this item. Safe to delete.`})]}):(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From type`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From name`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`Path`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:e.map((e,t)=>(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50`,children:[(0,Y.jsx)(`td`,{className:`px-3 py-2`,children:(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] font-mono`,children:e.fromType})}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs`,children:e.fromName}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e.path})]},t))})]})})}function sl({saving:e,isDirty:t,autoSaveEnabled:n,lastSavedAt:r,createMode:i,locale:a}){let[,o]=X.useReducer(e=>e+1,0);return X.useEffect(()=>{if(!r)return;let e=window.setInterval(o,3e4);return()=>window.clearInterval(e)},[r]),e?(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(L,{className:`h-3 w-3 animate-spin`}),q(`engine.edit.saving`,a)]}):t?i?null:(0,Y.jsxs)(`span`,{className:`text-xs text-amber-600 dark:text-amber-300 hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),q(n?`engine.edit.autoSavingShortly`:`engine.edit.unsaved`,a)]}):r?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:J(`engine.edit.savedAt`,a,{time:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`})}):null}function cl({type:e}){let t=r(),[n]=o(),i=e??n.get(`type`)??``;if(!i)return(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`Missing metadata type`}),(0,Y.jsxs)(_r,{children:[`This page expects a `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=`}),` query param (e.g. `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=view`}),`) or a nav-metadata `,(0,Y.jsxs)(`code`,{className:`font-mono`,children:[`params: `,`{ type: 'view' }`]}),`.`]})]})});let a=ll(t.pathname),s=a.split(`/`).filter(Boolean);return s.length===0?(0,Y.jsx)(Xo,{type:i}):s[0]===`new`&&s.length===1?(0,Y.jsx)(il,{type:i,name:``,createMode:!0},`${i}:__new__`):s.length===2&&s[1]===`history`?(0,Y.jsx)(ic,{type:i,name:decodeURIComponent(s[0])}):s.length===1?(0,Y.jsx)(il,{type:i,name:decodeURIComponent(s[0])},`${i}:${s[0]}`):(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:`Unknown sub-path`}),(0,Y.jsxs)(_r,{children:[`The path `,(0,Y.jsx)(`code`,{className:`font-mono`,children:a}),` isn't recognized. Valid forms are `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/`}),` (list),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/new`}),` (create),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name`}),` (edit),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name/history`}),`.`]})]})})}function ll(e){let t=e.indexOf(`/metadata/resource`);return t===-1?``:e.slice(t+18)}function ul(){let e=pi(),t=X.useMemo(()=>ca(),[]),[r,i]=X.useState(`error`),{loading:a,error:o,summary:s,reload:c}=fi(e,r),{entries:l}=di(e),u=X.useMemo(()=>{let e={};for(let n of l)e[n.type]=ia(n.type,t,n.label);return e},[l,t]),d=X.useMemo(()=>{let e={};for(let t of s.entries)(e[t.type]??=[]).push(t);return Object.entries(e).sort(([,e],[,t])=>t.length-e.length)},[s]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`nav`,{className:`text-xs text-muted-foreground mb-2`,children:(0,Y.jsxs)(n,{to:`..`,className:`hover:text-foreground inline-flex items-center gap-1`,children:[(0,Y.jsx)(le,{className:`h-3 w-3`}),q(`engine.diagnostics.back`,t)]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`h1`,{className:`text-xl font-semibold flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-5 w-5 text-destructive`}),q(`engine.diagnostics.title`,t)]}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[11px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:J(`engine.diagnostics.summary`,t,{count:s.total,items:s.scannedItems,types:s.scannedTypes})}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsx)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5 text-xs`,children:[`error`,`warning`].map(e=>(0,Y.jsx)(`button`,{role:`tab`,type:`button`,"aria-selected":r===e,onClick:()=>i(e),className:`px-2.5 py-1 rounded transition-colors `+(r===e?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),children:q(`engine.diagnostics.severity.${e}`,t)},e))}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:c,children:[(0,Y.jsx)(Rt,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.diagnostics.refresh`,t)]})]}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 max-w-3xl`,children:q(`engine.diagnostics.description`,t)})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[a&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:q(`engine.diagnostics.loading`,t)}),!a&&o&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/[0.06]`,children:J(`engine.diagnostics.loadFailed`,t,{error:o})}),!a&&!o&&d.length===0&&(0,Y.jsxs)(Ue,{children:[(0,Y.jsx)(Ht,{children:q(`engine.diagnostics.cleanTitle`,t)}),(0,Y.jsx)(_r,{children:J(`engine.diagnostics.cleanHint`,t,{items:s.scannedItems,types:s.scannedTypes})})]}),d.map(([e,i])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(n,{to:`../${encodeURIComponent(e)}`,className:`hover:text-foreground hover:underline`,children:u[e]??e}),(0,Y.jsx)(`span`,{className:`font-mono normal-case tracking-normal text-[10px] opacity-70`,children:e}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:i.length})]}),(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium w-[28%]`,children:q(`engine.diagnostics.col.name`,t)}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:q(`engine.diagnostics.col.issues`,t)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:i.map(i=>{let a=i.diagnostics.errors??[],o=i.diagnostics.warnings??[],s=(r===`warning`&&a.length===0?o:a).slice(0,3),c=Math.max(0,(a.length||o.length)-s.length);return(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50 align-top`,children:[(0,Y.jsxs)(`td`,{className:`px-3 py-2 align-top`,children:[(0,Y.jsx)(n,{to:`../${encodeURIComponent(e)}/${encodeURIComponent(i.name)}`,className:`text-primary hover:underline font-mono`,children:i.name}),a.length>0&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] border-destructive/40 text-destructive`,children:J(`engine.diagnostics.errorN`,t,{count:a.length})}),o.length>0&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300`,children:J(`engine.diagnostics.warnN`,t,{count:o.length})})]}),(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:(0,Y.jsxs)(`ul`,{className:`space-y-0.5 font-mono text-[11px]`,children:[s.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:e.path||`(root)`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`: `}),e.message]},t)),c>0&&(0,Y.jsx)(`li`,{className:`text-muted-foreground`,children:J(`engine.diagnostics.more`,t,{count:c})})]})})]},i.name)})})]})})]},e))]})]})}var dl=[`all`,`select`,`insert`,`update`,`delete`],fl=[`visible`,`hidden`,`default_on`,`default_off`];function pl(e){if(Array.isArray(e))return e;if(typeof e==`string`&&e.trim())try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]}function ml(e){if(e&&typeof e==`object`&&!Array.isArray(e))return e;if(typeof e==`string`&&e.trim())try{let t=JSON.parse(e);if(t&&typeof t==`object`&&!Array.isArray(t))return t}catch{}return{}}var hl=`h-8 rounded-md border border-input bg-background px-2 text-sm disabled:opacity-50`;function gl({title:e,icon:t,count:n,children:r,defaultOpen:i}){let[a,o]=X.useState(!!i);return(0,Y.jsxs)(tn,{open:a,onOpenChange:o,className:`border-b`,children:[(0,Y.jsxs)(M,{className:`flex w-full items-center gap-2 px-6 py-2.5 text-left hover:bg-muted/40`,children:[(0,Y.jsx)(oe,{className:B(`h-4 w-4 text-muted-foreground transition-transform`,a&&`rotate-90`)}),t,(0,Y.jsx)(`span`,{className:`text-sm font-medium`,children:e}),n!=null&&n>0&&(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px]`,children:n})]}),(0,Y.jsx)(pt,{className:`px-6 pb-4 pt-1`,children:r})]})}function _l({draft:e,setDraft:t,writable:n,allSetNames:r,t:i}){let a=X.useMemo(()=>pl(e.rowLevelSecurity),[e.rowLevelSecurity]),o=X.useMemo(()=>ml(e.adminScope),[e.adminScope]),s=X.useMemo(()=>ml(e.tabPermissions),[e.tabPermissions]),c=e=>t(t=>({...t,rowLevelSecurity:e})),l=e=>t(t=>({...t,adminScope:{...ml(t.adminScope),...e}})),u=e=>t(t=>({...t,tabPermissions:e})),d=Object.entries(s);return(0,Y.jsxs)(`div`,{className:`border-b bg-muted/10`,children:[(0,Y.jsxs)(gl,{title:i(`perm.rls.title`),icon:(0,Y.jsx)(Pt,{className:`h-4 w-4 text-muted-foreground`}),count:a.length,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.rls.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[a.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2 bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,Y.jsx)(V,{value:e.name??``,disabled:!n,placeholder:i(`perm.rls.name`),onChange:n=>{let r=[...a];r[t]={...e,name:n.target.value},c(r)},className:`h-8 w-48`}),(0,Y.jsx)(V,{value:e.object??``,disabled:!n,placeholder:i(`perm.rls.object`),onChange:n=>{let r=[...a];r[t]={...e,object:n.target.value},c(r)},className:`h-8 w-40`}),(0,Y.jsx)(`select`,{value:e.operation??`all`,disabled:!n,onChange:n=>{let r=[...a];r[t]={...e,operation:n.target.value},c(r)},className:hl,children:dl.map(e=>(0,Y.jsx)(`option`,{value:e,children:e},e))}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(_n,{checked:e.enabled!==!1,disabled:!n,onCheckedChange:n=>{let r=[...a];r[t]={...e,enabled:!!n},c(r)}}),i(`perm.rls.enabled`)]}),n&&(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-7 w-7 ml-auto text-muted-foreground hover:text-destructive`,onClick:()=>c(a.filter((e,n)=>n!==t)),children:(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]}),(0,Y.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-[10px] uppercase text-muted-foreground`,children:i(`perm.rls.using`)}),(0,Y.jsx)(ir,{value:e.using??``,disabled:!n,rows:2,placeholder:`organization_id == current_user.organization_id`,onChange:n=>{let r=[...a];r[t]={...e,using:n.target.value},c(r)},className:`font-mono text-xs`})]}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-[10px] uppercase text-muted-foreground`,children:i(`perm.rls.check`)}),(0,Y.jsx)(ir,{value:e.check??``,disabled:!n,rows:2,placeholder:i(`perm.rls.checkPlaceholder`),onChange:n=>{let r=[...a];r[t]={...e,check:n.target.value},c(r)},className:`font-mono text-xs`})]})]})]},t)),a.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:i(`perm.rls.empty`)}),n&&(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>c([...a,{name:``,object:`*`,operation:`all`,using:``,enabled:!0,priority:0}]),children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),` `,i(`perm.rls.add`)]})]})]}),(0,Y.jsxs)(gl,{title:i(`perm.tabs.title`),icon:(0,Y.jsx)(tr,{className:`h-4 w-4 text-muted-foreground`}),count:d.length,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.tabs.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[d.map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(V,{value:e,disabled:!n,onChange:t=>{let n=t.target.value,r={};for(let[t,i]of d)r[t===e?n:t]=i;u(r)},className:`h-8 w-64`}),(0,Y.jsx)(`select`,{value:t,disabled:!n,onChange:t=>u({...s,[e]:t.target.value}),className:hl,children:fl.map(e=>(0,Y.jsx)(`option`,{value:e,children:i(`perm.tabs.vis.${e}`)},e))}),n&&(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-7 w-7 text-muted-foreground hover:text-destructive`,onClick:()=>{let t={...s};delete t[e],u(t)},children:(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]},e)),d.length===0&&(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:i(`perm.tabs.empty`)}),n&&(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>{s[``]===void 0&&u({...s,"":`visible`})},children:[(0,Y.jsx)(z,{className:`h-4 w-4 mr-1`}),` `,i(`perm.tabs.add`)]})]})]}),(0,Y.jsxs)(gl,{title:i(`perm.admin.title`),icon:(0,Y.jsx)(St,{className:`h-4 w-4 text-muted-foreground`}),count:o.businessUnit||(o.assignablePermissionSets?.length??0)?1:0,children:[(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:i(`perm.admin.help`)}),(0,Y.jsxs)(`div`,{className:`space-y-3 max-w-2xl`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:i(`perm.admin.businessUnit`)}),(0,Y.jsx)(V,{value:o.businessUnit??``,disabled:!n,onChange:e=>l({businessUnit:e.target.value}),className:`h-8 w-64`})]}),(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs pb-1.5`,children:[(0,Y.jsx)(_n,{checked:!!o.includeSubtree,disabled:!n,onCheckedChange:e=>l({includeSubtree:!!e})}),i(`perm.admin.includeSubtree`)]})]}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-x-6 gap-y-2`,children:[[`manageAssignments`,`perm.admin.manageAssignments`],[`manageBindings`,`perm.admin.manageBindings`],[`authorEnvironmentSets`,`perm.admin.authorEnvironmentSets`]].map(([e,t])=>(0,Y.jsxs)(`label`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(_n,{checked:!!o[e],disabled:!n,onCheckedChange:t=>l({[e]:!!t})}),i(t)]},e))}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:i(`perm.admin.assignableSets`)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[r.length===0&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:i(`perm.admin.noSets`)}),r.map(e=>{let t=(o.assignablePermissionSets??[]).includes(e);return(0,Y.jsx)(`button`,{type:`button`,disabled:!n,"aria-pressed":t,onClick:()=>{let n=o.assignablePermissionSets??[],r=t?n.filter(t=>t!==e):[...n,e];l({assignablePermissionSets:r})},className:B(`rounded-full border px-3 py-1 text-xs transition-colors disabled:opacity-50`,t?`border-primary bg-primary text-primary-foreground`:`border-input bg-background hover:bg-accent`),children:e},e)})]})]})]})]})]})}function vl(e){let t=e.indexOf(`.`);return t===-1?e:e.slice(0,t)}function yl(e){return e instanceof Set?e:new Set(e)}function bl(e,t){let n=yl(t),r={};for(let[t,i]of Object.entries(e.objects??{}))n.has(t)&&(r[t]=i);let i={};for(let[t,r]of Object.entries(e.fields??{}))n.has(vl(t))&&(i[t]=r);return{objects:r,fields:i}}function xl(e,t,n){let r=yl(n),i={};for(let[t,n]of Object.entries(e.objects??{}))r.has(t)||(i[t]=n);for(let[e,n]of Object.entries(t.objects??{}))r.has(e)&&(i[e]=n);let a={};for(let[t,n]of Object.entries(e.fields??{}))r.has(vl(t))||(a[t]=n);for(let[e,n]of Object.entries(t.fields??{}))r.has(vl(e))&&(a[e]=n);return{...e,name:t.name,label:t.label,isDefault:t.isDefault,objects:i,fields:a}}function Sl(e,t){let n={private:`perm.owd.private`,public_read:`perm.owd.public_read`,public_read_write:`perm.owd.public_read_write`,controlled_by_parent:`perm.owd.controlled_by_parent`};return n[t]?e(n[t]):t}function Cl(e){return[{key:`allowCreate`,short:`C`,tip:q(`perm.action.create`,e)},{key:`allowRead`,short:`R`,tip:q(`perm.action.read`,e)},{key:`allowEdit`,short:`U`,tip:q(`perm.action.edit`,e)},{key:`allowDelete`,short:`D`,tip:q(`perm.action.delete`,e)},{key:`allowTransfer`,short:`Tr`,tip:q(`perm.action.transfer`,e)},{key:`allowRestore`,short:`Re`,tip:q(`perm.action.restore`,e)},{key:`allowPurge`,short:`Pu`,tip:q(`perm.action.purge`,e)},{key:`viewAllRecords`,short:`VA`,tip:q(`perm.action.viewAll`,e)},{key:`modifyAllRecords`,short:`MA`,tip:q(`perm.action.modifyAll`,e)}]}function wl({type:e,name:t,packageId:n,onDraftSaved:r,publishNonce:a}){let o=i(),s=pi(),c=p(),{entries:l}=di(s),u=l.find(t=>t.type===e),d=!!Jo(e,u).allowOrgOverride,f=X.useMemo(()=>ca(),[]),m=X.useCallback(e=>q(e,f),[f]),h=X.useMemo(()=>Cl(f),[f]),[g,_]=X.useState({name:t,objects:{},fields:{}}),[v,y]=X.useState([]),[b,x]=X.useState({}),[S,C]=X.useState(new Set),[w,T]=X.useState(!0),[E,D]=X.useState(!1),[O,k]=X.useState(null),[A,j]=X.useState(null),[M,ee]=X.useState(``),[te,N]=X.useState(!1),[ne,re]=X.useState([]);X.useEffect(()=>{let e=!1;return s.list(`permission`,{}).then(t=>{e||re((t||[]).map(e=>e?.name).filter(e=>!!e))}).catch(()=>{}),()=>{e=!0}},[s]),X.useEffect(()=>{let r=!1;return T(!0),(async()=>{try{let[i,a,o]=await Promise.all([s.layered(e,t).catch(()=>null),s.list(`object`,n?{packageId:n}:{}).catch(()=>[]),n?s.getDraft(e,t,{packageId:n}).catch(()=>null):Promise.resolve(null)]);if(r)return;let c=(o?o.item??o:null)??i?.effective??i?.code??{name:t,objects:{}},l=(a??[]).map(e=>{let t=e?.item??e;return{name:String(t?.name??``),label:t?.label,accessDefault:t?.access?.default,owd:typeof t?.sharingModel==`string`?t.sharingModel:void 0,owdExternal:typeof t?.externalSharingModel==`string`?t.externalSharingModel:void 0}}).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));y(l);let u={...c,name:String(c?.name??t),objects:c?.objects??{},fields:c?.fields??{}};if(n){let e=bl(u,l.map(e=>e.name));_({...u,objects:e.objects,fields:e.fields})}else _(u)}catch(e){k(e?.message??String(e))}finally{r||T(!1)}})(),()=>{r=!0}},[s,e,t,n,a]);async function P(e){if(!b[e])try{let t=(await s.get(`object`,e))?.fields,n=(Array.isArray(t)?t.map(e=>({name:String(e?.name??``),label:e?.label})):t&&typeof t==`object`?Object.entries(t).map(([e,t])=>({name:String(t?.name??e),label:t?.label})):[]).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));x(t=>({...t,[e]:n}))}catch{x(t=>({...t,[e]:[]}))}}function ie(e){C(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),P(e)),n})}function ae(e,t,n){_(r=>{let i={...r.objects[e]??{},[t]:n};return t===`viewAllRecords`&&n&&(i.allowRead=!0),t===`modifyAllRecords`&&n&&(i.allowEdit=!0,i.allowRead=!0),{...r,objects:{...r.objects,[e]:i}}})}function F(e,t){_(n=>{let r=t===`none`?{}:t===`all`?Object.fromEntries(h.map(e=>[e.key,!0])):t===`crud`?{allowCreate:!0,allowRead:!0,allowEdit:!0,allowDelete:!0}:{allowRead:!0};return{...n,objects:{...n.objects,[e]:r}}})}function oe(e,t,n,r){let i=`${e}.${t}`;_(e=>{let t={...e.fields??{}},a={...t[i]??{readable:!0,editable:!1},[n]:r};return n===`readable`&&!r&&(a.editable=!1),n===`editable`&&r&&(a.readable=!0),t[i]=a,{...e,fields:t}})}function se(e){if(!n)return e;let t=bl(e,v.map(e=>e.name));return{...e,objects:t.objects,fields:t.fields}}async function ce(t,i){let a=i??g;D(!0),k(null);try{let i=a;if(n){let t=v.map(e=>e.name);i=xl((await s.layered(e,a.name).catch(()=>null))?.effective??a,a,t)}if(await s.save(e,a.name,i,{force:t,...n?{mode:`draft`,packageId:n}:{}}),n)_(se(i)),r?.();else{let t=await s.layered(e,a.name);_(se(t.effective??i))}j(null)}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];j({issues:Array.isArray(t)?t:[],pending:a})}else k(e?.message??String(e))}finally{D(!1)}}let le=X.useMemo(()=>{let e=M.trim().toLowerCase();return v.filter(t=>{if(te){let e=g.objects[t.name];if(!e||!Object.values(e).some(Boolean))return!1}return e?t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e):!0})},[v,M,te,g.objects]),ue=[{label:m(`perm.stat.objectsGranted`),value:Object.values(g.objects).filter(e=>Object.values(e).some(Boolean)).length},{label:m(`perm.stat.fieldOverrides`),value:Object.keys(g.fields??{}).length}];return w?(0,Y.jsx)(zo,{entry:u,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` `,m(`perm.loading`).replace(`{name}`,t)]})}):(0,Y.jsxs)(zo,{entry:u??{type:e,label:e},itemName:t,subtitle:m(`perm.subtitle.set`),stats:ue,actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,onClick:()=>o(`./history?type=${encodeURIComponent(e)}`),children:[(0,Y.jsx)(hr,{className:`h-4 w-4 mr-1`}),` `,m(`engine.edit.history`)]}),d&&(0,Y.jsxs)(I,{size:`sm`,onClick:()=>ce(!1),disabled:E,children:[E?(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(lt,{className:`h-4 w-4 mr-1`}),m(`engine.edit.save`)]})]}),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[O&&(0,Y.jsxs)(`div`,{className:`m-4 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive flex items-start gap-2`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:O})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b bg-muted/30 flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{htmlFor:`perm-name`,className:`text-xs`,children:m(`perm.field.name`)}),(0,Y.jsx)(V,{id:`perm-name`,value:g.name,disabled:!d,onChange:e=>_(t=>({...t,name:e.target.value})),className:`h-8 w-56`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{htmlFor:`perm-label`,className:`text-xs`,children:m(`perm.field.label`)}),(0,Y.jsx)(V,{id:`perm-label`,value:g.label??``,disabled:!d,onChange:e=>_(t=>({...t,label:e.target.value})),className:`h-8 w-72`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 pb-1`,children:[(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:g.managedBy===`package`||n?m(`perm.badge.package`):m(`perm.badge.custom`)}),!!g.isDefault&&(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px]`,children:m(`perm.badge.default`)})]}),!d&&(0,Y.jsx)(U,{variant:`secondary`,className:`ml-auto`,children:m(`perm.readOnly`)})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:m(`perm.field.systemCapabilities`)}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground mt-0.5 mb-2`,children:m(`perm.field.systemCapabilitiesHelp`)}),(0,Y.jsx)(Tt,{value:JSON.stringify(g.systemPermissions??[]),onChange:e=>_(t=>({...t,systemPermissions:ge(e)})),field:{name:`system_permissions`},dataSource:c,readonly:!d})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b flex items-center gap-3`,children:[(0,Y.jsx)(V,{placeholder:m(`perm.filter.placeholder`),value:M,onChange:e=>ee(e.target.value),className:`h-8 w-72`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(_n,{id:`only-enabled`,checked:te,onCheckedChange:e=>N(!!e)}),(0,Y.jsx)(H,{htmlFor:`only-enabled`,className:`text-xs`,children:m(`perm.filter.onlyGranted`)})]}),(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:[le.length,` / `,v.length,` `,m(`perm.stat.objectsSuffix`)]})]}),(0,Y.jsx)(`div`,{className:`px-6 py-2 border-b flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground`,children:h.map(e=>(0,Y.jsxs)(`span`,{className:`whitespace-nowrap`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:e.short}),` `,e.tip]},e.key))}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto`,children:[(0,Y.jsx)(Tl,{objects:le,draft:g,expanded:S,fieldsByObject:b,writable:d,objectActions:h,t:m,onToggleExpand:ie,onObjectPerm:ae,onFieldPerm:oe,onBulkSet:F}),(0,Y.jsx)(_l,{draft:g,setDraft:_,writable:d,allSetNames:ne,t:m})]})]}),(0,Y.jsx)(we,{open:!!A,onOpenChange:e=>!e&&j(null),children:(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(R,{className:`h-4 w-4 text-amber-500`}),` `,m(`engine.edit.destructive`)]}),(0,Y.jsx)(br,{children:m(`engine.edit.destructiveHint`)})]}),(0,Y.jsx)(`ul`,{className:`text-sm space-y-1 max-h-64 overflow-auto`,children:A?.issues.map((e,t)=>(0,Y.jsxs)(`li`,{className:`border-l-2 border-amber-500 pl-2`,children:[e.kind&&(0,Y.jsx)(U,{variant:`outline`,className:`mr-2`,children:e.kind}),e.message??JSON.stringify(e)]},t))}),(0,Y.jsxs)(Re,{children:[(0,Y.jsx)(I,{variant:`ghost`,onClick:()=>j(null),children:m(`engine.cancel`)}),(0,Y.jsxs)(I,{variant:`destructive`,onClick:()=>A&&ce(!0,A.pending),disabled:E,children:[E&&(0,Y.jsx)(L,{className:`h-4 w-4 mr-1 animate-spin`}),m(`engine.edit.forceSave`)]})]})]})})]})}function Tl({objects:e,draft:t,expanded:n,fieldsByObject:r,writable:i,objectActions:a,t:o,onToggleExpand:s,onObjectPerm:c,onFieldPerm:l,onBulkSet:u}){return(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 bg-background border-b z-10`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`text-left px-4 py-2 font-medium w-72`,children:o(`perm.col.object`)}),a.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium text-center w-14`,title:e.tip,children:e.short},e.key)),(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium w-44 text-right`,children:o(`perm.col.bulk`)})]})}),(0,Y.jsxs)(`tbody`,{children:[e.length===0&&(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-4 py-8 text-center text-muted-foreground`,children:o(`perm.filter.empty`)})}),e.map(e=>{let d=t.objects[e.name]??{},f=n.has(e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsxs)(`tr`,{className:`border-b hover:bg-muted/30`,children:[(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 align-middle`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>s(e.name),className:`inline-flex items-center gap-1.5 hover:text-foreground`,children:[f?(0,Y.jsx)(Me,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(oe,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label??e.name}),e.label&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`(`,e.name,`)`]})]}),e.accessDefault===`private`&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 border-amber-500/50 text-amber-600 dark:text-amber-400 text-[10px] px-1.5 py-0 align-middle`,title:o(`perm.posture.private.tip`),children:o(`perm.posture.private`)}),(0,Y.jsx)(U,{variant:`outline`,className:`ml-2 text-[10px] px-1.5 py-0 align-middle text-muted-foreground`,title:o(`perm.owd.tip`),children:`OWD ${e.owd?Sl(o,e.owd):o(`perm.owd.defaultPrivate`)}`}),e.owdExternal&&(0,Y.jsx)(U,{variant:`outline`,className:`ml-1 text-[10px] px-1.5 py-0 align-middle text-muted-foreground`,title:o(`perm.owd.ext.tip`),children:`Ext ${Sl(o,e.owdExternal)}`})]}),a.map(t=>(0,Y.jsx)(`td`,{className:`text-center px-2 py-1.5`,children:(0,Y.jsx)(On,{checked:!!d[t.key],disabled:!i,onCheckedChange:n=>c(e.name,t.key,!!n),"aria-label":`${e.name} ${t.tip}`})},t.key)),(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 text-right space-x-1`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`read`),children:o(`perm.bulk.read`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`crud`),children:o(`perm.bulk.crud`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`all`),children:o(`perm.bulk.all`)}),(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`none`),children:o(`perm.bulk.none`)})]})]}),f&&(0,Y.jsx)(`tr`,{className:`bg-muted/10`,children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-12 py-3`,children:(0,Y.jsx)(El,{objectName:e.name,fields:r[e.name],fieldsState:t.fields??{},writable:i,t:o,onFieldPerm:l})})})]},e.name)})]})]})}function El({objectName:e,fields:t,fieldsState:n,writable:r,t:i,onFieldPerm:a}){return t?t.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(`perm.field.empty`)}):(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`text-left py-1 font-medium`,children:i(`perm.field.col.name`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.read`),children:i(`perm.field.read`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.edit`),children:i(`perm.field.edit`)})]})}),(0,Y.jsx)(`tbody`,{children:t.map(t=>{let i=n[`${e}.${t.name}`]??{readable:!0,editable:!1};return(0,Y.jsxs)(`tr`,{className:`border-t border-muted`,children:[(0,Y.jsxs)(`td`,{className:`py-1`,children:[t.label??t.name,t.label&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,t.name,`)`]})]}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(On,{checked:!!i.readable,disabled:!r,onCheckedChange:n=>a(e,t.name,`readable`,!!n),"aria-label":`${e}.${t.name} readable`})}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(On,{checked:!!i.editable,disabled:!r,onCheckedChange:n=>a(e,t.name,`editable`,!!n),"aria-label":`${e}.${t.name} editable`})})]},t.name)})})]}):(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-3 w-3 animate-spin`}),` `,i(`perm.field.loading`)]})}function Dl(){Go({type:`__object_field`,label:`Field`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`field`,embeddedPath:`fields`,extract:e=>Ol(e.fields),groupLabel:`Fields`,order:5}]}),Go({type:`__object_index`,label:`Index`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`index`,embeddedPath:`indexes`,extract:e=>{let t=e.indexes;return Array.isArray(t)?t.map((e,t)=>{let n=Array.isArray(e.fields)?e.fields.join(`,`):``;return{name:n?`idx_${n}`:`index_${t}`,...e}}):[]},groupLabel:`Indexes`,order:10}]}),Go({type:`__object_validation`,label:`Embedded validation`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`validation`,embeddedPath:`validations`,extract:e=>Ol(e.validations),groupLabel:`Embedded Validations`,order:15}]}),Go({type:`hook`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Hooks`,order:20}],createFields:[`label`,`name`,`object`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{events:[]}}),Go({type:`page`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Pages`,order:40}],createFields:[`label`,`name`,`object`,`type`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`type`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable page title.`},name:{type:`string`,title:`Name`,description:`Page key (snake_case).`,pattern:`^[a-z_][a-z0-9_]*$`},type:{type:`string`,title:`Page type`,enum:[`list`,`record`,`home`,`app`,`utility`],default:`list`,description:`List / Interface page = a data view (Airtable-style: columns, filters, visualizations). Record page renders one object record.`},object:{type:`string`,title:`Object`,widget:`ref:object`,description:`The object this page reads from — the data source for a list page, or the record object for a record page.`},kind:{type:`string`,title:`Kind`,enum:[`full`,`slotted`],default:`full`,description:`full = the whole page; slotted = override only named slots of the default.`}}},createDefaults:{type:`list`,kind:`full`,regions:[]},createSeed:async(e,{client:t})=>{if(e?.type===`list`)return e?.object?{interfaceConfig:{source:String(e.object)}}:{};if(e?.type!==`record`||!e?.object)return{};try{let n=await t.get(`object`,String(e.object));if(!n||typeof n!=`object`)return{};let{buildDefaultPageSchema:r}=await a(async()=>{let{buildDefaultPageSchema:e}=await import(`./plugins-views-BxKprmRN.js`).then(e=>e.t);return{buildDefaultPageSchema:e}},__vite__mapDeps([0]),import.meta.url),i=r(n),o={};return Array.isArray(i?.regions)&&i.regions.length&&(o.regions=i.regions),i?.template&&(o.template=i.template),o}catch{return{}}}}),Go({type:`view`,anchors:[{anchorType:`object`,match:Uo([`object`,`config.data.object`]),groupLabel:`Views`,order:30}],createFields:[`label`,`name`,`object`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`object`,`kind`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable view name.`},name:{type:`string`,title:`Name`,description:`View key (snake_case). Qualified to <object>.<key> on save.`,pattern:`^[a-z_][a-z0-9_]*$`},object:{type:`string`,title:`Object`,description:`The object this view displays.`},kind:{type:`string`,title:`View kind`,enum:[`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`chart`],default:`grid`,description:`Pick a starter layout. Switch later in the designer.`}}},createBuildBody:e=>{let t=String(e.object??``),n=String(e.name??``);return{name:n.includes(`.`)||!t?n:`${t}.${n}`,object:t,viewKind:`list`,label:e.label,config:{type:e.kind||`grid`,columns:[],data:{provider:`object`,object:t}}}}}),Go({type:`flow`,anchors:[{anchorType:`object`,match:Uo([`object`,`on.object`,`trigger.object`]),groupLabel:`Flows`,order:50}],createFields:[`label`,`name`,`type`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{nodes:[],edges:[]}}),Go({type:`trigger`,anchors:[{anchorType:`object`,match:Uo([`object`,`on.object`]),groupLabel:`Triggers`,order:52}],createFields:[`label`,`name`,`object`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}]}),Go({type:`validation`,anchors:[{anchorType:`object`,match:Uo(`object`),groupLabel:`Validations`,order:25}],createFields:[`label`,`name`,`message`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`message`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable rule name.`},name:{type:`string`,title:`Name`,description:`Machine name (snake_case). Used in URLs.`,pattern:`^[a-z_][a-z0-9_]*$`},message:{type:`string`,title:`Error message`,description:`Shown to the user when the rule blocks save.`}}},createDefaults:{type:`script`,active:!0,events:[`insert`,`update`],priority:10,severity:`error`,condition:`false`}}),Go({type:`permission`,anchors:[{anchorType:`object`,match:(e,t)=>{let n=e?.objects;return!!n&&typeof n==`object`&&t in n},groupLabel:`Permissions`,order:60}],createFields:[`label`,`name`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{objects:{}}}),Go({type:`action`,anchors:[{anchorType:`object`,match:Uo([`object`,`target.object`,`on.object`]),groupLabel:`Actions`,order:55}],createFields:[`label`,`name`,`objectName`,`icon`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`script`,body:{language:`js`,source:`return { success: true };`}}}),Go({type:`dashboard`,anchors:[{anchorType:`object`,match:Uo([`object`,`data.object`]),groupLabel:`Dashboards`,order:80}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{widgets:[]}}),Go({type:`report`,anchors:[{anchorType:`object`,match:Uo([`object`,`data.object`]),groupLabel:`Reports`,order:81}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`summary`,drilldown:!0}}),Go({type:`object`,iconName:`database`,domain:`data`,createFields:[`label`,`pluralLabel`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0},{from:`label`,to:`pluralLabel`,transform:`plural-en`,untilUserEdits:!0}],createDefaults:{fields:{}},searchableFields:[`name`,`label`,`pluralLabel`,`description`],listColumns:[{key:`name`,label:`Name`,width:`24%`},{key:`label`,label:`Label`,width:`22%`},{key:`pluralLabel`,label:`Plural`,width:`22%`},{key:`fields`,label:`Fields`,width:`90px`,render:e=>e==null?`—`:Array.isArray(e)?e.length:typeof e==`object`?Object.keys(e).length:0},{key:`description`,label:`Description`}]})}function Ol(e){return Array.isArray(e)?e:e&&typeof e==`object`?Object.entries(e).map(([e,t])=>({name:e,...t&&typeof t==`object`?t:{}})):[]}var kl={name:{type:`string`,title:`Name`,description:`Machine name. snake_case, used as the URL path and DB key.`,pattern:`^[a-z_][a-z0-9_]*$`},label:{type:`string`,title:`Label`,description:`Human-readable display name.`},description:{type:`string`,title:`Description`,format:`multiline`}},Al={position:{type:`object`,title:`Position`,required:[`name`],properties:{...kl}},permission:{type:`object`,title:`Permission`,required:[`id`,`resource`,`actions`,`description`],properties:{id:{type:`string`,title:`ID`,description:`Stable identifier (e.g. crm.account.read).`},resource:{type:`string`,title:`Resource`,description:`What this permission applies to.`,enum:[`data.object`,`data.record`,`data.field`,`ui.view`,`ui.dashboard`,`ui.report`,`system.config`,`system.plugin`,`system.api`,`system.service`,`storage.file`,`storage.database`,`network.http`,`network.websocket`,`process.spawn`,`process.env`]},actions:{type:`array`,title:`Actions`,description:`Permitted operations on the resource.`,items:{type:`string`,enum:[`create`,`read`,`update`,`delete`,`execute`,`admin`,`manage`,`configure`,`import`,`export`,`share`]}},description:{type:`string`,title:`Description`,description:`Why this permission exists (shown in admin UIs).`},scope:{type:`string`,title:`Scope`,enum:[`tenant`,`user`,`plugin`,`global`,`resource`],default:`tenant`},required:{type:`boolean`,title:`Required`,description:`Must be present for the holder to function.`},justification:{type:`string`,title:`Justification`}}},translation:{type:`object`,title:`Translation Bundle`,required:[`name`],properties:{name:{...kl.name,description:`Bundle id (e.g. zh_CN, en_US, package-locale).`},label:kl.label,description:kl.description,locale:{type:`string`,title:`Locale`,description:`BCP-47 tag, e.g. en, zh-Hans, ja-JP.`},strings:{type:`object`,title:`Strings`,description:`Key → translated string map.`}}},tool:{type:`object`,title:`AI Tool`,required:[`name`],properties:{...kl,kind:{type:`string`,title:`Kind`,enum:[`function`,`http`,`mcp`]},inputSchema:{type:`object`,title:`Input Schema (JSON Schema)`},outputSchema:{type:`object`,title:`Output Schema (JSON Schema)`}}},skill:{type:`object`,title:`AI Skill`,required:[`name`],properties:{...kl,instructions:{type:`string`,title:`Instructions`,format:`multiline`},tools:{type:`array`,title:`Tools`,items:{type:`string`}}}},app:{type:`object`,title:`Application`,required:[`name`],properties:{...kl,icon:{type:`string`,title:`Icon`},navigation:{type:`array`,title:`Navigation`,items:{type:`object`}}}},page:{type:`object`,title:`Page`,required:[`name`],properties:{...kl,route:{type:`string`,title:`Route`,description:`URL path under the app.`},layout:{type:`string`,title:`Layout`}}},view:{type:`object`,title:`View`,required:[`name`],properties:{...kl,type:{type:`string`,title:`View Type`,enum:[`grid`,`kanban`,`calendar`,`gantt`,`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]}}},dashboard:{type:`object`,title:`Dashboard`,required:[`name`],properties:{...kl,widgets:{type:`array`,title:`Widgets`,items:{type:`object`}}}},report:{type:`object`,title:`Report`,required:[`name`],properties:{...kl,object:{type:`string`,title:`Object`},filters:{type:`array`,title:`Filters`,items:{type:`object`}}}},book:{type:`object`,title:`Documentation Book`,required:[`name`,`groups`],properties:{...kl,slug:{type:`string`,title:`Slug`,description:`Portal URL segment; defaults to the name without its package prefix.`},icon:{type:`string`,title:`Icon`},order:{type:`number`,title:`Order`,description:`Orders books within the portal.`},audience:{title:`Audience`,description:`Access audience. 'org' (default) inherits the package grant; 'public' is anonymously readable; { permissionSet } gates by a permission set the reader must hold (ADR-0090).`,oneOf:[{type:`string`,enum:[`org`,`public`]},{type:`object`,title:`Permission-set gated`,properties:{permissionSet:{type:`string`,title:`Permission set`}},required:[`permissionSet`]}]},groups:{type:`array`,title:`Groups (spine)`,description:`Ordered sections. Membership is derived from each group's include rule — edit the structure visually in the Preview tab.`,items:{type:`object`,required:[`key`,`label`],properties:{key:{type:`string`,title:`Key`,pattern:`^[a-z][a-z0-9_]*$`},label:{type:`string`,title:`Label`},order:{type:`number`,title:`Order`},include:{title:`Include rule`,description:`Glob over doc names (e.g. crm_guide_*) or { tag }.`},package:{type:`string`,title:`Package scope`},pages:{type:`array`,title:`Explicit pages (override)`,items:{}}}}}}},email_template:{type:`object`,title:`Email Template`,required:[`name`,`label`,`subject`,`bodyHtml`],properties:{...kl,category:{type:`string`,title:`Category`,enum:[`auth`,`notification`,`workflow`,`marketing`,`custom`],default:`custom`},locale:{type:`string`,title:`Locale`,default:`en-US`,description:`BCP-47 tag (en-US, zh-CN, …)`},subject:{type:`string`,title:`Subject`,description:`Supports {{var.path}} interpolation`},bodyHtml:{type:`string`,title:`HTML Body`,format:`multiline`},bodyText:{type:`string`,title:`Plain-Text Body`,format:`multiline`},variables:{type:`array`,title:`Variables`,items:{type:`object`}},fromOverride:{type:`object`,title:`From Override`},replyTo:{type:`string`,title:`Reply-To`},active:{type:`boolean`,title:`Active`,default:!0},isSystem:{type:`boolean`,title:`System Template`,default:!1}}}};function jl(){for(let[e,t]of Object.entries(Al))Go({type:e,defaultSchema:t,fieldOrder:[`name`,`label`,`description`]})}var Ml=[{value:`managed`,label:`Managed (ObjectStack owns the schema)`},{value:`external`,label:`External (read existing schema as-is)`},{value:`validate-only`,label:`Validate only`}],Nl=``.replace(/\/+$/,``),Pl=e=>e.format===`password`;function Fl(e){let t=e?.configSchema?.properties??{},n={};for(let[e,r]of Object.entries(t))Pl(r)||r.default!==void 0&&(n[e]=r.default);return n}function Il(e){let t=X.useMemo(()=>d(),[]),n=pi(),[r,i]=X.useState([]),[a,o]=X.useState(!0),[s,c]=X.useState(null),l=X.useCallback(async(e,n)=>{let r=await t(`${Nl}${e}`,{credentials:`include`,headers:{"Content-Type":`application/json`},...n}),i=await r.text(),a=i;try{a=JSON.parse(i)}catch{}if(!r.ok)throw Error(a&&(a.message||a.error)||`HTTP ${r.status}`);return a},[t]),u=X.useCallback(async()=>{o(!0);try{let e=await l(`/api/v1/datasources`);i(Array.isArray(e?.datasources)?e.datasources:[])}catch(e){ei.error(`Load datasources: ${e.message}`),i([])}finally{o(!1)}},[l]);X.useEffect(()=>{u()},[u]);let f=async e=>{c(`test:${e}`);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/test`,{method:`POST`,body:`{}`});ei.success(t?.ok===!1?`${e}: ${t?.error??`failed`}`:`${e}: connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`),u()}catch(t){ei.error(`${e}: ${t.message}`)}finally{c(null)}},p=async e=>{if(window.confirm(`Delete datasource “${e}”? This cannot be undone.`)){c(`del:${e}`);try{await l(`/api/v1/datasources/${encodeURIComponent(e)}`,{method:`DELETE`}),ei.success(`Deleted ${e}.`),u()}catch(t){ei.error(`Delete ${e}: ${t.message}`)}finally{c(null)}}},[m,h]=X.useState([]),[g,_]=X.useState(!1),[v,y]=X.useState(null),[b,x]=X.useState(null),[S,C]=X.useState(!1),[w,T]=X.useState(!1),[E,D]=X.useState(null),[O,k]=X.useState(!1),A=X.useCallback(async()=>{if(m.length)return m;try{let e=await l(`/api/v1/datasources/drivers`),t=Array.isArray(e?.drivers)?e.drivers:[];return h(t),t}catch(e){return ei.error(`Load drivers: ${e.message}`),[]}},[l,m]),M=X.useMemo(()=>m.find(e=>e.id===b?.driver),[m,b?.driver]),ee=async()=>{let e=await A(),t=e.find(e=>e.id!==`memory`)??e[0];y(null),C(!1),D(null),x({name:``,label:``,driver:t?.id??``,schemaMode:`managed`,config:Fl(t),secret:``}),_(!0)},te=async e=>{let t=await A();c(`edit:${e.name}`);try{let n=(await l(`/api/v1/datasources/${encodeURIComponent(e.name)}`))?.datasource??{};y(e.name),C(!!n.hasSecret),D(null),x({name:n.name??e.name,label:n.label??``,driver:n.driver??e.driver??t[0]?.id??``,schemaMode:n.schemaMode??`managed`,config:{...n.config??{}},secret:``}),_(!0)}catch(t){ei.error(`Open ${e.name}: ${t.message}`)}finally{c(null)}},N=e=>{x(t=>t&&{...t,driver:e,config:Fl(m.find(t=>t.id===e)),secret:``}),D(null)},ne=(e,t)=>x(n=>n&&{...n,config:{...n.config,[e]:t}}),re=e=>{let t={label:e.label||void 0,driver:e.driver,schemaMode:e.schemaMode,config:e.config};return e.secret&&(t.secret=e.secret),t},P=async()=>{if(b){k(!0),D(null);try{let e=await l(`/api/v1/datasources/test`,{method:`POST`,body:JSON.stringify({driver:b.driver,config:b.config,...b.secret?{secret:b.secret}:{}})}),t=e?.result??e;t?.ok===!1?D({ok:!1,text:t?.error??`Connection failed`}):D({ok:!0,text:`Connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`})}catch(e){D({ok:!1,text:e.message})}finally{k(!1)}}},ie=async()=>{if(b){T(!0);try{v?(await l(`/api/v1/datasources/${encodeURIComponent(v)}`,{method:`PATCH`,body:JSON.stringify(re(b))}),ei.success(`Updated ${v}.`)):(await l(`/api/v1/datasources`,{method:`POST`,body:JSON.stringify({name:b.name,...re(b)})}),ei.success(`Created ${b.name}.`)),_(!1),u()}catch(e){ei.error(`Save: ${e.message}`)}finally{T(!1)}}},ae=v?!0:/^[a-z_][a-z0-9_]*$/.test(b?.name??``),F=!!b&&!!b.driver&&ae&&!w,[oe,se]=X.useState(null),[ce,le]=X.useState(null),[ue,de]=X.useState(new Set),[fe,pe]=X.useState(!1),me=async e=>{se(e),le(null),de(new Set);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/remote-tables`);le(Array.isArray(t?.tables)?t.tables:[])}catch(t){ei.error(`Introspect ${e}: ${t.message}`),le([])}},he=e=>de(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),ge=async()=>{if(!oe||ue.size===0)return;pe(!0);let e=0,t=[];for(let r of ue)try{let{draft:t}=await l(`/api/v1/datasources/${encodeURIComponent(oe)}/object-draft`,{method:`POST`,body:JSON.stringify({table:r})});await n.save(`object`,t.name,t.definition),e+=1}catch(e){t.push(`${r}: ${e.message}`)}pe(!1),e&&ei.success(`Synced ${e} object${e>1?`s`:``} from ${oe}.`),t.length&&ei.error(`Failed: ${t.join(`; `)}`),se(null)},_e=(e,t)=>{let n=t.title||e,r=(M?.configSchema?.required??[]).includes(e);if(Pl(t))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r&&!v?` *`:``]}),(0,Y.jsx)(V,{type:`password`,value:b?.secret??``,placeholder:v&&S?`•••••••• (leave blank to keep)`:``,onChange:e=>x(t=>t&&{...t,secret:e.target.value})}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e);let i=b?.config[e];if(t.type===`boolean`)return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 py-1`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(H,{className:`text-xs`,children:n}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(_n,{checked:!!i,onCheckedChange:t=>ne(e,t)})]},e);if(Array.isArray(t.enum))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsxs)(He,{value:i==null?``:String(i),onValueChange:t=>ne(e,t),children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{placeholder:`Select…`})}),(0,Y.jsx)($t,{children:t.enum.map(e=>(0,Y.jsx)(qt,{value:String(e),children:String(e)},String(e)))})]})]},e);let a=t.type===`number`||t.type===`integer`;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(H,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsx)(V,{type:a?`number`:`text`,value:i==null?``:String(i),onChange:t=>ne(e,a?t.target.value===``?void 0:Number(t.target.value):t.target.value)}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)};return(0,Y.jsxs)(`div`,{className:`mx-auto max-w-4xl px-6 py-8`,children:[(0,Y.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`h1`,{className:`flex items-center gap-2 text-xl font-semibold`,children:[(0,Y.jsx)(wr,{className:`h-5 w-5`}),` Datasources`]}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Connect external databases and sync their tables in as objects.`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,onClick:()=>void u(),disabled:a,children:[(0,Y.jsx)(Rt,{className:`mr-1.5 h-4 w-4`+(a?` animate-spin`:``)}),` Refresh`]}),(0,Y.jsxs)(I,{size:`sm`,onClick:()=>void ee(),children:[(0,Y.jsx)(z,{className:`mr-1.5 h-4 w-4`}),` New datasource`]})]})]}),a?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-12 text-sm text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading…`]}):r.length===0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dashed bg-muted/20 py-16 text-center text-sm text-muted-foreground`,children:[`No datasources yet. Click `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`New datasource`}),` to connect one.`]}):(0,Y.jsx)(`div`,{className:`divide-y rounded-lg border bg-card`,children:r.map(e=>{let t=e.origin===`code`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Y.jsx)(wr,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label||e.name}),(0,Y.jsx)(`code`,{className:`text-[11px] text-muted-foreground`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:e.driver}),e.status&&(0,Y.jsxs)(`span`,{children:[`· `,e.status]}),e.origin&&(0,Y.jsxs)(`span`,{children:[`· `,e.origin]})]})]}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,disabled:s===`test:${e.name}`,onClick:()=>void f(e.name),children:[s===`test:${e.name}`?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(j,{className:`mr-1.5 h-4 w-4`}),` Test`]}),(0,Y.jsxs)(I,{variant:`secondary`,size:`sm`,onClick:()=>void me(e.name),children:[(0,Y.jsx)(dr,{className:`mr-1.5 h-4 w-4`}),` Sync objects`]}),!t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,title:`Edit`,disabled:s===`edit:${e.name}`,onClick:()=>void te(e),children:s===`edit:${e.name}`?(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(ln,{className:`h-4 w-4`})}),(0,Y.jsx)(I,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,title:`Delete`,disabled:s===`del:${e.name}`,onClick:()=>void p(e.name),children:s===`del:${e.name}`?(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(Zt,{className:`h-4 w-4`})})]})]},e.name)})}),(0,Y.jsx)(we,{open:g,onOpenChange:e=>{e||_(!1)},children:(0,Y.jsxs)(We,{className:`max-w-lg`,children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsx)(Wt,{children:v?`Edit “${v}”`:`New datasource`}),(0,Y.jsx)(br,{children:v?`Update the connection. Leave the credential blank to keep the current one.`:`Connect an external database. Credentials are encrypted and never stored in metadata.`})]}),b&&(0,Y.jsxs)(`div`,{className:`max-h-[60vh] space-y-3 overflow-y-auto pr-1`,children:[!v&&(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Name *`}),(0,Y.jsx)(V,{value:b.name,placeholder:`my_database`,onChange:e=>x(t=>t&&{...t,name:e.target.value})}),!ae&&b.name.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Lowercase letters, digits, and underscores; must not start with a digit.`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Label`}),(0,Y.jsx)(V,{value:b.label,placeholder:`Human-friendly name`,onChange:e=>x(t=>t&&{...t,label:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Driver *`}),(0,Y.jsxs)(He,{value:b.driver,onValueChange:N,disabled:!!v,children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{placeholder:`Choose a driver`})}),(0,Y.jsx)($t,{children:m.map(e=>(0,Y.jsx)(qt,{value:e.id,children:e.label},e.id))})]}),M?.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:M.description})]}),Object.entries(M?.configSchema?.properties??{}).map(([e,t])=>_e(e,t)),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs`,children:`Schema mode`}),(0,Y.jsxs)(He,{value:b.schemaMode,onValueChange:e=>x(t=>t&&{...t,schemaMode:e}),children:[(0,Y.jsx)(rn,{children:(0,Y.jsx)(_t,{})}),(0,Y.jsx)($t,{children:Ml.map(e=>(0,Y.jsx)(qt,{value:e.value,children:e.label},e.value))})]})]}),E&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs `+(E.ok?`text-emerald-600`:`text-destructive`),children:[E.ok?(0,Y.jsx)(Yn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(wt,{className:`h-3.5 w-3.5`}),E.text]})]}),(0,Y.jsxs)(Re,{className:`gap-2 sm:justify-between`,children:[(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,disabled:!b?.driver||O,onClick:()=>void P(),children:[O?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(j,{className:`mr-1.5 h-4 w-4`}),` Test connection`]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>_(!1),children:`Cancel`}),(0,Y.jsxs)(I,{size:`sm`,disabled:!F,onClick:()=>void ie(),children:[w&&(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}),v?`Save changes`:`Create datasource`]})]})]})]})}),(0,Y.jsx)(we,{open:!!oe,onOpenChange:e=>{e||se(null)},children:(0,Y.jsxs)(We,{className:`max-w-lg`,children:[(0,Y.jsxs)(Yt,{children:[(0,Y.jsxs)(Wt,{children:[`Sync objects from “`,oe,`”`]}),(0,Y.jsx)(br,{children:`Pick the remote tables to import as objects. Each becomes an object definition.`})]}),ce==null?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 text-sm text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Introspecting…`]}):ce.length===0?(0,Y.jsx)(`p`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No remote tables found on this datasource.`}):(0,Y.jsx)(`div`,{className:`max-h-[50vh] space-y-1 overflow-y-auto`,children:ce.map(e=>{let t=e.schema?`${e.schema}.${e.name}`:e.name;return(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-accent`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:ue.has(e.name),onChange:()=>he(e.name),className:`h-4 w-4`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:t}),e.columnCount!=null&&(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[e.columnCount,` cols`]})]},t)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,Y.jsx)(I,{variant:`ghost`,size:`sm`,onClick:()=>se(null),children:`Cancel`}),(0,Y.jsxs)(I,{size:`sm`,disabled:fe||ue.size===0,onClick:()=>void ge(),children:[fe?(0,Y.jsx)(L,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(dr,{className:`mr-1.5 h-4 w-4`}),`Create `,ue.size||``,` object`,ue.size===1?``:`s`]})]})]})})]})}var Ll=!1;function Rl(){Ll||(Ll=!0,Go({type:`datasource`,label:`Datasources`,domain:`data`,ListPage:Il}))}function Z({toolbar:e,children:t}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border bg-background overflow-hidden flex flex-col h-full`,children:[e!=null&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-b bg-muted/20 px-2 py-1 min-h-[32px]`,children:e}),(0,Y.jsx)(`div`,{className:`bg-background flex-1 min-h-0 overflow-auto`,children:t})]})}function zl({tone:e=`info`,children:t}){return(0,Y.jsxs)(`div`,{className:`m-4 rounded border p-3 text-sm flex items-start gap-2 ${e===`warn`?`text-amber-800 bg-amber-50 border-amber-200`:e===`error`?`text-destructive bg-destructive/5 border-destructive/30`:`text-muted-foreground border-muted`}`,children:[e!==`info`&&(0,Y.jsx)(dt,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`div`,{className:`flex-1`,children:t})]})}function Bl({icon:e,title:t,description:n,action:r,tone:i=`info`}){let a=i===`warn`?`text-amber-700 bg-amber-50/40 border-amber-200/60`:`text-muted-foreground border-dashed border-muted-foreground/25 bg-muted/10`,o=e??(0,Y.jsx)(bn,{className:`h-8 w-8 opacity-50`});return(0,Y.jsx)(`div`,{className:`h-full w-full flex items-center justify-center p-6`,children:(0,Y.jsxs)(`div`,{className:`max-w-md w-full rounded-lg border ${a} px-6 py-10 flex flex-col items-center gap-3 text-center`,children:[(0,Y.jsx)(`div`,{className:`text-foreground/60`,children:o}),(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground/90`,children:t}),n&&(0,Y.jsx)(`div`,{className:`text-xs leading-relaxed`,children:n}),r&&(0,Y.jsx)(`div`,{className:`mt-1`,children:r})]})})}var Q=class extends X.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e){console.error(`[MetadataPreview] render failed`,e)}render(){return this.state.error?(0,Y.jsxs)(zl,{tone:`error`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Preview failed to render`}),(0,Y.jsx)(`div`,{className:`text-xs mt-1 font-mono opacity-80`,children:this.state.error.message}),this.props.fallbackHint&&(0,Y.jsx)(`div`,{className:`text-xs mt-2 opacity-70`,children:this.props.fallbackHint})]}):this.props.children}};function Vl({title:e,entries:t,selectedId:n,onSelect:r,onAdd:i,addLabel:a}){return t.length===0&&!i?null:(0,Y.jsxs)(`div`,{className:`border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground mb-1.5`,children:e}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),r(e)},className:B(`rounded border bg-background px-2 py-0.5 text-xs hover:border-primary/50 cursor-pointer`,n===e.id&&`ring-2 ring-primary border-primary`),children:e.label},e.id)),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i()},className:`rounded border border-dashed bg-background px-2 py-0.5 text-xs text-muted-foreground hover:border-primary hover:text-primary cursor-pointer inline-flex items-center gap-1`,"aria-label":a??`Add`,title:a??`Add`,children:[(0,Y.jsx)(z,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:a??`Add`})]})]})]})}var Hl=X.lazy(async()=>({default:(await a(()=>import(`./dist-YwlXXOlT.js`).then(e=>e.n),[],import.meta.url)).default}));function Ul(e){let t=e.languages.typescript;t.typescriptDefaults.setDiagnosticsOptions({noSemanticValidation:!0,noSyntaxValidation:!0,noSuggestionDiagnostics:!0}),t.typescriptDefaults.setCompilerOptions({jsx:t.JsxEmit.React,target:t.ScriptTarget.Latest,allowNonTsExtensions:!0,allowJs:!0,noEmit:!0})}function Wl({draft:e,onPatch:t,readOnly:n,fallbackDelayMs:r=4e3,mode:i=`split`}){let a=e.kind===`react`?`react`:`html`,o=typeof e.source==`string`?e.source:``,[s,c]=X.useState(o),l=X.useRef(o);X.useEffect(()=>{o!==l.current&&(c(o),l.current=o)},[o]);let[u,d]=Ic(r),[f,p]=X.useState(()=>typeof document<`u`&&document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>p(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let m=e=>{let n=e??``;c(n),l.current=n,t?.({source:n})},h=X.useMemo(()=>({...e,type:e.type??`page`}),[e]),g=(0,Y.jsx)(`div`,{ref:d,className:`h-full min-h-[260px] overflow-hidden bg-background`,children:u?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>m(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`Page source`,className:`h-full w-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(se,{className:`h-full w-full`}),children:(0,Y.jsx)(Hl,{value:s,language:`typescript`,path:a===`react`?`page.tsx`:`page.html.tsx`,theme:f,beforeMount:Ul,onChange:m,options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),v=(0,Y.jsx)(`div`,{className:`h-full min-h-[260px] overflow-auto bg-muted/20`,children:(0,Y.jsx)(Q,{fallbackHint:`The page source threw while rendering — fix the code in the Source tab.`,children:(0,Y.jsx)(_,{schema:h})})});return i===`editor`?g:i===`preview`?(0,Y.jsx)(Z,{hint:`page · ${a} source`,children:v}):(0,Y.jsx)(Z,{hint:`page · ${a} source`,children:(0,Y.jsxs)(`div`,{className:`grid h-full grid-cols-1 divide-y divide-border lg:grid-cols-2 lg:divide-x lg:divide-y-0`,children:[g,v]})})}var Gl={grid:{label:`Grid`,category:`data`,Icon:ft},"object-grid":{label:`Table`,category:`data`,Icon:dn},"object-form":{label:`Form`,category:`data`,Icon:yr},"object-metric":{label:`Metric`,category:`data`,Icon:Ur},"object-kanban":{label:`Kanban`,category:`data`,Icon:Ir},"page:header":{label:`Header`,category:`layout`,Icon:tr},"page:footer":{label:`Footer`,category:`layout`,Icon:Fn},"page:sidebar":{label:`Sidebar`,category:`layout`,Icon:jn},"page:tabs":{label:`Tabs`,category:`layout`,Icon:ye},"page:accordion":{label:`Accordion`,category:`layout`,Icon:Ie},"page:card":{label:`Card`,category:`layout`,Icon:Mn},"page:section":{label:`Section`,category:`layout`,Icon:Dn},"record:details":{label:`Record details`,category:`record`,Icon:Fe},"record:highlights":{label:`Highlights`,category:`record`,Icon:Un},"record:related_list":{label:`Related list`,category:`record`,Icon:vr},"record:activity":{label:`Activity timeline`,category:`record`,Icon:rt},"record:chatter":{label:`Chatter feed`,category:`record`,Icon:Gn},"record:path":{label:`Stage path`,category:`record`,Icon:rr},"record:alert":{label:`Alert banner`,category:`record`,Icon:R},"record:quick_actions":{label:`Quick actions`,category:`record`,Icon:$n},"record:reference_rail":{label:`Reference rail`,category:`record`,Icon:Nr},"record:history":{label:`History`,category:`record`,Icon:hr},"nav:menu":{label:`Nav menu`,category:`navigation`,Icon:ct},"nav:breadcrumb":{label:`Breadcrumb`,category:`navigation`,Icon:rr},"global:search":{label:`Global search`,category:`navigation`,Icon:Kn},"ai:chat_window":{label:`AI chat window`,category:`ai`,Icon:vn},"ai:suggestion":{label:`AI suggestion`,category:`ai`,Icon:sn},"element:text":{label:`Text`,category:`element`,Icon:Ee},"element:number":{label:`Number`,category:`element`,Icon:ar},"element:image":{label:`Image`,category:`element`,Icon:Fr},"element:divider":{label:`Divider`,category:`element`,Icon:nt},"element:button":{label:`Button`,category:`element`,Icon:ce},"element:definition-list":{label:`Definition list`,category:`element`,Icon:kt},"element:repeater":{label:`Repeater`,category:`element`,Icon:Je}},Kl={data:`Data`,layout:`Layout`,record:`Record context`,navigation:`Navigation`,element:`Elements`,ai:`AI`,misc:`Other`},ql=(()=>{let e={data:[],layout:[],record:[],navigation:[],element:[],ai:[],misc:[]};for(let[t,n]of Object.entries(Gl))e[n.category].push(t);return[`data`,`layout`,`record`,`element`,`navigation`,`ai`,`misc`].map(t=>({category:t,types:e[t]})).filter(e=>e.types.length>0)})(),Jl=Er,Yl={data:{icon:`text-emerald-500 dark:text-emerald-400`,badge:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300`},layout:{icon:`text-slate-500 dark:text-slate-400`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},record:{icon:`text-blue-500 dark:text-blue-400`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},navigation:{icon:`text-indigo-500 dark:text-indigo-400`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},element:{icon:`text-teal-500 dark:text-teal-400`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},ai:{icon:`text-violet-500 dark:text-violet-400`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},misc:{icon:`text-zinc-500 dark:text-zinc-400`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function Xl(e){return Yl[Gl[e]?.category??`misc`]}var Zl={"object-grid":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`columns`,label:`Columns`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`pageSize`,label:`Page size`,kind:`number`,placeholder:`20`},{name:`striped`,label:`Striped rows`,kind:`boolean`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"object-form":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`mode`,label:`Mode`,kind:`select`,options:[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`view`,label:`View`}]},{name:`formType`,label:`Form type`,kind:`select`,options:[{value:`simple`,label:`Simple`},{value:`tabbed`,label:`Tabbed`},{value:`wizard`,label:`Wizard`},{value:`split`,label:`Split`},{value:`drawer`,label:`Drawer`},{value:`modal`,label:`Modal`}]},{name:`layout`,label:`Layout`,kind:`select`,options:[{value:`vertical`,label:`Vertical`},{value:`horizontal`,label:`Horizontal`},{value:`inline`,label:`Inline`},{value:`grid`,label:`Grid`}]},{name:`columns`,label:`Columns (grid layout)`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`description`,label:`Description`,kind:`text`}],"object-metric":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`label`,label:`Label`,kind:`text`},{name:`description`,label:`Description`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`colorVariant`,label:`Color`,kind:`color`,options:[{value:`default`,label:`Default`},{value:`blue`,label:`Blue`},{value:`teal`,label:`Teal`},{value:`orange`,label:`Orange`},{value:`purple`,label:`Purple`},{value:`success`,label:`Success`},{value:`warning`,label:`Warning`},{value:`danger`,label:`Danger`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"object-kanban":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`groupField`,label:`Group by field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`cardFields`,label:`Card fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`}],grid:[{name:`columns`,label:`Columns`,kind:`number`,placeholder:`3`},{name:`gap`,label:`Gap`,kind:`number`,placeholder:`4`}],"element:text":[{name:`content`,label:`Content`,kind:`text`,placeholder:`Text…`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`heading`,label:`Heading`},{value:`subheading`,label:`Subheading`},{value:`body`,label:`Body`},{value:`caption`,label:`Caption`}]},{name:`align`,label:`Align`,kind:`select`,options:[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}]}],"element:image":[{name:`src`,label:`Source URL`,kind:`text`,placeholder:`https://…`},{name:`alt`,label:`Alt text`,kind:`text`},{name:`fit`,label:`Fit`,kind:`select`,options:[{value:`cover`,label:`Cover`},{value:`contain`,label:`Contain`},{value:`fill`,label:`Fill`}]}],"element:definition-list":[{name:`items`,label:`Items`,kind:`array`,addLabel:`Add item`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`value`,label:`Value`,kind:`text`}]},{name:`columns`,label:`Columns (1 or 2)`,kind:`number`,placeholder:`1`},{name:`inline`,label:`Inline (label · value)`,kind:`boolean`}],"element:repeater":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`object`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`},{name:`emptyText`,label:`Empty text`,kind:`text`},{name:`divided`,label:`Dividers between rows`,kind:`boolean`}],"element:number":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`field`,label:`Field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`aggregate`,label:`Aggregate`,kind:`select`,options:[{value:`count`,label:`Count`},{value:`sum`,label:`Sum`},{value:`avg`,label:`Average`},{value:`min`,label:`Min`},{value:`max`,label:`Max`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"element:button":[{name:`label`,label:`Label`,kind:`text`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}]},{name:`size`,label:`Size`,kind:`select`,options:[{value:`small`,label:`Small`},{value:`medium`,label:`Medium`},{value:`large`,label:`Large`}]},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`}],"page:header":[{name:`title`,label:`Title`,kind:`text`},{name:`subtitle`,label:`Subtitle`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`breadcrumb`,label:`Show breadcrumb`,kind:`boolean`}],"page:card":[{name:`title`,label:`Title`,kind:`text`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"page:tabs":[{name:`items`,label:`Tabs`,kind:`array`,addLabel:`Add tab`,itemFields:[{name:`key`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"page:accordion":[{name:`title`,label:`Title`,kind:`text`},{name:`items`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`value`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:related_list":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`relationshipField`,label:`Relationship field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`}],"record:highlights":[{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}],"record:details":[{name:`sections`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`columns`,label:`Columns`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}]}],"record:alert":[{name:`severity`,label:`Severity`,kind:`select`,options:[{value:`info`,label:`Info`},{value:`warning`,label:`Warning`},{value:`error`,label:`Error`},{value:`success`,label:`Success`}]},{name:`title`,label:`Title`,kind:`text`},{name:`body`,label:`Body`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`dismissible`,label:`Dismissible`,kind:`boolean`}],"record:path":[{name:`statusField`,label:`Status field`,kind:`field-picker`,objectFrom:`page`},{name:`stages`,label:`Stages`,kind:`array`,addLabel:`Add stage`,itemFields:[{name:`value`,label:`Value`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:quick_actions":[{name:`actionNames`,label:`Action names`,kind:`string-list`,placeholder:`action name`},{name:`location`,label:`Location`,kind:`select`,options:[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record more menu`},{value:`record_section`,label:`Record section`},{value:`record_related`,label:`Record related`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List item`},{value:`global_nav`,label:`Global nav`}]}],"ai:chat_window":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}],"ai:input":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}]};function Ql(e){return!!e&&Array.isArray(Zl[e])&&Zl[e].length>0}function $l(){let e=pi(),[t,n]=X.useState([]),[r,i]=X.useState(!0);return X.useEffect(()=>{let t=!1;return i(!0),e.list(`object`).then(e=>{if(t)return;let r=(e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value));n(r),i(!1)}).catch(()=>{t||(n([]),i(!1))}),()=>{t=!0}},[e]),{options:t,loading:r}}function eu(e){let{fields:t}=Li(e);return X.useMemo(()=>t.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[t])}function tu({label:e,value:t,onCommit:n,disabled:r}){let{options:i}=$l();return i.length===0?(0,Y.jsx)(G,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(W,{label:e,value:t||void 0,options:i,onCommit:n,disabled:r})}function nu({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let a=eu(t);return!t||a.length===0?(0,Y.jsx)(G,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(W,{label:e,value:n||void 0,options:a,onCommit:r,disabled:i})}function ru({label:e,objectName:t,value:n,onChange:r,disabled:i}){let a=eu(t),o=Array.isArray(n)?n:[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),o.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[a.length>0?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsxs)(He,{value:e?String(e):``,onValueChange:e=>{let n=[...o];n[t]=e,r(n)},disabled:i,children:[(0,Y.jsx)(rn,{className:`h-8`,children:(0,Y.jsx)(_t,{placeholder:`—`})}),(0,Y.jsx)($t,{children:a.map(e=>(0,Y.jsx)(qt,{value:e.value,children:e.label},e.value))})]})}):(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(e??``),placeholder:`field name`,disabled:i,onChange:e=>{let n=[...o];n[t]=e.target.value,r(n)}}),(0,Y.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:i,"aria-label":`Remove`,onClick:()=>r(o.filter((e,n)=>n!==t)),children:(0,Y.jsx)(P,{className:`h-4 w-4`})})]},t)),!i&&(0,Y.jsxs)(I,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r([...o,``]),children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]})}function iu(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function au({label:e,value:t,onCommit:n,disabled:r}){let i=X.useMemo(()=>iu(t),[t]),[a,o]=X.useState(i),[s,c]=X.useState(null);return X.useEffect(()=>{o(i),c(null)},[i]),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:a,onChange:e=>o(e.target.value),onBlur:()=>{if(r)return;let e=a.trim();if(e===``){c(null),n(void 0);return}try{let t=JSON.parse(e);c(null),n(t)}catch{c(`Invalid JSON`)}},disabled:r,spellCheck:!1,rows:Math.min(12,Math.max(2,a.split(`
11
11
  `).length)),className:`w-full rounded border border-input bg-background px-2 py-1.5 text-xs font-mono outline-none focus:ring-1 focus:ring-primary resize-y disabled:opacity-60`}),s&&(0,Y.jsx)(`div`,{className:`text-[11px] text-destructive`,children:s})]})}function ou({name:e,value:t,onCommit:n,disabled:r}){return typeof t==`boolean`?(0,Y.jsx)(K,{label:e,value:t,onCommit:n,disabled:r}):typeof t==`number`?(0,Y.jsx)(Ni,{label:e,value:t,onCommit:e=>n(e),disabled:r}):t===null||typeof t==`string`?(0,Y.jsx)(G,{label:e,value:t??``,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(au,{label:e,value:t,onCommit:n,disabled:r})}var su=new Set([`children`,`body`]),cu=Symbol(`remove`);function lu(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)(?:\[(\d+)\])?$/.exec(e);if(!t)return null;n.push({key:t[1],index:t[2]==null?-1:Number(t[2])})}return n.length>0?n:null}function uu(e){let t=[];for(let n of e)t.push(n.key),n.index>=0&&t.push(n.index);return t}function du(e,t){let n=e;for(let e of t){if(n==null)return null;n=n[e]}return n??null}function fu(e,t,n){if(t.length===0)return n;let[r,...i]=t;if(typeof r==`number`){let t=Array.isArray(e)?[...e]:[];return i.length===0?n===cu?t.splice(r,1):t[r]=n:t[r]=fu(t[r],i,n),t}let a={...e||{}};return i.length===0?n===cu?delete a[r]:a[r]=n:a[r]=fu(a[r],i,n),a}function pu(e,t){return du(e,uu(t))}function mu(e,t,n){let r=uu(t),i=fu(e,r,n===null?cu:n),a=r[0];return{[a]:i[a]}}function hu(e,t){let n=uu(t),r=n[n.length-1];if(typeof r!=`number`)return null;let i=du(e,n.slice(0,-1));return Array.isArray(i)?{siblings:i,index:r}:null}function gu(e,t,n){let r=uu(t),i=fu(e,r.slice(0,-1),n),a=r[0];return{[a]:i[a]}}function _u({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=/^slot:([a-zA-Z_]+):(\d+)(?:\.(.+))?$/.exec(e.id),c=s?null:lu(e.id),l=s?s[1]:``,u=s?Number(s[2]):-1,d=s?s[3]:void 0,f=d?lu(d):null,p=t.slots&&typeof t.slots==`object`?t.slots:{},m=s?Array.isArray(p[l])?p[l]:p[l]==null?[]:[p[l]]:[],h=s?m[u]??null:null,g=e=>n({slots:{...p,[l]:e}}),_=e=>g(e===null?m.filter((e,t)=>t!==u):m.map((t,n)=>n===u?e:t)),v=s?f?pu(h||{},f):h:c?pu(t,c):null,y=s?f?hu(h||{},f):{siblings:m,index:u}:c?hu(t,c):null;if(!s&&!c||!v)return(0,Y.jsx)(Zi,{kindLabel:q(`engine.inspector.pageBlock.kind`,a),title:e.label??e.id,onClose:r,closeLabel:q(`engine.inspector.pageBlock.close`,a),children:(0,Y.jsx)($i,{message:e.id})});let b=e=>s?_(f?{...h,...mu(h||{},f,{...v,...e})}:{...v,...e}):n(mu(t,c,{...v,...e})),x=v.properties||{},S=typeof t?.object==`string`?t.object:void 0,C=e=>e.objectFrom===`page`?S:e.objectProp!=null&&x[e.objectProp]!=null?String(x[e.objectProp]):void 0,w=e=>x[e]??v[e],T=(e,t)=>b({properties:{...x,[e]:t}}),E=new Set((Ql(v.type)?Zl[v.type]:[]).map(e=>e.name)),D=Object.keys(x).filter(e=>!E.has(e)&&!su.has(e)),O=(e,t,n,r=``)=>{let i=`${r}${e.name}`;switch(e.kind){case`number`:return(0,Y.jsx)(Ni,{label:e.label,value:typeof t(e.name)==`number`?t(e.name):void 0,placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i);case`boolean`:return(0,Y.jsx)(K,{label:e.label,value:!!t(e.name),onCommit:t=>n(e.name,t),disabled:o},i);case`color`:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(ji,{value:t(e.name)==null?void 0:String(t(e.name)),onChange:t=>n(e.name,t),disabled:o,options:e.options})]},i);case`select`:return(0,Y.jsx)(W,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),options:e.options,onCommit:t=>n(e.name,t),disabled:o},i);case`string-list`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,i)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(t??``),placeholder:e.placeholder,disabled:o,onChange:t=>{let a=[...r];a[i]=t.target.value,n(e.name,a)}}),(0,Y.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:o,"aria-label":`Remove`,onClick:()=>n(e.name,r.filter((e,t)=>t!==i)),children:(0,Y.jsx)(P,{className:`h-4 w-4`})})]},i)),!o&&(0,Y.jsxs)(I,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,``]),children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]},i)}case`array`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(H,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,a)=>{let s=t&&typeof t==`object`?t:{};return(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`#`,a+1]}),(0,Y.jsx)(I,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7`,disabled:o,"aria-label":`Remove item`,onClick:()=>n(e.name,r.filter((e,t)=>t!==a)),children:(0,Y.jsx)(Zt,{className:`h-3.5 w-3.5`})})]}),e.itemFields.map(t=>O(t,e=>s[e],(t,i)=>{let o=[...r];o[a]={...s,[t]:i},n(e.name,o)},`${i}-${a}-`))]},a)}),!o&&(0,Y.jsxs)(I,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,{}]),children:[(0,Y.jsx)(z,{className:`mr-1 h-3.5 w-3.5`}),` `,e.addLabel||`Add`]})]},i)}case`object-picker`:return(0,Y.jsx)(tu,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-picker`:return(0,Y.jsx)(nu,{label:e.label,objectName:C(e),value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-list`:return(0,Y.jsx)(ru,{label:e.label,objectName:C(e),value:t(e.name),onChange:t=>n(e.name,t),disabled:o},i);default:return(0,Y.jsx)(G,{label:e.label,value:t(e.name)==null?``:String(t(e.name)),placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i)}},k=()=>{s?_(f?{...h,...mu(h||{},f,null)}:null):n(mu(t,c,null)),r()},A=e=>e.map(e=>e.index>=0?`${e.key}[${e.index}]`:e.key).join(`.`);return(0,Y.jsxs)(Zi,{kindLabel:q(`engine.inspector.pageBlock.kind`,a),title:String(v.id||v.type||e.id),onClose:r,closeLabel:q(`engine.inspector.pageBlock.close`,a),headerActions:y?(0,Y.jsx)(Oi,{index:y.index,total:y.siblings.length,onMove:e=>{if(!y)return;if(s){if(f){let t=_i(y.siblings,y.index,e);_({...h,...gu(h||{},f,t)});let n=A([...f.slice(0,-1),{key:f[f.length-1].key,index:e}]);i?.({kind:`block`,id:`slot:${l}:${u}.${n}`,label:String(v.id||v.type||e)})}else g(_i(m,u,e)),i?.({kind:`block`,id:`slot:${l}:${e}`,label:String(v.id||v.type||e)});return}let r=_i(y.siblings,y.index,e);n(gu(t,c,r));let a=A([...c.slice(0,-1),{key:c[c.length-1].key,index:e}]);i?.({kind:`block`,id:a,label:String(v.id||v.type||a)})},upLabel:q(`engine.inspector.reorder.up`,a),downLabel:q(`engine.inspector.reorder.down`,a),disabled:o}):void 0,footer:(0,Y.jsx)(Qi,{label:q(`engine.inspector.pageBlock.remove`,a),onClick:k,disabled:o}),children:[(0,Y.jsx)(G,{label:q(`engine.inspector.pageBlock.type`,a),value:v.type??``,onCommit:e=>b({type:e}),disabled:o,mono:!0}),(0,Y.jsx)(G,{label:q(`engine.inspector.pageBlock.id`,a),value:v.id??``,onCommit:e=>b({id:e}),disabled:o,mono:!0}),(0,Y.jsx)(G,{label:q(`engine.inspector.pageBlock.className`,a),value:v.className??``,onCommit:e=>b({className:e}),disabled:o,mono:!0}),(0,Y.jsx)(Ri,{label:q(`engine.inspector.pageBlock.hidden`,a),value:v.hidden??``,onCommit:e=>b({hidden:e||void 0}),objectName:S,disabled:o}),Ql(v.type)&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.inspector.pageBlock.properties`,a)}),Zl[v.type].map(e=>O(e,w,T))]}),D.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.inspector.pageBlock.advanced`,a)}),D.map(e=>(0,Y.jsx)(ou,{name:e,value:x[e],onCommit:t=>T(e,t),disabled:o},e))]})]})}var vu=new Set([`simple`,`tabbed`,`wizard`,`split`]),yu=new Set([`drawer`,`modal`]);function bu(e){return typeof e==`string`&&yu.has(e)}function xu(e){return typeof e==`string`&&vu.has(e)?e:`simple`}function Su(e){let t={...e,type:String(e?.type??``)},n=t.properties&&typeof t.properties==`object`?t.properties:void 0;return bu(n?.formType??t.formType)&&(n&&(t.properties={...n,formType:`simple`}),`formType`in t&&(t.formType=`simple`)),t}function Cu(e=`300px`){let t=X.useRef(null),[n,r]=X.useState(()=>typeof IntersectionObserver>`u`);return X.useEffect(()=>{if(n)return;let i=t.current;if(!i)return;let a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(r(!0),a.disconnect())},{rootMargin:e});return a.observe(i),()=>a.disconnect()},[n,e]),{ref:t,inView:n}}function wu({block:e,maxHeightClass:t=`max-h-72`}){let n=String(e?.type??``),{ref:r,inView:i}=Cu();return(0,Y.jsx)(`div`,{ref:r,className:B(`pointer-events-none select-none overflow-hidden p-3`,t),children:i?(0,Y.jsx)(Q,{fallbackHint:`"${n}" can't render with its current configuration — check its Properties.`,children:(0,Y.jsx)(f,{children:(0,Y.jsx)(_,{schema:Su(e)})})}):(0,Y.jsx)(`div`,{className:`min-h-[64px] animate-pulse rounded bg-muted/40`,"aria-hidden":`true`})})}var Tu={1:`grid-cols-1`,2:`grid-cols-2`,3:`grid-cols-3`,4:`grid-cols-4`,5:`grid-cols-5`,6:`grid-cols-6`};function Eu(e){let t=e?.properties||{};switch(e?.type){case`page:tabs`:case`page:accordion`:return(Array.isArray(t.items)?t.items:[]).map((e,t)=>({label:e?.label||e?.key||`Item ${t+1}`,pathSuffix:`properties.items[${t}].children`,children:Array.isArray(e?.children)?e.children:[]}));case`page:card`:return Array.isArray(t.body)&&!Array.isArray(t.children)?[{label:`Body`,pathSuffix:`properties.body`,children:t.body}]:[{label:`Body`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];case`page:section`:case`grid`:return[{label:`Content`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];default:return Array.isArray(t.children)?[{label:`Content`,pathSuffix:`properties.children`,children:t.children}]:[]}}var Du=[`header`,`actions`,`alerts`,`highlights`,`details`,`tabs`,`discussion`];function Ou(e){let t=e||{};return Du.map(e=>{let n=t[e];return{name:e,components:Array.isArray(n)?n:n==null?[]:[n]}})}function ku(e){let t={};for(let n of e){let e=Array.isArray(n.components)?n.components:[];e.length===0||!n.name||(t[n.name]=e)}return t}function Au(e){let t=e.slots;if(e.kind===`slotted`&&t&&typeof t==`object`&&!Array.isArray(t))return{regions:Ou(t),shape:`slots`};let n=e.regions;if(Array.isArray(n))return{regions:n,shape:`regions`};let r=e.children;return Array.isArray(r)?{regions:[{name:`children`,components:r}],shape:`children`}:{regions:[],shape:`regions`}}function ju(e,t,n,r){return e===`children`?`children[${n}]`:e===`slots`?`slot:${r}:${n}`:`regions[${t}].components[${n}]`}function Mu(e){return typeof e.label==`string`&&e.label||typeof e.title==`string`&&e.title||typeof e.id==`string`&&e.id||String(e.type??`block`)}var Nu=`text/x-objectui-pageblock`;function Pu({draft:e,onPatch:t,selection:n,onSelectionChange:r}){let i=!t,{regions:a,shape:o}=X.useMemo(()=>Au(e),[e]),s=n?.kind===`block`?String(n.id):null,c=X.useCallback(e=>{if(o===`children`){let n=e.flatMap(e=>Array.isArray(e.components)?e.components:[]);t?.({children:n})}else o===`slots`?t?.({slots:ku(e)}):t?.({regions:e})},[t,o]),l=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),s=i[e.region]?.components;if(!s)return;let[l]=s.splice(e.comp,1);if(!l)return;let u=i[n.region]?.components;if(!u)return;let d=u.length;if(`appendEnd`in n)d=u.length;else if(n.before!=null){let t=n.before;e.region===n.region&&e.comp<t&&--t,d=t}else if(n.after!=null){let t=n.after+1;e.region===n.region&&e.comp<n.after+1&&--t,d=t}u.splice(d,0,l),c(i);let f=ju(o,n.region,d,i[n.region]?.name);r?.({kind:`block`,id:f,label:Mu(l)})},[t,r,a,c,o]),u=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]}));i[e]||(i[e]={name:`region_${e+1}`,components:[]});let s={type:n};i[e].components.push(s),c(i);let l=i[e].components.length-1;r?.({kind:`block`,id:ju(o,e,l,i[e]?.name),label:Mu(s)})},[t,r,a,c,o]),d=X.useCallback((e,n,r)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),o=i[e]?.components?.[n];o&&(i[e].components[n]={...o,label:r||void 0},c(i))},[t,a,c]),f=X.useCallback(()=>{if(!t)return;let e=[...a,{name:`region_${a.length+1}`,components:[]}];c(e)},[t,a,c]),p=X.useCallback((n,i,a)=>{if(!t)return;let o=/^slot:([a-zA-Z_]+):(\d+)$/.exec(n),s=lu(i);if(!s)return;let c=uu(s);if(o){let s=o[1],l=Number(o[2]),u=e.slots||{},d=u[s],f=Array.isArray(d)?[...d]:d==null?[]:[d],p=f[l];if(!p)return;let m=du(p,c)||[];f[l]=fu(p,c,[...m,{type:a}]),t({slots:{...u,[s]:f}}),r?.({kind:`block`,id:`${n}.${i}[${m.length}]`,label:a})}else{let o=lu(`${n}.${i}`);if(!o)return;let s=uu(o),c=du(e,s)||[],l=fu(e,s,[...c,{type:a}]);t({[s[0]]:l[s[0]]}),r?.({kind:`block`,id:`${n}.${i}[${c.length}]`,label:a})}},[t,e,r]),m=X.useCallback(e=>{e.target===e.currentTarget&&s&&r?.(null)},[r,s]);return a.length===0?(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsx)(`div`,{className:`mx-auto max-w-3xl px-6 py-8`,children:(0,Y.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed bg-background py-16 px-6 text-center space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`No regions yet`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`A Page is composed of regions (header / main / sidebar / …). Add a region to start dropping blocks into it.`}),!i&&(0,Y.jsx)(`div`,{className:`pt-2`,children:(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,onClick:f,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}):(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsxs)(`div`,{className:`mx-auto max-w-3xl px-6 py-6 space-y-5`,onClick:m,children:[a.map((e,t)=>(0,Y.jsx)(Fu,{region:e,regionIdx:t,shape:o,selectedId:s,readOnly:i,onSelectBlock:(n,i)=>r?.({kind:`block`,id:ju(o,t,n,e.name),label:Mu(i)}),onMoveBlock:l,onAddBlock:u,onRenameLabel:d,baseIdOf:n=>ju(o,t,n,e.name),onSelectId:(e,t)=>r?.({kind:`block`,id:e,label:t}),onAddNested:p},t)),!i&&o===`regions`&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-muted-foreground`,onClick:f,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}function Fu({region:e,regionIdx:t,shape:n,selectedId:r,readOnly:i,onSelectBlock:a,onMoveBlock:o,onAddBlock:s,onRenameLabel:c,onSelectId:l,onAddNested:u}){let d=Array.isArray(e.components)?e.components:[],[f,p]=X.useState(!1);return(0,Y.jsxs)(`section`,{className:B(`rounded-md transition-colors`,f&&`bg-primary/5 ring-1 ring-primary/30 -mx-1 px-1 py-1`),onDragOver:e=>{if(i)return;let t=e.dataTransfer.types;!t||!Array.from(t).includes(Nu)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,p(!0))},onDragLeave:e=>{e.currentTarget===e.target&&p(!1)},onDrop:e=>{if(i||(p(!1),e.defaultPrevented))return;e.preventDefault();let n=e.dataTransfer.getData(Nu);if(n)try{let e=JSON.parse(n);if(typeof e.region!=`number`||typeof e.comp!=`number`)return;o(e,{region:t,appendEnd:!0})}catch{}},children:[(0,Y.jsxs)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground pl-1 mb-2 flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{children:e.name||`region ${t+1}`}),e.width&&(0,Y.jsxs)(`span`,{className:`normal-case text-[10px] text-muted-foreground/60`,children:[`· `,e.width]}),f&&(0,Y.jsx)(`span`,{className:`text-primary normal-case text-[10px]`,children:`drop here`})]}),(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[d.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/50 py-6 px-4 text-center text-xs text-muted-foreground`,children:n===`slots`?`Inherited from the default page — add a block to override this slot.`:`Empty region — drop a block here or use the add button below.`}):d.map((s,d)=>{let f=ju(n,t,d,e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsx)(Iu,{block:s,regionIdx:t,compIdx:d,selected:f===r,readOnly:i,onClick:()=>a(d,s),onMoveBlock:o,onRenameLabel:e=>c(t,d,e)}),(0,Y.jsx)(Lu,{block:s,baseId:f,selectedId:r,readOnly:i,onSelectId:l,onAddNested:u})]},`${t}:${d}`)}),!i&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsx)(Ru,{onPick:e=>s(t,e)})})]})]})}function Iu({block:e,regionIdx:t,compIdx:n,selected:r,readOnly:i,onClick:a,onMoveBlock:o,onRenameLabel:s}){let c=String(e.type??``),l=Gl[c]?.Icon??Jl,u=Xl(c),d=Mu(e),f=!i,[p,m]=X.useState(null),h=e=>{e.dataTransfer.setData(Nu,JSON.stringify({region:t,comp:n})),e.dataTransfer.effectAllowed=`move`},g=e=>{if(!f)return;let t=e.dataTransfer.types;if(!t||!Array.from(t).includes(Nu))return;e.preventDefault(),e.dataTransfer.dropEffect=`move`;let n=e.currentTarget.getBoundingClientRect();m(e.clientY-n.top<n.height/2?`before`:`after`)},_=()=>m(null),v=e=>{if(i)return;e.preventDefault(),e.stopPropagation();let r=p??`before`;m(null);let a=e.dataTransfer.getData(Nu);if(a)try{let e=JSON.parse(a);if(e.region===t&&e.comp===n)return;o(e,r===`before`?{region:t,before:n}:{region:t,after:n})}catch{}},[y,b]=X.useState(!1),[x,S]=X.useState(d);X.useEffect(()=>{S(d)},[d]);let C=e=>{i||(e.preventDefault(),e.stopPropagation(),S(d),b(!0))},w=()=>{if(i){b(!1);return}let e=x.trim();e&&e!==d&&s(e),b(!1)},T=()=>{S(d),b(!1)},E=Eu(e).length>0;return(0,Y.jsxs)(`div`,{className:B(`relative`,p===`before`&&`pt-1.5`),onDragOver:g,onDragLeave:_,onDrop:v,children:[p===`before`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -top-0.5 h-0.5 bg-primary rounded-full`}),(0,Y.jsx)(`div`,{className:B(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,r?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:E?(0,Y.jsxs)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,className:B(`flex w-full items-center justify-between gap-2 rounded-md px-3.5 py-2.5 text-left`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`),"aria-pressed":r,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0 flex-1`,children:[f&&(0,Y.jsx)(zr,{className:`h-3.5 w-3.5 text-muted-foreground/40 shrink-0 group-hover:text-muted-foreground/80`,"aria-hidden":`true`}),(0,Y.jsx)(l,{className:B(`h-3.5 w-3.5 shrink-0`,u.icon)}),y?(0,Y.jsx)(`input`,{autoFocus:!0,value:x,onChange:e=>S(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(e.preventDefault(),w()):e.key===`Escape`&&(e.preventDefault(),T())},onBlur:w,className:`text-sm font-medium px-1 py-0.5 -mx-1 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1`}):(0,Y.jsx)(`span`,{className:B(`text-sm font-medium truncate`,!i&&`cursor-text`),onDoubleClick:C,title:i?void 0:`Double-click to rename`,children:d}),e.id&&e.id!==d&&(0,Y.jsxs)(`code`,{className:`text-[10px] text-muted-foreground/70 font-mono truncate`,children:[`#`,e.id]})]}),(0,Y.jsx)(U,{variant:`outline`,className:B(`text-[10px] shrink-0 font-mono`,u.badge),children:c})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(wu,{block:e}),(0,Y.jsx)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,"aria-label":`Select ${d}`,"aria-pressed":r,className:B(`absolute inset-0 z-10 rounded-md`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`)}),(0,Y.jsxs)(`div`,{className:B(`pointer-events-none absolute right-1.5 top-1.5 z-20 flex items-center gap-1 transition-opacity`,r?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:[f&&(0,Y.jsx)(zr,{className:`h-3.5 w-3.5 text-muted-foreground/60`,"aria-hidden":`true`}),(0,Y.jsx)(U,{variant:`outline`,className:B(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,u.badge),children:c})]})]})}),p===`after`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -bottom-1 h-0.5 bg-primary rounded-full`})]})}function Lu({block:e,baseId:t,selectedId:n,readOnly:r,onSelectId:i,onAddNested:a}){let o=Eu(e);if(o.length===0)return null;let s=Tu[e?.type===`grid`?Math.min(6,Math.max(1,Number(e.properties?.columns)||1)):1]??`grid-cols-1`;return(0,Y.jsx)(`div`,{className:`ml-5 mt-1.5 space-y-2.5 border-l border-dashed border-border pl-3`,children:o.map((e,o)=>(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground/70`,children:e.label}),e.children.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/40 py-2 px-3 text-[11px] text-muted-foreground`,children:`Empty — add a block.`}):(0,Y.jsx)(`div`,{className:B(`grid gap-2`,s),children:e.children.map((r,a)=>{let o=`${t}.${e.pathSuffix}[${a}]`,s=String(r?.type??``),c=o===n;return(0,Y.jsxs)(`div`,{className:B(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,c?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:[(0,Y.jsx)(wu,{block:r,maxHeightClass:`max-h-56`}),(0,Y.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i(o,Mu(r))},"aria-label":`Select ${Mu(r)}`,"aria-pressed":c,className:`absolute inset-0 z-10 rounded-md cursor-pointer`}),(0,Y.jsx)(`div`,{className:B(`pointer-events-none absolute right-1.5 top-1.5 z-20 transition-opacity`,c?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:(0,Y.jsx)(U,{variant:`outline`,className:B(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,Xl(s).badge),children:s})})]},a)})}),!r&&(0,Y.jsx)(Ru,{onPick:n=>a(t,e.pathSuffix,n)})]},o))})}function Ru({onPick:e}){let[t,n]=X.useState(!1),[r,i]=X.useState(``),a=r.trim().toLowerCase(),o=X.useMemo(()=>a?ql.map(e=>({category:e.category,types:e.types.filter(e=>{let t=Gl[e];return e.includes(a)||t.label.toLowerCase().includes(a)})})).filter(e=>e.types.length>0):ql,[a]);return(0,Y.jsxs)(pr,{open:t,onOpenChange:e=>{n(e),e||i(``)},children:[(0,Y.jsx)(yn,{asChild:!0,children:(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5`}),`Add block`]})}),(0,Y.jsxs)(Dr,{align:`start`,className:`w-[320px] p-0 max-h-[480px] overflow-hidden flex flex-col`,children:[(0,Y.jsx)(`div`,{className:`p-2 border-b`,children:(0,Y.jsx)(`input`,{autoFocus:!0,value:r,onChange:e=>i(e.target.value),placeholder:`Search block type…`,className:`h-7 w-full px-2 text-sm border rounded bg-background outline-none focus:ring-1 focus:ring-primary`})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto p-1`,children:o.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground p-4 text-center`,children:`No matching types.`}):o.map(t=>(0,Y.jsxs)(`div`,{className:`mb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground px-2 py-1`,children:Kl[t.category]}),t.types.map(t=>{let r=Gl[t],a=r.Icon;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{e(t),n(!1),i(``)},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm hover:bg-accent text-left`,children:[(0,Y.jsx)(a,{className:B(`h-3.5 w-3.5 shrink-0`,Xl(t).icon)}),(0,Y.jsx)(`span`,{className:`truncate`,children:r.label}),(0,Y.jsx)(`code`,{className:`ml-auto text-[10px] text-muted-foreground/70 font-mono truncate`,children:t})]},t)})]},t.category))})]})]})}function zu({draft:e,editing:t,selection:n,onSelectionChange:r,onPatch:i,locale:a}){let o=X.useMemo(()=>{let t=e.type??`page`;return{...e,type:t}},[e]),s=!!(t&&r),c=s&&!!i,l=n&&n.kind===`block`?n.id:null,u=!!e?.interfaceConfig?.source,d=X.useMemo(()=>Array.isArray(e.regions)?`regions`:`children`,[e]),f=X.useMemo(()=>{if(d===`regions`){let t=e.regions,n=[];return t.forEach((e,t)=>{(Array.isArray(e.components)?e.components:[]).forEach((r,i)=>{n.push({id:`regions[${t}].components[${i}]`,label:r.id||r.type||`${e.name??`region ${t+1}`} · ${i+1}`})})}),n}return(Array.isArray(e.children)?e.children:[]).map((e,t)=>({id:`children[${t}]`,label:e.id||e.type||`block ${t+1}`}))},[e,d]),p=X.useCallback(()=>{if(!c)return;let t={type:`container`};if(d===`regions`){let n=Array.isArray(e.regions)?[...e.regions]:[],a=n.length-1;a<0&&(n.push({name:`main`,components:[]}),a=0);let o={...n[a]},s=Array.isArray(o.components)?[...o.components]:[];s.push(t),o.components=s,n[a]=o,i({regions:n}),r?.({kind:`block`,id:`regions[${a}].components[${s.length-1}]`,label:t.type});return}let n=[...Array.isArray(e.children)?e.children:[],t];i({children:n}),r?.({kind:`block`,id:`children[${n.length-1}]`,label:t.type})},[c,e,i,r,d]),m=e?.type===`record`||e?.pageType===`record`?e?.object:void 0,[g,v]=X.useState([]),[y,x]=X.useState(null),[S,C]=X.useState(null);X.useEffect(()=>{if(!m){v([]),x(null),C(null);return}let e=!1;return(async()=>{try{let t={headers:{accept:`application/json`},credentials:`include`},n=await(await fetch(`/api/v1/meta/object/${encodeURIComponent(m)}`,t)).json().catch(()=>null),r=n?.item??n?.data??n,i=h(r?.fields),a=i.length>0?`?$top=50&$expand=${encodeURIComponent(i.join(`,`))}`:`?$top=50`,o=await(await fetch(`/api/v1/data/${encodeURIComponent(m)}${a}`,t)).json().catch(()=>null),s=Array.isArray(o?.records)?o.records:Array.isArray(o?.items)?o.items:Array.isArray(o?.data)?o.data:Array.isArray(o)?o:[];if(e)return;v(s),x(r),C(e=>e??s[0]?.id??s[0]?._id??s[0]?.name??null)}catch{e||(v([]),x(null))}})(),()=>{e=!0}},[m]);let w=e=>e?.id??e?._id??e?.name,T=e=>String(e?.name??e?.title??e?.label??e?.subject??w(e)??`(record)`),E=X.useMemo(()=>g.length?g.find(e=>String(w(e))===String(S))??g[0]:null,[g,S]),D=e?.kind===`slotted`,O=X.useMemo(()=>{if(!D)return o;try{let t=e?.slots??{};return ra(y??void 0,{slots:t})}catch{return o}},[D,o,e,y]),k=e=>!m||!E?e:(0,Y.jsxs)(b,{objectName:m,recordId:w(E),data:E,objectSchema:y??void 0,embedded:!0,children:[g.length>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b bg-muted/30 text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground shrink-0`,children:`Preview record`}),(0,Y.jsx)(`select`,{className:`h-7 rounded-md border bg-background px-2 text-xs max-w-[260px]`,value:String(S??``),onChange:e=>C(e.target.value),children:g.map(e=>{let t=w(e);return(0,Y.jsx)(`option`,{value:String(t),children:T(e)},String(t))})}),(0,Y.jsxs)(`span`,{className:`text-muted-foreground/70 shrink-0`,children:[g.length,` sample`,g.length===1?``:`s`]})]}),e]});if(u)return(0,Y.jsx)(Z,{hint:`page · interface`,children:(0,Y.jsx)(Q,{fallbackHint:`The interface page references a source object/view that isn't available.`,children:(0,Y.jsx)(na,{page:e,onConfigChange:c?t=>i({interfaceConfig:{...e.interfaceConfig||{},...t}}):void 0})})});let A=e.kind;return A===`react`||A===`html`?(0,Y.jsx)(Wl,{draft:e,onPatch:c?i:void 0,readOnly:!c}):!o||Object.keys(o).length<=1?(0,Y.jsxs)(Z,{hint:`page${s?` · design`:``}`,children:[s&&d===`regions`?(0,Y.jsx)(Pu,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}):s?(0,Y.jsx)(Vl,{title:q(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?p:void 0,addLabel:q(`engine.inspector.add.block`,a)}):null,!s&&(0,Y.jsx)(zl,{children:`Add components to the page to see a preview.`})]}):s&&d===`regions`?(0,Y.jsx)(Z,{hint:`page · design`,children:k((0,Y.jsx)(Pu,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}))}):(0,Y.jsx)(Z,{hint:`page${s?` · design`:``}`,children:(0,Y.jsxs)(Q,{fallbackHint:`The Page schema is incomplete or references a component that hasn't been registered yet.`,children:[s&&(0,Y.jsx)(Vl,{title:q(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?p:void 0,addLabel:q(`engine.inspector.add.block`,a)}),k((0,Y.jsx)(`div`,{className:`min-h-[200px] max-h-[70vh] overflow-auto p-4`,children:(0,Y.jsx)(_,{schema:O})}))]})})}function Bu(e,t){let n=[t?.object,t?.data?.object,t?.objectName,e.object,e.objectName,e.data?.object];for(let e of n)if(typeof e==`string`&&e)return e}function Vu(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e,n=t.field??t.name;return n?{...t,name:n,readOnly:t.readOnly??t.readonly}:t}return String(e)}function Hu(e,t){return{type:`object-form`,objectName:e,mode:`create`,formType:xu(typeof t.type==`string`?t.type:`simple`),sections:Array.isArray(t.sections)?t.sections.map(e=>({...e,fields:Array.isArray(e?.fields)?e.fields.map(Vu):[]})):void 0,fields:Array.isArray(t.fields)?t.fields:void 0,showSubmit:!1,showCancel:!1}}function Uu({name:e,draft:t,editing:n}){let r=X.useMemo(()=>Ya(t)?.schema,[t]),i=X.useMemo(()=>Bu(t,r),[t,r]),a=!!n,{listViews:o,defaultViewId:s,defaultViewType:c}=X.useMemo(()=>{if(!r)return{listViews:{},defaultViewId:void 0,defaultViewType:`grid`};let n=String(e)||`default`;return{listViews:{[n]:{...r,label:r.label??t.label??e}},defaultViewId:n,defaultViewType:r.type??`grid`}},[r,t,e]);if(!r&&t.type){let e={...t};return(0,Y.jsx)(Z,{hint:`view · ${e.type}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:"The view's `type` may not be registered, or required fields are missing.",children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(f,{children:(0,Y.jsx)(_,{schema:e})})})})})}if(!i)return(0,Y.jsx)(Z,{hint:`view${a?` · design`:``}`,children:(0,Y.jsxs)(zl,{tone:`warn`,children:[`This view has no object binding yet. Set the bound `,(0,Y.jsx)(`code`,{children:`Object`}),` in the right panel to fetch live data and field options.`]})});if(t.viewKind===`form`&&r){let e=String(r.type??`simple`),t=Hu(i,r);return(0,Y.jsx)(Z,{hint:`view · ${e} · form${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The form view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(f,{children:(0,Y.jsx)(_,{schema:t})})})})})}let l=X.useMemo(()=>({type:`object-view`,objectName:i,defaultViewType:c,defaultListView:s,listViews:o,showSearch:!0,showFilters:!0,showCreate:!1,showRefresh:!0,showViewSwitcher:!0}),[i,c,s,o]);return(0,Y.jsx)(Z,{hint:`view · ${c}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(f,{children:(0,Y.jsx)(_,{schema:l})})})})})}var Wu={metric:{id:`metric`,label:`Metric (KPI)`,category:`kpi`,icon:ar},bar:{id:`bar`,label:`Bar chart`,category:`chart`,icon:Qt},"horizontal-bar":{id:`horizontal-bar`,label:`Horizontal bar`,category:`chart`,icon:Ve},line:{id:`line`,label:`Line chart`,category:`chart`,icon:Kt},area:{id:`area`,label:`Area chart`,category:`chart`,icon:gt},pie:{id:`pie`,label:`Pie chart`,category:`chart`,icon:Ge},donut:{id:`donut`,label:`Donut chart`,category:`chart`,icon:kn},scatter:{id:`scatter`,label:`Scatter plot`,category:`chart`,icon:De},funnel:{id:`funnel`,label:`Funnel`,category:`chart`,icon:Be},table:{id:`table`,label:`Data table`,category:`data`,icon:fr},pivot:{id:`pivot`,label:`Pivot table`,category:`data`,icon:wr},list:{id:`list`,label:`Record list`,category:`data`,icon:kt},custom:{id:`custom`,label:`Custom widget`,category:`custom`,icon:Cn}},Gu={kpi:`Single value`,chart:`Charts`,data:`Tabular`,custom:`Custom`},Ku=[`kpi`,`chart`,`data`,`custom`].map(e=>({category:e,types:Object.values(Wu).filter(t=>t.category===e)})),qu=rt;function Ju({onAdd:e,label:t=`Add widget`}){let[n,r]=X.useState(!1),[i,a]=X.useState(``),o=X.useRef(null),s=X.useMemo(()=>{let e=i.trim().toLowerCase();return e?Ku.map(t=>({category:t.category,types:t.types.filter(t=>t.id.toLowerCase().includes(e)||t.label.toLowerCase().includes(e))})).filter(e=>e.types.length):Ku},[i]);return(0,Y.jsxs)(pr,{open:n,onOpenChange:e=>{r(e),e||a(``)},children:[(0,Y.jsx)(yn,{asChild:!0,children:(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded border border-dashed px-3 py-1.5 text-xs text-muted-foreground hover:bg-muted/30 hover:text-foreground`,children:[(0,Y.jsx)(z,{className:`h-3 w-3`}),t]})}),(0,Y.jsxs)(Dr,{align:`end`,sideOffset:4,className:`w-72 p-0`,onOpenAutoFocus:e=>{e.preventDefault(),o.current?.focus()},children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 border-b px-2 py-1.5`,children:[(0,Y.jsx)(Kn,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`input`,{ref:o,type:`text`,value:i,onChange:e=>a(e.target.value),placeholder:`Search widgets…`,className:`w-full bg-transparent text-xs outline-none placeholder:text-muted-foreground`})]}),(0,Y.jsx)(`div`,{className:`max-h-72 overflow-auto py-1`,children:s.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-4 text-center text-xs text-muted-foreground`,children:`No matches.`}):s.map(t=>(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`px-3 pt-2 pb-1 text-[10px] uppercase tracking-wider text-muted-foreground`,children:Gu[t.category]}),t.types.map(t=>(0,Y.jsxs)(`button`,{type:`button`,className:`flex w-full items-center gap-2 px-3 py-1.5 text-left text-xs hover:bg-accent`,onClick:()=>{e(t.id),r(!1)},children:[(0,Y.jsx)(Wu[t.id]?.icon??qu,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium truncate`,children:t.label}),(0,Y.jsx)(`code`,{className:`ml-auto text-[10px] text-muted-foreground`,children:t.id})]},t.id))]},t.category))})]})]})}var Yu=X.lazy(()=>a(()=>import(`./plugin-dashboard-N2kUovsm.js`).then(e=>e.t).then(e=>({default:e.DashboardRenderer})),__vite__mapDeps([0,1]),import.meta.url));function Xu({draft:e,editing:t,onPatch:n,selection:r,onSelectionChange:i,locale:a}){let o=p(),s=Array.isArray(e.widgets)?e.widgets:[],c=!!(t&&i),l=c&&!!n,u=r&&r.kind===`widget`?r.id:null,d=X.useCallback(e=>{if(i){if(!e){i(null);return}i({kind:`widget`,id:e,label:s.find(t=>t?.id===e)?.title||e})}},[i,s]),f=X.useCallback(e=>{n&&n({widgets:e})},[n]),m=X.useCallback(e=>{if(!l)return;let t=Vi(`widget`,s.map(e=>e?.id).filter(Boolean)),r=Wu[e],a=r?`New ${r.label.toLowerCase()}`:`New widget`,o={id:t,type:e,title:a,...r?.defaults??{}};n({widgets:vi(s,o)}),i?.({kind:`widget`,id:t,label:a})},[l,s,n,i]),h=X.useCallback((e,t)=>{if(!l)return;let r=t.trim();n({widgets:s.map(t=>t?.id===e?{...t,title:r}:t)}),i?.({kind:`widget`,id:e,label:r||e})},[l,s,n,i]),g=u?s.find(e=>e?.id===u)??null:null,_=l?(0,Y.jsx)(Ju,{onAdd:m,label:q(`engine.inspector.add.widget`,a)}):null;return s.length===0?(0,Y.jsx)(Z,{hint:`dashboard${c?` · design`:``}`,toolbar:_,children:(0,Y.jsx)(zl,{children:`Add at least one widget to see a preview.`})}):(0,Y.jsx)(Z,{hint:`dashboard · ${s.length} widget${s.length===1?``:`s`}${c?` · design`:``}`,toolbar:_,children:(0,Y.jsxs)(Q,{fallbackHint:`A widget references an object or field that doesn't resolve.`,children:[l&&g?(0,Y.jsx)(Zu,{widget:g,onRename:e=>h(g.id,e),onClose:()=>i?.(null)}):null,(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading dashboard renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(`div`,{className:`min-w-[768px]`,children:(0,Y.jsx)(Yu,{schema:e,dataSource:o,designMode:c,selectedWidgetId:u,onWidgetClick:c?d:void 0,onWidgetsReorder:c&&n?f:void 0,hideHeaderText:!0})})})})]})})}function Zu({widget:e,onRename:t,onClose:n}){let r=e.title??e.id??``,[i,a]=X.useState(!1),[o,s]=X.useState(r),c=X.useRef(null);X.useEffect(()=>{s(r),a(!1)},[e.id,r]),X.useEffect(()=>{i&&c.current?.select()},[i]);let l=()=>{let e=o.trim();e&&e!==r&&t(e),a(!1)},u=()=>{s(r),a(!1)},d=Wu[e.type]?.icon??null;return(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-primary/5 px-3 py-1.5 text-xs`,children:[d?(0,Y.jsx)(d,{className:`h-3.5 w-3.5 text-primary`}):null,(0,Y.jsx)(`span`,{className:`rounded bg-primary px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-primary-foreground`,children:`Selected`}),i?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`input`,{ref:c,value:o,onChange:e=>s(e.target.value),onBlur:l,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),l()):e.key===`Escape`&&(e.preventDefault(),u())},className:`flex-1 min-w-0 rounded border bg-background px-2 py-0.5 text-xs outline-none focus:ring-1 focus:ring-primary`}),(0,Y.jsx)(`button`,{type:`button`,onClick:l,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Save title`,children:(0,Y.jsx)(Mt,{className:`h-3.5 w-3.5`})})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`flex-1 min-w-0 truncate text-left font-medium hover:underline`,title:`Click to rename`,children:r||(0,Y.jsx)(`span`,{className:`italic text-muted-foreground`,children:`untitled`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Rename widget`,children:(0,Y.jsx)(ln,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:n,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Clear selection`,children:(0,Y.jsx)(P,{className:`h-3.5 w-3.5`})})]})}var Qu=X.lazy(()=>a(()=>import(`./plugin-report-CH4uZunJ.js`).then(e=>e.t).then(e=>({default:e.ReportRenderer})),__vite__mapDeps([0]),import.meta.url));function $u({draft:e}){let t=p(),n=e,r=typeof n.dataset==`string`&&!!n.dataset,i=n.type===`joined`&&Array.isArray(n.blocks)&&n.blocks.some(e=>typeof e?.dataset==`string`&&!!e.dataset);if(r||i){let r=Array.isArray(n.rows)?n.rows.filter(Boolean):[];return(0,Y.jsx)(Z,{hint:i?`report · joined · ${n.blocks.length} block${n.blocks.length===1?``:`s`}`:`report · dataset "${n.dataset}"${r.length?` · by `+r.join(`, `):``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The Report references a dataset/measure that doesn't resolve, or its config is incomplete.`,children:(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 p-4 text-xs text-muted-foreground`,children:[(0,Y.jsx)(L,{className:`h-4 w-4 animate-spin`}),` Loading report renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 min-h-[200px] max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(Qu,{schema:e,dataSource:t})})})})})}let a=n.type===`joined`;return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Bl,{icon:(0,Y.jsx)(wr,{className:`h-8 w-8`}),title:a?`Add a block to preview this joined report`:`Bind a dataset to preview this report`,description:a?`A joined report stacks dataset-bound blocks. Add a block and bind its dataset + measures in the right panel to start designing.`:`Since the 9.0 single-form cutover a report renders its dataset's measures (values) grouped by dimensions (rows). Choose a Dataset in the right panel to start designing.`})})}var ed=`text/x-objectui-nav`;function td(e){if(e.kind)return String(e.kind);if(e.object||e.objectName)return`object`;if(e.page||e.pageName)return`page`;if(e.dashboard)return`dashboard`;if(e.report)return`report`;if(Array.isArray(e.children)&&e.children.length)return`group`;let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&/^https?:/i.test(t)?`link`:`item`}function nd(e){switch(e){case`object`:return wr;case`page`:return Fe;case`dashboard`:return A;case`report`:return nn;case`link`:return Le;case`group`:return me;default:return rr}}var rd={object:{icon:`text-blue-500`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},page:{icon:`text-violet-500`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},dashboard:{icon:`text-teal-500`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},report:{icon:`text-amber-500`,badge:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-300`},link:{icon:`text-indigo-500`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},group:{icon:`text-slate-500`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},item:{icon:`text-zinc-500`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function id(e){return rd[e]??rd.item}function ad(e,t){let n=e.label??e.title??e.name??e.path;return typeof n==`string`&&n.trim()?n.trim():`Item ${t+1}`}function od(e){let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&t?t:void 0}function sd({draft:e,rootKey:t,onPatch:n,selection:r,onSelectionChange:i}){let a=sa(),o=X.useMemo(()=>{let n=e[t];return Array.isArray(n)?n:[]},[e,t]),s=r&&r.kind===`nav`?r.id:null,[c,l]=X.useState(null),u=X.useCallback(e=>{n&&n({[t]:e})},[n,t]),d=X.useCallback(()=>{if(!n)return;let e=q(`engine.appNav.newItem`,a),r=new Set(o.map(e=>typeof e.id==`string`?e.id:``).filter(Boolean)),s=`nav_item_${o.length+1}`;for(let e=o.length+2;r.has(s);e++)s=`nav_item_${e}`;let c=vi(o,{id:s,type:`object`,label:e});u(c),i?.({kind:`nav`,id:`${t}[${c.length-1}]`,label:e})},[n,o,u,t,i,a]),f=X.useCallback(e=>{if(!n)return;let r=Ti(o,e,null);u(r),s===`${t}[${e}]`&&i?.(null)},[n,o,u,t,s,i]),p=X.useCallback((e,r)=>{if(!n)return;let a={...o[e]??{},label:r},c=Ti(o,e,a);u(c),s===`${t}[${e}]`&&i?.({kind:`nav`,id:`${t}[${e}]`,label:r})},[n,o,u,t,s,i]),m=X.useCallback((e,r)=>{if(!n)return;let a=r;if(e<r&&(a=r-1),a===e)return;let s=_i(o,e,a);u(s),i?.({kind:`nav`,id:`${t}[${a}]`,label:ad(s[a]??{},a)})},[n,o,u,t,i]);return(0,Y.jsxs)(`div`,{className:`rounded-md border bg-card/40`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(`span`,{className:`font-medium uppercase tracking-wide text-muted-foreground`,children:q(`engine.appNav.heading`,a)}),(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px]`,children:[o.length,` `,o.length===1?q(`engine.appNav.itemOne`,a):q(`engine.appNav.itemOther`,a)]})]}),n&&(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded border border-dashed px-2 py-1 text-[11px] text-muted-foreground hover:bg-muted/30 hover:text-foreground`,onClick:d,children:[(0,Y.jsx)(z,{className:`h-3 w-3`}),` `,q(`engine.appNav.addItem`,a)]})]}),(0,Y.jsx)(`div`,{className:`space-y-1.5 p-2`,onDragOver:e=>{n&&e.dataTransfer.types.includes(ed)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},onDrop:e=>{n&&e.dataTransfer.types.includes(ed)&&(e.preventDefault(),c!=null&&(m(c,o.length),l(null)))},children:o.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed px-3 py-4 text-center text-[11px] text-muted-foreground`,children:q(n?`engine.appNav.empty`:`engine.appNav.emptyReadonly`,a)}):o.map((e,r)=>(0,Y.jsx)(cd,{item:e,index:r,depth:0,path:`${t}[${r}]`,selectedId:s,canEdit:!!n,onClick:(e,t)=>i?.({kind:`nav`,id:e,label:t}),onRename:e=>p(r,e),onRemove:()=>f(r),onDragStart:()=>l(r),onDragEnd:()=>l(null),onDropBefore:()=>{c!=null&&(m(c,r),l(null))}},r))})]})}function cd({item:e,index:t,depth:n,path:r,selectedId:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ld,{item:e,index:t,depth:n,path:r,isSelected:i===r,canEdit:a&&n===0,onClick:()=>o(r,ad(e,t)),onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}),Array.isArray(e.children)&&e.children.map((e,t)=>{let s=`${r}.children[${t}]`;return(0,Y.jsx)(cd,{item:e,index:t,depth:n+1,path:s,selectedId:i,canEdit:a,onClick:o,onRename:()=>void 0,onRemove:()=>void 0,onDragStart:()=>void 0,onDragEnd:()=>void 0,onDropBefore:()=>void 0},t)})]})}function ld({item:e,index:t,depth:n,path:r,isSelected:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){let f=sa(),p=td(e),m=nd(p),h=id(p),g=od(e),[_,v]=X.useState(!1),[y,b]=X.useState(ad(e,t)),[x,S]=X.useState(!1),[C,w]=X.useState(null);return X.useEffect(()=>{_||b(ad(e,t))},[e,t,_]),(0,Y.jsxs)(`div`,{className:`relative`,style:{paddingLeft:n*16},children:[C===`before`&&(0,Y.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 -top-0.5 h-0.5 rounded bg-primary`}),(0,Y.jsxs)(`button`,{type:`button`,draggable:a&&!_,onDragStart:e=>{a&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(ed,r),l())},onDragEnd:u,onDragOver:e=>{a&&e.dataTransfer.types.includes(ed)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,w(`before`))},onDragLeave:()=>w(null),onDrop:e=>{a&&e.dataTransfer.types.includes(ed)&&(e.preventDefault(),e.stopPropagation(),w(null),d())},onClick:o,onMouseEnter:()=>S(!0),onMouseLeave:()=>S(!1),"aria-pressed":i,className:`group flex w-full items-center gap-2 rounded-md border bg-card px-2.5 py-2 text-left text-xs transition-colors hover:border-primary/40 ${i?`border-primary ring-1 ring-primary`:`border-border`} ${a&&!_?`cursor-grab active:cursor-grabbing`:``}`,children:[a?(0,Y.jsx)(zr,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/50 group-hover:text-muted-foreground`}):(0,Y.jsx)(`span`,{className:`w-3.5`}),(0,Y.jsx)(m,{className:B(`h-3.5 w-3.5 shrink-0`,h.icon)}),_?(0,Y.jsx)(`input`,{autoFocus:!0,value:y,onChange:e=>b(e.target.value),onClick:e=>e.stopPropagation(),onBlur:()=>{v(!1);let n=y.trim();n&&n!==ad(e,t)&&s(n)},onKeyDown:n=>{n.key===`Enter`?(n.preventDefault(),n.target.blur()):n.key===`Escape`&&(n.preventDefault(),b(ad(e,t)),v(!1))},className:`flex-1 min-w-0 rounded border border-input bg-background px-1.5 py-0.5 text-xs outline-none focus:border-primary`}):(0,Y.jsx)(`span`,{className:`flex-1 min-w-0 truncate font-medium`,onDoubleClick:e=>{a&&(e.stopPropagation(),v(!0))},children:ad(e,t)}),(0,Y.jsx)(U,{variant:`outline`,className:B(`text-[10px] font-medium`,h.badge),children:p}),g&&(0,Y.jsx)(`code`,{className:`ml-0 text-[10px] text-muted-foreground truncate max-w-[10rem]`,children:g}),a&&x&&!_&&(0,Y.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),c()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),c())},className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,"aria-label":q(`engine.appNav.removeItem`,f),children:(0,Y.jsx)(Zt,{className:`h-3 w-3`})})]})]})}function ud(e){return Array.isArray(e)?e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.label??e.title??e.name??e.path??``).trim();if(!t&&!e.children)return null;let n=e.path??e.href??e.route??e.url??void 0,r;e.object||e.objectName?r=`object`:e.page||e.pageName?r=`page`:e.dashboard?r=`dashboard`:e.report?r=`report`:typeof n==`string`&&/^https?:/i.test(n)?r=`link`:Array.isArray(e.children)&&e.children.length&&(r=`group`);let i=Array.isArray(e.children)?ud(e.children):void 0;return{label:t||`(unnamed)`,path:n,kind:r,children:i}}).filter(e=>e!==null):[]}function dd(e){switch(e){case`object`:return wr;case`page`:return Fe;case`dashboard`:return A;case`report`:return nn;default:return rr}}function fd({name:e,draft:t,editing:n,selection:r,onSelectionChange:i,onPatch:a}){let o=String(t.name??e??``),s=t.label??o,c=t.landingRoute??t.landing??t.defaultRoute??`/`,{rootKey:l,navItems:u}=X.useMemo(()=>{let e=[[`nav`,t.nav],[`navigation`,t.navigation],[`tabs`,t.tabs],[`items`,t.items],[`menu`,t.menu]];for(let[t,n]of e)if(Array.isArray(n)&&n.length)return{rootKey:t,navItems:ud(n)};return{rootKey:null,navItems:[]}},[t]),d=l??`navigation`,f=!!(n&&i),p=f&&!!a,m=r&&r.kind===`nav`?r.id:null,h=f?(e,t)=>i({kind:`nav`,id:e,label:t.label}):void 0,g=o?`/apps/${encodeURIComponent(o)}/`:null;return(0,Y.jsx)(Z,{hint:`app`,toolbar:g&&(0,Y.jsxs)(`a`,{href:g,target:`_blank`,rel:`noreferrer`,className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,title:`Open this app in a new tab`,children:[`Open `,(0,Y.jsx)(Xt,{className:`h-3 w-3`})]}),children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:String(s)}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono mt-0.5`,children:o}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[`Landing: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:String(c)})]})]}),f?(0,Y.jsx)(sd,{draft:t,rootKey:d,onPatch:p?a:void 0,selection:r??null,onSelectionChange:i}):u.length===0?(0,Y.jsxs)(zl,{children:[`No top-level nav items. Add `,(0,Y.jsx)(`code`,{children:`nav`}),` / `,(0,Y.jsx)(`code`,{children:`tabs`}),` entries in the Form tab to populate the app's navigation.`]}):(0,Y.jsx)(`div`,{className:`border rounded divide-y`,children:u.map((e,t)=>(0,Y.jsx)(pd,{item:e,appName:o,depth:0,path:`${l}[${t}]`,onSelect:h,selectedId:m},t))})]})})})}function pd({item:e,appName:t,depth:n,path:r,onSelect:i,selectedId:a}){let o=dd(e.kind),s=md(t,e.path);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-xs hover:bg-accent/40 ${i?`cursor-pointer`:``} ${a===r?`bg-primary/5 ring-1 ring-primary`:``}`,style:{paddingLeft:`${12+n*16}px`},onClick:i?t=>{t.stopPropagation(),i(r,e)}:void 0,children:[(0,Y.jsx)(o,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium truncate`,children:e.label}),e.kind&&(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider opacity-60`,children:e.kind}),s&&(0,Y.jsxs)(`a`,{href:s,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`ml-auto font-mono text-[10px] text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,children:[e.path,` `,(0,Y.jsx)(Xt,{className:`h-3 w-3`})]})]}),e.children?.map((e,o)=>(0,Y.jsx)(pd,{item:e,appName:t,depth:n+1,path:`${r}.children[${o}]`,onSelect:i,selectedId:a},o))]})}function md(e,t){if(!t)return null;if(/^https?:/i.test(t))return t;if(!e)return null;let n=t.startsWith(`/`)?t.slice(1):t;return`/apps/${encodeURIComponent(e)}/${n}`}function hd(e){let{type:t,locale:n}=e;switch(t){case`text`:case`password`:return(0,Y.jsx)(gd,{...e,icon:t===`password`?(0,Y.jsx)(Pt,{className:`h-3.5 w-3.5`}):void 0});case`email`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(In,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`name@example.com`});case`url`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(hn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`https://…`});case`phone`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(Cr,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`+1 555 …`});case`number`:case`currency`:case`percent`:case`autonumber`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(ar,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`0`});case`date`:case`datetime`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(N,{className:`h-3.5 w-3.5`}),placeholder:q(`designer.stub.pickDate`,n)});case`time`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(Ln,{className:`h-3.5 w-3.5`}),placeholder:`hh:mm`});case`textarea`:case`markdown`:case`html`:case`richtext`:case`json`:case`code`:return(0,Y.jsx)(_d,{...e,mono:t===`json`||t===`code`});case`boolean`:case`toggle`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(_n,{disabled:!0}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.placeholder??q(`designer.stub.off`,n)})]});case`select`:case`radio`:return(0,Y.jsx)(vd,{...e,single:!0});case`multiselect`:case`checkboxes`:case`tags`:return(0,Y.jsx)(vd,{...e,single:!1});case`lookup`:case`master_detail`:case`tree`:return(0,Y.jsx)(yd,{...e});case`image`:case`avatar`:return(0,Y.jsx)(bd,{icon:(0,Y.jsx)(Fr,{className:`h-4 w-4`}),label:q(t===`avatar`?`designer.stub.uploadAvatar`:`designer.stub.uploadImage`,n)});case`file`:case`video`:case`audio`:case`signature`:return(0,Y.jsx)(bd,{icon:(0,Y.jsx)(Tr,{className:`h-4 w-4`}),label:J(`designer.stub.upload`,n,{type:t})});case`qrcode`:return(0,Y.jsx)(bd,{icon:(0,Y.jsx)(Tr,{className:`h-4 w-4`}),label:q(`designer.stub.qrcode`,n)});case`color`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-6 w-6 rounded border`,style:{background:`#3b82f6`}}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`#3b82f6`}),(0,Y.jsx)(an,{className:`h-3.5 w-3.5 text-muted-foreground`})]});case`rating`:return(0,Y.jsx)(`div`,{className:`flex items-center gap-0.5 h-8`,children:[0,1,2,3,4].map(e=>(0,Y.jsx)(Pr,{className:`h-4 w-4 `+(e<3?`fill-amber-400 text-amber-400`:`text-muted-foreground/40`)},e))});case`slider`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 h-1.5 rounded bg-muted`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-2/5 rounded bg-primary`}),(0,Y.jsx)(`div`,{className:`absolute h-3 w-3 -top-[3px] left-[40%] rounded-full border-2 border-primary bg-background`})]}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`40`})]});case`progress`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`div`,{className:`relative flex-1 h-2 rounded bg-muted`,children:(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-3/5 rounded bg-emerald-500`})}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`60%`})]});case`location`:return(0,Y.jsx)(gd,{...e,icon:(0,Y.jsx)(qe,{className:`h-3.5 w-3.5`}),placeholder:q(`designer.stub.latLng`,n)});case`address`:return(0,Y.jsx)(_d,{...e,placeholder:e.placeholder??`Street
12
12
  City, State ZIP
13
13
  Country`});case`formula`:case`summary`:return(0,Y.jsx)(`div`,{className:`h-8 px-2 flex items-center text-xs font-mono bg-muted/40 border rounded text-muted-foreground`,children:e.formula?`ƒ ${e.formula}`:`ƒ ${q(`designer.stub.computed`,n)}`});case`composite`:return(0,Y.jsx)(`div`,{className:`p-2 border-dashed border-2 rounded text-[11px] text-muted-foreground italic`,children:q(`designer.stub.composite`,n)});case`repeater`:return(0,Y.jsx)(`div`,{className:`p-2 border-dashed border-2 rounded text-[11px] text-muted-foreground italic`,children:q(`designer.stub.repeater`,n)});case`vector`:return(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center text-xs font-mono bg-muted/40 border rounded text-muted-foreground`,children:[`[0.124, 0.337, …] `,e.placeholder?`(${e.placeholder})`:``]});default:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(V,{disabled:!0,placeholder:e.placeholder??`(${t})`,className:`h-8 text-sm`}),(0,Y.jsx)(U,{variant:`outline`,className:`text-[10px]`,children:t})]})}}function gd({placeholder:e,icon:t}){return(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(V,{disabled:!0,placeholder:e??``,className:`h-8 text-sm `+(t?`pl-8`:``)}),t&&(0,Y.jsx)(`div`,{className:`absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground`,children:t})]})}function _d({placeholder:e,mono:t}){return(0,Y.jsx)(`textarea`,{disabled:!0,placeholder:e??``,className:`w-full min-h-[60px] text-sm rounded-md border bg-background px-2 py-1.5 disabled:opacity-100 `+(t?`font-mono text-xs`:``)})}function vd({options:e,placeholder:t,single:n,locale:r}){let i=e??[],a=i.slice(0,n?1:3).filter(e=>e.value||e.label);return n?(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center justify-between text-sm border rounded bg-background text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:a[0]?.label||a[0]?.value||t||q(`designer.stub.select`,r)}),(0,Y.jsx)(Me,{className:`h-3.5 w-3.5 shrink-0`})]}):(0,Y.jsxs)(`div`,{className:`min-h-8 px-1.5 py-1 flex items-center flex-wrap gap-1 border rounded bg-background`,children:[a.length===0?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground px-1`,children:t||q(`designer.stub.pickMulti`,r)}):a.map((e,t)=>(0,Y.jsx)(U,{variant:`secondary`,className:`text-[10px]`,children:e.label||e.value},t)),i.length>a.length&&(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`+`,i.length-a.length]})]})}function yd({referenceTo:e,placeholder:t,locale:n}){let r=e?Fi.lookup:null;return(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center gap-2 border rounded bg-background text-sm text-muted-foreground`,children:[(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate flex-1`,children:t||(e?J(`designer.stub.searchRef`,n,{ref:e}):q(`designer.stub.chooseRelated`,n))}),e&&(0,Y.jsxs)(U,{variant:`outline`,className:`text-[10px] shrink-0`,children:[`→ `,e]}),!e&&(0,Y.jsx)(Kn,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}),r&&null]})}function bd({icon:e,label:t}){return(0,Y.jsxs)(`div`,{className:`h-16 w-full border-2 border-dashed rounded flex flex-col items-center justify-center gap-1 text-muted-foreground bg-muted/20`,children:[e,(0,Y.jsx)(`span`,{className:`text-[11px]`,children:t})]})}var xd=e=>(e??``).toLowerCase().startsWith(`zh`),Sd=(e,t)=>e?xd(t)?e.labelZh:e.label:void 0,Cd=(e,t)=>(xd(t)?Hi:Pi)[e];function wd({objectName:e,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o}){let s=!r,{enabled:c}=da(),l=X.useMemo(()=>Si(t.fields),[t]),u=X.useMemo(()=>n?Ci(n.fields,t.fields):null,[n,t]),d=u?u.counts.added+u.counts.changed+u.counts.removed:0,[f,p]=X.useState(!1);X.useEffect(()=>{f&&d===0&&p(!1)},[f,d]);let m=f&&d>0,h=e=>m?u?.byName[e]?.status:void 0,g=e=>m?u?.byName[e]?.changedKeys??[]:[],_=X.useMemo(()=>Di(t.fieldGroups),[t]),v=_.length>0,y=X.useMemo(()=>wi(l,_,{includeEmptyDeclared:!s}),[l,_,s]),[b,x]=X.useState({}),S=e=>e??`__ungrouped__`,C=X.useCallback(e=>{let t=e??`__ungrouped__`;x(e=>({...e,[t]:!e[t]}))},[]),w=y.length>0&&y.every(e=>b[S(e.key)]),T=X.useCallback(e=>{x(()=>{let t={};for(let n of y)t[S(n.key)]=e;return t})},[y]),E=i?.kind===`field`?String(i.id):null,D=l.entries.filter(e=>!!e.def.required).length,O=X.useCallback(e=>{a&&a({kind:`field`,id:e.name,label:typeof e.def.label==`string`?e.def.label:e.name})},[a]),[k,A]=X.useState(()=>new Set),j=X.useRef(null),M=X.useMemo(()=>y.flatMap(e=>e.entries.map(e=>e.name)),[y]);X.useEffect(()=>{A(e=>{if(e.size===0)return e;let t=new Set([...e].filter(e=>l.entries.some(t=>t.name===e)));return t.size===e.size?e:t})},[l]);let ee=X.useCallback((e,t)=>{let n=e.name;if(!s&&t&&(t.metaKey||t.ctrlKey)){A(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),j.current=n;return}if(!s&&t&&t.shiftKey&&j.current&&j.current!==n){let e=M.indexOf(j.current),t=M.indexOf(n);if(e>=0&&t>=0){let[n,r]=e<t?[e,t]:[t,e];A(new Set(M.slice(n,r+1)));return}}k.size&&A(new Set),j.current=n,O(e)},[s,M,k,O]),te=X.useCallback(()=>A(new Set),[]),N=X.useCallback(()=>{if(!r||k.size===0)return;let e=l.entries.filter(e=>!k.has(e.name));r({fields:Ai({shape:l.shape,entries:e})}),E&&k.has(E)&&a?.(null),A(new Set)},[r,k,l,E,a]),ne=X.useCallback(e=>{if(!r||k.size===0)return;let t=l.entries.map(t=>k.has(t.name)?{name:t.name,def:{...t.def,group:e??void 0}}:t);r({fields:Ai({shape:l.shape,entries:t})})},[r,k,l]),re=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.map(e=>e.name),i=e===`select`?`status`:e,o=1,s=i;for(;n.includes(s);)o+=1,s=`${i}_${o}`;let c=xi(s,e);t&&(c.def={...c.def,group:t});let u=l.entries.length;if(t){for(let e=l.entries.length-1;e>=0;--e)if(l.entries[e].def.group===t){u=e+1;break}}let d=l.entries.slice();d.splice(u,0,c),r({fields:Ai({shape:l.shape,entries:d})}),a?.({kind:`field`,id:s,label:String(c.def.label??s)})},[r,a,l]),P=X.useCallback(()=>{if(!r)return;let e=J(`designer.canvas.sectionN`,o,{n:_.length+1}),t=hi(_,e),n=t[t.length-1];r({fieldGroups:t}),x(e=>({...e,[n.key]:!1}))},[r,_,o]),ie=X.useCallback((e,t)=>{r&&r({fieldGroups:gi(_,e,t)})},[r,_]),ae=X.useCallback(e=>{if(!r)return;let t=Bi(l,e);r({fieldGroups:ea(_,e),fields:Ai(t)})},[r,_,l]),F=X.useCallback((e,t)=>{r&&r({fieldGroups:yi(_,e,t)})},[r,_]),oe=X.useCallback((e,t,n)=>{if(!r||e===t)return;let i=l.entries.slice(),a=i.findIndex(t=>t.name===e);if(a<0)return;let[o]=i.splice(a,1),s=i.findIndex(e=>e.name===t),c=s>=0?i[s]:void 0;if(c){let e=typeof c.def.group==`string`?c.def.group:void 0;e!==(typeof o.def.group==`string`?o.def.group:void 0)&&(o.def={...o.def,group:e})}s<0?i.push(o):i.splice(n===`before`?s:s+1,0,o),r({fields:Ai({shape:l.shape,entries:i})})},[r,l]),se=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.slice(),i=n.findIndex(t=>t.name===e);if(i<0)return;let a=typeof n[i].def.group==`string`?n[i].def.group:null,o=i+t;for(;o>=0&&o<n.length&&(typeof n[o].def.group==`string`?n[o].def.group:null)!==a;)o+=t;if(o<0||o>=n.length)return;let s=n[i];n[i]=n[o],n[o]=s,r({fields:Ai({shape:l.shape,entries:n})})},[r,l]),ce=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.slice(),i=n.findIndex(t=>t.name===e);if(i<0)return;let[a]=n.splice(i,1);if((typeof a.def.group==`string`?a.def.group:null)===t){n.splice(i,0,a);return}a.def={...a.def,group:t??void 0};let o=n.length;for(let e=n.length-1;e>=0;--e)if((typeof n[e].def.group==`string`?n[e].def.group:null)===t){o=e+1;break}n.splice(o,0,a),r({fields:Ai({shape:l.shape,entries:n})})},[r,l]),le=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.map(n=>n.name===e?{name:e,def:{...n.def,label:t||void 0}}:n);r({fields:Ai({shape:l.shape,entries:n})})},[r,l]),ue=X.useCallback(e=>{e.target===e.currentTarget&&E&&a?.(null)},[a,E]),de=l.entries.length===0,fe=v||y.length>1;return(0,Y.jsxs)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:ue,"data-object-name":e,children:[!s&&k.size>0&&(0,Y.jsx)(Ed,{count:k.size,groups:_,onMoveToGroup:ne,onDelete:N,onClear:te,locale:o}),(0,Y.jsxs)(`div`,{className:`mx-auto max-w-3xl px-6 py-6 space-y-4`,onClick:ue,children:[!de&&(0,Y.jsx)(Td,{fieldCount:l.entries.length,requiredCount:D,sectionCount:_.length,allCollapsed:w,onToggleAll:fe?()=>T(!w):void 0,reviewAvailable:d>0,reviewing:m,diffCounts:u?.counts,onToggleReview:()=>p(e=>!e),locale:o}),de?(0,Y.jsx)(jd,{onAdd:s?void 0:re,locale:o,aiEnabled:c}):(0,Y.jsx)(`div`,{className:`space-y-5`,children:y.map(e=>{let t=e.key?_.findIndex(t=>t.key===e.key):-1;return(0,Y.jsxs)(Dd,{groupKey:e.key,label:e.key===null?q(`designer.canvas.ungrouped`,o):e.label,count:e.entries.length,showHeader:fe,collapsed:!!b[S(e.key)],onToggleCollapse:()=>C(e.key),readOnly:s,locale:o,canMoveUp:t>0,canMoveDown:t>=0&&t<_.length-1,onRename:e.key?t=>ie(e.key,t):void 0,onRemove:e.key?()=>ae(e.key):void 0,onMove:e.key?t=>F(e.key,t):void 0,onAddField:s?void 0:t=>re(t,e.key),onDropField:s?void 0:ce,children:[e.entries.map(e=>(0,Y.jsx)(Ad,{entry:e,selected:e.name===E,multiSelected:k.has(e.name),diffStatus:h(e.name),changedKeys:g(e.name),readOnly:s,locale:o,onClick:t=>ee(e,t),onReorder:s?void 0:oe,onRenameLabel:s?void 0:le,onMoveOffset:s?void 0:t=>se(e.name,t)},e.name)),e.entries.length===0&&(0,Y.jsx)(`div`,{className:`rounded-md border border-dashed bg-background/40 px-3 py-4 text-center text-[11px] text-muted-foreground`,children:q(s?`designer.canvas.emptySection`:`designer.canvas.dropHint`,o)})]},e.key??`__ungrouped__`)})}),m&&u&&u.removed.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-destructive/80 pl-1`,children:q(`designer.canvas.diffRemoved`,o)}),u.removed.map(e=>(0,Y.jsx)(kd,{entry:e,locale:o},e.name))]}),!de&&!s&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(Md,{onPick:e=>re(e),locale:o}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-muted-foreground hover:text-foreground`,onClick:P,children:[(0,Y.jsx)(Qn,{className:`h-3.5 w-3.5`}),q(`designer.canvas.addSection`,o)]}),c&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,className:`gap-1.5 ml-auto text-primary/80 hover:text-primary`,onClick:()=>ni(),children:[(0,Y.jsx)(sn,{className:`h-3.5 w-3.5`}),q(`designer.canvas.askAi`,o)]})]})]})]})}function Td({fieldCount:e,requiredCount:t,sectionCount:n,allCollapsed:r,onToggleAll:i,reviewAvailable:a,reviewing:o,diffCounts:s,onToggleReview:c,locale:l}){return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:o&&s?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`font-medium text-emerald-600 dark:text-emerald-400`,children:s.added}),` `,q(`designer.canvas.diffAdded`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-amber-600 dark:text-amber-400`,children:s.changed}),` `,q(`designer.canvas.diffChanged`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-destructive`,children:s.removed}),` `,q(`designer.canvas.diffRemoved`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/40 normal-case ml-1`,children:q(`designer.canvas.reviewVsPublished`,l)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:e}),` `,q(`designer.canvas.fields`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:t}),` `,q(`designer.canvas.required`,l),n>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:n}),` `,q(`designer.canvas.sections`,l)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[a&&c&&(0,Y.jsxs)(`button`,{type:`button`,onClick:c,className:B(`inline-flex items-center gap-1 rounded px-1.5 py-0.5 transition-colors`,o?`bg-primary/10 text-primary hover:bg-primary/15`:`hover:bg-accent hover:text-foreground`),children:[(0,Y.jsx)(Ct,{className:`h-3 w-3`}),q(o?`designer.canvas.reviewExit`:`designer.canvas.reviewChanges`,l)]}),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:i,className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 hover:bg-accent hover:text-foreground transition-colors`,children:[r?(0,Y.jsx)(Ie,{className:`h-3 w-3`}):(0,Y.jsx)(xt,{className:`h-3 w-3`}),q(r?`designer.canvas.expandAll`:`designer.canvas.collapseAll`,l)]})]})]})}function Ed({count:e,groups:t,onMoveToGroup:n,onDelete:r,onClear:i,locale:a}){let[o,s]=X.useState(!1);return(0,Y.jsxs)(`div`,{className:`sticky top-0 z-20 flex items-center gap-2 border-b border-primary/20 bg-primary/10 backdrop-blur px-6 py-2 text-sm`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:J(`designer.canvas.bulkSelected`,a,{n:e})}),(0,Y.jsx)(`span`,{className:`text-muted-foreground text-[11px] hidden md:inline`,children:q(`designer.canvas.bulkHint`,a)}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[t.length>0&&(0,Y.jsxs)(pr,{open:o,onOpenChange:s,children:[(0,Y.jsx)(yn,{asChild:!0,children:(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,className:`h-7 gap-1.5 bg-background/70`,children:[(0,Y.jsx)(qn,{className:`h-3.5 w-3.5`}),q(`designer.canvas.bulkMoveTo`,a),(0,Y.jsx)(Me,{className:`h-3 w-3`})]})}),(0,Y.jsxs)(Dr,{align:`end`,className:`w-52 p-1 max-h-[300px] overflow-auto`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{n(null),s(!1)},className:`w-full text-left px-2 py-1.5 rounded text-sm hover:bg-accent`,children:q(`designer.canvas.ungrouped`,a)}),t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{n(e.key),s(!1)},className:`w-full text-left px-2 py-1.5 rounded text-sm hover:bg-accent truncate`,children:e.label||e.key},e.key))]})]}),(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,className:`h-7 gap-1.5 bg-background/70 text-destructive hover:text-destructive`,onClick:r,children:[(0,Y.jsx)(Zt,{className:`h-3.5 w-3.5`}),q(`designer.canvas.bulkDelete`,a)]}),(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,className:`h-7 gap-1.5`,onClick:i,children:[(0,Y.jsx)(P,{className:`h-3.5 w-3.5`}),q(`designer.canvas.bulkClear`,a)]})]})]})}function Dd({groupKey:e,label:t,count:n,showHeader:r,collapsed:i,onToggleCollapse:a,readOnly:o,locale:s,canMoveUp:c,canMoveDown:l,onRename:u,onRemove:d,onMove:f,onAddField:p,onDropField:m,children:h}){let[g,_]=X.useState(!1);return(0,Y.jsxs)(`section`,{className:B(`space-y-2.5 rounded-md transition-colors`,g&&`bg-primary/5 ring-1 ring-primary/30 -mx-1 px-1 py-1`),onDragOver:e=>{if(!m)return;let t=e.dataTransfer.types;!t||!Array.from(t).includes(`text/x-objectui-field`)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,_(!0))},onDragLeave:e=>{e.currentTarget===e.target&&_(!1)},onDrop:t=>{if(!m)return;if(t.defaultPrevented){_(!1);return}t.preventDefault();let n=t.dataTransfer.getData(`text/x-objectui-field`);_(!1),n&&m(n,e)},children:[r&&(0,Y.jsx)(Od,{label:t,count:n,collapsed:i,onToggleCollapse:a,readOnly:o,locale:s,canMoveUp:c,canMoveDown:l,dropActive:g,onRename:u,onRemove:d,onMove:f,onAddField:p}),!i&&(0,Y.jsx)(`div`,{className:`space-y-2.5`,children:h})]})}function Od({label:e,count:t,collapsed:n,onToggleCollapse:r,readOnly:i,locale:a,canMoveUp:o,canMoveDown:s,dropActive:c,onRename:l,onRemove:u,onMove:d,onAddField:f}){let[p,m]=X.useState(!1),[h,g]=X.useState(e);X.useEffect(()=>{g(e)},[e]);let _=()=>{if(!l){m(!1);return}let t=h.trim();t&&t!==e&&l(t),m(!1)},v=n?oe:Me;return(0,Y.jsxs)(`div`,{className:`group/sec flex items-center gap-1.5 pl-0.5 min-h-[24px]`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:r,className:`flex items-center justify-center h-5 w-5 rounded text-muted-foreground hover:bg-accent hover:text-foreground transition-colors shrink-0`,"aria-label":q(n?`designer.canvas.expandSection`:`designer.canvas.collapseSection`,a),"aria-expanded":!n,children:(0,Y.jsx)(v,{className:`h-3.5 w-3.5`})}),p?(0,Y.jsx)(`input`,{autoFocus:!0,value:h,onChange:e=>g(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.stopPropagation(),t.key===`Enter`?(t.preventDefault(),_()):t.key===`Escape`&&(t.preventDefault(),g(e),m(!1))},onBlur:_,className:`text-[11px] font-medium uppercase tracking-wider px-1 py-0.5 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1 max-w-[220px]`}):(0,Y.jsx)(`span`,{className:B(`text-[11px] font-medium uppercase tracking-wider text-muted-foreground truncate`,l&&`cursor-text hover:text-foreground`),onDoubleClick:l?()=>{g(e),m(!0)}:void 0,title:l?q(`designer.canvas.renameHint`,a):void 0,children:e}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground/60 tabular-nums shrink-0`,children:t}),c&&(0,Y.jsx)(`span`,{className:`text-primary normal-case text-[10px] font-normal`,children:q(`designer.canvas.dropToAssign`,a)}),!i&&(d||u||f)&&(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-0.5 opacity-0 group-hover/sec:opacity-100 focus-within:opacity-100 transition-opacity`,children:[f&&(0,Y.jsx)(Md,{onPick:f,compact:!0,locale:a}),d&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>d(-1),disabled:!o,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30 disabled:pointer-events-none`,"aria-label":q(`designer.canvas.moveSectionUp`,a),children:(0,Y.jsx)(Rr,{className:`h-3 w-3`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>d(1),disabled:!s,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30 disabled:pointer-events-none`,"aria-label":q(`designer.canvas.moveSectionDown`,a),children:(0,Y.jsx)(Hr,{className:`h-3 w-3`})})]}),u&&(0,Y.jsx)(`button`,{type:`button`,onClick:u,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,"aria-label":q(`designer.canvas.removeSection`,a),title:q(`designer.canvas.removeSectionHint`,a),children:(0,Y.jsx)(Zt,{className:`h-3 w-3`})})]})]})}function kd({entry:e,locale:t}){let n=e.def,r=Fi[typeof n.type==`string`?n.type:`text`]?.Icon,i=typeof n.label==`string`?n.label:e.name;return(0,Y.jsx)(`div`,{className:`rounded-md border border-dashed border-destructive/30 bg-destructive/[0.03] px-3.5 py-2.5 opacity-80`,children:(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[r&&(0,Y.jsx)(r,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/50`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate line-through text-muted-foreground`,children:i}),(0,Y.jsx)(`code`,{className:`text-[10px] text-muted-foreground/60 font-mono truncate line-through`,children:e.name})]}),(0,Y.jsx)(U,{className:`text-[10px] font-medium border-transparent bg-destructive/15 text-destructive shrink-0`,children:q(`designer.canvas.diffRemoved`,t)})]})})}function Ad({entry:e,selected:t,multiSelected:n,diffStatus:r,changedKeys:i,readOnly:a,locale:o,onClick:s,onReorder:c,onRenameLabel:l,onMoveOffset:u}){let d=e.def,f=typeof d.type==`string`?d.type:`text`,p=Fi[f],m=p?.Icon,h=Xi[p?.category??`advanced`],g=typeof d.label==`string`?d.label:e.name,_=!!d.required,v=typeof d.description==`string`?d.description:null,y=Array.isArray(d.options)?d.options.map(e=>({value:String(e.value??``),label:typeof e.label==`string`?e.label:void 0})):void 0,b=typeof d.reference==`string`?d.reference:void 0,x=typeof d.formula==`string`?d.formula:void 0,S=typeof d.placeholder==`string`?d.placeholder:void 0,[C,w]=X.useState(null),T=!!c,[E,D]=X.useState(!1),[O,k]=X.useState(g);X.useEffect(()=>{k(g)},[g]);let A=e=>{l&&(e.preventDefault(),e.stopPropagation(),k(g),D(!0))},j=()=>{if(!l){D(!1);return}let t=O.trim();t&&t!==g&&l(e.name,t),D(!1)},M=()=>{k(g),D(!1)};return(0,Y.jsxs)(`div`,{className:B(`relative`,C===`before`&&`pt-1.5`),onDragOver:e=>{if(!T)return;let t=e.dataTransfer.types;if(!t||!Array.from(t).includes(`text/x-objectui-field`))return;e.preventDefault(),e.dataTransfer.dropEffect=`move`;let n=e.currentTarget.getBoundingClientRect(),r=e.clientY-n.top<n.height/2?`before`:`after`;w(r)},onDragLeave:()=>w(null),onDrop:t=>{if(!c)return;t.preventDefault(),t.stopPropagation();let n=t.dataTransfer.getData(`text/x-objectui-field`);w(null),n&&n!==e.name&&c(n,e.name,C??`before`)},children:[C===`before`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -top-0.5 h-0.5 bg-primary rounded-full`}),(0,Y.jsxs)(`div`,{role:`button`,tabIndex:a?-1:0,onClick:s,onKeyDown:e=>{if(e.target===e.currentTarget){if(e.altKey&&(e.key===`ArrowUp`||e.key===`ArrowDown`)){u&&(e.preventDefault(),u(e.key===`ArrowUp`?-1:1));return}(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),s?.())}},draggable:T,onDragStart:t=>{t.dataTransfer.setData(`text/x-objectui-field`,e.name),t.dataTransfer.effectAllowed=`move`},className:B(`group block w-full text-left rounded-md border bg-card px-3.5 py-2.5 transition-colors`,`hover:border-primary/40 hover:bg-card outline-none focus-visible:ring-2 focus-visible:ring-primary/40`,t?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`,n&&`border-primary/60 ring-2 ring-primary/40 bg-primary/[0.04]`,r===`added`&&`border-l-[3px] border-l-emerald-500`,r===`changed`&&`border-l-[3px] border-l-amber-500`,a&&`cursor-default`,T&&`cursor-grab active:cursor-grabbing`),"aria-pressed":t||n,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[n&&(0,Y.jsx)(zn,{className:`h-3.5 w-3.5 text-primary shrink-0`,"aria-hidden":`true`}),T&&!n&&(0,Y.jsx)(zr,{className:`h-3.5 w-3.5 text-muted-foreground/40 shrink-0 group-hover:text-muted-foreground/80`,"aria-hidden":`true`}),m&&(0,Y.jsx)(m,{className:B(`h-3.5 w-3.5 shrink-0`,h.icon)}),E?(0,Y.jsx)(`input`,{autoFocus:!0,value:O,onChange:e=>k(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(e.preventDefault(),j()):e.key===`Escape`&&(e.preventDefault(),M())},onBlur:j,className:`text-sm font-medium px-1 py-0.5 -mx-1 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1`}):(0,Y.jsx)(`span`,{className:B(`text-sm font-medium truncate`,l&&`cursor-text`),onDoubleClick:A,title:l?q(`designer.canvas.renameHint`,o):void 0,children:g}),_&&(0,Y.jsx)(`span`,{className:`text-destructive text-sm`,children:`*`}),(0,Y.jsx)(`code`,{className:`text-[10px] text-muted-foreground/70 font-mono truncate`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[r===`added`&&(0,Y.jsx)(U,{className:`text-[10px] font-medium border-transparent bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`,children:q(`designer.canvas.diffAdded`,o)}),r===`changed`&&(0,Y.jsx)(U,{className:`text-[10px] font-medium border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-300`,title:i&&i.length?J(`designer.canvas.diffChangedKeys`,o,{keys:i.join(`, `)}):void 0,children:q(`designer.canvas.diffChanged`,o)}),(0,Y.jsx)(U,{variant:`outline`,className:B(`text-[10px] font-medium`,h.badge),children:Sd(p,o)??f})]})]}),v&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground mb-1.5 line-clamp-1`,children:v}),(0,Y.jsx)(hd,{type:f,label:g,placeholder:S,options:y,referenceTo:b,formula:x,locale:o})]}),C===`after`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -bottom-1 h-0.5 bg-primary rounded-full`})]})}function jd({onAdd:e,locale:t,aiEnabled:n}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed bg-background py-16 px-6 text-center space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:q(`designer.canvas.noFields`,t)}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:q(`designer.canvas.noFieldsHint`,t)}),e&&(0,Y.jsxs)(`div`,{className:`pt-2 flex items-center justify-center gap-2`,children:[(0,Y.jsx)(Md,{onPick:e,locale:t}),n&&(0,Y.jsxs)(I,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-primary/80 hover:text-primary`,onClick:()=>ni(),children:[(0,Y.jsx)(sn,{className:`h-3.5 w-3.5`}),q(`designer.canvas.askAiGenerate`,t)]})]})]})}function Md({onPick:e,compact:t,locale:n}){let[r,i]=X.useState(!1),[a,o]=X.useState(``),s=a.trim().toLowerCase(),c=X.useMemo(()=>s?Ii.map(e=>({category:e.category,types:e.types.filter(e=>{let t=Fi[e];return e.includes(s)||t.label.toLowerCase().includes(s)||t.labelZh.includes(a.trim())})})).filter(e=>e.types.length>0):Ii,[s,a]);return(0,Y.jsxs)(pr,{open:r,onOpenChange:e=>{i(e),e||o(``)},children:[(0,Y.jsx)(yn,{asChild:!0,children:t?(0,Y.jsx)(`button`,{type:`button`,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground`,"aria-label":q(`designer.canvas.addFieldToSection`,n),title:q(`designer.canvas.addFieldToSection`,n),children:(0,Y.jsx)(z,{className:`h-3 w-3`})}):(0,Y.jsxs)(I,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5`}),q(`designer.canvas.addField`,n)]})}),(0,Y.jsxs)(Dr,{align:`start`,className:`w-[320px] p-0 max-h-[480px] overflow-hidden flex flex-col`,children:[(0,Y.jsx)(`div`,{className:`p-2 border-b`,children:(0,Y.jsx)(`input`,{autoFocus:!0,value:a,onChange:e=>o(e.target.value),placeholder:q(`designer.canvas.searchFieldType`,n),className:`h-7 w-full px-2 text-sm border rounded bg-background outline-none focus:ring-1 focus:ring-primary`})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto p-1`,children:c.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground p-4 text-center`,children:q(`designer.canvas.noMatchingTypes`,n)}):c.map(t=>(0,Y.jsxs)(`div`,{className:`mb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground px-2 pt-2 pb-1`,children:Cd(t.category,n)}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-0.5`,children:t.types.map(t=>{let r=Fi[t],a=r.Icon;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{e(t),i(!1),o(``)},className:`flex items-center gap-2 px-2 py-1.5 rounded text-left text-xs hover:bg-accent`,children:[(0,Y.jsx)(a,{className:B(`h-3.5 w-3.5 shrink-0`,Xi[r.category].icon)}),(0,Y.jsx)(`span`,{className:`truncate`,children:Sd(r,n)})]},t)})})]},t.category))})]})]})}function Nd({name:e,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o}){let s=String(t.name??e??``);return s?(0,Y.jsx)(Z,{hint:`object · designer`,children:(0,Y.jsx)(Q,{fallbackHint:`The form designer couldn't be rendered. Check the Form tab.`,children:(0,Y.jsx)(wd,{objectName:s,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o})})}):(0,Y.jsx)(Z,{hint:`object`,children:(0,Y.jsx)(zl,{children:q(`designer.canvas.nameToStart`,o)})})}function Pd(e){let t=new Set;for(let n of e.matchAll(/\{\{\s*([a-zA-Z_][\w.]*)\s*\}\}/g))t.add(n[1]);for(let n of e.matchAll(/\$\{\s*([a-zA-Z_][\w.]*)\s*\}/g))t.add(n[1]);return Array.from(t).sort()}function Fd(e,t){return t[e]??``}function Id(e,t){return e.replace(/\{\{\s*([a-zA-Z_][\w.]*)\s*\}\}/g,(e,n)=>Fd(n,t)).replace(/\$\{\s*([a-zA-Z_][\w.]*)\s*\}/g,(e,n)=>Fd(n,t))}function Ld({draft:e}){let t=String(e.subject??``),n=String(e.from??e.fromAddress??``),r=String(e.to??``),i=String(e.bodyHtml??e.html??e.body??``),a=String(e.bodyText??e.text??``),o=X.useMemo(()=>{let e=new Set;for(let n of Pd(t))e.add(n);for(let t of Pd(i))e.add(t);for(let t of Pd(a))e.add(t);return Array.from(e).sort()},[t,i,a]),[s,c]=X.useState({}),l=Id(t,s),u=`<!doctype html><html><head><meta charset="utf-8"><style>