@objectstack/console 13.0.0 → 14.3.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 (96) hide show
  1. package/dist/.objectui-sha +1 -1
  2. package/dist/assets/{AdapterProvider-G7o889LL.js → AdapterProvider-BdI1AL8R.js} +1 -1
  3. package/dist/assets/{AiPendingActionsPage-B_bQ89Ap.js → AiPendingActionsPage-C9rOGWO9.js} +1 -1
  4. package/dist/assets/{ApiConsolePage-oJexbnMd.js → ApiConsolePage-CTk6_qVK.js} +1 -1
  5. package/dist/assets/{AppDocsIndex-B2EMS--S.js → AppDocsIndex-BL_J__HY.js} +1 -1
  6. package/dist/assets/{AppManagementPage-BSLRnX7p.js → AppManagementPage-Co5xg-gQ.js} +1 -1
  7. package/dist/assets/ApprovalsInboxPage-DkfJVIDO.js +1 -0
  8. package/dist/assets/{AuditLogPage-JHBVKm-o.js → AuditLogPage-Ctj0habt.js} +1 -1
  9. package/dist/assets/{ComponentNavView-Be3JMpLK.js → ComponentNavView-2bXBqHvo.js} +1 -1
  10. package/dist/assets/{ConsoleFloatingChatbot-MtFbTLoq.js → ConsoleFloatingChatbot-C_zzIjTL.js} +1 -1
  11. package/dist/assets/{CreateViewDialog-CboUdp-q.js → CreateViewDialog-BQ1-ZWYN.js} +1 -1
  12. package/dist/assets/{DashboardView-1nXwC0y_.js → DashboardView-Cns3m8MX.js} +1 -1
  13. package/dist/assets/{DeveloperHubPage-B55QdK7b.js → DeveloperHubPage-xHzPIDex.js} +1 -1
  14. package/dist/assets/{ExpressionProvider-B3pkCzAo.js → ExpressionProvider-BdMK_o7f.js} +1 -1
  15. package/dist/assets/{FlowRunsPage-CKOKC3O1.js → FlowRunsPage-v43ayfID.js} +1 -1
  16. package/dist/assets/{IntegrationsPage-gLs4Ms2t.js → IntegrationsPage-B8IBLh_r.js} +2 -2
  17. package/dist/assets/{InterfaceListPage-CwGb2Th3.js → InterfaceListPage-DAkJEFCf.js} +1 -1
  18. package/dist/assets/{ManagedByBadge-BtJfBjbT.js → ManagedByBadge-C8RoPUEX.js} +1 -1
  19. package/dist/assets/{MarketplaceAccessDenied-Bl4faFLm.js → MarketplaceAccessDenied-D3JunScQ.js} +1 -1
  20. package/dist/assets/{MarketplaceInstalledPage-BQH-qEi5.js → MarketplaceInstalledPage-IjVxon4M.js} +1 -1
  21. package/dist/assets/MarketplacePackagePage-BivOR4dD.js +4 -0
  22. package/dist/assets/{MarketplacePage-C_HnQQYH.js → MarketplacePage-aoYsZs4L.js} +1 -1
  23. package/dist/assets/{MetadataInspector-DwPx9ueN.js → MetadataInspector-BD4Mhmpt.js} +1 -1
  24. package/dist/assets/{MetadataProvider-seOmvY8N.js → MetadataProvider-C9mhBo6s.js} +1 -1
  25. package/dist/assets/ObjectDataPage-C1AX0mJW.js +1 -0
  26. package/dist/assets/{PageView-cehnKJ9R.js → PageView-CAAHjJzX.js} +1 -1
  27. package/dist/assets/{ProfilePage-CPk5ilAm.js → ProfilePage-tQyqenRR.js} +1 -1
  28. package/dist/assets/PublicFormsPage-CkKQzpw_.js +1 -0
  29. package/dist/assets/RecordDetailView-DcyCqWcp.js +9 -0
  30. package/dist/assets/{RecordFormPage-Dmw4MMhg.js → RecordFormPage-DPml60ze.js} +1 -1
  31. package/dist/assets/ReportDefaultInspector-De2iFQ0s.js +11 -0
  32. package/dist/assets/ReportView-BF5_XOtk.js +2 -0
  33. package/dist/assets/{SearchResultsPage-quEMr1ZW.js → SearchResultsPage-CiSIs_M4.js} +1 -1
  34. package/dist/assets/{SettingsHub-B5Y0DjDk.js → SettingsHub-PlVT_0zU.js} +1 -1
  35. package/dist/assets/{SettingsView-Q3e7GG0S.js → SettingsView-PA2_5adN.js} +1 -1
  36. package/dist/assets/SystemHubPage-DN6WDMNI.js +1 -0
  37. package/dist/assets/{conversationLanguage-CgUPnufx.js → conversationLanguage-b5go1PfT.js} +1 -1
  38. package/dist/assets/{data-adapter-BP-pyfs8.js → data-adapter-CbYJeapt.js} +1 -1
  39. package/dist/assets/{framework-CBCX6Urh.js → framework-Itfj9AWQ.js} +13 -13
  40. package/dist/assets/{getIcon-Ci4w4xXM.js → getIcon-DjDksPei.js} +1 -1
  41. package/dist/assets/{highlighted-body-OFNGDK62-B5Pqh6xJ.js → highlighted-body-OFNGDK62-DyDg64aM.js} +1 -1
  42. package/dist/assets/index-C31fE0Ro.js +2 -0
  43. package/dist/assets/index-N4ZfDXur.css +2 -0
  44. package/dist/assets/mermaid-GHXKKRXX-Bdn3wVYM.js +1 -0
  45. package/dist/assets/metadata-admin-Chw3a2T4.js +23 -0
  46. package/dist/assets/plugin-calendar-C7XgGNhj.js +1 -0
  47. package/dist/assets/{plugin-charts-DyKYgW3L.js → plugin-charts-DZcrIrvB.js} +2 -2
  48. package/dist/assets/plugin-chatbot-D0Od_WLT.js +120 -0
  49. package/dist/assets/plugin-dashboard-CGXhP3SP.js +6 -0
  50. package/dist/assets/plugin-form-BxGl_G-P.js +1 -0
  51. package/dist/assets/plugin-gantt-DIXK_GFE.js +93 -0
  52. package/dist/assets/plugin-grid-BusTOlSB.js +8 -0
  53. package/dist/assets/plugin-kanban-BORORRbu.js +1 -0
  54. package/dist/assets/{plugin-map-Co_pYpOZ.js → plugin-map-DhKLo0DD.js} +1 -1
  55. package/dist/assets/{plugin-markdown-CS5R-t3i.js → plugin-markdown-ByE3Dezt.js} +1 -1
  56. package/dist/assets/{plugin-report-_y8nt0FZ.js → plugin-report-CJmiocGk.js} +4 -4
  57. package/dist/assets/plugin-timeline-B5L8EK0C.js +1 -0
  58. package/dist/assets/{plugin-tree-DCAEE54g.js → plugin-tree-D7mdTkuW.js} +1 -1
  59. package/dist/assets/plugin-view-CMNOvn0A.js +1 -0
  60. package/dist/assets/plugins-views-BmubW-ty.js +4 -0
  61. package/dist/assets/{skeletons-BjaBYe9k.js → skeletons-Ch9F6pA8.js} +1 -1
  62. package/dist/assets/src-DrSomF2I.js +16 -0
  63. package/dist/assets/{src-D6ENIa3w.js → src-w44Q32YY.js} +1 -1
  64. package/dist/assets/{types-DXCQOIiO.js → types-GmZjwWOe.js} +1 -1
  65. package/dist/assets/ui-components-DTwfkSDm.js +42 -0
  66. package/dist/assets/{ui-layout-vWAZODrs.js → ui-layout-BHkbFI8f.js} +1 -1
  67. package/dist/assets/{useMetadata-D-bLZoNN.js → useMetadata-DSuQLgo1.js} +1 -1
  68. package/dist/assets/{useRecordApprovals-jo_LH43z.js → useRecordApprovals-Bo4WTft1.js} +1 -1
  69. package/dist/assets/vendor-objectstack-BlgvvNrN.js +108 -0
  70. package/dist/index.html +4 -4
  71. package/package.json +1 -1
  72. package/dist/assets/ApprovalsInboxPage-DbdgZkz_.js +0 -1
  73. package/dist/assets/MarketplacePackagePage-B2BXohna.js +0 -4
  74. package/dist/assets/ObjectDataPage-D8W0OzJe.js +0 -1
  75. package/dist/assets/PublicFormsPage-5oWNwPiZ.js +0 -1
  76. package/dist/assets/RecordDetailView-CUcCVoa1.js +0 -9
  77. package/dist/assets/ReportDefaultInspector-BBTLmEl-.js +0 -11
  78. package/dist/assets/ReportView-BPkQVP9-.js +0 -2
  79. package/dist/assets/SystemHubPage-SIzLdDrE.js +0 -1
  80. package/dist/assets/index-Df624lGg.js +0 -2
  81. package/dist/assets/index-GDbpsyLD.css +0 -2
  82. package/dist/assets/mermaid-GHXKKRXX-BlWXnAVk.js +0 -1
  83. package/dist/assets/metadata-admin-Jkl-QChK.js +0 -23
  84. package/dist/assets/plugin-calendar-BHRBKeJq.js +0 -1
  85. package/dist/assets/plugin-chatbot-CNLp4fGv.js +0 -120
  86. package/dist/assets/plugin-dashboard-uOZwquef.js +0 -6
  87. package/dist/assets/plugin-form-CX8z6nsj.js +0 -1
  88. package/dist/assets/plugin-gantt-CyktuI6d.js +0 -93
  89. package/dist/assets/plugin-grid-DNGRZzGM.js +0 -8
  90. package/dist/assets/plugin-kanban-B0Dwrpca.js +0 -1
  91. package/dist/assets/plugin-timeline-Cy03-xov.js +0 -1
  92. package/dist/assets/plugin-view-OZpEPOgT.js +0 -1
  93. package/dist/assets/plugins-views-BVxwkRdi.js +0 -4
  94. package/dist/assets/src-rXeXV_HX.js +0 -16
  95. package/dist/assets/ui-components-BOOpjWsQ.js +0 -42
  96. package/dist/assets/vendor-objectstack-Jcqd9154.js +0 -108
