@objectstack/console 11.6.0 → 11.7.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 (27) hide show
  1. package/dist/assets/{AdapterProvider-cQNLWqAj.js → AdapterProvider-DvWb2IeS.js} +1 -1
  2. package/dist/assets/{ApiConsolePage-BNrBc-Od.js → ApiConsolePage-C5gnskHZ.js} +1 -1
  3. package/dist/assets/{AppDocsIndex-BL5bgCSE.js → AppDocsIndex-DNt53Oi9.js} +1 -1
  4. package/dist/assets/{AppManagementPage-BPD202Gk.js → AppManagementPage-Cy8KizoY.js} +1 -1
  5. package/dist/assets/{ConsoleFloatingChatbot-CKCsvdjM.js → ConsoleFloatingChatbot-ChPZiQGQ.js} +1 -1
  6. package/dist/assets/{DashboardView-B6lZBdnt.js → DashboardView-CjTWewIf.js} +1 -1
  7. package/dist/assets/{DashboardWidgetInspector-CnaDfNnP.js → DashboardWidgetInspector-BhYevZBF.js} +1 -1
  8. package/dist/assets/{FlowRunsPage-D8P2EBn0.js → FlowRunsPage-CaFZwtCv.js} +1 -1
  9. package/dist/assets/{InterfaceListPage-Blv6QsRk.js → InterfaceListPage-qgFW8tPe.js} +1 -1
  10. package/dist/assets/{MarketplacePackagePage-HsOJc8gO.js → MarketplacePackagePage-BrIitTbZ.js} +1 -1
  11. package/dist/assets/{MetadataProvider-CtxwKit6.js → MetadataProvider-DuoHqlCv.js} +1 -1
  12. package/dist/assets/{PageView--__yPegB.js → PageView-B7XyzoE3.js} +1 -1
  13. package/dist/assets/{PublicFormsPage-DHB1GXYq.js → PublicFormsPage-C5YlZJCf.js} +1 -1
  14. package/dist/assets/{RecordFormPage-D4slBdVF.js → RecordFormPage-BWF_n9K1.js} +1 -1
  15. package/dist/assets/{ReportDefaultInspector-Dd6uMr1m.js → ReportDefaultInspector-DXCs9PIk.js} +1 -1
  16. package/dist/assets/{ReportView-BNSFl3JX.js → ReportView-CnNDV38L.js} +1 -1
  17. package/dist/assets/{SearchResultsPage-BxzH-_Ij.js → SearchResultsPage-DXU1qpcP.js} +1 -1
  18. package/dist/assets/{SystemHubPage-DWlReITv.js → SystemHubPage-_QTnnAxO.js} +1 -1
  19. package/dist/assets/data-adapter-B8GFCm-C.js +7 -0
  20. package/dist/assets/{index-DZKZYBSE.js → index-BopJm3PU.js} +1 -1
  21. package/dist/assets/{metadata-admin-J7IHY80h.js → metadata-admin-BklciJ5H.js} +1 -1
  22. package/dist/assets/{src-d69UbmXO.js → src-Ce8iWu_4.js} +1 -1
  23. package/dist/assets/{useOpenRecordList-DYtGRFlK.js → useOpenRecordList-DzVq8Uen.js} +1 -1
  24. package/dist/assets/{useReconcileOnError-BPOKuFu7.js → useReconcileOnError-DSjYP3Fi.js} +1 -1
  25. package/dist/index.html +1 -1
  26. package/package.json +1 -1
  27. package/dist/assets/data-adapter-BKbSi5kr.js +0 -7
