@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.
Files changed (72) hide show
  1. package/dist/assets/{AdapterProvider-BTAMdG2T.js → AdapterProvider-BPgD5wI1.js} +1 -1
  2. package/dist/assets/{AiPendingActionsPage-BtiQFQw8.js → AiPendingActionsPage-Cojy8a-z.js} +1 -1
  3. package/dist/assets/{ApiConsolePage-CQJbzAsw.js → ApiConsolePage-o44winom.js} +1 -1
  4. package/dist/assets/{AppDocsIndex-CbHC6KGX.js → AppDocsIndex-CnVwFuo5.js} +1 -1
  5. package/dist/assets/{AppManagementPage-DOoQrTPO.js → AppManagementPage-Dzv2LTfe.js} +1 -1
  6. package/dist/assets/{ApprovalsInboxPage-D6eWYxCu.js → ApprovalsInboxPage-CbMAm2Z1.js} +1 -1
  7. package/dist/assets/{AuditLogPage-F85cQBBY.js → AuditLogPage-Ckb7Ei0l.js} +1 -1
  8. package/dist/assets/{ComponentNavView-g9qw3mhW.js → ComponentNavView-C1ZKriwP.js} +1 -1
  9. package/dist/assets/ConsoleFloatingChatbot-DqrmAZNg.js +1 -0
  10. package/dist/assets/{DashboardView-mIWO-jW_.js → DashboardView-PNh3ds7Y.js} +1 -1
  11. package/dist/assets/{DashboardWidgetInspector-DOnyBhGN.js → DashboardWidgetInspector-BqmZ8NCC.js} +1 -1
  12. package/dist/assets/{DeveloperHubPage-Ci0wA8GZ.js → DeveloperHubPage-YHIc76u2.js} +1 -1
  13. package/dist/assets/{ExpressionProvider-NqLS0ljf.js → ExpressionProvider-CMntDoz9.js} +1 -1
  14. package/dist/assets/{FlowRunsPage-CNz2_VFK.js → FlowRunsPage-daH77deA.js} +1 -1
  15. package/dist/assets/{IntegrationsPage-CAZ3nsKJ.js → IntegrationsPage-FpPdGLBF.js} +1 -1
  16. package/dist/assets/{InterfaceListPage-D1BbH0Iy.js → InterfaceListPage-Npe_tn_H.js} +1 -1
  17. package/dist/assets/{ManagedByBadge-6DwSVsdr.js → ManagedByBadge-CLEdt1ik.js} +1 -1
  18. package/dist/assets/{MarketplaceAccessDenied-Cyx7lSjy.js → MarketplaceAccessDenied-DiK0S3Vq.js} +1 -1
  19. package/dist/assets/{MarketplaceInstalledPage-C41H1YlB.js → MarketplaceInstalledPage-ytCNj-9Y.js} +1 -1
  20. package/dist/assets/{MarketplacePackagePage-Bihb2q1b.js → MarketplacePackagePage-CAsMrnZF.js} +1 -1
  21. package/dist/assets/{MarketplacePage-C2B6TMNM.js → MarketplacePage-Ct4PVYqJ.js} +1 -1
  22. package/dist/assets/{MetadataInspector-COEBMw6y.js → MetadataInspector-B3LWAl8X.js} +1 -1
  23. package/dist/assets/{MetadataProvider-D234gTjV.js → MetadataProvider-BRGGbotZ.js} +1 -1
  24. package/dist/assets/{PageView-DuiaqvzN.js → PageView-VljnDnGh.js} +1 -1
  25. package/dist/assets/{ProfilePage-B1oCou0F.js → ProfilePage-D6bk--bm.js} +1 -1
  26. package/dist/assets/{PublicFormsPage-C2prdsH6.js → PublicFormsPage-gyZqil7Y.js} +1 -1
  27. package/dist/assets/{RecordDetailView-B-AuOKPI.js → RecordDetailView-ClJoPCbl.js} +2 -2
  28. package/dist/assets/{RecordFormPage-CpKMoOCj.js → RecordFormPage-SzhX0SxR.js} +1 -1
  29. package/dist/assets/{ReportDefaultInspector-DxP-Ac7I.js → ReportDefaultInspector-BIOfFevD.js} +2 -2
  30. package/dist/assets/{ReportView-Cw9Ompki.js → ReportView-Bbmeyhqd.js} +1 -1
  31. package/dist/assets/{SearchResultsPage-CZ038ncU.js → SearchResultsPage-JwPvnRco.js} +1 -1
  32. package/dist/assets/{SettingsHub-BXe-fVlJ.js → SettingsHub-BbH3HtvN.js} +1 -1
  33. package/dist/assets/{SettingsView-DxPgTnlF.js → SettingsView-R0t6xrOR.js} +1 -1
  34. package/dist/assets/{SystemHubPage-CJq_1ITt.js → SystemHubPage-DW-xYOhx.js} +1 -1
  35. package/dist/assets/{data-adapter-02g96tfY.js → data-adapter-BwlZo45L.js} +1 -1
  36. package/dist/assets/{framework-h98DIM1k.js → framework-CakMZS2A.js} +7 -7
  37. package/dist/assets/{highlighted-body-OFNGDK62-DO9p_wSr.js → highlighted-body-OFNGDK62-BGuZxdtV.js} +1 -1
  38. package/dist/assets/{index-BQhiWf8_.js → index-Bc8lMePA.js} +1 -1
  39. package/dist/assets/index-CKUQ3pPE.css +2 -0
  40. package/dist/assets/mermaid-GHXKKRXX-BjC9P-Az.js +1 -0
  41. package/dist/assets/{metadata-admin-DStYGsRM.js → metadata-admin-CmNQ3PCe.js} +4 -4
  42. package/dist/assets/{plugin-calendar-BYmYEyQk.js → plugin-calendar-D1hSxakw.js} +1 -1
  43. package/dist/assets/{plugin-charts-BDFf0TCn.js → plugin-charts-DUJQWrQu.js} +1 -1
  44. package/dist/assets/{plugin-chatbot-CnuZn8AC.js → plugin-chatbot-xCaZPNnP.js} +4 -4
  45. package/dist/assets/{plugin-dashboard-CuwYQhsg.js → plugin-dashboard-C5-M_XlX.js} +1 -1
  46. package/dist/assets/{plugin-form-CH8ruD9E.js → plugin-form-C7Hglo5P.js} +1 -1
  47. package/dist/assets/{plugin-gantt-BB8ZeREv.js → plugin-gantt-C_CBI9Ze.js} +1 -1
  48. package/dist/assets/{plugin-grid-D414NLNP.js → plugin-grid-DxUHFaSG.js} +1 -1
  49. package/dist/assets/{plugin-kanban-BRFJEEAA.js → plugin-kanban-fK0Hn7gr.js} +1 -1
  50. package/dist/assets/{plugin-map-rEWoyyKa.js → plugin-map-CFUHBBgY.js} +1 -1
  51. package/dist/assets/{plugin-markdown-BgV76qm3.js → plugin-markdown-D2JDzxOb.js} +1 -1
  52. package/dist/assets/{plugin-report-C-YPOtvZ.js → plugin-report-C_gu6Sl0.js} +1 -1
  53. package/dist/assets/{plugin-timeline-CC91-fmI.js → plugin-timeline-JAVlYIZG.js} +1 -1
  54. package/dist/assets/{plugin-tree-D2QWz1x1.js → plugin-tree-ckWxLNeS.js} +1 -1
  55. package/dist/assets/{plugin-view-C6iEzx93.js → plugin-view-CYd_0MnO.js} +1 -1
  56. package/dist/assets/{plugins-views-CcoNygsH.js → plugins-views-CpVdFGRz.js} +2 -2
  57. package/dist/assets/{skeletons-BQ5aRDUn.js → skeletons-CTmAPzFj.js} +1 -1
  58. package/dist/assets/{src-C4OnKiir.js → src-CMNhRk8x.js} +1 -1
  59. package/dist/assets/src-DZhiMT1j.js +2 -0
  60. package/dist/assets/{types-BUZu4QOP.js → types-5UGg6DKH.js} +1 -1
  61. package/dist/assets/ui-components-BXvcyYmR.js +42 -0
  62. package/dist/assets/{ui-layout-BwokMuBv.js → ui-layout-DAe4Nna8.js} +1 -1
  63. package/dist/assets/{useActionModal-ChUaxcEW.js → useActionModal-B6_KUPqx.js} +1 -1
  64. package/dist/assets/{useOpenRecordList-BkSEs2q6.js → useOpenRecordList-yTGpfA54.js} +1 -1
  65. package/dist/assets/{useReconcileOnError-FPUCNTHc.js → useReconcileOnError-oxCJ7_s6.js} +1 -1
  66. package/dist/index.html +4 -4
  67. package/package.json +1 -1
  68. package/dist/assets/ConsoleFloatingChatbot-Cy-Ny_TS.js +0 -1
  69. package/dist/assets/index-WhD62Q-7.css +0 -2
  70. package/dist/assets/mermaid-GHXKKRXX-DEmtnxCC.js +0 -1
  71. package/dist/assets/src-CKHT6scJ.js +0 -2
  72. 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"])))=>i.map(i=>d[i]);