@@ -0,0 +1,2 @@
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,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{g as n,m as r,r as i,y as a}from"./vendor-react-BGDDiZfJ.js";import{d as o}from"./infrastructure-ASGyCRMg.js";import{E as s,L as c,R as l,l as u}from"./framework-Itfj9AWQ.js";import{Ba as d,G as f,Hr as p,J as m,Oi as h,Or as g,W as _,Xs as v,ra as y,xr as b}from"./ui-components-DTwfkSDm.js";import"./AdapterProvider-BdI1AL8R.js";import"./MetadataProvider-C9mhBo6s.js";import{r as x}from"./ExpressionProvider-BdMK_o7f.js";import{r as S}from"./useMetadata-DSuQLgo1.js";import{b as C,n as w,v as T,y as E}from"./ReportDefaultInspector-De2iFQ0s.js";import{n as D,r as O,t as k}from"./MetadataInspector-BD4Mhmpt.js";import{a as A,i as j,n as M,r as N}from"./runtime-metadata-persistence-D1KKivGr.js";import{r as ee}from"./plugin-dashboard-CGXhP3SP.js";import{t as te}from"./useOpenRecordList-B3tjtz1e.js";var P=e(a(),1),F=i();function I({type:e,name:t,metadataClient:n,dirty:r,onResume:i,onAfterChange:a,savedSignal:o}){let s=T(),[c,l]=(0,P.useState)(!1),[u,f]=(0,P.useState)(!1),m=(0,P.useRef)(null),g=(0,P.useCallback)(async()=>{if(!t||!n){l(!1);return}let r;try{r=await A(e,t,{metadataClient:n})}catch{l(!1);return}if(l(!!r),r&&i&&m.current!==t){m.current=t;try{i(r)}catch(e){console.error(`[RuntimeDraftBar] Resume draft failed:`,e)}}},[e,t,n,i]);(0,P.useEffect)(()=>{g()},[g]);let _=(0,P.useRef)(o);(0,P.useEffect)(()=>{o!==_.current&&(_.current=o,o&&l(!0))},[o]);let v=(0,P.useCallback)(async()=>{if(t){f(!0);try{await j(e,t,{metadataClient:n}),l(!1),a?.()}catch(e){console.error(`[RuntimeDraftBar] Publish failed:`,e)}finally{f(!1)}}},[e,t,n,a]),y=(0,P.useCallback)(async()=>{if(t&&!(typeof confirm==`function`&&!confirm(C(`engine.edit.discardDraftConfirm`,s,{type:e,name:t})))){f(!0);try{await M(e,t,{metadataClient:n}),l(!1),a?.()}catch(e){console.error(`[RuntimeDraftBar] Discard draft failed:`,e)}finally{f(!1)}}},[e,t,n,a,s]);return c?(0,F.jsxs)(`div`,{className:`mr-auto flex items-center gap-2`,"data-testid":`runtime-draft-bar`,children:[(0,F.jsxs)(`span`,{className:`text-xs text-amber-700 dark:text-amber-400`,title:E(`engine.edit.draftPending`,s),"data-testid":`runtime-draft-indicator`,children:[`● `,E(`engine.edit.draftPending`,s)]}),(0,F.jsx)(b,{variant:`ghost`,size:`sm`,onClick:y,disabled:u,className:`h-7 w-7 p-0 text-muted-foreground`,title:E(`engine.edit.discardDraft`,s),"aria-label":E(`engine.edit.discardDraft`,s),"data-testid":`runtime-draft-discard`,children:(0,F.jsx)(p,{className:`h-3.5 w-3.5`})}),(0,F.jsx)(b,{size:`sm`,onClick:v,disabled:u||r,className:`h-7 px-2 bg-emerald-600 hover:bg-emerald-700 text-emerald-50`,title:E(r?`engine.edit.publishBlockedDirty`:`engine.edit.publish`,s),"data-testid":`runtime-draft-publish`,children:u?(0,F.jsx)(d,{className:`h-3.5 w-3.5 animate-spin`}):(0,F.jsxs)(F.Fragment,{children:[(0,F.jsx)(h,{className:`h-3.5 w-3.5 mr-1`}),E(`engine.edit.publish`,s)]})})]}):null}function L({open:e,onClose:t,config:n,onSave:r,onFieldChange:i,name:a,metadataClient:o,onAfterChange:s}){let{t:c}=u(),l=(0,P.useMemo)(()=>T(),[]),[d,f]=(0,P.useState)(!1),p=(0,P.useMemo)(()=>({...n??{}}),[n]),[m,h]=(0,P.useState)(p),_=(0,P.useRef)(m),v=(0,P.useRef)(p);v.current!==p&&(v.current=p,_.current=p,h(p),f(!1));let y=(0,P.useCallback)(e=>{let t={..._.current,...e};if(_.current=t,h(t),f(!0),i)for(let[n,r]of Object.entries(e))i(n,r,t)},[i]),x=(0,P.useCallback)(()=>{r(_.current),f(!1),t()},[r,t]),S=(0,P.useCallback)(e=>{let t={...e};_.current=t,h(t),f(!1)},[]),C=(0,P.useCallback)(()=>{t()},[t]);return e?(0,F.jsxs)(`aside`,{className:`hidden sm:flex w-[440px] shrink-0 flex-col border-l bg-background h-full`,"data-testid":`report-config-panel`,role:`complementary`,"aria-label":c(`report.editor.title`,{defaultValue:`Edit report`}),children:[(0,F.jsxs)(`div`,{className:`flex items-center justify-between gap-2 border-b px-4 py-2.5 shrink-0`,children:[(0,F.jsx)(`div`,{className:`text-sm font-medium truncate`,children:c(`report.editor.title`,{defaultValue:`Edit report`})}),(0,F.jsx)(b,{variant:`ghost`,size:`sm`,onClick:t,className:`h-7 w-7 p-0`,"aria-label":c(`common.close`,{defaultValue:`Close`}),"data-testid":`report-config-close`,children:(0,F.jsx)(g,{className:`h-4 w-4`})})]}),(0,F.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto`,children:(0,F.jsx)(w,{type:`report`,name:typeof m.name==`string`?m.name:``,draft:m,readOnly:!1,locale:l,onPatch:y})}),(0,F.jsxs)(`div`,{"data-testid":`report-config-footer`,className:`flex items-center justify-end gap-2 border-t px-4 py-2.5 shrink-0`,children:[(0,F.jsx)(I,{type:`report`,name:a,metadataClient:o,dirty:d,onResume:S,onAfterChange:s}),(0,F.jsx)(b,{variant:`ghost`,size:`sm`,onClick:C,"data-testid":`report-config-discard`,children:c(`common.cancel`,{defaultValue:`Cancel`})}),(0,F.jsx)(b,{size:`sm`,onClick:x,"data-testid":`report-config-save`,children:c(`common.save`,{defaultValue:`Save`})})]})]}):null}var R=t({ReportView:()=>B}),z=(0,P.lazy)(()=>n(()=>import(`./plugin-report-CJmiocGk.js`).then(e=>e.t).then(e=>({default:e.ReportViewer})),__vite__mapDeps([0]),import.meta.url)),ne=(0,P.lazy)(()=>n(()=>import(`./plugin-report-CJmiocGk.js`).then(e=>e.t).then(e=>({default:e.ReportRenderer})),__vite__mapDeps([0]),import.meta.url)),re=[{value:`month`,label:`Month`,type:`text`},{value:`revenue`,label:`Revenue`,type:`number`},{value:`count`,label:`Count`,type:`number`},{value:`region`,label:`Region`,type:`text`},{value:`product`,label:`Product`,type:`text`},{value:`source`,label:`Lead Source`,type:`text`},{value:`stage`,label:`Stage`,type:`text`},{value:`amount`,label:`Amount`,type:`number`}];function B({dataSource:e}){let{t}=u(),{reportName:n}=r(),{showDebug:i}=D();c();let a=S(),p=o(),[h,g]=(0,P.useState)(!1),[b,C]=(0,P.useState)(0),{reports:w,objects:T,loading:E,refresh:A}=l(),{app:j}=x(),M=O(w,n,j?._packageId),[I,R]=(0,P.useState)(M),[B,V]=(0,P.useState)(null),[H,U]=(0,P.useState)([]),[W,G]=(0,P.useState)(!1),K=te(),[q,J]=(0,P.useState)(null),Y=(0,P.useCallback)(e=>{if(!e||!T?.length)return;let t=T.find(t=>t.name===e);if(!t?.fields)return;let n=t.fields;return Array.isArray(n)?n.map(e=>typeof e==`string`?{value:e,label:e,type:`text`}:{value:e.name,label:e.label||e.name,type:e.type||`text`}):Object.entries(n).map(([e,t])=>({value:e,label:t.label||e,type:t.type||`text`}))},[T]),ie=(0,P.useCallback)(async({dataset:e,groupKey:t,object:n,objectFilter:r})=>{try{let i=Object.values(t).filter(e=>e!=null).map(e=>String(e)).join(` / `)||String(I?.label??I?.name??`Details`);if(n&&r){J({object:n,filter:r,title:i});return}let o=await a.get(`dataset`,e),s=typeof o?.object==`string`?o.object:void 0;if(!s)return;let c=Array.isArray(o?.dimensions)?o.dimensions:[],l=new Map(c.filter(e=>e?.name).map(e=>[e.name,e])),u=T?.find(e=>e.name===s)?.fields,d=e=>{if(Array.isArray(u))return u.find(t=>t?.name===e);if(u&&typeof u==`object`)return u[e]},f={};for(let[e,n]of Object.entries(t)){if(n==null)continue;let t=l.get(e);if(t?.dateGranularity)continue;let r=t?.field||e,i=d(r);if(i?.type===`lookup`||i?.type===`master_detail`)continue;let a=n;if(Array.isArray(i?.options)){let e=i.options.find(e=>e?.label===n||e?.value===n);e&&e.value!=null&&(a=e.value)}f[r]=a}J({object:s,filter:f,title:i})}catch(e){console.warn(`ReportView: drill failed`,e)}},[a,T,I]),ae=(0,P.useMemo)(()=>{let e=B||I,t=e?.objectName||e?.dataSource?.object||e?.dataSource?.resource;return Y(t)??re},[B,I,Y]),X=(0,P.useCallback)(async e=>{try{a&&(await N(`report`,n,e,{metadataClient:a}),A().catch(()=>{}))}catch(e){console.warn(`[ReportView] Auto-save failed:`,e)}},[a,n,A]),oe=(0,P.useCallback)(()=>{V(I),g(!0),C(e=>e+1)},[I]),Z=(0,P.useCallback)(()=>{g(!1)},[]),se=(0,P.useMemo)(()=>B||I,[b]),ce=(0,P.useCallback)(e=>{V(e),X(e),C(e=>e+1)},[X]),le=(0,P.useCallback)((e,t)=>{V(n=>({...n,[e]:t}))},[]);(0,P.useEffect)(()=>{R(M)},[M]),(0,P.useEffect)(()=>{h||V(null)},[M]);let Q=B||I,ue=(0,P.useMemo)(()=>JSON.stringify(Q?.filters),[Q?.filters]),de=(0,P.useMemo)(()=>JSON.stringify(Q?.dataSource),[Q?.dataSource]),fe=(0,P.useMemo)(()=>JSON.stringify(Q?.data),[Q?.data]);if((0,P.useEffect)(()=>{if(!Q||!e){U([]);return}if(Q.data&&Array.isArray(Q.data)){U(Q.data);return}if(Q.dataSource){(async()=>{G(!0);try{let t=Q.dataSource.object||Q.dataSource.resource;if(!t){console.warn(`ReportView: dataSource missing object/resource property`),U([]);return}let n=await e.find(t,{$filter:Q.dataSource.filter,$orderby:Q.dataSource.sort,$top:Q.dataSource.limit});U(n.data||[])}catch(e){console.error(`ReportView: Failed to load data from dataSource`,e),U([])}finally{G(!1)}})();return}if(Q.objectName){(async()=>{G(!0);try{let t=await e.find(Q.objectName,{$filter:Q.filters,$orderby:Q.sort,$top:Q.limit||100});U(t.data||[])}catch(e){console.error(`ReportView: Failed to load data from objectName`,e),U([])}finally{G(!1)}})();return}U([])},[Q?.objectName,Q?.limit,ue,de,fe,e]),E)return(0,F.jsx)(`div`,{className:`h-full flex items-center justify-center p-8`,children:(0,F.jsx)(d,{className:`h-8 w-8 animate-spin text-muted-foreground`})});if(!M||!I)return!E&&!M?(0,F.jsx)(`div`,{className:`h-full flex items-center justify-center p-8`,children:(0,F.jsxs)(_,{children:[(0,F.jsx)(`div`,{className:`mx-auto mb-4 flex h-12 w-12 items-center justify-center rounded-full bg-muted`,children:(0,F.jsx)(v,{className:`h-6 w-6 text-muted-foreground`})}),(0,F.jsx)(m,{children:t(`empty.reportNotFound`)}),(0,F.jsx)(f,{children:t(`empty.reportNotFoundDescription`,{name:n})})]})}):(0,F.jsx)(`div`,{className:`h-full flex items-center justify-center p-8`,children:(0,F.jsx)(d,{className:`h-8 w-8 animate-spin text-muted-foreground`})});let pe=e=>{let t={...e};!t.title&&t.label&&(t.title=t.label);let n=t.objectName||t.dataSource?.object||t.dataSource?.resource,r=n?T?.find(e=>e.name===n):null,i=Array.isArray(r?.fields)?r.fields:r?.fields?Object.entries(r.fields).map(([e,t])=>({name:e,...t})):[],a={};for(let e of i)e&&e.name&&(a[e.name]=e);let o=e=>{let t=e.name||e.field,n=t?a[t]:void 0;if(!n)return e;let r={...e};if(r.type===void 0&&n.type!==void 0&&(r.type=n.type),r.options===void 0&&Array.isArray(n.options)&&(r.options=n.options),r.referenceTo===void 0){let e=n.referenceTo||n.reference?.to||n.target;e&&(r.referenceTo=e)}return r.label===void 0&&n.label&&(r.label=n.label),r};if(!t.fields&&Array.isArray(t.columns)?t.fields=t.columns.map(e=>{let t=o(e);return{name:t.field||t.name,label:t.label,type:t.type,options:t.options,referenceTo:t.referenceTo,format:t.format,renderAs:t.renderAs,colorMap:t.colorMap,...t.aggregate?{aggregation:t.aggregate,showInSummary:!0}:{}}}):Array.isArray(t.fields)&&(t.fields=t.fields.map(o)),t.fields&&Array.isArray(t.fields)&&t.fields.length>0){let n=t.fields.some(e=>e.showInSummary||e.aggregation),r=t.type||t.reportType||`tabular`,i=[];(r===`summary`||n)&&i.push({type:`summary`,title:`Key Metrics`}),i.push({type:`table`,title:`Details`,columns:t.fields.map(e=>({name:e.name,label:e.label,type:e.type,options:e.options,referenceTo:e.referenceTo,format:e.format,renderAs:e.renderAs,colorMap:e.colorMap}))});let a=t.chart||t.chartConfig,o=a?.type||a?.chartType;if(o){let e=a.xAxis||a.xAxisField,t=a.yAxis||a.yAxisFields?.[0];i.push({type:`chart`,title:`Chart`,chart:{type:`chart`,chartType:o,xAxisField:e,yAxisFields:t?[t]:a.yAxisFields}})}if(Array.isArray(e.sections)){let t=e.sections.filter(e=>e.type===`chart`&&!o);i.push(...t)}t.sections=i}else t.sections||=[];return t},$=B||I,me=!!($&&(typeof $.dataset==`string`||$.type===`joined`&&Array.isArray($.blocks)&&$.blocks.some(e=>typeof e?.dataset==`string`)))||!!($&&$.objectName&&($.type===`matrix`||$.type===`joined`||$.type===`summary`||$.type===`tabular`||$.type===void 0||Array.isArray($.groupingsAcross)&&$.groupingsAcross.length>0||Array.isArray($.columns))),he={type:`report-viewer`,report:pe($),data:H,showToolbar:!0,allowExport:!0,loading:W};return(0,F.jsxs)(s,{value:{openRecordList:K},children:[(0,F.jsxs)(`div`,{className:`flex flex-col h-full overflow-hidden bg-background`,children:[(0,F.jsxs)(`div`,{className:`flex flex-col sm:flex-row justify-between sm:items-center gap-3 sm:gap-4 p-4 sm:p-6 border-b shrink-0`,children:[(0,F.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,F.jsx)(`h1`,{className:`text-lg sm:text-xl md:text-2xl font-bold tracking-tight truncate`,children:$.title||$.label||`Report Viewer`}),$.description&&(0,F.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 line-clamp-2`,children:$.description})]}),(0,F.jsx)(`div`,{className:`shrink-0 flex items-center gap-1.5`,children:p&&(0,F.jsxs)(`button`,{type:`button`,onClick:oe,className:`inline-flex items-center gap-1.5 rounded-md border border-input bg-background px-2.5 py-1.5 text-xs font-medium text-muted-foreground shadow-sm hover:bg-accent hover:text-accent-foreground`,"data-testid":`report-edit-button`,children:[(0,F.jsx)(y,{className:`h-3.5 w-3.5`}),t(`common.edit`)]})})]}),(0,F.jsxs)(`div`,{className:`flex-1 overflow-hidden flex flex-col sm:flex-row relative`,children:[(0,F.jsx)(`div`,{className:`flex-1 min-w-0 overflow-auto p-4 sm:p-6 lg:p-8 bg-muted/5`,children:(0,F.jsx)(`div`,{className:`w-full shadow-sm border rounded-lg sm:rounded-xl bg-background overflow-hidden min-h-150`,children:(0,F.jsx)(P.Suspense,{fallback:(0,F.jsx)(`div`,{className:`p-8 text-sm text-muted-foreground`,children:t(`common.loading`,{defaultValue:`Loading…`})}),children:me?(0,F.jsx)(`div`,{className:`p-4 sm:p-6`,children:(0,F.jsx)(ne,{schema:$,dataSource:e,rows:H,onDrill:ie})}):(0,F.jsx)(z,{schema:he})})})}),(0,F.jsx)(L,{open:h&&p,onClose:Z,config:se,onSave:ce,onFieldChange:le,availableFields:ae,getFieldsForObject:Y,name:n,metadataClient:a,onAfterChange:()=>A().catch(()=>{})}),(0,F.jsx)(k,{open:i,sections:[{title:`Report Configuration`,data:$}]})]})]}),(0,F.jsx)(ee,{open:!!q,onClose:()=>J(null),title:q?.title??``,objectName:q?.object??``,filter:q?.filter,dataSource:e})]})}export{I as n,R as t};
@@ -1 +1 @@
1
- import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{a as n,h as r,m as i,r as a,y as o}from"./vendor-react-BGDDiZfJ.js";import{f as s}from"./infrastructure-ASGyCRMg.js";import{R as c,l}from"./framework-CBCX6Urh.js";import{$n as u,Cc as d,Fo as f,Oi as p,Xa as m,Zs as h,ar as g,er as _,ns as v,sn as y}from"./ui-components-BOOpjWsQ.js";import"./MetadataProvider-seOmvY8N.js";import{n as b}from"./ui-layout-vWAZODrs.js";import{r as x}from"./appRoute-1sYdkwBz.js";var S=t({SearchResultsPage:()=>O}),C=e(o(),1),w=a();function T(e){let t=[];for(let n of e)n.type===`group`&&n.children?t.push(...T(n.children)):t.push(n);return t}var E={object:v,dashboard:m,page:f,report:h},D={object:`bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200`,dashboard:`bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200`,page:`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200`,report:`bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200`};function O(){let{t:e}=l(),{appName:t}=i(),[a,o]=r(),[f,m]=(0,C.useState)(a.get(`q`)||``),{apps:h}=c(),S=h||[],O=x(S,t)||S[0],k=`/apps/${t}`,{user:A,activeOrganization:j}=s(),M=(0,C.useMemo)(()=>{if(!O)return[];let e=T(O.navigation||[]),t={currentUserId:A?.id??null,currentOrgId:j?.id??null};return e.map(e=>{let{href:n}=b(e,k,t);return{id:e.id,label:e.label||e.objectName||e.dashboardName||e.pageName||e.reportName||``,href:n,type:e.type,description:e.description}}).filter(e=>e.href!==`#`)},[O,k,A?.id]),N=(0,C.useMemo)(()=>{if(!f.trim())return M;let e=f.toLowerCase();return M.filter(t=>t.label.toLowerCase().includes(e)||t.type.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[M,f]),P=e=>{m(e),o(e?{q:e}:{})},F=(0,C.useMemo)(()=>{let e={};for(let t of N)(e[t.type]||=[]).push(t);return e},[N]);return(0,w.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6 max-w-4xl mx-auto`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,w.jsxs)(n,{to:k,className:`flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors`,children:[(0,w.jsx)(d,{className:`h-4 w-4`}),e(`search.back`)]}),(0,w.jsx)(`h1`,{className:`text-xl font-semibold`,children:e(`search.title`)})]}),(0,w.jsxs)(`div`,{className:`relative`,children:[(0,w.jsx)(`label`,{htmlFor:`search-results-input`,className:`sr-only`,children:e(`search.placeholder`)}),(0,w.jsx)(p,{className:`absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}),(0,w.jsx)(y,{id:`search-results-input`,value:f,onChange:e=>P(e.target.value),placeholder:e(`search.placeholder`),className:`pl-10 h-11 text-base`,autoFocus:!0})]}),(0,w.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:f.trim()?e(N.length===1?`search.resultsCount`:`search.resultsCountPlural`,{count:N.length,query:f}):e(`search.itemsAvailable`,{count:M.length})}),N.length===0?(0,w.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,w.jsx)(p,{className:`h-12 w-12 text-muted-foreground/30 mb-4`}),(0,w.jsx)(`p`,{className:`text-lg font-medium text-muted-foreground`,children:e(`search.noResults`)}),(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground/80 mt-1`,children:e(`search.noResultsHint`)})]}):(0,w.jsx)(`div`,{className:`space-y-6`,children:Object.entries(F).map(([t,r])=>{let i=E[t]||v,a=`search.type${t.charAt(0).toUpperCase()}${t.slice(1)}s`;return`${t.charAt(0).toUpperCase()}${t.slice(1)}`,(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{className:`text-sm font-medium text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,w.jsx)(i,{className:`h-4 w-4`}),e(a),(0,w.jsx)(g,{variant:`secondary`,className:`ml-1 text-xs`,children:r.length})]}),(0,w.jsx)(`div`,{className:`grid gap-2`,children:r.map(t=>{let r=E[t.type]||v,i=`search.badge${t.type.charAt(0).toUpperCase()}${t.type.slice(1)}`;return(0,w.jsx)(n,{to:t.href,className:`rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:(0,w.jsx)(u,{className:`hover:bg-accent/50 transition-colors cursor-pointer`,children:(0,w.jsxs)(_,{className:`flex items-center gap-3 p-3`,children:[(0,w.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center rounded ${D[t.type]||``}`,children:(0,w.jsx)(r,{className:`h-4 w-4`})}),(0,w.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,w.jsx)(`p`,{className:`text-sm font-medium truncate`,children:t.label}),t.description&&(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:t.description})]}),(0,w.jsx)(g,{variant:`outline`,className:`text-xs shrink-0`,children:e(i)})]})})},t.id)})})]},t)})})]})}export{S as t};
1
+ import{o as e,r as t}from"./rolldown-runtime-DAXXjFlN.js";import{a as n,h as r,m as i,r as a,y as o}from"./vendor-react-BGDDiZfJ.js";import{f as s}from"./infrastructure-ASGyCRMg.js";import{R as c,l}from"./framework-Itfj9AWQ.js";import{$n as u,Fo as d,Sc as f,Xs as p,Za as m,ar as h,er as g,ki as _,ns as v,sn as y}from"./ui-components-DTwfkSDm.js";import"./MetadataProvider-C9mhBo6s.js";import{n as b}from"./ui-layout-BHkbFI8f.js";import{r as x}from"./appRoute-1sYdkwBz.js";var S=t({SearchResultsPage:()=>O}),C=e(o(),1),w=a();function T(e){let t=[];for(let n of e)n.type===`group`&&n.children?t.push(...T(n.children)):t.push(n);return t}var E={object:v,dashboard:m,page:d,report:p},D={object:`bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200`,dashboard:`bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200`,page:`bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200`,report:`bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200`};function O(){let{t:e}=l(),{appName:t}=i(),[a,o]=r(),[d,p]=(0,C.useState)(a.get(`q`)||``),{apps:m}=c(),S=m||[],O=x(S,t)||S[0],k=`/apps/${t}`,{user:A,activeOrganization:j}=s(),M=(0,C.useMemo)(()=>{if(!O)return[];let e=T(O.navigation||[]),t={currentUserId:A?.id??null,currentOrgId:j?.id??null};return e.map(e=>{let{href:n}=b(e,k,t);return{id:e.id,label:e.label||e.objectName||e.dashboardName||e.pageName||e.reportName||``,href:n,type:e.type,description:e.description}}).filter(e=>e.href!==`#`)},[O,k,A?.id]),N=(0,C.useMemo)(()=>{if(!d.trim())return M;let e=d.toLowerCase();return M.filter(t=>t.label.toLowerCase().includes(e)||t.type.toLowerCase().includes(e)||t.description&&t.description.toLowerCase().includes(e))},[M,d]),P=e=>{p(e),o(e?{q:e}:{})},F=(0,C.useMemo)(()=>{let e={};for(let t of N)(e[t.type]||=[]).push(t);return e},[N]);return(0,w.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6 max-w-4xl mx-auto`,children:[(0,w.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,w.jsxs)(n,{to:k,className:`flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors`,children:[(0,w.jsx)(f,{className:`h-4 w-4`}),e(`search.back`)]}),(0,w.jsx)(`h1`,{className:`text-xl font-semibold`,children:e(`search.title`)})]}),(0,w.jsxs)(`div`,{className:`relative`,children:[(0,w.jsx)(`label`,{htmlFor:`search-results-input`,className:`sr-only`,children:e(`search.placeholder`)}),(0,w.jsx)(_,{className:`absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}),(0,w.jsx)(y,{id:`search-results-input`,value:d,onChange:e=>P(e.target.value),placeholder:e(`search.placeholder`),className:`pl-10 h-11 text-base`,autoFocus:!0})]}),(0,w.jsx)(`div`,{className:`text-sm text-muted-foreground`,children:d.trim()?e(N.length===1?`search.resultsCount`:`search.resultsCountPlural`,{count:N.length,query:d}):e(`search.itemsAvailable`,{count:M.length})}),N.length===0?(0,w.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-12 text-center`,children:[(0,w.jsx)(_,{className:`h-12 w-12 text-muted-foreground/30 mb-4`}),(0,w.jsx)(`p`,{className:`text-lg font-medium text-muted-foreground`,children:e(`search.noResults`)}),(0,w.jsx)(`p`,{className:`text-sm text-muted-foreground/80 mt-1`,children:e(`search.noResultsHint`)})]}):(0,w.jsx)(`div`,{className:`space-y-6`,children:Object.entries(F).map(([t,r])=>{let i=E[t]||v,a=`search.type${t.charAt(0).toUpperCase()}${t.slice(1)}s`;return`${t.charAt(0).toUpperCase()}${t.slice(1)}`,(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`h2`,{className:`text-sm font-medium text-muted-foreground mb-2 flex items-center gap-1.5`,children:[(0,w.jsx)(i,{className:`h-4 w-4`}),e(a),(0,w.jsx)(h,{variant:`secondary`,className:`ml-1 text-xs`,children:r.length})]}),(0,w.jsx)(`div`,{className:`grid gap-2`,children:r.map(t=>{let r=E[t.type]||v,i=`search.badge${t.type.charAt(0).toUpperCase()}${t.type.slice(1)}`;return(0,w.jsx)(n,{to:t.href,className:`rounded-lg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2`,children:(0,w.jsx)(u,{className:`hover:bg-accent/50 transition-colors cursor-pointer`,children:(0,w.jsxs)(g,{className:`flex items-center gap-3 p-3`,children:[(0,w.jsx)(`div`,{className:`flex h-8 w-8 items-center justify-center rounded ${D[t.type]||``}`,children:(0,w.jsx)(r,{className:`h-4 w-4`})}),(0,w.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,w.jsx)(`p`,{className:`text-sm font-medium truncate`,children:t.label}),t.description&&(0,w.jsx)(`p`,{className:`text-xs text-muted-foreground truncate`,children:t.description})]}),(0,w.jsx)(h,{variant:`outline`,className:`text-xs shrink-0`,children:e(i)})]})})},t.id)})})]},t)})})]})}export{S as t};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,r as n,y as r}from"./vendor-react-BGDDiZfJ.js";import{$n as i,Rt as a,Ti as o,ar as s,er as c,nr as l,rr as u,tr as d}from"./ui-components-BOOpjWsQ.js";import{o as f,r as p,t as m}from"./types-DXCQOIiO.js";var h=e(r(),1),g=n();function _(){let e=t(),[n,r]=(0,h.useState)(null),[_,v]=(0,h.useState)(null);(0,h.useEffect)(()=>{p().then(e=>r(e.manifests??[])).catch(e=>v(e?.message??`Failed to load settings`))},[]);let y=(0,h.useMemo)(()=>{if(!n)return null;let e=new Map;for(let t of[...n].sort((e,t)=>(e.order??999)-(t.order??999))){let n=t.category??`Other`,r=e.get(n)??[];r.push(t),e.set(n,r)}return e},[n]);return(0,g.jsxs)(`div`,{className:`p-6 max-w-6xl mx-auto`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-3 mb-6`,children:[(0,g.jsx)(o,{className:`h-7 w-7 text-muted-foreground`}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Settings`}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Configure your workspace, integrations, and feature flags.`})]})]}),_?(0,g.jsx)(i,{children:(0,g.jsx)(c,{className:`py-8 text-center text-sm text-destructive`,children:_})}):null,n?n.length===0?(0,g.jsx)(i,{children:(0,g.jsx)(c,{className:`py-12 text-center text-sm text-muted-foreground`,children:`No settings registered. Plugins can register settings manifests via the SettingsService.`})}):Array.from(y??[]).map(([t,n])=>(0,g.jsxs)(`section`,{className:`mb-8`,children:[(0,g.jsx)(`h2`,{className:`text-sm font-semibold tracking-wide uppercase text-muted-foreground mb-3`,children:t}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:n.map(t=>(0,g.jsxs)(i,{className:`cursor-pointer hover:border-primary/50 hover:shadow-sm transition-all`,onClick:()=>e(`/system/settings/${t.namespace}`),children:[(0,g.jsxs)(l,{className:`pb-3`,children:[(0,g.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,g.jsx)(t.icon?f(t.icon):o,{className:`h-6 w-6 text-muted-foreground`}),t.beta?(0,g.jsx)(s,{variant:`secondary`,className:`text-[10px]`,children:`Beta`}):null]}),(0,g.jsx)(u,{className:`text-base mt-2`,children:m(t.label)}),t.description?(0,g.jsx)(d,{className:`text-xs`,children:t.description}):null]}),(0,g.jsx)(c,{className:`pt-0`,children:(0,g.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.specifiers.length,` setting`,t.specifiers.length===1?``:`s`]})})]},t.namespace))})]},t)):(0,g.jsxs)(`div`,{className:`space-y-4`,children:[(0,g.jsx)(a,{className:`h-6 w-32`}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:Array.from({length:3}).map((e,t)=>(0,g.jsx)(a,{className:`h-32 w-full`},t))})]})]})}export{_ as SettingsHub};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,r as n,y as r}from"./vendor-react-BGDDiZfJ.js";import{$n as i,Ei as a,Rt as o,ar as s,er as c,nr as l,rr as u,tr as d}from"./ui-components-DTwfkSDm.js";import{o as f,r as p,t as m}from"./types-GmZjwWOe.js";var h=e(r(),1),g=n();function _(){let e=t(),[n,r]=(0,h.useState)(null),[_,v]=(0,h.useState)(null);(0,h.useEffect)(()=>{p().then(e=>r(e.manifests??[])).catch(e=>v(e?.message??`Failed to load settings`))},[]);let y=(0,h.useMemo)(()=>{if(!n)return null;let e=new Map;for(let t of[...n].sort((e,t)=>(e.order??999)-(t.order??999))){let n=t.category??`Other`,r=e.get(n)??[];r.push(t),e.set(n,r)}return e},[n]);return(0,g.jsxs)(`div`,{className:`p-6 max-w-6xl mx-auto`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-3 mb-6`,children:[(0,g.jsx)(a,{className:`h-7 w-7 text-muted-foreground`}),(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:`Settings`}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Configure your workspace, integrations, and feature flags.`})]})]}),_?(0,g.jsx)(i,{children:(0,g.jsx)(c,{className:`py-8 text-center text-sm text-destructive`,children:_})}):null,n?n.length===0?(0,g.jsx)(i,{children:(0,g.jsx)(c,{className:`py-12 text-center text-sm text-muted-foreground`,children:`No settings registered. Plugins can register settings manifests via the SettingsService.`})}):Array.from(y??[]).map(([t,n])=>(0,g.jsxs)(`section`,{className:`mb-8`,children:[(0,g.jsx)(`h2`,{className:`text-sm font-semibold tracking-wide uppercase text-muted-foreground mb-3`,children:t}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:n.map(t=>(0,g.jsxs)(i,{className:`cursor-pointer hover:border-primary/50 hover:shadow-sm transition-all`,onClick:()=>e(`/system/settings/${t.namespace}`),children:[(0,g.jsxs)(l,{className:`pb-3`,children:[(0,g.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,g.jsx)(t.icon?f(t.icon):a,{className:`h-6 w-6 text-muted-foreground`}),t.beta?(0,g.jsx)(s,{variant:`secondary`,className:`text-[10px]`,children:`Beta`}):null]}),(0,g.jsx)(u,{className:`text-base mt-2`,children:m(t.label)}),t.description?(0,g.jsx)(d,{className:`text-xs`,children:t.description}):null]}),(0,g.jsx)(c,{className:`pt-0`,children:(0,g.jsxs)(`div`,{className:`text-[11px] text-muted-foreground`,children:[t.specifiers.length,` setting`,t.specifiers.length===1?``:`s`]})})]},t.namespace))})]},t)):(0,g.jsxs)(`div`,{className:`space-y-4`,children:[(0,g.jsx)(o,{className:`h-6 w-32`}),(0,g.jsx)(`div`,{className:`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4`,children:Array.from({length:3}).map((e,t)=>(0,g.jsx)(o,{className:`h-32 w-full`},t))})]})]})}export{_ as SettingsHub};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,m as n,r,y as i}from"./vendor-react-BGDDiZfJ.js";import{l as a}from"./framework-CBCX6Urh.js";import{$n as o,Bs as s,Cc as c,Gt as l,Ii as u,Jt as d,Kt as f,Qn as p,Ra as m,Rt as h,Xt as g,Yt as _,ar as v,dn as y,dr as b,er as x,io as S,lr as C,nn as w,qt as T,sn as E,st as D,tn as O,ur as k,vt as A,xr as j,yt as M,za as N}from"./ui-components-BOOpjWsQ.js";import{r as P}from"./vendor-ui-utils-BzQBRdq3.js";import{a as F,i as I,n as L,o as R,t as z}from"./types-DXCQOIiO.js";var B=e(i(),1),V=r();function H({reason:e,className:t}){return(0,V.jsxs)(v,{variant:`outline`,className:`gap-1 border-amber-300 bg-amber-50 text-amber-900 ${t??``}`,title:e??`Pinned by environment variable — cannot be edited from the UI.`,children:[(0,V.jsx)(m,{className:`h-3 w-3`}),`Locked by env`]})}function U({resolved:e,labels:t}){let n=e.cascadeChain;if(!n||n.length===0)return null;let r=n.find(e=>e.effective)??n[n.length-1],i=n.find(e=>e!==r&&e.value!==null&&e.value!==void 0),a=e=>t?.sourceLabel?.(e)??e;return r.scope!=="default"&&r.scope!==`user`&&r.scope!==`tenant`?(0,V.jsxs)(v,{variant:`outline`,className:`text-blue-700 border-blue-300 text-[10px]`,children:[`Inherited from `,a(r.scope)]}):i?(0,V.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300 text-[10px]`,children:[`Overrides `,a(i.scope)]}):null}function W({spec:e,resolved:t,labelText:n,labels:r}){return(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(y,{className:`text-sm font-medium`,children:[n,e.required?(0,V.jsx)(`span`,{className:`ml-0.5 text-destructive`,children:`*`}):null]}),e.deprecated?(0,V.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300`,children:[`Deprecated`,e.replacedBy?` → ${e.replacedBy}`:``]}):null,t?.locked?(0,V.jsx)(H,{reason:t.lockedReason}):null,t&&!t.locked?(0,V.jsx)(U,{resolved:t,labels:r}):null,t?.source&&t.source!=="default"&&!t.locked?(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:r?.sourceLabel?.(t.source)??t.source}):null]})}function G({description:e}){return e?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e}):null}function K(e){let{spec:t,resolved:n,value:r,onChange:i,onAction:a,locked:o,saving:c,labels:u}=e,m=(0,B.useId)(),h=!!(o||c),v=z(t.label),x=t.key&&u?u.fieldLabel(t.key,v):v,N=t.key&&u?u.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&u?u.groupTitle(t.id,v):v,n=t.id&&u?u.groupDescription(t.id,t.description):t.description;return(0,V.jsxs)(`div`,{className:`pt-6 pb-2`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-semibold tracking-tight text-foreground/90`,children:e}),n?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:n}):null,(0,V.jsx)(l,{className:`mt-3`})]})}if(t.type===`info_banner`)return(0,V.jsxs)(C,{variant:t.bannerSeverity===`error`?`destructive`:`default`,className:`my-2`,children:[(0,V.jsx)(S,{className:`h-4 w-4`}),(0,V.jsx)(b,{children:v}),t.bannerText?(0,V.jsx)(k,{children:t.bannerText}):null]});if(t.type===`child_pane`)return(0,V.jsxs)(`a`,{href:`#/settings/${t.childNamespace}`,className:`flex items-center justify-between rounded-md border border-border bg-card px-4 py-3 hover:bg-accent transition-colors`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-sm font-medium`,children:v}),t.description?(0,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,V.jsx)(s,{className:`h-4 w-4 text-muted-foreground`})]});if(t.type===`title_value`)return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:u}),(0,V.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:String(r??`—`)})]});if(t.type===`action_button`){let e=t.icon?R(t.icon):null,n=t.id??t.key??`test`,r=u?u.actionLabel(n,v):v;return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-sm font-medium`,children:r}),t.description?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:t.description}):null]}),(0,V.jsxs)(j,{size:`sm`,variant:`secondary`,onClick:a,disabled:c,children:[e?(0,V.jsx)(e,{className:`h-4 w-4 mr-1.5`}):null,r]})]})}let P=e=>(0,V.jsxs)(`div`,{className:`space-y-1.5 py-2`,children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:u}),e,(0,V.jsx)(G,{description:N})]}),F=e=>{let n=typeof e.label==`string`?e.label:e.label?.defaultValue??String(e.value);return!t.key||!u?n:u.optionLabel(t.key,String(e.value),n)};switch(t.type){case`text`:case`email`:case`url`:case`phone`:return P((0,V.jsx)(E,{id:m,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:h,onChange:e=>i(e.target.value)}));case`password`:return P((0,V.jsx)(E,{id:m,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:h,onChange:e=>i(e.target.value)}));case`textarea`:return P((0,V.jsx)(D,{id:m,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:h,onChange:e=>i(e.target.value)}));case`number`:return P((0,V.jsx)(E,{id:m,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:h,onChange:e=>i(e.target.value===``?null:Number(e.target.value))}));case`toggle`:return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:u}),(0,V.jsx)(G,{description:N})]}),(0,V.jsx)(A,{id:m,checked:!!r,disabled:h,onCheckedChange:e=>i(e)})]});case`select`:return P((0,V.jsxs)(f,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:h,children:[(0,V.jsx)(_,{id:m,children:(0,V.jsx)(g,{placeholder:`Select…`})}),(0,V.jsx)(T,{children:t.options?.map(e=>(0,V.jsx)(d,{value:String(e.value),children:F(e)},String(e.value)))})]}));case`radio`:return P((0,V.jsx)(O,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:h,children:t.options?.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,V.jsx)(w,{value:String(e.value),id:`${m}-${e.value}`}),(0,V.jsx)(y,{htmlFor:`${m}-${e.value}`,className:`text-sm font-normal`,children:F(e)})]},String(e.value)))}));case`multiselect`:{let e=Array.isArray(r)?r:[];return P((0,V.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:t.options?.map(t=>{let n=String(t.value);return(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(p,{checked:e.map(String).includes(n),disabled:h,onCheckedChange:t=>{let r=new Set(e.map(String));t?r.add(n):r.delete(n),i(Array.from(r))}}),F(t)]},n)})}))}case`slider`:return P((0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(M,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:h,onValueChange:e=>i(e[0]),className:`flex-1`}),(0,V.jsx)(`span`,{className:`text-sm tabular-nums w-12 text-right`,children:String(r??t.min??0)})]}));case`color`:return P((0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(E,{id:m,type:`color`,value:r??`#000000`,disabled:h,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,V.jsx)(E,{value:r??``,disabled:h,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return P((0,V.jsx)(D,{id:m,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:h,onChange:e=>i(e.target.value)}));default:return P((0,V.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Unsupported specifier type: `,t.type]}))}}var q=new Set([`common`,`validation`,`errors`,`system`,`auth`]);function J(e){let{t,i18n:n}=a();return(0,B.useMemo)(()=>{let r=()=>{if(!n||typeof n.getResourceBundle!=`function`)return[];let e=n.language||`en`,t=n.getResourceBundle(e,`translation`);return t?Object.keys(t).filter(e=>!q.has(e)&&t[e]&&typeof t[e]==`object`&&t[e].settings):[]},i=(n,i)=>{if(!e)return i;try{let i=r();for(let r of i){let i=`${r}.settings.${e}.${n}`,a=t(i,{defaultValue:``});if(a&&a!==i&&a!==``)return a}}catch{}return i},a=(e,r)=>{try{if(!n||typeof n.getResourceBundle!=`function`)return r;let i=n.language||`en`,a=n.getResourceBundle(i,`translation`);if(!a)return r;for(let n of Object.keys(a)){if(q.has(n))continue;let r=a[n];if(!r||typeof r!=`object`||!(`settingsCommon`in r))continue;let i=`${n}.settingsCommon.${e}`,o=t(i,{defaultValue:``});if(o&&o!==i&&o!==``)return o}}catch{}return r},o={env:`Env`,global:`Global`,tenant:`Tenant`,user:`User`,default:`Default`};return{title:e=>i(`title`,e)??e,description:e=>i(`description`,e),groupTitle:(e,t)=>i(`groups.${e}.title`,t)??t,groupDescription:(e,t)=>i(`groups.${e}.description`,t),fieldLabel:(e,t)=>i(`keys.${e}.label`,t)??t,fieldHelp:(e,t)=>i(`keys.${e}.help`,t),fieldPlaceholder:(e,t)=>i(`keys.${e}.placeholder`,t),optionLabel:(e,t,n)=>i(`keys.${e}.options.${t}`,n)??n,actionLabel:(e,t)=>i(`actions.${e}.label`,t)??t,actionConfirm:(e,t)=>i(`actions.${e}.confirmText`,t),actionSuccess:(e,t)=>i(`actions.${e}.successMessage`,t),sourceLabel:e=>a(`sourceLabels.${e}`,o[e]??e)}},[e,t,n,n?.language])}function Y(e,t){if(!e)return!0;let n=e.trim().match(/^\$\{(.+)\}$/);if(!n)return!0;try{return!!Function(`data`,`with (data) { return (${n[1]}); }`)(t)}catch{return!0}}function X(){let e=n(),r=t(),i=e.namespace??``,[a,s]=(0,B.useState)(null),[l,d]=(0,B.useState)(!0),[f,p]=(0,B.useState)(!1),[m,g]=(0,B.useState)(null),[_,y]=(0,B.useState)({}),b=(0,B.useCallback)(async()=>{d(!0),g(null);try{let e=await L(i);s(e),y({})}catch(e){g(e?.message??`Failed to load settings`)}finally{d(!1)}},[i]);(0,B.useEffect)(()=>{i&&b()},[i,b]);let S=(0,B.useMemo)(()=>{let e={};if(!a)return e;for(let[t,n]of Object.entries(a.values))e[t]=n.value;return{...e,..._}},[a,_]),C=(0,B.useMemo)(()=>Object.keys(_),[_]),w=J(i);if(!i)return(0,V.jsx)(`div`,{className:`p-6 text-muted-foreground`,children:`No namespace selected.`});if(l)return(0,V.jsxs)(`div`,{className:`p-6 space-y-3 max-w-3xl`,children:[(0,V.jsx)(h,{className:`h-8 w-1/3`}),(0,V.jsx)(h,{className:`h-4 w-2/3`}),(0,V.jsx)(h,{className:`h-32 w-full`}),(0,V.jsx)(h,{className:`h-32 w-full`})]});if(m)return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,V.jsxs)(j,{variant:`ghost`,size:`sm`,onClick:()=>r(-1),children:[(0,V.jsx)(c,{className:`h-4 w-4 mr-1`}),` Back`]}),(0,V.jsx)(o,{className:`mt-3`,children:(0,V.jsx)(x,{className:`py-8 text-center text-sm text-destructive`,children:m})})]});if(!a)return null;let{manifest:T,values:E}=a,D=T.icon?R(T.icon):null,O=w.title(z(T.label)),k=w.description(T.description),A=async()=>{if(C.length!==0){p(!0);try{let e=await F(i,_);s({...a,values:{...E,...e.values}}),y({}),P.success(`Settings saved`)}catch(e){e?.payload?.error?.code===`SETTINGS_LOCKED`?P.error(`Locked by environment: ${e.payload.error.key}`):P.error(e?.message??`Save failed`)}finally{p(!1)}}},M=async e=>{p(!0);try{let t=await I(i,e,_);t.ok?P.success(t.message??`Action succeeded`):P.error(t.message??`Action failed`)}catch(e){P.error(e?.message??`Action failed`)}finally{p(!1)}};return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl mx-auto pb-32`,children:[(0,V.jsxs)(j,{variant:`ghost`,size:`sm`,onClick:()=>r(`/system/settings`),children:[(0,V.jsx)(c,{className:`h-4 w-4 mr-1`}),` All settings`]}),(0,V.jsxs)(`div`,{className:`mt-3 flex items-start gap-3`,children:[D?(0,V.jsx)(D,{className:`h-7 w-7 mt-0.5 text-muted-foreground`}):null,(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:O}),T.beta?(0,V.jsx)(v,{variant:`secondary`,children:`Beta`}):null]}),k?(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:k}):null]})]}),T.helpText?(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground mt-4 whitespace-pre-wrap`,children:T.helpText}):null,(0,V.jsx)(`div`,{className:`mt-6 divide-y`,children:T.specifiers.filter(e=>Y(e.visible,S)).map((e,t)=>{let n=e.key,r=n?E[n]:void 0;return(0,V.jsx)(K,{spec:e,resolved:r,value:n?n in _?_[n]:r?.value:void 0,onChange:e=>n&&y(t=>({...t,[n]:e})),onAction:e.type===`action_button`?()=>M(e.id??n??`test`):void 0,locked:r?.locked,saving:f,labels:w},(n??`_layout_${t}`)+t)})}),C.length>0?(0,V.jsx)(`div`,{className:`fixed bottom-0 inset-x-0 bg-background/95 backdrop-blur border-t shadow-lg z-40`,children:(0,V.jsxs)(`div`,{className:`max-w-3xl mx-auto px-6 py-3 flex items-center justify-between`,children:[(0,V.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[C.length,` unsaved change`,C.length>1?`s`:``]}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsxs)(j,{variant:`ghost`,size:`sm`,onClick:()=>y({}),disabled:f,children:[(0,V.jsx)(u,{className:`h-4 w-4 mr-1`}),` Discard`]}),(0,V.jsxs)(j,{onClick:A,disabled:f,children:[f?(0,V.jsx)(N,{className:`h-4 w-4 mr-1 animate-spin`}):null,`Save changes`]})]})]})}):null]})}export{X as SettingsView};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,m as n,r,y as i}from"./vendor-react-BGDDiZfJ.js";import{l as a}from"./framework-Itfj9AWQ.js";import{$n as o,Ba as s,Gt as c,Jt as l,Kt as u,Li as d,Qn as f,Rt as p,Sc as m,Xt as h,Yt as g,ao as _,ar as v,dn as y,dr as b,er as x,lr as S,nn as C,qt as w,sn as T,st as E,tn as D,ur as O,vt as k,xr as A,yt as j,za as M,zs as N}from"./ui-components-DTwfkSDm.js";import{r as P}from"./vendor-ui-utils-BzQBRdq3.js";import{a as F,i as I,n as L,o as R,t as z}from"./types-GmZjwWOe.js";var B=e(i(),1),V=r();function H({reason:e,className:t}){return(0,V.jsxs)(v,{variant:`outline`,className:`gap-1 border-amber-300 bg-amber-50 text-amber-900 ${t??``}`,title:e??`Pinned by environment variable — cannot be edited from the UI.`,children:[(0,V.jsx)(M,{className:`h-3 w-3`}),`Locked by env`]})}function U({resolved:e,labels:t}){let n=e.cascadeChain;if(!n||n.length===0)return null;let r=n.find(e=>e.effective)??n[n.length-1],i=n.find(e=>e!==r&&e.value!==null&&e.value!==void 0),a=e=>t?.sourceLabel?.(e)??e;return r.scope!=="default"&&r.scope!==`user`&&r.scope!==`tenant`?(0,V.jsxs)(v,{variant:`outline`,className:`text-blue-700 border-blue-300 text-[10px]`,children:[`Inherited from `,a(r.scope)]}):i?(0,V.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300 text-[10px]`,children:[`Overrides `,a(i.scope)]}):null}function W({spec:e,resolved:t,labelText:n,labels:r}){return(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsxs)(y,{className:`text-sm font-medium`,children:[n,e.required?(0,V.jsx)(`span`,{className:`ml-0.5 text-destructive`,children:`*`}):null]}),e.deprecated?(0,V.jsxs)(v,{variant:`outline`,className:`text-amber-700 border-amber-300`,children:[`Deprecated`,e.replacedBy?` → ${e.replacedBy}`:``]}):null,t?.locked?(0,V.jsx)(H,{reason:t.lockedReason}):null,t&&!t.locked?(0,V.jsx)(U,{resolved:t,labels:r}):null,t?.source&&t.source!=="default"&&!t.locked?(0,V.jsx)(`span`,{className:`text-[11px] text-muted-foreground`,children:r?.sourceLabel?.(t.source)??t.source}):null]})}function G({description:e}){return e?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:e}):null}function K(e){let{spec:t,resolved:n,value:r,onChange:i,onAction:a,locked:o,saving:s,labels:d}=e,p=(0,B.useId)(),m=!!(o||s),v=z(t.label),x=t.key&&d?d.fieldLabel(t.key,v):v,M=t.key&&d?d.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&d?d.groupTitle(t.id,v):v,n=t.id&&d?d.groupDescription(t.id,t.description):t.description;return(0,V.jsxs)(`div`,{className:`pt-6 pb-2`,children:[(0,V.jsx)(`h3`,{className:`text-sm font-semibold tracking-tight text-foreground/90`,children:e}),n?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:n}):null,(0,V.jsx)(c,{className:`mt-3`})]})}if(t.type===`info_banner`)return(0,V.jsxs)(S,{variant:t.bannerSeverity===`error`?`destructive`:`default`,className:`my-2`,children:[(0,V.jsx)(_,{className:`h-4 w-4`}),(0,V.jsx)(b,{children:v}),t.bannerText?(0,V.jsx)(O,{children:t.bannerText}):null]});if(t.type===`child_pane`)return(0,V.jsxs)(`a`,{href:`#/settings/${t.childNamespace}`,className:`flex items-center justify-between rounded-md border border-border bg-card px-4 py-3 hover:bg-accent transition-colors`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-sm font-medium`,children:v}),t.description?(0,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,V.jsx)(N,{className:`h-4 w-4 text-muted-foreground`})]});if(t.type===`title_value`)return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-2`,children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:d}),(0,V.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:String(r??`—`)})]});if(t.type===`action_button`){let e=t.icon?R(t.icon):null,n=t.id??t.key??`test`,r=d?d.actionLabel(n,v):v;return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(`div`,{className:`text-sm font-medium`,children:r}),t.description?(0,V.jsx)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:t.description}):null]}),(0,V.jsxs)(A,{size:`sm`,variant:`secondary`,onClick:a,disabled:s,children:[e?(0,V.jsx)(e,{className:`h-4 w-4 mr-1.5`}):null,r]})]})}let P=e=>(0,V.jsxs)(`div`,{className:`space-y-1.5 py-2`,children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:d}),e,(0,V.jsx)(G,{description:M})]}),F=e=>{let n=typeof e.label==`string`?e.label:e.label?.defaultValue??String(e.value);return!t.key||!d?n:d.optionLabel(t.key,String(e.value),n)};switch(t.type){case`text`:case`email`:case`url`:case`phone`:return P((0,V.jsx)(T,{id:p,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:m,onChange:e=>i(e.target.value)}));case`password`:return P((0,V.jsx)(T,{id:p,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:m,onChange:e=>i(e.target.value)}));case`textarea`:return P((0,V.jsx)(E,{id:p,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:m,onChange:e=>i(e.target.value)}));case`number`:return P((0,V.jsx)(T,{id:p,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:m,onChange:e=>i(e.target.value===``?null:Number(e.target.value))}));case`toggle`:return(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,V.jsxs)(`div`,{children:[(0,V.jsx)(W,{spec:t,resolved:n,labelText:x,labels:d}),(0,V.jsx)(G,{description:M})]}),(0,V.jsx)(k,{id:p,checked:!!r,disabled:m,onCheckedChange:e=>i(e)})]});case`select`:return P((0,V.jsxs)(u,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:m,children:[(0,V.jsx)(g,{id:p,children:(0,V.jsx)(h,{placeholder:`Select…`})}),(0,V.jsx)(w,{children:t.options?.map(e=>(0,V.jsx)(l,{value:String(e.value),children:F(e)},String(e.value)))})]}));case`radio`:return P((0,V.jsx)(D,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:m,children:t.options?.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,V.jsx)(C,{value:String(e.value),id:`${p}-${e.value}`}),(0,V.jsx)(y,{htmlFor:`${p}-${e.value}`,className:`text-sm font-normal`,children:F(e)})]},String(e.value)))}));case`multiselect`:{let e=Array.isArray(r)?r:[];return P((0,V.jsx)(`div`,{className:`grid grid-cols-2 gap-2`,children:t.options?.map(t=>{let n=String(t.value);return(0,V.jsxs)(`label`,{className:`flex items-center gap-2 text-sm`,children:[(0,V.jsx)(f,{checked:e.map(String).includes(n),disabled:m,onCheckedChange:t=>{let r=new Set(e.map(String));t?r.add(n):r.delete(n),i(Array.from(r))}}),F(t)]},n)})}))}case`slider`:return P((0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(j,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:m,onValueChange:e=>i(e[0]),className:`flex-1`}),(0,V.jsx)(`span`,{className:`text-sm tabular-nums w-12 text-right`,children:String(r??t.min??0)})]}));case`color`:return P((0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(T,{id:p,type:`color`,value:r??`#000000`,disabled:m,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,V.jsx)(T,{value:r??``,disabled:m,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return P((0,V.jsx)(E,{id:p,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:m,onChange:e=>i(e.target.value)}));default:return P((0,V.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[`Unsupported specifier type: `,t.type]}))}}var q=new Set([`common`,`validation`,`errors`,`system`,`auth`]);function J(e){let{t,i18n:n}=a();return(0,B.useMemo)(()=>{let r=()=>{if(!n||typeof n.getResourceBundle!=`function`)return[];let e=n.language||`en`,t=n.getResourceBundle(e,`translation`);return t?Object.keys(t).filter(e=>!q.has(e)&&t[e]&&typeof t[e]==`object`&&t[e].settings):[]},i=(n,i)=>{if(!e)return i;try{let i=r();for(let r of i){let i=`${r}.settings.${e}.${n}`,a=t(i,{defaultValue:``});if(a&&a!==i&&a!==``)return a}}catch{}return i},a=(e,r)=>{try{if(!n||typeof n.getResourceBundle!=`function`)return r;let i=n.language||`en`,a=n.getResourceBundle(i,`translation`);if(!a)return r;for(let n of Object.keys(a)){if(q.has(n))continue;let r=a[n];if(!r||typeof r!=`object`||!(`settingsCommon`in r))continue;let i=`${n}.settingsCommon.${e}`,o=t(i,{defaultValue:``});if(o&&o!==i&&o!==``)return o}}catch{}return r},o={env:`Env`,global:`Global`,tenant:`Tenant`,user:`User`,default:`Default`};return{title:e=>i(`title`,e)??e,description:e=>i(`description`,e),groupTitle:(e,t)=>i(`groups.${e}.title`,t)??t,groupDescription:(e,t)=>i(`groups.${e}.description`,t),fieldLabel:(e,t)=>i(`keys.${e}.label`,t)??t,fieldHelp:(e,t)=>i(`keys.${e}.help`,t),fieldPlaceholder:(e,t)=>i(`keys.${e}.placeholder`,t),optionLabel:(e,t,n)=>i(`keys.${e}.options.${t}`,n)??n,actionLabel:(e,t)=>i(`actions.${e}.label`,t)??t,actionConfirm:(e,t)=>i(`actions.${e}.confirmText`,t),actionSuccess:(e,t)=>i(`actions.${e}.successMessage`,t),sourceLabel:e=>a(`sourceLabels.${e}`,o[e]??e)}},[e,t,n,n?.language])}function Y(e,t){if(!e)return!0;let n=e.trim().match(/^\$\{(.+)\}$/);if(!n)return!0;try{return!!Function(`data`,`with (data) { return (${n[1]}); }`)(t)}catch{return!0}}function X(){let e=n(),r=t(),i=e.namespace??``,[a,c]=(0,B.useState)(null),[l,u]=(0,B.useState)(!0),[f,h]=(0,B.useState)(!1),[g,_]=(0,B.useState)(null),[y,b]=(0,B.useState)({}),S=(0,B.useCallback)(async()=>{u(!0),_(null);try{let e=await L(i);c(e),b({})}catch(e){_(e?.message??`Failed to load settings`)}finally{u(!1)}},[i]);(0,B.useEffect)(()=>{i&&S()},[i,S]);let C=(0,B.useMemo)(()=>{let e={};if(!a)return e;for(let[t,n]of Object.entries(a.values))e[t]=n.value;return{...e,...y}},[a,y]),w=(0,B.useMemo)(()=>Object.keys(y),[y]),T=J(i);if(!i)return(0,V.jsx)(`div`,{className:`p-6 text-muted-foreground`,children:`No namespace selected.`});if(l)return(0,V.jsxs)(`div`,{className:`p-6 space-y-3 max-w-3xl`,children:[(0,V.jsx)(p,{className:`h-8 w-1/3`}),(0,V.jsx)(p,{className:`h-4 w-2/3`}),(0,V.jsx)(p,{className:`h-32 w-full`}),(0,V.jsx)(p,{className:`h-32 w-full`})]});if(g)return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,V.jsxs)(A,{variant:`ghost`,size:`sm`,onClick:()=>r(-1),children:[(0,V.jsx)(m,{className:`h-4 w-4 mr-1`}),` Back`]}),(0,V.jsx)(o,{className:`mt-3`,children:(0,V.jsx)(x,{className:`py-8 text-center text-sm text-destructive`,children:g})})]});if(!a)return null;let{manifest:E,values:D}=a,O=E.icon?R(E.icon):null,k=T.title(z(E.label)),j=T.description(E.description),M=async()=>{if(w.length!==0){h(!0);try{let e=await F(i,y);c({...a,values:{...D,...e.values}}),b({}),P.success(`Settings saved`)}catch(e){e?.payload?.error?.code===`SETTINGS_LOCKED`?P.error(`Locked by environment: ${e.payload.error.key}`):P.error(e?.message??`Save failed`)}finally{h(!1)}}},N=async e=>{h(!0);try{let t=await I(i,e,y);t.ok?P.success(t.message??`Action succeeded`):P.error(t.message??`Action failed`)}catch(e){P.error(e?.message??`Action failed`)}finally{h(!1)}};return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl mx-auto pb-32`,children:[(0,V.jsxs)(A,{variant:`ghost`,size:`sm`,onClick:()=>r(`/system/settings`),children:[(0,V.jsx)(m,{className:`h-4 w-4 mr-1`}),` All settings`]}),(0,V.jsxs)(`div`,{className:`mt-3 flex items-start gap-3`,children:[O?(0,V.jsx)(O,{className:`h-7 w-7 mt-0.5 text-muted-foreground`}):null,(0,V.jsxs)(`div`,{className:`flex-1`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`h1`,{className:`text-2xl font-semibold tracking-tight`,children:k}),E.beta?(0,V.jsx)(v,{variant:`secondary`,children:`Beta`}):null]}),j?(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:j}):null]})]}),E.helpText?(0,V.jsx)(`p`,{className:`text-sm text-muted-foreground mt-4 whitespace-pre-wrap`,children:E.helpText}):null,(0,V.jsx)(`div`,{className:`mt-6 divide-y`,children:E.specifiers.filter(e=>Y(e.visible,C)).map((e,t)=>{let n=e.key,r=n?D[n]:void 0;return(0,V.jsx)(K,{spec:e,resolved:r,value:n?n in y?y[n]:r?.value:void 0,onChange:e=>n&&b(t=>({...t,[n]:e})),onAction:e.type===`action_button`?()=>N(e.id??n??`test`):void 0,locked:r?.locked,saving:f,labels:T},(n??`_layout_${t}`)+t)})}),w.length>0?(0,V.jsx)(`div`,{className:`fixed bottom-0 inset-x-0 bg-background/95 backdrop-blur border-t shadow-lg z-40`,children:(0,V.jsxs)(`div`,{className:`max-w-3xl mx-auto px-6 py-3 flex items-center justify-between`,children:[(0,V.jsxs)(`div`,{className:`text-sm text-muted-foreground`,children:[w.length,` unsaved change`,w.length>1?`s`:``]}),(0,V.jsxs)(`div`,{className:`flex gap-2`,children:[(0,V.jsxs)(A,{variant:`ghost`,size:`sm`,onClick:()=>b({}),disabled:f,children:[(0,V.jsx)(d,{className:`h-4 w-4 mr-1`}),` Discard`]}),(0,V.jsxs)(A,{onClick:M,disabled:f,children:[f?(0,V.jsx)(s,{className:`h-4 w-4 mr-1 animate-spin`}):null,`Save changes`]})]})]})}):null]})}export{X as SettingsView};
@@ -0,0 +1 @@
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,m as n,r,y as i}from"./vendor-react-BGDDiZfJ.js";import{d as a}from"./infrastructure-ASGyCRMg.js";import{L as o}from"./framework-Itfj9AWQ.js";import{$n as s,Ai as c,Ba as l,Ei as u,Ir as d,Lr as f,Xa as p,ac as m,ar as h,bi as g,ec as _,ei as v,er as y,nr as b,ns as x,oi as S,rr as C,sc as w,to as T,tr as E}from"./ui-components-DTwfkSDm.js";import"./src-DrSomF2I.js";var D=e(i(),1),O=r();function k(){let e=t(),{appName:r}=n(),i=r?`/apps/${r}`:``,k=o(),A=a(),[j,M]=(0,D.useState)({users:null,orgs:null,positions:null,permissions:null,auditLogs:null}),[N,P]=(0,D.useState)(!0),F=(0,D.useCallback)(async()=>{if(k){P(!0);try{let[e,t,n,r,i]=await Promise.all([k.find(`sys_user`).catch(()=>({data:[]})),k.find(`sys_org`).catch(()=>({data:[]})),k.find(`sys_position`).catch(()=>({data:[]})),k.find(`sys_permission`).catch(()=>({data:[]})),k.find(`sys_audit_log`).catch(()=>({data:[]}))]);M({users:e.data?.length??0,orgs:t.data?.length??0,positions:n.data?.length??0,permissions:r.data?.length??0,auditLogs:i.data?.length??0})}catch{}finally{P(!1)}}},[k]);(0,D.useEffect)(()=>{F()},[F]);let I=[{title:`Applications`,description:`Manage all configured applications`,icon:p,href:`${i}/system/apps`,countLabel:``,count:null},{title:`Metadata`,description:`Browse and edit every metadata type the platform exposes`,icon:x,href:`${i}/component/metadata/directory`,countLabel:``,count:null},{title:`Datasources`,description:`Connect external databases and sync their tables in as objects`,icon:m,href:`${i}/component/metadata/resource?type=datasource`,countLabel:``,count:null}],L=[{title:`Users`,description:`Manage system users and accounts`,icon:d,href:`${i}/system/users`,countLabel:`users`,count:j.users},{title:`Organizations`,description:`Manage organizations and teams`,icon:_,href:`${i}/system/organizations`,countLabel:`organizations`,count:j.orgs},{title:`Positions`,description:`Configure positions and access levels`,icon:g,href:`${i}/system/positions`,countLabel:`positions`,count:j.positions},{title:`Permissions`,description:`Manage permission rules and assignments`,icon:T,href:`${i}/system/permissions`,countLabel:`permissions`,count:j.permissions},{title:`Audit Log`,description:`View system activity and changes`,icon:c,href:`${i}/system/audit-log`,countLabel:`entries`,count:j.auditLogs},{title:`AI Approvals`,description:`Review actions AI agents propose before they execute`,icon:w,href:`${i}/system/ai-approvals`,countLabel:``,count:null},{title:`App Marketplace`,description:`Browse and install approved apps from the ObjectStack catalog`,icon:S,href:`${i}/system/marketplace`,countLabel:``,count:null,adminOnly:!0},{title:`Settings`,description:`Configure mail, branding, feature flags, and more`,icon:u,href:`${i}/system/settings`,countLabel:``,count:null},{title:`Developer`,description:`API console, flow runs, and public form management`,icon:v,href:`${i}/developer`,countLabel:``,count:null},{title:`Profile`,description:`View and edit your account settings`,icon:f,href:`${i}/system/profile`,countLabel:``,count:null}],R=[...I,...L].filter(e=>!e.adminOnly||A);return(0,O.jsxs)(`div`,{className:`flex flex-col gap-6 p-4 sm:p-6`,children:[(0,O.jsxs)(`div`,{className:`min-w-0`,children:[(0,O.jsx)(`h1`,{className:`text-xl sm:text-2xl font-bold tracking-tight`,children:`System Settings`}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:`Manage applications, users, positions, permissions, and system configuration`})]}),N&&(0,O.jsxs)(`div`,{className:`flex items-center gap-2 text-sm text-muted-foreground`,role:`status`,"aria-live":`polite`,children:[(0,O.jsx)(l,{className:`h-4 w-4 animate-spin`,"aria-hidden":`true`}),`Loading statistics...`]}),(0,O.jsx)(`div`,{className:`grid gap-4 sm:grid-cols-2 lg:grid-cols-3`,children:R.map(t=>{let n=t.icon;return(0,O.jsxs)(s,{className:`cursor-pointer transition-colors hover:bg-accent/50`,onClick:()=>e(t.href),"data-testid":`hub-card-${t.title.toLowerCase().replace(/\s+/g,`-`)}`,role:`link`,tabIndex:0,"aria-label":`${t.title}: ${t.description}`,onKeyDown:n=>{(n.key===`Enter`||n.key===` `)&&(n.preventDefault(),e(t.href))},children:[(0,O.jsxs)(b,{className:`flex flex-row items-center gap-3 pb-2`,children:[(0,O.jsx)(`div`,{className:`flex h-10 w-10 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary`,children:(0,O.jsx)(n,{className:`h-5 w-5`})}),(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsx)(C,{className:`text-base`,children:t.title}),(0,O.jsx)(E,{className:`text-xs`,children:t.description})]})]}),(0,O.jsx)(y,{className:`pt-0`,children:t.count!==null&&(0,O.jsxs)(h,{variant:`secondary`,children:[t.count,` `,t.countLabel]})})]},t.title)})})]})}export{k as SystemHubPage};
@@ -1 +1 @@
1
- import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,h as n,m as r,y as i}from"./vendor-react-BGDDiZfJ.js";import{J as a,L as o,R as s,l as c}from"./framework-CBCX6Urh.js";import{Nt as l}from"./ui-components-BOOpjWsQ.js";import{r as u}from"./vendor-ui-utils-BzQBRdq3.js";import"./AdapterProvider-G7o889LL.js";import{a as d}from"./MetadataProvider-seOmvY8N.js";import{o as f,r as p}from"./useRecordApprovals-jo_LH43z.js";import{n as m}from"./ui-layout-vWAZODrs.js";import{r as h}from"./appRoute-1sYdkwBz.js";var g=e(i(),1);function _({objectName:e,objectLabel:n,dataSource:i,onEdit:o,onRefresh:s,onConfirm:l,onToast:d}){let f=t(),{appName:p}=r(),{t:m}=c(),h=`/apps/${p}`,{execute:_,loading:v,error:y,runner:b}=a({context:{objectName:e,objectLabel:n||e,baseUrl:h},onConfirm:l,onToast:d});return(0,g.useEffect)(()=>{b.registerHandler(`create`,async()=>(o?.(null),{success:!0})),b.registerHandler(`delete`,async t=>{let r=Array.isArray(t.params?.records)?t.params.records.filter(e=>e?.id!=null):null;if(r&&r.length>1){let t=await Promise.allSettled(r.map(t=>i.delete(e,t.id))),a=t.filter(e=>e.status===`rejected`).length,o=t.length-a;return s?.(),a===0?(u.success(m(`objectActions.bulkDeleteSuccess`,{count:o,label:n||e,defaultValue:`Deleted ${o} ${n||e} records`})),{success:!0,reload:!0,silent:!0}):(u.error(m(`objectActions.bulkDeletePartial`,{succeeded:o,failed:a,defaultValue:`${o} deleted, ${a} failed`})),{success:!1})}let a=t.params?.recordId??t.params?.record?.id??r?.[0]?.id??t.recordId;if(!a)return{success:!1,error:m(`objectActions.noRecordId`)};try{return await i.delete(e,a),s?.(),u.success(m(`objectActions.deleteSuccess`,{label:n||e})),{success:!0,reload:!0,silent:!0}}catch(t){return u.error(m(`objectActions.deleteFailed`,{label:n||e}),{description:t.message}),{success:!1}}}),b.registerHandler(`navigate`,async e=>{let t=e.params?.url||e.url;return t&&f(t.startsWith(`/`)?t:`${h}/${t}`),{success:!0}}),b.registerHandler(`refresh`,async()=>(s?.(),{success:!0,reload:!0}))},[b,e,i,o,s,f,h,m,n]),{execute:_,create:(0,g.useCallback)(()=>{o?.(null)},[o]),deleteRecord:(0,g.useCallback)(async e=>_({type:`delete`,confirmText:m(`objectActions.deleteConfirm`),params:{recordId:e}}),[_,m]),navigateToView:(0,g.useCallback)(t=>{f(`${h}/${e}/view/${t}`)},[f,h,e]),navigateToRecord:(0,g.useCallback)(t=>{f(`${h}/${e}/record/${encodeURIComponent(t)}`)},[f,h,e]),loading:v,error:y}}function v(e){return e==null?[]:Array.isArray(e)?e:[e]}function y(e,t){let{alias:r,value:i=`1`,replace:a=!0}=t??{},[o,s]=n(),c=(0,g.useMemo)(()=>v(r),[r]),l=(0,g.useCallback)(t=>t.get(e)===i||c.some(e=>t.get(e)===i),[e,i,c]),u=l(o),d=(0,g.useCallback)(t=>{if(t===l(o))return;let n=new URLSearchParams(o);if(t){n.set(e,i);for(let e of c)n.delete(e)}else{n.delete(e);for(let e of c)n.delete(e)}s(n,{replace:a})},[l,o,s,e,i,c,a]);return{open:u,setOpen:d,openOverlay:(0,g.useCallback)(()=>d(!0),[d]),closeOverlay:(0,g.useCallback)(()=>d(!1),[d]),toggleOverlay:(0,g.useCallback)(()=>{s(t=>{let n=new URLSearchParams(t);if(l(n)){n.delete(e);for(let e of c)n.delete(e)}else{n.set(e,i);for(let e of c)n.delete(e)}return n},{replace:a})},[s,l,e,i,c,a])}}var b=20;function x(e,t=``){let{href:n,external:r}=m(e,t);return r?n:!n||n===`#`?``:n}function S(e){return`nav:${e}`}function C(){let{favorites:e,addFavorite:t,removeFavorite:n,setPinned:r,pinnedNavIds:i}=p(),a=(0,g.useCallback)((e,i,a,o)=>{let s=S(e);i?(a&&t({id:s,label:a.label,href:x(a,o??``),type:`nav`,navId:e,pinned:!0}),r(s,!0)):n(s)},[t,n,r]),o=(0,g.useCallback)(e=>i.has(e),[i]),s=(0,g.useCallback)(e=>{if(i.size===0){let t=!1;for(let n of e)if(n.pinned){t=!0;break}if(!t)return e}let t=0,n=e=>e.map(e=>{let r=i.has(e.id)&&t<b;r&&t++;let a=e.children?.length?n(e.children):e.children;return r!==(e.pinned??!1)||a!==e.children?{...e,pinned:r,children:a}:e});return n(e)},[i]),c=(0,g.useCallback)(()=>{for(let t of e)t.type===`nav`&&n(t.id)},[e,n]);return{pinnedIds:(0,g.useMemo)(()=>Array.from(i),[i]),togglePin:a,isPinned:o,applyPins:s,clearPins:c}}var w=768,T=1024;function ee(){let{setOpen:e,isMobile:t}=l(),n=(0,g.useRef)(e);(0,g.useEffect)(()=>{n.current=e},[e]),(0,g.useEffect)(()=>{if(t)return;let e=!1;function r(){let t=window.innerWidth,r=t>=w&&t<T;r&&!e&&n.current(!1),e=r}return r(),window.addEventListener(`resize`,r),()=>window.removeEventListener(`resize`,r)},[t])}function te(e,t){return{name:e.name,label:e.label,pluralLabel:e.pluralLabel,description:e.description,icon:e.icon,group:e.group,sortOrder:e.sortOrder,enabled:e.enabled,fields:t,relationships:e.relationships}}function ne(e){return{name:e.name,label:e.label,type:e.type,group:e.group,description:e.description,required:e.required,unique:e.unique,readonly:e.readonly,hidden:e.hidden,defaultValue:e.defaultValue,placeholder:e.placeholder,options:e.options,externalId:e.externalId,trackHistory:e.trackHistory,indexed:e.indexed,referenceTo:e.referenceTo,formula:e.formula,sortOrder:e.sortOrder}}var re=class{adapter;constructor(e){this.adapter=e}async getItems(e){let t=await this.adapter.getClient().meta.getItems(e);return t&&typeof t==`object`&&`items`in t&&Array.isArray(t.items)?t.items:[]}async saveMetadataItem(e,t,n){await this.adapter.getClient().meta.saveItem(e,t,n),this.adapter.invalidateCache(`${e}:${t}`)}async deleteMetadataItem(e,t){await this.adapter.getClient().meta.saveItem(e,t,{name:t,enabled:!1,_deleted:!0}),this.adapter.invalidateCache(`${e}:${t}`)}async saveObject(e,t){let n=this.adapter.getClient(),r=te(e,t);await n.meta.saveItem(`object`,e.name,r),this.adapter.invalidateCache(`object:${e.name}`)}async deleteObject(e){await this.adapter.getClient().meta.saveItem(`object`,e,{name:e,enabled:!1,_deleted:!0}),this.adapter.invalidateCache(`object:${e}`)}async saveFields(e,t){let n=this.adapter.getClient(),r={};try{let t=await n.meta.getItem(`object`,e);r=t?.item??t??{}}catch{}let i={...r,name:e,fields:t.map(ne)};await n.meta.saveItem(`object`,e,i),this.adapter.invalidateCache(`object:${e}`)}static diffObjects(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e]));for(let[e,t]of r)if(!n.has(e))return{type:`create`,object:t};for(let[e,t]of n)if(!r.has(e))return{type:`delete`,object:t};for(let[e,t]of r){let r=n.get(e);if(r&&JSON.stringify(r)!==JSON.stringify(t))return{type:`update`,object:t}}return null}static diffFields(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e]));for(let[e,t]of r)if(!n.has(e))return{type:`create`,field:t};for(let[e,t]of n)if(!r.has(e))return{type:`delete`,field:t};for(let[e,t]of r){let r=n.get(e);if(r&&JSON.stringify(r)!==JSON.stringify(t))return{type:`update`,field:t}}return null}};function ie(){let e=o();return(0,g.useMemo)(()=>e?new re(e):null,[e])}var E=0;function D(e=`nav`){return`${e}_${Date.now()}_${++E}`}function O(e,t){return[...e,t]}function k(e,t,n){return e.filter(e=>!(e.type===t&&(t===`page`&&e.pageName===n||t===`dashboard`&&e.dashboardName===n))).map(e=>e.children&&e.children.length>0?{...e,children:k(e.children,t,n)}:e)}function A(e,t,n,r){return e.map(e=>{let i=e;return t===`page`&&e.type===`page`&&e.pageName===n?i={...e,pageName:r}:t===`dashboard`&&e.type===`dashboard`&&e.dashboardName===n&&(i={...e,dashboardName:r}),i.children&&i.children.length>0?{...i,children:A(i.children,t,n,r)}:i})}function j(e,t){return e.length===t.length?e===t?!0:JSON.stringify(e)===JSON.stringify(t):!1}function ae(e){return typeof e==`string`&&e.startsWith(`sys_`)}function oe(e){if(!e||typeof e!=`object`)return!1;let t=e;return t._packageId!=null||t._provenance===`package`?!0:ae(t.name)}function M(e){if(!e||typeof e!=`object`)return!1;let t=e,n=t._lock??t.protection?.lock;return n!==`full`&&n!==`no-overlay`}function se(){let e=o(),{apps:t,refresh:n}=s(),{t:r}=c(),i=(0,g.useRef)(e);i.current=e;let a=(0,g.useRef)(n);a.current=n;let l=(0,g.useCallback)(async(e,t)=>{let n=i.current?.getClient();n&&await n.meta.saveItem(`app`,e,t),await a.current?.()},[]),d=(0,g.useCallback)(e=>h(t,e),[t]),f=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=O(a,{id:D(`nav_page`),type:`page`,label:n||t,pageName:t,icon:`FileText`}),s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.addedPage`,{name:n||t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),p=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=O(a,{id:D(`nav_dash`),type:`dashboard`,label:n||t,dashboardName:t,icon:`LayoutDashboard`}),s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.addedDashboard`,{name:n||t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),m=(0,g.useCallback)(async(e,t)=>{let n=d(e);if(!n)return;let i=n.navigation??[],a=k(i,`page`,t);if(j(a,i))return;let o={...n,navigation:a};try{await l(e,o),u.success(r(`navigationSync.removedPage`,{name:t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...n,navigation:i}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),_=(0,g.useCallback)(async(e,t)=>{let n=d(e);if(!n)return;let i=n.navigation??[],a=k(i,`dashboard`,t);if(j(a,i))return;let o={...n,navigation:a};try{await l(e,o),u.success(r(`navigationSync.removedDashboard`,{name:t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...n,navigation:i}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),v=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=A(a,`page`,t,n);if(j(o,a))return;let s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.renamedPage`,{oldName:t,newName:n}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),y=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=A(a,`dashboard`,t,n);if(j(o,a))return;let s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.renamedDashboard`,{oldName:t,newName:n}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),b=e=>e&&typeof e==`object`&&`name`in e?e.name:void 0;return{syncPageCreated:f,syncDashboardCreated:p,syncPageDeleted:m,syncDashboardDeleted:_,syncPageRenamed:v,syncDashboardRenamed:y,syncPageCreatedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await f(t,e,n)}},[t,f]),syncDashboardCreatedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await p(t,e,n)}},[t,p]),syncPageDeletedAllApps:(0,g.useCallback)(async e=>{for(let n of t){let t=b(n);!t||!M(n)||await m(t,e)}},[t,m]),syncDashboardDeletedAllApps:(0,g.useCallback)(async e=>{for(let n of t){let t=b(n);!t||!M(n)||await _(t,e)}},[t,_]),syncPageRenamedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await v(t,e,n)}},[t,v]),syncDashboardRenamedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await y(t,e,n)}},[t,y])}}function N(){let{pages:e,dashboards:t,apps:n,getTypeStatus:r}=s(),i=o(),a=(0,g.useRef)(i);a.current=i;let c=d(),{syncPageCreated:l,syncDashboardCreated:u,syncPageDeleted:f,syncDashboardDeleted:p}=se(),m=(0,g.useRef)(null),h=(0,g.useRef)(null),_=(0,g.useRef)(0),v=(0,g.useRef)(!1),y=e=>e&&typeof e==`object`&&`name`in e?e.name:void 0;return(0,g.useEffect)(()=>{if(v.current)return;if(c){m.current=null,h.current=null;return}if(r&&(r(`page`)!==`ready`||r(`dashboard`)!==`ready`))return;let i=e=>new Set(e.filter(e=>!oe(e)).map(e=>e?.name).filter(e=>typeof e==`string`&&e.length>0)),a=i(e??[]),o=i(t??[]),s=m.current,d=h.current;if(s===null||d===null){m.current=a,h.current=o;return}let g=[...a].filter(e=>!s.has(e)),b=[...s].filter(e=>!a.has(e)),x=[...o].filter(e=>!d.has(e)),S=[...d].filter(e=>!o.has(e));if(g.length===0&&b.length===0&&x.length===0&&S.length===0){m.current=a,h.current=o;return}let C=++_.current;v.current=!0;let w=!1;return(async()=>{try{for(let e of n){if(w||_.current!==C)break;let t=y(e);if(!(!t||!M(e))){for(let e of g){if(w)break;await l(t,e)}for(let e of b){if(w)break;await f(t,e)}for(let e of x){if(w)break;await u(t,e)}for(let e of S){if(w)break;await p(t,e)}}}}finally{_.current===C&&(m.current=a,h.current=o,v.current=!1)}})(),()=>{w=!0}},[e,t,n,c,r,l,u,f,p]),null}var P=new Set([`view`,`record`,`page`,`dashboard`,`design`,`report`]);function F(e){return e.replace(/[-_]/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function I(e){try{return decodeURIComponent(e)}catch{return e}}function ce({pathname:e,appName:t,objects:n=[],basePathSegment:r=`apps`,disabled:i=!1}){let{addRecentItem:a}=f(),o=(0,g.useRef)(n);o.current=n,(0,g.useEffect)(()=>{if(i||!t)return;let n=e.split(`/`).filter(Boolean);if(n[0]!==r||n[1]!==t)return;let s=n[2],c=n[3],l=`/${r}/${t}`;if(s===`metadata`){let e=n[3],t=n[4];e&&t&&t!==`new`&&a({id:`metadata:${e}:${I(t)}`,label:I(t),href:`${l}/metadata/${e}/${t}`,type:`metadata`});return}if(s&&!P.has(s)){let e=o.current.find(e=>e.name===s);e&&a({id:`object:${e.name}`,label:e.label||e.name,href:`${l}/${e.name}`,type:`object`});return}if(c)switch(s){case`dashboard`:a({id:`dashboard:${c}`,label:F(c),href:`${l}/dashboard/${c}`,type:`dashboard`});break;case`page`:a({id:`page:${c}`,label:F(c),href:`${l}/page/${c}`,type:`page`});break;case`report`:a({id:`report:${c}`,label:F(c),href:`${l}/report/${c}`,type:`report`});break;default:break}},[e,t,r,i])}function le(e){return{status:`drafted`,drafted:e.items,...e.summary?{summary:e.summary}:{},...e.packageId?{packageId:e.packageId}:{},...e.autoPublishable?{autoPublishable:!0}:{},...e.failedCount?{failed:Array.from({length:e.failedCount},()=>null)}:{},...e.materialized?{materialized:!0}:{},...e.verification?{verification:e.verification}:{},...e.issues&&e.issues.length?{issues:e.issues}:{},...e.nextSteps&&e.nextSteps.length?{nextSteps:e.nextSteps}:{}}}function ue(e){return{status:`blueprint_proposed`,...e.summary?{summary:e.summary}:{},counts:e.counts,questions:e.questions,...e.targetApp?{targetApp:e.targetApp}:{},blueprint:{objects:e.objects.map(e=>({name:e.name,...e.label?{label:e.label}:{},fields:Array.from({length:e.fieldCount},()=>null)})),assumptions:e.assumptions}}}var L=`objectstack:ai-chat-conversation-id`,R=`objectstack:ai-chat-messages`;function z(e,t){return t?`${L}:${e}:${t}`:`${L}:${e}`}function B(e){try{return localStorage.getItem(e)??void 0}catch{return}}function V(e,t){try{t?localStorage.setItem(e,t):localStorage.removeItem(e)}catch{}}function H(e){return`${R}:${e}`}function U(e){try{let t=localStorage.getItem(H(e));if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`&&(e.role===`user`||e.role===`assistant`||e.role===`system`)&&Array.isArray(e.parts)):[]}catch{return[]}}function W(e,t){if(e)try{if(t.length===0){localStorage.removeItem(H(e));return}localStorage.setItem(H(e),JSON.stringify(t))}catch{}}function de(e){return e.map(e=>{let t=[];if(e.content&&t.push({type:`text`,text:e.content}),e.role===`assistant`)for(let n of e.toolInvocations??[]){let e=n.draftReview?le(n.draftReview):n.proposedPlan?ue(n.proposedPlan):void 0;t.push({type:`tool-${n.toolName}`,toolCallId:n.toolCallId,toolName:n.toolName,state:n.state??(n.errorText?`output-error`:`output-available`),...n.errorText?{errorText:n.errorText}:{},...e===void 0?{}:{output:e}})}if(t.length!==0)return{id:e.id,role:e.role,parts:t}}).filter(e=>!!e)}function G(e){return typeof e==`string`?e?[{type:`text`,text:e}]:[]:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e?{type:`text`,text:e}:void 0;if(e&&typeof e==`object`&&`type`in e&&typeof e.type==`string`)return e;if(e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`)return{type:`text`,text:e.text}}).filter(e=>!!e):e&&typeof e==`object`&&`parts`in e&&Array.isArray(e.parts)?G(e.parts):[]}function fe(e,t){for(let n of G(e)){let e=typeof n.toolCallId==`string`?n.toolCallId:void 0;if(!e)continue;let r=t.get(e);if(!r)continue;let i=n.output??n.result;if(i===void 0)continue;r.output=i;let a=n.errorText;r.state=n.isError||typeof a==`string`?`output-error`:`output-available`,typeof a==`string`&&(r.errorText=a)}}function K(e){if(!e)return[];let t=[],n=new Map;return e.forEach((e,r)=>{let i=e.role;if(i===`tool`){fe(e.content,n);return}if(i!==`user`&&i!==`assistant`&&i!==`system`)return;let a=G(e.content);if(a.length!==0){if(i===`assistant`)for(let e of a){e.type===`tool-call`&&typeof e.toolName==`string`&&e.toolName&&(e.type=`tool-${e.toolName}`);let t=typeof e.toolCallId==`string`?e.toolCallId:void 0;t&&(e.type===`tool-call`||e.type.startsWith(`tool-`))&&n.set(t,e)}t.push({id:e.id??`msg-${r}`,role:i,parts:a})}}),t}function q(e){if(!(typeof e!=`string`||!e))try{let t=JSON.parse(e);return Array.isArray(t)?t:void 0}catch{return}}function pe(e){return e?e.map(e=>{let t=e.id,n=typeof e.content==`string`?e.content:``;if(e.role===`assistant`){let r=q(e.tool_calls);if(r&&r.length>0){let e=[];return n&&e.push({type:`text`,text:n}),e.push(...r),{id:t,role:`assistant`,content:e}}return{id:t,role:`assistant`,content:n}}if(e.role===`tool`){let r=q(e.content);return r&&r.length>0&&r[0]?.type===`tool-result`?{id:t,role:`tool`,content:r}:{id:t,role:`tool`,content:[{type:`tool-result`,toolCallId:e.tool_call_id??``,toolName:`unknown`,output:{type:`text`,value:n}}]}}return{id:t,role:e.role,content:n}}):[]}async function J(e,t){let n=await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{credentials:`include`});if(n.status===404||n.status===403)return null;if(!n.ok)throw Error(`GET conversation failed: ${n.status}`);return await n.json()}async function Y(e){let t=await fetch(`${e}/conversations`,{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok)throw Error(`POST conversation failed: ${t.status}`);return await t.json()}async function me(e,t){await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{method:`DELETE`,credentials:`include`}).catch(()=>{})}function he(e){let{userId:t,scope:n,apiBase:r,activeId:i,forceNew:a,resumeMode:o=`resume`}=e,[s,c]=(0,g.useState)(void 0),[l,u]=(0,g.useState)([]),[d,f]=(0,g.useState)(!!t),p=(0,g.useRef)(!0),m=(0,g.useRef)(void 0),h=(0,g.useRef)(void 0);(0,g.useEffect)(()=>(p.current=!0,()=>{p.current=!1}),[]),(0,g.useEffect)(()=>{if(!t){c(void 0),u([]),f(!1),m.current=void 0,h.current=void 0;return}let e=h.current!==n;if(!i&&!a&&!e&&m.current===t&&s)return;let l=!1,d=z(t,n);return!i&&(a||e&&m.current===t)&&(c(void 0),u([])),f(!0),(async()=>{try{if(i){let e=await J(r,i);if(l)return;if(e){V(d,e.id),c(e.id);let r=K(e.messages);u(r.length>0?r:U(e.id)),m.current=t,h.current=n;return}V(d,void 0),W(i,[])}else if(!a){let e=B(d);if(e){let i=await J(r,e);if(l)return;if(i){let e=K(i.messages);if(o!==`fresh`||e.length===0){c(i.id),u(o===`fresh`?[]:e.length>0?e:U(i.id)),m.current=t,h.current=n;return}}else V(d,void 0),W(e,[])}}let e=await Y(r);if(l)return;V(d,e.id),c(e.id),u(K(e.messages)),m.current=t,h.current=n}catch{l||(c(void 0),u([]))}finally{l||f(!1)}})(),()=>{l=!0}},[t,n,r,i,a,o]);let _=(0,g.useCallback)(async()=>{if(!t)return;let e=z(t,n);f(!0);try{s&&await me(r,s),W(s,[]),V(e,void 0);let t=await Y(r);if(V(e,t.id),W(t.id,[]),!p.current)return;c(t.id),u([])}catch{p.current&&(c(void 0),u([]))}finally{p.current&&f(!1)}},[s,t,n,r]),v=(0,g.useCallback)(async()=>{if(!t)return;let e=z(t,n);f(!0);try{let i=await Y(r);if(V(e,i.id),W(i.id,[]),!p.current)return;c(i.id),u([]),m.current=t,h.current=n}catch{}finally{p.current&&f(!1)}},[t,n,r]);return{conversationId:s,conversationScope:h.current,initialMessages:l,isLoading:d,reset:_,startNew:v}}var ge=new Set([`new chat`,`new conversation`,`untitled`,`新对话`]);function _e(e){let t=e?.trim().toLowerCase();return!t||ge.has(t)}function ve(e){let t=e.messages;if(!t||t.length===0)return;for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.role===`user`){let e=X(n.content);if(e)return e}}let n=t[t.length-1];return X(n?.content)}function X(e){if(typeof e==`string`)return e.slice(0,140);if(e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`)return e.text.slice(0,140);if(e&&typeof e==`object`&&`parts`in e&&Array.isArray(e.parts))return X(e.parts);if(Array.isArray(e)){let t=e.map(e=>typeof e==`string`?e:e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`?e.text:``).join(``);return t?t.slice(0,140):void 0}}function Z(e){let t=e.title?.trim(),n=ve(e)??X(e.preview);return{id:e.id,title:_e(t)?void 0:t,agentId:e.agentId,createdAt:e.createdAt,updatedAt:e.updatedAt,preview:n}}async function ye(e,t){let n=await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{credentials:`include`});if(!n.ok)return;let r=await n.json();return Z(`conversation`in r&&r.conversation?r.conversation:r)}function Q(e){let{userId:t,apiBase:n,limit:r=50,refreshKey:i}=e,[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(!!t),[l,u]=(0,g.useState)(void 0),[d,f]=(0,g.useState)(0),p=(0,g.useCallback)(async()=>{f(e=>e+1)},[]),m=(0,g.useCallback)(async e=>{try{await fetch(`${n}/conversations/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`})}finally{o(t=>t.filter(t=>t.id!==e))}},[n]),h=(0,g.useCallback)(async(e,t)=>{let r=t.trim();o(t=>t.map(t=>t.id===e?{...t,title:r||void 0}:t));let i=await fetch(`${n}/conversations/${encodeURIComponent(e)}`,{method:`PATCH`,credentials:`include`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:r})});if(!i.ok)throw f(e=>e+1),Error(`PATCH conversation failed: ${i.status}`)},[n]);return(0,g.useEffect)(()=>{if(!t){o([]),c(!1),u(void 0);return}let e=!1;return c(!0),u(void 0),(async()=>{try{let t=await fetch(`${n}/conversations?limit=${encodeURIComponent(String(r))}`,{credentials:`include`});if(!t.ok)throw Error(`GET conversations failed: ${t.status}`);let i=await t.json(),a=Array.isArray(i)?i:i.conversations??i.items??[];if(e)return;let s=a.map(Z).sort((e,t)=>(t.updatedAt??``).localeCompare(e.updatedAt??``));o(s);let c=s.filter(e=>!e.title&&!e.preview).slice(0,20);if(c.length>0){let t=await Promise.all(c.map(e=>ye(n,e.id).catch(()=>void 0)));if(e)return;let r=new Map(t.filter(e=>!!(e?.preview||e?.title)).map(e=>[e.id,e]));r.size>0&&o(e=>e.map(e=>{let t=r.get(e.id);return t?{...e,title:e.title??t.title,preview:e.preview??t.preview}:e}))}}catch(t){if(e)return;u(t instanceof Error?t:Error(String(t))),o([])}finally{e||c(!1)}})(),()=>{e=!0}},[t,n,r,d,i]),{conversations:a,isLoading:s,error:l,refetch:p,remove:m,rename:h}}async function be(e){let t=await fetch(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(e)}`,{credentials:`include`,headers:{Accept:`application/json`},cache:`no-store`});if(!t.ok)throw Error(`_drafts HTTP ${t.status}`);let n=await t.json(),r=Array.isArray(n)?n:n?.drafts??n?.data?.drafts??[];return Array.isArray(r)?r.length:0}function xe(e){if(!e||e.length===0)return!1;let t=e[e.length-1];return!t||t.role!==`assistant`?!1:t.parts.some(e=>e.type===`text`&&String(e.text??``).trim().length>0)}function Se(e){let{chatApi:t,conversationId:n}=e,[r,i]=(0,g.useState)(!1),a=(0,g.useRef)(void 0);return{errorSuppressed:r,handleChatError:(0,g.useCallback)(async e=>{if(e?.notSent){i(!1);return}let r=t?.replace(/\/agents\/[^/]+\/chat$/,``);if(!n||!r){i(!1);return}try{let e=K((await J(r,n))?.messages);if(xe(e)&&a.current){a.current(e),i(!0);return}}catch{}i(!1)},[n,t]),setMessagesRef:a,resetSuppression:(0,g.useCallback)(()=>i(!1),[])}}function Ce(e){if(typeof e.content==`string`)return e.content;let t=e.parts;return Array.isArray(t)?t.map(e=>e&&typeof e==`object`&&e.type===`text`?String(e.text??``):``).join(` `):``}function $(e){if(Array.isArray(e))for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`user`)continue;let r=Ce(n);if(r.trim())return/[一-鿿]/.test(r)?`zh-CN`:void 0}}function we(e){return($(e)??``).toLowerCase().startsWith(`zh`)}export{y as _,Q as a,de as c,W as d,ce as f,C as g,ee as h,be as i,K as l,ie as m,we as n,pe as o,N as p,Se as r,J as s,$ as t,he as u,_ as v};
1
+ import{o as e}from"./rolldown-runtime-DAXXjFlN.js";import{f as t,h as n,m as r,y as i}from"./vendor-react-BGDDiZfJ.js";import{J as a,L as o,R as s,l as c}from"./framework-Itfj9AWQ.js";import{Nt as l}from"./ui-components-DTwfkSDm.js";import{r as u}from"./vendor-ui-utils-BzQBRdq3.js";import"./AdapterProvider-BdI1AL8R.js";import{a as d}from"./MetadataProvider-C9mhBo6s.js";import{o as f,r as p}from"./useRecordApprovals-Bo4WTft1.js";import{n as m}from"./ui-layout-BHkbFI8f.js";import{r as h}from"./appRoute-1sYdkwBz.js";var g=e(i(),1);function _({objectName:e,objectLabel:n,dataSource:i,onEdit:o,onRefresh:s,onConfirm:l,onToast:d}){let f=t(),{appName:p}=r(),{t:m}=c(),h=`/apps/${p}`,{execute:_,loading:v,error:y,runner:b}=a({context:{objectName:e,objectLabel:n||e,baseUrl:h},onConfirm:l,onToast:d});return(0,g.useEffect)(()=>{b.registerHandler(`create`,async()=>(o?.(null),{success:!0})),b.registerHandler(`delete`,async t=>{let r=Array.isArray(t.params?.records)?t.params.records.filter(e=>e?.id!=null):null;if(r&&r.length>1){let t=await Promise.allSettled(r.map(t=>i.delete(e,t.id))),a=t.filter(e=>e.status===`rejected`).length,o=t.length-a;return s?.(),a===0?(u.success(m(`objectActions.bulkDeleteSuccess`,{count:o,label:n||e,defaultValue:`Deleted ${o} ${n||e} records`})),{success:!0,reload:!0,silent:!0}):(u.error(m(`objectActions.bulkDeletePartial`,{succeeded:o,failed:a,defaultValue:`${o} deleted, ${a} failed`})),{success:!1})}let a=t.params?.recordId??t.params?.record?.id??r?.[0]?.id??t.recordId;if(!a)return{success:!1,error:m(`objectActions.noRecordId`)};try{return await i.delete(e,a),s?.(),u.success(m(`objectActions.deleteSuccess`,{label:n||e})),{success:!0,reload:!0,silent:!0}}catch(t){return u.error(m(`objectActions.deleteFailed`,{label:n||e}),{description:t.message}),{success:!1}}}),b.registerHandler(`navigate`,async e=>{let t=e.params?.url||e.url;return t&&f(t.startsWith(`/`)?t:`${h}/${t}`),{success:!0}}),b.registerHandler(`refresh`,async()=>(s?.(),{success:!0,reload:!0}))},[b,e,i,o,s,f,h,m,n]),{execute:_,create:(0,g.useCallback)(()=>{o?.(null)},[o]),deleteRecord:(0,g.useCallback)(async e=>_({type:`delete`,confirmText:m(`objectActions.deleteConfirm`),params:{recordId:e}}),[_,m]),navigateToView:(0,g.useCallback)(t=>{f(`${h}/${e}/view/${t}`)},[f,h,e]),navigateToRecord:(0,g.useCallback)(t=>{f(`${h}/${e}/record/${encodeURIComponent(t)}`)},[f,h,e]),loading:v,error:y}}function v(e){return e==null?[]:Array.isArray(e)?e:[e]}function y(e,t){let{alias:r,value:i=`1`,replace:a=!0}=t??{},[o,s]=n(),c=(0,g.useMemo)(()=>v(r),[r]),l=(0,g.useCallback)(t=>t.get(e)===i||c.some(e=>t.get(e)===i),[e,i,c]),u=l(o),d=(0,g.useCallback)(t=>{if(t===l(o))return;let n=new URLSearchParams(o);if(t){n.set(e,i);for(let e of c)n.delete(e)}else{n.delete(e);for(let e of c)n.delete(e)}s(n,{replace:a})},[l,o,s,e,i,c,a]);return{open:u,setOpen:d,openOverlay:(0,g.useCallback)(()=>d(!0),[d]),closeOverlay:(0,g.useCallback)(()=>d(!1),[d]),toggleOverlay:(0,g.useCallback)(()=>{s(t=>{let n=new URLSearchParams(t);if(l(n)){n.delete(e);for(let e of c)n.delete(e)}else{n.set(e,i);for(let e of c)n.delete(e)}return n},{replace:a})},[s,l,e,i,c,a])}}var b=20;function x(e,t=``){let{href:n,external:r}=m(e,t);return r?n:!n||n===`#`?``:n}function S(e){return`nav:${e}`}function C(){let{favorites:e,addFavorite:t,removeFavorite:n,setPinned:r,pinnedNavIds:i}=p(),a=(0,g.useCallback)((e,i,a,o)=>{let s=S(e);i?(a&&t({id:s,label:a.label,href:x(a,o??``),type:`nav`,navId:e,pinned:!0}),r(s,!0)):n(s)},[t,n,r]),o=(0,g.useCallback)(e=>i.has(e),[i]),s=(0,g.useCallback)(e=>{if(i.size===0){let t=!1;for(let n of e)if(n.pinned){t=!0;break}if(!t)return e}let t=0,n=e=>e.map(e=>{let r=i.has(e.id)&&t<b;r&&t++;let a=e.children?.length?n(e.children):e.children;return r!==(e.pinned??!1)||a!==e.children?{...e,pinned:r,children:a}:e});return n(e)},[i]),c=(0,g.useCallback)(()=>{for(let t of e)t.type===`nav`&&n(t.id)},[e,n]);return{pinnedIds:(0,g.useMemo)(()=>Array.from(i),[i]),togglePin:a,isPinned:o,applyPins:s,clearPins:c}}var w=768,T=1024;function ee(){let{setOpen:e,isMobile:t}=l(),n=(0,g.useRef)(e);(0,g.useEffect)(()=>{n.current=e},[e]),(0,g.useEffect)(()=>{if(t)return;let e=!1;function r(){let t=window.innerWidth,r=t>=w&&t<T;r&&!e&&n.current(!1),e=r}return r(),window.addEventListener(`resize`,r),()=>window.removeEventListener(`resize`,r)},[t])}function te(e,t){return{name:e.name,label:e.label,pluralLabel:e.pluralLabel,description:e.description,icon:e.icon,group:e.group,sortOrder:e.sortOrder,enabled:e.enabled,fields:t,relationships:e.relationships}}function ne(e){return{name:e.name,label:e.label,type:e.type,group:e.group,description:e.description,required:e.required,unique:e.unique,readonly:e.readonly,hidden:e.hidden,defaultValue:e.defaultValue,placeholder:e.placeholder,options:e.options,externalId:e.externalId,trackHistory:e.trackHistory,indexed:e.indexed,referenceTo:e.referenceTo,formula:e.formula,sortOrder:e.sortOrder}}var re=class{adapter;constructor(e){this.adapter=e}async getItems(e){let t=await this.adapter.getClient().meta.getItems(e);return t&&typeof t==`object`&&`items`in t&&Array.isArray(t.items)?t.items:[]}async saveMetadataItem(e,t,n){await this.adapter.getClient().meta.saveItem(e,t,n),this.adapter.invalidateCache(`${e}:${t}`)}async deleteMetadataItem(e,t){await this.adapter.getClient().meta.saveItem(e,t,{name:t,enabled:!1,_deleted:!0}),this.adapter.invalidateCache(`${e}:${t}`)}async saveObject(e,t){let n=this.adapter.getClient(),r=te(e,t);await n.meta.saveItem(`object`,e.name,r),this.adapter.invalidateCache(`object:${e.name}`)}async deleteObject(e){await this.adapter.getClient().meta.saveItem(`object`,e,{name:e,enabled:!1,_deleted:!0}),this.adapter.invalidateCache(`object:${e}`)}async saveFields(e,t){let n=this.adapter.getClient(),r={};try{let t=await n.meta.getItem(`object`,e);r=t?.item??t??{}}catch{}let i={...r,name:e,fields:t.map(ne)};await n.meta.saveItem(`object`,e,i),this.adapter.invalidateCache(`object:${e}`)}static diffObjects(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e]));for(let[e,t]of r)if(!n.has(e))return{type:`create`,object:t};for(let[e,t]of n)if(!r.has(e))return{type:`delete`,object:t};for(let[e,t]of r){let r=n.get(e);if(r&&JSON.stringify(r)!==JSON.stringify(t))return{type:`update`,object:t}}return null}static diffFields(e,t){let n=new Map(e.map(e=>[e.id,e])),r=new Map(t.map(e=>[e.id,e]));for(let[e,t]of r)if(!n.has(e))return{type:`create`,field:t};for(let[e,t]of n)if(!r.has(e))return{type:`delete`,field:t};for(let[e,t]of r){let r=n.get(e);if(r&&JSON.stringify(r)!==JSON.stringify(t))return{type:`update`,field:t}}return null}};function ie(){let e=o();return(0,g.useMemo)(()=>e?new re(e):null,[e])}var E=0;function D(e=`nav`){return`${e}_${Date.now()}_${++E}`}function O(e,t){return[...e,t]}function k(e,t,n){return e.filter(e=>!(e.type===t&&(t===`page`&&e.pageName===n||t===`dashboard`&&e.dashboardName===n))).map(e=>e.children&&e.children.length>0?{...e,children:k(e.children,t,n)}:e)}function A(e,t,n,r){return e.map(e=>{let i=e;return t===`page`&&e.type===`page`&&e.pageName===n?i={...e,pageName:r}:t===`dashboard`&&e.type===`dashboard`&&e.dashboardName===n&&(i={...e,dashboardName:r}),i.children&&i.children.length>0?{...i,children:A(i.children,t,n,r)}:i})}function j(e,t){return e.length===t.length?e===t?!0:JSON.stringify(e)===JSON.stringify(t):!1}function ae(e){return typeof e==`string`&&e.startsWith(`sys_`)}function oe(e){if(!e||typeof e!=`object`)return!1;let t=e;return t._packageId!=null||t._provenance===`package`?!0:ae(t.name)}function M(e){if(!e||typeof e!=`object`)return!1;let t=e,n=t._lock??t.protection?.lock;return n!==`full`&&n!==`no-overlay`}function se(){let e=o(),{apps:t,refresh:n}=s(),{t:r}=c(),i=(0,g.useRef)(e);i.current=e;let a=(0,g.useRef)(n);a.current=n;let l=(0,g.useCallback)(async(e,t)=>{let n=i.current?.getClient();n&&await n.meta.saveItem(`app`,e,t),await a.current?.()},[]),d=(0,g.useCallback)(e=>h(t,e),[t]),f=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=O(a,{id:D(`nav_page`),type:`page`,label:n||t,pageName:t,icon:`FileText`}),s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.addedPage`,{name:n||t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),p=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=O(a,{id:D(`nav_dash`),type:`dashboard`,label:n||t,dashboardName:t,icon:`LayoutDashboard`}),s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.addedDashboard`,{name:n||t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),m=(0,g.useCallback)(async(e,t)=>{let n=d(e);if(!n)return;let i=n.navigation??[],a=k(i,`page`,t);if(j(a,i))return;let o={...n,navigation:a};try{await l(e,o),u.success(r(`navigationSync.removedPage`,{name:t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...n,navigation:i}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),_=(0,g.useCallback)(async(e,t)=>{let n=d(e);if(!n)return;let i=n.navigation??[],a=k(i,`dashboard`,t);if(j(a,i))return;let o={...n,navigation:a};try{await l(e,o),u.success(r(`navigationSync.removedDashboard`,{name:t}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...n,navigation:i}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),v=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=A(a,`page`,t,n);if(j(o,a))return;let s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.renamedPage`,{oldName:t,newName:n}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),y=(0,g.useCallback)(async(e,t,n)=>{let i=d(e);if(!i)return;let a=i.navigation??[],o=A(a,`dashboard`,t,n);if(j(o,a))return;let s={...i,navigation:o};try{await l(e,s),u.success(r(`navigationSync.renamedDashboard`,{oldName:t,newName:n}),{action:{label:r(`navigationSync.undoLabel`),onClick:async()=>{try{await l(e,{...i,navigation:a}),u.info(r(`navigationSync.undone`))}catch{u.error(r(`navigationSync.undoFailed`))}}}})}catch{u.error(r(`navigationSync.updateFailed`))}},[d,l,r]),b=e=>e&&typeof e==`object`&&`name`in e?e.name:void 0;return{syncPageCreated:f,syncDashboardCreated:p,syncPageDeleted:m,syncDashboardDeleted:_,syncPageRenamed:v,syncDashboardRenamed:y,syncPageCreatedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await f(t,e,n)}},[t,f]),syncDashboardCreatedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await p(t,e,n)}},[t,p]),syncPageDeletedAllApps:(0,g.useCallback)(async e=>{for(let n of t){let t=b(n);!t||!M(n)||await m(t,e)}},[t,m]),syncDashboardDeletedAllApps:(0,g.useCallback)(async e=>{for(let n of t){let t=b(n);!t||!M(n)||await _(t,e)}},[t,_]),syncPageRenamedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await v(t,e,n)}},[t,v]),syncDashboardRenamedAllApps:(0,g.useCallback)(async(e,n)=>{for(let r of t){let t=b(r);!t||!M(r)||await y(t,e,n)}},[t,y])}}function N(){let{pages:e,dashboards:t,apps:n,getTypeStatus:r}=s(),i=o(),a=(0,g.useRef)(i);a.current=i;let c=d(),{syncPageCreated:l,syncDashboardCreated:u,syncPageDeleted:f,syncDashboardDeleted:p}=se(),m=(0,g.useRef)(null),h=(0,g.useRef)(null),_=(0,g.useRef)(0),v=(0,g.useRef)(!1),y=e=>e&&typeof e==`object`&&`name`in e?e.name:void 0;return(0,g.useEffect)(()=>{if(v.current)return;if(c){m.current=null,h.current=null;return}if(r&&(r(`page`)!==`ready`||r(`dashboard`)!==`ready`))return;let i=e=>new Set(e.filter(e=>!oe(e)).map(e=>e?.name).filter(e=>typeof e==`string`&&e.length>0)),a=i(e??[]),o=i(t??[]),s=m.current,d=h.current;if(s===null||d===null){m.current=a,h.current=o;return}let g=[...a].filter(e=>!s.has(e)),b=[...s].filter(e=>!a.has(e)),x=[...o].filter(e=>!d.has(e)),S=[...d].filter(e=>!o.has(e));if(g.length===0&&b.length===0&&x.length===0&&S.length===0){m.current=a,h.current=o;return}let C=++_.current;v.current=!0;let w=!1;return(async()=>{try{for(let e of n){if(w||_.current!==C)break;let t=y(e);if(!(!t||!M(e))){for(let e of g){if(w)break;await l(t,e)}for(let e of b){if(w)break;await f(t,e)}for(let e of x){if(w)break;await u(t,e)}for(let e of S){if(w)break;await p(t,e)}}}}finally{_.current===C&&(m.current=a,h.current=o,v.current=!1)}})(),()=>{w=!0}},[e,t,n,c,r,l,u,f,p]),null}var P=new Set([`view`,`record`,`page`,`dashboard`,`design`,`report`]);function F(e){return e.replace(/[-_]/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function I(e){try{return decodeURIComponent(e)}catch{return e}}function ce({pathname:e,appName:t,objects:n=[],basePathSegment:r=`apps`,disabled:i=!1}){let{addRecentItem:a}=f(),o=(0,g.useRef)(n);o.current=n,(0,g.useEffect)(()=>{if(i||!t)return;let n=e.split(`/`).filter(Boolean);if(n[0]!==r||n[1]!==t)return;let s=n[2],c=n[3],l=`/${r}/${t}`;if(s===`metadata`){let e=n[3],t=n[4];e&&t&&t!==`new`&&a({id:`metadata:${e}:${I(t)}`,label:I(t),href:`${l}/metadata/${e}/${t}`,type:`metadata`});return}if(s&&!P.has(s)){let e=o.current.find(e=>e.name===s);e&&a({id:`object:${e.name}`,label:e.label||e.name,href:`${l}/${e.name}`,type:`object`});return}if(c)switch(s){case`dashboard`:a({id:`dashboard:${c}`,label:F(c),href:`${l}/dashboard/${c}`,type:`dashboard`});break;case`page`:a({id:`page:${c}`,label:F(c),href:`${l}/page/${c}`,type:`page`});break;case`report`:a({id:`report:${c}`,label:F(c),href:`${l}/report/${c}`,type:`report`});break;default:break}},[e,t,r,i])}function le(e){return{status:`drafted`,drafted:e.items,...e.summary?{summary:e.summary}:{},...e.packageId?{packageId:e.packageId}:{},...e.autoPublishable?{autoPublishable:!0}:{},...e.failedCount?{failed:Array.from({length:e.failedCount},()=>null)}:{},...e.materialized?{materialized:!0}:{},...e.verification?{verification:e.verification}:{},...e.issues&&e.issues.length?{issues:e.issues}:{},...e.nextSteps&&e.nextSteps.length?{nextSteps:e.nextSteps}:{}}}function ue(e){return{status:`blueprint_proposed`,...e.summary?{summary:e.summary}:{},counts:e.counts,questions:e.questions,...e.targetApp?{targetApp:e.targetApp}:{},blueprint:{objects:e.objects.map(e=>({name:e.name,...e.label?{label:e.label}:{},fields:Array.from({length:e.fieldCount},()=>null)})),assumptions:e.assumptions}}}var L=`objectstack:ai-chat-conversation-id`,R=`objectstack:ai-chat-messages`;function z(e,t){return t?`${L}:${e}:${t}`:`${L}:${e}`}function B(e){try{return localStorage.getItem(e)??void 0}catch{return}}function V(e,t){try{t?localStorage.setItem(e,t):localStorage.removeItem(e)}catch{}}function H(e){return`${R}:${e}`}function U(e){try{let t=localStorage.getItem(H(e));if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`&&(e.role===`user`||e.role===`assistant`||e.role===`system`)&&Array.isArray(e.parts)):[]}catch{return[]}}function W(e,t){if(e)try{if(t.length===0){localStorage.removeItem(H(e));return}localStorage.setItem(H(e),JSON.stringify(t))}catch{}}function de(e){return e.map(e=>{let t=[];if(e.content&&t.push({type:`text`,text:e.content}),e.role===`assistant`)for(let n of e.toolInvocations??[]){let e=n.draftReview?le(n.draftReview):n.proposedPlan?ue(n.proposedPlan):void 0;t.push({type:`tool-${n.toolName}`,toolCallId:n.toolCallId,toolName:n.toolName,state:n.state??(n.errorText?`output-error`:`output-available`),...n.errorText?{errorText:n.errorText}:{},...e===void 0?{}:{output:e}})}if(t.length!==0)return{id:e.id,role:e.role,parts:t}}).filter(e=>!!e)}function G(e){return typeof e==`string`?e?[{type:`text`,text:e}]:[]:Array.isArray(e)?e.map(e=>{if(typeof e==`string`)return e?{type:`text`,text:e}:void 0;if(e&&typeof e==`object`&&`type`in e&&typeof e.type==`string`)return e;if(e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`)return{type:`text`,text:e.text}}).filter(e=>!!e):e&&typeof e==`object`&&`parts`in e&&Array.isArray(e.parts)?G(e.parts):[]}function fe(e,t){for(let n of G(e)){let e=typeof n.toolCallId==`string`?n.toolCallId:void 0;if(!e)continue;let r=t.get(e);if(!r)continue;let i=n.output??n.result;if(i===void 0)continue;r.output=i;let a=n.errorText;r.state=n.isError||typeof a==`string`?`output-error`:`output-available`,typeof a==`string`&&(r.errorText=a)}}function K(e){if(!e)return[];let t=[],n=new Map;return e.forEach((e,r)=>{let i=e.role;if(i===`tool`){fe(e.content,n);return}if(i!==`user`&&i!==`assistant`&&i!==`system`)return;let a=G(e.content);if(a.length!==0){if(i===`assistant`)for(let e of a){e.type===`tool-call`&&typeof e.toolName==`string`&&e.toolName&&(e.type=`tool-${e.toolName}`);let t=typeof e.toolCallId==`string`?e.toolCallId:void 0;t&&(e.type===`tool-call`||e.type.startsWith(`tool-`))&&n.set(t,e)}t.push({id:e.id??`msg-${r}`,role:i,parts:a})}}),t}function q(e){if(!(typeof e!=`string`||!e))try{let t=JSON.parse(e);return Array.isArray(t)?t:void 0}catch{return}}function pe(e){return e?e.map(e=>{let t=e.id,n=typeof e.content==`string`?e.content:``;if(e.role===`assistant`){let r=q(e.tool_calls);if(r&&r.length>0){let e=[];return n&&e.push({type:`text`,text:n}),e.push(...r),{id:t,role:`assistant`,content:e}}return{id:t,role:`assistant`,content:n}}if(e.role===`tool`){let r=q(e.content);return r&&r.length>0&&r[0]?.type===`tool-result`?{id:t,role:`tool`,content:r}:{id:t,role:`tool`,content:[{type:`tool-result`,toolCallId:e.tool_call_id??``,toolName:`unknown`,output:{type:`text`,value:n}}]}}return{id:t,role:e.role,content:n}}):[]}async function J(e,t){let n=await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{credentials:`include`});if(n.status===404||n.status===403)return null;if(!n.ok)throw Error(`GET conversation failed: ${n.status}`);return await n.json()}async function Y(e){let t=await fetch(`${e}/conversations`,{method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`},body:`{}`});if(!t.ok)throw Error(`POST conversation failed: ${t.status}`);return await t.json()}async function me(e,t){await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{method:`DELETE`,credentials:`include`}).catch(()=>{})}function he(e){let{userId:t,scope:n,apiBase:r,activeId:i,forceNew:a,resumeMode:o=`resume`}=e,[s,c]=(0,g.useState)(void 0),[l,u]=(0,g.useState)([]),[d,f]=(0,g.useState)(!!t),p=(0,g.useRef)(!0),m=(0,g.useRef)(void 0),h=(0,g.useRef)(void 0);(0,g.useEffect)(()=>(p.current=!0,()=>{p.current=!1}),[]),(0,g.useEffect)(()=>{if(!t){c(void 0),u([]),f(!1),m.current=void 0,h.current=void 0;return}let e=h.current!==n;if(!i&&!a&&!e&&m.current===t&&s)return;let l=!1,d=z(t,n);return!i&&(a||e&&m.current===t)&&(c(void 0),u([])),f(!0),(async()=>{try{if(i){let e=await J(r,i);if(l)return;if(e){V(d,e.id),c(e.id);let r=K(e.messages);u(r.length>0?r:U(e.id)),m.current=t,h.current=n;return}V(d,void 0),W(i,[])}else if(!a){let e=B(d);if(e){let i=await J(r,e);if(l)return;if(i){let e=K(i.messages);if(o!==`fresh`||e.length===0){c(i.id),u(o===`fresh`?[]:e.length>0?e:U(i.id)),m.current=t,h.current=n;return}}else V(d,void 0),W(e,[])}}let e=await Y(r);if(l)return;V(d,e.id),c(e.id),u(K(e.messages)),m.current=t,h.current=n}catch{l||(c(void 0),u([]))}finally{l||f(!1)}})(),()=>{l=!0}},[t,n,r,i,a,o]);let _=(0,g.useCallback)(async()=>{if(!t)return;let e=z(t,n);f(!0);try{s&&await me(r,s),W(s,[]),V(e,void 0);let t=await Y(r);if(V(e,t.id),W(t.id,[]),!p.current)return;c(t.id),u([])}catch{p.current&&(c(void 0),u([]))}finally{p.current&&f(!1)}},[s,t,n,r]),v=(0,g.useCallback)(async()=>{if(!t)return;let e=z(t,n);f(!0);try{let i=await Y(r);if(V(e,i.id),W(i.id,[]),!p.current)return;c(i.id),u([]),m.current=t,h.current=n}catch{}finally{p.current&&f(!1)}},[t,n,r]);return{conversationId:s,conversationScope:h.current,initialMessages:l,isLoading:d,reset:_,startNew:v}}var ge=new Set([`new chat`,`new conversation`,`untitled`,`新对话`]);function _e(e){let t=e?.trim().toLowerCase();return!t||ge.has(t)}function ve(e){let t=e.messages;if(!t||t.length===0)return;for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.role===`user`){let e=X(n.content);if(e)return e}}let n=t[t.length-1];return X(n?.content)}function X(e){if(typeof e==`string`)return e.slice(0,140);if(e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`)return e.text.slice(0,140);if(e&&typeof e==`object`&&`parts`in e&&Array.isArray(e.parts))return X(e.parts);if(Array.isArray(e)){let t=e.map(e=>typeof e==`string`?e:e&&typeof e==`object`&&`text`in e&&typeof e.text==`string`?e.text:``).join(``);return t?t.slice(0,140):void 0}}function Z(e){let t=e.title?.trim(),n=ve(e)??X(e.preview);return{id:e.id,title:_e(t)?void 0:t,agentId:e.agentId,createdAt:e.createdAt,updatedAt:e.updatedAt,preview:n}}async function ye(e,t){let n=await fetch(`${e}/conversations/${encodeURIComponent(t)}`,{credentials:`include`});if(!n.ok)return;let r=await n.json();return Z(`conversation`in r&&r.conversation?r.conversation:r)}function Q(e){let{userId:t,apiBase:n,limit:r=50,refreshKey:i}=e,[a,o]=(0,g.useState)([]),[s,c]=(0,g.useState)(!!t),[l,u]=(0,g.useState)(void 0),[d,f]=(0,g.useState)(0),p=(0,g.useCallback)(async()=>{f(e=>e+1)},[]),m=(0,g.useCallback)(async e=>{try{await fetch(`${n}/conversations/${encodeURIComponent(e)}`,{method:`DELETE`,credentials:`include`})}finally{o(t=>t.filter(t=>t.id!==e))}},[n]),h=(0,g.useCallback)(async(e,t)=>{let r=t.trim();o(t=>t.map(t=>t.id===e?{...t,title:r||void 0}:t));let i=await fetch(`${n}/conversations/${encodeURIComponent(e)}`,{method:`PATCH`,credentials:`include`,headers:{"Content-Type":`application/json`},body:JSON.stringify({title:r})});if(!i.ok)throw f(e=>e+1),Error(`PATCH conversation failed: ${i.status}`)},[n]);return(0,g.useEffect)(()=>{if(!t){o([]),c(!1),u(void 0);return}let e=!1;return c(!0),u(void 0),(async()=>{try{let t=await fetch(`${n}/conversations?limit=${encodeURIComponent(String(r))}`,{credentials:`include`});if(!t.ok)throw Error(`GET conversations failed: ${t.status}`);let i=await t.json(),a=Array.isArray(i)?i:i.conversations??i.items??[];if(e)return;let s=a.map(Z).sort((e,t)=>(t.updatedAt??``).localeCompare(e.updatedAt??``));o(s);let c=s.filter(e=>!e.title&&!e.preview).slice(0,20);if(c.length>0){let t=await Promise.all(c.map(e=>ye(n,e.id).catch(()=>void 0)));if(e)return;let r=new Map(t.filter(e=>!!(e?.preview||e?.title)).map(e=>[e.id,e]));r.size>0&&o(e=>e.map(e=>{let t=r.get(e.id);return t?{...e,title:e.title??t.title,preview:e.preview??t.preview}:e}))}}catch(t){if(e)return;u(t instanceof Error?t:Error(String(t))),o([])}finally{e||c(!1)}})(),()=>{e=!0}},[t,n,r,d,i]),{conversations:a,isLoading:s,error:l,refetch:p,remove:m,rename:h}}async function be(e){let t=await fetch(`/api/v1/meta/_drafts?packageId=${encodeURIComponent(e)}`,{credentials:`include`,headers:{Accept:`application/json`},cache:`no-store`});if(!t.ok)throw Error(`_drafts HTTP ${t.status}`);let n=await t.json(),r=Array.isArray(n)?n:n?.drafts??n?.data?.drafts??[];return Array.isArray(r)?r.length:0}function xe(e){if(!e||e.length===0)return!1;let t=e[e.length-1];return!t||t.role!==`assistant`?!1:t.parts.some(e=>e.type===`text`&&String(e.text??``).trim().length>0)}function Se(e){let{chatApi:t,conversationId:n}=e,[r,i]=(0,g.useState)(!1),a=(0,g.useRef)(void 0);return{errorSuppressed:r,handleChatError:(0,g.useCallback)(async e=>{if(e?.notSent){i(!1);return}let r=t?.replace(/\/agents\/[^/]+\/chat$/,``);if(!n||!r){i(!1);return}try{let e=K((await J(r,n))?.messages);if(xe(e)&&a.current){a.current(e),i(!0);return}}catch{}i(!1)},[n,t]),setMessagesRef:a,resetSuppression:(0,g.useCallback)(()=>i(!1),[])}}function Ce(e){if(typeof e.content==`string`)return e.content;let t=e.parts;return Array.isArray(t)?t.map(e=>e&&typeof e==`object`&&e.type===`text`?String(e.text??``):``).join(` `):``}function $(e){if(Array.isArray(e))for(let t=e.length-1;t>=0;t--){let n=e[t];if(!n||n.role!==`user`)continue;let r=Ce(n);if(r.trim())return/[一-鿿]/.test(r)?`zh-CN`:void 0}}function we(e){return($(e)??``).toLowerCase().startsWith(`zh`)}export{y as _,Q as a,de as c,W as d,ce as f,C as g,ee as h,be as i,K as l,ie as m,we as n,pe as o,N as p,Se as r,J as s,$ as t,he as u,_ as v};