@objectstack/console 11.1.0 → 11.2.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.
- package/dist/assets/{AdapterProvider-BTAMdG2T.js → AdapterProvider-BPgD5wI1.js} +1 -1
- package/dist/assets/{AiPendingActionsPage-BtiQFQw8.js → AiPendingActionsPage-Cojy8a-z.js} +1 -1
- package/dist/assets/{ApiConsolePage-CQJbzAsw.js → ApiConsolePage-o44winom.js} +1 -1
- package/dist/assets/{AppDocsIndex-CbHC6KGX.js → AppDocsIndex-CnVwFuo5.js} +1 -1
- package/dist/assets/{AppManagementPage-DOoQrTPO.js → AppManagementPage-Dzv2LTfe.js} +1 -1
- package/dist/assets/{ApprovalsInboxPage-D6eWYxCu.js → ApprovalsInboxPage-CbMAm2Z1.js} +1 -1
- package/dist/assets/{AuditLogPage-F85cQBBY.js → AuditLogPage-Ckb7Ei0l.js} +1 -1
- package/dist/assets/{ComponentNavView-g9qw3mhW.js → ComponentNavView-C1ZKriwP.js} +1 -1
- package/dist/assets/ConsoleFloatingChatbot-DqrmAZNg.js +1 -0
- package/dist/assets/{DashboardView-mIWO-jW_.js → DashboardView-PNh3ds7Y.js} +1 -1
- package/dist/assets/{DashboardWidgetInspector-DOnyBhGN.js → DashboardWidgetInspector-BqmZ8NCC.js} +1 -1
- package/dist/assets/{DeveloperHubPage-Ci0wA8GZ.js → DeveloperHubPage-YHIc76u2.js} +1 -1
- package/dist/assets/{ExpressionProvider-NqLS0ljf.js → ExpressionProvider-CMntDoz9.js} +1 -1
- package/dist/assets/{FlowRunsPage-CNz2_VFK.js → FlowRunsPage-daH77deA.js} +1 -1
- package/dist/assets/{IntegrationsPage-CAZ3nsKJ.js → IntegrationsPage-FpPdGLBF.js} +1 -1
- package/dist/assets/{InterfaceListPage-D1BbH0Iy.js → InterfaceListPage-Npe_tn_H.js} +1 -1
- package/dist/assets/{ManagedByBadge-6DwSVsdr.js → ManagedByBadge-CLEdt1ik.js} +1 -1
- package/dist/assets/{MarketplaceAccessDenied-Cyx7lSjy.js → MarketplaceAccessDenied-DiK0S3Vq.js} +1 -1
- package/dist/assets/{MarketplaceInstalledPage-C41H1YlB.js → MarketplaceInstalledPage-ytCNj-9Y.js} +1 -1
- package/dist/assets/{MarketplacePackagePage-Bihb2q1b.js → MarketplacePackagePage-CAsMrnZF.js} +1 -1
- package/dist/assets/{MarketplacePage-C2B6TMNM.js → MarketplacePage-Ct4PVYqJ.js} +1 -1
- package/dist/assets/{MetadataInspector-COEBMw6y.js → MetadataInspector-B3LWAl8X.js} +1 -1
- package/dist/assets/{MetadataProvider-D234gTjV.js → MetadataProvider-BRGGbotZ.js} +1 -1
- package/dist/assets/{PageView-DuiaqvzN.js → PageView-VljnDnGh.js} +1 -1
- package/dist/assets/{ProfilePage-B1oCou0F.js → ProfilePage-D6bk--bm.js} +1 -1
- package/dist/assets/{PublicFormsPage-C2prdsH6.js → PublicFormsPage-gyZqil7Y.js} +1 -1
- package/dist/assets/{RecordDetailView-B-AuOKPI.js → RecordDetailView-ClJoPCbl.js} +2 -2
- package/dist/assets/{RecordFormPage-CpKMoOCj.js → RecordFormPage-SzhX0SxR.js} +1 -1
- package/dist/assets/{ReportDefaultInspector-DxP-Ac7I.js → ReportDefaultInspector-BIOfFevD.js} +2 -2
- package/dist/assets/{ReportView-Cw9Ompki.js → ReportView-Bbmeyhqd.js} +1 -1
- package/dist/assets/{SearchResultsPage-CZ038ncU.js → SearchResultsPage-JwPvnRco.js} +1 -1
- package/dist/assets/{SettingsHub-BXe-fVlJ.js → SettingsHub-BbH3HtvN.js} +1 -1
- package/dist/assets/{SettingsView-DxPgTnlF.js → SettingsView-R0t6xrOR.js} +1 -1
- package/dist/assets/{SystemHubPage-CJq_1ITt.js → SystemHubPage-DW-xYOhx.js} +1 -1
- package/dist/assets/{data-adapter-02g96tfY.js → data-adapter-BwlZo45L.js} +1 -1
- package/dist/assets/{framework-h98DIM1k.js → framework-CakMZS2A.js} +7 -7
- package/dist/assets/{highlighted-body-OFNGDK62-DO9p_wSr.js → highlighted-body-OFNGDK62-BGuZxdtV.js} +1 -1
- package/dist/assets/{index-BQhiWf8_.js → index-Bc8lMePA.js} +1 -1
- package/dist/assets/index-CKUQ3pPE.css +2 -0
- package/dist/assets/mermaid-GHXKKRXX-BjC9P-Az.js +1 -0
- package/dist/assets/{metadata-admin-DStYGsRM.js → metadata-admin-CmNQ3PCe.js} +4 -4
- package/dist/assets/{plugin-calendar-BYmYEyQk.js → plugin-calendar-D1hSxakw.js} +1 -1
- package/dist/assets/{plugin-charts-BDFf0TCn.js → plugin-charts-DUJQWrQu.js} +1 -1
- package/dist/assets/{plugin-chatbot-CnuZn8AC.js → plugin-chatbot-xCaZPNnP.js} +4 -4
- package/dist/assets/{plugin-dashboard-CuwYQhsg.js → plugin-dashboard-C5-M_XlX.js} +1 -1
- package/dist/assets/{plugin-form-CH8ruD9E.js → plugin-form-C7Hglo5P.js} +1 -1
- package/dist/assets/{plugin-gantt-BB8ZeREv.js → plugin-gantt-C_CBI9Ze.js} +1 -1
- package/dist/assets/{plugin-grid-D414NLNP.js → plugin-grid-DxUHFaSG.js} +1 -1
- package/dist/assets/{plugin-kanban-BRFJEEAA.js → plugin-kanban-fK0Hn7gr.js} +1 -1
- package/dist/assets/{plugin-map-rEWoyyKa.js → plugin-map-CFUHBBgY.js} +1 -1
- package/dist/assets/{plugin-markdown-BgV76qm3.js → plugin-markdown-D2JDzxOb.js} +1 -1
- package/dist/assets/{plugin-report-C-YPOtvZ.js → plugin-report-C_gu6Sl0.js} +1 -1
- package/dist/assets/{plugin-timeline-CC91-fmI.js → plugin-timeline-JAVlYIZG.js} +1 -1
- package/dist/assets/{plugin-tree-D2QWz1x1.js → plugin-tree-ckWxLNeS.js} +1 -1
- package/dist/assets/{plugin-view-C6iEzx93.js → plugin-view-CYd_0MnO.js} +1 -1
- package/dist/assets/{plugins-views-CcoNygsH.js → plugins-views-CpVdFGRz.js} +2 -2
- package/dist/assets/{skeletons-BQ5aRDUn.js → skeletons-CTmAPzFj.js} +1 -1
- package/dist/assets/{src-C4OnKiir.js → src-CMNhRk8x.js} +1 -1
- package/dist/assets/src-DZhiMT1j.js +2 -0
- package/dist/assets/{types-BUZu4QOP.js → types-5UGg6DKH.js} +1 -1
- package/dist/assets/ui-components-BXvcyYmR.js +42 -0
- package/dist/assets/{ui-layout-BwokMuBv.js → ui-layout-DAe4Nna8.js} +1 -1
- package/dist/assets/{useActionModal-ChUaxcEW.js → useActionModal-B6_KUPqx.js} +1 -1
- package/dist/assets/{useOpenRecordList-BkSEs2q6.js → useOpenRecordList-yTGpfA54.js} +1 -1
- package/dist/assets/{useReconcileOnError-FPUCNTHc.js → useReconcileOnError-oxCJ7_s6.js} +1 -1
- package/dist/index.html +4 -4
- package/package.json +1 -1
- package/dist/assets/ConsoleFloatingChatbot-Cy-Ny_TS.js +0 -1
- package/dist/assets/index-WhD62Q-7.css +0 -2
- package/dist/assets/mermaid-GHXKKRXX-DEmtnxCC.js +0 -1
- package/dist/assets/src-CKHT6scJ.js +0 -2
- package/dist/assets/ui-components-C9egdVxV.js +0 -42
|
@@ -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-CMxvf4Kt.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-ClIa1CJA.js";import{m as d}from"./infrastructure-B1z73d-r.js";import{A as f,Et as p,L as m,V as h,et as g,j as _,nt as v,tt as y,w as b,wt as x}from"./framework-h98DIM1k.js";import{R as S,_ as C,d as w,p as T}from"./vendor-objectstack-BTQLr7T3.js";import{$a as E,$t as D,Aa as O,Ai as k,Ao as A,Ar as j,As as M,Ba as ee,Bi as te,Bn as ne,Bo as N,Br as re,Bt as ie,Cc as P,Ci as ae,Co as F,Cr as oe,Cs as se,Da as ce,Dc as le,Di as ue,Do as de,Dr as fe,Ds as pe,Ea as me,Ec as he,Ei as ge,Eo as _e,Er as ve,Fa as ye,Fc as be,Fn as xe,Fr as Se,Fs as Ce,Ga as we,Gn as Te,Go as Ee,Gr as I,Gt as De,H as Oe,Ho as ke,Hr as Ae,Hs as je,Ht as Me,Ii as Ne,Io as Pe,Ir as Fe,Ja as Ie,Ji as Le,Jn as Re,Jo as ze,Jt as Be,Ka as Ve,Kn as He,Ko as Ue,Kt as We,Ln as Ge,Lo as Ke,Ls as qe,Lt as Je,Ma as Ye,Mo as Xe,Ni as Ze,No as Qe,Ns as $e,Oa as et,Oc as L,Oi as tt,Or as nt,Os as rt,Pa as it,Po as at,Qa as ot,Qn as st,Qs as ct,Qt as lt,Ra as ut,Ri as dt,Rn as ft,Sc as pt,Si as mt,Ta as ht,Tc as gt,Ti as _t,To as vt,Tr as yt,U as bt,Un as xt,Uo as St,Ur as Ct,Ut as wt,Vi as Tt,Vn as Et,Vs as Dt,Vt as Ot,W as kt,Wa as At,Wi as jt,Wn as Mt,Wt as Nt,Xa as Pt,Xi as Ft,Xo as It,Xr as Lt,Xs as Rt,Yi as R,Yt as zt,Z as Bt,Za as Vt,Zi as Ht,Zo as Ut,Zr as Wt,_a as Gt,_c as Kt,_i as qt,_o as Jt,_t as Yt,ac as Xt,an as Zt,ao as Qt,ar as z,as as $t,at as en,ba as tn,bc as nn,bi as rn,bo as an,bs as on,ca as sn,ci as cn,co as ln,cs as un,ct as dn,dn as B,do as fn,ds as pn,dt as mn,ea as hn,ec as gn,en as _n,es as vn,fo as yn,ft as bn,ga as xn,gc as Sn,gt as Cn,hc as wn,hi as Tn,ho as En,hs as Dn,ht as On,ia as kn,ic as An,ii as jn,in as Mn,io as Nn,it as Pn,ja as Fn,ji as In,ki as Ln,ko as Rn,kr as zn,ks as Bn,la as Vn,lc as Hn,ls as Un,lt as Wn,ma as Gn,mi as Kn,mt as qn,na as Jn,ni as Yn,no as Xn,ns as Zn,oa as Qn,oc as $n,on as er,ot as tr,pa as nr,po as rr,pt as ir,q as ar,qi as or,qn as sr,qo as cr,qr as lr,qt as ur,rc as dr,ri as fr,sa as pr,sc as mr,si as hr,sn as V,so as gr,ss as _r,st as vr,tc as yr,ts as br,ua as xr,ui as Sr,us as Cr,ut as wr,vi as Tr,vo as Er,w as Dr,wa as Or,wo as kr,wr as Ar,xa as jr,xi as Mr,xo as Nr,xr as H,xs as Pr,yi as Fr,yo as Ir,ys as Lr,za as U,zn as Rr,zr,zs as Br,zt as Vr}from"./ui-components-C9egdVxV.js";import{r as Hr}from"./vendor-ui-utils-C92Fl7BT.js";import"./AdapterProvider-BTAMdG2T.js";import"./MetadataProvider-D234gTjV.js";import{c as Ur,r as Wr}from"./assistantBus-BMrg1uLy.js";import{o as Gr}from"./useActionModal-ChUaxcEW.js";import{f as Kr}from"./plugin-chatbot-CnuZn8AC.js";import{a as qr,c as Jr,l as Yr,o as Xr,s as Zr}from"./RecordDetailView-B-AuOKPI.js";import{$ as Qr,A as $r,B as ei,C as ti,D as ni,E as ri,F as ii,G as W,H as ai,I as oi,J as si,K as ci,L as li,M as ui,N as di,O as fi,P as pi,Q as mi,R as G,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-DxP-Ac7I.js";import{t as Ui}from"./InterfaceListPage-D1BbH0Iy.js";import{n as Wi}from"./plugins-views-CcoNygsH.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-DOnyBhGN.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}=Kr({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(en),ia=new Map;function aa(e){if(!e)return br;let t=ia.get(e);if(t)return t;let n=na(e);if(!ra.has(n))return ia.set(e,br),br;let r=e=>X.createElement(Pn,{name:n,fallback:br,...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=ci(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=si(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)(B,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(z,{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(T,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(w,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(!(!C||typeof C!=`object`)){try{let e=JSON.parse(JSON.stringify(C));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)(W,{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=mi(),{entries:r}=Qr(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)(xt,{open:i,onOpenChange:a,children:(0,Y.jsxs)(Mt,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(sr,{className:`sr-only`,children:(0,Y.jsx)(Re,{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)(tt,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{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)(Oe,{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)(U,{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)(z,{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)(ut,{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)(Oe,{children:`↑`}),` `,(0,Y.jsx)(Oe,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Oe,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(Oe,{children:`⌘`}),(0,Y.jsx)(Oe,{children:`⇧`}),(0,Y.jsx)(Oe,{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:br,ui:Vt,automation:j,ai:Tn,system:ge,platform:ge,identity:mt,security:mt},Wa=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ga=new Set([`field`,`package`]);function Ka(){let e=mi(),{loading:t,error:n,entries:r}=Qr(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)(tt,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:J(`engine.directory.search`,i),value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(H,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[J(`engine.directory.writableOnly`,i),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(H,{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)(I,{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)(Oe,{children:`⌘`}),(0,Y.jsx)(Oe,{children:`⇧`}),(0,Y.jsx)(Oe,{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)(bt,{children:[(0,Y.jsx)(ar,{children:`No project packages installed`}),(0,Y.jsx)(kt,{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)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.directory.noMatches`,i)}),(0,Y.jsx)(kt,{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]??$n,{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)(I,{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)(z,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:q(`engine.directory.itemCountTooltip`,t??`en`,{count:i}),children:i}),n>0&&(0,Y.jsx)(z,{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)(z,{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)(z,{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)(ut,{className:`h-2.5 w-2.5`}),a]}),e.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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)(z,{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)(z,{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)(xt,{open:e,onOpenChange:t,children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsx)(Re,{children:J(`engine.packages.create.title`,r)}),(0,Y.jsx)(Te,{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)(B,{htmlFor:`pkg-id`,children:J(`engine.packages.create.id`,r)}),(0,Y.jsx)(V,{id:`pkg-id`,"data-testid":`package-id-input`,placeholder:`com.acme.crm`,value:i,onChange:e=>a(e.target.value),"aria-invalid":!!i&&!m}),!!i&&!m&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:J(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{htmlFor:`pkg-name`,children:J(`engine.packages.create.name`,r)}),(0,Y.jsx)(V,{id:`pkg-name`,"data-testid":`package-name-input`,placeholder:`Acme CRM`,value:o,onChange:e=>s(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{htmlFor:`pkg-version`,children:J(`engine.packages.create.version`,r)}),(0,Y.jsx)(V,{id:`pkg-version`,placeholder:`0.1.0`,value:c,onChange:e=>l(e.target.value),"aria-invalid":!!c&&!h}),!!c&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children: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)(I,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:J(`engine.cancel`,r)}),(0,Y.jsx)(H,{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)(Vr,{open:n,onOpenChange:r,children:(0,Y.jsxs)(ie,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Me,{children:[(0,Y.jsxs)(wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(xn,{className:`h-4 w-4`}),e.manifest.name||p]}),(0,Y.jsx)(Ot,{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)(Nt,{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)(cr,{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)(Nt,{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)(z,{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)(H,{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)(zr,{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)(H,{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)(Ae,{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)(Qe,{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)(Nt,{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)(H,{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)(zr,{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)(H,{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)(Ae,{className:`mr-1.5 h-3.5 w-3.5`}),J(`engine.packages.detail.revert`,a)]}),(0,Y.jsxs)(H,{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)(Le,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(or,{className:`mr-1.5 h-3.5 w-3.5`}),J(m?`engine.packages.detail.disable`:`engine.packages.detail.enable`,a)]}),(0,Y.jsxs)(H,{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)(Ut,{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)(H,{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)(_r,{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)(H,{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)(Qt,{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)(H,{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)(lr,{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)(xn,{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)(H,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Tt,{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)(H,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(Qe,{className:`mr-1.5 h-3.5 w-3.5`}),J(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(R,{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)(tt,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder: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)(Yt,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(B,{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)(Je,{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)(I,{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)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.packages.empty`,e)}),(0,Y.jsx)(kt,{children:r.length===0?J(`engine.packages.emptyCreate`,e):J(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(mn,{children:[(0,Y.jsx)(On,{children:(0,Y.jsxs)(Cn,{children:[(0,Y.jsx)(qn,{children:J(`engine.packages.col.name`,e)}),(0,Y.jsx)(qn,{children:`ID`}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.version`,e)}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.scope`,e)}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(bn,{children:E.map(e=>(0,Y.jsxs)(Cn,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(ir,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(ir,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(ir,{children:e.manifest.version||`—`}),(0,Y.jsx)(ir,{children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(ir,{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:br,ui:Vt,automation:j,ai:Tn,system:ge,platform:ge,identity:mt,security:mt},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:jn,dashboard:Pt,page:at,report:Rt,record:$n,metadata:Vt};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=mi(),{loading:t,entries:n}=Qr(e),{recentItems:r}=Gr(),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)(Tn,{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)(H,{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)(Vt,{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)(tt,{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:Vt,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:M,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:xn,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)(M,{className:`h-5 w-5`}):(0,Y.jsx)(I,{className:`h-5 w-5`})}),(0,Y.jsx)(nn,{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:R,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)(H,{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)(R,{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:Vt,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:Dn,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]??$n;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)(nn,{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)(nn,{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]??$n,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)(Br,{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)(Br,{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)(z,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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)(Br,{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)(z,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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`){Hr.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){Hr.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();Hr.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} ✓`);Hr.success(n)}e.refreshAfter&&r?.()}catch(e){Hr.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)(H,{size:`sm`,variant:bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(U,{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)(Yr,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(Jr,{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=mi(),{entries:i}=Qr(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),ee=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 te=o.searchableFields??[`name`,`label`,`description`],ne=X.useMemo(()=>l.filter(e=>o.listFilter&&!o.listFilter(e.item)||!k?!1:e.item?._packageId===k),[l,k,o]),N=ne.filter(e=>!(!yi(e.item,g,te)||v!==`all`&&e.source!==v)),re=X.useMemo(()=>{let e={all:ne.length,artifact:0,runtime:0};for(let t of ne)e[t.source]++;return e},[ne]),ie=X.useMemo(()=>ne.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[ne]),P=X.useMemo(()=>ne.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[ne]),ae=o.listColumns??Mo(o.primaryKey??`name`),F=zi(),oe=hi(e,F,a?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=J(t,F);return n===t?e.label:n};return(0,Y.jsx)(yo,{entry:a??{type:e,label:e},stats:[{label:J(`engine.list.items`,F),value:ne.length},{label:J(`engine.list.filtered`,F),value:N.length},...ie>0?[{label:J(`engine.list.invalid`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(I,{className:`w-3.5 h-3.5`}),ie]})}]:[],...P>0?[{label:J(`engine.list.warnings`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(I,{className:`w-3.5 h-3.5`}),P]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(So,{entry:a,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:J(`engine.list.refresh`,F),children:(0,Y.jsx)(Tt,{className:`h-4 w-4`})}),(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsxs)(H,{size:`sm`,variant:o.createFields?`default`:`outline`,onClick:ee,title:o.createFields?q(`engine.list.createHint`,F,{type:oe}):void 0,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,F)]})]}),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)(tt,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:J(`engine.list.search`,F),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(De,{value:v,onValueChange:y,children:[(0,Y.jsx)(Be,{className:`w-[180px]`,children:(0,Y.jsx)(zt,{})}),(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(ur,{value:`all`,children:[J(`engine.list.allSources`,F),` (`,re.all,`)`]}),(0,Y.jsxs)(ur,{value:`artifact`,children:[J(`engine.list.source.artifact`,F),` (`,re.artifact,`)`]}),(0,Y.jsxs)(ur,{value:`runtime`,children:[J(`engine.list.source.runtime`,F),` (`,re.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[J(`engine.edit.loading`,F),` `,e,`…`]}),m&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:m}),!f&&!m&&w!==null&&w.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`No project packages installed`}),(0,Y.jsx)(kt,{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&&N.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:ne.length===0?q(`engine.list.emptyType`,F,{type:oe}):q(`engine.list.emptyQuery`,F,{query:g})}),(0,Y.jsx)(kt,{children:o.emptyStateHint??(a?.allowOrgOverride||a?.allowRuntimeCreate?q(`engine.list.createHint`,F,{type:oe}):J(`engine.list.readOnlyHint`,F))}),ne.length===0&&(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(H,{onClick:ee,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,F)]})})]}),!f&&N.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`,F)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:N.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-CMxvf4Kt.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-ClIa1CJA.js";import{m as d}from"./infrastructure-B1z73d-r.js";import{A as f,Et as p,L as m,V as h,et as g,j as _,nt as v,tt as y,w as b,wt as x}from"./framework-CakMZS2A.js";import{R as S,_ as C,d as w,p as T}from"./vendor-objectstack-BTQLr7T3.js";import{$a as E,$t as D,Aa as O,Ai as k,Ao as A,Ar as j,As as M,Ba as ee,Bi as te,Bn as ne,Bo as N,Br as re,Bt as ie,Cc as P,Ci as ae,Co as F,Cr as oe,Cs as se,Da as ce,Dc as le,Di as ue,Do as de,Dr as fe,Ds as pe,Ea as me,Ec as he,Ei as ge,Eo as _e,Er as ve,Fa as ye,Fc as be,Fn as xe,Fr as Se,Fs as Ce,Ga as we,Gn as Te,Go as Ee,Gr as I,Gt as De,H as Oe,Ho as ke,Hr as Ae,Hs as je,Ht as Me,Ii as Ne,Io as Pe,Ir as Fe,Ja as Ie,Ji as Le,Jn as Re,Jo as ze,Jt as Be,Ka as Ve,Kn as He,Ko as Ue,Kt as We,Ln as Ge,Lo as Ke,Ls as qe,Lt as Je,Ma as Ye,Mo as Xe,Ni as Ze,No as Qe,Ns as $e,Oa as et,Oc as L,Oi as tt,Or as nt,Os as rt,Pa as it,Po as at,Qa as ot,Qn as st,Qs as ct,Qt as lt,Ra as ut,Ri as dt,Rn as ft,Sc as pt,Si as mt,Ta as ht,Tc as gt,Ti as _t,To as vt,Tr as yt,U as bt,Un as xt,Uo as St,Ur as Ct,Ut as wt,Vi as Tt,Vn as Et,Vs as Dt,Vt as Ot,W as kt,Wa as At,Wi as jt,Wn as Mt,Wt as Nt,Xa as Pt,Xi as Ft,Xo as It,Xr as Lt,Xs as Rt,Yi as R,Yt as zt,Z as Bt,Za as Vt,Zi as Ht,Zo as Ut,Zr as Wt,_a as Gt,_c as Kt,_i as qt,_o as Jt,_t as Yt,ac as Xt,an as Zt,ao as Qt,ar as z,as as $t,at as en,ba as tn,bc as nn,bi as rn,bo as an,bs as on,ca as sn,ci as cn,co as ln,cs as un,ct as dn,dn as B,do as fn,ds as pn,dt as mn,ea as hn,ec as gn,en as _n,es as vn,fo as yn,ft as bn,ga as xn,gc as Sn,gt as Cn,hc as wn,hi as Tn,ho as En,hs as Dn,ht as On,ia as kn,ic as An,ii as jn,in as Mn,io as Nn,it as Pn,ja as Fn,ji as In,ki as Ln,ko as Rn,kr as zn,ks as Bn,la as Vn,lc as Hn,ls as Un,lt as Wn,ma as Gn,mi as Kn,mt as qn,na as Jn,ni as Yn,no as Xn,ns as Zn,oa as Qn,oc as $n,on as er,ot as tr,pa as nr,po as rr,pt as ir,q as ar,qi as or,qn as sr,qo as cr,qr as lr,qt as ur,rc as dr,ri as fr,sa as pr,sc as mr,si as hr,sn as V,so as gr,ss as _r,st as vr,tc as yr,ts as br,ua as xr,ui as Sr,us as Cr,ut as wr,vi as Tr,vo as Er,w as Dr,wa as Or,wo as kr,wr as Ar,xa as jr,xi as Mr,xo as Nr,xr as H,xs as Pr,yi as Fr,yo as Ir,ys as Lr,za as U,zn as Rr,zr,zs as Br,zt as Vr}from"./ui-components-BXvcyYmR.js";import{r as Hr}from"./vendor-ui-utils-C92Fl7BT.js";import"./AdapterProvider-BPgD5wI1.js";import"./MetadataProvider-BRGGbotZ.js";import{c as Ur,r as Wr}from"./assistantBus-BMrg1uLy.js";import{o as Gr}from"./useActionModal-B6_KUPqx.js";import{f as Kr}from"./plugin-chatbot-xCaZPNnP.js";import{a as qr,c as Jr,l as Yr,o as Xr,s as Zr}from"./RecordDetailView-ClJoPCbl.js";import{$ as Qr,A as $r,B as ei,C as ti,D as ni,E as ri,F as ii,G as W,H as ai,I as oi,J as si,K as ci,L as li,M as ui,N as di,O as fi,P as pi,Q as mi,R as G,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-BIOfFevD.js";import{t as Ui}from"./InterfaceListPage-Npe_tn_H.js";import{n as Wi}from"./plugins-views-CpVdFGRz.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-BqmZ8NCC.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}=Kr({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(en),ia=new Map;function aa(e){if(!e)return br;let t=ia.get(e);if(t)return t;let n=na(e);if(!ra.has(n))return ia.set(e,br),br;let r=e=>X.createElement(Pn,{name:n,fallback:br,...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=ci(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=si(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)(B,{className:`text-xs text-muted-foreground`,children:`Columns`}),(0,Y.jsx)(z,{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(T,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(w,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(!(!C||typeof C!=`object`)){try{let e=JSON.parse(JSON.stringify(C));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)(W,{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=mi(),{entries:r}=Qr(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)(xt,{open:i,onOpenChange:a,children:(0,Y.jsxs)(Mt,{className:`max-w-2xl p-0 overflow-hidden`,children:[(0,Y.jsx)(sr,{className:`sr-only`,children:(0,Y.jsx)(Re,{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)(tt,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{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)(Oe,{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)(U,{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)(z,{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)(ut,{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)(Oe,{children:`↑`}),` `,(0,Y.jsx)(Oe,{children:`↓`}),` navigate`]}),(0,Y.jsxs)(`span`,{children:[(0,Y.jsx)(Oe,{children:`↵`}),` open`]}),(0,Y.jsxs)(`span`,{className:`ml-auto`,children:[(0,Y.jsx)(Oe,{children:`⌘`}),(0,Y.jsx)(Oe,{children:`⇧`}),(0,Y.jsx)(Oe,{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:br,ui:Vt,automation:j,ai:Tn,system:ge,platform:ge,identity:mt,security:mt},Wa=[`data`,`ui`,`automation`,`ai`,`identity`,`security`,`system`,`platform`,`other`],Ga=new Set([`field`,`package`]);function Ka(){let e=mi(),{loading:t,error:n,entries:r}=Qr(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)(tt,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:J(`engine.directory.search`,i),value:a,onChange:e=>o(e.target.value)})]}),(0,Y.jsxs)(H,{variant:d?`default`:`outline`,size:`sm`,onClick:()=>f(e=>!e),children:[J(`engine.directory.writableOnly`,i),` (`,O,`)`]}),x.total>0&&(0,Y.jsx)(H,{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)(I,{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)(Oe,{children:`⌘`}),(0,Y.jsx)(Oe,{children:`⇧`}),(0,Y.jsx)(Oe,{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)(bt,{children:[(0,Y.jsx)(ar,{children:`No project packages installed`}),(0,Y.jsx)(kt,{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)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.directory.noMatches`,i)}),(0,Y.jsx)(kt,{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]??$n,{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)(I,{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)(z,{variant:`secondary`,className:`text-[10px] tabular-nums`,title:q(`engine.directory.itemCountTooltip`,t??`en`,{count:i}),children:i}),n>0&&(0,Y.jsx)(z,{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)(z,{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)(z,{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)(ut,{className:`h-2.5 w-2.5`}),a]}),e.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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)(z,{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)(z,{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)(xt,{open:e,onOpenChange:t,children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsx)(Re,{children:J(`engine.packages.create.title`,r)}),(0,Y.jsx)(Te,{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)(B,{htmlFor:`pkg-id`,children:J(`engine.packages.create.id`,r)}),(0,Y.jsx)(V,{id:`pkg-id`,"data-testid":`package-id-input`,placeholder:`com.acme.crm`,value:i,onChange:e=>a(e.target.value),"aria-invalid":!!i&&!m}),!!i&&!m&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children:J(`engine.packages.create.idInvalid`,r)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{htmlFor:`pkg-name`,children:J(`engine.packages.create.name`,r)}),(0,Y.jsx)(V,{id:`pkg-name`,"data-testid":`package-name-input`,placeholder:`Acme CRM`,value:o,onChange:e=>s(e.target.value)})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{htmlFor:`pkg-version`,children:J(`engine.packages.create.version`,r)}),(0,Y.jsx)(V,{id:`pkg-version`,placeholder:`0.1.0`,value:c,onChange:e=>l(e.target.value),"aria-invalid":!!c&&!h}),!!c&&!h&&(0,Y.jsx)(`p`,{className:`text-xs text-destructive`,children: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)(I,{className:`mt-0.5 h-4 w-4 shrink-0`}),(0,Y.jsx)(`span`,{children:f})]})]}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`outline`,onClick:()=>t(!1),disabled:u,children:J(`engine.cancel`,r)}),(0,Y.jsx)(H,{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)(Vr,{open:n,onOpenChange:r,children:(0,Y.jsxs)(ie,{className:`w-full sm:max-w-md overflow-y-auto`,children:[(0,Y.jsxs)(Me,{children:[(0,Y.jsxs)(wt,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(xn,{className:`h-4 w-4`}),e.manifest.name||p]}),(0,Y.jsx)(Ot,{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)(Nt,{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)(cr,{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)(Nt,{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)(z,{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)(H,{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)(zr,{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)(H,{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)(Ae,{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)(Qe,{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)(Nt,{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)(H,{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)(zr,{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)(H,{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)(Ae,{className:`mr-1.5 h-3.5 w-3.5`}),J(`engine.packages.detail.revert`,a)]}),(0,Y.jsxs)(H,{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)(Le,{className:`mr-1.5 h-3.5 w-3.5`}):(0,Y.jsx)(or,{className:`mr-1.5 h-3.5 w-3.5`}),J(m?`engine.packages.detail.disable`:`engine.packages.detail.enable`,a)]}),(0,Y.jsxs)(H,{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)(Ut,{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)(H,{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)(_r,{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)(H,{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)(Qt,{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)(H,{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)(lr,{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)(xn,{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)(H,{variant:`outline`,size:`sm`,onClick:()=>void T(),disabled:o,children:[(0,Y.jsx)(Tt,{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)(H,{variant:`outline`,size:`sm`,onClick:()=>b.current?.click(),disabled:x,children:[(0,Y.jsx)(Qe,{className:`mr-1.5 h-3.5 w-3.5`}),J(x?`engine.packages.importing`:`engine.packages.import`,e)]}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>h(!0),children:[(0,Y.jsx)(R,{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)(tt,{className:`absolute left-2.5 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder: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)(Yt,{id:`show-kernel`,checked:f,onCheckedChange:p}),(0,Y.jsx)(B,{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)(Je,{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)(I,{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)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.packages.empty`,e)}),(0,Y.jsx)(kt,{children:r.length===0?J(`engine.packages.emptyCreate`,e):J(`engine.packages.emptyFiltered`,e)})]})}):(0,Y.jsxs)(mn,{children:[(0,Y.jsx)(On,{children:(0,Y.jsxs)(Cn,{children:[(0,Y.jsx)(qn,{children:J(`engine.packages.col.name`,e)}),(0,Y.jsx)(qn,{children:`ID`}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.version`,e)}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.scope`,e)}),(0,Y.jsx)(qn,{className:`w-24`,children:J(`engine.packages.col.status`,e)})]})}),(0,Y.jsx)(bn,{children:E.map(e=>(0,Y.jsxs)(Cn,{className:`cursor-pointer`,onClick:()=>D(e),children:[(0,Y.jsx)(ir,{className:`font-medium`,children:e.manifest.name||e.manifest.id}),(0,Y.jsx)(ir,{className:`font-mono text-xs text-muted-foreground`,children:e.manifest.id}),(0,Y.jsx)(ir,{children:e.manifest.version||`—`}),(0,Y.jsx)(ir,{children:(0,Y.jsx)(Za,{scope:e.manifest.scope})}),(0,Y.jsx)(ir,{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:br,ui:Vt,automation:j,ai:Tn,system:ge,platform:ge,identity:mt,security:mt},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:jn,dashboard:Pt,page:at,report:Rt,record:$n,metadata:Vt};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=mi(),{loading:t,entries:n}=Qr(e),{recentItems:r}=Gr(),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)(Tn,{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)(H,{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)(Vt,{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)(tt,{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:Vt,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:M,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:xn,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)(M,{className:`h-5 w-5`}):(0,Y.jsx)(I,{className:`h-5 w-5`})}),(0,Y.jsx)(nn,{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:R,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)(H,{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)(R,{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:Vt,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:Dn,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]??$n;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)(nn,{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)(nn,{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]??$n,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)(Br,{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)(Br,{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)(z,{variant:`outline`,className:`text-[10px] uppercase tracking-wider h-5 px-1.5`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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)(Br,{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)(z,{variant:`outline`,className:`text-[10px] uppercase tracking-wider`,children:Vi(e.domain,l)}),e?.allowOrgOverride?(0,Y.jsx)(z,{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)(z,{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)(z,{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`){Hr.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){Hr.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();Hr.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} ✓`);Hr.success(n)}e.refreshAfter&&r?.()}catch(e){Hr.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)(H,{size:`sm`,variant:bo[e.variant??`secondary`]??`secondary`,disabled:n,onClick:()=>m(e),title:e.label??e.name,children:[n?(0,Y.jsx)(U,{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)(Yr,{state:o,onOpenChange:e=>{e||(o.resolve?.(null),s({open:!1,params:[]}))}}),(0,Y.jsx)(Jr,{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=mi(),{entries:i}=Qr(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),ee=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 te=o.searchableFields??[`name`,`label`,`description`],ne=X.useMemo(()=>l.filter(e=>o.listFilter&&!o.listFilter(e.item)||!k?!1:e.item?._packageId===k),[l,k,o]),N=ne.filter(e=>!(!yi(e.item,g,te)||v!==`all`&&e.source!==v)),re=X.useMemo(()=>{let e={all:ne.length,artifact:0,runtime:0};for(let t of ne)e[t.source]++;return e},[ne]),ie=X.useMemo(()=>ne.filter(e=>e.diagnostics&&e.diagnostics.valid===!1).length,[ne]),P=X.useMemo(()=>ne.filter(e=>e.diagnostics&&e.diagnostics.valid!==!1&&(e.diagnostics.warnings?.length??0)>0).length,[ne]),ae=o.listColumns??Mo(o.primaryKey??`name`),F=zi(),oe=hi(e,F,a?.label??e),se=e=>{let t=`engine.list.col.${e.key}`,n=J(t,F);return n===t?e.label:n};return(0,Y.jsx)(yo,{entry:a??{type:e,label:e},stats:[{label:J(`engine.list.items`,F),value:ne.length},{label:J(`engine.list.filtered`,F),value:N.length},...ie>0?[{label:J(`engine.list.invalid`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-destructive`,children:[(0,Y.jsx)(I,{className:`w-3.5 h-3.5`}),ie]})}]:[],...P>0?[{label:J(`engine.list.warnings`,F),value:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(I,{className:`w-3.5 h-3.5`}),P]})}]:[]],actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(So,{entry:a,location:`list_toolbar`,onAfter:()=>C(e=>e+1)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>C(e=>e+1),title:J(`engine.list.refresh`,F),children:(0,Y.jsx)(Tt,{className:`h-4 w-4`})}),(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsxs)(H,{size:`sm`,variant:o.createFields?`default`:`outline`,onClick:ee,title:o.createFields?q(`engine.list.createHint`,F,{type:oe}):void 0,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,F)]})]}),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)(tt,{className:`absolute left-2.5 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(V,{className:`pl-8`,placeholder:J(`engine.list.search`,F),value:g,onChange:e=>_(e.target.value)})]}),(0,Y.jsxs)(De,{value:v,onValueChange:y,children:[(0,Y.jsx)(Be,{className:`w-[180px]`,children:(0,Y.jsx)(zt,{})}),(0,Y.jsxs)(We,{children:[(0,Y.jsxs)(ur,{value:`all`,children:[J(`engine.list.allSources`,F),` (`,re.all,`)`]}),(0,Y.jsxs)(ur,{value:`artifact`,children:[J(`engine.list.source.artifact`,F),` (`,re.artifact,`)`]}),(0,Y.jsxs)(ur,{value:`runtime`,children:[J(`engine.list.source.runtime`,F),` (`,re.runtime,`)`]})]})]})]}),(f||w===null)&&(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[J(`engine.edit.loading`,F),` `,e,`…`]}),m&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:m}),!f&&!m&&w!==null&&w.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`No project packages installed`}),(0,Y.jsx)(kt,{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&&N.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:ne.length===0?q(`engine.list.emptyType`,F,{type:oe}):q(`engine.list.emptyQuery`,F,{query:g})}),(0,Y.jsx)(kt,{children:o.emptyStateHint??(a?.allowOrgOverride||a?.allowRuntimeCreate?q(`engine.list.createHint`,F,{type:oe}):J(`engine.list.readOnlyHint`,F))}),ne.length===0&&(a?.allowOrgOverride||a?.allowRuntimeCreate)&&(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsxs)(H,{onClick:ee,children:[(0,Y.jsx)(R,{className:`h-4 w-4 mr-1`}),J(`engine.list.create`,F)]})})]}),!f&&N.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`,F)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:N.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`,F),title:`${q(`engine.list.invalidCount`,F,{count:l.length})}\n${f}`,children:(0,Y.jsx)(I,{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`,F),title:`${q(`engine.list.warnCount`,F,{count:u.length})}\n${f}`,children:(0,Y.jsx)(I,{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)(ut,{className:`h-3 w-3`})}),(0,Y.jsx)(z,{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`,F)}${e.item._packageId?` (${e.item._packageId})`:``}`:J(`engine.list.source.runtimeDesc`,F),children:J(`engine.list.source.${e.source}`,F)})]})]},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)(vr,{defaultValue:`diff`,className:`w-full`,children:[(0,Y.jsxs)(Wn,{className:`grid grid-cols-4 w-fit`,children:[(0,Y.jsx)(wr,{value:`diff`,children:J(`engine.layers.diff`,n)}),(0,Y.jsxs)(wr,{value:`code`,children:[J(`engine.layers.code`,n),(0,Y.jsx)(z,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`artifact`})]}),(0,Y.jsxs)(wr,{value:`overlay`,children:[J(`engine.layers.overlay`,n),r?(0,Y.jsx)(z,{className:`ml-1.5 text-[10px] bg-emerald-600 text-emerald-50`,children:e.overlayScope??`set`}):(0,Y.jsx)(z,{variant:`outline`,className:`ml-1.5 text-[10px] text-muted-foreground`,children:`none`})]}),(0,Y.jsxs)(wr,{value:`effective`,children:[J(`engine.layers.effective`,n),(0,Y.jsx)(z,{variant:`outline`,className:`ml-1.5 text-[10px]`,children:`merged`})]})]}),(0,Y.jsx)(dn,{value:`diff`,className:`mt-3`,children:(0,Y.jsx)(Vo,{code:e.code,effective:e.effective,locale:n})}),(0,Y.jsx)(dn,{value:`code`,className:`mt-3`,children:(0,Y.jsx)(Uo,{payload:e.code,emptyHint:J(`engine.layers.diff.noBaseline`,n)})}),(0,Y.jsx)(dn,{value:`overlay`,className:`mt-3`,children:(0,Y.jsx)(Uo,{payload:e.overlay,emptyHint:J(`engine.layers.diff.noChanges`,n)})}),(0,Y.jsx)(dn,{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)(Yt,{checked:r,onCheckedChange:i,"aria-label":J(`engine.layers.diff.showUnchanged`,n)}),J(`engine.layers.diff.showUnchanged`,n),(0,Y.jsx)(z,{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:L(`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:L(`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:L(`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=mi(),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)(bt,{children:[(0,Y.jsx)(ar,{children:`No related metadata`}),(0,Y.jsxs)(kt,{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)(tt,{className:`absolute left-2 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(V,{placeholder:`Search related…`,value: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)(Br,{className:L(`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)(z,{variant:`outline`,className:`text-[10px]`,children:n.loading?`…`:i.length})]}),(0,Y.jsx)(H,{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)(R,{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)(U,{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)(cr,{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=mi(),{entries:l}=Qr(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:ti(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)(H,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(In,{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)(I,{className:`h-4 w-4 inline mr-1`}),` `,v]}),(0,Y.jsx)(`div`,{className:`flex justify-end`,children:(0,Y.jsxs)(H,{onClick:T,disabled:g||!n,children:[g?(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(In,{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)(Vr,{open:e!==null,onOpenChange:e=>{e||t()},children:(0,Y.jsxs)(ie,{side:`right`,className:L(`w-[92vw] sm:max-w-[1100px] p-0 flex flex-col gap-0`),children:[(0,Y.jsxs)(Me,{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)(z,{variant:`outline`,className:`font-mono text-[10px]`,children:o}),(0,Y.jsx)(wt,{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)(H,{variant:`ghost`,size:`sm`,onClick:()=>{r(`../../${encodeURIComponent(e.type)}/${encodeURIComponent(e.name)}`),t()},title:`Open in full page`,children:[(0,Y.jsx)(cr,{className:`h-3.5 w-3.5 mr-1`}),`Open full page`]})})]}),n&&(0,Y.jsxs)(Ot,{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=mi(),{entries:c}=Qr(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)(H,{variant:`ghost`,size:`sm`,onClick:()=>o(`../${encodeURIComponent(a)}`),children:[(0,Y.jsx)(pt,{className:`h-4 w-4 mr-1`}),`Back to item`]}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>f(e=>e+1),children:(0,Y.jsx)(Tt,{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)(U,{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)(bt,{children:[(0,Y.jsx)(ar,{children:`No history yet`}),(0,Y.jsx)(kt,{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)(z,{variant:`outline`,className:`text-[10px] font-mono`,children:[`seq `,e.seq??`–`]}),typeof e.version==`number`&&(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px] font-mono`,children:[`v`,e.version]}),r&&(0,Y.jsx)(z,{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)(H,{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)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Ne,{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:mt},denied:{label:`denied`,cls:`bg-rose-50 text-rose-700 border-rose-200`,Icon:Mr},forced:{label:`forced`,cls:`bg-amber-50 text-amber-700 border-amber-200`,Icon:ae}},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)(H,{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)(U,{className:`h-3 w-3 animate-spin`}):(0,Y.jsx)(Tt,{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)(U,{className:`mr-2 h-3 w-3 animate-spin`}),J(`engine.edit.loading`,r)]}):!c||c.length===0?(0,Y.jsxs)(bt,{className:`py-10`,children:[(0,Y.jsx)(ar,{children:J(`engine.edit.auditEmptyTitle`,r)}),(0,Y.jsx)(kt,{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)(z,{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+=`
|
|
@@ -7,8 +7,8 @@ import{o as e,r as t}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as n,a as r,f
|
|
|
7
7
|
`+` `.repeat(t)),Array(js).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(js).fill(0).map((e,t)=>`\r
|
|
8
8
|
`+` `.repeat(t)),Array(js).fill(0).map((e,t)=>`
|
|
9
9
|
`+` `.repeat(t)),Array(js).fill(0).map((e,t)=>`\r`+` `.repeat(t)),Array(js).fill(0).map((e,t)=>`\r
|
|
10
|
-
`+` `.repeat(t));var Ms;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Ms||={});function Ns(e,t=[],n=Ms.DEFAULT){let r={type:`array`,offset:-1,length:-1,children:[],parent:void 0};function i(e){r.type===`property`&&(r.length=e-r.offset,r=r.parent)}function a(e){return r.children.push(e),e}Fs(e,{onObjectBegin:e=>{r=a({type:`object`,offset:e,length:-1,parent:r,children:[]})},onObjectProperty:(e,t,n)=>{r=a({type:`property`,offset:t,length:-1,parent:r,children:[]}),r.children.push({type:`string`,value:e,offset:t,length:n,parent:r})},onObjectEnd:(e,t)=>{i(e+t),r.length=e+t-r.offset,r=r.parent,i(e+t)},onArrayBegin:(e,t)=>{r=a({type:`array`,offset:e,length:-1,parent:r,children:[]})},onArrayEnd:(e,t)=>{r.length=e+t-r.offset,r=r.parent,i(e+t)},onLiteralValue:(e,t,n)=>{a({type:Is(e),offset:t,length:n,parent:r,value:e}),i(t+n)},onSeparator:(e,t,n)=>{r.type===`property`&&(e===`:`?r.colonOffset=t:e===`,`&&i(t))},onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n);let o=r.children[0];return o&&delete o.parent,o}function Ps(e,t){if(!e)return;let n=e;for(let e of t)if(typeof e==`string`){if(n.type!==`object`||!Array.isArray(n.children))return;let t=!1;for(let r of n.children)if(Array.isArray(r.children)&&r.children[0].value===e&&r.children.length===2){n=r.children[1],t=!0;break}if(!t)return}else{let t=e;if(n.type!==`array`||t<0||!Array.isArray(n.children)||t>=n.children.length)return;n=n.children[t]}return n}function Fs(e,t,n=Ms.DEFAULT){let r=Es(e,!1),i=[],a=0;function o(e){return e?()=>a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function s(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function c(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice()):()=>!0}function l(e){return e?()=>{a>0?a++:e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice())===!1&&(a=1)}:()=>!0}function u(e){return e?()=>{a>0&&a--,a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}let d=l(t.onObjectBegin),f=c(t.onObjectProperty),p=u(t.onObjectEnd),m=l(t.onArrayBegin),h=u(t.onArrayEnd),g=c(t.onLiteralValue),_=s(t.onSeparator),v=o(t.onComment),y=s(t.onError),b=n&&n.disallowComments,x=n&&n.allowTrailingComma;function S(){for(;;){let e=r.scan();switch(r.getTokenError()){case 4:C(14);break;case 5:C(15);break;case 3:C(13);break;case 1:b||C(11);break;case 2:C(12);break;case 6:C(16);break}switch(e){case 12:case 13:b?C(10):v();break;case 16:C(1);break;case 15:case 14:break;default:return e}}}function C(e,t=[],n=[]){if(y(e),t.length+n.length>0){let e=r.getToken();for(;e!==17;){if(t.indexOf(e)!==-1){S();break}else if(n.indexOf(e)!==-1)break;e=S()}}}function w(e){let t=r.getTokenValue();return e?g(t):(f(t),i.push(t)),S(),!0}function T(){switch(r.getToken()){case 11:let e=r.getTokenValue(),t=Number(e);isNaN(t)&&(C(2),t=0),g(t);break;case 7:g(null);break;case 8:g(!0);break;case 9:g(!1);break;default:return!1}return S(),!0}function E(){return r.getToken()===10?(w(!1),r.getToken()===6?(_(`:`),S(),k()||C(4,[],[2,5])):C(5,[],[2,5]),i.pop(),!0):(C(3,[],[2,5]),!1)}function D(){d(),S();let e=!1;for(;r.getToken()!==2&&r.getToken()!==17;){if(r.getToken()===5){if(e||C(4,[],[]),_(`,`),S(),r.getToken()===2&&x)break}else e&&C(6,[],[]);E()||C(4,[],[2,5]),e=!0}return p(),r.getToken()===2?S():C(7,[2],[]),!0}function O(){m(),S();let e=!0,t=!1;for(;r.getToken()!==4&&r.getToken()!==17;){if(r.getToken()===5){if(t||C(4,[],[]),_(`,`),S(),r.getToken()===4&&x)break}else t&&C(6,[],[]);e?(i.push(0),e=!1):i[i.length-1]++,k()||C(4,[],[4,5]),t=!0}return h(),e||i.pop(),r.getToken()===4?S():C(8,[4],[]),!0}function k(){switch(r.getToken()){case 3:return O();case 1:return D();case 10:return w(!0);default:return T()}}return S(),r.getToken()===17?n.allowEmptyContent?!0:(C(4,[],[]),!1):k()?(r.getToken()!==17&&C(9,[],[]),!0):(C(4,[],[]),!1)}function Is(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`;case`object`:return e?Array.isArray(e)?`array`:`object`:`null`;default:return`null`}}var Ls;(function(e){e[e.None=0]=`None`,e[e.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=4]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=6]=`InvalidCharacter`})(Ls||={});var Rs;(function(e){e[e.OpenBraceToken=1]=`OpenBraceToken`,e[e.CloseBraceToken=2]=`CloseBraceToken`,e[e.OpenBracketToken=3]=`OpenBracketToken`,e[e.CloseBracketToken=4]=`CloseBracketToken`,e[e.CommaToken=5]=`CommaToken`,e[e.ColonToken=6]=`ColonToken`,e[e.NullKeyword=7]=`NullKeyword`,e[e.TrueKeyword=8]=`TrueKeyword`,e[e.FalseKeyword=9]=`FalseKeyword`,e[e.StringLiteral=10]=`StringLiteral`,e[e.NumericLiteral=11]=`NumericLiteral`,e[e.LineCommentTrivia=12]=`LineCommentTrivia`,e[e.BlockCommentTrivia=13]=`BlockCommentTrivia`,e[e.LineBreakTrivia=14]=`LineBreakTrivia`,e[e.Trivia=15]=`Trivia`,e[e.Unknown=16]=`Unknown`,e[e.EOF=17]=`EOF`})(Rs||={});var zs=Ns,Bs=Ps,Vs;(function(e){e[e.InvalidSymbol=1]=`InvalidSymbol`,e[e.InvalidNumberFormat=2]=`InvalidNumberFormat`,e[e.PropertyNameExpected=3]=`PropertyNameExpected`,e[e.ValueExpected=4]=`ValueExpected`,e[e.ColonExpected=5]=`ColonExpected`,e[e.CommaExpected=6]=`CommaExpected`,e[e.CloseBraceExpected=7]=`CloseBraceExpected`,e[e.CloseBracketExpected=8]=`CloseBracketExpected`,e[e.EndOfFileExpected=9]=`EndOfFileExpected`,e[e.InvalidCommentToken=10]=`InvalidCommentToken`,e[e.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=14]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=16]=`InvalidCharacter`})(Vs||={});var Hs=X.lazy(async()=>({default:(await o(()=>import(`./dist-D80kLFC3.js`),[],import.meta.url)).default}));function Us(e){try{return JSON.stringify(e??{},null,2)}catch{return`{}`}}function Ws(e){return e?e.split(`.`).map(e=>{let t=Number(e);return Number.isInteger(t)&&String(t)===e?t:e}):[]}function Gs({value:e,onChange:t,readOnly:n,issues:r,height:i=`60vh`,fallbackDelayMs:a=4e3}){let o=X.useMemo(()=>zi(),[]),[s,c]=X.useState(()=>Us(e)),[l,u]=X.useState(null),d=X.useRef(s),f=X.useRef(null),p=X.useRef(null),m=X.useRef(null),[h,g]=X.useState(!1);X.useEffect(()=>{if(h)return;let e=setTimeout(()=>{let e=m.current;(!e||!e.querySelector(`.view-line`))&&g(!0)},a);return()=>clearTimeout(e)},[h,a]);let[_,v]=X.useState(()=>typeof document>`u`?`light`:document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>v(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let y=X.useCallback(()=>{let e=f.current,t=p.current;if(!e||!t)return;let n=e.getModel();if(!n)return;if(!r||r.length===0){t.editor.setModelMarkers(n,`objectui-diagnostics`,[]);return}let i;try{i=zs(s)}catch{i=void 0}let a=r.map(e=>{let r=Ws(e.path),a=1,o=1,s=1,c=2,l=i?Bs(i,r):void 0;if(l){let e=n.getPositionAt(l.offset),t=n.getPositionAt(l.offset+l.length);a=e.lineNumber,o=e.column,s=t.lineNumber,c=t.column}return{severity:e.severity===`warning`?t.MarkerSeverity.Warning:t.MarkerSeverity.Error,message:e.path?`${e.path}: ${e.message}`:e.message,startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,source:`metadata`}});t.editor.setModelMarkers(n,`objectui-diagnostics`,a)},[r,s]);X.useEffect(()=>{y()},[y]),X.useEffect(()=>{let t=Us(e);t!==d.current&&(c(t),d.current=t,u(null))},[e]);let b=e=>{let n=e??``;c(n);try{let e=JSON.parse(n);e&&typeof e==`object`&&!Array.isArray(e)?(u(null),d.current=n,t(e)):u(J(`engine.form.rootJsonObject`,o))}catch(e){u(e?.message??J(`engine.form.invalidJson`,o))}};return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{ref:m,"data-testid":`source-editor`,className:`border rounded overflow-hidden bg-background`,style:{height:typeof i==`number`?`${i}px`:i},children:h?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>b(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`JSON source`,className:`w-full h-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(Je,{className:`w-full h-full`}),children:(0,Y.jsx)(Hs,{value:s,language:`json`,theme:_,onChange:b,onMount:(e,t)=>{f.current=e,p.current=t,setTimeout(y,0)},options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,renderLineHighlight:`line`,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),l&&(0,Y.jsxs)(`div`,{className:`text-xs text-destructive flex items-start gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`⚠`}),(0,Y.jsx)(`span`,{children:l})]})]})}var Ks={object:async()=>(await o(async()=>{let{ObjectSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{ObjectSchema:e}},[],import.meta.url)).ObjectSchema,hook:async()=>(await o(async()=>{let{HookSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{HookSchema:e}},[],import.meta.url)).HookSchema,mapping:async()=>(await o(async()=>{let{MappingSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{MappingSchema:e}},[],import.meta.url)).MappingSchema,analytics_cube:async()=>(await o(async()=>{let{CubeSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{CubeSchema:e}},[],import.meta.url)).CubeSchema,view:async()=>(await o(async()=>{let{ViewSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ViewSchema:e}},[],import.meta.url)).ViewSchema,page:async()=>(await o(async()=>{let{PageSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{PageSchema:e}},[],import.meta.url)).PageSchema,app:async()=>(await o(async()=>{let{AppSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{AppSchema:e}},[],import.meta.url)).AppSchema,dashboard:async()=>(await o(async()=>{let{DashboardSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{DashboardSchema:e}},[],import.meta.url)).DashboardSchema,report:async()=>(await o(async()=>{let{ReportSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ReportSchema:e}},[],import.meta.url)).ReportSchema,action:async()=>(await o(async()=>{let{ActionSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ActionSchema:e}},[],import.meta.url)).ActionSchema,theme:async()=>(await o(async()=>{let{ThemeSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ThemeSchema:e}},[],import.meta.url)).ThemeSchema,flow:async()=>(await o(async()=>{let{FlowSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.i);return{FlowSchema:e}},[],import.meta.url)).FlowSchema,webhook:async()=>(await o(async()=>{let{WebhookSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.i);return{WebhookSchema:e}},[],import.meta.url)).WebhookSchema,agent:async()=>(await o(async()=>{let{AgentSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{AgentSchema:e}},[],import.meta.url)).AgentSchema,tool:async()=>(await o(async()=>{let{ToolSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{ToolSchema:e}},[],import.meta.url)).ToolSchema,skill:async()=>(await o(async()=>{let{SkillSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{SkillSchema:e}},[],import.meta.url)).SkillSchema,email_template:async()=>(await o(async()=>{let{EmailTemplateSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.t);return{EmailTemplateSchema:e}},[],import.meta.url)).EmailTemplateSchema,job:async()=>(await o(async()=>{let{JobSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.t);return{JobSchema:e}},[],import.meta.url)).JobSchema,permission:async()=>(await o(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,profile:async()=>(await o(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,policy:async()=>(await o(async()=>{let{PolicySchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PolicySchema:e}},[],import.meta.url)).PolicySchema,role:async()=>(await o(async()=>{let{RoleSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.r);return{RoleSchema:e}},[],import.meta.url)).RoleSchema,api:async()=>(await o(async()=>{let{ApiEndpointSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.a);return{ApiEndpointSchema:e}},[],import.meta.url)).ApiEndpointSchema},qs=new Set([`approval`,`connector_action`]),Js=/^nodes\.(\d+)\.type$/;function Ys(e,t){let n=e?.nodes;if(!Array.isArray(n))return;let r=n[t];return typeof r?.type==`string`?r.type:void 0}var Xs=new Map;async function Zs(e){if(Xs.has(e))return Xs.get(e)??null;let t=Ks[e];if(!t)return Xs.set(e,null),null;try{let n=await t(),r=n&&typeof n.safeParse==`function`?n:null;return Xs.set(e,r),r}catch{return Xs.set(e,null),null}}function Qs(e){return e in Ks}async function $s(e,t,n){let r=await Zs(e);if(!r)return{ok:!0,issues:[]};let i=r.safeParse(t);if(i.success)return{ok:!0,issues:[]};let a=i.error?.issues??[],o=Array.isArray(n?.required)?new Set(n.required.map(e=>String(e))):void 0;if(o&&t&&typeof t==`object`&&!Array.isArray(t)){let e=t;a=a.filter(t=>{let n=t.path??[];if(n.length!==1)return!0;let r=String(n[0]);return!((e[r]===void 0||e[r]===null)&&!o.has(r))})}return e===`flow`&&(a=a.filter(e=>{let n=(e.path??[]).map(e=>String(e)).join(`.`),r=Js.exec(n);if(!r)return!0;let i=Ys(t,Number(r[1]));return!(i&&qs.has(i))})),a.length===0?{ok:!0,issues:[]}:{ok:!1,issues:a.map(e=>({path:(e.path??[]).map(e=>String(e)).join(`.`),message:e.message}))}}function ec(e,t,n){let r=t.split(`.`);if(r.length<=1)return e;let i=[e],a=nc(n)?.[r[0]];for(let e=1;e<r.length;e++){let t=r[e];if(/^\d+$/.test(t)){let e=Number(t),n=Array.isArray(a)?a[e]:void 0;i.push(tc(n)??`#${e+1}`),a=n}else i.push(t),a=nc(a)?.[t]}return i.join(` → `)}function tc(e){let t=nc(e);if(t)for(let e of[`id`,`name`,`key`,`title`,`label`]){let n=t[e];if(typeof n==`string`&&n.trim())return n;let r=nc(n);if(r){let e=r.defaultValue??r.key;if(typeof e==`string`&&e.trim())return e}}}function nc(e){return e&&typeof e==`object`?e:void 0}function rc(e,t,n){return e.createBuildBody?e.createBuildBody(t):{...n??e.createDefaults??{},...t}}var ic=_n,ac=new Set([`object`,`report`,`dataset`]),oc={object:[`fields`,`fieldGroups`]};function sc(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`?null:Object.keys(n).length>0?n:null}function cc(e){return e.loadFailed?!1:e.hasDiag||e.hasClientValidator}function lc({type:e,name:t,createMode:n=!1,embedded:r=!1}){let a=i(),o=e??a.type??``,s=t??a.name??``,c=Eo(o);if(c?.EditPage&&!n){let e=c.EditPage;return(0,Y.jsx)(e,{type:o,name:s})}if(c?.CreatePage&&n){let e=c.CreatePage;return(0,Y.jsx)(e,{type:o})}return(0,Y.jsx)(uc,{type:o,name:s,createMode:n,embedded:r})}function uc({type:e,name:t,createMode:n,embedded:r}){let i=u(),[a,o]=s(),c=a.get(`package`)??void 0,l=mi(),{entries:d}=Qr(l),f=d.find(t=>t.type===e),p=Oo(e,f),m=(n&&p.createSchema?p.createSchema:f?.schema)??p.defaultSchema,h=X.useMemo(()=>zi(),[]),[g,_]=X.useState(null),v=p.identityField??`name`,[y,b]=X.useState(()=>n?{...p.createDefaults??{},[v]:``}:{}),[x,S]=X.useState(null),[C,w]=X.useState(!n),[T,E]=X.useState(!1),[O,k]=X.useState(null),[A,j]=X.useState(!1),[M,ee]=X.useState([]),[te,ne]=X.useState(!1),N=X.useCallback(e=>{b(t=>{let n=typeof e==`function`?e(t):e,r=new Set,i=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of i)Object.is(t?.[e],n?.[e])||r.add(e);return r.size>0&&(ne(!0),ee(e=>e.filter(e=>{let t=(e.path??``).split(`.`)[0];return!r.has(t)}))),n})},[]),[re,P]=X.useState(null),[ae,F]=X.useState(null),oe=X.useCallback(e=>{N(t=>({...t,...e}))},[N]),{markTouched:se}=ts({rules:p.createDerive,draft:y,onPatch:oe,enabled:!!n}),ce=X.useMemo(()=>{if(n)return p.createFields&&p.createFields.length>0?p.createFields:ns(m?.properties??void 0,m?.required??void 0)},[n,p.createFields,m]),le=X.useMemo(()=>{let t=oc[e]??[];if(!n||!ce)return t.length===0?p.hiddenFields:Array.from(new Set([...p.hiddenFields??[],...t]));let r=m?.properties??{},i=new Set(ce),a=Object.keys(r).filter(e=>!i.has(e));if(p.hiddenFields)for(let e of p.hiddenFields)a.includes(e)||a.push(e);for(let e of t)a.includes(e)||a.push(e);return a},[n,ce,m,p.hiddenFields,e]),de=X.useMemo(()=>n&&ce?ce:p.fieldOrder,[n,ce,p.fieldOrder]),pe=X.useCallback(e=>{if(n){let t=y,n=typeof e==`function`?e(t):e,r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of r)Object.is(t?.[e],n?.[e])||se(e)}N(e)},[n,y,N,se]);X.useEffect(()=>{if(!Qs(e))return;let t=!1,n=window.setTimeout(()=>{$s(e,y,f?.schema).then(e=>{t||ee(e.issues)})},200);return()=>{t=!0,window.clearTimeout(n)}},[e,y,f?.schema]);let he=X.useMemo(()=>n&&!te?[]:M,[n,te,M]),ge=X.useMemo(()=>{let t=g?._diagnostics,n=Qs(e)?he.map(e=>({path:e.path,message:ti(e.message,h)})):(t?.errors??[]).map(e=>({path:e.path,message:ti(e.message,h)})),r=(t?.warnings??[]).map(e=>({path:e.path,message:ti(e.message,h)}));return[...n.map(e=>({path:e.path||void 0,message:e.message,severity:`error`})),...r.map(e=>({path:e.path||void 0,message:e.message,severity:`warning`}))]},[g,he,e,h]),[_e,ye]=X.useState(!1),[be,xe]=X.useState(!1),[Se,Ce]=X.useState(0),[we,De]=X.useState(!!n),[Oe,je]=X.useState(null);X.useEffect(()=>{je(null)},[e,t]),X.useEffect(()=>{we||je(null)},[we]);let Pe=X.useRef(null),[Fe,Ie]=X.useState(null),[Le,ze]=X.useState(()=>{if(typeof window>`u`)return!0;try{let e=window.localStorage.getItem(`metadata-admin:autosave`);return e===null?!0:e===`1`}catch{return!0}});X.useEffect(()=>{try{window.localStorage.setItem(`metadata-admin:autosave`,Le?`1`:`0`)}catch{}},[Le]);let Be=X.useRef(null),[Ue,We]=X.useState([]),[Ge,Ke]=X.useState(!0);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await l.list(`object`);if(e)return;We(t.map(e=>e?.name).filter(e=>!!e).sort())}catch{e||We([])}finally{e||Ke(!1)}})(),()=>{e=!0}},[l]);let qe=y?.interfaceConfig?.source||y?.object||y?.objectName,[Je,Xe]=X.useState([]),[Ze,Qe]=X.useState(!1),[$e,et]=X.useState([]);X.useEffect(()=>{let e=!1;if(!qe){Xe([]),et([]);return}return Qe(!0),(async()=>{try{let t=await l.get(`object`,qe);if(e)return;let n=t?.fields;Xe((Array.isArray(n)?n.map(e=>({name:e?.name,label:e?.label,type:e?.type})):n&&typeof n==`object`?Object.entries(n).map(([e,t])=>({name:e,label:t?.label,type:t?.type})):[]).filter(e=>!!e.name));let r=t?.actions,i=Array.isArray(r)?r.map(e=>({name:e?.name,label:e?.label,locations:e?.locations})).filter(e=>!!e.name):[];e||et(i)}catch{e||(Xe([]),et([]))}finally{e||Qe(!1)}})(),()=>{e=!0}},[l,qe]);let[L,tt]=X.useState([]),[rt,it]=X.useState(!1);X.useEffect(()=>{let e=!1;if(!qe){tt([]);return}return it(!0),(async()=>{try{let t=await l.list(`view`);if(e)return;let n=(t||[]).filter(e=>(e?.objectName??e?.object??e?.object_name)===qe),r=new Set;tt(n.map(e=>({name:e?.name,label:e?.label||void 0})).filter(e=>!!e.name&&!r.has(e.name)&&r.add(e.name)))}catch{e||tt([])}finally{e||it(!1)}})(),()=>{e=!0}},[l,qe]);let at=X.useMemo(()=>({objectNames:Ue,objectsLoading:Ge,objectFields:Je,objectFieldsLoading:Ze,objectViews:L,objectViewsLoading:rt,objectActions:$e}),[Ue,Ge,Je,Ze,L,rt,$e]);X.useEffect(()=>{if(n){w(!1);return}let r=!1;return w(!0),k(null),j(!1),(async()=>{try{let n=c?{packageId:c}:{},[i,a]=await Promise.all([l.layered(e,t,n),l.getDraft(e,t,n).catch(()=>null)]);if(r)return;_(i);let o=i?._diagnostics;o&&o.valid===!1&&Array.isArray(o.errors)?ee(o.errors.map(e=>({path:e.path||``,message:e.message}))):ee([]);let s=sc(a),u=i.effective??i.code??{},d=s?{...u,...s}:u,f=p.toDraft?p.toDraft(d):d;b(f),Pe.current=f,ye(!!s),w(!1)}catch(n){r||(j(!0),k(q(`engine.edit.loadFailed`,h,{type:e,name:t??``,message:n?.message??String(n)})),w(!1))}})(),()=>{r=!0}},[l,e,t,c,n,Se,h]);let[ot,st]=X.useState(!1);async function ct(){if(!(x!=null||ot)){st(!0);try{S(await l.references(e,t))}catch(e){S([]),console.error(`references() failed`,e)}finally{st(!1)}}}let[dt,ft]=X.useState(null),pt=X.useMemo(()=>!n&&!r&&Do(e).length>0,[e,n,r]),ht=X.useRef(null),[gt,_t]=X.useState(null),vt=a.get(`review`),yt=X.useRef(!1);X.useEffect(()=>{if(!(vt!==`1`||n)){if(!yt.current){yt.current=!0,Ce(e=>e+1);return}if(!C){_e&&_t(`review`);let e=new URLSearchParams(a);e.delete(`review`),o(e,{replace:!0}),yt.current=!1}}},[vt,n,C,_e]);let[bt,St]=X.useState(`properties`);X.useEffect(()=>{if(gt===`references`&&ct(),typeof window<`u`&&!r){let e=new URL(window.location.href);gt?e.searchParams.set(`tab`,gt):e.searchParams.delete(`tab`),window.history.replaceState({},``,e.toString())}},[gt,r]);let Ct=`metadata-edit:inspector-collapsed`,Tt=`metadata-edit:inspector-size`,[Et,Dt]=X.useState(()=>typeof window>`u`?!1:window.localStorage.getItem(Ct)===`1`),kt=X.useRef(38);X.useEffect(()=>{if(typeof window>`u`)return;let e=Number(window.localStorage.getItem(Tt));Number.isFinite(e)&&e>=22&&e<=80&&(kt.current=e)},[]);let At=X.useRef(null),jt=X.useCallback(()=>{Dt(e=>{let t=!e;return typeof window<`u`&&window.localStorage.setItem(Ct,t?`1`:`0`),t})},[]);X.useEffect(()=>{let e=At.current;if(e)if(Et)e.resize?.(`0%`);else{let t=kt.current||38;e.resize?.(`${t}%`)}},[Et]);let[Nt,Pt]=X.useState(!1),[Ft,It]=X.useState(!1);X.useEffect(()=>{if(typeof document>`u`||!Ft)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[Ft]),X.useEffect(()=>{if(typeof window>`u`||!Ft)return;function e(e){e.key===`Escape`&&(e.preventDefault(),It(!1))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Ft]);let Lt=X.useRef(null);X.useEffect(()=>{Lt.current=null},[e,t]),X.useEffect(()=>{if(n||r||C)return;let i=`${e}/${t??``}`;Lt.current!==i&&ys(e)&&(g?.code!=null&&g.code?._packageId!==`sys_metadata`?f?.allowOrgOverride:f?.allowOrgOverride||f?.allowRuntimeCreate)&&(Lt.current=i,De(!0))},[e,t,n,r,C,f,g]),X.useEffect(()=>{if(typeof window>`u`||r)return;function e(e){if(!(e.metaKey||e.ctrlKey)||e.shiftKey||e.altKey||e.key!==`\\`)return;let t=e.target;t&&(t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),jt())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,jt]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URLSearchParams(window.location.search),t=e.get(`tab`);(t===`layers`||t===`references`||t===`related`||t===`audit`)&&_t(t),ht.current=t;let n=e.get(`open`);if(n&&n.includes(`:`)){let[e,t]=n.split(`:`,2);e&&t&&ft({kind:`metadata`,type:e,name:t})}},[]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URL(window.location.href);dt?.kind===`metadata`?e.searchParams.set(`open`,`${dt.type}:${dt.name}`):e.searchParams.delete(`open`),window.history.replaceState({},``,e.toString())},[dt,r]);function Rt(e){let t=e.split(`.`)[0];return t?ec((()=>{let e=n&&p.createSchema?void 0:f?.form,r=Array.isArray(e?.sections)?e.sections:[];for(let e of r){let n=Array.isArray(e?.fields)?e.fields:[];for(let e of n)if(typeof e==`string`){if(e===t)return e}else if(e?.field===t)return String(e.label??t)}let i=m?.properties??{};return String(i[t]?.title??t)})(),e,y):e}async function R(r){E(!0),k(null),ee([]);try{let o=f?.createSeed,s=n?rc(p,y,o):p.fromDraft?p.fromDraft(y):y;if(n&&p.createSeed)try{let e=await p.createSeed(y,{client:l});e&&typeof e==`object`&&(s={...s,...e})}catch{}let u=String(s[v]??y[v]??t),d=n?{...s,[v]:u}:s;if(!u){k(J(`engine.validation.nameRequired`,h)),E(!1);return}let m=(()=>{try{let e=new URLSearchParams(window.location.search).get(`package`);return e&&e!==`all`?e:void 0}catch{return}})();await l.save(e,u,d,{force:r,mode:`draft`,...m?{packageId:m}:{}});let g=c?{packageId:c}:{},[x,S]=await Promise.all([l.layered(e,u,g),l.getDraft(e,u,g).catch(()=>null)]);_(x);let C=sc(S);ye(!!C);let w=x.effective??d,T=C?{...w,...C}:w,D=p.toDraft?p.toDraft(T):T;b(D),Pe.current=D,Ie(new Date),Be.current=JSON.stringify(D),P(null),F(null);let O=!n&&!!ys(e);if(!n&&!O&&De(!1),n){let e=a.toString();i(`../${encodeURIComponent(u)}${e?`?${e}`:``}`,{relative:`path`})}}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];P(Array.isArray(t)?t:[]),F(y)}else if(e?.code===`writable_package_required`)k(J(`engine.package.writableRequired`,h));else if(e?.status===422||e?.code===`invalid_metadata`||e?.code===`invalid_payload`){let t=e?.body?.issues??[],n=(Array.isArray(t)?t:[]).map(e=>({path:Array.isArray(e.path)?e.path.join(`.`):String(e.path??``),message:ti(String(e.message??`Invalid`),h)})),r=String(e?.body?.error??e?.message??``);if(n.length===0&&r){let e=r.match(/failed spec validation:\s*(.+?):\s*(.+)$/);n=e?[{path:e[1].trim(),message:ti(e[2].trim(),h)}]:[{path:``,message:ti(r,h)}]}ee(n),n.length===1&&!n[0].path?k(n[0].message):n.length===1?k(`${Rt(n[0].path)}: ${n[0].message}`):k(q(`engine.validation.failed`,h,{count:n.length}))}else k(e?.message??String(e))}finally{E(!1)}}async function zt(){let r=!n&&g?.code!=null;if(confirm(q(r?`engine.edit.resetConfirm`:`engine.edit.deleteConfirm`,h,{type:e,name:t??``}))){E(!0),k(null);try{if(await l.reset(e,t),r){let n=await l.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),Pe.current=r,ys(e)?Lt.current=null:De(!1)}else i(`../`,{relative:`path`})}catch(e){k(e?.message??String(e))}finally{E(!1)}}}async function Bt(){xe(!0),k(null);try{await l.publish(e,t);let[n,r]=await Promise.all([l.layered(e,t),l.getDraft(e,t).catch(()=>null)]);_(n);let i=sc(r);ye(!!i);let a=n.effective??y,o=i?{...a,...i}:a;b(o),Pe.current=o}catch(e){k(e?.message??String(e))}finally{xe(!1)}}async function Ht(){if(confirm(q(`engine.edit.discardDraftConfirm`,h,{type:e,name:t??``}))){E(!0),k(null);try{await l.reset(e,t,{state:`draft`});let n=await l.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),Pe.current=r,ye(!1)}catch(e){k(e?.message??String(e))}finally{E(!1)}}}let Ut=X.useMemo(()=>{if(n)return Object.keys(y).length>0;let e=Pe.current;if(!e)return!1;try{return JSON.stringify(y)!==JSON.stringify(e)}catch{return!1}},[y,n]),Wt=!n&&g?.code!=null&&g.code?._packageId!==`sys_metadata`,Gt=g?.editable!==!1,Kt=g?.deletable!==!1,Jt=g?.resettable!==!1,Yt=g?.lockReason,Zt=g?.lock&&g.lock!==`none`,Qt=(n?!!(f?.allowOrgOverride||f?.allowRuntimeCreate):Wt?!!f?.allowOrgOverride:!!(f?.allowOrgOverride||f?.allowRuntimeCreate))&&(n||Gt),$t=!Qt&&!n,en=X.useRef(R);if(X.useEffect(()=>{en.current=R}),X.useEffect(()=>{if(!Le||n||$t||!we||!Ut||T)return;let e;try{e=JSON.stringify(y)}catch{return}if(e===Be.current)return;let t=window.setTimeout(()=>{Be.current=e,en.current(!1)},1500);return()=>window.clearTimeout(t)},[y,Ut,we,T,n,$t,Le]),X.useEffect(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`s`){if(!Qt||$t||!we&&!n)return;e.preventDefault(),!T&&(n||Ut)&&en.current(!1)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Qt,$t,we,n,T,Ut]),X.useEffect(()=>{if(!Ut)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[Ut]),X.useEffect(()=>{if(!Ut)return;let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t&&!(t.target&&t.target!==`_self`)&&!t.hasAttribute(`download`)){try{let e=new URL(t.href,window.location.href);if(e.origin!==window.location.origin||e.pathname===window.location.pathname)return}catch{return}confirm(J(`engine.edit.unsavedLeaveConfirm`,h))||(e.preventDefault(),e.stopPropagation())}};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[Ut,h]),Ur(X.useMemo(()=>{if(r)return null;let n=String(y.name??t??``);if(!n)return null;let i={type:e,name:n,label:typeof y.label==`string`?y.label:void 0};return e===`object`&&(i.fields=ki(y.fields).entries.slice(0,60).map(e=>({name:e.name,type:typeof e.def.type==`string`?e.def.type:void 0,label:typeof e.def.label==`string`?e.def.label:void 0,required:!!e.def.required||void 0}))),i},[r,e,t,y])),C)return(0,Y.jsx)(yo,{entry:f,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading `,e,`/`,t,`…`]})});let tn=$t&&Wt&&!!f?.allowRuntimeCreate,nn=ac.has(e),rn=!r&&(!n||nn)?ys(e):void 0,an=Ss(e),on=Ts(e);function cn(){Pe.current&&b(Pe.current),ee([]),k(null),De(!1)}let ln=$t||!we&&!n,un=(0,Y.jsxs)(Y.Fragment,{children:[!n&&(0,Y.jsx)(So,{entry:f,location:`record_header`,recordId:t,onAfter:()=>Ce(e=>e+1)}),(!n||pt)&&(0,Y.jsxs)(`div`,{className:`flex items-center rounded-md border bg-background p-0.5`,children:[!n&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`layers`),title:J(`engine.edit.layers`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Vt,{className:`h-3.5 w-3.5`}),g?.overlay&&(()=>{let e=zo(g.code,g.effective);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-emerald-600 text-emerald-50 text-[9px] leading-[14px] text-center font-medium`,title:J(`engine.layers.diff`,h),children:e}):null})()]}),!n&&_e&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`review`),title:J(`designer.draftReview.title`,h),className:`h-7 w-7 p-0 relative`,"data-testid":`resource-review-trigger`,children:[(0,Y.jsx)(Ir,{className:`h-3.5 w-3.5`}),(()=>{let e=Jo(g?.effective??null,y);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-amber-500 text-amber-50 text-[9px] leading-[14px] text-center font-medium`,title:q(`designer.draftReview.badge`,h,{n:e}),children:e}):null})()]}),!n&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`references`),title:J(`engine.edit.references`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Ve,{className:`h-3.5 w-3.5`}),x&&x.length>0&&(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-muted text-foreground text-[9px] leading-[14px] text-center font-medium border`,children:x.length})]}),pt&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`related`),title:J(`engine.edit.related`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`history`),title:J(`engine.edit.history`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(fn,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`audit`),title:J(`engine.edit.auditTab`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(mt,{className:`h-3.5 w-3.5`})})]}),!n&&Qt&&g?.overlay&&(Wt?Jt:Kt)&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:zt,disabled:T,title:J(Wt?`engine.edit.reset`:`engine.edit.delete`,h),className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive`,children:Wt?(0,Y.jsx)(Ne,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})}),Qt&&!n&&!we&&!rn&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>De(!0),className:`h-7`,children:[(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.edit.edit`,h)]}),Qt&&(we||n)&&(0,Y.jsx)(fc,{saving:T,isDirty:Ut,autoSaveEnabled:Le,lastSavedAt:Fe,createMode:!!n,locale:h}),Qt&&(we||n)&&!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>ze(e=>!e),className:`h-7 w-7 p-0 text-muted-foreground`,title:J(Le?`engine.edit.autoSaveOn`:`engine.edit.autoSaveOff`,h),children:Le?(0,Y.jsx)(ve,{className:`h-3.5 w-3.5 text-emerald-600`}):(0,Y.jsx)(fe,{className:`h-3.5 w-3.5`})}),Qt&&!n&&we&&!rn&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:cn,disabled:T,className:`h-7 w-7 p-0`,title:J(`engine.cancel`,h),children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})}),Qt&&(we||n)&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>R(!1),disabled:T||!n&&!Ut,className:`h-7 w-7 p-0 relative`,title:T?J(`engine.edit.saving`,h):!n&&!Ut?J(`engine.edit.noChanges`,h):`${J(`engine.edit.save`,h)} (⌘S)`,children:[T?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(In,{className:`h-3.5 w-3.5`}),Ut&&!T&&(0,Y.jsx)(`span`,{"aria-hidden":!0,className:`absolute -top-0.5 -right-0.5 inline-block h-2 w-2 rounded-full bg-amber-300 ring-2 ring-background`})]}),Qt&&!n&&_e&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:Ht,disabled:T||be,className:`h-7 w-7 p-0 text-muted-foreground`,title:J(`engine.edit.discardDraft`,h),children:(0,Y.jsx)(Ae,{className:`h-3.5 w-3.5`})}),Qt&&!n&&_e&&(0,Y.jsx)(H,{size:`sm`,onClick:Bt,disabled:T||be||Ut,className:`h-7 px-2 relative bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,title:J(Ut?`engine.edit.publishBlockedDirty`:`engine.edit.publish`,h),children:be?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ue,{className:`h-3.5 w-3.5 mr-1`}),(0,Y.jsx)(`span`,{className:`text-xs`,children:J(`engine.edit.publish`,h)})]})})]});return(0,Y.jsxs)(yo,{entry:f??{type:e,label:e},itemName:n?`(new)`:t,subtitle:n?J(`engine.edit.createNew`,h):void 0,actions:rn?null:un,children:[(0,Y.jsxs)(`div`,{className:rn?`flex h-full min-h-0 flex-col`:`p-6 space-y-6 max-w-7xl`,children:[(O||$t||_e||Zt)&&(0,Y.jsxs)(`div`,{className:rn?`px-6 pt-4 space-y-3`:`space-y-3`,children:[O&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:O}),Zt&&(0,Y.jsxs)(`div`,{className:`text-xs text-amber-900 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-2.5`,children:[(0,Y.jsx)(ut,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 opacity-80`}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`font-medium`,children:[g?.lock===`full`&&J(`engine.edit.lockFull`,h),g?.lock===`no-overlay`&&J(`engine.edit.lockNoOverlay`,h),g?.lock===`no-delete`&&J(`engine.edit.lockNoDelete`,h)]}),Yt&&(0,Y.jsx)(`div`,{className:`mt-0.5 opacity-90`,children:Yt}),g?.lockDocsUrl&&(0,Y.jsxs)(`a`,{href:g.lockDocsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-amber-800 underline hover:text-amber-900 dark:text-amber-200 dark:hover:text-amber-100`,children:[h===`zh-CN`?`查看文档`:`View docs`,` →`]}),g?.packageId&&(0,Y.jsx)(`div`,{className:`mt-0.5 text-amber-700 dark:text-amber-300/80`,children:(0,Y.jsxs)(`code`,{className:`font-mono`,children:[g.packageId,g.packageVersion?`@${g.packageVersion}`:``]})})]}),tn&&(0,Y.jsx)(H,{size:`sm`,variant:`outline`,className:`shrink-0 h-7 bg-background/60`,onClick:()=>i(`../new`,{relative:`path`}),children:J(`engine.list.create`,h)})]}),_e&&!n&&(0,Y.jsxs)(`div`,{className:`text-xs text-emerald-900 border border-emerald-300 bg-emerald-50 rounded p-3 dark:text-emerald-200 dark:border-emerald-700/50 dark:bg-emerald-950/30 flex items-center gap-3`,children:[(0,Y.jsx)(ue,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:J(`engine.edit.draftPending`,h)}),Qt&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{size:`sm`,variant:`ghost`,onClick:Ht,disabled:T||be,className:`h-7`,children:J(`engine.edit.discardDraft`,h)}),(0,Y.jsx)(H,{size:`sm`,onClick:Bt,disabled:T||be||Ut,className:`h-7 bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,children:be?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):J(`engine.edit.publish`,h)})]})]}),$t&&!Zt&&(0,Y.jsxs)(`div`,{"data-testid":`readonly-banner`,className:`text-xs text-amber-800 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex-1`,children:tn?J(`engine.edit.artifactLockedBanner`,h).split(/(\{type\})/).map((t,n)=>t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):(0,Y.jsx)(X.Fragment,{children:t},n)):J(`engine.edit.readOnlyTypeBanner`,h).split(/(\{flag\}|\{type\}|\{override\})/).map((t,n)=>t===`{flag}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`OBJECTSTACK_METADATA_WRITABLE`},n):t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):t===`{override}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`allowOrgOverride`},n):(0,Y.jsx)(X.Fragment,{children:t},n))}),tn&&(0,Y.jsx)(H,{size:`sm`,variant:`outline`,className:`shrink-0`,onClick:()=>i(`../new`,{relative:`path`}),children:J(`engine.list.create`,h)})]})]}),(0,Y.jsx)(`div`,{className:rn?`flex w-full flex-1 min-h-0 flex-col`:`w-full`,children:(0,Y.jsxs)(`div`,{className:rn?`mt-2 flex-1 min-h-0 flex flex-col px-6 pb-4`:`mt-4 space-y-3`,children:[!rn&&ln&&!$t&&Qt&&!n&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 text-xs text-muted-foreground border rounded p-2.5 bg-muted/30`,children:[(0,Y.jsx)(`span`,{children:J(`engine.edit.readOnlyBanner`,h).split(/\{edit\}/).map((e,t,n)=>(0,Y.jsxs)(X.Fragment,{children:[e,t<n.length-1&&(0,Y.jsx)(`strong`,{children:J(`engine.edit.edit`,h)})]},t))}),(0,Y.jsxs)(H,{size:`sm`,variant:`outline`,onClick:()=>De(!0),children:[(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.edit.edit`,h)]})]}),(()=>{let t=g?._diagnostics,r=Qs(e)?M.map(e=>({path:e.path,message:ti(e.message,h)})):(t?.errors??[]).map(e=>({...e,message:ti(e.message,h)})),i=Qs(e)?r.length===0:t?.valid!==!1;if(n&&!te||!cc({loadFailed:A,hasDiag:!!t,hasClientValidator:Qs(e)}))return null;let a=r,o=t?.warnings??[],s=!i&&a.length>0,c=o.length>0;if(!s&&!c)return null;let l=(e,t)=>{let n=t.slice(0,3),r=Math.max(0,t.length-n.length),i=e===`error`?`border-destructive/40 bg-destructive/[0.06] text-destructive`:`border-amber-500/40 bg-amber-500/[0.08] text-amber-800 dark:text-amber-200`,a=e===`error`?`engine.edit.diagnostics.title`:`engine.edit.diagnostics.warnTitle`;return(0,Y.jsxs)(`div`,{"data-testid":e===`error`?`metadata-validation-banner`:void 0,className:`flex items-start gap-2 text-xs border rounded p-2.5 ${i}`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:q(a,h,{count:t.length})}),(0,Y.jsxs)(`ul`,{className:`mt-1 space-y-0.5 font-mono text-[11px]`,children:[n.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`opacity-70`,children:e.path?Rt(e.path):`(root)`}),`: `,e.message]},t)),r>0&&(0,Y.jsx)(`li`,{className:`opacity-70`,children:q(`engine.edit.diagnostics.more`,h,{count:r})})]})]})]},e)};return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[s&&l(`error`,a),c&&l(`warning`,o)]})})(),rn?(0,Y.jsx)(`div`,{className:Ft?`fixed inset-0 z-50 bg-background flex flex-col p-3`:`relative flex-1 min-h-0 flex`,children:(0,Y.jsxs)(ic,{direction:`horizontal`,className:`flex-1 min-h-0 rounded-md border bg-background overflow-hidden`,id:`metadata-edit-${e}`,children:[(0,Y.jsx)(D,{defaultSize:62,minSize:30,children:(0,Y.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b bg-background/95 backdrop-blur px-3 py-2 sticky top-0 z-10`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1`,children:Qt&&(0,Y.jsxs)(`div`,{role:`tablist`,"aria-label":J(`engine.edit.designer`,h),className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":!Nt,onClick:()=>Pt(!1),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(Nt?`text-muted-foreground hover:text-foreground`:`bg-background shadow-sm text-foreground`),title:J(`engine.edit.designMode`,h),children:[(0,Y.jsx)(jr,{className:`h-3.5 w-3.5`}),J(`engine.edit.designMode`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":Nt,onClick:()=>Pt(!0),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(Nt?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.previewMode`,h),children:[(0,Y.jsx)(Ee,{className:`h-3.5 w-3.5`}),J(`engine.edit.previewMode`,h)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[un,(0,Y.jsx)(`span`,{className:`mx-1 h-5 w-px bg-border`,"aria-hidden":!0}),rn&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:jt,className:`h-7 w-7 p-0`,title:J(Et?`engine.edit.showInspector`:`engine.edit.hideInspector`,h)+` (⌘\\)`,children:Et?(0,Y.jsx)(sn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(xr,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>It(e=>!e),className:`h-7 w-7 p-0`,title:J(Ft?`engine.edit.exitFullscreen`:`engine.edit.fullscreen`,h),children:Ft?(0,Y.jsx)(me,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Ye,{className:`h-3.5 w-3.5`})})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4 bg-[radial-gradient(circle_at_1px_1px,theme(colors.border)_1px,transparent_0)] [background-size:16px_16px] bg-muted/30`,children:(0,Y.jsx)(rn,{type:e,name:t,draft:y,baseline:n?void 0:g?.effective??void 0,editing:we&&!Nt,selection:Nt?null:Oe,onSelectionChange:je,locale:h,diagnostics:ge,onPatch:e=>N(t=>({...t,...e}))})})]})}),(0,Y.jsx)(lt,{withHandle:!0,className:Et?`hidden`:`w-1.5 bg-border/40 hover:bg-primary/40 active:bg-primary/60 transition-colors`}),(0,Y.jsx)(D,{panelRef:At,defaultSize:kt.current,minSize:22,collapsible:!0,collapsedSize:0,onResize:e=>{let t=e.asPercentage,n=t<=.5;n||(kt.current=t,typeof window<`u`&&window.localStorage.setItem(Tt,String(Math.round(t)))),Dt(e=>e===n?e:(typeof window<`u`&&window.localStorage.setItem(Ct,n?`1`:`0`),n))},children:(0,Y.jsxs)(`div`,{className:`h-full overflow-auto`,children:[(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-background/95 backdrop-blur px-3 py-2`,children:[(0,Y.jsxs)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":bt===`properties`,onClick:()=>St(`properties`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(bt===`properties`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.inspector.properties`,h),children:[(0,Y.jsx)(qt,{className:`h-3.5 w-3.5`}),J(`engine.edit.inspector.properties`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":bt===`source`,onClick:()=>St(`source`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(bt===`source`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.inspector.source`,h),children:[(0,Y.jsx)(ke,{className:`h-3.5 w-3.5`}),J(`engine.edit.inspector.source`,h)]})]}),Ut&&(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px] border-amber-400/60 text-amber-600 dark:text-amber-300`,children:[(0,Y.jsx)(`span`,{className:`mr-1 inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),J(`engine.edit.unsaved`,h)]})]}),(0,Y.jsx)(`div`,{className:`p-4`,children:bt===`source`?(0,Y.jsx)(Gs,{value:y,onChange:N,readOnly:ln,issues:he.map(e=>({path:e.path??``,message:e.message}))}):Oe&&an?(0,Y.jsx)(an,{type:e,name:t,draft:y,selection:Oe,onPatch:e=>N(t=>({...t,...e})),onClearSelection:()=>je(null),onSelectionChange:je,readOnly:ln,locale:h}):!Oe&&on?(0,Y.jsx)(on,{type:e,name:t,draft:y,onPatch:e=>N(t=>({...t,...e})),onSelectionChange:je,readOnly:ln,locale:h,serverSchema:f?.schema}):(0,Y.jsx)(Fi,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:pe,issues:he,hiddenFields:le,fieldOrder:de,readOnly:ln,createMode:n,widgetContext:at})})]})})]})}):(0,Y.jsx)(Fi,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:pe,issues:he,hiddenFields:le,fieldOrder:de,readOnly:ln,createMode:n,widgetContext:at})]})})]}),(0,Y.jsx)(Vr,{open:gt===`layers`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.layers`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Bo,{layered:g,locale:h})})]})}),(0,Y.jsx)(Vr,{open:gt===`review`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`designer.draftReview.title`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t,` · `,J(`designer.canvas.reviewVsPublished`,h)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Yo,{published:g?.effective??null,draft:y,locale:h})})]})}),(0,Y.jsx)(Vr,{open:gt===`references`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsxs)(wt,{className:`text-base`,children:[J(`engine.edit.references`,h),x&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px]`,children:x.length})]}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(dc,{refs:x,loading:ot})})]})}),pt&&(0,Y.jsx)(Vr,{open:gt===`related`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.related`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(rs,{type:e,name:t,parentItem:y,onOpen:e=>ft(e)})})]})}),!n&&(0,Y.jsx)(Vr,{open:gt===`history`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.history`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ds,{type:e,name:t,client:l,onRollback:()=>Ce(e=>e+1),rollbackLabel:J(`engine.edit.rollback`,h),rollbackConfirm:e=>J(`engine.edit.rollbackConfirm`,h).replace(`{version}`,String(e))})})]})}),!n&&(0,Y.jsx)(Vr,{open:gt===`audit`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.auditTab`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden p-3`,children:(0,Y.jsx)(gs,{type:e,name:t,client:l,locale:h})})]})}),(0,Y.jsx)(ls,{target:dt,onClose:()=>ft(null),parentContext:{type:e,name:t}}),(0,Y.jsx)(xt,{open:re!=null,onOpenChange:e=>{e||(P(null),F(null))},children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-5 w-5 text-amber-600`}),`Destructive change detected`]}),(0,Y.jsx)(Te,{children:`The framework refused this save because it would drop or narrow data already in use. Review the issues and confirm to override.`})]}),(0,Y.jsx)(`div`,{className:`max-h-[300px] overflow-auto space-y-2 my-2`,children:re?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded border bg-amber-50 border-amber-200 p-2 text-xs`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-amber-900`,children:e.kind??`change`}),e.path&&(0,Y.jsx)(`div`,{className:`text-amber-800 font-mono mt-0.5`,children:e.path}),(0,Y.jsx)(`div`,{className:`text-amber-900 mt-1`,children:e.message})]},t))}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>P(null),children:`Cancel`}),(0,Y.jsx)(H,{variant:`destructive`,onClick:()=>R(!0),disabled:T,children:T?`Forcing…`:`Force save`})]})]})})]})}function dc({refs:e,loading:t}){return t||e==null?(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Scanning references…`]}):e.length===0?(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`No references found`}),(0,Y.jsx)(kt,{children:`Nothing in the metadata graph points at this item. Safe to delete.`})]}):(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From type`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From name`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`Path`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:e.map((e,t)=>(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50`,children:[(0,Y.jsx)(`td`,{className:`px-3 py-2`,children:(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px] font-mono`,children:e.fromType})}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs`,children:e.fromName}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e.path})]},t))})]})})}function fc({saving:e,isDirty:t,autoSaveEnabled:n,lastSavedAt:r,createMode:i,locale:a}){let[,o]=X.useReducer(e=>e+1,0);return X.useEffect(()=>{if(!r)return;let e=window.setInterval(o,3e4);return()=>window.clearInterval(e)},[r]),e?(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(U,{className:`h-3 w-3 animate-spin`}),J(`engine.edit.saving`,a)]}):t?i?null:(0,Y.jsxs)(`span`,{className:`text-xs text-amber-600 dark:text-amber-300 hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),J(n?`engine.edit.autoSavingShortly`:`engine.edit.unsaved`,a)]}):r?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:q(`engine.edit.savedAt`,a,{time:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`})}):null}function pc({type:e}){let t=a(),[n]=s(),r=e??n.get(`type`)??``;if(!r)return(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`Missing metadata type`}),(0,Y.jsxs)(kt,{children:[`This page expects a `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=`}),` query param (e.g. `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=view`}),`) or a nav-metadata `,(0,Y.jsxs)(`code`,{className:`font-mono`,children:[`params: `,`{ type: 'view' }`]}),`.`]})]})});let i=mc(t.pathname),o=i.split(`/`).filter(Boolean);return o.length===0?(0,Y.jsx)(Ao,{type:r}):o[0]===`new`&&o.length===1?(0,Y.jsx)(lc,{type:r,name:``,createMode:!0},`${r}:__new__`):o.length===2&&o[1]===`history`?(0,Y.jsx)(us,{type:r,name:decodeURIComponent(o[0])}):o.length===1?(0,Y.jsx)(lc,{type:r,name:decodeURIComponent(o[0])},`${r}:${o[0]}`):(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`Unknown sub-path`}),(0,Y.jsxs)(kt,{children:[`The path `,(0,Y.jsx)(`code`,{className:`font-mono`,children:i}),` isn't recognized. Valid forms are `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/`}),` (list),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/new`}),` (create),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name`}),` (edit),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name/history`}),`.`]})]})})}function mc(e){let t=e.indexOf(`/metadata/resource`);return t===-1?``:e.slice(t+18)}function hc(){let e=mi(),t=X.useMemo(()=>zi(),[]),[n,r]=X.useState(`error`),{loading:i,error:a,summary:o,reload:s}=xi(e,n),{entries:l}=Qr(e),u=X.useMemo(()=>{let e={};for(let n of l)e[n.type]=hi(n.type,t,n.label);return e},[l,t]),d=X.useMemo(()=>{let e={};for(let t of o.entries)(e[t.type]??=[]).push(t);return Object.entries(e).sort(([,e],[,t])=>t.length-e.length)},[o]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`nav`,{className:`text-xs text-muted-foreground mb-2`,children:(0,Y.jsxs)(c,{to:`..`,className:`hover:text-foreground inline-flex items-center gap-1`,children:[(0,Y.jsx)(pt,{className:`h-3 w-3`}),J(`engine.diagnostics.back`,t)]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`h1`,{className:`text-xl font-semibold flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-5 w-5 text-destructive`}),J(`engine.diagnostics.title`,t)]}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[11px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:q(`engine.diagnostics.summary`,t,{count:o.total,items:o.scannedItems,types:o.scannedTypes})}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsx)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5 text-xs`,children:[`error`,`warning`].map(e=>(0,Y.jsx)(`button`,{role:`tab`,type:`button`,"aria-selected":n===e,onClick:()=>r(e),className:`px-2.5 py-1 rounded transition-colors `+(n===e?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),children:J(`engine.diagnostics.severity.${e}`,t)},e))}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:s,children:[(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.diagnostics.refresh`,t)]})]}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 max-w-3xl`,children:J(`engine.diagnostics.description`,t)})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[i&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:J(`engine.diagnostics.loading`,t)}),!i&&a&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/[0.06]`,children:q(`engine.diagnostics.loadFailed`,t,{error:a})}),!i&&!a&&d.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.diagnostics.cleanTitle`,t)}),(0,Y.jsx)(kt,{children:q(`engine.diagnostics.cleanHint`,t,{items:o.scannedItems,types:o.scannedTypes})})]}),d.map(([e,r])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(c,{to:`../${encodeURIComponent(e)}`,className:`hover:text-foreground hover:underline`,children:u[e]??e}),(0,Y.jsx)(`span`,{className:`font-mono normal-case tracking-normal text-[10px] opacity-70`,children:e}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:r.length})]}),(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium w-[28%]`,children:J(`engine.diagnostics.col.name`,t)}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:J(`engine.diagnostics.col.issues`,t)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:r.map(r=>{let i=r.diagnostics.errors??[],a=r.diagnostics.warnings??[],o=(n===`warning`&&i.length===0?a:i).slice(0,3),s=Math.max(0,(i.length||a.length)-o.length);return(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50 align-top`,children:[(0,Y.jsxs)(`td`,{className:`px-3 py-2 align-top`,children:[(0,Y.jsx)(c,{to:`../${encodeURIComponent(e)}/${encodeURIComponent(r.name)}`,className:`text-primary hover:underline font-mono`,children:r.name}),i.length>0&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px] border-destructive/40 text-destructive`,children:q(`engine.diagnostics.errorN`,t,{count:i.length})}),a.length>0&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300`,children:q(`engine.diagnostics.warnN`,t,{count:a.length})})]}),(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:(0,Y.jsxs)(`ul`,{className:`space-y-0.5 font-mono text-[11px]`,children:[o.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:e.path||`(root)`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`: `}),e.message]},t)),s>0&&(0,Y.jsx)(`li`,{className:`text-muted-foreground`,children:q(`engine.diagnostics.more`,t,{count:s})})]})})]},r.name)})})]})})]},e))]})]})}function gc(){let e=X.useMemo(()=>zi().toLowerCase().startsWith(`zh`),[]);return X.useMemo(()=>e?{title:`已分配用户`,add:`添加用户`,remove:`移除`,empty:`还没有分配任何用户。点击「添加用户」来分配。`,loading:`加载中…`,pickTitle:`选择要分配的用户`,seatFull:e=>`AI 席位已用完(`+e+`/`+e+`)。请先移除一个用户,或在许可证中提升席位上限,再分配新用户。`,addFailed:`分配失败,请重试。`,countOf:e=>e+` 人`}:{title:`Assigned Users`,add:`Add user`,remove:`Remove`,empty:`No users assigned yet. Click "Add user" to assign.`,loading:`Loading…`,pickTitle:`Select users to assign`,seatFull:e=>`All `+e+` AI seat(s) are in use. Remove a user or raise the license cap before assigning another.`,addFailed:`Failed to assign. Please try again.`,countOf:e=>String(e)},[e])}var _c=e=>Array.isArray(e)?e:e?.records??e?.items??e?.data??[],vc=e=>e?.full_name||e?.name||e?.display_name||e?.email||String(e?.id??``);function yc({permissionSetName:e}){let t=f(),n=gc(),[r,i]=X.useState(null),[a,o]=X.useState([]),[s,c]=X.useState(!0),[l,u]=X.useState(!1),[d,p]=X.useState(!1),[m,h]=X.useState(null),g=X.useCallback(async()=>{c(!0);try{let n=_c(await t.find(`sys_permission_set`,{$filter:{name:e},limit:1})),r=n[0]?.id?String(n[0].id):null;if(i(r),!r){o([]);return}let a=_c(await t.find(`sys_user_permission_set`,{$filter:{permission_set_id:r},$top:500})),s=[...new Set(a.map(e=>e.user_id).filter(Boolean).map(String))],c=s.length?_c(await t.find(`sys_user`,{$filter:{id:{$in:s}},$top:500})):[],l=new Map(c.map(e=>[String(e.id),e]));o(a.filter(e=>e.user_id).map(e=>{let t=l.get(String(e.user_id));return{grantId:String(e.id),userId:String(e.user_id),name:t?vc(t):String(e.user_id),email:t?.email??``}}))}catch{o([])}finally{c(!1)}},[t,e]);X.useEffect(()=>{g()},[g]);let _=X.useMemo(()=>new Set(a.map(e=>e.userId)),[a]),v=X.useCallback(async e=>{if(r){p(!0),h(null);try{for(let n of e||[]){let e=n?.id==null?null:String(n.id);!e||_.has(e)||await t.create(`sys_user_permission_set`,{permission_set_id:r,user_id:e})}await g()}catch(e){let t=String(e?.body?.error??e?.error??e?.message??``),r=t.match(/(\d+)\s*of\s*(\d+)\s*seat/i);/cap reached|seat cap|ai[-_ ]?seat/i.test(t)?h(n.seatFull(r?Number(r[2]):a.length)):h(t.replace(/^\s*\[[^\]]*\]\s*/,``).trim()||n.addFailed)}finally{p(!1),u(!1)}}},[t,r,_,g,a.length,n]),y=X.useCallback(async e=>{h(null);try{await t.delete(`sys_user_permission_set`,e),await g()}catch{}},[t,g]);return(0,Y.jsxs)(`div`,{className:`px-4 py-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,Y.jsx)(Fe,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(`span`,{children:n.title}),!s&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground font-normal`,children:n.countOf(a.length)})]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,disabled:d||!r,onClick:()=>{h(null),u(!0)},className:`gap-1 h-8 text-xs`,children:[d?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),n.add]})]}),m&&(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start gap-2 rounded-md border border-amber-300/60 bg-amber-50 dark:bg-amber-950/30 px-3 py-2 text-xs text-amber-800 dark:text-amber-200`,role:`alert`,children:[(0,Y.jsx)($e,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:m})]}),s?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground py-3`,children:[(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}),n.loading]}):a.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic py-3`,children:n.empty}):(0,Y.jsx)(`ul`,{className:`divide-y rounded-md border`,children:a.map(e=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`flex h-7 w-7 items-center justify-center rounded-full bg-primary/10 text-primary text-xs font-medium shrink-0`,children:(e.name||`?`).slice(0,1).toUpperCase()}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`text-sm truncate`,children:e.name}),e.email&&e.email!==e.name&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.email})]}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>void y(e.grantId),"aria-label":n.remove,title:n.remove,className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive shrink-0`,children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},e.grantId))}),r&&(0,Y.jsx)(Dr,{open:l,onOpenChange:e=>u(e),multiple:!0,dataSource:t,objectName:`sys_user`,title:n.pickTitle,onSelect:()=>{},onSelectRecords:e=>void v(e)})]})}function bc(e){return[{key:`allowCreate`,short:`C`,tip:J(`perm.action.create`,e)},{key:`allowRead`,short:`R`,tip:J(`perm.action.read`,e)},{key:`allowEdit`,short:`U`,tip:J(`perm.action.edit`,e)},{key:`allowDelete`,short:`D`,tip:J(`perm.action.delete`,e)},{key:`allowTransfer`,short:`Tr`,tip:J(`perm.action.transfer`,e)},{key:`allowRestore`,short:`Re`,tip:J(`perm.action.restore`,e)},{key:`allowPurge`,short:`Pu`,tip:J(`perm.action.purge`,e)},{key:`viewAllRecords`,short:`VA`,tip:J(`perm.action.viewAll`,e)},{key:`modifyAllRecords`,short:`MA`,tip:J(`perm.action.modifyAll`,e)}]}function xc({type:e,name:t}){let n=u(),r=mi(),{entries:i}=Qr(r),a=i.find(t=>t.type===e),o=!!Oo(e,a).allowOrgOverride,s=X.useMemo(()=>zi(),[]),c=X.useCallback(e=>J(e,s),[s]),l=X.useMemo(()=>bc(s),[s]),[d,f]=X.useState({name:t,objects:{},fields:{}}),[p,m]=X.useState([]),[h,g]=X.useState({}),[_,v]=X.useState(new Set),[y,b]=X.useState(!0),[x,S]=X.useState(!1),[C,w]=X.useState(null),[T,E]=X.useState(null),[D,O]=X.useState(``),[k,A]=X.useState(!1);X.useEffect(()=>{let n=!1;return b(!0),(async()=>{try{let[i,a]=await Promise.all([r.layered(e,t).catch(()=>null),r.list(`object`).catch(()=>[])]);if(n)return;let o=i?.effective??i?.code??{name:t,objects:{}};f({...o,name:String(o?.name??t),objects:o?.objects??{},fields:o?.fields??{}}),m((a??[]).map(e=>{let t=e?.item??e;return{name:String(t?.name??``),label:t?.label}}).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name)))}catch(e){w(e?.message??String(e))}finally{n||b(!1)}})(),()=>{n=!0}},[r,e,t]);async function j(e){if(!h[e])try{let t=(await r.list(`field`)??[]).map(e=>e?.item??e).filter(t=>String(t?.object??``)===e).map(e=>({name:String(e?.name??``),label:e?.label})).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));g(n=>({...n,[e]:t}))}catch{g(t=>({...t,[e]:[]}))}}function M(e){v(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),j(e)),n})}function ee(e,t,n){f(r=>{let i={...r.objects[e]??{},[t]:n};return t===`viewAllRecords`&&n&&(i.allowRead=!0),t===`modifyAllRecords`&&n&&(i.allowEdit=!0,i.allowRead=!0),{...r,objects:{...r.objects,[e]:i}}})}function te(e,t){f(n=>{let r=t===`none`?{}:t===`all`?Object.fromEntries(l.map(e=>[e.key,!0])):t===`crud`?{allowCreate:!0,allowRead:!0,allowEdit:!0,allowDelete:!0}:{allowRead:!0};return{...n,objects:{...n.objects,[e]:r}}})}function ne(e,t,n,r){let i=`${e}.${t}`;f(e=>{let t={...e.fields??{}},a={...t[i]??{readable:!0,editable:!1},[n]:r};return n===`readable`&&!r&&(a.editable=!1),n===`editable`&&r&&(a.readable=!0),t[i]=a,{...e,fields:t}})}async function N(t,n){let i=n??d;S(!0),w(null);try{await r.save(e,i.name,i,{force:t}),f((await r.layered(e,i.name)).effective??i),E(null)}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];E({issues:Array.isArray(t)?t:[],pending:i})}else w(e?.message??String(e))}finally{S(!1)}}let re=X.useMemo(()=>{let e=D.trim().toLowerCase();return p.filter(t=>{if(k){let e=d.objects[t.name];if(!e||!Object.values(e).some(Boolean))return!1}return e?t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e):!0})},[p,D,k,d.objects]),ie=[{label:c(`perm.stat.objectsGranted`),value:Object.values(d.objects).filter(e=>Object.values(e).some(Boolean)).length},{label:c(`perm.stat.fieldOverrides`),value:Object.keys(d.fields??{}).length}];return y?(0,Y.jsx)(yo,{entry:a,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` `,c(`perm.loading`).replace(`{name}`,t)]})}):(0,Y.jsxs)(yo,{entry:a??{type:e,label:e},itemName:t,subtitle:d.isProfile?c(`perm.subtitle.profile`):c(`perm.subtitle.set`),stats:ie,actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>n(`./history?type=${encodeURIComponent(e)}`),children:[(0,Y.jsx)(fn,{className:`h-4 w-4 mr-1`}),` `,c(`engine.edit.history`)]}),o&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>N(!1),disabled:x,children:[x?(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(In,{className:`h-4 w-4 mr-1`}),c(`engine.edit.save`)]})]}),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[C&&(0,Y.jsxs)(`div`,{className:`m-4 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive flex items-start gap-2`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:C})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b bg-muted/30 flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{htmlFor:`perm-name`,className:`text-xs`,children:c(`perm.field.name`)}),(0,Y.jsx)(V,{id:`perm-name`,value:d.name,disabled:!o,onChange:e=>f(t=>({...t,name:e.target.value})),className:`h-8 w-56`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{htmlFor:`perm-label`,className:`text-xs`,children:c(`perm.field.label`)}),(0,Y.jsx)(V,{id:`perm-label`,value:d.label??``,disabled:!o,onChange:e=>f(t=>({...t,label:e.target.value})),className:`h-8 w-72`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pb-1`,children:[(0,Y.jsx)(Yt,{id:`perm-is-profile`,checked:!!d.isProfile,disabled:!o,onCheckedChange:e=>f(t=>({...t,isProfile:!!e}))}),(0,Y.jsx)(B,{htmlFor:`perm-is-profile`,className:`text-xs`,children:c(`perm.field.isProfile`)})]}),!o&&(0,Y.jsx)(z,{variant:`secondary`,className:`ml-auto`,children:c(`perm.readOnly`)})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b flex items-center gap-3`,children:[(0,Y.jsx)(V,{placeholder:c(`perm.filter.placeholder`),value:D,onChange:e=>O(e.target.value),className:`h-8 w-72`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Yt,{id:`only-enabled`,checked:k,onCheckedChange:e=>A(!!e)}),(0,Y.jsx)(B,{htmlFor:`only-enabled`,className:`text-xs`,children:c(`perm.filter.onlyGranted`)})]}),(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:[re.length,` / `,p.length,` `,c(`perm.stat.objectsSuffix`)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,Y.jsx)(Sc,{objects:re,draft:d,expanded:_,fieldsByObject:h,writable:o,objectActions:l,t:c,onToggleExpand:M,onObjectPerm:ee,onFieldPerm:ne,onBulkSet:te})}),(0,Y.jsx)(`div`,{className:`shrink-0 border-t max-h-80 overflow-auto bg-background`,children:(0,Y.jsx)(yc,{permissionSetName:t})})]}),(0,Y.jsx)(xt,{open:!!T,onOpenChange:e=>!e&&E(null),children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 text-amber-500`}),` `,c(`engine.edit.destructive`)]}),(0,Y.jsx)(Te,{children:c(`engine.edit.destructiveHint`)})]}),(0,Y.jsx)(`ul`,{className:`text-sm space-y-1 max-h-64 overflow-auto`,children:T?.issues.map((e,t)=>(0,Y.jsxs)(`li`,{className:`border-l-2 border-amber-500 pl-2`,children:[e.kind&&(0,Y.jsx)(z,{variant:`outline`,className:`mr-2`,children:e.kind}),e.message??JSON.stringify(e)]},t))}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>E(null),children:c(`engine.cancel`)}),(0,Y.jsxs)(H,{variant:`destructive`,onClick:()=>T&&N(!0,T.pending),disabled:x,children:[x&&(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}),c(`engine.edit.forceSave`)]})]})]})})]})}function Sc({objects:e,draft:t,expanded:n,fieldsByObject:r,writable:i,objectActions:a,t:o,onToggleExpand:s,onObjectPerm:c,onFieldPerm:l,onBulkSet:u}){return(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 bg-background border-b z-10`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`text-left px-4 py-2 font-medium w-72`,children:o(`perm.col.object`)}),a.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium text-center w-14`,title:e.tip,children:e.short},e.key)),(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium w-44 text-right`,children:o(`perm.col.bulk`)})]})}),(0,Y.jsxs)(`tbody`,{children:[e.length===0&&(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-4 py-8 text-center text-muted-foreground`,children:o(`perm.filter.empty`)})}),e.map(e=>{let d=t.objects[e.name]??{},f=n.has(e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsxs)(`tr`,{className:`border-b hover:bg-muted/30`,children:[(0,Y.jsx)(`td`,{className:`px-2 py-1.5 align-middle`,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>s(e.name),className:`inline-flex items-center gap-1.5 hover:text-foreground`,children:[f?(0,Y.jsx)(Dt,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Br,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label??e.name}),e.label&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`(`,e.name,`)`]})]})}),a.map(t=>(0,Y.jsx)(`td`,{className:`text-center px-2 py-1.5`,children:(0,Y.jsx)(st,{checked:!!d[t.key],disabled:!i,onCheckedChange:n=>c(e.name,t.key,!!n),"aria-label":`${e.name} ${t.tip}`})},t.key)),(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 text-right space-x-1`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`read`),children:o(`perm.bulk.read`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`crud`),children:o(`perm.bulk.crud`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`all`),children:o(`perm.bulk.all`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`none`),children:o(`perm.bulk.none`)})]})]}),f&&(0,Y.jsx)(`tr`,{className:`bg-muted/10`,children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-12 py-3`,children:(0,Y.jsx)(Cc,{objectName:e.name,fields:r[e.name],fieldsState:t.fields??{},writable:i,t:o,onFieldPerm:l})})})]},e.name)})]})]})}function Cc({objectName:e,fields:t,fieldsState:n,writable:r,t:i,onFieldPerm:a}){return t?t.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(`perm.field.empty`)}):(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`text-left py-1 font-medium`,children:i(`perm.field.col.name`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.read`),children:i(`perm.field.read`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.edit`),children:i(`perm.field.edit`)})]})}),(0,Y.jsx)(`tbody`,{children:t.map(t=>{let i=n[`${e}.${t.name}`]??{readable:!0,editable:!1};return(0,Y.jsxs)(`tr`,{className:`border-t border-muted`,children:[(0,Y.jsxs)(`td`,{className:`py-1`,children:[t.label??t.name,t.label&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,t.name,`)`]})]}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(st,{checked:!!i.readable,disabled:!r,onCheckedChange:n=>a(e,t.name,`readable`,!!n),"aria-label":`${e}.${t.name} readable`})}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(st,{checked:!!i.editable,disabled:!r,onCheckedChange:n=>a(e,t.name,`editable`,!!n),"aria-label":`${e}.${t.name} editable`})})]},t.name)})})]}):(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-3 w-3 animate-spin`}),` `,i(`perm.field.loading`)]})}function wc(){To({type:`__object_field`,label:`Field`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`field`,embeddedPath:`fields`,extract:e=>Tc(e.fields),groupLabel:`Fields`,order:5}]}),To({type:`__object_index`,label:`Index`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`index`,embeddedPath:`indexes`,extract:e=>{let t=e.indexes;return Array.isArray(t)?t.map((e,t)=>{let n=Array.isArray(e.fields)?e.fields.join(`,`):``;return{name:n?`idx_${n}`:`index_${t}`,...e}}):[]},groupLabel:`Indexes`,order:10}]}),To({type:`__object_validation`,label:`Embedded validation`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`validation`,embeddedPath:`validations`,extract:e=>Tc(e.validations),groupLabel:`Embedded Validations`,order:15}]}),To({type:`hook`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Hooks`,order:20}],createFields:[`label`,`name`,`object`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{events:[]}}),To({type:`page`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Pages`,order:40}],createFields:[`label`,`name`,`object`,`type`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`type`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable page title.`},name:{type:`string`,title:`Name`,description:`Page key (snake_case).`,pattern:`^[a-z_][a-z0-9_]*$`},type:{type:`string`,title:`Page type`,enum:[`list`,`record`,`home`,`app`,`utility`],default:`list`,description:`List / Interface page = a data view (Airtable-style: columns, filters, visualizations). Record page renders one object record.`},object:{type:`string`,title:`Object`,widget:`ref:object`,description:`The object this page reads from — the data source for a list page, or the record object for a record page.`},kind:{type:`string`,title:`Kind`,enum:[`full`,`slotted`],default:`full`,description:`full = the whole page; slotted = override only named slots of the default.`}}},createDefaults:{type:`list`,kind:`full`,regions:[]},createSeed:async(e,{client:t})=>{if(e?.type===`list`)return e?.object?{interfaceConfig:{source:String(e.object)}}:{};if(e?.type!==`record`||!e?.object)return{};try{let n=await t.get(`object`,String(e.object));if(!n||typeof n!=`object`)return{};let{buildDefaultPageSchema:r}=await o(async()=>{let{buildDefaultPageSchema:e}=await import(`./plugins-views-CcoNygsH.js`).then(e=>e.t);return{buildDefaultPageSchema:e}},__vite__mapDeps([0]),import.meta.url),i=r(n),a={};return Array.isArray(i?.regions)&&i.regions.length&&(a.regions=i.regions),i?.template&&(a.template=i.template),a}catch{return{}}}}),To({type:`view`,anchors:[{anchorType:`object`,match:Co([`object`,`config.data.object`]),groupLabel:`Views`,order:30}],createFields:[`label`,`name`,`object`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`object`,`kind`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable view name.`},name:{type:`string`,title:`Name`,description:`View key (snake_case). Qualified to <object>.<key> on save.`,pattern:`^[a-z_][a-z0-9_]*$`},object:{type:`string`,title:`Object`,description:`The object this view displays.`},kind:{type:`string`,title:`View kind`,enum:[`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`chart`],default:`grid`,description:`Pick a starter layout. Switch later in the designer.`}}},createBuildBody:e=>{let t=String(e.object??``),n=String(e.name??``);return{name:n.includes(`.`)||!t?n:`${t}.${n}`,object:t,viewKind:`list`,label:e.label,config:{type:e.kind||`grid`,columns:[],data:{provider:`object`,object:t}}}}}),To({type:`flow`,anchors:[{anchorType:`object`,match:Co([`object`,`on.object`,`trigger.object`]),groupLabel:`Flows`,order:50}],createFields:[`label`,`name`,`type`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{nodes:[],edges:[]}}),To({type:`trigger`,anchors:[{anchorType:`object`,match:Co([`object`,`on.object`]),groupLabel:`Triggers`,order:52}],createFields:[`label`,`name`,`object`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}]}),To({type:`validation`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Validations`,order:25}],createFields:[`label`,`name`,`message`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`message`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable rule name.`},name:{type:`string`,title:`Name`,description:`Machine name (snake_case). Used in URLs.`,pattern:`^[a-z_][a-z0-9_]*$`},message:{type:`string`,title:`Error message`,description:`Shown to the user when the rule blocks save.`}}},createDefaults:{type:`script`,active:!0,events:[`insert`,`update`],priority:10,severity:`error`,condition:`false`}}),To({type:`permission`,anchors:[{anchorType:`object`,match:(e,t)=>{let n=e?.objects;return!!n&&typeof n==`object`&&t in n},groupLabel:`Permissions`,order:60}],createFields:[`label`,`name`,`isProfile`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{objects:{}}}),To({type:`action`,anchors:[{anchorType:`object`,match:Co([`object`,`target.object`,`on.object`]),groupLabel:`Actions`,order:55}],createFields:[`label`,`name`,`objectName`,`icon`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`script`,body:{language:`js`,source:`return { success: true };`}}}),To({type:`dashboard`,anchors:[{anchorType:`object`,match:Co([`object`,`data.object`]),groupLabel:`Dashboards`,order:80}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{widgets:[]}}),To({type:`report`,anchors:[{anchorType:`object`,match:Co([`object`,`data.object`]),groupLabel:`Reports`,order:81}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`summary`,drilldown:!0}}),To({type:`object`,iconName:`database`,domain:`data`,createFields:[`label`,`pluralLabel`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0},{from:`label`,to:`pluralLabel`,transform:`plural-en`,untilUserEdits:!0}],createDefaults:{fields:{}},searchableFields:[`name`,`label`,`pluralLabel`,`description`],listColumns:[{key:`name`,label:`Name`,width:`24%`},{key:`label`,label:`Label`,width:`22%`},{key:`pluralLabel`,label:`Plural`,width:`22%`},{key:`fields`,label:`Fields`,width:`90px`,render:e=>e==null?`—`:Array.isArray(e)?e.length:typeof e==`object`?Object.keys(e).length:0},{key:`description`,label:`Description`}]})}function Tc(e){return Array.isArray(e)?e:e&&typeof e==`object`?Object.entries(e).map(([e,t])=>({name:e,...t&&typeof t==`object`?t:{}})):[]}var Ec={name:{type:`string`,title:`Name`,description:`Machine name. snake_case, used as the URL path and DB key.`,pattern:`^[a-z_][a-z0-9_]*$`},label:{type:`string`,title:`Label`,description:`Human-readable display name.`},description:{type:`string`,title:`Description`,format:`multiline`}},Dc={role:{type:`object`,title:`Role`,required:[`name`],properties:{...Ec,level:{type:`string`,title:`Level`,description:`Coarse seniority tier (used by UI / sort order).`,enum:[`member`,`lead`,`manager`,`director`,`executive`,`admin`]},parentRole:{type:`string`,title:`Parent Role`,description:`Optional parent role name for hierarchy.`}}},profile:{type:`object`,title:`Profile`,required:[`name`],properties:{...Ec,isProfile:{type:`boolean`,title:`Is profile`,description:`Profiles are mutually exclusive (one per user).`},objects:{type:`object`,title:`Object Permissions`,description:`Edit this via the Permission Matrix tab for a row-by-row UI.`}}},permission:{type:`object`,title:`Permission`,required:[`id`,`resource`,`actions`,`description`],properties:{id:{type:`string`,title:`ID`,description:`Stable identifier (e.g. crm.account.read).`},resource:{type:`string`,title:`Resource`,description:`What this permission applies to.`,enum:[`data.object`,`data.record`,`data.field`,`ui.view`,`ui.dashboard`,`ui.report`,`system.config`,`system.plugin`,`system.api`,`system.service`,`storage.file`,`storage.database`,`network.http`,`network.websocket`,`process.spawn`,`process.env`]},actions:{type:`array`,title:`Actions`,description:`Permitted operations on the resource.`,items:{type:`string`,enum:[`create`,`read`,`update`,`delete`,`execute`,`admin`,`manage`,`configure`,`import`,`export`,`share`]}},description:{type:`string`,title:`Description`,description:`Why this permission exists (shown in admin UIs).`},scope:{type:`string`,title:`Scope`,enum:[`tenant`,`user`,`plugin`,`global`,`resource`],default:`tenant`},required:{type:`boolean`,title:`Required`,description:`Must be present for the holder to function.`},justification:{type:`string`,title:`Justification`}}},translation:{type:`object`,title:`Translation Bundle`,required:[`name`],properties:{name:{...Ec.name,description:`Bundle id (e.g. zh_CN, en_US, package-locale).`},label:Ec.label,description:Ec.description,locale:{type:`string`,title:`Locale`,description:`BCP-47 tag, e.g. en, zh-Hans, ja-JP.`},strings:{type:`object`,title:`Strings`,description:`Key → translated string map.`}}},tool:{type:`object`,title:`AI Tool`,required:[`name`],properties:{...Ec,kind:{type:`string`,title:`Kind`,enum:[`function`,`http`,`mcp`]},inputSchema:{type:`object`,title:`Input Schema (JSON Schema)`},outputSchema:{type:`object`,title:`Output Schema (JSON Schema)`}}},skill:{type:`object`,title:`AI Skill`,required:[`name`],properties:{...Ec,instructions:{type:`string`,title:`Instructions`,format:`multiline`},tools:{type:`array`,title:`Tools`,items:{type:`string`}}}},app:{type:`object`,title:`Application`,required:[`name`],properties:{...Ec,icon:{type:`string`,title:`Icon`},navigation:{type:`array`,title:`Navigation`,items:{type:`object`}}}},page:{type:`object`,title:`Page`,required:[`name`],properties:{...Ec,route:{type:`string`,title:`Route`,description:`URL path under the app.`},layout:{type:`string`,title:`Layout`}}},view:{type:`object`,title:`View`,required:[`name`],properties:{...Ec,type:{type:`string`,title:`View Type`,enum:[`grid`,`kanban`,`calendar`,`gantt`,`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]}}},dashboard:{type:`object`,title:`Dashboard`,required:[`name`],properties:{...Ec,widgets:{type:`array`,title:`Widgets`,items:{type:`object`}}}},report:{type:`object`,title:`Report`,required:[`name`],properties:{...Ec,object:{type:`string`,title:`Object`},filters:{type:`array`,title:`Filters`,items:{type:`object`}}}},book:{type:`object`,title:`Documentation Book`,required:[`name`,`groups`],properties:{...Ec,slug:{type:`string`,title:`Slug`,description:`Portal URL segment; defaults to the name without its package prefix.`},icon:{type:`string`,title:`Icon`},order:{type:`number`,title:`Order`,description:`Orders books within the portal.`},audience:{title:`Audience`,description:`Access audience. 'org' (default) inherits the package grant; 'public' is anonymously readable; { profile } gates by role.`,oneOf:[{type:`string`,enum:[`org`,`public`]},{type:`object`,title:`Role-gated`,properties:{profile:{type:`string`,title:`Profile`}},required:[`profile`]}]},groups:{type:`array`,title:`Groups (spine)`,description:`Ordered sections. Membership is derived from each group's include rule — edit the structure visually in the Preview tab.`,items:{type:`object`,required:[`key`,`label`],properties:{key:{type:`string`,title:`Key`,pattern:`^[a-z][a-z0-9_]*$`},label:{type:`string`,title:`Label`},order:{type:`number`,title:`Order`},include:{title:`Include rule`,description:`Glob over doc names (e.g. crm_guide_*) or { tag }.`},package:{type:`string`,title:`Package scope`},pages:{type:`array`,title:`Explicit pages (override)`,items:{}}}}}}},email_template:{type:`object`,title:`Email Template`,required:[`name`,`label`,`subject`,`bodyHtml`],properties:{...Ec,category:{type:`string`,title:`Category`,enum:[`auth`,`notification`,`workflow`,`marketing`,`custom`],default:`custom`},locale:{type:`string`,title:`Locale`,default:`en-US`,description:`BCP-47 tag (en-US, zh-CN, …)`},subject:{type:`string`,title:`Subject`,description:`Supports {{var.path}} interpolation`},bodyHtml:{type:`string`,title:`HTML Body`,format:`multiline`},bodyText:{type:`string`,title:`Plain-Text Body`,format:`multiline`},variables:{type:`array`,title:`Variables`,items:{type:`object`}},fromOverride:{type:`object`,title:`From Override`},replyTo:{type:`string`,title:`Reply-To`},active:{type:`boolean`,title:`Active`,default:!0},isSystem:{type:`boolean`,title:`System Template`,default:!1}}}};function Oc(){for(let[e,t]of Object.entries(Dc))To({type:e,defaultSchema:t,fieldOrder:[`name`,`label`,`description`]})}var kc=[{value:`managed`,label:`Managed (ObjectStack owns the schema)`},{value:`external`,label:`External (read existing schema as-is)`},{value:`validate-only`,label:`Validate only`}],Ac=``.replace(/\/+$/,``),jc=e=>e.format===`password`;function Mc(e){let t=e?.configSchema?.properties??{},n={};for(let[e,r]of Object.entries(t))jc(r)||r.default!==void 0&&(n[e]=r.default);return n}function Nc(e){let t=X.useMemo(()=>d(),[]),n=mi(),[r,i]=X.useState([]),[a,o]=X.useState(!0),[s,c]=X.useState(null),l=X.useCallback(async(e,n)=>{let r=await t(`${Ac}${e}`,{credentials:`include`,headers:{"Content-Type":`application/json`},...n}),i=await r.text(),a=i;try{a=JSON.parse(i)}catch{}if(!r.ok)throw Error(a&&(a.message||a.error)||`HTTP ${r.status}`);return a},[t]),u=X.useCallback(async()=>{o(!0);try{let e=await l(`/api/v1/datasources`);i(Array.isArray(e?.datasources)?e.datasources:[])}catch(e){Hr.error(`Load datasources: ${e.message}`),i([])}finally{o(!1)}},[l]);X.useEffect(()=>{u()},[u]);let f=async e=>{c(`test:${e}`);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/test`,{method:`POST`,body:`{}`});Hr.success(t?.ok===!1?`${e}: ${t?.error??`failed`}`:`${e}: connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`),u()}catch(t){Hr.error(`${e}: ${t.message}`)}finally{c(null)}},p=async e=>{if(window.confirm(`Delete datasource “${e}”? This cannot be undone.`)){c(`del:${e}`);try{await l(`/api/v1/datasources/${encodeURIComponent(e)}`,{method:`DELETE`}),Hr.success(`Deleted ${e}.`),u()}catch(t){Hr.error(`Delete ${e}: ${t.message}`)}finally{c(null)}}},[m,h]=X.useState([]),[g,_]=X.useState(!1),[v,y]=X.useState(null),[b,x]=X.useState(null),[S,C]=X.useState(!1),[w,T]=X.useState(!1),[E,D]=X.useState(null),[O,k]=X.useState(!1),A=X.useCallback(async()=>{if(m.length)return m;try{let e=await l(`/api/v1/datasources/drivers`),t=Array.isArray(e?.drivers)?e.drivers:[];return h(t),t}catch(e){return Hr.error(`Load drivers: ${e.message}`),[]}},[l,m]),j=X.useMemo(()=>m.find(e=>e.id===b?.driver),[m,b?.driver]),ee=async()=>{let e=await A(),t=e.find(e=>e.id!==`memory`)??e[0];y(null),C(!1),D(null),x({name:``,label:``,driver:t?.id??``,schemaMode:`managed`,config:Mc(t),secret:``}),_(!0)},te=async e=>{let t=await A();c(`edit:${e.name}`);try{let n=(await l(`/api/v1/datasources/${encodeURIComponent(e.name)}`))?.datasource??{};y(e.name),C(!!n.hasSecret),D(null),x({name:n.name??e.name,label:n.label??``,driver:n.driver??e.driver??t[0]?.id??``,schemaMode:n.schemaMode??`managed`,config:{...n.config??{}},secret:``}),_(!0)}catch(t){Hr.error(`Open ${e.name}: ${t.message}`)}finally{c(null)}},ne=e=>{x(t=>t&&{...t,driver:e,config:Mc(m.find(t=>t.id===e)),secret:``}),D(null)},N=(e,t)=>x(n=>n&&{...n,config:{...n.config,[e]:t}}),re=e=>{let t={label:e.label||void 0,driver:e.driver,schemaMode:e.schemaMode,config:e.config};return e.secret&&(t.secret=e.secret),t},ie=async()=>{if(b){k(!0),D(null);try{let e=await l(`/api/v1/datasources/test`,{method:`POST`,body:JSON.stringify({driver:b.driver,config:b.config,...b.secret?{secret:b.secret}:{}})}),t=e?.result??e;t?.ok===!1?D({ok:!1,text:t?.error??`Connection failed`}):D({ok:!0,text:`Connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`})}catch(e){D({ok:!1,text:e.message})}finally{k(!1)}}},P=async()=>{if(b){T(!0);try{v?(await l(`/api/v1/datasources/${encodeURIComponent(v)}`,{method:`PATCH`,body:JSON.stringify(re(b))}),Hr.success(`Updated ${v}.`)):(await l(`/api/v1/datasources`,{method:`POST`,body:JSON.stringify({name:b.name,...re(b)})}),Hr.success(`Created ${b.name}.`)),_(!1),u()}catch(e){Hr.error(`Save: ${e.message}`)}finally{T(!1)}}},ae=v?!0:/^[a-z_][a-z0-9_]*$/.test(b?.name??``),F=!!b&&!!b.driver&&ae&&!w,[oe,se]=X.useState(null),[ce,le]=X.useState(null),[ue,de]=X.useState(new Set),[fe,pe]=X.useState(!1),me=async e=>{se(e),le(null),de(new Set);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/remote-tables`);le(Array.isArray(t?.tables)?t.tables:[])}catch(t){Hr.error(`Introspect ${e}: ${t.message}`),le([])}},he=e=>de(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),ge=async()=>{if(!oe||ue.size===0)return;pe(!0);let e=0,t=[];for(let r of ue)try{let{draft:t}=await l(`/api/v1/datasources/${encodeURIComponent(oe)}/object-draft`,{method:`POST`,body:JSON.stringify({table:r})});await n.save(`object`,t.name,t.definition),e+=1}catch(e){t.push(`${r}: ${e.message}`)}pe(!1),e&&Hr.success(`Synced ${e} object${e>1?`s`:``} from ${oe}.`),t.length&&Hr.error(`Failed: ${t.join(`; `)}`),se(null)},_e=(e,t)=>{let n=t.title||e,r=(j?.configSchema?.required??[]).includes(e);if(jc(t))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r&&!v?` *`:``]}),(0,Y.jsx)(V,{type:`password`,value:b?.secret??``,placeholder:v&&S?`•••••••• (leave blank to keep)`:``,onChange:e=>x(t=>t&&{...t,secret:e.target.value})}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e);let i=b?.config[e];if(t.type===`boolean`)return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 py-1`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(B,{className:`text-xs`,children:n}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(Yt,{checked:!!i,onCheckedChange:t=>N(e,t)})]},e);if(Array.isArray(t.enum))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsxs)(De,{value:i==null?``:String(i),onValueChange:t=>N(e,t),children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{placeholder:`Select…`})}),(0,Y.jsx)(We,{children:t.enum.map(e=>(0,Y.jsx)(ur,{value:String(e),children:String(e)},String(e)))})]})]},e);let a=t.type===`number`||t.type===`integer`;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsx)(V,{type:a?`number`:`text`,value:i==null?``:String(i),onChange:t=>N(e,a?t.target.value===``?void 0:Number(t.target.value):t.target.value)}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)};return(0,Y.jsxs)(`div`,{className:`mx-auto max-w-4xl px-6 py-8`,children:[(0,Y.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`h1`,{className:`flex items-center gap-2 text-xl font-semibold`,children:[(0,Y.jsx)(br,{className:`h-5 w-5`}),` Datasources`]}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Connect external databases and sync their tables in as objects.`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void u(),disabled:a,children:[(0,Y.jsx)(Tt,{className:`mr-1.5 h-4 w-4`+(a?` animate-spin`:``)}),` Refresh`]}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>void ee(),children:[(0,Y.jsx)(R,{className:`mr-1.5 h-4 w-4`}),` New datasource`]})]})]}),a?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-12 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading…`]}):r.length===0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dashed bg-muted/20 py-16 text-center text-sm text-muted-foreground`,children:[`No datasources yet. Click `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`New datasource`}),` to connect one.`]}):(0,Y.jsx)(`div`,{className:`divide-y rounded-lg border bg-card`,children:r.map(e=>{let t=e.origin===`code`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Y.jsx)(br,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label||e.name}),(0,Y.jsx)(`code`,{className:`text-[11px] text-muted-foreground`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:e.driver}),e.status&&(0,Y.jsxs)(`span`,{children:[`· `,e.status]}),e.origin&&(0,Y.jsxs)(`span`,{children:[`· `,e.origin]})]})]}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,disabled:s===`test:${e.name}`,onClick:()=>void f(e.name),children:[s===`test:${e.name}`?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Ft,{className:`mr-1.5 h-4 w-4`}),` Test`]}),(0,Y.jsxs)(H,{variant:`secondary`,size:`sm`,onClick:()=>void me(e.name),children:[(0,Y.jsx)(Xt,{className:`mr-1.5 h-4 w-4`}),` Sync objects`]}),!t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,title:`Edit`,disabled:s===`edit:${e.name}`,onClick:()=>void te(e),children:s===`edit:${e.name}`?(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(Jn,{className:`h-4 w-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,title:`Delete`,disabled:s===`del:${e.name}`,onClick:()=>void p(e.name),children:s===`del:${e.name}`?(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(lr,{className:`h-4 w-4`})})]})]},e.name)})}),(0,Y.jsx)(xt,{open:g,onOpenChange:e=>{e||_(!1)},children:(0,Y.jsxs)(Mt,{className:`max-w-lg`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsx)(Re,{children:v?`Edit “${v}”`:`New datasource`}),(0,Y.jsx)(Te,{children:v?`Update the connection. Leave the credential blank to keep the current one.`:`Connect an external database. Credentials are encrypted and never stored in metadata.`})]}),b&&(0,Y.jsxs)(`div`,{className:`max-h-[60vh] space-y-3 overflow-y-auto pr-1`,children:[!v&&(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Name *`}),(0,Y.jsx)(V,{value:b.name,placeholder:`my_database`,onChange:e=>x(t=>t&&{...t,name:e.target.value})}),!ae&&b.name.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Lowercase letters, digits, and underscores; must not start with a digit.`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Label`}),(0,Y.jsx)(V,{value:b.label,placeholder:`Human-friendly name`,onChange:e=>x(t=>t&&{...t,label:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Driver *`}),(0,Y.jsxs)(De,{value:b.driver,onValueChange:ne,disabled:!!v,children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{placeholder:`Choose a driver`})}),(0,Y.jsx)(We,{children:m.map(e=>(0,Y.jsx)(ur,{value:e.id,children:e.label},e.id))})]}),j?.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:j.description})]}),Object.entries(j?.configSchema?.properties??{}).map(([e,t])=>_e(e,t)),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Schema mode`}),(0,Y.jsxs)(De,{value:b.schemaMode,onValueChange:e=>x(t=>t&&{...t,schemaMode:e}),children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{})}),(0,Y.jsx)(We,{children:kc.map(e=>(0,Y.jsx)(ur,{value:e.value,children:e.label},e.value))})]})]}),E&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs `+(E.ok?`text-emerald-600`:`text-destructive`),children:[E.ok?(0,Y.jsx)(M,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Pr,{className:`h-3.5 w-3.5`}),E.text]})]}),(0,Y.jsxs)(He,{className:`gap-2 sm:justify-between`,children:[(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,disabled:!b?.driver||O,onClick:()=>void ie(),children:[O?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Ft,{className:`mr-1.5 h-4 w-4`}),` Test connection`]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_(!1),children:`Cancel`}),(0,Y.jsxs)(H,{size:`sm`,disabled:!F,onClick:()=>void P(),children:[w&&(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}),v?`Save changes`:`Create datasource`]})]})]})]})}),(0,Y.jsx)(xt,{open:!!oe,onOpenChange:e=>{e||se(null)},children:(0,Y.jsxs)(Mt,{className:`max-w-lg`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{children:[`Sync objects from “`,oe,`”`]}),(0,Y.jsx)(Te,{children:`Pick the remote tables to import as objects. Each becomes an object definition.`})]}),ce==null?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Introspecting…`]}):ce.length===0?(0,Y.jsx)(`p`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No remote tables found on this datasource.`}):(0,Y.jsx)(`div`,{className:`max-h-[50vh] space-y-1 overflow-y-auto`,children:ce.map(e=>{let t=e.schema?`${e.schema}.${e.name}`:e.name;return(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-accent`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:ue.has(e.name),onChange:()=>he(e.name),className:`h-4 w-4`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:t}),e.columnCount!=null&&(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[e.columnCount,` cols`]})]},t)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>se(null),children:`Cancel`}),(0,Y.jsxs)(H,{size:`sm`,disabled:fe||ue.size===0,onClick:()=>void ge(),children:[fe?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Xt,{className:`mr-1.5 h-4 w-4`}),`Create `,ue.size||``,` object`,ue.size===1?``:`s`]})]})]})})]})}var Pc=!1;function Fc(){Pc||(Pc=!0,To({type:`datasource`,label:`Datasources`,domain:`data`,ListPage:Nc}))}function Z({toolbar:e,children:t}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border bg-background overflow-hidden flex flex-col h-full`,children:[e!=null&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-b bg-muted/20 px-2 py-1 min-h-[32px]`,children:e}),(0,Y.jsx)(`div`,{className:`bg-background flex-1 min-h-0 overflow-auto`,children:t})]})}function Ic({tone:e=`info`,children:t}){return(0,Y.jsxs)(`div`,{className:`m-4 rounded border p-3 text-sm flex items-start gap-2 ${e===`warn`?`text-amber-800 bg-amber-50 border-amber-200`:e===`error`?`text-destructive bg-destructive/5 border-destructive/30`:`text-muted-foreground border-muted`}`,children:[e!==`info`&&(0,Y.jsx)($e,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`div`,{className:`flex-1`,children:t})]})}function Lc({icon:e,title:t,description:n,action:r,tone:i=`info`}){let a=i===`warn`?`text-amber-700 bg-amber-50/40 border-amber-200/60`:`text-muted-foreground border-dashed border-muted-foreground/25 bg-muted/10`,o=e??(0,Y.jsx)(Qt,{className:`h-8 w-8 opacity-50`});return(0,Y.jsx)(`div`,{className:`h-full w-full flex items-center justify-center p-6`,children:(0,Y.jsxs)(`div`,{className:`max-w-md w-full rounded-lg border ${a} px-6 py-10 flex flex-col items-center gap-3 text-center`,children:[(0,Y.jsx)(`div`,{className:`text-foreground/60`,children:o}),(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground/90`,children:t}),n&&(0,Y.jsx)(`div`,{className:`text-xs leading-relaxed`,children:n}),r&&(0,Y.jsx)(`div`,{className:`mt-1`,children:r})]})})}var Q=class extends X.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e){console.error(`[MetadataPreview] render failed`,e)}render(){return this.state.error?(0,Y.jsxs)(Ic,{tone:`error`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Preview failed to render`}),(0,Y.jsx)(`div`,{className:`text-xs mt-1 font-mono opacity-80`,children:this.state.error.message}),this.props.fallbackHint&&(0,Y.jsx)(`div`,{className:`text-xs mt-2 opacity-70`,children:this.props.fallbackHint})]}):this.props.children}};function Rc({title:e,entries:t,selectedId:n,onSelect:r,onAdd:i,addLabel:a}){return t.length===0&&!i?null:(0,Y.jsxs)(`div`,{className:`border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground mb-1.5`,children:e}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),r(e)},className:L(`rounded border bg-background px-2 py-0.5 text-xs hover:border-primary/50 cursor-pointer`,n===e.id&&`ring-2 ring-primary border-primary`),children:e.label},e.id)),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i()},className:`rounded border border-dashed bg-background px-2 py-0.5 text-xs text-muted-foreground hover:border-primary hover:text-primary cursor-pointer inline-flex items-center gap-1`,"aria-label":a??`Add`,title:a??`Add`,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:a??`Add`})]})]})]})}var zc={grid:{label:`Grid`,category:`data`,Icon:Ie},"object-grid":{label:`Table`,category:`data`,Icon:fr},"object-form":{label:`Form`,category:`data`,Icon:jt},"object-metric":{label:`Metric`,category:`data`,Icon:Nr},"object-kanban":{label:`Kanban`,category:`data`,Icon:Un},"page:header":{label:`Header`,category:`layout`,Icon:Qn},"page:footer":{label:`Footer`,category:`layout`,Icon:nr},"page:sidebar":{label:`Sidebar`,category:`layout`,Icon:Vn},"page:tabs":{label:`Tabs`,category:`layout`,Icon:kr},"page:accordion":{label:`Accordion`,category:`layout`,Icon:Ce},"page:card":{label:`Card`,category:`layout`,Icon:Sr},"page:section":{label:`Section`,category:`layout`,Icon:Vt},"record:details":{label:`Record details`,category:`record`,Icon:at},"record:highlights":{label:`Highlights`,category:`record`,Icon:Yn},"record:related_list":{label:`Related list`,category:`record`,Icon:we},"record:activity":{label:`Activity timeline`,category:`record`,Icon:le},"record:chatter":{label:`Chatter feed`,category:`record`,Icon:et},"record:path":{label:`Stage path`,category:`record`,Icon:un},"record:alert":{label:`Alert banner`,category:`record`,Icon:I},"record:quick_actions":{label:`Quick actions`,category:`record`,Icon:ve},"record:reference_rail":{label:`Reference rail`,category:`record`,Icon:Hn},"record:history":{label:`History`,category:`record`,Icon:fn},"nav:menu":{label:`Nav menu`,category:`navigation`,Icon:Fn},"nav:breadcrumb":{label:`Breadcrumb`,category:`navigation`,Icon:un},"global:search":{label:`Global search`,category:`navigation`,Icon:tt},"ai:chat_window":{label:`AI chat window`,category:`ai`,Icon:mr},"ai:suggestion":{label:`AI suggestion`,category:`ai`,Icon:Tn},"element:text":{label:`Text`,category:`element`,Icon:Ct},"element:number":{label:`Number`,category:`element`,Icon:yn},"element:image":{label:`Image`,category:`element`,Icon:gr},"element:divider":{label:`Divider`,category:`element`,Icon:ht},"element:button":{label:`Button`,category:`element`,Icon:tn},"element:definition-list":{label:`Definition list`,category:`element`,Icon:ee},"element:repeater":{label:`Repeater`,category:`element`,Icon:Ze}},Bc={data:`Data`,layout:`Layout`,record:`Record context`,navigation:`Navigation`,element:`Elements`,ai:`AI`,misc:`Other`},Vc=(()=>{let e={data:[],layout:[],record:[],navigation:[],element:[],ai:[],misc:[]};for(let[t,n]of Object.entries(zc))e[n.category].push(t);return[`data`,`layout`,`record`,`element`,`navigation`,`ai`,`misc`].map(t=>({category:t,types:e[t]})).filter(e=>e.types.length>0)})(),Hc=$n,Uc={data:{icon:`text-emerald-500 dark:text-emerald-400`,badge:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300`},layout:{icon:`text-slate-500 dark:text-slate-400`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},record:{icon:`text-blue-500 dark:text-blue-400`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},navigation:{icon:`text-indigo-500 dark:text-indigo-400`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},element:{icon:`text-teal-500 dark:text-teal-400`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},ai:{icon:`text-violet-500 dark:text-violet-400`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},misc:{icon:`text-zinc-500 dark:text-zinc-400`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function Wc(e){return Uc[zc[e]?.category??`misc`]}var Gc={"object-grid":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`columns`,label:`Columns`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`pageSize`,label:`Page size`,kind:`number`,placeholder:`20`},{name:`striped`,label:`Striped rows`,kind:`boolean`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"object-form":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`mode`,label:`Mode`,kind:`select`,options:[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`view`,label:`View`}]},{name:`formType`,label:`Form type`,kind:`select`,options:[{value:`simple`,label:`Simple`},{value:`tabbed`,label:`Tabbed`},{value:`wizard`,label:`Wizard`},{value:`split`,label:`Split`},{value:`drawer`,label:`Drawer`},{value:`modal`,label:`Modal`}]},{name:`layout`,label:`Layout`,kind:`select`,options:[{value:`vertical`,label:`Vertical`},{value:`horizontal`,label:`Horizontal`},{value:`inline`,label:`Inline`},{value:`grid`,label:`Grid`}]},{name:`columns`,label:`Columns (grid layout)`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`description`,label:`Description`,kind:`text`}],"object-metric":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`label`,label:`Label`,kind:`text`},{name:`description`,label:`Description`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`colorVariant`,label:`Color`,kind:`color`,options:[{value:`default`,label:`Default`},{value:`blue`,label:`Blue`},{value:`teal`,label:`Teal`},{value:`orange`,label:`Orange`},{value:`purple`,label:`Purple`},{value:`success`,label:`Success`},{value:`warning`,label:`Warning`},{value:`danger`,label:`Danger`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"object-kanban":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`groupField`,label:`Group by field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`cardFields`,label:`Card fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`}],grid:[{name:`columns`,label:`Columns`,kind:`number`,placeholder:`3`},{name:`gap`,label:`Gap`,kind:`number`,placeholder:`4`}],"element:text":[{name:`content`,label:`Content`,kind:`text`,placeholder:`Text…`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`heading`,label:`Heading`},{value:`subheading`,label:`Subheading`},{value:`body`,label:`Body`},{value:`caption`,label:`Caption`}]},{name:`align`,label:`Align`,kind:`select`,options:[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}]}],"element:image":[{name:`src`,label:`Source URL`,kind:`text`,placeholder:`https://…`},{name:`alt`,label:`Alt text`,kind:`text`},{name:`fit`,label:`Fit`,kind:`select`,options:[{value:`cover`,label:`Cover`},{value:`contain`,label:`Contain`},{value:`fill`,label:`Fill`}]}],"element:definition-list":[{name:`items`,label:`Items`,kind:`array`,addLabel:`Add item`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`value`,label:`Value`,kind:`text`}]},{name:`columns`,label:`Columns (1 or 2)`,kind:`number`,placeholder:`1`},{name:`inline`,label:`Inline (label · value)`,kind:`boolean`}],"element:repeater":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`object`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`},{name:`emptyText`,label:`Empty text`,kind:`text`},{name:`divided`,label:`Dividers between rows`,kind:`boolean`}],"element:number":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`field`,label:`Field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`aggregate`,label:`Aggregate`,kind:`select`,options:[{value:`count`,label:`Count`},{value:`sum`,label:`Sum`},{value:`avg`,label:`Average`},{value:`min`,label:`Min`},{value:`max`,label:`Max`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"element:button":[{name:`label`,label:`Label`,kind:`text`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}]},{name:`size`,label:`Size`,kind:`select`,options:[{value:`small`,label:`Small`},{value:`medium`,label:`Medium`},{value:`large`,label:`Large`}]},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`}],"page:header":[{name:`title`,label:`Title`,kind:`text`},{name:`subtitle`,label:`Subtitle`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`breadcrumb`,label:`Show breadcrumb`,kind:`boolean`}],"page:card":[{name:`title`,label:`Title`,kind:`text`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"page:tabs":[{name:`items`,label:`Tabs`,kind:`array`,addLabel:`Add tab`,itemFields:[{name:`key`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"page:accordion":[{name:`title`,label:`Title`,kind:`text`},{name:`items`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`value`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:related_list":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`relationshipField`,label:`Relationship field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`}],"record:highlights":[{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}],"record:details":[{name:`sections`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`columns`,label:`Columns`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}]}],"record:alert":[{name:`severity`,label:`Severity`,kind:`select`,options:[{value:`info`,label:`Info`},{value:`warning`,label:`Warning`},{value:`error`,label:`Error`},{value:`success`,label:`Success`}]},{name:`title`,label:`Title`,kind:`text`},{name:`body`,label:`Body`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`dismissible`,label:`Dismissible`,kind:`boolean`}],"record:path":[{name:`statusField`,label:`Status field`,kind:`field-picker`,objectFrom:`page`},{name:`stages`,label:`Stages`,kind:`array`,addLabel:`Add stage`,itemFields:[{name:`value`,label:`Value`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:quick_actions":[{name:`actionNames`,label:`Action names`,kind:`string-list`,placeholder:`action name`},{name:`location`,label:`Location`,kind:`select`,options:[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record more menu`},{value:`record_section`,label:`Record section`},{value:`record_related`,label:`Record related`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List item`},{value:`global_nav`,label:`Global nav`}]}],"ai:chat_window":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}],"ai:input":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}]};function Kc(e){return!!e&&Array.isArray(Gc[e])&&Gc[e].length>0}function qc(){let e=mi(),[t,n]=X.useState([]),[r,i]=X.useState(!0);return X.useEffect(()=>{let t=!1;return i(!0),e.list(`object`).then(e=>{t||(n((e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value))),i(!1))}).catch(()=>{t||(n([]),i(!1))}),()=>{t=!0}},[e]),{options:t,loading:r}}function Jc(e){let{fields:t}=Di(e);return X.useMemo(()=>t.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[t])}function Yc({label:e,value:t,onCommit:n,disabled:r}){let{options:i}=qc();return i.length===0?(0,Y.jsx)(W,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(K,{label:e,value:t||void 0,options:i,onCommit:n,disabled:r})}function Xc({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let a=Jc(t);return!t||a.length===0?(0,Y.jsx)(W,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(K,{label:e,value:n||void 0,options:a,onCommit:r,disabled:i})}function Zc({label:e,objectName:t,value:n,onChange:r,disabled:i}){let a=Jc(t),o=Array.isArray(n)?n:[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),o.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[a.length>0?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsxs)(De,{value:e?String(e):``,onValueChange:e=>{let n=[...o];n[t]=e,r(n)},disabled:i,children:[(0,Y.jsx)(Be,{className:`h-8`,children:(0,Y.jsx)(zt,{placeholder:`—`})}),(0,Y.jsx)(We,{children:a.map(e=>(0,Y.jsx)(ur,{value:e.value,children:e.label},e.value))})]})}):(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(e??``),placeholder:`field name`,disabled:i,onChange:e=>{let n=[...o];n[t]=e.target.value,r(n)}}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:i,"aria-label":`Remove`,onClick:()=>r(o.filter((e,n)=>n!==t)),children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},t)),!i&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r([...o,``]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]})}function Qc(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function $c({label:e,value:t,onCommit:n,disabled:r}){let i=X.useMemo(()=>Qc(t),[t]),[a,o]=X.useState(i),[s,c]=X.useState(null);return X.useEffect(()=>{o(i),c(null)},[i]),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:a,onChange:e=>o(e.target.value),onBlur:()=>{if(r)return;let e=a.trim();if(e===``){c(null),n(void 0);return}try{let t=JSON.parse(e);c(null),n(t)}catch{c(`Invalid JSON`)}},disabled:r,spellCheck:!1,rows:Math.min(12,Math.max(2,a.split(`
|
|
11
|
-
`).length)),className:`w-full rounded border border-input bg-background px-2 py-1.5 text-xs font-mono outline-none focus:ring-1 focus:ring-primary resize-y disabled:opacity-60`}),s&&(0,Y.jsx)(`div`,{className:`text-[11px] text-destructive`,children:s})]})}function el({name:e,value:t,onCommit:n,disabled:r}){return typeof t==`boolean`?(0,Y.jsx)(G,{label:e,value:t,onCommit:n,disabled:r}):typeof t==`number`?(0,Y.jsx)(ei,{label:e,value:t,onCommit:e=>n(e),disabled:r}):t===null||typeof t==`string`?(0,Y.jsx)(W,{label:e,value:t??``,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)($c,{label:e,value:t,onCommit:n,disabled:r})}var tl=new Set([`children`,`body`]),nl=Symbol(`remove`);function rl(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)(?:\[(\d+)\])?$/.exec(e);if(!t)return null;n.push({key:t[1],index:t[2]==null?-1:Number(t[2])})}return n.length>0?n:null}function il(e){let t=[];for(let n of e)t.push(n.key),n.index>=0&&t.push(n.index);return t}function al(e,t){let n=e;for(let e of t){if(n==null)return null;n=n[e]}return n??null}function ol(e,t,n){if(t.length===0)return n;let[r,...i]=t;if(typeof r==`number`){let t=Array.isArray(e)?[...e]:[];return i.length===0?n===nl?t.splice(r,1):t[r]=n:t[r]=ol(t[r],i,n),t}let a={...e||{}};return i.length===0?n===nl?delete a[r]:a[r]=n:a[r]=ol(a[r],i,n),a}function sl(e,t){return al(e,il(t))}function cl(e,t,n){let r=il(t),i=ol(e,r,n===null?nl:n),a=r[0];return{[a]:i[a]}}function ll(e,t){let n=il(t),r=n[n.length-1];if(typeof r!=`number`)return null;let i=al(e,n.slice(0,-1));return Array.isArray(i)?{siblings:i,index:r}:null}function ul(e,t,n){let r=il(t),i=ol(e,r.slice(0,-1),n),a=r[0];return{[a]:i[a]}}function dl({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=/^slot:([a-zA-Z_]+):(\d+)(?:\.(.+))?$/.exec(e.id),c=s?null:rl(e.id),l=s?s[1]:``,u=s?Number(s[2]):-1,d=s?s[3]:void 0,f=d?rl(d):null,p=t.slots&&typeof t.slots==`object`?t.slots:{},m=s?Array.isArray(p[l])?p[l]:p[l]==null?[]:[p[l]]:[],h=s?m[u]??null:null,g=e=>n({slots:{...p,[l]:e}}),_=e=>g(e===null?m.filter((e,t)=>t!==u):m.map((t,n)=>n===u?e:t)),v=s?f?sl(h||{},f):h:c?sl(t,c):null,y=s?f?ll(h||{},f):{siblings:m,index:u}:c?ll(t,c):null;if(!s&&!c||!v)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.pageBlock.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.pageBlock.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let b=e=>s?_(f?{...h,...cl(h||{},f,{...v,...e})}:{...v,...e}):n(cl(t,c,{...v,...e})),x=v.properties||{},S=typeof t?.object==`string`?t.object:void 0,C=e=>e.objectFrom===`page`?S:e.objectProp!=null&&x[e.objectProp]!=null?String(x[e.objectProp]):void 0,w=e=>x[e]??v[e],T=(e,t)=>b({properties:{...x,[e]:t}}),E=new Set((Kc(v.type)?Gc[v.type]:[]).map(e=>e.name)),D=Object.keys(x).filter(e=>!E.has(e)&&!tl.has(e)),O=(e,t,n,r=``)=>{let i=`${r}${e.name}`;switch(e.kind){case`number`:return(0,Y.jsx)(ei,{label:e.label,value:typeof t(e.name)==`number`?t(e.name):void 0,placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i);case`boolean`:return(0,Y.jsx)(G,{label:e.label,value:!!t(e.name),onCommit:t=>n(e.name,t),disabled:o},i);case`color`:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Si,{value:t(e.name)==null?void 0:String(t(e.name)),onChange:t=>n(e.name,t),disabled:o,options:e.options})]},i);case`select`:return(0,Y.jsx)(K,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),options:e.options,onCommit:t=>n(e.name,t),disabled:o},i);case`string-list`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,i)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(t??``),placeholder:e.placeholder,disabled:o,onChange:t=>{let a=[...r];a[i]=t.target.value,n(e.name,a)}}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:o,"aria-label":`Remove`,onClick:()=>n(e.name,r.filter((e,t)=>t!==i)),children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},i)),!o&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,``]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]},i)}case`array`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,a)=>{let s=t&&typeof t==`object`?t:{};return(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`#`,a+1]}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7`,disabled:o,"aria-label":`Remove item`,onClick:()=>n(e.name,r.filter((e,t)=>t!==a)),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),e.itemFields.map(t=>O(t,e=>s[e],(t,i)=>{let o=[...r];o[a]={...s,[t]:i},n(e.name,o)},`${i}-${a}-`))]},a)}),!o&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,{}]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` `,e.addLabel||`Add`]})]},i)}case`object-picker`:return(0,Y.jsx)(Yc,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-picker`:return(0,Y.jsx)(Xc,{label:e.label,objectName:C(e),value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-list`:return(0,Y.jsx)(Zc,{label:e.label,objectName:C(e),value:t(e.name),onChange:t=>n(e.name,t),disabled:o},i);default:return(0,Y.jsx)(W,{label:e.label,value:t(e.name)==null?``:String(t(e.name)),placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i)}},k=()=>{s?_(f?{...h,...cl(h||{},f,null)}:null):n(cl(t,c,null)),r()},A=e=>e.map(e=>e.index>=0?`${e.key}[${e.index}]`:e.key).join(`.`);return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.pageBlock.kind`,a),title:String(v.id||v.type||e.id),onClose:r,closeLabel:J(`engine.inspector.pageBlock.close`,a),headerActions:y?(0,Y.jsx)(ai,{index:y.index,total:y.siblings.length,onMove:e=>{if(!y)return;if(s){if(f){let t=Ii(y.siblings,y.index,e);_({...h,...ul(h||{},f,t)});let n=A([...f.slice(0,-1),{key:f[f.length-1].key,index:e}]);i?.({kind:`block`,id:`slot:${l}:${u}.${n}`,label:String(v.id||v.type||e)})}else g(Ii(m,u,e)),i?.({kind:`block`,id:`slot:${l}:${e}`,label:String(v.id||v.type||e)});return}n(ul(t,c,Ii(y.siblings,y.index,e)));let r=A([...c.slice(0,-1),{key:c[c.length-1].key,index:e}]);i?.({kind:`block`,id:r,label:String(v.id||v.type||r)})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}):void 0,footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.pageBlock.remove`,a),onClick:k,disabled:o}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.type`,a),value:v.type??``,onCommit:e=>b({type:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.id`,a),value:v.id??``,onCommit:e=>b({id:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.className`,a),value:v.className??``,onCommit:e=>b({className:e}),disabled:o,mono:!0}),(0,Y.jsx)(Oi,{label:J(`engine.inspector.pageBlock.hidden`,a),value:v.hidden??``,onCommit:e=>b({hidden:e||void 0}),objectName:S,disabled:o}),Kc(v.type)&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.pageBlock.properties`,a)}),Gc[v.type].map(e=>O(e,w,T))]}),D.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.pageBlock.advanced`,a)}),D.map(e=>(0,Y.jsx)(el,{name:e,value:x[e],onCommit:t=>T(e,t),disabled:o},e))]})]})}var fl=new Set([`simple`,`tabbed`,`wizard`,`split`]),pl=new Set([`drawer`,`modal`]);function ml(e){return typeof e==`string`&&pl.has(e)}function hl(e){return typeof e==`string`&&fl.has(e)?e:`simple`}function gl(e){let t={...e,type:String(e?.type??``)},n=t.properties&&typeof t.properties==`object`?t.properties:void 0;return ml(n?.formType??t.formType)&&(n&&(t.properties={...n,formType:`simple`}),`formType`in t&&(t.formType=`simple`)),t}function _l(e=`300px`){let t=X.useRef(null),[n,r]=X.useState(()=>typeof IntersectionObserver>`u`);return X.useEffect(()=>{if(n)return;let i=t.current;if(!i)return;let a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(r(!0),a.disconnect())},{rootMargin:e});return a.observe(i),()=>a.disconnect()},[n,e]),{ref:t,inView:n}}function vl({block:e,maxHeightClass:t=`max-h-72`}){let n=String(e?.type??``),{ref:r,inView:i}=_l();return(0,Y.jsx)(`div`,{ref:r,className:L(`pointer-events-none select-none overflow-hidden p-3`,t),children:i?(0,Y.jsx)(Q,{fallbackHint:`"${n}" can't render with its current configuration — check its Properties.`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:gl(e)})})}):(0,Y.jsx)(`div`,{className:`min-h-[64px] animate-pulse rounded bg-muted/40`,"aria-hidden":`true`})})}var yl={1:`grid-cols-1`,2:`grid-cols-2`,3:`grid-cols-3`,4:`grid-cols-4`,5:`grid-cols-5`,6:`grid-cols-6`};function bl(e){let t=e?.properties||{};switch(e?.type){case`page:tabs`:case`page:accordion`:return(Array.isArray(t.items)?t.items:[]).map((e,t)=>({label:e?.label||e?.key||`Item ${t+1}`,pathSuffix:`properties.items[${t}].children`,children:Array.isArray(e?.children)?e.children:[]}));case`page:card`:return Array.isArray(t.body)&&!Array.isArray(t.children)?[{label:`Body`,pathSuffix:`properties.body`,children:t.body}]:[{label:`Body`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];case`page:section`:case`grid`:return[{label:`Content`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];default:return Array.isArray(t.children)?[{label:`Content`,pathSuffix:`properties.children`,children:t.children}]:[]}}var xl=[`header`,`actions`,`alerts`,`highlights`,`details`,`tabs`,`discussion`];function Sl(e){let t=e||{};return xl.map(e=>{let n=t[e];return{name:e,components:Array.isArray(n)?n:n==null?[]:[n]}})}function Cl(e){let t={};for(let n of e){let e=Array.isArray(n.components)?n.components:[];e.length===0||!n.name||(t[n.name]=e)}return t}function wl(e){let t=e.slots;if(e.kind===`slotted`&&t&&typeof t==`object`&&!Array.isArray(t))return{regions:Sl(t),shape:`slots`};let n=e.regions;if(Array.isArray(n))return{regions:n,shape:`regions`};let r=e.children;return Array.isArray(r)?{regions:[{name:`children`,components:r}],shape:`children`}:{regions:[],shape:`regions`}}function Tl(e,t,n,r){return e===`children`?`children[${n}]`:e===`slots`?`slot:${r}:${n}`:`regions[${t}].components[${n}]`}function El(e){return typeof e.label==`string`&&e.label||typeof e.title==`string`&&e.title||typeof e.id==`string`&&e.id||String(e.type??`block`)}var Dl=`text/x-objectui-pageblock`;function Ol({draft:e,onPatch:t,selection:n,onSelectionChange:r}){let i=!t,{regions:a,shape:o}=X.useMemo(()=>wl(e),[e]),s=n?.kind===`block`?String(n.id):null,c=X.useCallback(e=>{if(o===`children`){let n=e.flatMap(e=>Array.isArray(e.components)?e.components:[]);t?.({children:n})}else o===`slots`?t?.({slots:Cl(e)}):t?.({regions:e})},[t,o]),l=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),s=i[e.region]?.components;if(!s)return;let[l]=s.splice(e.comp,1);if(!l)return;let u=i[n.region]?.components;if(!u)return;let d=u.length;if(`appendEnd`in n)d=u.length;else if(n.before!=null){let t=n.before;e.region===n.region&&e.comp<t&&--t,d=t}else if(n.after!=null){let t=n.after+1;e.region===n.region&&e.comp<n.after+1&&--t,d=t}u.splice(d,0,l),c(i);let f=Tl(o,n.region,d,i[n.region]?.name);r?.({kind:`block`,id:f,label:El(l)})},[t,r,a,c,o]),u=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]}));i[e]||(i[e]={name:`region_${e+1}`,components:[]});let s={type:n};i[e].components.push(s),c(i);let l=i[e].components.length-1;r?.({kind:`block`,id:Tl(o,e,l,i[e]?.name),label:El(s)})},[t,r,a,c,o]),d=X.useCallback((e,n,r)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),o=i[e]?.components?.[n];o&&(i[e].components[n]={...o,label:r||void 0},c(i))},[t,a,c]),f=X.useCallback(()=>{t&&c([...a,{name:`region_${a.length+1}`,components:[]}])},[t,a,c]),p=X.useCallback((n,i,a)=>{if(!t)return;let o=/^slot:([a-zA-Z_]+):(\d+)$/.exec(n),s=rl(i);if(!s)return;let c=il(s);if(o){let s=o[1],l=Number(o[2]),u=e.slots||{},d=u[s],f=Array.isArray(d)?[...d]:d==null?[]:[d],p=f[l];if(!p)return;let m=al(p,c)||[];f[l]=ol(p,c,[...m,{type:a}]),t({slots:{...u,[s]:f}}),r?.({kind:`block`,id:`${n}.${i}[${m.length}]`,label:a})}else{let o=rl(`${n}.${i}`);if(!o)return;let s=il(o),c=al(e,s)||[],l=ol(e,s,[...c,{type:a}]);t({[s[0]]:l[s[0]]}),r?.({kind:`block`,id:`${n}.${i}[${c.length}]`,label:a})}},[t,e,r]),m=X.useCallback(e=>{e.target===e.currentTarget&&s&&r?.(null)},[r,s]);return a.length===0?(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsx)(`div`,{className:`mx-auto max-w-3xl px-6 py-8`,children:(0,Y.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed bg-background py-16 px-6 text-center space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`No regions yet`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`A Page is composed of regions (header / main / sidebar / …). Add a region to start dropping blocks into it.`}),!i&&(0,Y.jsx)(`div`,{className:`pt-2`,children:(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,onClick:f,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}):(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsxs)(`div`,{className:`mx-auto max-w-3xl px-6 py-6 space-y-5`,onClick:m,children:[a.map((e,t)=>(0,Y.jsx)(kl,{region:e,regionIdx:t,shape:o,selectedId:s,readOnly:i,onSelectBlock:(n,i)=>r?.({kind:`block`,id:Tl(o,t,n,e.name),label:El(i)}),onMoveBlock:l,onAddBlock:u,onRenameLabel:d,baseIdOf:n=>Tl(o,t,n,e.name),onSelectId:(e,t)=>r?.({kind:`block`,id:e,label:t}),onAddNested:p},t)),!i&&o===`regions`&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-muted-foreground`,onClick:f,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}function kl({region:e,regionIdx:t,shape:n,selectedId:r,readOnly:i,onSelectBlock:a,onMoveBlock:o,onAddBlock:s,onRenameLabel:c,onSelectId:l,onAddNested:u}){let d=Array.isArray(e.components)?e.components:[],[f,p]=X.useState(!1);return(0,Y.jsxs)(`section`,{className:L(`rounded-md transition-colors`,f&&`bg-primary/5 ring-1 ring-primary/30 -mx-1 px-1 py-1`),onDragOver:e=>{if(i)return;let t=e.dataTransfer.types;!t||!Array.from(t).includes(Dl)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,p(!0))},onDragLeave:e=>{e.currentTarget===e.target&&p(!1)},onDrop:e=>{if(i||(p(!1),e.defaultPrevented))return;e.preventDefault();let n=e.dataTransfer.getData(Dl);if(n)try{let e=JSON.parse(n);if(typeof e.region!=`number`||typeof e.comp!=`number`)return;o(e,{region:t,appendEnd:!0})}catch{}},children:[(0,Y.jsxs)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground pl-1 mb-2 flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{children:e.name||`region ${t+1}`}),e.width&&(0,Y.jsxs)(`span`,{className:`normal-case text-[10px] text-muted-foreground/60`,children:[`· `,e.width]}),f&&(0,Y.jsx)(`span`,{className:`text-primary normal-case text-[10px]`,children:`drop here`})]}),(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[d.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/50 py-6 px-4 text-center text-xs text-muted-foreground`,children:n===`slots`?`Inherited from the default page — add a block to override this slot.`:`Empty region — drop a block here or use the add button below.`}):d.map((s,d)=>{let f=Tl(n,t,d,e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsx)(Al,{block:s,regionIdx:t,compIdx:d,selected:f===r,readOnly:i,onClick:()=>a(d,s),onMoveBlock:o,onRenameLabel:e=>c(t,d,e)}),(0,Y.jsx)(jl,{block:s,baseId:f,selectedId:r,readOnly:i,onSelectId:l,onAddNested:u})]},`${t}:${d}`)}),!i&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsx)(Ml,{onPick:e=>s(t,e)})})]})]})}function Al({block:e,regionIdx:t,compIdx:n,selected:r,readOnly:i,onClick:a,onMoveBlock:o,onRenameLabel:s}){let c=String(e.type??``),l=zc[c]?.Icon??Hc,u=Wc(c),d=El(e),f=!i,[p,m]=X.useState(null),h=e=>{e.dataTransfer.setData(Dl,JSON.stringify({region:t,comp:n})),e.dataTransfer.effectAllowed=`move`},g=e=>{if(!f)return;let t=e.dataTransfer.types;if(!t||!Array.from(t).includes(Dl))return;e.preventDefault(),e.dataTransfer.dropEffect=`move`;let n=e.currentTarget.getBoundingClientRect();m(e.clientY-n.top<n.height/2?`before`:`after`)},_=()=>m(null),v=e=>{if(i)return;e.preventDefault(),e.stopPropagation();let r=p??`before`;m(null);let a=e.dataTransfer.getData(Dl);if(a)try{let e=JSON.parse(a);if(e.region===t&&e.comp===n)return;o(e,r===`before`?{region:t,before:n}:{region:t,after:n})}catch{}},[y,b]=X.useState(!1),[x,S]=X.useState(d);X.useEffect(()=>{S(d)},[d]);let C=e=>{i||(e.preventDefault(),e.stopPropagation(),S(d),b(!0))},w=()=>{if(i){b(!1);return}let e=x.trim();e&&e!==d&&s(e),b(!1)},T=()=>{S(d),b(!1)},E=bl(e).length>0;return(0,Y.jsxs)(`div`,{className:L(`relative`,p===`before`&&`pt-1.5`),onDragOver:g,onDragLeave:_,onDrop:v,children:[p===`before`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -top-0.5 h-0.5 bg-primary rounded-full`}),(0,Y.jsx)(`div`,{className:L(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,r?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:E?(0,Y.jsxs)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,className:L(`flex w-full items-center justify-between gap-2 rounded-md px-3.5 py-2.5 text-left`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`),"aria-pressed":r,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0 flex-1`,children:[f&&(0,Y.jsx)(En,{className:`h-3.5 w-3.5 text-muted-foreground/40 shrink-0 group-hover:text-muted-foreground/80`,"aria-hidden":`true`}),(0,Y.jsx)(l,{className:L(`h-3.5 w-3.5 shrink-0`,u.icon)}),y?(0,Y.jsx)(`input`,{autoFocus:!0,value:x,onChange:e=>S(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(e.preventDefault(),w()):e.key===`Escape`&&(e.preventDefault(),T())},onBlur:w,className:`text-sm font-medium px-1 py-0.5 -mx-1 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1`}):(0,Y.jsx)(`span`,{className:L(`text-sm font-medium truncate`,!i&&`cursor-text`),onDoubleClick:C,title:i?void 0:`Double-click to rename`,children:d}),e.id&&e.id!==d&&(0,Y.jsxs)(`code`,{className:`text-[10px] text-muted-foreground/70 font-mono truncate`,children:[`#`,e.id]})]}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] shrink-0 font-mono`,u.badge),children:c})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(vl,{block:e}),(0,Y.jsx)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,"aria-label":`Select ${d}`,"aria-pressed":r,className:L(`absolute inset-0 z-10 rounded-md`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`)}),(0,Y.jsxs)(`div`,{className:L(`pointer-events-none absolute right-1.5 top-1.5 z-20 flex items-center gap-1 transition-opacity`,r?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:[f&&(0,Y.jsx)(En,{className:`h-3.5 w-3.5 text-muted-foreground/60`,"aria-hidden":`true`}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,u.badge),children:c})]})]})}),p===`after`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -bottom-1 h-0.5 bg-primary rounded-full`})]})}function jl({block:e,baseId:t,selectedId:n,readOnly:r,onSelectId:i,onAddNested:a}){let o=bl(e);if(o.length===0)return null;let s=yl[e?.type===`grid`?Math.min(6,Math.max(1,Number(e.properties?.columns)||1)):1]??`grid-cols-1`;return(0,Y.jsx)(`div`,{className:`ml-5 mt-1.5 space-y-2.5 border-l border-dashed border-border pl-3`,children:o.map((e,o)=>(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground/70`,children:e.label}),e.children.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/40 py-2 px-3 text-[11px] text-muted-foreground`,children:`Empty — add a block.`}):(0,Y.jsx)(`div`,{className:L(`grid gap-2`,s),children:e.children.map((r,a)=>{let o=`${t}.${e.pathSuffix}[${a}]`,s=String(r?.type??``),c=o===n;return(0,Y.jsxs)(`div`,{className:L(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,c?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:[(0,Y.jsx)(vl,{block:r,maxHeightClass:`max-h-56`}),(0,Y.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i(o,El(r))},"aria-label":`Select ${El(r)}`,"aria-pressed":c,className:`absolute inset-0 z-10 rounded-md cursor-pointer`}),(0,Y.jsx)(`div`,{className:L(`pointer-events-none absolute right-1.5 top-1.5 z-20 transition-opacity`,c?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,Wc(s).badge),children:s})})]},a)})}),!r&&(0,Y.jsx)(Ml,{onPick:n=>a(t,e.pathSuffix,n)})]},o))})}function Ml({onPick:e}){let[t,n]=X.useState(!1),[r,i]=X.useState(``),a=r.trim().toLowerCase(),o=X.useMemo(()=>a?Vc.map(e=>({category:e.category,types:e.types.filter(e=>{let t=zc[e];return e.includes(a)||t.label.toLowerCase().includes(a)})})).filter(e=>e.types.length>0):Vc,[a]);return(0,Y.jsxs)(Mn,{open:t,onOpenChange:e=>{n(e),e||i(``)},children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add block`]})}),(0,Y.jsxs)(Zt,{align:`start`,className:`w-[320px] p-0 max-h-[480px] overflow-hidden flex flex-col`,children:[(0,Y.jsx)(`div`,{className:`p-2 border-b`,children:(0,Y.jsx)(`input`,{autoFocus:!0,value:r,onChange:e=>i(e.target.value),placeholder:`Search block type…`,className:`h-7 w-full px-2 text-sm border rounded bg-background outline-none focus:ring-1 focus:ring-primary`})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto p-1`,children:o.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground p-4 text-center`,children:`No matching types.`}):o.map(t=>(0,Y.jsxs)(`div`,{className:`mb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground px-2 py-1`,children:Bc[t.category]}),t.types.map(t=>{let r=zc[t],a=r.Icon;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{e(t),n(!1),i(``)},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm hover:bg-accent text-left`,children:[(0,Y.jsx)(a,{className:L(`h-3.5 w-3.5 shrink-0`,Wc(t).icon)}),(0,Y.jsx)(`span`,{className:`truncate`,children:r.label}),(0,Y.jsx)(`code`,{className:`ml-auto text-[10px] text-muted-foreground/70 font-mono truncate`,children:t})]},t)})]},t.category))})]})]})}function Nl({draft:e,editing:t,selection:n,onSelectionChange:r,onPatch:i,locale:a}){let o=X.useMemo(()=>{let t=e.type??`page`;return{...e,type:t}},[e]),s=!!(t&&r),c=s&&!!i,l=n&&n.kind===`block`?n.id:null,u=!!e?.interfaceConfig?.source,d=X.useMemo(()=>Array.isArray(e.regions)?`regions`:`children`,[e]),f=X.useMemo(()=>{if(d===`regions`){let t=e.regions,n=[];return t.forEach((e,t)=>{(Array.isArray(e.components)?e.components:[]).forEach((r,i)=>{n.push({id:`regions[${t}].components[${i}]`,label:r.id||r.type||`${e.name??`region ${t+1}`} · ${i+1}`})})}),n}return(Array.isArray(e.children)?e.children:[]).map((e,t)=>({id:`children[${t}]`,label:e.id||e.type||`block ${t+1}`}))},[e,d]),m=X.useCallback(()=>{if(!c)return;let t={type:`container`};if(d===`regions`){let n=Array.isArray(e.regions)?[...e.regions]:[],a=n.length-1;a<0&&(n.push({name:`main`,components:[]}),a=0);let o={...n[a]},s=Array.isArray(o.components)?[...o.components]:[];s.push(t),o.components=s,n[a]=o,i({regions:n}),r?.({kind:`block`,id:`regions[${a}].components[${s.length-1}]`,label:t.type});return}let n=[...Array.isArray(e.children)?e.children:[],t];i({children:n}),r?.({kind:`block`,id:`children[${n.length-1}]`,label:t.type})},[c,e,i,r,d]),g=e?.type===`record`||e?.pageType===`record`?e?.object:void 0,[_,v]=X.useState([]),[y,x]=X.useState(null),[S,C]=X.useState(null);X.useEffect(()=>{if(!g){v([]),x(null),C(null);return}let e=!1;return(async()=>{try{let t={headers:{accept:`application/json`},credentials:`include`},n=await(await fetch(`/api/v1/meta/object/${encodeURIComponent(g)}`,t)).json().catch(()=>null),r=n?.item??n?.data??n,i=p(r?.fields),a=i.length>0?`?$top=50&$expand=${encodeURIComponent(i.join(`,`))}`:`?$top=50`,o=await(await fetch(`/api/v1/data/${encodeURIComponent(g)}${a}`,t)).json().catch(()=>null),s=Array.isArray(o?.records)?o.records:Array.isArray(o?.items)?o.items:Array.isArray(o?.data)?o.data:Array.isArray(o)?o:[];if(e)return;v(s),x(r),C(e=>e??s[0]?.id??s[0]?._id??s[0]?.name??null)}catch{e||(v([]),x(null))}})(),()=>{e=!0}},[g]);let w=e=>e?.id??e?._id??e?.name,T=e=>String(e?.name??e?.title??e?.label??e?.subject??w(e)??`(record)`),E=X.useMemo(()=>_.length?_.find(e=>String(w(e))===String(S))??_[0]:null,[_,S]),D=e?.kind===`slotted`,O=X.useMemo(()=>{if(!D)return o;try{let t=e?.slots??{};return Wi(y??void 0,{slots:t})}catch{return o}},[D,o,e,y]),k=e=>!g||!E?e:(0,Y.jsxs)(b,{objectName:g,recordId:w(E),data:E,objectSchema:y??void 0,embedded:!0,children:[_.length>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b bg-muted/30 text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground shrink-0`,children:`Preview record`}),(0,Y.jsx)(`select`,{className:`h-7 rounded-md border bg-background px-2 text-xs max-w-[260px]`,value:String(S??``),onChange:e=>C(e.target.value),children:_.map(e=>{let t=w(e);return(0,Y.jsx)(`option`,{value:String(t),children:T(e)},String(t))})}),(0,Y.jsxs)(`span`,{className:`text-muted-foreground/70 shrink-0`,children:[_.length,` sample`,_.length===1?``:`s`]})]}),e]});return u?(0,Y.jsx)(Z,{hint:`page · interface`,children:(0,Y.jsx)(Q,{fallbackHint:`The interface page references a source object/view that isn't available.`,children:(0,Y.jsx)(Ui,{page:e,onConfigChange:c?t=>i({interfaceConfig:{...e.interfaceConfig||{},...t}}):void 0})})}):!o||Object.keys(o).length<=1?(0,Y.jsxs)(Z,{hint:`page${s?` · design`:``}`,children:[s&&d===`regions`?(0,Y.jsx)(Ol,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}):s?(0,Y.jsx)(Rc,{title:J(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?m:void 0,addLabel:J(`engine.inspector.add.block`,a)}):null,!s&&(0,Y.jsx)(Ic,{children:`Add components to the page to see a preview.`})]}):s&&d===`regions`?(0,Y.jsx)(Z,{hint:`page · design`,children:k((0,Y.jsx)(Ol,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}))}):(0,Y.jsx)(Z,{hint:`page${s?` · design`:``}`,children:(0,Y.jsxs)(Q,{fallbackHint:`The Page schema is incomplete or references a component that hasn't been registered yet.`,children:[s&&(0,Y.jsx)(Rc,{title:J(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?m:void 0,addLabel:J(`engine.inspector.add.block`,a)}),k((0,Y.jsx)(`div`,{className:`min-h-[200px] max-h-[70vh] overflow-auto p-4`,children:(0,Y.jsx)(h,{schema:O})}))]})})}function Pl(e,t){let n=[t?.object,t?.data?.object,t?.objectName,e.object,e.objectName,e.data?.object];for(let e of n)if(typeof e==`string`&&e)return e}function Fl(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e,n=t.field??t.name;return n?{...t,name:n,readOnly:t.readOnly??t.readonly}:t}return String(e)}function Il(e,t){return{type:`object-form`,objectName:e,mode:`create`,formType:hl(typeof t.type==`string`?t.type:`simple`),sections:Array.isArray(t.sections)?t.sections.map(e=>({...e,fields:Array.isArray(e?.fields)?e.fields.map(Fl):[]})):void 0,fields:Array.isArray(t.fields)?t.fields:void 0,showSubmit:!1,showCancel:!1}}function Ll({name:e,draft:t,editing:n}){let r=X.useMemo(()=>Aa(t)?.schema,[t]),i=X.useMemo(()=>Pl(t,r),[t,r]),a=!!n,{listViews:o,defaultViewId:s,defaultViewType:c}=X.useMemo(()=>{if(!r)return{listViews:{},defaultViewId:void 0,defaultViewType:`grid`};let n=String(e)||`default`;return{listViews:{[n]:{...r,label:r.label??t.label??e}},defaultViewId:n,defaultViewType:r.type??`grid`}},[r,t,e]);if(!r&&t.type){let e={...t};return(0,Y.jsx)(Z,{hint:`view · ${e.type}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:"The view's `type` may not be registered, or required fields are missing.",children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:e})})})})})}if(!i)return(0,Y.jsx)(Z,{hint:`view${a?` · design`:``}`,children:(0,Y.jsxs)(Ic,{tone:`warn`,children:[`This view has no object binding yet. Set the bound `,(0,Y.jsx)(`code`,{children:`Object`}),` in the right panel to fetch live data and field options.`]})});if(t.viewKind===`form`&&r){let e=String(r.type??`simple`),t=Il(i,r);return(0,Y.jsx)(Z,{hint:`view · ${e} · form${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The form view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:t})})})})})}let l=X.useMemo(()=>({type:`object-view`,objectName:i,defaultViewType:c,defaultListView:s,listViews:o,showSearch:!0,showFilters:!0,showCreate:!1,showRefresh:!0,showViewSwitcher:!0}),[i,c,s,o]);return(0,Y.jsx)(Z,{hint:`view · ${c}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:l})})})})})}var Rl=X.lazy(()=>o(()=>import(`./plugin-dashboard-CuwYQhsg.js`).then(e=>e.t).then(e=>({default:e.DashboardRenderer})),__vite__mapDeps([0,1]),import.meta.url));function zl({draft:e,editing:t,onPatch:n,selection:r,onSelectionChange:i,locale:a}){let o=f(),s=Array.isArray(e.widgets)?e.widgets:[],c=!!(t&&i),l=c&&!!n,u=r&&r.kind===`widget`?r.id:null,d=X.useCallback(e=>{if(i){if(!e){i(null);return}i({kind:`widget`,id:e,label:s.find(t=>t?.id===e)?.title||e})}},[i,s]),p=X.useCallback(e=>{n&&n({widgets:e})},[n]),m=X.useCallback(e=>{if(!l)return;let t=bi(`widget`,s.map(e=>e?.id).filter(Boolean)),r=qi[e],a=r?`New ${r.label.toLowerCase()}`:`New widget`;n({widgets:ci(s,{id:t,type:e,title:a,...r?.defaults??{}})}),i?.({kind:`widget`,id:t,label:a})},[l,s,n,i]),h=X.useCallback((e,t)=>{if(!l)return;let r=t.trim();n({widgets:s.map(t=>t?.id===e?{...t,title:r}:t)}),i?.({kind:`widget`,id:e,label:r||e})},[l,s,n,i]),g=u?s.find(e=>e?.id===u)??null:null,_=l?(0,Y.jsx)(Zi,{onAdd:m,label:J(`engine.inspector.add.widget`,a)}):null;return s.length===0?(0,Y.jsx)(Z,{hint:`dashboard${c?` · design`:``}`,toolbar:_,children:(0,Y.jsx)(Ic,{children:`Add at least one widget to see a preview.`})}):(0,Y.jsx)(Z,{hint:`dashboard · ${s.length} widget${s.length===1?``:`s`}${c?` · design`:``}`,toolbar:_,children:(0,Y.jsxs)(Q,{fallbackHint:`A widget references an object or field that doesn't resolve.`,children:[l&&g?(0,Y.jsx)(Bl,{widget:g,onRename:e=>h(g.id,e),onClose:()=>i?.(null)}):null,(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading dashboard renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(`div`,{className:`min-w-[768px]`,children:(0,Y.jsx)(Rl,{schema:e,dataSource:o,designMode:c,selectedWidgetId:u,onWidgetClick:c?d:void 0,onWidgetsReorder:c&&n?p:void 0,hideHeaderText:!0})})})})]})})}function Bl({widget:e,onRename:t,onClose:n}){let r=e.title??e.id??``,[i,a]=X.useState(!1),[o,s]=X.useState(r),c=X.useRef(null);X.useEffect(()=>{s(r),a(!1)},[e.id,r]),X.useEffect(()=>{i&&c.current?.select()},[i]);let l=()=>{let e=o.trim();e&&e!==r&&t(e),a(!1)},u=()=>{s(r),a(!1)},d=qi[e.type]?.icon??null;return(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-primary/5 px-3 py-1.5 text-xs`,children:[d?(0,Y.jsx)(d,{className:`h-3.5 w-3.5 text-primary`}):null,(0,Y.jsx)(`span`,{className:`rounded bg-primary px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-primary-foreground`,children:`Selected`}),i?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`input`,{ref:c,value:o,onChange:e=>s(e.target.value),onBlur:l,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),l()):e.key===`Escape`&&(e.preventDefault(),u())},className:`flex-1 min-w-0 rounded border bg-background px-2 py-0.5 text-xs outline-none focus:ring-1 focus:ring-primary`}),(0,Y.jsx)(`button`,{type:`button`,onClick:l,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Save title`,children:(0,Y.jsx)(je,{className:`h-3.5 w-3.5`})})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`flex-1 min-w-0 truncate text-left font-medium hover:underline`,title:`Click to rename`,children:r||(0,Y.jsx)(`span`,{className:`italic text-muted-foreground`,children:`untitled`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Rename widget`,children:(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:n,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Clear selection`,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]})}var Vl=X.lazy(()=>o(()=>import(`./plugin-report-C-YPOtvZ.js`).then(e=>e.t).then(e=>({default:e.ReportRenderer})),__vite__mapDeps([0]),import.meta.url));function Hl({draft:e}){let t=f(),n=e,r=typeof n.dataset==`string`&&!!n.dataset,i=n.type===`joined`&&Array.isArray(n.blocks)&&n.blocks.some(e=>typeof e?.dataset==`string`&&!!e.dataset);if(r||i){let r=Array.isArray(n.rows)?n.rows.filter(Boolean):[];return(0,Y.jsx)(Z,{hint:i?`report · joined · ${n.blocks.length} block${n.blocks.length===1?``:`s`}`:`report · dataset "${n.dataset}"${r.length?` · by `+r.join(`, `):``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The Report references a dataset/measure that doesn't resolve, or its config is incomplete.`,children:(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 p-4 text-xs text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading report renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 min-h-[200px] max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(Vl,{schema:e,dataSource:t})})})})})}let a=n.type===`joined`;return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(br,{className:`h-8 w-8`}),title:a?`Add a block to preview this joined report`:`Bind a dataset to preview this report`,description:a?`A joined report stacks dataset-bound blocks. Add a block and bind its dataset + measures in the right panel to start designing.`:`Since the 9.0 single-form cutover a report renders its dataset's measures (values) grouped by dimensions (rows). Choose a Dataset in the right panel to start designing.`})})}var Ul=`text/x-objectui-nav`;function Wl(e){if(e.kind)return String(e.kind);if(e.object||e.objectName)return`object`;if(e.page||e.pageName)return`page`;if(e.dashboard)return`dashboard`;if(e.report)return`report`;if(Array.isArray(e.children)&&e.children.length)return`group`;let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&/^https?:/i.test(t)?`link`:`item`}function Gl(e){switch(e){case`object`:return br;case`page`:return at;case`dashboard`:return Pt;case`report`:return Rt;case`link`:return At;case`group`:return vt;default:return un}}var Kl={object:{icon:`text-blue-500`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},page:{icon:`text-violet-500`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},dashboard:{icon:`text-teal-500`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},report:{icon:`text-amber-500`,badge:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-300`},link:{icon:`text-indigo-500`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},group:{icon:`text-slate-500`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},item:{icon:`text-zinc-500`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function ql(e){return Kl[e]??Kl.item}function Jl(e,t){let n=e.label??e.title??e.name??e.path;return typeof n==`string`&&n.trim()?n.trim():`Item ${t+1}`}function Yl(e){let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&t?t:void 0}function Xl({draft:e,rootKey:t,onPatch:n,selection:r,onSelectionChange:i}){let a=X.useMemo(()=>{let n=e[t];return Array.isArray(n)?n:[]},[e,t]),o=r&&r.kind===`nav`?r.id:null,[s,c]=X.useState(null),l=X.useCallback(e=>{n&&n({[t]:e})},[n,t]),u=X.useCallback(()=>{if(!n)return;let e=ci(a,{label:`New item`,path:``});l(e),i?.({kind:`nav`,id:`${t}[${e.length-1}]`,label:`New item`})},[n,a,l,t,i]),d=X.useCallback(e=>{n&&(l(si(a,e,null)),o===`${t}[${e}]`&&i?.(null))},[n,a,l,t,o,i]),f=X.useCallback((e,r)=>{n&&(l(si(a,e,{...a[e]??{},label:r})),o===`${t}[${e}]`&&i?.({kind:`nav`,id:`${t}[${e}]`,label:r}))},[n,a,l,t,o,i]),p=X.useCallback((e,r)=>{if(!n)return;let o=r;if(e<r&&(o=r-1),o===e)return;let s=Ii(a,e,o);l(s),i?.({kind:`nav`,id:`${t}[${o}]`,label:Jl(s[o]??{},o)})},[n,a,l,t,i]);return(0,Y.jsxs)(`div`,{className:`rounded-md border bg-card/40`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(`span`,{className:`font-mono uppercase tracking-wide text-muted-foreground`,children:t}),(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px]`,children:[a.length,` `,a.length===1?`item`:`items`]})]}),n&&(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded border border-dashed px-2 py-1 text-[11px] text-muted-foreground hover:bg-muted/30 hover:text-foreground`,onClick:u,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` Add nav item`]})]}),(0,Y.jsx)(`div`,{className:`space-y-1.5 p-2`,onDragOver:e=>{n&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},onDrop:e=>{n&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),s!=null&&(p(s,a.length),c(null)))},children:a.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed px-3 py-4 text-center text-[11px] text-muted-foreground`,children:n?`Empty — click "Add nav item" to start`:`No top-level nav items yet`}):a.map((e,r)=>(0,Y.jsx)(Zl,{item:e,index:r,depth:0,path:`${t}[${r}]`,selectedId:o,canEdit:!!n,onClick:(e,t)=>i?.({kind:`nav`,id:e,label:t}),onRename:e=>f(r,e),onRemove:()=>d(r),onDragStart:()=>c(r),onDragEnd:()=>c(null),onDropBefore:()=>{s!=null&&(p(s,r),c(null))}},r))})]})}function Zl({item:e,index:t,depth:n,path:r,selectedId:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ql,{item:e,index:t,depth:n,path:r,isSelected:i===r,canEdit:a&&n===0,onClick:()=>o(r,Jl(e,t)),onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}),Array.isArray(e.children)&&e.children.map((e,t)=>{let s=`${r}.children[${t}]`;return(0,Y.jsx)(Zl,{item:e,index:t,depth:n+1,path:s,selectedId:i,canEdit:a,onClick:o,onRename:()=>void 0,onRemove:()=>void 0,onDragStart:()=>void 0,onDragEnd:()=>void 0,onDropBefore:()=>void 0},t)})]})}function Ql({item:e,index:t,depth:n,path:r,isSelected:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){let f=Wl(e),p=Gl(f),m=ql(f),h=Yl(e),[g,_]=X.useState(!1),[v,y]=X.useState(Jl(e,t)),[b,x]=X.useState(!1),[S,C]=X.useState(null);return X.useEffect(()=>{g||y(Jl(e,t))},[e,t,g]),(0,Y.jsxs)(`div`,{className:`relative`,style:{paddingLeft:n*16},children:[S===`before`&&(0,Y.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 -top-0.5 h-0.5 rounded bg-primary`}),(0,Y.jsxs)(`button`,{type:`button`,draggable:a&&!g,onDragStart:e=>{a&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(Ul,r),l())},onDragEnd:u,onDragOver:e=>{a&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,C(`before`))},onDragLeave:()=>C(null),onDrop:e=>{a&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.stopPropagation(),C(null),d())},onClick:o,onMouseEnter:()=>x(!0),onMouseLeave:()=>x(!1),"aria-pressed":i,className:`group flex w-full items-center gap-2 rounded-md border bg-card px-2.5 py-2 text-left text-xs transition-colors hover:border-primary/40 ${i?`border-primary ring-1 ring-primary`:`border-border`} ${a&&!g?`cursor-grab active:cursor-grabbing`:``}`,children:[a?(0,Y.jsx)(En,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/50 group-hover:text-muted-foreground`}):(0,Y.jsx)(`span`,{className:`w-3.5`}),(0,Y.jsx)(p,{className:L(`h-3.5 w-3.5 shrink-0`,m.icon)}),g?(0,Y.jsx)(`input`,{autoFocus:!0,value:v,onChange:e=>y(e.target.value),onClick:e=>e.stopPropagation(),onBlur:()=>{_(!1);let n=v.trim();n&&n!==Jl(e,t)&&s(n)},onKeyDown:n=>{n.key===`Enter`?(n.preventDefault(),n.target.blur()):n.key===`Escape`&&(n.preventDefault(),y(Jl(e,t)),_(!1))},className:`flex-1 min-w-0 rounded border border-input bg-background px-1.5 py-0.5 text-xs outline-none focus:border-primary`}):(0,Y.jsx)(`span`,{className:`flex-1 min-w-0 truncate font-medium`,onDoubleClick:e=>{a&&(e.stopPropagation(),_(!0))},children:Jl(e,t)}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-medium`,m.badge),children:f}),h&&(0,Y.jsx)(`code`,{className:`ml-0 text-[10px] text-muted-foreground truncate max-w-[10rem]`,children:h}),a&&b&&!g&&(0,Y.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),c()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),c())},className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,"aria-label":`Remove nav item`,children:(0,Y.jsx)(lr,{className:`h-3 w-3`})})]})]})}function $l(e){return Array.isArray(e)?e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.label??e.title??e.name??e.path??``).trim();if(!t&&!e.children)return null;let n=e.path??e.href??e.route??e.url??void 0,r;e.object||e.objectName?r=`object`:e.page||e.pageName?r=`page`:e.dashboard?r=`dashboard`:e.report?r=`report`:typeof n==`string`&&/^https?:/i.test(n)?r=`link`:Array.isArray(e.children)&&e.children.length&&(r=`group`);let i=Array.isArray(e.children)?$l(e.children):void 0;return{label:t||`(unnamed)`,path:n,kind:r,children:i}}).filter(e=>e!==null):[]}function eu(e){switch(e){case`object`:return br;case`page`:return at;case`dashboard`:return Pt;case`report`:return Rt;default:return un}}function tu({name:e,draft:t,editing:n,selection:r,onSelectionChange:i,onPatch:a}){let o=String(t.name??e??``),s=t.label??o,c=t.landingRoute??t.landing??t.defaultRoute??`/`,{rootKey:l,navItems:u}=X.useMemo(()=>{let e=[[`nav`,t.nav],[`navigation`,t.navigation],[`tabs`,t.tabs],[`items`,t.items],[`menu`,t.menu]];for(let[t,n]of e)if(Array.isArray(n)&&n.length)return{rootKey:t,navItems:$l(n)};return{rootKey:null,navItems:[]}},[t]),d=l??`nav`,f=!!(n&&i),p=f&&!!a,m=r&&r.kind===`nav`?r.id:null,h=f?(e,t)=>i({kind:`nav`,id:e,label:t.label}):void 0,g=o?`/apps/${encodeURIComponent(o)}/`:null;return(0,Y.jsx)(Z,{hint:`app`,toolbar:g&&(0,Y.jsxs)(`a`,{href:g,target:`_blank`,rel:`noreferrer`,className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,title:`Open this app in a new tab`,children:[`Open `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]}),children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:String(s)}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono mt-0.5`,children:o}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[`Landing: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:String(c)})]})]}),f?(0,Y.jsx)(Xl,{draft:t,rootKey:d,onPatch:p?a:void 0,selection:r??null,onSelectionChange:i}):u.length===0?(0,Y.jsxs)(Ic,{children:[`No top-level nav items. Add `,(0,Y.jsx)(`code`,{children:`nav`}),` / `,(0,Y.jsx)(`code`,{children:`tabs`}),` entries in the Form tab to populate the app's navigation.`]}):(0,Y.jsx)(`div`,{className:`border rounded divide-y`,children:u.map((e,t)=>(0,Y.jsx)(nu,{item:e,appName:o,depth:0,path:`${l}[${t}]`,onSelect:h,selectedId:m},t))})]})})})}function nu({item:e,appName:t,depth:n,path:r,onSelect:i,selectedId:a}){let o=eu(e.kind),s=ru(t,e.path);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-xs hover:bg-accent/40 ${i?`cursor-pointer`:``} ${a===r?`bg-primary/5 ring-1 ring-primary`:``}`,style:{paddingLeft:`${12+n*16}px`},onClick:i?t=>{t.stopPropagation(),i(r,e)}:void 0,children:[(0,Y.jsx)(o,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium truncate`,children:e.label}),e.kind&&(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider opacity-60`,children:e.kind}),s&&(0,Y.jsxs)(`a`,{href:s,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`ml-auto font-mono text-[10px] text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,children:[e.path,` `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]})]}),e.children?.map((e,o)=>(0,Y.jsx)(nu,{item:e,appName:t,depth:n+1,path:`${r}.children[${o}]`,onSelect:i,selectedId:a},o))]})}function ru(e,t){if(!t)return null;if(/^https?:/i.test(t))return t;if(!e)return null;let n=t.startsWith(`/`)?t.slice(1):t;return`/apps/${encodeURIComponent(e)}/${n}`}function iu(e){let{type:t,locale:n}=e;switch(t){case`text`:case`password`:return(0,Y.jsx)(au,{...e,icon:t===`password`?(0,Y.jsx)(ut,{className:`h-3.5 w-3.5`}):void 0});case`email`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(wn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`name@example.com`});case`url`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`https://…`});case`phone`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(hn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`+1 555 …`});case`number`:case`currency`:case`percent`:case`autonumber`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(yn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`0`});case`date`:case`datetime`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(ct,{className:`h-3.5 w-3.5`}),placeholder:J(`designer.stub.pickDate`,n)});case`time`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(Dn,{className:`h-3.5 w-3.5`}),placeholder:`hh:mm`});case`textarea`:case`markdown`:case`html`:case`richtext`:case`json`:case`code`:return(0,Y.jsx)(ou,{...e,mono:t===`json`||t===`code`});case`boolean`:case`toggle`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(Yt,{disabled:!0}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.placeholder??J(`designer.stub.off`,n)})]});case`select`:case`radio`:return(0,Y.jsx)(su,{...e,single:!0});case`multiselect`:case`checkboxes`:case`tags`:return(0,Y.jsx)(su,{...e,single:!1});case`lookup`:case`master_detail`:case`tree`:return(0,Y.jsx)(cu,{...e});case`image`:case`avatar`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(gr,{className:`h-4 w-4`}),label:J(t===`avatar`?`designer.stub.uploadAvatar`:`designer.stub.uploadImage`,n)});case`file`:case`video`:case`audio`:case`signature`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(kn,{className:`h-4 w-4`}),label:q(`designer.stub.upload`,n,{type:t})});case`qrcode`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(kn,{className:`h-4 w-4`}),label:J(`designer.stub.qrcode`,n)});case`color`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-6 w-6 rounded border`,style:{background:`#3b82f6`}}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`#3b82f6`}),(0,Y.jsx)(Gn,{className:`h-3.5 w-3.5 text-muted-foreground`})]});case`rating`:return(0,Y.jsx)(`div`,{className:`flex items-center gap-0.5 h-8`,children:[0,1,2,3,4].map(e=>(0,Y.jsx)(cn,{className:`h-4 w-4 `+(e<3?`fill-amber-400 text-amber-400`:`text-muted-foreground/40`)},e))});case`slider`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 h-1.5 rounded bg-muted`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-2/5 rounded bg-primary`}),(0,Y.jsx)(`div`,{className:`absolute h-3 w-3 -top-[3px] left-[40%] rounded-full border-2 border-primary bg-background`})]}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`40`})]});case`progress`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`div`,{className:`relative flex-1 h-2 rounded bg-muted`,children:(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-3/5 rounded bg-emerald-500`})}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`60%`})]});case`location`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(it,{className:`h-3.5 w-3.5`}),placeholder:J(`designer.stub.latLng`,n)});case`address`:return(0,Y.jsx)(ou,{...e,placeholder:e.placeholder??`Street
|
|
10
|
+
`+` `.repeat(t));var Ms;(function(e){e.DEFAULT={allowTrailingComma:!1}})(Ms||={});function Ns(e,t=[],n=Ms.DEFAULT){let r={type:`array`,offset:-1,length:-1,children:[],parent:void 0};function i(e){r.type===`property`&&(r.length=e-r.offset,r=r.parent)}function a(e){return r.children.push(e),e}Fs(e,{onObjectBegin:e=>{r=a({type:`object`,offset:e,length:-1,parent:r,children:[]})},onObjectProperty:(e,t,n)=>{r=a({type:`property`,offset:t,length:-1,parent:r,children:[]}),r.children.push({type:`string`,value:e,offset:t,length:n,parent:r})},onObjectEnd:(e,t)=>{i(e+t),r.length=e+t-r.offset,r=r.parent,i(e+t)},onArrayBegin:(e,t)=>{r=a({type:`array`,offset:e,length:-1,parent:r,children:[]})},onArrayEnd:(e,t)=>{r.length=e+t-r.offset,r=r.parent,i(e+t)},onLiteralValue:(e,t,n)=>{a({type:Is(e),offset:t,length:n,parent:r,value:e}),i(t+n)},onSeparator:(e,t,n)=>{r.type===`property`&&(e===`:`?r.colonOffset=t:e===`,`&&i(t))},onError:(e,n,r)=>{t.push({error:e,offset:n,length:r})}},n);let o=r.children[0];return o&&delete o.parent,o}function Ps(e,t){if(!e)return;let n=e;for(let e of t)if(typeof e==`string`){if(n.type!==`object`||!Array.isArray(n.children))return;let t=!1;for(let r of n.children)if(Array.isArray(r.children)&&r.children[0].value===e&&r.children.length===2){n=r.children[1],t=!0;break}if(!t)return}else{let t=e;if(n.type!==`array`||t<0||!Array.isArray(n.children)||t>=n.children.length)return;n=n.children[t]}return n}function Fs(e,t,n=Ms.DEFAULT){let r=Es(e,!1),i=[],a=0;function o(e){return e?()=>a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function s(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter()):()=>!0}function c(e){return e?t=>a===0&&e(t,r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice()):()=>!0}function l(e){return e?()=>{a>0?a++:e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter(),()=>i.slice())===!1&&(a=1)}:()=>!0}function u(e){return e?()=>{a>0&&a--,a===0&&e(r.getTokenOffset(),r.getTokenLength(),r.getTokenStartLine(),r.getTokenStartCharacter())}:()=>!0}let d=l(t.onObjectBegin),f=c(t.onObjectProperty),p=u(t.onObjectEnd),m=l(t.onArrayBegin),h=u(t.onArrayEnd),g=c(t.onLiteralValue),_=s(t.onSeparator),v=o(t.onComment),y=s(t.onError),b=n&&n.disallowComments,x=n&&n.allowTrailingComma;function S(){for(;;){let e=r.scan();switch(r.getTokenError()){case 4:C(14);break;case 5:C(15);break;case 3:C(13);break;case 1:b||C(11);break;case 2:C(12);break;case 6:C(16);break}switch(e){case 12:case 13:b?C(10):v();break;case 16:C(1);break;case 15:case 14:break;default:return e}}}function C(e,t=[],n=[]){if(y(e),t.length+n.length>0){let e=r.getToken();for(;e!==17;){if(t.indexOf(e)!==-1){S();break}else if(n.indexOf(e)!==-1)break;e=S()}}}function w(e){let t=r.getTokenValue();return e?g(t):(f(t),i.push(t)),S(),!0}function T(){switch(r.getToken()){case 11:let e=r.getTokenValue(),t=Number(e);isNaN(t)&&(C(2),t=0),g(t);break;case 7:g(null);break;case 8:g(!0);break;case 9:g(!1);break;default:return!1}return S(),!0}function E(){return r.getToken()===10?(w(!1),r.getToken()===6?(_(`:`),S(),k()||C(4,[],[2,5])):C(5,[],[2,5]),i.pop(),!0):(C(3,[],[2,5]),!1)}function D(){d(),S();let e=!1;for(;r.getToken()!==2&&r.getToken()!==17;){if(r.getToken()===5){if(e||C(4,[],[]),_(`,`),S(),r.getToken()===2&&x)break}else e&&C(6,[],[]);E()||C(4,[],[2,5]),e=!0}return p(),r.getToken()===2?S():C(7,[2],[]),!0}function O(){m(),S();let e=!0,t=!1;for(;r.getToken()!==4&&r.getToken()!==17;){if(r.getToken()===5){if(t||C(4,[],[]),_(`,`),S(),r.getToken()===4&&x)break}else t&&C(6,[],[]);e?(i.push(0),e=!1):i[i.length-1]++,k()||C(4,[],[4,5]),t=!0}return h(),e||i.pop(),r.getToken()===4?S():C(8,[4],[]),!0}function k(){switch(r.getToken()){case 3:return O();case 1:return D();case 10:return w(!0);default:return T()}}return S(),r.getToken()===17?n.allowEmptyContent?!0:(C(4,[],[]),!1):k()?(r.getToken()!==17&&C(9,[],[]),!0):(C(4,[],[]),!1)}function Is(e){switch(typeof e){case`boolean`:return`boolean`;case`number`:return`number`;case`string`:return`string`;case`object`:return e?Array.isArray(e)?`array`:`object`:`null`;default:return`null`}}var Ls;(function(e){e[e.None=0]=`None`,e[e.UnexpectedEndOfComment=1]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=2]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=3]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=4]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=5]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=6]=`InvalidCharacter`})(Ls||={});var Rs;(function(e){e[e.OpenBraceToken=1]=`OpenBraceToken`,e[e.CloseBraceToken=2]=`CloseBraceToken`,e[e.OpenBracketToken=3]=`OpenBracketToken`,e[e.CloseBracketToken=4]=`CloseBracketToken`,e[e.CommaToken=5]=`CommaToken`,e[e.ColonToken=6]=`ColonToken`,e[e.NullKeyword=7]=`NullKeyword`,e[e.TrueKeyword=8]=`TrueKeyword`,e[e.FalseKeyword=9]=`FalseKeyword`,e[e.StringLiteral=10]=`StringLiteral`,e[e.NumericLiteral=11]=`NumericLiteral`,e[e.LineCommentTrivia=12]=`LineCommentTrivia`,e[e.BlockCommentTrivia=13]=`BlockCommentTrivia`,e[e.LineBreakTrivia=14]=`LineBreakTrivia`,e[e.Trivia=15]=`Trivia`,e[e.Unknown=16]=`Unknown`,e[e.EOF=17]=`EOF`})(Rs||={});var zs=Ns,Bs=Ps,Vs;(function(e){e[e.InvalidSymbol=1]=`InvalidSymbol`,e[e.InvalidNumberFormat=2]=`InvalidNumberFormat`,e[e.PropertyNameExpected=3]=`PropertyNameExpected`,e[e.ValueExpected=4]=`ValueExpected`,e[e.ColonExpected=5]=`ColonExpected`,e[e.CommaExpected=6]=`CommaExpected`,e[e.CloseBraceExpected=7]=`CloseBraceExpected`,e[e.CloseBracketExpected=8]=`CloseBracketExpected`,e[e.EndOfFileExpected=9]=`EndOfFileExpected`,e[e.InvalidCommentToken=10]=`InvalidCommentToken`,e[e.UnexpectedEndOfComment=11]=`UnexpectedEndOfComment`,e[e.UnexpectedEndOfString=12]=`UnexpectedEndOfString`,e[e.UnexpectedEndOfNumber=13]=`UnexpectedEndOfNumber`,e[e.InvalidUnicode=14]=`InvalidUnicode`,e[e.InvalidEscapeCharacter=15]=`InvalidEscapeCharacter`,e[e.InvalidCharacter=16]=`InvalidCharacter`})(Vs||={});var Hs=X.lazy(async()=>({default:(await o(()=>import(`./dist-D80kLFC3.js`),[],import.meta.url)).default}));function Us(e){try{return JSON.stringify(e??{},null,2)}catch{return`{}`}}function Ws(e){return e?e.split(`.`).map(e=>{let t=Number(e);return Number.isInteger(t)&&String(t)===e?t:e}):[]}function Gs({value:e,onChange:t,readOnly:n,issues:r,height:i=`60vh`,fallbackDelayMs:a=4e3}){let o=X.useMemo(()=>zi(),[]),[s,c]=X.useState(()=>Us(e)),[l,u]=X.useState(null),d=X.useRef(s),f=X.useRef(null),p=X.useRef(null),m=X.useRef(null),[h,g]=X.useState(!1);X.useEffect(()=>{if(h)return;let e=setTimeout(()=>{let e=m.current;(!e||!e.querySelector(`.view-line`))&&g(!0)},a);return()=>clearTimeout(e)},[h,a]);let[_,v]=X.useState(()=>typeof document>`u`?`light`:document.documentElement.classList.contains(`dark`)?`vs-dark`:`light`);X.useEffect(()=>{if(typeof document>`u`)return;let e=document.documentElement,t=new MutationObserver(()=>v(e.classList.contains(`dark`)?`vs-dark`:`light`));return t.observe(e,{attributes:!0,attributeFilter:[`class`]}),()=>t.disconnect()},[]);let y=X.useCallback(()=>{let e=f.current,t=p.current;if(!e||!t)return;let n=e.getModel();if(!n)return;if(!r||r.length===0){t.editor.setModelMarkers(n,`objectui-diagnostics`,[]);return}let i;try{i=zs(s)}catch{i=void 0}let a=r.map(e=>{let r=Ws(e.path),a=1,o=1,s=1,c=2,l=i?Bs(i,r):void 0;if(l){let e=n.getPositionAt(l.offset),t=n.getPositionAt(l.offset+l.length);a=e.lineNumber,o=e.column,s=t.lineNumber,c=t.column}return{severity:e.severity===`warning`?t.MarkerSeverity.Warning:t.MarkerSeverity.Error,message:e.path?`${e.path}: ${e.message}`:e.message,startLineNumber:a,startColumn:o,endLineNumber:s,endColumn:c,source:`metadata`}});t.editor.setModelMarkers(n,`objectui-diagnostics`,a)},[r,s]);X.useEffect(()=>{y()},[y]),X.useEffect(()=>{let t=Us(e);t!==d.current&&(c(t),d.current=t,u(null))},[e]);let b=e=>{let n=e??``;c(n);try{let e=JSON.parse(n);e&&typeof e==`object`&&!Array.isArray(e)?(u(null),d.current=n,t(e)):u(J(`engine.form.rootJsonObject`,o))}catch(e){u(e?.message??J(`engine.form.invalidJson`,o))}};return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Y.jsx)(`div`,{ref:m,"data-testid":`source-editor`,className:`border rounded overflow-hidden bg-background`,style:{height:typeof i==`number`?`${i}px`:i},children:h?(0,Y.jsx)(`textarea`,{value:s,onChange:e=>b(e.target.value),readOnly:n,spellCheck:!1,"aria-label":`JSON source`,className:`w-full h-full resize-none bg-background p-3 font-mono text-xs leading-relaxed outline-none`}):(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(Je,{className:`w-full h-full`}),children:(0,Y.jsx)(Hs,{value:s,language:`json`,theme:_,onChange:b,onMount:(e,t)=>{f.current=e,p.current=t,setTimeout(y,0)},options:{readOnly:n,minimap:{enabled:!1},fontSize:12,lineNumbers:`on`,scrollBeyondLastLine:!1,automaticLayout:!0,folding:!0,wordWrap:`on`,tabSize:2,renderLineHighlight:`line`,scrollbar:{verticalScrollbarSize:10,horizontalScrollbarSize:10}}})})}),l&&(0,Y.jsxs)(`div`,{className:`text-xs text-destructive flex items-start gap-1.5`,children:[(0,Y.jsx)(`span`,{"aria-hidden":!0,children:`⚠`}),(0,Y.jsx)(`span`,{children:l})]})]})}var Ks={object:async()=>(await o(async()=>{let{ObjectSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{ObjectSchema:e}},[],import.meta.url)).ObjectSchema,hook:async()=>(await o(async()=>{let{HookSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{HookSchema:e}},[],import.meta.url)).HookSchema,mapping:async()=>(await o(async()=>{let{MappingSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{MappingSchema:e}},[],import.meta.url)).MappingSchema,analytics_cube:async()=>(await o(async()=>{let{CubeSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.c);return{CubeSchema:e}},[],import.meta.url)).CubeSchema,view:async()=>(await o(async()=>{let{ViewSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ViewSchema:e}},[],import.meta.url)).ViewSchema,page:async()=>(await o(async()=>{let{PageSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{PageSchema:e}},[],import.meta.url)).PageSchema,app:async()=>(await o(async()=>{let{AppSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{AppSchema:e}},[],import.meta.url)).AppSchema,dashboard:async()=>(await o(async()=>{let{DashboardSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{DashboardSchema:e}},[],import.meta.url)).DashboardSchema,report:async()=>(await o(async()=>{let{ReportSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ReportSchema:e}},[],import.meta.url)).ReportSchema,action:async()=>(await o(async()=>{let{ActionSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ActionSchema:e}},[],import.meta.url)).ActionSchema,theme:async()=>(await o(async()=>{let{ThemeSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.g);return{ThemeSchema:e}},[],import.meta.url)).ThemeSchema,flow:async()=>(await o(async()=>{let{FlowSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.i);return{FlowSchema:e}},[],import.meta.url)).FlowSchema,webhook:async()=>(await o(async()=>{let{WebhookSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.i);return{WebhookSchema:e}},[],import.meta.url)).WebhookSchema,agent:async()=>(await o(async()=>{let{AgentSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{AgentSchema:e}},[],import.meta.url)).AgentSchema,tool:async()=>(await o(async()=>{let{ToolSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{ToolSchema:e}},[],import.meta.url)).ToolSchema,skill:async()=>(await o(async()=>{let{SkillSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.o);return{SkillSchema:e}},[],import.meta.url)).SkillSchema,email_template:async()=>(await o(async()=>{let{EmailTemplateSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.t);return{EmailTemplateSchema:e}},[],import.meta.url)).EmailTemplateSchema,job:async()=>(await o(async()=>{let{JobSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.t);return{JobSchema:e}},[],import.meta.url)).JobSchema,permission:async()=>(await o(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,profile:async()=>(await o(async()=>{let{PermissionSetSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PermissionSetSchema:e}},[],import.meta.url)).PermissionSetSchema,policy:async()=>(await o(async()=>{let{PolicySchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.n);return{PolicySchema:e}},[],import.meta.url)).PolicySchema,role:async()=>(await o(async()=>{let{RoleSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.r);return{RoleSchema:e}},[],import.meta.url)).RoleSchema,api:async()=>(await o(async()=>{let{ApiEndpointSchema:e}=await import(`./vendor-objectstack-BTQLr7T3.js`).then(e=>e.a);return{ApiEndpointSchema:e}},[],import.meta.url)).ApiEndpointSchema},qs=new Set([`approval`,`connector_action`]),Js=/^nodes\.(\d+)\.type$/;function Ys(e,t){let n=e?.nodes;if(!Array.isArray(n))return;let r=n[t];return typeof r?.type==`string`?r.type:void 0}var Xs=new Map;async function Zs(e){if(Xs.has(e))return Xs.get(e)??null;let t=Ks[e];if(!t)return Xs.set(e,null),null;try{let n=await t(),r=n&&typeof n.safeParse==`function`?n:null;return Xs.set(e,r),r}catch{return Xs.set(e,null),null}}function Qs(e){return e in Ks}async function $s(e,t,n){let r=await Zs(e);if(!r)return{ok:!0,issues:[]};let i=r.safeParse(t);if(i.success)return{ok:!0,issues:[]};let a=i.error?.issues??[],o=Array.isArray(n?.required)?new Set(n.required.map(e=>String(e))):void 0;if(o&&t&&typeof t==`object`&&!Array.isArray(t)){let e=t;a=a.filter(t=>{let n=t.path??[];if(n.length!==1)return!0;let r=String(n[0]);return!((e[r]===void 0||e[r]===null)&&!o.has(r))})}return e===`flow`&&(a=a.filter(e=>{let n=(e.path??[]).map(e=>String(e)).join(`.`),r=Js.exec(n);if(!r)return!0;let i=Ys(t,Number(r[1]));return!(i&&qs.has(i))})),a.length===0?{ok:!0,issues:[]}:{ok:!1,issues:a.map(e=>({path:(e.path??[]).map(e=>String(e)).join(`.`),message:e.message}))}}function ec(e,t,n){let r=t.split(`.`);if(r.length<=1)return e;let i=[e],a=nc(n)?.[r[0]];for(let e=1;e<r.length;e++){let t=r[e];if(/^\d+$/.test(t)){let e=Number(t),n=Array.isArray(a)?a[e]:void 0;i.push(tc(n)??`#${e+1}`),a=n}else i.push(t),a=nc(a)?.[t]}return i.join(` → `)}function tc(e){let t=nc(e);if(t)for(let e of[`id`,`name`,`key`,`title`,`label`]){let n=t[e];if(typeof n==`string`&&n.trim())return n;let r=nc(n);if(r){let e=r.defaultValue??r.key;if(typeof e==`string`&&e.trim())return e}}}function nc(e){return e&&typeof e==`object`?e:void 0}function rc(e,t,n){return e.createBuildBody?e.createBuildBody(t):{...n??e.createDefaults??{},...t}}var ic=_n,ac=new Set([`object`,`report`,`dataset`]),oc={object:[`fields`,`fieldGroups`]};function sc(e){if(!e||typeof e!=`object`)return null;let t=e;if(!(`item`in t))return null;let n=t.item;return!n||typeof n!=`object`?null:Object.keys(n).length>0?n:null}function cc(e){return e.loadFailed?!1:e.hasDiag||e.hasClientValidator}function lc({type:e,name:t,createMode:n=!1,embedded:r=!1}){let a=i(),o=e??a.type??``,s=t??a.name??``,c=Eo(o);if(c?.EditPage&&!n){let e=c.EditPage;return(0,Y.jsx)(e,{type:o,name:s})}if(c?.CreatePage&&n){let e=c.CreatePage;return(0,Y.jsx)(e,{type:o})}return(0,Y.jsx)(uc,{type:o,name:s,createMode:n,embedded:r})}function uc({type:e,name:t,createMode:n,embedded:r}){let i=u(),[a,o]=s(),c=a.get(`package`)??void 0,l=mi(),{entries:d}=Qr(l),f=d.find(t=>t.type===e),p=Oo(e,f),m=(n&&p.createSchema?p.createSchema:f?.schema)??p.defaultSchema,h=X.useMemo(()=>zi(),[]),[g,_]=X.useState(null),v=p.identityField??`name`,[y,b]=X.useState(()=>n?{...p.createDefaults??{},[v]:``}:{}),[x,S]=X.useState(null),[C,w]=X.useState(!n),[T,E]=X.useState(!1),[O,k]=X.useState(null),[A,j]=X.useState(!1),[M,ee]=X.useState([]),[te,ne]=X.useState(!1),N=X.useCallback(e=>{b(t=>{let n=typeof e==`function`?e(t):e,r=new Set,i=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of i)Object.is(t?.[e],n?.[e])||r.add(e);return r.size>0&&(ne(!0),ee(e=>e.filter(e=>{let t=(e.path??``).split(`.`)[0];return!r.has(t)}))),n})},[]),[re,P]=X.useState(null),[ae,F]=X.useState(null),oe=X.useCallback(e=>{N(t=>({...t,...e}))},[N]),{markTouched:se}=ts({rules:p.createDerive,draft:y,onPatch:oe,enabled:!!n}),ce=X.useMemo(()=>{if(n)return p.createFields&&p.createFields.length>0?p.createFields:ns(m?.properties??void 0,m?.required??void 0)},[n,p.createFields,m]),le=X.useMemo(()=>{let t=oc[e]??[];if(!n||!ce)return t.length===0?p.hiddenFields:Array.from(new Set([...p.hiddenFields??[],...t]));let r=m?.properties??{},i=new Set(ce),a=Object.keys(r).filter(e=>!i.has(e));if(p.hiddenFields)for(let e of p.hiddenFields)a.includes(e)||a.push(e);for(let e of t)a.includes(e)||a.push(e);return a},[n,ce,m,p.hiddenFields,e]),de=X.useMemo(()=>n&&ce?ce:p.fieldOrder,[n,ce,p.fieldOrder]),pe=X.useCallback(e=>{if(n){let t=y,n=typeof e==`function`?e(t):e,r=new Set([...Object.keys(t??{}),...Object.keys(n??{})]);for(let e of r)Object.is(t?.[e],n?.[e])||se(e)}N(e)},[n,y,N,se]);X.useEffect(()=>{if(!Qs(e))return;let t=!1,n=window.setTimeout(()=>{$s(e,y,f?.schema).then(e=>{t||ee(e.issues)})},200);return()=>{t=!0,window.clearTimeout(n)}},[e,y,f?.schema]);let he=X.useMemo(()=>n&&!te?[]:M,[n,te,M]),ge=X.useMemo(()=>{let t=g?._diagnostics,n=Qs(e)?he.map(e=>({path:e.path,message:ti(e.message,h)})):(t?.errors??[]).map(e=>({path:e.path,message:ti(e.message,h)})),r=(t?.warnings??[]).map(e=>({path:e.path,message:ti(e.message,h)}));return[...n.map(e=>({path:e.path||void 0,message:e.message,severity:`error`})),...r.map(e=>({path:e.path||void 0,message:e.message,severity:`warning`}))]},[g,he,e,h]),[_e,ye]=X.useState(!1),[be,xe]=X.useState(!1),[Se,Ce]=X.useState(0),[we,De]=X.useState(!!n),[Oe,je]=X.useState(null);X.useEffect(()=>{je(null)},[e,t]),X.useEffect(()=>{we||je(null)},[we]);let Pe=X.useRef(null),[Fe,Ie]=X.useState(null),[Le,ze]=X.useState(()=>{if(typeof window>`u`)return!0;try{let e=window.localStorage.getItem(`metadata-admin:autosave`);return e===null?!0:e===`1`}catch{return!0}});X.useEffect(()=>{try{window.localStorage.setItem(`metadata-admin:autosave`,Le?`1`:`0`)}catch{}},[Le]);let Be=X.useRef(null),[Ue,We]=X.useState([]),[Ge,Ke]=X.useState(!0);X.useEffect(()=>{let e=!1;return(async()=>{try{let t=await l.list(`object`);if(e)return;We(t.map(e=>e?.name).filter(e=>!!e).sort())}catch{e||We([])}finally{e||Ke(!1)}})(),()=>{e=!0}},[l]);let qe=y?.interfaceConfig?.source||y?.object||y?.objectName,[Je,Xe]=X.useState([]),[Ze,Qe]=X.useState(!1),[$e,et]=X.useState([]);X.useEffect(()=>{let e=!1;if(!qe){Xe([]),et([]);return}return Qe(!0),(async()=>{try{let t=await l.get(`object`,qe);if(e)return;let n=t?.fields;Xe((Array.isArray(n)?n.map(e=>({name:e?.name,label:e?.label,type:e?.type})):n&&typeof n==`object`?Object.entries(n).map(([e,t])=>({name:e,label:t?.label,type:t?.type})):[]).filter(e=>!!e.name));let r=t?.actions,i=Array.isArray(r)?r.map(e=>({name:e?.name,label:e?.label,locations:e?.locations})).filter(e=>!!e.name):[];e||et(i)}catch{e||(Xe([]),et([]))}finally{e||Qe(!1)}})(),()=>{e=!0}},[l,qe]);let[L,tt]=X.useState([]),[rt,it]=X.useState(!1);X.useEffect(()=>{let e=!1;if(!qe){tt([]);return}return it(!0),(async()=>{try{let t=await l.list(`view`);if(e)return;let n=(t||[]).filter(e=>(e?.objectName??e?.object??e?.object_name)===qe),r=new Set;tt(n.map(e=>({name:e?.name,label:e?.label||void 0})).filter(e=>!!e.name&&!r.has(e.name)&&r.add(e.name)))}catch{e||tt([])}finally{e||it(!1)}})(),()=>{e=!0}},[l,qe]);let at=X.useMemo(()=>({objectNames:Ue,objectsLoading:Ge,objectFields:Je,objectFieldsLoading:Ze,objectViews:L,objectViewsLoading:rt,objectActions:$e}),[Ue,Ge,Je,Ze,L,rt,$e]);X.useEffect(()=>{if(n){w(!1);return}let r=!1;return w(!0),k(null),j(!1),(async()=>{try{let n=c?{packageId:c}:{},[i,a]=await Promise.all([l.layered(e,t,n),l.getDraft(e,t,n).catch(()=>null)]);if(r)return;_(i);let o=i?._diagnostics;o&&o.valid===!1&&Array.isArray(o.errors)?ee(o.errors.map(e=>({path:e.path||``,message:e.message}))):ee([]);let s=sc(a),u=i.effective??i.code??{},d=s?{...u,...s}:u,f=p.toDraft?p.toDraft(d):d;b(f),Pe.current=f,ye(!!s),w(!1)}catch(n){r||(j(!0),k(q(`engine.edit.loadFailed`,h,{type:e,name:t??``,message:n?.message??String(n)})),w(!1))}})(),()=>{r=!0}},[l,e,t,c,n,Se,h]);let[ot,st]=X.useState(!1);async function ct(){if(!(x!=null||ot)){st(!0);try{S(await l.references(e,t))}catch(e){S([]),console.error(`references() failed`,e)}finally{st(!1)}}}let[dt,ft]=X.useState(null),pt=X.useMemo(()=>!n&&!r&&Do(e).length>0,[e,n,r]),ht=X.useRef(null),[gt,_t]=X.useState(null),vt=a.get(`review`),yt=X.useRef(!1);X.useEffect(()=>{if(!(vt!==`1`||n)){if(!yt.current){yt.current=!0,Ce(e=>e+1);return}if(!C){_e&&_t(`review`);let e=new URLSearchParams(a);e.delete(`review`),o(e,{replace:!0}),yt.current=!1}}},[vt,n,C,_e]);let[bt,St]=X.useState(`properties`);X.useEffect(()=>{if(gt===`references`&&ct(),typeof window<`u`&&!r){let e=new URL(window.location.href);gt?e.searchParams.set(`tab`,gt):e.searchParams.delete(`tab`),window.history.replaceState({},``,e.toString())}},[gt,r]);let Ct=`metadata-edit:inspector-collapsed`,Tt=`metadata-edit:inspector-size`,[Et,Dt]=X.useState(()=>typeof window>`u`?!1:window.localStorage.getItem(Ct)===`1`),kt=X.useRef(38);X.useEffect(()=>{if(typeof window>`u`)return;let e=Number(window.localStorage.getItem(Tt));Number.isFinite(e)&&e>=22&&e<=80&&(kt.current=e)},[]);let At=X.useRef(null),jt=X.useCallback(()=>{Dt(e=>{let t=!e;return typeof window<`u`&&window.localStorage.setItem(Ct,t?`1`:`0`),t})},[]);X.useEffect(()=>{let e=At.current;if(e)if(Et)e.resize?.(`0%`);else{let t=kt.current||38;e.resize?.(`${t}%`)}},[Et]);let[Nt,Pt]=X.useState(!1),[Ft,It]=X.useState(!1);X.useEffect(()=>{if(typeof document>`u`||!Ft)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}},[Ft]),X.useEffect(()=>{if(typeof window>`u`||!Ft)return;function e(e){e.key===`Escape`&&(e.preventDefault(),It(!1))}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Ft]);let Lt=X.useRef(null);X.useEffect(()=>{Lt.current=null},[e,t]),X.useEffect(()=>{if(n||r||C)return;let i=`${e}/${t??``}`;Lt.current!==i&&ys(e)&&(g?.code!=null&&g.code?._packageId!==`sys_metadata`?f?.allowOrgOverride:f?.allowOrgOverride||f?.allowRuntimeCreate)&&(Lt.current=i,De(!0))},[e,t,n,r,C,f,g]),X.useEffect(()=>{if(typeof window>`u`||r)return;function e(e){if(!(e.metaKey||e.ctrlKey)||e.shiftKey||e.altKey||e.key!==`\\`)return;let t=e.target;t&&(t.tagName===`TEXTAREA`||t.isContentEditable)||(e.preventDefault(),jt())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[r,jt]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URLSearchParams(window.location.search),t=e.get(`tab`);(t===`layers`||t===`references`||t===`related`||t===`audit`)&&_t(t),ht.current=t;let n=e.get(`open`);if(n&&n.includes(`:`)){let[e,t]=n.split(`:`,2);e&&t&&ft({kind:`metadata`,type:e,name:t})}},[]),X.useEffect(()=>{if(typeof window>`u`||r)return;let e=new URL(window.location.href);dt?.kind===`metadata`?e.searchParams.set(`open`,`${dt.type}:${dt.name}`):e.searchParams.delete(`open`),window.history.replaceState({},``,e.toString())},[dt,r]);function Rt(e){let t=e.split(`.`)[0];return t?ec((()=>{let e=n&&p.createSchema?void 0:f?.form,r=Array.isArray(e?.sections)?e.sections:[];for(let e of r){let n=Array.isArray(e?.fields)?e.fields:[];for(let e of n)if(typeof e==`string`){if(e===t)return e}else if(e?.field===t)return String(e.label??t)}let i=m?.properties??{};return String(i[t]?.title??t)})(),e,y):e}async function R(r){E(!0),k(null),ee([]);try{let o=f?.createSeed,s=n?rc(p,y,o):p.fromDraft?p.fromDraft(y):y;if(n&&p.createSeed)try{let e=await p.createSeed(y,{client:l});e&&typeof e==`object`&&(s={...s,...e})}catch{}let u=String(s[v]??y[v]??t),d=n?{...s,[v]:u}:s;if(!u){k(J(`engine.validation.nameRequired`,h)),E(!1);return}let m=(()=>{try{let e=new URLSearchParams(window.location.search).get(`package`);return e&&e!==`all`?e:void 0}catch{return}})();await l.save(e,u,d,{force:r,mode:`draft`,...m?{packageId:m}:{}});let g=c?{packageId:c}:{},[x,S]=await Promise.all([l.layered(e,u,g),l.getDraft(e,u,g).catch(()=>null)]);_(x);let C=sc(S);ye(!!C);let w=x.effective??d,T=C?{...w,...C}:w,D=p.toDraft?p.toDraft(T):T;b(D),Pe.current=D,Ie(new Date),Be.current=JSON.stringify(D),P(null),F(null);let O=!n&&!!ys(e);if(!n&&!O&&De(!1),n){let e=a.toString();i(`../${encodeURIComponent(u)}${e?`?${e}`:``}`,{relative:`path`})}}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];P(Array.isArray(t)?t:[]),F(y)}else if(e?.code===`writable_package_required`)k(J(`engine.package.writableRequired`,h));else if(e?.status===422||e?.code===`invalid_metadata`||e?.code===`invalid_payload`){let t=e?.body?.issues??[],n=(Array.isArray(t)?t:[]).map(e=>({path:Array.isArray(e.path)?e.path.join(`.`):String(e.path??``),message:ti(String(e.message??`Invalid`),h)})),r=String(e?.body?.error??e?.message??``);if(n.length===0&&r){let e=r.match(/failed spec validation:\s*(.+?):\s*(.+)$/);n=e?[{path:e[1].trim(),message:ti(e[2].trim(),h)}]:[{path:``,message:ti(r,h)}]}ee(n),n.length===1&&!n[0].path?k(n[0].message):n.length===1?k(`${Rt(n[0].path)}: ${n[0].message}`):k(q(`engine.validation.failed`,h,{count:n.length}))}else k(e?.message??String(e))}finally{E(!1)}}async function zt(){let r=!n&&g?.code!=null;if(confirm(q(r?`engine.edit.resetConfirm`:`engine.edit.deleteConfirm`,h,{type:e,name:t??``}))){E(!0),k(null);try{if(await l.reset(e,t),r){let n=await l.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),Pe.current=r,ys(e)?Lt.current=null:De(!1)}else i(`../`,{relative:`path`})}catch(e){k(e?.message??String(e))}finally{E(!1)}}}async function Bt(){xe(!0),k(null);try{await l.publish(e,t);let[n,r]=await Promise.all([l.layered(e,t),l.getDraft(e,t).catch(()=>null)]);_(n);let i=sc(r);ye(!!i);let a=n.effective??y,o=i?{...a,...i}:a;b(o),Pe.current=o}catch(e){k(e?.message??String(e))}finally{xe(!1)}}async function Ht(){if(confirm(q(`engine.edit.discardDraftConfirm`,h,{type:e,name:t??``}))){E(!0),k(null);try{await l.reset(e,t,{state:`draft`});let n=await l.layered(e,t);_(n);let r=n.effective??n.code??{};b(r),Pe.current=r,ye(!1)}catch(e){k(e?.message??String(e))}finally{E(!1)}}}let Ut=X.useMemo(()=>{if(n)return Object.keys(y).length>0;let e=Pe.current;if(!e)return!1;try{return JSON.stringify(y)!==JSON.stringify(e)}catch{return!1}},[y,n]),Wt=!n&&g?.code!=null&&g.code?._packageId!==`sys_metadata`,Gt=g?.editable!==!1,Kt=g?.deletable!==!1,Jt=g?.resettable!==!1,Yt=g?.lockReason,Zt=g?.lock&&g.lock!==`none`,Qt=(n?!!(f?.allowOrgOverride||f?.allowRuntimeCreate):Wt?!!f?.allowOrgOverride:!!(f?.allowOrgOverride||f?.allowRuntimeCreate))&&(n||Gt),$t=!Qt&&!n,en=X.useRef(R);if(X.useEffect(()=>{en.current=R}),X.useEffect(()=>{if(!Le||n||$t||!we||!Ut||T)return;let e;try{e=JSON.stringify(y)}catch{return}if(e===Be.current)return;let t=window.setTimeout(()=>{Be.current=e,en.current(!1)},1500);return()=>window.clearTimeout(t)},[y,Ut,we,T,n,$t,Le]),X.useEffect(()=>{let e=e=>{if((e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`s`){if(!Qt||$t||!we&&!n)return;e.preventDefault(),!T&&(n||Ut)&&en.current(!1)}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[Qt,$t,we,n,T,Ut]),X.useEffect(()=>{if(!Ut)return;let e=e=>{e.preventDefault(),e.returnValue=``};return window.addEventListener(`beforeunload`,e),()=>window.removeEventListener(`beforeunload`,e)},[Ut]),X.useEffect(()=>{if(!Ut)return;let e=e=>{if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey)return;let t=e.target?.closest?.(`a[href]`);if(t&&!(t.target&&t.target!==`_self`)&&!t.hasAttribute(`download`)){try{let e=new URL(t.href,window.location.href);if(e.origin!==window.location.origin||e.pathname===window.location.pathname)return}catch{return}confirm(J(`engine.edit.unsavedLeaveConfirm`,h))||(e.preventDefault(),e.stopPropagation())}};return document.addEventListener(`click`,e,!0),()=>document.removeEventListener(`click`,e,!0)},[Ut,h]),Ur(X.useMemo(()=>{if(r)return null;let n=String(y.name??t??``);if(!n)return null;let i={type:e,name:n,label:typeof y.label==`string`?y.label:void 0};return e===`object`&&(i.fields=ki(y.fields).entries.slice(0,60).map(e=>({name:e.name,type:typeof e.def.type==`string`?e.def.type:void 0,label:typeof e.def.label==`string`?e.def.label:void 0,required:!!e.def.required||void 0}))),i},[r,e,t,y])),C)return(0,Y.jsx)(yo,{entry:f,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading `,e,`/`,t,`…`]})});let tn=$t&&Wt&&!!f?.allowRuntimeCreate,nn=ac.has(e),rn=!r&&(!n||nn)?ys(e):void 0,an=Ss(e),on=Ts(e);function cn(){Pe.current&&b(Pe.current),ee([]),k(null),De(!1)}let ln=$t||!we&&!n,un=(0,Y.jsxs)(Y.Fragment,{children:[!n&&(0,Y.jsx)(So,{entry:f,location:`record_header`,recordId:t,onAfter:()=>Ce(e=>e+1)}),(!n||pt)&&(0,Y.jsxs)(`div`,{className:`flex items-center rounded-md border bg-background p-0.5`,children:[!n&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`layers`),title:J(`engine.edit.layers`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Vt,{className:`h-3.5 w-3.5`}),g?.overlay&&(()=>{let e=zo(g.code,g.effective);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-emerald-600 text-emerald-50 text-[9px] leading-[14px] text-center font-medium`,title:J(`engine.layers.diff`,h),children:e}):null})()]}),!n&&_e&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`review`),title:J(`designer.draftReview.title`,h),className:`h-7 w-7 p-0 relative`,"data-testid":`resource-review-trigger`,children:[(0,Y.jsx)(Ir,{className:`h-3.5 w-3.5`}),(()=>{let e=Jo(g?.effective??null,y);return e>0?(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-amber-500 text-amber-50 text-[9px] leading-[14px] text-center font-medium`,title:q(`designer.draftReview.badge`,h,{n:e}),children:e}):null})()]}),!n&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`references`),title:J(`engine.edit.references`,h),className:`h-7 w-7 p-0 relative`,children:[(0,Y.jsx)(Ve,{className:`h-3.5 w-3.5`}),x&&x.length>0&&(0,Y.jsx)(`span`,{className:`absolute -top-1 -right-1 min-w-[14px] h-[14px] px-1 rounded-full bg-muted text-foreground text-[9px] leading-[14px] text-center font-medium border`,children:x.length})]}),pt&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`related`),title:J(`engine.edit.related`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(Xt,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`history`),title:J(`engine.edit.history`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(fn,{className:`h-3.5 w-3.5`})}),!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_t(`audit`),title:J(`engine.edit.auditTab`,h),className:`h-7 w-7 p-0`,children:(0,Y.jsx)(mt,{className:`h-3.5 w-3.5`})})]}),!n&&Qt&&g?.overlay&&(Wt?Jt:Kt)&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:zt,disabled:T,title:J(Wt?`engine.edit.reset`:`engine.edit.delete`,h),className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive`,children:Wt?(0,Y.jsx)(Ne,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})}),Qt&&!n&&!we&&!rn&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>De(!0),className:`h-7`,children:[(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.edit.edit`,h)]}),Qt&&(we||n)&&(0,Y.jsx)(fc,{saving:T,isDirty:Ut,autoSaveEnabled:Le,lastSavedAt:Fe,createMode:!!n,locale:h}),Qt&&(we||n)&&!n&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>ze(e=>!e),className:`h-7 w-7 p-0 text-muted-foreground`,title:J(Le?`engine.edit.autoSaveOn`:`engine.edit.autoSaveOff`,h),children:Le?(0,Y.jsx)(ve,{className:`h-3.5 w-3.5 text-emerald-600`}):(0,Y.jsx)(fe,{className:`h-3.5 w-3.5`})}),Qt&&!n&&we&&!rn&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:cn,disabled:T,className:`h-7 w-7 p-0`,title:J(`engine.cancel`,h),children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})}),Qt&&(we||n)&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>R(!1),disabled:T||!n&&!Ut,className:`h-7 w-7 p-0 relative`,title:T?J(`engine.edit.saving`,h):!n&&!Ut?J(`engine.edit.noChanges`,h):`${J(`engine.edit.save`,h)} (⌘S)`,children:[T?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(In,{className:`h-3.5 w-3.5`}),Ut&&!T&&(0,Y.jsx)(`span`,{"aria-hidden":!0,className:`absolute -top-0.5 -right-0.5 inline-block h-2 w-2 rounded-full bg-amber-300 ring-2 ring-background`})]}),Qt&&!n&&_e&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:Ht,disabled:T||be,className:`h-7 w-7 p-0 text-muted-foreground`,title:J(`engine.edit.discardDraft`,h),children:(0,Y.jsx)(Ae,{className:`h-3.5 w-3.5`})}),Qt&&!n&&_e&&(0,Y.jsx)(H,{size:`sm`,onClick:Bt,disabled:T||be||Ut,className:`h-7 px-2 relative bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,title:J(Ut?`engine.edit.publishBlockedDirty`:`engine.edit.publish`,h),children:be?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(ue,{className:`h-3.5 w-3.5 mr-1`}),(0,Y.jsx)(`span`,{className:`text-xs`,children:J(`engine.edit.publish`,h)})]})})]});return(0,Y.jsxs)(yo,{entry:f??{type:e,label:e},itemName:n?`(new)`:t,subtitle:n?J(`engine.edit.createNew`,h):void 0,actions:rn?null:un,children:[(0,Y.jsxs)(`div`,{className:rn?`flex h-full min-h-0 flex-col`:`p-6 space-y-6 max-w-7xl`,children:[(O||$t||_e||Zt)&&(0,Y.jsxs)(`div`,{className:rn?`px-6 pt-4 space-y-3`:`space-y-3`,children:[O&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/5`,children:O}),Zt&&(0,Y.jsxs)(`div`,{className:`text-xs text-amber-900 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-2.5`,children:[(0,Y.jsx)(ut,{className:`h-3.5 w-3.5 mt-0.5 shrink-0 opacity-80`}),(0,Y.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,Y.jsxs)(`div`,{className:`font-medium`,children:[g?.lock===`full`&&J(`engine.edit.lockFull`,h),g?.lock===`no-overlay`&&J(`engine.edit.lockNoOverlay`,h),g?.lock===`no-delete`&&J(`engine.edit.lockNoDelete`,h)]}),Yt&&(0,Y.jsx)(`div`,{className:`mt-0.5 opacity-90`,children:Yt}),g?.lockDocsUrl&&(0,Y.jsxs)(`a`,{href:g.lockDocsUrl,target:`_blank`,rel:`noopener noreferrer`,className:`mt-1 inline-flex items-center gap-1 text-amber-800 underline hover:text-amber-900 dark:text-amber-200 dark:hover:text-amber-100`,children:[h===`zh-CN`?`查看文档`:`View docs`,` →`]}),g?.packageId&&(0,Y.jsx)(`div`,{className:`mt-0.5 text-amber-700 dark:text-amber-300/80`,children:(0,Y.jsxs)(`code`,{className:`font-mono`,children:[g.packageId,g.packageVersion?`@${g.packageVersion}`:``]})})]}),tn&&(0,Y.jsx)(H,{size:`sm`,variant:`outline`,className:`shrink-0 h-7 bg-background/60`,onClick:()=>i(`../new`,{relative:`path`}),children:J(`engine.list.create`,h)})]}),_e&&!n&&(0,Y.jsxs)(`div`,{className:`text-xs text-emerald-900 border border-emerald-300 bg-emerald-50 rounded p-3 dark:text-emerald-200 dark:border-emerald-700/50 dark:bg-emerald-950/30 flex items-center gap-3`,children:[(0,Y.jsx)(ue,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:J(`engine.edit.draftPending`,h)}),Qt&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{size:`sm`,variant:`ghost`,onClick:Ht,disabled:T||be,className:`h-7`,children:J(`engine.edit.discardDraft`,h)}),(0,Y.jsx)(H,{size:`sm`,onClick:Bt,disabled:T||be||Ut,className:`h-7 bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,children:be?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):J(`engine.edit.publish`,h)})]})]}),$t&&!Zt&&(0,Y.jsxs)(`div`,{"data-testid":`readonly-banner`,className:`text-xs text-amber-800 border border-amber-300/70 bg-amber-50/70 rounded-md px-3 py-2.5 dark:text-amber-200 dark:border-amber-700/40 dark:bg-amber-950/20 flex items-start gap-3`,children:[(0,Y.jsx)(`div`,{className:`flex-1`,children:tn?J(`engine.edit.artifactLockedBanner`,h).split(/(\{type\})/).map((t,n)=>t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):(0,Y.jsx)(X.Fragment,{children:t},n)):J(`engine.edit.readOnlyTypeBanner`,h).split(/(\{flag\}|\{type\}|\{override\})/).map((t,n)=>t===`{flag}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`OBJECTSTACK_METADATA_WRITABLE`},n):t===`{type}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:e},n):t===`{override}`?(0,Y.jsx)(`code`,{className:`font-mono`,children:`allowOrgOverride`},n):(0,Y.jsx)(X.Fragment,{children:t},n))}),tn&&(0,Y.jsx)(H,{size:`sm`,variant:`outline`,className:`shrink-0`,onClick:()=>i(`../new`,{relative:`path`}),children:J(`engine.list.create`,h)})]})]}),(0,Y.jsx)(`div`,{className:rn?`flex w-full flex-1 min-h-0 flex-col`:`w-full`,children:(0,Y.jsxs)(`div`,{className:rn?`mt-2 flex-1 min-h-0 flex flex-col px-6 pb-4`:`mt-4 space-y-3`,children:[!rn&&ln&&!$t&&Qt&&!n&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-3 text-xs text-muted-foreground border rounded p-2.5 bg-muted/30`,children:[(0,Y.jsx)(`span`,{children:J(`engine.edit.readOnlyBanner`,h).split(/\{edit\}/).map((e,t,n)=>(0,Y.jsxs)(X.Fragment,{children:[e,t<n.length-1&&(0,Y.jsx)(`strong`,{children:J(`engine.edit.edit`,h)})]},t))}),(0,Y.jsxs)(H,{size:`sm`,variant:`outline`,onClick:()=>De(!0),children:[(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.edit.edit`,h)]})]}),(()=>{let t=g?._diagnostics,r=Qs(e)?M.map(e=>({path:e.path,message:ti(e.message,h)})):(t?.errors??[]).map(e=>({...e,message:ti(e.message,h)})),i=Qs(e)?r.length===0:t?.valid!==!1;if(n&&!te||!cc({loadFailed:A,hasDiag:!!t,hasClientValidator:Qs(e)}))return null;let a=r,o=t?.warnings??[],s=!i&&a.length>0,c=o.length>0;if(!s&&!c)return null;let l=(e,t)=>{let n=t.slice(0,3),r=Math.max(0,t.length-n.length),i=e===`error`?`border-destructive/40 bg-destructive/[0.06] text-destructive`:`border-amber-500/40 bg-amber-500/[0.08] text-amber-800 dark:text-amber-200`,a=e===`error`?`engine.edit.diagnostics.title`:`engine.edit.diagnostics.warnTitle`;return(0,Y.jsxs)(`div`,{"data-testid":e===`error`?`metadata-validation-banner`:void 0,className:`flex items-start gap-2 text-xs border rounded p-2.5 ${i}`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:q(a,h,{count:t.length})}),(0,Y.jsxs)(`ul`,{className:`mt-1 space-y-0.5 font-mono text-[11px]`,children:[n.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`opacity-70`,children:e.path?Rt(e.path):`(root)`}),`: `,e.message]},t)),r>0&&(0,Y.jsx)(`li`,{className:`opacity-70`,children:q(`engine.edit.diagnostics.more`,h,{count:r})})]})]})]},e)};return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[s&&l(`error`,a),c&&l(`warning`,o)]})})(),rn?(0,Y.jsx)(`div`,{className:Ft?`fixed inset-0 z-50 bg-background flex flex-col p-3`:`relative flex-1 min-h-0 flex`,children:(0,Y.jsxs)(ic,{direction:`horizontal`,className:`flex-1 min-h-0 rounded-md border bg-background overflow-hidden`,id:`metadata-edit-${e}`,children:[(0,Y.jsx)(D,{defaultSize:62,minSize:30,children:(0,Y.jsxs)(`div`,{className:`relative h-full flex flex-col`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b bg-background/95 backdrop-blur px-3 py-2 sticky top-0 z-10`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1`,children:Qt&&(0,Y.jsxs)(`div`,{role:`tablist`,"aria-label":J(`engine.edit.designer`,h),className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":!Nt,onClick:()=>Pt(!1),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(Nt?`text-muted-foreground hover:text-foreground`:`bg-background shadow-sm text-foreground`),title:J(`engine.edit.designMode`,h),children:[(0,Y.jsx)(jr,{className:`h-3.5 w-3.5`}),J(`engine.edit.designMode`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":Nt,onClick:()=>Pt(!0),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(Nt?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.previewMode`,h),children:[(0,Y.jsx)(Ee,{className:`h-3.5 w-3.5`}),J(`engine.edit.previewMode`,h)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[un,(0,Y.jsx)(`span`,{className:`mx-1 h-5 w-px bg-border`,"aria-hidden":!0}),rn&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:jt,className:`h-7 w-7 p-0`,title:J(Et?`engine.edit.showInspector`:`engine.edit.hideInspector`,h)+` (⌘\\)`,children:Et?(0,Y.jsx)(sn,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(xr,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>It(e=>!e),className:`h-7 w-7 p-0`,title:J(Ft?`engine.edit.exitFullscreen`:`engine.edit.fullscreen`,h),children:Ft?(0,Y.jsx)(me,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Ye,{className:`h-3.5 w-3.5`})})]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4 bg-[radial-gradient(circle_at_1px_1px,theme(colors.border)_1px,transparent_0)] [background-size:16px_16px] bg-muted/30`,children:(0,Y.jsx)(rn,{type:e,name:t,draft:y,baseline:n?void 0:g?.effective??void 0,editing:we&&!Nt,selection:Nt?null:Oe,onSelectionChange:je,locale:h,diagnostics:ge,onPatch:e=>N(t=>({...t,...e}))})})]})}),(0,Y.jsx)(lt,{withHandle:!0,className:Et?`hidden`:`w-1.5 bg-border/40 hover:bg-primary/40 active:bg-primary/60 transition-colors`}),(0,Y.jsx)(D,{panelRef:At,defaultSize:kt.current,minSize:22,collapsible:!0,collapsedSize:0,onResize:e=>{let t=e.asPercentage,n=t<=.5;n||(kt.current=t,typeof window<`u`&&window.localStorage.setItem(Tt,String(Math.round(t)))),Dt(e=>e===n?e:(typeof window<`u`&&window.localStorage.setItem(Ct,n?`1`:`0`),n))},children:(0,Y.jsxs)(`div`,{className:`h-full overflow-auto`,children:[(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-background/95 backdrop-blur px-3 py-2`,children:[(0,Y.jsxs)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5`,children:[(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":bt===`properties`,onClick:()=>St(`properties`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(bt===`properties`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.inspector.properties`,h),children:[(0,Y.jsx)(qt,{className:`h-3.5 w-3.5`}),J(`engine.edit.inspector.properties`,h)]}),(0,Y.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":bt===`source`,onClick:()=>St(`source`),className:`inline-flex items-center gap-1 rounded px-2 py-1 text-xs transition-colors `+(bt===`source`?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),title:J(`engine.edit.inspector.source`,h),children:[(0,Y.jsx)(ke,{className:`h-3.5 w-3.5`}),J(`engine.edit.inspector.source`,h)]})]}),Ut&&(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px] border-amber-400/60 text-amber-600 dark:text-amber-300`,children:[(0,Y.jsx)(`span`,{className:`mr-1 inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),J(`engine.edit.unsaved`,h)]})]}),(0,Y.jsx)(`div`,{className:`p-4`,children:bt===`source`?(0,Y.jsx)(Gs,{value:y,onChange:N,readOnly:ln,issues:he.map(e=>({path:e.path??``,message:e.message}))}):Oe&&an?(0,Y.jsx)(an,{type:e,name:t,draft:y,selection:Oe,onPatch:e=>N(t=>({...t,...e})),onClearSelection:()=>je(null),onSelectionChange:je,readOnly:ln,locale:h}):!Oe&&on?(0,Y.jsx)(on,{type:e,name:t,draft:y,onPatch:e=>N(t=>({...t,...e})),onSelectionChange:je,readOnly:ln,locale:h,serverSchema:f?.schema}):(0,Y.jsx)(Fi,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:pe,issues:he,hiddenFields:le,fieldOrder:de,readOnly:ln,createMode:n,widgetContext:at})})]})})]})}):(0,Y.jsx)(Fi,{schema:m,form:n&&p.createSchema?void 0:f?.form,value:y,onChange:pe,issues:he,hiddenFields:le,fieldOrder:de,readOnly:ln,createMode:n,widgetContext:at})]})})]}),(0,Y.jsx)(Vr,{open:gt===`layers`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.layers`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Bo,{layered:g,locale:h})})]})}),(0,Y.jsx)(Vr,{open:gt===`review`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`designer.draftReview.title`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t,` · `,J(`designer.canvas.reviewVsPublished`,h)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(Yo,{published:g?.effective??null,draft:y,locale:h})})]})}),(0,Y.jsx)(Vr,{open:gt===`references`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsxs)(wt,{className:`text-base`,children:[J(`engine.edit.references`,h),x&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px]`,children:x.length})]}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(dc,{refs:x,loading:ot})})]})}),pt&&(0,Y.jsx)(Vr,{open:gt===`related`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.related`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(rs,{type:e,name:t,parentItem:y,onOpen:e=>ft(e)})})]})}),!n&&(0,Y.jsx)(Vr,{open:gt===`history`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[720px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.history`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-auto p-4`,children:(0,Y.jsx)(ds,{type:e,name:t,client:l,onRollback:()=>Ce(e=>e+1),rollbackLabel:J(`engine.edit.rollback`,h),rollbackConfirm:e=>J(`engine.edit.rollbackConfirm`,h).replace(`{version}`,String(e))})})]})}),!n&&(0,Y.jsx)(Vr,{open:gt===`audit`,onOpenChange:e=>!e&&_t(null),children:(0,Y.jsxs)(ie,{side:`right`,className:`w-[92vw] sm:max-w-[860px] p-0 flex flex-col gap-0`,children:[(0,Y.jsxs)(Me,{className:`px-4 py-3 border-b`,children:[(0,Y.jsx)(wt,{className:`text-base`,children:J(`engine.edit.auditTab`,h)}),(0,Y.jsxs)(Ot,{className:`text-xs`,children:[e,` / `,t]})]}),(0,Y.jsx)(`div`,{className:`flex-1 min-h-0 overflow-hidden p-3`,children:(0,Y.jsx)(gs,{type:e,name:t,client:l,locale:h})})]})}),(0,Y.jsx)(ls,{target:dt,onClose:()=>ft(null),parentContext:{type:e,name:t}}),(0,Y.jsx)(xt,{open:re!=null,onOpenChange:e=>{e||(P(null),F(null))},children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-5 w-5 text-amber-600`}),`Destructive change detected`]}),(0,Y.jsx)(Te,{children:`The framework refused this save because it would drop or narrow data already in use. Review the issues and confirm to override.`})]}),(0,Y.jsx)(`div`,{className:`max-h-[300px] overflow-auto space-y-2 my-2`,children:re?.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded border bg-amber-50 border-amber-200 p-2 text-xs`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-amber-900`,children:e.kind??`change`}),e.path&&(0,Y.jsx)(`div`,{className:`text-amber-800 font-mono mt-0.5`,children:e.path}),(0,Y.jsx)(`div`,{className:`text-amber-900 mt-1`,children:e.message})]},t))}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>P(null),children:`Cancel`}),(0,Y.jsx)(H,{variant:`destructive`,onClick:()=>R(!0),disabled:T,children:T?`Forcing…`:`Force save`})]})]})})]})}function dc({refs:e,loading:t}){return t||e==null?(0,Y.jsxs)(`div`,{className:`text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Scanning references…`]}):e.length===0?(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`No references found`}),(0,Y.jsx)(kt,{children:`Nothing in the metadata graph points at this item. Safe to delete.`})]}):(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From type`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`From name`}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left`,children:`Path`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:e.map((e,t)=>(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50`,children:[(0,Y.jsx)(`td`,{className:`px-3 py-2`,children:(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px] font-mono`,children:e.fromType})}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs`,children:e.fromName}),(0,Y.jsx)(`td`,{className:`px-3 py-2 font-mono text-xs text-muted-foreground`,children:e.path})]},t))})]})})}function fc({saving:e,isDirty:t,autoSaveEnabled:n,lastSavedAt:r,createMode:i,locale:a}){let[,o]=X.useReducer(e=>e+1,0);return X.useEffect(()=>{if(!r)return;let e=window.setInterval(o,3e4);return()=>window.clearInterval(e)},[r]),e?(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(U,{className:`h-3 w-3 animate-spin`}),J(`engine.edit.saving`,a)]}):t?i?null:(0,Y.jsxs)(`span`,{className:`text-xs text-amber-600 dark:text-amber-300 hidden md:inline-flex items-center gap-1`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-1.5 w-1.5 rounded-full bg-amber-400`}),J(n?`engine.edit.autoSavingShortly`:`engine.edit.unsaved`,a)]}):r?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground hidden md:inline-flex items-center gap-1`,children:q(`engine.edit.savedAt`,a,{time:`${String(r.getHours()).padStart(2,`0`)}:${String(r.getMinutes()).padStart(2,`0`)}`})}):null}function pc({type:e}){let t=a(),[n]=s(),r=e??n.get(`type`)??``;if(!r)return(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`Missing metadata type`}),(0,Y.jsxs)(kt,{children:[`This page expects a `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=`}),` query param (e.g. `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`?type=view`}),`) or a nav-metadata `,(0,Y.jsxs)(`code`,{className:`font-mono`,children:[`params: `,`{ type: 'view' }`]}),`.`]})]})});let i=mc(t.pathname),o=i.split(`/`).filter(Boolean);return o.length===0?(0,Y.jsx)(Ao,{type:r}):o[0]===`new`&&o.length===1?(0,Y.jsx)(lc,{type:r,name:``,createMode:!0},`${r}:__new__`):o.length===2&&o[1]===`history`?(0,Y.jsx)(us,{type:r,name:decodeURIComponent(o[0])}):o.length===1?(0,Y.jsx)(lc,{type:r,name:decodeURIComponent(o[0])},`${r}:${o[0]}`):(0,Y.jsx)(`div`,{className:`p-8 h-full flex items-center justify-center`,children:(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:`Unknown sub-path`}),(0,Y.jsxs)(kt,{children:[`The path `,(0,Y.jsx)(`code`,{className:`font-mono`,children:i}),` isn't recognized. Valid forms are `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/`}),` (list),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/new`}),` (create),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name`}),` (edit),`,` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:`/:name/history`}),`.`]})]})})}function mc(e){let t=e.indexOf(`/metadata/resource`);return t===-1?``:e.slice(t+18)}function hc(){let e=mi(),t=X.useMemo(()=>zi(),[]),[n,r]=X.useState(`error`),{loading:i,error:a,summary:o,reload:s}=xi(e,n),{entries:l}=Qr(e),u=X.useMemo(()=>{let e={};for(let n of l)e[n.type]=hi(n.type,t,n.label);return e},[l,t]),d=X.useMemo(()=>{let e={};for(let t of o.entries)(e[t.type]??=[]).push(t);return Object.entries(e).sort(([,e],[,t])=>t.length-e.length)},[o]);return(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[(0,Y.jsxs)(`div`,{className:`px-6 pt-5 pb-4 border-b bg-background`,children:[(0,Y.jsx)(`nav`,{className:`text-xs text-muted-foreground mb-2`,children:(0,Y.jsxs)(c,{to:`..`,className:`hover:text-foreground inline-flex items-center gap-1`,children:[(0,Y.jsx)(pt,{className:`h-3 w-3`}),J(`engine.diagnostics.back`,t)]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 flex-wrap`,children:[(0,Y.jsxs)(`h1`,{className:`text-xl font-semibold flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-5 w-5 text-destructive`}),J(`engine.diagnostics.title`,t)]}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[11px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:q(`engine.diagnostics.summary`,t,{count:o.total,items:o.scannedItems,types:o.scannedTypes})}),(0,Y.jsx)(`div`,{className:`flex-1`}),(0,Y.jsx)(`div`,{role:`tablist`,className:`inline-flex items-center rounded-md border bg-muted/40 p-0.5 text-xs`,children:[`error`,`warning`].map(e=>(0,Y.jsx)(`button`,{role:`tab`,type:`button`,"aria-selected":n===e,onClick:()=>r(e),className:`px-2.5 py-1 rounded transition-colors `+(n===e?`bg-background shadow-sm text-foreground`:`text-muted-foreground hover:text-foreground`),children:J(`engine.diagnostics.severity.${e}`,t)},e))}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:s,children:[(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5 mr-1`}),J(`engine.diagnostics.refresh`,t)]})]}),(0,Y.jsx)(`p`,{className:`text-sm text-muted-foreground mt-2 max-w-3xl`,children:J(`engine.diagnostics.description`,t)})]}),(0,Y.jsxs)(`div`,{className:`flex-1 overflow-auto p-6 space-y-6`,children:[i&&(0,Y.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:J(`engine.diagnostics.loading`,t)}),!i&&a&&(0,Y.jsx)(`div`,{className:`text-sm text-destructive border border-destructive/30 rounded p-3 bg-destructive/[0.06]`,children:q(`engine.diagnostics.loadFailed`,t,{error:a})}),!i&&!a&&d.length===0&&(0,Y.jsxs)(bt,{children:[(0,Y.jsx)(ar,{children:J(`engine.diagnostics.cleanTitle`,t)}),(0,Y.jsx)(kt,{children:q(`engine.diagnostics.cleanHint`,t,{items:o.scannedItems,types:o.scannedTypes})})]}),d.map(([e,r])=>(0,Y.jsxs)(`section`,{className:`space-y-2`,children:[(0,Y.jsxs)(`h2`,{className:`text-xs font-semibold uppercase tracking-wider text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(c,{to:`../${encodeURIComponent(e)}`,className:`hover:text-foreground hover:underline`,children:u[e]??e}),(0,Y.jsx)(`span`,{className:`font-mono normal-case tracking-normal text-[10px] opacity-70`,children:e}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px] border-destructive/40 text-destructive bg-destructive/[0.06]`,children:r.length})]}),(0,Y.jsx)(`div`,{className:`border rounded-lg overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-xs uppercase tracking-wider text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium w-[28%]`,children:J(`engine.diagnostics.col.name`,t)}),(0,Y.jsx)(`th`,{className:`px-3 py-2 text-left font-medium`,children:J(`engine.diagnostics.col.issues`,t)})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:r.map(r=>{let i=r.diagnostics.errors??[],a=r.diagnostics.warnings??[],o=(n===`warning`&&i.length===0?a:i).slice(0,3),s=Math.max(0,(i.length||a.length)-o.length);return(0,Y.jsxs)(`tr`,{className:`hover:bg-accent/50 align-top`,children:[(0,Y.jsxs)(`td`,{className:`px-3 py-2 align-top`,children:[(0,Y.jsx)(c,{to:`../${encodeURIComponent(e)}/${encodeURIComponent(r.name)}`,className:`text-primary hover:underline font-mono`,children:r.name}),i.length>0&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px] border-destructive/40 text-destructive`,children:q(`engine.diagnostics.errorN`,t,{count:i.length})}),a.length>0&&(0,Y.jsx)(z,{variant:`outline`,className:`ml-2 text-[10px] border-amber-500/40 text-amber-700 dark:text-amber-300`,children:q(`engine.diagnostics.warnN`,t,{count:a.length})})]}),(0,Y.jsx)(`td`,{className:`px-3 py-2 align-top`,children:(0,Y.jsxs)(`ul`,{className:`space-y-0.5 font-mono text-[11px]`,children:[o.map((e,t)=>(0,Y.jsxs)(`li`,{className:`truncate`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:e.path||`(root)`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`: `}),e.message]},t)),s>0&&(0,Y.jsx)(`li`,{className:`text-muted-foreground`,children:q(`engine.diagnostics.more`,t,{count:s})})]})})]},r.name)})})]})})]},e))]})]})}function gc(){let e=X.useMemo(()=>zi().toLowerCase().startsWith(`zh`),[]);return X.useMemo(()=>e?{title:`已分配用户`,add:`添加用户`,remove:`移除`,empty:`还没有分配任何用户。点击「添加用户」来分配。`,loading:`加载中…`,pickTitle:`选择要分配的用户`,seatFull:e=>`AI 席位已用完(`+e+`/`+e+`)。请先移除一个用户,或在许可证中提升席位上限,再分配新用户。`,addFailed:`分配失败,请重试。`,countOf:e=>e+` 人`}:{title:`Assigned Users`,add:`Add user`,remove:`Remove`,empty:`No users assigned yet. Click "Add user" to assign.`,loading:`Loading…`,pickTitle:`Select users to assign`,seatFull:e=>`All `+e+` AI seat(s) are in use. Remove a user or raise the license cap before assigning another.`,addFailed:`Failed to assign. Please try again.`,countOf:e=>String(e)},[e])}var _c=e=>Array.isArray(e)?e:e?.records??e?.items??e?.data??[],vc=e=>e?.full_name||e?.name||e?.display_name||e?.email||String(e?.id??``);function yc({permissionSetName:e}){let t=f(),n=gc(),[r,i]=X.useState(null),[a,o]=X.useState([]),[s,c]=X.useState(!0),[l,u]=X.useState(!1),[d,p]=X.useState(!1),[m,h]=X.useState(null),g=X.useCallback(async()=>{c(!0);try{let n=_c(await t.find(`sys_permission_set`,{$filter:{name:e},limit:1})),r=n[0]?.id?String(n[0].id):null;if(i(r),!r){o([]);return}let a=_c(await t.find(`sys_user_permission_set`,{$filter:{permission_set_id:r},$top:500})),s=[...new Set(a.map(e=>e.user_id).filter(Boolean).map(String))],c=s.length?_c(await t.find(`sys_user`,{$filter:{id:{$in:s}},$top:500})):[],l=new Map(c.map(e=>[String(e.id),e]));o(a.filter(e=>e.user_id).map(e=>{let t=l.get(String(e.user_id));return{grantId:String(e.id),userId:String(e.user_id),name:t?vc(t):String(e.user_id),email:t?.email??``}}))}catch{o([])}finally{c(!1)}},[t,e]);X.useEffect(()=>{g()},[g]);let _=X.useMemo(()=>new Set(a.map(e=>e.userId)),[a]),v=X.useCallback(async e=>{if(r){p(!0),h(null);try{for(let n of e||[]){let e=n?.id==null?null:String(n.id);!e||_.has(e)||await t.create(`sys_user_permission_set`,{permission_set_id:r,user_id:e})}await g()}catch(e){let t=String(e?.body?.error??e?.error??e?.message??``),r=t.match(/(\d+)\s*of\s*(\d+)\s*seat/i);/cap reached|seat cap|ai[-_ ]?seat/i.test(t)?h(n.seatFull(r?Number(r[2]):a.length)):h(t.replace(/^\s*\[[^\]]*\]\s*/,``).trim()||n.addFailed)}finally{p(!1),u(!1)}}},[t,r,_,g,a.length,n]),y=X.useCallback(async e=>{h(null);try{await t.delete(`sys_user_permission_set`,e),await g()}catch{}},[t,g]);return(0,Y.jsxs)(`div`,{className:`px-4 py-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[(0,Y.jsx)(Fe,{className:`h-4 w-4 text-muted-foreground`}),(0,Y.jsx)(`span`,{children:n.title}),!s&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground font-normal`,children:n.countOf(a.length)})]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,disabled:d||!r,onClick:()=>{h(null),u(!0)},className:`gap-1 h-8 text-xs`,children:[d?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),n.add]})]}),m&&(0,Y.jsxs)(`div`,{className:`mb-3 flex items-start gap-2 rounded-md border border-amber-300/60 bg-amber-50 dark:bg-amber-950/30 px-3 py-2 text-xs text-amber-800 dark:text-amber-200`,role:`alert`,children:[(0,Y.jsx)($e,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:m})]}),s?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs text-muted-foreground py-3`,children:[(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}),n.loading]}):a.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic py-3`,children:n.empty}):(0,Y.jsx)(`ul`,{className:`divide-y rounded-md border`,children:a.map(e=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-3 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`flex h-7 w-7 items-center justify-center rounded-full bg-primary/10 text-primary text-xs font-medium shrink-0`,children:(e.name||`?`).slice(0,1).toUpperCase()}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsx)(`div`,{className:`text-sm truncate`,children:e.name}),e.email&&e.email!==e.name&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground truncate`,children:e.email})]}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>void y(e.grantId),"aria-label":n.remove,title:n.remove,className:`h-7 w-7 p-0 text-muted-foreground hover:text-destructive shrink-0`,children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},e.grantId))}),r&&(0,Y.jsx)(Dr,{open:l,onOpenChange:e=>u(e),multiple:!0,dataSource:t,objectName:`sys_user`,title:n.pickTitle,onSelect:()=>{},onSelectRecords:e=>void v(e)})]})}function bc(e){return[{key:`allowCreate`,short:`C`,tip:J(`perm.action.create`,e)},{key:`allowRead`,short:`R`,tip:J(`perm.action.read`,e)},{key:`allowEdit`,short:`U`,tip:J(`perm.action.edit`,e)},{key:`allowDelete`,short:`D`,tip:J(`perm.action.delete`,e)},{key:`allowTransfer`,short:`Tr`,tip:J(`perm.action.transfer`,e)},{key:`allowRestore`,short:`Re`,tip:J(`perm.action.restore`,e)},{key:`allowPurge`,short:`Pu`,tip:J(`perm.action.purge`,e)},{key:`viewAllRecords`,short:`VA`,tip:J(`perm.action.viewAll`,e)},{key:`modifyAllRecords`,short:`MA`,tip:J(`perm.action.modifyAll`,e)}]}function xc({type:e,name:t}){let n=u(),r=mi(),{entries:i}=Qr(r),a=i.find(t=>t.type===e),o=!!Oo(e,a).allowOrgOverride,s=X.useMemo(()=>zi(),[]),c=X.useCallback(e=>J(e,s),[s]),l=X.useMemo(()=>bc(s),[s]),[d,f]=X.useState({name:t,objects:{},fields:{}}),[p,m]=X.useState([]),[h,g]=X.useState({}),[_,v]=X.useState(new Set),[y,b]=X.useState(!0),[x,S]=X.useState(!1),[C,w]=X.useState(null),[T,E]=X.useState(null),[D,O]=X.useState(``),[k,A]=X.useState(!1);X.useEffect(()=>{let n=!1;return b(!0),(async()=>{try{let[i,a]=await Promise.all([r.layered(e,t).catch(()=>null),r.list(`object`).catch(()=>[])]);if(n)return;let o=i?.effective??i?.code??{name:t,objects:{}};f({...o,name:String(o?.name??t),objects:o?.objects??{},fields:o?.fields??{}}),m((a??[]).map(e=>{let t=e?.item??e;return{name:String(t?.name??``),label:t?.label}}).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name)))}catch(e){w(e?.message??String(e))}finally{n||b(!1)}})(),()=>{n=!0}},[r,e,t]);async function j(e){if(!h[e])try{let t=(await r.list(`field`)??[]).map(e=>e?.item??e).filter(t=>String(t?.object??``)===e).map(e=>({name:String(e?.name??``),label:e?.label})).filter(e=>!!e.name).sort((e,t)=>e.name.localeCompare(t.name));g(n=>({...n,[e]:t}))}catch{g(t=>({...t,[e]:[]}))}}function M(e){v(t=>{let n=new Set(t);return n.has(e)?n.delete(e):(n.add(e),j(e)),n})}function ee(e,t,n){f(r=>{let i={...r.objects[e]??{},[t]:n};return t===`viewAllRecords`&&n&&(i.allowRead=!0),t===`modifyAllRecords`&&n&&(i.allowEdit=!0,i.allowRead=!0),{...r,objects:{...r.objects,[e]:i}}})}function te(e,t){f(n=>{let r=t===`none`?{}:t===`all`?Object.fromEntries(l.map(e=>[e.key,!0])):t===`crud`?{allowCreate:!0,allowRead:!0,allowEdit:!0,allowDelete:!0}:{allowRead:!0};return{...n,objects:{...n.objects,[e]:r}}})}function ne(e,t,n,r){let i=`${e}.${t}`;f(e=>{let t={...e.fields??{}},a={...t[i]??{readable:!0,editable:!1},[n]:r};return n===`readable`&&!r&&(a.editable=!1),n===`editable`&&r&&(a.readable=!0),t[i]=a,{...e,fields:t}})}async function N(t,n){let i=n??d;S(!0),w(null);try{await r.save(e,i.name,i,{force:t}),f((await r.layered(e,i.name)).effective??i),E(null)}catch(e){if(e?.status===409&&e?.code===`destructive_change`){let t=e?.body?.issues??[];E({issues:Array.isArray(t)?t:[],pending:i})}else w(e?.message??String(e))}finally{S(!1)}}let re=X.useMemo(()=>{let e=D.trim().toLowerCase();return p.filter(t=>{if(k){let e=d.objects[t.name];if(!e||!Object.values(e).some(Boolean))return!1}return e?t.name.toLowerCase().includes(e)||(t.label??``).toLowerCase().includes(e):!0})},[p,D,k,d.objects]),ie=[{label:c(`perm.stat.objectsGranted`),value:Object.values(d.objects).filter(e=>Object.values(e).some(Boolean)).length},{label:c(`perm.stat.fieldOverrides`),value:Object.keys(d.fields??{}).length}];return y?(0,Y.jsx)(yo,{entry:a,itemName:t,children:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` `,c(`perm.loading`).replace(`{name}`,t)]})}):(0,Y.jsxs)(yo,{entry:a??{type:e,label:e},itemName:t,subtitle:d.isProfile?c(`perm.subtitle.profile`):c(`perm.subtitle.set`),stats:ie,actions:(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>n(`./history?type=${encodeURIComponent(e)}`),children:[(0,Y.jsx)(fn,{className:`h-4 w-4 mr-1`}),` `,c(`engine.edit.history`)]}),o&&(0,Y.jsxs)(H,{size:`sm`,onClick:()=>N(!1),disabled:x,children:[x?(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}):(0,Y.jsx)(In,{className:`h-4 w-4 mr-1`}),c(`engine.edit.save`)]})]}),children:[(0,Y.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden`,children:[C&&(0,Y.jsxs)(`div`,{className:`m-4 rounded-md border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive flex items-start gap-2`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{children:C})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b bg-muted/30 flex flex-wrap items-end gap-4`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{htmlFor:`perm-name`,className:`text-xs`,children:c(`perm.field.name`)}),(0,Y.jsx)(V,{id:`perm-name`,value:d.name,disabled:!o,onChange:e=>f(t=>({...t,name:e.target.value})),className:`h-8 w-56`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{htmlFor:`perm-label`,className:`text-xs`,children:c(`perm.field.label`)}),(0,Y.jsx)(V,{id:`perm-label`,value:d.label??``,disabled:!o,onChange:e=>f(t=>({...t,label:e.target.value})),className:`h-8 w-72`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pb-1`,children:[(0,Y.jsx)(Yt,{id:`perm-is-profile`,checked:!!d.isProfile,disabled:!o,onCheckedChange:e=>f(t=>({...t,isProfile:!!e}))}),(0,Y.jsx)(B,{htmlFor:`perm-is-profile`,className:`text-xs`,children:c(`perm.field.isProfile`)})]}),!o&&(0,Y.jsx)(z,{variant:`secondary`,className:`ml-auto`,children:c(`perm.readOnly`)})]}),(0,Y.jsxs)(`div`,{className:`px-6 py-3 border-b flex items-center gap-3`,children:[(0,Y.jsx)(V,{placeholder:c(`perm.filter.placeholder`),value:D,onChange:e=>O(e.target.value),className:`h-8 w-72`}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Yt,{id:`only-enabled`,checked:k,onCheckedChange:e=>A(!!e)}),(0,Y.jsx)(B,{htmlFor:`only-enabled`,className:`text-xs`,children:c(`perm.filter.onlyGranted`)})]}),(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground ml-auto`,children:[re.length,` / `,p.length,` `,c(`perm.stat.objectsSuffix`)]})]}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto`,children:(0,Y.jsx)(Sc,{objects:re,draft:d,expanded:_,fieldsByObject:h,writable:o,objectActions:l,t:c,onToggleExpand:M,onObjectPerm:ee,onFieldPerm:ne,onBulkSet:te})}),(0,Y.jsx)(`div`,{className:`shrink-0 border-t max-h-80 overflow-auto bg-background`,children:(0,Y.jsx)(yc,{permissionSetName:t})})]}),(0,Y.jsx)(xt,{open:!!T,onOpenChange:e=>!e&&E(null),children:(0,Y.jsxs)(Mt,{children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(I,{className:`h-4 w-4 text-amber-500`}),` `,c(`engine.edit.destructive`)]}),(0,Y.jsx)(Te,{children:c(`engine.edit.destructiveHint`)})]}),(0,Y.jsx)(`ul`,{className:`text-sm space-y-1 max-h-64 overflow-auto`,children:T?.issues.map((e,t)=>(0,Y.jsxs)(`li`,{className:`border-l-2 border-amber-500 pl-2`,children:[e.kind&&(0,Y.jsx)(z,{variant:`outline`,className:`mr-2`,children:e.kind}),e.message??JSON.stringify(e)]},t))}),(0,Y.jsxs)(He,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>E(null),children:c(`engine.cancel`)}),(0,Y.jsxs)(H,{variant:`destructive`,onClick:()=>T&&N(!0,T.pending),disabled:x,children:[x&&(0,Y.jsx)(U,{className:`h-4 w-4 mr-1 animate-spin`}),c(`engine.edit.forceSave`)]})]})]})})]})}function Sc({objects:e,draft:t,expanded:n,fieldsByObject:r,writable:i,objectActions:a,t:o,onToggleExpand:s,onObjectPerm:c,onFieldPerm:l,onBulkSet:u}){return(0,Y.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,Y.jsx)(`thead`,{className:`sticky top-0 bg-background border-b z-10`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`text-left px-4 py-2 font-medium w-72`,children:o(`perm.col.object`)}),a.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium text-center w-14`,title:e.tip,children:e.short},e.key)),(0,Y.jsx)(`th`,{className:`px-2 py-2 font-medium w-44 text-right`,children:o(`perm.col.bulk`)})]})}),(0,Y.jsxs)(`tbody`,{children:[e.length===0&&(0,Y.jsx)(`tr`,{children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-4 py-8 text-center text-muted-foreground`,children:o(`perm.filter.empty`)})}),e.map(e=>{let d=t.objects[e.name]??{},f=n.has(e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsxs)(`tr`,{className:`border-b hover:bg-muted/30`,children:[(0,Y.jsx)(`td`,{className:`px-2 py-1.5 align-middle`,children:(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>s(e.name),className:`inline-flex items-center gap-1.5 hover:text-foreground`,children:[f?(0,Y.jsx)(Dt,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Br,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label??e.name}),e.label&&(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`(`,e.name,`)`]})]})}),a.map(t=>(0,Y.jsx)(`td`,{className:`text-center px-2 py-1.5`,children:(0,Y.jsx)(st,{checked:!!d[t.key],disabled:!i,onCheckedChange:n=>c(e.name,t.key,!!n),"aria-label":`${e.name} ${t.tip}`})},t.key)),(0,Y.jsxs)(`td`,{className:`px-2 py-1.5 text-right space-x-1`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`read`),children:o(`perm.bulk.read`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`crud`),children:o(`perm.bulk.crud`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`all`),children:o(`perm.bulk.all`)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-6 px-1.5 text-xs`,disabled:!i,onClick:()=>u(e.name,`none`),children:o(`perm.bulk.none`)})]})]}),f&&(0,Y.jsx)(`tr`,{className:`bg-muted/10`,children:(0,Y.jsx)(`td`,{colSpan:a.length+2,className:`px-12 py-3`,children:(0,Y.jsx)(Cc,{objectName:e.name,fields:r[e.name],fieldsState:t.fields??{},writable:i,t:o,onFieldPerm:l})})})]},e.name)})]})]})}function Cc({objectName:e,fields:t,fieldsState:n,writable:r,t:i,onFieldPerm:a}){return t?t.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:i(`perm.field.empty`)}):(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`text-left py-1 font-medium`,children:i(`perm.field.col.name`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.read`),children:i(`perm.field.read`)}),(0,Y.jsx)(`th`,{className:`px-2 py-1 font-medium w-16 text-center`,title:i(`perm.field.edit`),children:i(`perm.field.edit`)})]})}),(0,Y.jsx)(`tbody`,{children:t.map(t=>{let i=n[`${e}.${t.name}`]??{readable:!0,editable:!1};return(0,Y.jsxs)(`tr`,{className:`border-t border-muted`,children:[(0,Y.jsxs)(`td`,{className:`py-1`,children:[t.label??t.name,t.label&&(0,Y.jsxs)(`span`,{className:`ml-1 text-muted-foreground`,children:[`(`,t.name,`)`]})]}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(st,{checked:!!i.readable,disabled:!r,onCheckedChange:n=>a(e,t.name,`readable`,!!n),"aria-label":`${e}.${t.name} readable`})}),(0,Y.jsx)(`td`,{className:`px-2 py-1 text-center`,children:(0,Y.jsx)(st,{checked:!!i.editable,disabled:!r,onCheckedChange:n=>a(e,t.name,`editable`,!!n),"aria-label":`${e}.${t.name} editable`})})]},t.name)})})]}):(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-3 w-3 animate-spin`}),` `,i(`perm.field.loading`)]})}function wc(){To({type:`__object_field`,label:`Field`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`field`,embeddedPath:`fields`,extract:e=>Tc(e.fields),groupLabel:`Fields`,order:5}]}),To({type:`__object_index`,label:`Index`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`index`,embeddedPath:`indexes`,extract:e=>{let t=e.indexes;return Array.isArray(t)?t.map((e,t)=>{let n=Array.isArray(e.fields)?e.fields.join(`,`):``;return{name:n?`idx_${n}`:`index_${t}`,...e}}):[]},groupLabel:`Indexes`,order:10}]}),To({type:`__object_validation`,label:`Embedded validation`,anchors:[{anchorType:`object`,source:`embedded`,editAs:`validation`,embeddedPath:`validations`,extract:e=>Tc(e.validations),groupLabel:`Embedded Validations`,order:15}]}),To({type:`hook`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Hooks`,order:20}],createFields:[`label`,`name`,`object`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{events:[]}}),To({type:`page`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Pages`,order:40}],createFields:[`label`,`name`,`object`,`type`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`type`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable page title.`},name:{type:`string`,title:`Name`,description:`Page key (snake_case).`,pattern:`^[a-z_][a-z0-9_]*$`},type:{type:`string`,title:`Page type`,enum:[`list`,`record`,`home`,`app`,`utility`],default:`list`,description:`List / Interface page = a data view (Airtable-style: columns, filters, visualizations). Record page renders one object record.`},object:{type:`string`,title:`Object`,widget:`ref:object`,description:`The object this page reads from — the data source for a list page, or the record object for a record page.`},kind:{type:`string`,title:`Kind`,enum:[`full`,`slotted`],default:`full`,description:`full = the whole page; slotted = override only named slots of the default.`}}},createDefaults:{type:`list`,kind:`full`,regions:[]},createSeed:async(e,{client:t})=>{if(e?.type===`list`)return e?.object?{interfaceConfig:{source:String(e.object)}}:{};if(e?.type!==`record`||!e?.object)return{};try{let n=await t.get(`object`,String(e.object));if(!n||typeof n!=`object`)return{};let{buildDefaultPageSchema:r}=await o(async()=>{let{buildDefaultPageSchema:e}=await import(`./plugins-views-CpVdFGRz.js`).then(e=>e.t);return{buildDefaultPageSchema:e}},__vite__mapDeps([0]),import.meta.url),i=r(n),a={};return Array.isArray(i?.regions)&&i.regions.length&&(a.regions=i.regions),i?.template&&(a.template=i.template),a}catch{return{}}}}),To({type:`view`,anchors:[{anchorType:`object`,match:Co([`object`,`config.data.object`]),groupLabel:`Views`,order:30}],createFields:[`label`,`name`,`object`,`kind`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`object`,`kind`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable view name.`},name:{type:`string`,title:`Name`,description:`View key (snake_case). Qualified to <object>.<key> on save.`,pattern:`^[a-z_][a-z0-9_]*$`},object:{type:`string`,title:`Object`,description:`The object this view displays.`},kind:{type:`string`,title:`View kind`,enum:[`grid`,`kanban`,`gallery`,`calendar`,`timeline`,`gantt`,`chart`],default:`grid`,description:`Pick a starter layout. Switch later in the designer.`}}},createBuildBody:e=>{let t=String(e.object??``),n=String(e.name??``);return{name:n.includes(`.`)||!t?n:`${t}.${n}`,object:t,viewKind:`list`,label:e.label,config:{type:e.kind||`grid`,columns:[],data:{provider:`object`,object:t}}}}}),To({type:`flow`,anchors:[{anchorType:`object`,match:Co([`object`,`on.object`,`trigger.object`]),groupLabel:`Flows`,order:50}],createFields:[`label`,`name`,`type`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{nodes:[],edges:[]}}),To({type:`trigger`,anchors:[{anchorType:`object`,match:Co([`object`,`on.object`]),groupLabel:`Triggers`,order:52}],createFields:[`label`,`name`,`object`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}]}),To({type:`validation`,anchors:[{anchorType:`object`,match:Co(`object`),groupLabel:`Validations`,order:25}],createFields:[`label`,`name`,`message`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createSchema:{type:`object`,required:[`label`,`name`,`message`],properties:{label:{type:`string`,title:`Label`,description:`Human-readable rule name.`},name:{type:`string`,title:`Name`,description:`Machine name (snake_case). Used in URLs.`,pattern:`^[a-z_][a-z0-9_]*$`},message:{type:`string`,title:`Error message`,description:`Shown to the user when the rule blocks save.`}}},createDefaults:{type:`script`,active:!0,events:[`insert`,`update`],priority:10,severity:`error`,condition:`false`}}),To({type:`permission`,anchors:[{anchorType:`object`,match:(e,t)=>{let n=e?.objects;return!!n&&typeof n==`object`&&t in n},groupLabel:`Permissions`,order:60}],createFields:[`label`,`name`,`isProfile`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{objects:{}}}),To({type:`action`,anchors:[{anchorType:`object`,match:Co([`object`,`target.object`,`on.object`]),groupLabel:`Actions`,order:55}],createFields:[`label`,`name`,`objectName`,`icon`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`script`,body:{language:`js`,source:`return { success: true };`}}}),To({type:`dashboard`,anchors:[{anchorType:`object`,match:Co([`object`,`data.object`]),groupLabel:`Dashboards`,order:80}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{widgets:[]}}),To({type:`report`,anchors:[{anchorType:`object`,match:Co([`object`,`data.object`]),groupLabel:`Reports`,order:81}],createFields:[`label`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0}],createDefaults:{type:`summary`,drilldown:!0}}),To({type:`object`,iconName:`database`,domain:`data`,createFields:[`label`,`pluralLabel`,`name`,`description`],createDerive:[{from:`label`,to:`name`,transform:`slugify`,untilUserEdits:!0},{from:`label`,to:`pluralLabel`,transform:`plural-en`,untilUserEdits:!0}],createDefaults:{fields:{}},searchableFields:[`name`,`label`,`pluralLabel`,`description`],listColumns:[{key:`name`,label:`Name`,width:`24%`},{key:`label`,label:`Label`,width:`22%`},{key:`pluralLabel`,label:`Plural`,width:`22%`},{key:`fields`,label:`Fields`,width:`90px`,render:e=>e==null?`—`:Array.isArray(e)?e.length:typeof e==`object`?Object.keys(e).length:0},{key:`description`,label:`Description`}]})}function Tc(e){return Array.isArray(e)?e:e&&typeof e==`object`?Object.entries(e).map(([e,t])=>({name:e,...t&&typeof t==`object`?t:{}})):[]}var Ec={name:{type:`string`,title:`Name`,description:`Machine name. snake_case, used as the URL path and DB key.`,pattern:`^[a-z_][a-z0-9_]*$`},label:{type:`string`,title:`Label`,description:`Human-readable display name.`},description:{type:`string`,title:`Description`,format:`multiline`}},Dc={role:{type:`object`,title:`Role`,required:[`name`],properties:{...Ec,level:{type:`string`,title:`Level`,description:`Coarse seniority tier (used by UI / sort order).`,enum:[`member`,`lead`,`manager`,`director`,`executive`,`admin`]},parentRole:{type:`string`,title:`Parent Role`,description:`Optional parent role name for hierarchy.`}}},profile:{type:`object`,title:`Profile`,required:[`name`],properties:{...Ec,isProfile:{type:`boolean`,title:`Is profile`,description:`Profiles are mutually exclusive (one per user).`},objects:{type:`object`,title:`Object Permissions`,description:`Edit this via the Permission Matrix tab for a row-by-row UI.`}}},permission:{type:`object`,title:`Permission`,required:[`id`,`resource`,`actions`,`description`],properties:{id:{type:`string`,title:`ID`,description:`Stable identifier (e.g. crm.account.read).`},resource:{type:`string`,title:`Resource`,description:`What this permission applies to.`,enum:[`data.object`,`data.record`,`data.field`,`ui.view`,`ui.dashboard`,`ui.report`,`system.config`,`system.plugin`,`system.api`,`system.service`,`storage.file`,`storage.database`,`network.http`,`network.websocket`,`process.spawn`,`process.env`]},actions:{type:`array`,title:`Actions`,description:`Permitted operations on the resource.`,items:{type:`string`,enum:[`create`,`read`,`update`,`delete`,`execute`,`admin`,`manage`,`configure`,`import`,`export`,`share`]}},description:{type:`string`,title:`Description`,description:`Why this permission exists (shown in admin UIs).`},scope:{type:`string`,title:`Scope`,enum:[`tenant`,`user`,`plugin`,`global`,`resource`],default:`tenant`},required:{type:`boolean`,title:`Required`,description:`Must be present for the holder to function.`},justification:{type:`string`,title:`Justification`}}},translation:{type:`object`,title:`Translation Bundle`,required:[`name`],properties:{name:{...Ec.name,description:`Bundle id (e.g. zh_CN, en_US, package-locale).`},label:Ec.label,description:Ec.description,locale:{type:`string`,title:`Locale`,description:`BCP-47 tag, e.g. en, zh-Hans, ja-JP.`},strings:{type:`object`,title:`Strings`,description:`Key → translated string map.`}}},tool:{type:`object`,title:`AI Tool`,required:[`name`],properties:{...Ec,kind:{type:`string`,title:`Kind`,enum:[`function`,`http`,`mcp`]},inputSchema:{type:`object`,title:`Input Schema (JSON Schema)`},outputSchema:{type:`object`,title:`Output Schema (JSON Schema)`}}},skill:{type:`object`,title:`AI Skill`,required:[`name`],properties:{...Ec,instructions:{type:`string`,title:`Instructions`,format:`multiline`},tools:{type:`array`,title:`Tools`,items:{type:`string`}}}},app:{type:`object`,title:`Application`,required:[`name`],properties:{...Ec,icon:{type:`string`,title:`Icon`},navigation:{type:`array`,title:`Navigation`,items:{type:`object`}}}},page:{type:`object`,title:`Page`,required:[`name`],properties:{...Ec,route:{type:`string`,title:`Route`,description:`URL path under the app.`},layout:{type:`string`,title:`Layout`}}},view:{type:`object`,title:`View`,required:[`name`],properties:{...Ec,type:{type:`string`,title:`View Type`,enum:[`grid`,`kanban`,`calendar`,`gantt`,`simple`,`tabbed`,`wizard`,`split`,`drawer`,`modal`]}}},dashboard:{type:`object`,title:`Dashboard`,required:[`name`],properties:{...Ec,widgets:{type:`array`,title:`Widgets`,items:{type:`object`}}}},report:{type:`object`,title:`Report`,required:[`name`],properties:{...Ec,object:{type:`string`,title:`Object`},filters:{type:`array`,title:`Filters`,items:{type:`object`}}}},book:{type:`object`,title:`Documentation Book`,required:[`name`,`groups`],properties:{...Ec,slug:{type:`string`,title:`Slug`,description:`Portal URL segment; defaults to the name without its package prefix.`},icon:{type:`string`,title:`Icon`},order:{type:`number`,title:`Order`,description:`Orders books within the portal.`},audience:{title:`Audience`,description:`Access audience. 'org' (default) inherits the package grant; 'public' is anonymously readable; { profile } gates by role.`,oneOf:[{type:`string`,enum:[`org`,`public`]},{type:`object`,title:`Role-gated`,properties:{profile:{type:`string`,title:`Profile`}},required:[`profile`]}]},groups:{type:`array`,title:`Groups (spine)`,description:`Ordered sections. Membership is derived from each group's include rule — edit the structure visually in the Preview tab.`,items:{type:`object`,required:[`key`,`label`],properties:{key:{type:`string`,title:`Key`,pattern:`^[a-z][a-z0-9_]*$`},label:{type:`string`,title:`Label`},order:{type:`number`,title:`Order`},include:{title:`Include rule`,description:`Glob over doc names (e.g. crm_guide_*) or { tag }.`},package:{type:`string`,title:`Package scope`},pages:{type:`array`,title:`Explicit pages (override)`,items:{}}}}}}},email_template:{type:`object`,title:`Email Template`,required:[`name`,`label`,`subject`,`bodyHtml`],properties:{...Ec,category:{type:`string`,title:`Category`,enum:[`auth`,`notification`,`workflow`,`marketing`,`custom`],default:`custom`},locale:{type:`string`,title:`Locale`,default:`en-US`,description:`BCP-47 tag (en-US, zh-CN, …)`},subject:{type:`string`,title:`Subject`,description:`Supports {{var.path}} interpolation`},bodyHtml:{type:`string`,title:`HTML Body`,format:`multiline`},bodyText:{type:`string`,title:`Plain-Text Body`,format:`multiline`},variables:{type:`array`,title:`Variables`,items:{type:`object`}},fromOverride:{type:`object`,title:`From Override`},replyTo:{type:`string`,title:`Reply-To`},active:{type:`boolean`,title:`Active`,default:!0},isSystem:{type:`boolean`,title:`System Template`,default:!1}}}};function Oc(){for(let[e,t]of Object.entries(Dc))To({type:e,defaultSchema:t,fieldOrder:[`name`,`label`,`description`]})}var kc=[{value:`managed`,label:`Managed (ObjectStack owns the schema)`},{value:`external`,label:`External (read existing schema as-is)`},{value:`validate-only`,label:`Validate only`}],Ac=``.replace(/\/+$/,``),jc=e=>e.format===`password`;function Mc(e){let t=e?.configSchema?.properties??{},n={};for(let[e,r]of Object.entries(t))jc(r)||r.default!==void 0&&(n[e]=r.default);return n}function Nc(e){let t=X.useMemo(()=>d(),[]),n=mi(),[r,i]=X.useState([]),[a,o]=X.useState(!0),[s,c]=X.useState(null),l=X.useCallback(async(e,n)=>{let r=await t(`${Ac}${e}`,{credentials:`include`,headers:{"Content-Type":`application/json`},...n}),i=await r.text(),a=i;try{a=JSON.parse(i)}catch{}if(!r.ok)throw Error(a&&(a.message||a.error)||`HTTP ${r.status}`);return a},[t]),u=X.useCallback(async()=>{o(!0);try{let e=await l(`/api/v1/datasources`);i(Array.isArray(e?.datasources)?e.datasources:[])}catch(e){Hr.error(`Load datasources: ${e.message}`),i([])}finally{o(!1)}},[l]);X.useEffect(()=>{u()},[u]);let f=async e=>{c(`test:${e}`);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/test`,{method:`POST`,body:`{}`});Hr.success(t?.ok===!1?`${e}: ${t?.error??`failed`}`:`${e}: connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`),u()}catch(t){Hr.error(`${e}: ${t.message}`)}finally{c(null)}},p=async e=>{if(window.confirm(`Delete datasource “${e}”? This cannot be undone.`)){c(`del:${e}`);try{await l(`/api/v1/datasources/${encodeURIComponent(e)}`,{method:`DELETE`}),Hr.success(`Deleted ${e}.`),u()}catch(t){Hr.error(`Delete ${e}: ${t.message}`)}finally{c(null)}}},[m,h]=X.useState([]),[g,_]=X.useState(!1),[v,y]=X.useState(null),[b,x]=X.useState(null),[S,C]=X.useState(!1),[w,T]=X.useState(!1),[E,D]=X.useState(null),[O,k]=X.useState(!1),A=X.useCallback(async()=>{if(m.length)return m;try{let e=await l(`/api/v1/datasources/drivers`),t=Array.isArray(e?.drivers)?e.drivers:[];return h(t),t}catch(e){return Hr.error(`Load drivers: ${e.message}`),[]}},[l,m]),j=X.useMemo(()=>m.find(e=>e.id===b?.driver),[m,b?.driver]),ee=async()=>{let e=await A(),t=e.find(e=>e.id!==`memory`)??e[0];y(null),C(!1),D(null),x({name:``,label:``,driver:t?.id??``,schemaMode:`managed`,config:Mc(t),secret:``}),_(!0)},te=async e=>{let t=await A();c(`edit:${e.name}`);try{let n=(await l(`/api/v1/datasources/${encodeURIComponent(e.name)}`))?.datasource??{};y(e.name),C(!!n.hasSecret),D(null),x({name:n.name??e.name,label:n.label??``,driver:n.driver??e.driver??t[0]?.id??``,schemaMode:n.schemaMode??`managed`,config:{...n.config??{}},secret:``}),_(!0)}catch(t){Hr.error(`Open ${e.name}: ${t.message}`)}finally{c(null)}},ne=e=>{x(t=>t&&{...t,driver:e,config:Mc(m.find(t=>t.id===e)),secret:``}),D(null)},N=(e,t)=>x(n=>n&&{...n,config:{...n.config,[e]:t}}),re=e=>{let t={label:e.label||void 0,driver:e.driver,schemaMode:e.schemaMode,config:e.config};return e.secret&&(t.secret=e.secret),t},ie=async()=>{if(b){k(!0),D(null);try{let e=await l(`/api/v1/datasources/test`,{method:`POST`,body:JSON.stringify({driver:b.driver,config:b.config,...b.secret?{secret:b.secret}:{}})}),t=e?.result??e;t?.ok===!1?D({ok:!1,text:t?.error??`Connection failed`}):D({ok:!0,text:`Connection ok${t?.latencyMs==null?``:` (${t.latencyMs}ms)`}`})}catch(e){D({ok:!1,text:e.message})}finally{k(!1)}}},P=async()=>{if(b){T(!0);try{v?(await l(`/api/v1/datasources/${encodeURIComponent(v)}`,{method:`PATCH`,body:JSON.stringify(re(b))}),Hr.success(`Updated ${v}.`)):(await l(`/api/v1/datasources`,{method:`POST`,body:JSON.stringify({name:b.name,...re(b)})}),Hr.success(`Created ${b.name}.`)),_(!1),u()}catch(e){Hr.error(`Save: ${e.message}`)}finally{T(!1)}}},ae=v?!0:/^[a-z_][a-z0-9_]*$/.test(b?.name??``),F=!!b&&!!b.driver&&ae&&!w,[oe,se]=X.useState(null),[ce,le]=X.useState(null),[ue,de]=X.useState(new Set),[fe,pe]=X.useState(!1),me=async e=>{se(e),le(null),de(new Set);try{let t=await l(`/api/v1/datasources/${encodeURIComponent(e)}/remote-tables`);le(Array.isArray(t?.tables)?t.tables:[])}catch(t){Hr.error(`Introspect ${e}: ${t.message}`),le([])}},he=e=>de(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),ge=async()=>{if(!oe||ue.size===0)return;pe(!0);let e=0,t=[];for(let r of ue)try{let{draft:t}=await l(`/api/v1/datasources/${encodeURIComponent(oe)}/object-draft`,{method:`POST`,body:JSON.stringify({table:r})});await n.save(`object`,t.name,t.definition),e+=1}catch(e){t.push(`${r}: ${e.message}`)}pe(!1),e&&Hr.success(`Synced ${e} object${e>1?`s`:``} from ${oe}.`),t.length&&Hr.error(`Failed: ${t.join(`; `)}`),se(null)},_e=(e,t)=>{let n=t.title||e,r=(j?.configSchema?.required??[]).includes(e);if(jc(t))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r&&!v?` *`:``]}),(0,Y.jsx)(V,{type:`password`,value:b?.secret??``,placeholder:v&&S?`•••••••• (leave blank to keep)`:``,onChange:e=>x(t=>t&&{...t,secret:e.target.value})}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e);let i=b?.config[e];if(t.type===`boolean`)return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 py-1`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(B,{className:`text-xs`,children:n}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]}),(0,Y.jsx)(Yt,{checked:!!i,onCheckedChange:t=>N(e,t)})]},e);if(Array.isArray(t.enum))return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsxs)(De,{value:i==null?``:String(i),onValueChange:t=>N(e,t),children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{placeholder:`Select…`})}),(0,Y.jsx)(We,{children:t.enum.map(e=>(0,Y.jsx)(ur,{value:String(e),children:String(e)},String(e)))})]})]},e);let a=t.type===`number`||t.type===`integer`;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(B,{className:`text-xs`,children:[n,r?` *`:``]}),(0,Y.jsx)(V,{type:a?`number`:`text`,value:i==null?``:String(i),onChange:t=>N(e,a?t.target.value===``?void 0:Number(t.target.value):t.target.value)}),t.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)};return(0,Y.jsxs)(`div`,{className:`mx-auto max-w-4xl px-6 py-8`,children:[(0,Y.jsxs)(`div`,{className:`mb-6 flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{children:[(0,Y.jsxs)(`h1`,{className:`flex items-center gap-2 text-xl font-semibold`,children:[(0,Y.jsx)(br,{className:`h-5 w-5`}),` Datasources`]}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted-foreground`,children:`Connect external databases and sync their tables in as objects.`})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void u(),disabled:a,children:[(0,Y.jsx)(Tt,{className:`mr-1.5 h-4 w-4`+(a?` animate-spin`:``)}),` Refresh`]}),(0,Y.jsxs)(H,{size:`sm`,onClick:()=>void ee(),children:[(0,Y.jsx)(R,{className:`mr-1.5 h-4 w-4`}),` New datasource`]})]})]}),a?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-12 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading…`]}):r.length===0?(0,Y.jsxs)(`div`,{className:`rounded-lg border border-dashed bg-muted/20 py-16 text-center text-sm text-muted-foreground`,children:[`No datasources yet. Click `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`New datasource`}),` to connect one.`]}):(0,Y.jsx)(`div`,{className:`divide-y rounded-lg border bg-card`,children:r.map(e=>{let t=e.origin===`code`;return(0,Y.jsxs)(`div`,{className:`flex items-center gap-3 px-4 py-3`,children:[(0,Y.jsx)(br,{className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:e.label||e.name}),(0,Y.jsx)(`code`,{className:`text-[11px] text-muted-foreground`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`mt-0.5 flex items-center gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 font-mono`,children:e.driver}),e.status&&(0,Y.jsxs)(`span`,{children:[`· `,e.status]}),e.origin&&(0,Y.jsxs)(`span`,{children:[`· `,e.origin]})]})]}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,disabled:s===`test:${e.name}`,onClick:()=>void f(e.name),children:[s===`test:${e.name}`?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Ft,{className:`mr-1.5 h-4 w-4`}),` Test`]}),(0,Y.jsxs)(H,{variant:`secondary`,size:`sm`,onClick:()=>void me(e.name),children:[(0,Y.jsx)(Xt,{className:`mr-1.5 h-4 w-4`}),` Sync objects`]}),!t&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-8 w-8`,title:`Edit`,disabled:s===`edit:${e.name}`,onClick:()=>void te(e),children:s===`edit:${e.name}`?(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(Jn,{className:`h-4 w-4`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`icon`,className:`h-8 w-8 text-destructive hover:text-destructive`,title:`Delete`,disabled:s===`del:${e.name}`,onClick:()=>void p(e.name),children:s===`del:${e.name}`?(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}):(0,Y.jsx)(lr,{className:`h-4 w-4`})})]})]},e.name)})}),(0,Y.jsx)(xt,{open:g,onOpenChange:e=>{e||_(!1)},children:(0,Y.jsxs)(Mt,{className:`max-w-lg`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsx)(Re,{children:v?`Edit “${v}”`:`New datasource`}),(0,Y.jsx)(Te,{children:v?`Update the connection. Leave the credential blank to keep the current one.`:`Connect an external database. Credentials are encrypted and never stored in metadata.`})]}),b&&(0,Y.jsxs)(`div`,{className:`max-h-[60vh] space-y-3 overflow-y-auto pr-1`,children:[!v&&(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Name *`}),(0,Y.jsx)(V,{value:b.name,placeholder:`my_database`,onChange:e=>x(t=>t&&{...t,name:e.target.value})}),!ae&&b.name.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] text-destructive`,children:`Lowercase letters, digits, and underscores; must not start with a digit.`})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Label`}),(0,Y.jsx)(V,{value:b.label,placeholder:`Human-friendly name`,onChange:e=>x(t=>t&&{...t,label:e.target.value})})]}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Driver *`}),(0,Y.jsxs)(De,{value:b.driver,onValueChange:ne,disabled:!!v,children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{placeholder:`Choose a driver`})}),(0,Y.jsx)(We,{children:m.map(e=>(0,Y.jsx)(ur,{value:e.id,children:e.label},e.id))})]}),j?.description&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:j.description})]}),Object.entries(j?.configSchema?.properties??{}).map(([e,t])=>_e(e,t)),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs`,children:`Schema mode`}),(0,Y.jsxs)(De,{value:b.schemaMode,onValueChange:e=>x(t=>t&&{...t,schemaMode:e}),children:[(0,Y.jsx)(Be,{children:(0,Y.jsx)(zt,{})}),(0,Y.jsx)(We,{children:kc.map(e=>(0,Y.jsx)(ur,{value:e.value,children:e.label},e.value))})]})]}),E&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs `+(E.ok?`text-emerald-600`:`text-destructive`),children:[E.ok?(0,Y.jsx)(M,{className:`h-3.5 w-3.5`}):(0,Y.jsx)(Pr,{className:`h-3.5 w-3.5`}),E.text]})]}),(0,Y.jsxs)(He,{className:`gap-2 sm:justify-between`,children:[(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,disabled:!b?.driver||O,onClick:()=>void ie(),children:[O?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Ft,{className:`mr-1.5 h-4 w-4`}),` Test connection`]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>_(!1),children:`Cancel`}),(0,Y.jsxs)(H,{size:`sm`,disabled:!F,onClick:()=>void P(),children:[w&&(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}),v?`Save changes`:`Create datasource`]})]})]})]})}),(0,Y.jsx)(xt,{open:!!oe,onOpenChange:e=>{e||se(null)},children:(0,Y.jsxs)(Mt,{className:`max-w-lg`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{children:[`Sync objects from “`,oe,`”`]}),(0,Y.jsx)(Te,{children:`Pick the remote tables to import as objects. Each becomes an object definition.`})]}),ce==null?(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Introspecting…`]}):ce.length===0?(0,Y.jsx)(`p`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No remote tables found on this datasource.`}):(0,Y.jsx)(`div`,{className:`max-h-[50vh] space-y-1 overflow-y-auto`,children:ce.map(e=>{let t=e.schema?`${e.schema}.${e.name}`:e.name;return(0,Y.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 rounded px-2 py-1.5 text-sm hover:bg-accent`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,checked:ue.has(e.name),onChange:()=>he(e.name),className:`h-4 w-4`}),(0,Y.jsx)(`span`,{className:`flex-1`,children:t}),e.columnCount!=null&&(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[e.columnCount,` cols`]})]},t)})}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center justify-end gap-2`,children:[(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,onClick:()=>se(null),children:`Cancel`}),(0,Y.jsxs)(H,{size:`sm`,disabled:fe||ue.size===0,onClick:()=>void ge(),children:[fe?(0,Y.jsx)(U,{className:`mr-1.5 h-4 w-4 animate-spin`}):(0,Y.jsx)(Xt,{className:`mr-1.5 h-4 w-4`}),`Create `,ue.size||``,` object`,ue.size===1?``:`s`]})]})]})})]})}var Pc=!1;function Fc(){Pc||(Pc=!0,To({type:`datasource`,label:`Datasources`,domain:`data`,ListPage:Nc}))}function Z({toolbar:e,children:t}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border bg-background overflow-hidden flex flex-col h-full`,children:[e!=null&&(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-b bg-muted/20 px-2 py-1 min-h-[32px]`,children:e}),(0,Y.jsx)(`div`,{className:`bg-background flex-1 min-h-0 overflow-auto`,children:t})]})}function Ic({tone:e=`info`,children:t}){return(0,Y.jsxs)(`div`,{className:`m-4 rounded border p-3 text-sm flex items-start gap-2 ${e===`warn`?`text-amber-800 bg-amber-50 border-amber-200`:e===`error`?`text-destructive bg-destructive/5 border-destructive/30`:`text-muted-foreground border-muted`}`,children:[e!==`info`&&(0,Y.jsx)($e,{className:`h-4 w-4 mt-0.5 shrink-0`}),(0,Y.jsx)(`div`,{className:`flex-1`,children:t})]})}function Lc({icon:e,title:t,description:n,action:r,tone:i=`info`}){let a=i===`warn`?`text-amber-700 bg-amber-50/40 border-amber-200/60`:`text-muted-foreground border-dashed border-muted-foreground/25 bg-muted/10`,o=e??(0,Y.jsx)(Qt,{className:`h-8 w-8 opacity-50`});return(0,Y.jsx)(`div`,{className:`h-full w-full flex items-center justify-center p-6`,children:(0,Y.jsxs)(`div`,{className:`max-w-md w-full rounded-lg border ${a} px-6 py-10 flex flex-col items-center gap-3 text-center`,children:[(0,Y.jsx)(`div`,{className:`text-foreground/60`,children:o}),(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground/90`,children:t}),n&&(0,Y.jsx)(`div`,{className:`text-xs leading-relaxed`,children:n}),r&&(0,Y.jsx)(`div`,{className:`mt-1`,children:r})]})})}var Q=class extends X.Component{state={error:null};static getDerivedStateFromError(e){return{error:e}}componentDidCatch(e){console.error(`[MetadataPreview] render failed`,e)}render(){return this.state.error?(0,Y.jsxs)(Ic,{tone:`error`,children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Preview failed to render`}),(0,Y.jsx)(`div`,{className:`text-xs mt-1 font-mono opacity-80`,children:this.state.error.message}),this.props.fallbackHint&&(0,Y.jsx)(`div`,{className:`text-xs mt-2 opacity-70`,children:this.props.fallbackHint})]}):this.props.children}};function Rc({title:e,entries:t,selectedId:n,onSelect:r,onAdd:i,addLabel:a}){return t.length===0&&!i?null:(0,Y.jsxs)(`div`,{className:`border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground mb-1.5`,children:e}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1.5`,children:[t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:t=>{t.stopPropagation(),r(e)},className:L(`rounded border bg-background px-2 py-0.5 text-xs hover:border-primary/50 cursor-pointer`,n===e.id&&`ring-2 ring-primary border-primary`),children:e.label},e.id)),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i()},className:`rounded border border-dashed bg-background px-2 py-0.5 text-xs text-muted-foreground hover:border-primary hover:text-primary cursor-pointer inline-flex items-center gap-1`,"aria-label":a??`Add`,title:a??`Add`,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:a??`Add`})]})]})]})}var zc={grid:{label:`Grid`,category:`data`,Icon:Ie},"object-grid":{label:`Table`,category:`data`,Icon:fr},"object-form":{label:`Form`,category:`data`,Icon:jt},"object-metric":{label:`Metric`,category:`data`,Icon:Nr},"object-kanban":{label:`Kanban`,category:`data`,Icon:Un},"page:header":{label:`Header`,category:`layout`,Icon:Qn},"page:footer":{label:`Footer`,category:`layout`,Icon:nr},"page:sidebar":{label:`Sidebar`,category:`layout`,Icon:Vn},"page:tabs":{label:`Tabs`,category:`layout`,Icon:kr},"page:accordion":{label:`Accordion`,category:`layout`,Icon:Ce},"page:card":{label:`Card`,category:`layout`,Icon:Sr},"page:section":{label:`Section`,category:`layout`,Icon:Vt},"record:details":{label:`Record details`,category:`record`,Icon:at},"record:highlights":{label:`Highlights`,category:`record`,Icon:Yn},"record:related_list":{label:`Related list`,category:`record`,Icon:we},"record:activity":{label:`Activity timeline`,category:`record`,Icon:le},"record:chatter":{label:`Chatter feed`,category:`record`,Icon:et},"record:path":{label:`Stage path`,category:`record`,Icon:un},"record:alert":{label:`Alert banner`,category:`record`,Icon:I},"record:quick_actions":{label:`Quick actions`,category:`record`,Icon:ve},"record:reference_rail":{label:`Reference rail`,category:`record`,Icon:Hn},"record:history":{label:`History`,category:`record`,Icon:fn},"nav:menu":{label:`Nav menu`,category:`navigation`,Icon:Fn},"nav:breadcrumb":{label:`Breadcrumb`,category:`navigation`,Icon:un},"global:search":{label:`Global search`,category:`navigation`,Icon:tt},"ai:chat_window":{label:`AI chat window`,category:`ai`,Icon:mr},"ai:suggestion":{label:`AI suggestion`,category:`ai`,Icon:Tn},"element:text":{label:`Text`,category:`element`,Icon:Ct},"element:number":{label:`Number`,category:`element`,Icon:yn},"element:image":{label:`Image`,category:`element`,Icon:gr},"element:divider":{label:`Divider`,category:`element`,Icon:ht},"element:button":{label:`Button`,category:`element`,Icon:tn},"element:definition-list":{label:`Definition list`,category:`element`,Icon:ee},"element:repeater":{label:`Repeater`,category:`element`,Icon:Ze}},Bc={data:`Data`,layout:`Layout`,record:`Record context`,navigation:`Navigation`,element:`Elements`,ai:`AI`,misc:`Other`},Vc=(()=>{let e={data:[],layout:[],record:[],navigation:[],element:[],ai:[],misc:[]};for(let[t,n]of Object.entries(zc))e[n.category].push(t);return[`data`,`layout`,`record`,`element`,`navigation`,`ai`,`misc`].map(t=>({category:t,types:e[t]})).filter(e=>e.types.length>0)})(),Hc=$n,Uc={data:{icon:`text-emerald-500 dark:text-emerald-400`,badge:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-900 dark:bg-emerald-950/40 dark:text-emerald-300`},layout:{icon:`text-slate-500 dark:text-slate-400`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},record:{icon:`text-blue-500 dark:text-blue-400`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},navigation:{icon:`text-indigo-500 dark:text-indigo-400`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},element:{icon:`text-teal-500 dark:text-teal-400`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},ai:{icon:`text-violet-500 dark:text-violet-400`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},misc:{icon:`text-zinc-500 dark:text-zinc-400`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function Wc(e){return Uc[zc[e]?.category??`misc`]}var Gc={"object-grid":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`columns`,label:`Columns`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`pageSize`,label:`Page size`,kind:`number`,placeholder:`20`},{name:`striped`,label:`Striped rows`,kind:`boolean`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"object-form":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`mode`,label:`Mode`,kind:`select`,options:[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`view`,label:`View`}]},{name:`formType`,label:`Form type`,kind:`select`,options:[{value:`simple`,label:`Simple`},{value:`tabbed`,label:`Tabbed`},{value:`wizard`,label:`Wizard`},{value:`split`,label:`Split`},{value:`drawer`,label:`Drawer`},{value:`modal`,label:`Modal`}]},{name:`layout`,label:`Layout`,kind:`select`,options:[{value:`vertical`,label:`Vertical`},{value:`horizontal`,label:`Horizontal`},{value:`inline`,label:`Inline`},{value:`grid`,label:`Grid`}]},{name:`columns`,label:`Columns (grid layout)`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`description`,label:`Description`,kind:`text`}],"object-metric":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`label`,label:`Label`,kind:`text`},{name:`description`,label:`Description`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`colorVariant`,label:`Color`,kind:`color`,options:[{value:`default`,label:`Default`},{value:`blue`,label:`Blue`},{value:`teal`,label:`Teal`},{value:`orange`,label:`Orange`},{value:`purple`,label:`Purple`},{value:`success`,label:`Success`},{value:`warning`,label:`Warning`},{value:`danger`,label:`Danger`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"object-kanban":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`groupField`,label:`Group by field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`cardFields`,label:`Card fields`,kind:`field-list`,objectFrom:`self`,objectProp:`objectName`}],grid:[{name:`columns`,label:`Columns`,kind:`number`,placeholder:`3`},{name:`gap`,label:`Gap`,kind:`number`,placeholder:`4`}],"element:text":[{name:`content`,label:`Content`,kind:`text`,placeholder:`Text…`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`heading`,label:`Heading`},{value:`subheading`,label:`Subheading`},{value:`body`,label:`Body`},{value:`caption`,label:`Caption`}]},{name:`align`,label:`Align`,kind:`select`,options:[{value:`left`,label:`Left`},{value:`center`,label:`Center`},{value:`right`,label:`Right`}]}],"element:image":[{name:`src`,label:`Source URL`,kind:`text`,placeholder:`https://…`},{name:`alt`,label:`Alt text`,kind:`text`},{name:`fit`,label:`Fit`,kind:`select`,options:[{value:`cover`,label:`Cover`},{value:`contain`,label:`Contain`},{value:`fill`,label:`Fill`}]}],"element:definition-list":[{name:`items`,label:`Items`,kind:`array`,addLabel:`Add item`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`value`,label:`Value`,kind:`text`}]},{name:`columns`,label:`Columns (1 or 2)`,kind:`number`,placeholder:`1`},{name:`inline`,label:`Inline (label · value)`,kind:`boolean`}],"element:repeater":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`titleField`,label:`Title field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`self`,objectProp:`object`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`},{name:`emptyText`,label:`Empty text`,kind:`text`},{name:`divided`,label:`Dividers between rows`,kind:`boolean`}],"element:number":[{name:`object`,label:`Object`,kind:`object-picker`},{name:`field`,label:`Field`,kind:`field-picker`,objectFrom:`self`,objectProp:`object`},{name:`aggregate`,label:`Aggregate`,kind:`select`,options:[{value:`count`,label:`Count`},{value:`sum`,label:`Sum`},{value:`avg`,label:`Average`},{value:`min`,label:`Min`},{value:`max`,label:`Max`}]},{name:`format`,label:`Format`,kind:`select`,options:[{value:`number`,label:`Number`},{value:`currency`,label:`Currency`},{value:`percent`,label:`Percent`}]},{name:`prefix`,label:`Prefix`,kind:`text`},{name:`suffix`,label:`Suffix`,kind:`text`}],"element:button":[{name:`label`,label:`Label`,kind:`text`},{name:`variant`,label:`Variant`,kind:`select`,options:[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}]},{name:`size`,label:`Size`,kind:`select`,options:[{value:`small`,label:`Small`},{value:`medium`,label:`Medium`},{value:`large`,label:`Large`}]},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`}],"page:header":[{name:`title`,label:`Title`,kind:`text`},{name:`subtitle`,label:`Subtitle`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`breadcrumb`,label:`Show breadcrumb`,kind:`boolean`}],"page:card":[{name:`title`,label:`Title`,kind:`text`},{name:`bordered`,label:`Bordered`,kind:`boolean`}],"page:tabs":[{name:`items`,label:`Tabs`,kind:`array`,addLabel:`Add tab`,itemFields:[{name:`key`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"page:accordion":[{name:`title`,label:`Title`,kind:`text`},{name:`items`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`value`,label:`Key`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:related_list":[{name:`objectName`,label:`Object`,kind:`object-picker`},{name:`relationshipField`,label:`Relationship field`,kind:`field-picker`,objectFrom:`self`,objectProp:`objectName`},{name:`title`,label:`Title`,kind:`text`},{name:`limit`,label:`Limit`,kind:`number`,placeholder:`10`}],"record:highlights":[{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}],"record:details":[{name:`sections`,label:`Sections`,kind:`array`,addLabel:`Add section`,itemFields:[{name:`label`,label:`Label`,kind:`text`},{name:`columns`,label:`Columns`,kind:`number`,placeholder:`2`},{name:`fields`,label:`Fields`,kind:`field-list`,objectFrom:`page`}]}],"record:alert":[{name:`severity`,label:`Severity`,kind:`select`,options:[{value:`info`,label:`Info`},{value:`warning`,label:`Warning`},{value:`error`,label:`Error`},{value:`success`,label:`Success`}]},{name:`title`,label:`Title`,kind:`text`},{name:`body`,label:`Body`,kind:`text`},{name:`icon`,label:`Icon`,kind:`text`,placeholder:`lucide icon name`},{name:`dismissible`,label:`Dismissible`,kind:`boolean`}],"record:path":[{name:`statusField`,label:`Status field`,kind:`field-picker`,objectFrom:`page`},{name:`stages`,label:`Stages`,kind:`array`,addLabel:`Add stage`,itemFields:[{name:`value`,label:`Value`,kind:`text`},{name:`label`,label:`Label`,kind:`text`}]}],"record:quick_actions":[{name:`actionNames`,label:`Action names`,kind:`string-list`,placeholder:`action name`},{name:`location`,label:`Location`,kind:`select`,options:[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record more menu`},{value:`record_section`,label:`Record section`},{value:`record_related`,label:`Record related`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List item`},{value:`global_nav`,label:`Global nav`}]}],"ai:chat_window":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}],"ai:input":[{name:`agentName`,label:`Agent`,kind:`text`,placeholder:`agent name`},{name:`placeholder`,label:`Input placeholder`,kind:`text`}]};function Kc(e){return!!e&&Array.isArray(Gc[e])&&Gc[e].length>0}function qc(){let e=mi(),[t,n]=X.useState([]),[r,i]=X.useState(!0);return X.useEffect(()=>{let t=!1;return i(!0),e.list(`object`).then(e=>{t||(n((e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value))),i(!1))}).catch(()=>{t||(n([]),i(!1))}),()=>{t=!0}},[e]),{options:t,loading:r}}function Jc(e){let{fields:t}=Di(e);return X.useMemo(()=>t.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[t])}function Yc({label:e,value:t,onCommit:n,disabled:r}){let{options:i}=qc();return i.length===0?(0,Y.jsx)(W,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(K,{label:e,value:t||void 0,options:i,onCommit:n,disabled:r})}function Xc({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let a=Jc(t);return!t||a.length===0?(0,Y.jsx)(W,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(K,{label:e,value:n||void 0,options:a,onCommit:r,disabled:i})}function Zc({label:e,objectName:t,value:n,onChange:r,disabled:i}){let a=Jc(t),o=Array.isArray(n)?n:[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),o.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[a.length>0?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsxs)(De,{value:e?String(e):``,onValueChange:e=>{let n=[...o];n[t]=e,r(n)},disabled:i,children:[(0,Y.jsx)(Be,{className:`h-8`,children:(0,Y.jsx)(zt,{placeholder:`—`})}),(0,Y.jsx)(We,{children:a.map(e=>(0,Y.jsx)(ur,{value:e.value,children:e.label},e.value))})]})}):(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(e??``),placeholder:`field name`,disabled:i,onChange:e=>{let n=[...o];n[t]=e.target.value,r(n)}}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:i,"aria-label":`Remove`,onClick:()=>r(o.filter((e,n)=>n!==t)),children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},t)),!i&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>r([...o,``]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]})}function Qc(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return``}}function $c({label:e,value:t,onCommit:n,disabled:r}){let i=X.useMemo(()=>Qc(t),[t]),[a,o]=X.useState(i),[s,c]=X.useState(null);return X.useEffect(()=>{o(i),c(null)},[i]),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:a,onChange:e=>o(e.target.value),onBlur:()=>{if(r)return;let e=a.trim();if(e===``){c(null),n(void 0);return}try{let t=JSON.parse(e);c(null),n(t)}catch{c(`Invalid JSON`)}},disabled:r,spellCheck:!1,rows:Math.min(12,Math.max(2,a.split(`
|
|
11
|
+
`).length)),className:`w-full rounded border border-input bg-background px-2 py-1.5 text-xs font-mono outline-none focus:ring-1 focus:ring-primary resize-y disabled:opacity-60`}),s&&(0,Y.jsx)(`div`,{className:`text-[11px] text-destructive`,children:s})]})}function el({name:e,value:t,onCommit:n,disabled:r}){return typeof t==`boolean`?(0,Y.jsx)(G,{label:e,value:t,onCommit:n,disabled:r}):typeof t==`number`?(0,Y.jsx)(ei,{label:e,value:t,onCommit:e=>n(e),disabled:r}):t===null||typeof t==`string`?(0,Y.jsx)(W,{label:e,value:t??``,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)($c,{label:e,value:t,onCommit:n,disabled:r})}var tl=new Set([`children`,`body`]),nl=Symbol(`remove`);function rl(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)(?:\[(\d+)\])?$/.exec(e);if(!t)return null;n.push({key:t[1],index:t[2]==null?-1:Number(t[2])})}return n.length>0?n:null}function il(e){let t=[];for(let n of e)t.push(n.key),n.index>=0&&t.push(n.index);return t}function al(e,t){let n=e;for(let e of t){if(n==null)return null;n=n[e]}return n??null}function ol(e,t,n){if(t.length===0)return n;let[r,...i]=t;if(typeof r==`number`){let t=Array.isArray(e)?[...e]:[];return i.length===0?n===nl?t.splice(r,1):t[r]=n:t[r]=ol(t[r],i,n),t}let a={...e||{}};return i.length===0?n===nl?delete a[r]:a[r]=n:a[r]=ol(a[r],i,n),a}function sl(e,t){return al(e,il(t))}function cl(e,t,n){let r=il(t),i=ol(e,r,n===null?nl:n),a=r[0];return{[a]:i[a]}}function ll(e,t){let n=il(t),r=n[n.length-1];if(typeof r!=`number`)return null;let i=al(e,n.slice(0,-1));return Array.isArray(i)?{siblings:i,index:r}:null}function ul(e,t,n){let r=il(t),i=ol(e,r.slice(0,-1),n),a=r[0];return{[a]:i[a]}}function dl({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=/^slot:([a-zA-Z_]+):(\d+)(?:\.(.+))?$/.exec(e.id),c=s?null:rl(e.id),l=s?s[1]:``,u=s?Number(s[2]):-1,d=s?s[3]:void 0,f=d?rl(d):null,p=t.slots&&typeof t.slots==`object`?t.slots:{},m=s?Array.isArray(p[l])?p[l]:p[l]==null?[]:[p[l]]:[],h=s?m[u]??null:null,g=e=>n({slots:{...p,[l]:e}}),_=e=>g(e===null?m.filter((e,t)=>t!==u):m.map((t,n)=>n===u?e:t)),v=s?f?sl(h||{},f):h:c?sl(t,c):null,y=s?f?ll(h||{},f):{siblings:m,index:u}:c?ll(t,c):null;if(!s&&!c||!v)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.pageBlock.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.pageBlock.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let b=e=>s?_(f?{...h,...cl(h||{},f,{...v,...e})}:{...v,...e}):n(cl(t,c,{...v,...e})),x=v.properties||{},S=typeof t?.object==`string`?t.object:void 0,C=e=>e.objectFrom===`page`?S:e.objectProp!=null&&x[e.objectProp]!=null?String(x[e.objectProp]):void 0,w=e=>x[e]??v[e],T=(e,t)=>b({properties:{...x,[e]:t}}),E=new Set((Kc(v.type)?Gc[v.type]:[]).map(e=>e.name)),D=Object.keys(x).filter(e=>!E.has(e)&&!tl.has(e)),O=(e,t,n,r=``)=>{let i=`${r}${e.name}`;switch(e.kind){case`number`:return(0,Y.jsx)(ei,{label:e.label,value:typeof t(e.name)==`number`?t(e.name):void 0,placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i);case`boolean`:return(0,Y.jsx)(G,{label:e.label,value:!!t(e.name),onCommit:t=>n(e.name,t),disabled:o},i);case`color`:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Si,{value:t(e.name)==null?void 0:String(t(e.name)),onChange:t=>n(e.name,t),disabled:o,options:e.options})]},i);case`select`:return(0,Y.jsx)(K,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),options:e.options,onCommit:t=>n(e.name,t),disabled:o},i);case`string-list`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,i)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{className:`h-8 text-sm`,value:String(t??``),placeholder:e.placeholder,disabled:o,onChange:t=>{let a=[...r];a[i]=t.target.value,n(e.name,a)}}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8`,disabled:o,"aria-label":`Remove`,onClick:()=>n(e.name,r.filter((e,t)=>t!==i)),children:(0,Y.jsx)(nt,{className:`h-4 w-4`})})]},i)),!o&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,``]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` Add`]})]},i)}case`array`:{let r=Array.isArray(t(e.name))?t(e.name):[];return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),r.map((t,a)=>{let s=t&&typeof t==`object`?t:{};return(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`#`,a+1]}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7`,disabled:o,"aria-label":`Remove item`,onClick:()=>n(e.name,r.filter((e,t)=>t!==a)),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),e.itemFields.map(t=>O(t,e=>s[e],(t,i)=>{let o=[...r];o[a]={...s,[t]:i},n(e.name,o)},`${i}-${a}-`))]},a)}),!o&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>n(e.name,[...r,{}]),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` `,e.addLabel||`Add`]})]},i)}case`object-picker`:return(0,Y.jsx)(Yc,{label:e.label,value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-picker`:return(0,Y.jsx)(Xc,{label:e.label,objectName:C(e),value:t(e.name)==null?void 0:String(t(e.name)),onCommit:t=>n(e.name,t),disabled:o},i);case`field-list`:return(0,Y.jsx)(Zc,{label:e.label,objectName:C(e),value:t(e.name),onChange:t=>n(e.name,t),disabled:o},i);default:return(0,Y.jsx)(W,{label:e.label,value:t(e.name)==null?``:String(t(e.name)),placeholder:e.placeholder,onCommit:t=>n(e.name,t),disabled:o},i)}},k=()=>{s?_(f?{...h,...cl(h||{},f,null)}:null):n(cl(t,c,null)),r()},A=e=>e.map(e=>e.index>=0?`${e.key}[${e.index}]`:e.key).join(`.`);return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.pageBlock.kind`,a),title:String(v.id||v.type||e.id),onClose:r,closeLabel:J(`engine.inspector.pageBlock.close`,a),headerActions:y?(0,Y.jsx)(ai,{index:y.index,total:y.siblings.length,onMove:e=>{if(!y)return;if(s){if(f){let t=Ii(y.siblings,y.index,e);_({...h,...ul(h||{},f,t)});let n=A([...f.slice(0,-1),{key:f[f.length-1].key,index:e}]);i?.({kind:`block`,id:`slot:${l}:${u}.${n}`,label:String(v.id||v.type||e)})}else g(Ii(m,u,e)),i?.({kind:`block`,id:`slot:${l}:${e}`,label:String(v.id||v.type||e)});return}n(ul(t,c,Ii(y.siblings,y.index,e)));let r=A([...c.slice(0,-1),{key:c[c.length-1].key,index:e}]);i?.({kind:`block`,id:r,label:String(v.id||v.type||r)})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}):void 0,footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.pageBlock.remove`,a),onClick:k,disabled:o}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.type`,a),value:v.type??``,onCommit:e=>b({type:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.id`,a),value:v.id??``,onCommit:e=>b({id:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.pageBlock.className`,a),value:v.className??``,onCommit:e=>b({className:e}),disabled:o,mono:!0}),(0,Y.jsx)(Oi,{label:J(`engine.inspector.pageBlock.hidden`,a),value:v.hidden??``,onCommit:e=>b({hidden:e||void 0}),objectName:S,disabled:o}),Kc(v.type)&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.pageBlock.properties`,a)}),Gc[v.type].map(e=>O(e,w,T))]}),D.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-3 border-t border-border pt-3`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.pageBlock.advanced`,a)}),D.map(e=>(0,Y.jsx)(el,{name:e,value:x[e],onCommit:t=>T(e,t),disabled:o},e))]})]})}var fl=new Set([`simple`,`tabbed`,`wizard`,`split`]),pl=new Set([`drawer`,`modal`]);function ml(e){return typeof e==`string`&&pl.has(e)}function hl(e){return typeof e==`string`&&fl.has(e)?e:`simple`}function gl(e){let t={...e,type:String(e?.type??``)},n=t.properties&&typeof t.properties==`object`?t.properties:void 0;return ml(n?.formType??t.formType)&&(n&&(t.properties={...n,formType:`simple`}),`formType`in t&&(t.formType=`simple`)),t}function _l(e=`300px`){let t=X.useRef(null),[n,r]=X.useState(()=>typeof IntersectionObserver>`u`);return X.useEffect(()=>{if(n)return;let i=t.current;if(!i)return;let a=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&(r(!0),a.disconnect())},{rootMargin:e});return a.observe(i),()=>a.disconnect()},[n,e]),{ref:t,inView:n}}function vl({block:e,maxHeightClass:t=`max-h-72`}){let n=String(e?.type??``),{ref:r,inView:i}=_l();return(0,Y.jsx)(`div`,{ref:r,className:L(`pointer-events-none select-none overflow-hidden p-3`,t),children:i?(0,Y.jsx)(Q,{fallbackHint:`"${n}" can't render with its current configuration — check its Properties.`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:gl(e)})})}):(0,Y.jsx)(`div`,{className:`min-h-[64px] animate-pulse rounded bg-muted/40`,"aria-hidden":`true`})})}var yl={1:`grid-cols-1`,2:`grid-cols-2`,3:`grid-cols-3`,4:`grid-cols-4`,5:`grid-cols-5`,6:`grid-cols-6`};function bl(e){let t=e?.properties||{};switch(e?.type){case`page:tabs`:case`page:accordion`:return(Array.isArray(t.items)?t.items:[]).map((e,t)=>({label:e?.label||e?.key||`Item ${t+1}`,pathSuffix:`properties.items[${t}].children`,children:Array.isArray(e?.children)?e.children:[]}));case`page:card`:return Array.isArray(t.body)&&!Array.isArray(t.children)?[{label:`Body`,pathSuffix:`properties.body`,children:t.body}]:[{label:`Body`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];case`page:section`:case`grid`:return[{label:`Content`,pathSuffix:`properties.children`,children:Array.isArray(t.children)?t.children:[]}];default:return Array.isArray(t.children)?[{label:`Content`,pathSuffix:`properties.children`,children:t.children}]:[]}}var xl=[`header`,`actions`,`alerts`,`highlights`,`details`,`tabs`,`discussion`];function Sl(e){let t=e||{};return xl.map(e=>{let n=t[e];return{name:e,components:Array.isArray(n)?n:n==null?[]:[n]}})}function Cl(e){let t={};for(let n of e){let e=Array.isArray(n.components)?n.components:[];e.length===0||!n.name||(t[n.name]=e)}return t}function wl(e){let t=e.slots;if(e.kind===`slotted`&&t&&typeof t==`object`&&!Array.isArray(t))return{regions:Sl(t),shape:`slots`};let n=e.regions;if(Array.isArray(n))return{regions:n,shape:`regions`};let r=e.children;return Array.isArray(r)?{regions:[{name:`children`,components:r}],shape:`children`}:{regions:[],shape:`regions`}}function Tl(e,t,n,r){return e===`children`?`children[${n}]`:e===`slots`?`slot:${r}:${n}`:`regions[${t}].components[${n}]`}function El(e){return typeof e.label==`string`&&e.label||typeof e.title==`string`&&e.title||typeof e.id==`string`&&e.id||String(e.type??`block`)}var Dl=`text/x-objectui-pageblock`;function Ol({draft:e,onPatch:t,selection:n,onSelectionChange:r}){let i=!t,{regions:a,shape:o}=X.useMemo(()=>wl(e),[e]),s=n?.kind===`block`?String(n.id):null,c=X.useCallback(e=>{if(o===`children`){let n=e.flatMap(e=>Array.isArray(e.components)?e.components:[]);t?.({children:n})}else o===`slots`?t?.({slots:Cl(e)}):t?.({regions:e})},[t,o]),l=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),s=i[e.region]?.components;if(!s)return;let[l]=s.splice(e.comp,1);if(!l)return;let u=i[n.region]?.components;if(!u)return;let d=u.length;if(`appendEnd`in n)d=u.length;else if(n.before!=null){let t=n.before;e.region===n.region&&e.comp<t&&--t,d=t}else if(n.after!=null){let t=n.after+1;e.region===n.region&&e.comp<n.after+1&&--t,d=t}u.splice(d,0,l),c(i);let f=Tl(o,n.region,d,i[n.region]?.name);r?.({kind:`block`,id:f,label:El(l)})},[t,r,a,c,o]),u=X.useCallback((e,n)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]}));i[e]||(i[e]={name:`region_${e+1}`,components:[]});let s={type:n};i[e].components.push(s),c(i);let l=i[e].components.length-1;r?.({kind:`block`,id:Tl(o,e,l,i[e]?.name),label:El(s)})},[t,r,a,c,o]),d=X.useCallback((e,n,r)=>{if(!t)return;let i=a.map(e=>({...e,components:Array.isArray(e.components)?[...e.components]:[]})),o=i[e]?.components?.[n];o&&(i[e].components[n]={...o,label:r||void 0},c(i))},[t,a,c]),f=X.useCallback(()=>{t&&c([...a,{name:`region_${a.length+1}`,components:[]}])},[t,a,c]),p=X.useCallback((n,i,a)=>{if(!t)return;let o=/^slot:([a-zA-Z_]+):(\d+)$/.exec(n),s=rl(i);if(!s)return;let c=il(s);if(o){let s=o[1],l=Number(o[2]),u=e.slots||{},d=u[s],f=Array.isArray(d)?[...d]:d==null?[]:[d],p=f[l];if(!p)return;let m=al(p,c)||[];f[l]=ol(p,c,[...m,{type:a}]),t({slots:{...u,[s]:f}}),r?.({kind:`block`,id:`${n}.${i}[${m.length}]`,label:a})}else{let o=rl(`${n}.${i}`);if(!o)return;let s=il(o),c=al(e,s)||[],l=ol(e,s,[...c,{type:a}]);t({[s[0]]:l[s[0]]}),r?.({kind:`block`,id:`${n}.${i}[${c.length}]`,label:a})}},[t,e,r]),m=X.useCallback(e=>{e.target===e.currentTarget&&s&&r?.(null)},[r,s]);return a.length===0?(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsx)(`div`,{className:`mx-auto max-w-3xl px-6 py-8`,children:(0,Y.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed bg-background py-16 px-6 text-center space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:`No regions yet`}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`A Page is composed of regions (header / main / sidebar / …). Add a region to start dropping blocks into it.`}),!i&&(0,Y.jsx)(`div`,{className:`pt-2`,children:(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,onClick:f,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}):(0,Y.jsx)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:m,children:(0,Y.jsxs)(`div`,{className:`mx-auto max-w-3xl px-6 py-6 space-y-5`,onClick:m,children:[a.map((e,t)=>(0,Y.jsx)(kl,{region:e,regionIdx:t,shape:o,selectedId:s,readOnly:i,onSelectBlock:(n,i)=>r?.({kind:`block`,id:Tl(o,t,n,e.name),label:El(i)}),onMoveBlock:l,onAddBlock:u,onRenameLabel:d,baseIdOf:n=>Tl(o,t,n,e.name),onSelectId:(e,t)=>r?.({kind:`block`,id:e,label:t}),onAddNested:p},t)),!i&&o===`regions`&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-muted-foreground`,onClick:f,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add region`]})})]})})}function kl({region:e,regionIdx:t,shape:n,selectedId:r,readOnly:i,onSelectBlock:a,onMoveBlock:o,onAddBlock:s,onRenameLabel:c,onSelectId:l,onAddNested:u}){let d=Array.isArray(e.components)?e.components:[],[f,p]=X.useState(!1);return(0,Y.jsxs)(`section`,{className:L(`rounded-md transition-colors`,f&&`bg-primary/5 ring-1 ring-primary/30 -mx-1 px-1 py-1`),onDragOver:e=>{if(i)return;let t=e.dataTransfer.types;!t||!Array.from(t).includes(Dl)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,p(!0))},onDragLeave:e=>{e.currentTarget===e.target&&p(!1)},onDrop:e=>{if(i||(p(!1),e.defaultPrevented))return;e.preventDefault();let n=e.dataTransfer.getData(Dl);if(n)try{let e=JSON.parse(n);if(typeof e.region!=`number`||typeof e.comp!=`number`)return;o(e,{region:t,appendEnd:!0})}catch{}},children:[(0,Y.jsxs)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground pl-1 mb-2 flex items-center gap-2`,children:[(0,Y.jsx)(`span`,{children:e.name||`region ${t+1}`}),e.width&&(0,Y.jsxs)(`span`,{className:`normal-case text-[10px] text-muted-foreground/60`,children:[`· `,e.width]}),f&&(0,Y.jsx)(`span`,{className:`text-primary normal-case text-[10px]`,children:`drop here`})]}),(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[d.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/50 py-6 px-4 text-center text-xs text-muted-foreground`,children:n===`slots`?`Inherited from the default page — add a block to override this slot.`:`Empty region — drop a block here or use the add button below.`}):d.map((s,d)=>{let f=Tl(n,t,d,e.name);return(0,Y.jsxs)(X.Fragment,{children:[(0,Y.jsx)(Al,{block:s,regionIdx:t,compIdx:d,selected:f===r,readOnly:i,onClick:()=>a(d,s),onMoveBlock:o,onRenameLabel:e=>c(t,d,e)}),(0,Y.jsx)(jl,{block:s,baseId:f,selectedId:r,readOnly:i,onSelectId:l,onAddNested:u})]},`${t}:${d}`)}),!i&&(0,Y.jsx)(`div`,{className:`pt-1`,children:(0,Y.jsx)(Ml,{onPick:e=>s(t,e)})})]})]})}function Al({block:e,regionIdx:t,compIdx:n,selected:r,readOnly:i,onClick:a,onMoveBlock:o,onRenameLabel:s}){let c=String(e.type??``),l=zc[c]?.Icon??Hc,u=Wc(c),d=El(e),f=!i,[p,m]=X.useState(null),h=e=>{e.dataTransfer.setData(Dl,JSON.stringify({region:t,comp:n})),e.dataTransfer.effectAllowed=`move`},g=e=>{if(!f)return;let t=e.dataTransfer.types;if(!t||!Array.from(t).includes(Dl))return;e.preventDefault(),e.dataTransfer.dropEffect=`move`;let n=e.currentTarget.getBoundingClientRect();m(e.clientY-n.top<n.height/2?`before`:`after`)},_=()=>m(null),v=e=>{if(i)return;e.preventDefault(),e.stopPropagation();let r=p??`before`;m(null);let a=e.dataTransfer.getData(Dl);if(a)try{let e=JSON.parse(a);if(e.region===t&&e.comp===n)return;o(e,r===`before`?{region:t,before:n}:{region:t,after:n})}catch{}},[y,b]=X.useState(!1),[x,S]=X.useState(d);X.useEffect(()=>{S(d)},[d]);let C=e=>{i||(e.preventDefault(),e.stopPropagation(),S(d),b(!0))},w=()=>{if(i){b(!1);return}let e=x.trim();e&&e!==d&&s(e),b(!1)},T=()=>{S(d),b(!1)},E=bl(e).length>0;return(0,Y.jsxs)(`div`,{className:L(`relative`,p===`before`&&`pt-1.5`),onDragOver:g,onDragLeave:_,onDrop:v,children:[p===`before`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -top-0.5 h-0.5 bg-primary rounded-full`}),(0,Y.jsx)(`div`,{className:L(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,r?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:E?(0,Y.jsxs)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,className:L(`flex w-full items-center justify-between gap-2 rounded-md px-3.5 py-2.5 text-left`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`),"aria-pressed":r,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0 flex-1`,children:[f&&(0,Y.jsx)(En,{className:`h-3.5 w-3.5 text-muted-foreground/40 shrink-0 group-hover:text-muted-foreground/80`,"aria-hidden":`true`}),(0,Y.jsx)(l,{className:L(`h-3.5 w-3.5 shrink-0`,u.icon)}),y?(0,Y.jsx)(`input`,{autoFocus:!0,value:x,onChange:e=>S(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(e.preventDefault(),w()):e.key===`Escape`&&(e.preventDefault(),T())},onBlur:w,className:`text-sm font-medium px-1 py-0.5 -mx-1 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1`}):(0,Y.jsx)(`span`,{className:L(`text-sm font-medium truncate`,!i&&`cursor-text`),onDoubleClick:C,title:i?void 0:`Double-click to rename`,children:d}),e.id&&e.id!==d&&(0,Y.jsxs)(`code`,{className:`text-[10px] text-muted-foreground/70 font-mono truncate`,children:[`#`,e.id]})]}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] shrink-0 font-mono`,u.badge),children:c})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(vl,{block:e}),(0,Y.jsx)(`button`,{type:`button`,onClick:a,draggable:f,onDragStart:h,"aria-label":`Select ${d}`,"aria-pressed":r,className:L(`absolute inset-0 z-10 rounded-md`,i&&`cursor-default`,f&&`cursor-grab active:cursor-grabbing`)}),(0,Y.jsxs)(`div`,{className:L(`pointer-events-none absolute right-1.5 top-1.5 z-20 flex items-center gap-1 transition-opacity`,r?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:[f&&(0,Y.jsx)(En,{className:`h-3.5 w-3.5 text-muted-foreground/60`,"aria-hidden":`true`}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,u.badge),children:c})]})]})}),p===`after`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -bottom-1 h-0.5 bg-primary rounded-full`})]})}function jl({block:e,baseId:t,selectedId:n,readOnly:r,onSelectId:i,onAddNested:a}){let o=bl(e);if(o.length===0)return null;let s=yl[e?.type===`grid`?Math.min(6,Math.max(1,Number(e.properties?.columns)||1)):1]??`grid-cols-1`;return(0,Y.jsx)(`div`,{className:`ml-5 mt-1.5 space-y-2.5 border-l border-dashed border-border pl-3`,children:o.map((e,o)=>(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-medium uppercase tracking-wider text-muted-foreground/70`,children:e.label}),e.children.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed bg-background/40 py-2 px-3 text-[11px] text-muted-foreground`,children:`Empty — add a block.`}):(0,Y.jsx)(`div`,{className:L(`grid gap-2`,s),children:e.children.map((r,a)=>{let o=`${t}.${e.pathSuffix}[${a}]`,s=String(r?.type??``),c=o===n;return(0,Y.jsxs)(`div`,{className:L(`group relative rounded-md border bg-card transition-colors hover:border-primary/40`,c?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`),children:[(0,Y.jsx)(vl,{block:r,maxHeightClass:`max-h-56`}),(0,Y.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),i(o,El(r))},"aria-label":`Select ${El(r)}`,"aria-pressed":c,className:`absolute inset-0 z-10 rounded-md cursor-pointer`}),(0,Y.jsx)(`div`,{className:L(`pointer-events-none absolute right-1.5 top-1.5 z-20 transition-opacity`,c?`opacity-100`:`opacity-0 group-hover:opacity-100`),children:(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-mono shadow-sm bg-background/90 backdrop-blur`,Wc(s).badge),children:s})})]},a)})}),!r&&(0,Y.jsx)(Ml,{onPick:n=>a(t,e.pathSuffix,n)})]},o))})}function Ml({onPick:e}){let[t,n]=X.useState(!1),[r,i]=X.useState(``),a=r.trim().toLowerCase(),o=X.useMemo(()=>a?Vc.map(e=>({category:e.category,types:e.types.filter(e=>{let t=zc[e];return e.includes(a)||t.label.toLowerCase().includes(a)})})).filter(e=>e.types.length>0):Vc,[a]);return(0,Y.jsxs)(Mn,{open:t,onOpenChange:e=>{n(e),e||i(``)},children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),`Add block`]})}),(0,Y.jsxs)(Zt,{align:`start`,className:`w-[320px] p-0 max-h-[480px] overflow-hidden flex flex-col`,children:[(0,Y.jsx)(`div`,{className:`p-2 border-b`,children:(0,Y.jsx)(`input`,{autoFocus:!0,value:r,onChange:e=>i(e.target.value),placeholder:`Search block type…`,className:`h-7 w-full px-2 text-sm border rounded bg-background outline-none focus:ring-1 focus:ring-primary`})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto p-1`,children:o.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground p-4 text-center`,children:`No matching types.`}):o.map(t=>(0,Y.jsxs)(`div`,{className:`mb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground px-2 py-1`,children:Bc[t.category]}),t.types.map(t=>{let r=zc[t],a=r.Icon;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{e(t),n(!1),i(``)},className:`w-full flex items-center gap-2 px-2 py-1.5 rounded text-sm hover:bg-accent text-left`,children:[(0,Y.jsx)(a,{className:L(`h-3.5 w-3.5 shrink-0`,Wc(t).icon)}),(0,Y.jsx)(`span`,{className:`truncate`,children:r.label}),(0,Y.jsx)(`code`,{className:`ml-auto text-[10px] text-muted-foreground/70 font-mono truncate`,children:t})]},t)})]},t.category))})]})]})}function Nl({draft:e,editing:t,selection:n,onSelectionChange:r,onPatch:i,locale:a}){let o=X.useMemo(()=>{let t=e.type??`page`;return{...e,type:t}},[e]),s=!!(t&&r),c=s&&!!i,l=n&&n.kind===`block`?n.id:null,u=!!e?.interfaceConfig?.source,d=X.useMemo(()=>Array.isArray(e.regions)?`regions`:`children`,[e]),f=X.useMemo(()=>{if(d===`regions`){let t=e.regions,n=[];return t.forEach((e,t)=>{(Array.isArray(e.components)?e.components:[]).forEach((r,i)=>{n.push({id:`regions[${t}].components[${i}]`,label:r.id||r.type||`${e.name??`region ${t+1}`} · ${i+1}`})})}),n}return(Array.isArray(e.children)?e.children:[]).map((e,t)=>({id:`children[${t}]`,label:e.id||e.type||`block ${t+1}`}))},[e,d]),m=X.useCallback(()=>{if(!c)return;let t={type:`container`};if(d===`regions`){let n=Array.isArray(e.regions)?[...e.regions]:[],a=n.length-1;a<0&&(n.push({name:`main`,components:[]}),a=0);let o={...n[a]},s=Array.isArray(o.components)?[...o.components]:[];s.push(t),o.components=s,n[a]=o,i({regions:n}),r?.({kind:`block`,id:`regions[${a}].components[${s.length-1}]`,label:t.type});return}let n=[...Array.isArray(e.children)?e.children:[],t];i({children:n}),r?.({kind:`block`,id:`children[${n.length-1}]`,label:t.type})},[c,e,i,r,d]),g=e?.type===`record`||e?.pageType===`record`?e?.object:void 0,[_,v]=X.useState([]),[y,x]=X.useState(null),[S,C]=X.useState(null);X.useEffect(()=>{if(!g){v([]),x(null),C(null);return}let e=!1;return(async()=>{try{let t={headers:{accept:`application/json`},credentials:`include`},n=await(await fetch(`/api/v1/meta/object/${encodeURIComponent(g)}`,t)).json().catch(()=>null),r=n?.item??n?.data??n,i=p(r?.fields),a=i.length>0?`?$top=50&$expand=${encodeURIComponent(i.join(`,`))}`:`?$top=50`,o=await(await fetch(`/api/v1/data/${encodeURIComponent(g)}${a}`,t)).json().catch(()=>null),s=Array.isArray(o?.records)?o.records:Array.isArray(o?.items)?o.items:Array.isArray(o?.data)?o.data:Array.isArray(o)?o:[];if(e)return;v(s),x(r),C(e=>e??s[0]?.id??s[0]?._id??s[0]?.name??null)}catch{e||(v([]),x(null))}})(),()=>{e=!0}},[g]);let w=e=>e?.id??e?._id??e?.name,T=e=>String(e?.name??e?.title??e?.label??e?.subject??w(e)??`(record)`),E=X.useMemo(()=>_.length?_.find(e=>String(w(e))===String(S))??_[0]:null,[_,S]),D=e?.kind===`slotted`,O=X.useMemo(()=>{if(!D)return o;try{let t=e?.slots??{};return Wi(y??void 0,{slots:t})}catch{return o}},[D,o,e,y]),k=e=>!g||!E?e:(0,Y.jsxs)(b,{objectName:g,recordId:w(E),data:E,objectSchema:y??void 0,embedded:!0,children:[_.length>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b bg-muted/30 text-xs`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground shrink-0`,children:`Preview record`}),(0,Y.jsx)(`select`,{className:`h-7 rounded-md border bg-background px-2 text-xs max-w-[260px]`,value:String(S??``),onChange:e=>C(e.target.value),children:_.map(e=>{let t=w(e);return(0,Y.jsx)(`option`,{value:String(t),children:T(e)},String(t))})}),(0,Y.jsxs)(`span`,{className:`text-muted-foreground/70 shrink-0`,children:[_.length,` sample`,_.length===1?``:`s`]})]}),e]});return u?(0,Y.jsx)(Z,{hint:`page · interface`,children:(0,Y.jsx)(Q,{fallbackHint:`The interface page references a source object/view that isn't available.`,children:(0,Y.jsx)(Ui,{page:e,onConfigChange:c?t=>i({interfaceConfig:{...e.interfaceConfig||{},...t}}):void 0})})}):!o||Object.keys(o).length<=1?(0,Y.jsxs)(Z,{hint:`page${s?` · design`:``}`,children:[s&&d===`regions`?(0,Y.jsx)(Ol,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}):s?(0,Y.jsx)(Rc,{title:J(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?m:void 0,addLabel:J(`engine.inspector.add.block`,a)}):null,!s&&(0,Y.jsx)(Ic,{children:`Add components to the page to see a preview.`})]}):s&&d===`regions`?(0,Y.jsx)(Z,{hint:`page · design`,children:k((0,Y.jsx)(Ol,{draft:e,onPatch:c?i:void 0,selection:n??null,onSelectionChange:r}))}):(0,Y.jsx)(Z,{hint:`page${s?` · design`:``}`,children:(0,Y.jsxs)(Q,{fallbackHint:`The Page schema is incomplete or references a component that hasn't been registered yet.`,children:[s&&(0,Y.jsx)(Rc,{title:J(`engine.inspector.pageBlock.outlineLabel`,a),entries:f,selectedId:l,onSelect:e=>r?.({kind:`block`,id:e.id,label:e.label}),onAdd:c?m:void 0,addLabel:J(`engine.inspector.add.block`,a)}),k((0,Y.jsx)(`div`,{className:`min-h-[200px] max-h-[70vh] overflow-auto p-4`,children:(0,Y.jsx)(h,{schema:O})}))]})})}function Pl(e,t){let n=[t?.object,t?.data?.object,t?.objectName,e.object,e.objectName,e.data?.object];for(let e of n)if(typeof e==`string`&&e)return e}function Fl(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`){let t=e,n=t.field??t.name;return n?{...t,name:n,readOnly:t.readOnly??t.readonly}:t}return String(e)}function Il(e,t){return{type:`object-form`,objectName:e,mode:`create`,formType:hl(typeof t.type==`string`?t.type:`simple`),sections:Array.isArray(t.sections)?t.sections.map(e=>({...e,fields:Array.isArray(e?.fields)?e.fields.map(Fl):[]})):void 0,fields:Array.isArray(t.fields)?t.fields:void 0,showSubmit:!1,showCancel:!1}}function Ll({name:e,draft:t,editing:n}){let r=X.useMemo(()=>Aa(t)?.schema,[t]),i=X.useMemo(()=>Pl(t,r),[t,r]),a=!!n,{listViews:o,defaultViewId:s,defaultViewType:c}=X.useMemo(()=>{if(!r)return{listViews:{},defaultViewId:void 0,defaultViewType:`grid`};let n=String(e)||`default`;return{listViews:{[n]:{...r,label:r.label??t.label??e}},defaultViewId:n,defaultViewType:r.type??`grid`}},[r,t,e]);if(!r&&t.type){let e={...t};return(0,Y.jsx)(Z,{hint:`view · ${e.type}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:"The view's `type` may not be registered, or required fields are missing.",children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:e})})})})})}if(!i)return(0,Y.jsx)(Z,{hint:`view${a?` · design`:``}`,children:(0,Y.jsxs)(Ic,{tone:`warn`,children:[`This view has no object binding yet. Set the bound `,(0,Y.jsx)(`code`,{children:`Object`}),` in the right panel to fetch live data and field options.`]})});if(t.viewKind===`form`&&r){let e=String(r.type??`simple`),t=Il(i,r);return(0,Y.jsx)(Z,{hint:`view · ${e} · form${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The form view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:t})})})})})}let l=X.useMemo(()=>({type:`object-view`,objectName:i,defaultViewType:c,defaultListView:s,listViews:o,showSearch:!0,showFilters:!0,showCreate:!1,showRefresh:!0,showViewSwitcher:!0}),[i,c,s,o]);return(0,Y.jsx)(Z,{hint:`view · ${c}${a?` · design`:``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The view references an object or field that doesn't resolve.`,children:(0,Y.jsx)(`div`,{className:`min-h-[300px] max-h-[75vh] overflow-auto`,children:(0,Y.jsx)(m,{children:(0,Y.jsx)(h,{schema:l})})})})})}var Rl=X.lazy(()=>o(()=>import(`./plugin-dashboard-C5-M_XlX.js`).then(e=>e.t).then(e=>({default:e.DashboardRenderer})),__vite__mapDeps([0,1]),import.meta.url));function zl({draft:e,editing:t,onPatch:n,selection:r,onSelectionChange:i,locale:a}){let o=f(),s=Array.isArray(e.widgets)?e.widgets:[],c=!!(t&&i),l=c&&!!n,u=r&&r.kind===`widget`?r.id:null,d=X.useCallback(e=>{if(i){if(!e){i(null);return}i({kind:`widget`,id:e,label:s.find(t=>t?.id===e)?.title||e})}},[i,s]),p=X.useCallback(e=>{n&&n({widgets:e})},[n]),m=X.useCallback(e=>{if(!l)return;let t=bi(`widget`,s.map(e=>e?.id).filter(Boolean)),r=qi[e],a=r?`New ${r.label.toLowerCase()}`:`New widget`;n({widgets:ci(s,{id:t,type:e,title:a,...r?.defaults??{}})}),i?.({kind:`widget`,id:t,label:a})},[l,s,n,i]),h=X.useCallback((e,t)=>{if(!l)return;let r=t.trim();n({widgets:s.map(t=>t?.id===e?{...t,title:r}:t)}),i?.({kind:`widget`,id:e,label:r||e})},[l,s,n,i]),g=u?s.find(e=>e?.id===u)??null:null,_=l?(0,Y.jsx)(Zi,{onAdd:m,label:J(`engine.inspector.add.widget`,a)}):null;return s.length===0?(0,Y.jsx)(Z,{hint:`dashboard${c?` · design`:``}`,toolbar:_,children:(0,Y.jsx)(Ic,{children:`Add at least one widget to see a preview.`})}):(0,Y.jsx)(Z,{hint:`dashboard · ${s.length} widget${s.length===1?``:`s`}${c?` · design`:``}`,toolbar:_,children:(0,Y.jsxs)(Q,{fallbackHint:`A widget references an object or field that doesn't resolve.`,children:[l&&g?(0,Y.jsx)(Bl,{widget:g,onRename:e=>h(g.id,e),onClose:()=>i?.(null)}):null,(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`p-6 text-sm text-muted-foreground flex items-center gap-2`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading dashboard renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(`div`,{className:`min-w-[768px]`,children:(0,Y.jsx)(Rl,{schema:e,dataSource:o,designMode:c,selectedWidgetId:u,onWidgetClick:c?d:void 0,onWidgetsReorder:c&&n?p:void 0,hideHeaderText:!0})})})})]})})}function Bl({widget:e,onRename:t,onClose:n}){let r=e.title??e.id??``,[i,a]=X.useState(!1),[o,s]=X.useState(r),c=X.useRef(null);X.useEffect(()=>{s(r),a(!1)},[e.id,r]),X.useEffect(()=>{i&&c.current?.select()},[i]);let l=()=>{let e=o.trim();e&&e!==r&&t(e),a(!1)},u=()=>{s(r),a(!1)},d=qi[e.type]?.icon??null;return(0,Y.jsxs)(`div`,{className:`sticky top-0 z-10 flex items-center gap-2 border-b bg-primary/5 px-3 py-1.5 text-xs`,children:[d?(0,Y.jsx)(d,{className:`h-3.5 w-3.5 text-primary`}):null,(0,Y.jsx)(`span`,{className:`rounded bg-primary px-1.5 py-0.5 text-[10px] font-medium uppercase tracking-wide text-primary-foreground`,children:`Selected`}),i?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`input`,{ref:c,value:o,onChange:e=>s(e.target.value),onBlur:l,onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),l()):e.key===`Escape`&&(e.preventDefault(),u())},className:`flex-1 min-w-0 rounded border bg-background px-2 py-0.5 text-xs outline-none focus:ring-1 focus:ring-primary`}),(0,Y.jsx)(`button`,{type:`button`,onClick:l,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Save title`,children:(0,Y.jsx)(je,{className:`h-3.5 w-3.5`})})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`flex-1 min-w-0 truncate text-left font-medium hover:underline`,title:`Click to rename`,children:r||(0,Y.jsx)(`span`,{className:`italic text-muted-foreground`,children:`untitled`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>a(!0),className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Rename widget`,children:(0,Y.jsx)(Jn,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(`button`,{type:`button`,onClick:n,className:`rounded p-1 hover:bg-primary/10`,"aria-label":`Clear selection`,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]})}var Vl=X.lazy(()=>o(()=>import(`./plugin-report-C_gu6Sl0.js`).then(e=>e.t).then(e=>({default:e.ReportRenderer})),__vite__mapDeps([0]),import.meta.url));function Hl({draft:e}){let t=f(),n=e,r=typeof n.dataset==`string`&&!!n.dataset,i=n.type===`joined`&&Array.isArray(n.blocks)&&n.blocks.some(e=>typeof e?.dataset==`string`&&!!e.dataset);if(r||i){let r=Array.isArray(n.rows)?n.rows.filter(Boolean):[];return(0,Y.jsx)(Z,{hint:i?`report · joined · ${n.blocks.length} block${n.blocks.length===1?``:`s`}`:`report · dataset "${n.dataset}"${r.length?` · by `+r.join(`, `):``}`,children:(0,Y.jsx)(Q,{fallbackHint:`The Report references a dataset/measure that doesn't resolve, or its config is incomplete.`,children:(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 p-4 text-xs text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Loading report renderer…`]}),children:(0,Y.jsx)(`div`,{className:`p-3 min-h-[200px] max-h-[70vh] overflow-auto`,children:(0,Y.jsx)(Vl,{schema:e,dataSource:t})})})})})}let a=n.type===`joined`;return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(br,{className:`h-8 w-8`}),title:a?`Add a block to preview this joined report`:`Bind a dataset to preview this report`,description:a?`A joined report stacks dataset-bound blocks. Add a block and bind its dataset + measures in the right panel to start designing.`:`Since the 9.0 single-form cutover a report renders its dataset's measures (values) grouped by dimensions (rows). Choose a Dataset in the right panel to start designing.`})})}var Ul=`text/x-objectui-nav`;function Wl(e){if(e.kind)return String(e.kind);if(e.object||e.objectName)return`object`;if(e.page||e.pageName)return`page`;if(e.dashboard)return`dashboard`;if(e.report)return`report`;if(Array.isArray(e.children)&&e.children.length)return`group`;let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&/^https?:/i.test(t)?`link`:`item`}function Gl(e){switch(e){case`object`:return br;case`page`:return at;case`dashboard`:return Pt;case`report`:return Rt;case`link`:return At;case`group`:return vt;default:return un}}var Kl={object:{icon:`text-blue-500`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-900 dark:bg-blue-950/40 dark:text-blue-300`},page:{icon:`text-violet-500`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-900 dark:bg-violet-950/40 dark:text-violet-300`},dashboard:{icon:`text-teal-500`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-900 dark:bg-teal-950/40 dark:text-teal-300`},report:{icon:`text-amber-500`,badge:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-900 dark:bg-amber-950/40 dark:text-amber-300`},link:{icon:`text-indigo-500`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-900 dark:bg-indigo-950/40 dark:text-indigo-300`},group:{icon:`text-slate-500`,badge:`border-slate-200 bg-slate-50 text-slate-700 dark:border-slate-800 dark:bg-slate-900/40 dark:text-slate-300`},item:{icon:`text-zinc-500`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-800 dark:bg-zinc-900/40 dark:text-zinc-400`}};function ql(e){return Kl[e]??Kl.item}function Jl(e,t){let n=e.label??e.title??e.name??e.path;return typeof n==`string`&&n.trim()?n.trim():`Item ${t+1}`}function Yl(e){let t=e.path??e.href??e.route??e.url;return typeof t==`string`&&t?t:void 0}function Xl({draft:e,rootKey:t,onPatch:n,selection:r,onSelectionChange:i}){let a=X.useMemo(()=>{let n=e[t];return Array.isArray(n)?n:[]},[e,t]),o=r&&r.kind===`nav`?r.id:null,[s,c]=X.useState(null),l=X.useCallback(e=>{n&&n({[t]:e})},[n,t]),u=X.useCallback(()=>{if(!n)return;let e=ci(a,{label:`New item`,path:``});l(e),i?.({kind:`nav`,id:`${t}[${e.length-1}]`,label:`New item`})},[n,a,l,t,i]),d=X.useCallback(e=>{n&&(l(si(a,e,null)),o===`${t}[${e}]`&&i?.(null))},[n,a,l,t,o,i]),f=X.useCallback((e,r)=>{n&&(l(si(a,e,{...a[e]??{},label:r})),o===`${t}[${e}]`&&i?.({kind:`nav`,id:`${t}[${e}]`,label:r}))},[n,a,l,t,o,i]),p=X.useCallback((e,r)=>{if(!n)return;let o=r;if(e<r&&(o=r-1),o===e)return;let s=Ii(a,e,o);l(s),i?.({kind:`nav`,id:`${t}[${o}]`,label:Jl(s[o]??{},o)})},[n,a,l,t,i]);return(0,Y.jsxs)(`div`,{className:`rounded-md border bg-card/40`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-xs`,children:[(0,Y.jsx)(`span`,{className:`font-mono uppercase tracking-wide text-muted-foreground`,children:t}),(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px]`,children:[a.length,` `,a.length===1?`item`:`items`]})]}),n&&(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded border border-dashed px-2 py-1 text-[11px] text-muted-foreground hover:bg-muted/30 hover:text-foreground`,onClick:u,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` Add nav item`]})]}),(0,Y.jsx)(`div`,{className:`space-y-1.5 p-2`,onDragOver:e=>{n&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},onDrop:e=>{n&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),s!=null&&(p(s,a.length),c(null)))},children:a.length===0?(0,Y.jsx)(`div`,{className:`rounded border border-dashed px-3 py-4 text-center text-[11px] text-muted-foreground`,children:n?`Empty — click "Add nav item" to start`:`No top-level nav items yet`}):a.map((e,r)=>(0,Y.jsx)(Zl,{item:e,index:r,depth:0,path:`${t}[${r}]`,selectedId:o,canEdit:!!n,onClick:(e,t)=>i?.({kind:`nav`,id:e,label:t}),onRename:e=>f(r,e),onRemove:()=>d(r),onDragStart:()=>c(r),onDragEnd:()=>c(null),onDropBefore:()=>{s!=null&&(p(s,r),c(null))}},r))})]})}function Zl({item:e,index:t,depth:n,path:r,selectedId:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Ql,{item:e,index:t,depth:n,path:r,isSelected:i===r,canEdit:a&&n===0,onClick:()=>o(r,Jl(e,t)),onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}),Array.isArray(e.children)&&e.children.map((e,t)=>{let s=`${r}.children[${t}]`;return(0,Y.jsx)(Zl,{item:e,index:t,depth:n+1,path:s,selectedId:i,canEdit:a,onClick:o,onRename:()=>void 0,onRemove:()=>void 0,onDragStart:()=>void 0,onDragEnd:()=>void 0,onDropBefore:()=>void 0},t)})]})}function Ql({item:e,index:t,depth:n,path:r,isSelected:i,canEdit:a,onClick:o,onRename:s,onRemove:c,onDragStart:l,onDragEnd:u,onDropBefore:d}){let f=Wl(e),p=Gl(f),m=ql(f),h=Yl(e),[g,_]=X.useState(!1),[v,y]=X.useState(Jl(e,t)),[b,x]=X.useState(!1),[S,C]=X.useState(null);return X.useEffect(()=>{g||y(Jl(e,t))},[e,t,g]),(0,Y.jsxs)(`div`,{className:`relative`,style:{paddingLeft:n*16},children:[S===`before`&&(0,Y.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 -top-0.5 h-0.5 rounded bg-primary`}),(0,Y.jsxs)(`button`,{type:`button`,draggable:a&&!g,onDragStart:e=>{a&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(Ul,r),l())},onDragEnd:u,onDragOver:e=>{a&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,C(`before`))},onDragLeave:()=>C(null),onDrop:e=>{a&&e.dataTransfer.types.includes(Ul)&&(e.preventDefault(),e.stopPropagation(),C(null),d())},onClick:o,onMouseEnter:()=>x(!0),onMouseLeave:()=>x(!1),"aria-pressed":i,className:`group flex w-full items-center gap-2 rounded-md border bg-card px-2.5 py-2 text-left text-xs transition-colors hover:border-primary/40 ${i?`border-primary ring-1 ring-primary`:`border-border`} ${a&&!g?`cursor-grab active:cursor-grabbing`:``}`,children:[a?(0,Y.jsx)(En,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/50 group-hover:text-muted-foreground`}):(0,Y.jsx)(`span`,{className:`w-3.5`}),(0,Y.jsx)(p,{className:L(`h-3.5 w-3.5 shrink-0`,m.icon)}),g?(0,Y.jsx)(`input`,{autoFocus:!0,value:v,onChange:e=>y(e.target.value),onClick:e=>e.stopPropagation(),onBlur:()=>{_(!1);let n=v.trim();n&&n!==Jl(e,t)&&s(n)},onKeyDown:n=>{n.key===`Enter`?(n.preventDefault(),n.target.blur()):n.key===`Escape`&&(n.preventDefault(),y(Jl(e,t)),_(!1))},className:`flex-1 min-w-0 rounded border border-input bg-background px-1.5 py-0.5 text-xs outline-none focus:border-primary`}):(0,Y.jsx)(`span`,{className:`flex-1 min-w-0 truncate font-medium`,onDoubleClick:e=>{a&&(e.stopPropagation(),_(!0))},children:Jl(e,t)}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-medium`,m.badge),children:f}),h&&(0,Y.jsx)(`code`,{className:`ml-0 text-[10px] text-muted-foreground truncate max-w-[10rem]`,children:h}),a&&b&&!g&&(0,Y.jsx)(`span`,{role:`button`,tabIndex:0,onClick:e=>{e.stopPropagation(),c()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),c())},className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,"aria-label":`Remove nav item`,children:(0,Y.jsx)(lr,{className:`h-3 w-3`})})]})]})}function $l(e){return Array.isArray(e)?e.map(e=>{if(!e||typeof e!=`object`)return null;let t=String(e.label??e.title??e.name??e.path??``).trim();if(!t&&!e.children)return null;let n=e.path??e.href??e.route??e.url??void 0,r;e.object||e.objectName?r=`object`:e.page||e.pageName?r=`page`:e.dashboard?r=`dashboard`:e.report?r=`report`:typeof n==`string`&&/^https?:/i.test(n)?r=`link`:Array.isArray(e.children)&&e.children.length&&(r=`group`);let i=Array.isArray(e.children)?$l(e.children):void 0;return{label:t||`(unnamed)`,path:n,kind:r,children:i}}).filter(e=>e!==null):[]}function eu(e){switch(e){case`object`:return br;case`page`:return at;case`dashboard`:return Pt;case`report`:return Rt;default:return un}}function tu({name:e,draft:t,editing:n,selection:r,onSelectionChange:i,onPatch:a}){let o=String(t.name??e??``),s=t.label??o,c=t.landingRoute??t.landing??t.defaultRoute??`/`,{rootKey:l,navItems:u}=X.useMemo(()=>{let e=[[`nav`,t.nav],[`navigation`,t.navigation],[`tabs`,t.tabs],[`items`,t.items],[`menu`,t.menu]];for(let[t,n]of e)if(Array.isArray(n)&&n.length)return{rootKey:t,navItems:$l(n)};return{rootKey:null,navItems:[]}},[t]),d=l??`nav`,f=!!(n&&i),p=f&&!!a,m=r&&r.kind===`nav`?r.id:null,h=f?(e,t)=>i({kind:`nav`,id:e,label:t.label}):void 0,g=o?`/apps/${encodeURIComponent(o)}/`:null;return(0,Y.jsx)(Z,{hint:`app`,toolbar:g&&(0,Y.jsxs)(`a`,{href:g,target:`_blank`,rel:`noreferrer`,className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,title:`Open this app in a new tab`,children:[`Open `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]}),children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium text-foreground`,children:String(s)}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono mt-0.5`,children:o}),(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[`Landing: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:String(c)})]})]}),f?(0,Y.jsx)(Xl,{draft:t,rootKey:d,onPatch:p?a:void 0,selection:r??null,onSelectionChange:i}):u.length===0?(0,Y.jsxs)(Ic,{children:[`No top-level nav items. Add `,(0,Y.jsx)(`code`,{children:`nav`}),` / `,(0,Y.jsx)(`code`,{children:`tabs`}),` entries in the Form tab to populate the app's navigation.`]}):(0,Y.jsx)(`div`,{className:`border rounded divide-y`,children:u.map((e,t)=>(0,Y.jsx)(nu,{item:e,appName:o,depth:0,path:`${l}[${t}]`,onSelect:h,selectedId:m},t))})]})})})}function nu({item:e,appName:t,depth:n,path:r,onSelect:i,selectedId:a}){let o=eu(e.kind),s=ru(t,e.path);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-2 text-xs hover:bg-accent/40 ${i?`cursor-pointer`:``} ${a===r?`bg-primary/5 ring-1 ring-primary`:``}`,style:{paddingLeft:`${12+n*16}px`},onClick:i?t=>{t.stopPropagation(),i(r,e)}:void 0,children:[(0,Y.jsx)(o,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`font-medium truncate`,children:e.label}),e.kind&&(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider opacity-60`,children:e.kind}),s&&(0,Y.jsxs)(`a`,{href:s,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`ml-auto font-mono text-[10px] text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,children:[e.path,` `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]})]}),e.children?.map((e,o)=>(0,Y.jsx)(nu,{item:e,appName:t,depth:n+1,path:`${r}.children[${o}]`,onSelect:i,selectedId:a},o))]})}function ru(e,t){if(!t)return null;if(/^https?:/i.test(t))return t;if(!e)return null;let n=t.startsWith(`/`)?t.slice(1):t;return`/apps/${encodeURIComponent(e)}/${n}`}function iu(e){let{type:t,locale:n}=e;switch(t){case`text`:case`password`:return(0,Y.jsx)(au,{...e,icon:t===`password`?(0,Y.jsx)(ut,{className:`h-3.5 w-3.5`}):void 0});case`email`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(wn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`name@example.com`});case`url`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`https://…`});case`phone`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(hn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`+1 555 …`});case`number`:case`currency`:case`percent`:case`autonumber`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(yn,{className:`h-3.5 w-3.5`}),placeholder:e.placeholder??`0`});case`date`:case`datetime`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(ct,{className:`h-3.5 w-3.5`}),placeholder:J(`designer.stub.pickDate`,n)});case`time`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(Dn,{className:`h-3.5 w-3.5`}),placeholder:`hh:mm`});case`textarea`:case`markdown`:case`html`:case`richtext`:case`json`:case`code`:return(0,Y.jsx)(ou,{...e,mono:t===`json`||t===`code`});case`boolean`:case`toggle`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(Yt,{disabled:!0}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e.placeholder??J(`designer.stub.off`,n)})]});case`select`:case`radio`:return(0,Y.jsx)(su,{...e,single:!0});case`multiselect`:case`checkboxes`:case`tags`:return(0,Y.jsx)(su,{...e,single:!1});case`lookup`:case`master_detail`:case`tree`:return(0,Y.jsx)(cu,{...e});case`image`:case`avatar`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(gr,{className:`h-4 w-4`}),label:J(t===`avatar`?`designer.stub.uploadAvatar`:`designer.stub.uploadImage`,n)});case`file`:case`video`:case`audio`:case`signature`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(kn,{className:`h-4 w-4`}),label:q(`designer.stub.upload`,n,{type:t})});case`qrcode`:return(0,Y.jsx)(lu,{icon:(0,Y.jsx)(kn,{className:`h-4 w-4`}),label:J(`designer.stub.qrcode`,n)});case`color`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`span`,{className:`inline-block h-6 w-6 rounded border`,style:{background:`#3b82f6`}}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:`#3b82f6`}),(0,Y.jsx)(Gn,{className:`h-3.5 w-3.5 text-muted-foreground`})]});case`rating`:return(0,Y.jsx)(`div`,{className:`flex items-center gap-0.5 h-8`,children:[0,1,2,3,4].map(e=>(0,Y.jsx)(cn,{className:`h-4 w-4 `+(e<3?`fill-amber-400 text-amber-400`:`text-muted-foreground/40`)},e))});case`slider`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1 h-1.5 rounded bg-muted`,children:[(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-2/5 rounded bg-primary`}),(0,Y.jsx)(`div`,{className:`absolute h-3 w-3 -top-[3px] left-[40%] rounded-full border-2 border-primary bg-background`})]}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`40`})]});case`progress`:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 h-8`,children:[(0,Y.jsx)(`div`,{className:`relative flex-1 h-2 rounded bg-muted`,children:(0,Y.jsx)(`div`,{className:`absolute inset-y-0 left-0 w-3/5 rounded bg-emerald-500`})}),(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:`60%`})]});case`location`:return(0,Y.jsx)(au,{...e,icon:(0,Y.jsx)(it,{className:`h-3.5 w-3.5`}),placeholder:J(`designer.stub.latLng`,n)});case`address`:return(0,Y.jsx)(ou,{...e,placeholder:e.placeholder??`Street
|
|
12
12
|
City, State ZIP
|
|
13
13
|
Country`});case`formula`:case`summary`:return(0,Y.jsx)(`div`,{className:`h-8 px-2 flex items-center text-xs font-mono bg-muted/40 border rounded text-muted-foreground`,children:e.formula?`ƒ ${e.formula}`:`ƒ ${J(`designer.stub.computed`,n)}`});case`composite`:return(0,Y.jsx)(`div`,{className:`p-2 border-dashed border-2 rounded text-[11px] text-muted-foreground italic`,children:J(`designer.stub.composite`,n)});case`repeater`:return(0,Y.jsx)(`div`,{className:`p-2 border-dashed border-2 rounded text-[11px] text-muted-foreground italic`,children:J(`designer.stub.repeater`,n)});case`vector`:return(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center text-xs font-mono bg-muted/40 border rounded text-muted-foreground`,children:[`[0.124, 0.337, …] `,e.placeholder?`(${e.placeholder})`:``]});default:return(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(V,{disabled:!0,placeholder:e.placeholder??`(${t})`,className:`h-8 text-sm`}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:t})]})}}function au({placeholder:e,icon:t}){return(0,Y.jsxs)(`div`,{className:`relative`,children:[(0,Y.jsx)(V,{disabled:!0,placeholder:e??``,className:`h-8 text-sm `+(t?`pl-8`:``)}),t&&(0,Y.jsx)(`div`,{className:`absolute left-2 top-1/2 -translate-y-1/2 text-muted-foreground`,children:t})]})}function ou({placeholder:e,mono:t}){return(0,Y.jsx)(`textarea`,{disabled:!0,placeholder:e??``,className:`w-full min-h-[60px] text-sm rounded-md border bg-background px-2 py-1.5 disabled:opacity-100 `+(t?`font-mono text-xs`:``)})}function su({options:e,placeholder:t,single:n,locale:r}){let i=e??[],a=i.slice(0,n?1:3).filter(e=>e.value||e.label);return n?(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center justify-between text-sm border rounded bg-background text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`truncate`,children:a[0]?.label||a[0]?.value||t||J(`designer.stub.select`,r)}),(0,Y.jsx)(Dt,{className:`h-3.5 w-3.5 shrink-0`})]}):(0,Y.jsxs)(`div`,{className:`min-h-8 px-1.5 py-1 flex items-center flex-wrap gap-1 border rounded bg-background`,children:[a.length===0?(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground px-1`,children:t||J(`designer.stub.pickMulti`,r)}):a.map((e,t)=>(0,Y.jsx)(z,{variant:`secondary`,className:`text-[10px]`,children:e.label||e.value},t)),i.length>a.length&&(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,children:[`+`,i.length-a.length]})]})}function cu({referenceTo:e,placeholder:t,locale:n}){let r=e?Ti.lookup:null;return(0,Y.jsxs)(`div`,{className:`h-8 px-2 flex items-center gap-2 border rounded bg-background text-sm text-muted-foreground`,children:[(0,Y.jsx)(Ve,{className:`h-3.5 w-3.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate flex-1`,children:t||(e?q(`designer.stub.searchRef`,n,{ref:e}):J(`designer.stub.chooseRelated`,n))}),e&&(0,Y.jsxs)(z,{variant:`outline`,className:`text-[10px] shrink-0`,children:[`→ `,e]}),!e&&(0,Y.jsx)(tt,{className:`h-3.5 w-3.5 shrink-0 text-amber-500`}),r&&null]})}function lu({icon:e,label:t}){return(0,Y.jsxs)(`div`,{className:`h-16 w-full border-2 border-dashed rounded flex flex-col items-center justify-center gap-1 text-muted-foreground bg-muted/20`,children:[e,(0,Y.jsx)(`span`,{className:`text-[11px]`,children:t})]})}var uu=e=>(e??``).toLowerCase().startsWith(`zh`),du=(e,t)=>e?uu(t)?e.labelZh:e.label:void 0,fu=(e,t)=>(uu(t)?ji:wi)[e];function pu({objectName:e,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o}){let s=!r,{enabled:c}=ta(),l=X.useMemo(()=>ki(t.fields),[t]),u=X.useMemo(()=>n?ri(n.fields,t.fields):null,[n,t]),d=u?u.counts.added+u.counts.changed+u.counts.removed:0,[f,p]=X.useState(!1);X.useEffect(()=>{f&&d===0&&p(!1)},[f,d]);let m=f&&d>0,h=e=>m?u?.byName[e]?.status:void 0,g=e=>m?u?.byName[e]?.changedKeys??[]:[],_=X.useMemo(()=>ui(t.fieldGroups),[t]),v=_.length>0,y=X.useMemo(()=>ni(l,_,{includeEmptyDeclared:!s}),[l,_,s]),[b,x]=X.useState({}),S=e=>e??`__ungrouped__`,C=X.useCallback(e=>{let t=e??`__ungrouped__`;x(e=>({...e,[t]:!e[t]}))},[]),w=y.length>0&&y.every(e=>b[S(e.key)]),T=X.useCallback(e=>{x(()=>{let t={};for(let n of y)t[S(n.key)]=e;return t})},[y]),E=i?.kind===`field`?String(i.id):null,D=l.entries.filter(e=>!!e.def.required).length,O=X.useCallback(e=>{a&&a({kind:`field`,id:e.name,label:typeof e.def.label==`string`?e.def.label:e.name})},[a]),[k,A]=X.useState(()=>new Set),j=X.useRef(null),M=X.useMemo(()=>y.flatMap(e=>e.entries.map(e=>e.name)),[y]);X.useEffect(()=>{A(e=>{if(e.size===0)return e;let t=new Set([...e].filter(e=>l.entries.some(t=>t.name===e)));return t.size===e.size?e:t})},[l]);let ee=X.useCallback((e,t)=>{let n=e.name;if(!s&&t&&(t.metaKey||t.ctrlKey)){A(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),j.current=n;return}if(!s&&t&&t.shiftKey&&j.current&&j.current!==n){let e=M.indexOf(j.current),t=M.indexOf(n);if(e>=0&&t>=0){let[n,r]=e<t?[e,t]:[t,e];A(new Set(M.slice(n,r+1)));return}}k.size&&A(new Set),j.current=n,O(e)},[s,M,k,O]),te=X.useCallback(()=>A(new Set),[]),ne=X.useCallback(()=>{if(!r||k.size===0)return;let e=l.entries.filter(e=>!k.has(e.name));r({fields:li({shape:l.shape,entries:e})}),E&&k.has(E)&&a?.(null),A(new Set)},[r,k,l,E,a]),N=X.useCallback(e=>{if(!r||k.size===0)return;let t=l.entries.map(t=>k.has(t.name)?{name:t.name,def:{...t.def,group:e??void 0}}:t);r({fields:li({shape:l.shape,entries:t})})},[r,k,l]),re=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.map(e=>e.name),i=e===`select`?`status`:e,o=1,s=i;for(;n.includes(s);)o+=1,s=`${i}_${o}`;let c=$r(s,e);t&&(c.def={...c.def,group:t});let u=l.entries.length;if(t){for(let e=l.entries.length-1;e>=0;--e)if(l.entries[e].def.group===t){u=e+1;break}}let d=l.entries.slice();d.splice(u,0,c),r({fields:li({shape:l.shape,entries:d})}),a?.({kind:`field`,id:s,label:String(c.def.label??s)})},[r,a,l]),ie=X.useCallback(()=>{if(!r)return;let e=Bi(_,q(`designer.canvas.sectionN`,o,{n:_.length+1})),t=e[e.length-1];r({fieldGroups:e}),x(e=>({...e,[t.key]:!1}))},[r,_,o]),P=X.useCallback((e,t)=>{r&&r({fieldGroups:pi(_,e,t)})},[r,_]),ae=X.useCallback(e=>{if(!r)return;let t=gi(l,e);r({fieldGroups:di(_,e),fields:li(t)})},[r,_,l]),F=X.useCallback((e,t)=>{r&&r({fieldGroups:Ai(_,e,t)})},[r,_]),oe=X.useCallback((e,t,n)=>{if(!r||e===t)return;let i=l.entries.slice(),a=i.findIndex(t=>t.name===e);if(a<0)return;let[o]=i.splice(a,1),s=i.findIndex(e=>e.name===t),c=s>=0?i[s]:void 0;if(c){let e=typeof c.def.group==`string`?c.def.group:void 0;e!==(typeof o.def.group==`string`?o.def.group:void 0)&&(o.def={...o.def,group:e})}s<0?i.push(o):i.splice(n===`before`?s:s+1,0,o),r({fields:li({shape:l.shape,entries:i})})},[r,l]),se=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.slice(),i=n.findIndex(t=>t.name===e);if(i<0)return;let a=typeof n[i].def.group==`string`?n[i].def.group:null,o=i+t;for(;o>=0&&o<n.length&&(typeof n[o].def.group==`string`?n[o].def.group:null)!==a;)o+=t;if(o<0||o>=n.length)return;let s=n[i];n[i]=n[o],n[o]=s,r({fields:li({shape:l.shape,entries:n})})},[r,l]),ce=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.slice(),i=n.findIndex(t=>t.name===e);if(i<0)return;let[a]=n.splice(i,1);if((typeof a.def.group==`string`?a.def.group:null)===t){n.splice(i,0,a);return}a.def={...a.def,group:t??void 0};let o=n.length;for(let e=n.length-1;e>=0;--e)if((typeof n[e].def.group==`string`?n[e].def.group:null)===t){o=e+1;break}n.splice(o,0,a),r({fields:li({shape:l.shape,entries:n})})},[r,l]),le=X.useCallback((e,t)=>{if(!r)return;let n=l.entries.map(n=>n.name===e?{name:e,def:{...n.def,label:t||void 0}}:n);r({fields:li({shape:l.shape,entries:n})})},[r,l]),ue=X.useCallback(e=>{e.target===e.currentTarget&&E&&a?.(null)},[a,E]),fe=l.entries.length===0,pe=v||y.length>1;return(0,Y.jsxs)(`div`,{className:`h-full overflow-auto bg-muted/20`,onClick:ue,"data-object-name":e,children:[!s&&k.size>0&&(0,Y.jsx)(hu,{count:k.size,groups:_,onMoveToGroup:N,onDelete:ne,onClear:te,locale:o}),(0,Y.jsxs)(`div`,{className:`mx-auto max-w-3xl px-6 py-6 space-y-4`,onClick:ue,children:[!fe&&(0,Y.jsx)(mu,{fieldCount:l.entries.length,requiredCount:D,sectionCount:_.length,allCollapsed:w,onToggleAll:pe?()=>T(!w):void 0,reviewAvailable:d>0,reviewing:m,diffCounts:u?.counts,onToggleReview:()=>p(e=>!e),locale:o}),fe?(0,Y.jsx)(bu,{onAdd:s?void 0:re,locale:o,aiEnabled:c}):(0,Y.jsx)(`div`,{className:`space-y-5`,children:y.map(e=>{let t=e.key?_.findIndex(t=>t.key===e.key):-1;return(0,Y.jsxs)(gu,{groupKey:e.key,label:e.key===null?J(`designer.canvas.ungrouped`,o):e.label,count:e.entries.length,showHeader:pe,collapsed:!!b[S(e.key)],onToggleCollapse:()=>C(e.key),readOnly:s,locale:o,canMoveUp:t>0,canMoveDown:t>=0&&t<_.length-1,onRename:e.key?t=>P(e.key,t):void 0,onRemove:e.key?()=>ae(e.key):void 0,onMove:e.key?t=>F(e.key,t):void 0,onAddField:s?void 0:t=>re(t,e.key),onDropField:s?void 0:ce,children:[e.entries.map(e=>(0,Y.jsx)(yu,{entry:e,selected:e.name===E,multiSelected:k.has(e.name),diffStatus:h(e.name),changedKeys:g(e.name),readOnly:s,locale:o,onClick:t=>ee(e,t),onReorder:s?void 0:oe,onRenameLabel:s?void 0:le,onMoveOffset:s?void 0:t=>se(e.name,t)},e.name)),e.entries.length===0&&(0,Y.jsx)(`div`,{className:`rounded-md border border-dashed bg-background/40 px-3 py-4 text-center text-[11px] text-muted-foreground`,children:J(s?`designer.canvas.emptySection`:`designer.canvas.dropHint`,o)})]},e.key??`__ungrouped__`)})}),m&&u&&u.removed.length>0&&(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium uppercase tracking-wider text-destructive/80 pl-1`,children:J(`designer.canvas.diffRemoved`,o)}),u.removed.map(e=>(0,Y.jsx)(vu,{entry:e,locale:o},e.name))]}),!fe&&!s&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(xu,{onPick:e=>re(e),locale:o}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-muted-foreground hover:text-foreground`,onClick:ie,children:[(0,Y.jsx)(de,{className:`h-3.5 w-3.5`}),J(`designer.canvas.addSection`,o)]}),c&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`gap-1.5 ml-auto text-primary/80 hover:text-primary`,onClick:()=>Wr(),children:[(0,Y.jsx)(Tn,{className:`h-3.5 w-3.5`}),J(`designer.canvas.askAi`,o)]})]})]})]})}function mu({fieldCount:e,requiredCount:t,sectionCount:n,allCollapsed:r,onToggleAll:i,reviewAvailable:a,reviewing:o,diffCounts:s,onToggleReview:c,locale:l}){return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5 flex-wrap`,children:o&&s?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`font-medium text-emerald-600 dark:text-emerald-400`,children:s.added}),` `,J(`designer.canvas.diffAdded`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-amber-600 dark:text-amber-400`,children:s.changed}),` `,J(`designer.canvas.diffChanged`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-destructive`,children:s.removed}),` `,J(`designer.canvas.diffRemoved`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/40 normal-case ml-1`,children:J(`designer.canvas.reviewVsPublished`,l)})]}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:e}),` `,J(`designer.canvas.fields`,l),(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:t}),` `,J(`designer.canvas.required`,l),n>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground/50`,children:`·`}),(0,Y.jsx)(`span`,{className:`font-medium text-foreground/80`,children:n}),` `,J(`designer.canvas.sections`,l)]})]})}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[a&&c&&(0,Y.jsxs)(`button`,{type:`button`,onClick:c,className:L(`inline-flex items-center gap-1 rounded px-1.5 py-0.5 transition-colors`,o?`bg-primary/10 text-primary hover:bg-primary/15`:`hover:bg-accent hover:text-foreground`),children:[(0,Y.jsx)(Ir,{className:`h-3 w-3`}),J(o?`designer.canvas.reviewExit`:`designer.canvas.reviewChanges`,l)]}),i&&(0,Y.jsxs)(`button`,{type:`button`,onClick:i,className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 hover:bg-accent hover:text-foreground transition-colors`,children:[r?(0,Y.jsx)(Ce,{className:`h-3 w-3`}):(0,Y.jsx)(qe,{className:`h-3 w-3`}),J(r?`designer.canvas.expandAll`:`designer.canvas.collapseAll`,l)]})]})]})}function hu({count:e,groups:t,onMoveToGroup:n,onDelete:r,onClear:i,locale:a}){let[o,s]=X.useState(!1);return(0,Y.jsxs)(`div`,{className:`sticky top-0 z-20 flex items-center gap-2 border-b border-primary/20 bg-primary/10 backdrop-blur px-6 py-2 text-sm`,children:[(0,Y.jsx)(`span`,{className:`font-medium text-foreground`,children:q(`designer.canvas.bulkSelected`,a,{n:e})}),(0,Y.jsx)(`span`,{className:`text-muted-foreground text-[11px] hidden md:inline`,children:J(`designer.canvas.bulkHint`,a)}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[t.length>0&&(0,Y.jsxs)(Mn,{open:o,onOpenChange:s,children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`h-7 gap-1.5 bg-background/70`,children:[(0,Y.jsx)(Rn,{className:`h-3.5 w-3.5`}),J(`designer.canvas.bulkMoveTo`,a),(0,Y.jsx)(Dt,{className:`h-3 w-3`})]})}),(0,Y.jsxs)(Zt,{align:`end`,className:`w-52 p-1 max-h-[300px] overflow-auto`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{n(null),s(!1)},className:`w-full text-left px-2 py-1.5 rounded text-sm hover:bg-accent`,children:J(`designer.canvas.ungrouped`,a)}),t.map(e=>(0,Y.jsx)(`button`,{type:`button`,onClick:()=>{n(e.key),s(!1)},className:`w-full text-left px-2 py-1.5 rounded text-sm hover:bg-accent truncate`,children:e.label||e.key},e.key))]})]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`h-7 gap-1.5 bg-background/70 text-destructive hover:text-destructive`,onClick:r,children:[(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`}),J(`designer.canvas.bulkDelete`,a)]}),(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`h-7 gap-1.5`,onClick:i,children:[(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`}),J(`designer.canvas.bulkClear`,a)]})]})]})}function gu({groupKey:e,label:t,count:n,showHeader:r,collapsed:i,onToggleCollapse:a,readOnly:o,locale:s,canMoveUp:c,canMoveDown:l,onRename:u,onRemove:d,onMove:f,onAddField:p,onDropField:m,children:h}){let[g,_]=X.useState(!1);return(0,Y.jsxs)(`section`,{className:L(`space-y-2.5 rounded-md transition-colors`,g&&`bg-primary/5 ring-1 ring-primary/30 -mx-1 px-1 py-1`),onDragOver:e=>{if(!m)return;let t=e.dataTransfer.types;!t||!Array.from(t).includes(`text/x-objectui-field`)||(e.preventDefault(),e.dataTransfer.dropEffect=`move`,_(!0))},onDragLeave:e=>{e.currentTarget===e.target&&_(!1)},onDrop:t=>{if(!m)return;if(t.defaultPrevented){_(!1);return}t.preventDefault();let n=t.dataTransfer.getData(`text/x-objectui-field`);_(!1),n&&m(n,e)},children:[r&&(0,Y.jsx)(_u,{label:t,count:n,collapsed:i,onToggleCollapse:a,readOnly:o,locale:s,canMoveUp:c,canMoveDown:l,dropActive:g,onRename:u,onRemove:d,onMove:f,onAddField:p}),!i&&(0,Y.jsx)(`div`,{className:`space-y-2.5`,children:h})]})}function _u({label:e,count:t,collapsed:n,onToggleCollapse:r,readOnly:i,locale:a,canMoveUp:o,canMoveDown:s,dropActive:c,onRename:l,onRemove:u,onMove:d,onAddField:f}){let[p,m]=X.useState(!1),[h,g]=X.useState(e);X.useEffect(()=>{g(e)},[e]);let _=()=>{if(!l){m(!1);return}let t=h.trim();t&&t!==e&&l(t),m(!1)},v=n?Br:Dt;return(0,Y.jsxs)(`div`,{className:`group/sec flex items-center gap-1.5 pl-0.5 min-h-[24px]`,children:[(0,Y.jsx)(`button`,{type:`button`,onClick:r,className:`flex items-center justify-center h-5 w-5 rounded text-muted-foreground hover:bg-accent hover:text-foreground transition-colors shrink-0`,"aria-label":J(n?`designer.canvas.expandSection`:`designer.canvas.collapseSection`,a),"aria-expanded":!n,children:(0,Y.jsx)(v,{className:`h-3.5 w-3.5`})}),p?(0,Y.jsx)(`input`,{autoFocus:!0,value:h,onChange:e=>g(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:t=>{t.stopPropagation(),t.key===`Enter`?(t.preventDefault(),_()):t.key===`Escape`&&(t.preventDefault(),g(e),m(!1))},onBlur:_,className:`text-[11px] font-medium uppercase tracking-wider px-1 py-0.5 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1 max-w-[220px]`}):(0,Y.jsx)(`span`,{className:L(`text-[11px] font-medium uppercase tracking-wider text-muted-foreground truncate`,l&&`cursor-text hover:text-foreground`),onDoubleClick:l?()=>{g(e),m(!0)}:void 0,title:l?J(`designer.canvas.renameHint`,a):void 0,children:e}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground/60 tabular-nums shrink-0`,children:t}),c&&(0,Y.jsx)(`span`,{className:`text-primary normal-case text-[10px] font-normal`,children:J(`designer.canvas.dropToAssign`,a)}),!i&&(d||u||f)&&(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-0.5 opacity-0 group-hover/sec:opacity-100 focus-within:opacity-100 transition-opacity`,children:[f&&(0,Y.jsx)(xu,{onPick:f,compact:!0,locale:a}),d&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(`button`,{type:`button`,onClick:()=>d(-1),disabled:!o,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30 disabled:pointer-events-none`,"aria-label":J(`designer.canvas.moveSectionUp`,a),children:(0,Y.jsx)(Kt,{className:`h-3 w-3`})}),(0,Y.jsx)(`button`,{type:`button`,onClick:()=>d(1),disabled:!s,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground disabled:opacity-30 disabled:pointer-events-none`,"aria-label":J(`designer.canvas.moveSectionDown`,a),children:(0,Y.jsx)(P,{className:`h-3 w-3`})})]}),u&&(0,Y.jsx)(`button`,{type:`button`,onClick:u,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-destructive/10 hover:text-destructive`,"aria-label":J(`designer.canvas.removeSection`,a),title:J(`designer.canvas.removeSectionHint`,a),children:(0,Y.jsx)(lr,{className:`h-3 w-3`})})]})]})}function vu({entry:e,locale:t}){let n=e.def,r=Ti[typeof n.type==`string`?n.type:`text`]?.Icon,i=typeof n.label==`string`?n.label:e.name;return(0,Y.jsx)(`div`,{className:`rounded-md border border-dashed border-destructive/30 bg-destructive/[0.03] px-3.5 py-2.5 opacity-80`,children:(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[r&&(0,Y.jsx)(r,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/50`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate line-through text-muted-foreground`,children:i}),(0,Y.jsx)(`code`,{className:`text-[10px] text-muted-foreground/60 font-mono truncate line-through`,children:e.name})]}),(0,Y.jsx)(z,{className:`text-[10px] font-medium border-transparent bg-destructive/15 text-destructive shrink-0`,children:J(`designer.canvas.diffRemoved`,t)})]})})}function yu({entry:e,selected:t,multiSelected:n,diffStatus:r,changedKeys:i,readOnly:a,locale:o,onClick:s,onReorder:c,onRenameLabel:l,onMoveOffset:u}){let d=e.def,f=typeof d.type==`string`?d.type:`text`,p=Ti[f],m=p?.Icon,h=Ri[p?.category??`advanced`],g=typeof d.label==`string`?d.label:e.name,_=!!d.required,v=typeof d.description==`string`?d.description:null,y=Array.isArray(d.options)?d.options.map(e=>({value:String(e.value??``),label:typeof e.label==`string`?e.label:void 0})):void 0,b=typeof d.reference==`string`?d.reference:void 0,x=typeof d.formula==`string`?d.formula:void 0,S=typeof d.placeholder==`string`?d.placeholder:void 0,[C,w]=X.useState(null),T=!!c,[E,D]=X.useState(!1),[O,k]=X.useState(g);X.useEffect(()=>{k(g)},[g]);let A=e=>{l&&(e.preventDefault(),e.stopPropagation(),k(g),D(!0))},j=()=>{if(!l){D(!1);return}let t=O.trim();t&&t!==g&&l(e.name,t),D(!1)},M=()=>{k(g),D(!1)};return(0,Y.jsxs)(`div`,{className:L(`relative`,C===`before`&&`pt-1.5`),onDragOver:e=>{if(!T)return;let t=e.dataTransfer.types;if(!t||!Array.from(t).includes(`text/x-objectui-field`))return;e.preventDefault(),e.dataTransfer.dropEffect=`move`;let n=e.currentTarget.getBoundingClientRect();w(e.clientY-n.top<n.height/2?`before`:`after`)},onDragLeave:()=>w(null),onDrop:t=>{if(!c)return;t.preventDefault(),t.stopPropagation();let n=t.dataTransfer.getData(`text/x-objectui-field`);w(null),n&&n!==e.name&&c(n,e.name,C??`before`)},children:[C===`before`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -top-0.5 h-0.5 bg-primary rounded-full`}),(0,Y.jsxs)(`div`,{role:`button`,tabIndex:a?-1:0,onClick:s,onKeyDown:e=>{if(e.target===e.currentTarget){if(e.altKey&&(e.key===`ArrowUp`||e.key===`ArrowDown`)){u&&(e.preventDefault(),u(e.key===`ArrowUp`?-1:1));return}(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),s?.())}},draggable:T,onDragStart:t=>{t.dataTransfer.setData(`text/x-objectui-field`,e.name),t.dataTransfer.effectAllowed=`move`},className:L(`group block w-full text-left rounded-md border bg-card px-3.5 py-2.5 transition-colors`,`hover:border-primary/40 hover:bg-card outline-none focus-visible:ring-2 focus-visible:ring-primary/40`,t?`border-primary ring-2 ring-primary/30 shadow-sm`:`border-border`,n&&`border-primary/60 ring-2 ring-primary/40 bg-primary/[0.04]`,r===`added`&&`border-l-[3px] border-l-emerald-500`,r===`changed`&&`border-l-[3px] border-l-amber-500`,a&&`cursor-default`,T&&`cursor-grab active:cursor-grabbing`),"aria-pressed":t||n,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 mb-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 min-w-0`,children:[n&&(0,Y.jsx)(Kn,{className:`h-3.5 w-3.5 text-primary shrink-0`,"aria-hidden":`true`}),T&&!n&&(0,Y.jsx)(En,{className:`h-3.5 w-3.5 text-muted-foreground/40 shrink-0 group-hover:text-muted-foreground/80`,"aria-hidden":`true`}),m&&(0,Y.jsx)(m,{className:L(`h-3.5 w-3.5 shrink-0`,h.icon)}),E?(0,Y.jsx)(`input`,{autoFocus:!0,value:O,onChange:e=>k(e.target.value),onClick:e=>e.stopPropagation(),onKeyDown:e=>{e.stopPropagation(),e.key===`Enter`?(e.preventDefault(),j()):e.key===`Escape`&&(e.preventDefault(),M())},onBlur:j,className:`text-sm font-medium px-1 py-0.5 -mx-1 -my-0.5 rounded border border-primary bg-background outline-none min-w-0 flex-1`}):(0,Y.jsx)(`span`,{className:L(`text-sm font-medium truncate`,l&&`cursor-text`),onDoubleClick:A,title:l?J(`designer.canvas.renameHint`,o):void 0,children:g}),_&&(0,Y.jsx)(`span`,{className:`text-destructive text-sm`,children:`*`}),(0,Y.jsx)(`code`,{className:`text-[10px] text-muted-foreground/70 font-mono truncate`,children:e.name})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 shrink-0`,children:[r===`added`&&(0,Y.jsx)(z,{className:`text-[10px] font-medium border-transparent bg-emerald-500/15 text-emerald-700 dark:text-emerald-300`,children:J(`designer.canvas.diffAdded`,o)}),r===`changed`&&(0,Y.jsx)(z,{className:`text-[10px] font-medium border-transparent bg-amber-500/15 text-amber-700 dark:text-amber-300`,title:i&&i.length?q(`designer.canvas.diffChangedKeys`,o,{keys:i.join(`, `)}):void 0,children:J(`designer.canvas.diffChanged`,o)}),(0,Y.jsx)(z,{variant:`outline`,className:L(`text-[10px] font-medium`,h.badge),children:du(p,o)??f})]})]}),v&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground mb-1.5 line-clamp-1`,children:v}),(0,Y.jsx)(iu,{type:f,label:g,placeholder:S,options:y,referenceTo:b,formula:x,locale:o})]}),C===`after`&&(0,Y.jsx)(`div`,{className:`absolute left-0 right-0 -bottom-1 h-0.5 bg-primary rounded-full`})]})}function bu({onAdd:e,locale:t,aiEnabled:n}){return(0,Y.jsxs)(`div`,{className:`rounded-lg border-2 border-dashed bg-background py-16 px-6 text-center space-y-3`,children:[(0,Y.jsx)(`div`,{className:`text-sm font-medium`,children:J(`designer.canvas.noFields`,t)}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:J(`designer.canvas.noFieldsHint`,t)}),e&&(0,Y.jsxs)(`div`,{className:`pt-2 flex items-center justify-center gap-2`,children:[(0,Y.jsx)(xu,{onPick:e,locale:t}),n&&(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,className:`gap-1.5 text-primary/80 hover:text-primary`,onClick:()=>Wr(),children:[(0,Y.jsx)(Tn,{className:`h-3.5 w-3.5`}),J(`designer.canvas.askAiGenerate`,t)]})]})]})}function xu({onPick:e,compact:t,locale:n}){let[r,i]=X.useState(!1),[a,o]=X.useState(``),s=a.trim().toLowerCase(),c=X.useMemo(()=>s?Ei.map(e=>({category:e.category,types:e.types.filter(e=>{let t=Ti[e];return e.includes(s)||t.label.toLowerCase().includes(s)||t.labelZh.includes(a.trim())})})).filter(e=>e.types.length>0):Ei,[s,a]);return(0,Y.jsxs)(Mn,{open:r,onOpenChange:e=>{i(e),e||o(``)},children:[(0,Y.jsx)(er,{asChild:!0,children:t?(0,Y.jsx)(`button`,{type:`button`,className:`h-5 w-5 flex items-center justify-center rounded text-muted-foreground hover:bg-accent hover:text-foreground`,"aria-label":J(`designer.canvas.addFieldToSection`,n),title:J(`designer.canvas.addFieldToSection`,n),children:(0,Y.jsx)(R,{className:`h-3 w-3`})}):(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`gap-1.5 border-dashed`,children:[(0,Y.jsx)(R,{className:`h-3.5 w-3.5`}),J(`designer.canvas.addField`,n)]})}),(0,Y.jsxs)(Zt,{align:`start`,className:`w-[320px] p-0 max-h-[480px] overflow-hidden flex flex-col`,children:[(0,Y.jsx)(`div`,{className:`p-2 border-b`,children:(0,Y.jsx)(`input`,{autoFocus:!0,value:a,onChange:e=>o(e.target.value),placeholder:J(`designer.canvas.searchFieldType`,n),className:`h-7 w-full px-2 text-sm border rounded bg-background outline-none focus:ring-1 focus:ring-primary`})}),(0,Y.jsx)(`div`,{className:`flex-1 overflow-auto p-1`,children:c.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground p-4 text-center`,children:J(`designer.canvas.noMatchingTypes`,n)}):c.map(t=>(0,Y.jsxs)(`div`,{className:`mb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground px-2 pt-2 pb-1`,children:fu(t.category,n)}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-0.5`,children:t.types.map(t=>{let r=Ti[t],a=r.Icon;return(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{e(t),i(!1),o(``)},className:`flex items-center gap-2 px-2 py-1.5 rounded text-left text-xs hover:bg-accent`,children:[(0,Y.jsx)(a,{className:L(`h-3.5 w-3.5 shrink-0`,Ri[r.category].icon)}),(0,Y.jsx)(`span`,{className:`truncate`,children:du(r,n)})]},t)})})]},t.category))})]})]})}function Su({name:e,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o}){let s=String(t.name??e??``);return s?(0,Y.jsx)(Z,{hint:`object · designer`,children:(0,Y.jsx)(Q,{fallbackHint:`The form designer couldn't be rendered. Check the Form tab.`,children:(0,Y.jsx)(pu,{objectName:s,draft:t,baseline:n,onPatch:r,selection:i,onSelectionChange:a,locale:o})})}):(0,Y.jsx)(Z,{hint:`object`,children:(0,Y.jsx)(Ic,{children:J(`designer.canvas.nameToStart`,o)})})}function Cu(e){let t=new Set;for(let n of e.matchAll(/\{\{\s*([a-zA-Z_][\w.]*)\s*\}\}/g))t.add(n[1]);for(let n of e.matchAll(/\$\{\s*([a-zA-Z_][\w.]*)\s*\}/g))t.add(n[1]);return Array.from(t).sort()}function wu(e,t){return t[e]??``}function Tu(e,t){return e.replace(/\{\{\s*([a-zA-Z_][\w.]*)\s*\}\}/g,(e,n)=>wu(n,t)).replace(/\$\{\s*([a-zA-Z_][\w.]*)\s*\}/g,(e,n)=>wu(n,t))}function Eu({draft:e}){let t=String(e.subject??``),n=String(e.from??e.fromAddress??``),r=String(e.to??``),i=String(e.bodyHtml??e.html??e.body??``),a=String(e.bodyText??e.text??``),o=X.useMemo(()=>{let e=new Set;for(let n of Cu(t))e.add(n);for(let t of Cu(i))e.add(t);for(let t of Cu(a))e.add(t);return Array.from(e).sort()},[t,i,a]),[s,c]=X.useState({}),l=Tu(t,s),u=`<!doctype html><html><head><meta charset="utf-8"><style>
|
|
14
14
|
html,body{margin:0;padding:16px;font:14px -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#111;background:#fff;}
|
|
@@ -18,5 +18,5 @@ Country`});case`formula`:case`summary`:return(0,Y.jsx)(`div`,{className:`h-8 px-
|
|
|
18
18
|
"tool": "${r}",
|
|
19
19
|
"arguments": ${JSON.stringify(h,null,2).replace(/\n/g,`
|
|
20
20
|
`)}
|
|
21
|
-
}`})}),Kf(f)&&f.properties&&Object.keys(f.properties).length>0&&(0,Y.jsx)(Zf,{title:`Output Schema`,count:Object.keys(f.properties).length,icon:$n,children:(0,Y.jsx)(Xf,{props:f.properties,required:new Set(Array.isArray(f.required)?f.required:[])})})]})})})}function Xf({props:e,required:t}){return(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`bg-muted/30 text-left text-[10px] uppercase tracking-wider text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Name`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Type`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Description`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:Object.keys(e).map(n=>{let r=e[n],i=t.has(n);return(0,Y.jsxs)(`tr`,{className:`align-top`,children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[i?(0,Y.jsx)(M,{className:`h-3 w-3 text-emerald-600`}):(0,Y.jsx)(Br,{className:`h-3 w-3 text-muted-foreground`}),n,i&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-emerald-700 ml-1`,children:`req`})]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono text-muted-foreground`,children:qf(r)}),(0,Y.jsxs)(`td`,{className:`px-2.5 py-1.5`,children:[r.description&&(0,Y.jsx)(`div`,{children:r.description}),Array.isArray(r.enum)&&r.enum.length>0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`enum: `,r.enum.map(e=>JSON.stringify(e)).join(` | `)]}),r.default!==void 0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`default: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:JSON.stringify(r.default)})]}),r.format&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`format: `,r.format]})]})]},n)})})]})})}function Zf({title:e,count:t,icon:n,children:r}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[n&&(0,Y.jsx)(n,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),r]})}function Qf({children:e}){return(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:e})}function $f({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var ep=[{key:`allowCreate`,short:`C`,long:`Create`},{key:`allowRead`,short:`R`,long:`Read`},{key:`allowEdit`,short:`U`,long:`Edit`},{key:`allowDelete`,short:`D`,long:`Delete`},{key:`allowTransfer`,short:`T`,long:`Transfer`},{key:`allowRestore`,short:`Re`,long:`Restore`},{key:`allowPurge`,short:`P`,long:`Purge`,danger:!0},{key:`viewAllRecords`,short:`V*`,long:`View All`,danger:!0},{key:`modifyAllRecords`,short:`M*`,long:`Modify All`,danger:!0}];function tp(e){let t=[];for(let[n,r]of Object.entries(e))r.allowEdit&&!r.allowRead&&t.push({object:n,message:`Edit granted without Read (record updates will fail).`}),r.allowDelete&&!r.allowRead&&t.push({object:n,message:`Delete granted without Read.`}),r.modifyAllRecords&&!r.viewAllRecords&&t.push({object:n,message:`Modify All without View All — modifications may target invisible records.`}),r.allowPurge&&!r.allowDelete&&t.push({object:n,message:`Purge (hard delete) granted without Delete.`});return t}function np({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=!!n.isProfile,o=n.objects??{},s=n.fields??{},c=Array.isArray(n.systemPermissions)?n.systemPermissions:[],l=n.tabPermissions??{},u=Array.isArray(n.rowLevelSecurity)?n.rowLevelSecurity:[],d=X.useMemo(()=>Object.keys(o).sort(),[o]),f=X.useMemo(()=>tp(o),[o]),p=X.useMemo(()=>{let e=new Map;for(let[t,n]of Object.entries(s)){let[r,...i]=t.split(`.`);if(!r||i.length===0)continue;let a=i.join(`.`);(n.readable===!1||n.editable===!0)&&(e.has(r)||e.set(r,[]),e.get(r).push({field:a,perm:n}))}return e},[s]);return d.length===0&&c.length===0&&Object.keys(l).length===0?(0,Y.jsx)(Z,{hint:`permission`,children:(0,Y.jsx)(Ic,{children:`Grant at least one object, system, or tab permission to see the matrix.`})}):(0,Y.jsx)(Z,{hint:`permission · ${d.length} object${d.length===1?``:`s`}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[a?(0,Y.jsx)(cn,{className:`h-4 w-4 mt-0.5 text-amber-600 shrink-0`}):(0,Y.jsx)(mt,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:a?`Profile`:`Permission Set`})]}),(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(op,{icon:Vt,label:`${d.length} objects`}),(0,Y.jsx)(op,{icon:Yn,label:`${c.length} system perms`}),(0,Y.jsx)(op,{icon:Ee,label:`${Object.keys(l).length} tabs`}),(0,Y.jsx)(op,{icon:ut,label:`${u.length} RLS rules`})]})]})]})}),d.length>0&&(0,Y.jsxs)(ap,{title:`Object Permissions`,count:d.length,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-x-auto`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,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:`px-2.5 py-1.5 text-left font-medium sticky left-0 bg-muted/30`,children:`Object`}),ep.map(e=>(0,Y.jsx)(`th`,{className:`px-1.5 py-1.5 text-center font-medium`,title:e.long,children:e.short},e.key))]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:d.map(e=>{let t=o[e]??{};return(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1 font-mono sticky left-0 bg-background`,children:e}),ep.map(e=>(0,Y.jsx)(`td`,{className:`px-1.5 py-1 text-center`,children:(0,Y.jsx)(rp,{granted:!!t[e.key],danger:e.danger})},e.key))]},e)})})]})}),(0,Y.jsx)(ip,{})]}),p.size>0&&(0,Y.jsx)(ap,{title:`Field-Level Overrides`,count:Array.from(p.values()).reduce((e,t)=>e+t.length,0),children:(0,Y.jsx)(`div`,{className:`rounded border bg-background divide-y text-xs`,children:Array.from(p.entries()).sort().map(([e,t])=>(0,Y.jsxs)(`div`,{className:`px-2.5 py-2`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-[11px] mb-1`,children:e}),(0,Y.jsx)(`ul`,{className:`flex flex-wrap gap-1`,children:t.map(({field:e,perm:t})=>(0,Y.jsxs)(`li`,{className:`inline-flex items-center gap-1 rounded border bg-muted/30 px-1.5 py-0.5`,title:`readable=${t.readable!==!1}, editable=${!!t.editable}`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),t.readable===!1&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-red-700`,children:`hidden`}),t.editable&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-emerald-700`,children:`editable`})]},e))})]},e))})}),c.length>0&&(0,Y.jsx)(ap,{title:`System Permissions`,count:c.length,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:c.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})}),Object.keys(l).length>0&&(0,Y.jsx)(ap,{title:`Tab Visibility`,count:Object.keys(l).length,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Object.entries(l).map(([e,t])=>(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[11px]`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),(0,Y.jsx)(`span`,{className:t===`hidden`?`text-[9px] uppercase text-red-700`:t===`visible`||t===`default_on`?`text-[9px] uppercase text-emerald-700`:`text-[9px] uppercase text-muted-foreground`,children:t})]},e))})}),f.length>0&&(0,Y.jsxs)(`div`,{className:`rounded border border-amber-200 bg-amber-50 p-2.5 text-xs space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-amber-800`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5`}),` `,f.length,` sanity check`,f.length===1?``:`s`,` failed`]}),(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:f.map((e,t)=>(0,Y.jsxs)(`li`,{className:`text-amber-900`,children:[(0,Y.jsx)(`code`,{className:`font-mono`,children:e.object}),`: `,e.message]},t))})]})]})})})}function rp({granted:e,danger:t}){return e?(0,Y.jsx)(M,{className:`inline-block h-3.5 w-3.5 ${t?`text-amber-600`:`text-emerald-600`}`,"aria-label":`granted`}):(0,Y.jsx)(on,{className:`inline-block h-3 w-3 text-muted-foreground/40`,"aria-label":`not granted`})}function ip(){return(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[10px] text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(M,{className:`h-3 w-3 text-emerald-600`}),` granted`]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(M,{className:`h-3 w-3 text-amber-600`}),` bypass (View/Modify All, Purge)`]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(on,{className:`h-3 w-3 text-muted-foreground/40`}),` not granted`]}),(0,Y.jsx)(`span`,{className:`ml-auto font-mono`,children:`C R U D = CRUD · T Re P = Transfer/Restore/Purge · V* M* = View/Modify All`})]})}function ap({title:e,count:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),n]})}function op({icon:e,label:t}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{children:t})]})}function sp(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`){let t=e;return t.en??t[`en-US`]??Object.values(t)[0]??``}return String(e)}function cp(e){switch(e){case`url`:return Ve;case`modal`:return Ie;case`flow`:return j;case`api`:return Jt;case`form`:return Jn;default:return pn}}function lp(e){switch(e){case`primary`:case`default`:case void 0:return`bg-primary text-primary-foreground hover:opacity-90`;case`danger`:case`destructive`:return`bg-red-600 text-white hover:bg-red-700`;case`secondary`:return`bg-secondary text-secondary-foreground hover:opacity-90`;case`ghost`:return`bg-transparent text-foreground hover:bg-accent`;case`link`:return`bg-transparent text-primary underline-offset-2 hover:underline px-0`;default:return`border bg-background text-foreground hover:bg-accent`}}function up(e,t,n){if(!t&&!n)return`No handler bound yet.`;switch(e){case`url`:return`Navigate to ${t}`;case`flow`:return`Run flow ${t}`;case`modal`:return`Open modal ${t}`;case`api`:return`Call API endpoint ${t}`;case`form`:return`Open form view ${t} (/console/forms/${t??`?`})`;case`script`:return n?`Run inline script body (L1 expression or L2 sandboxed JS).`:`Run named script ${t}`;default:return`Invoke ${t}`}}function dp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=sp(n.label)||r,a=n.icon||void 0,o=String(n.type??`script`),s=n.target??n.execute,c=n.variant||void 0,l=String(n.component??``),u=Array.isArray(n.locations)?n.locations:[],d=n.shortcut||void 0,f=!!n.bulkEnabled,p=!!n.refreshAfter,m=n.aiExposed,h=sp(n.confirmText),g=sp(n.successMessage),_=Array.isArray(n.params)?n.params:[],v=n.resultDialog,y=n.body,b=n.objectName||void 0,x=n.visible,S=n.disabled,C=n.method||`POST`,w=n.bodyExtra,T=cp(o),D=l===`action:icon`;return!r&&!i?(0,Y.jsx)(Z,{hint:`action`,children:(0,Y.jsx)(Ic,{children:`Set name and label to see the action preview.`})}):(0,Y.jsx)(Z,{hint:`action`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-4 flex items-center justify-center min-h-[80px]`,children:(0,Y.jsx)(fp,{label:i,icon:a,variant:c,iconOnly:D,disabled:!!S&&typeof S==`boolean`})}),(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-3 text-xs space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(yp,{icon:T,label:`type: ${o}`}),b&&(0,Y.jsx)(yp,{icon:Sr,label:`object: ${b}`,mono:!0}),c&&(0,Y.jsx)(yp,{label:`variant: ${c}`}),l&&(0,Y.jsx)(yp,{icon:ze,label:l}),d&&(0,Y.jsx)(yp,{icon:E,label:d,mono:!0}),f&&(0,Y.jsx)(yp,{icon:k,label:`bulk`,tone:`green`}),p&&(0,Y.jsx)(yp,{icon:Tt,label:`refresh after`}),m===!1&&(0,Y.jsx)(yp,{icon:mr,label:`AI: opted out`,tone:`amber`}),m===!0&&(0,Y.jsx)(yp,{icon:Tn,label:`AI: exposed`})]}),u.length>0&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Locations:`}),u.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:e},e))]}),!!(typeof x==`string`||x&&typeof x==`object`)&&(0,Y.jsx)(_p,{label:`Visible when`,value:x,icon:Ee}),S!=null&&typeof S!=`boolean`&&(0,Y.jsx)(_p,{label:`Disabled when`,value:S,icon:ut})]}),(0,Y.jsxs)(`div`,{className:`rounded border border-blue-200 bg-blue-50 p-2.5 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-blue-900 mb-0.5`,children:[(0,Y.jsx)(T,{className:`h-3.5 w-3.5`}),` On click`]}),(0,Y.jsx)(`div`,{className:`text-blue-950 font-mono break-all`,children:up(o,s,!!y?.source)}),h&&(0,Y.jsxs)(`div`,{className:`mt-1.5 flex items-start gap-1.5 text-amber-900`,children:[(0,Y.jsx)(I,{className:`h-3 w-3 mt-0.5`}),(0,Y.jsxs)(`span`,{children:[`First asks: `,(0,Y.jsx)(`em`,{children:h})]})]}),g&&(0,Y.jsxs)(`div`,{className:`mt-1.5 text-blue-950`,children:[`On success: `,(0,Y.jsx)(`em`,{children:g})]})]}),u.length>0&&(0,Y.jsx)(vp,{title:`Where it appears`,children:(0,Y.jsx)(xp,{locations:u,label:i,icon:a,variant:c,iconOnly:D})}),o===`api`&&!!s&&(0,Y.jsx)(vp,{title:`Test request`,icon:Jt,children:(0,Y.jsx)(Sp,{target:s,method:C,bodyExtra:w,params:_})}),_.length>0&&(0,Y.jsx)(vp,{title:`Input Dialog`,count:_.length,children:(0,Y.jsx)(mp,{title:i,params:_,variant:c})}),v&&(0,Y.jsx)(vp,{title:`Result Dialog`,icon:Ee,children:(0,Y.jsx)(gp,{dialog:v})}),y?.source&&(0,Y.jsx)(vp,{title:`Script Body (${y.language??`expression`})`,icon:pn,children:(0,Y.jsx)(`pre`,{className:`m-0 rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap max-h-[200px] overflow-auto`,children:y.source})})]})})})}function fp({label:e,icon:t,variant:n,iconOnly:r,disabled:i}){return(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded px-3 py-1.5 text-sm font-medium pointer-events-none ${lp(n)} ${i?`opacity-50`:``}`,"aria-disabled":!0,disabled:!0,children:[t&&(0,Y.jsx)(pp,{name:t}),!r&&(0,Y.jsx)(`span`,{children:e})]})}function pp({name:e}){let t=e.split(/[-_\s]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``),n=oe[t===`Home`?`House`:t];return n?(0,Y.jsx)(n,{className:`h-4 w-4`,"aria-hidden":!0}):(0,Y.jsx)(`span`,{className:`inline-flex h-4 min-w-4 items-center justify-center rounded bg-white/30 px-1 text-[9px] uppercase font-mono`,children:e.slice(0,3)})}function mp({title:e,params:t,variant:n}){return(0,Y.jsxs)(`div`,{className:`rounded border bg-background shadow-sm`,children:[(0,Y.jsx)(`div`,{className:`border-b bg-muted/30 px-3 py-2 text-xs font-medium`,children:e}),(0,Y.jsx)(`div`,{className:`p-3 space-y-2`,children:t.map((e,t)=>{let n=e.name??e.field??`param_${t}`;return(0,Y.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,Y.jsxs)(`label`,{className:`text-xs flex items-center gap-1`,children:[sp(e.label)||n,e.required&&(0,Y.jsx)(`span`,{className:`text-red-600 text-[10px]`,children:`*`}),(0,Y.jsx)(`span`,{className:`ml-1 font-mono text-[9px] text-muted-foreground`,children:n}),e.type&&(0,Y.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:e.type})]}),hp(e),e.helpText&&(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:e.helpText})]},t)})}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t bg-muted/20 px-3 py-2`,children:[(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded border bg-background pointer-events-none`,children:`Cancel`}),(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded pointer-events-none ${lp(n||`primary`)}`,children:`OK`})]})]})}function hp(e){let t=`w-full text-xs px-2 py-1 border rounded bg-background pointer-events-none`,n=e.placeholder||(e.defaultFromRow?`(from selected row)`:``),r=e.defaultValue;return Array.isArray(e.options)&&e.options.length>0?(0,Y.jsxs)(`select`,{className:t,disabled:!0,value:``,children:[(0,Y.jsx)(`option`,{value:``,children:n||`— select —`}),e.options.map((e,t)=>(0,Y.jsx)(`option`,{value:e.value,children:sp(e.label)},t))]}):e.type===`boolean`?(0,Y.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,disabled:!0,className:`pointer-events-none`}),` Toggle`]}):e.type===`textarea`||e.type===`html`||e.type===`long_text`?(0,Y.jsx)(`textarea`,{className:`${t} min-h-[48px]`,placeholder:n,value:r==null?``:String(r),readOnly:!0}):(0,Y.jsx)(`input`,{type:e.type===`number`||e.type===`integer`?`number`:e.type===`date`?`date`:`text`,className:t,placeholder:n,value:r==null?``:String(r),readOnly:!0})}function gp({dialog:e}){let t=sp(e.title)||`Result`,n=sp(e.description),r=sp(e.acknowledge)||`I have saved this`,i=e.fields??[];return(0,Y.jsxs)(`div`,{className:`rounded border bg-background shadow-sm`,children:[(0,Y.jsx)(`div`,{className:`border-b bg-muted/30 px-3 py-2 text-xs font-medium`,children:t}),(0,Y.jsxs)(`div`,{className:`p-3 space-y-2 text-xs`,children:[n&&(0,Y.jsx)(`div`,{className:`text-muted-foreground`,children:n}),i.length===0?(0,Y.jsx)(`div`,{className:`text-muted-foreground italic`,children:`Renders full JSON response.`}):(0,Y.jsx)(`ul`,{className:`space-y-1.5`,children:i.map((t,n)=>(0,Y.jsx)(`li`,{className:`rounded border bg-muted/20 p-2`,children:(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:sp(t.label)||t.path}),(0,Y.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:t.path}),(0,Y.jsx)(`span`,{className:`ml-auto font-mono text-[9px] uppercase text-muted-foreground`,children:t.format??e.format??`json`})]})},n))})]}),(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-t bg-muted/20 px-3 py-2`,children:(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded bg-primary text-primary-foreground pointer-events-none`,children:r})})]})}function _p({label:e,value:t,icon:n}){let r=typeof t==`string`?t:t?.source??JSON.stringify(t);return(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 pt-0.5`,children:[(0,Y.jsx)(n,{className:`h-3 w-3 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e,`:`]}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:r})]})}function vp({title:e,count:t,icon:n,children:r}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[n&&(0,Y.jsx)(n,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),r]})}function yp({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}function bp({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-mono uppercase tracking-wider text-muted-foreground/70`,children:e}),t]})}function xp({locations:e,label:t,icon:n,variant:r,iconOnly:i}){let a=(0,Y.jsx)(fp,{label:t,icon:n,variant:r,iconOnly:i});return(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[e.includes(`record_header`)&&(0,Y.jsx)(bp,{label:`record_header`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`div`,{className:`h-6 w-6 rounded bg-muted`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium`,children:`Sample record`}),(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:`Record detail`})]})]}),(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5`,children:a})]}),(0,Y.jsx)(`div`,{className:`p-3 text-[10px] text-muted-foreground`,children:`…record body…`})]})}),e.includes(`list_toolbar`)&&(0,Y.jsx)(bp,{label:`list_toolbar`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium`,children:`Records`}),(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5`,children:a})]}),(0,Y.jsx)(`div`,{className:`px-3 py-2 text-[10px] text-muted-foreground`,children:`row 1 · row 2 · row 3`})]})}),e.includes(`list_item`)&&(0,Y.jsx)(bp,{label:`list_item`,children:(0,Y.jsx)(`div`,{className:`divide-y rounded border bg-background`,children:[0,1].map(e=>(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1.5`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px]`,children:[`Row `,e+1]}),(0,Y.jsx)(`div`,{className:`origin-right scale-90`,children:a})]},e))})}),(e.includes(`record_section`)||e.includes(`record_related`))&&(0,Y.jsx)(bp,{label:e.includes(`record_related`)?`record_related`:`record_section`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:`Section`}),a]}),(0,Y.jsx)(`div`,{className:`p-3 text-[10px] text-muted-foreground`,children:`…section content…`})]})}),e.includes(`record_more`)&&(0,Y.jsx)(bp,{label:`record_more`,children:(0,Y.jsxs)(`div`,{className:`w-52 rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b px-3 py-1.5 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(ze,{className:`h-3.5 w-3.5`}),` More`]}),(0,Y.jsx)(`div`,{className:`px-2 py-1.5 text-xs`,children:(0,Y.jsx)(`div`,{className:`rounded px-1 py-0.5 hover:bg-accent`,children:t})})]})}),e.includes(`global_nav`)&&(0,Y.jsx)(bp,{label:`global_nav`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsx)(`div`,{className:`px-3 py-2 text-[11px] text-muted-foreground`,children:`⌘K · Command palette`}),(0,Y.jsx)(`div`,{className:`border-t px-3 py-1.5 text-xs`,children:(0,Y.jsx)(`div`,{className:`rounded px-1 py-0.5 hover:bg-accent`,children:t})})]})})]})}function Sp({target:e,method:t,bodyExtra:n,params:r}){let i=(t||`POST`).toUpperCase(),[a,o]=X.useState(null),[s,c]=X.useState(!1),l=n&&typeof n==`object`?n:{};return(0,Y.jsxs)(`div`,{className:`space-y-2 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2 font-mono text-[11px] break-all`,children:[(0,Y.jsx)(`span`,{className:`font-semibold`,children:i}),` `,e]}),Object.keys(l).length>0&&(0,Y.jsx)(`pre`,{className:`m-0 rounded border bg-muted/30 p-2 text-[10px] font-mono whitespace-pre-wrap`,children:JSON.stringify(l,null,2)}),r.length>0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`+ `,r.length,` user-supplied param`,r.length>1?`s`:``,` collected at runtime`]}),i!==`GET`&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 text-[10px] text-amber-700`,children:[(0,Y.jsx)(I,{className:`mt-0.5 h-3 w-3 shrink-0`}),(0,Y.jsxs)(`span`,{children:[`Sends a real `,i,` request to the live backend — may modify data.`]})]}),(0,Y.jsxs)(`button`,{type:`button`,onClick:async()=>{c(!0),o(null);try{let t=typeof localStorage<`u`?localStorage.getItem(`auth-session-token`):null,n={"Content-Type":`application/json`};t&&(n.Authorization=`Bearer ${t}`);let r={method:i,headers:n,credentials:`include`};i!==`GET`&&i!==`HEAD`&&(r.body=JSON.stringify(l));let a=await fetch(e,r),s=await a.text(),c=s;try{c=JSON.parse(s)}catch{}o({status:a.status,ok:a.ok,body:c})}catch(e){o({status:0,ok:!1,error:e instanceof Error?e.message:String(e)})}finally{c(!1)}},disabled:s,className:`inline-flex items-center gap-1.5 rounded border bg-background px-2.5 py-1 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:[(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),` `,s?`Sending…`:`Send test request`]}),a&&(0,Y.jsxs)(`div`,{className:`rounded border p-2 `+(a.ok?`border-green-300 bg-green-50`:`border-red-300 bg-red-50`),children:[(0,Y.jsx)(`div`,{className:`mb-1 text-[11px] font-medium`,children:a.error?`Network error`:`HTTP `+a.status+(a.ok?` OK`:``)}),(0,Y.jsx)(`pre`,{className:`m-0 max-h-[200px] overflow-auto text-[10px] font-mono whitespace-pre-wrap`,children:a.error??(typeof a.body==`string`?a.body:JSON.stringify(a.body,null,2))})]})]})}var Cp={"@yearly":`0 0 1 1 *`,"@annually":`0 0 1 1 *`,"@monthly":`0 0 1 * *`,"@weekly":`0 0 * * 0`,"@daily":`0 0 * * *`,"@midnight":`0 0 * * *`,"@hourly":`0 * * * *`};function wp(e,t,n){let r={values:new Set,any:!1};if(e===`*`){for(let e=t;e<=n;e++)r.values.add(e);return r.any=!0,r}for(let i of e.split(`,`)){let e,a=i;if(i.includes(`/`)){let[t,n]=i.split(`/`);a=t,e=n}let o=e?Math.max(1,parseInt(e,10)||1):1,s=t,c=n;if(a!==`*`)if(a.includes(`-`)){let[e,t]=a.split(`-`).map(e=>parseInt(e,10));if(Number.isNaN(e)||Number.isNaN(t))return null;s=e,c=t}else{let e=parseInt(a,10);if(Number.isNaN(e))return null;s=e,c=e}for(let e=s;e<=c;e+=o)e>=t&&e<=n&&r.values.add(e)}return r}function Tp(e){let t=(Cp[e.trim()]??e.trim()).split(/\s+/);if(t.length!==5&&t.length!==6)return null;let[n,r,i,a,o]=t.length===6?t.slice(1):t,s=wp(n,0,59),c=wp(r,0,23),l=wp(i,1,31),u=wp(a,1,12),d=wp(o===`7`?`0`:o,0,6);return!s||!c||!l||!u||!d?null:{minute:s,hour:c,dom:l,month:u,dow:d}}function Ep(e,t,n){let r=Tp(e);if(!r)return[];let i=[],a=new Date(t.getTime());a.setSeconds(0,0),a.setMinutes(a.getMinutes()+1);let o=t.getTime()+366*24*60*60*1e3;for(;i.length<n&&a.getTime()<=o;)r.minute.values.has(a.getMinutes())&&r.hour.values.has(a.getHours())&&r.month.values.has(a.getMonth()+1)&&(r.dom.any||r.dow.any?r.dom.values.has(a.getDate())&&r.dow.values.has(a.getDay()):r.dom.values.has(a.getDate())||r.dow.values.has(a.getDay()))&&i.push(new Date(a.getTime())),a.setMinutes(a.getMinutes()+1);return i}function Dp(e){let t=/^(\d+)\s*(ms|s|m|h|d)$/.exec(e.trim());if(!t)return null;let n=parseInt(t[1],10);switch(t[2]){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*6e4;case`h`:return n*36e5;case`d`:return n*864e5;default:return null}}function Op(e,t,n){let r=[];for(let i=1;i<=n;i++)r.push(new Date(t.getTime()+i*e));return r}function kp(e){return e.toLocaleString(void 0,{weekday:`short`,month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function Ap(e){if(e.schedule&&typeof e.schedule==`object`){let t=e.schedule,n=String(t.type??``),r=t.timezone??e.timezone??e.tz;if(n===`cron`){let e=t.expression;return{cron:typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:void 0,timezone:r}}if(n===`interval`){let e=Number(t.intervalMs);return{every:Number.isFinite(e)&&e>0?jp(e):void 0,timezone:r}}if(n===`once`)return{at:typeof t.at==`string`?t.at:void 0,timezone:r}}let t=typeof e.cron==`string`?e.cron:typeof e.schedule==`string`?e.schedule:void 0,n=e.every??e.interval;return{cron:t,every:typeof n==`string`?n:typeof n==`number`?jp(n):void 0,at:typeof e.at==`string`?e.at:typeof e.runAt==`string`?e.runAt:void 0,timezone:e.timezone??e.tz}}function jp(e){return e%864e5==0?`${e/864e5}d`:e%36e5==0?`${e/36e5}h`:e%6e4==0?`${e/6e4}m`:e%1e3==0?`${e/1e3}s`:`${e}ms`}function Mp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,{cron:o,every:s,at:c,timezone:l}=Ap(n),u=n.handler??n.target??n.function??n.functionName,d=n.active!==!1&&n.enabled!==!1,f=n.retryPolicy,p=f?.maxRetries??n.maxRetries??n.retries,m=f?.backoffMs,h=n.timeout??n.timeoutMs,g=n.concurrency,_=s?Dp(s):null,{nextFires:v,deltas:y}=X.useMemo(()=>{let e=new Date,t=[];if(o)t=Ep(o,e,5);else if(_)t=Op(_,e,5);else if(c){let e=Date.parse(c);Number.isNaN(e)||(t=[new Date(e)])}return{nextFires:t,deltas:t.map(t=>Np(t.getTime()-e.getTime()))}},[o,_,c]),b=o&&v.length===0||s&&!_;return!r&&!o&&!s&&!c&&!u?(0,Y.jsx)(Z,{hint:`job`,children:(0,Y.jsx)(Ic,{children:`Set a schedule (cron / every / at) and a handler to see the job preview.`})}):(0,Y.jsx)(Z,{hint:`job`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(he,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(Ip,{icon:or,label:d?`Active`:`Paused`,tone:d?`green`:`gray`}),l&&(0,Y.jsx)(Ip,{icon:It,label:l,mono:!0}),p!=null&&(0,Y.jsx)(Ip,{icon:Ne,label:`retries: ${p}${m?` (${jp(m)} backoff)`:``}`}),h!=null&&(0,Y.jsx)(Ip,{icon:Lt,label:`timeout: ${jp(h)}`}),g!=null&&(0,Y.jsx)(Ip,{label:`concurrency: ${g}`})]})]})]})}),(0,Y.jsx)(Fp,{title:`Schedule`,icon:ct,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[o&&(0,Y.jsx)(Pp,{label:`Cron`,children:(0,Y.jsx)(`code`,{className:`font-mono`,children:o})}),s&&(0,Y.jsxs)(Pp,{label:`Every`,children:[(0,Y.jsx)(`code`,{className:`font-mono`,children:s}),!_&&(0,Y.jsx)(`span`,{className:`ml-2 text-amber-700`,children:`unparseable`})]}),c&&(0,Y.jsx)(Pp,{label:`At`,children:(0,Y.jsx)(`code`,{className:`font-mono`,children:c})}),!o&&!s&&!c&&(0,Y.jsx)(`div`,{className:`text-muted-foreground italic`,children:`No schedule set — runs only when triggered manually.`})]})}),(o||_||c)&&(0,Y.jsx)(Fp,{title:`Next ${Math.max(v.length,1)} run${v.length===1?``:`s`}`,icon:Dn,children:v.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:b?`Could not derive any future fire time. Check the schedule syntax.`:`No upcoming runs in the next 366 days.`}):(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:v.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`w-4 text-right text-muted-foreground text-[10px]`,children:t+1}),(0,Y.jsx)(Dn,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono`,children:kp(e)}),(0,Y.jsxs)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:[`in `,y[t]]})]},t))})}),(0,Y.jsx)(Fp,{title:`Handler`,icon:pn,children:u?(0,Y.jsxs)(`div`,{className:`rounded border bg-background px-2.5 py-1.5 text-xs flex items-center gap-2`,children:[(0,Y.jsx)(pe,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:u})]}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:`No handler bound — the job will be a no-op.`})})]})})})}function Np(e){if(e<=0)return`now`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.round(t/60);if(n<60)return`${n}m`;let r=Math.round(n/60);return r<48?`${r}h`:`${Math.round(r/24)}d`}function Pp({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground w-12 shrink-0`,children:[e,`:`]}),(0,Y.jsx)(`span`,{className:`break-all`,children:t})]})}function Fp({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function Ip({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Lp=[{key:`objects`,label:`Objects`,icon:we,flat:!1},{key:`apps`,label:`Apps`,icon:gt,flat:!1},{key:`messages`,label:`Messages`,icon:O,flat:!0},{key:`validationMessages`,label:`Validation Messages`,icon:ae,flat:!0},{key:`globalActions`,label:`Global Actions`,icon:Lr,flat:!0},{key:`dashboards`,label:`Dashboards`,icon:Pt,flat:!1},{key:`settings`,label:`Settings`,icon:_t,flat:!0},{key:`metadataForms`,label:`Metadata Forms`,icon:at,flat:!1}];function Rp({name:e,draft:t}){let n=t,r=n.locale??n.language??`?`,i=n.label??n.name??e??``,a=n.description,o=n.data??n,s=Lp.map(e=>{let t=o?.[e.key];if(!t||typeof t!=`object`)return{...e,count:0,sample:[]};let n=Object.entries(t);return{...e,count:n.length,sample:n.slice(0,5)}}),c=s.reduce((e,t)=>e+t.count,0),l=s.filter(e=>e.count>0).length,u=Math.round(l/Lp.length*100);return c===0?(0,Y.jsx)(Z,{hint:`translation · ${r}`,children:(0,Y.jsx)(Ic,{children:`This bundle is empty — add at least one translated string to see the coverage report.`})}):(0,Y.jsx)(Z,{hint:`translation · ${r} · ${c} keys`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(ot,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[10px] font-mono text-emerald-800`,children:[(0,Y.jsx)(It,{className:`h-3 w-3`}),` `,r]})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-[11px]`,children:[(0,Y.jsx)(Nr,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Category coverage:`}),(0,Y.jsx)(`div`,{className:`h-1.5 w-32 rounded-full bg-muted overflow-hidden`,children:(0,Y.jsx)(`div`,{className:`h-full bg-emerald-500`,style:{width:`${u}%`}})}),(0,Y.jsxs)(`span`,{className:`font-mono`,children:[l,`/`,Lp.length,` (`,u,`%)`]}),(0,Y.jsxs)(`span`,{className:`ml-3 text-muted-foreground`,children:[c,` total keys`]})]})]})]})}),(0,Y.jsx)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:s.map(e=>(0,Y.jsx)(zp,{cat:e},e.key))})]})})})}function zp({cat:e}){let t=e.icon;return(0,Y.jsxs)(`div`,{className:`rounded border bg-background ${e.count===0?`opacity-60`:``}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-2.5 py-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:e.label})]}),(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:e.count})]}),(0,Y.jsx)(`div`,{className:`px-2.5 py-1.5 min-h-[3.5rem]`,children:e.count===0?(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground italic`,children:`empty`}):(0,Y.jsxs)(`ul`,{className:`space-y-0.5 text-[11px]`,children:[e.sample.map(([t,n])=>(0,Y.jsxs)(`li`,{className:`flex items-baseline gap-2 truncate`,children:[(0,Y.jsx)(`code`,{className:`font-mono text-muted-foreground shrink-0`,children:t}),(0,Y.jsx)(`span`,{className:`truncate text-foreground/80`,children:Bp(n,e.flat)})]},t)),e.count>e.sample.length&&(0,Y.jsxs)(`li`,{className:`text-[10px] text-muted-foreground italic`,children:[`+`,e.count-e.sample.length,` more…`]})]})})]})}function Bp(e,t){return t?typeof e==`string`?`"${e}"`:e==null?`∅`:String(e):e&&typeof e==`object`?`{${Object.keys(e).length} keys}`:String(e??`∅`)}function Vp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.parent;return r?(0,Y.jsx)(Z,{hint:`role`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(Fe,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a})]})]})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-1.5`,children:`Hierarchy`}),(0,Y.jsx)(`div`,{className:`rounded border bg-background p-2.5 text-xs`,children:o?(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Parent:`}),(0,Y.jsx)(`code`,{className:`font-mono`,children:o})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 pl-4`,children:[(0,Y.jsx)($t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[11px] font-mono text-emerald-800`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground italic`,children:`this role`})]}),(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground pt-1`,children:`Open the parent role to walk further up the chain.`})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[11px] font-mono text-emerald-800`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground italic`,children:`root role — no parent`})]})})]}),(0,Y.jsx)(`div`,{className:`rounded border border-blue-200 bg-blue-50 p-2.5 text-[11px] text-blue-900`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Roles don't grant data access on their own.`}),(0,Y.jsxs)(`div`,{className:`opacity-90 mt-0.5`,children:[`Bind `,(0,Y.jsx)(`code`,{className:`font-mono`,children:r}),` to one or more `,(0,Y.jsx)(`strong`,{children:`Permission Sets`}),` `,`or assign it to a `,(0,Y.jsx)(`strong`,{children:`Profile`}),` to control CRUD-VAMA, field access, and tab visibility.`]})]})]})})]})})}):(0,Y.jsx)(Z,{hint:`role`,children:(0,Y.jsx)(Ic,{children:`Give the role a name to see the preview.`})})}function Hp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.instructions??``,s=Array.isArray(n.tools)?n.tools:[],c=Array.isArray(n.triggerPhrases)?n.triggerPhrases:[],l=Array.isArray(n.triggerConditions)?n.triggerConditions:[],u=Array.isArray(n.permissions)?n.permissions:[],d=n.active!==!1,f=n.model??void 0;return r?(0,Y.jsx)(Z,{hint:`skill`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(Tn,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(Wp,{icon:or,label:d?`Active`:`Disabled`,tone:d?`green`:`gray`}),f&&(0,Y.jsx)(Wp,{label:`model: ${f}`,mono:!0}),u.length>0&&(0,Y.jsx)(Wp,{icon:mt,label:`${u.length} required perm${u.length===1?``:`s`}`})]})]})]})}),(0,Y.jsx)(Up,{title:`Instructions`,icon:Hn,children:o?(0,Y.jsx)(`pre`,{className:`rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap break-words max-h-64 overflow-auto`,children:o}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:`No instructions yet — the skill will contribute nothing to the prompt.`})}),(0,Y.jsxs)(Up,{title:`Tools (${s.length})`,icon:zn,children:[s.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No tools whitelisted.`}):(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>{let t=e.includes(`*`);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-mono border ${t?`border-amber-300 bg-amber-50 text-amber-900`:`border-border bg-muted/40`}`,children:[t&&(0,Y.jsx)(Sn,{className:`h-3 w-3`}),e]},e)})}),s.some(e=>e.includes(`*`))&&(0,Y.jsx)(`div`,{className:`mt-1 text-[10px] text-amber-700`,children:`Wildcards expand to many tools at runtime — review the matching set in the agent before activating.`})]}),c.length>0&&(0,Y.jsx)(Up,{title:`Trigger Phrases (${c.length})`,icon:ce,children:(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:c.map((e,t)=>(0,Y.jsxs)(`li`,{className:`px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground mr-2`,children:`"`}),e,(0,Y.jsx)(`span`,{className:`text-muted-foreground ml-2`,children:`"`})]},t))})}),l.length>0&&(0,Y.jsx)(Up,{title:`Trigger Conditions (${l.length})`,icon:F,children:(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsx)(`table`,{className:`w-full text-xs`,children:(0,Y.jsx)(`tbody`,{className:`divide-y`,children:l.map((e,t)=>(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 align-top w-24 text-muted-foreground text-[10px] uppercase`,children:e.type??`cond`}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono break-all`,children:e.expression??e.value??JSON.stringify(e)})]},t))})})})}),u.length>0&&(0,Y.jsx)(Up,{title:`Required Permissions`,icon:mt,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:u.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})})]})})}):(0,Y.jsx)(Z,{hint:`skill`,children:(0,Y.jsx)(Ic,{children:`Give the skill a name and at least an instructions block to see the preview.`})})}function Up({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function Wp({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Gp=class extends Error{constructor(){super(`external_service_unavailable`),this.name=`ExternalServiceUnavailableError`}},Kp=d();function qp(){return``.replace(/\/+$/,``)}function Jp(e){return`${qp()}/api/v1/datasources/${encodeURIComponent(e)}/external`}async function Yp(e){if(e.status===503){let t;try{t=await e.json()}catch{t=void 0}if((t&&typeof t==`object`&&`error`in t?String(t.error):``)===`external_service_unavailable`)throw new Gp}if(!e.ok){let t=`${e.status} ${e.statusText}`;try{let n=await e.json();n&&typeof n==`object`&&`error`in n&&(t=String(n.error))}catch{}throw Error(t)}return await e.json()}async function Xp(e,t={}){let n=t.schema?`?schema=${encodeURIComponent(t.schema)}`:``;return(await Yp(await Kp(`${Jp(e)}/tables${n}`,{method:`GET`,headers:{Accept:`application/json`}}))).tables??[]}async function Zp(e,t,n={}){return(await Yp(await Kp(`${Jp(e)}/tables/${encodeURIComponent(t)}/draft`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify(n)}))).draft}async function Qp(e){return(await Yp(await Kp(`${Jp(e)}/refresh-catalog`,{method:`POST`,headers:{Accept:`application/json`}}))).catalog}async function $p(e){return Yp(await Kp(`${Jp(e)}/validate`,{method:`POST`,headers:{Accept:`application/json`}}))}async function em(e){await Yp(await Kp(`${qp()}/api/v1/meta/object/${encodeURIComponent(e.name)}`,{method:`PUT`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify(e.definition)}))}function tm({datasource:e,table:t,open:n,onOpenChange:r,onImported:i}){let[a,o]=X.useState(`loading`),[s,c]=X.useState(null),[l,u]=X.useState(null);X.useEffect(()=>{if(!n||!t)return;let r=!1;return o(`loading`),c(null),u(null),(async()=>{try{let n=await Zp(e,t.name,{remoteSchema:t.schema});if(r)return;c(n),o(`ready`)}catch(e){if(r)return;u(e instanceof Gp?`Federation is not enabled on this server.`:e instanceof Error?e.message:String(e)),o(`error`)}})(),()=>{r=!0}},[n,t,e]);let d=X.useCallback(async()=>{if(s){o(`importing`),u(null);try{await em(s),o(`done`),i?.(s.name)}catch(e){u(e instanceof Error?e.message:String(e)),o(`ready`)}}},[s,i]),f=t?[t.schema,t.name].filter(Boolean).join(`.`):``;return(0,Y.jsx)(xt,{open:n,onOpenChange:r,children:(0,Y.jsxs)(Mt,{className:`max-w-2xl`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(br,{className:`h-4 w-4`}),`Import as Object`]}),(0,Y.jsxs)(Te,{children:[`Map remote table `,(0,Y.jsx)(`span`,{className:`font-mono`,children:f}),` into an ObjectStack object bound to `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),`. The remote schema is never modified.`]})]}),a===`loading`&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 justify-center text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Generating draft…`]}),a===`error`&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive`,children:l}),a===`done`&&s&&(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-8 text-center`,children:[(0,Y.jsx)(M,{className:`h-8 w-8 text-emerald-500`}),(0,Y.jsxs)(`div`,{className:`text-sm`,children:[`Imported object `,(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:s.name}),`.`]}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Review its binding and run validation to confirm it matches the remote table.`})]}),(a===`ready`||a===`importing`)&&s&&(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 text-sm`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Object name`}),(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:s.name})]}),l&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2 text-xs text-destructive`,children:l}),s.review.length>0&&(0,Y.jsxs)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-2.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-amber-800 dark:text-amber-300`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5`}),s.review.length,` column`,s.review.length===1?``:`s`,` need review`]}),(0,Y.jsx)(`ul`,{className:`mt-1.5 space-y-1 text-[11px] text-amber-900/90 dark:text-amber-200/80`,children:s.review.map(e=>(0,Y.jsxs)(`li`,{className:`flex flex-wrap gap-x-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e.column}),(0,Y.jsxs)(`span`,{className:`text-amber-700/70 dark:text-amber-400/70`,children:[`(`,e.remoteType,`)`]}),(0,Y.jsxs)(`span`,{children:[`— `,e.note]})]},e.column))})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[(0,Y.jsx)(ke,{className:`h-3 w-3`}),` Generated source`]}),(0,Y.jsx)(`pre`,{className:`max-h-64 overflow-auto rounded border bg-muted/30 p-2.5 text-[11px] leading-relaxed font-mono`,children:s.source})]})]}),(0,Y.jsx)(He,{children:a===`done`?(0,Y.jsx)(H,{onClick:()=>r(!1),children:`Close`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>r(!1),disabled:a===`importing`,children:`Cancel`}),(0,Y.jsx)(H,{onClick:d,disabled:a!==`ready`||!s,children:a===`importing`?(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}),` Importing…`]}):`Import as Object`})]})})]})})}function nm({datasource:e}){let[t,n]=X.useState(`idle`),[r,i]=X.useState([]),[a,o]=X.useState(null),[s,c]=X.useState(``),[l,u]=X.useState(null),[d,f]=X.useState(!1),p=X.useCallback(async()=>{n(`loading`),o(null);try{i(await Xp(e)),n(`loaded`)}catch(e){e instanceof Gp?n(`unavailable`):(o(e instanceof Error?e.message:String(e)),n(`error`))}},[e]);X.useEffect(()=>{p()},[p]);let m=X.useMemo(()=>{let e=s.trim().toLowerCase();return e?r.filter(t=>[t.schema,t.name].filter(Boolean).join(`.`).toLowerCase().includes(e)):r},[r,s]),h=e=>{u(e),f(!0)};return t===`unavailable`?(0,Y.jsx)(rm,{}):(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1`,children:[(0,Y.jsx)(tt,{className:`absolute left-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),placeholder:`Filter tables…`,className:`w-full rounded border bg-background pl-7 pr-2 py-1.5 text-xs outline-none focus:ring-1 focus:ring-ring`})]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void p(),disabled:t===`loading`,children:[t===`loading`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Refresh`})]})]}),a&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2.5 text-xs text-destructive`,children:a}),t===`loading`&&r.length===0&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Introspecting remote schema…`]}),t===`loaded`&&m.length===0&&(0,Y.jsx)(`div`,{className:`py-10 text-center text-sm text-muted-foreground`,children:r.length===0?`No remote tables found (check the datasource’s allowedSchemas).`:`No tables match the filter.`}),m.length>0&&(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-left font-medium`,children:`Table`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-right font-medium`,children:`Columns`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-right font-medium`,children:`Rows (est.)`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 w-px`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:m.map(e=>{let t=[e.schema,e.name].filter(Boolean).join(`.`);return(0,Y.jsxs)(`tr`,{className:`hover:bg-muted/30`,children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 font-mono`,children:[(0,Y.jsx)(jn,{className:`h-3.5 w-3.5 text-muted-foreground`}),e.schema&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.schema,`.`]}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.name})]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 text-right tabular-nums`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,Y.jsx)(Un,{className:`h-3 w-3`}),e.columnCount]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 text-right tabular-nums text-muted-foreground`,children:typeof e.rowCountEstimate==`number`?e.rowCountEstimate.toLocaleString():`—`}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5`,children:(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>h(e),children:[(0,Y.jsx)(Ut,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Import`})]})})]},t)})})]})}),(0,Y.jsx)(tm,{datasource:e,table:l,open:d,onOpenChange:f})]})}function rm(){return(0,Y.jsxs)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-3 text-xs text-amber-900 dark:text-amber-200`,children:[`Federation is not enabled on this server. The`,(0,Y.jsx)(`span`,{className:`font-mono`,children:` external-datasource `}),`service must be registered for table browsing, drafting, and validation to work.`]})}var im={missing_table:`Missing table`,missing_column:`Missing column`,type_mismatch:`Type mismatch`,nullability_mismatch:`Nullability mismatch`,unmapped_column:`Unmapped column`,pk_mismatch:`Primary-key mismatch`};function am({datasource:e}){let[t,n]=X.useState(`idle`),[r,i]=X.useState([]),[a,o]=X.useState(null),[s,c]=X.useState(null),l=X.useCallback(async()=>{n(`running`),c(null);try{let t=await $p(e);i(t.results),o(t.ok),n(`done`)}catch(e){e instanceof Gp?n(`unavailable`):(c(e instanceof Error?e.message:String(e)),n(`error`))}},[e]);return t===`unavailable`?(0,Y.jsx)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-3 text-xs text-amber-900 dark:text-amber-200`,children:`Federation is not enabled on this server, so validation is unavailable.`}):(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Check that every federated object on`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),` still matches its live remote table.`]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:t===`running`,children:[t===`running`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(pe,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Run validation`})]})]}),s&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2.5 text-xs text-destructive`,children:s}),t===`done`&&a!==null&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 rounded border p-2.5 text-sm ${a?`border-emerald-300 bg-emerald-50 dark:bg-emerald-950/20 text-emerald-800 dark:text-emerald-300`:`border-destructive/40 bg-destructive/5 text-destructive`}`,children:[a?(0,Y.jsx)(M,{className:`h-4 w-4`}):(0,Y.jsx)(ae,{className:`h-4 w-4`}),a?`All ${r.length} object${r.length===1?``:`s`} match the remote schema.`:`${r.filter(e=>!e.ok).length} of ${r.length} object${r.length===1?``:`s`} diverge from the remote schema.`]}),t===`done`&&r.length===0&&(0,Y.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No federated objects are bound to this datasource yet. Import a table from the Tables tab to get started.`}),r.length>0&&(0,Y.jsx)(`ul`,{className:`space-y-2`,children:r.map(e=>(0,Y.jsx)(om,{result:e},e.object))})]})}function om({result:e}){return(0,Y.jsxs)(`li`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[e.ok?(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 text-emerald-500`}):(0,Y.jsx)(ae,{className:`h-3.5 w-3.5 text-destructive`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs font-medium`,children:e.object}),!e.ok&&(0,Y.jsxs)(`span`,{className:`ml-auto text-[11px] text-muted-foreground`,children:[e.diffs.length,` diff`,e.diffs.length===1?``:`s`]})]}),e.diffs.length>0&&(0,Y.jsx)(`ul`,{className:`border-t divide-y`,children:e.diffs.map((e,t)=>(0,Y.jsx)(sm,{diff:e},`${e.kind}:${e.column??``}:${t}`))})]})}function sm({diff:e}){let t=[e.remoteSchema,e.remoteName].filter(Boolean).join(`.`);return(0,Y.jsxs)(`li`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-0.5 px-2.5 py-1.5 text-[11px]`,children:[(0,Y.jsx)(`span`,{className:`rounded px-1 py-0.5 font-medium uppercase tracking-wide text-[9px] ${e.severity===`error`?`bg-destructive/10 text-destructive`:`bg-amber-100 text-amber-800 dark:bg-amber-950/40 dark:text-amber-300`}`,children:im[e.kind]??e.kind}),t&&(0,Y.jsx)(`span`,{className:`font-mono text-muted-foreground`,children:t}),e.column&&(0,Y.jsxs)(`span`,{className:`font-mono`,children:[`.`,e.column]}),(e.expected!==void 0||e.actual!==void 0)&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[`expected `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e.expected??`—`}),`, actual`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e.actual??`—`})]})]})}function cm({datasource:e,schemaMode:t,allowWrites:n}){let[r,i]=X.useState(null),[a,o]=X.useState(!1),[s,c]=X.useState(null),l=X.useCallback(async()=>{if(e){o(!0),c(null);try{i(await Qp(e))}catch(e){c(e instanceof Gp?`Federation is not enabled on this server.`:e instanceof Error?e.message:String(e))}finally{o(!1)}}},[e]);return e?(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1.5 border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-medium`,children:[(0,Y.jsx)(Zn,{className:`h-4 w-4 text-sky-500`}),`External Datasource`]}),(0,Y.jsx)(`span`,{className:`rounded border bg-background px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground`,children:t??`external`}),(0,Y.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-[10px] uppercase tracking-wider ${n?`bg-amber-100 text-amber-800 dark:bg-amber-950/40 dark:text-amber-300`:`bg-muted text-muted-foreground`}`,children:n?`writes allowed`:`read-only`}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[r?.snapshotAt&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(Dn,{className:`h-3 w-3`}),`snapshot `,lm(r.snapshotAt)]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:a,children:[a?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Refresh catalog`})]})]})]}),s&&(0,Y.jsx)(`div`,{className:`border-b border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive`,children:s}),(0,Y.jsxs)(vr,{defaultValue:`tables`,className:`p-3`,children:[(0,Y.jsxs)(Wn,{children:[(0,Y.jsx)(wr,{value:`tables`,children:`Tables`}),(0,Y.jsx)(wr,{value:`validation`,children:`Validation`})]}),(0,Y.jsx)(dn,{value:`tables`,className:`mt-3`,children:(0,Y.jsx)(nm,{datasource:e})}),(0,Y.jsx)(dn,{value:`validation`,className:`mt-3`,children:(0,Y.jsx)(am,{datasource:e})})]})]}):(0,Y.jsx)(`div`,{className:`rounded border bg-muted/20 p-3 text-xs text-muted-foreground`,children:`Save the datasource first to browse its remote tables and validate federated objects.`})}function lm(e){let t=new Date(e).getTime();if(Number.isNaN(t))return e;try{return new Date(t).toLocaleString()}catch{return e}}var um=/pass|secret|key|token|credential|auth/i;function dm(e){return um.test(e)}function fm(e){return e==null||e===``?`∅`:`••••••`}function pm(e){return e==null?`∅`:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):Array.isArray(e)?`[${e.length}]`:typeof e==`object`?`{${Object.keys(e).length} keys}`:String(e)}function mm({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.driver??n.type??`unknown`,s=n.active!==!1,c=!!n.isDefault||!!n.default,l=n.config??{},u=n.pool,d=n.ssl,f=n.retryPolicy,p=n.healthCheck,m=Array.isArray(n.readReplicas)?n.readReplicas:[],h=Array.isArray(n.capabilities)?n.capabilities:[],g=n.schemaMode??`managed`,_=g!==`managed`,v=!!(n.external??void 0)?.allowWrites,y=Object.entries(l);return!r&&y.length===0?(0,Y.jsx)(Z,{hint:`datasource`,children:(0,Y.jsx)(Ic,{children:`Set a name and at least a driver to see the datasource preview.`})}):(0,Y.jsx)(Z,{hint:`datasource · ${o}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(br,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 font-mono`,children:[(0,Y.jsx)(rr,{className:`h-3 w-3 text-muted-foreground`}),` `,o]}),(0,Y.jsx)(_m,{icon:or,label:s?`Active`:`Disabled`,tone:s?`green`:`gray`}),c&&(0,Y.jsx)(_m,{icon:cn,label:`default`,tone:`amber`}),m.length>0&&(0,Y.jsx)(_m,{icon:_r,label:`${m.length} read replica${m.length===1?``:`s`}`})]})]})]})}),_&&(0,Y.jsx)(cm,{datasource:String(e??``),schemaMode:g,allowWrites:v}),(0,Y.jsx)(gm,{title:`Connection`,icon:ut,children:y.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No config keys set.`}):(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsx)(`table`,{className:`w-full text-xs`,children:(0,Y.jsx)(`tbody`,{className:`divide-y`,children:y.map(([e,t])=>{let n=dm(e);return(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 align-top w-40 font-mono text-muted-foreground`,children:e}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono break-all`,children:n?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{children:fm(t)}),(0,Y.jsx)(`span`,{className:`rounded bg-amber-50 border border-amber-200 px-1 py-0.5 text-[9px] uppercase tracking-wider text-amber-800`,children:`redacted`})]}):pm(t)})]},e)})})})})}),(0,Y.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,Y.jsx)(hm,{title:`Pool`,icon:le,value:u}),(0,Y.jsx)(hm,{title:`SSL`,icon:mt,value:typeof d==`boolean`?{enabled:d}:d}),(0,Y.jsx)(hm,{title:`Retry Policy`,icon:Ne,value:f}),(0,Y.jsx)(hm,{title:`Health Check`,icon:le,value:p})]}),h.length>0&&(0,Y.jsx)(gm,{title:`Capabilities`,icon:mt,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:h.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})})]})})})}function hm({title:e,icon:t,value:n}){let r=n&&typeof n==`object`&&Object.keys(n).length>0;return(0,Y.jsxs)(`div`,{className:`rounded border bg-background ${r?``:`opacity-60`}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b px-2.5 py-1.5`,children:[(0,Y.jsx)(t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:e})]}),(0,Y.jsx)(`div`,{className:`px-2.5 py-1.5 text-[11px]`,children:r?(0,Y.jsx)(`dl`,{className:`space-y-0.5`,children:Object.entries(n).slice(0,6).map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2 truncate`,children:[(0,Y.jsxs)(`dt`,{className:`text-muted-foreground font-mono shrink-0`,children:[e,`:`]}),(0,Y.jsx)(`dd`,{className:`font-mono truncate`,children:dm(e)?fm(t):pm(t)})]},e))}):(0,Y.jsx)(`span`,{className:`text-muted-foreground italic`,children:`not configured`})})]})}function gm({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function _m({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}function vm(e){if(e){if(typeof e==`string`)return e;if(typeof e==`object`&&typeof e.source==`string`)return e.source}}function ym(e){switch(e){case`error`:return{ring:`border-red-200 bg-red-50 dark:border-red-900 dark:bg-red-950/40`,text:`text-red-700 dark:text-red-300`,icon:Gt};case`warning`:return{ring:`border-amber-200 bg-amber-50 dark:border-amber-900 dark:bg-amber-950/40`,text:`text-amber-800 dark:text-amber-300`,icon:I};default:return{ring:`border-blue-200 bg-blue-50 dark:border-blue-900 dark:bg-blue-950/40`,text:`text-blue-800 dark:text-blue-300`,icon:Nn}}}function bm({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.type??`script`,s=n.object,c=n.message??``,l=n.severity??`error`,u=n.active!==!1,d=Array.isArray(n.events)?n.events:[],f=n.priority,p=Array.isArray(n.tags)?n.tags:[],m=ym(l);return r?(0,Y.jsx)(Z,{hint:`validation · ${o}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(ae,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r}),(0,Y.jsx)(`span`,{className:`rounded border bg-background px-1.5 py-0.5 text-[10px] font-mono`,children:o})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(wm,{icon:or,label:u?`Active`:`Disabled`,tone:u?`green`:`gray`}),s&&(0,Y.jsx)(wm,{label:`object: ${s}`,mono:!0}),f!=null&&(0,Y.jsx)(wm,{label:`priority ${f}`}),d.length>0&&(0,Y.jsx)(wm,{label:`on ${d.join(`, `)}`})]})]})]})}),(0,Y.jsx)(`div`,{className:`rounded border p-2.5 text-xs ${m.ring}`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 ${m.text}`,children:[(0,Y.jsx)(m.icon,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`font-medium uppercase tracking-wider text-[10px]`,children:l}),(0,Y.jsx)(`div`,{className:`font-normal mt-0.5 text-foreground`,children:c||(0,Y.jsx)(`span`,{className:`italic text-muted-foreground`,children:`no message set`})})]})]})}),(0,Y.jsx)(xm,{type:o,d:n}),p.length>0&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-1`,children:`Tags`}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:p.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})]})]})})}):(0,Y.jsx)(Z,{hint:`validation`,children:(0,Y.jsx)(Ic,{children:`Give the validation a name to see the preview.`})})}function xm({type:e,d:t}){switch(e){case`script`:case`conditional`:return(0,Y.jsx)(Cm,{title:`Condition`,icon:pn,children:(0,Y.jsx)(Sm,{value:vm(t.condition)??vm(t.expression)})});case`unique`:{let e=Array.isArray(t.fields)?t.fields:[],n=vm(t.scope)??vm(t.where);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Cm,{title:`Unique on ${e.length} field${e.length===1?``:`s`}`,icon:A,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.length===0?(0,Y.jsx)(`span`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`no fields set`}):e.map(e=>(0,Y.jsx)(`span`,{className:`rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})}),n&&(0,Y.jsx)(Cm,{title:`Scope`,icon:Fr,children:(0,Y.jsx)(Sm,{value:n})})]})}case`state_machine`:{let e=t.transitions&&typeof t.transitions==`object`&&!Array.isArray(t.transitions)?t.transitions:{},n=Object.entries(e),r=t.field;return(0,Y.jsx)(Cm,{title:`Transitions${r?` on ${r}`:``}`,icon:j,children:n.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`No transitions declared.`}):(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:n.map(([e,t])=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),(0,Y.jsx)(nn,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono text-emerald-700 dark:text-emerald-400`,children:Array.isArray(t)&&t.length>0?t.join(` | `):`∅ (dead-end)`})]},e))})})}case`format`:{let e=t.pattern??t.regex,n=t.format;return(0,Y.jsx)(Cm,{title:`Format`,icon:te,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[n&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Built-in:`}),` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:n})]}),e&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Pattern:`}),` `,(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e})]}),!n&&!e&&(0,Y.jsx)(`span`,{className:`text-amber-700 dark:text-amber-400`,children:`No format or regex set.`})]})})}case`cross_field`:{let e=Array.isArray(t.fields)?t.fields:[],n=vm(t.condition);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Cm,{title:`Fields involved`,icon:Fr,children:(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[e.map(e=>(0,Y.jsx)(`span`,{className:`rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e)),e.length===0&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground italic`,children:`none`})]})}),(0,Y.jsx)(Cm,{title:`Cross-field condition`,icon:pn,children:(0,Y.jsx)(Sm,{value:n})})]})}case`async`:{let e=t.endpoint??t.url,n=t.timeoutMs;return(0,Y.jsx)(Cm,{title:`Async endpoint`,icon:It,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:t.method??`POST`}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e??`—`})]}),n!=null&&(0,Y.jsxs)(`div`,{className:`text-muted-foreground`,children:[`timeout: `,n,`ms`]})]})})}case`custom`:{let e=t.handler??t.function;return(0,Y.jsx)(Cm,{title:`Custom handler`,icon:pn,children:(0,Y.jsx)(`div`,{className:`rounded border bg-background px-2.5 py-1.5 text-xs`,children:e?(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e}):(0,Y.jsx)(`span`,{className:`text-amber-700 dark:text-amber-400`,children:`No handler set.`})})})}default:return(0,Y.jsx)(Cm,{title:`Rule`,icon:ae,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs text-muted-foreground italic`,children:[`Unknown rule type "`,e,`". Showing common fields only.`]})})}}function Sm({value:e}){return e?(0,Y.jsx)(`pre`,{className:`rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap break-words`,children:e}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`No expression set.`})}function Cm({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function wm({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700 dark:text-emerald-400`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Tm=X.lazy(()=>o(()=>import(`./plugin-charts-BDFf0TCn.js`).then(e=>e.t).then(e=>({default:e.ChartRenderer})),__vite__mapDeps([0]),import.meta.url));function Em({draft:e}){let t=f(),{fieldLabel:n}=be(),r=e.object,i=X.useMemo(()=>(Array.isArray(e.measures)?e.measures:[]).map(e=>String(e?.name??``)).filter(Boolean),[e]),a=X.useMemo(()=>(Array.isArray(e.dimensions)?e.dimensions:[]).map(e=>String(e?.name??``)).filter(Boolean),[e]),o=!!r&&i.length>0,[s,c]=X.useState({status:`idle`,rows:[]}),l=X.useCallback(async()=>{if(o){c({status:`loading`,rows:[]});try{let n=await t.queryDataset(e,{dimensions:a,measures:i});c({status:`ok`,rows:Array.isArray(n?.rows)?n.rows:[],fields:Array.isArray(n?.fields)?n.fields:[],object:n?.object})}catch(e){c({status:`error`,rows:[],error:String(e?.message??e)})}}},[t,e,a,i,o]),u=`${r??``}|${a.join(`,`)}|${i.join(`,`)}`;if(X.useEffect(()=>{o&&l()},[u]),!r)return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`Pick a base object`,description:"Set the dataset's `object` to preview it against live data."})});if(i.length===0)return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`Add a measure`,description:`A dataset needs at least one measure (e.g. revenue = sum(amount)) to preview.`})});let{measureField:d,headerLabel:p}=g(s.status===`ok`?s.fields:void 0,s.status===`ok`?s.object:void 0,n),m=[...a,...i],h=e=>{let t=d(e)?.format;return typeof t==`string`&&t.includes(`%`)},_=i.filter(h),b=_.length>0&&_.length<i.length;return(0,Y.jsx)(Z,{hint:`dataset · ${r}${a.length?` · by `+a.join(`, `):``}`,children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void l(),disabled:s.status===`loading`,className:`inline-flex items-center gap-1.5 rounded-md border bg-background px-3 py-1.5 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:[s.status===`loading`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Rt,{className:`h-3.5 w-3.5`}),`Run preview`]}),(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[i.length,` measure`,i.length===1?``:`s`,` · `,a.length,` dimension`,a.length===1?``:`s`]})]}),s.status===`error`&&(0,Y.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-words`,children:s.error})]}),s.status===`ok`&&s.rows.length===0&&(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`No rows`,description:`The dataset returned no rows for the current scope.`}),s.rows.length>0&&a.length>=1&&(0,Y.jsx)(Q,{fallbackHint:`Couldn't render the chart for this result — the table below still shows the data.`,children:(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(`div`,{className:`h-[260px] flex items-center justify-center text-xs text-muted-foreground`,children:(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`})}),children:(0,Y.jsxs)(`div`,{className:`rounded-md border p-2`,children:[(0,Y.jsx)(Tm,{schema:{data:s.rows,xAxisKey:a[0],chartType:b?`combo`:`bar`,series:i.map(e=>({dataKey:e,label:p(e),chartType:b&&h(e)?`line`:`bar`}))}}),b&&(0,Y.jsxs)(`p`,{className:`mt-1 px-1 text-[10px] text-muted-foreground`,children:[`Ratio measures (`,_.map(p).join(`, `),`) use the right axis.`]})]})})}),s.rows.length>0&&(0,Y.jsx)(`div`,{className:`overflow-auto max-h-[60vh] rounded-md border`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40`,children:(0,Y.jsx)(`tr`,{children:m.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-1.5 text-left font-medium whitespace-nowrap`,children:p(e)},e))})}),(0,Y.jsx)(`tbody`,{children:s.rows.map((e,t)=>(0,Y.jsx)(`tr`,{className:`border-t`,children:m.map(t=>(0,Y.jsx)(`td`,{className:`px-2 py-1 tabular-nums whitespace-nowrap`,children:i.includes(t)?v(e[t],d(t)?.format,d(t)?.currency):y(e[t])},t))},t))})]})})]})})}function Dm(e){return Array.isArray(e)?e.map((e,t)=>{if(!e||typeof e!=`object`)return null;let n=String(e.key??``).trim(),r=String(e.label??n??``).trim();return!n&&!r?null:{g:{key:n||`(no key)`,label:r||n||`(unnamed)`,order:typeof e.order==`number`?e.order:void 0,include:Om(e.include),package:typeof e.package==`string`?e.package:void 0,pages:km(e.pages)},i:t}}).filter(e=>e!==null).sort((e,t)=>(e.g.order??0)-(t.g.order??0)||e.i-t.i).map(e=>e.g):[]}function Om(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof e.tag==`string`)return{tag:e.tag}}function km(e){if(Array.isArray(e))return e.map(e=>typeof e==`string`?{literal:e}:e&&typeof e==`object`?{doc:typeof e.doc==`string`?e.doc:void 0,href:typeof e.href==`string`?e.href:void 0,label:typeof e.label==`string`?e.label:void 0,badge:typeof e.badge==`string`?e.badge:void 0,icon:typeof e.icon==`string`?e.icon:void 0}:null).filter(e=>e!==null)}function Am(e){return e===`public`?{icon:(0,Y.jsx)(Jt,{className:`h-3 w-3`}),label:`Public`,tone:`text-emerald-700 bg-emerald-50 border-emerald-200`}:e&&typeof e==`object`&&typeof e.profile==`string`?{icon:(0,Y.jsx)(ut,{className:`h-3 w-3`}),label:`Profile: ${e.profile}`,tone:`text-amber-800 bg-amber-50 border-amber-200`}:{icon:(0,Y.jsx)(gn,{className:`h-3 w-3`}),label:`Org`,tone:`text-muted-foreground bg-muted/40 border-muted`}}function jm({name:e,draft:t}){let n=t,r=String(n.name??e??``).trim(),i=String(n.label??r),a=typeof n.description==`string`?n.description:``,o=typeof n.slug==`string`?n.slug:``,s=X.useMemo(()=>Dm(n.groups),[n.groups]),c=Am(n.audience);return r?(0,Y.jsx)(Z,{hint:`book · spine`,toolbar:(0,Y.jsxs)(`a`,{href:`/meta/book/${encodeURIComponent(r)}/tree`,target:`_blank`,rel:`noreferrer`,className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,title:`Open the live-resolved navigation tree (actual docs per group)`,children:[`Resolved tree `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]}),children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Hn,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:i}),(0,Y.jsxs)(`span`,{className:`ml-auto inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium ${c.tone}`,children:[c.icon,c.label]})]}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono mt-0.5`,children:r}),o&&(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[`Slug: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:o})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-1.5`,children:a})]}),s.length===0?(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(_e,{className:`h-8 w-8 opacity-50`}),title:`No groups yet`,tone:`warn`,description:(0,Y.jsxs)(Y.Fragment,{children:[`A book needs at least one group in its `,(0,Y.jsx)(`code`,{children:`groups`}),` spine. Each group derives its members from an `,(0,Y.jsx)(`code`,{children:`include`}),` rule (a glob like`,` `,(0,Y.jsx)(`code`,{children:`crm_guide_*`}),` or a `,(0,Y.jsx)(`code`,{children:`{ tag }`}),`).`]})}):(0,Y.jsx)(`div`,{className:`space-y-2`,children:s.map((e,t)=>(0,Y.jsx)(Mm,{group:e},`${e.key}-${t}`))})]})})}):(0,Y.jsx)(Z,{hint:`book`,children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Hn,{className:`h-8 w-8 opacity-50`}),title:`Name your book`,description:`Enter a name in the Form tab to start authoring the documentation spine.`})})}function Mm({group:e}){return(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 border-b bg-muted/20 px-3 py-2`,children:[(0,Y.jsx)(_e,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate`,children:e.label}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.key}),typeof e.order==`number`&&(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,title:`Order within the book`,children:[`#`,e.order]}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[e.package&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[10px] text-muted-foreground`,title:`Membership rule is scoped to this package`,children:[(0,Y.jsx)(xn,{className:`h-3 w-3`}),e.package]}),(0,Y.jsx)(Nm,{include:e.include,hasOverride:!!e.pages?.length})]})]}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:e.pages?.length?(0,Y.jsx)(`ol`,{className:`space-y-1`,children:e.pages.map((e,t)=>(0,Y.jsx)(Pm,{node:e},t))}):e.include==null?(0,Y.jsxs)(`div`,{className:`text-[11px] text-amber-700 italic`,children:[`No `,(0,Y.jsx)(`code`,{children:`include`}),` rule and no explicit `,(0,Y.jsx)(`code`,{children:`pages`}),` — this group matches nothing unless docs set `,(0,Y.jsxs)(`code`,{children:[`group: "`,e.key,`"`]}),`.`]}):(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground italic`,children:`Members derived from the rule above — resolved against the live doc set.`})})]})}function Nm({include:e,hasOverride:t}){return e==null?t?(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,title:`Curated order via explicit pages`,children:`curated`}):null:typeof e==`string`?(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border border-primary/30 bg-primary/5 px-1.5 py-0.5 font-mono text-[10px] text-foreground`,title:`Glob over doc names`,children:e}):(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border border-primary/30 bg-primary/5 px-1.5 py-0.5 text-[10px] text-foreground`,title:`Match by doc tag`,children:[(0,Y.jsx)(Yn,{className:`h-3 w-3`}),e.tag]})}function Pm({node:e}){if(e.literal===`---`)return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-[10px] uppercase tracking-wider text-muted-foreground/60`,children:[(0,Y.jsx)(ht,{className:`h-3 w-3`}),`separator`]});if(e.literal===`...`)return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-[11px] italic text-muted-foreground`,children:[(0,Y.jsx)(ze,{className:`h-3.5 w-3.5`}),`…rest (remaining matched docs, by order)`]});let t=!!e.href,n=e.literal??e.doc,r=e.label??n??e.href??`(empty)`;return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-xs`,children:[t?(0,Y.jsx)(cr,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}):(0,Y.jsx)(at,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate`,children:r}),!t&&n&&e.label&&(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:n}),e.badge&&(0,Y.jsx)(`span`,{className:`rounded-full border border-primary/30 bg-primary/5 px-1.5 py-0.5 text-[9px] uppercase tracking-wider text-foreground`,children:e.badge}),t&&(0,Y.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`ml-auto font-mono text-[10px] text-muted-foreground hover:text-foreground truncate max-w-[40%]`,title:e.href,children:e.href})]})}function Fm(){vs(`page`,Nl),vs(`view`,Ll),vs(`dashboard`,zl),vs(`report`,Hl),vs(`app`,tu),vs(`action`,dp),vs(`object`,Su),vs(`datasource`,mm),vs(`validation`,bm),vs(`dataset`,Em),vs(`email_template`,Eu),vs(`translation`,Rp),vs(`book`,jm),vs(`flow`,Pf),vs(`job`,Mp),vs(`agent`,If),vs(`tool`,Yf),vs(`skill`,Hp),vs(`permission`,np),vs(`profile`,np),vs(`role`,Vp)}var Im=new Set([`object`,`object-field`,`flow`,`role`,`node`,`user`,`team`,`queue`,`department`,`connector`,`email-template`]);function Lm(e){let t=e.xRef;if(!t||typeof t!=`object`)return;let n=typeof t.objectSource==`string`&&t.objectSource?{objectSource:t.objectSource}:{};if(typeof t.kindFrom==`string`&&t.kindFrom&&t.map&&typeof t.map==`object`){let e={};for(let[n,r]of Object.entries(t.map))typeof r==`string`&&Im.has(r)&&(e[n]=r);return Object.keys(e).length===0?void 0:{kindFrom:t.kindFrom,map:e,...n}}if(typeof t.kind==`string`&&Im.has(t.kind))return{kind:t.kind,...n}}function Rm(e){let t=e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).trim();return t?t.split(/\s+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):e}function zm(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Bm(e){if(Array.isArray(e.type))return e.type.find(e=>e!==`null`);if(typeof e.type==`string`)return e.type;if(Array.isArray(e.enum))return`string`;if(e.properties)return`object`;if(e.items)return`array`}function Vm(e){return e.filter(e=>typeof e==`string`).map(e=>({value:e,label:Rm(e)}))}function Hm(e){if(!(e.default===void 0||e.default===null)){if(typeof e.default==`boolean`||typeof e.default==`number`)return String(e.default);if(typeof e.default==`string`)return e.default}}function Um(e){if(Array.isArray(e.enum))return`select`;let t=Bm(e);if(t===`boolean`)return`boolean`;if(t===`number`||t===`integer`)return`number`;if(t===`string`)return e.format===`multiline`?`textarea`:`text`}function Wm(e){let t=e.properties??{},n=[];for(let[e,r]of Object.entries(t)){if(!zm(r))continue;let t=Bm(r),i,a,o=Lm(r);o?i=`reference`:Array.isArray(r.enum)?(i=`select`,a=Vm(r.enum)):i=t===`boolean`?`boolean`:`text`,n.push({key:e,label:r.title||Rm(e),kind:i,...a?{options:a}:{},...o?{ref:o}:{},...r.description?{placeholder:r.description}:{}})}return n}function Gm(e,t){return{label:e.title||Rm(t),...e.description?{help:e.description}:{},...Hm(e)?{defaultValue:Hm(e)}:{}}}function Km(e){if(!zm(e)||Bm(e)!==`object`||!zm(e.properties))return null;let t=[];for(let[n,r]of Object.entries(e.properties)){if(!zm(r))continue;let e=Bm(r);if(e===`array`){let e=zm(r.items)?r.items:void 0,i=e?Bm(e):void 0;e&&i===`object`&&zm(e.properties)?t.push({id:n,path:[`config`,n],kind:`objectList`,columns:Wm(e),...Gm(r,n)}):i===`string`&&t.push({id:n,path:[`config`,n],kind:`stringList`,...Gm(r,n)});continue}if(e===`object`&&zm(r.properties)){let e=Object.entries(r.properties).filter(([,e])=>zm(e)),i=e.some(([e,t])=>e===`enabled`&&Bm(t)===`boolean`);for(let[a,o]of e){let e=o,s=Lm(e),c=s?`reference`:Um(e);if(!c)continue;let l=`${n}.${a}`,u=i&&a===`enabled`,d={id:l,path:[`config`,n,a],kind:c,...u?{label:r.title||Rm(n),...r.description?{help:r.description}:{},...Hm(e)?{defaultValue:Hm(e)}:{}}:Gm(e,a),...s?{ref:s}:{},...c===`select`&&Array.isArray(e.enum)?{options:Vm(e.enum)}:{},...i&&!u?{showWhen:{field:`${n}.enabled`,equals:[`true`]}}:{}};t.push(d)}continue}let i=Lm(r);if(i){t.push({id:n,path:[`config`,n],kind:`reference`,ref:i,...Gm(r,n)});continue}let a=Um(r);a&&t.push({id:n,path:[`config`,n],kind:a,...Gm(r,n),...a===`select`&&Array.isArray(r.enum)?{options:Vm(r.enum)}:{}})}return t}function qm(e,t){return t===`template`?`{${e}}`:e}function Jm(e,t,n,r,i){let a=qm(n,t),o=Math.min(Math.max(r,0),e.length),s=Math.min(Math.max(i,0),e.length),c=Math.min(o,s),l=Math.max(o,s);return{next:e.slice(0,c)+a+e.slice(l),caret:c+a.length}}var Ym=`Insert a reference`,Xm=`Search references…`,Zm=`No matching references.`;function Qm({value:e,onValueChange:t,onBlur:n,onKeyDown:r,mode:i,groups:a,placeholder:o,disabled:s,multiline:c,rows:l=4,mono:u,className:d}){let f=X.useRef(null),p=X.useRef({start:0,end:0}),[m,h]=X.useState(!1),g=e=>{f.current=e},_=()=>{let t=f.current;t&&(p.current={start:t.selectionStart??e.length,end:t.selectionEnd??e.length})},v=n=>{let{next:r,caret:a}=Jm(e,i,n,p.current.start,p.current.end);t(r),h(!1),requestAnimationFrame(()=>{let e=f.current;if(e){e.focus();try{e.setSelectionRange(a,a)}catch{}p.current={start:a,end:a}}})},y=a.some(e=>e.refs.length>0),b={value:e,onChange:e=>t(e.target.value),onBlur:n,onKeyDown:r,onSelect:_,onKeyUp:_,onClick:_,placeholder:o,disabled:s};return(0,Y.jsxs)(`div`,{className:L(`relative`,d),children:[c?(0,Y.jsx)(`textarea`,{ref:g,...b,rows:l,className:`w-full rounded border bg-background px-2 py-1.5 pr-8 font-mono text-xs`}):(0,Y.jsx)(V,{ref:g,...b,className:L(`h-8 pr-8 text-sm`,u&&`font-mono`)}),y&&!s&&(0,Y.jsxs)(Mn,{open:m,onOpenChange:h,children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,"aria-label":Ym,title:Ym,onMouseDown:_,className:`absolute right-1 top-1 inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,children:(0,Y.jsx)(An,{className:`h-3.5 w-3.5`})})}),(0,Y.jsx)(Zt,{align:`end`,className:`w-72 p-0`,onCloseAutoFocus:e=>e.preventDefault(),children:(0,Y.jsxs)(xe,{children:[(0,Y.jsx)(Rr,{placeholder:Xm,className:`h-9`}),(0,Y.jsxs)(Et,{children:[(0,Y.jsx)(Ge,{children:Zm}),a.map(e=>(0,Y.jsx)(ft,{heading:e.label,children:e.refs.map(t=>(0,Y.jsxs)(ne,{value:`${t.token} ${t.label} ${t.detail??``}`,onSelect:()=>v(t.token),className:`flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`truncate font-mono text-xs`,children:qm(t.token,i)}),t.detail&&(0,Y.jsx)(`span`,{className:`shrink-0 truncate text-[10px] text-muted-foreground`,children:t.detail})]},`${e.id}:${t.token}`))},e.id))]})]})})]})]})}function $m({value:e,role:t,scopeGroups:n}){let r=t===`template`?null:Id(t,e);if(r)return(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:r.message});let i=n&&n.length>0?kd(n.flatMap(e=>e.refs)):null,a=i?Md(e,t,i):[];return a.length>0?(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(a)}):null}function eh(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function th(e){return e==null?``:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function nh(e){let t=e.trim();if(t===``)return``;if(t===`true`)return!0;if(t===`false`)return!1;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.parse(t)}catch{return e}return e}function rh(e){return Array.isArray(e)?e.filter(e=>eh(e)).map(e=>{let t=e.variable??e.name??e.key;return[typeof t==`string`?t:``,e.value]}):eh(e)?Object.entries(e):[]}function ih(e,t){let n=[...t];return rh(e).map(([e,t])=>{let r=bi(`kv`,n);return n.push(r),{id:r,key:e,raw:th(t)}})}function ah(e,t){let n=new Set;if(t){let t=[];for(let r of e){let e=r.key.trim();!e||n.has(e)||(n.add(e),t.push({variable:e,value:nh(r.raw)}))}return t}let r={};for(let t of e){let e=t.key.trim();!e||n.has(e)||(n.add(e),r[e]=nh(t.raw))}return r}function oh(e){if(Array.isArray(e))return JSON.stringify(e);let t=e??{},n=Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{});return JSON.stringify(n)}function sh({label:e,value:t,onCommit:n,disabled:r,help:i,addLabel:a,keyLabel:o,valueLabel:s,removeLabel:c,emptyLabel:l,scopeGroups:u}){let d=Array.isArray(t),f=X.useMemo(()=>oh(ah(ih(t,[]),d)),[t,d]),[p,m]=X.useState(()=>ih(t,[])),h=X.useRef(f);X.useEffect(()=>{f!==h.current&&(m(ih(t,[])),h.current=f)},[f,t]);let g=e=>{let t=ah(e,d);h.current=oh(t),n((Array.isArray(t)?t.length===0:Object.keys(t).length===0)?void 0:t)},_=(e,t)=>{m(n=>n.map(n=>n.id===e?{...n,...t}:n))},v=()=>{m(e=>[...e,{id:bi(`kv`,e.map(e=>e.id)),key:``,raw:``}])},y=e=>{m(t=>{let n=t.filter(t=>t.id!==e);return g(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[p.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:l}),p.map(e=>(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{value:e.key,onChange:t=>_(e.id,{key:t.target.value}),onBlur:()=>g(p),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:o,disabled:r,className:`h-8 flex-1 font-mono text-xs`}),(0,Y.jsx)(Qm,{mode:`template`,value:e.raw,onValueChange:t=>_(e.id,{raw:t}),onBlur:()=>g(p),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},groups:u??[],placeholder:s,disabled:r,className:`flex-1`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 w-8 shrink-0 p-0 text-muted-foreground`,onClick:()=>y(e.id),disabled:r,"aria-label":c,title:c,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)($m,{value:e.raw,role:`template`,scopeGroups:u})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:v,disabled:r,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),a]}),i&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:i})]})}function ch(e,t){let n=[...t];return e.map(e=>{let t=bi(`sl`,n);return n.push(t),{id:t,value:e}})}function lh(e){return e.map(e=>e.value.trim()).filter(e=>e!==``)}function uh({label:e,value:t,onCommit:n,disabled:r,addLabel:i,itemLabel:a,removeLabel:o,emptyLabel:s}){let c=X.useMemo(()=>Array.isArray(t)?t.map(e=>String(e)):[],[t]),[l,u]=X.useState(()=>ch(c,[])),d=X.useRef(JSON.stringify(c));X.useEffect(()=>{let e=JSON.stringify(c);e!==d.current&&(u(ch(c,[])),d.current=e)},[c]);let f=e=>{let t=lh(e);d.current=JSON.stringify(t),n(t.length?t:void 0)},p=(e,t)=>{u(n=>n.map(n=>n.id===e?{...n,value:t}:n))},m=()=>{u(e=>[...e,{id:bi(`sl`,e.map(e=>e.id)),value:``}])},h=e=>{u(t=>{let n=t.filter(t=>t.id!==e);return f(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[l.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:s}),l.map(e=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{value:e.value,onChange:t=>p(e.id,t.target.value),onBlur:()=>f(l),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:a,disabled:r,className:`h-8 flex-1 text-xs`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 w-8 shrink-0 p-0 text-muted-foreground`,onClick:()=>h(e.id),disabled:r,"aria-label":o,title:o,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:m,disabled:r,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),i]})]})}var dh={object:`object`,flow:`flow`,role:`role`,user:`user`,team:`team`,queue:`queue`,department:`department`,connector:`connector`,"email-template":`email_template`};function fh(e,t){if(e){if(e.kind)return{kind:e.kind,objectSource:e.objectSource};if(e.kindFrom&&e.map){let n=t(e.kindFrom),r=typeof n==`string`?e.map[n]:void 0;if(r)return{kind:r,objectSource:e.objectSource}}}}function ph(e,t){let n=e?.config;if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n[t];return typeof r==`string`&&r?r:void 0}function mh(e,t,n){if(e!==`object-field`)return;let r=t||`$trigger`;return r===`$trigger`?ph((Array.isArray(n.draft.nodes)?n.draft.nodes:[]).find(e=>e?.type===`start`),`objectName`):ph(n.node,r)}function hh(e){let t=mi(),[n,r]=X.useState({options:[],loading:!!e});return X.useEffect(()=>{if(!e){r({options:[],loading:!1});return}let n=!1;return r(e=>({...e,loading:!0})),t.list(e).then(e=>{n||r({options:(Array.isArray(e)?e:[]).filter(e=>e&&typeof e.name==`string`&&e.name).map(e=>({value:String(e.name),label:typeof e.label==`string`&&e.label&&e.label!==e.name?`${e.label} (${e.name})`:String(e.name)})),loading:!1})}).catch(()=>{n||r({options:[],loading:!1})}),()=>{n=!0}},[t,e]),n}function gh({resolved:e,value:t,onCommit:n,onBlur:r,disabled:i,placeholder:a,context:o,showHint:s=!0}){let c=X.useId(),l=o??{draft:{},node:null},u=e?.kind,d=e?mh(e.kind,e.objectSource,l):void 0,{fields:f}=Di(u===`object-field`?d:void 0),p=u&&u!==`object-field`&&u!==`node`?dh[u]:void 0,{options:m}=hh(p),h=X.useMemo(()=>{if(u===`object-field`)return f.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name}));if(u===`node`){let e=Array.isArray(l.draft.nodes)?l.draft.nodes:[],t=typeof l.node?.id==`string`?l.node.id:void 0;return e.filter(e=>typeof e?.id==`string`&&e.id&&e.id!==t).map(e=>{let t=String(e.id);return{value:t,label:typeof e.label==`string`&&e.label?`${e.label} (${t})`:t}})}return p?m:[]},[u,p,f,m,l.draft,l.node]),g=u===`object-field`&&!d;return(0,Y.jsxs)(`div`,{className:`w-full space-y-1`,children:[(0,Y.jsx)(V,{list:h.length?c:void 0,value:t==null?``:String(t),onChange:e=>n(e.target.value),onBlur:r,placeholder:a,disabled:i,className:`h-8 text-sm`}),h.length>0&&(0,Y.jsx)(`datalist`,{id:c,children:h.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))}),s&&u===`object-field`&&d&&(0,Y.jsxs)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:[`Fields of `,d,`.`]}),s&&g&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:`Set the flow’s trigger object (on the Start node) to list fields.`})]})}function _h({field:e,value:t,onCommit:n,disabled:r,context:i}){let a=i?.node??null,o=fh(e.ref,e=>ph(a,e));return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(gh,{resolved:o,value:t,onCommit:n,disabled:r,placeholder:e.placeholder,context:i})]})}function vh(e,t){let n=[];return e.map(e=>{let r=bi(`ol`,n);n.push(r);let i={};for(let n of t){let t=e[n.key];n.kind===`boolean`?i[n.key]=t===!0:t==null?i[n.key]=``:i[n.key]=String(t)}return{id:r,values:i}})}function yh(e,t){let n=[];for(let r of e){let e={},i=!1;for(let n of t){let t=r.values[n.key];n.kind===`boolean`?t===!0&&(e[n.key]=!0,i=!0):typeof t==`string`&&t.trim()!==``&&(e[n.key]=t.trim(),i=!0)}i&&n.push(e)}return n}function bh({label:e,columns:t,value:n,onCommit:r,disabled:i,addLabel:a,removeLabel:o,emptyLabel:s,context:c,scopeGroups:l}){let u=X.useMemo(()=>Array.isArray(n)?n.filter(e=>e&&typeof e==`object`):[],[n]),[d,f]=X.useState(()=>vh(u,t)),p=X.useRef(JSON.stringify(u));X.useEffect(()=>{let e=JSON.stringify(u);e!==p.current&&(f(vh(u,t)),p.current=e)},[u,t]);let m=e=>{let n=yh(e,t);p.current=JSON.stringify(n),r(n.length?n:void 0)},h=(e,t,n)=>{f(r=>r.map(r=>r.id===e?{...r,values:{...r.values,[t]:n}}:r))},g=()=>{let e={};for(let n of t)e[n.key]=n.kind===`boolean`?!1:``;f(t=>[...t,{id:bi(`ol`,t.map(e=>e.id)),values:e}])},_=e=>{f(t=>{let n=t.filter(t=>t.id!==e);return m(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[d.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:s}),d.map(e=>(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-2`,children:[(0,Y.jsx)(`div`,{className:`mb-1 flex justify-end`,children:(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 text-muted-foreground`,onClick:()=>_(e.id),disabled:i,"aria-label":o,title:o,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})}),(0,Y.jsx)(`div`,{className:`space-y-1.5`,children:t.map(t=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(B,{className:`w-24 shrink-0 text-[11px] text-muted-foreground`,children:t.label}),t.kind===`boolean`?(0,Y.jsx)(st,{checked:e.values[t.key]===!0,onCheckedChange:n=>{f(r=>{let i=r.map(r=>r.id===e.id?{...r,values:{...r.values,[t.key]:n===!0}}:r);return m(i),i})},disabled:i}):t.kind===`reference`?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsx)(gh,{resolved:fh(t.ref,t=>e.values[t]),value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onCommit:n=>h(e.id,t.key,typeof n==`string`?n:``),onBlur:()=>m(d),placeholder:t.placeholder,disabled:i,context:c,showHint:!1})}):t.kind===`expression`?(0,Y.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,Y.jsx)(Qm,{mode:`expression`,mono:!0,value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onValueChange:n=>h(e.id,t.key,n),onBlur:()=>m(d),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},groups:l??[],placeholder:t.placeholder,disabled:i}),(0,Y.jsx)($m,{value:typeof e.values[t.key]==`string`?e.values[t.key]:``,role:`predicate`,scopeGroups:l})]}):(0,Y.jsx)(V,{value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onChange:n=>h(e.id,t.key,n.target.value),onBlur:()=>m(d),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:t.placeholder,disabled:i,className:`h-8 flex-1 text-xs`})]},t.key))})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:g,disabled:i,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),a]})]})}function xh({field:e,value:t,onCommit:n,disabled:r,locale:i,context:a,scopeGroups:o}){let s=e.refMode??(e.kind===`expression`?`expression`:`template`),c=(()=>{switch(e.kind){case`reference`:return(0,Y.jsx)(_h,{field:e,value:t,onCommit:e=>n(e),disabled:r,context:a});case`keyValue`:return(0,Y.jsx)(sh,{label:e.label,value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.kv.add`,i),keyLabel:J(`engine.inspector.flowNode.kv.key`,i),valueLabel:J(`engine.inspector.flowNode.kv.value`,i),removeLabel:J(`engine.inspector.flowNode.kv.remove`,i),emptyLabel:J(`engine.inspector.flowNode.kv.empty`,i),scopeGroups:o});case`stringList`:return(0,Y.jsx)(uh,{label:e.label,value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.list.add`,i),itemLabel:J(`engine.inspector.flowNode.list.item`,i),removeLabel:J(`engine.inspector.flowNode.list.remove`,i),emptyLabel:J(`engine.inspector.flowNode.list.empty`,i)});case`objectList`:return(0,Y.jsx)(bh,{label:e.label,columns:e.columns??[],value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.list.add`,i),removeLabel:J(`engine.inspector.flowNode.list.remove`,i),emptyLabel:J(`engine.inspector.flowNode.list.empty`,i),context:a,scopeGroups:o});case`number`:return(0,Y.jsx)(ei,{label:e.label,value:typeof t==`number`?t:t!=null&&t!==``?Number(t):void 0,placeholder:e.placeholder,onCommit:e=>n(e),disabled:r});case`boolean`:return(0,Y.jsx)(G,{label:e.label,value:t===!0,onCommit:e=>n(e),disabled:r});case`select`:return(0,Y.jsx)(K,{label:e.label,value:t==null?``:String(t),options:e.options??[],onCommit:e=>n(e),disabled:r});case`textarea`:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Qm,{multiline:!0,rows:4,mode:s,value:t==null?``:String(t),onValueChange:e=>n(e),groups:o??[],placeholder:e.placeholder,disabled:r})]});default:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Qm,{mode:s,mono:e.kind===`expression`,value:t==null?``:String(t),onValueChange:e=>n(e),groups:o??[],placeholder:e.placeholder,disabled:r})]})}})(),l=e.kind===`expression`?Id(`predicate`,t):null,u=e.kind===`expression`?`predicate`:s===`template`&&(e.kind===`text`||e.kind===`textarea`)?`template`:null,d=!l&&u&&o&&o.length>0?Md(t,u,kd(o.flatMap(e=>e.refs))):[];return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[c,l&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:l.message}),!l&&d.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(d)}),e.help&&!l&&d.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:e.help})]})}var Sh=[`variables`,`outputs`,`loop`,`trigger`],Ch={variables:`Flow variables`,outputs:`Upstream outputs`,loop:`Loop item`,trigger:`Trigger record`};function wh(e,t){let n=X.useMemo(()=>Td(e??{},t),[e,t]),{fields:r,loading:i}=Di(n.trigger?.objectName);return X.useMemo(()=>{let e=[...n.refs];n.trigger&&e.push(...Ed(n.trigger,r));let t=new Set,a=e.filter(e=>t.has(e.token)?!1:(t.add(e.token),!0));return{groups:Sh.map(e=>({id:e,label:Ch[e],refs:a.filter(t=>t.group===e)})).filter(e=>e.refs.length>0),refs:a,loading:!!n.trigger&&i,isEmpty:a.length===0}},[n,r,i])}function Th(e,t,n){let r=Array.isArray(t)?t:[],i=0;return n.map(t=>{if(t.source!==e||t.type===`fault`||t.type===`back`)return t;let n=r[i++];if(!n||typeof n!=`object`)return t;let a=typeof n.expression==`string`?n.expression.trim():``,o=typeof n.label==`string`?n.label.trim():``,s={...t};return o?s.label=o:delete s.label,a&&a!==`true`?(s.condition=a,delete s.isDefault):a===`true`?(s.isDefault=!0,delete s.condition):(delete s.condition,delete s.isDefault),s})}function Eh(e){let t=e?.config;return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}function Dh(e,t,n){let[r,...i]=t,a={...e};if(i.length===0)n==null||n===``?delete a[r]:a[r]=n;else{let e=a[r],t=Dh(e&&typeof e==`object`&&!Array.isArray(e)?e:{},i,n);Object.keys(t).length===0?delete a[r]:a[r]=t}return a}function Oh({selection:e,draft:t,onPatch:n,onClearSelection:r,locale:i,readOnly:a}){let o=Array.isArray(t.nodes)?t.nodes:[],s=o.findIndex(t=>t?.id===e.id),c=s>=0?o[s]:null,l=rd(),{groups:u}=wh(t,c?.id),d=X.useMemo(()=>{let e=c?.type?l[c.type]:void 0;return(e===void 0?null:Km(e))??fd(c?.type)},[l,c?.type]),f=Eh(c),p=d.filter(e=>hd(e,c,d)),m=X.useMemo(()=>{let e=Array.isArray(t.variables)?t.variables:[],n={};for(let t of e)t&&typeof t.name==`string`&&(n[t.name]=t.defaultValue);return n},[t]),h=X.useMemo(()=>{let e=new Set;for(let t of d){let n=md(t);n&&e.add(n),t.fallbackPath&&t.fallbackPath.length>=2&&t.fallbackPath[0]===`config`&&e.add(t.fallbackPath[1])}return e},[d]),g=X.useMemo(()=>{let e=Object.fromEntries(Object.entries(f).filter(([e])=>!h.has(e)));return Object.keys(e).length?JSON.stringify(e,null,2):``},[c,h]),[_,v]=X.useState(g),[y,b]=X.useState(null),[x,S]=X.useState(g.trim()!==``),[C,w]=X.useState(!1);if(X.useEffect(()=>{v(g),b(null),S(g.trim()!==``),w(!1)},[g]),!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.flowNode.kind`,i),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.flowNode.close`,i),children:(0,Y.jsx)(Hi,{message:e.id})});let T=e=>{n({nodes:si(o,s,{...c,...e})})},E=g.trim()!==``,D=c.type===`screen`||c.type===`user_task`,O=(e,r)=>{let i=e.path,a=Dh(c,i,r);e.fallbackPath&&(a=Dh(a,e.fallbackPath,void 0));let l={nodes:si(o,s,a)};if(c.type===`decision`&&i.length===2&&i[0]===`config`&&i[1]===`conditions`){let e=Array.isArray(t.edges)?t.edges:[];l.edges=Th(c.id,r,e)}n(l)},k=()=>{try{let e=_.trim()===``?{}:JSON.parse(_);if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Must be a JSON object`);let t=Object.fromEntries(Object.entries(f).filter(([e])=>h.has(e))),r=Object.fromEntries(Object.entries(e).filter(([e])=>!h.has(e))),i={...t,...r};b(null);let a={...c};Object.keys(i).length===0?delete a.config:a.config=i,n({nodes:si(o,s,a)})}catch(e){b(String(e.message))}},A=()=>{n({nodes:si(o,s,null)}),r()},j=gd.includes(c.type)?[...gd]:[...gd,c.type??``].filter(Boolean);return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.flowNode.kind`,i),title:c.label||c.id,onClose:r,closeLabel:J(`engine.inspector.flowNode.close`,i),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.flowNode.remove`,i),onClick:A,disabled:a}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.id`,i),value:c.id,onCommit:e=>T({id:e}),disabled:a,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.label`,i),value:c.label??``,onCommit:e=>T({label:e}),disabled:a}),(0,Y.jsx)(K,{label:J(`engine.inspector.flowNode.type`,i),value:c.type,options:j.map(e=>({value:e,label:e})),onCommit:e=>T({type:e}),disabled:a}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.description`,i),value:c.description??``,onCommit:e=>T({description:e||void 0}),disabled:a}),d.length===0?(0,Y.jsx)(`p`,{className:`pt-1 text-xs italic text-muted-foreground`,children:J(`engine.inspector.flowNode.noConfig`,i)}):p.length>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowNode.configuration`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),p.map(e=>(0,Y.jsx)(xh,{field:e,value:pd(c,e),onCommit:t=>O(e,t),disabled:a,locale:i,context:{draft:t,node:c},scopeGroups:u},e.id)),D&&(0,Y.jsx)(_f,{node:c,variables:m,className:`mt-1`}),E||C?(0,Y.jsxs)(`details`,{className:`group rounded border bg-muted/20`,open:x,onToggle:e=>S(e.target.open),children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none px-2 py-1.5 text-xs font-medium text-muted-foreground`,children:J(`engine.inspector.flowNode.advanced`,i)}),(0,Y.jsxs)(`div`,{className:`space-y-1 border-t p-2`,children:[(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:J(`engine.inspector.flowNode.advancedHint`,i)}),(0,Y.jsx)(`textarea`,{value:_,onChange:e=>v(e.target.value),onBlur:k,disabled:a,rows:6,placeholder:`{ }`,className:`w-full rounded border bg-background px-2 py-1.5 font-mono text-xs`}),y&&(0,Y.jsx)(`div`,{className:`text-xs text-destructive`,children:y})]})]}):!a&&(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{w(!0),S(!0)},className:`inline-flex items-center gap-1 self-start text-[11px] text-muted-foreground transition-colors hover:text-foreground`,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),J(`engine.inspector.flowNode.advanced`,i)]})]})}function kh({label:e,value:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`div`,{className:`flex h-8 items-center rounded border bg-muted/30 px-2 font-mono text-sm text-muted-foreground`,children:t})]})}function Ah({selection:e,draft:t,onPatch:n,onClearSelection:r,locale:i,readOnly:a}){let o=Array.isArray(t.edges)?t.edges:[],s=o.findIndex((t,n)=>Bu(t,n)===e.id),c=s>=0?o[s]:null,{groups:l}=wh(t,c?.source);if(!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.flowEdge.kind`,i),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.flowEdge.close`,i),children:(0,Y.jsx)(Hi,{message:J(`engine.inspector.flowEdge.missing`,i)})});let u=e=>{let t={...c,...e};for(let e of[`label`,`condition`,`isDefault`]){let n=t[e];(n===void 0||n===``||n===!1)&&delete t[e]}(t.type==="default"||t.type===``||t.type===void 0)&&delete t.type,n({edges:si(o,s,t)})},d=c.isDefault===!0,f=(Array.isArray(t.nodes)?t.nodes:[]).find(e=>e.id===c.source),p=f?.type===`decision`&&Array.isArray(f.config?.conditions)?f.config.conditions:[],m=e=>typeof e.expression==`string`?e.expression.trim():``,h=e=>typeof e.label==`string`?e.label.trim():``,g=(()=>{if(!p.length)return``;if(d){let e=p.findIndex(e=>{let t=m(e);return t===``||t===`true`});return e>=0?String(e):``}let e=Vu(c.condition),t=e?p.findIndex(t=>m(t)===e):-1;return t<0&&c.label&&(t=p.findIndex(e=>h(e)===c.label)),t>=0?String(t):``})(),_=e=>{if(e===``)return;let t=p[Number(e)];if(!t)return;let n=m(t),r=h(t)||void 0;u(n===``||n===`true`?{isDefault:!0,condition:void 0,label:r}:{isDefault:!1,condition:n,label:r})},v=f?.type===`approval`,y=[`approve`,`reject`,`revise`],b=(()=>{let e=(c.label??``).trim().toLowerCase();return y.includes(e)?e:``})(),x=typeof c.type==`string`&&c.type||`default`;return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.flowEdge.kind`,i),title:e.label??`${c.source} → ${c.target}`,onClose:r,closeLabel:J(`engine.inspector.flowEdge.close`,i),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.flowEdge.remove`,i),onClick:()=>{n({edges:si(o,s,null)}),r()},disabled:a}),children:[(0,Y.jsx)(kh,{label:J(`engine.inspector.flowEdge.source`,i),value:c.source}),(0,Y.jsx)(kh,{label:J(`engine.inspector.flowEdge.target`,i),value:c.target}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowEdge.routing`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),p.length>0&&(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.branch`,i),value:g,options:[...p.map((e,t)=>{let n=m(e),r=h(e)||`Branch ${t+1}`,i=n===``||n===`true`?` · default`:` \u00b7 ${n}`;return{value:String(t),label:`${r}${i}`}}),{value:``,label:`— Custom —`}],onCommit:_,disabled:a}),v&&(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.approvalBranch`,i),value:b,options:[{value:`approve`,label:J(`engine.inspector.flowEdge.branchApprove`,i)},{value:`reject`,label:J(`engine.inspector.flowEdge.branchReject`,i)},{value:`revise`,label:J(`engine.inspector.flowEdge.branchRevise`,i)},{value:``,label:J(`engine.inspector.flowEdge.branchCustom`,i)}],onCommit:e=>{e&&u({label:e})},disabled:a}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowEdge.label`,i),value:c.label??``,onCommit:e=>u({label:e}),placeholder:J(`engine.inspector.flowEdge.labelHint`,i),disabled:a||d}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:J(`engine.inspector.flowEdge.condition`,i)}),(0,Y.jsx)(Qm,{mode:`expression`,mono:!0,value:Vu(c.condition)??``,onValueChange:e=>u({condition:e||void 0}),groups:l,placeholder:J(`engine.inspector.flowEdge.conditionHint`,i),disabled:a||d})]}),(()=>{let e=d?null:Id(`predicate`,c.condition);if(e)return(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:e.message});let t=d?[]:Md(Vu(c.condition),`predicate`,kd(l.flatMap(e=>e.refs)));return t.length>0?(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(t)}):null})(),(0,Y.jsx)(G,{label:J(`engine.inspector.flowEdge.isDefault`,i),value:d,onCommit:e=>u(e?{isDefault:!0,condition:void 0,label:void 0}:{isDefault:!1}),disabled:a}),(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:J(`engine.inspector.flowEdge.hint`,i)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowEdge.connection`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.type`,i),value:x,options:[{value:`default`,label:J(`engine.inspector.flowEdge.typeDefault`,i)},{value:`conditional`,label:J(`engine.inspector.flowEdge.typeConditional`,i)},{value:`fault`,label:J(`engine.inspector.flowEdge.typeFault`,i)},{value:`back`,label:J(`engine.inspector.flowEdge.typeBack`,i)}],onCommit:e=>u({type:e}),disabled:a}),c.type===`back`&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:J(`engine.inspector.flowEdge.backHint`,i)})]})}function jh(e){return e.selection.kind===`edge`?(0,Y.jsx)(Ah,{...e}):(0,Y.jsx)(Oh,{...e})}var Mh=[`object`,`page`,`dashboard`,`report`,`link`,`group`];function Nh(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)\[(\d+)\]$/.exec(e);if(!t)return null;n.push({key:t[1],index:Number(t[2])})}return n.length>0?n:null}function Ph(e,t){let n=e[t[0].key];if(!Array.isArray(n))return{parent:[],node:null,index:-1};let r=n[t[0].index]??null;for(let e=1;e<t.length;e++){if(!r)return{parent:n,node:null,index:t[e].index};if(n=r[t[e].key],!Array.isArray(n))return{parent:[],node:null,index:-1};r=n[t[e].index]??null}return{parent:n,node:r,index:t[t.length-1].index}}function Fh(e,t,n){let r=t[0].key,i=Array.isArray(e[r])?[...e[r]]:[];if(t.length===1)return{[r]:si(i,t[0].index,n)};let a=i,o=[];for(let e=0;e<t.length-1;e++){let n={...a[t[e].index]??{}};o.push({arr:a,index:t[e].index,node:n});let r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let s=si(a,t[t.length-1].index,n);return o[o.length-1].node[t[t.length-1].key]=s,{[r]:i}}function Ih(e,t,n){let r=t[0].key;if(t.length===1)return{[r]:n};let i=Array.isArray(e[r])?[...e[r]]:[],a=i;for(let e=0;e<t.length-2;e++){let n={...a[t[e].index]??{}},r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let o=t[t.length-2],s=t[t.length-1].key,c={...a[o.index]??{}};return c[s]=n,a[o.index]=c,{[r]:i}}function Lh({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=Nh(e.id),{node:c,parent:l,index:u}=s?Ph(t,s):{node:null,parent:[],index:-1};if(!s||!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.appNav.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.appNav.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let d=c.label??c.title??c.name??c.path??e.id,f=c.path??c.href??c.route??``,p=e=>{n(Fh(t,s,{...c,...e}))};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.appNav.kind`,a),title:String(d),onClose:r,closeLabel:J(`engine.inspector.appNav.close`,a),headerActions:(0,Y.jsx)(ai,{index:u,total:l.length,onMove:e=>{n(Ih(t,s,Ii(l,u,e)));let r=s.slice(0,-1).map(e=>`${e.key}[${e.index}]`).join(`.`),a=s[s.length-1].key,o=r?`${r}.${a}[${e}]`:`${a}[${e}]`;i?.({kind:`nav`,id:o,label:String(d)})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.appNav.remove`,a),onClick:()=>{n(Fh(t,s,null)),r()},disabled:o}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.label`,a),value:String(c.label??c.title??c.name??``),onCommit:e=>p({label:e}),disabled:o}),(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.path`,a),value:String(f),onCommit:e=>p({path:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.icon`,a),value:String(c.icon??``),onCommit:e=>p({icon:e}),disabled:o}),(0,Y.jsx)(K,{label:J(`engine.inspector.appNav.kindField`,a),value:c.kind,options:Mh.map(e=>({value:e,label:e})),onCommit:e=>p({kind:e}),disabled:o})]})}var Rh=[`field`,`label`,`accessorKey`,`header`];function zh(e){let t=/^([a-zA-Z_][\w]*)\.columns\[(\d+)\]$/.exec(e);return t?{variant:t[1],index:Number(t[2])}:null}function Bh(e){return typeof e==`string`?{field:e}:e&&typeof e==`object`?e:{}}function Vh(e){return e.field??e.accessorKey??``}function Hh(e){return e.label??e.header??Vh(e)}function Uh(e){return Object.keys(e).some(e=>!Rh.includes(e))}function Wh(e){if(!e)return``;let t=e.data;return t&&typeof t.object==`string`?t.object:typeof e.object==`string`?e.object:``}function Gh({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=zh(e.id),c=s?t[s.variant]:void 0,l=s&&Array.isArray(c?.columns)?c.columns:[],u=l.map(Bh),d=s?u[s.index]??null:null,f=s?typeof l[s.index]==`string`:!1,p=X.useMemo(()=>Sa(),[]),m=Wh(c),{fields:h}=Di(m||void 0),g=d?Vh(d):``,_=X.useMemo(()=>{let e=h.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} · ${e.name}`:e.name}));return g&&!e.some(e=>e.value===g)&&e.unshift({value:g,label:`${g} (not in object)`}),e},[h,g]);if(!s||!d)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.viewColumn.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.viewColumn.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let v=e=>{let t=e.map((e,t)=>{let n=typeof l[t]==`string`,r=Vh(e);return n&&!Uh(e)&&!e.label&&!e.header&&r?r:e});n({[s.variant]:{...c,columns:t}})},y=e=>{let t=`field`in d||!(`accessorKey`in d)?`field`:`accessorKey`,n=`label`in d||!(`header`in d)?`label`:`header`,r={...e};`field`in e&&(r[t]=e.field,t!==`field`&&delete r.field),`label`in e&&(r[n]=e.label,n!==`label`&&delete r.label),v(si(u,s.index,{...d,...r}))};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.viewColumn.kind`,a),title:Hh(d)||e.id,onClose:r,closeLabel:J(`engine.inspector.viewColumn.close`,a),headerActions:(0,Y.jsx)(ai,{index:s.index,total:u.length,onMove:e=>{v(Ii(u,s.index,e)),i?.({kind:`column`,id:`${s.variant}.columns[${e}]`,label:Hh(d)||`columns[${e}]`})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.viewColumn.remove`,a),onClick:()=>{v(si(u,s.index,null)),r()},disabled:o}),children:[c&&(0,Y.jsx)(`div`,{className:`pb-1`,children:(0,Y.jsx)(fa,{variantKey:s.variant,schema:c,columns:l,allStrings:l.length>0&&l.every(e=>typeof e==`string`),objectName:m||void 0,selectedIndex:s.index,readOnly:o,onPatch:n,onSelectionChange:i})}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-3`,children:[_.length>0?(0,Y.jsx)(K,{label:J(`engine.inspector.viewColumn.accessorKey`,a),value:Vh(d),options:_,onCommit:e=>y({field:e}),disabled:o}):(0,Y.jsx)(W,{label:J(`engine.inspector.viewColumn.accessorKey`,a),value:Vh(d),onCommit:e=>y({field:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.viewColumn.header`,a),value:Hh(d)===Vh(d)?``:Hh(d),onCommit:e=>y({label:e}),disabled:o}),!f&&p?(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(Fi,{schema:p,value:d,hiddenFields:Rh,readOnly:o,onChange:e=>{v(si(u,s.index,e))}})}):null]})]})}function Kh(e){let{selection:t}=e;if(t.kind===`column`)return(0,Y.jsx)(Gh,{...e});let n=ja(e.draft,t.id||void 0)??Aa(e.draft);return(0,Y.jsx)(za,{type:e.type,name:e.name,draft:e.draft,onPatch:e.onPatch,onSelectionChange:e.onSelectionChange,onClearSelection:e.onClearSelection,readOnly:e.readOnly,locale:e.locale,variantKey:n?.storeKey??`list`,familyKey:n?.familyKey??n?.storeKey??`list`,isHome:!1})}function qh(e){let t=Aa(e.draft);return(0,Y.jsx)(za,{...e,variantKey:t?.storeKey??`list`,familyKey:t?.familyKey??t?.storeKey??`list`,isHome:!0})}var Jh=e=>(e??``).toLowerCase().startsWith(`zh`);function Yh(e){let t=e.options;return Array.isArray(t)?t.map(e=>({value:String(e?.value??``),label:typeof e?.label==`string`?e.label:void 0,color:typeof e?.color==`string`?e.color:void 0})):[]}function Xh(e){return e===`select`||e===`multiselect`||e===`radio`||e===`checkboxes`}function Zh(e){return e===`lookup`||e===`master_detail`||e===`tree`}function Qh(e){return e===`formula`||e===`summary`}function $h(e){return e===`number`||e===`currency`||e===`percent`}function eg(e){return e===`text`||e===`textarea`||e===`email`||e===`url`||e===`phone`||e===`password`}function tg(e){return e===`boolean`||e===`toggle`?`bool`:e===`number`||e===`currency`||e===`percent`?`number`:e===`select`||e===`radio`?`picklist`:[`formula`,`summary`,`autonumber`,`lookup`,`master_detail`,`tree`,`file`,`image`,`avatar`,`video`,`audio`,`signature`,`qrcode`,`composite`,`repeater`,`vector`,`multiselect`,`checkboxes`,`tags`].includes(e)?null:`text`}function ng(e){let t=(e??``).toLowerCase().startsWith(`zh`),n=t?ji:wi;return Ei.flatMap(e=>e.types.map(r=>{let i=Ti[r];return{value:r,label:`${n[e.category]} · ${t?i.labelZh:i.label}`}}))}function rg({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,readOnly:a,locale:o}){let s=X.useCallback(e=>J(e,o),[o]),c=X.useMemo(()=>ng(o),[o]),l=X.useMemo(()=>ki(t.fields),[t]),u=String(e.id),d=fi(l,u),f=d>=0?l.entries[d]:null,p=Array.isArray(t.fieldGroups)?t.fieldGroups:[],m=pg();if(!f)return(0,Y.jsx)(vi,{kindLabel:s(`designer.field.kind`),title:u||s(`designer.field.kind`),onClose:r,closeLabel:s(`designer.field.close`),children:(0,Y.jsx)(Hi,{message:s(`designer.field.missing`)})});let h=f.def,g=typeof h.type==`string`?h.type:`text`,_=Ti[g],v=e=>{n({fields:li(e)})},y=e=>{let t=[...l.entries];t[d]={...f,def:{...h,...e}},v({shape:l.shape,entries:t})},b=e=>{let t=oi(e);if(!t||t===f.name||l.entries.some((e,n)=>n!==d&&e.name===t))return;let n=[...l.entries];n[d]={...f,name:t},v({shape:l.shape,entries:n}),i?.({kind:`field`,id:t,label:String(h.label??t)})},x=e=>{if(a)return;let t=g===`select`?`status`:g;if(!(f.name===t||f.name.startsWith(`${t}_`)&&/^\d+$/.test(f.name.slice(t.length+1))))return;let n=Xo(e);if(!n||n===f.name||l.entries.some((e,t)=>t!==d&&e.name===n))return;let r=[...l.entries];r[d]={...f,name:n},v({shape:l.shape,entries:r}),i?.({kind:`field`,id:n,label:String(h.label??n)})},S=()=>{let e=l.entries.filter((e,t)=>t!==d);v({shape:l.shape,entries:e}),r()},C=()=>{let e=new Set(l.entries.map(e=>e.name)),t=`${f.name}_copy`,n=t,r=1;for(;e.has(n);)r+=1,n=`${t}_${r}`;let a=typeof h.label==`string`&&h.label?h.label:``,o={name:n,def:{...h,label:a?a+s(`designer.field.copySuffix`):void 0}},c=[...l.entries];c.splice(d+1,0,o),v({shape:l.shape,entries:c}),i?.({kind:`field`,id:n,label:String(o.def.label??n)})},w=e=>{v({shape:l.shape,entries:Ii(l.entries,d,e)})},T=Yh(h),E=e=>{y({options:e.map(e=>{let t={value:e.value};return e.label&&(t.label=e.label),e.color&&(t.color=e.color),t})})},D=(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[!a&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:C,title:s(`designer.field.duplicate`),"aria-label":s(`designer.field.duplicate`),children:(0,Y.jsx)(_r,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(ai,{index:d,total:l.entries.length,onMove:w,disabled:a})]}),O=(0,Y.jsx)(_i,{label:q(`designer.field.remove`,o,{label:typeof h.label==`string`?h.label:f.name}),onClick:S,disabled:a}),k=Jh(o)?_?.labelZh:_?.label;return(0,Y.jsxs)(vi,{kindLabel:s(`designer.field.kind`),title:typeof h.label==`string`&&h.label?h.label:f.name,onClose:r,closeLabel:s(`designer.field.close`),headerActions:D,footer:O,children:[(0,Y.jsxs)(ig,{title:s(`designer.field.section.basic`),children:[(0,Y.jsx)(W,{label:s(`designer.field.apiName`),value:f.name,onCommit:b,disabled:a,mono:!0,testId:`field-apiname-input`}),(0,Y.jsx)(W,{label:s(`designer.field.label`),value:typeof h.label==`string`?h.label:``,onCommit:e=>y({label:e}),onBlur:x,disabled:a,testId:`field-label-input`}),(0,Y.jsx)(K,{label:s(`designer.field.type`),value:g,options:c,onCommit:e=>y({type:e}),disabled:a}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-4 pt-1`,children:[(0,Y.jsx)(G,{label:s(`designer.field.required`),value:!!h.required,onCommit:e=>y({required:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.unique`),value:!!h.unique,onCommit:e=>y({unique:e||void 0}),disabled:a})]}),(0,Y.jsx)(og,{label:s(`designer.field.description`),value:typeof h.description==`string`?h.description:``,onCommit:e=>y({description:e||void 0}),disabled:a,rows:2}),tg(g)&&(0,Y.jsx)(ag,{kind:tg(g),value:h.defaultValue,options:T,onCommit:e=>y({defaultValue:e}),disabled:a,locale:o}),(0,Y.jsx)(og,{label:s(`designer.field.helpText`),value:typeof h.inlineHelpText==`string`?h.inlineHelpText:``,onCommit:e=>y({inlineHelpText:e||void 0}),disabled:a,rows:2,placeholder:s(`designer.field.helpTextPlaceholder`)})]}),(Xh(g)||Zh(g)||Qh(g)||$h(g)||eg(g))&&(0,Y.jsxs)(ig,{title:q(`designer.field.section.options`,o,{type:k??g}),children:[Xh(g)&&(0,Y.jsx)(cg,{options:T,onChange:E,disabled:a,locale:o},f.name),Zh(g)&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(sg,{label:s(`designer.field.relatedObject`),value:typeof h.reference==`string`?h.reference:``,options:m,onCommit:e=>y({reference:e||void 0}),disabled:a,placeholder:s(`designer.field.objectNamePlaceholder`)}),(0,Y.jsx)(W,{label:s(`designer.field.relationshipName`),value:typeof h.relationshipName==`string`?h.relationshipName:``,onCommit:e=>y({relationshipName:e||void 0}),disabled:a,placeholder:s(`designer.field.relationshipNameHint`)}),(0,Y.jsx)(fg,{def:h,patchDef:y,hostFieldNames:l.entries.map(e=>e.name).filter(e=>e!==f.name),readOnly:a,locale:o})]}),Qh(g)&&(0,Y.jsx)(og,{label:s(`designer.field.formula`),value:typeof h.formula==`string`?h.formula:``,onCommit:e=>y({formula:e||void 0}),disabled:a,rows:4,mono:!0,placeholder:`record.amount * 0.2`}),$h(g)&&(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(ei,{label:s(`designer.field.precision`),value:typeof h.precision==`number`?h.precision:void 0,onCommit:e=>y({precision:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.scale`),value:typeof h.scale==`number`?h.scale:void 0,onCommit:e=>y({scale:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.min`),value:typeof h.min==`number`?h.min:void 0,onCommit:e=>y({min:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.max`),value:typeof h.max==`number`?h.max:void 0,onCommit:e=>y({max:e}),disabled:a})]}),eg(g)&&(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(ei,{label:s(`designer.field.minLength`),value:typeof h.minLength==`number`?h.minLength:void 0,onCommit:e=>y({minLength:e}),disabled:a,placeholder:`0`}),(0,Y.jsx)(ei,{label:s(`designer.field.maxLength`),value:typeof h.maxLength==`number`?h.maxLength:void 0,onCommit:e=>y({maxLength:e}),disabled:a,placeholder:`255`})]})]}),(0,Y.jsxs)(ig,{title:s(`designer.field.section.advanced`),children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(G,{label:s(`designer.field.readonly`),value:!!h.readonly,onCommit:e=>y({readonly:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.hidden`),value:!!h.hidden,onCommit:e=>y({hidden:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.indexed`),value:!!h.indexed,onCommit:e=>y({indexed:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.externalId`),value:!!h.externalId,onCommit:e=>y({externalId:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.trackHistory`),value:!!h.trackHistory,onCommit:e=>y({trackHistory:e||void 0}),disabled:a})]}),(0,Y.jsx)(W,{label:s(`designer.field.placeholder`),value:typeof h.placeholder==`string`?h.placeholder:``,onCommit:e=>y({placeholder:e||void 0}),disabled:a}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(W,{label:s(`designer.field.conditionalRequired`),value:typeof h.conditionalRequired==`string`?h.conditionalRequired:``,onCommit:e=>y({conditionalRequired:e||void 0}),disabled:a,mono:!0,placeholder:`record.status == 'closed'`}),(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground/80 px-0.5 leading-snug`,children:s(`designer.field.conditionalRequiredHint`)})]}),p.length>0&&(0,Y.jsx)(K,{label:s(`designer.field.group`),value:typeof h.group==`string`?h.group:``,options:[{value:``,label:s(`designer.field.noGroup`)},...p.filter(e=>typeof e.key==`string`).map(e=>({value:e.key,label:String(e.label??e.key)}))],onCommit:e=>y({group:e||void 0}),disabled:a})]})]})}function ig({title:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-semibold uppercase tracking-wider text-muted-foreground border-b pb-1`,children:e}),(0,Y.jsx)(`div`,{className:`space-y-2`,children:t})]})}function ag({kind:e,value:t,options:n,onCommit:r,disabled:i,locale:a}){let o=J(`designer.field.defaultValue`,a),s=J(`designer.field.defaultNone`,a);return e===`bool`?(0,Y.jsx)(K,{label:o,value:t===!0?`true`:t===!1?`false`:``,options:[{value:``,label:s},{value:`true`,label:J(`designer.field.true`,a)},{value:`false`,label:J(`designer.field.false`,a)}],onCommit:e=>r(e===``?void 0:e===`true`),disabled:i}):e===`number`?(0,Y.jsx)(ei,{label:o,value:typeof t==`number`?t:void 0,onCommit:e=>r(e),disabled:i}):e===`picklist`?(0,Y.jsx)(K,{label:o,value:typeof t==`string`?t:``,options:[{value:``,label:s},...n.filter(e=>e.value).map(e=>({value:e.value,label:e.label||e.value}))],onCommit:e=>r(e||void 0),disabled:i}):(0,Y.jsx)(W,{label:o,value:typeof t==`string`?t:t==null?``:String(t),onCommit:e=>r(e||void 0),disabled:i})}function og({label:e,value:t,onCommit:n,disabled:r,rows:i=2,mono:a,placeholder:o}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:t,disabled:r,rows:i,placeholder:o,onChange:e=>n(e.target.value),className:`w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary `+(a?`font-mono text-xs `:``)})]})}function sg({label:e,value:t,options:n,onCommit:r,disabled:i,placeholder:a}){let o=X.useId();return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(V,{list:o,value:t,onChange:e=>r(e.target.value),disabled:i,className:`h-8 text-sm font-mono`,placeholder:a??`object_name`}),(0,Y.jsx)(`datalist`,{id:o,children:n.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})}function cg({options:e,onChange:t,disabled:n,locale:r}){let[i,a]=X.useState(()=>e.length>0?e:[{value:``,label:``}]),o=e=>{a(e),t(e.filter(e=>e.value.trim()!==``))},s=(e,t)=>{let n=[...i];n[e]={...n[e],...t},o(n)},c=e=>o(i.filter((t,n)=>n!==e)),l=(e,t)=>o(Ii(i,e,t));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)(B,{className:`text-xs text-muted-foreground`,children:J(`designer.field.picklistValues`,r)}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:i.length})]}),i.length===0?(0,Y.jsx)(`div`,{className:`text-[11px] italic text-muted-foreground px-1`,children:J(`designer.field.noValues`,r)}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:i.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(V,{value:e.value,onChange:e=>s(t,{value:e.target.value}),placeholder:J(`designer.field.optValue`,r),disabled:n,className:`h-7 text-xs font-mono flex-1`}),(0,Y.jsx)(V,{value:e.label??``,onChange:e=>s(t,{label:e.target.value}),placeholder:J(`designer.field.optLabel`,r),disabled:n,className:`h-7 text-xs flex-1`}),(0,Y.jsx)(`input`,{type:`color`,value:e.color??`#cccccc`,onChange:e=>s(t,{color:e.target.value}),disabled:n,className:`h-7 w-7 rounded border bg-background cursor-pointer p-0.5`,title:J(`designer.field.optColor`,r)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>l(t,t-1),disabled:n||t===0,"aria-label":J(`designer.field.moveUp`,r),children:(0,Y.jsx)(Kt,{className:`h-3 w-3`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>l(t,t+1),disabled:n||t===i.length-1,"aria-label":J(`designer.field.moveDown`,r),children:(0,Y.jsx)(P,{className:`h-3 w-3`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 text-destructive`,onClick:()=>c(t),disabled:n,"aria-label":J(`designer.field.removeValue`,r),children:(0,Y.jsx)(nt,{className:`h-3 w-3`})})]},t))}),!n&&(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`h-7 gap-1 text-xs`,onClick:()=>o([...i,{value:``,label:``}]),children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),J(`designer.field.addValue`,r)]})]})}var lg=[{value:`eq`,label:`= equals`},{value:`ne`,label:`≠ not equals`},{value:`gt`,label:`> greater than`},{value:`lt`,label:`< less than`},{value:`gte`,label:`≥ at least`},{value:`lte`,label:`≤ at most`},{value:`contains`,label:`contains`},{value:`in`,label:`in (any of)`},{value:`notIn`,label:`not in`}];function ug(e){let t=e.lookupFilters??e.lookup_filters;return Array.isArray(t)?t:[]}function dg(e){let t=e.dependsOn??e.depends_on;return Array.isArray(t)?t.map(e=>typeof e==`string`?e:e&&typeof e==`object`?e.field:void 0).filter(e=>!!e):[]}function fg({def:e,patchDef:t,hostFieldNames:n,readOnly:r,locale:i}){let a=e=>J(e,i),o=typeof e.reference==`string`?e.reference:void 0,{fields:s,loading:c}=Di(o),l=X.useMemo(()=>s.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label,hint:e.type})),[s]),u=X.useMemo(()=>n.map(e=>({value:e,label:e})),[n]),d=ug(e),f=dg(e),p=(e,n)=>t({lookupFilters:d.map((t,r)=>r===e?{...t,...n}:t)}),m=()=>t({lookupFilters:[...d,{field:``,operator:`eq`,value:``}]}),h=e=>{let n=d.filter((t,n)=>n!==e);t({lookupFilters:n.length?n:void 0})},g=e=>Array.isArray(e)?e.join(`, `):e==null?``:String(e),_=(e,t)=>e===`in`||e===`notIn`?t.split(`,`).map(e=>e.trim()).filter(Boolean):t,v=e=>{!e||f.includes(e)||t({dependsOn:[...f,e]})},y=e=>{let n=f.filter(t=>t!==e);t({dependsOn:n.length?n:void 0})},b=typeof e.displayField==`string`?e.displayField:``,x=typeof e.descriptionField==`string`?e.descriptionField:``,S=typeof e.lookupPageSize==`number`?e.lookupPageSize:void 0,C=e.allowCreate===!0,w=a(o?`designer.field.lookup.selectField`:`designer.field.lookup.setTargetFirst`);return(0,Y.jsxs)(`div`,{className:`space-y-2 border-t pt-2.5`,children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground`,children:a(`designer.field.lookup.pickerConfig`)}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.displayField`),value:b,onCommit:e=>t({displayField:e||void 0}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.descriptionField`),value:x,onCommit:e=>t({descriptionField:e||void 0}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsxs)(`div`,{className:`space-y-1.5 pt-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.field.lookup.selectableRecords`)}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:d.length})]}),!r&&(0,Y.jsxs)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-1.5 text-[11px]`,onClick:m,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` `,a(`designer.field.lookup.addFilter`)]})]}),d.length===0?(0,Y.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:q(`designer.field.lookup.noFilter`,i,{ref:o||`related`})}):d.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:q(`designer.field.lookup.filterN`,i,{n:t+1})}),!r&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":a(`designer.field.lookup.removeFilter`),className:`h-6 w-6 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>h(t),children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.filterField`),value:e.field??``,onCommit:e=>p(t,{field:e}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsx)(K,{label:a(`designer.field.lookup.filterOperator`),value:e.operator??`eq`,options:lg,onCommit:e=>p(t,{operator:e}),disabled:r}),(0,Y.jsx)(W,{label:a(`designer.field.lookup.filterValue`),value:g(e.value),onCommit:n=>p(t,{value:_(e.operator,n)}),placeholder:e.operator===`in`||e.operator===`notIn`?`comma,separated,values`:`value`,disabled:r,mono:!0})]},t))]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5 pt-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.field.lookup.dependsOn`)}),f.length>0&&(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:f.map(e=>(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-0.5 text-[11px] font-mono`,children:[e,!r&&(0,Y.jsx)(`button`,{type:`button`,className:`text-muted-foreground hover:text-foreground`,onClick:()=>y(e),"aria-label":`Remove ${e}`,children:`×`})]},e))}),!r&&u.length>0&&(0,Y.jsx)(Ji,{value:``,onCommit:e=>v(e),options:u.filter(e=>!f.includes(e.value)),placeholder:a(`designer.field.lookup.addDependsOn`),searchPlaceholder:a(`designer.field.lookup.searchHostFields`),disabled:r,allowCustom:!1,mono:!0})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 pt-1`,children:[(0,Y.jsx)(ei,{label:a(`designer.field.lookup.pageSize`),value:S,onCommit:e=>t({lookupPageSize:e}),placeholder:`10`,disabled:r}),(0,Y.jsx)(`div`,{className:`flex items-end pb-1.5`,children:(0,Y.jsx)(G,{label:a(`designer.field.lookup.allowCreate`),value:C,onCommit:e=>t({allowCreate:e||void 0}),disabled:r})})]})]})}function pg(){let e=mi(),[t,n]=X.useState([]);return X.useEffect(()=>{let t=!1;return e.list(`object`).then(e=>{t||n(e.filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value)))}).catch(()=>{}),()=>{t=!0}},[e]),t}function mg({name:e,draft:t,onPatch:n,readOnly:r,locale:i}){let a=X.useCallback(e=>J(e,i),[i]),o=!e,s=e=>typeof t[e]==`string`?t[e]:``,c=X.useRef(!1),l=e=>{let t={label:e||void 0};o&&!c.current&&(t.name=Xo(e)),n(t)},u=e=>{c.current=!0,n({name:oi(e)})},d=o?s(`name`):e||s(`name`),f=s(`label`)||e||a(`designer.object.kind`);return(0,Y.jsx)(vi,{kindLabel:a(`designer.object.kind`),title:f,onClose:()=>{},hideClose:!0,children:(0,Y.jsxs)(hg,{title:a(`designer.object.section.basic`),hint:a(`designer.object.section.basicHint`),children:[(0,Y.jsx)(gg,{hint:a(`designer.object.nameHint`),children:(0,Y.jsx)(W,{label:a(`designer.object.name`),value:d,onCommit:u,disabled:r||!o,mono:!0,testId:`object-name-input`,placeholder:a(`designer.object.namePlaceholder`)})}),(0,Y.jsx)(W,{label:a(`designer.object.label`),value:s(`label`),onCommit:l,disabled:r,placeholder:a(`designer.object.labelPlaceholder`)}),(0,Y.jsx)(W,{label:a(`designer.object.pluralLabel`),value:s(`pluralLabel`),onCommit:e=>n({pluralLabel:e||void 0}),disabled:r,placeholder:a(`designer.object.pluralPlaceholder`)}),(0,Y.jsx)(gg,{hint:a(`designer.object.iconHint`),children:(0,Y.jsx)(W,{label:a(`designer.object.icon`),value:s(`icon`),onCommit:e=>n({icon:e||void 0}),disabled:r,mono:!0,placeholder:`building`})}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.object.description`)}),(0,Y.jsx)(`textarea`,{value:s(`description`),disabled:r,rows:2,placeholder:a(`designer.object.descriptionPlaceholder`),onChange:e=>n({description:e.target.value||void 0}),className:`w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary`})]})]})})}function hg({title:e,hint:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`border-b pb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-semibold uppercase tracking-wider text-muted-foreground`,children:e}),t&&(0,Y.jsx)(`div`,{className:`text-[10px] normal-case text-muted-foreground/70 mt-0.5`,children:t})]}),(0,Y.jsx)(`div`,{className:`space-y-2`,children:n})]})}function gg({hint:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[t,e&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground/80 px-0.5 leading-snug`,children:e})]})}var _g={equals:`$eq`,notEquals:`$ne`,greaterThan:`$gt`,greaterOrEqual:`$gte`,lessThan:`$lt`,lessOrEqual:`$lte`,after:`$gt`,before:`$lt`,contains:`$contains`,in:`$in`,notIn:`$nin`},vg={$eq:`equals`,$ne:`notEquals`,$gt:`greaterThan`,$gte:`greaterOrEqual`,$lt:`lessThan`,$lte:`lessOrEqual`,$contains:`contains`,$in:`in`,$nin:`notIn`};function yg(e){let t=(e?.conditions??[]).filter(e=>e&&e.field),n=[];for(let e of t){if(e.operator===`isEmpty`){n.push({[e.field]:{$exists:!1}});continue}if(e.operator===`isNotEmpty`){n.push({[e.field]:{$exists:!0}});continue}let t=_g[e.operator];if(!t)continue;let r=e.value;r==null||r===``||Array.isArray(r)&&r.length===0||n.push({[e.field]:{[t]:r}})}if(n.length!==0)return n.length===1?n[0]:{$and:n}}function bg(e){let t={id:`g`,logic:`and`,conditions:[]};if(e==null)return{group:t,representable:!0};if(typeof e!=`object`||Array.isArray(e)||`$or`in e)return{group:t,representable:!1};let n=Array.isArray(e.$and)?e.$and:[e],r=[];for(let e=0;e<n.length;e++){let i=n[e];if(!i||typeof i!=`object`||Array.isArray(i)||`$and`in i||`$or`in i)return{group:t,representable:!1};let a=Object.keys(i);if(a.length!==1)return{group:t,representable:!1};let o=a[0],s=i[o];if(s&&typeof s==`object`&&!Array.isArray(s)){let n=Object.keys(s);if(n.length!==1)return{group:t,representable:!1};let i=n[0];if(i===`$exists`)r.push({id:`c${e}`,field:o,operator:s.$exists?`isNotEmpty`:`isEmpty`,value:``});else{let n=vg[i];if(!n)return{group:t,representable:!1};r.push({id:`c${e}`,field:o,operator:n,value:s[i]})}}else r.push({id:`c${e}`,field:o,operator:`equals`,value:s})}return{group:{id:`g`,logic:`and`,conditions:r},representable:!0}}var xg=[{value:`count`,label:`count`},{value:`sum`,label:`sum`},{value:`avg`,label:`avg`},{value:`min`,label:`min`},{value:`max`,label:`max`},{value:`count_distinct`,label:`count distinct`}],Sg=[{value:`string`,label:`string`},{value:`number`,label:`number`},{value:`date`,label:`date`},{value:`boolean`,label:`boolean`},{value:`lookup`,label:`lookup`}],Cg=[{value:``,label:`— none —`},{value:`day`,label:`day`},{value:`week`,label:`week`},{value:`month`,label:`month`},{value:`quarter`,label:`quarter`},{value:`year`,label:`year`}],wg=[{value:`ratio`,label:`ratio (a ÷ b)`},{value:`sum`,label:`sum (a + b)`},{value:`difference`,label:`difference (a − b)`},{value:`product`,label:`product (a × b)`}],Tg=[{value:`raw`,label:`Raw number`},{value:`number`,label:`Number — 1,234.5`},{value:`currency`,label:`Currency — $1,234.50`},{value:`percent`,label:`Percent — 12.3%`}],Eg=[{value:`0`,label:`0`},{value:`1`,label:`1`},{value:`2`,label:`2`}],Dg=[{value:`USD`,label:`USD ($)`},{value:`EUR`,label:`EUR (€)`},{value:`GBP`,label:`GBP (£)`},{value:`CNY`,label:`CNY (¥)`},{value:`JPY`,label:`JPY (¥)`},{value:`INR`,label:`INR (₹)`},{value:`CAD`,label:`CAD ($)`},{value:`AUD`,label:`AUD ($)`}];function Og({title:e,count:t,onAdd:n,addLabel:r}){return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:t})]}),n&&(0,Y.jsxs)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-1.5 text-[11px]`,onClick:n,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` `,r]})]})}function kg({children:e}){return(0,Y.jsxs)(`details`,{className:`group`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none list-none text-[11px] text-muted-foreground hover:text-foreground`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(nn,{className:`h-3 w-3 transition-transform group-open:rotate-90`}),`Advanced`]})}),(0,Y.jsx)(`div`,{className:`mt-1.5 space-y-1.5 border-l pl-2.5`,children:e})]})}function Ag(e,t){let n=(e??``).trim(),r=n.match(/\.(0+)/),i=r?Math.min(r[1].length,2):0;return t||/[$£€¥₹]/.test(n)?{kind:`currency`,decimals:i}:n.includes(`%`)?{kind:`percent`,decimals:i}:n?{kind:`number`,decimals:i}:{kind:`raw`,decimals:0}}function jg(e,t,n){let r=t>0?`.`+`0`.repeat(t):``;switch(e){case`number`:return{format:`0,0${r}`,currency:void 0};case`currency`:return{format:`0,0${r}`,currency:n||`USD`};case`percent`:return{format:`0${r}%`,currency:void 0};default:return{format:void 0,currency:void 0}}}function Mg({measure:e,onPatch:t,disabled:n}){let{kind:r,decimals:i}=Ag(e.format,e.currency),a=e.currency||`USD`,o=(e,n,r)=>t(jg(e,n,r)),s=v(r===`percent`?.1234:1234.5,e.format,e.currency);return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-1.5`,children:[(0,Y.jsx)(K,{label:`Display format`,value:r,options:Tg,onCommit:e=>o(e,i,a),disabled:n}),r!==`raw`&&(0,Y.jsx)(K,{label:`Decimals`,value:String(i),options:Eg,onCommit:e=>o(r,parseInt(e,10)||0,a),disabled:n})]}),r===`currency`&&(0,Y.jsx)(K,{label:`Currency`,value:a,options:Dg,onCommit:e=>o(r,i,e),disabled:n}),r!==`raw`&&(0,Y.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Sample: `,(0,Y.jsx)(`span`,{className:`font-mono tabular-nums`,children:s})]})]})}function Ng(e,t){if(!e||!e.includes(`.`))return null;let n=e.slice(0,e.lastIndexOf(`.`));return n&&!t.includes(n)?n:null}function Pg({rel:e,onAdd:t,disabled:n}){return(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-[10px] text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(I,{className:`h-3 w-3 shrink-0`}),(0,Y.jsxs)(`span`,{children:[`Relationship `,(0,Y.jsx)(`code`,{className:`font-mono`,children:e}),` isn't in Included relationships.`]}),!n&&t&&(0,Y.jsx)(`button`,{type:`button`,className:`underline hover:no-underline`,onClick:t,children:`Add it`})]})}function Fg({label:e,help:t,value:n,onCommit:r,fields:i,disabled:a}){let{group:o,representable:s}=bg(n),c=o.conditions.length;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),s?(0,Y.jsxs)(Mn,{children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,disabled:a,className:`h-8 w-full justify-between text-xs font-normal`,children:[(0,Y.jsx)(`span`,{className:`truncate text-left`,children:c?`${c} condition${c===1?``:`s`}`:(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`+ Add filter…`})}),(0,Y.jsx)(Dt,{className:`h-3.5 w-3.5 opacity-60 shrink-0`})]})}),(0,Y.jsx)(Zt,{align:`start`,className:`w-[440px] max-w-[90vw] p-3`,children:i.length===0?(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Pick a base object to add filter conditions.`}):(0,Y.jsx)(Bt,{fields:i,value:o,onChange:e=>r(yg(e))})})]}):(0,Y.jsxs)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-2.5 py-1.5 text-[11px] text-muted-foreground`,children:[`Advanced filter (nested / OR) — edit it in the `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`Source`}),` tab.`]}),t&&(0,Y.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:t})]})}function Ig(e,t){return e===t?{object:e}:{object:e,include:[],dimensions:[],measures:[],filter:void 0}}function Lg({draft:e,onPatch:t,readOnly:n,name:r}){let i=typeof e.label==`string`?e.label:``,a=typeof e.description==`string`?e.description:``,o=typeof e.object==`string`?e.object:``,s=Array.isArray(e.include)?e.include:[],c=Array.isArray(e.dimensions)?e.dimensions:[],l=Array.isArray(e.measures)?e.measures:[],u=typeof e.name==`string`?e.name:void 0,d=!r,f=X.useRef(!1),p=typeof e.name==`string`?e.name:``,{options:m,loading:h}=Ki(),{relationships:g,fieldOptions:_,loading:v}=Xi(o,s),y=Qi(u),b=X.useMemo(()=>m.map(e=>({value:e.name,label:e.label})),[m]),x=X.useMemo(()=>g.map(e=>({value:e.name,label:e.label,hint:e.referenceTo?`→ ${e.referenceTo}`:void 0})),[g]),S=X.useMemo(()=>_.map(e=>({value:e.value,label:e.label,hint:e.type,group:e.group})),[_]),C=X.useMemo(()=>_.filter(e=>!e.value.includes(`.`)).map(e=>({value:e.value,label:e.label,type:e.type})),[_]),w=e.filter&&typeof e.filter==`object`?e.filter:void 0,T=b.find(e=>e.value===o)?.label??o,E=(e,n)=>t({dimensions:c.map((t,r)=>r===e?{...t,...n}:t)}),D=(e,n)=>t({measures:l.map((t,r)=>r===e?{...t,...n}:t)}),O=e=>e.includes(`.`)?e.split(`.`).pop()??e:e,k=(e,t)=>{let n=_.find(e=>e.value===t),r=n?.type?{field:t,type:Gi(n.type)}:{field:t};c[e]?.name||(r.name=O(t)),E(e,r)},A=(e,t)=>{let n={field:t};l[e]?.name||(n.name=O(t)),D(e,n)};return(0,Y.jsxs)(vi,{kindLabel:`Dataset`,title:String(i||e.name||`Dataset`),onClose:()=>{},hideClose:!0,children:[u&&!y.loading&&(0,Y.jsx)(`p`,{className:y.reports+y.dashboards>0?`rounded-md border border-amber-500/30 bg-amber-500/5 px-2.5 py-1.5 text-[11px] text-amber-700 dark:text-amber-300`:`text-[11px] text-muted-foreground`,children:y.reports+y.dashboards>0?`Bound by ${y.reports} report${y.reports===1?``:`s`} · ${y.dashboards} dashboard${y.dashboards===1?``:`s`} — changes affect them.`:`Not yet bound by any report or dashboard.`}),d&&(0,Y.jsx)(W,{label:`Name`,value:p,onCommit:e=>{f.current=!0,t({name:ii(e)})},placeholder:`snake_case identifier`,disabled:n,mono:!0}),(0,Y.jsx)(W,{label:`Label`,value:i,onCommit:e=>{let n={label:e};d&&!f.current&&(n.name=ii(e)),t(n)},disabled:n}),(0,Y.jsx)(W,{label:`Description`,value:a,onCommit:e=>t({description:e}),disabled:n}),(0,Y.jsx)(Ji,{label:`Base object`,value:o,onCommit:e=>t(Ig(e,o)),options:b,loading:h,placeholder:`Select an object…`,searchPlaceholder:`Search objects…`,disabled:n,mono:!0}),o&&(c.length>0||l.length>0||s.length>0||!!w)&&(0,Y.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Changing the base object clears its dimensions, measures, joins & filters.`}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-1.5`,children:[(0,Y.jsx)(Og,{title:`Included relationships`,count:s.length,addLabel:`Add`,onAdd:n?void 0:()=>t({include:ci(s,``)})}),s.length===0?(0,Y.jsxs)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:[`No joins. Add a relationship (a lookup field on `,(0,Y.jsx)(`code`,{children:T||`the base object`}),`) to use `,(0,Y.jsx)(`code`,{children:`relationship.field`}),` dimensions/measures.`]}):s.map((e,r)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(Ji,{value:e,onCommit:e=>t({include:s.map((t,n)=>n===r?e:t)}),options:x,loading:v,placeholder:`Select a relationship…`,searchPlaceholder:`Search relationships…`,disabled:n,mono:!0}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 shrink-0 p-0`,onClick:()=>t({include:si(s,r,null)}),"aria-label":`Remove relationship`,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]},r)),o&&s.length>0&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-1 gap-y-0.5 pt-0.5 text-[10px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:T}),s.map((e,t)=>{let n=g.find(t=>t.name===e);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(nn,{className:`h-3 w-3 opacity-60`}),(0,Y.jsxs)(`span`,{className:`font-mono`,children:[e,n?.referenceTo?` (${n.referenceTo})`:``]})]},t)})]})]}),(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(Fg,{label:`Scope filter`,help:`Intrinsic scope, ANDed into every query (e.g. exclude soft-deleted records).`,value:w,onCommit:e=>t({filter:e}),fields:C,disabled:n})}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Og,{title:`Dimensions`,count:c.length,addLabel:`Add dimension`,onAdd:n?void 0:()=>t({dimensions:ci(c,{name:``,field:``,type:`string`})})}),c.map((e,r)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px] font-medium text-muted-foreground`,children:[`Dimension `,r+1]}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":`Remove dimension`,title:`Remove dimension`,className:`h-6 w-6 shrink-0 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>t({dimensions:si(c,r,null)}),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(W,{label:`Name`,value:e.name??``,onCommit:e=>E(r,{name:e}),placeholder:`e.g. region`,disabled:n,mono:!0}),(0,Y.jsx)(Ji,{label:`Field`,value:e.field??``,onCommit:e=>k(r,e),options:S,loading:v,placeholder:`field or relationship.field`,searchPlaceholder:`Search fields…`,disabled:n,mono:!0}),(()=>{let r=Ng(e.field,s);return r?(0,Y.jsx)(Pg,{rel:r,disabled:n,onAdd:()=>t({include:ci(s,r)})}):null})(),(0,Y.jsx)(K,{label:`Type`,value:e.type,options:Sg,onCommit:e=>E(r,{type:e}),disabled:n}),(0,Y.jsxs)(kg,{children:[(0,Y.jsx)(W,{label:`Label (optional)`,value:e.label??``,onCommit:e=>E(r,{label:e||void 0}),placeholder:e.name||`Display label`,disabled:n}),e.type===`date`&&(0,Y.jsx)(K,{label:`Date bucket`,value:e.dateGranularity??``,options:Cg,onCommit:e=>E(r,{dateGranularity:e||void 0}),disabled:n})]})]},r))]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Og,{title:`Measures`,count:l.length,addLabel:`Add measure`,onAdd:n?void 0:()=>t({measures:ci(l,{name:``,aggregate:`sum`,field:``})})}),l.map((e,r)=>{let i=l.filter((e,t)=>t!==r).map(e=>e.name).filter(e=>!!e),a=e.derived;return(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px] font-medium text-muted-foreground`,children:[`Measure `,r+1]}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":`Remove measure`,title:`Remove measure`,className:`h-6 w-6 shrink-0 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>t({measures:si(l,r,null)}),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(W,{label:`Name`,value:e.name??``,onCommit:e=>D(r,{name:e}),placeholder:`e.g. revenue`,disabled:n,mono:!0}),(0,Y.jsx)(K,{label:`Aggregate`,value:e.aggregate,options:xg,onCommit:e=>D(r,{aggregate:e}),disabled:n}),(0,Y.jsx)(Ji,{label:`Field`,value:e.field??``,onCommit:e=>A(r,e),options:S,loading:v,placeholder:`field (optional for count)`,searchPlaceholder:`Search fields…`,disabled:n,mono:!0}),(()=>{let r=Ng(e.field,s);return r?(0,Y.jsx)(Pg,{rel:r,disabled:n,onAdd:()=>t({include:ci(s,r)})}):null})(),(0,Y.jsxs)(kg,{children:[(0,Y.jsx)(W,{label:`Label (optional)`,value:e.label??``,onCommit:e=>D(r,{label:e||void 0}),placeholder:e.name||`Display label`,disabled:n}),(0,Y.jsx)(Mg,{measure:e,onPatch:e=>D(r,e),disabled:n}),(0,Y.jsx)(Fg,{label:`Filter (measure-scoped)`,help:`Only rows matching this filter feed this measure (e.g. won_amount = sum(amount) where stage = won).`,value:e.filter,onCommit:e=>D(r,{filter:e}),fields:C,disabled:n}),(0,Y.jsx)(G,{label:`Derived — computed from other measures`,value:!!a,onCommit:e=>D(r,{derived:e?{op:`ratio`,of:[]}:void 0}),disabled:n}),a&&(0,Y.jsxs)(`div`,{className:`space-y-1.5 rounded-md border border-dashed p-2`,children:[(0,Y.jsx)(K,{label:`Operation`,value:a.op,options:wg,onCommit:e=>D(r,{derived:{...a,op:e}}),disabled:n}),(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Operands (other measures)`}),(()=>{let e=a.op===`ratio`||a.op===`difference`?2:1;return(Array.isArray(a.of)?a.of.length:0)<e?(0,Y.jsxs)(`p`,{className:`text-[10px] text-amber-600 dark:text-amber-400`,children:[`Select `,e===2?`exactly 2 measures`:`at least 1 measure`,` for `,a.op,`.`]}):null})(),i.length===0?(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:`Add other measures first.`}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:i.map(e=>(0,Y.jsx)(G,{label:e,value:Array.isArray(a.of)&&a.of.includes(e),disabled:n,onCommit:t=>{let n=Array.isArray(a.of)?a.of:[],i=t?[...n,e]:n.filter(t=>t!==e);D(r,{derived:{...a,of:i}})}},e))})]})]})]},r)})]})]})}function Rg(e){let t=mi(),[n,r]=X.useState([]),[i,a]=X.useState(!!e);return X.useEffect(()=>{if(!e){r([]),a(!1);return}let n=!1;return a(!0),t.list(e).then(e=>{n||(r((e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value))),a(!1))}).catch(()=>{n||(r([]),a(!1))}),()=>{n=!0}},[t,e]),{options:n,loading:i}}var zg=[{value:`script`,label:`Script — run an expression / sandboxed JS`},{value:`api`,label:`API — call an endpoint`},{value:`flow`,label:`Flow — invoke a flow`},{value:`modal`,label:`Modal — open a modal/page`},{value:`form`,label:`Form — open a FormView`},{value:`url`,label:`URL — navigate to a link`}],Bg=[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}],Vg=[{value:`action:button`,label:`Button`},{value:`action:icon`,label:`Icon only`},{value:`action:menu`,label:`Menu item`},{value:`action:group`,label:`Button group`}],Hg=[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`delete`,label:`Delete`},{value:`custom`,label:`Custom`}],Ug=[{value:`POST`,label:`POST`},{value:`PATCH`,label:`PATCH`},{value:`PUT`,label:`PUT`},{value:`DELETE`,label:`DELETE`}],Wg=[{value:`expression`,label:`Expression (L1)`},{value:`js`,label:`Sandboxed JS (L2)`}],Gg=[{value:`text`,label:`Text`},{value:`textarea`,label:`Long text`},{value:`number`,label:`Number`},{value:`boolean`,label:`Checkbox`},{value:`select`,label:`Select`},{value:`date`,label:`Date`},{value:`datetime`,label:`Date/time`},{value:`lookup`,label:`Lookup`}],Kg=[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record · more menu`},{value:`record_section`,label:`Record · section`},{value:`record_related`,label:`Record · related list`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List · row`},{value:`global_nav`,label:`Global nav / command palette`}],qg={url:{label:`URL`,placeholder:"https://… or /path?x=${param.x}",hint:"Supports ${param.x} and ${ctx.x} interpolation."},flow:{label:`Flow name`,placeholder:`snake_case flow`,hint:`The flow to invoke when clicked.`},modal:{label:`Modal / page name`,placeholder:`snake_case page`,hint:`The modal or page to open.`},form:{label:`Form view name`,placeholder:`object.viewKey`,hint:`Opens /console/forms/<name>.`},api:{label:`API endpoint`,placeholder:`/api/v1/…`,hint:`Endpoint called with the request body below.`}},Jg={flow:`flow`,modal:`page`,form:`view`};function Yg({type:e,value:t,onCommit:n,cfg:r,readOnly:i}){let a=Jg[e]??null,{options:o}=Rg(a),s=!!a&&o.length>0,c=s&&t&&!o.some(e=>e.value===t)?[{value:t,label:`${t} (not found)`},...o]:o;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[s?(0,Y.jsx)(K,{label:`${r.label} *`,value:t||void 0,options:c,onCommit:n,disabled:i}):(0,Y.jsx)(W,{label:`${r.label} *`,value:t,onCommit:n,placeholder:r.placeholder,disabled:i,mono:!0}),(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:r.hint})]})}var Xg=[`name`,`label`,`objectName`,`icon`,`variant`,`component`,`type`,`target`,`execute`,`body`,`method`,`params`,`locations`,`bulkEnabled`,`confirmText`,`successMessage`,`errorMessage`,`refreshAfter`,`undoable`,`mode`,`shortcut`,`visible`,`disabled`,`aiExposed`,`aiDescription`];function Zg({title:e,hint:t}){return(0,Y.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:e}),t&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:t})]})}function Qg(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`){let t=e;return t.en??t[`en-US`]??Object.values(t)[0]??``}return String(e)}function $g({label:e,value:t,onCommit:n,disabled:r,hint:i}){let{options:a}=qc();return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[a.length===0?(0,Y.jsx)(W,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(K,{label:e,value:t||void 0,options:[{value:``,label:`— None (global) —`},...a],onCommit:n,disabled:r}),i&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:i})]})}function e_({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let{fields:a}=Di(t),o=X.useMemo(()=>a.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[a]);return!t||o.length===0?(0,Y.jsx)(W,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(K,{label:e,value:n||void 0,options:[{value:``,label:`—`},...o],onCommit:r,disabled:i})}function t_({draft:e,onPatch:t,readOnly:n,locale:r,serverSchema:i}){let a=X.useCallback(e=>J(e,r),[r]),o=t=>typeof e[t]==`string`?e[t]:``,s=o(`type`)||`script`,c=o(`objectName`),l=e.body&&typeof e.body==`object`?e.body:{},u=Array.isArray(e.params)?e.params:[],d=Array.isArray(e.locations)?e.locations:[],f=e.aiExposed===!0,p=typeof e.aiDescription==`string`?e.aiDescription:``,m=e=>t({body:{...l,...e}}),h=(e,n)=>t({params:u.map((t,r)=>r===e?{...t,...n}:t)}),g=(e,n)=>{t({locations:n?[...new Set([...d,e])]:d.filter(t=>t!==e)})},_=qg[s],v=i;return(0,Y.jsxs)(vi,{kindLabel:a(`engine.inspector.action.kind`),title:String(Qg(e.label)||e.name||a(`engine.inspector.action.kind`)),onClose:()=>{},closeLabel:a(`engine.inspector.action.close`),hideClose:!0,children:[(0,Y.jsx)(Zg,{title:`Basics`}),(0,Y.jsx)(W,{label:`Label`,value:Qg(e.label),onCommit:e=>t({label:e}),placeholder:`Button text shown to users`,disabled:n}),(0,Y.jsx)(W,{label:`Name`,value:o(`name`),onCommit:e=>t({name:e}),placeholder:`snake_case identifier`,disabled:n,mono:!0}),(0,Y.jsx)($g,{label:`Object`,value:c,onCommit:e=>t({objectName:e||void 0}),disabled:n,hint:c?`Bound action — surfaces in this object’s views per the placement below.`:`Empty = global action — must be referenced by a page’s quick actions, global nav, a flow, or AI to appear.`}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Icon`}),(0,Y.jsx)(Mi,{schema:{type:`string`},value:o(`icon`),onChange:e=>t({icon:e||void 0}),readOnly:n})]}),(0,Y.jsx)(K,{label:`Variant`,value:o(`variant`)||void 0,options:Bg,onCommit:e=>t({variant:e}),disabled:n})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-3`,children:[(0,Y.jsx)(Zg,{title:`Behavior`,hint:`What happens when the action is triggered.`}),(0,Y.jsx)(K,{label:`Type`,value:s,options:zg,onCommit:e=>t({type:e}),disabled:n}),s===`script`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{label:`Script language`,value:(typeof l.language==`string`?l.language:void 0)||`expression`,options:Wg,onCommit:e=>m({language:e}),disabled:n}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Script body`}),(0,Y.jsx)(tr,{value:typeof l.source==`string`?l.source:``,onChange:e=>m({source:e.target.value}),disabled:n,spellCheck:!1,rows:5,placeholder:`// (input, ctx) => result
|
|
21
|
+
}`})}),Kf(f)&&f.properties&&Object.keys(f.properties).length>0&&(0,Y.jsx)(Zf,{title:`Output Schema`,count:Object.keys(f.properties).length,icon:$n,children:(0,Y.jsx)(Xf,{props:f.properties,required:new Set(Array.isArray(f.required)?f.required:[])})})]})})})}function Xf({props:e,required:t}){return(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{children:(0,Y.jsxs)(`tr`,{className:`bg-muted/30 text-left text-[10px] uppercase tracking-wider text-muted-foreground`,children:[(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Name`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Type`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 font-medium`,children:`Description`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:Object.keys(e).map(n=>{let r=e[n],i=t.has(n);return(0,Y.jsxs)(`tr`,{className:`align-top`,children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono`,children:(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[i?(0,Y.jsx)(M,{className:`h-3 w-3 text-emerald-600`}):(0,Y.jsx)(Br,{className:`h-3 w-3 text-muted-foreground`}),n,i&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-emerald-700 ml-1`,children:`req`})]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono text-muted-foreground`,children:qf(r)}),(0,Y.jsxs)(`td`,{className:`px-2.5 py-1.5`,children:[r.description&&(0,Y.jsx)(`div`,{children:r.description}),Array.isArray(r.enum)&&r.enum.length>0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`enum: `,r.enum.map(e=>JSON.stringify(e)).join(` | `)]}),r.default!==void 0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`default: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:JSON.stringify(r.default)})]}),r.format&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`format: `,r.format]})]})]},n)})})]})})}function Zf({title:e,count:t,icon:n,children:r}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[n&&(0,Y.jsx)(n,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),r]})}function Qf({children:e}){return(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:e})}function $f({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var ep=[{key:`allowCreate`,short:`C`,long:`Create`},{key:`allowRead`,short:`R`,long:`Read`},{key:`allowEdit`,short:`U`,long:`Edit`},{key:`allowDelete`,short:`D`,long:`Delete`},{key:`allowTransfer`,short:`T`,long:`Transfer`},{key:`allowRestore`,short:`Re`,long:`Restore`},{key:`allowPurge`,short:`P`,long:`Purge`,danger:!0},{key:`viewAllRecords`,short:`V*`,long:`View All`,danger:!0},{key:`modifyAllRecords`,short:`M*`,long:`Modify All`,danger:!0}];function tp(e){let t=[];for(let[n,r]of Object.entries(e))r.allowEdit&&!r.allowRead&&t.push({object:n,message:`Edit granted without Read (record updates will fail).`}),r.allowDelete&&!r.allowRead&&t.push({object:n,message:`Delete granted without Read.`}),r.modifyAllRecords&&!r.viewAllRecords&&t.push({object:n,message:`Modify All without View All — modifications may target invisible records.`}),r.allowPurge&&!r.allowDelete&&t.push({object:n,message:`Purge (hard delete) granted without Delete.`});return t}function np({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=!!n.isProfile,o=n.objects??{},s=n.fields??{},c=Array.isArray(n.systemPermissions)?n.systemPermissions:[],l=n.tabPermissions??{},u=Array.isArray(n.rowLevelSecurity)?n.rowLevelSecurity:[],d=X.useMemo(()=>Object.keys(o).sort(),[o]),f=X.useMemo(()=>tp(o),[o]),p=X.useMemo(()=>{let e=new Map;for(let[t,n]of Object.entries(s)){let[r,...i]=t.split(`.`);if(!r||i.length===0)continue;let a=i.join(`.`);(n.readable===!1||n.editable===!0)&&(e.has(r)||e.set(r,[]),e.get(r).push({field:a,perm:n}))}return e},[s]);return d.length===0&&c.length===0&&Object.keys(l).length===0?(0,Y.jsx)(Z,{hint:`permission`,children:(0,Y.jsx)(Ic,{children:`Grant at least one object, system, or tab permission to see the matrix.`})}):(0,Y.jsx)(Z,{hint:`permission · ${d.length} object${d.length===1?``:`s`}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[a?(0,Y.jsx)(cn,{className:`h-4 w-4 mt-0.5 text-amber-600 shrink-0`}):(0,Y.jsx)(mt,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] uppercase tracking-wider text-muted-foreground`,children:a?`Profile`:`Permission Set`})]}),(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(op,{icon:Vt,label:`${d.length} objects`}),(0,Y.jsx)(op,{icon:Yn,label:`${c.length} system perms`}),(0,Y.jsx)(op,{icon:Ee,label:`${Object.keys(l).length} tabs`}),(0,Y.jsx)(op,{icon:ut,label:`${u.length} RLS rules`})]})]})]})}),d.length>0&&(0,Y.jsxs)(ap,{title:`Object Permissions`,count:d.length,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-x-auto`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,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:`px-2.5 py-1.5 text-left font-medium sticky left-0 bg-muted/30`,children:`Object`}),ep.map(e=>(0,Y.jsx)(`th`,{className:`px-1.5 py-1.5 text-center font-medium`,title:e.long,children:e.short},e.key))]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:d.map(e=>{let t=o[e]??{};return(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1 font-mono sticky left-0 bg-background`,children:e}),ep.map(e=>(0,Y.jsx)(`td`,{className:`px-1.5 py-1 text-center`,children:(0,Y.jsx)(rp,{granted:!!t[e.key],danger:e.danger})},e.key))]},e)})})]})}),(0,Y.jsx)(ip,{})]}),p.size>0&&(0,Y.jsx)(ap,{title:`Field-Level Overrides`,count:Array.from(p.values()).reduce((e,t)=>e+t.length,0),children:(0,Y.jsx)(`div`,{className:`rounded border bg-background divide-y text-xs`,children:Array.from(p.entries()).sort().map(([e,t])=>(0,Y.jsxs)(`div`,{className:`px-2.5 py-2`,children:[(0,Y.jsx)(`div`,{className:`font-mono text-[11px] mb-1`,children:e}),(0,Y.jsx)(`ul`,{className:`flex flex-wrap gap-1`,children:t.map(({field:e,perm:t})=>(0,Y.jsxs)(`li`,{className:`inline-flex items-center gap-1 rounded border bg-muted/30 px-1.5 py-0.5`,title:`readable=${t.readable!==!1}, editable=${!!t.editable}`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),t.readable===!1&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-red-700`,children:`hidden`}),t.editable&&(0,Y.jsx)(`span`,{className:`text-[9px] uppercase text-emerald-700`,children:`editable`})]},e))})]},e))})}),c.length>0&&(0,Y.jsx)(ap,{title:`System Permissions`,count:c.length,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:c.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})}),Object.keys(l).length>0&&(0,Y.jsx)(ap,{title:`Tab Visibility`,count:Object.keys(l).length,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:Object.entries(l).map(([e,t])=>(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 text-[11px]`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),(0,Y.jsx)(`span`,{className:t===`hidden`?`text-[9px] uppercase text-red-700`:t===`visible`||t===`default_on`?`text-[9px] uppercase text-emerald-700`:`text-[9px] uppercase text-muted-foreground`,children:t})]},e))})}),f.length>0&&(0,Y.jsxs)(`div`,{className:`rounded border border-amber-200 bg-amber-50 p-2.5 text-xs space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-amber-800`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5`}),` `,f.length,` sanity check`,f.length===1?``:`s`,` failed`]}),(0,Y.jsx)(`ul`,{className:`space-y-0.5`,children:f.map((e,t)=>(0,Y.jsxs)(`li`,{className:`text-amber-900`,children:[(0,Y.jsx)(`code`,{className:`font-mono`,children:e.object}),`: `,e.message]},t))})]})]})})})}function rp({granted:e,danger:t}){return e?(0,Y.jsx)(M,{className:`inline-block h-3.5 w-3.5 ${t?`text-amber-600`:`text-emerald-600`}`,"aria-label":`granted`}):(0,Y.jsx)(on,{className:`inline-block h-3 w-3 text-muted-foreground/40`,"aria-label":`not granted`})}function ip(){return(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[10px] text-muted-foreground`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(M,{className:`h-3 w-3 text-emerald-600`}),` granted`]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(M,{className:`h-3 w-3 text-amber-600`}),` bypass (View/Modify All, Purge)`]}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(on,{className:`h-3 w-3 text-muted-foreground/40`}),` not granted`]}),(0,Y.jsx)(`span`,{className:`ml-auto font-mono`,children:`C R U D = CRUD · T Re P = Transfer/Restore/Purge · V* M* = View/Modify All`})]})}function ap({title:e,count:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),n]})}function op({icon:e,label:t}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{children:t})]})}function sp(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`){let t=e;return t.en??t[`en-US`]??Object.values(t)[0]??``}return String(e)}function cp(e){switch(e){case`url`:return Ve;case`modal`:return Ie;case`flow`:return j;case`api`:return Jt;case`form`:return Jn;default:return pn}}function lp(e){switch(e){case`primary`:case`default`:case void 0:return`bg-primary text-primary-foreground hover:opacity-90`;case`danger`:case`destructive`:return`bg-red-600 text-white hover:bg-red-700`;case`secondary`:return`bg-secondary text-secondary-foreground hover:opacity-90`;case`ghost`:return`bg-transparent text-foreground hover:bg-accent`;case`link`:return`bg-transparent text-primary underline-offset-2 hover:underline px-0`;default:return`border bg-background text-foreground hover:bg-accent`}}function up(e,t,n){if(!t&&!n)return`No handler bound yet.`;switch(e){case`url`:return`Navigate to ${t}`;case`flow`:return`Run flow ${t}`;case`modal`:return`Open modal ${t}`;case`api`:return`Call API endpoint ${t}`;case`form`:return`Open form view ${t} (/console/forms/${t??`?`})`;case`script`:return n?`Run inline script body (L1 expression or L2 sandboxed JS).`:`Run named script ${t}`;default:return`Invoke ${t}`}}function dp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=sp(n.label)||r,a=n.icon||void 0,o=String(n.type??`script`),s=n.target??n.execute,c=n.variant||void 0,l=String(n.component??``),u=Array.isArray(n.locations)?n.locations:[],d=n.shortcut||void 0,f=!!n.bulkEnabled,p=!!n.refreshAfter,m=n.aiExposed,h=sp(n.confirmText),g=sp(n.successMessage),_=Array.isArray(n.params)?n.params:[],v=n.resultDialog,y=n.body,b=n.objectName||void 0,x=n.visible,S=n.disabled,C=n.method||`POST`,w=n.bodyExtra,T=cp(o),D=l===`action:icon`;return!r&&!i?(0,Y.jsx)(Z,{hint:`action`,children:(0,Y.jsx)(Ic,{children:`Set name and label to see the action preview.`})}):(0,Y.jsx)(Z,{hint:`action`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-4 flex items-center justify-center min-h-[80px]`,children:(0,Y.jsx)(fp,{label:i,icon:a,variant:c,iconOnly:D,disabled:!!S&&typeof S==`boolean`})}),(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-3 text-xs space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(yp,{icon:T,label:`type: ${o}`}),b&&(0,Y.jsx)(yp,{icon:Sr,label:`object: ${b}`,mono:!0}),c&&(0,Y.jsx)(yp,{label:`variant: ${c}`}),l&&(0,Y.jsx)(yp,{icon:ze,label:l}),d&&(0,Y.jsx)(yp,{icon:E,label:d,mono:!0}),f&&(0,Y.jsx)(yp,{icon:k,label:`bulk`,tone:`green`}),p&&(0,Y.jsx)(yp,{icon:Tt,label:`refresh after`}),m===!1&&(0,Y.jsx)(yp,{icon:mr,label:`AI: opted out`,tone:`amber`}),m===!0&&(0,Y.jsx)(yp,{icon:Tn,label:`AI: exposed`})]}),u.length>0&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Locations:`}),u.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:e},e))]}),!!(typeof x==`string`||x&&typeof x==`object`)&&(0,Y.jsx)(_p,{label:`Visible when`,value:x,icon:Ee}),S!=null&&typeof S!=`boolean`&&(0,Y.jsx)(_p,{label:`Disabled when`,value:S,icon:ut})]}),(0,Y.jsxs)(`div`,{className:`rounded border border-blue-200 bg-blue-50 p-2.5 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 font-medium text-blue-900 mb-0.5`,children:[(0,Y.jsx)(T,{className:`h-3.5 w-3.5`}),` On click`]}),(0,Y.jsx)(`div`,{className:`text-blue-950 font-mono break-all`,children:up(o,s,!!y?.source)}),h&&(0,Y.jsxs)(`div`,{className:`mt-1.5 flex items-start gap-1.5 text-amber-900`,children:[(0,Y.jsx)(I,{className:`h-3 w-3 mt-0.5`}),(0,Y.jsxs)(`span`,{children:[`First asks: `,(0,Y.jsx)(`em`,{children:h})]})]}),g&&(0,Y.jsxs)(`div`,{className:`mt-1.5 text-blue-950`,children:[`On success: `,(0,Y.jsx)(`em`,{children:g})]})]}),u.length>0&&(0,Y.jsx)(vp,{title:`Where it appears`,children:(0,Y.jsx)(xp,{locations:u,label:i,icon:a,variant:c,iconOnly:D})}),o===`api`&&!!s&&(0,Y.jsx)(vp,{title:`Test request`,icon:Jt,children:(0,Y.jsx)(Sp,{target:s,method:C,bodyExtra:w,params:_})}),_.length>0&&(0,Y.jsx)(vp,{title:`Input Dialog`,count:_.length,children:(0,Y.jsx)(mp,{title:i,params:_,variant:c})}),v&&(0,Y.jsx)(vp,{title:`Result Dialog`,icon:Ee,children:(0,Y.jsx)(gp,{dialog:v})}),y?.source&&(0,Y.jsx)(vp,{title:`Script Body (${y.language??`expression`})`,icon:pn,children:(0,Y.jsx)(`pre`,{className:`m-0 rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap max-h-[200px] overflow-auto`,children:y.source})})]})})})}function fp({label:e,icon:t,variant:n,iconOnly:r,disabled:i}){return(0,Y.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded px-3 py-1.5 text-sm font-medium pointer-events-none ${lp(n)} ${i?`opacity-50`:``}`,"aria-disabled":!0,disabled:!0,children:[t&&(0,Y.jsx)(pp,{name:t}),!r&&(0,Y.jsx)(`span`,{children:e})]})}function pp({name:e}){let t=e.split(/[-_\s]+/).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``),n=oe[t===`Home`?`House`:t];return n?(0,Y.jsx)(n,{className:`h-4 w-4`,"aria-hidden":!0}):(0,Y.jsx)(`span`,{className:`inline-flex h-4 min-w-4 items-center justify-center rounded bg-white/30 px-1 text-[9px] uppercase font-mono`,children:e.slice(0,3)})}function mp({title:e,params:t,variant:n}){return(0,Y.jsxs)(`div`,{className:`rounded border bg-background shadow-sm`,children:[(0,Y.jsx)(`div`,{className:`border-b bg-muted/30 px-3 py-2 text-xs font-medium`,children:e}),(0,Y.jsx)(`div`,{className:`p-3 space-y-2`,children:t.map((e,t)=>{let n=e.name??e.field??`param_${t}`;return(0,Y.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,Y.jsxs)(`label`,{className:`text-xs flex items-center gap-1`,children:[sp(e.label)||n,e.required&&(0,Y.jsx)(`span`,{className:`text-red-600 text-[10px]`,children:`*`}),(0,Y.jsx)(`span`,{className:`ml-1 font-mono text-[9px] text-muted-foreground`,children:n}),e.type&&(0,Y.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:e.type})]}),hp(e),e.helpText&&(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:e.helpText})]},t)})}),(0,Y.jsxs)(`div`,{className:`flex items-center justify-end gap-2 border-t bg-muted/20 px-3 py-2`,children:[(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded border bg-background pointer-events-none`,children:`Cancel`}),(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded pointer-events-none ${lp(n||`primary`)}`,children:`OK`})]})]})}function hp(e){let t=`w-full text-xs px-2 py-1 border rounded bg-background pointer-events-none`,n=e.placeholder||(e.defaultFromRow?`(from selected row)`:``),r=e.defaultValue;return Array.isArray(e.options)&&e.options.length>0?(0,Y.jsxs)(`select`,{className:t,disabled:!0,value:``,children:[(0,Y.jsx)(`option`,{value:``,children:n||`— select —`}),e.options.map((e,t)=>(0,Y.jsx)(`option`,{value:e.value,children:sp(e.label)},t))]}):e.type===`boolean`?(0,Y.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 text-xs`,children:[(0,Y.jsx)(`input`,{type:`checkbox`,disabled:!0,className:`pointer-events-none`}),` Toggle`]}):e.type===`textarea`||e.type===`html`||e.type===`long_text`?(0,Y.jsx)(`textarea`,{className:`${t} min-h-[48px]`,placeholder:n,value:r==null?``:String(r),readOnly:!0}):(0,Y.jsx)(`input`,{type:e.type===`number`||e.type===`integer`?`number`:e.type===`date`?`date`:`text`,className:t,placeholder:n,value:r==null?``:String(r),readOnly:!0})}function gp({dialog:e}){let t=sp(e.title)||`Result`,n=sp(e.description),r=sp(e.acknowledge)||`I have saved this`,i=e.fields??[];return(0,Y.jsxs)(`div`,{className:`rounded border bg-background shadow-sm`,children:[(0,Y.jsx)(`div`,{className:`border-b bg-muted/30 px-3 py-2 text-xs font-medium`,children:t}),(0,Y.jsxs)(`div`,{className:`p-3 space-y-2 text-xs`,children:[n&&(0,Y.jsx)(`div`,{className:`text-muted-foreground`,children:n}),i.length===0?(0,Y.jsx)(`div`,{className:`text-muted-foreground italic`,children:`Renders full JSON response.`}):(0,Y.jsx)(`ul`,{className:`space-y-1.5`,children:i.map((t,n)=>(0,Y.jsx)(`li`,{className:`rounded border bg-muted/20 p-2`,children:(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2`,children:[(0,Y.jsx)(`span`,{className:`font-medium`,children:sp(t.label)||t.path}),(0,Y.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:t.path}),(0,Y.jsx)(`span`,{className:`ml-auto font-mono text-[9px] uppercase text-muted-foreground`,children:t.format??e.format??`json`})]})},n))})]}),(0,Y.jsx)(`div`,{className:`flex items-center justify-end border-t bg-muted/20 px-3 py-2`,children:(0,Y.jsx)(`button`,{type:`button`,disabled:!0,className:`text-xs px-2.5 py-1 rounded bg-primary text-primary-foreground pointer-events-none`,children:r})})]})}function _p({label:e,value:t,icon:n}){let r=typeof t==`string`?t:t?.source??JSON.stringify(t);return(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 pt-0.5`,children:[(0,Y.jsx)(n,{className:`h-3 w-3 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e,`:`]}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:r})]})}function vp({title:e,count:t,icon:n,children:r}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[n&&(0,Y.jsx)(n,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e}),t!=null&&(0,Y.jsxs)(`span`,{className:`opacity-70`,children:[`(`,t,`)`]})]}),r]})}function yp({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}function bp({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-mono uppercase tracking-wider text-muted-foreground/70`,children:e}),t]})}function xp({locations:e,label:t,icon:n,variant:r,iconOnly:i}){let a=(0,Y.jsx)(fp,{label:t,icon:n,variant:r,iconOnly:i});return(0,Y.jsxs)(`div`,{className:`space-y-2.5`,children:[e.includes(`record_header`)&&(0,Y.jsx)(bp,{label:`record_header`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(`div`,{className:`h-6 w-6 rounded bg-muted`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium`,children:`Sample record`}),(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:`Record detail`})]})]}),(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5`,children:a})]}),(0,Y.jsx)(`div`,{className:`p-3 text-[10px] text-muted-foreground`,children:`…record body…`})]})}),e.includes(`list_toolbar`)&&(0,Y.jsx)(bp,{label:`list_toolbar`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-3 py-2`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium`,children:`Records`}),(0,Y.jsx)(`div`,{className:`flex items-center gap-1.5`,children:a})]}),(0,Y.jsx)(`div`,{className:`px-3 py-2 text-[10px] text-muted-foreground`,children:`row 1 · row 2 · row 3`})]})}),e.includes(`list_item`)&&(0,Y.jsx)(bp,{label:`list_item`,children:(0,Y.jsx)(`div`,{className:`divide-y rounded border bg-background`,children:[0,1].map(e=>(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-3 py-1.5`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px]`,children:[`Row `,e+1]}),(0,Y.jsx)(`div`,{className:`origin-right scale-90`,children:a})]},e))})}),(e.includes(`record_section`)||e.includes(`record_related`))&&(0,Y.jsx)(bp,{label:e.includes(`record_related`)?`record_related`:`record_section`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-3 py-2`,children:[(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:`Section`}),a]}),(0,Y.jsx)(`div`,{className:`p-3 text-[10px] text-muted-foreground`,children:`…section content…`})]})}),e.includes(`record_more`)&&(0,Y.jsx)(bp,{label:`record_more`,children:(0,Y.jsxs)(`div`,{className:`w-52 rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b px-3 py-1.5 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(ze,{className:`h-3.5 w-3.5`}),` More`]}),(0,Y.jsx)(`div`,{className:`px-2 py-1.5 text-xs`,children:(0,Y.jsx)(`div`,{className:`rounded px-1 py-0.5 hover:bg-accent`,children:t})})]})}),e.includes(`global_nav`)&&(0,Y.jsx)(bp,{label:`global_nav`,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsx)(`div`,{className:`px-3 py-2 text-[11px] text-muted-foreground`,children:`⌘K · Command palette`}),(0,Y.jsx)(`div`,{className:`border-t px-3 py-1.5 text-xs`,children:(0,Y.jsx)(`div`,{className:`rounded px-1 py-0.5 hover:bg-accent`,children:t})})]})})]})}function Sp({target:e,method:t,bodyExtra:n,params:r}){let i=(t||`POST`).toUpperCase(),[a,o]=X.useState(null),[s,c]=X.useState(!1),l=n&&typeof n==`object`?n:{};return(0,Y.jsxs)(`div`,{className:`space-y-2 text-xs`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2 font-mono text-[11px] break-all`,children:[(0,Y.jsx)(`span`,{className:`font-semibold`,children:i}),` `,e]}),Object.keys(l).length>0&&(0,Y.jsx)(`pre`,{className:`m-0 rounded border bg-muted/30 p-2 text-[10px] font-mono whitespace-pre-wrap`,children:JSON.stringify(l,null,2)}),r.length>0&&(0,Y.jsxs)(`div`,{className:`text-[10px] text-muted-foreground`,children:[`+ `,r.length,` user-supplied param`,r.length>1?`s`:``,` collected at runtime`]}),i!==`GET`&&(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 text-[10px] text-amber-700`,children:[(0,Y.jsx)(I,{className:`mt-0.5 h-3 w-3 shrink-0`}),(0,Y.jsxs)(`span`,{children:[`Sends a real `,i,` request to the live backend — may modify data.`]})]}),(0,Y.jsxs)(`button`,{type:`button`,onClick:async()=>{c(!0),o(null);try{let t=typeof localStorage<`u`?localStorage.getItem(`auth-session-token`):null,n={"Content-Type":`application/json`};t&&(n.Authorization=`Bearer ${t}`);let r={method:i,headers:n,credentials:`include`};i!==`GET`&&i!==`HEAD`&&(r.body=JSON.stringify(l));let a=await fetch(e,r),s=await a.text(),c=s;try{c=JSON.parse(s)}catch{}o({status:a.status,ok:a.ok,body:c})}catch(e){o({status:0,ok:!1,error:e instanceof Error?e.message:String(e)})}finally{c(!1)}},disabled:s,className:`inline-flex items-center gap-1.5 rounded border bg-background px-2.5 py-1 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:[(0,Y.jsx)(Jt,{className:`h-3.5 w-3.5`}),` `,s?`Sending…`:`Send test request`]}),a&&(0,Y.jsxs)(`div`,{className:`rounded border p-2 `+(a.ok?`border-green-300 bg-green-50`:`border-red-300 bg-red-50`),children:[(0,Y.jsx)(`div`,{className:`mb-1 text-[11px] font-medium`,children:a.error?`Network error`:`HTTP `+a.status+(a.ok?` OK`:``)}),(0,Y.jsx)(`pre`,{className:`m-0 max-h-[200px] overflow-auto text-[10px] font-mono whitespace-pre-wrap`,children:a.error??(typeof a.body==`string`?a.body:JSON.stringify(a.body,null,2))})]})]})}var Cp={"@yearly":`0 0 1 1 *`,"@annually":`0 0 1 1 *`,"@monthly":`0 0 1 * *`,"@weekly":`0 0 * * 0`,"@daily":`0 0 * * *`,"@midnight":`0 0 * * *`,"@hourly":`0 * * * *`};function wp(e,t,n){let r={values:new Set,any:!1};if(e===`*`){for(let e=t;e<=n;e++)r.values.add(e);return r.any=!0,r}for(let i of e.split(`,`)){let e,a=i;if(i.includes(`/`)){let[t,n]=i.split(`/`);a=t,e=n}let o=e?Math.max(1,parseInt(e,10)||1):1,s=t,c=n;if(a!==`*`)if(a.includes(`-`)){let[e,t]=a.split(`-`).map(e=>parseInt(e,10));if(Number.isNaN(e)||Number.isNaN(t))return null;s=e,c=t}else{let e=parseInt(a,10);if(Number.isNaN(e))return null;s=e,c=e}for(let e=s;e<=c;e+=o)e>=t&&e<=n&&r.values.add(e)}return r}function Tp(e){let t=(Cp[e.trim()]??e.trim()).split(/\s+/);if(t.length!==5&&t.length!==6)return null;let[n,r,i,a,o]=t.length===6?t.slice(1):t,s=wp(n,0,59),c=wp(r,0,23),l=wp(i,1,31),u=wp(a,1,12),d=wp(o===`7`?`0`:o,0,6);return!s||!c||!l||!u||!d?null:{minute:s,hour:c,dom:l,month:u,dow:d}}function Ep(e,t,n){let r=Tp(e);if(!r)return[];let i=[],a=new Date(t.getTime());a.setSeconds(0,0),a.setMinutes(a.getMinutes()+1);let o=t.getTime()+366*24*60*60*1e3;for(;i.length<n&&a.getTime()<=o;)r.minute.values.has(a.getMinutes())&&r.hour.values.has(a.getHours())&&r.month.values.has(a.getMonth()+1)&&(r.dom.any||r.dow.any?r.dom.values.has(a.getDate())&&r.dow.values.has(a.getDay()):r.dom.values.has(a.getDate())||r.dow.values.has(a.getDay()))&&i.push(new Date(a.getTime())),a.setMinutes(a.getMinutes()+1);return i}function Dp(e){let t=/^(\d+)\s*(ms|s|m|h|d)$/.exec(e.trim());if(!t)return null;let n=parseInt(t[1],10);switch(t[2]){case`ms`:return n;case`s`:return n*1e3;case`m`:return n*6e4;case`h`:return n*36e5;case`d`:return n*864e5;default:return null}}function Op(e,t,n){let r=[];for(let i=1;i<=n;i++)r.push(new Date(t.getTime()+i*e));return r}function kp(e){return e.toLocaleString(void 0,{weekday:`short`,month:`short`,day:`2-digit`,hour:`2-digit`,minute:`2-digit`})}function Ap(e){if(e.schedule&&typeof e.schedule==`object`){let t=e.schedule,n=String(t.type??``),r=t.timezone??e.timezone??e.tz;if(n===`cron`){let e=t.expression;return{cron:typeof e==`string`?e:e&&typeof e==`object`&&typeof e.source==`string`?e.source:void 0,timezone:r}}if(n===`interval`){let e=Number(t.intervalMs);return{every:Number.isFinite(e)&&e>0?jp(e):void 0,timezone:r}}if(n===`once`)return{at:typeof t.at==`string`?t.at:void 0,timezone:r}}let t=typeof e.cron==`string`?e.cron:typeof e.schedule==`string`?e.schedule:void 0,n=e.every??e.interval;return{cron:t,every:typeof n==`string`?n:typeof n==`number`?jp(n):void 0,at:typeof e.at==`string`?e.at:typeof e.runAt==`string`?e.runAt:void 0,timezone:e.timezone??e.tz}}function jp(e){return e%864e5==0?`${e/864e5}d`:e%36e5==0?`${e/36e5}h`:e%6e4==0?`${e/6e4}m`:e%1e3==0?`${e/1e3}s`:`${e}ms`}function Mp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,{cron:o,every:s,at:c,timezone:l}=Ap(n),u=n.handler??n.target??n.function??n.functionName,d=n.active!==!1&&n.enabled!==!1,f=n.retryPolicy,p=f?.maxRetries??n.maxRetries??n.retries,m=f?.backoffMs,h=n.timeout??n.timeoutMs,g=n.concurrency,_=s?Dp(s):null,{nextFires:v,deltas:y}=X.useMemo(()=>{let e=new Date,t=[];if(o)t=Ep(o,e,5);else if(_)t=Op(_,e,5);else if(c){let e=Date.parse(c);Number.isNaN(e)||(t=[new Date(e)])}return{nextFires:t,deltas:t.map(t=>Np(t.getTime()-e.getTime()))}},[o,_,c]),b=o&&v.length===0||s&&!_;return!r&&!o&&!s&&!c&&!u?(0,Y.jsx)(Z,{hint:`job`,children:(0,Y.jsx)(Ic,{children:`Set a schedule (cron / every / at) and a handler to see the job preview.`})}):(0,Y.jsx)(Z,{hint:`job`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(he,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(Ip,{icon:or,label:d?`Active`:`Paused`,tone:d?`green`:`gray`}),l&&(0,Y.jsx)(Ip,{icon:It,label:l,mono:!0}),p!=null&&(0,Y.jsx)(Ip,{icon:Ne,label:`retries: ${p}${m?` (${jp(m)} backoff)`:``}`}),h!=null&&(0,Y.jsx)(Ip,{icon:Lt,label:`timeout: ${jp(h)}`}),g!=null&&(0,Y.jsx)(Ip,{label:`concurrency: ${g}`})]})]})]})}),(0,Y.jsx)(Fp,{title:`Schedule`,icon:ct,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[o&&(0,Y.jsx)(Pp,{label:`Cron`,children:(0,Y.jsx)(`code`,{className:`font-mono`,children:o})}),s&&(0,Y.jsxs)(Pp,{label:`Every`,children:[(0,Y.jsx)(`code`,{className:`font-mono`,children:s}),!_&&(0,Y.jsx)(`span`,{className:`ml-2 text-amber-700`,children:`unparseable`})]}),c&&(0,Y.jsx)(Pp,{label:`At`,children:(0,Y.jsx)(`code`,{className:`font-mono`,children:c})}),!o&&!s&&!c&&(0,Y.jsx)(`div`,{className:`text-muted-foreground italic`,children:`No schedule set — runs only when triggered manually.`})]})}),(o||_||c)&&(0,Y.jsx)(Fp,{title:`Next ${Math.max(v.length,1)} run${v.length===1?``:`s`}`,icon:Dn,children:v.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:b?`Could not derive any future fire time. Check the schedule syntax.`:`No upcoming runs in the next 366 days.`}):(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:v.map((e,t)=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`w-4 text-right text-muted-foreground text-[10px]`,children:t+1}),(0,Y.jsx)(Dn,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono`,children:kp(e)}),(0,Y.jsxs)(`span`,{className:`ml-auto text-[10px] text-muted-foreground`,children:[`in `,y[t]]})]},t))})}),(0,Y.jsx)(Fp,{title:`Handler`,icon:pn,children:u?(0,Y.jsxs)(`div`,{className:`rounded border bg-background px-2.5 py-1.5 text-xs flex items-center gap-2`,children:[(0,Y.jsx)(pe,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:u})]}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:`No handler bound — the job will be a no-op.`})})]})})})}function Np(e){if(e<=0)return`now`;let t=Math.round(e/1e3);if(t<60)return`${t}s`;let n=Math.round(t/60);if(n<60)return`${n}m`;let r=Math.round(n/60);return r<48?`${r}h`:`${Math.round(r/24)}d`}function Pp({label:e,children:t}){return(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsxs)(`span`,{className:`text-muted-foreground w-12 shrink-0`,children:[e,`:`]}),(0,Y.jsx)(`span`,{className:`break-all`,children:t})]})}function Fp({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function Ip({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Lp=[{key:`objects`,label:`Objects`,icon:we,flat:!1},{key:`apps`,label:`Apps`,icon:gt,flat:!1},{key:`messages`,label:`Messages`,icon:O,flat:!0},{key:`validationMessages`,label:`Validation Messages`,icon:ae,flat:!0},{key:`globalActions`,label:`Global Actions`,icon:Lr,flat:!0},{key:`dashboards`,label:`Dashboards`,icon:Pt,flat:!1},{key:`settings`,label:`Settings`,icon:_t,flat:!0},{key:`metadataForms`,label:`Metadata Forms`,icon:at,flat:!1}];function Rp({name:e,draft:t}){let n=t,r=n.locale??n.language??`?`,i=n.label??n.name??e??``,a=n.description,o=n.data??n,s=Lp.map(e=>{let t=o?.[e.key];if(!t||typeof t!=`object`)return{...e,count:0,sample:[]};let n=Object.entries(t);return{...e,count:n.length,sample:n.slice(0,5)}}),c=s.reduce((e,t)=>e+t.count,0),l=s.filter(e=>e.count>0).length,u=Math.round(l/Lp.length*100);return c===0?(0,Y.jsx)(Z,{hint:`translation · ${r}`,children:(0,Y.jsx)(Ic,{children:`This bundle is empty — add at least one translated string to see the coverage report.`})}):(0,Y.jsx)(Z,{hint:`translation · ${r} · ${c} keys`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(ot,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[10px] font-mono text-emerald-800`,children:[(0,Y.jsx)(It,{className:`h-3 w-3`}),` `,r]})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-2 flex items-center gap-2 text-[11px]`,children:[(0,Y.jsx)(Nr,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Category coverage:`}),(0,Y.jsx)(`div`,{className:`h-1.5 w-32 rounded-full bg-muted overflow-hidden`,children:(0,Y.jsx)(`div`,{className:`h-full bg-emerald-500`,style:{width:`${u}%`}})}),(0,Y.jsxs)(`span`,{className:`font-mono`,children:[l,`/`,Lp.length,` (`,u,`%)`]}),(0,Y.jsxs)(`span`,{className:`ml-3 text-muted-foreground`,children:[c,` total keys`]})]})]})]})}),(0,Y.jsx)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:s.map(e=>(0,Y.jsx)(zp,{cat:e},e.key))})]})})})}function zp({cat:e}){let t=e.icon;return(0,Y.jsxs)(`div`,{className:`rounded border bg-background ${e.count===0?`opacity-60`:``}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between border-b px-2.5 py-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:e.label})]}),(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:e.count})]}),(0,Y.jsx)(`div`,{className:`px-2.5 py-1.5 min-h-[3.5rem]`,children:e.count===0?(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground italic`,children:`empty`}):(0,Y.jsxs)(`ul`,{className:`space-y-0.5 text-[11px]`,children:[e.sample.map(([t,n])=>(0,Y.jsxs)(`li`,{className:`flex items-baseline gap-2 truncate`,children:[(0,Y.jsx)(`code`,{className:`font-mono text-muted-foreground shrink-0`,children:t}),(0,Y.jsx)(`span`,{className:`truncate text-foreground/80`,children:Bp(n,e.flat)})]},t)),e.count>e.sample.length&&(0,Y.jsxs)(`li`,{className:`text-[10px] text-muted-foreground italic`,children:[`+`,e.count-e.sample.length,` more…`]})]})})]})}function Bp(e,t){return t?typeof e==`string`?`"${e}"`:e==null?`∅`:String(e):e&&typeof e==`object`?`{${Object.keys(e).length} keys}`:String(e??`∅`)}function Vp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.parent;return r?(0,Y.jsx)(Z,{hint:`role`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(Fe,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a})]})]})}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-1.5`,children:`Hierarchy`}),(0,Y.jsx)(`div`,{className:`rounded border bg-background p-2.5 text-xs`,children:o?(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(ln,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Parent:`}),(0,Y.jsx)(`code`,{className:`font-mono`,children:o})]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 pl-4`,children:[(0,Y.jsx)($t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[11px] font-mono text-emerald-800`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground italic`,children:`this role`})]}),(0,Y.jsx)(`div`,{className:`text-[10px] text-muted-foreground pt-1`,children:`Open the parent role to walk further up the chain.`})]}):(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-emerald-50 border border-emerald-200 px-1.5 py-0.5 text-[11px] font-mono text-emerald-800`,children:r}),(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground italic`,children:`root role — no parent`})]})})]}),(0,Y.jsx)(`div`,{className:`rounded border border-blue-200 bg-blue-50 p-2.5 text-[11px] text-blue-900`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5`,children:[(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`font-medium`,children:`Roles don't grant data access on their own.`}),(0,Y.jsxs)(`div`,{className:`opacity-90 mt-0.5`,children:[`Bind `,(0,Y.jsx)(`code`,{className:`font-mono`,children:r}),` to one or more `,(0,Y.jsx)(`strong`,{children:`Permission Sets`}),` `,`or assign it to a `,(0,Y.jsx)(`strong`,{children:`Profile`}),` to control CRUD-VAMA, field access, and tab visibility.`]})]})]})})]})})}):(0,Y.jsx)(Z,{hint:`role`,children:(0,Y.jsx)(Ic,{children:`Give the role a name to see the preview.`})})}function Hp({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.instructions??``,s=Array.isArray(n.tools)?n.tools:[],c=Array.isArray(n.triggerPhrases)?n.triggerPhrases:[],l=Array.isArray(n.triggerConditions)?n.triggerConditions:[],u=Array.isArray(n.permissions)?n.permissions:[],d=n.active!==!1,f=n.model??void 0;return r?(0,Y.jsx)(Z,{hint:`skill`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(Tn,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(Wp,{icon:or,label:d?`Active`:`Disabled`,tone:d?`green`:`gray`}),f&&(0,Y.jsx)(Wp,{label:`model: ${f}`,mono:!0}),u.length>0&&(0,Y.jsx)(Wp,{icon:mt,label:`${u.length} required perm${u.length===1?``:`s`}`})]})]})]})}),(0,Y.jsx)(Up,{title:`Instructions`,icon:Hn,children:o?(0,Y.jsx)(`pre`,{className:`rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap break-words max-h-64 overflow-auto`,children:o}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700`,children:`No instructions yet — the skill will contribute nothing to the prompt.`})}),(0,Y.jsxs)(Up,{title:`Tools (${s.length})`,icon:zn,children:[s.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No tools whitelisted.`}):(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:s.map(e=>{let t=e.includes(`*`);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded px-1.5 py-0.5 text-[11px] font-mono border ${t?`border-amber-300 bg-amber-50 text-amber-900`:`border-border bg-muted/40`}`,children:[t&&(0,Y.jsx)(Sn,{className:`h-3 w-3`}),e]},e)})}),s.some(e=>e.includes(`*`))&&(0,Y.jsx)(`div`,{className:`mt-1 text-[10px] text-amber-700`,children:`Wildcards expand to many tools at runtime — review the matching set in the agent before activating.`})]}),c.length>0&&(0,Y.jsx)(Up,{title:`Trigger Phrases (${c.length})`,icon:ce,children:(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:c.map((e,t)=>(0,Y.jsxs)(`li`,{className:`px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground mr-2`,children:`"`}),e,(0,Y.jsx)(`span`,{className:`text-muted-foreground ml-2`,children:`"`})]},t))})}),l.length>0&&(0,Y.jsx)(Up,{title:`Trigger Conditions (${l.length})`,icon:F,children:(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsx)(`table`,{className:`w-full text-xs`,children:(0,Y.jsx)(`tbody`,{className:`divide-y`,children:l.map((e,t)=>(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 align-top w-24 text-muted-foreground text-[10px] uppercase`,children:e.type??`cond`}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono break-all`,children:e.expression??e.value??JSON.stringify(e)})]},t))})})})}),u.length>0&&(0,Y.jsx)(Up,{title:`Required Permissions`,icon:mt,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:u.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})})]})})}):(0,Y.jsx)(Z,{hint:`skill`,children:(0,Y.jsx)(Ic,{children:`Give the skill a name and at least an instructions block to see the preview.`})})}function Up({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function Wp({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Gp=class extends Error{constructor(){super(`external_service_unavailable`),this.name=`ExternalServiceUnavailableError`}},Kp=d();function qp(){return``.replace(/\/+$/,``)}function Jp(e){return`${qp()}/api/v1/datasources/${encodeURIComponent(e)}/external`}async function Yp(e){if(e.status===503){let t;try{t=await e.json()}catch{t=void 0}if((t&&typeof t==`object`&&`error`in t?String(t.error):``)===`external_service_unavailable`)throw new Gp}if(!e.ok){let t=`${e.status} ${e.statusText}`;try{let n=await e.json();n&&typeof n==`object`&&`error`in n&&(t=String(n.error))}catch{}throw Error(t)}return await e.json()}async function Xp(e,t={}){let n=t.schema?`?schema=${encodeURIComponent(t.schema)}`:``;return(await Yp(await Kp(`${Jp(e)}/tables${n}`,{method:`GET`,headers:{Accept:`application/json`}}))).tables??[]}async function Zp(e,t,n={}){return(await Yp(await Kp(`${Jp(e)}/tables/${encodeURIComponent(t)}/draft`,{method:`POST`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify(n)}))).draft}async function Qp(e){return(await Yp(await Kp(`${Jp(e)}/refresh-catalog`,{method:`POST`,headers:{Accept:`application/json`}}))).catalog}async function $p(e){return Yp(await Kp(`${Jp(e)}/validate`,{method:`POST`,headers:{Accept:`application/json`}}))}async function em(e){await Yp(await Kp(`${qp()}/api/v1/meta/object/${encodeURIComponent(e.name)}`,{method:`PUT`,headers:{Accept:`application/json`,"Content-Type":`application/json`},body:JSON.stringify(e.definition)}))}function tm({datasource:e,table:t,open:n,onOpenChange:r,onImported:i}){let[a,o]=X.useState(`loading`),[s,c]=X.useState(null),[l,u]=X.useState(null);X.useEffect(()=>{if(!n||!t)return;let r=!1;return o(`loading`),c(null),u(null),(async()=>{try{let n=await Zp(e,t.name,{remoteSchema:t.schema});if(r)return;c(n),o(`ready`)}catch(e){if(r)return;u(e instanceof Gp?`Federation is not enabled on this server.`:e instanceof Error?e.message:String(e)),o(`error`)}})(),()=>{r=!0}},[n,t,e]);let d=X.useCallback(async()=>{if(s){o(`importing`),u(null);try{await em(s),o(`done`),i?.(s.name)}catch(e){u(e instanceof Error?e.message:String(e)),o(`ready`)}}},[s,i]),f=t?[t.schema,t.name].filter(Boolean).join(`.`):``;return(0,Y.jsx)(xt,{open:n,onOpenChange:r,children:(0,Y.jsxs)(Mt,{className:`max-w-2xl`,children:[(0,Y.jsxs)(sr,{children:[(0,Y.jsxs)(Re,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(br,{className:`h-4 w-4`}),`Import as Object`]}),(0,Y.jsxs)(Te,{children:[`Map remote table `,(0,Y.jsx)(`span`,{className:`font-mono`,children:f}),` into an ObjectStack object bound to `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),`. The remote schema is never modified.`]})]}),a===`loading`&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 py-8 justify-center text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Generating draft…`]}),a===`error`&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-3 text-sm text-destructive`,children:l}),a===`done`&&s&&(0,Y.jsxs)(`div`,{className:`flex flex-col items-center gap-2 py-8 text-center`,children:[(0,Y.jsx)(M,{className:`h-8 w-8 text-emerald-500`}),(0,Y.jsxs)(`div`,{className:`text-sm`,children:[`Imported object `,(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:s.name}),`.`]}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:`Review its binding and run validation to confirm it matches the remote table.`})]}),(a===`ready`||a===`importing`)&&s&&(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2 text-sm`,children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Object name`}),(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:s.name})]}),l&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2 text-xs text-destructive`,children:l}),s.review.length>0&&(0,Y.jsxs)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-2.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs font-medium text-amber-800 dark:text-amber-300`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5`}),s.review.length,` column`,s.review.length===1?``:`s`,` need review`]}),(0,Y.jsx)(`ul`,{className:`mt-1.5 space-y-1 text-[11px] text-amber-900/90 dark:text-amber-200/80`,children:s.review.map(e=>(0,Y.jsxs)(`li`,{className:`flex flex-wrap gap-x-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e.column}),(0,Y.jsxs)(`span`,{className:`text-amber-700/70 dark:text-amber-400/70`,children:[`(`,e.remoteType,`)`]}),(0,Y.jsxs)(`span`,{children:[`— `,e.note]})]},e.column))})]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[(0,Y.jsx)(ke,{className:`h-3 w-3`}),` Generated source`]}),(0,Y.jsx)(`pre`,{className:`max-h-64 overflow-auto rounded border bg-muted/30 p-2.5 text-[11px] leading-relaxed font-mono`,children:s.source})]})]}),(0,Y.jsx)(He,{children:a===`done`?(0,Y.jsx)(H,{onClick:()=>r(!1),children:`Close`}):(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(H,{variant:`ghost`,onClick:()=>r(!1),disabled:a===`importing`,children:`Cancel`}),(0,Y.jsx)(H,{onClick:d,disabled:a!==`ready`||!s,children:a===`importing`?(0,Y.jsxs)(`span`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}),` Importing…`]}):`Import as Object`})]})})]})})}function nm({datasource:e}){let[t,n]=X.useState(`idle`),[r,i]=X.useState([]),[a,o]=X.useState(null),[s,c]=X.useState(``),[l,u]=X.useState(null),[d,f]=X.useState(!1),p=X.useCallback(async()=>{n(`loading`),o(null);try{i(await Xp(e)),n(`loaded`)}catch(e){e instanceof Gp?n(`unavailable`):(o(e instanceof Error?e.message:String(e)),n(`error`))}},[e]);X.useEffect(()=>{p()},[p]);let m=X.useMemo(()=>{let e=s.trim().toLowerCase();return e?r.filter(t=>[t.schema,t.name].filter(Boolean).join(`.`).toLowerCase().includes(e)):r},[r,s]),h=e=>{u(e),f(!0)};return t===`unavailable`?(0,Y.jsx)(rm,{}):(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`div`,{className:`relative flex-1`,children:[(0,Y.jsx)(tt,{className:`absolute left-2 top-1/2 -translate-y-1/2 h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),placeholder:`Filter tables…`,className:`w-full rounded border bg-background pl-7 pr-2 py-1.5 text-xs outline-none focus:ring-1 focus:ring-ring`})]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void p(),disabled:t===`loading`,children:[t===`loading`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Refresh`})]})]}),a&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2.5 text-xs text-destructive`,children:a}),t===`loading`&&r.length===0&&(0,Y.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-10 text-sm text-muted-foreground`,children:[(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`}),` Introspecting remote schema…`]}),t===`loaded`&&m.length===0&&(0,Y.jsx)(`div`,{className:`py-10 text-center text-sm text-muted-foreground`,children:r.length===0?`No remote tables found (check the datasource’s allowedSchemas).`:`No tables match the filter.`}),m.length>0&&(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40 text-muted-foreground`,children:(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-left font-medium`,children:`Table`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-right font-medium`,children:`Columns`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 text-right font-medium`,children:`Rows (est.)`}),(0,Y.jsx)(`th`,{className:`px-2.5 py-1.5 w-px`})]})}),(0,Y.jsx)(`tbody`,{className:`divide-y`,children:m.map(e=>{let t=[e.schema,e.name].filter(Boolean).join(`.`);return(0,Y.jsxs)(`tr`,{className:`hover:bg-muted/30`,children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 font-mono`,children:[(0,Y.jsx)(jn,{className:`h-3.5 w-3.5 text-muted-foreground`}),e.schema&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.schema,`.`]}),(0,Y.jsx)(`span`,{className:`font-medium`,children:e.name})]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 text-right tabular-nums`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-muted-foreground`,children:[(0,Y.jsx)(Un,{className:`h-3 w-3`}),e.columnCount]})}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 text-right tabular-nums text-muted-foreground`,children:typeof e.rowCountEstimate==`number`?e.rowCountEstimate.toLocaleString():`—`}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5`,children:(0,Y.jsxs)(H,{variant:`ghost`,size:`sm`,onClick:()=>h(e),children:[(0,Y.jsx)(Ut,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Import`})]})})]},t)})})]})}),(0,Y.jsx)(tm,{datasource:e,table:l,open:d,onOpenChange:f})]})}function rm(){return(0,Y.jsxs)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-3 text-xs text-amber-900 dark:text-amber-200`,children:[`Federation is not enabled on this server. The`,(0,Y.jsx)(`span`,{className:`font-mono`,children:` external-datasource `}),`service must be registered for table browsing, drafting, and validation to work.`]})}var im={missing_table:`Missing table`,missing_column:`Missing column`,type_mismatch:`Type mismatch`,nullability_mismatch:`Nullability mismatch`,unmapped_column:`Unmapped column`,pk_mismatch:`Primary-key mismatch`};function am({datasource:e}){let[t,n]=X.useState(`idle`),[r,i]=X.useState([]),[a,o]=X.useState(null),[s,c]=X.useState(null),l=X.useCallback(async()=>{n(`running`),c(null);try{let t=await $p(e);i(t.results),o(t.ok),n(`done`)}catch(e){e instanceof Gp?n(`unavailable`):(c(e instanceof Error?e.message:String(e)),n(`error`))}},[e]);return t===`unavailable`?(0,Y.jsx)(`div`,{className:`rounded border border-amber-300 bg-amber-50 dark:bg-amber-950/20 p-3 text-xs text-amber-900 dark:text-amber-200`,children:`Federation is not enabled on this server, so validation is unavailable.`}):(0,Y.jsxs)(`div`,{className:`space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Y.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Check that every federated object on`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),` still matches its live remote table.`]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:t===`running`,children:[t===`running`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(pe,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Run validation`})]})]}),s&&(0,Y.jsx)(`div`,{className:`rounded border border-destructive/40 bg-destructive/5 p-2.5 text-xs text-destructive`,children:s}),t===`done`&&a!==null&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 rounded border p-2.5 text-sm ${a?`border-emerald-300 bg-emerald-50 dark:bg-emerald-950/20 text-emerald-800 dark:text-emerald-300`:`border-destructive/40 bg-destructive/5 text-destructive`}`,children:[a?(0,Y.jsx)(M,{className:`h-4 w-4`}):(0,Y.jsx)(ae,{className:`h-4 w-4`}),a?`All ${r.length} object${r.length===1?``:`s`} match the remote schema.`:`${r.filter(e=>!e.ok).length} of ${r.length} object${r.length===1?``:`s`} diverge from the remote schema.`]}),t===`done`&&r.length===0&&(0,Y.jsx)(`div`,{className:`py-8 text-center text-sm text-muted-foreground`,children:`No federated objects are bound to this datasource yet. Import a table from the Tables tab to get started.`}),r.length>0&&(0,Y.jsx)(`ul`,{className:`space-y-2`,children:r.map(e=>(0,Y.jsx)(om,{result:e},e.object))})]})}function om({result:e}){return(0,Y.jsxs)(`li`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[e.ok?(0,Y.jsx)(mt,{className:`h-3.5 w-3.5 text-emerald-500`}):(0,Y.jsx)(ae,{className:`h-3.5 w-3.5 text-destructive`}),(0,Y.jsx)(`span`,{className:`font-mono text-xs font-medium`,children:e.object}),!e.ok&&(0,Y.jsxs)(`span`,{className:`ml-auto text-[11px] text-muted-foreground`,children:[e.diffs.length,` diff`,e.diffs.length===1?``:`s`]})]}),e.diffs.length>0&&(0,Y.jsx)(`ul`,{className:`border-t divide-y`,children:e.diffs.map((e,t)=>(0,Y.jsx)(sm,{diff:e},`${e.kind}:${e.column??``}:${t}`))})]})}function sm({diff:e}){let t=[e.remoteSchema,e.remoteName].filter(Boolean).join(`.`);return(0,Y.jsxs)(`li`,{className:`flex flex-wrap items-baseline gap-x-2 gap-y-0.5 px-2.5 py-1.5 text-[11px]`,children:[(0,Y.jsx)(`span`,{className:`rounded px-1 py-0.5 font-medium uppercase tracking-wide text-[9px] ${e.severity===`error`?`bg-destructive/10 text-destructive`:`bg-amber-100 text-amber-800 dark:bg-amber-950/40 dark:text-amber-300`}`,children:im[e.kind]??e.kind}),t&&(0,Y.jsx)(`span`,{className:`font-mono text-muted-foreground`,children:t}),e.column&&(0,Y.jsxs)(`span`,{className:`font-mono`,children:[`.`,e.column]}),(e.expected!==void 0||e.actual!==void 0)&&(0,Y.jsxs)(`span`,{className:`text-muted-foreground`,children:[`expected `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e.expected??`—`}),`, actual`,` `,(0,Y.jsx)(`span`,{className:`font-mono`,children:e.actual??`—`})]})]})}function cm({datasource:e,schemaMode:t,allowWrites:n}){let[r,i]=X.useState(null),[a,o]=X.useState(!1),[s,c]=X.useState(null),l=X.useCallback(async()=>{if(e){o(!0),c(null);try{i(await Qp(e))}catch(e){c(e instanceof Gp?`Federation is not enabled on this server.`:e instanceof Error?e.message:String(e))}finally{o(!1)}}},[e]);return e?(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-3 gap-y-1.5 border-b bg-muted/30 px-3 py-2`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs font-medium`,children:[(0,Y.jsx)(Zn,{className:`h-4 w-4 text-sky-500`}),`External Datasource`]}),(0,Y.jsx)(`span`,{className:`rounded border bg-background px-1.5 py-0.5 font-mono text-[10px] uppercase tracking-wider text-muted-foreground`,children:t??`external`}),(0,Y.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-[10px] uppercase tracking-wider ${n?`bg-amber-100 text-amber-800 dark:bg-amber-950/40 dark:text-amber-300`:`bg-muted text-muted-foreground`}`,children:n?`writes allowed`:`read-only`}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[r?.snapshotAt&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 text-[11px] text-muted-foreground`,children:[(0,Y.jsx)(Dn,{className:`h-3 w-3`}),`snapshot `,lm(r.snapshotAt)]}),(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,onClick:()=>void l(),disabled:a,children:[a?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Tt,{className:`h-3.5 w-3.5`}),(0,Y.jsx)(`span`,{className:`ml-1.5`,children:`Refresh catalog`})]})]})]}),s&&(0,Y.jsx)(`div`,{className:`border-b border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive`,children:s}),(0,Y.jsxs)(vr,{defaultValue:`tables`,className:`p-3`,children:[(0,Y.jsxs)(Wn,{children:[(0,Y.jsx)(wr,{value:`tables`,children:`Tables`}),(0,Y.jsx)(wr,{value:`validation`,children:`Validation`})]}),(0,Y.jsx)(dn,{value:`tables`,className:`mt-3`,children:(0,Y.jsx)(nm,{datasource:e})}),(0,Y.jsx)(dn,{value:`validation`,className:`mt-3`,children:(0,Y.jsx)(am,{datasource:e})})]})]}):(0,Y.jsx)(`div`,{className:`rounded border bg-muted/20 p-3 text-xs text-muted-foreground`,children:`Save the datasource first to browse its remote tables and validate federated objects.`})}function lm(e){let t=new Date(e).getTime();if(Number.isNaN(t))return e;try{return new Date(t).toLocaleString()}catch{return e}}var um=/pass|secret|key|token|credential|auth/i;function dm(e){return um.test(e)}function fm(e){return e==null||e===``?`∅`:`••••••`}function pm(e){return e==null?`∅`:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):Array.isArray(e)?`[${e.length}]`:typeof e==`object`?`{${Object.keys(e).length} keys}`:String(e)}function mm({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.driver??n.type??`unknown`,s=n.active!==!1,c=!!n.isDefault||!!n.default,l=n.config??{},u=n.pool,d=n.ssl,f=n.retryPolicy,p=n.healthCheck,m=Array.isArray(n.readReplicas)?n.readReplicas:[],h=Array.isArray(n.capabilities)?n.capabilities:[],g=n.schemaMode??`managed`,_=g!==`managed`,v=!!(n.external??void 0)?.allowWrites,y=Object.entries(l);return!r&&y.length===0?(0,Y.jsx)(Z,{hint:`datasource`,children:(0,Y.jsx)(Ic,{children:`Set a name and at least a driver to see the datasource preview.`})}):(0,Y.jsx)(Z,{hint:`datasource · ${o}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(br,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-background px-1.5 py-0.5 font-mono`,children:[(0,Y.jsx)(rr,{className:`h-3 w-3 text-muted-foreground`}),` `,o]}),(0,Y.jsx)(_m,{icon:or,label:s?`Active`:`Disabled`,tone:s?`green`:`gray`}),c&&(0,Y.jsx)(_m,{icon:cn,label:`default`,tone:`amber`}),m.length>0&&(0,Y.jsx)(_m,{icon:_r,label:`${m.length} read replica${m.length===1?``:`s`}`})]})]})]})}),_&&(0,Y.jsx)(cm,{datasource:String(e??``),schemaMode:g,allowWrites:v}),(0,Y.jsx)(gm,{title:`Connection`,icon:ut,children:y.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground italic`,children:`No config keys set.`}):(0,Y.jsx)(`div`,{className:`rounded border bg-background overflow-hidden`,children:(0,Y.jsx)(`table`,{className:`w-full text-xs`,children:(0,Y.jsx)(`tbody`,{className:`divide-y`,children:y.map(([e,t])=>{let n=dm(e);return(0,Y.jsxs)(`tr`,{children:[(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 align-top w-40 font-mono text-muted-foreground`,children:e}),(0,Y.jsx)(`td`,{className:`px-2.5 py-1.5 font-mono break-all`,children:n?(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{children:fm(t)}),(0,Y.jsx)(`span`,{className:`rounded bg-amber-50 border border-amber-200 px-1 py-0.5 text-[9px] uppercase tracking-wider text-amber-800`,children:`redacted`})]}):pm(t)})]},e)})})})})}),(0,Y.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-2`,children:[(0,Y.jsx)(hm,{title:`Pool`,icon:le,value:u}),(0,Y.jsx)(hm,{title:`SSL`,icon:mt,value:typeof d==`boolean`?{enabled:d}:d}),(0,Y.jsx)(hm,{title:`Retry Policy`,icon:Ne,value:f}),(0,Y.jsx)(hm,{title:`Health Check`,icon:le,value:p})]}),h.length>0&&(0,Y.jsx)(gm,{title:`Capabilities`,icon:mt,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:h.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})})]})})})}function hm({title:e,icon:t,value:n}){let r=n&&typeof n==`object`&&Object.keys(n).length>0;return(0,Y.jsxs)(`div`,{className:`rounded border bg-background ${r?``:`opacity-60`}`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 border-b px-2.5 py-1.5`,children:[(0,Y.jsx)(t,{className:`h-3.5 w-3.5 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium`,children:e})]}),(0,Y.jsx)(`div`,{className:`px-2.5 py-1.5 text-[11px]`,children:r?(0,Y.jsx)(`dl`,{className:`space-y-0.5`,children:Object.entries(n).slice(0,6).map(([e,t])=>(0,Y.jsxs)(`div`,{className:`flex items-baseline gap-2 truncate`,children:[(0,Y.jsxs)(`dt`,{className:`text-muted-foreground font-mono shrink-0`,children:[e,`:`]}),(0,Y.jsx)(`dd`,{className:`font-mono truncate`,children:dm(e)?fm(t):pm(t)})]},e))}):(0,Y.jsx)(`span`,{className:`text-muted-foreground italic`,children:`not configured`})})]})}function gm({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function _m({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700`:n===`amber`?`text-amber-700`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}function vm(e){if(e){if(typeof e==`string`)return e;if(typeof e==`object`&&typeof e.source==`string`)return e.source}}function ym(e){switch(e){case`error`:return{ring:`border-red-200 bg-red-50 dark:border-red-900 dark:bg-red-950/40`,text:`text-red-700 dark:text-red-300`,icon:Gt};case`warning`:return{ring:`border-amber-200 bg-amber-50 dark:border-amber-900 dark:bg-amber-950/40`,text:`text-amber-800 dark:text-amber-300`,icon:I};default:return{ring:`border-blue-200 bg-blue-50 dark:border-blue-900 dark:bg-blue-950/40`,text:`text-blue-800 dark:text-blue-300`,icon:Nn}}}function bm({name:e,draft:t}){let n=t,r=String(n.name??e??``),i=String(n.label??r),a=n.description??``,o=n.type??`script`,s=n.object,c=n.message??``,l=n.severity??`error`,u=n.active!==!1,d=Array.isArray(n.events)?n.events:[],f=n.priority,p=Array.isArray(n.tags)?n.tags:[],m=ym(l);return r?(0,Y.jsx)(Z,{hint:`validation · ${o}`,children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsx)(`div`,{className:`rounded border bg-muted/30 p-3`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Y.jsx)(ae,{className:`h-4 w-4 mt-0.5 text-muted-foreground shrink-0`}),(0,Y.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-baseline gap-x-2`,children:[(0,Y.jsx)(`span`,{className:`text-sm font-medium truncate`,children:i}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:r}),(0,Y.jsx)(`span`,{className:`rounded border bg-background px-1.5 py-0.5 text-[10px] font-mono`,children:o})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:a}),(0,Y.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap items-center gap-x-3 gap-y-1 text-[11px]`,children:[(0,Y.jsx)(wm,{icon:or,label:u?`Active`:`Disabled`,tone:u?`green`:`gray`}),s&&(0,Y.jsx)(wm,{label:`object: ${s}`,mono:!0}),f!=null&&(0,Y.jsx)(wm,{label:`priority ${f}`}),d.length>0&&(0,Y.jsx)(wm,{label:`on ${d.join(`, `)}`})]})]})]})}),(0,Y.jsx)(`div`,{className:`rounded border p-2.5 text-xs ${m.ring}`,children:(0,Y.jsxs)(`div`,{className:`flex items-start gap-1.5 ${m.text}`,children:[(0,Y.jsx)(m.icon,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`font-medium uppercase tracking-wider text-[10px]`,children:l}),(0,Y.jsx)(`div`,{className:`font-normal mt-0.5 text-foreground`,children:c||(0,Y.jsx)(`span`,{className:`italic text-muted-foreground`,children:`no message set`})})]})]})}),(0,Y.jsx)(xm,{type:o,d:n}),p.length>0&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground uppercase tracking-wider mb-1`,children:`Tags`}),(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:p.map(e=>(0,Y.jsx)(`span`,{className:`inline-flex items-center rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})]})]})})}):(0,Y.jsx)(Z,{hint:`validation`,children:(0,Y.jsx)(Ic,{children:`Give the validation a name to see the preview.`})})}function xm({type:e,d:t}){switch(e){case`script`:case`conditional`:return(0,Y.jsx)(Cm,{title:`Condition`,icon:pn,children:(0,Y.jsx)(Sm,{value:vm(t.condition)??vm(t.expression)})});case`unique`:{let e=Array.isArray(t.fields)?t.fields:[],n=vm(t.scope)??vm(t.where);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Cm,{title:`Unique on ${e.length} field${e.length===1?``:`s`}`,icon:A,children:(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:e.length===0?(0,Y.jsx)(`span`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`no fields set`}):e.map(e=>(0,Y.jsx)(`span`,{className:`rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e))})}),n&&(0,Y.jsx)(Cm,{title:`Scope`,icon:Fr,children:(0,Y.jsx)(Sm,{value:n})})]})}case`state_machine`:{let e=t.transitions&&typeof t.transitions==`object`&&!Array.isArray(t.transitions)?t.transitions:{},n=Object.entries(e),r=t.field;return(0,Y.jsx)(Cm,{title:`Transitions${r?` on ${r}`:``}`,icon:j,children:n.length===0?(0,Y.jsx)(`div`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`No transitions declared.`}):(0,Y.jsx)(`ul`,{className:`rounded border bg-background divide-y text-xs`,children:n.map(([e,t])=>(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 px-2.5 py-1.5`,children:[(0,Y.jsx)(`span`,{className:`font-mono`,children:e}),(0,Y.jsx)(nn,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`font-mono text-emerald-700 dark:text-emerald-400`,children:Array.isArray(t)&&t.length>0?t.join(` | `):`∅ (dead-end)`})]},e))})})}case`format`:{let e=t.pattern??t.regex,n=t.format;return(0,Y.jsx)(Cm,{title:`Format`,icon:te,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[n&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Built-in:`}),` `,(0,Y.jsx)(`code`,{className:`font-mono`,children:n})]}),e&&(0,Y.jsxs)(`div`,{children:[(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`Pattern:`}),` `,(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e})]}),!n&&!e&&(0,Y.jsx)(`span`,{className:`text-amber-700 dark:text-amber-400`,children:`No format or regex set.`})]})})}case`cross_field`:{let e=Array.isArray(t.fields)?t.fields:[],n=vm(t.condition);return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Cm,{title:`Fields involved`,icon:Fr,children:(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-1`,children:[e.map(e=>(0,Y.jsx)(`span`,{className:`rounded border bg-muted/40 px-1.5 py-0.5 text-[11px] font-mono`,children:e},e)),e.length===0&&(0,Y.jsx)(`span`,{className:`text-xs text-muted-foreground italic`,children:`none`})]})}),(0,Y.jsx)(Cm,{title:`Cross-field condition`,icon:pn,children:(0,Y.jsx)(Sm,{value:n})})]})}case`async`:{let e=t.endpoint??t.url,n=t.timeoutMs;return(0,Y.jsx)(Cm,{title:`Async endpoint`,icon:It,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(`span`,{className:`rounded bg-muted px-1.5 py-0.5 text-[10px] font-mono`,children:t.method??`POST`}),(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e??`—`})]}),n!=null&&(0,Y.jsxs)(`div`,{className:`text-muted-foreground`,children:[`timeout: `,n,`ms`]})]})})}case`custom`:{let e=t.handler??t.function;return(0,Y.jsx)(Cm,{title:`Custom handler`,icon:pn,children:(0,Y.jsx)(`div`,{className:`rounded border bg-background px-2.5 py-1.5 text-xs`,children:e?(0,Y.jsx)(`code`,{className:`font-mono break-all`,children:e}):(0,Y.jsx)(`span`,{className:`text-amber-700 dark:text-amber-400`,children:`No handler set.`})})})}default:return(0,Y.jsx)(Cm,{title:`Rule`,icon:ae,children:(0,Y.jsxs)(`div`,{className:`rounded border bg-background p-2.5 text-xs text-muted-foreground italic`,children:[`Unknown rule type "`,e,`". Showing common fields only.`]})})}}function Sm({value:e}){return e?(0,Y.jsx)(`pre`,{className:`rounded border bg-background p-2.5 text-xs font-mono whitespace-pre-wrap break-words`,children:e}):(0,Y.jsx)(`div`,{className:`text-xs text-amber-700 dark:text-amber-400`,children:`No expression set.`})}function Cm({title:e,icon:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5 text-[11px] font-medium text-muted-foreground uppercase tracking-wider`,children:[t&&(0,Y.jsx)(t,{className:`h-3 w-3`}),(0,Y.jsx)(`span`,{children:e})]}),n]})}function wm({icon:e,label:t,tone:n=`gray`,mono:r=!1}){return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[e&&(0,Y.jsx)(e,{className:`h-3 w-3 text-muted-foreground`}),(0,Y.jsx)(`span`,{className:`${n===`green`?`text-emerald-700 dark:text-emerald-400`:`text-foreground`} ${r?`font-mono`:``}`,children:t})]})}var Tm=X.lazy(()=>o(()=>import(`./plugin-charts-DUJQWrQu.js`).then(e=>e.t).then(e=>({default:e.ChartRenderer})),__vite__mapDeps([0]),import.meta.url));function Em({draft:e}){let t=f(),{fieldLabel:n}=be(),r=e.object,i=X.useMemo(()=>(Array.isArray(e.measures)?e.measures:[]).map(e=>String(e?.name??``)).filter(Boolean),[e]),a=X.useMemo(()=>(Array.isArray(e.dimensions)?e.dimensions:[]).map(e=>String(e?.name??``)).filter(Boolean),[e]),o=!!r&&i.length>0,[s,c]=X.useState({status:`idle`,rows:[]}),l=X.useCallback(async()=>{if(o){c({status:`loading`,rows:[]});try{let n=await t.queryDataset(e,{dimensions:a,measures:i});c({status:`ok`,rows:Array.isArray(n?.rows)?n.rows:[],fields:Array.isArray(n?.fields)?n.fields:[],object:n?.object})}catch(e){c({status:`error`,rows:[],error:String(e?.message??e)})}}},[t,e,a,i,o]),u=`${r??``}|${a.join(`,`)}|${i.join(`,`)}`;if(X.useEffect(()=>{o&&l()},[u]),!r)return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`Pick a base object`,description:"Set the dataset's `object` to preview it against live data."})});if(i.length===0)return(0,Y.jsx)(Z,{children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`Add a measure`,description:`A dataset needs at least one measure (e.g. revenue = sum(amount)) to preview.`})});let{measureField:d,headerLabel:p}=g(s.status===`ok`?s.fields:void 0,s.status===`ok`?s.object:void 0,n),m=[...a,...i],h=e=>{let t=d(e)?.format;return typeof t==`string`&&t.includes(`%`)},_=i.filter(h),b=_.length>0&&_.length<i.length;return(0,Y.jsx)(Z,{hint:`dataset · ${r}${a.length?` · by `+a.join(`, `):``}`,children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>void l(),disabled:s.status===`loading`,className:`inline-flex items-center gap-1.5 rounded-md border bg-background px-3 py-1.5 text-xs font-medium hover:bg-accent disabled:opacity-50`,children:[s.status===`loading`?(0,Y.jsx)(U,{className:`h-3.5 w-3.5 animate-spin`}):(0,Y.jsx)(Rt,{className:`h-3.5 w-3.5`}),`Run preview`]}),(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[i.length,` measure`,i.length===1?``:`s`,` · `,a.length,` dimension`,a.length===1?``:`s`]})]}),s.status===`error`&&(0,Y.jsxs)(`div`,{role:`alert`,className:`flex items-start gap-2 rounded-md border border-destructive/40 bg-destructive/5 px-3 py-2 text-xs text-destructive`,children:[(0,Y.jsx)(I,{className:`h-3.5 w-3.5 mt-0.5 shrink-0`}),(0,Y.jsx)(`span`,{className:`break-words`,children:s.error})]}),s.status===`ok`&&s.rows.length===0&&(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Rt,{className:`h-8 w-8`}),title:`No rows`,description:`The dataset returned no rows for the current scope.`}),s.rows.length>0&&a.length>=1&&(0,Y.jsx)(Q,{fallbackHint:`Couldn't render the chart for this result — the table below still shows the data.`,children:(0,Y.jsx)(X.Suspense,{fallback:(0,Y.jsx)(`div`,{className:`h-[260px] flex items-center justify-center text-xs text-muted-foreground`,children:(0,Y.jsx)(U,{className:`h-4 w-4 animate-spin`})}),children:(0,Y.jsxs)(`div`,{className:`rounded-md border p-2`,children:[(0,Y.jsx)(Tm,{schema:{data:s.rows,xAxisKey:a[0],chartType:b?`combo`:`bar`,series:i.map(e=>({dataKey:e,label:p(e),chartType:b&&h(e)?`line`:`bar`}))}}),b&&(0,Y.jsxs)(`p`,{className:`mt-1 px-1 text-[10px] text-muted-foreground`,children:[`Ratio measures (`,_.map(p).join(`, `),`) use the right axis.`]})]})})}),s.rows.length>0&&(0,Y.jsx)(`div`,{className:`overflow-auto max-h-[60vh] rounded-md border`,children:(0,Y.jsxs)(`table`,{className:`w-full text-xs`,children:[(0,Y.jsx)(`thead`,{className:`bg-muted/40`,children:(0,Y.jsx)(`tr`,{children:m.map(e=>(0,Y.jsx)(`th`,{className:`px-2 py-1.5 text-left font-medium whitespace-nowrap`,children:p(e)},e))})}),(0,Y.jsx)(`tbody`,{children:s.rows.map((e,t)=>(0,Y.jsx)(`tr`,{className:`border-t`,children:m.map(t=>(0,Y.jsx)(`td`,{className:`px-2 py-1 tabular-nums whitespace-nowrap`,children:i.includes(t)?v(e[t],d(t)?.format,d(t)?.currency):y(e[t])},t))},t))})]})})]})})}function Dm(e){return Array.isArray(e)?e.map((e,t)=>{if(!e||typeof e!=`object`)return null;let n=String(e.key??``).trim(),r=String(e.label??n??``).trim();return!n&&!r?null:{g:{key:n||`(no key)`,label:r||n||`(unnamed)`,order:typeof e.order==`number`?e.order:void 0,include:Om(e.include),package:typeof e.package==`string`?e.package:void 0,pages:km(e.pages)},i:t}}).filter(e=>e!==null).sort((e,t)=>(e.g.order??0)-(t.g.order??0)||e.i-t.i).map(e=>e.g):[]}function Om(e){if(typeof e==`string`)return e;if(e&&typeof e==`object`&&typeof e.tag==`string`)return{tag:e.tag}}function km(e){if(Array.isArray(e))return e.map(e=>typeof e==`string`?{literal:e}:e&&typeof e==`object`?{doc:typeof e.doc==`string`?e.doc:void 0,href:typeof e.href==`string`?e.href:void 0,label:typeof e.label==`string`?e.label:void 0,badge:typeof e.badge==`string`?e.badge:void 0,icon:typeof e.icon==`string`?e.icon:void 0}:null).filter(e=>e!==null)}function Am(e){return e===`public`?{icon:(0,Y.jsx)(Jt,{className:`h-3 w-3`}),label:`Public`,tone:`text-emerald-700 bg-emerald-50 border-emerald-200`}:e&&typeof e==`object`&&typeof e.profile==`string`?{icon:(0,Y.jsx)(ut,{className:`h-3 w-3`}),label:`Profile: ${e.profile}`,tone:`text-amber-800 bg-amber-50 border-amber-200`}:{icon:(0,Y.jsx)(gn,{className:`h-3 w-3`}),label:`Org`,tone:`text-muted-foreground bg-muted/40 border-muted`}}function jm({name:e,draft:t}){let n=t,r=String(n.name??e??``).trim(),i=String(n.label??r),a=typeof n.description==`string`?n.description:``,o=typeof n.slug==`string`?n.slug:``,s=X.useMemo(()=>Dm(n.groups),[n.groups]),c=Am(n.audience);return r?(0,Y.jsx)(Z,{hint:`book · spine`,toolbar:(0,Y.jsxs)(`a`,{href:`/meta/book/${encodeURIComponent(r)}/tree`,target:`_blank`,rel:`noreferrer`,className:`text-xs text-muted-foreground hover:text-foreground inline-flex items-center gap-1`,title:`Open the live-resolved navigation tree (actual docs per group)`,children:[`Resolved tree `,(0,Y.jsx)(cr,{className:`h-3 w-3`})]}),children:(0,Y.jsx)(Q,{children:(0,Y.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-3`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(Hn,{className:`h-4 w-4 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`text-sm font-medium text-foreground truncate`,children:i}),(0,Y.jsxs)(`span`,{className:`ml-auto inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-[10px] font-medium ${c.tone}`,children:[c.icon,c.label]})]}),(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground font-mono mt-0.5`,children:r}),o&&(0,Y.jsxs)(`div`,{className:`text-xs text-muted-foreground mt-1`,children:[`Slug: `,(0,Y.jsx)(`code`,{className:`font-mono`,children:o})]}),a&&(0,Y.jsx)(`div`,{className:`text-xs text-muted-foreground mt-1.5`,children:a})]}),s.length===0?(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(_e,{className:`h-8 w-8 opacity-50`}),title:`No groups yet`,tone:`warn`,description:(0,Y.jsxs)(Y.Fragment,{children:[`A book needs at least one group in its `,(0,Y.jsx)(`code`,{children:`groups`}),` spine. Each group derives its members from an `,(0,Y.jsx)(`code`,{children:`include`}),` rule (a glob like`,` `,(0,Y.jsx)(`code`,{children:`crm_guide_*`}),` or a `,(0,Y.jsx)(`code`,{children:`{ tag }`}),`).`]})}):(0,Y.jsx)(`div`,{className:`space-y-2`,children:s.map((e,t)=>(0,Y.jsx)(Mm,{group:e},`${e.key}-${t}`))})]})})}):(0,Y.jsx)(Z,{hint:`book`,children:(0,Y.jsx)(Lc,{icon:(0,Y.jsx)(Hn,{className:`h-8 w-8 opacity-50`}),title:`Name your book`,description:`Enter a name in the Form tab to start authoring the documentation spine.`})})}function Mm({group:e}){return(0,Y.jsxs)(`div`,{className:`rounded border bg-background`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 border-b bg-muted/20 px-3 py-2`,children:[(0,Y.jsx)(_e,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate`,children:e.label}),(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:e.key}),typeof e.order==`number`&&(0,Y.jsxs)(`span`,{className:`text-[10px] text-muted-foreground`,title:`Order within the book`,children:[`#`,e.order]}),(0,Y.jsxs)(`div`,{className:`ml-auto flex items-center gap-1.5`,children:[e.package&&(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border px-1.5 py-0.5 text-[10px] text-muted-foreground`,title:`Membership rule is scoped to this package`,children:[(0,Y.jsx)(xn,{className:`h-3 w-3`}),e.package]}),(0,Y.jsx)(Nm,{include:e.include,hasOverride:!!e.pages?.length})]})]}),(0,Y.jsx)(`div`,{className:`px-3 py-2`,children:e.pages?.length?(0,Y.jsx)(`ol`,{className:`space-y-1`,children:e.pages.map((e,t)=>(0,Y.jsx)(Pm,{node:e},t))}):e.include==null?(0,Y.jsxs)(`div`,{className:`text-[11px] text-amber-700 italic`,children:[`No `,(0,Y.jsx)(`code`,{children:`include`}),` rule and no explicit `,(0,Y.jsx)(`code`,{children:`pages`}),` — this group matches nothing unless docs set `,(0,Y.jsxs)(`code`,{children:[`group: "`,e.key,`"`]}),`.`]}):(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground italic`,children:`Members derived from the rule above — resolved against the live doc set.`})})]})}function Nm({include:e,hasOverride:t}){return e==null?t?(0,Y.jsx)(`span`,{className:`text-[10px] text-muted-foreground`,title:`Curated order via explicit pages`,children:`curated`}):null:typeof e==`string`?(0,Y.jsx)(`span`,{className:`inline-flex items-center gap-1 rounded border border-primary/30 bg-primary/5 px-1.5 py-0.5 font-mono text-[10px] text-foreground`,title:`Glob over doc names`,children:e}):(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded border border-primary/30 bg-primary/5 px-1.5 py-0.5 text-[10px] text-foreground`,title:`Match by doc tag`,children:[(0,Y.jsx)(Yn,{className:`h-3 w-3`}),e.tag]})}function Pm({node:e}){if(e.literal===`---`)return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-[10px] uppercase tracking-wider text-muted-foreground/60`,children:[(0,Y.jsx)(ht,{className:`h-3 w-3`}),`separator`]});if(e.literal===`...`)return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-[11px] italic text-muted-foreground`,children:[(0,Y.jsx)(ze,{className:`h-3.5 w-3.5`}),`…rest (remaining matched docs, by order)`]});let t=!!e.href,n=e.literal??e.doc,r=e.label??n??e.href??`(empty)`;return(0,Y.jsxs)(`li`,{className:`flex items-center gap-2 text-xs`,children:[t?(0,Y.jsx)(cr,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}):(0,Y.jsx)(at,{className:`h-3.5 w-3.5 text-muted-foreground shrink-0`}),(0,Y.jsx)(`span`,{className:`truncate`,children:r}),!t&&n&&e.label&&(0,Y.jsx)(`span`,{className:`font-mono text-[10px] text-muted-foreground`,children:n}),e.badge&&(0,Y.jsx)(`span`,{className:`rounded-full border border-primary/30 bg-primary/5 px-1.5 py-0.5 text-[9px] uppercase tracking-wider text-foreground`,children:e.badge}),t&&(0,Y.jsx)(`a`,{href:e.href,target:`_blank`,rel:`noreferrer`,onClick:e=>e.stopPropagation(),className:`ml-auto font-mono text-[10px] text-muted-foreground hover:text-foreground truncate max-w-[40%]`,title:e.href,children:e.href})]})}function Fm(){vs(`page`,Nl),vs(`view`,Ll),vs(`dashboard`,zl),vs(`report`,Hl),vs(`app`,tu),vs(`action`,dp),vs(`object`,Su),vs(`datasource`,mm),vs(`validation`,bm),vs(`dataset`,Em),vs(`email_template`,Eu),vs(`translation`,Rp),vs(`book`,jm),vs(`flow`,Pf),vs(`job`,Mp),vs(`agent`,If),vs(`tool`,Yf),vs(`skill`,Hp),vs(`permission`,np),vs(`profile`,np),vs(`role`,Vp)}var Im=new Set([`object`,`object-field`,`flow`,`role`,`node`,`user`,`team`,`queue`,`department`,`connector`,`email-template`]);function Lm(e){let t=e.xRef;if(!t||typeof t!=`object`)return;let n=typeof t.objectSource==`string`&&t.objectSource?{objectSource:t.objectSource}:{};if(typeof t.kindFrom==`string`&&t.kindFrom&&t.map&&typeof t.map==`object`){let e={};for(let[n,r]of Object.entries(t.map))typeof r==`string`&&Im.has(r)&&(e[n]=r);return Object.keys(e).length===0?void 0:{kindFrom:t.kindFrom,map:e,...n}}if(typeof t.kind==`string`&&Im.has(t.kind))return{kind:t.kind,...n}}function Rm(e){let t=e.replace(/[_-]+/g,` `).replace(/([a-z0-9])([A-Z])/g,`$1 $2`).trim();return t?t.split(/\s+/).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):e}function zm(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function Bm(e){if(Array.isArray(e.type))return e.type.find(e=>e!==`null`);if(typeof e.type==`string`)return e.type;if(Array.isArray(e.enum))return`string`;if(e.properties)return`object`;if(e.items)return`array`}function Vm(e){return e.filter(e=>typeof e==`string`).map(e=>({value:e,label:Rm(e)}))}function Hm(e){if(!(e.default===void 0||e.default===null)){if(typeof e.default==`boolean`||typeof e.default==`number`)return String(e.default);if(typeof e.default==`string`)return e.default}}function Um(e){if(Array.isArray(e.enum))return`select`;let t=Bm(e);if(t===`boolean`)return`boolean`;if(t===`number`||t===`integer`)return`number`;if(t===`string`)return e.format===`multiline`?`textarea`:`text`}function Wm(e){let t=e.properties??{},n=[];for(let[e,r]of Object.entries(t)){if(!zm(r))continue;let t=Bm(r),i,a,o=Lm(r);o?i=`reference`:Array.isArray(r.enum)?(i=`select`,a=Vm(r.enum)):i=t===`boolean`?`boolean`:`text`,n.push({key:e,label:r.title||Rm(e),kind:i,...a?{options:a}:{},...o?{ref:o}:{},...r.description?{placeholder:r.description}:{}})}return n}function Gm(e,t){return{label:e.title||Rm(t),...e.description?{help:e.description}:{},...Hm(e)?{defaultValue:Hm(e)}:{}}}function Km(e){if(!zm(e)||Bm(e)!==`object`||!zm(e.properties))return null;let t=[];for(let[n,r]of Object.entries(e.properties)){if(!zm(r))continue;let e=Bm(r);if(e===`array`){let e=zm(r.items)?r.items:void 0,i=e?Bm(e):void 0;e&&i===`object`&&zm(e.properties)?t.push({id:n,path:[`config`,n],kind:`objectList`,columns:Wm(e),...Gm(r,n)}):i===`string`&&t.push({id:n,path:[`config`,n],kind:`stringList`,...Gm(r,n)});continue}if(e===`object`&&zm(r.properties)){let e=Object.entries(r.properties).filter(([,e])=>zm(e)),i=e.some(([e,t])=>e===`enabled`&&Bm(t)===`boolean`);for(let[a,o]of e){let e=o,s=Lm(e),c=s?`reference`:Um(e);if(!c)continue;let l=`${n}.${a}`,u=i&&a===`enabled`,d={id:l,path:[`config`,n,a],kind:c,...u?{label:r.title||Rm(n),...r.description?{help:r.description}:{},...Hm(e)?{defaultValue:Hm(e)}:{}}:Gm(e,a),...s?{ref:s}:{},...c===`select`&&Array.isArray(e.enum)?{options:Vm(e.enum)}:{},...i&&!u?{showWhen:{field:`${n}.enabled`,equals:[`true`]}}:{}};t.push(d)}continue}let i=Lm(r);if(i){t.push({id:n,path:[`config`,n],kind:`reference`,ref:i,...Gm(r,n)});continue}let a=Um(r);a&&t.push({id:n,path:[`config`,n],kind:a,...Gm(r,n),...a===`select`&&Array.isArray(r.enum)?{options:Vm(r.enum)}:{}})}return t}function qm(e,t){return t===`template`?`{${e}}`:e}function Jm(e,t,n,r,i){let a=qm(n,t),o=Math.min(Math.max(r,0),e.length),s=Math.min(Math.max(i,0),e.length),c=Math.min(o,s),l=Math.max(o,s);return{next:e.slice(0,c)+a+e.slice(l),caret:c+a.length}}var Ym=`Insert a reference`,Xm=`Search references…`,Zm=`No matching references.`;function Qm({value:e,onValueChange:t,onBlur:n,onKeyDown:r,mode:i,groups:a,placeholder:o,disabled:s,multiline:c,rows:l=4,mono:u,className:d}){let f=X.useRef(null),p=X.useRef({start:0,end:0}),[m,h]=X.useState(!1),g=e=>{f.current=e},_=()=>{let t=f.current;t&&(p.current={start:t.selectionStart??e.length,end:t.selectionEnd??e.length})},v=n=>{let{next:r,caret:a}=Jm(e,i,n,p.current.start,p.current.end);t(r),h(!1),requestAnimationFrame(()=>{let e=f.current;if(e){e.focus();try{e.setSelectionRange(a,a)}catch{}p.current={start:a,end:a}}})},y=a.some(e=>e.refs.length>0),b={value:e,onChange:e=>t(e.target.value),onBlur:n,onKeyDown:r,onSelect:_,onKeyUp:_,onClick:_,placeholder:o,disabled:s};return(0,Y.jsxs)(`div`,{className:L(`relative`,d),children:[c?(0,Y.jsx)(`textarea`,{ref:g,...b,rows:l,className:`w-full rounded border bg-background px-2 py-1.5 pr-8 font-mono text-xs`}):(0,Y.jsx)(V,{ref:g,...b,className:L(`h-8 pr-8 text-sm`,u&&`font-mono`)}),y&&!s&&(0,Y.jsxs)(Mn,{open:m,onOpenChange:h,children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsx)(`button`,{type:`button`,"aria-label":Ym,title:Ym,onMouseDown:_,className:`absolute right-1 top-1 inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-muted hover:text-foreground`,children:(0,Y.jsx)(An,{className:`h-3.5 w-3.5`})})}),(0,Y.jsx)(Zt,{align:`end`,className:`w-72 p-0`,onCloseAutoFocus:e=>e.preventDefault(),children:(0,Y.jsxs)(xe,{children:[(0,Y.jsx)(Rr,{placeholder:Xm,className:`h-9`}),(0,Y.jsxs)(Et,{children:[(0,Y.jsx)(Ge,{children:Zm}),a.map(e=>(0,Y.jsx)(ft,{heading:e.label,children:e.refs.map(t=>(0,Y.jsxs)(ne,{value:`${t.token} ${t.label} ${t.detail??``}`,onSelect:()=>v(t.token),className:`flex items-center justify-between gap-2`,children:[(0,Y.jsx)(`span`,{className:`truncate font-mono text-xs`,children:qm(t.token,i)}),t.detail&&(0,Y.jsx)(`span`,{className:`shrink-0 truncate text-[10px] text-muted-foreground`,children:t.detail})]},`${e.id}:${t.token}`))},e.id))]})]})})]})]})}function $m({value:e,role:t,scopeGroups:n}){let r=t===`template`?null:Id(t,e);if(r)return(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:r.message});let i=n&&n.length>0?kd(n.flatMap(e=>e.refs)):null,a=i?Md(e,t,i):[];return a.length>0?(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(a)}):null}function eh(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function th(e){return e==null?``:typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):JSON.stringify(e)}function nh(e){let t=e.trim();if(t===``)return``;if(t===`true`)return!0;if(t===`false`)return!1;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`{`)&&t.endsWith(`}`)||t.startsWith(`[`)&&t.endsWith(`]`))try{return JSON.parse(t)}catch{return e}return e}function rh(e){return Array.isArray(e)?e.filter(e=>eh(e)).map(e=>{let t=e.variable??e.name??e.key;return[typeof t==`string`?t:``,e.value]}):eh(e)?Object.entries(e):[]}function ih(e,t){let n=[...t];return rh(e).map(([e,t])=>{let r=bi(`kv`,n);return n.push(r),{id:r,key:e,raw:th(t)}})}function ah(e,t){let n=new Set;if(t){let t=[];for(let r of e){let e=r.key.trim();!e||n.has(e)||(n.add(e),t.push({variable:e,value:nh(r.raw)}))}return t}let r={};for(let t of e){let e=t.key.trim();!e||n.has(e)||(n.add(e),r[e]=nh(t.raw))}return r}function oh(e){if(Array.isArray(e))return JSON.stringify(e);let t=e??{},n=Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{});return JSON.stringify(n)}function sh({label:e,value:t,onCommit:n,disabled:r,help:i,addLabel:a,keyLabel:o,valueLabel:s,removeLabel:c,emptyLabel:l,scopeGroups:u}){let d=Array.isArray(t),f=X.useMemo(()=>oh(ah(ih(t,[]),d)),[t,d]),[p,m]=X.useState(()=>ih(t,[])),h=X.useRef(f);X.useEffect(()=>{f!==h.current&&(m(ih(t,[])),h.current=f)},[f,t]);let g=e=>{let t=ah(e,d);h.current=oh(t),n((Array.isArray(t)?t.length===0:Object.keys(t).length===0)?void 0:t)},_=(e,t)=>{m(n=>n.map(n=>n.id===e?{...n,...t}:n))},v=()=>{m(e=>[...e,{id:bi(`kv`,e.map(e=>e.id)),key:``,raw:``}])},y=e=>{m(t=>{let n=t.filter(t=>t.id!==e);return g(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[p.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:l}),p.map(e=>(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{value:e.key,onChange:t=>_(e.id,{key:t.target.value}),onBlur:()=>g(p),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:o,disabled:r,className:`h-8 flex-1 font-mono text-xs`}),(0,Y.jsx)(Qm,{mode:`template`,value:e.raw,onValueChange:t=>_(e.id,{raw:t}),onBlur:()=>g(p),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},groups:u??[],placeholder:s,disabled:r,className:`flex-1`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 w-8 shrink-0 p-0 text-muted-foreground`,onClick:()=>y(e.id),disabled:r,"aria-label":c,title:c,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)($m,{value:e.raw,role:`template`,scopeGroups:u})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:v,disabled:r,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),a]}),i&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:i})]})}function ch(e,t){let n=[...t];return e.map(e=>{let t=bi(`sl`,n);return n.push(t),{id:t,value:e}})}function lh(e){return e.map(e=>e.value.trim()).filter(e=>e!==``)}function uh({label:e,value:t,onCommit:n,disabled:r,addLabel:i,itemLabel:a,removeLabel:o,emptyLabel:s}){let c=X.useMemo(()=>Array.isArray(t)?t.map(e=>String(e)):[],[t]),[l,u]=X.useState(()=>ch(c,[])),d=X.useRef(JSON.stringify(c));X.useEffect(()=>{let e=JSON.stringify(c);e!==d.current&&(u(ch(c,[])),d.current=e)},[c]);let f=e=>{let t=lh(e);d.current=JSON.stringify(t),n(t.length?t:void 0)},p=(e,t)=>{u(n=>n.map(n=>n.id===e?{...n,value:t}:n))},m=()=>{u(e=>[...e,{id:bi(`sl`,e.map(e=>e.id)),value:``}])},h=e=>{u(t=>{let n=t.filter(t=>t.id!==e);return f(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[l.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:s}),l.map(e=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(V,{value:e.value,onChange:t=>p(e.id,t.target.value),onBlur:()=>f(l),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:a,disabled:r,className:`h-8 flex-1 text-xs`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 w-8 shrink-0 p-0 text-muted-foreground`,onClick:()=>h(e.id),disabled:r,"aria-label":o,title:o,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:m,disabled:r,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),i]})]})}var dh={object:`object`,flow:`flow`,role:`role`,user:`user`,team:`team`,queue:`queue`,department:`department`,connector:`connector`,"email-template":`email_template`};function fh(e,t){if(e){if(e.kind)return{kind:e.kind,objectSource:e.objectSource};if(e.kindFrom&&e.map){let n=t(e.kindFrom),r=typeof n==`string`?e.map[n]:void 0;if(r)return{kind:r,objectSource:e.objectSource}}}}function ph(e,t){let n=e?.config;if(!n||typeof n!=`object`||Array.isArray(n))return;let r=n[t];return typeof r==`string`&&r?r:void 0}function mh(e,t,n){if(e!==`object-field`)return;let r=t||`$trigger`;return r===`$trigger`?ph((Array.isArray(n.draft.nodes)?n.draft.nodes:[]).find(e=>e?.type===`start`),`objectName`):ph(n.node,r)}function hh(e){let t=mi(),[n,r]=X.useState({options:[],loading:!!e});return X.useEffect(()=>{if(!e){r({options:[],loading:!1});return}let n=!1;return r(e=>({...e,loading:!0})),t.list(e).then(e=>{n||r({options:(Array.isArray(e)?e:[]).filter(e=>e&&typeof e.name==`string`&&e.name).map(e=>({value:String(e.name),label:typeof e.label==`string`&&e.label&&e.label!==e.name?`${e.label} (${e.name})`:String(e.name)})),loading:!1})}).catch(()=>{n||r({options:[],loading:!1})}),()=>{n=!0}},[t,e]),n}function gh({resolved:e,value:t,onCommit:n,onBlur:r,disabled:i,placeholder:a,context:o,showHint:s=!0}){let c=X.useId(),l=o??{draft:{},node:null},u=e?.kind,d=e?mh(e.kind,e.objectSource,l):void 0,{fields:f}=Di(u===`object-field`?d:void 0),p=u&&u!==`object-field`&&u!==`node`?dh[u]:void 0,{options:m}=hh(p),h=X.useMemo(()=>{if(u===`object-field`)return f.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name}));if(u===`node`){let e=Array.isArray(l.draft.nodes)?l.draft.nodes:[],t=typeof l.node?.id==`string`?l.node.id:void 0;return e.filter(e=>typeof e?.id==`string`&&e.id&&e.id!==t).map(e=>{let t=String(e.id);return{value:t,label:typeof e.label==`string`&&e.label?`${e.label} (${t})`:t}})}return p?m:[]},[u,p,f,m,l.draft,l.node]),g=u===`object-field`&&!d;return(0,Y.jsxs)(`div`,{className:`w-full space-y-1`,children:[(0,Y.jsx)(V,{list:h.length?c:void 0,value:t==null?``:String(t),onChange:e=>n(e.target.value),onBlur:r,placeholder:a,disabled:i,className:`h-8 text-sm`}),h.length>0&&(0,Y.jsx)(`datalist`,{id:c,children:h.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))}),s&&u===`object-field`&&d&&(0,Y.jsxs)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:[`Fields of `,d,`.`]}),s&&g&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:`Set the flow’s trigger object (on the Start node) to list fields.`})]})}function _h({field:e,value:t,onCommit:n,disabled:r,context:i}){let a=i?.node??null,o=fh(e.ref,e=>ph(a,e));return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(gh,{resolved:o,value:t,onCommit:n,disabled:r,placeholder:e.placeholder,context:i})]})}function vh(e,t){let n=[];return e.map(e=>{let r=bi(`ol`,n);n.push(r);let i={};for(let n of t){let t=e[n.key];n.kind===`boolean`?i[n.key]=t===!0:t==null?i[n.key]=``:i[n.key]=String(t)}return{id:r,values:i}})}function yh(e,t){let n=[];for(let r of e){let e={},i=!1;for(let n of t){let t=r.values[n.key];n.kind===`boolean`?t===!0&&(e[n.key]=!0,i=!0):typeof t==`string`&&t.trim()!==``&&(e[n.key]=t.trim(),i=!0)}i&&n.push(e)}return n}function bh({label:e,columns:t,value:n,onCommit:r,disabled:i,addLabel:a,removeLabel:o,emptyLabel:s,context:c,scopeGroups:l}){let u=X.useMemo(()=>Array.isArray(n)?n.filter(e=>e&&typeof e==`object`):[],[n]),[d,f]=X.useState(()=>vh(u,t)),p=X.useRef(JSON.stringify(u));X.useEffect(()=>{let e=JSON.stringify(u);e!==p.current&&(f(vh(u,t)),p.current=e)},[u,t]);let m=e=>{let n=yh(e,t);p.current=JSON.stringify(n),r(n.length?n:void 0)},h=(e,t,n)=>{f(r=>r.map(r=>r.id===e?{...r,values:{...r.values,[t]:n}}:r))},g=()=>{let e={};for(let n of t)e[n.key]=n.kind===`boolean`?!1:``;f(t=>[...t,{id:bi(`ol`,t.map(e=>e.id)),values:e}])},_=e=>{f(t=>{let n=t.filter(t=>t.id!==e);return m(n),n})};return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[d.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:s}),d.map(e=>(0,Y.jsxs)(`div`,{className:`rounded border bg-muted/30 p-2`,children:[(0,Y.jsx)(`div`,{className:`mb-1 flex justify-end`,children:(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 w-6 p-0 text-muted-foreground`,onClick:()=>_(e.id),disabled:i,"aria-label":o,title:o,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})}),(0,Y.jsx)(`div`,{className:`space-y-1.5`,children:t.map(t=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Y.jsx)(B,{className:`w-24 shrink-0 text-[11px] text-muted-foreground`,children:t.label}),t.kind===`boolean`?(0,Y.jsx)(st,{checked:e.values[t.key]===!0,onCheckedChange:n=>{f(r=>{let i=r.map(r=>r.id===e.id?{...r,values:{...r.values,[t.key]:n===!0}}:r);return m(i),i})},disabled:i}):t.kind===`reference`?(0,Y.jsx)(`div`,{className:`flex-1`,children:(0,Y.jsx)(gh,{resolved:fh(t.ref,t=>e.values[t]),value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onCommit:n=>h(e.id,t.key,typeof n==`string`?n:``),onBlur:()=>m(d),placeholder:t.placeholder,disabled:i,context:c,showHint:!1})}):t.kind===`expression`?(0,Y.jsxs)(`div`,{className:`flex-1 space-y-1`,children:[(0,Y.jsx)(Qm,{mode:`expression`,mono:!0,value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onValueChange:n=>h(e.id,t.key,n),onBlur:()=>m(d),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},groups:l??[],placeholder:t.placeholder,disabled:i}),(0,Y.jsx)($m,{value:typeof e.values[t.key]==`string`?e.values[t.key]:``,role:`predicate`,scopeGroups:l})]}):(0,Y.jsx)(V,{value:typeof e.values[t.key]==`string`?e.values[t.key]:``,onChange:n=>h(e.id,t.key,n.target.value),onBlur:()=>m(d),onKeyDown:e=>{e.key===`Enter`&&e.target.blur()},placeholder:t.placeholder,disabled:i,className:`h-8 flex-1 text-xs`})]},t.key))})]},e.id))]}),(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,className:`h-7 w-full text-xs`,onClick:g,disabled:i,children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),a]})]})}function xh({field:e,value:t,onCommit:n,disabled:r,locale:i,context:a,scopeGroups:o}){let s=e.refMode??(e.kind===`expression`?`expression`:`template`),c=(()=>{switch(e.kind){case`reference`:return(0,Y.jsx)(_h,{field:e,value:t,onCommit:e=>n(e),disabled:r,context:a});case`keyValue`:return(0,Y.jsx)(sh,{label:e.label,value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.kv.add`,i),keyLabel:J(`engine.inspector.flowNode.kv.key`,i),valueLabel:J(`engine.inspector.flowNode.kv.value`,i),removeLabel:J(`engine.inspector.flowNode.kv.remove`,i),emptyLabel:J(`engine.inspector.flowNode.kv.empty`,i),scopeGroups:o});case`stringList`:return(0,Y.jsx)(uh,{label:e.label,value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.list.add`,i),itemLabel:J(`engine.inspector.flowNode.list.item`,i),removeLabel:J(`engine.inspector.flowNode.list.remove`,i),emptyLabel:J(`engine.inspector.flowNode.list.empty`,i)});case`objectList`:return(0,Y.jsx)(bh,{label:e.label,columns:e.columns??[],value:t,onCommit:e=>n(e),disabled:r,addLabel:J(`engine.inspector.flowNode.list.add`,i),removeLabel:J(`engine.inspector.flowNode.list.remove`,i),emptyLabel:J(`engine.inspector.flowNode.list.empty`,i),context:a,scopeGroups:o});case`number`:return(0,Y.jsx)(ei,{label:e.label,value:typeof t==`number`?t:t!=null&&t!==``?Number(t):void 0,placeholder:e.placeholder,onCommit:e=>n(e),disabled:r});case`boolean`:return(0,Y.jsx)(G,{label:e.label,value:t===!0,onCommit:e=>n(e),disabled:r});case`select`:return(0,Y.jsx)(K,{label:e.label,value:t==null?``:String(t),options:e.options??[],onCommit:e=>n(e),disabled:r});case`textarea`:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Qm,{multiline:!0,rows:4,mode:s,value:t==null?``:String(t),onValueChange:e=>n(e),groups:o??[],placeholder:e.placeholder,disabled:r})]});default:return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e.label}),(0,Y.jsx)(Qm,{mode:s,mono:e.kind===`expression`,value:t==null?``:String(t),onValueChange:e=>n(e),groups:o??[],placeholder:e.placeholder,disabled:r})]})}})(),l=e.kind===`expression`?Id(`predicate`,t):null,u=e.kind===`expression`?`predicate`:s===`template`&&(e.kind===`text`||e.kind===`textarea`)?`template`:null,d=!l&&u&&o&&o.length>0?Md(t,u,kd(o.flatMap(e=>e.refs))):[];return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[c,l&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:l.message}),!l&&d.length>0&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(d)}),e.help&&!l&&d.length===0&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:e.help})]})}var Sh=[`variables`,`outputs`,`loop`,`trigger`],Ch={variables:`Flow variables`,outputs:`Upstream outputs`,loop:`Loop item`,trigger:`Trigger record`};function wh(e,t){let n=X.useMemo(()=>Td(e??{},t),[e,t]),{fields:r,loading:i}=Di(n.trigger?.objectName);return X.useMemo(()=>{let e=[...n.refs];n.trigger&&e.push(...Ed(n.trigger,r));let t=new Set,a=e.filter(e=>t.has(e.token)?!1:(t.add(e.token),!0));return{groups:Sh.map(e=>({id:e,label:Ch[e],refs:a.filter(t=>t.group===e)})).filter(e=>e.refs.length>0),refs:a,loading:!!n.trigger&&i,isEmpty:a.length===0}},[n,r,i])}function Th(e,t,n){let r=Array.isArray(t)?t:[],i=0;return n.map(t=>{if(t.source!==e||t.type===`fault`||t.type===`back`)return t;let n=r[i++];if(!n||typeof n!=`object`)return t;let a=typeof n.expression==`string`?n.expression.trim():``,o=typeof n.label==`string`?n.label.trim():``,s={...t};return o?s.label=o:delete s.label,a&&a!==`true`?(s.condition=a,delete s.isDefault):a===`true`?(s.isDefault=!0,delete s.condition):(delete s.condition,delete s.isDefault),s})}function Eh(e){let t=e?.config;return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}function Dh(e,t,n){let[r,...i]=t,a={...e};if(i.length===0)n==null||n===``?delete a[r]:a[r]=n;else{let e=a[r],t=Dh(e&&typeof e==`object`&&!Array.isArray(e)?e:{},i,n);Object.keys(t).length===0?delete a[r]:a[r]=t}return a}function Oh({selection:e,draft:t,onPatch:n,onClearSelection:r,locale:i,readOnly:a}){let o=Array.isArray(t.nodes)?t.nodes:[],s=o.findIndex(t=>t?.id===e.id),c=s>=0?o[s]:null,l=rd(),{groups:u}=wh(t,c?.id),d=X.useMemo(()=>{let e=c?.type?l[c.type]:void 0;return(e===void 0?null:Km(e))??fd(c?.type)},[l,c?.type]),f=Eh(c),p=d.filter(e=>hd(e,c,d)),m=X.useMemo(()=>{let e=Array.isArray(t.variables)?t.variables:[],n={};for(let t of e)t&&typeof t.name==`string`&&(n[t.name]=t.defaultValue);return n},[t]),h=X.useMemo(()=>{let e=new Set;for(let t of d){let n=md(t);n&&e.add(n),t.fallbackPath&&t.fallbackPath.length>=2&&t.fallbackPath[0]===`config`&&e.add(t.fallbackPath[1])}return e},[d]),g=X.useMemo(()=>{let e=Object.fromEntries(Object.entries(f).filter(([e])=>!h.has(e)));return Object.keys(e).length?JSON.stringify(e,null,2):``},[c,h]),[_,v]=X.useState(g),[y,b]=X.useState(null),[x,S]=X.useState(g.trim()!==``),[C,w]=X.useState(!1);if(X.useEffect(()=>{v(g),b(null),S(g.trim()!==``),w(!1)},[g]),!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.flowNode.kind`,i),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.flowNode.close`,i),children:(0,Y.jsx)(Hi,{message:e.id})});let T=e=>{n({nodes:si(o,s,{...c,...e})})},E=g.trim()!==``,D=c.type===`screen`||c.type===`user_task`,O=(e,r)=>{let i=e.path,a=Dh(c,i,r);e.fallbackPath&&(a=Dh(a,e.fallbackPath,void 0));let l={nodes:si(o,s,a)};if(c.type===`decision`&&i.length===2&&i[0]===`config`&&i[1]===`conditions`){let e=Array.isArray(t.edges)?t.edges:[];l.edges=Th(c.id,r,e)}n(l)},k=()=>{try{let e=_.trim()===``?{}:JSON.parse(_);if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`Must be a JSON object`);let t=Object.fromEntries(Object.entries(f).filter(([e])=>h.has(e))),r=Object.fromEntries(Object.entries(e).filter(([e])=>!h.has(e))),i={...t,...r};b(null);let a={...c};Object.keys(i).length===0?delete a.config:a.config=i,n({nodes:si(o,s,a)})}catch(e){b(String(e.message))}},A=()=>{n({nodes:si(o,s,null)}),r()},j=gd.includes(c.type)?[...gd]:[...gd,c.type??``].filter(Boolean);return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.flowNode.kind`,i),title:c.label||c.id,onClose:r,closeLabel:J(`engine.inspector.flowNode.close`,i),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.flowNode.remove`,i),onClick:A,disabled:a}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.id`,i),value:c.id,onCommit:e=>T({id:e}),disabled:a,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.label`,i),value:c.label??``,onCommit:e=>T({label:e}),disabled:a}),(0,Y.jsx)(K,{label:J(`engine.inspector.flowNode.type`,i),value:c.type,options:j.map(e=>({value:e,label:e})),onCommit:e=>T({type:e}),disabled:a}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowNode.description`,i),value:c.description??``,onCommit:e=>T({description:e||void 0}),disabled:a}),d.length===0?(0,Y.jsx)(`p`,{className:`pt-1 text-xs italic text-muted-foreground`,children:J(`engine.inspector.flowNode.noConfig`,i)}):p.length>0&&(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowNode.configuration`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),p.map(e=>(0,Y.jsx)(xh,{field:e,value:pd(c,e),onCommit:t=>O(e,t),disabled:a,locale:i,context:{draft:t,node:c},scopeGroups:u},e.id)),D&&(0,Y.jsx)(_f,{node:c,variables:m,className:`mt-1`}),E||C?(0,Y.jsxs)(`details`,{className:`group rounded border bg-muted/20`,open:x,onToggle:e=>S(e.target.open),children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none px-2 py-1.5 text-xs font-medium text-muted-foreground`,children:J(`engine.inspector.flowNode.advanced`,i)}),(0,Y.jsxs)(`div`,{className:`space-y-1 border-t p-2`,children:[(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:J(`engine.inspector.flowNode.advancedHint`,i)}),(0,Y.jsx)(`textarea`,{value:_,onChange:e=>v(e.target.value),onBlur:k,disabled:a,rows:6,placeholder:`{ }`,className:`w-full rounded border bg-background px-2 py-1.5 font-mono text-xs`}),y&&(0,Y.jsx)(`div`,{className:`text-xs text-destructive`,children:y})]})]}):!a&&(0,Y.jsxs)(`button`,{type:`button`,onClick:()=>{w(!0),S(!0)},className:`inline-flex items-center gap-1 self-start text-[11px] text-muted-foreground transition-colors hover:text-foreground`,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),J(`engine.inspector.flowNode.advanced`,i)]})]})}function kh({label:e,value:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`div`,{className:`flex h-8 items-center rounded border bg-muted/30 px-2 font-mono text-sm text-muted-foreground`,children:t})]})}function Ah({selection:e,draft:t,onPatch:n,onClearSelection:r,locale:i,readOnly:a}){let o=Array.isArray(t.edges)?t.edges:[],s=o.findIndex((t,n)=>Bu(t,n)===e.id),c=s>=0?o[s]:null,{groups:l}=wh(t,c?.source);if(!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.flowEdge.kind`,i),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.flowEdge.close`,i),children:(0,Y.jsx)(Hi,{message:J(`engine.inspector.flowEdge.missing`,i)})});let u=e=>{let t={...c,...e};for(let e of[`label`,`condition`,`isDefault`]){let n=t[e];(n===void 0||n===``||n===!1)&&delete t[e]}(t.type==="default"||t.type===``||t.type===void 0)&&delete t.type,n({edges:si(o,s,t)})},d=c.isDefault===!0,f=(Array.isArray(t.nodes)?t.nodes:[]).find(e=>e.id===c.source),p=f?.type===`decision`&&Array.isArray(f.config?.conditions)?f.config.conditions:[],m=e=>typeof e.expression==`string`?e.expression.trim():``,h=e=>typeof e.label==`string`?e.label.trim():``,g=(()=>{if(!p.length)return``;if(d){let e=p.findIndex(e=>{let t=m(e);return t===``||t===`true`});return e>=0?String(e):``}let e=Vu(c.condition),t=e?p.findIndex(t=>m(t)===e):-1;return t<0&&c.label&&(t=p.findIndex(e=>h(e)===c.label)),t>=0?String(t):``})(),_=e=>{if(e===``)return;let t=p[Number(e)];if(!t)return;let n=m(t),r=h(t)||void 0;u(n===``||n===`true`?{isDefault:!0,condition:void 0,label:r}:{isDefault:!1,condition:n,label:r})},v=f?.type===`approval`,y=[`approve`,`reject`,`revise`],b=(()=>{let e=(c.label??``).trim().toLowerCase();return y.includes(e)?e:``})(),x=typeof c.type==`string`&&c.type||`default`;return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.flowEdge.kind`,i),title:e.label??`${c.source} → ${c.target}`,onClose:r,closeLabel:J(`engine.inspector.flowEdge.close`,i),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.flowEdge.remove`,i),onClick:()=>{n({edges:si(o,s,null)}),r()},disabled:a}),children:[(0,Y.jsx)(kh,{label:J(`engine.inspector.flowEdge.source`,i),value:c.source}),(0,Y.jsx)(kh,{label:J(`engine.inspector.flowEdge.target`,i),value:c.target}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowEdge.routing`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),p.length>0&&(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.branch`,i),value:g,options:[...p.map((e,t)=>{let n=m(e),r=h(e)||`Branch ${t+1}`,i=n===``||n===`true`?` · default`:` \u00b7 ${n}`;return{value:String(t),label:`${r}${i}`}}),{value:``,label:`— Custom —`}],onCommit:_,disabled:a}),v&&(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.approvalBranch`,i),value:b,options:[{value:`approve`,label:J(`engine.inspector.flowEdge.branchApprove`,i)},{value:`reject`,label:J(`engine.inspector.flowEdge.branchReject`,i)},{value:`revise`,label:J(`engine.inspector.flowEdge.branchRevise`,i)},{value:``,label:J(`engine.inspector.flowEdge.branchCustom`,i)}],onCommit:e=>{e&&u({label:e})},disabled:a}),(0,Y.jsx)(W,{label:J(`engine.inspector.flowEdge.label`,i),value:c.label??``,onCommit:e=>u({label:e}),placeholder:J(`engine.inspector.flowEdge.labelHint`,i),disabled:a||d}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:J(`engine.inspector.flowEdge.condition`,i)}),(0,Y.jsx)(Qm,{mode:`expression`,mono:!0,value:Vu(c.condition)??``,onValueChange:e=>u({condition:e||void 0}),groups:l,placeholder:J(`engine.inspector.flowEdge.conditionHint`,i),disabled:a||d})]}),(()=>{let e=d?null:Id(`predicate`,c.condition);if(e)return(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-destructive`,role:`alert`,children:e.message});let t=d?[]:Md(Vu(c.condition),`predicate`,kd(l.flatMap(e=>e.refs)));return t.length>0?(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:Nd(t)}):null})(),(0,Y.jsx)(G,{label:J(`engine.inspector.flowEdge.isDefault`,i),value:d,onCommit:e=>u(e?{isDefault:!0,condition:void 0,label:void 0}:{isDefault:!1}),disabled:a}),(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-muted-foreground`,children:J(`engine.inspector.flowEdge.hint`,i)}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-2 pt-1`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] font-semibold uppercase tracking-wide text-muted-foreground`,children:J(`engine.inspector.flowEdge.connection`,i)}),(0,Y.jsx)(`span`,{className:`h-px flex-1 bg-border`,"aria-hidden":!0})]}),(0,Y.jsx)(K,{label:J(`engine.inspector.flowEdge.type`,i),value:x,options:[{value:`default`,label:J(`engine.inspector.flowEdge.typeDefault`,i)},{value:`conditional`,label:J(`engine.inspector.flowEdge.typeConditional`,i)},{value:`fault`,label:J(`engine.inspector.flowEdge.typeFault`,i)},{value:`back`,label:J(`engine.inspector.flowEdge.typeBack`,i)}],onCommit:e=>u({type:e}),disabled:a}),c.type===`back`&&(0,Y.jsx)(`p`,{className:`text-[11px] leading-snug text-amber-600 dark:text-amber-400`,role:`note`,children:J(`engine.inspector.flowEdge.backHint`,i)})]})}function jh(e){return e.selection.kind===`edge`?(0,Y.jsx)(Ah,{...e}):(0,Y.jsx)(Oh,{...e})}var Mh=[`object`,`page`,`dashboard`,`report`,`link`,`group`];function Nh(e){let t=e.split(`.`),n=[];for(let e of t){let t=/^([a-zA-Z_]\w*)\[(\d+)\]$/.exec(e);if(!t)return null;n.push({key:t[1],index:Number(t[2])})}return n.length>0?n:null}function Ph(e,t){let n=e[t[0].key];if(!Array.isArray(n))return{parent:[],node:null,index:-1};let r=n[t[0].index]??null;for(let e=1;e<t.length;e++){if(!r)return{parent:n,node:null,index:t[e].index};if(n=r[t[e].key],!Array.isArray(n))return{parent:[],node:null,index:-1};r=n[t[e].index]??null}return{parent:n,node:r,index:t[t.length-1].index}}function Fh(e,t,n){let r=t[0].key,i=Array.isArray(e[r])?[...e[r]]:[];if(t.length===1)return{[r]:si(i,t[0].index,n)};let a=i,o=[];for(let e=0;e<t.length-1;e++){let n={...a[t[e].index]??{}};o.push({arr:a,index:t[e].index,node:n});let r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let s=si(a,t[t.length-1].index,n);return o[o.length-1].node[t[t.length-1].key]=s,{[r]:i}}function Ih(e,t,n){let r=t[0].key;if(t.length===1)return{[r]:n};let i=Array.isArray(e[r])?[...e[r]]:[],a=i;for(let e=0;e<t.length-2;e++){let n={...a[t[e].index]??{}},r=t[e+1].key,i=Array.isArray(n[r])?[...n[r]]:[];n[r]=i,a[t[e].index]=n,a=i}let o=t[t.length-2],s=t[t.length-1].key,c={...a[o.index]??{}};return c[s]=n,a[o.index]=c,{[r]:i}}function Lh({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=Nh(e.id),{node:c,parent:l,index:u}=s?Ph(t,s):{node:null,parent:[],index:-1};if(!s||!c)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.appNav.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.appNav.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let d=c.label??c.title??c.name??c.path??e.id,f=c.path??c.href??c.route??``,p=e=>{n(Fh(t,s,{...c,...e}))};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.appNav.kind`,a),title:String(d),onClose:r,closeLabel:J(`engine.inspector.appNav.close`,a),headerActions:(0,Y.jsx)(ai,{index:u,total:l.length,onMove:e=>{n(Ih(t,s,Ii(l,u,e)));let r=s.slice(0,-1).map(e=>`${e.key}[${e.index}]`).join(`.`),a=s[s.length-1].key,o=r?`${r}.${a}[${e}]`:`${a}[${e}]`;i?.({kind:`nav`,id:o,label:String(d)})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.appNav.remove`,a),onClick:()=>{n(Fh(t,s,null)),r()},disabled:o}),children:[(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.label`,a),value:String(c.label??c.title??c.name??``),onCommit:e=>p({label:e}),disabled:o}),(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.path`,a),value:String(f),onCommit:e=>p({path:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.appNav.icon`,a),value:String(c.icon??``),onCommit:e=>p({icon:e}),disabled:o}),(0,Y.jsx)(K,{label:J(`engine.inspector.appNav.kindField`,a),value:c.kind,options:Mh.map(e=>({value:e,label:e})),onCommit:e=>p({kind:e}),disabled:o})]})}var Rh=[`field`,`label`,`accessorKey`,`header`];function zh(e){let t=/^([a-zA-Z_][\w]*)\.columns\[(\d+)\]$/.exec(e);return t?{variant:t[1],index:Number(t[2])}:null}function Bh(e){return typeof e==`string`?{field:e}:e&&typeof e==`object`?e:{}}function Vh(e){return e.field??e.accessorKey??``}function Hh(e){return e.label??e.header??Vh(e)}function Uh(e){return Object.keys(e).some(e=>!Rh.includes(e))}function Wh(e){if(!e)return``;let t=e.data;return t&&typeof t.object==`string`?t.object:typeof e.object==`string`?e.object:``}function Gh({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,locale:a,readOnly:o}){let s=zh(e.id),c=s?t[s.variant]:void 0,l=s&&Array.isArray(c?.columns)?c.columns:[],u=l.map(Bh),d=s?u[s.index]??null:null,f=s?typeof l[s.index]==`string`:!1,p=X.useMemo(()=>Sa(),[]),m=Wh(c),{fields:h}=Di(m||void 0),g=d?Vh(d):``,_=X.useMemo(()=>{let e=h.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} · ${e.name}`:e.name}));return g&&!e.some(e=>e.value===g)&&e.unshift({value:g,label:`${g} (not in object)`}),e},[h,g]);if(!s||!d)return(0,Y.jsx)(vi,{kindLabel:J(`engine.inspector.viewColumn.kind`,a),title:e.label??e.id,onClose:r,closeLabel:J(`engine.inspector.viewColumn.close`,a),children:(0,Y.jsx)(Hi,{message:e.id})});let v=e=>{let t=e.map((e,t)=>{let n=typeof l[t]==`string`,r=Vh(e);return n&&!Uh(e)&&!e.label&&!e.header&&r?r:e});n({[s.variant]:{...c,columns:t}})},y=e=>{let t=`field`in d||!(`accessorKey`in d)?`field`:`accessorKey`,n=`label`in d||!(`header`in d)?`label`:`header`,r={...e};`field`in e&&(r[t]=e.field,t!==`field`&&delete r.field),`label`in e&&(r[n]=e.label,n!==`label`&&delete r.label),v(si(u,s.index,{...d,...r}))};return(0,Y.jsxs)(vi,{kindLabel:J(`engine.inspector.viewColumn.kind`,a),title:Hh(d)||e.id,onClose:r,closeLabel:J(`engine.inspector.viewColumn.close`,a),headerActions:(0,Y.jsx)(ai,{index:s.index,total:u.length,onMove:e=>{v(Ii(u,s.index,e)),i?.({kind:`column`,id:`${s.variant}.columns[${e}]`,label:Hh(d)||`columns[${e}]`})},upLabel:J(`engine.inspector.reorder.up`,a),downLabel:J(`engine.inspector.reorder.down`,a),disabled:o}),footer:(0,Y.jsx)(_i,{label:J(`engine.inspector.viewColumn.remove`,a),onClick:()=>{v(si(u,s.index,null)),r()},disabled:o}),children:[c&&(0,Y.jsx)(`div`,{className:`pb-1`,children:(0,Y.jsx)(fa,{variantKey:s.variant,schema:c,columns:l,allStrings:l.length>0&&l.every(e=>typeof e==`string`),objectName:m||void 0,selectedIndex:s.index,readOnly:o,onPatch:n,onSelectionChange:i})}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-3`,children:[_.length>0?(0,Y.jsx)(K,{label:J(`engine.inspector.viewColumn.accessorKey`,a),value:Vh(d),options:_,onCommit:e=>y({field:e}),disabled:o}):(0,Y.jsx)(W,{label:J(`engine.inspector.viewColumn.accessorKey`,a),value:Vh(d),onCommit:e=>y({field:e}),disabled:o,mono:!0}),(0,Y.jsx)(W,{label:J(`engine.inspector.viewColumn.header`,a),value:Hh(d)===Vh(d)?``:Hh(d),onCommit:e=>y({label:e}),disabled:o}),!f&&p?(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(Fi,{schema:p,value:d,hiddenFields:Rh,readOnly:o,onChange:e=>{v(si(u,s.index,e))}})}):null]})]})}function Kh(e){let{selection:t}=e;if(t.kind===`column`)return(0,Y.jsx)(Gh,{...e});let n=ja(e.draft,t.id||void 0)??Aa(e.draft);return(0,Y.jsx)(za,{type:e.type,name:e.name,draft:e.draft,onPatch:e.onPatch,onSelectionChange:e.onSelectionChange,onClearSelection:e.onClearSelection,readOnly:e.readOnly,locale:e.locale,variantKey:n?.storeKey??`list`,familyKey:n?.familyKey??n?.storeKey??`list`,isHome:!1})}function qh(e){let t=Aa(e.draft);return(0,Y.jsx)(za,{...e,variantKey:t?.storeKey??`list`,familyKey:t?.familyKey??t?.storeKey??`list`,isHome:!0})}var Jh=e=>(e??``).toLowerCase().startsWith(`zh`);function Yh(e){let t=e.options;return Array.isArray(t)?t.map(e=>({value:String(e?.value??``),label:typeof e?.label==`string`?e.label:void 0,color:typeof e?.color==`string`?e.color:void 0})):[]}function Xh(e){return e===`select`||e===`multiselect`||e===`radio`||e===`checkboxes`}function Zh(e){return e===`lookup`||e===`master_detail`||e===`tree`}function Qh(e){return e===`formula`||e===`summary`}function $h(e){return e===`number`||e===`currency`||e===`percent`}function eg(e){return e===`text`||e===`textarea`||e===`email`||e===`url`||e===`phone`||e===`password`}function tg(e){return e===`boolean`||e===`toggle`?`bool`:e===`number`||e===`currency`||e===`percent`?`number`:e===`select`||e===`radio`?`picklist`:[`formula`,`summary`,`autonumber`,`lookup`,`master_detail`,`tree`,`file`,`image`,`avatar`,`video`,`audio`,`signature`,`qrcode`,`composite`,`repeater`,`vector`,`multiselect`,`checkboxes`,`tags`].includes(e)?null:`text`}function ng(e){let t=(e??``).toLowerCase().startsWith(`zh`),n=t?ji:wi;return Ei.flatMap(e=>e.types.map(r=>{let i=Ti[r];return{value:r,label:`${n[e.category]} · ${t?i.labelZh:i.label}`}}))}function rg({selection:e,draft:t,onPatch:n,onClearSelection:r,onSelectionChange:i,readOnly:a,locale:o}){let s=X.useCallback(e=>J(e,o),[o]),c=X.useMemo(()=>ng(o),[o]),l=X.useMemo(()=>ki(t.fields),[t]),u=String(e.id),d=fi(l,u),f=d>=0?l.entries[d]:null,p=Array.isArray(t.fieldGroups)?t.fieldGroups:[],m=pg();if(!f)return(0,Y.jsx)(vi,{kindLabel:s(`designer.field.kind`),title:u||s(`designer.field.kind`),onClose:r,closeLabel:s(`designer.field.close`),children:(0,Y.jsx)(Hi,{message:s(`designer.field.missing`)})});let h=f.def,g=typeof h.type==`string`?h.type:`text`,_=Ti[g],v=e=>{n({fields:li(e)})},y=e=>{let t=[...l.entries];t[d]={...f,def:{...h,...e}},v({shape:l.shape,entries:t})},b=e=>{let t=oi(e);if(!t||t===f.name||l.entries.some((e,n)=>n!==d&&e.name===t))return;let n=[...l.entries];n[d]={...f,name:t},v({shape:l.shape,entries:n}),i?.({kind:`field`,id:t,label:String(h.label??t)})},x=e=>{if(a)return;let t=g===`select`?`status`:g;if(!(f.name===t||f.name.startsWith(`${t}_`)&&/^\d+$/.test(f.name.slice(t.length+1))))return;let n=Xo(e);if(!n||n===f.name||l.entries.some((e,t)=>t!==d&&e.name===n))return;let r=[...l.entries];r[d]={...f,name:n},v({shape:l.shape,entries:r}),i?.({kind:`field`,id:n,label:String(h.label??n)})},S=()=>{let e=l.entries.filter((e,t)=>t!==d);v({shape:l.shape,entries:e}),r()},C=()=>{let e=new Set(l.entries.map(e=>e.name)),t=`${f.name}_copy`,n=t,r=1;for(;e.has(n);)r+=1,n=`${t}_${r}`;let a=typeof h.label==`string`&&h.label?h.label:``,o={name:n,def:{...h,label:a?a+s(`designer.field.copySuffix`):void 0}},c=[...l.entries];c.splice(d+1,0,o),v({shape:l.shape,entries:c}),i?.({kind:`field`,id:n,label:String(o.def.label??n)})},w=e=>{v({shape:l.shape,entries:Ii(l.entries,d,e)})},T=Yh(h),E=e=>{y({options:e.map(e=>{let t={value:e.value};return e.label&&(t.label=e.label),e.color&&(t.color=e.color),t})})},D=(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[!a&&(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:C,title:s(`designer.field.duplicate`),"aria-label":s(`designer.field.duplicate`),children:(0,Y.jsx)(_r,{className:`h-3.5 w-3.5`})}),(0,Y.jsx)(ai,{index:d,total:l.entries.length,onMove:w,disabled:a})]}),O=(0,Y.jsx)(_i,{label:q(`designer.field.remove`,o,{label:typeof h.label==`string`?h.label:f.name}),onClick:S,disabled:a}),k=Jh(o)?_?.labelZh:_?.label;return(0,Y.jsxs)(vi,{kindLabel:s(`designer.field.kind`),title:typeof h.label==`string`&&h.label?h.label:f.name,onClose:r,closeLabel:s(`designer.field.close`),headerActions:D,footer:O,children:[(0,Y.jsxs)(ig,{title:s(`designer.field.section.basic`),children:[(0,Y.jsx)(W,{label:s(`designer.field.apiName`),value:f.name,onCommit:b,disabled:a,mono:!0,testId:`field-apiname-input`}),(0,Y.jsx)(W,{label:s(`designer.field.label`),value:typeof h.label==`string`?h.label:``,onCommit:e=>y({label:e}),onBlur:x,disabled:a,testId:`field-label-input`}),(0,Y.jsx)(K,{label:s(`designer.field.type`),value:g,options:c,onCommit:e=>y({type:e}),disabled:a}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-4 pt-1`,children:[(0,Y.jsx)(G,{label:s(`designer.field.required`),value:!!h.required,onCommit:e=>y({required:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.unique`),value:!!h.unique,onCommit:e=>y({unique:e||void 0}),disabled:a})]}),(0,Y.jsx)(og,{label:s(`designer.field.description`),value:typeof h.description==`string`?h.description:``,onCommit:e=>y({description:e||void 0}),disabled:a,rows:2}),tg(g)&&(0,Y.jsx)(ag,{kind:tg(g),value:h.defaultValue,options:T,onCommit:e=>y({defaultValue:e}),disabled:a,locale:o}),(0,Y.jsx)(og,{label:s(`designer.field.helpText`),value:typeof h.inlineHelpText==`string`?h.inlineHelpText:``,onCommit:e=>y({inlineHelpText:e||void 0}),disabled:a,rows:2,placeholder:s(`designer.field.helpTextPlaceholder`)})]}),(Xh(g)||Zh(g)||Qh(g)||$h(g)||eg(g))&&(0,Y.jsxs)(ig,{title:q(`designer.field.section.options`,o,{type:k??g}),children:[Xh(g)&&(0,Y.jsx)(cg,{options:T,onChange:E,disabled:a,locale:o},f.name),Zh(g)&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(sg,{label:s(`designer.field.relatedObject`),value:typeof h.reference==`string`?h.reference:``,options:m,onCommit:e=>y({reference:e||void 0}),disabled:a,placeholder:s(`designer.field.objectNamePlaceholder`)}),(0,Y.jsx)(W,{label:s(`designer.field.relationshipName`),value:typeof h.relationshipName==`string`?h.relationshipName:``,onCommit:e=>y({relationshipName:e||void 0}),disabled:a,placeholder:s(`designer.field.relationshipNameHint`)}),(0,Y.jsx)(fg,{def:h,patchDef:y,hostFieldNames:l.entries.map(e=>e.name).filter(e=>e!==f.name),readOnly:a,locale:o})]}),Qh(g)&&(0,Y.jsx)(og,{label:s(`designer.field.formula`),value:typeof h.formula==`string`?h.formula:``,onCommit:e=>y({formula:e||void 0}),disabled:a,rows:4,mono:!0,placeholder:`record.amount * 0.2`}),$h(g)&&(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(ei,{label:s(`designer.field.precision`),value:typeof h.precision==`number`?h.precision:void 0,onCommit:e=>y({precision:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.scale`),value:typeof h.scale==`number`?h.scale:void 0,onCommit:e=>y({scale:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.min`),value:typeof h.min==`number`?h.min:void 0,onCommit:e=>y({min:e}),disabled:a}),(0,Y.jsx)(ei,{label:s(`designer.field.max`),value:typeof h.max==`number`?h.max:void 0,onCommit:e=>y({max:e}),disabled:a})]}),eg(g)&&(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(ei,{label:s(`designer.field.minLength`),value:typeof h.minLength==`number`?h.minLength:void 0,onCommit:e=>y({minLength:e}),disabled:a,placeholder:`0`}),(0,Y.jsx)(ei,{label:s(`designer.field.maxLength`),value:typeof h.maxLength==`number`?h.maxLength:void 0,onCommit:e=>y({maxLength:e}),disabled:a,placeholder:`255`})]})]}),(0,Y.jsxs)(ig,{title:s(`designer.field.section.advanced`),children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(G,{label:s(`designer.field.readonly`),value:!!h.readonly,onCommit:e=>y({readonly:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.hidden`),value:!!h.hidden,onCommit:e=>y({hidden:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.indexed`),value:!!h.indexed,onCommit:e=>y({indexed:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.externalId`),value:!!h.externalId,onCommit:e=>y({externalId:e||void 0}),disabled:a}),(0,Y.jsx)(G,{label:s(`designer.field.trackHistory`),value:!!h.trackHistory,onCommit:e=>y({trackHistory:e||void 0}),disabled:a})]}),(0,Y.jsx)(W,{label:s(`designer.field.placeholder`),value:typeof h.placeholder==`string`?h.placeholder:``,onCommit:e=>y({placeholder:e||void 0}),disabled:a}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(W,{label:s(`designer.field.conditionalRequired`),value:typeof h.conditionalRequired==`string`?h.conditionalRequired:``,onCommit:e=>y({conditionalRequired:e||void 0}),disabled:a,mono:!0,placeholder:`record.status == 'closed'`}),(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground/80 px-0.5 leading-snug`,children:s(`designer.field.conditionalRequiredHint`)})]}),p.length>0&&(0,Y.jsx)(K,{label:s(`designer.field.group`),value:typeof h.group==`string`?h.group:``,options:[{value:``,label:s(`designer.field.noGroup`)},...p.filter(e=>typeof e.key==`string`).map(e=>({value:e.key,label:String(e.label??e.key)}))],onCommit:e=>y({group:e||void 0}),disabled:a})]})]})}function ig({title:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-semibold uppercase tracking-wider text-muted-foreground border-b pb-1`,children:e}),(0,Y.jsx)(`div`,{className:`space-y-2`,children:t})]})}function ag({kind:e,value:t,options:n,onCommit:r,disabled:i,locale:a}){let o=J(`designer.field.defaultValue`,a),s=J(`designer.field.defaultNone`,a);return e===`bool`?(0,Y.jsx)(K,{label:o,value:t===!0?`true`:t===!1?`false`:``,options:[{value:``,label:s},{value:`true`,label:J(`designer.field.true`,a)},{value:`false`,label:J(`designer.field.false`,a)}],onCommit:e=>r(e===``?void 0:e===`true`),disabled:i}):e===`number`?(0,Y.jsx)(ei,{label:o,value:typeof t==`number`?t:void 0,onCommit:e=>r(e),disabled:i}):e===`picklist`?(0,Y.jsx)(K,{label:o,value:typeof t==`string`?t:``,options:[{value:``,label:s},...n.filter(e=>e.value).map(e=>({value:e.value,label:e.label||e.value}))],onCommit:e=>r(e||void 0),disabled:i}):(0,Y.jsx)(W,{label:o,value:typeof t==`string`?t:t==null?``:String(t),onCommit:e=>r(e||void 0),disabled:i})}function og({label:e,value:t,onCommit:n,disabled:r,rows:i=2,mono:a,placeholder:o}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(`textarea`,{value:t,disabled:r,rows:i,placeholder:o,onChange:e=>n(e.target.value),className:`w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary `+(a?`font-mono text-xs `:``)})]})}function sg({label:e,value:t,options:n,onCommit:r,disabled:i,placeholder:a}){let o=X.useId();return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(V,{list:o,value:t,onChange:e=>r(e.target.value),disabled:i,className:`h-8 text-sm font-mono`,placeholder:a??`object_name`}),(0,Y.jsx)(`datalist`,{id:o,children:n.map(e=>(0,Y.jsx)(`option`,{value:e.value,children:e.label},e.value))})]})}function cg({options:e,onChange:t,disabled:n,locale:r}){let[i,a]=X.useState(()=>e.length>0?e:[{value:``,label:``}]),o=e=>{a(e),t(e.filter(e=>e.value.trim()!==``))},s=(e,t)=>{let n=[...i];n[e]={...n[e],...t},o(n)},c=e=>o(i.filter((t,n)=>n!==e)),l=(e,t)=>o(Ii(i,e,t));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)(B,{className:`text-xs text-muted-foreground`,children:J(`designer.field.picklistValues`,r)}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:i.length})]}),i.length===0?(0,Y.jsx)(`div`,{className:`text-[11px] italic text-muted-foreground px-1`,children:J(`designer.field.noValues`,r)}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:i.map((e,t)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,Y.jsx)(V,{value:e.value,onChange:e=>s(t,{value:e.target.value}),placeholder:J(`designer.field.optValue`,r),disabled:n,className:`h-7 text-xs font-mono flex-1`}),(0,Y.jsx)(V,{value:e.label??``,onChange:e=>s(t,{label:e.target.value}),placeholder:J(`designer.field.optLabel`,r),disabled:n,className:`h-7 text-xs flex-1`}),(0,Y.jsx)(`input`,{type:`color`,value:e.color??`#cccccc`,onChange:e=>s(t,{color:e.target.value}),disabled:n,className:`h-7 w-7 rounded border bg-background cursor-pointer p-0.5`,title:J(`designer.field.optColor`,r)}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>l(t,t-1),disabled:n||t===0,"aria-label":J(`designer.field.moveUp`,r),children:(0,Y.jsx)(Kt,{className:`h-3 w-3`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>l(t,t+1),disabled:n||t===i.length-1,"aria-label":J(`designer.field.moveDown`,r),children:(0,Y.jsx)(P,{className:`h-3 w-3`})}),(0,Y.jsx)(H,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 text-destructive`,onClick:()=>c(t),disabled:n,"aria-label":J(`designer.field.removeValue`,r),children:(0,Y.jsx)(nt,{className:`h-3 w-3`})})]},t))}),!n&&(0,Y.jsxs)(H,{variant:`outline`,size:`sm`,className:`h-7 gap-1 text-xs`,onClick:()=>o([...i,{value:``,label:``}]),children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),J(`designer.field.addValue`,r)]})]})}var lg=[{value:`eq`,label:`= equals`},{value:`ne`,label:`≠ not equals`},{value:`gt`,label:`> greater than`},{value:`lt`,label:`< less than`},{value:`gte`,label:`≥ at least`},{value:`lte`,label:`≤ at most`},{value:`contains`,label:`contains`},{value:`in`,label:`in (any of)`},{value:`notIn`,label:`not in`}];function ug(e){let t=e.lookupFilters??e.lookup_filters;return Array.isArray(t)?t:[]}function dg(e){let t=e.dependsOn??e.depends_on;return Array.isArray(t)?t.map(e=>typeof e==`string`?e:e&&typeof e==`object`?e.field:void 0).filter(e=>!!e):[]}function fg({def:e,patchDef:t,hostFieldNames:n,readOnly:r,locale:i}){let a=e=>J(e,i),o=typeof e.reference==`string`?e.reference:void 0,{fields:s,loading:c}=Di(o),l=X.useMemo(()=>s.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label,hint:e.type})),[s]),u=X.useMemo(()=>n.map(e=>({value:e,label:e})),[n]),d=ug(e),f=dg(e),p=(e,n)=>t({lookupFilters:d.map((t,r)=>r===e?{...t,...n}:t)}),m=()=>t({lookupFilters:[...d,{field:``,operator:`eq`,value:``}]}),h=e=>{let n=d.filter((t,n)=>n!==e);t({lookupFilters:n.length?n:void 0})},g=e=>Array.isArray(e)?e.join(`, `):e==null?``:String(e),_=(e,t)=>e===`in`||e===`notIn`?t.split(`,`).map(e=>e.trim()).filter(Boolean):t,v=e=>{!e||f.includes(e)||t({dependsOn:[...f,e]})},y=e=>{let n=f.filter(t=>t!==e);t({dependsOn:n.length?n:void 0})},b=typeof e.displayField==`string`?e.displayField:``,x=typeof e.descriptionField==`string`?e.descriptionField:``,S=typeof e.lookupPageSize==`number`?e.lookupPageSize:void 0,C=e.allowCreate===!0,w=a(o?`designer.field.lookup.selectField`:`designer.field.lookup.setTargetFirst`);return(0,Y.jsxs)(`div`,{className:`space-y-2 border-t pt-2.5`,children:[(0,Y.jsx)(`div`,{className:`text-[11px] font-medium text-muted-foreground`,children:a(`designer.field.lookup.pickerConfig`)}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.displayField`),value:b,onCommit:e=>t({displayField:e||void 0}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.descriptionField`),value:x,onCommit:e=>t({descriptionField:e||void 0}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsxs)(`div`,{className:`space-y-1.5 pt-1`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.field.lookup.selectableRecords`)}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:d.length})]}),!r&&(0,Y.jsxs)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-1.5 text-[11px]`,onClick:m,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` `,a(`designer.field.lookup.addFilter`)]})]}),d.length===0?(0,Y.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:q(`designer.field.lookup.noFilter`,i,{ref:o||`related`})}):d.map((e,t)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:q(`designer.field.lookup.filterN`,i,{n:t+1})}),!r&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":a(`designer.field.lookup.removeFilter`),className:`h-6 w-6 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>h(t),children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(Ji,{label:a(`designer.field.lookup.filterField`),value:e.field??``,onCommit:e=>p(t,{field:e}),options:l,loading:c,placeholder:w,searchPlaceholder:a(`designer.field.lookup.searchFields`),disabled:r,mono:!0}),(0,Y.jsx)(K,{label:a(`designer.field.lookup.filterOperator`),value:e.operator??`eq`,options:lg,onCommit:e=>p(t,{operator:e}),disabled:r}),(0,Y.jsx)(W,{label:a(`designer.field.lookup.filterValue`),value:g(e.value),onCommit:n=>p(t,{value:_(e.operator,n)}),placeholder:e.operator===`in`||e.operator===`notIn`?`comma,separated,values`:`value`,disabled:r,mono:!0})]},t))]}),(0,Y.jsxs)(`div`,{className:`space-y-1.5 pt-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.field.lookup.dependsOn`)}),f.length>0&&(0,Y.jsx)(`div`,{className:`flex flex-wrap gap-1`,children:f.map(e=>(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-0.5 text-[11px] font-mono`,children:[e,!r&&(0,Y.jsx)(`button`,{type:`button`,className:`text-muted-foreground hover:text-foreground`,onClick:()=>y(e),"aria-label":`Remove ${e}`,children:`×`})]},e))}),!r&&u.length>0&&(0,Y.jsx)(Ji,{value:``,onCommit:e=>v(e),options:u.filter(e=>!f.includes(e.value)),placeholder:a(`designer.field.lookup.addDependsOn`),searchPlaceholder:a(`designer.field.lookup.searchHostFields`),disabled:r,allowCustom:!1,mono:!0})]}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 pt-1`,children:[(0,Y.jsx)(ei,{label:a(`designer.field.lookup.pageSize`),value:S,onCommit:e=>t({lookupPageSize:e}),placeholder:`10`,disabled:r}),(0,Y.jsx)(`div`,{className:`flex items-end pb-1.5`,children:(0,Y.jsx)(G,{label:a(`designer.field.lookup.allowCreate`),value:C,onCommit:e=>t({allowCreate:e||void 0}),disabled:r})})]})]})}function pg(){let e=mi(),[t,n]=X.useState([]);return X.useEffect(()=>{let t=!1;return e.list(`object`).then(e=>{t||n(e.filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value)))}).catch(()=>{}),()=>{t=!0}},[e]),t}function mg({name:e,draft:t,onPatch:n,readOnly:r,locale:i}){let a=X.useCallback(e=>J(e,i),[i]),o=!e,s=e=>typeof t[e]==`string`?t[e]:``,c=X.useRef(!1),l=e=>{let t={label:e||void 0};o&&!c.current&&(t.name=Xo(e)),n(t)},u=e=>{c.current=!0,n({name:oi(e)})},d=o?s(`name`):e||s(`name`),f=s(`label`)||e||a(`designer.object.kind`);return(0,Y.jsx)(vi,{kindLabel:a(`designer.object.kind`),title:f,onClose:()=>{},hideClose:!0,children:(0,Y.jsxs)(hg,{title:a(`designer.object.section.basic`),hint:a(`designer.object.section.basicHint`),children:[(0,Y.jsx)(gg,{hint:a(`designer.object.nameHint`),children:(0,Y.jsx)(W,{label:a(`designer.object.name`),value:d,onCommit:u,disabled:r||!o,mono:!0,testId:`object-name-input`,placeholder:a(`designer.object.namePlaceholder`)})}),(0,Y.jsx)(W,{label:a(`designer.object.label`),value:s(`label`),onCommit:l,disabled:r,placeholder:a(`designer.object.labelPlaceholder`)}),(0,Y.jsx)(W,{label:a(`designer.object.pluralLabel`),value:s(`pluralLabel`),onCommit:e=>n({pluralLabel:e||void 0}),disabled:r,placeholder:a(`designer.object.pluralPlaceholder`)}),(0,Y.jsx)(gg,{hint:a(`designer.object.iconHint`),children:(0,Y.jsx)(W,{label:a(`designer.object.icon`),value:s(`icon`),onCommit:e=>n({icon:e||void 0}),disabled:r,mono:!0,placeholder:`building`})}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:a(`designer.object.description`)}),(0,Y.jsx)(`textarea`,{value:s(`description`),disabled:r,rows:2,placeholder:a(`designer.object.descriptionPlaceholder`),onChange:e=>n({description:e.target.value||void 0}),className:`w-full text-sm rounded-md border bg-background px-2 py-1.5 focus:outline-none focus:ring-1 focus:ring-primary`})]})]})})}function hg({title:e,hint:t,children:n}){return(0,Y.jsxs)(`div`,{className:`space-y-2`,children:[(0,Y.jsxs)(`div`,{className:`border-b pb-1`,children:[(0,Y.jsx)(`div`,{className:`text-[10px] font-semibold uppercase tracking-wider text-muted-foreground`,children:e}),t&&(0,Y.jsx)(`div`,{className:`text-[10px] normal-case text-muted-foreground/70 mt-0.5`,children:t})]}),(0,Y.jsx)(`div`,{className:`space-y-2`,children:n})]})}function gg({hint:e,children:t}){return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[t,e&&(0,Y.jsx)(`p`,{className:`text-[11px] text-muted-foreground/80 px-0.5 leading-snug`,children:e})]})}var _g={equals:`$eq`,notEquals:`$ne`,greaterThan:`$gt`,greaterOrEqual:`$gte`,lessThan:`$lt`,lessOrEqual:`$lte`,after:`$gt`,before:`$lt`,contains:`$contains`,in:`$in`,notIn:`$nin`},vg={$eq:`equals`,$ne:`notEquals`,$gt:`greaterThan`,$gte:`greaterOrEqual`,$lt:`lessThan`,$lte:`lessOrEqual`,$contains:`contains`,$in:`in`,$nin:`notIn`};function yg(e){let t=(e?.conditions??[]).filter(e=>e&&e.field),n=[];for(let e of t){if(e.operator===`isEmpty`){n.push({[e.field]:{$exists:!1}});continue}if(e.operator===`isNotEmpty`){n.push({[e.field]:{$exists:!0}});continue}let t=_g[e.operator];if(!t)continue;let r=e.value;r==null||r===``||Array.isArray(r)&&r.length===0||n.push({[e.field]:{[t]:r}})}if(n.length!==0)return n.length===1?n[0]:{$and:n}}function bg(e){let t={id:`g`,logic:`and`,conditions:[]};if(e==null)return{group:t,representable:!0};if(typeof e!=`object`||Array.isArray(e)||`$or`in e)return{group:t,representable:!1};let n=Array.isArray(e.$and)?e.$and:[e],r=[];for(let e=0;e<n.length;e++){let i=n[e];if(!i||typeof i!=`object`||Array.isArray(i)||`$and`in i||`$or`in i)return{group:t,representable:!1};let a=Object.keys(i);if(a.length!==1)return{group:t,representable:!1};let o=a[0],s=i[o];if(s&&typeof s==`object`&&!Array.isArray(s)){let n=Object.keys(s);if(n.length!==1)return{group:t,representable:!1};let i=n[0];if(i===`$exists`)r.push({id:`c${e}`,field:o,operator:s.$exists?`isNotEmpty`:`isEmpty`,value:``});else{let n=vg[i];if(!n)return{group:t,representable:!1};r.push({id:`c${e}`,field:o,operator:n,value:s[i]})}}else r.push({id:`c${e}`,field:o,operator:`equals`,value:s})}return{group:{id:`g`,logic:`and`,conditions:r},representable:!0}}var xg=[{value:`count`,label:`count`},{value:`sum`,label:`sum`},{value:`avg`,label:`avg`},{value:`min`,label:`min`},{value:`max`,label:`max`},{value:`count_distinct`,label:`count distinct`}],Sg=[{value:`string`,label:`string`},{value:`number`,label:`number`},{value:`date`,label:`date`},{value:`boolean`,label:`boolean`},{value:`lookup`,label:`lookup`}],Cg=[{value:``,label:`— none —`},{value:`day`,label:`day`},{value:`week`,label:`week`},{value:`month`,label:`month`},{value:`quarter`,label:`quarter`},{value:`year`,label:`year`}],wg=[{value:`ratio`,label:`ratio (a ÷ b)`},{value:`sum`,label:`sum (a + b)`},{value:`difference`,label:`difference (a − b)`},{value:`product`,label:`product (a × b)`}],Tg=[{value:`raw`,label:`Raw number`},{value:`number`,label:`Number — 1,234.5`},{value:`currency`,label:`Currency — $1,234.50`},{value:`percent`,label:`Percent — 12.3%`}],Eg=[{value:`0`,label:`0`},{value:`1`,label:`1`},{value:`2`,label:`2`}],Dg=[{value:`USD`,label:`USD ($)`},{value:`EUR`,label:`EUR (€)`},{value:`GBP`,label:`GBP (£)`},{value:`CNY`,label:`CNY (¥)`},{value:`JPY`,label:`JPY (¥)`},{value:`INR`,label:`INR (₹)`},{value:`CAD`,label:`CAD ($)`},{value:`AUD`,label:`AUD ($)`}];function Og({title:e,count:t,onAdd:n,addLabel:r}){return(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),(0,Y.jsx)(z,{variant:`outline`,className:`text-[10px]`,children:t})]}),n&&(0,Y.jsxs)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-6 gap-1 px-1.5 text-[11px]`,onClick:n,children:[(0,Y.jsx)(R,{className:`h-3 w-3`}),` `,r]})]})}function kg({children:e}){return(0,Y.jsxs)(`details`,{className:`group`,children:[(0,Y.jsx)(`summary`,{className:`cursor-pointer select-none list-none text-[11px] text-muted-foreground hover:text-foreground`,children:(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(nn,{className:`h-3 w-3 transition-transform group-open:rotate-90`}),`Advanced`]})}),(0,Y.jsx)(`div`,{className:`mt-1.5 space-y-1.5 border-l pl-2.5`,children:e})]})}function Ag(e,t){let n=(e??``).trim(),r=n.match(/\.(0+)/),i=r?Math.min(r[1].length,2):0;return t||/[$£€¥₹]/.test(n)?{kind:`currency`,decimals:i}:n.includes(`%`)?{kind:`percent`,decimals:i}:n?{kind:`number`,decimals:i}:{kind:`raw`,decimals:0}}function jg(e,t,n){let r=t>0?`.`+`0`.repeat(t):``;switch(e){case`number`:return{format:`0,0${r}`,currency:void 0};case`currency`:return{format:`0,0${r}`,currency:n||`USD`};case`percent`:return{format:`0${r}%`,currency:void 0};default:return{format:void 0,currency:void 0}}}function Mg({measure:e,onPatch:t,disabled:n}){let{kind:r,decimals:i}=Ag(e.format,e.currency),a=e.currency||`USD`,o=(e,n,r)=>t(jg(e,n,r)),s=v(r===`percent`?.1234:1234.5,e.format,e.currency);return(0,Y.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-1.5`,children:[(0,Y.jsx)(K,{label:`Display format`,value:r,options:Tg,onCommit:e=>o(e,i,a),disabled:n}),r!==`raw`&&(0,Y.jsx)(K,{label:`Decimals`,value:String(i),options:Eg,onCommit:e=>o(r,parseInt(e,10)||0,a),disabled:n})]}),r===`currency`&&(0,Y.jsx)(K,{label:`Currency`,value:a,options:Dg,onCommit:e=>o(r,i,e),disabled:n}),r!==`raw`&&(0,Y.jsxs)(`p`,{className:`text-[10px] text-muted-foreground`,children:[`Sample: `,(0,Y.jsx)(`span`,{className:`font-mono tabular-nums`,children:s})]})]})}function Ng(e,t){if(!e||!e.includes(`.`))return null;let n=e.slice(0,e.lastIndexOf(`.`));return n&&!t.includes(n)?n:null}function Pg({rel:e,onAdd:t,disabled:n}){return(0,Y.jsxs)(`p`,{className:`flex items-center gap-1 text-[10px] text-amber-600 dark:text-amber-400`,children:[(0,Y.jsx)(I,{className:`h-3 w-3 shrink-0`}),(0,Y.jsxs)(`span`,{children:[`Relationship `,(0,Y.jsx)(`code`,{className:`font-mono`,children:e}),` isn't in Included relationships.`]}),!n&&t&&(0,Y.jsx)(`button`,{type:`button`,className:`underline hover:no-underline`,onClick:t,children:`Add it`})]})}function Fg({label:e,help:t,value:n,onCommit:r,fields:i,disabled:a}){let{group:o,representable:s}=bg(n),c=o.conditions.length;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:e}),s?(0,Y.jsxs)(Mn,{children:[(0,Y.jsx)(er,{asChild:!0,children:(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,disabled:a,className:`h-8 w-full justify-between text-xs font-normal`,children:[(0,Y.jsx)(`span`,{className:`truncate text-left`,children:c?`${c} condition${c===1?``:`s`}`:(0,Y.jsx)(`span`,{className:`text-muted-foreground`,children:`+ Add filter…`})}),(0,Y.jsx)(Dt,{className:`h-3.5 w-3.5 opacity-60 shrink-0`})]})}),(0,Y.jsx)(Zt,{align:`start`,className:`w-[440px] max-w-[90vw] p-3`,children:i.length===0?(0,Y.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Pick a base object to add filter conditions.`}):(0,Y.jsx)(Bt,{fields:i,value:o,onChange:e=>r(yg(e))})})]}):(0,Y.jsxs)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-2.5 py-1.5 text-[11px] text-muted-foreground`,children:[`Advanced filter (nested / OR) — edit it in the `,(0,Y.jsx)(`span`,{className:`font-medium`,children:`Source`}),` tab.`]}),t&&(0,Y.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:t})]})}function Ig(e,t){return e===t?{object:e}:{object:e,include:[],dimensions:[],measures:[],filter:void 0}}function Lg({draft:e,onPatch:t,readOnly:n,name:r}){let i=typeof e.label==`string`?e.label:``,a=typeof e.description==`string`?e.description:``,o=typeof e.object==`string`?e.object:``,s=Array.isArray(e.include)?e.include:[],c=Array.isArray(e.dimensions)?e.dimensions:[],l=Array.isArray(e.measures)?e.measures:[],u=typeof e.name==`string`?e.name:void 0,d=!r,f=X.useRef(!1),p=typeof e.name==`string`?e.name:``,{options:m,loading:h}=Ki(),{relationships:g,fieldOptions:_,loading:v}=Xi(o,s),y=Qi(u),b=X.useMemo(()=>m.map(e=>({value:e.name,label:e.label})),[m]),x=X.useMemo(()=>g.map(e=>({value:e.name,label:e.label,hint:e.referenceTo?`→ ${e.referenceTo}`:void 0})),[g]),S=X.useMemo(()=>_.map(e=>({value:e.value,label:e.label,hint:e.type,group:e.group})),[_]),C=X.useMemo(()=>_.filter(e=>!e.value.includes(`.`)).map(e=>({value:e.value,label:e.label,type:e.type})),[_]),w=e.filter&&typeof e.filter==`object`?e.filter:void 0,T=b.find(e=>e.value===o)?.label??o,E=(e,n)=>t({dimensions:c.map((t,r)=>r===e?{...t,...n}:t)}),D=(e,n)=>t({measures:l.map((t,r)=>r===e?{...t,...n}:t)}),O=e=>e.includes(`.`)?e.split(`.`).pop()??e:e,k=(e,t)=>{let n=_.find(e=>e.value===t),r=n?.type?{field:t,type:Gi(n.type)}:{field:t};c[e]?.name||(r.name=O(t)),E(e,r)},A=(e,t)=>{let n={field:t};l[e]?.name||(n.name=O(t)),D(e,n)};return(0,Y.jsxs)(vi,{kindLabel:`Dataset`,title:String(i||e.name||`Dataset`),onClose:()=>{},hideClose:!0,children:[u&&!y.loading&&(0,Y.jsx)(`p`,{className:y.reports+y.dashboards>0?`rounded-md border border-amber-500/30 bg-amber-500/5 px-2.5 py-1.5 text-[11px] text-amber-700 dark:text-amber-300`:`text-[11px] text-muted-foreground`,children:y.reports+y.dashboards>0?`Bound by ${y.reports} report${y.reports===1?``:`s`} · ${y.dashboards} dashboard${y.dashboards===1?``:`s`} — changes affect them.`:`Not yet bound by any report or dashboard.`}),d&&(0,Y.jsx)(W,{label:`Name`,value:p,onCommit:e=>{f.current=!0,t({name:ii(e)})},placeholder:`snake_case identifier`,disabled:n,mono:!0}),(0,Y.jsx)(W,{label:`Label`,value:i,onCommit:e=>{let n={label:e};d&&!f.current&&(n.name=ii(e)),t(n)},disabled:n}),(0,Y.jsx)(W,{label:`Description`,value:a,onCommit:e=>t({description:e}),disabled:n}),(0,Y.jsx)(Ji,{label:`Base object`,value:o,onCommit:e=>t(Ig(e,o)),options:b,loading:h,placeholder:`Select an object…`,searchPlaceholder:`Search objects…`,disabled:n,mono:!0}),o&&(c.length>0||l.length>0||s.length>0||!!w)&&(0,Y.jsx)(`p`,{className:`text-[10px] text-muted-foreground`,children:`Changing the base object clears its dimensions, measures, joins & filters.`}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-1.5`,children:[(0,Y.jsx)(Og,{title:`Included relationships`,count:s.length,addLabel:`Add`,onAdd:n?void 0:()=>t({include:ci(s,``)})}),s.length===0?(0,Y.jsxs)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:[`No joins. Add a relationship (a lookup field on `,(0,Y.jsx)(`code`,{children:T||`the base object`}),`) to use `,(0,Y.jsx)(`code`,{children:`relationship.field`}),` dimensions/measures.`]}):s.map((e,r)=>(0,Y.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Y.jsx)(Ji,{value:e,onCommit:e=>t({include:s.map((t,n)=>n===r?e:t)}),options:x,loading:v,placeholder:`Select a relationship…`,searchPlaceholder:`Search relationships…`,disabled:n,mono:!0}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 shrink-0 p-0`,onClick:()=>t({include:si(s,r,null)}),"aria-label":`Remove relationship`,children:(0,Y.jsx)(nt,{className:`h-3.5 w-3.5`})})]},r)),o&&s.length>0&&(0,Y.jsxs)(`div`,{className:`flex flex-wrap items-center gap-x-1 gap-y-0.5 pt-0.5 text-[10px] text-muted-foreground`,children:[(0,Y.jsx)(`span`,{className:`font-mono font-medium`,children:T}),s.map((e,t)=>{let n=g.find(t=>t.name===e);return(0,Y.jsxs)(`span`,{className:`inline-flex items-center gap-1`,children:[(0,Y.jsx)(nn,{className:`h-3 w-3 opacity-60`}),(0,Y.jsxs)(`span`,{className:`font-mono`,children:[e,n?.referenceTo?` (${n.referenceTo})`:``]})]},t)})]})]}),(0,Y.jsx)(`div`,{className:`border-t pt-3`,children:(0,Y.jsx)(Fg,{label:`Scope filter`,help:`Intrinsic scope, ANDed into every query (e.g. exclude soft-deleted records).`,value:w,onCommit:e=>t({filter:e}),fields:C,disabled:n})}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Og,{title:`Dimensions`,count:c.length,addLabel:`Add dimension`,onAdd:n?void 0:()=>t({dimensions:ci(c,{name:``,field:``,type:`string`})})}),c.map((e,r)=>(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px] font-medium text-muted-foreground`,children:[`Dimension `,r+1]}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":`Remove dimension`,title:`Remove dimension`,className:`h-6 w-6 shrink-0 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>t({dimensions:si(c,r,null)}),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(W,{label:`Name`,value:e.name??``,onCommit:e=>E(r,{name:e}),placeholder:`e.g. region`,disabled:n,mono:!0}),(0,Y.jsx)(Ji,{label:`Field`,value:e.field??``,onCommit:e=>k(r,e),options:S,loading:v,placeholder:`field or relationship.field`,searchPlaceholder:`Search fields…`,disabled:n,mono:!0}),(()=>{let r=Ng(e.field,s);return r?(0,Y.jsx)(Pg,{rel:r,disabled:n,onAdd:()=>t({include:ci(s,r)})}):null})(),(0,Y.jsx)(K,{label:`Type`,value:e.type,options:Sg,onCommit:e=>E(r,{type:e}),disabled:n}),(0,Y.jsxs)(kg,{children:[(0,Y.jsx)(W,{label:`Label (optional)`,value:e.label??``,onCommit:e=>E(r,{label:e||void 0}),placeholder:e.name||`Display label`,disabled:n}),e.type===`date`&&(0,Y.jsx)(K,{label:`Date bucket`,value:e.dateGranularity??``,options:Cg,onCommit:e=>E(r,{dateGranularity:e||void 0}),disabled:n})]})]},r))]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Og,{title:`Measures`,count:l.length,addLabel:`Add measure`,onAdd:n?void 0:()=>t({measures:ci(l,{name:``,aggregate:`sum`,field:``})})}),l.map((e,r)=>{let i=l.filter((e,t)=>t!==r).map(e=>e.name).filter(e=>!!e),a=e.derived;return(0,Y.jsxs)(`div`,{className:`rounded-md border p-2 space-y-1.5`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px] font-medium text-muted-foreground`,children:[`Measure `,r+1]}),!n&&(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`sm`,"aria-label":`Remove measure`,title:`Remove measure`,className:`h-6 w-6 shrink-0 p-0 text-muted-foreground hover:text-destructive`,onClick:()=>t({measures:si(l,r,null)}),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]}),(0,Y.jsx)(W,{label:`Name`,value:e.name??``,onCommit:e=>D(r,{name:e}),placeholder:`e.g. revenue`,disabled:n,mono:!0}),(0,Y.jsx)(K,{label:`Aggregate`,value:e.aggregate,options:xg,onCommit:e=>D(r,{aggregate:e}),disabled:n}),(0,Y.jsx)(Ji,{label:`Field`,value:e.field??``,onCommit:e=>A(r,e),options:S,loading:v,placeholder:`field (optional for count)`,searchPlaceholder:`Search fields…`,disabled:n,mono:!0}),(()=>{let r=Ng(e.field,s);return r?(0,Y.jsx)(Pg,{rel:r,disabled:n,onAdd:()=>t({include:ci(s,r)})}):null})(),(0,Y.jsxs)(kg,{children:[(0,Y.jsx)(W,{label:`Label (optional)`,value:e.label??``,onCommit:e=>D(r,{label:e||void 0}),placeholder:e.name||`Display label`,disabled:n}),(0,Y.jsx)(Mg,{measure:e,onPatch:e=>D(r,e),disabled:n}),(0,Y.jsx)(Fg,{label:`Filter (measure-scoped)`,help:`Only rows matching this filter feed this measure (e.g. won_amount = sum(amount) where stage = won).`,value:e.filter,onCommit:e=>D(r,{filter:e}),fields:C,disabled:n}),(0,Y.jsx)(G,{label:`Derived — computed from other measures`,value:!!a,onCommit:e=>D(r,{derived:e?{op:`ratio`,of:[]}:void 0}),disabled:n}),a&&(0,Y.jsxs)(`div`,{className:`space-y-1.5 rounded-md border border-dashed p-2`,children:[(0,Y.jsx)(K,{label:`Operation`,value:a.op,options:wg,onCommit:e=>D(r,{derived:{...a,op:e}}),disabled:n}),(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Operands (other measures)`}),(()=>{let e=a.op===`ratio`||a.op===`difference`?2:1;return(Array.isArray(a.of)?a.of.length:0)<e?(0,Y.jsxs)(`p`,{className:`text-[10px] text-amber-600 dark:text-amber-400`,children:[`Select `,e===2?`exactly 2 measures`:`at least 1 measure`,` for `,a.op,`.`]}):null})(),i.length===0?(0,Y.jsx)(`p`,{className:`text-[11px] italic text-muted-foreground`,children:`Add other measures first.`}):(0,Y.jsx)(`div`,{className:`space-y-1`,children:i.map(e=>(0,Y.jsx)(G,{label:e,value:Array.isArray(a.of)&&a.of.includes(e),disabled:n,onCommit:t=>{let n=Array.isArray(a.of)?a.of:[],i=t?[...n,e]:n.filter(t=>t!==e);D(r,{derived:{...a,of:i}})}},e))})]})]})]},r)})]})]})}function Rg(e){let t=mi(),[n,r]=X.useState([]),[i,a]=X.useState(!!e);return X.useEffect(()=>{if(!e){r([]),a(!1);return}let n=!1;return a(!0),t.list(e).then(e=>{n||(r((e??[]).map(e=>e&&typeof e==`object`&&`item`in e?e.item:e).filter(e=>typeof e?.name==`string`&&e.name).map(e=>({value:e.name,label:e.label?`${e.label} (${e.name})`:e.name})).sort((e,t)=>e.value.localeCompare(t.value))),a(!1))}).catch(()=>{n||(r([]),a(!1))}),()=>{n=!0}},[t,e]),{options:n,loading:i}}var zg=[{value:`script`,label:`Script — run an expression / sandboxed JS`},{value:`api`,label:`API — call an endpoint`},{value:`flow`,label:`Flow — invoke a flow`},{value:`modal`,label:`Modal — open a modal/page`},{value:`form`,label:`Form — open a FormView`},{value:`url`,label:`URL — navigate to a link`}],Bg=[{value:`primary`,label:`Primary`},{value:`secondary`,label:`Secondary`},{value:`danger`,label:`Danger`},{value:`ghost`,label:`Ghost`},{value:`link`,label:`Link`}],Vg=[{value:`action:button`,label:`Button`},{value:`action:icon`,label:`Icon only`},{value:`action:menu`,label:`Menu item`},{value:`action:group`,label:`Button group`}],Hg=[{value:`create`,label:`Create`},{value:`edit`,label:`Edit`},{value:`delete`,label:`Delete`},{value:`custom`,label:`Custom`}],Ug=[{value:`POST`,label:`POST`},{value:`PATCH`,label:`PATCH`},{value:`PUT`,label:`PUT`},{value:`DELETE`,label:`DELETE`}],Wg=[{value:`expression`,label:`Expression (L1)`},{value:`js`,label:`Sandboxed JS (L2)`}],Gg=[{value:`text`,label:`Text`},{value:`textarea`,label:`Long text`},{value:`number`,label:`Number`},{value:`boolean`,label:`Checkbox`},{value:`select`,label:`Select`},{value:`date`,label:`Date`},{value:`datetime`,label:`Date/time`},{value:`lookup`,label:`Lookup`}],Kg=[{value:`record_header`,label:`Record header`},{value:`record_more`,label:`Record · more menu`},{value:`record_section`,label:`Record · section`},{value:`record_related`,label:`Record · related list`},{value:`list_toolbar`,label:`List toolbar`},{value:`list_item`,label:`List · row`},{value:`global_nav`,label:`Global nav / command palette`}],qg={url:{label:`URL`,placeholder:"https://… or /path?x=${param.x}",hint:"Supports ${param.x} and ${ctx.x} interpolation."},flow:{label:`Flow name`,placeholder:`snake_case flow`,hint:`The flow to invoke when clicked.`},modal:{label:`Modal / page name`,placeholder:`snake_case page`,hint:`The modal or page to open.`},form:{label:`Form view name`,placeholder:`object.viewKey`,hint:`Opens /console/forms/<name>.`},api:{label:`API endpoint`,placeholder:`/api/v1/…`,hint:`Endpoint called with the request body below.`}},Jg={flow:`flow`,modal:`page`,form:`view`};function Yg({type:e,value:t,onCommit:n,cfg:r,readOnly:i}){let a=Jg[e]??null,{options:o}=Rg(a),s=!!a&&o.length>0,c=s&&t&&!o.some(e=>e.value===t)?[{value:t,label:`${t} (not found)`},...o]:o;return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[s?(0,Y.jsx)(K,{label:`${r.label} *`,value:t||void 0,options:c,onCommit:n,disabled:i}):(0,Y.jsx)(W,{label:`${r.label} *`,value:t,onCommit:n,placeholder:r.placeholder,disabled:i,mono:!0}),(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:r.hint})]})}var Xg=[`name`,`label`,`objectName`,`icon`,`variant`,`component`,`type`,`target`,`execute`,`body`,`method`,`params`,`locations`,`bulkEnabled`,`confirmText`,`successMessage`,`errorMessage`,`refreshAfter`,`undoable`,`mode`,`shortcut`,`visible`,`disabled`,`aiExposed`,`aiDescription`];function Zg({title:e,hint:t}){return(0,Y.jsxs)(`div`,{className:`space-y-0.5`,children:[(0,Y.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-wide text-muted-foreground`,children:e}),t&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:t})]})}function Qg(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`){let t=e;return t.en??t[`en-US`]??Object.values(t)[0]??``}return String(e)}function $g({label:e,value:t,onCommit:n,disabled:r,hint:i}){let{options:a}=qc();return(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[a.length===0?(0,Y.jsx)(W,{label:e,value:t??``,placeholder:`snake_case object`,onCommit:n,disabled:r,mono:!0}):(0,Y.jsx)(K,{label:e,value:t||void 0,options:[{value:``,label:`— None (global) —`},...a],onCommit:n,disabled:r}),i&&(0,Y.jsx)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:i})]})}function e_({label:e,objectName:t,value:n,onCommit:r,disabled:i}){let{fields:a}=Di(t),o=X.useMemo(()=>a.filter(e=>!e.hidden).map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name})),[a]);return!t||o.length===0?(0,Y.jsx)(W,{label:e,value:n??``,onCommit:r,disabled:i,mono:!0}):(0,Y.jsx)(K,{label:e,value:n||void 0,options:[{value:``,label:`—`},...o],onCommit:r,disabled:i})}function t_({draft:e,onPatch:t,readOnly:n,locale:r,serverSchema:i}){let a=X.useCallback(e=>J(e,r),[r]),o=t=>typeof e[t]==`string`?e[t]:``,s=o(`type`)||`script`,c=o(`objectName`),l=e.body&&typeof e.body==`object`?e.body:{},u=Array.isArray(e.params)?e.params:[],d=Array.isArray(e.locations)?e.locations:[],f=e.aiExposed===!0,p=typeof e.aiDescription==`string`?e.aiDescription:``,m=e=>t({body:{...l,...e}}),h=(e,n)=>t({params:u.map((t,r)=>r===e?{...t,...n}:t)}),g=(e,n)=>{t({locations:n?[...new Set([...d,e])]:d.filter(t=>t!==e)})},_=qg[s],v=i;return(0,Y.jsxs)(vi,{kindLabel:a(`engine.inspector.action.kind`),title:String(Qg(e.label)||e.name||a(`engine.inspector.action.kind`)),onClose:()=>{},closeLabel:a(`engine.inspector.action.close`),hideClose:!0,children:[(0,Y.jsx)(Zg,{title:`Basics`}),(0,Y.jsx)(W,{label:`Label`,value:Qg(e.label),onCommit:e=>t({label:e}),placeholder:`Button text shown to users`,disabled:n}),(0,Y.jsx)(W,{label:`Name`,value:o(`name`),onCommit:e=>t({name:e}),placeholder:`snake_case identifier`,disabled:n,mono:!0}),(0,Y.jsx)($g,{label:`Object`,value:c,onCommit:e=>t({objectName:e||void 0}),disabled:n,hint:c?`Bound action — surfaces in this object’s views per the placement below.`:`Empty = global action — must be referenced by a page’s quick actions, global nav, a flow, or AI to appear.`}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Icon`}),(0,Y.jsx)(Mi,{schema:{type:`string`},value:o(`icon`),onChange:e=>t({icon:e||void 0}),readOnly:n})]}),(0,Y.jsx)(K,{label:`Variant`,value:o(`variant`)||void 0,options:Bg,onCommit:e=>t({variant:e}),disabled:n})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-3`,children:[(0,Y.jsx)(Zg,{title:`Behavior`,hint:`What happens when the action is triggered.`}),(0,Y.jsx)(K,{label:`Type`,value:s,options:zg,onCommit:e=>t({type:e}),disabled:n}),s===`script`?(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(K,{label:`Script language`,value:(typeof l.language==`string`?l.language:void 0)||`expression`,options:Wg,onCommit:e=>m({language:e}),disabled:n}),(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Script body`}),(0,Y.jsx)(tr,{value:typeof l.source==`string`?l.source:``,onChange:e=>m({source:e.target.value}),disabled:n,spellCheck:!1,rows:5,placeholder:`// (input, ctx) => result
|
|
22
22
|
return { ok: true }`,className:`text-xs font-mono`}),(0,Y.jsxs)(`div`,{className:`text-[11px] text-muted-foreground/70`,children:[`Runs in the sandbox as `,(0,Y.jsx)(`code`,{children:`(input, ctx) => Promise<output>`}),`.`]})]})]}):(0,Y.jsxs)(Y.Fragment,{children:[s===`api`&&(0,Y.jsx)(K,{label:`Method`,value:o(`method`)||`POST`,options:Ug,onCommit:e=>t({method:e}),disabled:n}),_&&(0,Y.jsx)(Yg,{type:s,value:o(`target`),onCommit:e=>t({target:e}),cfg:_,readOnly:n})]})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Zg,{title:`Inputs`,hint:`Collected from the user in a dialog before the action runs.`}),u.length===0?(0,Y.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2.5 text-center text-[11px] text-muted-foreground`,children:`No inputs — the action runs immediately on click.`}):u.map((e,r)=>(0,Y.jsxs)(`div`,{className:`space-y-2 rounded-md border border-border p-2`,children:[(0,Y.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Y.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`#`,r+1]}),(0,Y.jsxs)(`div`,{className:`flex items-center gap-0.5`,children:[(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-6 w-6`,disabled:n||r===0,"aria-label":`Move up`,onClick:()=>t({params:Ii(u,r,r-1)}),children:`↑`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-6 w-6`,disabled:n||r===u.length-1,"aria-label":`Move down`,onClick:()=>t({params:Ii(u,r,r+1)}),children:`↓`}),(0,Y.jsx)(H,{type:`button`,variant:`ghost`,size:`icon`,className:`h-6 w-6`,disabled:n,"aria-label":`Remove input`,onClick:()=>t({params:si(u,r,null)}),children:(0,Y.jsx)(lr,{className:`h-3.5 w-3.5`})})]})]}),c?(0,Y.jsx)(e_,{label:`Bind to field`,objectName:c,value:e.field,onCommit:e=>h(r,{field:e||void 0}),disabled:n}):null,!e.field&&(0,Y.jsx)(W,{label:`Name`,value:e.name??``,onCommit:e=>h(r,{name:e}),placeholder:`request-body key`,disabled:n,mono:!0}),(0,Y.jsx)(W,{label:`Label`,value:Qg(e.label),onCommit:e=>h(r,{label:e}),disabled:n}),!e.field&&(0,Y.jsx)(K,{label:`Type`,value:e.type||void 0,options:Gg,onCommit:e=>h(r,{type:e}),disabled:n}),(0,Y.jsx)(W,{label:`Placeholder`,value:e.placeholder??``,onCommit:e=>h(r,{placeholder:e}),disabled:n}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1`,children:[(0,Y.jsx)(G,{label:`Required`,value:!!e.required,onCommit:e=>h(r,{required:e}),disabled:n}),(0,Y.jsx)(G,{label:`Pre-fill from row`,value:!!e.defaultFromRow,onCommit:e=>h(r,{defaultFromRow:e}),disabled:n})]})]},r)),!n&&(0,Y.jsxs)(H,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>t({params:ci(u,{})}),children:[(0,Y.jsx)(R,{className:`mr-1 h-3.5 w-3.5`}),` Add input`]})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Zg,{title:`Placement`,hint:`Where this action surfaces in the UI.`}),(0,Y.jsx)(`div`,{className:`grid grid-cols-1 gap-1`,children:Kg.map(e=>(0,Y.jsx)(G,{label:e.label,value:d.includes(e.value),onCommit:t=>g(e.value,t),disabled:n},e.value))}),(0,Y.jsx)(`div`,{className:`grid grid-cols-2 gap-2 pt-1`,children:(0,Y.jsx)(K,{label:`Component`,value:o(`component`)||void 0,options:Vg,onCommit:e=>t({component:e}),disabled:n})}),(0,Y.jsx)(G,{label:`Bulk — apply to multiple selected rows`,value:!!e.bulkEnabled,onCommit:e=>t({bulkEnabled:e}),disabled:n})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Zg,{title:`Feedback`,hint:`Confirmation and post-run messaging.`}),(0,Y.jsx)(W,{label:`Confirm prompt`,value:Qg(e.confirmText),onCommit:e=>t({confirmText:e}),placeholder:`Ask before running (leave blank to skip)`,disabled:n}),(0,Y.jsx)(W,{label:`Success message`,value:Qg(e.successMessage),onCommit:e=>t({successMessage:e}),disabled:n}),(0,Y.jsx)(W,{label:`Error message`,value:Qg(e.errorMessage),onCommit:e=>t({errorMessage:e}),disabled:n}),(0,Y.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Y.jsx)(K,{label:`Mode`,value:o(`mode`)||void 0,options:Hg,onCommit:e=>t({mode:e}),disabled:n}),(0,Y.jsx)(W,{label:`Shortcut`,value:o(`shortcut`),onCommit:e=>t({shortcut:e}),placeholder:`e.g. Ctrl+S`,disabled:n,mono:!0})]}),(0,Y.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1`,children:[(0,Y.jsx)(G,{label:`Refresh view after`,value:!!e.refreshAfter,onCommit:e=>t({refreshAfter:e}),disabled:n}),(0,Y.jsx)(G,{label:`Offer undo`,value:!!e.undoable,onCommit:e=>t({undoable:e}),disabled:n})]})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-3`,children:[(0,Y.jsx)(Zg,{title:`Conditions`,hint:`No-code predicates over the record / user / ctx (compiled to CEL).`}),(0,Y.jsx)(Oi,{label:`Visible when`,value:typeof e.visible==`string`?e.visible:``,onCommit:e=>t({visible:e||void 0}),objectName:c,disabled:n}),(0,Y.jsx)(Oi,{label:`Disabled when`,value:typeof e.disabled==`string`?e.disabled:``,onCommit:e=>t({disabled:e||void 0}),objectName:c,disabled:n})]}),(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,Y.jsx)(Zg,{title:`AI exposure`,hint:`Opt-in: expose this action to AI agents as a callable tool.`}),(0,Y.jsx)(G,{label:`Expose to AI agents`,value:f,onCommit:e=>t({aiExposed:e}),disabled:n}),f?(0,Y.jsxs)(`div`,{className:`space-y-1`,children:[(0,Y.jsx)(B,{className:`text-xs text-muted-foreground`,children:`Tool description (required, ≥40 chars)`}),(0,Y.jsx)(tr,{value:p,onChange:e=>t({aiDescription:e.target.value}),disabled:n,rows:3,placeholder:`When and why an agent should call this action…`,className:`text-xs`}),p.length<40&&(0,Y.jsx)(`div`,{className:`text-[11px] text-destructive`,children:`A ≥40-character description is required while exposed.`})]}):null]}),v&&(0,Y.jsxs)(`div`,{className:`border-t pt-3 space-y-1.5`,children:[(0,Y.jsx)(Zg,{title:a(`engine.inspector.moreFields`),hint:`Advanced / rarely-used properties.`}),(0,Y.jsx)(Fi,{schema:v,value:e,hiddenFields:Xg,readOnly:n,onChange:e=>t(e)})]})]})}function n_(){xs(`dashboard`,$i),ws(`dashboard`,Yi),xs(`flow`,jh),xs(`app`,Lh),xs(`view`,Kh),ws(`view`,qh),xs(`page`,dl),ws(`report`,Ni),xs(`object`,rg),ws(`object`,mg),ws(`dataset`,Lg),ws(`action`,t_)}var r_=t({MetadataDiagnosticsPage:()=>hc,MetadataDirectoryPage:()=>Ka,MetadataResourceEditPage:()=>lc,MetadataResourceHistoryPage:()=>us,MetadataResourceListPage:()=>Ao,StudioHomePage:()=>mo});wc(),Oc(),Fc(),Fm(),n_();export{io as a,Ea as c,ta as d,To as i,aa as l,xc as n,Ka as o,pc as r,za as s,r_ as t,ea as u};
|