@objectstack/console 9.3.0 → 9.5.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 (179) hide show
  1. package/dist/assets/AdapterProvider-SUUXFZyj.js +1 -0
  2. package/dist/assets/{AiPendingActionsPage-Y9r83gqj.js → AiPendingActionsPage-CO8ZvJjv.js} +1 -1
  3. package/dist/assets/ApiConsolePage-Lut37HSM.js +1 -0
  4. package/dist/assets/AppDocsIndex-pApFrxYy.js +1 -0
  5. package/dist/assets/{AppManagementPage-0JEALVYK.js → AppManagementPage-02_IDuK5.js} +1 -1
  6. package/dist/assets/ApprovalsInboxPage-jrOq7K_-.js +1 -0
  7. package/dist/assets/{AuditLogPage-CXhNSVOU.js → AuditLogPage-dNTjEy4d.js} +1 -1
  8. package/dist/assets/{ComponentNavView-BI4O_zkC.js → ComponentNavView-DZTCPZQw.js} +1 -1
  9. package/dist/assets/ConsoleFloatingChatbot-aVi2RipX.js +1 -0
  10. package/dist/assets/DashboardView-tRpQP3s_.js +1 -0
  11. package/dist/assets/DashboardWidgetInspector-BZXT2waT.js +1 -0
  12. package/dist/assets/{DeveloperHubPage-D-UigRUA.js → DeveloperHubPage-D1Gr8nhZ.js} +1 -1
  13. package/dist/assets/ExpressionProvider-w-i3oDR9.js +1 -0
  14. package/dist/assets/FlowRunsPage-CntX-tGf.js +1 -0
  15. package/dist/assets/{IntegrationsPage-DsWyxKR6.js → IntegrationsPage-BoWdvbMh.js} +2 -2
  16. package/dist/assets/InterfaceListPage-CtbkRAlr.js +1 -0
  17. package/dist/assets/ManagedByBadge-BYezQxs4.js +1 -0
  18. package/dist/assets/MarketplaceInstalledPage-CuPkbetm.js +1 -0
  19. package/dist/assets/MarketplacePackagePage-CKJ_NEnI.js +4 -0
  20. package/dist/assets/MarketplacePage-BTGE5DuS.js +1 -0
  21. package/dist/assets/MetadataInspector-eUKibp4P.js +1 -0
  22. package/dist/assets/MetadataProvider-DVGxIr-Y.js +1 -0
  23. package/dist/assets/PageView-CoZhWVVc.js +1 -0
  24. package/dist/assets/ProfilePage-qRetxYIs.js +1 -0
  25. package/dist/assets/PublicFormsPage-Cpy38W-9.js +1 -0
  26. package/dist/assets/{RecentItemsProvider-DiJIrHwK.js → RecentItemsProvider-gLV-GFpQ.js} +1 -1
  27. package/dist/assets/RecordDetailView-CD05ObAk.js +1 -0
  28. package/dist/assets/RecordFormPage-OOn5fyVq.js +1 -0
  29. package/dist/assets/ReportDefaultInspector--g5afStS.js +1 -0
  30. package/dist/assets/ReportView-w6a1FyHp.js +2 -0
  31. package/dist/assets/RuntimeDraftBar-e5TgPCLp.js +1 -0
  32. package/dist/assets/SearchResultsPage-B2D6vns1.js +1 -0
  33. package/dist/assets/{SettingsHub-B4oSx4ed.js → SettingsHub-Bi06edK0.js} +1 -1
  34. package/dist/assets/SettingsView-zJInYHeN.js +1 -0
  35. package/dist/assets/{SystemHubPage-Di6eqozE.js → SystemHubPage-DV53wHHA.js} +1 -1
  36. package/dist/assets/appRoute-D5vwtoc_.js +1 -0
  37. package/dist/assets/architecture-7EHR7CIX-BdMnUPE0.js +1 -0
  38. package/dist/assets/architectureDiagram-3BPJPVTR-SscyJlk0.js +36 -0
  39. package/dist/assets/blockDiagram-GPEHLZMM-D6-9deBJ.js +132 -0
  40. package/dist/assets/c4Diagram-AAUBKEIU-VLeNt7tD.js +10 -0
  41. package/dist/assets/channel-ByUUDCyR.js +1 -0
  42. package/dist/assets/chunk-2J33WTMH-DyXQVMuc.js +1 -0
  43. package/dist/assets/chunk-3OPIFGDE-3g0dk_di.js +62 -0
  44. package/dist/assets/chunk-4BX2VUAB-BpAZJ7ZC.js +1 -0
  45. package/dist/assets/chunk-55IACEB6-BhOjfCrn.js +1 -0
  46. package/dist/assets/chunk-5ZQYHXKU-DG12s6lW.js +2 -0
  47. package/dist/assets/chunk-727SXJPM-DwSFE_v-.js +206 -0
  48. package/dist/assets/chunk-AQP2D5EJ-DWgSztUW.js +231 -0
  49. package/dist/assets/chunk-BSJP7CBP-okvguKD4.js +1 -0
  50. package/dist/assets/chunk-CSCIHK7Q-DfSAlgJl.js +124 -0
  51. package/dist/assets/chunk-FMBD7UC4-CZzqt4RW.js +15 -0
  52. package/dist/assets/chunk-KSCS5N6A-IxEh4Ag5.js +10 -0
  53. package/dist/assets/chunk-L5ZTLDWV-DW1lPBoG.js +1 -0
  54. package/dist/assets/chunk-LZXEDZCA-C_-aaYcd.js +1 -0
  55. package/dist/assets/chunk-ND2GUHAM-C1toj0H3.js +1 -0
  56. package/dist/assets/chunk-NNHCCRGN-Ud6GGuM7.js +159 -0
  57. package/dist/assets/chunk-NZK2D7GU-H2MwBqQV.js +1 -0
  58. package/dist/assets/chunk-O5CBEL6O-BzyWPZhZ.js +70 -0
  59. package/dist/assets/chunk-QZHKN3VN-ujroCBCz.js +1 -0
  60. package/dist/assets/chunk-WU5MYG2G-DwQt8tuZ.js +1 -0
  61. package/dist/assets/chunk-XPW4576I-DPNxFY7Q.js +32 -0
  62. package/dist/assets/classDiagram-4FO5ZUOK-B7mTyEXp.js +1 -0
  63. package/dist/assets/classDiagram-v2-Q7XG4LA2-B7mTyEXp.js +1 -0
  64. package/dist/assets/cose-bilkent-S5V4N54A-HKJWDQRL.js +1 -0
  65. package/dist/assets/cytoscape.esm-h6BdjjI9.js +321 -0
  66. package/dist/assets/dagre-BM42HDAG-CU8nx02l.js +4 -0
  67. package/dist/assets/dagre-Bx709z4p.js +1 -0
  68. package/dist/assets/data-adapter-BEs3zHWP.js +1 -0
  69. package/dist/assets/diagram-2AECGRRQ-CormMz8j.js +43 -0
  70. package/dist/assets/diagram-5GNKFQAL-Dh1SagBx.js +10 -0
  71. package/dist/assets/diagram-KO2AKTUF-DcG6Z05V.js +3 -0
  72. package/dist/assets/diagram-LMA3HP47-DrVLZ6ZE.js +24 -0
  73. package/dist/assets/diagram-OG6HWLK6-C4_MMUc2.js +24 -0
  74. package/dist/assets/dist-Cna34lZe.js +1 -0
  75. package/dist/assets/erDiagram-TEJ5UH35-BZH_OrBL.js +85 -0
  76. package/dist/assets/eventmodeling-FCH6USID-CFiyy8DS.js +1 -0
  77. package/dist/assets/flowDiagram-I6XJVG4X-CnjHQUK0.js +162 -0
  78. package/dist/assets/{framework-crD8qZlm.js → framework-BSpP7C0B.js} +11 -11
  79. package/dist/assets/ganttDiagram-6RSMTGT7-rVbHlqzo.js +292 -0
  80. package/dist/assets/gitGraph-WXDBUCRP-9vsQCBlr.js +1 -0
  81. package/dist/assets/gitGraphDiagram-PVQCEYII-CH2LgClA.js +106 -0
  82. package/dist/assets/graphlib-B8gBHxth.js +1 -0
  83. package/dist/assets/{highlighted-body-OFNGDK62-B3OlR_Nx.js → highlighted-body-OFNGDK62-BgGi60U1.js} +1 -1
  84. package/dist/assets/index-QQUFI17s.js +4 -0
  85. package/dist/assets/index-mrmp6qU6.css +2 -0
  86. package/dist/assets/info-J43DQDTF-CfWeH1Bg.js +1 -0
  87. package/dist/assets/infoDiagram-5YYISTIA-CRC7ojj-.js +2 -0
  88. package/dist/assets/infrastructure-ckitl7Ev.js +3 -0
  89. package/dist/assets/ishikawaDiagram-YF4QCWOH-8v73fBR1.js +70 -0
  90. package/dist/assets/journeyDiagram-JHISSGLW-DbRK-WaU.js +139 -0
  91. package/dist/assets/kanban-definition-UN3LZRKU-BggLxHvZ.js +89 -0
  92. package/dist/assets/katex-Vhh-h91d.js +257 -0
  93. package/dist/assets/marketplaceApi-C2Xs-8x9.js +1 -0
  94. package/dist/assets/mergeServerFields-C7bGC7hp.js +7 -0
  95. package/dist/assets/mermaid-GHXKKRXX-DpdgSEiY.js +1 -0
  96. package/dist/assets/mermaid-parser.core-iuxcj-n_.js +3 -0
  97. package/dist/assets/mermaid.core-C41Aiku8.js +8 -0
  98. package/dist/assets/metadata-admin-B5BnMMNz.js +19 -0
  99. package/dist/assets/mindmap-definition-RKZ34NQL-kqhi9XCR.js +96 -0
  100. package/dist/assets/packet-YPE3B663-C0xexAqH.js +1 -0
  101. package/dist/assets/pie-LRSECV5Y-DbQVOiyX.js +1 -0
  102. package/dist/assets/pieDiagram-4H26LBE5-9fHcPmFE.js +30 -0
  103. package/dist/assets/plugin-calendar-DqouTXvx.js +1 -0
  104. package/dist/assets/plugin-charts-Bg-32_xO.js +7 -0
  105. package/dist/assets/plugin-chatbot-1Bip2OCu.js +120 -0
  106. package/dist/assets/plugin-dashboard-bF8okIBS.js +5 -0
  107. package/dist/assets/plugin-form-DkI3TvRN.js +1 -0
  108. package/dist/assets/plugin-gantt-iFmeqHwf.js +23 -0
  109. package/dist/assets/plugin-grid-KSDSYH4h.js +6 -0
  110. package/dist/assets/plugin-kanban-CecteZ3L.js +1 -0
  111. package/dist/assets/{plugin-map-C8Jxhxs1.js → plugin-map-DD9uSXB0.js} +1 -1
  112. package/dist/assets/plugin-markdown-BR56zxrV.js +113 -0
  113. package/dist/assets/plugin-report-KJw4u9x7.js +59 -0
  114. package/dist/assets/plugin-timeline-D8Lkn6Qk.js +1 -0
  115. package/dist/assets/plugin-view-DJrJBUdE.js +1 -0
  116. package/dist/assets/plugins-views-BhPRkeWo.js +4 -0
  117. package/dist/assets/quadrantDiagram-W4KKPZXB-CaMxia_k.js +7 -0
  118. package/dist/assets/radar-GUYGQ44K-DapGfmwo.js +1 -0
  119. package/dist/assets/requirementDiagram-4Y6WPE33-CXwY4Gdd.js +84 -0
  120. package/dist/assets/resolveActionParams-C1HIbU1j.js +9 -0
  121. package/dist/assets/rough.esm-CSKSodPl.js +1 -0
  122. package/dist/assets/runtime-config-BeHVOPm3.js +1 -0
  123. package/dist/assets/sankeyDiagram-5OEKKPKP-KEb3hSPZ.js +40 -0
  124. package/dist/assets/sequenceDiagram-3UESZ5HK-BfbOOh3M.js +162 -0
  125. package/dist/assets/skeletons-qACAXjbp.js +1 -0
  126. package/dist/assets/src-CVz7aDdY.js +1 -0
  127. package/dist/assets/{src-Tw2eleSi.js → src-CZAP7E6v.js} +1 -1
  128. package/dist/assets/stateDiagram-AJRCARHV-BLJI6xj_.js +1 -0
  129. package/dist/assets/stateDiagram-v2-BHNVJYJU-DPQJ1_JB.js +1 -0
  130. package/dist/assets/timeline-definition-PNZ67QCA-aiklZXLq.js +120 -0
  131. package/dist/assets/treeView-BLDUP644-Byr_7ESV.js +1 -0
  132. package/dist/assets/treemap-LRROVOQU-B6DiJnlo.js +1 -0
  133. package/dist/assets/{types-BkFEpiv3.js → types-CW2d8LfD.js} +1 -1
  134. package/dist/assets/ui-components-D7IOmcqZ.js +42 -0
  135. package/dist/assets/{ui-layout-KICrO2Oe.js → ui-layout-toYvxCNh.js} +1 -1
  136. package/dist/assets/useActionModal-yawBu4nr.js +1 -0
  137. package/dist/assets/usePackageL10n-shLsxEAx.js +1 -0
  138. package/dist/assets/utils-bipVuqQL.js +1 -0
  139. package/dist/assets/vendor-charts-fo4ZbB_t.js +39 -0
  140. package/dist/assets/vendor-i18n-Bz5UncqE.js +1 -0
  141. package/dist/assets/vendor-markdown-DIJxJfmj.js +46 -0
  142. package/dist/assets/vennDiagram-CIIHVFJN-DsKC4yvC.js +34 -0
  143. package/dist/assets/wardley-L42UT6IY-f1iiSYpj.js +1 -0
  144. package/dist/assets/wardleyDiagram-YWT4CUSO-DbrUmWlY.js +78 -0
  145. package/dist/assets/xychartDiagram-2RQKCTM6-B4biX1Sz.js +7 -0
  146. package/dist/index.html +4 -4
  147. package/package.json +1 -1
  148. package/dist/assets/ApiConsolePage-Dwbms0Zh.js +0 -1
  149. package/dist/assets/ApprovalsInboxPage-B-drSsxQ.js +0 -1
  150. package/dist/assets/ConsoleFloatingChatbot-CiODZIcp.js +0 -1
  151. package/dist/assets/FlowRunsPage-_UeeNdBc.js +0 -1
  152. package/dist/assets/ProfilePage-T27zVrMO.js +0 -1
  153. package/dist/assets/PublicFormsPage-Pd453sW6.js +0 -1
  154. package/dist/assets/SettingsView-CkQEI5DW.js +0 -1
  155. package/dist/assets/assistantBus-B-xBT6j1.js +0 -1
  156. package/dist/assets/data-adapter-3AJO7A2o.js +0 -1
  157. package/dist/assets/index-Cf7NsvAk.css +0 -2
  158. package/dist/assets/index-CiI7zDDo.js +0 -32
  159. package/dist/assets/infrastructure-CxityHZF.js +0 -3
  160. package/dist/assets/mergeServerFields-DUkbynPg.js +0 -7
  161. package/dist/assets/mermaid-GHXKKRXX-CBocchJ2.js +0 -1
  162. package/dist/assets/plugin-calendar-ed7RoEFF.js +0 -1
  163. package/dist/assets/plugin-charts-QabQJ_NJ.js +0 -7
  164. package/dist/assets/plugin-chatbot-Cy3tiXkg.js +0 -120
  165. package/dist/assets/plugin-dashboard-PA0xf59v.js +0 -5
  166. package/dist/assets/plugin-form-BABEMaum.js +0 -1
  167. package/dist/assets/plugin-gantt-BNjfLkTR.js +0 -1
  168. package/dist/assets/plugin-grid-BxyuFeJP.js +0 -6
  169. package/dist/assets/plugin-kanban-D4yCkUn_.js +0 -1
  170. package/dist/assets/plugin-markdown-CR5TpghH.js +0 -7
  171. package/dist/assets/plugin-report-rz8HUIsi.js +0 -59
  172. package/dist/assets/plugin-timeline-DQHQwtdw.js +0 -1
  173. package/dist/assets/plugin-view-BykLknWa.js +0 -1
  174. package/dist/assets/plugins-views-CBO5qxO-.js +0 -4
  175. package/dist/assets/runtime-config-ir5bt3TX.js +0 -1
  176. package/dist/assets/ui-components-BrY5joKQ.js +0 -42
  177. package/dist/assets/vendor-charts-DAigH0Ti.js +0 -39
  178. package/dist/assets/vendor-i18n-CdF5ccW5.js +0 -1
  179. package/dist/assets/vendor-markdown-C9mPywRm.js +0 -38
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,t as n}from"./vendor-react-DR370ovB.js";import{w as r}from"./framework-crD8qZlm.js";import{$ as i,At as a,Da as o,Ft as s,Gn as c,It as l,Jn as u,Kn as d,Mt as f,Nt as p,Pt as m,Sr as h,Ut as g,Vi as _,Xo as v,Yn as y,Zn as b,at as x,ct as S,ds as C,en as w,in as T,it as E,ji as D,ls as O,lt as k,ot as A,pr as j,qn as M,st as N,ts as P,ut as F}from"./ui-components-BrY5joKQ.js";import"./index-CiI7zDDo.js";var I=e(t(),1),L=n();function R({status:e}){let t={success:{icon:O,cls:`text-emerald-600 border-emerald-300`},completed:{icon:O,cls:`text-emerald-600 border-emerald-300`},failed:{icon:P,cls:`text-red-600 border-red-300`},error:{icon:P,cls:`text-red-600 border-red-300`},running:{icon:o,cls:`text-blue-600 border-blue-300 animate-pulse`},pending:{icon:v,cls:`text-amber-600 border-amber-300`},skipped:{icon:C,cls:`text-muted-foreground`}}[e]??{icon:C,cls:`text-muted-foreground`},n=t.icon;return(0,L.jsxs)(b,{variant:`outline`,className:`text-[10px] font-mono inline-flex items-center gap-1 ${t.cls}`,children:[(0,L.jsx)(n,{className:`h-3 w-3`}),e]})}function z(e){if(!e)return`—`;try{return new Date(e).toLocaleString()}catch{return e}}function B(e,t){switch(t){case`number`:{if(e===``)return;let t=Number(e);return Number.isNaN(t)?e:t}case`boolean`:return e===`true`;case`object`:case`list`:case`array`:if(e.trim()===``)return;try{return JSON.parse(e)}catch{return e}default:return e}}function V({data:e}){return(0,L.jsx)(`pre`,{className:`rounded border bg-muted/30 p-2 text-xs font-mono overflow-auto whitespace-pre-wrap break-all max-h-96`,children:JSON.stringify(e,null,2)})}function H(){let e=r()?.getClient?.(),[t,n]=(0,I.useState)([]),[i,o]=(0,I.useState)(!0),[s,l]=(0,I.useState)(null),[f,p]=(0,I.useState)(``),[m,g]=(0,I.useState)(0),_=(0,I.useCallback)(async()=>{if(!e?.meta?.getItems){l(`meta.getItems is not available on this client`),o(!1);return}o(!0),l(null);try{let t=await e.meta.getItems(`flow`),r=(Array.isArray(t)?t:Array.isArray(t?.items)?t.items:Array.isArray(t?.value)?t.value:[]).map(e=>({name:e?.spec?.name??e?.name,label:e?.spec?.label,spec:e?.spec??e,updatedAt:e?.updatedAt??e?.updated_at})).filter(e=>e.name);n(r),!f&&r.length>0&&p(r[0].name)}catch(e){l(e?.message??String(e))}finally{o(!1)}},[e,f]);(0,I.useEffect)(()=>{_()},[_]);let v=(0,I.useMemo)(()=>t.find(e=>e.name===f)??null,[t,f]);return(0,L.jsxs)(`div`,{className:`flex flex-col gap-4 p-4 sm:p-6`,children:[(0,L.jsxs)(`div`,{className:`min-w-0`,children:[(0,L.jsxs)(`h1`,{className:`text-xl sm:text-2xl font-bold tracking-tight flex items-center gap-2`,children:[(0,L.jsx)(h,{className:`h-5 w-5`}),`Flow Runs`]}),(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:`Pick a flow, trigger a test run with sample inputs, and inspect recent run history`})]}),(0,L.jsxs)(c,{children:[(0,L.jsx)(u,{className:`pb-3`,children:(0,L.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(y,{className:`text-base`,children:`Flow`}),(0,L.jsx)(M,{children:`Select a flow definition to test`})]}),(0,L.jsxs)(j,{variant:`outline`,size:`sm`,onClick:_,disabled:i,children:[(0,L.jsx)(D,{className:`h-3.5 w-3.5 mr-2 ${i?`animate-spin`:``}`}),`Refresh`]})]})}),(0,L.jsxs)(d,{children:[i&&(0,L.jsx)(a,{className:`h-9 w-72`}),s&&(0,L.jsx)(`p`,{className:`text-sm text-red-500 font-mono break-all`,children:s}),!i&&!s&&t.length===0&&(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No flow definitions found.`}),!i&&!s&&t.length>0&&(0,L.jsx)(`select`,{value:f,onChange:e=>p(e.target.value),className:`flex h-9 w-full max-w-md rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm focus:outline-none focus:ring-1 focus:ring-ring`,children:t.map(e=>(0,L.jsx)(`option`,{value:e.name,children:e.label?`${e.label} (${e.name})`:e.name},e.name))})]})]}),v&&(0,L.jsxs)(`div`,{className:`grid gap-4 lg:grid-cols-2`,children:[(0,L.jsx)(U,{client:e,flow:v.spec,onExecuted:()=>g(e=>e+1)}),(0,L.jsx)(W,{client:e,flowName:v.name,refreshKey:m})]})]})}function U({client:e,flow:t,onExecuted:n}){let r=(0,I.useMemo)(()=>(t?.variables??[]).filter(e=>e?.isInput),[t]),[a,s]=(0,I.useState)({}),[l,f]=(0,I.useState)(!1),[p,m]=(0,I.useState)(null),[h,g]=(0,I.useState)(null);(0,I.useEffect)(()=>{s({}),m(null),g(null)},[t?.name]);let v=(e,t)=>s(n=>({...n,[e]:t}));return(0,L.jsxs)(c,{children:[(0,L.jsxs)(u,{className:`pb-3`,children:[(0,L.jsx)(y,{className:`text-base`,children:`Test Run`}),(0,L.jsx)(M,{children:`Provide input values and invoke the flow`})]}),(0,L.jsxs)(d,{className:`space-y-3`,children:[r.length===0&&(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`This flow declares no input variables. Click Run to invoke with no parameters.`}),r.map(e=>(0,L.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,L.jsxs)(T,{htmlFor:`var-${e.name}`,className:`flex items-center gap-2`,children:[(0,L.jsx)(`span`,{className:`font-mono text-xs`,children:e.name}),(0,L.jsx)(b,{variant:`outline`,className:`text-[10px] font-mono`,children:e.type})]}),e.type===`boolean`?(0,L.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,L.jsx)(F,{id:`var-${e.name}`,checked:a[e.name]===`true`,onCheckedChange:t=>v(e.name,t?`true`:`false`)}),(0,L.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:a[e.name]===`true`?`true`:`false`})]}):e.type===`object`||e.type===`list`||e.type===`array`?(0,L.jsx)(i,{id:`var-${e.name}`,placeholder:`JSON ${e.type}`,value:a[e.name]??``,onChange:t=>v(e.name,t.target.value),className:`font-mono text-xs min-h-[80px]`}):(0,L.jsx)(w,{id:`var-${e.name}`,type:e.type===`number`?`number`:`text`,value:a[e.name]??``,onChange:t=>v(e.name,t.target.value)})]},e.name)),(0,L.jsx)(`div`,{className:`pt-1`,children:(0,L.jsxs)(j,{onClick:async()=>{if(!e?.automation?.execute){g(`automation.execute is not available on this client`);return}f(!0),g(null),m(null);try{let i={};for(let e of r){let t=a[e.name];t!==void 0&&(i[e.name]=B(t,e.type))}m(await e.automation.execute(t.name,{params:i})),n?.()}catch(e){g(e?.message??String(e))}finally{f(!1)}},disabled:l,size:`sm`,children:[l?(0,L.jsx)(o,{className:`h-3.5 w-3.5 mr-2 animate-spin`}):(0,L.jsx)(_,{className:`h-3.5 w-3.5 mr-2`}),l?`Running…`:`Run Flow`]})}),(p||h)&&(0,L.jsxs)(`div`,{className:`pt-2 border-t mt-2 space-y-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2 text-sm font-medium`,children:[h||p?.success===!1?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(P,{className:`h-4 w-4 text-red-500`}),` Failed`]}):(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(O,{className:`h-4 w-4 text-emerald-500`}),` Result`]}),typeof p?.durationMs==`number`&&(0,L.jsxs)(b,{variant:`secondary`,className:`text-[10px] font-mono`,children:[p.durationMs,` ms`]})]}),h&&(0,L.jsx)(`p`,{className:`text-sm text-red-500 font-mono break-all`,children:h}),p&&(0,L.jsx)(V,{data:p})]})]})]})}function W({client:e,flowName:t,refreshKey:n}){let[r,i]=(0,I.useState)([]),[h,_]=(0,I.useState)(!0),[v,C]=(0,I.useState)(null),[w,T]=(0,I.useState)(null),[O,P]=(0,I.useState)(null),[F,B]=(0,I.useState)(!1),[H,U]=(0,I.useState)(null),W=(0,I.useCallback)(async()=>{if(!e?.automation?.listRuns){C(`automation.listRuns is not available on this client`),_(!1);return}_(!0),C(null);try{let n=await e.automation.listRuns(t,{limit:20});i(Array.isArray(n)?n:n?.items??n?.runs??[])}catch(e){C(e?.message??String(e))}finally{_(!1)}},[e,t]);(0,I.useEffect)(()=>{W()},[W,n]);let G=async n=>{T(n),P(null),U(null),B(!0);try{let r=await e.automation.getRun(t,n);P(r?.run??r)}catch(e){U(e?.message??String(e))}finally{B(!1)}};return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(c,{children:[(0,L.jsx)(u,{className:`pb-3`,children:(0,L.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,L.jsxs)(`div`,{children:[(0,L.jsx)(y,{className:`text-base`,children:`Recent Runs`}),(0,L.jsx)(M,{className:`font-mono text-xs`,children:t})]}),(0,L.jsxs)(j,{variant:`outline`,size:`sm`,onClick:W,disabled:h,children:[h?(0,L.jsx)(o,{className:`h-3.5 w-3.5 mr-2 animate-spin`}):(0,L.jsx)(D,{className:`h-3.5 w-3.5 mr-2`}),`Refresh`]})]})}),(0,L.jsxs)(d,{children:[h&&(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(a,{className:`h-8 w-full`}),(0,L.jsx)(a,{className:`h-8 w-full`}),(0,L.jsx)(a,{className:`h-8 w-full`})]}),!h&&v&&(0,L.jsx)(`p`,{className:`text-sm text-red-500 font-mono break-all`,children:v}),!h&&!v&&r.length===0&&(0,L.jsx)(`p`,{className:`text-sm text-muted-foreground py-6 text-center`,children:`No runs yet. Use the Test Run panel to invoke this flow.`}),!h&&!v&&r.length>0&&(0,L.jsxs)(E,{children:[(0,L.jsx)(S,{children:(0,L.jsxs)(k,{children:[(0,L.jsx)(N,{children:`Run`}),(0,L.jsx)(N,{children:`Status`}),(0,L.jsx)(N,{children:`Started`}),(0,L.jsx)(N,{className:`text-right`,children:`Duration`})]})}),(0,L.jsx)(x,{children:r.map(e=>(0,L.jsxs)(k,{className:`cursor-pointer`,onClick:()=>G(e.id),children:[(0,L.jsxs)(A,{className:`font-mono text-xs`,children:[e.id.slice(0,12),`…`]}),(0,L.jsx)(A,{children:(0,L.jsx)(R,{status:e.status})}),(0,L.jsx)(A,{className:`text-xs text-muted-foreground`,children:z(e.startedAt)}),(0,L.jsx)(A,{className:`text-right font-mono text-xs`,children:typeof e.durationMs==`number`?`${e.durationMs} ms`:`—`})]},e.id))})]})]})]}),(0,L.jsx)(f,{open:!!w,onOpenChange:e=>{e||(T(null),P(null))},children:(0,L.jsxs)(p,{side:`right`,className:`w-full sm:max-w-2xl p-0 flex flex-col`,children:[(0,L.jsxs)(s,{className:`p-4 border-b`,children:[(0,L.jsxs)(l,{className:`font-mono text-sm break-all`,children:[`Run `,w]}),(0,L.jsx)(m,{children:O&&(0,L.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[(0,L.jsx)(R,{status:O.status}),typeof O.durationMs==`number`&&(0,L.jsxs)(b,{variant:`secondary`,className:`text-[10px] font-mono`,children:[O.durationMs,` ms`]}),(0,L.jsx)(`span`,{className:`text-xs`,children:z(O.startedAt)})]})})]}),(0,L.jsxs)(g,{className:`flex-1 p-4`,children:[F&&(0,L.jsxs)(`div`,{className:`space-y-2`,children:[(0,L.jsx)(a,{className:`h-16 w-full`}),(0,L.jsx)(a,{className:`h-16 w-full`}),(0,L.jsx)(a,{className:`h-16 w-full`})]}),H&&(0,L.jsx)(`p`,{className:`text-sm text-red-500 font-mono break-all`,children:H}),!F&&O&&(0,L.jsx)(`div`,{className:`space-y-3`,children:Array.isArray(O.steps)&&O.steps.length>0?O.steps.map((e,t)=>(0,L.jsxs)(`div`,{className:`rounded-md border p-3 space-y-2`,children:[(0,L.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,L.jsxs)(`span`,{className:`text-muted-foreground font-mono text-xs`,children:[`#`,t+1]}),(0,L.jsx)(`span`,{className:`font-mono text-sm font-medium`,children:e.nodeLabel||e.nodeId}),e.nodeType&&(0,L.jsx)(b,{variant:`outline`,className:`text-[10px] font-mono`,children:e.nodeType}),(0,L.jsx)(R,{status:e.status}),typeof e.durationMs==`number`&&(0,L.jsxs)(b,{variant:`secondary`,className:`text-[10px] font-mono ml-auto`,children:[e.durationMs,` ms`]})]}),e.input!==void 0&&(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`text-[10px] uppercase text-muted-foreground mb-1`,children:`Input`}),(0,L.jsx)(V,{data:e.input})]}),e.output!==void 0&&(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`text-[10px] uppercase text-muted-foreground mb-1`,children:`Output`}),(0,L.jsx)(V,{data:e.output})]}),e.error&&(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`text-[10px] uppercase text-red-500 mb-1`,children:`Error`}),(0,L.jsx)(V,{data:e.error})]})]},`${e.nodeId}-${t}`)):(0,L.jsxs)(`div`,{children:[(0,L.jsx)(`div`,{className:`text-[10px] uppercase text-muted-foreground mb-1`,children:`Run`}),(0,L.jsx)(V,{data:O})]})})]})]})})]})}export{H as FlowRunsPage};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,t as n}from"./vendor-react-DR370ovB.js";import{f as r,o as i}from"./infrastructure-CxityHZF.js";import{$n as a,Da as o,Ea as s,Gn as c,Jn as l,Kn as u,Or as d,Qn as f,Yn as p,Zn as m,br as h,ds as g,en as _,er as v,in as y,jr as b,ls as x,nr as S,pr as C,qn as w,tr as T,v as E}from"./ui-components-BrY5joKQ.js";var D=e(t(),1),O=n();function k(){let{user:e,updateUser:t,isLoading:n,changePassword:s,setInitialPassword:k,hasLocalPassword:j}=r(),{upload:M}=E(),[N,P]=(0,D.useState)(e?.name??``),[F,I]=(0,D.useState)(!1),[L,R]=(0,D.useState)(null),z=(0,D.useRef)(null),[B,V]=(0,D.useState)(!1),[H,U]=(0,D.useState)(null);return(0,D.useEffect)(()=>{P(e?.name??``)},[e?.name]),e?(0,O.jsxs)(`div`,{className:`flex flex-col gap-4 sm:gap-6 p-4 sm:p-6 max-w-2xl`,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:`Profile`}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1`,children:`Manage your account settings`})]}),(0,O.jsx)(c,{children:(0,O.jsxs)(u,{className:`pt-6`,children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,O.jsxs)(f,{className:`h-16 w-16`,children:[(0,O.jsx)(v,{src:e.image??void 0,alt:e.name??`User`}),(0,O.jsx)(a,{className:`text-lg bg-primary text-primary-foreground`,children:i(e)})]}),(0,O.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,O.jsx)(`p`,{className:`text-lg font-semibold truncate`,children:e.name??`User`}),(0,O.jsx)(`p`,{className:`text-sm text-muted-foreground truncate`,children:e.email}),(0,O.jsx)(m,{variant:`secondary`,className:`mt-1`,children:e.role??`member`})]}),(0,O.jsxs)(`div`,{className:`flex flex-col gap-2 shrink-0`,children:[(0,O.jsx)(`input`,{ref:z,type:`file`,accept:`image/*`,className:`hidden`,onChange:async e=>{let n=e.target.files?.[0];if(z.current&&(z.current.value=``),n){V(!0),U(null);try{await t({image:(await M(n)).url})}catch(e){U(e instanceof Error?e.message:String(e))}finally{V(!1)}}},"data-testid":`profile-avatar-file`}),(0,O.jsxs)(C,{type:`button`,variant:`outline`,size:`sm`,disabled:B,onClick:()=>z.current?.click(),"data-testid":`profile-avatar-upload-btn`,children:[B?(0,O.jsx)(o,{className:`mr-2 h-4 w-4 animate-spin`}):(0,O.jsx)(b,{className:`mr-2 h-4 w-4`}),e.image?`Replace`:`Upload`]}),e.image&&(0,O.jsxs)(C,{type:`button`,variant:`ghost`,size:`sm`,disabled:B,onClick:async()=>{V(!0),U(null);try{await t({image:null})}catch(e){U(e instanceof Error?e.message:String(e))}finally{V(!1)}},"data-testid":`profile-avatar-remove-btn`,children:[(0,O.jsx)(h,{className:`mr-2 h-4 w-4`}),`Remove`]})]})]}),H&&(0,O.jsxs)(T,{variant:`destructive`,className:`mt-4`,children:[(0,O.jsx)(g,{className:`h-4 w-4`}),(0,O.jsx)(S,{children:H})]})]})}),(0,O.jsxs)(c,{children:[(0,O.jsxs)(l,{children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(d,{className:`h-4 w-4 text-muted-foreground`}),(0,O.jsx)(p,{className:`text-base sm:text-lg`,children:`Personal Information`})]}),(0,O.jsx)(w,{children:`Update your name and view account details`})]}),(0,O.jsx)(u,{children:(0,O.jsxs)(`form`,{onSubmit:async e=>{e.preventDefault(),R(null),I(!1);try{await t({name:N}),I(!0)}catch(e){R(e instanceof Error?e.message:String(e))}},className:`space-y-4`,children:[L&&(0,O.jsxs)(T,{variant:`destructive`,children:[(0,O.jsx)(g,{className:`h-4 w-4`}),(0,O.jsx)(S,{children:L})]}),F&&(0,O.jsxs)(T,{children:[(0,O.jsx)(x,{className:`h-4 w-4 text-green-600`}),(0,O.jsx)(S,{className:`text-green-800 dark:text-green-400`,children:`Profile updated successfully.`})]}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{htmlFor:`profile-name`,children:`Name`}),(0,O.jsx)(_,{id:`profile-name`,type:`text`,value:N,onChange:e=>P(e.target.value),required:!0,"aria-required":`true`,disabled:n})]}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{htmlFor:`profile-email`,children:`Email`}),(0,O.jsx)(_,{id:`profile-email`,type:`email`,value:e.email,disabled:!0,className:`bg-muted text-muted-foreground`}),(0,O.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Email cannot be changed.`})]}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{children:`Role`}),(0,O.jsx)(_,{type:`text`,value:e.role??`member`,disabled:!0,className:`bg-muted text-muted-foreground`})]}),(0,O.jsx)(C,{type:`submit`,disabled:n,className:`w-full sm:w-auto`,children:n?`Saving…`:`Save Changes`})]})})]}),(0,O.jsx)(A,{changePassword:s,setInitialPassword:k,hasLocalPassword:j})]}):null}function A({changePassword:e,setInitialPassword:t,hasLocalPassword:n,highlight:r,onPasswordSet:i}){let[a,o]=(0,D.useState)(null),[d,f]=(0,D.useState)(``),[m,h]=(0,D.useState)(``),[v,b]=(0,D.useState)(``),[E,k]=(0,D.useState)(!1),[A,j]=(0,D.useState)(null),[M,N]=(0,D.useState)(null);(0,D.useEffect)(()=>{let e=!1;return n().then(t=>{e||o(t)}).catch(()=>{e||o(!1)}),()=>{e=!0}},[n]);let P=()=>{f(``),h(``),b(``)},F=async n=>{if(n.preventDefault(),j(null),N(null),m.length<8){j(`Password must be at least 8 characters`);return}if(m!==v){j(`Passwords do not match`);return}k(!0);try{if(a){if(!d){j(`Enter your current password`),k(!1);return}await e(d,m),N(`Password changed.`)}else await t(m),N(`Local password set. You can now sign in with email and password on this environment.`),o(!0),i?.();P()}catch(e){j(e instanceof Error?e.message:String(e))}finally{k(!1)}},I=a===null;return(0,O.jsxs)(c,{className:r?`ring-2 ring-amber-300 dark:ring-amber-700`:void 0,children:[(0,O.jsxs)(l,{children:[(0,O.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,O.jsx)(s,{className:`h-4 w-4 text-muted-foreground`}),(0,O.jsx)(p,{className:`text-base sm:text-lg`,children:a?`Change Password`:`Set Local Password`})]}),(0,O.jsx)(w,{children:a?`Update the password you use to sign in to this environment.`:`You signed in via single sign-on. Set a local password to also sign in with email and password on this environment.`})]}),(0,O.jsx)(u,{children:(0,O.jsxs)(`form`,{onSubmit:F,className:`space-y-4 max-w-md`,children:[a&&(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{htmlFor:`current-password`,children:`Current password`}),(0,O.jsx)(_,{id:`current-password`,type:`password`,autoComplete:`current-password`,value:d,onChange:e=>f(e.target.value),disabled:E||I,required:!0})]}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{htmlFor:`new-password`,children:a?`New password`:`Password`}),(0,O.jsx)(_,{id:`new-password`,type:`password`,autoComplete:`new-password`,value:m,onChange:e=>h(e.target.value),disabled:E||I,minLength:8,required:!0})]}),(0,O.jsxs)(`div`,{className:`space-y-2`,children:[(0,O.jsx)(y,{htmlFor:`confirm-password`,children:`Confirm password`}),(0,O.jsx)(_,{id:`confirm-password`,type:`password`,autoComplete:`new-password`,value:v,onChange:e=>b(e.target.value),disabled:E||I,minLength:8,required:!0})]}),A&&(0,O.jsxs)(T,{variant:`destructive`,children:[(0,O.jsx)(g,{className:`h-4 w-4`}),(0,O.jsx)(S,{children:A})]}),M&&(0,O.jsxs)(T,{children:[(0,O.jsx)(x,{className:`h-4 w-4`}),(0,O.jsx)(S,{children:M})]}),(0,O.jsx)(C,{type:`submit`,disabled:E||I,className:`w-full sm:w-auto`,children:E?`Saving…`:a?`Change password`:`Set password`})]})})]})}export{k as ProfilePage};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,t as n}from"./vendor-react-DR370ovB.js";import{w as r}from"./framework-crD8qZlm.js";import{Bn as i,Fn as a,Gn as o,Ho as ee,In as s,Jn as te,Kn as ne,Ko as re,Ln as c,Ma as ie,Pi as ae,Rn as l,Yn as oe,Zn as se,_i as ce,at as u,ct as le,en as d,in as f,it as ue,ji as de,ko as fe,lt as p,ot as m,pr as h,qn as pe,st as g,zi as me,zn as _}from"./ui-components-BrY5joKQ.js";import{r as v}from"./vendor-ui-utils-rQOI1gAo.js";import"./index-CiI7zDDo.js";var y=e(t(),1),b=n();function x(e){return e?e.replace(/^\/+/,``).match(/^forms\/([^/?#]+)/i)?.[1]??null:null}function S(e){return e.trim().toLowerCase().replace(/[^a-z0-9-_]+/g,`-`).replace(/^-+|-+$/g,``)}function C(){let e=r()?.getClient?.(),[t,n]=(0,y.useState)([]),[C,he]=(0,y.useState)([]),[w,T]=(0,y.useState)(!0),[E,D]=(0,y.useState)(null),[ge,O]=(0,y.useState)(!1),[k,A]=(0,y.useState)(``),[j,M]=(0,y.useState)(``),[N,P]=(0,y.useState)(!1),[_e,F]=(0,y.useState)(!1),[I,L]=(0,y.useState)(null),[R,z]=(0,y.useState)(``),[B,V]=(0,y.useState)(`thank-you`),[H,U]=(0,y.useState)(``),[W,G]=(0,y.useState)(``),[K,q]=(0,y.useState)(``),[J,Y]=(0,y.useState)(!1),X=async()=>{if(!e?.meta?.getItems){D(`meta.getItems is not available on this client`),T(!1);return}T(!0),D(null);try{let t=await e.meta.getItems(`view`),r=Array.isArray(t)?t:Array.isArray(t?.items)?t.items:Array.isArray(t?.value)?t.value:[],i=[],a=[];for(let e of r){let t=e?.spec??e;if(!(t?.sections||t?.groups||t?.form||t?.type===`simple`||t?.type===`tabbed`||t?.type===`wizard`||t?.viewType===`form`))continue;let n=t?.sharing,r=n?.publicLink,o=x(r);n?.allowAnonymous&&o&&r?i.push({name:t?.name??e?.name,label:t?.label,object:t?.object,slug:o,publicLink:r,updatedAt:e?.updatedAt??e?.updated_at,spec:t}):a.push({name:t?.name??e?.name,label:t?.label,object:t?.object,spec:t})}n(i),he(a)}catch(e){D(e?.message??String(e))}finally{T(!1)}};(0,y.useEffect)(()=>{X()},[]);let ve=typeof window<`u`?window.location.origin:``,Z=e=>`${ve}/console/f/${e}`,ye=e=>`<iframe src="${Z(e)}" width="100%" height="640" frameborder="0" style="border:0;"></iframe>`,be=e=>`<iframe\n src={\`${Z(e)}\`}\n title="Public form"\n style={{ width: '100%', height: 640, border: 0 }}\n/>`,Q=async(e,t)=>{try{await navigator.clipboard.writeText(t),v.success(`Copied ${e}`)}catch{v.error(`Clipboard unavailable`)}},xe=async()=>{if(!k||!j)return;let t=C.find(e=>e.name===k);if(!t)return;let n=S(j);if(!n){v.error(`Invalid slug`);return}let r={...t.spec,sharing:{...t.spec.sharing??{},enabled:!0,allowAnonymous:!0,publicLink:`/forms/${n}`}};P(!0);try{await e.meta.saveItem(`view`,t.name,r),v.success(`Published ${t.name}`),O(!1),A(``),M(``),await X()}catch(e){v.error(`Publish failed: ${e?.message??e}`)}finally{P(!1)}},Se=e=>{L(e),z(e.slug);let t=e.spec?.submitBehavior;V(t?.kind??`thank-you`),U(t?.title??``),G(t?.message??``),q(t?.url??``),F(!0)},Ce=async()=>{if(!I)return;let t=S(R);if(!t){v.error(`Invalid slug`);return}let n;switch(B){case`thank-you`:n={kind:`thank-you`},H&&(n.title=H),W&&(n.message=W);break;case`redirect`:if(!K){v.error(`Redirect URL is required`);return}n={kind:`redirect`,url:K};break;case`continue`:case`next-record`:n={kind:B};break}let r={...I.spec,sharing:{...I.spec.sharing??{},enabled:!0,allowAnonymous:!0,publicLink:`/forms/${t}`},submitBehavior:n};Y(!0);try{await e.meta.saveItem(`view`,I.name,r),v.success(`Saved ${I.name}`),F(!1),L(null),await X()}catch(e){v.error(`Save failed: ${e?.message??e}`)}finally{Y(!1)}},$=t.length>0;return(0,b.jsxs)(`div`,{className:`flex flex-1 flex-col gap-4 p-4 md:p-6 overflow-auto`,children:[(0,b.jsxs)(o,{children:[(0,b.jsxs)(te,{className:`flex flex-row items-start justify-between gap-4 space-y-0`,children:[(0,b.jsxs)(`div`,{children:[(0,b.jsxs)(oe,{className:`flex items-center gap-2`,children:[(0,b.jsx)(ae,{className:`h-4 w-4`}),`Public Forms`]}),(0,b.jsx)(pe,{children:`Forms anyone can fill out — no login required. Publish a form to get a shareable link; submissions land directly in the bound object.`})]}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsxs)(h,{variant:`default`,size:`sm`,onClick:()=>O(!0),disabled:C.length===0,title:C.length===0?`No non-public FormViews available`:`Publish a FormView`,children:[(0,b.jsx)(me,{className:`h-3.5 w-3.5`}),(0,b.jsx)(`span`,{className:`ml-1.5`,children:`Publish form…`})]}),(0,b.jsxs)(h,{variant:`outline`,size:`sm`,onClick:X,disabled:w,children:[(0,b.jsx)(de,{className:`h-3.5 w-3.5 ${w?`animate-spin`:``}`}),(0,b.jsx)(`span`,{className:`ml-1.5`,children:`Refresh`})]})]})]}),(0,b.jsxs)(ne,{children:[E&&(0,b.jsx)(`div`,{className:`mb-3 rounded-md border border-destructive/40 bg-destructive/10 p-3 text-sm text-destructive`,children:E}),!w&&!$&&(0,b.jsxs)(`div`,{className:`rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground`,children:[(0,b.jsx)(`p`,{className:`font-medium text-foreground`,children:`No public forms yet`}),(0,b.jsxs)(`p`,{className:`mt-1`,children:[`Click `,(0,b.jsx)(`strong`,{children:`Publish form…`}),` above to share an existing form, or build a new one in Views & Apps and mark it public.`]})]}),$&&(0,b.jsxs)(ue,{children:[(0,b.jsx)(le,{children:(0,b.jsxs)(p,{children:[(0,b.jsx)(g,{children:`Name`}),(0,b.jsx)(g,{children:`Object`}),(0,b.jsx)(g,{children:`Slug`}),(0,b.jsx)(g,{children:`Public URL`}),(0,b.jsx)(g,{className:`text-right`,children:`Actions`})]})}),(0,b.jsx)(u,{children:t.map(e=>{let t=Z(e.slug);return(0,b.jsxs)(p,{children:[(0,b.jsx)(m,{children:(0,b.jsxs)(`div`,{className:`flex flex-col`,children:[(0,b.jsx)(`span`,{className:`font-medium`,children:e.label??e.name}),(0,b.jsx)(`code`,{className:`text-xs text-muted-foreground`,children:e.name})]})}),(0,b.jsx)(m,{children:e.object?(0,b.jsx)(se,{variant:`secondary`,children:e.object}):(0,b.jsx)(`span`,{className:`text-muted-foreground`,children:`—`})}),(0,b.jsx)(m,{children:(0,b.jsx)(`code`,{className:`text-xs`,children:e.slug})}),(0,b.jsx)(m,{children:(0,b.jsxs)(`a`,{href:t,target:`_blank`,rel:`noreferrer`,className:`inline-flex items-center gap-1 text-xs text-primary underline-offset-2 hover:underline`,children:[t,(0,b.jsx)(fe,{className:`h-3 w-3`})]})}),(0,b.jsx)(m,{className:`text-right`,children:(0,b.jsxs)(`div`,{className:`inline-flex gap-1`,children:[(0,b.jsx)(h,{variant:`ghost`,size:`sm`,title:`Copy URL`,onClick:()=>Q(`URL`,t),children:(0,b.jsx)(ie,{className:`h-3.5 w-3.5`})}),(0,b.jsx)(h,{variant:`ghost`,size:`sm`,title:`Copy <iframe> embed`,onClick:()=>Q(`iframe snippet`,ye(e.slug)),children:(0,b.jsx)(re,{className:`h-3.5 w-3.5`})}),(0,b.jsx)(h,{variant:`ghost`,size:`sm`,title:`Copy React snippet`,onClick:()=>Q(`React snippet`,be(e.slug)),children:(0,b.jsx)(ee,{className:`h-3.5 w-3.5`})}),(0,b.jsx)(h,{variant:`ghost`,size:`sm`,title:`Edit sharing & post-submit behavior`,onClick:()=>Se(e),children:(0,b.jsx)(ce,{className:`h-3.5 w-3.5`})})]})})]},e.name)})})]})]})]}),(0,b.jsx)(a,{open:ge,onOpenChange:O,children:(0,b.jsxs)(s,{className:`sm:max-w-md`,children:[(0,b.jsxs)(_,{children:[(0,b.jsx)(i,{children:`Publish a FormView`}),(0,b.jsxs)(c,{children:[`Pick an existing FormView and turn it into a public form by enabling `,(0,b.jsx)(`code`,{className:`text-xs`,children:`sharing.allowAnonymous`}),` `,`and setting `,(0,b.jsx)(`code`,{className:`text-xs`,children:`publicLink`}),`.`]})]}),(0,b.jsxs)(`div`,{className:`space-y-3`,children:[(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`publish-view`,children:`FormView`}),(0,b.jsxs)(`select`,{id:`publish-view`,className:`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm`,value:k,onChange:e=>A(e.target.value),children:[(0,b.jsx)(`option`,{value:``,children:`— Select a FormView —`}),C.map(e=>(0,b.jsxs)(`option`,{value:e.name,children:[e.label??e.name,` (`,e.name,`) `,e.object?`· ${e.object}`:``]},e.name))]})]}),(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`publish-slug`,children:`URL slug`}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`span`,{className:`text-xs text-muted-foreground whitespace-nowrap`,children:`/console/f/`}),(0,b.jsx)(d,{id:`publish-slug`,placeholder:`contact-us`,value:j,onChange:e=>M(e.target.value)})]}),(0,b.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Lowercase letters, digits, dashes and underscores only.`})]})]}),(0,b.jsxs)(l,{children:[(0,b.jsx)(h,{variant:`ghost`,onClick:()=>O(!1),disabled:N,children:`Cancel`}),(0,b.jsx)(h,{onClick:xe,disabled:N||!k||!j,children:N?`Publishing…`:`Publish`})]})]})}),(0,b.jsx)(a,{open:_e,onOpenChange:F,children:(0,b.jsxs)(s,{className:`sm:max-w-lg`,children:[(0,b.jsxs)(_,{children:[(0,b.jsx)(i,{children:I?`Edit ${I.label??I.name}`:`Edit form`}),(0,b.jsx)(c,{children:`Configure the public URL and what happens after submit.`})]}),(0,b.jsxs)(`div`,{className:`space-y-3`,children:[(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`edit-slug`,children:`URL slug`}),(0,b.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,b.jsx)(`span`,{className:`text-xs text-muted-foreground whitespace-nowrap`,children:`/console/f/`}),(0,b.jsx)(d,{id:`edit-slug`,value:R,onChange:e=>z(e.target.value)})]})]}),(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`edit-behavior`,children:`After submit`}),(0,b.jsxs)(`select`,{id:`edit-behavior`,className:`flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm`,value:B,onChange:e=>V(e.target.value),children:[(0,b.jsx)(`option`,{value:`thank-you`,children:`Show a thank-you panel`}),(0,b.jsx)(`option`,{value:`redirect`,children:`Redirect to a URL`}),(0,b.jsx)(`option`,{value:`continue`,children:`Reset for another response`}),(0,b.jsx)(`option`,{value:`next-record`,children:`Advance to next record (internal queues)`})]})]}),B===`thank-you`&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`edit-tytitle`,children:`Title`}),(0,b.jsx)(d,{id:`edit-tytitle`,placeholder:`Thanks!`,value:H,onChange:e=>U(e.target.value)})]}),(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`edit-tymsg`,children:`Message`}),(0,b.jsx)(d,{id:`edit-tymsg`,placeholder:`Your submission has been received.`,value:W,onChange:e=>G(e.target.value)})]})]}),B===`redirect`&&(0,b.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,b.jsx)(f,{htmlFor:`edit-url`,children:`Redirect URL`}),(0,b.jsx)(d,{id:`edit-url`,type:`url`,placeholder:`https://example.com/thanks`,value:K,onChange:e=>q(e.target.value)})]})]}),(0,b.jsxs)(l,{children:[(0,b.jsx)(h,{variant:`ghost`,onClick:()=>F(!1),disabled:J,children:`Cancel`}),(0,b.jsx)(h,{onClick:Ce,disabled:J||!R,children:J?`Saving…`:`Save`})]})]})})]})}export{C as PublicFormsPage};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,f as n,t as r,u as i}from"./vendor-react-DR370ovB.js";import{r as a}from"./framework-crD8qZlm.js";import{$ as o,At as s,Bt as c,Da as l,Ea as u,Ei as d,Gn as f,Ht as p,Jt as m,Kn as h,Lt as g,Rt as _,Ua as v,Vt as y,Wn as b,Yt as x,Zn as S,Zs as C,dt as w,en as T,hs as E,in as D,nr as O,pr as k,rr as A,tr as j,ut as M,zt as N}from"./ui-components-BrY5joKQ.js";import{r as P}from"./vendor-ui-utils-rQOI1gAo.js";import{a as F,i as I,n as L,o as R,t as z}from"./types-BkFEpiv3.js";var B=e(t(),1),V=r();function H({reason:e,className:t}){return(0,V.jsxs)(S,{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)(u,{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)(S,{variant:`outline`,className:`text-blue-700 border-blue-300 text-[10px]`,children:[`Inherited from `,a(r.scope)]}):i?(0,V.jsxs)(S,{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)(D,{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)(S,{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:s,saving:l,labels:u}=e,d=(0,B.useId)(),f=!!(s||l),h=z(t.label),S=t.key&&u?u.fieldLabel(t.key,h):h,C=t.key&&u?u.fieldHelp(t.key,t.description):t.description;if(t.type===`group`){let e=t.id&&u?u.groupTitle(t.id,h):h,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)(g,{className:`mt-3`})]})}if(t.type===`info_banner`)return(0,V.jsxs)(j,{variant:t.bannerSeverity===`error`?`destructive`:`default`,className:`my-2`,children:[(0,V.jsx)(v,{className:`h-4 w-4`}),(0,V.jsx)(A,{children:h}),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:h}),t.description?(0,V.jsx)(`div`,{className:`text-xs text-muted-foreground`,children:t.description}):null]}),(0,V.jsx)(E,{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:S,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,h):h;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)(k,{size:`sm`,variant:`secondary`,onClick:a,disabled:l,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:S,labels:u}),e,(0,V.jsx)(G,{description:C})]}),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)(T,{id:d,type:t.type===`email`?`email`:t.type===`url`?`url`:`text`,value:r??``,minLength:t.minLength,maxLength:t.maxLength,pattern:t.pattern,disabled:f,onChange:e=>i(e.target.value)}));case`password`:return P((0,V.jsx)(T,{id:d,type:`password`,autoComplete:`new-password`,placeholder:r?`••••••••`:``,disabled:f,onChange:e=>i(e.target.value)}));case`textarea`:return P((0,V.jsx)(o,{id:d,rows:t.rows??4,value:r??``,minLength:t.minLength,maxLength:t.maxLength,disabled:f,onChange:e=>i(e.target.value)}));case`number`:return P((0,V.jsx)(T,{id:d,type:`number`,value:r,min:t.min,max:t.max,step:t.step,disabled:f,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:S,labels:u}),(0,V.jsx)(G,{description:C})]}),(0,V.jsx)(M,{id:d,checked:!!r,disabled:f,onCheckedChange:e=>i(e)})]});case`select`:return P((0,V.jsxs)(_,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:f,children:[(0,V.jsx)(y,{id:d,children:(0,V.jsx)(p,{placeholder:`Select…`})}),(0,V.jsx)(N,{children:t.options?.map(e=>(0,V.jsx)(c,{value:String(e.value),children:F(e)},String(e.value)))})]}));case`radio`:return P((0,V.jsx)(m,{value:r==null?void 0:String(r),onValueChange:e=>i(e),disabled:f,children:t.options?.map(e=>(0,V.jsxs)(`div`,{className:`flex items-center space-x-2`,children:[(0,V.jsx)(x,{value:String(e.value),id:`${d}-${e.value}`}),(0,V.jsx)(D,{htmlFor:`${d}-${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)(b,{checked:e.map(String).includes(n),disabled:f,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)(w,{value:[Number(r??t.min??0)],min:t.min??0,max:t.max??100,step:t.step??1,disabled:f,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:d,type:`color`,value:r??`#000000`,disabled:f,onChange:e=>i(e.target.value),className:`w-16 h-9 p-1`}),(0,V.jsx)(T,{value:r??``,disabled:f,onChange:e=>i(e.target.value),className:`flex-1 font-mono text-sm`})]}));case`json`:return P((0,V.jsx)(o,{id:d,rows:t.rows??6,className:`font-mono text-xs`,value:typeof r==`string`?r:JSON.stringify(r??null,null,2),disabled:f,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(),t=i(),r=e.namespace??``,[a,o]=(0,B.useState)(null),[c,u]=(0,B.useState)(!0),[p,m]=(0,B.useState)(!1),[g,_]=(0,B.useState)(null),[v,y]=(0,B.useState)({}),b=(0,B.useCallback)(async()=>{u(!0),_(null);try{o(await L(r)),y({})}catch(e){_(e?.message??`Failed to load settings`)}finally{u(!1)}},[r]);(0,B.useEffect)(()=>{r&&b()},[r,b]);let x=(0,B.useMemo)(()=>{let e={};if(!a)return e;for(let[t,n]of Object.entries(a.values))e[t]=n.value;return{...e,...v}},[a,v]),w=(0,B.useMemo)(()=>Object.keys(v),[v]),T=J(r);if(!r)return(0,V.jsx)(`div`,{className:`p-6 text-muted-foreground`,children:`No namespace selected.`});if(c)return(0,V.jsxs)(`div`,{className:`p-6 space-y-3 max-w-3xl`,children:[(0,V.jsx)(s,{className:`h-8 w-1/3`}),(0,V.jsx)(s,{className:`h-4 w-2/3`}),(0,V.jsx)(s,{className:`h-32 w-full`}),(0,V.jsx)(s,{className:`h-32 w-full`})]});if(g)return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl`,children:[(0,V.jsxs)(k,{variant:`ghost`,size:`sm`,onClick:()=>t(-1),children:[(0,V.jsx)(C,{className:`h-4 w-4 mr-1`}),` Back`]}),(0,V.jsx)(f,{className:`mt-3`,children:(0,V.jsx)(h,{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,A=T.title(z(E.label)),j=T.description(E.description),M=async()=>{if(w.length!==0){m(!0);try{let e=await F(r,v);o({...a,values:{...D,...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{m(!1)}}},N=async e=>{m(!0);try{let t=await I(r,e,v);t.ok?P.success(t.message??`Action succeeded`):P.error(t.message??`Action failed`)}catch(e){P.error(e?.message??`Action failed`)}finally{m(!1)}};return(0,V.jsxs)(`div`,{className:`p-6 max-w-3xl mx-auto pb-32`,children:[(0,V.jsxs)(k,{variant:`ghost`,size:`sm`,onClick:()=>t(`/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:[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:A}),E.beta?(0,V.jsx)(S,{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,x)).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 v?v[n]:r?.value:void 0,onChange:e=>n&&y(t=>({...t,[n]:e})),onAction:e.type===`action_button`?()=>N(e.id??n??`test`):void 0,locked:r?.locked,saving:p,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)(k,{variant:`ghost`,size:`sm`,onClick:()=>y({}),disabled:p,children:[(0,V.jsx)(d,{className:`h-4 w-4 mr-1`}),` Discard`]}),(0,V.jsxs)(k,{onClick:M,disabled:p,children:[p?(0,V.jsx)(l,{className:`h-4 w-4 mr-1 animate-spin`}):null,`Save changes`]})]})]})}):null]})}export{X as SettingsView};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-CMxvf4Kt.js";import{_ as t,l as n,t as r,u as i}from"./vendor-react-DR370ovB.js";var a=e(t(),1),o=r(),s=(0,a.createContext)(!1),c=`preview`,l=`draft`;function u(e){return new URLSearchParams(e).get(c)===l}var d=!1;function f(){d=!0}function p({force:e,children:t}){let r=n(),f=i(),p=(0,a.useMemo)(()=>u(r.search),[r.search]),[m,h]=(0,a.useState)(p);return(0,a.useEffect)(()=>{if(p){h(!0),d=!1;return}if(!m)return;if(d){d=!1,h(!1);return}let e=new URLSearchParams(r.search);e.set(c,l),f(`${r.pathname}?${e.toString()}${r.hash}`,{replace:!0})},[p,m,r.pathname,r.search,r.hash,f]),(0,o.jsx)(s.Provider,{value:e??(p||m),children:t})}function m(){return(0,a.useContext)(s)}var h=null,g=0,_=0,v=null,y={editor:h,openSeq:g,reviewSeq:_,reviewTarget:v},b=new Set;function x(){y={editor:h,openSeq:g,reviewSeq:_,reviewTarget:v};for(let e of b)e()}function S(e,t){return e===t?!0:JSON.stringify(e)===JSON.stringify(t)}var C={subscribe(e){return b.add(e),()=>{b.delete(e)}},getSnapshot(){return y},setEditor(e){S(h,e)||(h=e,x())},requestOpen(){g+=1,x()},requestReview(e){_+=1,v=e,x()}},w=new Set;function T(e){for(let t of w)t(e)}function E(e){return w.add(e),()=>{w.delete(e)}}function D(){return(0,a.useSyncExternalStore)(C.subscribe,C.getSnapshot,C.getSnapshot)}function O(e){(0,a.useEffect)(()=>(C.setEditor(e),()=>C.setEditor(null)),[e?JSON.stringify(e):``])}function k(){C.requestOpen()}function A(e){C.requestReview(e)}export{D as a,p as c,E as i,f as l,k as n,O as o,A as r,c as s,T as t,m as u};
@@ -1 +0,0 @@
1
- import{pt as e}from"./framework-crD8qZlm.js";import{c as t}from"./vendor-objectstack-RB3xvhcR.js";var n=class{cache;inflight;maxSize;ttl;stats;constructor(e={}){this.cache=new Map,this.inflight=new Map,this.maxSize=e.maxSize||100,this.ttl=e.ttl||300*1e3,this.stats={hits:0,misses:0,evictions:0,coalesced:0}}async get(e,t){let n=Date.now(),r=this.cache.get(e);if(r){if(n-r.timestamp<this.ttl)return r.accessCount++,r.lastAccessed=n,this.stats.hits++,this.cache.delete(e),this.cache.set(e,r),r.data;this.cache.delete(e)}let i=this.inflight.get(e);if(i)return this.stats.coalesced++,i;this.stats.misses++;let a=(async()=>{try{let n=await t();return this.set(e,n),n}finally{this.inflight.delete(e)}})();return this.inflight.set(e,a),a}prime(e,t){this.set(e,t)}set(e,t){let n=Date.now();this.cache.size>=this.maxSize&&!this.cache.has(e)&&this.evictLRU(),this.cache.set(e,{data:t,timestamp:n,accessCount:1,lastAccessed:n})}evictLRU(){let e=this.cache.keys().next().value;e!==void 0&&(this.cache.delete(e),this.stats.evictions++)}invalidate(e){e?this.cache.delete(e):this.cache.clear()}clear(){this.cache.clear(),this.inflight.clear(),this.stats={hits:0,misses:0,evictions:0,coalesced:0}}getStats(){let e=this.stats.hits+this.stats.misses,t=e>0?this.stats.hits/e:0;return{size:this.cache.size,maxSize:this.maxSize,hits:this.stats.hits,misses:this.stats.misses,evictions:this.stats.evictions,coalesced:this.stats.coalesced,hitRate:t}}getCachedSync(e){let t=this.cache.get(e);if(t){if(this.ttl>0&&Date.now()-t.timestamp>this.ttl){this.cache.delete(e);return}return this.cache.delete(e),this.cache.set(e,t),this.stats.hits++,t.data}}has(e){let t=this.cache.get(e);return t?Date.now()-t.timestamp>=this.ttl?(this.cache.delete(e),!1):!0:!1}},r=class extends Error{code;statusCode;details;constructor(e,t,n,r){super(e),this.code=t,this.statusCode=n,this.details=r,this.name=`ObjectStackError`,Error.captureStackTrace&&Error.captureStackTrace(this,this.constructor)}toJSON(){return{name:this.name,message:this.message,code:this.code,statusCode:this.statusCode,details:this.details,stack:this.stack}}},i=class extends r{constructor(e,t){super(`Metadata not found for object: ${e}`,`METADATA_NOT_FOUND`,404,{objectName:e,...t}),this.name=`MetadataNotFoundError`}},a=class extends r{successCount;failureCount;errors;constructor(e,t,n,r,i){super(`Bulk ${e} operation failed: ${t} succeeded, ${n} failed`,`BULK_OPERATION_ERROR`,500,{operation:e,successCount:t,failureCount:n,errors:r,...i}),this.successCount=t,this.failureCount=n,this.errors=r,this.name=`BulkOperationError`}getSummary(){let e=this.successCount+this.failureCount,t=e>0?this.failureCount/e:0;return{operation:this.details?.operation,total:e,successful:this.successCount,failed:this.failureCount,failureRate:t,errors:this.errors}}},o=class extends r{url;constructor(e,t,n,r){super(`Connection error: ${e}`,`CONNECTION_ERROR`,r||503,{url:t,...n}),this.url=t,this.name=`ConnectionError`}},s=class extends r{constructor(e=`Authentication failed`,t,n){super(e,`AUTHENTICATION_ERROR`,n||401,t),this.name=`AuthenticationError`}},c=class extends r{field;validationErrors;constructor(e,t,n,r){super(e,`VALIDATION_ERROR`,400,{field:t,validationErrors:n,...r}),this.field=t,this.validationErrors=n,this.name=`ValidationError`}getValidationErrors(){return this.validationErrors||[]}};function l(e,t){let n=e?.status||e?.statusCode||500,a=e?.message||e?.statusText||`Unknown error`,l={context:t,response:{status:n,data:e?.data,headers:e?.headers}};switch(n){case 401:return new s(a,l,401);case 403:return new s(a,l,403);case 404:return t?.includes(`metadata`)||t?.includes(`schema`)||t?.includes(`getObjectSchema`)?new i(u(t),l):new r(a,`NOT_FOUND`,404,l);case 400:return new c(a,void 0,e?.data?.errors,l);case 503:return new o(a,e?.config?.url,l,503);case 504:return new o(a,e?.config?.url,l,504);default:return new r(a,`UNKNOWN_ERROR`,n,l)}}function u(e){if(!e)return`unknown`;let t=e.match(/\(([^)]+)\)/);return t?t[1]:`unknown`}var d=`sys_user_preference`;function f(e){let{dataSource:t,userId:n,key:r,resource:i=d,onError:a=()=>{}}=e,o=null,s=async()=>{let e={$filter:{user_id:n,key:r},$top:1};return((await t.find(i,e))?.data??[]).find(e=>{if(!e)return!1;let t=e.user_id!==void 0&&e.user_id!==n,i=e.key!==void 0&&e.key!==r;return!t&&!i})??null},c=e=>{if(Array.isArray(e))return e;if(typeof e==`string`)try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}return[]};return{async load(){try{let e=await s();return e?(e.id!==void 0&&e.id!==null&&(o=e.id),c(e.value)):(o=null,[])}catch(e){return a(`load`,e),[]}},async save(e){try{let c=new Date().toISOString();if(o!==null)try{await t.update(i,o,{value:e,updated_at:c});return}catch(e){o=null,a(`save`,e)}let l=await s();if(l&&l.id!==void 0&&l.id!==null){o=l.id,await t.update(i,l.id,{value:e,updated_at:c});return}let u=(await t.create(i,{user_id:n,key:r,value:e,updated_at:c}))?.id;u!=null&&(o=u)}catch(e){a(`save`,e)}}}}var p=`/meta`,m=`/api/v1`;function h(e){let t=e.baseUrl.replace(/\/+$/,``),n=e.environmentId?`${m}/environments/${encodeURIComponent(e.environmentId)}${p}`:`${m}${p}`;return/\/api\/v\d+$/i.test(t)?`${t.replace(/\/api\/v\d+$/i,``)}${e.environmentId?`${m}/environments/${encodeURIComponent(e.environmentId)}${p}`:`${m}${p}`}`:`${t}${n}`}async function g(e){let t;try{t=await e.json()}catch{t=await e.text().catch(()=>void 0)}let n=(t&&typeof t==`object`&&`error`in t?String(t.error):void 0)??`Metadata request failed: ${e.status} ${e.statusText}`,r=Error(n);return r.status=e.status,r.body=t,t&&typeof t==`object`&&`code`in t&&(r.code=String(t.code)),r}var _=class e{base;fetchImpl;headers;previewDrafts;constructor(e){this.base=h(e),this.fetchImpl=e.fetch??globalThis.fetch.bind(globalThis),this.headers={Accept:`application/json`,...e.headers??{}},this.previewDrafts=e.previewDrafts===!0}withEnvironment(t){return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),environmentId:t,fetch:this.fetchImpl,headers:this.headers,previewDrafts:this.previewDrafts})}withPreviewDrafts(t){if(t===this.previewDrafts)return this;let n=this.base.match(/\/api\/v\d+\/environments\/([^/]+)\/meta$/);return new e({baseUrl:this.base.replace(/\/api\/v\d+(?:\/environments\/[^/]+)?\/meta$/,``).replace(/\/+$/,``),...n?{environmentId:decodeURIComponent(n[1])}:{},fetch:this.fetchImpl,headers:this.headers,previewDrafts:t})}async listTypes(){let e=await this.fetchImpl(this.base,{method:`GET`,headers:this.headers,cache:`no-store`});if(!e.ok)throw await g(e);let t=await e.json();return Array.isArray(t)?t:t&&Array.isArray(t.entries)?t.entries:t&&Array.isArray(t.items)?t.items:t&&Array.isArray(t.types)?t.types.map(e=>({type:e})):[]}async list(e,t={}){let n=[];t.packageId&&n.push(`package=${encodeURIComponent(t.packageId)}`),this.previewDrafts&&n.push(`preview=draft`);let r=n.length?`?${n.join(`&`)}`:``,i=`${this.base}/${encodeURIComponent(e)}${r}`,a=await this.fetchImpl(i,{method:`GET`,headers:this.headers,cache:`no-store`});if(!a.ok)throw await g(a);let o=await a.json();return Array.isArray(o)?o:o&&Array.isArray(o.items)?o.items:[]}async listDrafts(e={}){let t=[];e.packageId&&t.push(`packageId=${encodeURIComponent(e.packageId)}`),e.type&&t.push(`type=${encodeURIComponent(e.type)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/_drafts${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(!i.ok)throw await g(i);let a=await i.json();return Array.isArray(a)?a:a?.drafts??a?.data?.drafts??[]}async get(e,t,n={}){let r=[];n.state===`draft`?r.push(`state=draft`):this.previewDrafts&&r.push(`preview=draft`);let i=r.length?`?${r.join(`&`)}`:``,a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${i}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(o.status===404)return null;if(!o.ok)throw await g(o);return await o.json()}async getDraft(e,t){return this.get(e,t,{state:`draft`})}async save(e,t,n,r={}){let i=[];r.force&&i.push(`force=true`),r.mode===`draft`&&i.push(`mode=draft`),r.packageId&&i.push(`package=${encodeURIComponent(r.packageId)}`);let a=i.length?`?${i.join(`&`)}`:``,o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${a}`,s={...this.headers,"Content-Type":`application/json`};r.ifMatch&&(s[`If-Match`]=r.ifMatch),r.actor&&(s[`X-Actor`]=r.actor);let c=await this.fetchImpl(o,{method:`PUT`,headers:s,body:JSON.stringify(n)});if(!c.ok)throw await g(c);return await c.json()}async publishDraft(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish`,r=await this.fetchImpl(n,{method:`POST`,headers:{...this.headers,"Content-Type":`application/json`,Accept:`application/json`},body:`{}`});if(!r.ok)throw await g(r);let i=await r.json().catch(()=>({}));return i?.data&&typeof i.data==`object`?i.data:i}async layered(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}?layers=true`,r=await this.fetchImpl(n,{method:`GET`,headers:this.headers,cache:`no-store`});if(r.status===404)return{code:null,overlay:null,overlayScope:null,effective:null};if(!r.ok)throw await g(r);let i=await r.json();return i&&(`code`in i||`overlay`in i||`effective`in i)?{code:i.code??null,overlay:i.overlay??null,overlayScope:i.overlayScope??null,effective:i.effective??null,...i._diagnostics?{_diagnostics:i._diagnostics}:{},...i.lock===void 0?{}:{lock:i.lock},...i.lockReason===void 0?{}:{lockReason:i.lockReason},...i.lockSource===void 0?{}:{lockSource:i.lockSource},...i.lockDocsUrl===void 0?{}:{lockDocsUrl:i.lockDocsUrl},...i.provenance===void 0?{}:{provenance:i.provenance},...i.packageId===void 0?{}:{packageId:i.packageId},...i.packageVersion===void 0?{}:{packageVersion:i.packageVersion},...i.editable===void 0?{}:{editable:i.editable},...i.deletable===void 0?{}:{deletable:i.deletable},...i.resettable===void 0?{}:{resettable:i.resettable}}:{code:null,overlay:null,overlayScope:null,effective:i}}async diagnostics(e={}){let t=[];e.type&&t.push(`type=${encodeURIComponent(e.type)}`),e.severity&&t.push(`severity=${encodeURIComponent(e.severity)}`),e.packageId&&t.push(`package=${encodeURIComponent(e.packageId)}`);let n=t.length?`?${t.join(`&`)}`:``,r=`${this.base}/diagnostics${n}`,i=await this.fetchImpl(r,{method:`GET`,headers:this.headers,cache:`no-store`});if(i.status===404)return{entries:[],total:0,scannedTypes:0,scannedItems:0,stats:{}};if(!i.ok)throw await g(i);let a=await i.json();return{entries:Array.isArray(a.entries)?a.entries:[],total:typeof a.total==`number`?a.total:0,scannedTypes:typeof a.scannedTypes==`number`?a.scannedTypes:0,scannedItems:typeof a.scannedItems==`number`?a.scannedItems:0,stats:a.stats&&typeof a.stats==`object`?a.stats:{}}}async references(e,t){let n=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/references`,r=await this.fetchImpl(n,{method:`GET`,headers:this.headers,cache:`no-store`});if(r.status===404)return[];if(!r.ok)throw await g(r);let i=await r.json();return Array.isArray(i)?i:i?.items??[]}async reset(e,t,n={}){let r=n.state===`draft`?`?state=draft`:``,i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}${r}`,a={...this.headers};n.ifMatch&&(a[`If-Match`]=n.ifMatch),n.actor&&(a[`X-Actor`]=n.actor);let o=await this.fetchImpl(i,{method:`DELETE`,headers:a});if(!o.ok)throw await g(o);return await o.json()}async publish(e,t,n={}){let r=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/publish`,i={...this.headers,"Content-Type":`application/json`};n.actor&&(i[`X-Actor`]=n.actor);let a=await this.fetchImpl(r,{method:`POST`,headers:i,body:JSON.stringify(n.message?{message:n.message}:{})});if(!a.ok)throw await g(a);return await a.json()}async rollback(e,t,n,r={}){let i=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/rollback`,a={...this.headers,"Content-Type":`application/json`};r.actor&&(a[`X-Actor`]=r.actor);let o=await this.fetchImpl(i,{method:`POST`,headers:a,body:JSON.stringify({toVersion:n,...r.message?{message:r.message}:{}})});if(!o.ok)throw await g(o);return await o.json()}async diff(e,t,n,r){let i=new URLSearchParams;n!==void 0&&i.set(`from`,String(n)),r!==void 0&&i.set(`to`,String(r));let a=i.toString(),o=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/diff${a?`?${a}`:``}`,s=await this.fetchImpl(o,{method:`GET`,headers:this.headers,cache:`no-store`});if(!s.ok)throw await g(s);return await s.json()}async history(e,t,n={}){let r=new URLSearchParams;n.sinceSeq!==void 0&&r.set(`sinceSeq`,String(n.sinceSeq)),n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/history${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await g(o);return await o.json()}async audit(e,t,n={}){let r=new URLSearchParams;n.limit!==void 0&&r.set(`limit`,String(n.limit));let i=r.toString(),a=`${this.base}/${encodeURIComponent(e)}/${encodeURIComponent(t)}/audit${i?`?${i}`:``}`,o=await this.fetchImpl(a,{method:`GET`,headers:this.headers,cache:`no-store`});if(!o.ok)throw await g(o);return await o.json()}},v={equals:`=`,eq:`=`,"==":`=`,not_equals:`!=`,notequals:`!=`,ne:`!=`,greater_than:`>`,greaterthan:`>`,gt:`>`,greater_than_or_equal:`>=`,greater_than_or_equals:`>=`,greaterthanorequal:`>=`,gte:`>=`,less_than:`<`,lessthan:`<`,lt:`<`,less_than_or_equal:`<=`,less_than_or_equals:`<=`,lessthanorequal:`<=`,lte:`<=`,in:`in`,not_in:`nin`,notin:`nin`,nin:`nin`,contains:`contains`,not_contains:`notcontains`,notcontains:`notcontains`,starts_with:`startswith`,startswith:`startswith`,ends_with:`endswith`,endswith:`endswith`,between:`between`,is_null:`isnull`,isnull:`isnull`,is_not_null:`isnotnull`,isnotnull:`isnotnull`};function y(e){return typeof e==`string`?v[e.toLowerCase()]??v[e]??e:null}function b(e){if(!e||typeof e!=`object`)return null;let t=e.field??e.name,n=y(e.operator??e.op??`=`);return!t||!n?null:[String(t),n,e.value]}function x(e){if(e!=null){if(Array.isArray(e)){if(e.length===0)return;let t=e[0];if(e.length>0&&typeof t==`object`&&t&&!Array.isArray(t)&&t.field!==void 0){let t=e.map(e=>b(e)).filter(e=>e!==null);return t.length===0?void 0:t.length===1?t[0]:[`and`,...t]}return e}if(typeof e==`object`)return Object.keys(e).length===0?void 0:e}}var S=new Map;async function C(e,t){let n=e||`<default>`,r=S.get(n);if(r)return r;let i=t().catch(e=>{throw S.delete(n),e});return S.set(n,i),i}function w(e){if(!e||typeof e!=`object`)return!1;let t=e;if(t.httpStatus===404||t.status===404||t.statusCode===404)return!0;let n=typeof t.code==`string`?t.code:``;return n===`object_not_found`||n===`record_not_found`}var T=class extends Error{code=`CONCURRENT_UPDATE`;httpStatus=409;currentVersion;currentRecord;constructor(e){super(e.message??`Record was modified by another user`),this.name=`ConcurrentUpdateError`,this.currentVersion=e.currentVersion,this.currentRecord=e.currentRecord}};function E(e){if(!e||typeof e!=`object`)return e;let t=e;if(t.code!==`CONCURRENT_UPDATE`&&t.httpStatus!==409||t.code!==`CONCURRENT_UPDATE`)return e;let n=t.details??{};return new T({currentVersion:typeof n.currentVersion==`string`?n.currentVersion:null,currentRecord:n.currentRecord??null,message:typeof t.message==`string`?t.message:void 0})}function D(){let e=e=>{if(!e||typeof e!=`object`)return!1;if(e.status===404||e.statusCode===404)return!0;let t=e.error;if(t&&typeof t==`object`){let e=t.code;if(e===`object_not_found`||e===`record_not_found`)return!0}return!1},t={debug:(e,t)=>console.debug(e,t??``),info:(e,t)=>console.info(e,t??``),warn:(e,t)=>console.warn(e,t??``),error:(t,n,r)=>{if(e(r)){console.debug(`[ObjectStack] ${t} (suppressed expected 404)`,r);return}console.error(t,n??``,r??``)},fatal:(e,t,n)=>console.error(e,t??``,n??``),log:(e,...t)=>console.log(e,...t),child:()=>t,withTrace:()=>t};return t}function O(e){if(typeof e!=`object`||!e)return JSON.stringify(e);if(Array.isArray(e))return`[${e.map(O).join(`,`)}]`;let t=e;return`{${Object.keys(t).sort().map(e=>`${JSON.stringify(e)}:${O(t[e])}`).join(`,`)}}`}var k=class{client;connected=!1;connectPromise=null;metadataCache;connectionState=`disconnected`;connectionStateListeners=[];batchProgressListeners=[];autoReconnect;maxReconnectAttempts;reconnectDelay;reconnectAttempts=0;baseUrl;token;fetchImpl;inflightFinds=new Map;missingResources=new Set;constructor(e){this.client=new t({...e,logger:D()}),this.metadataCache=new n(e.cache),this.autoReconnect=e.autoReconnect??!0,this.maxReconnectAttempts=e.maxReconnectAttempts??3,this.reconnectDelay=e.reconnectDelay??1e3,this.baseUrl=e.baseUrl,this.token=e.token,this.fetchImpl=e.fetch||globalThis.fetch.bind(globalThis)}async connect(){if(!this.connected)return this.connectPromise?this.connectPromise:(this.setConnectionState(`connecting`),this.connectPromise=(async()=>{try{let e=this.baseUrl||``,t=e?`${e.replace(/\/$/,``)}/api/v1/discovery`:`/api/v1/discovery`,n=await C(e,async()=>{let e=await this.fetchImpl(t,{method:`GET`,headers:this.token?{Authorization:`Bearer ${this.token}`}:void 0});if(!e.ok)throw Error(`discovery ${e.status} ${e.statusText}`);let n=await e.json();return n&&typeof n.success==`boolean`&&`data`in n?n.data:n});this.client.discoveryInfo=n,this.connected=!0,this.reconnectAttempts=0,this.setConnectionState(`connected`)}catch(e){let t=new o(e instanceof Error?e.message:`Failed to connect to ObjectStack server`,void 0,{originalError:e});if(this.setConnectionState(`error`,t),this.autoReconnect&&this.reconnectAttempts<this.maxReconnectAttempts)await this.attemptReconnect();else throw t}finally{this.connectPromise=null}})(),this.connectPromise)}async attemptReconnect(){this.reconnectAttempts++,this.setConnectionState(`reconnecting`);let e=this.reconnectDelay*2**(this.reconnectAttempts-1);await new Promise(t=>setTimeout(t,e)),this.connected=!1,await this.connect()}getConnectionState(){return this.connectionState}isConnected(){return this.connected&&this.connectionState===`connected`}onConnectionStateChange(e){return this.connectionStateListeners.push(e),()=>{let t=this.connectionStateListeners.indexOf(e);t>-1&&this.connectionStateListeners.splice(t,1)}}onBatchProgress(e){return this.batchProgressListeners.push(e),()=>{let t=this.batchProgressListeners.indexOf(e);t>-1&&this.batchProgressListeners.splice(t,1)}}setConnectionState(e,t){this.connectionState=e;let n={state:e,timestamp:Date.now(),error:t};this.connectionStateListeners.forEach(e=>{try{e(n)}catch(e){console.error(`Error in connection state listener:`,e)}})}emitBatchProgress(e){this.batchProgressListeners.forEach(t=>{try{t(e)}catch(e){console.error(`Error in batch progress listener:`,e)}})}async find(e,t){if(this.missingResources.has(e))return{data:[],total:0};let n=`${e}::${O(t)}`,r=this.inflightFinds.get(n);if(r)return r;let i=(async()=>{if(await this.connect(),t?.$expand&&t.$expand.length>0){let n=await this.rawFindWithPopulate(e,t);return this.normalizeQueryResult(n,t)}let n=this.convertQueryParams(t);try{let r=await this.client.data.find(e,n);return this.normalizeQueryResult(r,t)}catch(t){if(w(t))return this.missingResources.add(e),{data:[],total:0};throw t}})();this.inflightFinds.set(n,i);let a=()=>{this.inflightFinds.get(n)===i&&this.inflightFinds.delete(n)};return i.then(a,a),i}async findOne(e,t,n){if(await this.connect(),n?.$expand&&n.$expand.length>0)try{let r={...n,$filter:{id:String(t)},$top:1},i=await this.rawFindWithPopulate(e,r);if(Array.isArray(i))return i[0]||null;let a=i;return(a.records||a.value||[])[0]||null}catch(e){if(w(e))return null}try{return(await this.client.data.get(e,String(t))).record}catch(e){if(w(e))return null;throw e}}async create(e,t){return await this.connect(),(await this.client.data.create(e,t)).record}async update(e,t,n,r){await this.connect();try{return(await this.client.data.update(e,String(t),n,r?.ifMatch?{ifMatch:r.ifMatch}:void 0)).record}catch(e){throw E(e)}}async delete(e,t,n){await this.connect();try{return(await this.client.data.delete(e,String(t),n?.ifMatch?{ifMatch:n.ifMatch}:void 0)).deleted}catch(e){throw E(e)}}async bulkUpdate(e,t,n){if(await this.connect(),!t||t.length===0)return 0;let r=t.map(e=>({id:String(e),data:n})),i=this.client.data.updateMany;if(typeof i==`function`)try{let n=await i(e,r,{continueOnError:!0});return n&&typeof n==`object`&&typeof n.succeeded==`number`?n.succeeded:Array.isArray(n)?n.length:t.length}catch(e){throw E(e)}let a=0;for(let r of t)try{await this.client.data.update(e,String(r),n),a++}catch{}return a}async bulkDelete(e,t){if(await this.connect(),!t||t.length===0)return 0;let n=t.map(e=>String(e)),r=this.client.data.deleteMany;if(typeof r==`function`)try{let t=await r(e,n,{continueOnError:!0});return t&&typeof t==`object`&&typeof t.succeeded==`number`?t.succeeded:Array.isArray(t)?t.length:n.length}catch(e){throw E(e)}let i=0;for(let t of n)try{await this.client.data.delete(e,t),i++}catch{}return i}async batchTransaction(e){let t=`${this.baseUrl}/api/v1/batch`,n=await fetch(t,{method:`POST`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()},body:JSON.stringify({operations:e})});if(!n.ok){let e=await n.json().catch(()=>({message:n.statusText}));throw new r(e.error||e.message||`Batch failed with status ${n.status}`,`BATCH_ERROR`,n.status)}return n.json()}async bulk(e,t,n){if(await this.connect(),!n||n.length===0)return[];let i=n.length,o=0,s=0,c=()=>{this.emitBatchProgress({operation:t,total:i,completed:o,failed:s,percentage:i>0?(o+s)/i*100:0})};try{switch(t){case`create`:{c();let t=await this.client.data.createMany(e,n);return o=t.length,s=i-o,c(),t}case`delete`:{let t=n.map(e=>e.id).filter(Boolean);if(t.length===0){let e=n.map((e,t)=>({index:t,error:`Missing ID for item at index ${t}`}));throw s=n.length,c(),new a(`delete`,0,n.length,e)}return c(),await this.client.data.deleteMany(e,t),o=t.length,s=i-o,c(),[]}case`update`:{if(typeof this.client.data.updateMany==`function`)try{c();let t=this.client.data.updateMany,r=await t(e,n);return o=r.length,s=i-o,c(),r}catch{}let t=[],r=[];for(let i=0;i<n.length;i++){let a=n[i],l=a.id;if(!l){r.push({index:i,error:`Missing ID`}),s++,c();continue}try{let n=await this.client.data.update(e,String(l),a);t.push(n.record),o++,c()}catch(e){let t=e instanceof Error?e.message:String(e);r.push({index:i,error:t}),s++,c()}}if(r.length>0)throw new a(`update`,t.length,r.length,r,{resource:e,totalRecords:n.length});return t}default:throw new r(`Unsupported bulk operation: ${t}`,`UNSUPPORTED_OPERATION`,400)}}catch(i){if(c(),i instanceof a||i instanceof r)throw i;let o=i instanceof Error?i.message:String(i),s=n.map((e,t)=>({index:t,error:o}));throw new a(t,0,n.length,s,{resource:e,originalError:i})}}normalizeQueryResult(e,t){if(Array.isArray(e))return{data:e,total:e.length,page:1,pageSize:e.length,hasMore:!1};let n=e,r=n.records||n.value||[];return{data:r,total:n.total??n.count??r.length,page:t?.$skip&&t.$top?Math.floor(t.$skip/t.$top)+1:1,pageSize:t?.$top,hasMore:t?.$top?r.length===t.$top:!1}}async rawFindWithPopulate(e,t){let n=new URLSearchParams;if(t.$expand&&t.$expand.length>0&&n.set(`populate`,t.$expand.join(`,`)),t.$top!==void 0&&n.set(`top`,String(t.$top)),t.$skip!==void 0&&n.set(`skip`,String(t.$skip)),t.$select&&t.$select.length>0){let e=t.$select.includes(`id`)?t.$select:[`id`,...t.$select];n.set(`select`,e.join(`,`))}if(t.$orderby)if(Array.isArray(t.$orderby)){let e=t.$orderby.map(e=>{if(typeof e==`string`)return e;let t=e.field;return(e.order||`asc`)===`desc`?`-${t}`:t}).join(`,`);n.set(`sort`,e)}else{let e=Object.entries(t.$orderby).map(([e,t])=>t===`desc`?`-${e}`:e).join(`,`);n.set(`sort`,e)}if(t.$filter!==void 0&&t.$filter!==null){let e=x(t.$filter);e!==void 0&&n.set(`filter`,JSON.stringify(e))}let r=this.baseUrl.replace(/\/$/,``),i=n.toString(),a=`${r}${/\/api\/v\d+$/i.test(r)?`/data`:`/api/v1/data`}/${e}${i?`?${i}`:``}`,o={"Content-Type":`application/json`};this.token&&(o.Authorization=`Bearer ${this.token}`);let s=await this.fetchImpl(a,{method:`GET`,headers:o});if(!s.ok){let e=await s.json().catch(()=>({message:s.statusText})),t=Error(e?.error?.message||e?.message||s.statusText);throw t.status=s.status,t}let c=await s.json();return c&&typeof c.success==`boolean`&&`data`in c?c.data:c}convertQueryParams(t){if(!t)return{};let n={};if(t.$select&&(n.select=t.$select.includes(`id`)?t.$select:[`id`,...t.$select]),t.$filter!==void 0&&t.$filter!==null&&!(Array.isArray(t.$filter)?t.$filter.length===0:typeof t.$filter==`object`&&Object.keys(t.$filter).length===0))if(Array.isArray(t.$filter))if(t.$filter.length>0&&typeof t.$filter[0]==`object`&&!Array.isArray(t.$filter[0])&&t.$filter[0].field!==void 0){let e=t.$filter.map(e=>b(e)).filter(e=>e!==null);e.length===0||(e.length===1?n.filters=e[0]:n.filters=[`and`,...e])}else n.filters=t.$filter;else n.filters=e(t.$filter);return t.$orderby&&(Array.isArray(t.$orderby)?n.sort=t.$orderby.map(e=>{if(typeof e==`string`)return e;let t=e.field;return(e.order||`asc`)===`desc`?`-${t}`:t}):n.sort=Object.entries(t.$orderby).map(([e,t])=>t===`desc`?`-${e}`:e)),t.$skip!==void 0&&(n.skip=t.$skip),t.$top!==void 0&&(n.top=t.$top),n}async getObjectSchema(e){await this.connect();try{return await this.metadataCache.get(e,async()=>{let t=await this.client.meta.getItem(`object`,e);return t&&t.item?t.item:t})}catch(t){let n=t;throw w(n)?new i(e,{originalError:t}):t instanceof r?t:l(n,`getObjectSchema(${e})`)}}getClient(){return this.client}async getDiscovery(){try{return await this.connect(),this.client.discoveryInfo||null}catch{return null}}async listViewOverrides(e){await this.connect();try{let t=`view-overrides:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItems(e),n=Array.isArray(t?.items)?t.items:[],r={};for(let e of n){if(!e||typeof e!=`object`)continue;let t=e.name??e.id??e._name;typeof t==`string`&&t&&(r[t]=e)}return r})}catch{return{}}}async getView(e,t){await this.connect();try{let n=`view:${e}:${t}`;return await this.metadataCache.get(n,async()=>{let n=await this.client.meta.getItem(e,t);return n&&n.item?n.item:n??null})}catch{return null}}async updateViewConfig(e,t,n){await this.connect();try{let r={...n||{},object:n?.object||e,name:t},i=await this.client.meta.saveItem(`view`,t,r),a=`view:${e}:${t}`;return this.metadataCache.invalidate?.(a),this.metadataCache.invalidate?.(`view-overrides:${e}`),this.metadataCache.invalidate?.(`views:${e}`),i&&i.item?i.item:i??void 0}catch(e){throw e}}async listViews(e){await this.connect();try{let t=await this.client.meta.getItems(`view`),n=Array.isArray(t?.items)?t.items:Array.isArray(t)?t:[],r=new Set([`form`,`detail`]);return n.filter(t=>{if(!t)return!1;let n=t.list??t;if((n?.data?.object??n?.object??n?.objectName)!==e)return!1;let i=t.viewKind??n?.viewKind;return!(i&&r.has(i))}).map(e=>{let t=e.list??e;return t&&t.config&&typeof t.config==`object`?{...t.config,name:t.name??t.config.name,label:t.label??t.config.label,isDefault:!!t.isDefault}:t})}catch(e){return console.warn(`[OBJECTSTACKDataSource] listViews failed:`,e),[]}}async createView(e,t){await this.connect();let n=String(t?.name||``).trim();if(!n){let r=String(t?.label||e||`view`).toLowerCase().replace(/[^a-z0-9_]+/g,`_`).replace(/^_+|_+$/g,``).slice(0,40);(!r||/^[0-9]/.test(r))&&(r=r?`view_${r}`:`view`);let i=Date.now().toString(36);n=`${r}_${i}`}let r={...t,name:n,object:t?.object||e,data:t?.data||{provider:`object`,object:e}};try{let t=await this.client.meta.saveItem(`view`,n,r);return this.metadataCache.invalidate?.(`views:${e}`),t&&t.item?t.item:r}catch(e){throw e}}async updateView(e,t,n){await this.connect();let r={};try{let e=await this.client.meta.getItem(`view`,t);r=e&&(e.item||e)||{},r?.list&&(r=r.list)}catch{}let i={...r,...n,name:t,object:r?.object||r?.data?.object||e};try{let n=await this.client.meta.saveItem(`view`,t,i);return this.metadataCache.invalidate?.(`views:${e}`),this.metadataCache.invalidate?.(`view:${e}:${t}`),n&&n.item?n.item:i}catch(e){throw e}}async deleteView(e,t){await this.connect();try{let n=await this.client.meta.deleteItem(`view`,t);return this.metadataCache.invalidate?.(`views:${e}`),this.metadataCache.invalidate?.(`view:${e}:${t}`),{deleted:!!(n?.deleted??n?.reset??!0)}}catch(e){throw e}}async getApp(e){await this.connect();try{let t=`app:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`apps`,e);return t&&t.item?t.item:t??null})}catch{return null}}async getPage(e){await this.connect();try{let t=`page:${e}`;return await this.metadataCache.get(t,async()=>{let t=await this.client.meta.getItem(`pages`,e);return t&&t.item?t.item:t??null})}catch{return null}}async updateDashboard(e,t){await this.connect();try{let n=await this.client.meta.saveItem(`dashboard`,e,t);return this.metadataCache.invalidate?.(`dashboards`),this.metadataCache.invalidate?.(`dashboard:${e}`),n&&n.item?n.item:n??void 0}catch(e){throw e}}async aggregate(e,t){if(await this.connect(),t!=null&&(Array.isArray(t.groupBy)||Array.isArray(t.aggregations)||t.where!==void 0)){let n={};Array.isArray(t.groupBy)&&(n.groupBy=t.groupBy),Array.isArray(t.aggregations)&&(n.aggregations=t.aggregations),t.where!==void 0&&(n.where=t.where),typeof t.limit==`number`&&(n.limit=t.limit);let r=await this.client.data.query(e,n);return Array.isArray(r)?r:Array.isArray(r?.records)?r.records:Array.isArray(r?.data)?r.data:[]}try{let n=t.function===`count`?`count`:`${t.field}_${t.function}`,r={cube:e,measures:[n],dimensions:t.groupBy&&t.groupBy!==`_all`?[t.groupBy]:[]};t.filter&&(r.where=t.filter);let i=await this.client.analytics.query(r),a=Array.isArray(i)?i:i?.rows&&Array.isArray(i.rows)?i.rows:i?.data&&Array.isArray(i.data)?i.data:i?.data?.rows&&Array.isArray(i.data.rows)?i.data.rows:i?.results&&Array.isArray(i.results)?i.results:[];if(a.length>0&&a.every(e=>e==null?!0:!(n in e&&e[n]!=null||t.field in e&&e[t.field]!=null))){let n=(await this.find(e,t.filter?{$filter:t.filter}:void 0)).data||[];return n.length===0?[]:this.aggregateClientSide(n,t)}return a.map(e=>{let r={...e};return n!==t.field&&n in r&&(r[t.field]=r[n],delete r[n]),r})}catch{let n=(await this.find(e,t.filter?{$filter:t.filter}:void 0)).data||[];return n.length===0?[]:this.aggregateClientSide(n,t)}}async queryDataset(e,t){await this.connect();let n=`${(this.baseUrl||``).replace(/\/$/,``)}/api/v1/analytics/dataset/query`,r=typeof window<`u`&&new URLSearchParams(window.location.search).get(`preview`)===`draft`,i=typeof e==`string`?{datasetName:e,selection:t,...r?{previewDrafts:!0}:{}}:{dataset:e,selection:t,...r?{previewDrafts:!0}:{}},a=await this.fetchImpl(n,{method:`POST`,headers:{"Content-Type":`application/json`,...this.token?{Authorization:`Bearer ${this.token}`}:{}},body:JSON.stringify(i)});if(!a.ok){let e=``;try{let t=await a.json();e=t?.message||t?.error||JSON.stringify(t)}catch{}throw Error(`Dataset query failed: ${a.status} ${a.statusText}${e?` — ${e}`:``}`)}let o=await a.json(),s=o&&typeof o==`object`&&`success`in o&&`data`in o?o.data:o;return{rows:Array.isArray(s?.rows)?s.rows:Array.isArray(s)?s:[],fields:Array.isArray(s?.fields)?s.fields:[]}}aggregateClientSide(e,t){let{field:n,function:r,groupBy:i}=t,a={};for(let t of e){let e=String(t[i]??`Unknown`);a[e]||(a[e]=[]),a[e].push(t)}return Object.entries(a).map(([e,t])=>{let a=t.map(e=>Number(e[n])||0),o;switch(r){case`count`:o=t.length;break;case`avg`:o=a.length>0?a.reduce((e,t)=>e+t,0)/a.length:0;break;case`min`:o=a.length>0?Math.min(...a):0;break;case`max`:o=a.length>0?Math.max(...a):0;break;default:o=a.reduce((e,t)=>e+t,0);break}return{[i]:e,[n]:o}})}async getItems(e,t){return await this.connect(),await Promise.all(t.map(async t=>{let n=`${e}:${t}`;return this.metadataCache.get(n,async()=>{let n=await this.client.meta.getItem(e,t);return n&&n.item?n.item:n})}))}getCached(e){return this.metadataCache.getCachedSync(e)}getCacheStats(){return this.metadataCache.getStats()}invalidateCache(e){this.metadataCache.invalidate(e)}clearCache(){this.metadataCache.clear()}async uploadFile(e,t,n){await this.connect();let i=new FormData;i.append(`file`,t),n?.recordId&&i.append(`recordId`,n.recordId),n?.fieldName&&i.append(`fieldName`,n.fieldName),n?.metadata&&i.append(`metadata`,JSON.stringify(n.metadata));let a=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,o=await fetch(a,{method:`POST`,body:i,headers:{...this.getAuthHeaders()}});if(!o.ok)throw new r((await o.json().catch(()=>({message:o.statusText}))).message||`Upload failed with status ${o.status}`,`UPLOAD_ERROR`,o.status);return o.json()}async uploadFiles(e,t,n){await this.connect();let i=new FormData;t.forEach((e,t)=>{i.append(`files`,e,e.name||`file-${t}`)}),n?.recordId&&i.append(`recordId`,n.recordId),n?.fieldName&&i.append(`fieldName`,n.fieldName),n?.metadata&&i.append(`metadata`,JSON.stringify(n.metadata));let a=`${this.baseUrl}/api/data/${encodeURIComponent(e)}/upload`,o=await fetch(a,{method:`POST`,body:i,headers:{...this.getAuthHeaders()}});if(!o.ok)throw new r((await o.json().catch(()=>({message:o.statusText}))).message||`Upload failed with status ${o.status}`,`UPLOAD_ERROR`,o.status);return o.json()}async cancelPendingApproval(e,t){await this.connect();let n=`${this.baseUrl}/api/v1/approvals/requests?recordId=${encodeURIComponent(t)}&object=${encodeURIComponent(e)}`,i=await this.fetchImpl(n,{method:`GET`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()}});if(!i.ok)throw new r(`Failed to look up approval requests (status ${i.status})`,`APPROVAL_LOOKUP_FAILED`,i.status);let a=await i.json().catch(()=>({})),o=(Array.isArray(a)?a:a?.data??[]).find(e=>e?.status===`pending`||e?.status===`in_approval`);if(!o?.id)throw new r(`No pending approval request found for this record`,`NO_PENDING_REQUEST`,404);let s=`${this.baseUrl}/api/v1/approvals/requests/${encodeURIComponent(o.id)}/recall`,c=await this.fetchImpl(s,{method:`POST`,headers:{"Content-Type":`application/json`,...this.getAuthHeaders()},body:JSON.stringify({})});if(!c.ok){let e=await c.json().catch(()=>({}));throw new r(e?.error||e?.message||`Recall failed with status ${c.status}`,e?.code||`APPROVAL_RECALL_FAILED`,c.status)}let l=await c.json().catch(()=>({}));return{requestId:o.id,status:l?.data?.request?.status??`recalled`}}getAuthHeaders(){let e={};return this.token&&(e.Authorization=`Bearer ${this.token}`),e}};export{_ as n,f as r,k as t};