@@ -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{_ as n,a as r,f as i,l as a,m as o,p as s,r as c,t as l,u}from"./vendor-react-slxo-5GC.js";import{m as d}from"./infrastructure-BySW-NB0.js";import{H as f,M as p,R as m,T as h,at as g,it as _,j as v,jt as y,kt as b,rt as x}from"./framework-BzwUcFJm.js";import{L as S,f as C,g as w,u as T}from"./vendor-objectstack-DTDITeDR.js";import{$ as E,$a as D,$i as O,$o as k,$r as A,Aa as j,Ac as M,Ai as N,Ar as P,As as ee,Ba as F,Bi as I,Bn as te,Bo as ne,Ca as re,Ci as ie,Co as ae,Cr as L,Cs as R,D as oe,Da as se,Dc as ce,Di as le,Do as ue,Dr as de,Ea as fe,Eo as pe,Er as me,Fo as he,Fs as ge,G as _e,Gn as ve,Go as ye,Gr as be,Gt as xe,Ha as Se,Hi as Ce,Hn as we,Ho as Te,Hr as Ee,Ht as De,Ia as Oe,Ii as ke,Io as Ae,Ja as je,Jn as Me,Jo as Ne,Jt as Pe,K as Fe,Ka as Ie,Ki as Le,Kn as Re,Kr as z,Kt as ze,La as Be,Lc as Ve,Ln as He,Lr as Ue,Ls as We,Ma as Ge,Mi as Ke,Mo as qe,Mr as Je,Ms as Ye,Na as Xe,Ni as Ze,Oa as Qe,Oc as $e,Oi as et,Oo as tt,Or as nt,Pa as rt,Po as it,Qa as at,Qi as ot,Qo as st,Qr as ct,Qs as lt,Ri as ut,Ro as dt,Rr as ft,Sa as pt,Sc as mt,Si as ht,So as gt,Ss as _t,Tc as vt,Ti as yt,To as bt,Tr as xt,Ts as St,Ui as Ct,Un as wt,Us as Tt,Ut as Et,Va as B,Vn as Dt,Vr as Ot,Vs as kt,Vt as At,W as jt,Wo as Mt,Wr as Nt,Ws as Pt,Wt as Ft,Xi as It,Xn as Lt,Xo as Rt,Xt as zt,Y as Bt,Yi as Vt,Yn as Ht,Yo as Ut,Yr as Wt,Yt as Gt,Za as Kt,Zi as V,Zt as qt,_c as Jt,_i as Yt,_o as Xt,_s as Zt,_t as Qt,ac as $t,ai as en,bi as tn,bo as nn,ca as rn,cc as an,cn as on,ct as sn,da as cn,dc as ln,ds as un,dt as dn,ec as fn,en as pn,eo as mn,er as hn,fa as gn,fi as _n,fs as vn,ft as yn,ga as bn,gt as xn,ha as Sn,hi as Cn,ho as wn,ht as Tn,ia as En,ii as Dn,io as On,is as kn,ji as An,jo as jn,jr as Mn,js as Nn,ka as Pn,kc as Fn,ki as In,ko as Ln,kr as Rn,ks as zn,la as Bn,lc as Vn,li as Hn,ln as H,lo as Un,ls as Wn,lt as Gn,mo as Kn,mt as qn,na as Jn,nc as Yn,nn as Xn,ns as Zn,oa as Qn,oc as $n,oi as er,on as tr,oo as nr,ot as rr,pn as U,po as ir,ps as ar,pt as or,qa as sr,qn as cr,qo as lr,qt as ur,rc as dr,rs as fr,sc as pr,sn as mr,so as hr,sr as W,ss as gr,st as _r,tn as vr,to as yr,ua as br,ui as xr,uo as Sr,us as Cr,ut as wr,va as Tr,vc as Er,vt as Dr,wc as Or,wi as kr,xi as Ar,xo as jr,xs as Mr,ya as Nr,yc as Pr,yi as Fr,yo as Ir,yt as Lr,zn as Rr,zs as zr,zt as Br}from"./ui-components-CLgu4Fon.js";import{r as Vr}from"./vendor-ui-utils-C1OpMExs.js";import"./AdapterProvider-cQNLWqAj.js";import"./MetadataProvider-CtxwKit6.js";import{c as Hr,r as Ur}from"./assistantBus-DosfPCbN.js";import{o as Wr}from"./useActionModal-BPkUp8XL.js";import{f as Gr}from"./plugin-chatbot-0LmsN1Va.js";import{a as Kr,c as qr,l as Jr,o as Yr,s as Xr}from"./RecordDetailView-DdNF49JU.js";import{$ as Zr,A as Qr,B as $r,C as ei,D as ti,E as ni,F as ri,G,H as ii,I as ai,J as oi,K as si,L as ci,M as li,N as ui,O as di,P as fi,Q as pi,R as mi,S as hi,T as gi,U as K,V as _i,W as vi,X as yi,Y as bi,Z as xi,_ as Si,a as Ci,b as q,c as wi,d as Ti,f as Ei,g as Di,h as Oi,j as ki,k as Ai,l as ji,m as Mi,n as Ni,o as Pi,p as Fi,q as Ii,s as Li,u as Ri,v as zi,w as Bi,x as Vi,y as J,z as Hi}from"./ReportDefaultInspector-Dd6uMr1m.js";import{t as Ui}from"./InterfaceListPage-Blv6QsRk.js";import{n as Wi}from"./plugins-views-D-6k7FrC.js";import{a as Gi,c as Ki,i as qi,l as Ji,n as Yi,o as Xi,r as Zi,s as Qi,t as $i}from"./DashboardWidgetInspector-CnaDfNnP.js";var Y=l(),X=e(n(),1);function ea(){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 ta(){let{agents:e,isLoading:t}=Gr({apiBase:ea()}),n=(0,X.useRef)(!1);t&&(n.current=!0);let r=e.length>0;return{enabled:r,isLoading:r?!1:t||!n.current}}function na(e){return e.includes(`-`)?e.toLowerCase():e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).toLowerCase()}var ra=new Set(_r),ia=new Map;function aa(e){if(!e)return fr;let t=ia.get(e);if(t)return t;let n=na(e);if(!ra.has(n))return ia.set(e,fr),fr;let r=e=>X.createElement(rr,{name:n,fallback:fr,...e});return r.displayName=`LucideIcon(${e})`,ia.set(e,r),r}function oa(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 sa(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 ca(e){let t=new Set;for(let n of e){let e=sa(n);e&&t.add(e)}return t}function la(e,t,n){if(e)return t;let r={field:t};return n&&n!==t&&(r.label=n),r}function ua(e,t){return e===t?null:e>t?e-1:e}function da(e,t,n){if(e===t)return n;let r=e;return t<r&&--r,n<=r&&(r+=1),r}function fa({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}=Di(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=si(n,la(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=oi(n,t,null);if(y(r),o!=null){let n=ua(o,t);n==null?l?.(null):l?.({kind:`column`,id:`${e}.columns[${n}]`,label:oa(r[n],n)})}},[n,y,o,e,l]),S=X.useCallback((t,r)=>{if(t===r)return;let i=Ii(n,t,r);if(y(i),o!=null){let n=da(o,t,r);l?.({kind:`column`,id:`${e}.columns[${n}]`,label:oa(i[n],n)})}},[n,y,o,e,l]),C=X.useCallback(t=>{l?.({kind:`column`,id:`${e}.columns[${t}]`,label:oa(n[t],t)})},[n,e,l]),w=ca(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)(U,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(W,{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)(Li,{index:t,label:oa(e,t),fieldName:sa(e),fieldType:m.get(sa(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)(Pi,{fields:d,usedNames:w,loading:f,error:p,onAdd:b})]})}var pa={io:`input`,unrepresentable:`any`},ma=new Set([`columns`,`data`,`name`]),ha,ga=!1;function _a(){if(ha||ga)return ha;try{ha=S(C,pa)}catch(e){ga=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive View JSONSchema from spec`,e)}return ha}function va(){return _a()?.properties?.list}function ya(){return _a()?.properties?.form}var ba,xa=!1;function Sa(){if(ba||xa)return ba;try{ba=S(T,pa)}catch(e){xa=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive ListColumn JSONSchema from spec`,e)}return ba}var Ca;function wa(){if(Ca)return Ca;if(!(!w||typeof w!=`object`)){try{let e=JSON.parse(JSON.stringify(w));for(let t of e.sections??[])t.fields=(t.fields??[]).filter(e=>{let t=typeof e==`string`?e:e?.field;return!ma.has(t)});e.sections=(e.sections??[]).filter(e=>(e.fields??[]).length>0),Ca=e}catch(e){typeof console<`u`&&console.warn(`[view-schema] failed to prepare viewForm from spec`,e);return}return Ca}}var Ta=new Set([`form`,`detail`]);function Ea(e){return Ta.has(e)}function Da(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Oa(e,t){return typeof e==`string`&&Ta.has(e)?e:typeof e==`string`&&e?`list`:typeof t==`string`&&Ta.has(t)?`form`:`list`}function ka(e){let t=e.config;return Da(t)?[{storeKey:`config`,familyKey:Oa(e.viewKind,t.type),schema:t}]:[]}function Aa(e){return ka(e)[0]}function ja(e,t){return Aa(e)}function Ma({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){let{options:a,loading:o}=Ki();return(0,Y.jsx)(Ji,{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 Na=new Set([`type`,`object`,`label`,`columns`]),Pa={grid:`Table / List`,kanban:`Kanban`,calendar:`Calendar`,gallery:`Gallery`,gantt:`Gantt`,timeline:`Timeline`,map:`Map`,chart:`Chart`};function Fa(e,t){let n=`engine.inspector.view.type.${e}`,r=J(n,t);return r===n?Pa[e]??e:r}var Ia=[`columns`,`data`,`name`];function La(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 Ra(e,t){return X.useMemo(()=>{let n=va()?.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:Fa(e,t)}));return!r.some(t=>t.value===e)&&e&&r.push({value:e,label:Fa(e,t)}),r},[e,t])}function za({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=Ea(n??t),p=typeof d.type==`string`?d.type:`grid`,m=Ra(p,l),h=La(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}=Di(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(()=>Ci({bundledSchema:f?ya():va(),bundledForm:f?void 0:wa(),serverSchema:x,excludeFields:Na,sectionTitle:J(`engine.inspector.moreFields`,l)}),[f,x,l]),w=e=>{i({[t]:{...d,...e}})};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.view.kind`,l),title:String(g||e.name||t),onClose:()=>o?.(),closeLabel:J(`engine.inspector.view.close`,l),hideClose:r,children:[(0,Y.jsx)(G,{label:J(`engine.inspector.view.label`,l),value:g,onCommit:e=>{i({label:e,[t]:{...d,label:e}})},placeholder:J(`engine.inspector.view.labelPlaceholder`,l),disabled:a}),(0,Y.jsx)(K,{label:J(`engine.inspector.view.type`,l),value:p,options:m,onCommit:e=>w({type:e}),disabled:a}),(0,Y.jsx)(Ma,{label:J(`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:J(`engine.inspector.view.objectPlaceholder`,l),disabled:a}),!f&&(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(fa,{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)(Fi,{schema:S,form:C,value:d,hiddenFields:[`type`,`object`,`label`],readOnly:a,widgetContext:b,onChange:e=>{let n={...e};for(let e of Ia)e in d?n[e]=d[e]:delete n[e];i({[t]:n})}}):(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:J(`engine.inspector.view.noSchema`,l)})})]})}function Ba({appSlug:e}={}){let t=u(),n=pi(),{entries:r}=Zr(n),[i,a]=X.useState(!1),[o,s]=X.useState(``),[c,l]=X.useState(null),[d,f]=X.useState(!1),[p,m]=X.useState(0),h=X.useMemo(()=>zi(),[]);X.useEffect(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.shiftKey&&e.key.toLowerCase()===`m`&&(e.preventDefault(),a(e=>!e))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),X.useEffect(()=>{if(!i||c!=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||l(t)}finally{e||f(!1)}})(),()=>{e=!0}},[i,c,d,r,n]);let g=X.useMemo(()=>{let e=o.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)||hi(t.type,h,t.label).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)).slice(0,8).map(e=>({kind:`type`,entry:e})),n=(c??[]).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]},[o,r,c]);X.useEffect(()=>{m(0)},[o,i]);function _(n){a(!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)(ve,{open:i,onOpenChange:a,children:(0,Y.jsxs)(Re,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(Ht,{className:`sr-only`,children:(0,Y.jsx)(Lt,{children:J(`engine.quickfind.title`,h)})}),(0,Y.jsxs)(`div`,{className:`border-b px-3 py-2 flex items-center gap-2`,children:[(0,Y.jsx)(N,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(H,{autoFocus:!0,placeholder:J(`engine.quickfind.placeholder`,h),value:o,onChange:e=>s(e.target.value),onKeyDown:v,className:`border-0 shadow-none focus-visible:ring-0 px-0`}),(0,Y.jsx)(jt,{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)(B,{className:`h-3.5 w-3.5 animate-spin`}),J(`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:J(`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)(W,{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:hi(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)(F,{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)(jt,{children:`↑`}),` `,(0,Y.jsx)(jt,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(jt,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(jt,{children:`⌘`}),(0,Y.jsx)(jt,{children:`⇧`}),(0,Y.jsx)(jt,{children:`M`}),` toggle`]})]})]})})}var Va=new Set([`system`,`cloud`]);function Ha(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&&!Va.has(e.scope));return t.sort((e,t)=>e.name.localeCompare(t.name)),t.map(e=>({id:e.id,name:e.name}))}var Ua={data:fr,ui:D,automation:Je,ai:Yt,system:le,platform:le,identity:kr,security:kr},Wa=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ga=new Set([`field`,`package`]);function Ka(){let e=pi(),{loading:t,error:n,entries:r}=Zr(e),i=X.useMemo(()=>zi(),[]),[a,o]=X.useState(``),[l,u]=X.useState(`all`),[d,f]=X.useState(!1),[p,m]=s(),[h,g]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;g(Ha(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}=xi(e,`warning`,v??void 0),E=X.useMemo(()=>r.filter(e=>Ga.has(e.type)||!v?!1:(w[e.type]??[]).includes(v)),[r,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(a){let t=a.toLowerCase();if(!(e.type.toLowerCase().includes(t)||(e.label??``).toLowerCase().includes(t)||hi(e.type,i,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=Wa.indexOf(e),r=Wa.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:J(`engine.directory.loading`,i)}):n?(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-destructive`,children:[J(`engine.directory.loadFailed`,i),`: `,n]}):(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:J(`engine.directory.title`,i)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,dangerouslySetInnerHTML:{__html:q(`engine.directory.description`,i,{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)(N,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`engine.directory.search`,i),value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(L,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[J(`engine.directory.writableOnly`,i),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(L,{asChild:!0,variant:`outline`,size:`sm`,className:`border-destructive/40 text-destructive hover:bg-destructive/10 hover:text-destructive`,children:(0,Y.jsxs)(c,{to:`./_diagnostics`,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.directory.diagnosticsLink`,i,{count:x.total})]})}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-1.5`,children:[J(`engine.directory.quickFind`,i),` `,(0,Y.jsx)(jt,{children:`⌘`}),(0,Y.jsx)(jt,{children:`⇧`}),(0,Y.jsx)(jt,{children:`M`})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-3 flex-wrap`,children:[(0,Y.jsx)(qa,{domain:`all`,label:J(`engine.directory.all`,i),active:l===`all`,count:D.all??0,onClick:()=>u(`all`)}),Wa.filter(e=>D[e]).map(e=>(0,Y.jsx)(qa,{domain:e,label:Vi(e,i),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)(_e,{children:[(0,Y.jsx)(Bt,{children:`No project packages installed`}),(0,Y.jsx)(Fe,{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)(_e,{children:[(0,Y.jsx)(Bt,{children:J(`engine.directory.noMatches`,i)}),(0,Y.jsx)(Fe,{children:J(`engine.directory.noMatchesHint`,i)})]}),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)(Ua[e]??an,{className:`h-3.5 w-3.5`}),Vi(e,i),` (`,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)(Ja,{entry:e,locale:i,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)(Ba,{})]})}function qa({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 Ja({entry:e,locale:t,invalidCount:n=0,warnCount:r=0,itemCount:i=0,lockedCount:a=0,packageFilter:o}){let s=hi(e.type,t,e.label);return(0,Y.jsxs)(c,{to:o?`./${encodeURIComponent(e.type)}?package=${encodeURIComponent(o)}`:`./${encodeURIComponent(e.type)}`,className:`block p-4 border rounded-lg hover:bg-accent transition-colors `+(n>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:[n>0&&(0,Y.jsx)(`span`,{title:q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),"aria-label":q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),children:(0,Y.jsx)(z,{className:`h-3.5 w-3.5 text-destructive shrink-0`})}),s]}),(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)(W,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:q(`engine.directory.itemCountTooltip`,t??`en`,{count:i}),children:i}),n>0&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,title:q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),children:n}),r>0&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06]`,title:q(`engine.directory.warnTooltip`,t??`en`,{count:r}),children:r}),a>0&&(0,Y.jsxs)(W,{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:`${a} locked item${a===1?``:`s`} — see ADR-0010`,"aria-label":`${a} locked items`,children:[(0,Y.jsx)(F,{className:`h-2.5 w-2.5`}),a]}),e.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,t)}):e.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,t)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:J(`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 Ya=`/api/v1/packages`;async function Xa(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 Za({scope:e}){let t=X.useMemo(()=>zi(),[]),n=e??`project`,r=n===`project`?`default`:n===`system`?`secondary`:`outline`,i=n===`project`?`engine.packages.scope.project`:n===`system`?`engine.packages.scope.system`:n===`cloud`?`engine.packages.scope.cloud`:``;return(0,Y.jsx)(W,{variant:r,children:i?J(i,t):n})}function Qa({pkg:e}){let t=X.useMemo(()=>zi(),[]),n=e.enabled!==!1&&e.status!==`disabled`;return(0,Y.jsx)(W,{variant:n?`default`:`outline`,children:J(n?`engine.packages.status.enabled`:`engine.packages.status.disabled`,t)})}var $a=/^[a-z0-9][a-z0-9._-]{1,254}$/i,eo=/^\d+\.\d+\.\d+$/;function to({open:e,onOpenChange:t,onCreated:n}){let r=X.useMemo(()=>zi(),[]),[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=$a.test(i),h=eo.test(c),g=m&&h&&!!o.trim()&&!u;async function _(){if(g){d(!0),p(null);try{await Xa(Ya,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:{id:i.trim(),name:o.trim(),version:c.trim(),type:`app`,scope:`project`}})}),n(i.trim());try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}t(!1)}catch(e){p(e?.message??J(`engine.packages.create.failed`,r))}finally{d(!1)}}}return(0,Y.jsx)(ve,{open:e,onOpenChange:t,children:(0,Y.jsxs)(Re,{children:[(0,Y.jsxs)(Ht,{children:[(0,Y.jsx)(Lt,{children:J(`engine.packages.create.title`,r)}),(0,Y.jsx)(cr,{children:q(`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)(U,{htmlFor:`pkg-id`,children:J(`engine.packages.create.id`,r)}),(0,Y.jsx)(H,{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:J(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(U,{htmlFor:`pkg-name`,children:J(`engine.packages.create.name`,r)}),(0,Y.jsx)(H,{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)(U,{htmlFor:`pkg-version`,children:J(`engine.packages.create.version`,r)}),(0,Y.jsx)(H,{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:J(`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)(z,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(Me,{children:[(0,Y.jsx)(L,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:J(`engine.cancel`,r)}),(0,Y.jsx)(L,{onClick:_,disabled:!g,children:J(u?`engine.packages.create.creating`:`engine.packages.create.submit`,r)})]})]})})}function no({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 ro({pkg:e,appBase:t,open:n,onOpenChange:r,onChanged:i}){let a=X.useMemo(()=>zi(),[]),[o,s]=X.useState(null),[l,u]=X.useState(null),[d,f]=X.useState(null);if(X.useEffect(()=>{u(null),s(null)},[e?.manifest.id]),X.useEffect(()=>{let t=e?.manifest.id;if(!n||!t){f(null);return}let r=!1;return Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(t)}`).then(e=>{r||f(e?.drafts??[])}).catch(()=>{r||f([])}),()=>{r=!0}},[n,e?.manifest.id]),!e)return null;let p=e.manifest.id,m=e.enabled!==!1&&e.status!==`disabled`,h=e.manifest.scope===`system`||e.manifest.scope===`cloud`;async function g(e,t,n){s(e),u(null);try{await t(),u({kind:`ok`,text:n}),i()}catch(e){u({kind:`err`,text:e?.message??J(`engine.packages.detail.actionFailed`,a)})}finally{s(null)}}return(0,Y.jsx)(At,{open:n,onOpenChange:r,children:(0,Y.jsxs)(De,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Ft,{children:[(0,Y.jsxs)(xe,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Tr,{className:`h-4 w-4`}),e.manifest.name||p]}),(0,Y.jsx)(Et,{className:`font-mono text-xs`,children:p})]}),(0,Y.jsxs)(`div`,{className:`mt-4`,children:[(0,Y.jsx)(no,{label:J(`engine.packages.col.version`,a),children:e.manifest.version||`—`}),(0,Y.jsx)(no,{label:J(`engine.packages.detail.type`,a),children:e.manifest.type||`—`}),(0,Y.jsx)(no,{label:J(`engine.packages.col.scope`,a),children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(no,{label:J(`engine.packages.col.status`,a),children:(0,Y.jsx)(Qa,{pkg:e})}),e.manifest.description&&(0,Y.jsx)(no,{label:J(`engine.packages.detail.description`,a),children:e.manifest.description})]}),(0,Y.jsx)(ze,{className:`my-4`}),(0,Y.jsxs)(c,{to:`${t}/metadata/object?package=${encodeURIComponent(p)}`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>r(!1),children:[(0,Y.jsx)(Ut,{className:`h-3.5 w-3.5`}),J(`engine.packages.detail.browseMetadata`,a)]}),d&&d.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ze,{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:[J(`engine.packages.detail.pendingChanges`,a),(0,Y.jsx)(W,{variant:`secondary`,children:d.length})]}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:J(`engine.packages.detail.pendingHint`,a)}),!h&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(L,{size:`sm`,onClick:()=>g(`publish-drafts`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/publish-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{f((await Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(p)}`))?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(q(`engine.packages.detail.publishDraftsPartial`,a,{published:e.publishedCount??0,failed:e.failedCount}));return e}),J(`engine.packages.detail.publishDraftsOk`,a)),disabled:!!o,children:[(0,Y.jsx)(Ee,{className:`mr-1.5 h-3.5 w-3.5`}),o===`publish-drafts`?J(`engine.packages.detail.publishing`,a):q(`engine.packages.detail.publishApp`,a,{count:d.length})]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`discard-drafts`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/discard-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{f((await Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(p)}`))?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(q(`engine.packages.detail.discardDraftsPartial`,a,{discarded:e.discardedCount??0,failed:e.failedCount}));return e}),J(`engine.packages.detail.discardDraftsOk`,a)),disabled:!!o,children:[(0,Y.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5`}),o===`discard-drafts`?J(`engine.packages.detail.discarding`,a):q(`engine.packages.detail.discardChanges`,a,{count:d.length})]})]}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:d.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(c,{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:()=>r(!1),children:[(0,Y.jsx)(he,{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.jsx)(ze,{className:`my-4`}),h?(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:J(`engine.packages.detail.kernelReadOnly`,a)}):(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:J(`engine.packages.detail.actions`,a)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(L,{size:`sm`,onClick:()=>g(`publish`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/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?q(`engine.packages.detail.publishBlocked`,a,{count:t}):e.validationErrors?.[0]?.message||J(`engine.packages.detail.nothingToPublish`,a))}return e}),J(`engine.packages.detail.published`,a)),disabled:!!o,children:[(0,Y.jsx)(Ee,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`publish`?`engine.packages.detail.publishing`:`engine.packages.detail.publish`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`revert`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/revert`,{method:`POST`}),J(`engine.packages.detail.reverted`,a)),disabled:!!o,children:[(0,Y.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5`}),J(`engine.packages.detail.revert`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`toggle`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/${m?`disable`:`enable`}`,{method:`PATCH`}),J(m?`engine.packages.detail.disabled`:`engine.packages.detail.enabled`,a)),disabled:!!o,children:[m?(0,Y.jsx)(It,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(Vt,{className:`mr-1.5 h-3.5 w-3.5`}),J(m?`engine.packages.detail.disable`:`engine.packages.detail.enable`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`export`,async()=>{let e=await Xa(`${Ya}/${encodeURIComponent(p)}/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=`${p}.package.json`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)},J(`engine.packages.detail.exported`,a)),disabled:!!o,children:[(0,Y.jsx)(k,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`export`?`engine.packages.detail.exporting`:`engine.packages.detail.export`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{let t=window.prompt(J(`engine.packages.detail.duplicatePrompt`,a),`${p}-copy`);if(!(!t||!t.trim())){s(`duplicate`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}/duplicate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({targetPackageId:t.trim(),targetName:`${e?.manifest.name??p} (copy)`})}),u({kind:`ok`,text:J(`engine.packages.detail.duplicated`,a)}),i()}catch(e){u({kind:`err`,text:e?.message??`Duplicate failed`})}finally{s(null)}}},disabled:!!o,children:[(0,Y.jsx)(Wn,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`duplicate`?`engine.packages.detail.duplicating`:`engine.packages.detail.duplicate`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{if(window.confirm(q(`engine.packages.detail.adoptConfirm`,a,{name:e?.manifest.name||p}))){s(`adopt`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}/adopt-orphans`,{method:`POST`}),u({kind:`ok`,text:J(`engine.packages.detail.adopted`,a)}),i()}catch(e){u({kind:`err`,text:e?.message??`Adopt failed`})}finally{s(null)}}},disabled:!!o,children:[(0,Y.jsx)(hr,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`adopt`?`engine.packages.detail.adopting`:`engine.packages.detail.adoptOrphans`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{if(!window.confirm(q(`engine.packages.detail.deleteConfirm`,a,{name:e?.manifest.name||p})))return;let t=window.confirm(J(`engine.packages.detail.deleteKeepData`,a))?``:`?keepData=true`;s(`delete`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}${t}`,{method:`DELETE`}),i(),r(!1)}catch(e){u({kind:`err`,text:e?.message??J(`engine.packages.detail.deleteFailed`,a)})}finally{s(null)}},disabled:!!o,className:`text-destructive hover:bg-destructive/10 hover:text-destructive`,children:[(0,Y.jsx)(Wt,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`delete`?`engine.packages.detail.deleting`:`engine.packages.detail.deleteApp`,a)]})]})]}),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})]})})}function io(){let e=X.useMemo(()=>zi(),[]),{pathname:t}=a(),n=X.useMemo(()=>{let e=t.indexOf(`/component`);return e>=0?t.slice(0,e):t},[t]),[r,i]=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 Xa(Ya),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}),i(t)}catch(t){l(t?.message??J(`engine.packages.loadFailed`,e))}finally{s(!1)}},[e]);X.useEffect(()=>{T()},[T]),X.useEffect(()=>{if(!g)return;let e=r.find(e=>e.manifest.id===g.manifest.id);e&&e!==g&&_(e)},[r,g]);let E=X.useMemo(()=>{let e=u.trim().toLowerCase();return r.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)},[r,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(J(`engine.packages.import.invalidJson`,e))}if(!r||typeof r!=`object`||!r.id&&!r.name)throw Error(J(`engine.packages.import.invalidPackage`,e));w({kind:`ok`,text:q(`engine.packages.import.success`,e,{id:(await Xa(`/api/v1/marketplace/install-local`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:r})}))?.manifestId??r.id})}),await T()}catch(t){w({kind:`err`,text:t?.message??J(`engine.packages.import.failed`,e)})}finally{S(!1)}}},k=r.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)(Tr,{className:`h-5 w-5`})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:J(`engine.packages.title`,e)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:J(`engine.packages.description`,e)})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(L,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Ct,{className:`mr-1.5 h-3.5 w-3.5 ${o?`animate-spin`:``}`}),J(`engine.packages.refresh`,e)]}),(0,Y.jsx)(`input`,{ref:b,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:O}),(0,Y.jsxs)(L,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(he,{className:`mr-1.5 h-3.5 w-3.5`}),J(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(L,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(V,{className:`mr-1.5 h-3.5 w-3.5`}),J(`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)(N,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`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)(Lr,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(U,{htmlFor:`show-kernel`,className:`text-sm text-muted-foreground`,children:q(`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)(Br,{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)(z,{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)(_e,{children:[(0,Y.jsx)(Bt,{children:J(`engine.packages.empty`,e)}),(0,Y.jsx)(Fe,{children:r.length===0?J(`engine.packages.emptyCreate`,e):J(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(or,{children:[(0,Y.jsx)(Qt,{children:(0,Y.jsxs)(Dr,{children:[(0,Y.jsx)(xn,{children:J(`engine.packages.col.name`,e)}),(0,Y.jsx)(xn,{children:`ID`}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.version`,e)}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.scope`,e)}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(qn,{children:E.map(e=>(0,Y.jsxs)(Dr,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(Tn,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(Tn,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(Tn,{children:e.manifest.version||`—`}),(0,Y.jsx)(Tn,{children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(Tn,{children:(0,Y.jsx)(Qa,{pkg:e})})]},e.manifest.id))})]})}),(0,Y.jsx)(to,{open:m,onOpenChange:h,onCreated:async()=>{await T()}}),(0,Y.jsx)(ro,{pkg:g,appBase:n,open:v,onOpenChange:y,onChanged:()=>void T()})]})}var ao=new Set([`field`,`package`]),oo={data:fr,ui:D,automation:Je,ai:Yt,system:le,platform:le,identity:kr,security:kr},so={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`}},co=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],lo=[`object`,`view`,`page`,`dashboard`,`report`,`flow`,`action`,`agent`],uo={object:er,dashboard:at,page:Ae,report:lt,record:an,metadata:D};function fo(){let e=new Date().getHours();return e<12?`engine.home.greetingMorning`:e<18?`engine.home.greetingAfternoon`:`engine.home.greetingEvening`}function po(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 mo(){let e=pi(),{loading:t,entries:n}=Zr(e),{recentItems:r}=Wr(),i=X.useMemo(()=>zi(),[]),[a,o]=s(),[l,u]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;u(Ha(n))}catch{t||u([])}})(),()=>{t=!0}},[e]);let d=a.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(a);e.set(`package`,l[0].id),o(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}=xi(e,`warning`,f??void 0),b=X.useMemo(()=>n.filter(e=>ao.has(e.type)||!f?!1:(v[e.type]??[]).includes(f)),[f,n,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])=>(co.indexOf(e)===-1?99:co.indexOf(e))-(co.indexOf(t)===-1?99:co.indexOf(t)))},[b,_]),C=X.useMemo(()=>{let e=new Map(x.map(e=>[e.type,e]));return lo.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:J(`engine.home.loading`,i)}):(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)(Yt,{className:`h-4 w-4`}),J(fo(),i)]}),(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:J(`engine.home.subtitle`,i)}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2.5`,children:[(0,Y.jsx)(L,{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)(c,{to:m,children:[(0,Y.jsx)(D,{className:`mr-1.5 h-4 w-4`}),J(`engine.home.browseAll`,i)]})}),(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)(N,{className:`h-3.5 w-3.5`}),J(`engine.directory.quickFind`,i),` ⌘⇧M`]})]})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,Y.jsx)(ho,{value:b.length,label:J(`engine.home.statTypes`,i)}),(0,Y.jsx)(ho,{value:x.length,label:J(`engine.home.statWritable`,i)}),(0,Y.jsx)(ho,{value:l.length,label:J(`engine.home.statPackages`,i)})]})]})]}),(0,Y.jsxs)(`section`,{className:`grid grid-cols-2 gap-4 lg:grid-cols-4`,children:[(0,Y.jsx)(go,{icon:D,from:`from-indigo-500`,to:`to-violet-600`,value:b.length,label:J(`engine.home.statTypes`,i),to_link:m}),(0,Y.jsx)(go,{icon:Ye,from:`from-sky-500`,to:`to-blue-600`,value:x.length,label:J(`engine.home.statWritable`,i),to_link:m}),(0,Y.jsx)(go,{icon:Tr,from:`from-emerald-500`,to:`to-teal-600`,value:l.length,label:J(`engine.home.statPackages`,i),to_link:h}),(0,Y.jsxs)(c,{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)(Ye,{className:`h-5 w-5`}):(0,Y.jsx)(z,{className:`h-5 w-5`})}),(0,Y.jsx)(mt,{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?J(`engine.home.allHealthy`,i):w}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:J(T?`engine.home.allHealthyHint`:`engine.home.statIssues`,i)})]})]})]}),C.length>0&&(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(_o,{icon:V,title:J(`engine.home.quickActions`,i),hint:J(`engine.home.quickActionsHint`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2.5`,children:C.map(e=>(0,Y.jsx)(L,{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)(c,{to:`metadata/${encodeURIComponent(e.type)}/new${p}`,children:[(0,Y.jsx)(V,{className:`mr-1 h-3.5 w-3.5 text-primary transition-transform group-hover:rotate-90`}),q(`engine.home.newItem`,i,{label:hi(e.type,i,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)(_o,{icon:D,title:J(`engine.home.explore`,i),hint:J(`engine.home.exploreHint`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 grid gap-4 sm:grid-cols-2`,children:S.map(([e,t])=>(0,Y.jsx)(vo,{domain:e,group:t,countsByType:_,locale:i,packageSuffix:p},e))})]}),(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(_o,{icon:Zt,title:J(`engine.home.recent`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 rounded-2xl border bg-card p-2`,children:r.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-8 text-center text-xs text-muted-foreground`,children:J(`engine.home.recentEmpty`,i)}):(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:r.slice(0,8).map(e=>{let t=uo[e.type]??an;return(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(c,{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:po(e.visitedAt,i)})]}),(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})},e.id)})})})]})]})]}),(0,Y.jsx)(Ba,{})]})}function ho({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 go({icon:e,from:t,to:n,value:r,label:i,to_link:a}){return(0,Y.jsxs)(c,{to:a,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} ${n} text-white shadow-sm`,children:(0,Y.jsx)(e,{className:`h-5 w-5`})}),(0,Y.jsx)(mt,{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:r}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})}function _o({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 vo({domain:e,group:t,countsByType:n,locale:r,packageSuffix:i}){let a=oo[e]??an,o=so[e]??so.other,s=t.slice(0,6),l=t.length-s.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 ${o.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 ${o.from} ${o.to} text-white shadow-sm`,children:(0,Y.jsx)(a,{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:Vi(e,r)}),(0,Y.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.length,` `,J(`engine.home.typesLower`,r)]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:[s.map(e=>(0,Y.jsxs)(c,{to:`metadata/${encodeURIComponent(e.type)}${i}`,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:hi(e.type,r,e.label)}),(0,Y.jsx)(`span`,{className:`tabular-nums text-[10px] text-muted-foreground`,children:n[e.type]??0})]},e.type)),l>0&&(0,Y.jsxs)(c,{to:`metadata${i}`,className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-xs font-medium ${o.text} hover:underline`,children:[`+`,l]})]})]})}function yo({entry:e,itemName:t,subtitle:n,stats:r,actions:i,children:o}){let s=e?.type??``,l=X.useMemo(()=>zi(),[]),u=hi(s,l,e?.label),{pathname:d}=a(),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)(c,{to:f,className:`hover:text-foreground shrink-0`,children:J(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(kt,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(c,{to:`${f}/${encodeURIComponent(s)}`,className:`hover:text-foreground shrink-0`,children:u}),(0,Y.jsx)(kt,{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)(W,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,l)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] h-5 px-1.5 text-muted-foreground`,children:J(`engine.badge.readOnly`,l)})]}),n&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[r?.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)),i]})]}):(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)(c,{to:f,className:`hover:text-foreground`,children:J(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(kt,{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:s}),e?.domain&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,l)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:J(`engine.badge.readOnly`,l)})]}),n&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1`,children:n}),!n&&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:[r?.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)),i]})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:o})]})}var bo={primary:`default`,secondary:`secondary`,danger:`destructive`,ghost:`ghost`,link:`link`};function xo(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 So({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`){Vr.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=xo(e.target??``,o,i);if(!s){Vr.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();Vr.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} ✓`);Vr.success(n)}e.refreshAfter&&r?.()}catch(e){Vr.error(`${t}: ${e?.message??String(e)}`)}finally{a(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[f.map(e=>{let t=e.icon?aa(e.icon):null,n=i===e.name;return(0,Y.jsxs)(L,{size:`sm`,variant:bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(B,{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)(Jr,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(qr,{state:c,onAcknowledge:()=>l({open:!1})})]})}function Co(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 To(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 Eo(e){return wo.get(e)}function Do(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 Oo(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 ko(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 Ao({type:e}){let t=i(),n=e??t.type??``;if(n===`package`)return(0,Y.jsx)(r,{to:`/apps/${t.appName??`studio`}/component/developer/packages`,replace:!0});let a=Eo(n);if(a?.ListPage){let e=a.ListPage;return(0,Y.jsx)(e,{type:n})}return(0,Y.jsx)(jo,{type:n,appName:t.appName})}function jo({type:e,appName:t}){let n=u(),r=pi(),{entries:i}=Zr(r),a=i.find(t=>t.type===e),o=Oo(e,a),[l,d]=X.useState([]),[f,p]=X.useState(!0),[m,h]=X.useState(null),[g,_]=X.useState(``),[v,y]=X.useState(`all`),[b,x]=s(),[S,C]=X.useState(0),[w,T]=X.useState(null);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await r.list(`package`);if(e)return;T(Ha(t))}catch{e||T([])}})(),()=>{e=!0}},[r]);let[E,D]=X.useState(null);X.useEffect(()=>{let e=!1;if(!t){D(null);return}return(async()=>{try{let n=await r.list(`app`);if(e)return;D((n??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).find(e=>e?.name===t||e?._packageId===t)?._packageId??null)}catch{e||D(null)}})(),()=>{e=!0}},[r,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 l){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,l,E]);X.useEffect(()=>{if(!w||w.length===0||O&&w.some(e=>e.id===O)||!(E&&w.some(e=>e.id===E))&&l.length===0||!k)return;let e=new URLSearchParams(b);e.set(`package`,k),x(e,{replace:!0})},[w,O,l,k,E]);let A=k?`?package=${encodeURIComponent(k)}`:``,[j,M]=X.useState(!1),P=X.useCallback(()=>{let e=w??[];if(w!==null&&e.length===0){M(!0);return}if(e.length>0&&!k){n(`./new?package=${encodeURIComponent(e[0].id)}`);return}n(`./new${A}`)},[w,k,A,n]);X.useEffect(()=>{let t=!1;return p(!0),h(null),(async()=>{try{let n=await r.list(e);if(t)return;d((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:ko(t,e?.source),diagnostics:n}})),p(!1)}catch(e){t||(h(e?.message??String(e)),p(!1))}})(),()=>{t=!0}},[r,e,S]);let ee=o.searchableFields??[`name`,`label`,`description`],I=X.useMemo(()=>l.filter(e=>o.listFilter&&!o.listFilter(e.item)||!k?!1:e.item?._packageId===k),[l,k,o]),te=I.filter(e=>!(!yi(e.item,g,ee)||v!==`all`&&e.source!==v)),ne=X.useMemo(()=>{let e={all:I.length,artifact:0,runtime:0};for(let t of I)e[t.source]++;return e},[I]),re=X.useMemo(()=>I.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[I]),ie=X.useMemo(()=>I.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[I]),ae=o.listColumns??Mo(o.primaryKey??`name`),R=zi(),oe=hi(e,R,a?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=J(t,R);return n===t?e.label:n};return(0,Y.jsx)(yo,{entry:a??{type:e,label:e},stats:[{label:J(`engine.list.items`,R),value:I.length},{label:J(`engine.list.filtered`,R),value:te.length},...re>0?[{label:J(`engine.list.invalid`,R),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(z,{className:`w-3.5 h-3.5`}),re]})}]:[],...ie>0?[{label:J(`engine.list.warnings`,R),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(z,{className:`w-3.5 h-3.5`}),ie]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(So,{entry:a,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(L,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:J(`engine.list.refresh`,R),children:(0,Y.jsx)(Ct,{className:`h-4 w-4`})}),(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsxs)(L,{size:`sm`,variant:o.createFields?`default`:`outline`,onClick:P,title:o.createFields?q(`engine.list.createHint`,R,{type:oe}):void 0,children:[(0,Y.jsx)(V,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,R)]})]}),children:(0,Y.jsxs)(`div`,{className:`p-6 space-y-4`,children:[(0,Y.jsx)(to,{open:j,onOpenChange:M,onCreated:e=>n(`./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)(N,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`engine.list.search`,R),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(ur,{value:v,onValueChange:y,children:[(0,Y.jsx)(zt,{className:`w-[180px]`,children:(0,Y.jsx)(qt,{})}),(0,Y.jsxs)(Pe,{children:[(0,Y.jsxs)(Gt,{value:`all`,children:[J(`engine.list.allSources`,R),` (`,ne.all,`)`]}),(0,Y.jsxs)(Gt,{value:`artifact`,children:[J(`engine.list.source.artifact`,R),` (`,ne.artifact,`)`]}),(0,Y.jsxs)(Gt,{value:`runtime`,children:[J(`engine.list.source.runtime`,R),` (`,ne.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[J(`engine.edit.loading`,R),` `,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)(_e,{children:[(0,Y.jsx)(Bt,{children:`No project packages installed`}),(0,Y.jsx)(Fe,{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&&te.length===0&&(0,Y.jsxs)(_e,{children:[(0,Y.jsx)(Bt,{children:I.length===0?q(`engine.list.emptyType`,R,{type:oe}):q(`engine.list.emptyQuery`,R,{query:g})}),(0,Y.jsx)(Fe,{children:o.emptyStateHint??(a?.allowOrgOverride||a?.allowRuntimeCreate?q(`engine.list.createHint`,R,{type:oe}):J(`engine.list.readOnlyHint`,R))}),I.length===0&&(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(L,{onClick:P,children:[(0,Y.jsx)(V,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,R)]})})]}),!f&&te.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:J(`engine.list.col.source`,R)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:te.map((e,t)=>{let n=o.primaryKey??`name`,r=String(e.item[n]??`(unnamed-${t})`),i=e.item._packageId,a=i&&i!==`sys_metadata`?`?package=${encodeURIComponent(i)}`:A,s=e.diagnostics?.valid===!1,l=e.diagnostics?.errors??[],u=e.diagnostics?.warnings??[],d=!s&&u.length>0,f=s?l.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{_ as n,a as r,f as i,l as a,m as o,p as s,r as c,t as l,u}from"./vendor-react-slxo-5GC.js";import{m as d}from"./infrastructure-BySW-NB0.js";import{H as f,M as p,R as m,T as h,at as g,it as _,j as v,jt as y,kt as b,rt as x}from"./framework-BzwUcFJm.js";import{L as S,f as C,g as w,u as T}from"./vendor-objectstack-DTDITeDR.js";import{$ as E,$a as D,$i as O,$o as k,$r as A,Aa as j,Ac as M,Ai as N,Ar as P,As as ee,Ba as F,Bi as I,Bn as te,Bo as ne,Ca as re,Ci as ie,Co as ae,Cr as L,Cs as R,D as oe,Da as se,Dc as ce,Di as le,Do as ue,Dr as de,Ea as fe,Eo as pe,Er as me,Fo as he,Fs as ge,G as _e,Gn as ve,Go as ye,Gr as be,Gt as xe,Ha as Se,Hi as Ce,Hn as we,Ho as Te,Hr as Ee,Ht as De,Ia as Oe,Ii as ke,Io as Ae,Ja as je,Jn as Me,Jo as Ne,Jt as Pe,K as Fe,Ka as Ie,Ki as Le,Kn as Re,Kr as z,Kt as ze,La as Be,Lc as Ve,Ln as He,Lr as Ue,Ls as We,Ma as Ge,Mi as Ke,Mo as qe,Mr as Je,Ms as Ye,Na as Xe,Ni as Ze,Oa as Qe,Oc as $e,Oi as et,Oo as tt,Or as nt,Pa as rt,Po as it,Qa as at,Qi as ot,Qo as st,Qr as ct,Qs as lt,Ri as ut,Ro as dt,Rr as ft,Sa as pt,Sc as mt,Si as ht,So as gt,Ss as _t,Tc as vt,Ti as yt,To as bt,Tr as xt,Ts as St,Ui as Ct,Un as wt,Us as Tt,Ut as Et,Va as B,Vn as Dt,Vr as Ot,Vs as kt,Vt as At,W as jt,Wo as Mt,Wr as Nt,Ws as Pt,Wt as Ft,Xi as It,Xn as Lt,Xo as Rt,Xt as zt,Y as Bt,Yi as Vt,Yn as Ht,Yo as Ut,Yr as Wt,Yt as Gt,Za as Kt,Zi as V,Zt as qt,_c as Jt,_i as Yt,_o as Xt,_s as Zt,_t as Qt,ac as $t,ai as en,bi as tn,bo as nn,ca as rn,cc as an,cn as on,ct as sn,da as cn,dc as ln,ds as un,dt as dn,ec as fn,en as pn,eo as mn,er as hn,fa as gn,fi as _n,fs as vn,ft as yn,ga as bn,gt as xn,ha as Sn,hi as Cn,ho as wn,ht as Tn,ia as En,ii as Dn,io as On,is as kn,ji as An,jo as jn,jr as Mn,js as Nn,ka as Pn,kc as Fn,ki as In,ko as Ln,kr as Rn,ks as zn,la as Bn,lc as Vn,li as Hn,ln as H,lo as Un,ls as Wn,lt as Gn,mo as Kn,mt as qn,na as Jn,nc as Yn,nn as Xn,ns as Zn,oa as Qn,oc as $n,oi as er,on as tr,oo as nr,ot as rr,pn as U,po as ir,ps as ar,pt as or,qa as sr,qn as cr,qo as lr,qt as ur,rc as dr,rs as fr,sc as pr,sn as mr,so as hr,sr as W,ss as gr,st as _r,tn as vr,to as yr,ua as br,ui as xr,uo as Sr,us as Cr,ut as wr,va as Tr,vc as Er,vt as Dr,wc as Or,wi as kr,xi as Ar,xo as jr,xs as Mr,ya as Nr,yc as Pr,yi as Fr,yo as Ir,yt as Lr,zn as Rr,zs as zr,zt as Br}from"./ui-components-CLgu4Fon.js";import{r as Vr}from"./vendor-ui-utils-C1OpMExs.js";import"./AdapterProvider-DvWb2IeS.js";import"./MetadataProvider-DuoHqlCv.js";import{c as Hr,r as Ur}from"./assistantBus-DosfPCbN.js";import{o as Wr}from"./useActionModal-BPkUp8XL.js";import{f as Gr}from"./plugin-chatbot-0LmsN1Va.js";import{a as Kr,c as qr,l as Jr,o as Yr,s as Xr}from"./RecordDetailView-DdNF49JU.js";import{$ as Zr,A as Qr,B as $r,C as ei,D as ti,E as ni,F as ri,G,H as ii,I as ai,J as oi,K as si,L as ci,M as li,N as ui,O as di,P as fi,Q as pi,R as mi,S as hi,T as gi,U as K,V as _i,W as vi,X as yi,Y as bi,Z as xi,_ as Si,a as Ci,b as q,c as wi,d as Ti,f as Ei,g as Di,h as Oi,j as ki,k as Ai,l as ji,m as Mi,n as Ni,o as Pi,p as Fi,q as Ii,s as Li,u as Ri,v as zi,w as Bi,x as Vi,y as J,z as Hi}from"./ReportDefaultInspector-DXCs9PIk.js";import{t as Ui}from"./InterfaceListPage-qgFW8tPe.js";import{n as Wi}from"./plugins-views-D-6k7FrC.js";import{a as Gi,c as Ki,i as qi,l as Ji,n as Yi,o as Xi,r as Zi,s as Qi,t as $i}from"./DashboardWidgetInspector-BhYevZBF.js";var Y=l(),X=e(n(),1);function ea(){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 ta(){let{agents:e,isLoading:t}=Gr({apiBase:ea()}),n=(0,X.useRef)(!1);t&&(n.current=!0);let r=e.length>0;return{enabled:r,isLoading:r?!1:t||!n.current}}function na(e){return e.includes(`-`)?e.toLowerCase():e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).replace(/([A-Z]+)([A-Z][a-z])/g,`$1-$2`).toLowerCase()}var ra=new Set(_r),ia=new Map;function aa(e){if(!e)return fr;let t=ia.get(e);if(t)return t;let n=na(e);if(!ra.has(n))return ia.set(e,fr),fr;let r=e=>X.createElement(rr,{name:n,fallback:fr,...e});return r.displayName=`LucideIcon(${e})`,ia.set(e,r),r}function oa(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 sa(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 ca(e){let t=new Set;for(let n of e){let e=sa(n);e&&t.add(e)}return t}function la(e,t,n){if(e)return t;let r={field:t};return n&&n!==t&&(r.label=n),r}function ua(e,t){return e===t?null:e>t?e-1:e}function da(e,t,n){if(e===t)return n;let r=e;return t<r&&--r,n<=r&&(r+=1),r}function fa({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}=Di(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=si(n,la(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=oi(n,t,null);if(y(r),o!=null){let n=ua(o,t);n==null?l?.(null):l?.({kind:`column`,id:`${e}.columns[${n}]`,label:oa(r[n],n)})}},[n,y,o,e,l]),S=X.useCallback((t,r)=>{if(t===r)return;let i=Ii(n,t,r);if(y(i),o!=null){let n=da(o,t,r);l?.({kind:`column`,id:`${e}.columns[${n}]`,label:oa(i[n],n)})}},[n,y,o,e,l]),C=X.useCallback(t=>{l?.({kind:`column`,id:`${e}.columns[${t}]`,label:oa(n[t],t)})},[n,e,l]),w=ca(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)(U,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(W,{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)(Li,{index:t,label:oa(e,t),fieldName:sa(e),fieldType:m.get(sa(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)(Pi,{fields:d,usedNames:w,loading:f,error:p,onAdd:b})]})}var pa={io:`input`,unrepresentable:`any`},ma=new Set([`columns`,`data`,`name`]),ha,ga=!1;function _a(){if(ha||ga)return ha;try{ha=S(C,pa)}catch(e){ga=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive View JSONSchema from spec`,e)}return ha}function va(){return _a()?.properties?.list}function ya(){return _a()?.properties?.form}var ba,xa=!1;function Sa(){if(ba||xa)return ba;try{ba=S(T,pa)}catch(e){xa=!0,typeof console<`u`&&console.warn(`[view-schema] failed to derive ListColumn JSONSchema from spec`,e)}return ba}var Ca;function wa(){if(Ca)return Ca;if(!(!w||typeof w!=`object`)){try{let e=JSON.parse(JSON.stringify(w));for(let t of e.sections??[])t.fields=(t.fields??[]).filter(e=>{let t=typeof e==`string`?e:e?.field;return!ma.has(t)});e.sections=(e.sections??[]).filter(e=>(e.fields??[]).length>0),Ca=e}catch(e){typeof console<`u`&&console.warn(`[view-schema] failed to prepare viewForm from spec`,e);return}return Ca}}var Ta=new Set([`form`,`detail`]);function Ea(e){return Ta.has(e)}function Da(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Oa(e,t){return typeof e==`string`&&Ta.has(e)?e:typeof e==`string`&&e?`list`:typeof t==`string`&&Ta.has(t)?`form`:`list`}function ka(e){let t=e.config;return Da(t)?[{storeKey:`config`,familyKey:Oa(e.viewKind,t.type),schema:t}]:[]}function Aa(e){return ka(e)[0]}function ja(e,t){return Aa(e)}function Ma({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){let{options:a,loading:o}=Ki();return(0,Y.jsx)(Ji,{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 Na=new Set([`type`,`object`,`label`,`columns`]),Pa={grid:`Table / List`,kanban:`Kanban`,calendar:`Calendar`,gallery:`Gallery`,gantt:`Gantt`,timeline:`Timeline`,map:`Map`,chart:`Chart`};function Fa(e,t){let n=`engine.inspector.view.type.${e}`,r=J(n,t);return r===n?Pa[e]??e:r}var Ia=[`columns`,`data`,`name`];function La(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 Ra(e,t){return X.useMemo(()=>{let n=va()?.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:Fa(e,t)}));return!r.some(t=>t.value===e)&&e&&r.push({value:e,label:Fa(e,t)}),r},[e,t])}function za({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=Ea(n??t),p=typeof d.type==`string`?d.type:`grid`,m=Ra(p,l),h=La(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}=Di(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(()=>Ci({bundledSchema:f?ya():va(),bundledForm:f?void 0:wa(),serverSchema:x,excludeFields:Na,sectionTitle:J(`engine.inspector.moreFields`,l)}),[f,x,l]),w=e=>{i({[t]:{...d,...e}})};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.view.kind`,l),title:String(g||e.name||t),onClose:()=>o?.(),closeLabel:J(`engine.inspector.view.close`,l),hideClose:r,children:[(0,Y.jsx)(G,{label:J(`engine.inspector.view.label`,l),value:g,onCommit:e=>{i({label:e,[t]:{...d,label:e}})},placeholder:J(`engine.inspector.view.labelPlaceholder`,l),disabled:a}),(0,Y.jsx)(K,{label:J(`engine.inspector.view.type`,l),value:p,options:m,onCommit:e=>w({type:e}),disabled:a}),(0,Y.jsx)(Ma,{label:J(`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:J(`engine.inspector.view.objectPlaceholder`,l),disabled:a}),!f&&(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(fa,{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)(Fi,{schema:S,form:C,value:d,hiddenFields:[`type`,`object`,`label`],readOnly:a,widgetContext:b,onChange:e=>{let n={...e};for(let e of Ia)e in d?n[e]=d[e]:delete n[e];i({[t]:n})}}):(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:J(`engine.inspector.view.noSchema`,l)})})]})}function Ba({appSlug:e}={}){let t=u(),n=pi(),{entries:r}=Zr(n),[i,a]=X.useState(!1),[o,s]=X.useState(``),[c,l]=X.useState(null),[d,f]=X.useState(!1),[p,m]=X.useState(0),h=X.useMemo(()=>zi(),[]);X.useEffect(()=>{function e(e){(e.metaKey||e.ctrlKey)&&e.shiftKey&&e.key.toLowerCase()===`m`&&(e.preventDefault(),a(e=>!e))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[]),X.useEffect(()=>{if(!i||c!=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||l(t)}finally{e||f(!1)}})(),()=>{e=!0}},[i,c,d,r,n]);let g=X.useMemo(()=>{let e=o.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)||hi(t.type,h,t.label).toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e)).slice(0,8).map(e=>({kind:`type`,entry:e})),n=(c??[]).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]},[o,r,c]);X.useEffect(()=>{m(0)},[o,i]);function _(n){a(!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)(ve,{open:i,onOpenChange:a,children:(0,Y.jsxs)(Re,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(Ht,{className:`sr-only`,children:(0,Y.jsx)(Lt,{children:J(`engine.quickfind.title`,h)})}),(0,Y.jsxs)(`div`,{className:`border-b px-3 py-2 flex items-center gap-2`,children:[(0,Y.jsx)(N,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(H,{autoFocus:!0,placeholder:J(`engine.quickfind.placeholder`,h),value:o,onChange:e=>s(e.target.value),onKeyDown:v,className:`border-0 shadow-none focus-visible:ring-0 px-0`}),(0,Y.jsx)(jt,{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)(B,{className:`h-3.5 w-3.5 animate-spin`}),J(`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:J(`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)(W,{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:hi(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)(F,{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)(jt,{children:`↑`}),` `,(0,Y.jsx)(jt,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(jt,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(jt,{children:`⌘`}),(0,Y.jsx)(jt,{children:`⇧`}),(0,Y.jsx)(jt,{children:`M`}),` toggle`]})]})]})})}var Va=new Set([`system`,`cloud`]);function Ha(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&&!Va.has(e.scope));return t.sort((e,t)=>e.name.localeCompare(t.name)),t.map(e=>({id:e.id,name:e.name}))}var Ua={data:fr,ui:D,automation:Je,ai:Yt,system:le,platform:le,identity:kr,security:kr},Wa=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ga=new Set([`field`,`package`]);function Ka(){let e=pi(),{loading:t,error:n,entries:r}=Zr(e),i=X.useMemo(()=>zi(),[]),[a,o]=X.useState(``),[l,u]=X.useState(`all`),[d,f]=X.useState(!1),[p,m]=s(),[h,g]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;g(Ha(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}=xi(e,`warning`,v??void 0),E=X.useMemo(()=>r.filter(e=>Ga.has(e.type)||!v?!1:(w[e.type]??[]).includes(v)),[r,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(a){let t=a.toLowerCase();if(!(e.type.toLowerCase().includes(t)||(e.label??``).toLowerCase().includes(t)||hi(e.type,i,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=Wa.indexOf(e),r=Wa.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:J(`engine.directory.loading`,i)}):n?(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-destructive`,children:[J(`engine.directory.loadFailed`,i),`: `,n]}):(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:J(`engine.directory.title`,i)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 max-w-3xl`,dangerouslySetInnerHTML:{__html:q(`engine.directory.description`,i,{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)(N,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`engine.directory.search`,i),value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(L,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[J(`engine.directory.writableOnly`,i),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(L,{asChild:!0,variant:`outline`,size:`sm`,className:`border-destructive/40 text-destructive hover:bg-destructive/10 hover:text-destructive`,children:(0,Y.jsxs)(c,{to:`./_diagnostics`,children:[(0,Y.jsx)(z,{className:`h-3.5 w-3.5 mr-1`}),q(`engine.directory.diagnosticsLink`,i,{count:x.total})]})}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-1.5`,children:[J(`engine.directory.quickFind`,i),` `,(0,Y.jsx)(jt,{children:`⌘`}),(0,Y.jsx)(jt,{children:`⇧`}),(0,Y.jsx)(jt,{children:`M`})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 mt-3 flex-wrap`,children:[(0,Y.jsx)(qa,{domain:`all`,label:J(`engine.directory.all`,i),active:l===`all`,count:D.all??0,onClick:()=>u(`all`)}),Wa.filter(e=>D[e]).map(e=>(0,Y.jsx)(qa,{domain:e,label:Vi(e,i),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)(_e,{children:[(0,Y.jsx)(Bt,{children:`No project packages installed`}),(0,Y.jsx)(Fe,{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)(_e,{children:[(0,Y.jsx)(Bt,{children:J(`engine.directory.noMatches`,i)}),(0,Y.jsx)(Fe,{children:J(`engine.directory.noMatchesHint`,i)})]}),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)(Ua[e]??an,{className:`h-3.5 w-3.5`}),Vi(e,i),` (`,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)(Ja,{entry:e,locale:i,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)(Ba,{})]})}function qa({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 Ja({entry:e,locale:t,invalidCount:n=0,warnCount:r=0,itemCount:i=0,lockedCount:a=0,packageFilter:o}){let s=hi(e.type,t,e.label);return(0,Y.jsxs)(c,{to:o?`./${encodeURIComponent(e.type)}?package=${encodeURIComponent(o)}`:`./${encodeURIComponent(e.type)}`,className:`block p-4 border rounded-lg hover:bg-accent transition-colors `+(n>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:[n>0&&(0,Y.jsx)(`span`,{title:q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),"aria-label":q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),children:(0,Y.jsx)(z,{className:`h-3.5 w-3.5 text-destructive shrink-0`})}),s]}),(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)(W,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:q(`engine.directory.itemCountTooltip`,t??`en`,{count:i}),children:i}),n>0&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,title:q(`engine.directory.invalidTooltip`,t??`en`,{count:n}),children:n}),r>0&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300 bg-amber-500/[0.06]`,title:q(`engine.directory.warnTooltip`,t??`en`,{count:r}),children:r}),a>0&&(0,Y.jsxs)(W,{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:`${a} locked item${a===1?``:`s`} — see ADR-0010`,"aria-label":`${a} locked items`,children:[(0,Y.jsx)(F,{className:`h-2.5 w-2.5`}),a]}),e.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,t)}):e.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,t)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:J(`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 Ya=`/api/v1/packages`;async function Xa(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 Za({scope:e}){let t=X.useMemo(()=>zi(),[]),n=e??`project`,r=n===`project`?`default`:n===`system`?`secondary`:`outline`,i=n===`project`?`engine.packages.scope.project`:n===`system`?`engine.packages.scope.system`:n===`cloud`?`engine.packages.scope.cloud`:``;return(0,Y.jsx)(W,{variant:r,children:i?J(i,t):n})}function Qa({pkg:e}){let t=X.useMemo(()=>zi(),[]),n=e.enabled!==!1&&e.status!==`disabled`;return(0,Y.jsx)(W,{variant:n?`default`:`outline`,children:J(n?`engine.packages.status.enabled`:`engine.packages.status.disabled`,t)})}var $a=/^[a-z0-9][a-z0-9._-]{1,254}$/i,eo=/^\d+\.\d+\.\d+$/;function to({open:e,onOpenChange:t,onCreated:n}){let r=X.useMemo(()=>zi(),[]),[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=$a.test(i),h=eo.test(c),g=m&&h&&!!o.trim()&&!u;async function _(){if(g){d(!0),p(null);try{await Xa(Ya,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:{id:i.trim(),name:o.trim(),version:c.trim(),type:`app`,scope:`project`}})}),n(i.trim());try{window.dispatchEvent(new CustomEvent(`objectui:packages-changed`))}catch{}t(!1)}catch(e){p(e?.message??J(`engine.packages.create.failed`,r))}finally{d(!1)}}}return(0,Y.jsx)(ve,{open:e,onOpenChange:t,children:(0,Y.jsxs)(Re,{children:[(0,Y.jsxs)(Ht,{children:[(0,Y.jsx)(Lt,{children:J(`engine.packages.create.title`,r)}),(0,Y.jsx)(cr,{children:q(`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)(U,{htmlFor:`pkg-id`,children:J(`engine.packages.create.id`,r)}),(0,Y.jsx)(H,{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:J(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(U,{htmlFor:`pkg-name`,children:J(`engine.packages.create.name`,r)}),(0,Y.jsx)(H,{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)(U,{htmlFor:`pkg-version`,children:J(`engine.packages.create.version`,r)}),(0,Y.jsx)(H,{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:J(`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)(z,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(Me,{children:[(0,Y.jsx)(L,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:J(`engine.cancel`,r)}),(0,Y.jsx)(L,{onClick:_,disabled:!g,children:J(u?`engine.packages.create.creating`:`engine.packages.create.submit`,r)})]})]})})}function no({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 ro({pkg:e,appBase:t,open:n,onOpenChange:r,onChanged:i}){let a=X.useMemo(()=>zi(),[]),[o,s]=X.useState(null),[l,u]=X.useState(null),[d,f]=X.useState(null);if(X.useEffect(()=>{u(null),s(null)},[e?.manifest.id]),X.useEffect(()=>{let t=e?.manifest.id;if(!n||!t){f(null);return}let r=!1;return Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(t)}`).then(e=>{r||f(e?.drafts??[])}).catch(()=>{r||f([])}),()=>{r=!0}},[n,e?.manifest.id]),!e)return null;let p=e.manifest.id,m=e.enabled!==!1&&e.status!==`disabled`,h=e.manifest.scope===`system`||e.manifest.scope===`cloud`;async function g(e,t,n){s(e),u(null);try{await t(),u({kind:`ok`,text:n}),i()}catch(e){u({kind:`err`,text:e?.message??J(`engine.packages.detail.actionFailed`,a)})}finally{s(null)}}return(0,Y.jsx)(At,{open:n,onOpenChange:r,children:(0,Y.jsxs)(De,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Ft,{children:[(0,Y.jsxs)(xe,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Tr,{className:`h-4 w-4`}),e.manifest.name||p]}),(0,Y.jsx)(Et,{className:`font-mono text-xs`,children:p})]}),(0,Y.jsxs)(`div`,{className:`mt-4`,children:[(0,Y.jsx)(no,{label:J(`engine.packages.col.version`,a),children:e.manifest.version||`—`}),(0,Y.jsx)(no,{label:J(`engine.packages.detail.type`,a),children:e.manifest.type||`—`}),(0,Y.jsx)(no,{label:J(`engine.packages.col.scope`,a),children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(no,{label:J(`engine.packages.col.status`,a),children:(0,Y.jsx)(Qa,{pkg:e})}),e.manifest.description&&(0,Y.jsx)(no,{label:J(`engine.packages.detail.description`,a),children:e.manifest.description})]}),(0,Y.jsx)(ze,{className:`my-4`}),(0,Y.jsxs)(c,{to:`${t}/metadata/object?package=${encodeURIComponent(p)}`,className:`inline-flex items-center gap-1.5 text-sm text-primary hover:underline`,onClick:()=>r(!1),children:[(0,Y.jsx)(Ut,{className:`h-3.5 w-3.5`}),J(`engine.packages.detail.browseMetadata`,a)]}),d&&d.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ze,{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:[J(`engine.packages.detail.pendingChanges`,a),(0,Y.jsx)(W,{variant:`secondary`,children:d.length})]}),(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:J(`engine.packages.detail.pendingHint`,a)}),!h&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(L,{size:`sm`,onClick:()=>g(`publish-drafts`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/publish-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{f((await Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(p)}`))?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(q(`engine.packages.detail.publishDraftsPartial`,a,{published:e.publishedCount??0,failed:e.failedCount}));return e}),J(`engine.packages.detail.publishDraftsOk`,a)),disabled:!!o,children:[(0,Y.jsx)(Ee,{className:`mr-1.5 h-3.5 w-3.5`}),o===`publish-drafts`?J(`engine.packages.detail.publishing`,a):q(`engine.packages.detail.publishApp`,a,{count:d.length})]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`discard-drafts`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/discard-drafts`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({})}).then(async e=>{try{f((await Xa(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(p)}`))?.drafts??[])}catch{f([])}if(e?.failedCount)throw Error(q(`engine.packages.detail.discardDraftsPartial`,a,{discarded:e.discardedCount??0,failed:e.failedCount}));return e}),J(`engine.packages.detail.discardDraftsOk`,a)),disabled:!!o,children:[(0,Y.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5`}),o===`discard-drafts`?J(`engine.packages.detail.discarding`,a):q(`engine.packages.detail.discardChanges`,a,{count:d.length})]})]}),(0,Y.jsx)(`ul`,{className:`space-y-1`,children:d.map(e=>(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(c,{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:()=>r(!1),children:[(0,Y.jsx)(he,{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.jsx)(ze,{className:`my-4`}),h?(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:J(`engine.packages.detail.kernelReadOnly`,a)}):(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:J(`engine.packages.detail.actions`,a)}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,Y.jsxs)(L,{size:`sm`,onClick:()=>g(`publish`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/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?q(`engine.packages.detail.publishBlocked`,a,{count:t}):e.validationErrors?.[0]?.message||J(`engine.packages.detail.nothingToPublish`,a))}return e}),J(`engine.packages.detail.published`,a)),disabled:!!o,children:[(0,Y.jsx)(Ee,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`publish`?`engine.packages.detail.publishing`:`engine.packages.detail.publish`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`revert`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/revert`,{method:`POST`}),J(`engine.packages.detail.reverted`,a)),disabled:!!o,children:[(0,Y.jsx)(Nt,{className:`mr-1.5 h-3.5 w-3.5`}),J(`engine.packages.detail.revert`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`toggle`,()=>Xa(`${Ya}/${encodeURIComponent(p)}/${m?`disable`:`enable`}`,{method:`PATCH`}),J(m?`engine.packages.detail.disabled`:`engine.packages.detail.enabled`,a)),disabled:!!o,children:[m?(0,Y.jsx)(It,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(Vt,{className:`mr-1.5 h-3.5 w-3.5`}),J(m?`engine.packages.detail.disable`:`engine.packages.detail.enable`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:()=>g(`export`,async()=>{let e=await Xa(`${Ya}/${encodeURIComponent(p)}/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=`${p}.package.json`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)},J(`engine.packages.detail.exported`,a)),disabled:!!o,children:[(0,Y.jsx)(k,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`export`?`engine.packages.detail.exporting`:`engine.packages.detail.export`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{let t=window.prompt(J(`engine.packages.detail.duplicatePrompt`,a),`${p}-copy`);if(!(!t||!t.trim())){s(`duplicate`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}/duplicate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({targetPackageId:t.trim(),targetName:`${e?.manifest.name??p} (copy)`})}),u({kind:`ok`,text:J(`engine.packages.detail.duplicated`,a)}),i()}catch(e){u({kind:`err`,text:e?.message??`Duplicate failed`})}finally{s(null)}}},disabled:!!o,children:[(0,Y.jsx)(Wn,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`duplicate`?`engine.packages.detail.duplicating`:`engine.packages.detail.duplicate`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{if(window.confirm(q(`engine.packages.detail.adoptConfirm`,a,{name:e?.manifest.name||p}))){s(`adopt`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}/adopt-orphans`,{method:`POST`}),u({kind:`ok`,text:J(`engine.packages.detail.adopted`,a)}),i()}catch(e){u({kind:`err`,text:e?.message??`Adopt failed`})}finally{s(null)}}},disabled:!!o,children:[(0,Y.jsx)(hr,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`adopt`?`engine.packages.detail.adopting`:`engine.packages.detail.adoptOrphans`,a)]}),(0,Y.jsxs)(L,{size:`sm`,variant:`outline`,onClick:async()=>{if(!window.confirm(q(`engine.packages.detail.deleteConfirm`,a,{name:e?.manifest.name||p})))return;let t=window.confirm(J(`engine.packages.detail.deleteKeepData`,a))?``:`?keepData=true`;s(`delete`),u(null);try{await Xa(`${Ya}/${encodeURIComponent(p)}${t}`,{method:`DELETE`}),i(),r(!1)}catch(e){u({kind:`err`,text:e?.message??J(`engine.packages.detail.deleteFailed`,a)})}finally{s(null)}},disabled:!!o,className:`text-destructive hover:bg-destructive/10 hover:text-destructive`,children:[(0,Y.jsx)(Wt,{className:`mr-1.5 h-3.5 w-3.5`}),J(o===`delete`?`engine.packages.detail.deleting`:`engine.packages.detail.deleteApp`,a)]})]})]}),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})]})})}function io(){let e=X.useMemo(()=>zi(),[]),{pathname:t}=a(),n=X.useMemo(()=>{let e=t.indexOf(`/component`);return e>=0?t.slice(0,e):t},[t]),[r,i]=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 Xa(Ya),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}),i(t)}catch(t){l(t?.message??J(`engine.packages.loadFailed`,e))}finally{s(!1)}},[e]);X.useEffect(()=>{T()},[T]),X.useEffect(()=>{if(!g)return;let e=r.find(e=>e.manifest.id===g.manifest.id);e&&e!==g&&_(e)},[r,g]);let E=X.useMemo(()=>{let e=u.trim().toLowerCase();return r.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)},[r,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(J(`engine.packages.import.invalidJson`,e))}if(!r||typeof r!=`object`||!r.id&&!r.name)throw Error(J(`engine.packages.import.invalidPackage`,e));w({kind:`ok`,text:q(`engine.packages.import.success`,e,{id:(await Xa(`/api/v1/marketplace/install-local`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({manifest:r})}))?.manifestId??r.id})}),await T()}catch(t){w({kind:`err`,text:t?.message??J(`engine.packages.import.failed`,e)})}finally{S(!1)}}},k=r.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)(Tr,{className:`h-5 w-5`})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold tracking-tight`,children:J(`engine.packages.title`,e)}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:J(`engine.packages.description`,e)})]})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(L,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Ct,{className:`mr-1.5 h-3.5 w-3.5 ${o?`animate-spin`:``}`}),J(`engine.packages.refresh`,e)]}),(0,Y.jsx)(`input`,{ref:b,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:O}),(0,Y.jsxs)(L,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(he,{className:`mr-1.5 h-3.5 w-3.5`}),J(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(L,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(V,{className:`mr-1.5 h-3.5 w-3.5`}),J(`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)(N,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`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)(Lr,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(U,{htmlFor:`show-kernel`,className:`text-sm text-muted-foreground`,children:q(`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)(Br,{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)(z,{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)(_e,{children:[(0,Y.jsx)(Bt,{children:J(`engine.packages.empty`,e)}),(0,Y.jsx)(Fe,{children:r.length===0?J(`engine.packages.emptyCreate`,e):J(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(or,{children:[(0,Y.jsx)(Qt,{children:(0,Y.jsxs)(Dr,{children:[(0,Y.jsx)(xn,{children:J(`engine.packages.col.name`,e)}),(0,Y.jsx)(xn,{children:`ID`}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.version`,e)}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.scope`,e)}),(0,Y.jsx)(xn,{className:`w-24`,children:J(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(qn,{children:E.map(e=>(0,Y.jsxs)(Dr,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(Tn,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(Tn,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(Tn,{children:e.manifest.version||`—`}),(0,Y.jsx)(Tn,{children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(Tn,{children:(0,Y.jsx)(Qa,{pkg:e})})]},e.manifest.id))})]})}),(0,Y.jsx)(to,{open:m,onOpenChange:h,onCreated:async()=>{await T()}}),(0,Y.jsx)(ro,{pkg:g,appBase:n,open:v,onOpenChange:y,onChanged:()=>void T()})]})}var ao=new Set([`field`,`package`]),oo={data:fr,ui:D,automation:Je,ai:Yt,system:le,platform:le,identity:kr,security:kr},so={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`}},co=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],lo=[`object`,`view`,`page`,`dashboard`,`report`,`flow`,`action`,`agent`],uo={object:er,dashboard:at,page:Ae,report:lt,record:an,metadata:D};function fo(){let e=new Date().getHours();return e<12?`engine.home.greetingMorning`:e<18?`engine.home.greetingAfternoon`:`engine.home.greetingEvening`}function po(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 mo(){let e=pi(),{loading:t,entries:n}=Zr(e),{recentItems:r}=Wr(),i=X.useMemo(()=>zi(),[]),[a,o]=s(),[l,u]=X.useState(null);X.useEffect(()=>{let t=!1;return(async()=>{try{let n=await e.list(`package`);if(t)return;u(Ha(n))}catch{t||u([])}})(),()=>{t=!0}},[e]);let d=a.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(a);e.set(`package`,l[0].id),o(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}=xi(e,`warning`,f??void 0),b=X.useMemo(()=>n.filter(e=>ao.has(e.type)||!f?!1:(v[e.type]??[]).includes(f)),[f,n,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])=>(co.indexOf(e)===-1?99:co.indexOf(e))-(co.indexOf(t)===-1?99:co.indexOf(t)))},[b,_]),C=X.useMemo(()=>{let e=new Map(x.map(e=>[e.type,e]));return lo.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:J(`engine.home.loading`,i)}):(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)(Yt,{className:`h-4 w-4`}),J(fo(),i)]}),(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:J(`engine.home.subtitle`,i)}),(0,Y.jsxs)(`div`,{className:`mt-5 flex flex-wrap items-center gap-2.5`,children:[(0,Y.jsx)(L,{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)(c,{to:m,children:[(0,Y.jsx)(D,{className:`mr-1.5 h-4 w-4`}),J(`engine.home.browseAll`,i)]})}),(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)(N,{className:`h-3.5 w-3.5`}),J(`engine.directory.quickFind`,i),` ⌘⇧M`]})]})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-3 gap-3`,children:[(0,Y.jsx)(ho,{value:b.length,label:J(`engine.home.statTypes`,i)}),(0,Y.jsx)(ho,{value:x.length,label:J(`engine.home.statWritable`,i)}),(0,Y.jsx)(ho,{value:l.length,label:J(`engine.home.statPackages`,i)})]})]})]}),(0,Y.jsxs)(`section`,{className:`grid grid-cols-2 gap-4 lg:grid-cols-4`,children:[(0,Y.jsx)(go,{icon:D,from:`from-indigo-500`,to:`to-violet-600`,value:b.length,label:J(`engine.home.statTypes`,i),to_link:m}),(0,Y.jsx)(go,{icon:Ye,from:`from-sky-500`,to:`to-blue-600`,value:x.length,label:J(`engine.home.statWritable`,i),to_link:m}),(0,Y.jsx)(go,{icon:Tr,from:`from-emerald-500`,to:`to-teal-600`,value:l.length,label:J(`engine.home.statPackages`,i),to_link:h}),(0,Y.jsxs)(c,{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)(Ye,{className:`h-5 w-5`}):(0,Y.jsx)(z,{className:`h-5 w-5`})}),(0,Y.jsx)(mt,{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?J(`engine.home.allHealthy`,i):w}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:J(T?`engine.home.allHealthyHint`:`engine.home.statIssues`,i)})]})]})]}),C.length>0&&(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(_o,{icon:V,title:J(`engine.home.quickActions`,i),hint:J(`engine.home.quickActionsHint`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 flex flex-wrap gap-2.5`,children:C.map(e=>(0,Y.jsx)(L,{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)(c,{to:`metadata/${encodeURIComponent(e.type)}/new${p}`,children:[(0,Y.jsx)(V,{className:`mr-1 h-3.5 w-3.5 text-primary transition-transform group-hover:rotate-90`}),q(`engine.home.newItem`,i,{label:hi(e.type,i,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)(_o,{icon:D,title:J(`engine.home.explore`,i),hint:J(`engine.home.exploreHint`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 grid gap-4 sm:grid-cols-2`,children:S.map(([e,t])=>(0,Y.jsx)(vo,{domain:e,group:t,countsByType:_,locale:i,packageSuffix:p},e))})]}),(0,Y.jsxs)(`section`,{children:[(0,Y.jsx)(_o,{icon:Zt,title:J(`engine.home.recent`,i)}),(0,Y.jsx)(`div`,{className:`mt-3 rounded-2xl border bg-card p-2`,children:r.length===0?(0,Y.jsx)(`div`,{className:`px-3 py-8 text-center text-xs text-muted-foreground`,children:J(`engine.home.recentEmpty`,i)}):(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:r.slice(0,8).map(e=>{let t=uo[e.type]??an;return(0,Y.jsx)(`li`,{children:(0,Y.jsxs)(c,{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:po(e.visitedAt,i)})]}),(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})},e.id)})})})]})]})]}),(0,Y.jsx)(Ba,{})]})}function ho({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 go({icon:e,from:t,to:n,value:r,label:i,to_link:a}){return(0,Y.jsxs)(c,{to:a,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} ${n} text-white shadow-sm`,children:(0,Y.jsx)(e,{className:`h-5 w-5`})}),(0,Y.jsx)(mt,{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:r}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i})]})]})}function _o({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 vo({domain:e,group:t,countsByType:n,locale:r,packageSuffix:i}){let a=oo[e]??an,o=so[e]??so.other,s=t.slice(0,6),l=t.length-s.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 ${o.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 ${o.from} ${o.to} text-white shadow-sm`,children:(0,Y.jsx)(a,{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:Vi(e,r)}),(0,Y.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.length,` `,J(`engine.home.typesLower`,r)]})]})]}),(0,Y.jsxs)(`div`,{className:`mt-3 flex flex-wrap gap-1.5`,children:[s.map(e=>(0,Y.jsxs)(c,{to:`metadata/${encodeURIComponent(e.type)}${i}`,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:hi(e.type,r,e.label)}),(0,Y.jsx)(`span`,{className:`tabular-nums text-[10px] text-muted-foreground`,children:n[e.type]??0})]},e.type)),l>0&&(0,Y.jsxs)(c,{to:`metadata${i}`,className:`inline-flex items-center gap-1 rounded-lg px-2 py-1 text-xs font-medium ${o.text} hover:underline`,children:[`+`,l]})]})]})}function yo({entry:e,itemName:t,subtitle:n,stats:r,actions:i,children:o}){let s=e?.type??``,l=X.useMemo(()=>zi(),[]),u=hi(s,l,e?.label),{pathname:d}=a(),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)(c,{to:f,className:`hover:text-foreground shrink-0`,children:J(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(kt,{className:`h-3 w-3 shrink-0`}),(0,Y.jsx)(c,{to:`${f}/${encodeURIComponent(s)}`,className:`hover:text-foreground shrink-0`,children:u}),(0,Y.jsx)(kt,{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)(W,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,l)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] h-5 px-1.5 text-muted-foreground`,children:J(`engine.badge.readOnly`,l)})]}),n&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:n}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 shrink-0`,children:[r?.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)),i]})]}):(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)(c,{to:f,className:`hover:text-foreground`,children:J(`engine.breadcrumb.allTypes`,l)}),(0,Y.jsx)(kt,{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:s}),e?.domain&&(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(W,{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:J(`engine.badge.writable`,l)}):e?.allowRuntimeCreate?(0,Y.jsx)(W,{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:J(`engine.badge.createOnly`,l)}):(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px] text-muted-foreground`,children:J(`engine.badge.readOnly`,l)})]}),n&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground mt-1`,children:n}),!n&&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:[r?.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)),i]})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:o})]})}var bo={primary:`default`,secondary:`secondary`,danger:`destructive`,ghost:`ghost`,link:`link`};function xo(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 So({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`){Vr.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=xo(e.target??``,o,i);if(!s){Vr.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();Vr.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} ✓`);Vr.success(n)}e.refreshAfter&&r?.()}catch(e){Vr.error(`${t}: ${e?.message??String(e)}`)}finally{a(null)}};return(0,Y.jsxs)(Y.Fragment,{children:[f.map(e=>{let t=e.icon?aa(e.icon):null,n=i===e.name;return(0,Y.jsxs)(L,{size:`sm`,variant:bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(B,{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)(Jr,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(qr,{state:c,onAcknowledge:()=>l({open:!1})})]})}function Co(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 To(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 Eo(e){return wo.get(e)}function Do(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 Oo(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 ko(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 Ao({type:e}){let t=i(),n=e??t.type??``;if(n===`package`)return(0,Y.jsx)(r,{to:`/apps/${t.appName??`studio`}/component/developer/packages`,replace:!0});let a=Eo(n);if(a?.ListPage){let e=a.ListPage;return(0,Y.jsx)(e,{type:n})}return(0,Y.jsx)(jo,{type:n,appName:t.appName})}function jo({type:e,appName:t}){let n=u(),r=pi(),{entries:i}=Zr(r),a=i.find(t=>t.type===e),o=Oo(e,a),[l,d]=X.useState([]),[f,p]=X.useState(!0),[m,h]=X.useState(null),[g,_]=X.useState(``),[v,y]=X.useState(`all`),[b,x]=s(),[S,C]=X.useState(0),[w,T]=X.useState(null);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await r.list(`package`);if(e)return;T(Ha(t))}catch{e||T([])}})(),()=>{e=!0}},[r]);let[E,D]=X.useState(null);X.useEffect(()=>{let e=!1;if(!t){D(null);return}return(async()=>{try{let n=await r.list(`app`);if(e)return;D((n??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).find(e=>e?.name===t||e?._packageId===t)?._packageId??null)}catch{e||D(null)}})(),()=>{e=!0}},[r,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 l){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,l,E]);X.useEffect(()=>{if(!w||w.length===0||O&&w.some(e=>e.id===O)||!(E&&w.some(e=>e.id===E))&&l.length===0||!k)return;let e=new URLSearchParams(b);e.set(`package`,k),x(e,{replace:!0})},[w,O,l,k,E]);let A=k?`?package=${encodeURIComponent(k)}`:``,[j,M]=X.useState(!1),P=X.useCallback(()=>{let e=w??[];if(w!==null&&e.length===0){M(!0);return}if(e.length>0&&!k){n(`./new?package=${encodeURIComponent(e[0].id)}`);return}n(`./new${A}`)},[w,k,A,n]);X.useEffect(()=>{let t=!1;return p(!0),h(null),(async()=>{try{let n=await r.list(e);if(t)return;d((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:ko(t,e?.source),diagnostics:n}})),p(!1)}catch(e){t||(h(e?.message??String(e)),p(!1))}})(),()=>{t=!0}},[r,e,S]);let ee=o.searchableFields??[`name`,`label`,`description`],I=X.useMemo(()=>l.filter(e=>o.listFilter&&!o.listFilter(e.item)||!k?!1:e.item?._packageId===k),[l,k,o]),te=I.filter(e=>!(!yi(e.item,g,ee)||v!==`all`&&e.source!==v)),ne=X.useMemo(()=>{let e={all:I.length,artifact:0,runtime:0};for(let t of I)e[t.source]++;return e},[I]),re=X.useMemo(()=>I.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[I]),ie=X.useMemo(()=>I.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[I]),ae=o.listColumns??Mo(o.primaryKey??`name`),R=zi(),oe=hi(e,R,a?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=J(t,R);return n===t?e.label:n};return(0,Y.jsx)(yo,{entry:a??{type:e,label:e},stats:[{label:J(`engine.list.items`,R),value:I.length},{label:J(`engine.list.filtered`,R),value:te.length},...re>0?[{label:J(`engine.list.invalid`,R),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(z,{className:`w-3.5 h-3.5`}),re]})}]:[],...ie>0?[{label:J(`engine.list.warnings`,R),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(z,{className:`w-3.5 h-3.5`}),ie]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(So,{entry:a,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(L,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:J(`engine.list.refresh`,R),children:(0,Y.jsx)(Ct,{className:`h-4 w-4`})}),(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsxs)(L,{size:`sm`,variant:o.createFields?`default`:`outline`,onClick:P,title:o.createFields?q(`engine.list.createHint`,R,{type:oe}):void 0,children:[(0,Y.jsx)(V,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,R)]})]}),children:(0,Y.jsxs)(`div`,{className:`p-6 space-y-4`,children:[(0,Y.jsx)(to,{open:j,onOpenChange:M,onCreated:e=>n(`./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)(N,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(H,{className:`pl-8`,placeholder:J(`engine.list.search`,R),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(ur,{value:v,onValueChange:y,children:[(0,Y.jsx)(zt,{className:`w-[180px]`,children:(0,Y.jsx)(qt,{})}),(0,Y.jsxs)(Pe,{children:[(0,Y.jsxs)(Gt,{value:`all`,children:[J(`engine.list.allSources`,R),` (`,ne.all,`)`]}),(0,Y.jsxs)(Gt,{value:`artifact`,children:[J(`engine.list.source.artifact`,R),` (`,ne.artifact,`)`]}),(0,Y.jsxs)(Gt,{value:`runtime`,children:[J(`engine.list.source.runtime`,R),` (`,ne.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[J(`engine.edit.loading`,R),` `,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)(_e,{children:[(0,Y.jsx)(Bt,{children:`No project packages installed`}),(0,Y.jsx)(Fe,{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&&te.length===0&&(0,Y.jsxs)(_e,{children:[(0,Y.jsx)(Bt,{children:I.length===0?q(`engine.list.emptyType`,R,{type:oe}):q(`engine.list.emptyQuery`,R,{query:g})}),(0,Y.jsx)(Fe,{children:o.emptyStateHint??(a?.allowOrgOverride||a?.allowRuntimeCreate?q(`engine.list.createHint`,R,{type:oe}):J(`engine.list.readOnlyHint`,R))}),I.length===0&&(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(L,{onClick:P,children:[(0,Y.jsx)(V,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,R)]})})]}),!f&&te.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:J(`engine.list.col.source`,R)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:te.map((e,t)=>{let n=o.primaryKey??`name`,r=String(e.item[n]??`(unnamed-${t})`),i=e.item._packageId,a=i&&i!==`sys_metadata`?`?package=${encodeURIComponent(i)}`:A,s=e.diagnostics?.valid===!1,l=e.diagnostics?.errors??[],u=e.diagnostics?.warnings??[],d=!s&&u.length>0,f=s?l.slice(0,3).map(e=>`${e.path||`(root)`}: ${e.message}`).join(`
3
3
  `)+(l.length>3?`\n+${l.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,n)=>{let i=e.item[t.key],o=t.render?t.render(i,e.item):No(i);return(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:n===0?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[s&&(0,Y.jsx)(`span`,{className:`inline-flex`,"aria-label":J(`engine.list.invalidTitle`,R),title:`${q(`engine.list.invalidCount`,R,{count:l.length})}\n${f}`,children:(0,Y.jsx)(z,{className:`w-3.5 h-3.5 text-destructive shrink-0`})}),d&&(0,Y.jsx)(`span`,{className:`inline-flex`,"aria-label":J(`engine.list.warnTitle`,R),title:`${q(`engine.list.warnCount`,R,{count:u.length})}\n${f}`,children:(0,Y.jsx)(z,{className:`w-3.5 h-3.5 text-amber-600 dark:text-amber-400 shrink-0`})}),(0,Y.jsx)(c,{to:`./${encodeURIComponent(r)}${a}`,className:`text-primary hover:underline font-mono`,children:o})]}):o},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)(F,{className:`h-3 w-3`})}),(0,Y.jsx)(W,{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`?`${J(`engine.list.source.artifactDesc`,R)}${e.item._packageId?` (${e.item._packageId})`:``}`:J(`engine.list.source.runtimeDesc`,R),children:J(`engine.list.source.${e.source}`,R)})]})]},r+t)})})]})})]})})}function Mo(e){return[{key:e,label:e,width:`30%`},{key:`label`,label:`Label`,width:`30%`},{key:`description`,label:`Description`}]}function No(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 Po={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 Fo(e,t){let n=Io(e)?e:{},r=Io(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`:Lo(o)===Lo(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 Io(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Lo(e){try{return JSON.stringify(e,(e,t)=>Io(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}catch{return String(e)}}function Ro(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 zo(e,t){if(e==null)return 0;let n=0;for(let r of Fo(e,t))r.status!==`unchanged`&&(n+=1);return n}function Bo({layered:e,loading:t,locale:n}){if(t)return(0,Y.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground`,children:J(`engine.edit.loading`,n)});if(!e)return(0,Y.jsx)(`div`,{className:`p-4 text-sm text-muted-foreground`,children:J(`engine.layers.diff.noBaseline`,n)});let r=e.overlay!=null;return(0,Y.jsxs)(Gn,{defaultValue:`diff`,className:`w-full`,children:[(0,Y.jsxs)(dn,{className:`grid grid-cols-4 w-fit`,children:[(0,Y.jsx)(yn,{value:`diff`,children:J(`engine.layers.diff`,n)}),(0,Y.jsxs)(yn,{value:`code`,children:[J(`engine.layers.code`,n),(0,Y.jsx)(W,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`artifact`})]}),(0,Y.jsxs)(yn,{value:`overlay`,children:[J(`engine.layers.overlay`,n),r?(0,Y.jsx)(W,{className:`ml-1.5 text-[10px] bg-emerald-600 text-emerald-50`,children:e.overlayScope??`set`}):(0,Y.jsx)(W,{variant:`outline`,className:`ml-1.5 text-[10px] text-muted-foreground`,children:`none`})]}),(0,Y.jsxs)(yn,{value:`effective`,children:[J(`engine.layers.effective`,n),(0,Y.jsx)(W,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`merged`})]})]}),(0,Y.jsx)(wr,{value:`diff`,className:`mt-3`,children:(0,Y.jsx)(Vo,{code:e.code,effective:e.effective,locale:n})}),(0,Y.jsx)(wr,{value:`code`,className:`mt-3`,children:(0,Y.jsx)(Uo,{payload:e.code,emptyHint:J(`engine.layers.diff.noBaseline`,n)})}),(0,Y.jsx)(wr,{value:`overlay`,className:`mt-3`,children:(0,Y.jsx)(Uo,{payload:e.overlay,emptyHint:J(`engine.layers.diff.noChanges`,n)})}),(0,Y.jsx)(wr,{value:`effective`,className:`mt-3`,children:(0,Y.jsx)(Uo,{payload:e.effective,emptyHint:`No effective value resolved.`})})]})}function Vo({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:J(`engine.layers.diff.noBaseline`,n)});let a=X.useMemo(()=>Fo(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:q(`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)(Lr,{checked:r,onCheckedChange:i,"aria-label":J(`engine.layers.diff.showUnchanged`,n)}),J(`engine.layers.diff.showUnchanged`,n),(0,Y.jsx)(W,{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:J(`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:J(`engine.layers.diff.field`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:J(`engine.layers.diff.code`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:J(`engine.layers.diff.effective`,n)}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:J(`engine.layers.diff.status`,n)})]}),(0,Y.jsx)(`div`,{className:`divide-y`,children:s.map(e=>{let t=Po[e.status];return(0,Y.jsxs)(`div`,{className:M(`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)(Ho,{value:e.codeValue,muted:e.status===`added`}),(0,Y.jsx)(Ho,{value:e.effectiveValue,muted:e.status===`removed`}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:(0,Y.jsx)(`span`,{className:M(`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium`,t.badge),children:J(`engine.layers.diff.${e.status}`,n)})})]},e.key)})})]})]})}function Ho({value:e,muted:t}){let n=Ro(e);return(0,Y.jsx)(`div`,{className:M(`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 Uo({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 Wo={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`},Go={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 Ko(e,t){return J(e===`added`?`designer.canvas.diffAdded`:e===`removed`?`designer.canvas.diffRemoved`:`designer.canvas.diffChanged`,t)}function qo(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 Jo(e,t){let n=0;for(let r of Fo(e,t))r.status!==`unchanged`&&(n+=1);return n}function Yo({published:e,draft:t,locale:n,className:r}){let i=X.useMemo(()=>Fo(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:J(`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 ${Go[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 ${Wo[t]}`,children:Ko(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:qo(e.effectiveValue)}):t===`removed`?(0,Y.jsx)(`del`,{className:`text-rose-700 dark:text-rose-400`,children:qo(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:qo(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:qo(e.effectiveValue)})]})]},e.key)})})}function Xo(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 Zo(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 Qo(e){return typeof e==`string`?e.replace(/[_-]+/g,` `).split(/\s+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(` `):``}function $o(e){if(typeof e!=`string`)return``;let t=e.trim().match(/^[^\s_-]+/);return t?t[0]:``}function es(e,t){let n=typeof t==`string`?t:t==null?``:String(t);switch(e){case`slugify`:return Xo(n);case`plural-en`:return Zo(n);case`titlecase`:return Qo(n);case`first-token`:return $o(n);default:return n}}function ts(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=es(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 ns(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 rs({type:e,name:t,parentItem:n,onOpen:r}){let i=pi(),a=u(),o=X.useMemo(()=>Do(e),[e]),[s,c]=X.useState([]),[l,d]=X.useState(``),[f,p]=X.useState({});if(X.useEffect(()=>{if(o.length===0){c([]);return}let e=!1,r=[...o].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(is)}}return{childType:e.type,anchor:e.anchor,loading:!0,error:null,items:[]}});return c(r),Promise.all(r.map(async n=>{if(n.anchor.source===`embedded`)return n;try{let r=await i.list(n.childType);if(e)return n;let a=n.anchor.match??(()=>!1),o=r.filter(e=>a(e,t)).map(e=>is(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||c(t)}),()=>{e=!0}},[i,e,t,o,n]),o.length===0)return(0,Y.jsxs)(_e,{children:[(0,Y.jsx)(Bt,{children:`No related metadata`}),(0,Y.jsxs)(Fe,{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=s.reduce((e,t)=>e+t.items.length,0),h=s.some(e=>e.loading),g=l.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)(N,{className:`absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(H,{placeholder:`Search related…`,value:l,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`}`})]}),s.map(n=>{let i=g?n.items.filter(e=>e.name.toLowerCase().includes(g)||(e.label??``).toLowerCase().includes(g)):n.items,o=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]:!o})),children:[(0,Y.jsx)(kt,{className:M(`h-4 w-4 text-muted-foreground transition-transform`,!o&&`rotate-90`)}),(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:n.anchor.groupLabel??n.childType}),(0,Y.jsx)(W,{variant:`outline`,className:`text-[10px]`,children:n.loading?`…`:i.length})]}),(0,Y.jsx)(L,{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}a(`../../${encodeURIComponent(n.childType)}/_new?anchor=${encodeURIComponent(`${e}:${t}`)}`)},title:n.anchor.source===`embedded`?`Edit in Form tab`:`New ${n.childType}`,children:(0,Y.jsx)(V,{className:`h-3.5 w-3.5`})})]}),!o&&(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)(B,{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)(Ut,{className:`h-3.5 w-3.5 text-muted-foreground inline`})})]},`${i.name}-${a}`))})]})]})]},n.childType)})]})}function is(e){return{name:as(e,[`name`,`id`,`key`])??`(unnamed)`,label:as(e,[`label`,`title`,`displayName`]),description:as(e,[`description`,`summary`]),raw:e}}function as(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.length>0)return t}}function os({parentType:e,parentName:t,embeddedPath:n,itemName:r,editAs:i,initialRaw:a,onSaved:o}){let s=X.useMemo(()=>zi(),[]),c=pi(),{entries:l}=Zr(c),u=i?l.find(e=>e.type===i):void 0,d=!u?.schema&&i?cs[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(J(`engine.embedded.saveNoPath`,s));return}_(!0),y(null),x([]);try{let i=await c.layered(e,t),a=ss(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:ei(String(e.message??`Invalid`),s)}});x(i),y(i.length===1?J(`engine.validation.failedOne`,s):q(`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:J(`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:J(`engine.embedded.readOnlyParent`,s)}),(0,Y.jsx)(Fi,{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)(L,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(B,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(Ze,{className:`h-4 w-4 mr-1`}),q(`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:J(`engine.embedded.readOnly`,s)}),(0,Y.jsx)(`div`,{children:J(`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:q(`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(`${J(`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)(z,{className:`h-4 w-4 inline mr-1`}),` `,v]}),(0,Y.jsx)(`div`,{className:`flex justify-end`,children:(0,Y.jsxs)(L,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(B,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(Ze,{className:`h-4 w-4 mr-1`}),q(`engine.embedded.saveIntoParent`,s,{parentType:`parent`})]})})]})}function ss(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 cs={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 ls({target:e,onClose:t,parentContext:n}){let r=u(),i=e?.kind===`metadata`,a=e?.kind===`embedded`,o=i?e.type:a?e.groupLabel:``,s=i?e.name:a?e.itemName:``;return(0,Y.jsx)(At,{open:e!==null,onOpenChange:e=>{e||t()},children:(0,Y.jsxs)(De,{side:`right`,className:M(`w-[92vw] sm:max-w-[1100px] p-0 flex flex-col gap-0`),children:[(0,Y.jsxs)(Ft,{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)(W,{variant:`outline`,className:`font-mono text-[10px]`,children:o}),(0,Y.jsx)(xe,{className:`font-mono text-base truncate`,children:s}),(0,Y.jsx)(`div`,{className:`ml-auto flex items-center gap-1`,children:i&&(0,Y.jsxs)(L,{variant:`ghost`,size:`sm`,onClick:()=>{r(`../../${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}`),t()},title:`Open in full page`,children:[(0,Y.jsx)(Ut,{className:`h-3.5 w-3.5 mr-1`}),`Open full page`]})})]}),n&&(0,Y.jsxs)(Et,{className:`text-xs`,children:[a?`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:[i&&(0,Y.jsx)(lc,{type:e.type,name:e.name,embedded:!0},`${e.type}/${e.name}`),a&&(0,Y.jsx)(os,{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 us({type:e,name:t}){let n=i(),r=e??n.type??``,a=t??n.name??``,o=u(),s=pi(),{entries:c}=Zr(s),l=c.find(e=>e.type===r),[d,f]=X.useState(0),[p,m]=X.useState(0);return(0,Y.jsx)(yo,{entry:l??{type:r,label:r},itemName:a,subtitle:`Version history`,stats:[{label:`Events`,value:p}],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(L,{variant:`ghost`,size:`sm`,onClick:()=>o(`../${encodeURIComponent(a)}`),children:[(0,Y.jsx)(Or,{className:`h-4 w-4 mr-1`}),`Back to item`]}),(0,Y.jsx)(L,{variant:`ghost`,size:`sm`,onClick:()=>f(e=>e+1),children:(0,Y.jsx)(Ct,{className:`h-4 w-4`})})]}),children:(0,Y.jsx)(`div`,{className:`p-6 max-w-4xl`,children:(0,Y.jsx)(ds,{type:r,name:a,refreshKey:d,onCount:m,client:s,onRollback:()=>f(e=>e+1)})})})}function ds({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)(B,{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)(_e,{children:[(0,Y.jsx)(Bt,{children:`No history yet`}),(0,Y.jsx)(Fe,{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)(W,{variant:`outline`,className:`text-[10px] font-mono`,children:[`seq `,e.seq??`–`]}),typeof e.version==`number`&&(0,Y.jsxs)(W,{variant:`outline`,className:`text-[10px] font-mono`,children:[`v`,e.version]}),r&&(0,Y.jsx)(W,{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:fs(i)}),o&&(0,Y.jsx)(L,{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)(B,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(ut,{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:ps(e)})]})]},`${e.seq??t}-${t}`)})})]})}function fs(e){try{let t=new Date(e);return Number.isNaN(t.getTime())?String(e):t.toLocaleString()}catch{return String(e)}}function ps(e){try{return JSON.stringify(e,null,2)}catch{return String(e)}}function ms(e){if(!e)return``;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString()}function hs(e){let t={allowed:{label:`allowed`,cls:`bg-emerald-50 text-emerald-700 border-emerald-200`,Icon:kr},denied:{label:`denied`,cls:`bg-rose-50 text-rose-700 border-rose-200`,Icon:ie},forced:{label:`forced`,cls:`bg-amber-50 text-amber-700 border-amber-200`,Icon:yt}},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 gs({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{l((await n.audit(e,t,{limit:100})).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,` `,J(`engine.edit.auditCount`,r)]}),(0,Y.jsxs)(L,{variant:`ghost`,size:`sm`,onClick:()=>void u(),disabled:i,className:`h-7 gap-1 text-xs`,title:J(`engine.edit.refresh`,r),children:[i?(0,Y.jsx)(B,{className:`h-3 w-3 animate-spin`}):(0,Y.jsx)(Ct,{className:`h-3 w-3`}),J(`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)(B,{className:`mr-2 h-3 w-3 animate-spin`}),J(`engine.edit.loading`,r)]}):!c||c.length===0?(0,Y.jsxs)(_e,{className:`py-10`,children:[(0,Y.jsx)(Bt,{children:J(`engine.edit.auditEmptyTitle`,r)}),(0,Y.jsx)(Fe,{children:J(`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:J(`engine.edit.auditColTime`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:J(`engine.edit.auditColActor`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:J(`engine.edit.auditColOperation`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:J(`engine.edit.auditColOutcome`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:J(`engine.edit.auditColLock`,r)}),(0,Y.jsx)(`th`,{className:`px-2 py-1.5 font-medium`,children:J(`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:ms(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)(W,{variant:`outline`,className:`text-[10px]`,children:e.operation})}),(0,Y.jsx)(`td`,{className:`px-2 py-1.5`,children:hs(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 _s=new Map;function vs(e,t){_s.set(e,t)}function ys(e){return _s.get(e)}var bs=new Map;function xs(e,t){bs.set(e,t)}function Ss(e){return bs.get(e)}var Cs=new Map;function ws(e,t){Cs.set(e,t)}function Ts(e){return Cs.get(e)}function Es(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&&ks(e.charCodeAt(r));)r++;if(r<e.length&&e.charCodeAt(r)===46)if(r++,r<e.length&&ks(e.charCodeAt(r)))for(r++;r<e.length&&ks(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&&ks(e.charCodeAt(r))){for(r++;r<e.length&&ks(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(Os(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(Ds(t)){do r++,i+=String.fromCharCode(t),t=e.charCodeAt(r);while(Ds(t));return o=15}if(Os(t))return r++,i+=String.fromCharCode(t),t===13&&e.charCodeAt(r)===10&&(r++,i+=`