2
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,m as n,t as r}from"./vendor-react-ClIa1CJA.js";import{R as i,f as a,h as o}from"./vendor-objectstack-BTQLr7T3.js";import{$o as s,$s as c,Ar as l,Cc as u,Fs as d,Ga as f,Gi as p,Go as m,Gt as h,Ha as g,Jn as _,Jt as v,Ka as y,Ko as b,Kt as x,Na as S,Oc as C,Oi as w,Or as T,Pa as E,Po as ee,Pr as D,Qr as O,Qs as k,Ra as A,Rs as te,Ss as ne,Ti as re,Ua as ie,Un as ae,Uo as oe,Ur as se,Vs as j,Wn as ce,Xn as le,Xs as ue,Yi as M,Yn as de,Yr as fe,Yt as N,Z as pe,Zn as me,_c as he,_i as ge,_o as _e,_t as ve,ac as ye,an as be,ar as xe,at as Se,ci as Ce,ct as we,dn as P,ds as Te,ea as Ee,fo as De,hc as Oe,hi as ke,ho as Ae,hs as je,ia as Me,in as Ne,ks as Pe,lt as Fe,ma as Ie,mc as Le,mi as Re,on as ze,ot as Be,qn as Ve,qr as F,qt as I,ra as He,rt as Ue,sn as L,so as We,st as Ge,ta as Ke,ti as qe,tt as Je,us as Ye,ut as Xe,va as Ze,xr as R,ya as Qe,yi as $e,zi as et,zs as tt}from"./ui-components-C9egdVxV.js";import{n as nt}from"./data-adapter-02g96tfY.js";import{a as rt}from"./MetadataProvider-D234gTjV.js";var z=r(),B=e(t(),1);function it(e){let t=rt();return(0,B.useMemo)(()=>{let n=new nt({baseUrl:``,previewDrafts:t});return e?n.withEnvironment(e):n},[e,t])}function at(e){let t=new Set(e.map(e=>e.type));return e.filter(e=>{if(!/[A-Z]/.test(e.type))return!0;let n=e.type.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`);return!(n!==e.type&&t.has(n))})}function ot(e){let[t,n]=(0,B.useState)(!0),[r,i]=(0,B.useState)(null),[a,o]=(0,B.useState)([]);return(0,B.useEffect)(()=>{let t=!1;return n(!0),i(null),(async()=>{try{let r=await e.listTypes(),i;if(Array.isArray(r))i=r.map(e=>typeof e==`string`?{type:e}:e);else{let e=r?.entries;i=Array.isArray(e)&&e.length>0?e:(r?.types??[]).map(e=>({type:e}))}t||(o(at(i)),n(!1))}catch(e){t||(i(e?.message??String(e)),n(!1))}})(),()=>{t=!0}},[e]),{loading:t,error:r,entries:a}}function st(e,t,n=[`name`,`label`,`description`]){if(!t)return!0;let r=t.toLowerCase();for(let t of n){let n=e[t];if(typeof n==`string`&&n.toLowerCase().includes(r))return!0}return!1}function ct(e,t=`error`,n){let[r,i]=(0,B.useState)(!0),[a,o]=(0,B.useState)(null),[s,c]=(0,B.useState)({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),[l,u]=(0,B.useState)(0);return(0,B.useEffect)(()=>{let r=!1;return i(!0),o(null),(async()=>{try{let a=await e.diagnostics(n?{severity:t,packageId:n}:{severity:t});if(r)return;c(a),i(!1)}catch(e){if(r)return;o(e?.message??String(e)),c({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),i(!1)}})(),()=>{r=!0}},[e,t,n,l]),{loading:r,error:a,summary:s,byType:(0,B.useMemo)(()=>{let e={};for(let t of s.entries)(t.diagnostics?.errors?.length??0)>0&&(e[t.type]=(e[t.type]??0)+1);return e},[s]),warnByType:(0,B.useMemo)(()=>{let e={};for(let t of s.entries){let n=t.diagnostics?.errors?.length??0,r=t.diagnostics?.warnings?.length??0;n===0&&r>0&&(e[t.type]=(e[t.type]??0)+1)}return e},[s]),countsByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.count;return e},[s]),lockedByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))typeof n.locked==`number`&&n.locked>0&&(e[t]=n.locked);return e},[s]),packagesByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.packages??[];return e},[s]),allPackages:(0,B.useMemo)(()=>{let e=new Set;for(let t of Object.values(s.stats??{}))for(let n of t.packages??[])e.add(n);return[...e].sort()},[s]),reload:()=>u(e=>e+1)}}function lt({kindLabel:e,title:t,onClose:n,closeLabel:r=`Close`,children:i,footer:a,headerActions:o,hideClose:s}){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-2 border-b px-4 py-2.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(xe,{variant:`secondary`,className:`text-[10px] uppercase tracking-wider`,children:e}),(0,z.jsx)(`div`,{className:`mt-1 truncate text-sm font-medium`,title:t,children:t})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[o,!s&&(0,z.jsx)(R,{variant:`ghost`,size:`sm`,onClick:n,"aria-label":r,className:`h-7 w-7 p-0`,children:(0,z.jsx)(T,{className:`h-4 w-4`})})]})]}),(0,z.jsx)(`div`,{className:`flex-1 overflow-auto px-4 py-3 space-y-3`,children:i}),a&&(0,z.jsx)(`div`,{className:`border-t px-4 py-2.5`,children:a})]})}function ut({index:e,total:t,onMove:n,upLabel:r=`Move up`,downLabel:i=`Move down`,disabled:a}){if(t<=1||e<0)return null;let o=!a&&e>0,s=!a&&e<t-1;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>o&&n(e-1),disabled:!o,"aria-label":r,title:r,children:(0,z.jsx)(he,{className:`h-4 w-4`})}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>s&&n(e+1),disabled:!s,"aria-label":i,title:i,children:(0,z.jsx)(u,{className:`h-4 w-4`})})]})}function V({label:e,value:t,onCommit:n,onBlur:r,placeholder:i,disabled:a,mono:o,testId:s}){return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsx)(L,{value:t,onChange:e=>n(e.target.value),onBlur:e=>r?.(e.target.value),placeholder:i,disabled:a,"data-testid":s,className:C(`h-8 text-sm`,o&&`font-mono`)})]})}function dt({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsx)(L,{type:`number`,value:t??``,onChange:e=>{let t=e.target.value;n(t===``?void 0:Number(t))},placeholder:r,disabled:i,className:`h-8 text-sm`})]})}function H({label:e,value:t,options:n,onCommit:r,placeholder:i=`—`,disabled:a}){let o=e=>e===``?ft:e,s=e=>e===ft?``:e;return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsxs)(h,{value:o(t??``),onValueChange:e=>r(s(e)),disabled:a,children:[(0,z.jsx)(v,{className:`h-8 text-sm`,children:(0,z.jsx)(N,{placeholder:i})}),(0,z.jsx)(x,{children:n.map(e=>(0,z.jsx)(I,{value:o(e.value),children:e.label},e.value))})]})]})}var ft=`__inspector_select_none__`;function pt({label:e,value:t,onCommit:n,disabled:r}){return(0,z.jsxs)(`label`,{className:`flex items-center gap-2 text-xs cursor-pointer select-none`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:t,disabled:r,onChange:e=>n(e.target.checked),className:`h-3.5 w-3.5`}),(0,z.jsx)(`span`,{children:e})]})}function mt({label:e,onClick:t,disabled:n}){return(0,z.jsxs)(R,{variant:`outline`,size:`sm`,onClick:t,disabled:n,className:`w-full gap-1.5 text-muted-foreground hover:border-destructive/40 hover:bg-destructive/5 hover:text-destructive`,children:[(0,z.jsx)(F,{className:`h-3.5 w-3.5`}),e]})}function ht({message:e}){return(0,z.jsx)(`div`,{className:`text-xs italic text-muted-foreground p-4 text-center`,children:e})}function gt(e,t,n){let r=Array.isArray(e)?[...e]:[];return n===null?r.splice(t,1):r[t]=n,r}function _t(e,t){let n=Array.isArray(e)?[...e]:[];return n.push(t),n}function vt(e,t,n){let r=Array.isArray(e)?[...e]:[];if(t<0||t>=r.length)return r;let i=Math.max(0,Math.min(r.length-1,n));if(i===t)return r;let[a]=r.splice(t,1);return r.splice(i,0,a),r}function yt(e,t){let n=new Set(t.filter(e=>typeof e==`string`));for(let t=1;t<1e4;t++){let r=`${e}_${t}`;if(!n.has(r))return r}return`${e}_${Date.now()}`}function bt(e){return Array.isArray(e)?{shape:`array`,entries:e.map((e,t)=>{let{name:n,...r}=e??{};return{name:typeof n==`string`&&n?n:`field_${t+1}`,def:r}})}:e&&typeof e==`object`?{shape:`record`,entries:Object.entries(e).map(([e,t])=>({name:e,def:{...t??{}}}))}:{shape:`record`,entries:[]}}function xt(e){if(e.shape===`array`)return e.entries.map(e=>({name:e.name,...e.def}));let t={};for(let n of e.entries)t[n.name]=n.def;return t}function St(e,t){return e.entries.findIndex(e=>e.name===t)}function Ct(e,t,n){let r={type:t,label:n??wt(e)};return(t===`select`||t===`multiselect`||t===`radio`||t===`checkboxes`)&&(r.options=[]),{name:e,def:r}}function wt(e){return e?e.split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):``}function Tt(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:`field`}function Et(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:``}function Dt(e){return Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`).map(e=>({key:typeof e.key==`string`?e.key:``,label:typeof e.label==`string`?e.label:``})).filter(e=>e.key):[]}function Ot(e,t){let n=/[a-z0-9]/i.test(e)?Tt(e):`group`;if(!t.includes(n))return n;let r=2;for(;t.includes(`${n}_${r}`);)r+=1;return`${n}_${r}`}function kt(e,t){let n=t.trim()||`New section`,r=Ot(n,e.map(e=>e.key));return[...e,{key:r,label:n}]}function At(e,t,n){let r=n.trim();return r?e.map(e=>e.key===t?{...e,label:r}:e):e}function jt(e,t){return e.filter(e=>e.key!==t)}function Mt(e,t,n){let r=e.findIndex(e=>e.key===t);if(r<0)return e;let i=r+n;return i<0||i>=e.length?e:Pt(e,r,i)}function Nt(e,t){return{shape:e.shape,entries:e.entries.map(e=>e.def.group===t?{name:e.name,def:{...e.def,group:void 0}}:e)}}function Pt(e,t,n){let r=e.slice(),[i]=r.splice(t,1);return r.splice(n,0,i),r}function Ft(e,t,n){let r=Array.isArray(t)?t.filter(e=>typeof e?.key==`string`):[],i=new Map;for(let e of r)i.set(e.key,{key:e.key,label:String(e.label??e.key),entries:[]});let a=new Set(r.map(e=>e.key));for(let t of e.entries){let e=typeof t.def.group==`string`?t.def.group:null;e&&a.has(e)?i.get(e).entries.push(t):(i.has(null)||i.set(null,{key:null,label:`Ungrouped`,entries:[]}),i.get(null).entries.push(t))}let o=!!n?.includeEmptyDeclared;return Array.from(i.values()).filter(e=>e.entries.length>0||o&&e.key!==null)}function It(e,t){return e===t?!0:JSON.stringify(e??null)===JSON.stringify(t??null)}function Lt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]),r=[];for(let i of n)It(e[i],t[i])||r.push(i);return r.sort()}function Rt(e,t){let n=bt(e),r=bt(t),i=new Map(n.entries.map(e=>[e.name,e])),a=new Set(r.entries.map(e=>e.name)),o={},s=0,c=0;for(let e of r.entries){let t=i.get(e.name);if(!t){o[e.name]={name:e.name,status:`added`,changedKeys:[]},s+=1;continue}let n=Lt(t.def,e.def);n.length?(o[e.name]={name:e.name,status:`changed`,changedKeys:n},c+=1):o[e.name]={name:e.name,status:`unchanged`,changedKeys:[]}}let l=n.entries.filter(e=>!a.has(e.name));return{byName:o,removed:l,counts:{added:s,changed:c,removed:l.length}}}function zt(e,t){if(e==null)return!0;let n=typeof e==`string`?e:e.source;if(!n)return!0;try{return U(n.trim(),t)}catch{return!0}}function U(e,t){let n=Bt(e,`||`);if(n.length>1)return n.some(e=>U(e.trim(),t));let r=Bt(e,`&&`);if(r.length>1)return r.every(e=>U(e.trim(),t));if(e.startsWith(`!`))return!U(e.slice(1).trim(),t);let i=e.match(/^(.+?)\s+in\s+(\[.*\])$/);if(i){let e=Vt(i[1].trim(),t),n=Ht(i[2]);return Array.isArray(n)&&n.includes(e)}let a=e.match(/^(.+?)\s*(==|!=)\s*(.+)$/);if(a){let e=Vt(a[1].trim(),t),n=Ht(a[3].trim()),r=e=>e==null,i=r(e)&&r(n)?!0:e===n;return a[2]===`==`?i:!i}return!!Vt(e,t)}function Bt(e,t){let n=[],r=0,i=null,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(i){a+=s,s===i&&e[o-1]!==`\\`&&(i=null);continue}if(s===`'`||s===`"`){i=s,a+=s;continue}if(s===`(`||s===`[`?r++:(s===`)`||s===`]`)&&r--,r===0&&e.slice(o,o+t.length)===t&&e[o+t.length]!==`=`){n.push(a),a=``,o+=t.length-1;continue}a+=s}return a&&n.push(a),n}function Vt(e,t){if(/^['"]/.test(e)||/^-?\d/.test(e)||e===`true`||e===`false`||e===`null`)return Ht(e);let n=e.split(`.`),r=t;for(let e of n){if(r==null)return;r=r[e]}return r}function Ht(e){let t=e.trim();if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`)return null;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`'`)&&t.endsWith(`'`)||t.startsWith(`"`)&&t.endsWith(`"`))return t.slice(1,-1);if(t.startsWith(`[`)&&t.endsWith(`]`))try{let e=t.replace(/'([^']*)'/g,(e,t)=>JSON.stringify(t));return JSON.parse(e)}catch{return[]}return t}var Ut={object:`Object`,field:`Field`,trigger:`Trigger`,validation:`Validation Rule`,hook:`Hook`,view:`View`,page:`Page`,dashboard:`Dashboard`,app:`Application`,action:`Action`,report:`Report`,flow:`Flow`,approval:`Approval Process`,datasource:`Datasource`,translation:`Translation`,router:`Router`,function:`Function`,service:`Service`,email_template:`Email Template`,book:`Documentation Book`,permission:`Permission Set`,profile:`Profile`,role:`Role`,agent:`AI Agent`,tool:`AI Tool`,skill:`AI Skill`,package:`Package`,data:`Dataset`,job:`Background Job`,api:`API Endpoint`,connector:`Connector`,mapping:`Field Mapping`,policy:`Policy`,webhook:`Webhook`,theme:`Theme`,sharing_rule:`Sharing Rule`,analytics_cube:`Analytics Cube`},Wt={object:`对象`,field:`字段`,trigger:`触发器`,validation:`校验规则`,hook:`钩子`,view:`视图`,page:`页面`,dashboard:`仪表板`,app:`应用`,action:`操作`,report:`报表`,flow:`流程`,approval:`审批流程`,datasource:`数据源`,translation:`翻译`,router:`路由`,function:`函数`,service:`服务`,email_template:`邮件模板`,book:`文档手册`,permission:`权限集`,profile:`配置文件`,role:`角色`,agent:`AI 智能体`,tool:`AI 工具`,skill:`AI 技能`,package:`包`,data:`数据集`,job:`后台任务`,api:`API 端点`,connector:`连接器`,mapping:`字段映射`,policy:`策略`,webhook:`Webhook 回调`,theme:`主题`,sharing_rule:`共享规则`,analytics_cube:`分析立方体`},Gt={data:`Data`,ui:`UI`,automation:`Automation`,ai:`AI`,system:`System`,platform:`Platform`,identity:`Identity`,security:`Security`,other:`Other`},Kt={data:`数据`,ui:`界面`,automation:`自动化`,ai:`AI`,system:`系统`,platform:`平台`,identity:`身份`,security:`安全`,other:`其他`},qt={"engine.directory.title":`All Metadata Types`,"engine.directory.description":`The platform protocol exposes {count} metadata types ({writable} writable at runtime). Click any tile to browse, override, or create instances.`,"engine.directory.search":`Search metadata types…`,"engine.directory.writableOnly":`Writable only`,"engine.directory.quickFind":`Quick Find`,"engine.directory.noMatches":`No matches`,"engine.directory.noMatchesHint":`Adjust your search or filters to see more metadata types.`,"engine.directory.loading":`Loading metadata types…`,"engine.directory.loadFailed":`Failed to load metadata types`,"engine.directory.all":`All`,"engine.directory.diagnosticsLink":`View all issues ({count})`,"engine.directory.invalidTooltip":`{count} invalid item(s) — click to fix`,"engine.directory.warnTooltip":`{count} item(s) with warnings`,"engine.directory.itemCountTooltip":`{count} item(s) of this type`,"engine.directory.allPackages":`All packages`,"engine.directory.packageFilter":`Package`,"engine.home.greetingMorning":`Good morning`,"engine.home.greetingAfternoon":`Good afternoon`,"engine.home.greetingEvening":`Good evening`,"engine.home.subtitle":`Your control center for modeling data, designing experiences, and automating the platform.`,"engine.home.statTypes":`Metadata types`,"engine.home.statWritable":`Runtime-writable`,"engine.home.statPackages":`Packages`,"engine.home.statIssues":`Open issues`,"engine.home.allHealthy":`All healthy`,"engine.home.allHealthyHint":`No validation issues across your metadata.`,"engine.home.issuesHint":`{count} item(s) need attention.`,"engine.home.explore":`Explore`,"engine.home.exploreHint":`Jump into any domain of the platform.`,"engine.home.quickActions":`Quick actions`,"engine.home.quickActionsHint":`Create new metadata in one click.`,"engine.home.newItem":`New {label}`,"engine.home.recent":`Recently viewed`,"engine.home.recentEmpty":`Nothing here yet — items you open will appear for quick access.`,"engine.home.browseAll":`Browse all metadata`,"engine.home.openDiagnostics":`Review diagnostics`,"engine.home.viewDomain":`View`,"engine.home.typesLower":`types`,"engine.home.loading":`Loading your workspace…`,"engine.diagnostics.title":`Metadata Diagnostics`,"engine.diagnostics.description":`Every metadata item that failed load-time validation, grouped by type. Errors block features that depend on the item; warnings are advisory.`,"engine.diagnostics.back":`Back to metadata`,"engine.diagnostics.refresh":`Refresh`,"engine.diagnostics.loading":`Scanning metadata…`,"engine.diagnostics.loadFailed":`Failed to load diagnostics: {error}`,"engine.diagnostics.summary":`{count} issue(s) across {items} items in {types} types`,"engine.diagnostics.cleanTitle":`All clear`,"engine.diagnostics.cleanHint":`Scanned {items} item(s) across {types} type(s) — no issues found.`,"engine.diagnostics.severity.error":`Errors`,"engine.diagnostics.severity.warning":`Errors + Warnings`,"engine.diagnostics.col.name":`Item`,"engine.diagnostics.col.issues":`Issues`,"engine.diagnostics.errorN":`{count} error(s)`,"engine.diagnostics.warnN":`{count} warning(s)`,"engine.diagnostics.more":`+{count} more…`,"engine.list.create":`New`,"engine.list.refresh":`Refresh`,"engine.list.search":`Search name, label, description…`,"engine.list.empty":`No items yet.`,"engine.list.items":`Items`,"engine.list.filtered":`Filtered`,"engine.list.invalid":`Invalid`,"engine.list.warnings":`Warnings`,"engine.list.invalidTitle":`Invalid metadata`,"engine.list.invalidCount":`{count} validation error(s):`,"engine.list.warnTitle":`Metadata warnings`,"engine.list.warnCount":`{count} warning(s):`,"engine.list.allSources":`All sources`,"engine.list.allPackages":`All packages`,"engine.package.writableRequired":`Pick or create a writable base (package) first — this item cannot be authored into a read-only code package.`,"engine.list.packageFilter":`Package`,"engine.list.source.artifact":`Artifact`,"engine.list.source.runtime":`Runtime`,"engine.list.source.artifactDesc":`Shipped by code package`,"engine.list.source.runtimeDesc":`Authored at runtime`,"engine.list.col.name":`Name`,"engine.list.col.label":`Label`,"engine.list.col.source":`Source`,"engine.list.col.object":`Object`,"engine.list.col.type":`Type`,"engine.list.col.description":`Description`,"engine.list.emptyType":`No {type} items registered`,"engine.list.emptyQuery":`No matches for "{query}"`,"engine.list.createHint":`Click "New" above to create the first {type}.`,"engine.list.readOnlyHint":`This type is read-only — instances are defined by code artifacts in packages.`,"engine.edit.save":`Save`,"engine.edit.publish":`Publish`,"engine.edit.publishBlockedDirty":`Save first, then publish.`,"engine.edit.discardDraft":`Discard draft`,"engine.edit.discardDraftConfirm":`Discard the pending draft for {type}/{name}?`,"engine.edit.draftPending":`Pending changes — save lives in a draft. Click Publish to release.`,"engine.edit.rollback":`Rollback to this version`,"engine.edit.rollbackConfirm":`Restore version {version}? This writes the historical body back as the current published overlay.`,"engine.edit.reset":`Reset overlay`,"engine.edit.resetConfirm":`Reset overlay for {type}/{name}?`,"engine.edit.delete":`Delete`,"engine.edit.deleteConfirm":`Delete {type}/{name}? This cannot be undone.`,"engine.edit.lockFull":`This item is locked and cannot be edited or deleted.`,"engine.edit.lockNoOverlay":`This item is locked and cannot be edited.`,"engine.edit.lockNoDelete":`This item is locked and cannot be deleted.`,"engine.edit.history":`History`,"engine.edit.auditTab":`Audit log`,"engine.edit.auditCount":`events`,"engine.edit.auditEmptyTitle":`No audit events yet`,"engine.edit.auditEmptyDescription":`No save, publish, rollback, delete or reset attempts have been recorded for this item. Once someone tries to change it (allowed or denied), the attempt will appear here.`,"engine.edit.auditColTime":`Time`,"engine.edit.auditColActor":`Actor`,"engine.edit.auditColOperation":`Operation`,"engine.edit.auditColOutcome":`Outcome`,"engine.edit.auditColLock":`Lock`,"engine.edit.auditColNote":`Note`,"engine.edit.refresh":`Refresh`,"engine.edit.layers":`Layers`,"engine.layers.code":`Code`,"engine.layers.overlay":`Overlay`,"engine.layers.effective":`Effective`,"engine.layers.diff":`Diff`,"engine.layers.diff.field":`Field`,"engine.layers.diff.code":`Code (artifact)`,"engine.layers.diff.effective":`Effective`,"engine.layers.diff.status":`Status`,"engine.layers.diff.unchanged":`unchanged`,"engine.layers.diff.modified":`modified`,"engine.layers.diff.added":`added`,"engine.layers.diff.removed":`removed`,"engine.layers.diff.showUnchanged":`Show unchanged`,"engine.layers.diff.noChanges":`Overlay matches the code value — no field-level differences.`,"engine.layers.diff.noBaseline":`No code-level artifact to compare against. All fields are runtime-authored.`,"engine.layers.diff.summary":`{modified} modified · {added} added · {removed} removed`,"engine.edit.overlaidCount":`{count} overlaid`,"engine.edit.noOverlay":`no overlay`,"engine.edit.references":`References`,"engine.edit.form":`Form`,"engine.edit.edit":`Edit`,"engine.edit.editOverlay":`Edit overlay`,"engine.edit.createNew":`Create new`,"engine.edit.detail":`Detail`,"engine.edit.preview":`Preview`,"engine.edit.designer":`Designer`,"engine.edit.related":`Related`,"engine.edit.hideInspector":`Hide inspector`,"engine.edit.showInspector":`Show inspector`,"engine.edit.noChanges":`No changes to save`,"engine.edit.inspector":`Inspector`,"engine.edit.inspector.properties":`Properties`,"engine.edit.inspector.source":`Source`,"engine.edit.fullscreen":`Fullscreen`,"engine.edit.exitFullscreen":`Exit fullscreen`,"engine.edit.designMode":`Design`,"engine.edit.previewMode":`Preview`,"engine.inspector.widget.kind":`Widget`,"engine.inspector.widget.close":`Close widget`,"engine.inspector.widget.title":`Title`,"engine.inspector.widget.type":`Type`,"engine.inspector.widget.object":`Data Source (Object)`,"engine.inspector.widget.valueField":`Value Field`,"engine.inspector.widget.categoryField":`Category Field`,"engine.inspector.widget.aggregate":`Aggregate`,"engine.inspector.widget.color":`Color Variant`,"engine.inspector.widget.width":`Width`,"engine.inspector.widget.height":`Height`,"engine.inspector.widget.remove":`Remove widget`,"engine.inspector.widget.datasetSection":`Dataset binding`,"engine.inspector.widget.dataset":`Dataset`,"engine.inspector.widget.datasetPlaceholder":`e.g. sales_pipeline`,"engine.inspector.widget.datasetHint":`Bind a governed dataset. When set, it takes precedence over the inline object query above and the widget renders via the dataset (consistent, cross-object, RLS-enforced).`,"engine.inspector.widget.dimensions":`Dimensions`,"engine.inspector.widget.dimensionsPlaceholder":`e.g. stage, region (comma-separated)`,"engine.inspector.widget.dimensionsHint":`Dataset dimension names to group by. Leave empty for a single-value KPI metric.`,"engine.inspector.widget.values":`Values (measures)`,"engine.inspector.widget.valuesPlaceholder":`e.g. revenue, deal_count (comma-separated)`,"engine.inspector.widget.valuesHint":`Dataset measure names to show.`,"engine.inspector.flowNode.kind":`Node`,"engine.inspector.flowNode.close":`Close node`,"engine.inspector.flowNode.id":`ID`,"engine.inspector.flowNode.label":`Label`,"engine.inspector.flowNode.type":`Node Type`,"engine.inspector.flowNode.description":`Description`,"engine.inspector.flowNode.configuration":`Configuration`,"engine.inspector.flowNode.config":`Config (JSON)`,"engine.inspector.flowNode.advanced":`Advanced (JSON)`,"engine.inspector.flowNode.advancedHint":`Optional custom keys not covered by the form above — most flows don’t need this.`,"engine.inspector.flowNode.noConfig":`No configuration needed for this node type.`,"engine.inspector.flowNode.kv.add":`Add entry`,"engine.inspector.flowNode.kv.key":`Key`,"engine.inspector.flowNode.kv.value":`Value`,"engine.inspector.flowNode.kv.remove":`Remove entry`,"engine.inspector.flowNode.kv.empty":`No entries yet.`,"engine.inspector.flowNode.list.add":`Add item`,"engine.inspector.flowNode.list.item":`Value`,"engine.inspector.flowNode.list.remove":`Remove item`,"engine.inspector.flowNode.list.empty":`No items yet.`,"engine.inspector.flowNode.remove":`Remove node`,"engine.inspector.flowEdge.kind":`Connection`,"engine.inspector.flowEdge.close":`Close connection`,"engine.inspector.flowEdge.missing":`This connection no longer exists.`,"engine.inspector.flowEdge.source":`From`,"engine.inspector.flowEdge.target":`To`,"engine.inspector.flowEdge.routing":`Routing`,"engine.inspector.flowEdge.branch":`Branch`,"engine.inspector.flowEdge.label":`Branch label`,"engine.inspector.flowEdge.labelHint":`e.g. approve / reject`,"engine.inspector.flowEdge.condition":`Condition`,"engine.inspector.flowEdge.conditionHint":`CEL expression — taken when it evaluates true`,"engine.inspector.flowEdge.isDefault":`Default branch (else)`,"engine.inspector.flowEdge.hint":`The engine follows this connection when its branch label is selected or its condition is met. The default branch is taken when no other matches.`,"engine.inspector.flowEdge.remove":`Remove connection`,"engine.inspector.flowEdge.approvalBranch":`Approval branch`,"engine.inspector.flowEdge.branchApprove":`Approve`,"engine.inspector.flowEdge.branchReject":`Reject`,"engine.inspector.flowEdge.branchRevise":`Revise — send back`,"engine.inspector.flowEdge.branchCustom":`— Custom —`,"engine.inspector.flowEdge.connection":`Connection`,"engine.inspector.flowEdge.type":`Type`,"engine.inspector.flowEdge.typeDefault":`Normal`,"engine.inspector.flowEdge.typeConditional":`Conditional`,"engine.inspector.flowEdge.typeFault":`Fault (error path)`,"engine.inspector.flowEdge.typeBack":`Back-edge (revise loop)`,"engine.inspector.flowEdge.backHint":`A back-edge re-enters an earlier node to close a loop (e.g. an approval revise loop). It is traversed normally at run time but excluded from cycle validation.`,"engine.inspector.workflowAction.kind":`Action`,"engine.inspector.workflowAction.close":`Close action`,"engine.inspector.workflowAction.type":`Action Type`,"engine.inspector.workflowAction.name":`Name`,"engine.inspector.workflowAction.config":`Config (JSON)`,"engine.inspector.workflowAction.remove":`Remove action`,"engine.inspector.appNav.kind":`Nav Item`,"engine.inspector.appNav.close":`Close nav item`,"engine.inspector.appNav.label":`Label`,"engine.inspector.appNav.path":`Path / Route`,"engine.inspector.appNav.icon":`Icon`,"engine.inspector.appNav.kindField":`Kind`,"engine.inspector.appNav.remove":`Remove nav item`,"engine.inspector.viewColumn.kind":`Column`,"engine.inspector.viewColumn.close":`Close column`,"engine.inspector.viewColumn.header":`Header`,"engine.inspector.viewColumn.accessorKey":`Field key`,"engine.inspector.viewColumn.width":`Width`,"engine.inspector.viewColumn.align":`Align`,"engine.inspector.viewColumn.sortable":`Sortable`,"engine.inspector.viewColumn.filterable":`Filterable`,"engine.inspector.viewColumn.remove":`Remove column`,"engine.inspector.viewColumn.outlineLabel":`Columns`,"engine.inspector.view.kind":`View`,"engine.inspector.view.close":`Close`,"engine.inspector.view.label":`Label`,"engine.inspector.view.labelPlaceholder":`e.g. All Leads`,"engine.inspector.view.type":`View type`,"engine.inspector.view.object":`Object`,"engine.inspector.view.objectPlaceholder":`e.g. crm_lead`,"engine.inspector.view.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.view.type.grid":`Table / List`,"engine.inspector.view.type.kanban":`Kanban`,"engine.inspector.view.type.calendar":`Calendar`,"engine.inspector.view.type.gallery":`Gallery`,"engine.inspector.view.type.gantt":`Gantt`,"engine.inspector.view.type.timeline":`Timeline`,"engine.inspector.view.type.map":`Map`,"engine.inspector.view.type.chart":`Chart`,"engine.inspector.pageBlock.kind":`Block`,"engine.inspector.pageBlock.close":`Close block`,"engine.inspector.pageBlock.type":`Type`,"engine.inspector.pageBlock.id":`ID`,"engine.inspector.pageBlock.className":`Class names`,"engine.inspector.pageBlock.hidden":`Hidden (CEL)`,"engine.inspector.pageBlock.properties":`Properties`,"engine.inspector.pageBlock.advanced":`Advanced`,"engine.inspector.pageBlock.remove":`Remove block`,"engine.inspector.pageBlock.outlineLabel":`Blocks`,"engine.inspector.report.kind":`Report`,"engine.inspector.report.close":`Close report`,"engine.inspector.report.name":`Name`,"engine.inspector.report.nameHint":`snake_case identifier (cannot change after create)`,"engine.inspector.report.namePlaceholder":`e.g. pipeline_by_stage`,"engine.inspector.report.label":`Label`,"engine.inspector.report.labelPlaceholder":`e.g. Pipeline by Stage`,"engine.inspector.report.type":`Report type`,"engine.inspector.report.type.tabular":`Tabular`,"engine.inspector.report.type.summary":`Summary`,"engine.inspector.report.type.matrix":`Matrix`,"engine.inspector.report.type.joined":`Joined`,"engine.inspector.report.dataset":`Dataset`,"engine.inspector.report.datasetPlaceholder":`e.g. sales_metrics`,"engine.inspector.report.values":`Values (measures)`,"engine.inspector.report.valuesEmpty":`No measures yet. Add one from the dataset below.`,"engine.inspector.report.rows":`Rows (dimensions)`,"engine.inspector.report.rowsEmpty":`No dimensions yet. Add one from the dataset below.`,"engine.inspector.report.columnsAcross":`Columns (across dimensions)`,"engine.inspector.report.columnsAcrossEmpty":`No across dimensions yet — the matrix pivots rows × columns.`,"engine.inspector.report.chart":`Chart`,"engine.inspector.report.chartType":`Chart type`,"engine.inspector.report.chartNone":`None (table only)`,"engine.inspector.report.chartTitle":`Chart title`,"engine.inspector.report.chartX":`X-Axis (dimension)`,"engine.inspector.report.chartY":`Y-Axis (measure)`,"engine.inspector.report.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.moreFields":`More fields`,"engine.inspector.action.kind":`Action`,"engine.inspector.action.close":`Close action`,"engine.inspector.dashboard.kind":`Dashboard`,"engine.inspector.dashboard.close":`Close dashboard`,"engine.inspector.dashboard.label":`Label`,"engine.inspector.dashboard.labelPlaceholder":`e.g. Sales Overview`,"engine.inspector.dashboard.description":`Description`,"engine.inspector.dashboard.descriptionPlaceholder":`Optional summary shown in the header`,"engine.inspector.dashboard.widgets":`Widgets`,"engine.inspector.dashboard.widgetsEmpty":`No widgets yet. Add one below.`,"engine.inspector.dashboard.removeWidget":`Remove widget`,"engine.inspector.dashboard.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.add.widget":`Add widget`,"engine.inspector.add.block":`Add block`,"engine.inspector.add.node":`Add node`,"engine.inspector.add.step":`Add step`,"engine.inspector.add.action":`Add action`,"engine.inspector.add.nav":`Add nav item`,"engine.inspector.reorder.up":`Move up`,"engine.inspector.reorder.down":`Move down`,"engine.edit.overlay":`overlay`,"engine.edit.readOnlyBanner":`Viewing in read-only mode. Click {edit} to make changes.`,"engine.edit.readOnlyTypeBanner":`This metadata type is read-only for safety: it ships executable code or sensitive configuration and cannot be overlaid at runtime. Edit the source in your package and redeploy. To override this lock (use with caution), set {flag} to include {type}, or flip {override} in the registry.`,"engine.edit.artifactLockedBanner":`This {type} is provided by an installed package, so it is read-only at runtime. To change it, edit it in its source package and republish — or create a new {type} from scratch.`,"engine.badge.createOnly":`create-only`,"engine.repeater.empty":`No items. Click + to add.`,"engine.badge.writable":`writable`,"engine.badge.readOnly":`read-only`,"engine.edit.readOnly":`Read-only (runtime overrides disabled).`,"engine.edit.loading":`Loading`,"engine.edit.bespokeDesigner":`Designer`,"engine.edit.readOnlyHint":`Read-only — this metadata type does not allow runtime overrides. Edit the source in the package and redeploy.`,"engine.edit.unsaved":`Unsaved`,"engine.edit.unsavedHint":`You have unsaved changes.`,"engine.edit.diagnostics.title":`This metadata does not match the spec — {count} validation error(s).`,"engine.edit.diagnostics.warnTitle":`{count} warning(s) — review recommended.`,"engine.edit.diagnostics.more":`+{count} more…`,"engine.edit.loadFailed":`Failed to load {type}/{name}: {message}`,"engine.edit.unsavedLeaveConfirm":`You have unsaved changes. Leave this page anyway?`,"engine.edit.saving":`Saving…`,"engine.edit.savedAt":`Saved {time}`,"engine.edit.autoSaveOn":`Auto-save is on — click to disable`,"engine.edit.autoSaveOff":`Auto-save is off — click to enable`,"engine.edit.autoSavingShortly":`Auto-saving…`,"engine.edit.destructive":`Destructive change`,"engine.edit.destructiveHint":`The change would break existing references. Review the issues and confirm to force-save.`,"engine.edit.forceSave":`Force save`,"engine.cancel":`Cancel`,"engine.form.select":`Select...`,"engine.form.selectEllipsis":`Select…`,"engine.form.add":`Add`,"engine.form.addItem":`Add item`,"engine.form.addRow":`Add row`,"engine.form.remove":`Remove`,"engine.form.removeRow":`Remove row`,"engine.form.dragToReorder":`Drag to reorder`,"engine.form.arrayPlaceholder":`comma, separated, values`,"engine.form.loadingObjects":`Loading objects…`,"engine.form.noObjects":`object_name (no objects detected)`,"engine.form.selectObject":`Select object…`,"engine.form.selectObjectDots":`Select object...`,"engine.form.addObjects":`Add objects...`,"engine.form.loadingFields":`Loading fields…`,"engine.form.selectObjectFirst":`(Select an object first)`,"engine.form.selectField":`Select field…`,"engine.form.selectFieldDots":`Select field...`,"engine.form.addFields":`Add fields...`,"engine.form.noObjectBound":`No object bound`,"engine.form.none":`— None —`,"engine.form.notInObject":`(not in object)`,"engine.form.searchIcons":`Search icons…`,"engine.form.chooseIcon":`Choose an icon`,"engine.form.iconsTruncated":`Showing the first {shown} of {total} — type to narrow.`,"engine.form.noMatchingIcons":`No matching icons.`,"engine.form.keep":`Keep`,"engine.form.addField":`Add field…`,"engine.form.addFieldPlain":`Add field`,"engine.form.searchFields":`Search fields…`,"engine.form.allFieldsAdded":`All fields added`,"engine.form.noObjectFields":`No object fields ({error}).`,"engine.form.noMatchingFields":`No matching fields.`,"engine.form.noFieldsOnObject":`No fields on this object.`,"engine.form.added":`Added`,"engine.form.tagsPlaceholder":`Type and press Enter…`,"engine.form.noRows":`No rows. Click + to add.`,"engine.form.masterDetailSchemaError":`master-detail widget requires items.properties on the JSON schema (or an anyOf branch that has them).`,"engine.form.missingField":`Field {field} declared in form layout but missing from schema. Skipping.`,"engine.form.fallbackJson":`widget {widget} — falling back to JSON until a custom renderer is registered.`,"engine.form.keyRequired":`Key is required`,"engine.form.keyExists":`Key "{key}" already exists`,"engine.form.keyPattern":`Key must match {pattern}`,"engine.form.invalidJson":`Invalid JSON`,"engine.form.rootJsonObject":`Root must be a JSON object`,"engine.validation.invalid":`Invalid input`,"engine.validation.pattern":`Invalid string: must match pattern {pattern}`,"engine.validation.expectedStringUndefined":`Required text value`,"engine.validation.expectedType":`Invalid type: expected {expected}, received {received}`,"engine.validation.invalidOption":`Invalid option: expected one of {options}`,"engine.validation.failed":`Validation failed ({count} issues).`,"engine.validation.failedOne":`Validation failed (1 issue).`,"engine.validation.nameRequired":`A name is required.`,"engine.embedded.saved":`Saved.`,"engine.embedded.readOnlyParent":`The parent type is read-only — saving will still attempt a PUT and may be refused by the server.`,"engine.embedded.saveIntoParent":`Save into {parentType}`,"engine.embedded.saveNoPath":`Cannot save: this item has no embeddedPath registered.`,"engine.embedded.noSchema":`No form schema is registered for {type}. Edit the raw JSON below; saving will splice it back into {target}.`,"engine.embedded.readOnly":`Read-only`,"engine.embedded.noPathHint":`No embedded path registered — cannot determine where to write this item back.`,"engine.packages.title":`Packages`,"engine.packages.description":`Author, publish, and manage the packages installed in this environment.`,"engine.packages.refresh":`Refresh`,"engine.packages.import":`Import`,"engine.packages.importing":`Importing…`,"engine.packages.new":`New Package`,"engine.packages.search":`Search packages…`,"engine.packages.showPlatform":`Show platform packages ({count})`,"engine.packages.empty":`No packages`,"engine.packages.emptyCreate":`Create your first package to start authoring metadata.`,"engine.packages.emptyFiltered":`No packages match your filters.`,"engine.packages.loadFailed":`Failed to load packages`,"engine.packages.col.name":`Name`,"engine.packages.col.version":`Version`,"engine.packages.col.scope":`Scope`,"engine.packages.col.status":`Status`,"engine.packages.scope.project":`Project`,"engine.packages.scope.system":`System`,"engine.packages.scope.cloud":`Cloud`,"engine.packages.status.enabled":`Enabled`,"engine.packages.status.disabled":`Disabled`,"engine.packages.import.invalidJson":`Selected file is not valid JSON.`,"engine.packages.import.invalidPackage":`Invalid package file: missing "id" or "name".`,"engine.packages.import.success":`Imported "{id}". Refresh the app switcher to use it.`,"engine.packages.import.failed":`Import failed`,"engine.packages.create.title":`New Package`,"engine.packages.create.description":`Create a project-scoped package to author and publish your own metadata. The id should be reverse-domain (e.g. {example}).`,"engine.packages.create.id":`Package ID`,"engine.packages.create.idInvalid":`Use letters, numbers, dot, dash or underscore (2–255 chars).`,"engine.packages.create.name":`Display name`,"engine.packages.create.version":`Version`,"engine.packages.create.versionInvalid":`Use semantic version, e.g. 0.1.0`,"engine.packages.create.creating":`Creating…`,"engine.packages.create.submit":`Create package`,"engine.packages.create.failed":`Failed to create package`,"engine.packages.detail.type":`Type`,"engine.packages.detail.description":`Description`,"engine.packages.detail.browseMetadata":`Browse this package's metadata`,"engine.packages.detail.pendingChanges":`Pending changes`,"engine.packages.detail.pendingHint":`Drafted, not yet published. Publish the whole app, or review each below.`,"engine.packages.detail.publishApp":`Publish app ({count})`,"engine.packages.detail.discardChanges":`Discard changes ({count})`,"engine.packages.detail.kernelReadOnly":`This is a platform kernel package. Authoring actions are disabled.`,"engine.packages.detail.actions":`Actions`,"engine.packages.detail.publish":`Publish`,"engine.packages.detail.publishing":`Publishing…`,"engine.packages.detail.revert":`Revert`,"engine.packages.detail.enable":`Enable`,"engine.packages.detail.disable":`Disable`,"engine.packages.detail.export":`Export`,"engine.packages.detail.exporting":`Exporting…`,"engine.packages.detail.deleteApp":`Delete app`,"engine.packages.detail.deleting":`Deleting…`,"engine.packages.detail.discarding":`Discarding…`,"engine.packages.detail.actionFailed":`Action failed`,"engine.packages.detail.publishBlocked":`Publish blocked by {count} validation error(s).`,"engine.packages.detail.nothingToPublish":`Nothing to publish.`,"engine.packages.detail.published":`Package published.`,"engine.packages.detail.publishDraftsPartial":`Published {published}; {failed} failed.`,"engine.packages.detail.publishDraftsOk":`App published — all drafts are now live.`,"engine.packages.detail.reverted":`Reverted to last published state.`,"engine.packages.detail.discardDraftsPartial":`Discarded {discarded}; {failed} failed.`,"engine.packages.detail.discardDraftsOk":`All pending changes discarded — back to the published version.`,"engine.packages.detail.deleteConfirm":`Delete "{name}" and all its data?
2
+ import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,m as n,t as r}from"./vendor-react-ClIa1CJA.js";import{R as i,f as a,h as o}from"./vendor-objectstack-BTQLr7T3.js";import{$o as s,$s as c,Ar as l,Cc as u,Fs as d,Ga as f,Gi as p,Go as m,Gt as h,Ha as g,Jn as _,Jt as v,Ka as y,Ko as b,Kt as x,Na as S,Oc as C,Oi as w,Or as T,Pa as E,Po as ee,Pr as D,Qr as O,Qs as k,Ra as A,Rs as te,Ss as ne,Ti as re,Ua as ie,Un as ae,Uo as oe,Ur as se,Vs as j,Wn as ce,Xn as le,Xs as ue,Yi as M,Yn as de,Yr as fe,Yt as N,Z as pe,Zn as me,_c as he,_i as ge,_o as _e,_t as ve,ac as ye,an as be,ar as xe,at as Se,ci as Ce,ct as we,dn as P,ds as Te,ea as Ee,fo as De,hc as Oe,hi as ke,ho as Ae,hs as je,ia as Me,in as Ne,ks as Pe,lt as Fe,ma as Ie,mc as Le,mi as Re,on as ze,ot as Be,qn as Ve,qr as F,qt as I,ra as He,rt as Ue,sn as L,so as We,st as Ge,ta as Ke,ti as qe,tt as Je,us as Ye,ut as Xe,va as Ze,xr as R,ya as Qe,yi as $e,zi as et,zs as tt}from"./ui-components-BXvcyYmR.js";import{n as nt}from"./data-adapter-BwlZo45L.js";import{a as rt}from"./MetadataProvider-BRGGbotZ.js";var z=r(),B=e(t(),1);function it(e){let t=rt();return(0,B.useMemo)(()=>{let n=new nt({baseUrl:``,previewDrafts:t});return e?n.withEnvironment(e):n},[e,t])}function at(e){let t=new Set(e.map(e=>e.type));return e.filter(e=>{if(!/[A-Z]/.test(e.type))return!0;let n=e.type.replace(/[A-Z]/g,e=>`_${e.toLowerCase()}`);return!(n!==e.type&&t.has(n))})}function ot(e){let[t,n]=(0,B.useState)(!0),[r,i]=(0,B.useState)(null),[a,o]=(0,B.useState)([]);return(0,B.useEffect)(()=>{let t=!1;return n(!0),i(null),(async()=>{try{let r=await e.listTypes(),i;if(Array.isArray(r))i=r.map(e=>typeof e==`string`?{type:e}:e);else{let e=r?.entries;i=Array.isArray(e)&&e.length>0?e:(r?.types??[]).map(e=>({type:e}))}t||(o(at(i)),n(!1))}catch(e){t||(i(e?.message??String(e)),n(!1))}})(),()=>{t=!0}},[e]),{loading:t,error:r,entries:a}}function st(e,t,n=[`name`,`label`,`description`]){if(!t)return!0;let r=t.toLowerCase();for(let t of n){let n=e[t];if(typeof n==`string`&&n.toLowerCase().includes(r))return!0}return!1}function ct(e,t=`error`,n){let[r,i]=(0,B.useState)(!0),[a,o]=(0,B.useState)(null),[s,c]=(0,B.useState)({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),[l,u]=(0,B.useState)(0);return(0,B.useEffect)(()=>{let r=!1;return i(!0),o(null),(async()=>{try{let a=await e.diagnostics(n?{severity:t,packageId:n}:{severity:t});if(r)return;c(a),i(!1)}catch(e){if(r)return;o(e?.message??String(e)),c({entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}}),i(!1)}})(),()=>{r=!0}},[e,t,n,l]),{loading:r,error:a,summary:s,byType:(0,B.useMemo)(()=>{let e={};for(let t of s.entries)(t.diagnostics?.errors?.length??0)>0&&(e[t.type]=(e[t.type]??0)+1);return e},[s]),warnByType:(0,B.useMemo)(()=>{let e={};for(let t of s.entries){let n=t.diagnostics?.errors?.length??0,r=t.diagnostics?.warnings?.length??0;n===0&&r>0&&(e[t.type]=(e[t.type]??0)+1)}return e},[s]),countsByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.count;return e},[s]),lockedByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))typeof n.locked==`number`&&n.locked>0&&(e[t]=n.locked);return e},[s]),packagesByType:(0,B.useMemo)(()=>{let e={};for(let[t,n]of Object.entries(s.stats??{}))e[t]=n.packages??[];return e},[s]),allPackages:(0,B.useMemo)(()=>{let e=new Set;for(let t of Object.values(s.stats??{}))for(let n of t.packages??[])e.add(n);return[...e].sort()},[s]),reload:()=>u(e=>e+1)}}function lt({kindLabel:e,title:t,onClose:n,closeLabel:r=`Close`,children:i,footer:a,headerActions:o,hideClose:s}){return(0,z.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-2 border-b px-4 py-2.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0`,children:[(0,z.jsx)(xe,{variant:`secondary`,className:`text-[10px] uppercase tracking-wider`,children:e}),(0,z.jsx)(`div`,{className:`mt-1 truncate text-sm font-medium`,title:t,children:t})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1 shrink-0`,children:[o,!s&&(0,z.jsx)(R,{variant:`ghost`,size:`sm`,onClick:n,"aria-label":r,className:`h-7 w-7 p-0`,children:(0,z.jsx)(T,{className:`h-4 w-4`})})]})]}),(0,z.jsx)(`div`,{className:`flex-1 overflow-auto px-4 py-3 space-y-3`,children:i}),a&&(0,z.jsx)(`div`,{className:`border-t px-4 py-2.5`,children:a})]})}function ut({index:e,total:t,onMove:n,upLabel:r=`Move up`,downLabel:i=`Move down`,disabled:a}){if(t<=1||e<0)return null;let o=!a&&e>0,s=!a&&e<t-1;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>o&&n(e-1),disabled:!o,"aria-label":r,title:r,children:(0,z.jsx)(he,{className:`h-4 w-4`})}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0`,onClick:()=>s&&n(e+1),disabled:!s,"aria-label":i,title:i,children:(0,z.jsx)(u,{className:`h-4 w-4`})})]})}function V({label:e,value:t,onCommit:n,onBlur:r,placeholder:i,disabled:a,mono:o,testId:s}){return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsx)(L,{value:t,onChange:e=>n(e.target.value),onBlur:e=>r?.(e.target.value),placeholder:i,disabled:a,"data-testid":s,className:C(`h-8 text-sm`,o&&`font-mono`)})]})}function dt({label:e,value:t,onCommit:n,placeholder:r,disabled:i}){return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsx)(L,{type:`number`,value:t??``,onChange:e=>{let t=e.target.value;n(t===``?void 0:Number(t))},placeholder:r,disabled:i,className:`h-8 text-sm`})]})}function H({label:e,value:t,options:n,onCommit:r,placeholder:i=`—`,disabled:a}){let o=e=>e===``?ft:e,s=e=>e===ft?``:e;return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsxs)(h,{value:o(t??``),onValueChange:e=>r(s(e)),disabled:a,children:[(0,z.jsx)(v,{className:`h-8 text-sm`,children:(0,z.jsx)(N,{placeholder:i})}),(0,z.jsx)(x,{children:n.map(e=>(0,z.jsx)(I,{value:o(e.value),children:e.label},e.value))})]})]})}var ft=`__inspector_select_none__`;function pt({label:e,value:t,onCommit:n,disabled:r}){return(0,z.jsxs)(`label`,{className:`flex items-center gap-2 text-xs cursor-pointer select-none`,children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:t,disabled:r,onChange:e=>n(e.target.checked),className:`h-3.5 w-3.5`}),(0,z.jsx)(`span`,{children:e})]})}function mt({label:e,onClick:t,disabled:n}){return(0,z.jsxs)(R,{variant:`outline`,size:`sm`,onClick:t,disabled:n,className:`w-full gap-1.5 text-muted-foreground hover:border-destructive/40 hover:bg-destructive/5 hover:text-destructive`,children:[(0,z.jsx)(F,{className:`h-3.5 w-3.5`}),e]})}function ht({message:e}){return(0,z.jsx)(`div`,{className:`text-xs italic text-muted-foreground p-4 text-center`,children:e})}function gt(e,t,n){let r=Array.isArray(e)?[...e]:[];return n===null?r.splice(t,1):r[t]=n,r}function _t(e,t){let n=Array.isArray(e)?[...e]:[];return n.push(t),n}function vt(e,t,n){let r=Array.isArray(e)?[...e]:[];if(t<0||t>=r.length)return r;let i=Math.max(0,Math.min(r.length-1,n));if(i===t)return r;let[a]=r.splice(t,1);return r.splice(i,0,a),r}function yt(e,t){let n=new Set(t.filter(e=>typeof e==`string`));for(let t=1;t<1e4;t++){let r=`${e}_${t}`;if(!n.has(r))return r}return`${e}_${Date.now()}`}function bt(e){return Array.isArray(e)?{shape:`array`,entries:e.map((e,t)=>{let{name:n,...r}=e??{};return{name:typeof n==`string`&&n?n:`field_${t+1}`,def:r}})}:e&&typeof e==`object`?{shape:`record`,entries:Object.entries(e).map(([e,t])=>({name:e,def:{...t??{}}}))}:{shape:`record`,entries:[]}}function xt(e){if(e.shape===`array`)return e.entries.map(e=>({name:e.name,...e.def}));let t={};for(let n of e.entries)t[n.name]=n.def;return t}function St(e,t){return e.entries.findIndex(e=>e.name===t)}function Ct(e,t,n){let r={type:t,label:n??wt(e)};return(t===`select`||t===`multiselect`||t===`radio`||t===`checkboxes`)&&(r.options=[]),{name:e,def:r}}function wt(e){return e?e.split(`_`).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(` `):``}function Tt(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:`field`}function Et(e){let t=e.trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+/g,``).replace(/_{2,}/g,`_`);return t?/^[a-z_]/.test(t)?t:`f_${t}`:``}function Dt(e){return Array.isArray(e)?e.filter(e=>!!e&&typeof e==`object`).map(e=>({key:typeof e.key==`string`?e.key:``,label:typeof e.label==`string`?e.label:``})).filter(e=>e.key):[]}function Ot(e,t){let n=/[a-z0-9]/i.test(e)?Tt(e):`group`;if(!t.includes(n))return n;let r=2;for(;t.includes(`${n}_${r}`);)r+=1;return`${n}_${r}`}function kt(e,t){let n=t.trim()||`New section`,r=Ot(n,e.map(e=>e.key));return[...e,{key:r,label:n}]}function At(e,t,n){let r=n.trim();return r?e.map(e=>e.key===t?{...e,label:r}:e):e}function jt(e,t){return e.filter(e=>e.key!==t)}function Mt(e,t,n){let r=e.findIndex(e=>e.key===t);if(r<0)return e;let i=r+n;return i<0||i>=e.length?e:Pt(e,r,i)}function Nt(e,t){return{shape:e.shape,entries:e.entries.map(e=>e.def.group===t?{name:e.name,def:{...e.def,group:void 0}}:e)}}function Pt(e,t,n){let r=e.slice(),[i]=r.splice(t,1);return r.splice(n,0,i),r}function Ft(e,t,n){let r=Array.isArray(t)?t.filter(e=>typeof e?.key==`string`):[],i=new Map;for(let e of r)i.set(e.key,{key:e.key,label:String(e.label??e.key),entries:[]});let a=new Set(r.map(e=>e.key));for(let t of e.entries){let e=typeof t.def.group==`string`?t.def.group:null;e&&a.has(e)?i.get(e).entries.push(t):(i.has(null)||i.set(null,{key:null,label:`Ungrouped`,entries:[]}),i.get(null).entries.push(t))}let o=!!n?.includeEmptyDeclared;return Array.from(i.values()).filter(e=>e.entries.length>0||o&&e.key!==null)}function It(e,t){return e===t?!0:JSON.stringify(e??null)===JSON.stringify(t??null)}function Lt(e,t){let n=new Set([...Object.keys(e),...Object.keys(t)]),r=[];for(let i of n)It(e[i],t[i])||r.push(i);return r.sort()}function Rt(e,t){let n=bt(e),r=bt(t),i=new Map(n.entries.map(e=>[e.name,e])),a=new Set(r.entries.map(e=>e.name)),o={},s=0,c=0;for(let e of r.entries){let t=i.get(e.name);if(!t){o[e.name]={name:e.name,status:`added`,changedKeys:[]},s+=1;continue}let n=Lt(t.def,e.def);n.length?(o[e.name]={name:e.name,status:`changed`,changedKeys:n},c+=1):o[e.name]={name:e.name,status:`unchanged`,changedKeys:[]}}let l=n.entries.filter(e=>!a.has(e.name));return{byName:o,removed:l,counts:{added:s,changed:c,removed:l.length}}}function zt(e,t){if(e==null)return!0;let n=typeof e==`string`?e:e.source;if(!n)return!0;try{return U(n.trim(),t)}catch{return!0}}function U(e,t){let n=Bt(e,`||`);if(n.length>1)return n.some(e=>U(e.trim(),t));let r=Bt(e,`&&`);if(r.length>1)return r.every(e=>U(e.trim(),t));if(e.startsWith(`!`))return!U(e.slice(1).trim(),t);let i=e.match(/^(.+?)\s+in\s+(\[.*\])$/);if(i){let e=Vt(i[1].trim(),t),n=Ht(i[2]);return Array.isArray(n)&&n.includes(e)}let a=e.match(/^(.+?)\s*(==|!=)\s*(.+)$/);if(a){let e=Vt(a[1].trim(),t),n=Ht(a[3].trim()),r=e=>e==null,i=r(e)&&r(n)?!0:e===n;return a[2]===`==`?i:!i}return!!Vt(e,t)}function Bt(e,t){let n=[],r=0,i=null,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(i){a+=s,s===i&&e[o-1]!==`\\`&&(i=null);continue}if(s===`'`||s===`"`){i=s,a+=s;continue}if(s===`(`||s===`[`?r++:(s===`)`||s===`]`)&&r--,r===0&&e.slice(o,o+t.length)===t&&e[o+t.length]!==`=`){n.push(a),a=``,o+=t.length-1;continue}a+=s}return a&&n.push(a),n}function Vt(e,t){if(/^['"]/.test(e)||/^-?\d/.test(e)||e===`true`||e===`false`||e===`null`)return Ht(e);let n=e.split(`.`),r=t;for(let e of n){if(r==null)return;r=r[e]}return r}function Ht(e){let t=e.trim();if(t===`true`)return!0;if(t===`false`)return!1;if(t===`null`)return null;if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(t.startsWith(`'`)&&t.endsWith(`'`)||t.startsWith(`"`)&&t.endsWith(`"`))return t.slice(1,-1);if(t.startsWith(`[`)&&t.endsWith(`]`))try{let e=t.replace(/'([^']*)'/g,(e,t)=>JSON.stringify(t));return JSON.parse(e)}catch{return[]}return t}var Ut={object:`Object`,field:`Field`,trigger:`Trigger`,validation:`Validation Rule`,hook:`Hook`,view:`View`,page:`Page`,dashboard:`Dashboard`,app:`Application`,action:`Action`,report:`Report`,flow:`Flow`,approval:`Approval Process`,datasource:`Datasource`,translation:`Translation`,router:`Router`,function:`Function`,service:`Service`,email_template:`Email Template`,book:`Documentation Book`,permission:`Permission Set`,profile:`Profile`,role:`Role`,agent:`AI Agent`,tool:`AI Tool`,skill:`AI Skill`,package:`Package`,data:`Dataset`,job:`Background Job`,api:`API Endpoint`,connector:`Connector`,mapping:`Field Mapping`,policy:`Policy`,webhook:`Webhook`,theme:`Theme`,sharing_rule:`Sharing Rule`,analytics_cube:`Analytics Cube`},Wt={object:`对象`,field:`字段`,trigger:`触发器`,validation:`校验规则`,hook:`钩子`,view:`视图`,page:`页面`,dashboard:`仪表板`,app:`应用`,action:`操作`,report:`报表`,flow:`流程`,approval:`审批流程`,datasource:`数据源`,translation:`翻译`,router:`路由`,function:`函数`,service:`服务`,email_template:`邮件模板`,book:`文档手册`,permission:`权限集`,profile:`配置文件`,role:`角色`,agent:`AI 智能体`,tool:`AI 工具`,skill:`AI 技能`,package:`包`,data:`数据集`,job:`后台任务`,api:`API 端点`,connector:`连接器`,mapping:`字段映射`,policy:`策略`,webhook:`Webhook 回调`,theme:`主题`,sharing_rule:`共享规则`,analytics_cube:`分析立方体`},Gt={data:`Data`,ui:`UI`,automation:`Automation`,ai:`AI`,system:`System`,platform:`Platform`,identity:`Identity`,security:`Security`,other:`Other`},Kt={data:`数据`,ui:`界面`,automation:`自动化`,ai:`AI`,system:`系统`,platform:`平台`,identity:`身份`,security:`安全`,other:`其他`},qt={"engine.directory.title":`All Metadata Types`,"engine.directory.description":`The platform protocol exposes {count} metadata types ({writable} writable at runtime). Click any tile to browse, override, or create instances.`,"engine.directory.search":`Search metadata types…`,"engine.directory.writableOnly":`Writable only`,"engine.directory.quickFind":`Quick Find`,"engine.directory.noMatches":`No matches`,"engine.directory.noMatchesHint":`Adjust your search or filters to see more metadata types.`,"engine.directory.loading":`Loading metadata types…`,"engine.directory.loadFailed":`Failed to load metadata types`,"engine.directory.all":`All`,"engine.directory.diagnosticsLink":`View all issues ({count})`,"engine.directory.invalidTooltip":`{count} invalid item(s) — click to fix`,"engine.directory.warnTooltip":`{count} item(s) with warnings`,"engine.directory.itemCountTooltip":`{count} item(s) of this type`,"engine.directory.allPackages":`All packages`,"engine.directory.packageFilter":`Package`,"engine.home.greetingMorning":`Good morning`,"engine.home.greetingAfternoon":`Good afternoon`,"engine.home.greetingEvening":`Good evening`,"engine.home.subtitle":`Your control center for modeling data, designing experiences, and automating the platform.`,"engine.home.statTypes":`Metadata types`,"engine.home.statWritable":`Runtime-writable`,"engine.home.statPackages":`Packages`,"engine.home.statIssues":`Open issues`,"engine.home.allHealthy":`All healthy`,"engine.home.allHealthyHint":`No validation issues across your metadata.`,"engine.home.issuesHint":`{count} item(s) need attention.`,"engine.home.explore":`Explore`,"engine.home.exploreHint":`Jump into any domain of the platform.`,"engine.home.quickActions":`Quick actions`,"engine.home.quickActionsHint":`Create new metadata in one click.`,"engine.home.newItem":`New {label}`,"engine.home.recent":`Recently viewed`,"engine.home.recentEmpty":`Nothing here yet — items you open will appear for quick access.`,"engine.home.browseAll":`Browse all metadata`,"engine.home.openDiagnostics":`Review diagnostics`,"engine.home.viewDomain":`View`,"engine.home.typesLower":`types`,"engine.home.loading":`Loading your workspace…`,"engine.diagnostics.title":`Metadata Diagnostics`,"engine.diagnostics.description":`Every metadata item that failed load-time validation, grouped by type. Errors block features that depend on the item; warnings are advisory.`,"engine.diagnostics.back":`Back to metadata`,"engine.diagnostics.refresh":`Refresh`,"engine.diagnostics.loading":`Scanning metadata…`,"engine.diagnostics.loadFailed":`Failed to load diagnostics: {error}`,"engine.diagnostics.summary":`{count} issue(s) across {items} items in {types} types`,"engine.diagnostics.cleanTitle":`All clear`,"engine.diagnostics.cleanHint":`Scanned {items} item(s) across {types} type(s) — no issues found.`,"engine.diagnostics.severity.error":`Errors`,"engine.diagnostics.severity.warning":`Errors + Warnings`,"engine.diagnostics.col.name":`Item`,"engine.diagnostics.col.issues":`Issues`,"engine.diagnostics.errorN":`{count} error(s)`,"engine.diagnostics.warnN":`{count} warning(s)`,"engine.diagnostics.more":`+{count} more…`,"engine.list.create":`New`,"engine.list.refresh":`Refresh`,"engine.list.search":`Search name, label, description…`,"engine.list.empty":`No items yet.`,"engine.list.items":`Items`,"engine.list.filtered":`Filtered`,"engine.list.invalid":`Invalid`,"engine.list.warnings":`Warnings`,"engine.list.invalidTitle":`Invalid metadata`,"engine.list.invalidCount":`{count} validation error(s):`,"engine.list.warnTitle":`Metadata warnings`,"engine.list.warnCount":`{count} warning(s):`,"engine.list.allSources":`All sources`,"engine.list.allPackages":`All packages`,"engine.package.writableRequired":`Pick or create a writable base (package) first — this item cannot be authored into a read-only code package.`,"engine.list.packageFilter":`Package`,"engine.list.source.artifact":`Artifact`,"engine.list.source.runtime":`Runtime`,"engine.list.source.artifactDesc":`Shipped by code package`,"engine.list.source.runtimeDesc":`Authored at runtime`,"engine.list.col.name":`Name`,"engine.list.col.label":`Label`,"engine.list.col.source":`Source`,"engine.list.col.object":`Object`,"engine.list.col.type":`Type`,"engine.list.col.description":`Description`,"engine.list.emptyType":`No {type} items registered`,"engine.list.emptyQuery":`No matches for "{query}"`,"engine.list.createHint":`Click "New" above to create the first {type}.`,"engine.list.readOnlyHint":`This type is read-only — instances are defined by code artifacts in packages.`,"engine.edit.save":`Save`,"engine.edit.publish":`Publish`,"engine.edit.publishBlockedDirty":`Save first, then publish.`,"engine.edit.discardDraft":`Discard draft`,"engine.edit.discardDraftConfirm":`Discard the pending draft for {type}/{name}?`,"engine.edit.draftPending":`Pending changes — save lives in a draft. Click Publish to release.`,"engine.edit.rollback":`Rollback to this version`,"engine.edit.rollbackConfirm":`Restore version {version}? This writes the historical body back as the current published overlay.`,"engine.edit.reset":`Reset overlay`,"engine.edit.resetConfirm":`Reset overlay for {type}/{name}?`,"engine.edit.delete":`Delete`,"engine.edit.deleteConfirm":`Delete {type}/{name}? This cannot be undone.`,"engine.edit.lockFull":`This item is locked and cannot be edited or deleted.`,"engine.edit.lockNoOverlay":`This item is locked and cannot be edited.`,"engine.edit.lockNoDelete":`This item is locked and cannot be deleted.`,"engine.edit.history":`History`,"engine.edit.auditTab":`Audit log`,"engine.edit.auditCount":`events`,"engine.edit.auditEmptyTitle":`No audit events yet`,"engine.edit.auditEmptyDescription":`No save, publish, rollback, delete or reset attempts have been recorded for this item. Once someone tries to change it (allowed or denied), the attempt will appear here.`,"engine.edit.auditColTime":`Time`,"engine.edit.auditColActor":`Actor`,"engine.edit.auditColOperation":`Operation`,"engine.edit.auditColOutcome":`Outcome`,"engine.edit.auditColLock":`Lock`,"engine.edit.auditColNote":`Note`,"engine.edit.refresh":`Refresh`,"engine.edit.layers":`Layers`,"engine.layers.code":`Code`,"engine.layers.overlay":`Overlay`,"engine.layers.effective":`Effective`,"engine.layers.diff":`Diff`,"engine.layers.diff.field":`Field`,"engine.layers.diff.code":`Code (artifact)`,"engine.layers.diff.effective":`Effective`,"engine.layers.diff.status":`Status`,"engine.layers.diff.unchanged":`unchanged`,"engine.layers.diff.modified":`modified`,"engine.layers.diff.added":`added`,"engine.layers.diff.removed":`removed`,"engine.layers.diff.showUnchanged":`Show unchanged`,"engine.layers.diff.noChanges":`Overlay matches the code value — no field-level differences.`,"engine.layers.diff.noBaseline":`No code-level artifact to compare against. All fields are runtime-authored.`,"engine.layers.diff.summary":`{modified} modified · {added} added · {removed} removed`,"engine.edit.overlaidCount":`{count} overlaid`,"engine.edit.noOverlay":`no overlay`,"engine.edit.references":`References`,"engine.edit.form":`Form`,"engine.edit.edit":`Edit`,"engine.edit.editOverlay":`Edit overlay`,"engine.edit.createNew":`Create new`,"engine.edit.detail":`Detail`,"engine.edit.preview":`Preview`,"engine.edit.designer":`Designer`,"engine.edit.related":`Related`,"engine.edit.hideInspector":`Hide inspector`,"engine.edit.showInspector":`Show inspector`,"engine.edit.noChanges":`No changes to save`,"engine.edit.inspector":`Inspector`,"engine.edit.inspector.properties":`Properties`,"engine.edit.inspector.source":`Source`,"engine.edit.fullscreen":`Fullscreen`,"engine.edit.exitFullscreen":`Exit fullscreen`,"engine.edit.designMode":`Design`,"engine.edit.previewMode":`Preview`,"engine.inspector.widget.kind":`Widget`,"engine.inspector.widget.close":`Close widget`,"engine.inspector.widget.title":`Title`,"engine.inspector.widget.type":`Type`,"engine.inspector.widget.object":`Data Source (Object)`,"engine.inspector.widget.valueField":`Value Field`,"engine.inspector.widget.categoryField":`Category Field`,"engine.inspector.widget.aggregate":`Aggregate`,"engine.inspector.widget.color":`Color Variant`,"engine.inspector.widget.width":`Width`,"engine.inspector.widget.height":`Height`,"engine.inspector.widget.remove":`Remove widget`,"engine.inspector.widget.datasetSection":`Dataset binding`,"engine.inspector.widget.dataset":`Dataset`,"engine.inspector.widget.datasetPlaceholder":`e.g. sales_pipeline`,"engine.inspector.widget.datasetHint":`Bind a governed dataset. When set, it takes precedence over the inline object query above and the widget renders via the dataset (consistent, cross-object, RLS-enforced).`,"engine.inspector.widget.dimensions":`Dimensions`,"engine.inspector.widget.dimensionsPlaceholder":`e.g. stage, region (comma-separated)`,"engine.inspector.widget.dimensionsHint":`Dataset dimension names to group by. Leave empty for a single-value KPI metric.`,"engine.inspector.widget.values":`Values (measures)`,"engine.inspector.widget.valuesPlaceholder":`e.g. revenue, deal_count (comma-separated)`,"engine.inspector.widget.valuesHint":`Dataset measure names to show.`,"engine.inspector.flowNode.kind":`Node`,"engine.inspector.flowNode.close":`Close node`,"engine.inspector.flowNode.id":`ID`,"engine.inspector.flowNode.label":`Label`,"engine.inspector.flowNode.type":`Node Type`,"engine.inspector.flowNode.description":`Description`,"engine.inspector.flowNode.configuration":`Configuration`,"engine.inspector.flowNode.config":`Config (JSON)`,"engine.inspector.flowNode.advanced":`Advanced (JSON)`,"engine.inspector.flowNode.advancedHint":`Optional custom keys not covered by the form above — most flows don’t need this.`,"engine.inspector.flowNode.noConfig":`No configuration needed for this node type.`,"engine.inspector.flowNode.kv.add":`Add entry`,"engine.inspector.flowNode.kv.key":`Key`,"engine.inspector.flowNode.kv.value":`Value`,"engine.inspector.flowNode.kv.remove":`Remove entry`,"engine.inspector.flowNode.kv.empty":`No entries yet.`,"engine.inspector.flowNode.list.add":`Add item`,"engine.inspector.flowNode.list.item":`Value`,"engine.inspector.flowNode.list.remove":`Remove item`,"engine.inspector.flowNode.list.empty":`No items yet.`,"engine.inspector.flowNode.remove":`Remove node`,"engine.inspector.flowEdge.kind":`Connection`,"engine.inspector.flowEdge.close":`Close connection`,"engine.inspector.flowEdge.missing":`This connection no longer exists.`,"engine.inspector.flowEdge.source":`From`,"engine.inspector.flowEdge.target":`To`,"engine.inspector.flowEdge.routing":`Routing`,"engine.inspector.flowEdge.branch":`Branch`,"engine.inspector.flowEdge.label":`Branch label`,"engine.inspector.flowEdge.labelHint":`e.g. approve / reject`,"engine.inspector.flowEdge.condition":`Condition`,"engine.inspector.flowEdge.conditionHint":`CEL expression — taken when it evaluates true`,"engine.inspector.flowEdge.isDefault":`Default branch (else)`,"engine.inspector.flowEdge.hint":`The engine follows this connection when its branch label is selected or its condition is met. The default branch is taken when no other matches.`,"engine.inspector.flowEdge.remove":`Remove connection`,"engine.inspector.flowEdge.approvalBranch":`Approval branch`,"engine.inspector.flowEdge.branchApprove":`Approve`,"engine.inspector.flowEdge.branchReject":`Reject`,"engine.inspector.flowEdge.branchRevise":`Revise — send back`,"engine.inspector.flowEdge.branchCustom":`— Custom —`,"engine.inspector.flowEdge.connection":`Connection`,"engine.inspector.flowEdge.type":`Type`,"engine.inspector.flowEdge.typeDefault":`Normal`,"engine.inspector.flowEdge.typeConditional":`Conditional`,"engine.inspector.flowEdge.typeFault":`Fault (error path)`,"engine.inspector.flowEdge.typeBack":`Back-edge (revise loop)`,"engine.inspector.flowEdge.backHint":`A back-edge re-enters an earlier node to close a loop (e.g. an approval revise loop). It is traversed normally at run time but excluded from cycle validation.`,"engine.inspector.workflowAction.kind":`Action`,"engine.inspector.workflowAction.close":`Close action`,"engine.inspector.workflowAction.type":`Action Type`,"engine.inspector.workflowAction.name":`Name`,"engine.inspector.workflowAction.config":`Config (JSON)`,"engine.inspector.workflowAction.remove":`Remove action`,"engine.inspector.appNav.kind":`Nav Item`,"engine.inspector.appNav.close":`Close nav item`,"engine.inspector.appNav.label":`Label`,"engine.inspector.appNav.path":`Path / Route`,"engine.inspector.appNav.icon":`Icon`,"engine.inspector.appNav.kindField":`Kind`,"engine.inspector.appNav.remove":`Remove nav item`,"engine.inspector.viewColumn.kind":`Column`,"engine.inspector.viewColumn.close":`Close column`,"engine.inspector.viewColumn.header":`Header`,"engine.inspector.viewColumn.accessorKey":`Field key`,"engine.inspector.viewColumn.width":`Width`,"engine.inspector.viewColumn.align":`Align`,"engine.inspector.viewColumn.sortable":`Sortable`,"engine.inspector.viewColumn.filterable":`Filterable`,"engine.inspector.viewColumn.remove":`Remove column`,"engine.inspector.viewColumn.outlineLabel":`Columns`,"engine.inspector.view.kind":`View`,"engine.inspector.view.close":`Close`,"engine.inspector.view.label":`Label`,"engine.inspector.view.labelPlaceholder":`e.g. All Leads`,"engine.inspector.view.type":`View type`,"engine.inspector.view.object":`Object`,"engine.inspector.view.objectPlaceholder":`e.g. crm_lead`,"engine.inspector.view.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.view.type.grid":`Table / List`,"engine.inspector.view.type.kanban":`Kanban`,"engine.inspector.view.type.calendar":`Calendar`,"engine.inspector.view.type.gallery":`Gallery`,"engine.inspector.view.type.gantt":`Gantt`,"engine.inspector.view.type.timeline":`Timeline`,"engine.inspector.view.type.map":`Map`,"engine.inspector.view.type.chart":`Chart`,"engine.inspector.pageBlock.kind":`Block`,"engine.inspector.pageBlock.close":`Close block`,"engine.inspector.pageBlock.type":`Type`,"engine.inspector.pageBlock.id":`ID`,"engine.inspector.pageBlock.className":`Class names`,"engine.inspector.pageBlock.hidden":`Hidden (CEL)`,"engine.inspector.pageBlock.properties":`Properties`,"engine.inspector.pageBlock.advanced":`Advanced`,"engine.inspector.pageBlock.remove":`Remove block`,"engine.inspector.pageBlock.outlineLabel":`Blocks`,"engine.inspector.report.kind":`Report`,"engine.inspector.report.close":`Close report`,"engine.inspector.report.name":`Name`,"engine.inspector.report.nameHint":`snake_case identifier (cannot change after create)`,"engine.inspector.report.namePlaceholder":`e.g. pipeline_by_stage`,"engine.inspector.report.label":`Label`,"engine.inspector.report.labelPlaceholder":`e.g. Pipeline by Stage`,"engine.inspector.report.type":`Report type`,"engine.inspector.report.type.tabular":`Tabular`,"engine.inspector.report.type.summary":`Summary`,"engine.inspector.report.type.matrix":`Matrix`,"engine.inspector.report.type.joined":`Joined`,"engine.inspector.report.dataset":`Dataset`,"engine.inspector.report.datasetPlaceholder":`e.g. sales_metrics`,"engine.inspector.report.values":`Values (measures)`,"engine.inspector.report.valuesEmpty":`No measures yet. Add one from the dataset below.`,"engine.inspector.report.rows":`Rows (dimensions)`,"engine.inspector.report.rowsEmpty":`No dimensions yet. Add one from the dataset below.`,"engine.inspector.report.columnsAcross":`Columns (across dimensions)`,"engine.inspector.report.columnsAcrossEmpty":`No across dimensions yet — the matrix pivots rows × columns.`,"engine.inspector.report.chart":`Chart`,"engine.inspector.report.chartType":`Chart type`,"engine.inspector.report.chartNone":`None (table only)`,"engine.inspector.report.chartTitle":`Chart title`,"engine.inspector.report.chartX":`X-Axis (dimension)`,"engine.inspector.report.chartY":`Y-Axis (measure)`,"engine.inspector.report.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.moreFields":`More fields`,"engine.inspector.action.kind":`Action`,"engine.inspector.action.close":`Close action`,"engine.inspector.dashboard.kind":`Dashboard`,"engine.inspector.dashboard.close":`Close dashboard`,"engine.inspector.dashboard.label":`Label`,"engine.inspector.dashboard.labelPlaceholder":`e.g. Sales Overview`,"engine.inspector.dashboard.description":`Description`,"engine.inspector.dashboard.descriptionPlaceholder":`Optional summary shown in the header`,"engine.inspector.dashboard.widgets":`Widgets`,"engine.inspector.dashboard.widgetsEmpty":`No widgets yet. Add one below.`,"engine.inspector.dashboard.removeWidget":`Remove widget`,"engine.inspector.dashboard.noSchema":`Spec schema unavailable — basic properties only.`,"engine.inspector.add.widget":`Add widget`,"engine.inspector.add.block":`Add block`,"engine.inspector.add.node":`Add node`,"engine.inspector.add.step":`Add step`,"engine.inspector.add.action":`Add action`,"engine.inspector.add.nav":`Add nav item`,"engine.inspector.reorder.up":`Move up`,"engine.inspector.reorder.down":`Move down`,"engine.edit.overlay":`overlay`,"engine.edit.readOnlyBanner":`Viewing in read-only mode. Click {edit} to make changes.`,"engine.edit.readOnlyTypeBanner":`This metadata type is read-only for safety: it ships executable code or sensitive configuration and cannot be overlaid at runtime. Edit the source in your package and redeploy. To override this lock (use with caution), set {flag} to include {type}, or flip {override} in the registry.`,"engine.edit.artifactLockedBanner":`This {type} is provided by an installed package, so it is read-only at runtime. To change it, edit it in its source package and republish — or create a new {type} from scratch.`,"engine.badge.createOnly":`create-only`,"engine.repeater.empty":`No items. Click + to add.`,"engine.badge.writable":`writable`,"engine.badge.readOnly":`read-only`,"engine.edit.readOnly":`Read-only (runtime overrides disabled).`,"engine.edit.loading":`Loading`,"engine.edit.bespokeDesigner":`Designer`,"engine.edit.readOnlyHint":`Read-only — this metadata type does not allow runtime overrides. Edit the source in the package and redeploy.`,"engine.edit.unsaved":`Unsaved`,"engine.edit.unsavedHint":`You have unsaved changes.`,"engine.edit.diagnostics.title":`This metadata does not match the spec — {count} validation error(s).`,"engine.edit.diagnostics.warnTitle":`{count} warning(s) — review recommended.`,"engine.edit.diagnostics.more":`+{count} more…`,"engine.edit.loadFailed":`Failed to load {type}/{name}: {message}`,"engine.edit.unsavedLeaveConfirm":`You have unsaved changes. Leave this page anyway?`,"engine.edit.saving":`Saving…`,"engine.edit.savedAt":`Saved {time}`,"engine.edit.autoSaveOn":`Auto-save is on — click to disable`,"engine.edit.autoSaveOff":`Auto-save is off — click to enable`,"engine.edit.autoSavingShortly":`Auto-saving…`,"engine.edit.destructive":`Destructive change`,"engine.edit.destructiveHint":`The change would break existing references. Review the issues and confirm to force-save.`,"engine.edit.forceSave":`Force save`,"engine.cancel":`Cancel`,"engine.form.select":`Select...`,"engine.form.selectEllipsis":`Select…`,"engine.form.add":`Add`,"engine.form.addItem":`Add item`,"engine.form.addRow":`Add row`,"engine.form.remove":`Remove`,"engine.form.removeRow":`Remove row`,"engine.form.dragToReorder":`Drag to reorder`,"engine.form.arrayPlaceholder":`comma, separated, values`,"engine.form.loadingObjects":`Loading objects…`,"engine.form.noObjects":`object_name (no objects detected)`,"engine.form.selectObject":`Select object…`,"engine.form.selectObjectDots":`Select object...`,"engine.form.addObjects":`Add objects...`,"engine.form.loadingFields":`Loading fields…`,"engine.form.selectObjectFirst":`(Select an object first)`,"engine.form.selectField":`Select field…`,"engine.form.selectFieldDots":`Select field...`,"engine.form.addFields":`Add fields...`,"engine.form.noObjectBound":`No object bound`,"engine.form.none":`— None —`,"engine.form.notInObject":`(not in object)`,"engine.form.searchIcons":`Search icons…`,"engine.form.chooseIcon":`Choose an icon`,"engine.form.iconsTruncated":`Showing the first {shown} of {total} — type to narrow.`,"engine.form.noMatchingIcons":`No matching icons.`,"engine.form.keep":`Keep`,"engine.form.addField":`Add field…`,"engine.form.addFieldPlain":`Add field`,"engine.form.searchFields":`Search fields…`,"engine.form.allFieldsAdded":`All fields added`,"engine.form.noObjectFields":`No object fields ({error}).`,"engine.form.noMatchingFields":`No matching fields.`,"engine.form.noFieldsOnObject":`No fields on this object.`,"engine.form.added":`Added`,"engine.form.tagsPlaceholder":`Type and press Enter…`,"engine.form.noRows":`No rows. Click + to add.`,"engine.form.masterDetailSchemaError":`master-detail widget requires items.properties on the JSON schema (or an anyOf branch that has them).`,"engine.form.missingField":`Field {field} declared in form layout but missing from schema. Skipping.`,"engine.form.fallbackJson":`widget {widget} — falling back to JSON until a custom renderer is registered.`,"engine.form.keyRequired":`Key is required`,"engine.form.keyExists":`Key "{key}" already exists`,"engine.form.keyPattern":`Key must match {pattern}`,"engine.form.invalidJson":`Invalid JSON`,"engine.form.rootJsonObject":`Root must be a JSON object`,"engine.validation.invalid":`Invalid input`,"engine.validation.pattern":`Invalid string: must match pattern {pattern}`,"engine.validation.expectedStringUndefined":`Required text value`,"engine.validation.expectedType":`Invalid type: expected {expected}, received {received}`,"engine.validation.invalidOption":`Invalid option: expected one of {options}`,"engine.validation.failed":`Validation failed ({count} issues).`,"engine.validation.failedOne":`Validation failed (1 issue).`,"engine.validation.nameRequired":`A name is required.`,"engine.embedded.saved":`Saved.`,"engine.embedded.readOnlyParent":`The parent type is read-only — saving will still attempt a PUT and may be refused by the server.`,"engine.embedded.saveIntoParent":`Save into {parentType}`,"engine.embedded.saveNoPath":`Cannot save: this item has no embeddedPath registered.`,"engine.embedded.noSchema":`No form schema is registered for {type}. Edit the raw JSON below; saving will splice it back into {target}.`,"engine.embedded.readOnly":`Read-only`,"engine.embedded.noPathHint":`No embedded path registered — cannot determine where to write this item back.`,"engine.packages.title":`Packages`,"engine.packages.description":`Author, publish, and manage the packages installed in this environment.`,"engine.packages.refresh":`Refresh`,"engine.packages.import":`Import`,"engine.packages.importing":`Importing…`,"engine.packages.new":`New Package`,"engine.packages.search":`Search packages…`,"engine.packages.showPlatform":`Show platform packages ({count})`,"engine.packages.empty":`No packages`,"engine.packages.emptyCreate":`Create your first package to start authoring metadata.`,"engine.packages.emptyFiltered":`No packages match your filters.`,"engine.packages.loadFailed":`Failed to load packages`,"engine.packages.col.name":`Name`,"engine.packages.col.version":`Version`,"engine.packages.col.scope":`Scope`,"engine.packages.col.status":`Status`,"engine.packages.scope.project":`Project`,"engine.packages.scope.system":`System`,"engine.packages.scope.cloud":`Cloud`,"engine.packages.status.enabled":`Enabled`,"engine.packages.status.disabled":`Disabled`,"engine.packages.import.invalidJson":`Selected file is not valid JSON.`,"engine.packages.import.invalidPackage":`Invalid package file: missing "id" or "name".`,"engine.packages.import.success":`Imported "{id}". Refresh the app switcher to use it.`,"engine.packages.import.failed":`Import failed`,"engine.packages.create.title":`New Package`,"engine.packages.create.description":`Create a project-scoped package to author and publish your own metadata. The id should be reverse-domain (e.g. {example}).`,"engine.packages.create.id":`Package ID`,"engine.packages.create.idInvalid":`Use letters, numbers, dot, dash or underscore (2–255 chars).`,"engine.packages.create.name":`Display name`,"engine.packages.create.version":`Version`,"engine.packages.create.versionInvalid":`Use semantic version, e.g. 0.1.0`,"engine.packages.create.creating":`Creating…`,"engine.packages.create.submit":`Create package`,"engine.packages.create.failed":`Failed to create package`,"engine.packages.detail.type":`Type`,"engine.packages.detail.description":`Description`,"engine.packages.detail.browseMetadata":`Browse this package's metadata`,"engine.packages.detail.pendingChanges":`Pending changes`,"engine.packages.detail.pendingHint":`Drafted, not yet published. Publish the whole app, or review each below.`,"engine.packages.detail.publishApp":`Publish app ({count})`,"engine.packages.detail.discardChanges":`Discard changes ({count})`,"engine.packages.detail.kernelReadOnly":`This is a platform kernel package. Authoring actions are disabled.`,"engine.packages.detail.actions":`Actions`,"engine.packages.detail.publish":`Publish`,"engine.packages.detail.publishing":`Publishing…`,"engine.packages.detail.revert":`Revert`,"engine.packages.detail.enable":`Enable`,"engine.packages.detail.disable":`Disable`,"engine.packages.detail.export":`Export`,"engine.packages.detail.exporting":`Exporting…`,"engine.packages.detail.deleteApp":`Delete app`,"engine.packages.detail.deleting":`Deleting…`,"engine.packages.detail.discarding":`Discarding…`,"engine.packages.detail.actionFailed":`Action failed`,"engine.packages.detail.publishBlocked":`Publish blocked by {count} validation error(s).`,"engine.packages.detail.nothingToPublish":`Nothing to publish.`,"engine.packages.detail.published":`Package published.`,"engine.packages.detail.publishDraftsPartial":`Published {published}; {failed} failed.`,"engine.packages.detail.publishDraftsOk":`App published — all drafts are now live.`,"engine.packages.detail.reverted":`Reverted to last published state.`,"engine.packages.detail.discardDraftsPartial":`Discarded {discarded}; {failed} failed.`,"engine.packages.detail.discardDraftsOk":`All pending changes discarded — back to the published version.`,"engine.packages.detail.deleteConfirm":`Delete "{name}" and all its data?
3
3
 
4
4
  This removes every object, view, dashboard and app in the package AND drops the database tables those objects created. This cannot be undone.`,"engine.packages.detail.deleteFailed":`Delete failed`,"engine.packages.detail.disabled":`Package disabled.`,"engine.packages.detail.enabled":`Package enabled.`,"engine.packages.detail.exported":`Package exported.`,"engine.packages.detail.duplicate":`Duplicate`,"engine.packages.detail.duplicating":`Duplicating…`,"engine.packages.detail.duplicatePrompt":`New package id for the duplicate (a fresh writable base):`,"engine.packages.detail.duplicated":`Package duplicated into a new base.`,"engine.packages.detail.adoptOrphans":`Adopt loose items`,"engine.packages.detail.adopting":`Adopting…`,"engine.packages.detail.adoptConfirm":`Move all package-less (loose) metadata in this environment INTO "{name}"? This rebinds orphaned items to this base.`,"engine.packages.detail.adopted":`Loose items adopted into this base.`,"engine.packages.detail.deleteKeepData":`Delete the DATA too?
5
5
 
@@ -7,5 +7,5 @@ OK = also drop all records (destructive). Cancel = keep records, delete only the
7
7
 
8
8
  这会移除此软件包中的所有对象、视图、仪表板和应用,并删除这些对象创建的数据库表。此操作不可撤销。`,"engine.packages.detail.deleteFailed":`删除失败`,"engine.packages.detail.disabled":`软件包已禁用。`,"engine.packages.detail.enabled":`软件包已启用。`,"engine.packages.detail.exported":`软件包已导出。`,"engine.packages.detail.duplicate":`复制`,"engine.packages.detail.duplicating":`复制中…`,"engine.packages.detail.duplicatePrompt":`副本的新软件包 id(一个全新的可写基座):`,"engine.packages.detail.duplicated":`软件包已复制为新基座。`,"engine.packages.detail.adoptOrphans":`收编散落项`,"engine.packages.detail.adopting":`收编中…`,"engine.packages.detail.adoptConfirm":`把本环境中所有无软件包(散落)的元数据移动到 "{name}" 吗?这会把孤儿项重新绑定到此基座。`,"engine.packages.detail.adopted":`散落项已收编进此基座。`,"engine.packages.detail.deleteKeepData":`同时删除数据吗?
9
9
 
10
- 确定 = 同时删除所有记录(破坏性)。取消 = 保留记录,仅删除结构。`,"engine.quickfind.placeholder":`搜索元数据类型或条目…(如:view、account)`,"engine.quickfind.empty":`输入关键字以搜索所有元数据类型。`,"engine.quickfind.title":`快速查找`,"engine.quickfind.indexing":`正在索引所有类型,共`,"engine.quickfind.noMatches":`没有匹配项。`,"engine.breadcrumb.allTypes":`元数据`,"perm.action.create":`创建`,"perm.action.read":`读取`,"perm.action.edit":`编辑`,"perm.action.delete":`删除`,"perm.action.transfer":`转移所有者`,"perm.action.restore":`从回收站恢复`,"perm.action.purge":`彻底删除`,"perm.action.viewAll":`查看所有记录(绕过共享规则)`,"perm.action.modifyAll":`修改所有记录(绕过共享规则)`,"perm.col.object":`对象`,"perm.col.bulk":`批量`,"perm.bulk.read":`读`,"perm.bulk.crud":`增改删`,"perm.bulk.all":`全选`,"perm.bulk.none":`清空`,"perm.filter.placeholder":`筛选对象…`,"perm.filter.onlyGranted":`只看已授权`,"perm.filter.empty":`没有匹配的对象。`,"perm.field.name":`名称`,"perm.field.label":`标签`,"perm.field.isProfile":`作为 Profile`,"perm.field.loading":`加载字段中…`,"perm.field.empty":`该对象未注册字段。`,"perm.field.col.name":`字段`,"perm.field.read":`读`,"perm.field.edit":`改`,"perm.stat.objects":`已授权对象`,"perm.stat.fields":`已授权字段`,"perm.stat.objectsGranted":`已授权对象`,"perm.stat.fieldOverrides":`字段覆盖`,"perm.stat.objectsSuffix":`个对象`,"perm.subtitle.profile":`Profile`,"perm.subtitle.set":`权限集`,"perm.loading":`加载权限集 {name}…`,"perm.readOnly":`只读(OS_METADATA_WRITABLE 未启用)`,"designer.unsavedChanges":`未保存的修改`,"designer.editingOverlay":`编辑覆盖层`,"designer.codeBaseline":`代码基线`,"designer.canvas.nameToStart":`在右侧属性面板中为对象命名,即可开始设计字段。`,"designer.canvas.noFields":`尚无字段`,"designer.canvas.noFieldsHint":`添加字段以开始设计表单。点击任意字段可在右侧编辑其属性。`,"designer.canvas.addField":`添加字段`,"designer.canvas.addSection":`添加分组`,"designer.canvas.addFieldToSection":`向此分组添加字段`,"designer.canvas.searchFieldType":`搜索字段类型…`,"designer.canvas.noMatchingTypes":`没有匹配的类型。`,"designer.canvas.ungrouped":`未分组`,"designer.canvas.emptySection":`空分组`,"designer.canvas.dropHint":`将字段拖到此处,或在下方添加`,"designer.canvas.dropToAssign":`拖放以归入此分组`,"designer.canvas.collapseAll":`全部折叠`,"designer.canvas.expandAll":`全部展开`,"designer.canvas.fields":`个字段`,"designer.canvas.required":`个必填`,"designer.canvas.sections":`个分组`,"designer.canvas.collapseSection":`折叠分组`,"designer.canvas.expandSection":`展开分组`,"designer.canvas.moveSectionUp":`上移分组`,"designer.canvas.moveSectionDown":`下移分组`,"designer.canvas.removeSection":`删除分组`,"designer.canvas.removeSectionHint":`删除分组(字段移至未分组)`,"designer.canvas.renameHint":`双击重命名`,"designer.canvas.sectionN":`分组 {n}`,"designer.stub.pickDate":`选择日期…`,"designer.stub.off":`关闭`,"designer.stub.select":`请选择…`,"designer.stub.pickMulti":`选择一项或多项…`,"designer.stub.uploadImage":`上传图片`,"designer.stub.uploadAvatar":`上传头像`,"designer.stub.upload":`上传{type}`,"designer.stub.qrcode":`二维码`,"designer.stub.computed":`计算值`,"designer.stub.composite":`复合字段 — 子字段在右侧属性面板中编辑。`,"designer.stub.repeater":`重复字段 — 可重复的行分组。`,"designer.stub.searchRef":`搜索 {ref}…`,"designer.stub.chooseRelated":`选择关联对象…`,"designer.stub.latLng":`经纬度`,"designer.field.kind":`字段`,"designer.field.close":`关闭`,"designer.field.missing":`该字段已不在草稿中。`,"designer.field.remove":`删除“{label}”`,"designer.field.section.basic":`基础`,"designer.field.section.advanced":`高级`,"designer.field.section.options":`{type} 选项`,"designer.field.apiName":`API 名称`,"designer.field.label":`显示名`,"designer.field.type":`类型`,"designer.field.required":`必填`,"designer.field.unique":`唯一`,"designer.field.description":`描述`,"designer.field.readonly":`只读`,"designer.field.hidden":`隐藏`,"designer.field.indexed":`索引`,"designer.field.externalId":`外部 ID`,"designer.field.trackHistory":`记录历史`,"designer.field.placeholder":`占位符`,"designer.field.group":`分组`,"designer.field.noGroup":`— 无分组 —`,"designer.field.picklistValues":`选项值`,"designer.field.noValues":`暂无选项值。`,"designer.field.addValue":`添加选项`,"designer.field.optValue":`值`,"designer.field.optLabel":`显示名`,"designer.field.optColor":`颜色`,"designer.field.moveUp":`上移`,"designer.field.moveDown":`下移`,"designer.field.removeValue":`删除`,"designer.field.relatedObject":`关联对象`,"designer.field.relationshipName":`关系名称`,"designer.field.relationshipNameHint":`父对象上的反向集合键`,"designer.field.objectNamePlaceholder":`object_name`,"designer.field.lookup.pickerConfig":`选择器配置`,"designer.field.lookup.displayField":`显示字段`,"designer.field.lookup.descriptionField":`描述字段`,"designer.field.lookup.selectField":`选择字段…`,"designer.field.lookup.setTargetFirst":`请先设置目标对象`,"designer.field.lookup.searchFields":`搜索字段…`,"designer.field.lookup.selectableRecords":`可选记录范围`,"designer.field.lookup.addFilter":`添加筛选条件`,"designer.field.lookup.noFilter":`未设筛选 — 所有 {ref} 记录均可选。`,"designer.field.lookup.filterN":`筛选条件 {n}`,"designer.field.lookup.removeFilter":`移除筛选条件`,"designer.field.lookup.filterField":`字段`,"designer.field.lookup.filterOperator":`运算符`,"designer.field.lookup.filterValue":`值`,"designer.field.lookup.dependsOn":`依赖字段(同记录字段)`,"designer.field.lookup.addDependsOn":`添加该查找依赖的字段…`,"designer.field.lookup.searchHostFields":`搜索本对象的字段…`,"designer.field.lookup.pageSize":`选择器分页大小`,"designer.field.lookup.allowCreate":`允许快速创建`,"designer.field.formula":`公式 (CEL)`,"designer.field.precision":`精度`,"designer.field.scale":`小数位`,"designer.field.min":`最小值`,"designer.field.max":`最大值`,"designer.field.maxLength":`最大长度`,"designer.object.kind":`对象`,"designer.object.section.basic":`基础信息`,"designer.object.section.basicHint":`标识、显示名与分类`,"designer.object.name":`名称`,"designer.object.nameHint":`snake_case 唯一标识符(创建后不可修改)`,"designer.object.namePlaceholder":`account`,"designer.object.label":`显示名`,"designer.object.labelPlaceholder":`如:客户`,"designer.object.pluralLabel":`复数显示名`,"designer.object.pluralPlaceholder":`如:客户列表`,"designer.object.icon":`图标`,"designer.object.iconHint":`Lucide 图标名称(如 “building”、“users”)`,"designer.object.description":`描述`,"designer.object.descriptionPlaceholder":`该对象代表什么`,"designer.field.defaultValue":`默认值`,"designer.field.defaultNone":`— 无 —`,"designer.field.true":`是`,"designer.field.false":`否`,"designer.field.duplicate":`复制字段`,"designer.field.copySuffix":` 副本`,"designer.field.helpText":`帮助文本`,"designer.field.helpTextPlaceholder":`显示在表单字段下方`,"designer.field.minLength":`最小长度`,"designer.field.conditionalRequired":`条件必填 (CEL)`,"designer.field.conditionalRequiredHint":`当此表达式为真时,该字段变为必填。`,"designer.canvas.bulkSelected":`已选 {n} 项`,"designer.canvas.bulkMoveTo":`移至分组`,"designer.canvas.bulkDelete":`删除`,"designer.canvas.bulkClear":`取消选择`,"designer.canvas.bulkHint":`按住 Ctrl/⌘ 单击或 Shift 单击可多选字段。`,"designer.canvas.reviewChanges":`查看变更`,"designer.canvas.reviewExit":`退出查看`,"designer.canvas.reviewVsPublished":`对比已发布版本`,"designer.canvas.diffAdded":`新增`,"designer.canvas.diffChanged":`修改`,"designer.canvas.diffRemoved":`删除`,"designer.canvas.diffChangedKeys":`变更:{keys}`,"designer.draftReview.title":`查看变更`,"designer.draftReview.badge":`{n} 项待审`,"designer.draftReview.empty":`与已发布版本相比没有变更。`,"designer.canvas.askAi":`问 AI`,"designer.canvas.askAiGenerate":`用 AI 生成字段`};function Yt(e){return(e??``).toLowerCase().startsWith(`zh`)?{types:Wt,domains:Kt,strings:Jt}:{types:Ut,domains:Gt,strings:qt}}function Xt(e,t,n){return Yt(t).types[e]||(n??e)}function Zt(e,t){return Yt(t).domains[e]??e}function W(e,t){return Yt(t).strings[e]??e}function G(e,t,n){return W(e,t).replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):`{${t}}`)}function Qt(e,t){let n=String(e??``).trim(),r=n.toLowerCase();if(!n||r===`invalid`||r===`invalid input`)return W(`engine.validation.invalid`,t);let i=n.match(/^Invalid string: must match pattern (.+)$/);if(i)return G(`engine.validation.pattern`,t,{pattern:i[1]});let a=n.match(/^Invalid input: expected (.+), received (.+)$/);if(a){let e=a[1],n=a[2];return e===`string`&&n===`undefined`?W(`engine.validation.expectedStringUndefined`,t):G(`engine.validation.expectedType`,t,{expected:e,received:n})}let o=n.match(/^Invalid option: expected one of (.+)$/);return o?G(`engine.validation.invalidOption`,t,{options:o[1]}):r===`required`||r===`is required`?W(`engine.validation.nameRequired`,t):r===`invalid json`?W(`engine.form.invalidJson`,t):n}function K(){return typeof navigator<`u`&&/^zh/i.test(navigator.language)?`zh-CN`:`en-US`}var $t=[{value:`default`,label:`Default`,css:`#9ca3af`},{value:`blue`,label:`Blue`,css:`#3b82f6`},{value:`teal`,label:`Teal`,css:`#14b8a6`},{value:`orange`,label:`Orange`,css:`#f97316`},{value:`purple`,label:`Purple`,css:`#a855f7`},{value:`success`,label:`Success`,css:`#22c55e`},{value:`warning`,label:`Warning`,css:`#f59e0b`},{value:`danger`,label:`Danger`,css:`#ef4444`},{value:`green`,label:`Green`,css:`#22c55e`},{value:`red`,label:`Red`,css:`#ef4444`},{value:`amber`,label:`Amber`,css:`#f59e0b`}],en=Object.fromEntries($t.map(e=>[e.value,e.css]));function tn(e){return e?/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(e)?e:en[e]??`#9ca3af`:`#9ca3af`}function nn({value:e,onChange:t,disabled:n,options:r}){let i=r?r.map(e=>({value:e.value,label:e.label??e.value,css:tn(e.value)})):$t.slice(0,8),a=e??`default`;return(0,z.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`radiogroup`,children:i.map(e=>{let r=a===e.value;return(0,z.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":r,"aria-label":e.label,title:e.label,disabled:n,onClick:()=>t(e.value),className:C(`flex h-7 w-7 items-center justify-center rounded-full border transition-all`,r?`border-transparent ring-2 ring-foreground/60 ring-offset-1 ring-offset-background`:`border-border hover:scale-110`,n&&`cursor-not-allowed opacity-50`),children:(0,z.jsx)(`span`,{className:`h-4 w-4 rounded-full`,style:{backgroundColor:e.css}})},e.value)})})}function rn(e,t){let n=it(),[r,i]=B.useState({fields:[],loading:!t&&!!e,error:null});return B.useEffect(()=>{if(t){i({fields:t,loading:!1,error:null});return}if(!e){i({fields:[],loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n.get(`object`,e).then(e=>{if(!r){if(!e){i({fields:[],loading:!1,error:`Object not found`});return}i({fields:bt(e.fields).entries.map(e=>({name:e.name,label:typeof e.def.label==`string`&&e.def.label?e.def.label:e.name,type:typeof e.def.type==`string`?e.def.type:`text`,hidden:e.def.hidden===!0})),loading:!1,error:null})}}).catch(e=>{r||i({fields:[],loading:!1,error:e?.message??String(e)})}),()=>{r=!0}},[n,e,t]),r}var an=[{value:`==`,label:`equals`},{value:`!=`,label:`not equals`},{value:`>`,label:`greater than`},{value:`<`,label:`less than`},{value:`>=`,label:`≥`},{value:`<=`,label:`≤`},{value:`truthy`,label:`is set / true`},{value:`falsy`,label:`is empty / false`}],on=[{value:`record.id`,label:`record.id`},{value:`user.id`,label:`user.id`},{value:`user.email`,label:`user.email`},{value:`user.role`,label:`user.role`},{value:`user.isAdmin`,label:`user.isAdmin`},{value:`org.id`,label:`org.id`}],sn=e=>e.replace(/\s+/g,` `).trim();function cn(e){let t=e.trim();return t===`true`||t===`false`||t===`null`||t!==``&&!Number.isNaN(Number(t))?t:`'${t.replace(/'/g,`\\'`)}'`}function ln(e){let t=e.trim(),n=/^'(.*)'$/.exec(t);return n?n[1].replace(/\\'/g,`'`):t}function un(e,t){return e.filter(e=>e.subject).map(e=>e.op===`truthy`?e.subject:e.op===`falsy`?`!${e.subject}`:`${e.subject} ${e.op} ${cn(e.value)}`).join(` ${t} `)}function dn(e){let t=sn(e);if(!t)return{rows:[],join:`&&`};let n=t.includes(`&&`),r=t.includes(`||`);if(n&&r)return null;let i=r?`||`:`&&`,a=t.split(r?`||`:`&&`).map(e=>e.trim()),o=[];for(let e of a){let t=/^([a-zA-Z_][\w.]*)\s*(==|!=|>=|<=|>|<)\s*(.+)$/.exec(e);if(t){o.push({subject:t[1],op:t[2],value:ln(t[3])});continue}let n=/^!\s*([a-zA-Z_][\w.]*)$/.exec(e);if(n){o.push({subject:n[1],op:`falsy`,value:``});continue}let r=/^([a-zA-Z_][\w.]*)$/.exec(e);if(r){o.push({subject:r[1],op:`truthy`,value:``});continue}return null}return{rows:o,join:i}}function fn(e){let t=dn(e||``);return t&&sn(un(t.rows,t.join))===sn(e||``)?{rows:t.rows,join:t.join,raw:!1}:{rows:[],join:`&&`,raw:!!e}}function pn({label:e,value:t,onCommit:n,objectName:r,fields:i,disabled:a}){let{fields:o}=rn(r),s=i??o,c=B.useMemo(()=>[...s.filter(e=>!e.hidden).map(e=>({value:`record.${e.name}`,label:`record.${e.name}`})),...on],[s]),l=B.useMemo(()=>fn(t),[]),[u,d]=B.useState(l.rows),[f,p]=B.useState(l.join),[m,g]=B.useState(l.raw),_=B.useRef(t||``);B.useEffect(()=>{let e=t||``;if(e===_.current)return;_.current=e;let n=fn(e);d(n.rows),p(n.join),g(n.raw)},[t]);let y=(e,t)=>{let r=un(e,t);_.current=r,n(r)},b=(e,t=f)=>{d(e),p(t),y(e,t)},S=un(u,f);return m?(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}):(0,z.jsx)(`span`,{}),(0,z.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>{let e=fn(t);(!t||!e.raw)&&(d(e.rows),p(e.join),g(!1))},className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,z.jsx)(ie,{className:`h-3 w-3`}),` Builder`]})]}),(0,z.jsx)(`textarea`,{value:t,onChange:e=>{_.current=e.target.value,n(e.target.value)},disabled:a,spellCheck:!1,rows:2,placeholder:`CEL expression, e.g. record.status != 'done' && user.isAdmin`,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`}),t&&!dn(t)&&(0,z.jsx)(`div`,{className:`text-[10px] text-muted-foreground/70`,children:`Advanced expression — Builder only supports simple AND/OR conditions.`})]}):(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}):(0,z.jsx)(`span`,{}),(0,z.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>g(!0),className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,z.jsx)(Te,{className:`h-3 w-3`}),` Expression`]})]}),u.length===0?(0,z.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:`Always — no condition.`}):(0,z.jsx)(`div`,{className:`space-y-1.5`,children:u.map((e,t)=>(0,z.jsxs)(`div`,{className:`space-y-1 rounded-md border border-border p-1.5`,children:[t>0&&(0,z.jsx)(`div`,{className:`flex justify-center`,children:(0,z.jsxs)(h,{value:f,onValueChange:e=>b(u,e),disabled:a,children:[(0,z.jsx)(v,{className:`h-6 w-16 text-[10px]`,children:(0,z.jsx)(N,{})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:`&&`,children:`AND`}),(0,z.jsx)(I,{value:`||`,children:`OR`})]})]})}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,z.jsxs)(h,{value:e.subject,onValueChange:e=>b(u.map((n,r)=>r===t?{...n,subject:e}:n)),disabled:a,children:[(0,z.jsx)(v,{className:`h-7 text-xs`,children:(0,z.jsx)(N,{placeholder:`field / context`})}),(0,z.jsxs)(x,{children:[c.map(e=>(0,z.jsx)(I,{value:e.value,children:e.label},e.value)),e.subject&&!c.some(t=>t.value===e.subject)&&(0,z.jsx)(I,{value:e.subject,children:e.subject})]})]})}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7 shrink-0`,disabled:a,"aria-label":`Remove condition`,onClick:()=>b(u.filter((e,n)=>n!==t)),children:(0,z.jsx)(T,{className:`h-3.5 w-3.5`})})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,z.jsx)(`div`,{className:`w-28 shrink-0`,children:(0,z.jsxs)(h,{value:e.op,onValueChange:e=>b(u.map((n,r)=>r===t?{...n,op:e}:n)),disabled:a,children:[(0,z.jsx)(v,{className:`h-7 text-xs`,children:(0,z.jsx)(N,{})}),(0,z.jsx)(x,{children:an.map(e=>(0,z.jsx)(I,{value:e.value,children:e.label},e.value))})]})}),e.op!==`truthy`&&e.op!==`falsy`&&(0,z.jsx)(L,{className:`h-7 flex-1 text-xs`,value:e.value,placeholder:`value`,disabled:a,onChange:e=>b(u.map((n,r)=>r===t?{...n,value:e.target.value}:n))})]})]},t))}),!a&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>b([...u,{subject:``,op:`truthy`,value:``}]),children:[(0,z.jsx)(M,{className:`mr-1 h-3.5 w-3.5`}),` Add condition`]}),S&&(0,z.jsx)(`div`,{className:`rounded bg-muted/40 px-2 py-1 text-[10px] font-mono text-muted-foreground break-all`,children:S})]})}function mn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectNames??[],s=t==null?``:String(t);return i?.objectsLoading?(0,z.jsx)(L,{id:e,value:s,disabled:!0,placeholder:W(`engine.form.loadingObjects`,a)}):o.length===0?(0,z.jsx)(L,{id:e,value:s,disabled:r,onChange:e=>n(e.target.value||void 0),placeholder:W(`engine.form.noObjects`,a)}):(0,z.jsxs)(h,{value:s,onValueChange:e=>n(e||void 0),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectObject`,a)})}),(0,z.jsx)(x,{children:o.map(e=>(0,z.jsx)(I,{value:e,children:e},e))})]})}function hn({id:e,value:t,onChange:n,readOnly:r,context:i,fieldSpec:a}){let o=K(),s=i?.objectNames??[],c=a?.multiple??!1,l=B.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),u=e=>{if(!r){if(!c){n(e);return}n(l.includes(e)?l.filter(t=>t!==e):[...l,e])}},d=e=>{if(r)return;let t=l.filter(t=>t!==e);n(c?t:``)};return i?.objectsLoading?(0,z.jsx)(L,{id:e,value:W(`engine.form.loadingObjects`,o),readOnly:!0,disabled:!0}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[l.length>0&&(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:l.map(e=>(0,z.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,z.jsx)(`span`,{children:e}),!r&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>d(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e))}),(0,z.jsxs)(h,{value:``,onValueChange:u,disabled:r||s.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(c?`engine.form.addObjects`:`engine.form.selectObjectDots`,o)})}),(0,z.jsx)(x,{children:s.map(e=>(0,z.jsxs)(I,{value:e,disabled:!c&&l.includes(e),children:[e,l.includes(e)&&` ✓`]},e))})]})]})}function gn({id:e,value:t,onChange:n,readOnly:r,fieldSpec:i,formData:a}){let o=K(),[s,c]=B.useState([]),[l,u]=B.useState(!1),d=i?.dependsOn||i?.reference||`objectName`,f=Array.isArray(d)?d[0]:d,p=a?.[f];B.useEffect(()=>{if(!p){c([]);return}u(!0),fetch(`/api/v1/objects/${p}/fields`).then(e=>e.json()).then(e=>{c(e.fields||[]),u(!1)}).catch(e=>{console.error(`Failed to load fields:`,e),c([]),u(!1)})},[p]);let m=i?.multiple??!1,g=B.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),_=e=>{if(!r){if(!m){n(e);return}n(g.includes(e)?g.filter(t=>t!==e):[...g,e])}},y=e=>{if(r)return;let t=g.filter(t=>t!==e);n(m?t:``)};return p?l?(0,z.jsx)(L,{id:e,value:W(`engine.form.loadingFields`,o),readOnly:!0,disabled:!0}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[g.length>0&&(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:g.map(e=>{let t=s.find(t=>t.name===e);return(0,z.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,z.jsx)(`span`,{children:t?.label||e}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:t?.type}),!r&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>y(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e)})}),(0,z.jsxs)(h,{value:``,onValueChange:_,disabled:r||s.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(m?`engine.form.addFields`:`engine.form.selectFieldDots`,o)})}),(0,z.jsx)(x,{children:s.map(e=>(0,z.jsx)(I,{value:e.name,disabled:!m&&g.includes(e.name),children:(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.type}),g.includes(e.name)&&` ✓`]})},e.name))})]})]}):(0,z.jsx)(L,{id:e,value:W(`engine.form.selectObjectFirst`,o),readOnly:!0,disabled:!0})}function _n({schema:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=e;if(o?.anyOf||o?.oneOf){let e=(o.anyOf??o.oneOf).find(e=>e?.type===`array`&&e?.items?.type===`object`);e&&(o={...o,...e})}let s=o?.items??{},c=s.properties??{},l=new Set(Array.isArray(s.required)?s.required:[]),u=Array.isArray(t)?t:[],d=Object.keys(c);if(d.length===0)return(0,z.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,children:W(`engine.form.masterDetailSchemaError`,a)});function f(e,t){let r=u.slice();r[e]={...r[e]??{},...t},n(r)}function p(){n([...u,{}])}function m(e){let t=u.slice();t.splice(e,1),n(t)}return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`overflow-x-auto rounded border border-border/40`,children:(0,z.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,z.jsx)(`thead`,{className:`bg-muted/40`,children:(0,z.jsxs)(`tr`,{children:[d.map(e=>(0,z.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium text-muted-foreground`,children:[c[e]?.title??e,l.has(e)&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e)),(0,z.jsx)(`th`,{className:`w-8`})]})}),(0,z.jsxs)(`tbody`,{children:[u.length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:d.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:W(`engine.form.noRows`,a)})}),u.map((e,t)=>(0,z.jsxs)(`tr`,{className:`border-t border-border/30`,children:[d.map(n=>(0,z.jsx)(`td`,{className:`p-1`,children:(0,z.jsx)(vn,{schema:c[n],value:(e??{})[n],readOnly:r,context:i,onChange:e=>f(t,{[n]:e})})},n)),(0,z.jsx)(`td`,{className:`p-1 text-right`,children:(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>m(t),disabled:r,className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.removeRow`,a),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:p,disabled:r,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.addRow`,a)]})]})}function vn({schema:e,value:t,readOnly:n,context:r,onChange:i}){if(e?.widget===`ref:object`)return(0,z.jsx)(mn,{schema:e,value:t,onChange:i,readOnly:n,context:r});let a=e?.enum;return Array.isArray(a)&&a.length>0?(0,z.jsxs)(h,{value:t==null?``:String(t),onValueChange:e=>i(e||void 0),disabled:n,children:[(0,z.jsx)(v,{className:`h-8 text-xs`,children:(0,z.jsx)(N,{placeholder:`—`})}),(0,z.jsx)(x,{children:a.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]}):e?.type===`boolean`?(0,z.jsx)(`input`,{type:`checkbox`,checked:!!t,disabled:n,onChange:e=>i(e.target.checked),className:`h-4 w-4`}):e?.type===`number`||e?.type===`integer`?(0,z.jsx)(L,{type:`number`,value:t==null?``:String(t),disabled:n,onChange:e=>{let t=e.target.valueAsNumber;i(Number.isFinite(t)?t:void 0)},className:`h-8 text-xs`}):(0,z.jsx)(L,{value:t==null?``:String(t),disabled:n,onChange:e=>i(e.target.value||void 0),className:`h-8 text-xs`})}function yn({id:e,value:t,onChange:n,readOnly:r}){let i=K(),a=Array.isArray(t)?t:[],[o,s]=B.useState(``);function c(e){let t=e.split(/[,\n]/).map(e=>e.trim()).filter(Boolean);if(t.length===0)return;let r=[...a];for(let e of t)r.includes(e)||r.push(e);n(r),s(``)}function l(e){let t=a.slice();t.splice(e,1),n(t)}return(0,z.jsx)(`div`,{className:`rounded border border-input bg-background p-1.5`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[a.map((e,t)=>(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:e}),!r&&(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>l(t),className:`text-muted-foreground hover:text-destructive`,children:`×`})]},t)),(0,z.jsx)(`input`,{id:e,type:`text`,value:o,disabled:r,placeholder:a.length===0?W(`engine.form.tagsPlaceholder`,i):``,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),c(o)):e.key===`Backspace`&&!o&&a.length>0&&l(a.length-1)},onBlur:()=>o&&c(o),className:`min-w-[8rem] flex-1 bg-transparent text-sm outline-none`})]})})}function bn(e){return e.replace(/[_-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function xn({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}){let a=B.useMemo(()=>{if(Array.isArray(i?.options)&&i.options.length)return i.options.map(e=>({label:e.label,value:e.value}));let e=r?.items?.enum??r?.enum??[];return(Array.isArray(e)?e:[]).filter(e=>typeof e==`string`).map(e=>({label:bn(e),value:e}))},[i,r]),o=B.useMemo(()=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],[e]);function s(e){if(n)return;let r=new Set(o);r.has(e)?r.delete(e):r.add(e);let i=a.map(e=>e.value).filter(e=>r.has(e));t(i.length?i:void 0)}return a.length===0?(0,z.jsx)(yn,{value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}):(0,z.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`group`,children:a.map(e=>{let t=o.includes(e.value);return(0,z.jsxs)(`button`,{type:`button`,role:`checkbox`,"aria-checked":t,disabled:n,onClick:()=>s(e.value),className:`inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium transition-colors `+(t?`border-primary bg-primary/10 text-primary`:`border-input bg-background text-muted-foreground hover:text-foreground hover:bg-muted`)+(n?` opacity-60 cursor-not-allowed`:``),children:[(0,z.jsx)(`span`,{"aria-hidden":!0,className:`flex h-3.5 w-3.5 items-center justify-center rounded-[3px] border text-[9px] leading-none `+(t?`border-primary bg-primary text-primary-foreground`:`border-muted-foreground/40`),children:t?`✓`:``}),e.label]},e.value)})})}var q=`__none__`;function Sn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectFields??[],s=t==null?``:String(t),c=!s||o.some(e=>e.name===s);return(0,z.jsxs)(h,{value:s||q,onValueChange:e=>n(e===q?``:e),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?W(`engine.form.selectField`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:q,children:(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:W(`engine.form.none`,a)})}),!c&&s&&(0,z.jsxs)(I,{value:s,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:s}),(0,z.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,a)})]}),o.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Cn(e,t){let n=t?e.find(e=>e.name===t):void 0,r=t&&!n?e.find(e=>e.name.endsWith(`.${t}`)):void 0,i=t==="default"||t===`list`;return{exact:n,suffixMatch:r,isSpecial:i,resolves:!!n||!!r||i,showStored:!!t&&!n}}function wn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectViews??[],s=t==null?``:String(t),{suffixMatch:c,resolves:l,showStored:u}=Cn(o,s);return(0,z.jsxs)(h,{value:s||q,onValueChange:e=>n(e===q?void 0:e),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?W(`engine.form.selectEllipsis`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:q,children:(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:W(`engine.form.none`,a)})}),u&&(0,z.jsx)(I,{value:s,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:c?.label||s}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:c?`\u2192 ${c.name}`:s}),!l&&(0,z.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,a)})]})}),o.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Tn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectFields??[],s=Array.isArray(t)?t.map(String):typeof t==`string`&&t?t.split(`,`).map(e=>e.trim()).filter(Boolean):[],c=e=>o.find(t=>t.name===e)?.label||e,l=o.filter(e=>!s.includes(e.name)),u=e=>{s.includes(e)||n([...s,e])},d=e=>{let t=s.slice();t.splice(e,1),n(t)},f=(e,t)=>{let r=e+t;if(r<0||r>=s.length)return;let i=s.slice();[i[e],i[r]]=[i[r],i[e]],n(i)};return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[s.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:s.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[c(e),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!r&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move up`,disabled:t===0,onClick:()=>f(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move down`,disabled:t===s.length-1,onClick:()=>f(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>d(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!r&&(0,z.jsxs)(h,{value:``,onValueChange:u,disabled:l.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?l.length?W(`engine.form.addField`,a):W(`engine.form.allFieldsAdded`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsx)(x,{children:l.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var En=Se,Dn=new Set(En),On=120;function kn({id:e,value:t,onChange:n,readOnly:r}){let i=K(),a=t==null?``:String(t),[o,s]=B.useState(!1),[c,l]=B.useState(``),u=a?Ue(a):``,f=!a||Dn.has(u),p=Ue(c.trim()),m=B.useMemo(()=>p?En.filter(e=>e.includes(p)):En,[p]),h=m.slice(0,On),g=m.length>h.length,v=e=>{n(e||void 0),s(!1),l(``)};return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{id:e,type:`button`,role:`combobox`,"aria-haspopup":`dialog`,"aria-expanded":o,disabled:r,onClick:()=>!r&&s(!0),className:`flex w-full items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm text-left disabled:cursor-not-allowed disabled:opacity-60`,children:[(0,z.jsx)(Je,{name:f?a:void 0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,z.jsx)(`span`,{className:`flex-1 truncate `+(a?`font-mono`:`text-muted-foreground`),children:a||W(`engine.form.selectEllipsis`,i)}),!f&&a&&(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,i)}),(0,z.jsx)(d,{"aria-hidden":!0,className:`h-3.5 w-3.5 shrink-0 opacity-50`})]}),(0,z.jsx)(ae,{open:o,onOpenChange:e=>{s(e),e||l(``)},children:(0,z.jsxs)(ce,{className:`max-w-2xl`,children:[(0,z.jsx)(Ve,{children:(0,z.jsx)(_,{children:W(`engine.form.chooseIcon`,i)})}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-input bg-background px-3 py-2`,children:[(0,z.jsx)(w,{"aria-hidden":!0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,z.jsx)(`input`,{type:`text`,autoFocus:!0,value:c,"aria-label":W(`engine.form.searchIcons`,i),placeholder:W(`engine.form.searchIcons`,i),onChange:e=>l(e.target.value),className:`w-full bg-transparent text-sm outline-none`})]}),(0,z.jsxs)(`div`,{id:e?`${e}-listbox`:void 0,role:`listbox`,className:`grid max-h-[52vh] grid-cols-6 gap-1.5 overflow-y-auto pr-1 sm:grid-cols-8`,children:[a&&(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!1,title:W(`engine.form.none`,i),onClick:()=>v(void 0),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded border border-dashed border-border p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground`,children:[(0,z.jsx)(F,{className:`h-4 w-4`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:`none`})]}),!f&&a&&(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!0,title:a,onClick:()=>v(a),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded bg-accent p-1 text-accent-foreground ring-1 ring-primary`,children:[(0,z.jsx)(Je,{name:void 0,className:`h-4 w-4`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:a})]}),h.map(e=>{let t=e===u;return(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":t,title:e,onClick:()=>v(e),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground `+(t?`bg-accent text-accent-foreground ring-1 ring-primary`:``),children:[(0,z.jsx)(Je,{name:e,className:`h-5 w-5`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:e})]},e)}),h.length===0&&(0,z.jsx)(`p`,{className:`col-span-full px-2 py-6 text-center text-sm text-muted-foreground`,children:W(`engine.form.noMatchingIcons`,i)})]}),g&&(0,z.jsx)(`p`,{className:`text-center text-xs text-muted-foreground`,children:G(`engine.form.iconsTruncated`,i,{shown:h.length,total:m.length})})]})})]})}var An=[{key:`none`,label:`None`},{key:`tabs`,label:`Tabs`},{key:`dropdown`,label:`Dropdown`}],jn=e=>(e||``).trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`tab`;function Mn({value:e,onChange:t,readOnly:n,context:r}){let i=e&&typeof e==`object`?e:void 0,a=i?.element??(i?`dropdown`:`none`),o=r?.objectFields??[],s=e=>{if(!n){if(e===`none`){t(void 0);return}t({...i??{},element:e})}},c=Array.isArray(i?.fields)?i.fields:[],l=e=>t({...i??{},element:a===`none`?`dropdown`:a,fields:e}),u=new Set(c.map(e=>e.field)),d=o.filter(e=>!u.has(e.name)),f=e=>o.find(t=>t.name===e)?.label||e,p=a===`dropdown`||a===`toggle`,m=(Array.isArray(i?.tabs)?i.tabs:[]).map(e=>({...e,name:e?.name??e?.id??``,label:typeof e?.label==`string`?e.label:e?.name??e?.id??``,filter:Array.isArray(e?.filter)?e.filter:Array.isArray(e?.filters)?e.filters.filter(e=>Array.isArray(e)&&e.length>=2).map(e=>({field:String(e[0]),operator:String(e[1]),value:e[2]})):[],isDefault:e?.isDefault??e?.default})),g=e=>{let t={name:jn(e.label||e.name),label:e.label||e.name||`Tab`};return e.icon&&(t.icon=e.icon),t.filter=Array.isArray(e.filter)?e.filter:[],e.isDefault&&(t.isDefault=!0),t},_=e=>{let n={},r=e.map(g).map(e=>{let t=e.name;if(n[t]){let r=2;for(;n[`${e.name}_${r}`];)r++;t=`${e.name}_${r}`}return n[t]=!0,{...e,name:t}});t({...i??{},element:`tabs`,tabs:r})},y=()=>_([...m,{name:``,label:`Tab ${m.length+1}`,filter:[]}]),b=e=>_(m.filter((t,n)=>n!==e)),S=(e,t)=>{let n=[...m],r=e+t;r<0||r>=n.length||([n[e],n[r]]=[n[r],n[e]],_(n))},C=(e,t)=>_(m.map((n,r)=>r===e?{...n,...t}:n));return(0,z.jsxs)(`div`,{className:`space-y-3`,children:[(0,z.jsx)(`div`,{className:`inline-flex rounded-md border border-input bg-background p-0.5`,role:`radiogroup`,"aria-label":`Filter element`,children:An.map(e=>{let t=a===e.key;return(0,z.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":t,"data-testid":`filter-mode-${e.key}`,disabled:n,onClick:()=>s(e.key),className:`px-3 py-1 text-xs font-medium rounded transition-colors `+(t?`bg-primary text-primary-foreground shadow-sm`:`text-muted-foreground hover:text-foreground hover:bg-muted`),children:e.label},e.key)})}),p&&(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-fields`,children:[c.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:c.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[f(e.field),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e.field})]}),(0,z.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,z.jsx)(ve,{checked:!!e.showCount,disabled:n,onCheckedChange:e=>l(c.map((n,r)=>r===t?{...n,showCount:e}:n))}),`count`]}),!n&&(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove field`,onClick:()=>l(c.filter((e,n)=>n!==t)),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]},e.field))}),!n&&d.length>0&&(0,z.jsxs)(h,{onValueChange:e=>l([...c,{field:e}]),children:[(0,z.jsx)(v,{className:`h-8 text-xs`,"data-testid":`filter-mode-add-field`,children:(0,z.jsx)(N,{placeholder:`+ Add filter field…`})}),(0,z.jsx)(x,{children:d.map(e=>(0,z.jsx)(I,{value:e.name,children:e.label||e.name},e.name))})]}),o.length===0&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to pick filter fields.`})]}),a===`tabs`&&(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-tabs-editor`,children:[m.map((e,t)=>(0,z.jsxs)(`div`,{className:`rounded-md border border-input bg-background p-2 space-y-2`,"data-testid":`tab-preset-${t}`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,z.jsx)(L,{value:e.label,placeholder:`Tab label`,disabled:n,className:`h-8 text-sm flex-1`,"data-testid":`tab-label-${t}`,onChange:e=>C(t,{label:e.target.value})}),(0,z.jsx)(`code`,{className:`text-[10px] text-muted-foreground shrink-0 max-w-[6rem] truncate`,title:e.name,children:e.name}),!n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move tab up`,disabled:t===0,onClick:()=>S(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,z.jsx)(te,{className:`h-3.5 w-3.5`})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move tab down`,disabled:t===m.length-1,onClick:()=>S(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,z.jsx)(j,{className:`h-3.5 w-3.5`})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove tab`,onClick:()=>b(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]})]}),(0,z.jsx)(`div`,{className:`pl-1`,"data-testid":`tab-${t}-filter`,children:(0,z.jsx)(In,{value:e.filter,onChange:e=>C(t,{filter:e}),fields:o,readOnly:n})})]},t)),!n&&(0,z.jsxs)(`button`,{type:`button`,"data-testid":`filter-mode-add-tab`,onClick:y,className:`inline-flex items-center text-xs font-medium text-primary hover:underline`,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` Add tab`]}),(0,z.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground pt-1`,children:[(0,z.jsx)(ve,{checked:i?.showAllRecords!==!1,disabled:n,"data-testid":`filter-mode-show-all`,onCheckedChange:e=>t({...i??{},element:`tabs`,showAllRecords:e})}),`Show “All records” tab`]}),o.length===0&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to build tab filter rules.`})]})]})}function Nn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=i?.objectActions??[],o=Array.isArray(t)?t.map(String):typeof t==`string`&&t?t.split(`,`).map(e=>e.trim()).filter(Boolean):[],s=e=>a.find(t=>t.name===e)?.label||e,c=a.filter(e=>!o.includes(e.name)),l=e=>{o.includes(e)||n([...o,e])},u=e=>{let t=o.slice();t.splice(e,1),n(t)},d=(e,t)=>{let r=e+t;if(r<0||r>=o.length)return;let i=o.slice();[i[e],i[r]]=[i[r],i[e]],n(i)};return(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`action-multi`,children:[o.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:o.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[s(e),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!r&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move up`,disabled:t===0,onClick:()=>d(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move down`,disabled:t===o.length-1,onClick:()=>d(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>u(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!r&&(0,z.jsxs)(h,{value:``,onValueChange:l,disabled:c.length===0,children:[(0,z.jsx)(v,{id:e,"data-testid":`action-multi-add`,children:(0,z.jsx)(N,{placeholder:a.length?c.length?`+ Add action button…`:`All actions added`:`Bind a source object to pick actions`})}),(0,z.jsx)(x,{children:c.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var Pn={equals:`equals`,notEquals:`not_equals`,contains:`contains`,notContains:`not_contains`,isEmpty:`is_empty`,isNotEmpty:`is_not_empty`,greaterThan:`gt`,lessThan:`lt`,greaterOrEqual:`gte`,lessOrEqual:`lte`,before:`lt`,after:`gt`,between:`between`,in:`in`,notIn:`not_in`},Fn={equals:`equals`,eq:`equals`,not_equals:`notEquals`,ne:`notEquals`,neq:`notEquals`,contains:`contains`,not_contains:`notContains`,is_empty:`isEmpty`,is_not_empty:`isNotEmpty`,gt:`greaterThan`,greater_than:`greaterThan`,lt:`lessThan`,less_than:`lessThan`,gte:`greaterOrEqual`,lte:`lessOrEqual`,in:`in`,not_in:`notIn`,nin:`notIn`};function In({value:e,onChange:t,fields:n,readOnly:r}){let i=Array.isArray(e)?e:[],a={id:`g`,logic:`and`,conditions:i.map((e,t)=>({id:`c${t}`,field:e.field,operator:Fn[e.operator]??e.operator??`equals`,value:e.value??``}))},o=n.map(e=>({value:e.name,label:e.label||e.name,type:e.type})),s=i.length?i.map(e=>`${n.find(t=>t.name===e.field)?.label||e.field}`).filter(Boolean).join(`, `):``;return(0,z.jsxs)(Ne,{children:[(0,z.jsx)(ze,{asChild:!0,children:(0,z.jsxs)(R,{variant:`outline`,size:`sm`,disabled:r,className:`h-8 w-full justify-between text-xs font-normal`,"data-testid":`filter-builder-trigger`,children:[(0,z.jsx)(`span`,{className:`truncate text-left`,children:s||(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:`+ Add filter…`})}),(0,z.jsx)(j,{className:`h-3.5 w-3.5 opacity-60 shrink-0`})]})}),(0,z.jsx)(be,{align:`start`,className:`w-[440px] max-w-[90vw] p-3`,children:n.length===0?(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to add filter conditions.`}):(0,z.jsx)(pe,{fields:o,value:a,onChange:e=>{t((e?.conditions??[]).filter(e=>e?.field).map(e=>({field:e.field,operator:Pn[e.operator]??e.operator,value:e.value})))}})})]})}function Ln({value:e,onChange:t,readOnly:n,context:r}){return(0,z.jsx)(In,{value:e,onChange:e=>t(e.length?e:void 0),fields:r?.objectFields??[],readOnly:n})}function Rn({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}){let a=Array.isArray(i?.options)&&i.options.length?i.options.map(e=>({value:e.value,label:e.label})):Array.isArray(r?.enum)?r.enum.filter(e=>typeof e==`string`).map(e=>({value:e})):null;if(a&&a.length)return(0,z.jsx)(nn,{value:e==null?void 0:String(e),onChange:e=>t(e),disabled:n,options:a});let o=e==null?``:String(e);return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`input`,{type:`color`,value:/^#([0-9a-f]{6})$/i.test(o)?o:`#000000`,disabled:n,onChange:e=>t(e.target.value),className:`h-8 w-10 shrink-0 rounded border border-input bg-background p-0.5 disabled:opacity-60`,"aria-label":`Color`}),(0,z.jsx)(L,{value:o,placeholder:`#RRGGBB`,disabled:n,onChange:e=>t(e.target.value||void 0),className:`h-8 text-sm font-mono`})]})}function zn({value:e,onChange:t,readOnly:n,context:r}){return(0,z.jsx)(pn,{value:e==null?``:String(e),onCommit:e=>t(e||void 0),fields:r?.objectFields,disabled:n})}var Bn=`••••••••`;function Vn({value:e,onChange:t,readOnly:n,schema:r,id:i}){let a=e===Bn,[o,s]=B.useState(!1),[c,l]=B.useState(a||e==null?``:String(e)),u=e=>{l(e),t(e===``?a?Bn:void 0:e)};return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(L,{id:i,type:o?`text`:`password`,value:c,disabled:n,autoComplete:`off`,placeholder:a?r?.description?`•••••••• set — type to replace`:`•••••••• set — leave blank to keep`:typeof r?.description==`string`?``:`Enter a value`,onChange:e=>u(e.target.value),className:`h-8 text-sm font-mono`,"aria-label":`Secret value`}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,disabled:n,"aria-label":o?`Hide value`:`Reveal value`,onClick:()=>s(e=>!e),children:o?(0,z.jsx)(b,{className:`h-4 w-4`}):(0,z.jsx)(m,{className:`h-4 w-4`})}),a&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 shrink-0 text-destructive hover:text-destructive`,disabled:n,onClick:()=>{l(``),t(null)},children:`Clear`})]})}function Hn({value:e,onChange:t,readOnly:n,fieldSpec:r,formData:i,context:a}){let o=Array.isArray(r?.dependsOn)?r.dependsOn[0]:r?.dependsOn,s=o?i?.[o]:void 0,c=s==null?void 0:a?.dynamicSchemas?.[String(s)],l=c?.properties??{},u=new Set(c?.required??[]),d=e&&typeof e==`object`?e:{},f=(e,n)=>{let r={...d};n===void 0||n===``?delete r[e]:r[e]=n,t(r)};return s?!c||Object.keys(l).length===0?(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`No configuration needed for "`,String(s),`".`]}):(0,z.jsx)(`div`,{className:`space-y-2 rounded-md border border-border/60 p-3`,children:Object.entries(l).map(([e,t])=>{let r=t?.title||e,i=d[e],a=u.has(e);if(t?.type===`boolean`)return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsx)(P,{className:`text-xs`,children:r}),(0,z.jsx)(ve,{checked:!!i,disabled:n,onCheckedChange:t=>f(e,t)})]},e);if(Array.isArray(t?.enum))return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(P,{className:`text-xs`,children:[r,a?` *`:``]}),(0,z.jsxs)(h,{value:i==null?``:String(i),onValueChange:t=>f(e,t),disabled:n,children:[(0,z.jsx)(v,{className:`h-8`,"aria-label":r,children:(0,z.jsx)(N,{placeholder:`Select…`})}),(0,z.jsx)(x,{children:t.enum.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]})]},e);let o=t?.format===`password`||t?.writeOnly===!0,s=t?.type===`number`||t?.type===`integer`;return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(P,{className:`text-xs`,children:[r,a?` *`:``]}),o?(0,z.jsx)(Vn,{value:i,onChange:t=>f(e,t),readOnly:n,schema:t}):(0,z.jsx)(L,{type:s?`number`:`text`,value:i==null?``:String(i),disabled:n,"aria-label":r,onChange:t=>f(e,s?t.target.value===``?void 0:Number(t.target.value):t.target.value),className:`h-8 text-sm`}),t?.description&&(0,z.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)})}):(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Select `,o??`an option`,` to configure.`]})}var Un={"ref:object":mn,"filter-mode":Mn,"object-selector":hn,"field-selector":gn,"field-ref":Sn,"field-multi":Tn,"action-multi":Nn,"filter-builder":Ln,"view-ref":wn,icon:kn,"color-picker":Rn,condition:zn,"master-detail":_n,"string-tags":yn,multiselect:xn,code:Kn,secret:Vn,"dynamic-config":Hn};function Wn(e,t){if(e?.language)return e.language;if(typeof t?.format==`string`){let e=t.format.toLowerCase();if(e===`sql`||e===`javascript`||e===`typescript`||e===`json`||e===`yaml`||e===`html`||e===`css`||e===`python`)return e}let n=e?.field?.toLowerCase()??``;return n.includes(`sql`)||n===`query`?`sql`:`javascript`}var Gn=B.lazy(()=>n(()=>import(`./src-C4OnKiir.js`).then(e=>({default:e.CodeEditorRenderer})),__vite__mapDeps([0]),import.meta.url));function Kn({schema:e,value:t,onChange:n,readOnly:r,fieldSpec:i}){let a=Wn(i,e),o=typeof t==`string`?t:t==null?``:String(t);return(0,z.jsxs)(`div`,{className:`rounded-md border border-border/50 overflow-hidden`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between px-2 py-1 bg-muted/40 border-b border-border/30 text-[10px] font-mono text-muted-foreground`,children:[(0,z.jsx)(`span`,{children:a}),r&&(0,z.jsx)(`span`,{children:`read-only`})]}),(0,z.jsx)(B.Suspense,{fallback:(0,z.jsx)(`div`,{className:`h-[280px] flex items-center justify-center text-xs text-muted-foreground`,children:`Loading editor…`}),children:(0,z.jsx)(Gn,{schema:{type:`code`,language:a,theme:`vs-dark`,height:`280px`,readOnly:r},value:o,onChange:e=>n(e??``)})})]})}var qn=new Set([`text`,`textarea`,`number`,`switch`,`select`,`json`]);function Jn(e,t){if(!e)return e;let n=e.oneOf??e.anyOf;if(!Array.isArray(n)||n.length===0)return e;let r=typeof t==`object`&&!!t&&!Array.isArray(t),i=Array.isArray(t),a=r?new Set(Object.keys(t)):null,o=null,s=i&&t.length?t[0]:void 0,c=typeof s==`object`&&!!s&&!Array.isArray(s);for(let e of n){let n=0;if(e.type===`array`&&i){n+=5;let t=e.items?.type;(t===`object`&&c||t===`string`&&typeof s==`string`||t===`number`&&typeof s==`number`||t===`integer`&&typeof s==`number`)&&(n+=3)}if(e.type===`object`&&r&&(n+=5),e.type===`string`&&typeof t==`string`&&(n+=5),e.type===`number`&&typeof t==`number`&&(n+=5),e.type===`boolean`&&typeof t==`boolean`&&(n+=5),a&&Array.isArray(e.required))for(let t of e.required)a.has(t)&&(n+=1);(!o||n>o.score)&&(o={branch:e,score:n})}let l=o?.branch??n[0];return{...e,...l,oneOf:void 0,anyOf:void 0}}function Yn(e,t){if(e?.widget)return e.widget;if(e?.type){let t=e.type;if(t===`text`||t===`email`||t===`url`||t===`phone`||t===`password`)return`text`;if(t===`textarea`||t===`markdown`||t===`html`||t===`richtext`)return`textarea`;if(t===`number`||t===`currency`||t===`percent`)return`number`;if(t===`date`||t===`datetime`||t===`time`)return`date-picker`;if(t===`boolean`||t===`toggle`)return`switch`;if(t===`select`||t===`radio`)return e.multiple?`multiselect`:`select`;if(t===`multiselect`||t===`checkboxes`||t===`tags`)return`string-tags`;if(t===`composite`)return`composite`;if(t===`repeater`)return`repeater`;if(t===`record`)return`record`;if(t===`lookup`||t===`master_detail`||t===`tree`)return`ref-object`;if(t===`image`||t===`file`||t===`avatar`||t===`video`||t===`audio`)return`file-upload`;if(t===`code`)return`code`;if(t===`json`||t===`location`||t===`address`)return`json`;if(t===`color`)return`color-picker`;if(t===`rating`)return`number`;if(t===`slider`)return`slider`;if(t===`signature`)return`signature`;if(t===`qrcode`)return`qrcode`;if(t===`progress`)return`number`;if(t===`formula`||t===`summary`||t===`autonumber`)return`text`;if(t===`vector`)return`json`}if(t){let e=t.type;if(e===`array`&&Array.isArray(t.items?.enum))return`multiselect`;if(e===`array`&&t.items?.type===`string`)return`string-tags`;if(e===`array`&&t.items?.type===`object`)return`master-detail`;if(e===`object`)return`object-fields`;if(e===`boolean`)return`switch`;if(e===`number`||e===`integer`)return`number`;if(Array.isArray(t.enum))return`select`;if(e===`string`){if(t.format===`date`||t.format===`date-time`)return`date-picker`;if(t.format===`email`||t.format===`uri`||t.format===`uri-reference`)return`text`;if(t.format===`multiline`)return`textarea`}}}function Xn(e,t,n){if(n?.objectFields&&!Array.isArray(t?.enum)){if(t?.type===`array`&&t.items?.type===`string`&&(/Fields$/.test(e)||e===`columns`||e===`fieldOrder`))return`field-multi`;if((t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(/.Field$/.test(e)||e===`field`))return`field-ref`}}function Zn(e,t){if(!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(e===`icon`||/Icon$/.test(e)))return`icon`}function Qn(e,t){if((t?.type===`string`||Array.isArray(t?.enum)||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(e===`color`||e===`colorVariant`||/Color$/.test(e)))return`color-picker`}var $n=new Set([`visible`,`hidden`,`disabled`,`visibleOn`,`condition`,`predicate`]);function er(e,t){if(!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&($n.has(e)||/When$/.test(e)))return`condition`}var tr=/(^|_)(secret|token|api[_-]?key|access[_-]?key|client[_-]?secret|credential|private[_-]?key|passphrase)$/i;function nr(e,t){if(t?.format===`password`||t?.writeOnly===!0||!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&tr.test(e))return`secret`}function rr({schema:e,form:t,value:n,onChange:r,issues:i=[],hiddenFields:a=[],fieldOrder:o=[],readOnly:s=!1,createMode:c=!1,widgetContext:l}){let u=e;if(!u||typeof u!=`object`)if(n&&typeof n==`object`)u=fr(n);else return(0,z.jsx)(dr,{value:n,onChange:r,readOnly:s});let d=u.properties??{},f=Array.isArray(u.required)?u.required:[],p=mr(Object.keys(d),o).filter(e=>!a.includes(e)),m=B.useMemo(()=>{let e={},t=K();for(let n of i)(e[n.path]??=[]).push(Qt(n.message,t));return e},[i]),h=n??{};function g(e,t){let n={...h,[e]:t};(t===void 0||t===``)&&delete n[e],r(n)}if(t?.sections?.length){let e=[];for(let n of t.sections)for(let t of n.fields)e.push(typeof t==`string`?t:t.field);let n=e.filter(e=>d[e]).length;if(e.length===0||n>0)return(0,z.jsx)(ir,{form:t,props:d,required:f,hiddenFields:a,issuesByPath:m,value:h,readOnly:s,createMode:c,widgetContext:l,onChange:g});typeof console<`u`&&console.warn(`[SchemaForm] form layout declares no fields that exist in the schema; falling back to flat schema-driven rendering. Declared:`,e,`Available:`,Object.keys(d))}return(0,z.jsx)(`div`,{className:`space-y-4`,children:p.map(e=>(0,z.jsx)(Y,{name:e,schema:d[e],value:h[e],required:f.includes(e),issues:m[e],readOnly:s,widgetContext:l,fieldSpec:d[e]?.widget?{field:e,widget:d[e].widget}:void 0,formData:h,onChange:t=>g(e,t)},e))})}function J(e){return typeof e==`string`?{field:e}:e}function ir({form:e,props:t,required:n,hiddenFields:r,issuesByPath:i,value:a,readOnly:o,createMode:s,widgetContext:c,onChange:l}){let u=(e.sections??[]).filter(e=>!e.visibleOn||zt(e.visibleOn,{data:a})),d=e.type===`tabbed`&&u.length>1,f=(e,u)=>{let d=e.fields.map(J).filter(e=>!(e.hidden||r.includes(e.field)||e.visibleOn&&!zt(e.visibleOn,{data:a})));if(d.length===0)return null;let f=(0,z.jsx)(`div`,{className:`grid gap-4`,style:{gridTemplateColumns:`repeat(${e.columns??1}, minmax(0, 1fr))`},children:d.map(e=>{let r=t[e.field];return r?(0,z.jsx)(`div`,{style:{gridColumn:`span ${e.colSpan??1}`},children:(0,z.jsx)(Y,{name:e.field,schema:{...r,...e.label?{title:e.label}:{},...e.helpText?{description:e.helpText}:{},...e.placeholder?{placeholder:e.placeholder}:{}},value:a[e.field],required:e.required??n.includes(e.field),issues:i[e.field],readOnly:o||e.readonly||e.immutable&&!s,fieldSpec:e,widgetContext:c,formData:a,onChange:t=>l(e.field,t)})},e.field):(0,z.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,style:{gridColumn:`span ${e.colSpan??1}`},children:G(`engine.form.missingField`,K(),{field:e.field})},e.field)})});return e.collapsible&&e.label?(0,z.jsxs)(de,{defaultOpen:!e.collapsed,className:`rounded-md border border-border/40 bg-card/30`,children:[(0,z.jsxs)(me,{className:`group flex w-full items-center justify-between gap-2 p-4 text-left`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`span`,{className:`block text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]}),(0,z.jsx)(j,{className:`h-4 w-4 shrink-0 text-muted-foreground transition-transform group-data-[state=closed]:-rotate-90`})]}),(0,z.jsx)(le,{className:`space-y-3 px-4 pb-4`,children:f})]},u):(0,z.jsxs)(`section`,{className:`space-y-3 rounded-md border border-border/40 bg-card/30 p-4`,children:[e.label&&(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{className:`text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),f]},u)};if(d){let e=u.filter(e=>e.fields.map(J).some(e=>!e.hidden&&!r.includes(e.field)&&(!e.visibleOn||zt(e.visibleOn,{data:a}))));return e.length===0?null:(0,z.jsxs)(Ge,{defaultValue:(e[0].label??`section-0`).toLowerCase(),className:`w-full`,children:[(0,z.jsx)(Fe,{className:`flex flex-wrap gap-1`,children:e.map((e,t)=>(0,z.jsx)(Xe,{value:(e.label??`section-${t}`).toLowerCase(),children:e.label??`Section ${t+1}`},t))}),e.map((e,t)=>(0,z.jsx)(we,{value:(e.label??`section-${t}`).toLowerCase(),className:`mt-4`,children:f(e,t)},t))]})}return(0,z.jsx)(`div`,{className:`space-y-4`,children:u.map(f)})}function Y({name:e,schema:t,value:n,required:r,issues:i,readOnly:a,fieldSpec:o,widgetContext:s,formData:c,onChange:l}){let u=o?.label||t?.title||X(e),d=o?.helpText||t?.description,f=`mdf-${e}`,p=Yn(o,t);if(!o?.widget){let n=Xn(e,t,s);if(n)p=n;else{let n=nr(e,t);if(n)p=n;else{let n=Zn(e,t);if(n)p=n;else{let n=Qn(e,t);if(n)p=n;else{let n=er(e,t);n&&(p=n)}}}}}let m=t?.type===`boolean`||p===`switch`,h=t?.default!==void 0,g=r&&!(m&&h),_=X(e).toLowerCase()===u.toLowerCase();return m?(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(P,{htmlFor:f,className:`text-sm font-medium cursor-pointer`,children:[u,g&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]}),d&&(0,z.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:d}),i?.map((e,t)=>(0,z.jsx)(`div`,{className:`text-xs text-destructive mt-0.5`,children:e},t))]}),(0,z.jsx)(ar,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c})]}):(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-2`,children:(0,z.jsxs)(P,{htmlFor:f,className:`text-sm font-medium`,children:[u,g&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`}),!_&&(0,z.jsx)(`code`,{className:`ml-2 text-[10px] font-mono text-muted-foreground/70`,title:`Machine name`,children:e})]})}),(0,z.jsx)(ar,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c}),d&&(0,z.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:d}),i?.map((e,t)=>(0,z.jsx)(`div`,{className:`text-xs text-destructive`,children:e},t))]})}function ar({id:e,schema:t,value:n,onChange:r,readOnly:i,widget:a,fieldSpec:o,widgetContext:s,formData:c}){let l=K();if(o?.type===`composite`)return(0,z.jsx)(cr,{value:n,fields:o.fields?.length?o.fields:Z(t),schema:t,readOnly:i,widgetContext:s,fieldSpec:o,onChange:r});if(o?.type===`repeater`){let e=t?.items??{};return(0,z.jsx)(lr,{value:n,fields:o.fields?.length?o.fields:Z(e),schema:t,readOnly:i,widgetContext:s,widget:o.widget,onChange:r})}if(o?.type===`record`){let e=t?.additionalProperties??{};return(0,z.jsx)(ur,{value:n,fields:o.fields?.length?o.fields:Z(e),schema:t,readOnly:i,widgetContext:s,widget:o.widget,keyField:o.keyField,formData:c,onChange:r})}if(a){let u=Un[a];if(u)return(0,z.jsx)(u,{id:e,schema:t,value:n,onChange:r,readOnly:i,context:s,fieldSpec:o,formData:c});let d=Jn(t,n);if(d?.type===`object`&&d.properties&&typeof d.properties==`object`)return(0,z.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,z.jsx)(rr,{schema:d,value:n??{},onChange:e=>r(e),readOnly:i,widgetContext:s})});if(d?.type===`array`&&d.items&&typeof d.items==`object`){let e=Jn(d.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,z.jsx)(lr,{value:n,fields:Z(e),schema:{...d,items:e},readOnly:i,widgetContext:s,widget:o?.widget,onChange:r})}if(!qn.has(a))return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(dr,{value:n,onChange:e=>r(e),readOnly:i}),(0,z.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:G(`engine.form.fallbackJson`,l,{widget:a})})]})}let u=Jn(t,n)??t,d=u?.type,f=o?.options,p=u?.enum??void 0;if(Array.isArray(f)&&f.length>0)return(0,z.jsxs)(h,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:i,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectEllipsis`,l)})}),(0,z.jsx)(x,{children:f.map(e=>(0,z.jsxs)(I,{value:e.value,children:[e.label,e.color&&(0,z.jsx)(`span`,{className:`ml-2 inline-block h-3 w-3 rounded`,style:{backgroundColor:e.color}})]},e.value))})]});if(Array.isArray(p)&&p.length>0)return(0,z.jsxs)(h,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:i,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectEllipsis`,l)})}),(0,z.jsx)(x,{children:p.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]});if(d===`boolean`||a===`switch`||o?.type===`boolean`||o?.type===`toggle`)return(0,z.jsx)(ve,{id:e,checked:!!n,onCheckedChange:e=>r(e),disabled:i});if(d===`number`||d===`integer`){let t=o?.min,a=o?.max;return(0,z.jsx)(L,{id:e,type:`number`,value:n==null?``:String(n),min:t,max:a,onChange:e=>{let t=e.target.value;if(t===``)return r(void 0);let n=d===`integer`?parseInt(t,10):Number(t);r(Number.isFinite(n)?n:void 0)},readOnly:i})}if(d===`string`){let t=o?.maxLength;return u?.format===`multiline`||u?.contentMediaType===`text/markdown`||typeof n==`string`&&n.length>80?(0,z.jsx)(Be,{id:e,rows:4,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:i}):(0,z.jsx)(L,{id:e,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:i})}if(d===`array`){let t=u?.items??{};if(t.type===`string`||t.type===`number`||t.type===`integer`)return(0,z.jsx)(L,{id:e,value:(Array.isArray(n)?n:[]).map(String).join(`, `),placeholder:W(`engine.form.arrayPlaceholder`,l),onChange:e=>{let n=e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean);t.type===`number`||t.type===`integer`?r(n.map(e=>Number(e)).filter(e=>Number.isFinite(e))):r(n)},readOnly:i})}if(u?.type===`object`&&u.properties&&typeof u.properties==`object`)return(0,z.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,z.jsx)(rr,{schema:u,value:n??{},onChange:e=>r(e),readOnly:i,widgetContext:s})});if(u?.type===`array`&&u.items&&typeof u.items==`object`){let e=Jn(u.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,z.jsx)(lr,{value:n,fields:Z(e),schema:{...u,items:e},readOnly:i,widgetContext:s,widget:o?.widget,onChange:r})}return(0,z.jsx)(dr,{value:n,onChange:r,readOnly:i,small:!0})}function or(e,t,n){if(!e)return{};let r;return r=t===`composite`?e.properties:t===`repeater`?e.items?.properties:e.additionalProperties?.properties,r?.[n]??{}}function sr(e,t){let n=[];for(let r of t){let t=e[r.field];if(t==null||t===``||t===!1)continue;let i=r.label||r.field;t===!0?n.push(i):Array.isArray(t)?t.length&&n.push(t.map(e=>typeof e==`object`&&e?e.field??e.name??``:String(e)).filter(Boolean).join(`, `)):typeof t==`object`?n.push(i):n.push(String(t))}return n.join(` · `)}function cr({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,fieldSpec:a,onChange:o}){let s=e&&typeof e==`object`&&!Array.isArray(e)?e:{},c=t.map(J),l=c.map(e=>{let t=or(n,`composite`,e.field);return(0,z.jsx)(Y,{name:e.field,schema:t,value:s[e.field],required:!!e.required,readOnly:r||e.readonly,fieldSpec:e,widgetContext:i,formData:s,onChange:t=>o({...s,[e.field]:t})},e.field)});if(a?.disclosure===`popover`){let e=sr(s,c);return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-border/50 bg-muted/20 px-3 py-1.5`,children:[(0,z.jsx)(`span`,{className:`text-sm text-muted-foreground truncate`,title:e,children:e||(0,z.jsx)(`span`,{className:`italic opacity-70`,children:`Not configured`})}),(0,z.jsxs)(Ne,{children:[(0,z.jsx)(ze,{asChild:!0,children:(0,z.jsx)(R,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 shrink-0`,"aria-label":`Configure`,"data-testid":`composite-popover-${a.field}`,children:(0,z.jsx)(re,{className:`h-4 w-4`})})}),(0,z.jsx)(be,{align:`end`,className:`w-80 space-y-3`,children:l})]})]})}return(0,z.jsx)(`div`,{className:`rounded-md border border-border/50 bg-muted/20 p-3 space-y-3`,children:l})}function lr({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,onChange:o}){let s=Array.isArray(e)?e:[],c=t.map(J),[l,u]=B.useState(null),d=a===`grid`||a===`table`,f=(e,t)=>{o(s.map((n,r)=>r===e?{...n,...t}:n))},p=e=>o(s.filter((t,n)=>n!==e)),m=()=>{let e={};c.forEach(t=>{e[t.field]=void 0}),o([...s,e]),u(s.length)};return d?(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border/50`,children:(0,z.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,z.jsx)(`thead`,{className:`bg-muted/40`,children:(0,z.jsxs)(`tr`,{children:[c.map(e=>(0,z.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium`,children:[e.label||X(e.field),e.required&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e.field)),!r&&(0,z.jsx)(`th`,{className:`w-8`})]})}),(0,z.jsxs)(`tbody`,{children:[s.length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:c.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:W(`engine.repeater.empty`,K())})}),s.map((e,t)=>(0,z.jsxs)(`tr`,{className:`border-t border-border/30 align-top`,children:[c.map(a=>{let o=or(n,`repeater`,a.field);return(0,z.jsx)(`td`,{className:`p-1.5`,children:(0,z.jsx)(ar,{id:`rep-${t}-${a.field}`,schema:o,value:e?.[a.field],readOnly:r||a.readonly,widget:Yn(a,o),fieldSpec:a,widgetContext:i,formData:e,onChange:e=>f(t,{[a.field]:e})})},a.field)}),!r&&(0,z.jsx)(`td`,{className:`p-1.5 text-right`,children:(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>p(t),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,K()),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),!r&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:m,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.add`,K())]})]}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[s.length===0&&(0,z.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:W(`engine.list.empty`,K())}),s.map((e,t)=>{let a=l===t,o=c.map(t=>e?.[t.field]).find(e=>e!=null&&e!==``);return(0,z.jsxs)(`div`,{className:`rounded-md border border-border/50 bg-muted/10`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>u(a?null:t),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,z.jsx)(j,{className:`h-3.5 w-3.5`}):(0,z.jsx)(tt,{className:`h-3.5 w-3.5`}),(0,z.jsxs)(`span`,{className:`truncate`,children:[`#`,t+1,o==null?``:` — ${String(o)}`]})]}),!r&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>p(t),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,K()),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]}),a&&(0,z.jsx)(`div`,{className:`p-3 space-y-3`,children:c.map(a=>{let o=or(n,`repeater`,a.field);return(0,z.jsx)(Y,{name:a.field,schema:o,value:e?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:e,onChange:e=>f(t,{[a.field]:e})},a.field)})})]},t)}),!r&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:m,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.addItem`,K())]})]})}function ur({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,keyField:o,formData:s,onChange:c}){let l=K();if(a){let o=Un[a];if(o)return(0,z.jsx)(o,{schema:n,value:e,onChange:c,readOnly:r,context:i,fieldSpec:{field:``,type:`record`,fields:t,widget:a},formData:s})}let u=o?.field??`name`,d=o?.label??X(u),f=o?.regex?new RegExp(o.regex):null,p=o?.immutable!==!1,m=e&&typeof e==`object`&&!Array.isArray(e)?e:{},h=Object.entries(m),g=t.map(J).filter(e=>e.field!==u),[_,v]=B.useState(null),[y,b]=B.useState(``),[x,S]=B.useState(null),C=e=>c(e),w=(e,t)=>{let n={};for(let[r,i]of h)n[r]=r===e?{...i,...t}:i;C(n)},T=e=>{let t={};for(let[n,r]of h)n!==e&&(t[n]=r);C(t)},E=(e,t)=>{if(t===e)return;if(m[t]){S(G(`engine.form.keyExists`,l,{key:t}));return}if(f&&!f.test(t)){S(G(`engine.form.keyPattern`,l,{pattern:String(f)}));return}let n={};for(let[r,i]of h)r===e?n[t]={...i,[u]:t}:n[r]=i;S(null),C(n)},ee=()=>{let e=y.trim();if(!e){S(W(`engine.form.keyRequired`,l));return}if(m[e]){S(G(`engine.form.keyExists`,l,{key:e}));return}if(f&&!f.test(e)){S(G(`engine.form.keyPattern`,l,{pattern:String(f)}));return}let t={[u]:e};g.forEach(e=>{t[e.field]=void 0}),C({...m,[e]:t}),b(``),S(null),v(e)},[D,O]=B.useState(null),[k,A]=B.useState(null),te=(e,t)=>{if(e===t)return;let n=h.map(([e])=>e),r=n.indexOf(e),i=n.indexOf(t);if(r<0||i<0)return;n.splice(r,1),n.splice(i,0,e);let a={};for(let e of n)a[e]=m[e];C(a)};return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[h.length===0&&(0,z.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:W(`engine.list.empty`,l)}),h.map(([e,t])=>{let a=_===e,s=g.map(e=>t?.[e.field]).find(e=>e!=null&&e!==``);return(0,z.jsxs)(`div`,{className:`rounded-md border bg-muted/10 ${k===e&&D&&D!==e?`border-primary border-2`:`border-border/50`}`,onDragOver:t=>{!D||r||(t.preventDefault(),k!==e&&A(e))},onDragLeave:()=>{k===e&&A(null)},onDrop:t=>{!D||r||(t.preventDefault(),te(D,e),O(null),A(null))},children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[!r&&(0,z.jsx)(`span`,{draggable:!0,onDragStart:t=>{O(e),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,e)},onDragEnd:()=>{O(null),A(null)},className:`cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground`,"aria-label":W(`engine.form.dragToReorder`,l),title:W(`engine.form.dragToReorder`,l),children:(0,z.jsx)(Ae,{className:`h-3.5 w-3.5`})}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>v(a?null:e),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,z.jsx)(j,{className:`h-3.5 w-3.5`}):(0,z.jsx)(tt,{className:`h-3.5 w-3.5`}),(0,z.jsx)(`span`,{className:`font-mono text-xs px-1.5 py-0.5 rounded bg-muted/60`,children:e}),s!=null&&(0,z.jsxs)(`span`,{className:`truncate text-muted-foreground`,children:[`— `,String(s)]})]}),!r&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>T(e),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,l),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]}),a&&(0,z.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,z.jsx)(Y,{name:u,schema:{type:`string`},value:e,required:!0,readOnly:r||p,fieldSpec:{field:u,type:`text`,label:d,helpText:o?.helpText},widgetContext:i,formData:t,onChange:t=>E(e,String(t??``).trim())}),g.map(a=>{if(a.visibleOn&&!zt(a.visibleOn,{data:t}))return null;let o=or(n,`record`,a.field);return(0,z.jsx)(Y,{name:a.field,schema:o,value:t?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:t,onChange:t=>w(e,{[a.field]:t})},a.field)})]})]},e)}),!r&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(L,{value:y,onChange:e=>{b(e.target.value),x&&S(null)},placeholder:o?.placeholder??d,className:`h-8 text-xs font-mono max-w-[220px]`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),ee())}}),(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:ee,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.add`,l)]}),x&&(0,z.jsx)(`span`,{className:`text-xs text-destructive`,children:x})]})]})}function dr({value:e,onChange:t,readOnly:n,small:r}){let i=K(),[a,o]=B.useState(()=>pr(e)),[s,c]=B.useState(null);return B.useEffect(()=>{o(pr(e)),c(null)},[JSON.stringify(e)]),(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(Be,{rows:r?4:12,className:`font-mono text-xs`,value:a,readOnly:n,onChange:e=>{let n=e.target.value;if(o(n),!n.trim()){c(null),t(void 0);return}try{let e=JSON.parse(n);c(null),t(e)}catch(e){c(e?.message??W(`engine.form.invalidJson`,i))}}}),s&&(0,z.jsx)(`div`,{className:`text-xs text-destructive`,children:s})]})}function fr(e){let t={};for(let[n,r]of Object.entries(e))if(!n.startsWith(`_`))if(r==null)t[n]={type:`string`};else if(typeof r==`string`)t[n]=r.length>80||r.includes(`
10
+ 确定 = 同时删除所有记录(破坏性)。取消 = 保留记录,仅删除结构。`,"engine.quickfind.placeholder":`搜索元数据类型或条目…(如:view、account)`,"engine.quickfind.empty":`输入关键字以搜索所有元数据类型。`,"engine.quickfind.title":`快速查找`,"engine.quickfind.indexing":`正在索引所有类型,共`,"engine.quickfind.noMatches":`没有匹配项。`,"engine.breadcrumb.allTypes":`元数据`,"perm.action.create":`创建`,"perm.action.read":`读取`,"perm.action.edit":`编辑`,"perm.action.delete":`删除`,"perm.action.transfer":`转移所有者`,"perm.action.restore":`从回收站恢复`,"perm.action.purge":`彻底删除`,"perm.action.viewAll":`查看所有记录(绕过共享规则)`,"perm.action.modifyAll":`修改所有记录(绕过共享规则)`,"perm.col.object":`对象`,"perm.col.bulk":`批量`,"perm.bulk.read":`读`,"perm.bulk.crud":`增改删`,"perm.bulk.all":`全选`,"perm.bulk.none":`清空`,"perm.filter.placeholder":`筛选对象…`,"perm.filter.onlyGranted":`只看已授权`,"perm.filter.empty":`没有匹配的对象。`,"perm.field.name":`名称`,"perm.field.label":`标签`,"perm.field.isProfile":`作为 Profile`,"perm.field.loading":`加载字段中…`,"perm.field.empty":`该对象未注册字段。`,"perm.field.col.name":`字段`,"perm.field.read":`读`,"perm.field.edit":`改`,"perm.stat.objects":`已授权对象`,"perm.stat.fields":`已授权字段`,"perm.stat.objectsGranted":`已授权对象`,"perm.stat.fieldOverrides":`字段覆盖`,"perm.stat.objectsSuffix":`个对象`,"perm.subtitle.profile":`Profile`,"perm.subtitle.set":`权限集`,"perm.loading":`加载权限集 {name}…`,"perm.readOnly":`只读(OS_METADATA_WRITABLE 未启用)`,"designer.unsavedChanges":`未保存的修改`,"designer.editingOverlay":`编辑覆盖层`,"designer.codeBaseline":`代码基线`,"designer.canvas.nameToStart":`在右侧属性面板中为对象命名,即可开始设计字段。`,"designer.canvas.noFields":`尚无字段`,"designer.canvas.noFieldsHint":`添加字段以开始设计表单。点击任意字段可在右侧编辑其属性。`,"designer.canvas.addField":`添加字段`,"designer.canvas.addSection":`添加分组`,"designer.canvas.addFieldToSection":`向此分组添加字段`,"designer.canvas.searchFieldType":`搜索字段类型…`,"designer.canvas.noMatchingTypes":`没有匹配的类型。`,"designer.canvas.ungrouped":`未分组`,"designer.canvas.emptySection":`空分组`,"designer.canvas.dropHint":`将字段拖到此处,或在下方添加`,"designer.canvas.dropToAssign":`拖放以归入此分组`,"designer.canvas.collapseAll":`全部折叠`,"designer.canvas.expandAll":`全部展开`,"designer.canvas.fields":`个字段`,"designer.canvas.required":`个必填`,"designer.canvas.sections":`个分组`,"designer.canvas.collapseSection":`折叠分组`,"designer.canvas.expandSection":`展开分组`,"designer.canvas.moveSectionUp":`上移分组`,"designer.canvas.moveSectionDown":`下移分组`,"designer.canvas.removeSection":`删除分组`,"designer.canvas.removeSectionHint":`删除分组(字段移至未分组)`,"designer.canvas.renameHint":`双击重命名`,"designer.canvas.sectionN":`分组 {n}`,"designer.stub.pickDate":`选择日期…`,"designer.stub.off":`关闭`,"designer.stub.select":`请选择…`,"designer.stub.pickMulti":`选择一项或多项…`,"designer.stub.uploadImage":`上传图片`,"designer.stub.uploadAvatar":`上传头像`,"designer.stub.upload":`上传{type}`,"designer.stub.qrcode":`二维码`,"designer.stub.computed":`计算值`,"designer.stub.composite":`复合字段 — 子字段在右侧属性面板中编辑。`,"designer.stub.repeater":`重复字段 — 可重复的行分组。`,"designer.stub.searchRef":`搜索 {ref}…`,"designer.stub.chooseRelated":`选择关联对象…`,"designer.stub.latLng":`经纬度`,"designer.field.kind":`字段`,"designer.field.close":`关闭`,"designer.field.missing":`该字段已不在草稿中。`,"designer.field.remove":`删除“{label}”`,"designer.field.section.basic":`基础`,"designer.field.section.advanced":`高级`,"designer.field.section.options":`{type} 选项`,"designer.field.apiName":`API 名称`,"designer.field.label":`显示名`,"designer.field.type":`类型`,"designer.field.required":`必填`,"designer.field.unique":`唯一`,"designer.field.description":`描述`,"designer.field.readonly":`只读`,"designer.field.hidden":`隐藏`,"designer.field.indexed":`索引`,"designer.field.externalId":`外部 ID`,"designer.field.trackHistory":`记录历史`,"designer.field.placeholder":`占位符`,"designer.field.group":`分组`,"designer.field.noGroup":`— 无分组 —`,"designer.field.picklistValues":`选项值`,"designer.field.noValues":`暂无选项值。`,"designer.field.addValue":`添加选项`,"designer.field.optValue":`值`,"designer.field.optLabel":`显示名`,"designer.field.optColor":`颜色`,"designer.field.moveUp":`上移`,"designer.field.moveDown":`下移`,"designer.field.removeValue":`删除`,"designer.field.relatedObject":`关联对象`,"designer.field.relationshipName":`关系名称`,"designer.field.relationshipNameHint":`父对象上的反向集合键`,"designer.field.objectNamePlaceholder":`object_name`,"designer.field.lookup.pickerConfig":`选择器配置`,"designer.field.lookup.displayField":`显示字段`,"designer.field.lookup.descriptionField":`描述字段`,"designer.field.lookup.selectField":`选择字段…`,"designer.field.lookup.setTargetFirst":`请先设置目标对象`,"designer.field.lookup.searchFields":`搜索字段…`,"designer.field.lookup.selectableRecords":`可选记录范围`,"designer.field.lookup.addFilter":`添加筛选条件`,"designer.field.lookup.noFilter":`未设筛选 — 所有 {ref} 记录均可选。`,"designer.field.lookup.filterN":`筛选条件 {n}`,"designer.field.lookup.removeFilter":`移除筛选条件`,"designer.field.lookup.filterField":`字段`,"designer.field.lookup.filterOperator":`运算符`,"designer.field.lookup.filterValue":`值`,"designer.field.lookup.dependsOn":`依赖字段(同记录字段)`,"designer.field.lookup.addDependsOn":`添加该查找依赖的字段…`,"designer.field.lookup.searchHostFields":`搜索本对象的字段…`,"designer.field.lookup.pageSize":`选择器分页大小`,"designer.field.lookup.allowCreate":`允许快速创建`,"designer.field.formula":`公式 (CEL)`,"designer.field.precision":`精度`,"designer.field.scale":`小数位`,"designer.field.min":`最小值`,"designer.field.max":`最大值`,"designer.field.maxLength":`最大长度`,"designer.object.kind":`对象`,"designer.object.section.basic":`基础信息`,"designer.object.section.basicHint":`标识、显示名与分类`,"designer.object.name":`名称`,"designer.object.nameHint":`snake_case 唯一标识符(创建后不可修改)`,"designer.object.namePlaceholder":`account`,"designer.object.label":`显示名`,"designer.object.labelPlaceholder":`如:客户`,"designer.object.pluralLabel":`复数显示名`,"designer.object.pluralPlaceholder":`如:客户列表`,"designer.object.icon":`图标`,"designer.object.iconHint":`Lucide 图标名称(如 “building”、“users”)`,"designer.object.description":`描述`,"designer.object.descriptionPlaceholder":`该对象代表什么`,"designer.field.defaultValue":`默认值`,"designer.field.defaultNone":`— 无 —`,"designer.field.true":`是`,"designer.field.false":`否`,"designer.field.duplicate":`复制字段`,"designer.field.copySuffix":` 副本`,"designer.field.helpText":`帮助文本`,"designer.field.helpTextPlaceholder":`显示在表单字段下方`,"designer.field.minLength":`最小长度`,"designer.field.conditionalRequired":`条件必填 (CEL)`,"designer.field.conditionalRequiredHint":`当此表达式为真时,该字段变为必填。`,"designer.canvas.bulkSelected":`已选 {n} 项`,"designer.canvas.bulkMoveTo":`移至分组`,"designer.canvas.bulkDelete":`删除`,"designer.canvas.bulkClear":`取消选择`,"designer.canvas.bulkHint":`按住 Ctrl/⌘ 单击或 Shift 单击可多选字段。`,"designer.canvas.reviewChanges":`查看变更`,"designer.canvas.reviewExit":`退出查看`,"designer.canvas.reviewVsPublished":`对比已发布版本`,"designer.canvas.diffAdded":`新增`,"designer.canvas.diffChanged":`修改`,"designer.canvas.diffRemoved":`删除`,"designer.canvas.diffChangedKeys":`变更:{keys}`,"designer.draftReview.title":`查看变更`,"designer.draftReview.badge":`{n} 项待审`,"designer.draftReview.empty":`与已发布版本相比没有变更。`,"designer.canvas.askAi":`问 AI`,"designer.canvas.askAiGenerate":`用 AI 生成字段`};function Yt(e){return(e??``).toLowerCase().startsWith(`zh`)?{types:Wt,domains:Kt,strings:Jt}:{types:Ut,domains:Gt,strings:qt}}function Xt(e,t,n){return Yt(t).types[e]||(n??e)}function Zt(e,t){return Yt(t).domains[e]??e}function W(e,t){return Yt(t).strings[e]??e}function G(e,t,n){return W(e,t).replace(/\{(\w+)\}/g,(e,t)=>t in n?String(n[t]):`{${t}}`)}function Qt(e,t){let n=String(e??``).trim(),r=n.toLowerCase();if(!n||r===`invalid`||r===`invalid input`)return W(`engine.validation.invalid`,t);let i=n.match(/^Invalid string: must match pattern (.+)$/);if(i)return G(`engine.validation.pattern`,t,{pattern:i[1]});let a=n.match(/^Invalid input: expected (.+), received (.+)$/);if(a){let e=a[1],n=a[2];return e===`string`&&n===`undefined`?W(`engine.validation.expectedStringUndefined`,t):G(`engine.validation.expectedType`,t,{expected:e,received:n})}let o=n.match(/^Invalid option: expected one of (.+)$/);return o?G(`engine.validation.invalidOption`,t,{options:o[1]}):r===`required`||r===`is required`?W(`engine.validation.nameRequired`,t):r===`invalid json`?W(`engine.form.invalidJson`,t):n}function K(){return typeof navigator<`u`&&/^zh/i.test(navigator.language)?`zh-CN`:`en-US`}var $t=[{value:`default`,label:`Default`,css:`#9ca3af`},{value:`blue`,label:`Blue`,css:`#3b82f6`},{value:`teal`,label:`Teal`,css:`#14b8a6`},{value:`orange`,label:`Orange`,css:`#f97316`},{value:`purple`,label:`Purple`,css:`#a855f7`},{value:`success`,label:`Success`,css:`#22c55e`},{value:`warning`,label:`Warning`,css:`#f59e0b`},{value:`danger`,label:`Danger`,css:`#ef4444`},{value:`green`,label:`Green`,css:`#22c55e`},{value:`red`,label:`Red`,css:`#ef4444`},{value:`amber`,label:`Amber`,css:`#f59e0b`}],en=Object.fromEntries($t.map(e=>[e.value,e.css]));function tn(e){return e?/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(e)?e:en[e]??`#9ca3af`:`#9ca3af`}function nn({value:e,onChange:t,disabled:n,options:r}){let i=r?r.map(e=>({value:e.value,label:e.label??e.value,css:tn(e.value)})):$t.slice(0,8),a=e??`default`;return(0,z.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`radiogroup`,children:i.map(e=>{let r=a===e.value;return(0,z.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":r,"aria-label":e.label,title:e.label,disabled:n,onClick:()=>t(e.value),className:C(`flex h-7 w-7 items-center justify-center rounded-full border transition-all`,r?`border-transparent ring-2 ring-foreground/60 ring-offset-1 ring-offset-background`:`border-border hover:scale-110`,n&&`cursor-not-allowed opacity-50`),children:(0,z.jsx)(`span`,{className:`h-4 w-4 rounded-full`,style:{backgroundColor:e.css}})},e.value)})})}function rn(e,t){let n=it(),[r,i]=B.useState({fields:[],loading:!t&&!!e,error:null});return B.useEffect(()=>{if(t){i({fields:t,loading:!1,error:null});return}if(!e){i({fields:[],loading:!1,error:null});return}let r=!1;return i(e=>({...e,loading:!0,error:null})),n.get(`object`,e).then(e=>{if(!r){if(!e){i({fields:[],loading:!1,error:`Object not found`});return}i({fields:bt(e.fields).entries.map(e=>({name:e.name,label:typeof e.def.label==`string`&&e.def.label?e.def.label:e.name,type:typeof e.def.type==`string`?e.def.type:`text`,hidden:e.def.hidden===!0})),loading:!1,error:null})}}).catch(e=>{r||i({fields:[],loading:!1,error:e?.message??String(e)})}),()=>{r=!0}},[n,e,t]),r}var an=[{value:`==`,label:`equals`},{value:`!=`,label:`not equals`},{value:`>`,label:`greater than`},{value:`<`,label:`less than`},{value:`>=`,label:`≥`},{value:`<=`,label:`≤`},{value:`truthy`,label:`is set / true`},{value:`falsy`,label:`is empty / false`}],on=[{value:`record.id`,label:`record.id`},{value:`user.id`,label:`user.id`},{value:`user.email`,label:`user.email`},{value:`user.role`,label:`user.role`},{value:`user.isAdmin`,label:`user.isAdmin`},{value:`org.id`,label:`org.id`}],sn=e=>e.replace(/\s+/g,` `).trim();function cn(e){let t=e.trim();return t===`true`||t===`false`||t===`null`||t!==``&&!Number.isNaN(Number(t))?t:`'${t.replace(/'/g,`\\'`)}'`}function ln(e){let t=e.trim(),n=/^'(.*)'$/.exec(t);return n?n[1].replace(/\\'/g,`'`):t}function un(e,t){return e.filter(e=>e.subject).map(e=>e.op===`truthy`?e.subject:e.op===`falsy`?`!${e.subject}`:`${e.subject} ${e.op} ${cn(e.value)}`).join(` ${t} `)}function dn(e){let t=sn(e);if(!t)return{rows:[],join:`&&`};let n=t.includes(`&&`),r=t.includes(`||`);if(n&&r)return null;let i=r?`||`:`&&`,a=t.split(r?`||`:`&&`).map(e=>e.trim()),o=[];for(let e of a){let t=/^([a-zA-Z_][\w.]*)\s*(==|!=|>=|<=|>|<)\s*(.+)$/.exec(e);if(t){o.push({subject:t[1],op:t[2],value:ln(t[3])});continue}let n=/^!\s*([a-zA-Z_][\w.]*)$/.exec(e);if(n){o.push({subject:n[1],op:`falsy`,value:``});continue}let r=/^([a-zA-Z_][\w.]*)$/.exec(e);if(r){o.push({subject:r[1],op:`truthy`,value:``});continue}return null}return{rows:o,join:i}}function fn(e){let t=dn(e||``);return t&&sn(un(t.rows,t.join))===sn(e||``)?{rows:t.rows,join:t.join,raw:!1}:{rows:[],join:`&&`,raw:!!e}}function pn({label:e,value:t,onCommit:n,objectName:r,fields:i,disabled:a}){let{fields:o}=rn(r),s=i??o,c=B.useMemo(()=>[...s.filter(e=>!e.hidden).map(e=>({value:`record.${e.name}`,label:`record.${e.name}`})),...on],[s]),l=B.useMemo(()=>fn(t),[]),[u,d]=B.useState(l.rows),[f,p]=B.useState(l.join),[m,g]=B.useState(l.raw),_=B.useRef(t||``);B.useEffect(()=>{let e=t||``;if(e===_.current)return;_.current=e;let n=fn(e);d(n.rows),p(n.join),g(n.raw)},[t]);let y=(e,t)=>{let r=un(e,t);_.current=r,n(r)},b=(e,t=f)=>{d(e),p(t),y(e,t)},S=un(u,f);return m?(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}):(0,z.jsx)(`span`,{}),(0,z.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>{let e=fn(t);(!t||!e.raw)&&(d(e.rows),p(e.join),g(!1))},className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,z.jsx)(ie,{className:`h-3 w-3`}),` Builder`]})]}),(0,z.jsx)(`textarea`,{value:t,onChange:e=>{_.current=e.target.value,n(e.target.value)},disabled:a,spellCheck:!1,rows:2,placeholder:`CEL expression, e.g. record.status != 'done' && user.isAdmin`,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`}),t&&!dn(t)&&(0,z.jsx)(`div`,{className:`text-[10px] text-muted-foreground/70`,children:`Advanced expression — Builder only supports simple AND/OR conditions.`})]}):(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[e?(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}):(0,z.jsx)(`span`,{}),(0,z.jsxs)(`button`,{type:`button`,disabled:a,onClick:()=>g(!0),className:`inline-flex items-center gap-1 text-[10px] text-muted-foreground hover:text-foreground disabled:opacity-50`,children:[(0,z.jsx)(Te,{className:`h-3 w-3`}),` Expression`]})]}),u.length===0?(0,z.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-2 text-center text-[11px] text-muted-foreground`,children:`Always — no condition.`}):(0,z.jsx)(`div`,{className:`space-y-1.5`,children:u.map((e,t)=>(0,z.jsxs)(`div`,{className:`space-y-1 rounded-md border border-border p-1.5`,children:[t>0&&(0,z.jsx)(`div`,{className:`flex justify-center`,children:(0,z.jsxs)(h,{value:f,onValueChange:e=>b(u,e),disabled:a,children:[(0,z.jsx)(v,{className:`h-6 w-16 text-[10px]`,children:(0,z.jsx)(N,{})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:`&&`,children:`AND`}),(0,z.jsx)(I,{value:`||`,children:`OR`})]})]})}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,z.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,z.jsxs)(h,{value:e.subject,onValueChange:e=>b(u.map((n,r)=>r===t?{...n,subject:e}:n)),disabled:a,children:[(0,z.jsx)(v,{className:`h-7 text-xs`,children:(0,z.jsx)(N,{placeholder:`field / context`})}),(0,z.jsxs)(x,{children:[c.map(e=>(0,z.jsx)(I,{value:e.value,children:e.label},e.value)),e.subject&&!c.some(t=>t.value===e.subject)&&(0,z.jsx)(I,{value:e.subject,children:e.subject})]})]})}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`icon`,className:`h-7 w-7 shrink-0`,disabled:a,"aria-label":`Remove condition`,onClick:()=>b(u.filter((e,n)=>n!==t)),children:(0,z.jsx)(T,{className:`h-3.5 w-3.5`})})]}),(0,z.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,z.jsx)(`div`,{className:`w-28 shrink-0`,children:(0,z.jsxs)(h,{value:e.op,onValueChange:e=>b(u.map((n,r)=>r===t?{...n,op:e}:n)),disabled:a,children:[(0,z.jsx)(v,{className:`h-7 text-xs`,children:(0,z.jsx)(N,{})}),(0,z.jsx)(x,{children:an.map(e=>(0,z.jsx)(I,{value:e.value,children:e.label},e.value))})]})}),e.op!==`truthy`&&e.op!==`falsy`&&(0,z.jsx)(L,{className:`h-7 flex-1 text-xs`,value:e.value,placeholder:`value`,disabled:a,onChange:e=>b(u.map((n,r)=>r===t?{...n,value:e.target.value}:n))})]})]},t))}),!a&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:()=>b([...u,{subject:``,op:`truthy`,value:``}]),children:[(0,z.jsx)(M,{className:`mr-1 h-3.5 w-3.5`}),` Add condition`]}),S&&(0,z.jsx)(`div`,{className:`rounded bg-muted/40 px-2 py-1 text-[10px] font-mono text-muted-foreground break-all`,children:S})]})}function mn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectNames??[],s=t==null?``:String(t);return i?.objectsLoading?(0,z.jsx)(L,{id:e,value:s,disabled:!0,placeholder:W(`engine.form.loadingObjects`,a)}):o.length===0?(0,z.jsx)(L,{id:e,value:s,disabled:r,onChange:e=>n(e.target.value||void 0),placeholder:W(`engine.form.noObjects`,a)}):(0,z.jsxs)(h,{value:s,onValueChange:e=>n(e||void 0),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectObject`,a)})}),(0,z.jsx)(x,{children:o.map(e=>(0,z.jsx)(I,{value:e,children:e},e))})]})}function hn({id:e,value:t,onChange:n,readOnly:r,context:i,fieldSpec:a}){let o=K(),s=i?.objectNames??[],c=a?.multiple??!1,l=B.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),u=e=>{if(!r){if(!c){n(e);return}n(l.includes(e)?l.filter(t=>t!==e):[...l,e])}},d=e=>{if(r)return;let t=l.filter(t=>t!==e);n(c?t:``)};return i?.objectsLoading?(0,z.jsx)(L,{id:e,value:W(`engine.form.loadingObjects`,o),readOnly:!0,disabled:!0}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[l.length>0&&(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:l.map(e=>(0,z.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,z.jsx)(`span`,{children:e}),!r&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>d(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e))}),(0,z.jsxs)(h,{value:``,onValueChange:u,disabled:r||s.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(c?`engine.form.addObjects`:`engine.form.selectObjectDots`,o)})}),(0,z.jsx)(x,{children:s.map(e=>(0,z.jsxs)(I,{value:e,disabled:!c&&l.includes(e),children:[e,l.includes(e)&&` ✓`]},e))})]})]})}function gn({id:e,value:t,onChange:n,readOnly:r,fieldSpec:i,formData:a}){let o=K(),[s,c]=B.useState([]),[l,u]=B.useState(!1),d=i?.dependsOn||i?.reference||`objectName`,f=Array.isArray(d)?d[0]:d,p=a?.[f];B.useEffect(()=>{if(!p){c([]);return}u(!0),fetch(`/api/v1/objects/${p}/fields`).then(e=>e.json()).then(e=>{c(e.fields||[]),u(!1)}).catch(e=>{console.error(`Failed to load fields:`,e),c([]),u(!1)})},[p]);let m=i?.multiple??!1,g=B.useMemo(()=>t?Array.isArray(t)?t.map(String):String(t).split(`,`).map(e=>e.trim()).filter(Boolean):[],[t]),_=e=>{if(!r){if(!m){n(e);return}n(g.includes(e)?g.filter(t=>t!==e):[...g,e])}},y=e=>{if(r)return;let t=g.filter(t=>t!==e);n(m?t:``)};return p?l?(0,z.jsx)(L,{id:e,value:W(`engine.form.loadingFields`,o),readOnly:!0,disabled:!0}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[g.length>0&&(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:g.map(e=>{let t=s.find(t=>t.name===e);return(0,z.jsxs)(`div`,{className:`inline-flex items-center gap-1 rounded bg-secondary px-2 py-1 text-sm`,children:[(0,z.jsx)(`span`,{children:t?.label||e}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:t?.type}),!r&&(0,z.jsx)(`button`,{type:`button`,onClick:()=>y(e),className:`text-muted-foreground hover:text-foreground`,children:`×`})]},e)})}),(0,z.jsxs)(h,{value:``,onValueChange:_,disabled:r||s.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(m?`engine.form.addFields`:`engine.form.selectFieldDots`,o)})}),(0,z.jsx)(x,{children:s.map(e=>(0,z.jsx)(I,{value:e.name,disabled:!m&&g.includes(e.name),children:(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.type}),g.includes(e.name)&&` ✓`]})},e.name))})]})]}):(0,z.jsx)(L,{id:e,value:W(`engine.form.selectObjectFirst`,o),readOnly:!0,disabled:!0})}function _n({schema:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=e;if(o?.anyOf||o?.oneOf){let e=(o.anyOf??o.oneOf).find(e=>e?.type===`array`&&e?.items?.type===`object`);e&&(o={...o,...e})}let s=o?.items??{},c=s.properties??{},l=new Set(Array.isArray(s.required)?s.required:[]),u=Array.isArray(t)?t:[],d=Object.keys(c);if(d.length===0)return(0,z.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,children:W(`engine.form.masterDetailSchemaError`,a)});function f(e,t){let r=u.slice();r[e]={...r[e]??{},...t},n(r)}function p(){n([...u,{}])}function m(e){let t=u.slice();t.splice(e,1),n(t)}return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`overflow-x-auto rounded border border-border/40`,children:(0,z.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,z.jsx)(`thead`,{className:`bg-muted/40`,children:(0,z.jsxs)(`tr`,{children:[d.map(e=>(0,z.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium text-muted-foreground`,children:[c[e]?.title??e,l.has(e)&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e)),(0,z.jsx)(`th`,{className:`w-8`})]})}),(0,z.jsxs)(`tbody`,{children:[u.length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:d.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:W(`engine.form.noRows`,a)})}),u.map((e,t)=>(0,z.jsxs)(`tr`,{className:`border-t border-border/30`,children:[d.map(n=>(0,z.jsx)(`td`,{className:`p-1`,children:(0,z.jsx)(vn,{schema:c[n],value:(e??{})[n],readOnly:r,context:i,onChange:e=>f(t,{[n]:e})})},n)),(0,z.jsx)(`td`,{className:`p-1 text-right`,children:(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>m(t),disabled:r,className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.removeRow`,a),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:p,disabled:r,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.addRow`,a)]})]})}function vn({schema:e,value:t,readOnly:n,context:r,onChange:i}){if(e?.widget===`ref:object`)return(0,z.jsx)(mn,{schema:e,value:t,onChange:i,readOnly:n,context:r});let a=e?.enum;return Array.isArray(a)&&a.length>0?(0,z.jsxs)(h,{value:t==null?``:String(t),onValueChange:e=>i(e||void 0),disabled:n,children:[(0,z.jsx)(v,{className:`h-8 text-xs`,children:(0,z.jsx)(N,{placeholder:`—`})}),(0,z.jsx)(x,{children:a.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]}):e?.type===`boolean`?(0,z.jsx)(`input`,{type:`checkbox`,checked:!!t,disabled:n,onChange:e=>i(e.target.checked),className:`h-4 w-4`}):e?.type===`number`||e?.type===`integer`?(0,z.jsx)(L,{type:`number`,value:t==null?``:String(t),disabled:n,onChange:e=>{let t=e.target.valueAsNumber;i(Number.isFinite(t)?t:void 0)},className:`h-8 text-xs`}):(0,z.jsx)(L,{value:t==null?``:String(t),disabled:n,onChange:e=>i(e.target.value||void 0),className:`h-8 text-xs`})}function yn({id:e,value:t,onChange:n,readOnly:r}){let i=K(),a=Array.isArray(t)?t:[],[o,s]=B.useState(``);function c(e){let t=e.split(/[,\n]/).map(e=>e.trim()).filter(Boolean);if(t.length===0)return;let r=[...a];for(let e of t)r.includes(e)||r.push(e);n(r),s(``)}function l(e){let t=a.slice();t.splice(e,1),n(t)}return(0,z.jsx)(`div`,{className:`rounded border border-input bg-background p-1.5`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1`,children:[a.map((e,t)=>(0,z.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded bg-muted px-1.5 py-0.5 text-xs`,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:e}),!r&&(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>l(t),className:`text-muted-foreground hover:text-destructive`,children:`×`})]},t)),(0,z.jsx)(`input`,{id:e,type:`text`,value:o,disabled:r,placeholder:a.length===0?W(`engine.form.tagsPlaceholder`,i):``,onChange:e=>s(e.target.value),onKeyDown:e=>{e.key===`Enter`||e.key===`,`?(e.preventDefault(),c(o)):e.key===`Backspace`&&!o&&a.length>0&&l(a.length-1)},onBlur:()=>o&&c(o),className:`min-w-[8rem] flex-1 bg-transparent text-sm outline-none`})]})})}function bn(e){return e.replace(/[_-]+/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function xn({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}){let a=B.useMemo(()=>{if(Array.isArray(i?.options)&&i.options.length)return i.options.map(e=>({label:e.label,value:e.value}));let e=r?.items?.enum??r?.enum??[];return(Array.isArray(e)?e:[]).filter(e=>typeof e==`string`).map(e=>({label:bn(e),value:e}))},[i,r]),o=B.useMemo(()=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],[e]);function s(e){if(n)return;let r=new Set(o);r.has(e)?r.delete(e):r.add(e);let i=a.map(e=>e.value).filter(e=>r.has(e));t(i.length?i:void 0)}return a.length===0?(0,z.jsx)(yn,{value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}):(0,z.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,role:`group`,children:a.map(e=>{let t=o.includes(e.value);return(0,z.jsxs)(`button`,{type:`button`,role:`checkbox`,"aria-checked":t,disabled:n,onClick:()=>s(e.value),className:`inline-flex items-center gap-1.5 rounded-md border px-2.5 py-1 text-xs font-medium transition-colors `+(t?`border-primary bg-primary/10 text-primary`:`border-input bg-background text-muted-foreground hover:text-foreground hover:bg-muted`)+(n?` opacity-60 cursor-not-allowed`:``),children:[(0,z.jsx)(`span`,{"aria-hidden":!0,className:`flex h-3.5 w-3.5 items-center justify-center rounded-[3px] border text-[9px] leading-none `+(t?`border-primary bg-primary text-primary-foreground`:`border-muted-foreground/40`),children:t?`✓`:``}),e.label]},e.value)})})}var q=`__none__`;function Sn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectFields??[],s=t==null?``:String(t),c=!s||o.some(e=>e.name===s);return(0,z.jsxs)(h,{value:s||q,onValueChange:e=>n(e===q?``:e),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?W(`engine.form.selectField`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:q,children:(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:W(`engine.form.none`,a)})}),!c&&s&&(0,z.jsxs)(I,{value:s,children:[(0,z.jsx)(`span`,{className:`font-mono`,children:s}),(0,z.jsx)(`span`,{className:`ml-2 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,a)})]}),o.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Cn(e,t){let n=t?e.find(e=>e.name===t):void 0,r=t&&!n?e.find(e=>e.name.endsWith(`.${t}`)):void 0,i=t==="default"||t===`list`;return{exact:n,suffixMatch:r,isSpecial:i,resolves:!!n||!!r||i,showStored:!!t&&!n}}function wn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectViews??[],s=t==null?``:String(t),{suffixMatch:c,resolves:l,showStored:u}=Cn(o,s);return(0,z.jsxs)(h,{value:s||q,onValueChange:e=>n(e===q?void 0:e),disabled:r,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?W(`engine.form.selectEllipsis`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsxs)(x,{children:[(0,z.jsx)(I,{value:q,children:(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:W(`engine.form.none`,a)})}),u&&(0,z.jsx)(I,{value:s,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:c?.label||s}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:c?`\u2192 ${c.name}`:s}),!l&&(0,z.jsx)(`span`,{className:`ml-1 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,a)})]})}),o.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))]})]})}function Tn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=K(),o=i?.objectFields??[],s=Array.isArray(t)?t.map(String):typeof t==`string`&&t?t.split(`,`).map(e=>e.trim()).filter(Boolean):[],c=e=>o.find(t=>t.name===e)?.label||e,l=o.filter(e=>!s.includes(e.name)),u=e=>{s.includes(e)||n([...s,e])},d=e=>{let t=s.slice();t.splice(e,1),n(t)},f=(e,t)=>{let r=e+t;if(r<0||r>=s.length)return;let i=s.slice();[i[e],i[r]]=[i[r],i[e]],n(i)};return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[s.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:s.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[c(e),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!r&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move up`,disabled:t===0,onClick:()=>f(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move down`,disabled:t===s.length-1,onClick:()=>f(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>d(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!r&&(0,z.jsxs)(h,{value:``,onValueChange:u,disabled:l.length===0,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:o.length?l.length?W(`engine.form.addField`,a):W(`engine.form.allFieldsAdded`,a):W(`engine.form.noObjectBound`,a)})}),(0,z.jsx)(x,{children:l.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var En=Se,Dn=new Set(En),On=120;function kn({id:e,value:t,onChange:n,readOnly:r}){let i=K(),a=t==null?``:String(t),[o,s]=B.useState(!1),[c,l]=B.useState(``),u=a?Ue(a):``,f=!a||Dn.has(u),p=Ue(c.trim()),m=B.useMemo(()=>p?En.filter(e=>e.includes(p)):En,[p]),h=m.slice(0,On),g=m.length>h.length,v=e=>{n(e||void 0),s(!1),l(``)};return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{id:e,type:`button`,role:`combobox`,"aria-haspopup":`dialog`,"aria-expanded":o,disabled:r,onClick:()=>!r&&s(!0),className:`flex w-full items-center gap-2 rounded-md border border-input bg-background px-3 py-2 text-sm text-left disabled:cursor-not-allowed disabled:opacity-60`,children:[(0,z.jsx)(Je,{name:f?a:void 0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,z.jsx)(`span`,{className:`flex-1 truncate `+(a?`font-mono`:`text-muted-foreground`),children:a||W(`engine.form.selectEllipsis`,i)}),!f&&a&&(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:W(`engine.form.notInObject`,i)}),(0,z.jsx)(d,{"aria-hidden":!0,className:`h-3.5 w-3.5 shrink-0 opacity-50`})]}),(0,z.jsx)(ae,{open:o,onOpenChange:e=>{s(e),e||l(``)},children:(0,z.jsxs)(ce,{className:`max-w-2xl`,children:[(0,z.jsx)(Ve,{children:(0,z.jsx)(_,{children:W(`engine.form.chooseIcon`,i)})}),(0,z.jsxs)(`div`,{className:`flex items-center gap-2 rounded-md border border-input bg-background px-3 py-2`,children:[(0,z.jsx)(w,{"aria-hidden":!0,className:`h-4 w-4 shrink-0 text-muted-foreground`}),(0,z.jsx)(`input`,{type:`text`,autoFocus:!0,value:c,"aria-label":W(`engine.form.searchIcons`,i),placeholder:W(`engine.form.searchIcons`,i),onChange:e=>l(e.target.value),className:`w-full bg-transparent text-sm outline-none`})]}),(0,z.jsxs)(`div`,{id:e?`${e}-listbox`:void 0,role:`listbox`,className:`grid max-h-[52vh] grid-cols-6 gap-1.5 overflow-y-auto pr-1 sm:grid-cols-8`,children:[a&&(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!1,title:W(`engine.form.none`,i),onClick:()=>v(void 0),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded border border-dashed border-border p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground`,children:[(0,z.jsx)(F,{className:`h-4 w-4`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:`none`})]}),!f&&a&&(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":!0,title:a,onClick:()=>v(a),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded bg-accent p-1 text-accent-foreground ring-1 ring-primary`,children:[(0,z.jsx)(Je,{name:void 0,className:`h-4 w-4`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:a})]}),h.map(e=>{let t=e===u;return(0,z.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":t,title:e,onClick:()=>v(e),className:`flex aspect-square flex-col items-center justify-center gap-1 rounded p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground `+(t?`bg-accent text-accent-foreground ring-1 ring-primary`:``),children:[(0,z.jsx)(Je,{name:e,className:`h-5 w-5`}),(0,z.jsx)(`span`,{className:`w-full truncate text-center text-[9px] leading-tight`,children:e})]},e)}),h.length===0&&(0,z.jsx)(`p`,{className:`col-span-full px-2 py-6 text-center text-sm text-muted-foreground`,children:W(`engine.form.noMatchingIcons`,i)})]}),g&&(0,z.jsx)(`p`,{className:`text-center text-xs text-muted-foreground`,children:G(`engine.form.iconsTruncated`,i,{shown:h.length,total:m.length})})]})})]})}var An=[{key:`none`,label:`None`},{key:`tabs`,label:`Tabs`},{key:`dropdown`,label:`Dropdown`}],jn=e=>(e||``).trim().toLowerCase().replace(/[^a-z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`tab`;function Mn({value:e,onChange:t,readOnly:n,context:r}){let i=e&&typeof e==`object`?e:void 0,a=i?.element??(i?`dropdown`:`none`),o=r?.objectFields??[],s=e=>{if(!n){if(e===`none`){t(void 0);return}t({...i??{},element:e})}},c=Array.isArray(i?.fields)?i.fields:[],l=e=>t({...i??{},element:a===`none`?`dropdown`:a,fields:e}),u=new Set(c.map(e=>e.field)),d=o.filter(e=>!u.has(e.name)),f=e=>o.find(t=>t.name===e)?.label||e,p=a===`dropdown`||a===`toggle`,m=(Array.isArray(i?.tabs)?i.tabs:[]).map(e=>({...e,name:e?.name??e?.id??``,label:typeof e?.label==`string`?e.label:e?.name??e?.id??``,filter:Array.isArray(e?.filter)?e.filter:Array.isArray(e?.filters)?e.filters.filter(e=>Array.isArray(e)&&e.length>=2).map(e=>({field:String(e[0]),operator:String(e[1]),value:e[2]})):[],isDefault:e?.isDefault??e?.default})),g=e=>{let t={name:jn(e.label||e.name),label:e.label||e.name||`Tab`};return e.icon&&(t.icon=e.icon),t.filter=Array.isArray(e.filter)?e.filter:[],e.isDefault&&(t.isDefault=!0),t},_=e=>{let n={},r=e.map(g).map(e=>{let t=e.name;if(n[t]){let r=2;for(;n[`${e.name}_${r}`];)r++;t=`${e.name}_${r}`}return n[t]=!0,{...e,name:t}});t({...i??{},element:`tabs`,tabs:r})},y=()=>_([...m,{name:``,label:`Tab ${m.length+1}`,filter:[]}]),b=e=>_(m.filter((t,n)=>n!==e)),S=(e,t)=>{let n=[...m],r=e+t;r<0||r>=n.length||([n[e],n[r]]=[n[r],n[e]],_(n))},C=(e,t)=>_(m.map((n,r)=>r===e?{...n,...t}:n));return(0,z.jsxs)(`div`,{className:`space-y-3`,children:[(0,z.jsx)(`div`,{className:`inline-flex rounded-md border border-input bg-background p-0.5`,role:`radiogroup`,"aria-label":`Filter element`,children:An.map(e=>{let t=a===e.key;return(0,z.jsx)(`button`,{type:`button`,role:`radio`,"aria-checked":t,"data-testid":`filter-mode-${e.key}`,disabled:n,onClick:()=>s(e.key),className:`px-3 py-1 text-xs font-medium rounded transition-colors `+(t?`bg-primary text-primary-foreground shadow-sm`:`text-muted-foreground hover:text-foreground hover:bg-muted`),children:e.label},e.key)})}),p&&(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-fields`,children:[c.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:c.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-2 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[f(e.field),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e.field})]}),(0,z.jsxs)(`label`,{className:`flex items-center gap-1 text-xs text-muted-foreground`,children:[(0,z.jsx)(ve,{checked:!!e.showCount,disabled:n,onCheckedChange:e=>l(c.map((n,r)=>r===t?{...n,showCount:e}:n))}),`count`]}),!n&&(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove field`,onClick:()=>l(c.filter((e,n)=>n!==t)),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]},e.field))}),!n&&d.length>0&&(0,z.jsxs)(h,{onValueChange:e=>l([...c,{field:e}]),children:[(0,z.jsx)(v,{className:`h-8 text-xs`,"data-testid":`filter-mode-add-field`,children:(0,z.jsx)(N,{placeholder:`+ Add filter field…`})}),(0,z.jsx)(x,{children:d.map(e=>(0,z.jsx)(I,{value:e.name,children:e.label||e.name},e.name))})]}),o.length===0&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to pick filter fields.`})]}),a===`tabs`&&(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`filter-mode-tabs-editor`,children:[m.map((e,t)=>(0,z.jsxs)(`div`,{className:`rounded-md border border-input bg-background p-2 space-y-2`,"data-testid":`tab-preset-${t}`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,z.jsx)(L,{value:e.label,placeholder:`Tab label`,disabled:n,className:`h-8 text-sm flex-1`,"data-testid":`tab-label-${t}`,onChange:e=>C(t,{label:e.target.value})}),(0,z.jsx)(`code`,{className:`text-[10px] text-muted-foreground shrink-0 max-w-[6rem] truncate`,title:e.name,children:e.name}),!n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move tab up`,disabled:t===0,onClick:()=>S(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,z.jsx)(te,{className:`h-3.5 w-3.5`})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move tab down`,disabled:t===m.length-1,onClick:()=>S(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:(0,z.jsx)(j,{className:`h-3.5 w-3.5`})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove tab`,onClick:()=>b(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]})]}),(0,z.jsx)(`div`,{className:`pl-1`,"data-testid":`tab-${t}-filter`,children:(0,z.jsx)(In,{value:e.filter,onChange:e=>C(t,{filter:e}),fields:o,readOnly:n})})]},t)),!n&&(0,z.jsxs)(`button`,{type:`button`,"data-testid":`filter-mode-add-tab`,onClick:y,className:`inline-flex items-center text-xs font-medium text-primary hover:underline`,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` Add tab`]}),(0,z.jsxs)(`label`,{className:`flex items-center gap-2 text-xs text-muted-foreground pt-1`,children:[(0,z.jsx)(ve,{checked:i?.showAllRecords!==!1,disabled:n,"data-testid":`filter-mode-show-all`,onCheckedChange:e=>t({...i??{},element:`tabs`,showAllRecords:e})}),`Show “All records” tab`]}),o.length===0&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to build tab filter rules.`})]})]})}function Nn({id:e,value:t,onChange:n,readOnly:r,context:i}){let a=i?.objectActions??[],o=Array.isArray(t)?t.map(String):typeof t==`string`&&t?t.split(`,`).map(e=>e.trim()).filter(Boolean):[],s=e=>a.find(t=>t.name===e)?.label||e,c=a.filter(e=>!o.includes(e.name)),l=e=>{o.includes(e)||n([...o,e])},u=e=>{let t=o.slice();t.splice(e,1),n(t)},d=(e,t)=>{let r=e+t;if(r<0||r>=o.length)return;let i=o.slice();[i[e],i[r]]=[i[r],i[e]],n(i)};return(0,z.jsxs)(`div`,{className:`space-y-2`,"data-testid":`action-multi`,children:[o.length>0&&(0,z.jsx)(`div`,{className:`space-y-1`,children:o.map((e,t)=>(0,z.jsxs)(`div`,{className:`flex items-center gap-1 rounded border border-input bg-background px-2 py-1 text-sm`,children:[(0,z.jsxs)(`span`,{className:`flex-1 truncate`,children:[s(e),(0,z.jsx)(`code`,{className:`ml-2 text-xs text-muted-foreground`,children:e})]}),!r&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move up`,disabled:t===0,onClick:()=>d(t,-1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↑`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Move down`,disabled:t===o.length-1,onClick:()=>d(t,1),className:`px-1 text-muted-foreground hover:text-foreground disabled:opacity-30`,children:`↓`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>u(t),className:`px-1 text-muted-foreground hover:text-destructive`,children:`×`})]})]},e))}),!r&&(0,z.jsxs)(h,{value:``,onValueChange:l,disabled:c.length===0,children:[(0,z.jsx)(v,{id:e,"data-testid":`action-multi-add`,children:(0,z.jsx)(N,{placeholder:a.length?c.length?`+ Add action button…`:`All actions added`:`Bind a source object to pick actions`})}),(0,z.jsx)(x,{children:c.map(e=>(0,z.jsx)(I,{value:e.name,children:(0,z.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`span`,{children:e.label||e.name}),(0,z.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})},e.name))})]})]})}var Pn={equals:`equals`,notEquals:`not_equals`,contains:`contains`,notContains:`not_contains`,isEmpty:`is_empty`,isNotEmpty:`is_not_empty`,greaterThan:`gt`,lessThan:`lt`,greaterOrEqual:`gte`,lessOrEqual:`lte`,before:`lt`,after:`gt`,between:`between`,in:`in`,notIn:`not_in`},Fn={equals:`equals`,eq:`equals`,not_equals:`notEquals`,ne:`notEquals`,neq:`notEquals`,contains:`contains`,not_contains:`notContains`,is_empty:`isEmpty`,is_not_empty:`isNotEmpty`,gt:`greaterThan`,greater_than:`greaterThan`,lt:`lessThan`,less_than:`lessThan`,gte:`greaterOrEqual`,lte:`lessOrEqual`,in:`in`,not_in:`notIn`,nin:`notIn`};function In({value:e,onChange:t,fields:n,readOnly:r}){let i=Array.isArray(e)?e:[],a={id:`g`,logic:`and`,conditions:i.map((e,t)=>({id:`c${t}`,field:e.field,operator:Fn[e.operator]??e.operator??`equals`,value:e.value??``}))},o=n.map(e=>({value:e.name,label:e.label||e.name,type:e.type})),s=i.length?i.map(e=>`${n.find(t=>t.name===e.field)?.label||e.field}`).filter(Boolean).join(`, `):``;return(0,z.jsxs)(Ne,{children:[(0,z.jsx)(ze,{asChild:!0,children:(0,z.jsxs)(R,{variant:`outline`,size:`sm`,disabled:r,className:`h-8 w-full justify-between text-xs font-normal`,"data-testid":`filter-builder-trigger`,children:[(0,z.jsx)(`span`,{className:`truncate text-left`,children:s||(0,z.jsx)(`span`,{className:`text-muted-foreground`,children:`+ Add filter…`})}),(0,z.jsx)(j,{className:`h-3.5 w-3.5 opacity-60 shrink-0`})]})}),(0,z.jsx)(be,{align:`start`,className:`w-[440px] max-w-[90vw] p-3`,children:n.length===0?(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Bind a source object to add filter conditions.`}):(0,z.jsx)(pe,{fields:o,value:a,onChange:e=>{t((e?.conditions??[]).filter(e=>e?.field).map(e=>({field:e.field,operator:Pn[e.operator]??e.operator,value:e.value})))}})})]})}function Ln({value:e,onChange:t,readOnly:n,context:r}){return(0,z.jsx)(In,{value:e,onChange:e=>t(e.length?e:void 0),fields:r?.objectFields??[],readOnly:n})}function Rn({value:e,onChange:t,readOnly:n,schema:r,fieldSpec:i}){let a=Array.isArray(i?.options)&&i.options.length?i.options.map(e=>({value:e.value,label:e.label})):Array.isArray(r?.enum)?r.enum.filter(e=>typeof e==`string`).map(e=>({value:e})):null;if(a&&a.length)return(0,z.jsx)(nn,{value:e==null?void 0:String(e),onChange:e=>t(e),disabled:n,options:a});let o=e==null?``:String(e);return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`input`,{type:`color`,value:/^#([0-9a-f]{6})$/i.test(o)?o:`#000000`,disabled:n,onChange:e=>t(e.target.value),className:`h-8 w-10 shrink-0 rounded border border-input bg-background p-0.5 disabled:opacity-60`,"aria-label":`Color`}),(0,z.jsx)(L,{value:o,placeholder:`#RRGGBB`,disabled:n,onChange:e=>t(e.target.value||void 0),className:`h-8 text-sm font-mono`})]})}function zn({value:e,onChange:t,readOnly:n,context:r}){return(0,z.jsx)(pn,{value:e==null?``:String(e),onCommit:e=>t(e||void 0),fields:r?.objectFields,disabled:n})}var Bn=`••••••••`;function Vn({value:e,onChange:t,readOnly:n,schema:r,id:i}){let a=e===Bn,[o,s]=B.useState(!1),[c,l]=B.useState(a||e==null?``:String(e)),u=e=>{l(e),t(e===``?a?Bn:void 0:e)};return(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(L,{id:i,type:o?`text`:`password`,value:c,disabled:n,autoComplete:`off`,placeholder:a?r?.description?`•••••••• set — type to replace`:`•••••••• set — leave blank to keep`:typeof r?.description==`string`?``:`Enter a value`,onChange:e=>u(e.target.value),className:`h-8 text-sm font-mono`,"aria-label":`Secret value`}),(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`icon`,className:`h-8 w-8 shrink-0`,disabled:n,"aria-label":o?`Hide value`:`Reveal value`,onClick:()=>s(e=>!e),children:o?(0,z.jsx)(b,{className:`h-4 w-4`}):(0,z.jsx)(m,{className:`h-4 w-4`})}),a&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,className:`h-8 shrink-0 text-destructive hover:text-destructive`,disabled:n,onClick:()=>{l(``),t(null)},children:`Clear`})]})}function Hn({value:e,onChange:t,readOnly:n,fieldSpec:r,formData:i,context:a}){let o=Array.isArray(r?.dependsOn)?r.dependsOn[0]:r?.dependsOn,s=o?i?.[o]:void 0,c=s==null?void 0:a?.dynamicSchemas?.[String(s)],l=c?.properties??{},u=new Set(c?.required??[]),d=e&&typeof e==`object`?e:{},f=(e,n)=>{let r={...d};n===void 0||n===``?delete r[e]:r[e]=n,t(r)};return s?!c||Object.keys(l).length===0?(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`No configuration needed for "`,String(s),`".`]}):(0,z.jsx)(`div`,{className:`space-y-2 rounded-md border border-border/60 p-3`,children:Object.entries(l).map(([e,t])=>{let r=t?.title||e,i=d[e],a=u.has(e);if(t?.type===`boolean`)return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,z.jsx)(P,{className:`text-xs`,children:r}),(0,z.jsx)(ve,{checked:!!i,disabled:n,onCheckedChange:t=>f(e,t)})]},e);if(Array.isArray(t?.enum))return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(P,{className:`text-xs`,children:[r,a?` *`:``]}),(0,z.jsxs)(h,{value:i==null?``:String(i),onValueChange:t=>f(e,t),disabled:n,children:[(0,z.jsx)(v,{className:`h-8`,"aria-label":r,children:(0,z.jsx)(N,{placeholder:`Select…`})}),(0,z.jsx)(x,{children:t.enum.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]})]},e);let o=t?.format===`password`||t?.writeOnly===!0,s=t?.type===`number`||t?.type===`integer`;return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsxs)(P,{className:`text-xs`,children:[r,a?` *`:``]}),o?(0,z.jsx)(Vn,{value:i,onChange:t=>f(e,t),readOnly:n,schema:t}):(0,z.jsx)(L,{type:s?`number`:`text`,value:i==null?``:String(i),disabled:n,"aria-label":r,onChange:t=>f(e,s?t.target.value===``?void 0:Number(t.target.value):t.target.value),className:`h-8 text-sm`}),t?.description&&(0,z.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:t.description})]},e)})}):(0,z.jsxs)(`p`,{className:`text-xs text-muted-foreground`,children:[`Select `,o??`an option`,` to configure.`]})}var Un={"ref:object":mn,"filter-mode":Mn,"object-selector":hn,"field-selector":gn,"field-ref":Sn,"field-multi":Tn,"action-multi":Nn,"filter-builder":Ln,"view-ref":wn,icon:kn,"color-picker":Rn,condition:zn,"master-detail":_n,"string-tags":yn,multiselect:xn,code:Kn,secret:Vn,"dynamic-config":Hn};function Wn(e,t){if(e?.language)return e.language;if(typeof t?.format==`string`){let e=t.format.toLowerCase();if(e===`sql`||e===`javascript`||e===`typescript`||e===`json`||e===`yaml`||e===`html`||e===`css`||e===`python`)return e}let n=e?.field?.toLowerCase()??``;return n.includes(`sql`)||n===`query`?`sql`:`javascript`}var Gn=B.lazy(()=>n(()=>import(`./src-CMNhRk8x.js`).then(e=>({default:e.CodeEditorRenderer})),__vite__mapDeps([0]),import.meta.url));function Kn({schema:e,value:t,onChange:n,readOnly:r,fieldSpec:i}){let a=Wn(i,e),o=typeof t==`string`?t:t==null?``:String(t);return(0,z.jsxs)(`div`,{className:`rounded-md border border-border/50 overflow-hidden`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between px-2 py-1 bg-muted/40 border-b border-border/30 text-[10px] font-mono text-muted-foreground`,children:[(0,z.jsx)(`span`,{children:a}),r&&(0,z.jsx)(`span`,{children:`read-only`})]}),(0,z.jsx)(B.Suspense,{fallback:(0,z.jsx)(`div`,{className:`h-[280px] flex items-center justify-center text-xs text-muted-foreground`,children:`Loading editor…`}),children:(0,z.jsx)(Gn,{schema:{type:`code`,language:a,theme:`vs-dark`,height:`280px`,readOnly:r},value:o,onChange:e=>n(e??``)})})]})}var qn=new Set([`text`,`textarea`,`number`,`switch`,`select`,`json`]);function Jn(e,t){if(!e)return e;let n=e.oneOf??e.anyOf;if(!Array.isArray(n)||n.length===0)return e;let r=typeof t==`object`&&!!t&&!Array.isArray(t),i=Array.isArray(t),a=r?new Set(Object.keys(t)):null,o=null,s=i&&t.length?t[0]:void 0,c=typeof s==`object`&&!!s&&!Array.isArray(s);for(let e of n){let n=0;if(e.type===`array`&&i){n+=5;let t=e.items?.type;(t===`object`&&c||t===`string`&&typeof s==`string`||t===`number`&&typeof s==`number`||t===`integer`&&typeof s==`number`)&&(n+=3)}if(e.type===`object`&&r&&(n+=5),e.type===`string`&&typeof t==`string`&&(n+=5),e.type===`number`&&typeof t==`number`&&(n+=5),e.type===`boolean`&&typeof t==`boolean`&&(n+=5),a&&Array.isArray(e.required))for(let t of e.required)a.has(t)&&(n+=1);(!o||n>o.score)&&(o={branch:e,score:n})}let l=o?.branch??n[0];return{...e,...l,oneOf:void 0,anyOf:void 0}}function Yn(e,t){if(e?.widget)return e.widget;if(e?.type){let t=e.type;if(t===`text`||t===`email`||t===`url`||t===`phone`||t===`password`)return`text`;if(t===`textarea`||t===`markdown`||t===`html`||t===`richtext`)return`textarea`;if(t===`number`||t===`currency`||t===`percent`)return`number`;if(t===`date`||t===`datetime`||t===`time`)return`date-picker`;if(t===`boolean`||t===`toggle`)return`switch`;if(t===`select`||t===`radio`)return e.multiple?`multiselect`:`select`;if(t===`multiselect`||t===`checkboxes`||t===`tags`)return`string-tags`;if(t===`composite`)return`composite`;if(t===`repeater`)return`repeater`;if(t===`record`)return`record`;if(t===`lookup`||t===`master_detail`||t===`tree`)return`ref-object`;if(t===`image`||t===`file`||t===`avatar`||t===`video`||t===`audio`)return`file-upload`;if(t===`code`)return`code`;if(t===`json`||t===`location`||t===`address`)return`json`;if(t===`color`)return`color-picker`;if(t===`rating`)return`number`;if(t===`slider`)return`slider`;if(t===`signature`)return`signature`;if(t===`qrcode`)return`qrcode`;if(t===`progress`)return`number`;if(t===`formula`||t===`summary`||t===`autonumber`)return`text`;if(t===`vector`)return`json`}if(t){let e=t.type;if(e===`array`&&Array.isArray(t.items?.enum))return`multiselect`;if(e===`array`&&t.items?.type===`string`)return`string-tags`;if(e===`array`&&t.items?.type===`object`)return`master-detail`;if(e===`object`)return`object-fields`;if(e===`boolean`)return`switch`;if(e===`number`||e===`integer`)return`number`;if(Array.isArray(t.enum))return`select`;if(e===`string`){if(t.format===`date`||t.format===`date-time`)return`date-picker`;if(t.format===`email`||t.format===`uri`||t.format===`uri-reference`)return`text`;if(t.format===`multiline`)return`textarea`}}}function Xn(e,t,n){if(n?.objectFields&&!Array.isArray(t?.enum)){if(t?.type===`array`&&t.items?.type===`string`&&(/Fields$/.test(e)||e===`columns`||e===`fieldOrder`))return`field-multi`;if((t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(/.Field$/.test(e)||e===`field`))return`field-ref`}}function Zn(e,t){if(!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(e===`icon`||/Icon$/.test(e)))return`icon`}function Qn(e,t){if((t?.type===`string`||Array.isArray(t?.enum)||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&(e===`color`||e===`colorVariant`||/Color$/.test(e)))return`color-picker`}var $n=new Set([`visible`,`hidden`,`disabled`,`visibleOn`,`condition`,`predicate`]);function er(e,t){if(!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&($n.has(e)||/When$/.test(e)))return`condition`}var tr=/(^|_)(secret|token|api[_-]?key|access[_-]?key|client[_-]?secret|credential|private[_-]?key|passphrase)$/i;function nr(e,t){if(t?.format===`password`||t?.writeOnly===!0||!Array.isArray(t?.enum)&&(t?.type===`string`||Array.isArray(t?.anyOf)&&t.anyOf.some(e=>e?.type===`string`))&&tr.test(e))return`secret`}function rr({schema:e,form:t,value:n,onChange:r,issues:i=[],hiddenFields:a=[],fieldOrder:o=[],readOnly:s=!1,createMode:c=!1,widgetContext:l}){let u=e;if(!u||typeof u!=`object`)if(n&&typeof n==`object`)u=fr(n);else return(0,z.jsx)(dr,{value:n,onChange:r,readOnly:s});let d=u.properties??{},f=Array.isArray(u.required)?u.required:[],p=mr(Object.keys(d),o).filter(e=>!a.includes(e)),m=B.useMemo(()=>{let e={},t=K();for(let n of i)(e[n.path]??=[]).push(Qt(n.message,t));return e},[i]),h=n??{};function g(e,t){let n={...h,[e]:t};(t===void 0||t===``)&&delete n[e],r(n)}if(t?.sections?.length){let e=[];for(let n of t.sections)for(let t of n.fields)e.push(typeof t==`string`?t:t.field);let n=e.filter(e=>d[e]).length;if(e.length===0||n>0)return(0,z.jsx)(ir,{form:t,props:d,required:f,hiddenFields:a,issuesByPath:m,value:h,readOnly:s,createMode:c,widgetContext:l,onChange:g});typeof console<`u`&&console.warn(`[SchemaForm] form layout declares no fields that exist in the schema; falling back to flat schema-driven rendering. Declared:`,e,`Available:`,Object.keys(d))}return(0,z.jsx)(`div`,{className:`space-y-4`,children:p.map(e=>(0,z.jsx)(Y,{name:e,schema:d[e],value:h[e],required:f.includes(e),issues:m[e],readOnly:s,widgetContext:l,fieldSpec:d[e]?.widget?{field:e,widget:d[e].widget}:void 0,formData:h,onChange:t=>g(e,t)},e))})}function J(e){return typeof e==`string`?{field:e}:e}function ir({form:e,props:t,required:n,hiddenFields:r,issuesByPath:i,value:a,readOnly:o,createMode:s,widgetContext:c,onChange:l}){let u=(e.sections??[]).filter(e=>!e.visibleOn||zt(e.visibleOn,{data:a})),d=e.type===`tabbed`&&u.length>1,f=(e,u)=>{let d=e.fields.map(J).filter(e=>!(e.hidden||r.includes(e.field)||e.visibleOn&&!zt(e.visibleOn,{data:a})));if(d.length===0)return null;let f=(0,z.jsx)(`div`,{className:`grid gap-4`,style:{gridTemplateColumns:`repeat(${e.columns??1}, minmax(0, 1fr))`},children:d.map(e=>{let r=t[e.field];return r?(0,z.jsx)(`div`,{style:{gridColumn:`span ${e.colSpan??1}`},children:(0,z.jsx)(Y,{name:e.field,schema:{...r,...e.label?{title:e.label}:{},...e.helpText?{description:e.helpText}:{},...e.placeholder?{placeholder:e.placeholder}:{}},value:a[e.field],required:e.required??n.includes(e.field),issues:i[e.field],readOnly:o||e.readonly||e.immutable&&!s,fieldSpec:e,widgetContext:c,formData:a,onChange:t=>l(e.field,t)})},e.field):(0,z.jsx)(`div`,{className:`rounded border border-dashed border-amber-500/40 bg-amber-500/5 p-2 text-xs text-amber-700 dark:text-amber-300`,style:{gridColumn:`span ${e.colSpan??1}`},children:G(`engine.form.missingField`,K(),{field:e.field})},e.field)})});return e.collapsible&&e.label?(0,z.jsxs)(de,{defaultOpen:!e.collapsed,className:`rounded-md border border-border/40 bg-card/30`,children:[(0,z.jsxs)(me,{className:`group flex w-full items-center justify-between gap-2 p-4 text-left`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`span`,{className:`block text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,z.jsx)(`span`,{className:`mt-0.5 block text-xs text-muted-foreground`,children:e.description})]}),(0,z.jsx)(j,{className:`h-4 w-4 shrink-0 text-muted-foreground transition-transform group-data-[state=closed]:-rotate-90`})]}),(0,z.jsx)(le,{className:`space-y-3 px-4 pb-4`,children:f})]},u):(0,z.jsxs)(`section`,{className:`space-y-3 rounded-md border border-border/40 bg-card/30 p-4`,children:[e.label&&(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{className:`text-sm font-semibold text-foreground/90`,children:e.label}),e.description&&(0,z.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.description})]}),f]},u)};if(d){let e=u.filter(e=>e.fields.map(J).some(e=>!e.hidden&&!r.includes(e.field)&&(!e.visibleOn||zt(e.visibleOn,{data:a}))));return e.length===0?null:(0,z.jsxs)(Ge,{defaultValue:(e[0].label??`section-0`).toLowerCase(),className:`w-full`,children:[(0,z.jsx)(Fe,{className:`flex flex-wrap gap-1`,children:e.map((e,t)=>(0,z.jsx)(Xe,{value:(e.label??`section-${t}`).toLowerCase(),children:e.label??`Section ${t+1}`},t))}),e.map((e,t)=>(0,z.jsx)(we,{value:(e.label??`section-${t}`).toLowerCase(),className:`mt-4`,children:f(e,t)},t))]})}return(0,z.jsx)(`div`,{className:`space-y-4`,children:u.map(f)})}function Y({name:e,schema:t,value:n,required:r,issues:i,readOnly:a,fieldSpec:o,widgetContext:s,formData:c,onChange:l}){let u=o?.label||t?.title||X(e),d=o?.helpText||t?.description,f=`mdf-${e}`,p=Yn(o,t);if(!o?.widget){let n=Xn(e,t,s);if(n)p=n;else{let n=nr(e,t);if(n)p=n;else{let n=Zn(e,t);if(n)p=n;else{let n=Qn(e,t);if(n)p=n;else{let n=er(e,t);n&&(p=n)}}}}}let m=t?.type===`boolean`||p===`switch`,h=t?.default!==void 0,g=r&&!(m&&h),_=X(e).toLowerCase()===u.toLowerCase();return m?(0,z.jsxs)(`div`,{className:`flex items-start justify-between gap-3 py-1.5`,children:[(0,z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,z.jsxs)(P,{htmlFor:f,className:`text-sm font-medium cursor-pointer`,children:[u,g&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]}),d&&(0,z.jsx)(`div`,{className:`text-xs text-muted-foreground mt-0.5`,children:d}),i?.map((e,t)=>(0,z.jsx)(`div`,{className:`text-xs text-destructive mt-0.5`,children:e},t))]}),(0,z.jsx)(ar,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c})]}):(0,z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-2`,children:(0,z.jsxs)(P,{htmlFor:f,className:`text-sm font-medium`,children:[u,g&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`}),!_&&(0,z.jsx)(`code`,{className:`ml-2 text-[10px] font-mono text-muted-foreground/70`,title:`Machine name`,children:e})]})}),(0,z.jsx)(ar,{id:f,schema:t,value:n,onChange:l,readOnly:a,widget:p,fieldSpec:o,widgetContext:s,formData:c}),d&&(0,z.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:d}),i?.map((e,t)=>(0,z.jsx)(`div`,{className:`text-xs text-destructive`,children:e},t))]})}function ar({id:e,schema:t,value:n,onChange:r,readOnly:i,widget:a,fieldSpec:o,widgetContext:s,formData:c}){let l=K();if(o?.type===`composite`)return(0,z.jsx)(cr,{value:n,fields:o.fields?.length?o.fields:Z(t),schema:t,readOnly:i,widgetContext:s,fieldSpec:o,onChange:r});if(o?.type===`repeater`){let e=t?.items??{};return(0,z.jsx)(lr,{value:n,fields:o.fields?.length?o.fields:Z(e),schema:t,readOnly:i,widgetContext:s,widget:o.widget,onChange:r})}if(o?.type===`record`){let e=t?.additionalProperties??{};return(0,z.jsx)(ur,{value:n,fields:o.fields?.length?o.fields:Z(e),schema:t,readOnly:i,widgetContext:s,widget:o.widget,keyField:o.keyField,formData:c,onChange:r})}if(a){let u=Un[a];if(u)return(0,z.jsx)(u,{id:e,schema:t,value:n,onChange:r,readOnly:i,context:s,fieldSpec:o,formData:c});let d=Jn(t,n);if(d?.type===`object`&&d.properties&&typeof d.properties==`object`)return(0,z.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,z.jsx)(rr,{schema:d,value:n??{},onChange:e=>r(e),readOnly:i,widgetContext:s})});if(d?.type===`array`&&d.items&&typeof d.items==`object`){let e=Jn(d.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,z.jsx)(lr,{value:n,fields:Z(e),schema:{...d,items:e},readOnly:i,widgetContext:s,widget:o?.widget,onChange:r})}if(!qn.has(a))return(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(dr,{value:n,onChange:e=>r(e),readOnly:i}),(0,z.jsx)(`div`,{className:`text-[10px] text-muted-foreground`,children:G(`engine.form.fallbackJson`,l,{widget:a})})]})}let u=Jn(t,n)??t,d=u?.type,f=o?.options,p=u?.enum??void 0;if(Array.isArray(f)&&f.length>0)return(0,z.jsxs)(h,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:i,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectEllipsis`,l)})}),(0,z.jsx)(x,{children:f.map(e=>(0,z.jsxs)(I,{value:e.value,children:[e.label,e.color&&(0,z.jsx)(`span`,{className:`ml-2 inline-block h-3 w-3 rounded`,style:{backgroundColor:e.color}})]},e.value))})]});if(Array.isArray(p)&&p.length>0)return(0,z.jsxs)(h,{value:n==null?``:String(n),onValueChange:e=>r(e),disabled:i,children:[(0,z.jsx)(v,{id:e,children:(0,z.jsx)(N,{placeholder:W(`engine.form.selectEllipsis`,l)})}),(0,z.jsx)(x,{children:p.map(e=>(0,z.jsx)(I,{value:String(e),children:String(e)},String(e)))})]});if(d===`boolean`||a===`switch`||o?.type===`boolean`||o?.type===`toggle`)return(0,z.jsx)(ve,{id:e,checked:!!n,onCheckedChange:e=>r(e),disabled:i});if(d===`number`||d===`integer`){let t=o?.min,a=o?.max;return(0,z.jsx)(L,{id:e,type:`number`,value:n==null?``:String(n),min:t,max:a,onChange:e=>{let t=e.target.value;if(t===``)return r(void 0);let n=d===`integer`?parseInt(t,10):Number(t);r(Number.isFinite(n)?n:void 0)},readOnly:i})}if(d===`string`){let t=o?.maxLength;return u?.format===`multiline`||u?.contentMediaType===`text/markdown`||typeof n==`string`&&n.length>80?(0,z.jsx)(Be,{id:e,rows:4,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:i}):(0,z.jsx)(L,{id:e,value:n??``,maxLength:t,onChange:e=>r(e.target.value||void 0),readOnly:i})}if(d===`array`){let t=u?.items??{};if(t.type===`string`||t.type===`number`||t.type===`integer`)return(0,z.jsx)(L,{id:e,value:(Array.isArray(n)?n:[]).map(String).join(`, `),placeholder:W(`engine.form.arrayPlaceholder`,l),onChange:e=>{let n=e.target.value.split(`,`).map(e=>e.trim()).filter(Boolean);t.type===`number`||t.type===`integer`?r(n.map(e=>Number(e)).filter(e=>Number.isFinite(e))):r(n)},readOnly:i})}if(u?.type===`object`&&u.properties&&typeof u.properties==`object`)return(0,z.jsx)(`div`,{className:`rounded-md border border-border/40 bg-card/30 p-3`,children:(0,z.jsx)(rr,{schema:u,value:n??{},onChange:e=>r(e),readOnly:i,widgetContext:s})});if(u?.type===`array`&&u.items&&typeof u.items==`object`){let e=Jn(u.items,Array.isArray(n)&&n.length?n[0]:void 0);if(e?.type===`object`&&e.properties&&typeof e.properties==`object`)return(0,z.jsx)(lr,{value:n,fields:Z(e),schema:{...u,items:e},readOnly:i,widgetContext:s,widget:o?.widget,onChange:r})}return(0,z.jsx)(dr,{value:n,onChange:r,readOnly:i,small:!0})}function or(e,t,n){if(!e)return{};let r;return r=t===`composite`?e.properties:t===`repeater`?e.items?.properties:e.additionalProperties?.properties,r?.[n]??{}}function sr(e,t){let n=[];for(let r of t){let t=e[r.field];if(t==null||t===``||t===!1)continue;let i=r.label||r.field;t===!0?n.push(i):Array.isArray(t)?t.length&&n.push(t.map(e=>typeof e==`object`&&e?e.field??e.name??``:String(e)).filter(Boolean).join(`, `)):typeof t==`object`?n.push(i):n.push(String(t))}return n.join(` · `)}function cr({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,fieldSpec:a,onChange:o}){let s=e&&typeof e==`object`&&!Array.isArray(e)?e:{},c=t.map(J),l=c.map(e=>{let t=or(n,`composite`,e.field);return(0,z.jsx)(Y,{name:e.field,schema:t,value:s[e.field],required:!!e.required,readOnly:r||e.readonly,fieldSpec:e,widgetContext:i,formData:s,onChange:t=>o({...s,[e.field]:t})},e.field)});if(a?.disclosure===`popover`){let e=sr(s,c);return(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 rounded-md border border-border/50 bg-muted/20 px-3 py-1.5`,children:[(0,z.jsx)(`span`,{className:`text-sm text-muted-foreground truncate`,title:e,children:e||(0,z.jsx)(`span`,{className:`italic opacity-70`,children:`Not configured`})}),(0,z.jsxs)(Ne,{children:[(0,z.jsx)(ze,{asChild:!0,children:(0,z.jsx)(R,{variant:`ghost`,size:`sm`,className:`h-7 w-7 p-0 shrink-0`,"aria-label":`Configure`,"data-testid":`composite-popover-${a.field}`,children:(0,z.jsx)(re,{className:`h-4 w-4`})})}),(0,z.jsx)(be,{align:`end`,className:`w-80 space-y-3`,children:l})]})]})}return(0,z.jsx)(`div`,{className:`rounded-md border border-border/50 bg-muted/20 p-3 space-y-3`,children:l})}function lr({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,onChange:o}){let s=Array.isArray(e)?e:[],c=t.map(J),[l,u]=B.useState(null),d=a===`grid`||a===`table`,f=(e,t)=>{o(s.map((n,r)=>r===e?{...n,...t}:n))},p=e=>o(s.filter((t,n)=>n!==e)),m=()=>{let e={};c.forEach(t=>{e[t.field]=void 0}),o([...s,e]),u(s.length)};return d?(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(`div`,{className:`overflow-x-auto rounded-md border border-border/50`,children:(0,z.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,z.jsx)(`thead`,{className:`bg-muted/40`,children:(0,z.jsxs)(`tr`,{children:[c.map(e=>(0,z.jsxs)(`th`,{className:`px-2 py-1.5 text-left text-xs font-medium`,children:[e.label||X(e.field),e.required&&(0,z.jsx)(`span`,{className:`text-destructive ml-0.5`,children:`*`})]},e.field)),!r&&(0,z.jsx)(`th`,{className:`w-8`})]})}),(0,z.jsxs)(`tbody`,{children:[s.length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:c.length+1,className:`px-2 py-3 text-center text-xs text-muted-foreground`,children:W(`engine.repeater.empty`,K())})}),s.map((e,t)=>(0,z.jsxs)(`tr`,{className:`border-t border-border/30 align-top`,children:[c.map(a=>{let o=or(n,`repeater`,a.field);return(0,z.jsx)(`td`,{className:`p-1.5`,children:(0,z.jsx)(ar,{id:`rep-${t}-${a.field}`,schema:o,value:e?.[a.field],readOnly:r||a.readonly,widget:Yn(a,o),fieldSpec:a,widgetContext:i,formData:e,onChange:e=>f(t,{[a.field]:e})})},a.field)}),!r&&(0,z.jsx)(`td`,{className:`p-1.5 text-right`,children:(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>p(t),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,K()),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})})]},t))]})]})}),!r&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:m,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.add`,K())]})]}):(0,z.jsxs)(`div`,{className:`space-y-2`,children:[s.length===0&&(0,z.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:W(`engine.list.empty`,K())}),s.map((e,t)=>{let a=l===t,o=c.map(t=>e?.[t.field]).find(e=>e!=null&&e!==``);return(0,z.jsxs)(`div`,{className:`rounded-md border border-border/50 bg-muted/10`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[(0,z.jsxs)(`button`,{type:`button`,onClick:()=>u(a?null:t),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,z.jsx)(j,{className:`h-3.5 w-3.5`}):(0,z.jsx)(tt,{className:`h-3.5 w-3.5`}),(0,z.jsxs)(`span`,{className:`truncate`,children:[`#`,t+1,o==null?``:` — ${String(o)}`]})]}),!r&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>p(t),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,K()),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]}),a&&(0,z.jsx)(`div`,{className:`p-3 space-y-3`,children:c.map(a=>{let o=or(n,`repeater`,a.field);return(0,z.jsx)(Y,{name:a.field,schema:o,value:e?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:e,onChange:e=>f(t,{[a.field]:e})},a.field)})})]},t)}),!r&&(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:m,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.addItem`,K())]})]})}function ur({value:e,fields:t,schema:n,readOnly:r,widgetContext:i,widget:a,keyField:o,formData:s,onChange:c}){let l=K();if(a){let o=Un[a];if(o)return(0,z.jsx)(o,{schema:n,value:e,onChange:c,readOnly:r,context:i,fieldSpec:{field:``,type:`record`,fields:t,widget:a},formData:s})}let u=o?.field??`name`,d=o?.label??X(u),f=o?.regex?new RegExp(o.regex):null,p=o?.immutable!==!1,m=e&&typeof e==`object`&&!Array.isArray(e)?e:{},h=Object.entries(m),g=t.map(J).filter(e=>e.field!==u),[_,v]=B.useState(null),[y,b]=B.useState(``),[x,S]=B.useState(null),C=e=>c(e),w=(e,t)=>{let n={};for(let[r,i]of h)n[r]=r===e?{...i,...t}:i;C(n)},T=e=>{let t={};for(let[n,r]of h)n!==e&&(t[n]=r);C(t)},E=(e,t)=>{if(t===e)return;if(m[t]){S(G(`engine.form.keyExists`,l,{key:t}));return}if(f&&!f.test(t)){S(G(`engine.form.keyPattern`,l,{pattern:String(f)}));return}let n={};for(let[r,i]of h)r===e?n[t]={...i,[u]:t}:n[r]=i;S(null),C(n)},ee=()=>{let e=y.trim();if(!e){S(W(`engine.form.keyRequired`,l));return}if(m[e]){S(G(`engine.form.keyExists`,l,{key:e}));return}if(f&&!f.test(e)){S(G(`engine.form.keyPattern`,l,{pattern:String(f)}));return}let t={[u]:e};g.forEach(e=>{t[e.field]=void 0}),C({...m,[e]:t}),b(``),S(null),v(e)},[D,O]=B.useState(null),[k,A]=B.useState(null),te=(e,t)=>{if(e===t)return;let n=h.map(([e])=>e),r=n.indexOf(e),i=n.indexOf(t);if(r<0||i<0)return;n.splice(r,1),n.splice(i,0,e);let a={};for(let e of n)a[e]=m[e];C(a)};return(0,z.jsxs)(`div`,{className:`space-y-2`,children:[h.length===0&&(0,z.jsx)(`div`,{className:`rounded-md border border-dashed border-border/50 px-3 py-4 text-center text-xs text-muted-foreground`,children:W(`engine.list.empty`,l)}),h.map(([e,t])=>{let a=_===e,s=g.map(e=>t?.[e.field]).find(e=>e!=null&&e!==``);return(0,z.jsxs)(`div`,{className:`rounded-md border bg-muted/10 ${k===e&&D&&D!==e?`border-primary border-2`:`border-border/50`}`,onDragOver:t=>{!D||r||(t.preventDefault(),k!==e&&A(e))},onDragLeave:()=>{k===e&&A(null)},onDrop:t=>{!D||r||(t.preventDefault(),te(D,e),O(null),A(null))},children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between gap-2 px-2 py-1.5 border-b border-border/30`,children:[!r&&(0,z.jsx)(`span`,{draggable:!0,onDragStart:t=>{O(e),t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(`text/plain`,e)},onDragEnd:()=>{O(null),A(null)},className:`cursor-grab active:cursor-grabbing text-muted-foreground hover:text-foreground`,"aria-label":W(`engine.form.dragToReorder`,l),title:W(`engine.form.dragToReorder`,l),children:(0,z.jsx)(Ae,{className:`h-3.5 w-3.5`})}),(0,z.jsxs)(`button`,{type:`button`,onClick:()=>v(a?null:e),className:`flex items-center gap-1.5 text-sm font-medium text-left flex-1 min-w-0`,children:[a?(0,z.jsx)(j,{className:`h-3.5 w-3.5`}):(0,z.jsx)(tt,{className:`h-3.5 w-3.5`}),(0,z.jsx)(`span`,{className:`font-mono text-xs px-1.5 py-0.5 rounded bg-muted/60`,children:e}),s!=null&&(0,z.jsxs)(`span`,{className:`truncate text-muted-foreground`,children:[`— `,String(s)]})]}),!r&&(0,z.jsx)(R,{type:`button`,variant:`ghost`,size:`sm`,onClick:()=>T(e),className:`h-7 w-7 p-0`,"aria-label":W(`engine.form.remove`,l),children:(0,z.jsx)(F,{className:`h-3.5 w-3.5`})})]}),a&&(0,z.jsxs)(`div`,{className:`p-3 space-y-3`,children:[(0,z.jsx)(Y,{name:u,schema:{type:`string`},value:e,required:!0,readOnly:r||p,fieldSpec:{field:u,type:`text`,label:d,helpText:o?.helpText},widgetContext:i,formData:t,onChange:t=>E(e,String(t??``).trim())}),g.map(a=>{if(a.visibleOn&&!zt(a.visibleOn,{data:t}))return null;let o=or(n,`record`,a.field);return(0,z.jsx)(Y,{name:a.field,schema:o,value:t?.[a.field],required:!!a.required,readOnly:r||a.readonly,fieldSpec:a,widgetContext:i,formData:t,onChange:t=>w(e,{[a.field]:t})},a.field)})]})]},e)}),!r&&(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(L,{value:y,onChange:e=>{b(e.target.value),x&&S(null)},placeholder:o?.placeholder??d,className:`h-8 text-xs font-mono max-w-[220px]`,onKeyDown:e=>{e.key===`Enter`&&(e.preventDefault(),ee())}}),(0,z.jsxs)(R,{type:`button`,variant:`outline`,size:`sm`,onClick:ee,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5 mr-1`}),` `,W(`engine.form.add`,l)]}),x&&(0,z.jsx)(`span`,{className:`text-xs text-destructive`,children:x})]})]})}function dr({value:e,onChange:t,readOnly:n,small:r}){let i=K(),[a,o]=B.useState(()=>pr(e)),[s,c]=B.useState(null);return B.useEffect(()=>{o(pr(e)),c(null)},[JSON.stringify(e)]),(0,z.jsxs)(`div`,{className:`space-y-1`,children:[(0,z.jsx)(Be,{rows:r?4:12,className:`font-mono text-xs`,value:a,readOnly:n,onChange:e=>{let n=e.target.value;if(o(n),!n.trim()){c(null),t(void 0);return}try{let e=JSON.parse(n);c(null),t(e)}catch(e){c(e?.message??W(`engine.form.invalidJson`,i))}}}),s&&(0,z.jsx)(`div`,{className:`text-xs text-destructive`,children:s})]})}function fr(e){let t={};for(let[n,r]of Object.entries(e))if(!n.startsWith(`_`))if(r==null)t[n]={type:`string`};else if(typeof r==`string`)t[n]=r.length>80||r.includes(`
11
11
  `)?{type:`string`,format:`multiline`}:{type:`string`};else if(typeof r==`number`)t[n]={type:Number.isInteger(r)?`integer`:`number`};else if(typeof r==`boolean`)t[n]={type:`boolean`};else if(Array.isArray(r))if(r.length>0&&typeof r[0]==`string`)t[n]={type:`array`,items:{type:`string`}};else if(r.length>0&&typeof r[0]==`object`&&r[0]!==null){let e=r[0],i={};for(let t of Object.keys(e))i[t]={type:`string`};t[n]={type:`array`,items:{type:`object`,properties:i}}}else t[n]={type:`array`,items:{type:`string`}};else typeof r==`object`?t[n]={type:`object`,additionalProperties:!0}:t[n]={type:`string`};return{type:`object`,properties:t,additionalProperties:!0}}function pr(e){if(e===void 0)return``;try{return JSON.stringify(e,null,2)}catch{return String(e)}}function X(e){return e.replace(/[_-]+/g,` `).replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/\b\w/g,e=>e.toUpperCase())}function mr(e,t){if(!t.length)return e;let n=new Set(e),r=t.filter(e=>n.has(e)),i=e.filter(e=>!t.includes(e));return[...r,...i]}function Z(e){let t=e?.properties??{};return Object.keys(t)}var Q=(e,t,n,r,i)=>({id:e,label:t,labelZh:n,category:r,Icon:i}),$={text:Q(`text`,`Text`,`单行文本`,`text`,se),textarea:Q(`textarea`,`Text Area`,`多行文本`,`text`,O),email:Q(`email`,`Email`,`邮箱`,`text`,Oe),url:Q(`url`,`URL`,`网址`,`text`,_e),phone:Q(`phone`,`Phone`,`电话`,`text`,Ee),password:Q(`password`,`Password`,`密码`,`text`,A),markdown:Q(`markdown`,`Markdown`,`Markdown`,`text`,ee),html:Q(`html`,`HTML`,`HTML`,`text`,Ye),richtext:Q(`richtext`,`Rich Text`,`富文本`,`text`,ke),number:Q(`number`,`Number`,`数字`,`number`,De),currency:Q(`currency`,`Currency`,`货币`,`number`,s),percent:Q(`percent`,`Percent`,`百分比`,`number`,Ke),date:Q(`date`,`Date`,`日期`,`date`,k),datetime:Q(`datetime`,`Date/Time`,`日期时间`,`date`,k),time:Q(`time`,`Time`,`时间`,`date`,je),boolean:Q(`boolean`,`Checkbox`,`复选框`,`logic`,Re),toggle:Q(`toggle`,`Toggle`,`开关`,`logic`,fe),select:Q(`select`,`Picklist`,`下拉选择`,`selection`,g),multiselect:Q(`multiselect`,`Multi-Select`,`多选`,`selection`,f),radio:Q(`radio`,`Radio`,`单选`,`selection`,Pe),checkboxes:Q(`checkboxes`,`Checkboxes`,`复选组`,`selection`,f),lookup:Q(`lookup`,`Lookup`,`查找关系`,`relation`,y),master_detail:Q(`master_detail`,`Master-Detail`,`主从关系`,`relation`,l),tree:Q(`tree`,`Tree`,`树形关系`,`relation`,Ze),image:Q(`image`,`Image`,`图片`,`media`,We),file:Q(`file`,`File`,`文件`,`media`,Me),avatar:Q(`avatar`,`Avatar`,`头像`,`media`,ne),video:Q(`video`,`Video`,`视频`,`media`,D),audio:Q(`audio`,`Audio`,`音频`,`media`,Qe),formula:Q(`formula`,`Formula`,`公式`,`calculated`,c),summary:Q(`summary`,`Rollup`,`汇总`,`calculated`,$e),autonumber:Q(`autonumber`,`Auto Number`,`自动编号`,`calculated`,De),composite:Q(`composite`,`Composite`,`复合字段`,`advanced`,ye),repeater:Q(`repeater`,`Repeater`,`重复字段`,`advanced`,et),location:Q(`location`,`Location`,`地理坐标`,`advanced`,E),address:Q(`address`,`Address`,`地址`,`advanced`,S),code:Q(`code`,`Code`,`代码`,`advanced`,Ye),json:Q(`json`,`JSON`,`JSON`,`advanced`,oe),color:Q(`color`,`Color`,`颜色`,`advanced`,Ie),rating:Q(`rating`,`Rating`,`评分`,`advanced`,Ce),slider:Q(`slider`,`Slider`,`滑块`,`advanced`,ge),signature:Q(`signature`,`Signature`,`签名`,`advanced`,He),qrcode:Q(`qrcode`,`QR Code`,`二维码`,`advanced`,p),progress:Q(`progress`,`Progress`,`进度条`,`advanced`,ue),tags:Q(`tags`,`Tags`,`标签`,`advanced`,qe),vector:Q(`vector`,`Vector`,`向量`,`advanced`,Le)},hr=[`text`,`number`,`date`,`logic`,`selection`,`relation`,`media`,`calculated`,`advanced`],gr={text:`Text`,number:`Number`,date:`Date & Time`,logic:`Logic`,selection:`Selection`,relation:`Relation`,media:`Media`,calculated:`Calculated`,advanced:`Advanced`},_r={text:{icon:`text-slate-500 dark:text-slate-400`,badge:`border-slate-200 bg-slate-50 text-slate-600 dark:border-slate-700/50 dark:bg-slate-800/40 dark:text-slate-300`},number:{icon:`text-blue-600 dark:text-blue-400`,badge:`border-blue-200 bg-blue-50 text-blue-700 dark:border-blue-800/50 dark:bg-blue-950/40 dark:text-blue-300`},date:{icon:`text-violet-600 dark:text-violet-400`,badge:`border-violet-200 bg-violet-50 text-violet-700 dark:border-violet-800/50 dark:bg-violet-950/40 dark:text-violet-300`},logic:{icon:`text-amber-600 dark:text-amber-400`,badge:`border-amber-200 bg-amber-50 text-amber-700 dark:border-amber-800/50 dark:bg-amber-950/40 dark:text-amber-300`},selection:{icon:`text-teal-600 dark:text-teal-400`,badge:`border-teal-200 bg-teal-50 text-teal-700 dark:border-teal-800/50 dark:bg-teal-950/40 dark:text-teal-300`},relation:{icon:`text-indigo-600 dark:text-indigo-400`,badge:`border-indigo-200 bg-indigo-50 text-indigo-700 dark:border-indigo-800/50 dark:bg-indigo-950/40 dark:text-indigo-300`},media:{icon:`text-pink-600 dark:text-pink-400`,badge:`border-pink-200 bg-pink-50 text-pink-700 dark:border-pink-800/50 dark:bg-pink-950/40 dark:text-pink-300`},calculated:{icon:`text-emerald-600 dark:text-emerald-400`,badge:`border-emerald-200 bg-emerald-50 text-emerald-700 dark:border-emerald-800/50 dark:bg-emerald-950/40 dark:text-emerald-300`},advanced:{icon:`text-zinc-500 dark:text-zinc-400`,badge:`border-zinc-200 bg-zinc-50 text-zinc-600 dark:border-zinc-700/50 dark:bg-zinc-800/40 dark:text-zinc-300`}};function vr(e){return _r[xr(e).category]}var yr={text:`文本`,number:`数值`,date:`日期/时间`,logic:`逻辑`,selection:`选择`,relation:`关系`,media:`媒体`,calculated:`计算`,advanced:`高级`},br=hr.map(e=>({category:e,types:Object.keys($).filter(t=>$[t].category===e)}));function xr(e){return typeof e==`string`&&e in $?$[e]:{id:`text`,label:typeof e==`string`?e:`unknown`,labelZh:typeof e==`string`?e:`未知`,category:`advanced`,Icon:se}}var Sr=`text/x-objectui-viewcol`;function Cr({type:e}){let t=xr(e),n=vr(e),r=t.Icon;return(0,z.jsx)(r,{className:`h-3.5 w-3.5 shrink-0 ${n.icon}`})}function wr({index:e,label:t,fieldName:n,fieldType:r,selected:i,canEdit:a,dragging:o,dropBefore:s,onSelect:c,onRemove:l,onDragStart:u,onDragEnd:d,onDragOverRow:f,onDropRow:p}){return(0,z.jsxs)(`div`,{className:`relative`,children:[s&&(0,z.jsx)(`span`,{className:`pointer-events-none absolute -top-0.5 left-0 right-0 h-0.5 rounded bg-primary`}),(0,z.jsxs)(`div`,{role:`button`,tabIndex:0,draggable:a,"aria-pressed":i,onDragStart:t=>{a&&(t.dataTransfer.effectAllowed=`move`,t.dataTransfer.setData(Sr,String(e)),u())},onDragEnd:d,onDragOver:e=>{!a||!o||e.dataTransfer.types.includes(Sr)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`,f())},onDrop:e=>{a&&e.dataTransfer.types.includes(Sr)&&(e.preventDefault(),e.stopPropagation(),p())},onClick:c,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),c())},className:`group flex items-center gap-2 rounded-md border bg-card px-2 py-1.5 text-xs transition-colors hover:border-primary/40 `+(i?`border-primary ring-1 ring-primary `:`border-border `)+(a?`cursor-grab active:cursor-grabbing`:``),children:[a&&(0,z.jsx)(Ae,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground/40 group-hover:text-muted-foreground`}),(0,z.jsx)(Cr,{type:r}),(0,z.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-medium`,children:t}),n&&n!==t&&(0,z.jsx)(`code`,{className:`max-w-[7rem] shrink-0 truncate text-[10px] text-muted-foreground`,children:n}),a&&(0,z.jsx)(`span`,{role:`button`,tabIndex:0,"aria-label":`Remove ${t}`,onClick:e=>{e.stopPropagation(),l()},onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),e.stopPropagation(),l())},className:`inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground/60 hover:bg-destructive/10 hover:text-destructive`,children:(0,z.jsx)(T,{className:`h-3 w-3`})})]})]})}function Tr({fields:e,usedNames:t,loading:n,error:r,onAdd:i}){let a=B.useMemo(()=>K(),[]),[o,s]=B.useState(!1),[c,l]=B.useState(``),u=B.useMemo(()=>{let t=c.trim().toLowerCase();return t?e.filter(e=>e.name.toLowerCase().includes(t)||e.label.toLowerCase().includes(t)):e},[e,c]);return(0,z.jsxs)(Ne,{open:o,onOpenChange:s,children:[(0,z.jsx)(ze,{asChild:!0,children:(0,z.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1 rounded-md border border-dashed px-2 py-1 text-xs text-muted-foreground hover:border-primary/40 hover:bg-accent/40 hover:text-foreground`,children:[(0,z.jsx)(M,{className:`h-3.5 w-3.5`}),` `,W(`engine.form.addFieldPlain`,a)]})}),(0,z.jsxs)(be,{align:`start`,className:`w-72 p-0`,children:[(0,z.jsxs)(`div`,{className:`relative border-b p-2`,children:[(0,z.jsx)(w,{className:`pointer-events-none absolute left-4 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground`}),(0,z.jsx)(`input`,{autoFocus:!0,value:c,onChange:e=>l(e.target.value),placeholder:W(`engine.form.searchFields`,a),className:`h-8 w-full rounded border border-input bg-background pl-7 pr-2 text-xs outline-none focus:border-primary`})]}),(0,z.jsx)(`div`,{className:`max-h-72 overflow-auto p-1`,children:n?(0,z.jsx)(Er,{children:W(`engine.form.loadingFields`,a)}):r?(0,z.jsx)(Er,{tone:`warn`,children:G(`engine.form.noObjectFields`,a,{error:r})}):u.length===0?(0,z.jsx)(Er,{children:W(c?`engine.form.noMatchingFields`:`engine.form.noFieldsOnObject`,a)}):u.map(e=>{let n=t.has(e.name);return(0,z.jsxs)(`button`,{type:`button`,onClick:()=>i(e),className:`flex w-full items-center gap-2 rounded px-2 py-1.5 text-left text-xs hover:bg-accent`,children:[(0,z.jsx)(Cr,{type:e.type}),(0,z.jsx)(`span`,{className:`min-w-0 flex-1 truncate font-medium`,children:e.label}),e.name!==e.label&&(0,z.jsx)(`code`,{className:`max-w-[6rem] truncate text-[10px] text-muted-foreground`,children:e.name}),n&&(0,z.jsx)(xe,{variant:`secondary`,className:`px-1 py-0 text-[9px]`,children:W(`engine.form.added`,a)})]},e.name)})})]})]})}function Er({children:e,tone:t}){return(0,z.jsx)(`div`,{className:`px-2 py-4 text-center text-[11px] `+(t===`warn`?`text-amber-600 dark:text-amber-300`:`text-muted-foreground`),children:e})}function Dr(e){let t=new Set;for(let n of e?.sections??[])for(let e of n.fields??[])t.add(typeof e==`string`?e:e?.field);return t}function Or({bundledSchema:e,bundledForm:t,serverSchema:n,excludeFields:r,sectionTitle:i}){if(!e)return{schema:e,form:t};let a=n?.properties;if(!a||typeof a!=`object`)return{schema:e,form:t};let o=e.properties??{},s=Dr(t),c=Object.keys(a).filter(e=>!(e in o)&&!r.has(e)&&!s.has(e));if(c.length===0)return{schema:e,form:t};let l={...e,properties:{...o}};for(let e of c)e in l.properties||(l.properties[e]=a[e]);let u=t;if(t&&typeof t==`object`){let e=JSON.parse(JSON.stringify(t));e.sections=[...e.sections??[],{label:i,fields:c.map(e=>({field:e}))}],u=e}return{schema:l,form:u}}function kr(e,t){if(typeof e==`string`&&e)return e;if(e&&typeof e==`object`){let t=e.default;if(typeof t==`string`&&t)return t}return t}function Ar(e){let t=typeof e.name==`string`?e.name:``;if(!t)return null;let n=Array.isArray(e.dimensions)?e.dimensions.filter(e=>e&&typeof e.name==`string`&&e.name).map(e=>({name:e.name,type:typeof e.type==`string`?e.type:void 0})):[],r=Array.isArray(e.measures)?e.measures.filter(e=>e&&typeof e.name==`string`&&e.name).map(e=>({name:e.name,aggregate:typeof e.aggregate==`string`?e.aggregate:void 0,certified:e.certified===!0})):[];return{name:t,label:kr(e.label,t),dimensions:n,measures:r}}function jr(e){let t=it(),[n,r]=B.useState({datasets:e??[],loading:!e,error:null});return B.useEffect(()=>{if(e){r({datasets:e,loading:!1,error:null});return}let n=!1;return r(e=>({...e,loading:!0,error:null})),t.list(`dataset`).then(e=>{n||r({datasets:(Array.isArray(e)?e:[]).map(Ar).filter(e=>e!==null),loading:!1,error:null})}).catch(e=>{n||r({datasets:[],loading:!1,error:e?.message??String(e)})}),()=>{n=!0}},[t,e]),n}function Mr(e,t){let n=it(),r=e?t.datasets.find(t=>t.name===e):void 0,i=!!e&&!t.loading&&(!r||r.dimensions.length===0&&r.measures.length===0),[a,o]=B.useState(null);B.useEffect(()=>{if(!i||!e||a?.name===e)return;let t=!1;return n.get(`dataset`,e).then(n=>{t||o({name:e,entry:n?Ar(n):null,error:n?null:`Dataset not found`})}).catch(n=>{t||o({name:e,entry:null,error:n?.message??String(n)})}),()=>{t=!0}},[n,e,i,a]);let s=i&&a?.name===e?a.entry:r;return{dimensions:s?.dimensions??[],measures:s?.measures??[],loading:t.loading||i&&a?.name!==e,error:(i&&a?.name===e?a.error:null)??t.error}}var Nr={io:`input`,unrepresentable:`any`},Pr=new Set([`dataset`,`values`,`rows`,`columns`,`name`]),Fr,Ir=!1;function Lr(){if(Fr||Ir)return Fr;try{Fr=i(a,Nr)}catch(e){Ir=!0,typeof console<`u`&&console.warn(`[report-schema] failed to derive Report JSONSchema from spec`,e)}return Fr}var Rr;function zr(){if(Rr)return Rr;if(!(!o||typeof o!=`object`)){try{let e=JSON.parse(JSON.stringify(o)),t=Lr()?.properties;for(let n of e.sections??[])n.fields=(n.fields??[]).filter(e=>{let n=typeof e==`string`?e:e?.field;return!(Pr.has(n)||t&&!(n in t))});if(t&&`runtimeFilter`in t){let t=new Set;for(let n of e.sections??[])for(let e of n.fields??[])t.add(typeof e==`string`?e:e?.field);t.has(`runtimeFilter`)||(e.sections=[...e.sections??[],{label:`Filter`,description:`Render-time scope filter, ANDed at query time.`,collapsible:!0,collapsed:!0,fields:[{field:`runtimeFilter`,widget:`json`}]}])}e.sections=(e.sections??[]).filter(e=>(e.fields??[]).length>0),Rr=e}catch(e){typeof console<`u`&&console.warn(`[report-schema] failed to prepare reportForm from spec`,e);return}return Rr}}var Br=new Set([`type`,`label`,`name`,`dataset`,`values`,`rows`,`columns`,`chart`]),Vr=[`bar`,`column`,`line`,`area`,`pie`,`donut`],Hr={tabular:`engine.inspector.report.type.tabular`,summary:`engine.inspector.report.type.summary`,matrix:`engine.inspector.report.type.matrix`,joined:`engine.inspector.report.type.joined`};function Ur(e,t){return B.useMemo(()=>{let n=Lr()?.properties?.type?.enum,r=(Array.isArray(n)&&n.length?n.filter(e=>typeof e==`string`):[`tabular`,`summary`,`matrix`,`joined`]).map(e=>{let n=Hr[e],r=n?W(n,t):e;return{value:e,label:r===n?e:r}});return!r.some(t=>t.value===e)&&e&&r.push({value:e,label:e}),r},[e,t])}function Wr(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function Gr({label:e,emptyText:t,names:n,options:r,loading:i,error:a,readOnly:o,onCommit:s}){let[c,l]=B.useState(null),[u,d]=B.useState(null),f=B.useMemo(()=>new Set(n),[n]),p=B.useMemo(()=>{let e=new Map;for(let t of r)e.set(t.name,t.type);return e},[r]);return(0,z.jsxs)(`div`,{className:`border-t pt-3 space-y-1.5`,children:[(0,z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:e}),(0,z.jsx)(xe,{variant:`outline`,className:`text-[10px]`,children:n.length})]}),n.length===0?(0,z.jsx)(`p`,{className:`rounded-md border border-dashed bg-muted/30 px-3 py-3 text-center text-[11px] text-muted-foreground`,children:t}):(0,z.jsx)(`div`,{className:`space-y-1`,children:n.map((e,t)=>(0,z.jsx)(wr,{index:t,label:e,fieldName:e,fieldType:p.get(e)??`number`,selected:!1,canEdit:!o,dragging:c!==null,dropBefore:u===t&&c!==null&&c!==t,onSelect:()=>{},onRemove:()=>s(gt(n,t,null)),onDragStart:()=>l(t),onDragEnd:()=>{l(null),d(null)},onDragOverRow:()=>d(t),onDropRow:()=>{c!=null&&c!==t&&s(vt(n,c,t)),l(null),d(null)}},`${e}-${t}`))}),!o&&(0,z.jsx)(Tr,{fields:r,usedNames:f,loading:i,error:a,onAdd:e=>s(_t(n,e.name))})]})}function Kr({name:e,draft:t,onPatch:n,readOnly:r,locale:i,datasetCatalogOverride:a,serverSchema:o}){let s=B.useCallback(e=>W(e,i),[i]),c=!e,l=B.useRef(!1),u=typeof t.name==`string`?t.name:``,d=typeof t.type==`string`?t.type:`tabular`,f=Ur(d,i),p=typeof t.label==`string`?t.label:``,m=typeof t.dataset==`string`?t.dataset:``,h=B.useMemo(()=>Wr(t.values),[t.values]),g=B.useMemo(()=>Wr(t.rows),[t.rows]),_=B.useMemo(()=>Wr(t.columns),[t.columns]),v=jr(a),y=Mr(m||void 0,v),b=B.useMemo(()=>{let e=v.datasets.map(e=>({value:e.name,label:e.label&&e.label!==e.name?`${e.label} (${e.name})`:e.name}));return m&&!e.some(e=>e.value===m)&&e.push({value:m,label:m}),e},[v.datasets,m]),x=B.useMemo(()=>y.measures.map(e=>({name:e.name,label:e.aggregate?`${e.name} · ${e.aggregate}`:e.name,type:`number`,hidden:!1})),[y.measures]),S=B.useMemo(()=>y.dimensions.map(e=>({name:e.name,label:e.name,type:e.type??`text`,hidden:!1})),[y.dimensions]),C=t.chart&&typeof t.chart==`object`?t.chart:{},w=typeof C.type==`string`?C.type:``,T=typeof C.xAxis==`string`?C.xAxis:``,E=typeof C.yAxis==`string`?C.yAxis:``,ee=typeof C.title==`string`?C.title:``,D=e=>{let t={...C,...e};n({chart:t.type?t:void 0})},O=B.useMemo(()=>{let e=S.map(e=>({value:e.name,label:e.label||e.name}));return T&&!e.some(e=>e.value===T)&&e.push({value:T,label:T}),e},[S,T]),k=B.useMemo(()=>{let e=x.map(e=>({value:e.name,label:e.label||e.name}));return E&&!e.some(e=>e.value===E)&&e.push({value:E,label:E}),e},[x,E]),A=d!==`joined`,{schema:te,form:ne}=B.useMemo(()=>Or({bundledSchema:Lr(),bundledForm:zr(),serverSchema:o,excludeFields:Br,sectionTitle:W(`engine.inspector.moreFields`,i)}),[o,i]);return(0,z.jsxs)(lt,{kindLabel:s(`engine.inspector.report.kind`),title:String(p||t.name||s(`engine.inspector.report.kind`)),onClose:()=>{},closeLabel:s(`engine.inspector.report.close`),hideClose:!0,children:[c&&(0,z.jsx)(V,{label:s(`engine.inspector.report.name`),value:u,onCommit:e=>{l.current=!0,n({name:Tt(e)})},placeholder:s(`engine.inspector.report.namePlaceholder`),disabled:r,mono:!0}),(0,z.jsx)(V,{label:s(`engine.inspector.report.label`),value:p,onCommit:e=>{let t={label:e};c&&!l.current&&(t.name=Tt(e)),n(t)},placeholder:s(`engine.inspector.report.labelPlaceholder`),disabled:r}),(0,z.jsx)(H,{label:s(`engine.inspector.report.type`),value:d,options:f,onCommit:e=>n({type:e}),disabled:r}),A&&(0,z.jsxs)(z.Fragment,{children:[v.datasets.length>0||m?(0,z.jsx)(H,{label:s(`engine.inspector.report.dataset`),value:m,options:b,onCommit:e=>n({dataset:e}),disabled:r}):(0,z.jsx)(V,{label:s(`engine.inspector.report.dataset`),value:m,onCommit:e=>n({dataset:e}),placeholder:s(`engine.inspector.report.datasetPlaceholder`),disabled:r,mono:!0}),(0,z.jsx)(Gr,{label:s(`engine.inspector.report.values`),emptyText:s(`engine.inspector.report.valuesEmpty`),names:h,options:x,loading:y.loading,error:y.error,readOnly:r,onCommit:e=>n({values:e})}),(0,z.jsx)(Gr,{label:s(`engine.inspector.report.rows`),emptyText:s(`engine.inspector.report.rowsEmpty`),names:g,options:S,loading:y.loading,error:y.error,readOnly:r,onCommit:e=>n({rows:e})}),d===`matrix`&&(0,z.jsx)(Gr,{label:s(`engine.inspector.report.columnsAcross`),emptyText:s(`engine.inspector.report.columnsAcrossEmpty`),names:_,options:S,loading:y.loading,error:y.error,readOnly:r,onCommit:e=>n({columns:e})}),(0,z.jsxs)(`div`,{className:`border-t pt-3 space-y-2`,children:[(0,z.jsx)(P,{className:`text-xs text-muted-foreground`,children:s(`engine.inspector.report.chart`)}),(0,z.jsx)(H,{label:s(`engine.inspector.report.chartType`),value:w,options:[{value:``,label:s(`engine.inspector.report.chartNone`)},...Vr.map(e=>({value:e,label:e}))],onCommit:e=>D({type:e||void 0}),disabled:r}),w?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(V,{label:s(`engine.inspector.report.chartTitle`),value:ee,onCommit:e=>D({title:e||void 0}),disabled:r}),(0,z.jsx)(H,{label:s(`engine.inspector.report.chartX`),value:T,options:O,onCommit:e=>D({xAxis:e}),disabled:r}),(0,z.jsx)(H,{label:s(`engine.inspector.report.chartY`),value:E,options:k,onCommit:e=>D({yAxis:e}),disabled:r})]}):null]})]}),(0,z.jsx)(`div`,{className:`border-t pt-3`,children:te?(0,z.jsx)(rr,{schema:te,form:ne,value:t,hiddenFields:[`type`,`label`,`name`,`dataset`,`values`,`rows`,`columns`,`chart`],readOnly:r,onChange:e=>n(e)}):(0,z.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:s(`engine.inspector.report.noSchema`)})})]})}export{ot as $,Ct as A,dt as B,Qt as C,Ft as D,Rt as E,Tt as F,V as G,ut as H,Et as I,gt as J,_t as K,xt as L,Dt as M,jt as N,St as O,At as P,it as Q,pt as R,Xt as S,Nt as T,H as U,mt as V,lt as W,st as X,yt as Y,ct as Z,nn as _,Or as a,G as b,gr as c,$ as d,br as f,rn as g,pn as h,Mr as i,bt as j,Mt as k,yr as l,kn as m,Kr as n,Tr as o,rr as p,vt as q,jr as r,wr as s,Gr as t,_r as u,K as v,kt as w,Zt as x,W as y,ht as z};