@datatechsolutions/ui 3.12.1 → 3.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/astrlabe/graph-node.js +6 -6
- package/dist/astrlabe/graph-node.mjs +2 -2
- package/dist/astrlabe/index.js +114 -114
- package/dist/astrlabe/index.mjs +6 -6
- package/dist/astrlabe/workflow-canvas.js +6 -6
- package/dist/astrlabe/workflow-canvas.mjs +5 -5
- package/dist/{chunk-BPMYNE7S.mjs → chunk-3VCSMSJB.mjs} +6 -6
- package/dist/{chunk-BPMYNE7S.mjs.map → chunk-3VCSMSJB.mjs.map} +1 -1
- package/dist/{chunk-OM5NNUD2.mjs → chunk-4MNKVDTJ.mjs} +9 -8
- package/dist/chunk-4MNKVDTJ.mjs.map +1 -0
- package/dist/{chunk-PIIY2Z2O.mjs → chunk-4QCO4CBC.mjs} +4 -4
- package/dist/{chunk-PIIY2Z2O.mjs.map → chunk-4QCO4CBC.mjs.map} +1 -1
- package/dist/{chunk-4D23CQZM.mjs → chunk-4VEQJAXJ.mjs} +6 -6
- package/dist/{chunk-4D23CQZM.mjs.map → chunk-4VEQJAXJ.mjs.map} +1 -1
- package/dist/{chunk-FKRIQYRG.js → chunk-4Z5NZINA.js} +431 -481
- package/dist/chunk-4Z5NZINA.js.map +1 -0
- package/dist/{chunk-Z75CEP4V.js → chunk-54T5F65C.js} +29 -29
- package/dist/{chunk-Z75CEP4V.js.map → chunk-54T5F65C.js.map} +1 -1
- package/dist/{chunk-V3UZCOZI.js → chunk-7IAWXG43.js} +35 -35
- package/dist/{chunk-V3UZCOZI.js.map → chunk-7IAWXG43.js.map} +1 -1
- package/dist/{chunk-PLEWG2L7.js → chunk-AC54BNSK.js} +15 -15
- package/dist/{chunk-PLEWG2L7.js.map → chunk-AC54BNSK.js.map} +1 -1
- package/dist/{chunk-ID55ABBB.js → chunk-B3TA74C4.js} +100 -100
- package/dist/chunk-B3TA74C4.js.map +1 -0
- package/dist/{chunk-5OZTI7TR.js → chunk-CKY2QIRR.js} +6 -6
- package/dist/{chunk-5OZTI7TR.js.map → chunk-CKY2QIRR.js.map} +1 -1
- package/dist/{chunk-EZQ2D47U.js → chunk-CVEI4RQP.js} +4 -4
- package/dist/{chunk-EZQ2D47U.js.map → chunk-CVEI4RQP.js.map} +1 -1
- package/dist/{chunk-NK4H3JWN.mjs → chunk-DJHNSBIR.mjs} +63 -100
- package/dist/chunk-DJHNSBIR.mjs.map +1 -0
- package/dist/{chunk-P4RVGMZL.js → chunk-DTFU3ZTD.js} +5 -33
- package/dist/chunk-DTFU3ZTD.js.map +1 -0
- package/dist/{chunk-BHOT22QL.js → chunk-EBARYRSA.js} +2 -2
- package/dist/{chunk-BHOT22QL.js.map → chunk-EBARYRSA.js.map} +1 -1
- package/dist/{chunk-QGLGQXJE.js → chunk-FV42SSLP.js} +10 -10
- package/dist/chunk-FV42SSLP.js.map +1 -0
- package/dist/{chunk-RT264BD4.mjs → chunk-M4KRQXOT.mjs} +4 -4
- package/dist/{chunk-RT264BD4.mjs.map → chunk-M4KRQXOT.mjs.map} +1 -1
- package/dist/{chunk-WR55H7DH.mjs → chunk-O4RZCDP2.mjs} +2 -2
- package/dist/{chunk-WR55H7DH.mjs.map → chunk-O4RZCDP2.mjs.map} +1 -1
- package/dist/{chunk-VYU2FYDE.js → chunk-PM7A5I3X.js} +146 -183
- package/dist/chunk-PM7A5I3X.js.map +1 -0
- package/dist/{chunk-TDNBO3V7.js → chunk-Q7QPHZOV.js} +74 -74
- package/dist/{chunk-TDNBO3V7.js.map → chunk-Q7QPHZOV.js.map} +1 -1
- package/dist/{chunk-OW5LSEHU.mjs → chunk-QEACOJXX.mjs} +74 -74
- package/dist/chunk-QEACOJXX.mjs.map +1 -0
- package/dist/{chunk-N5GQIT7A.mjs → chunk-RMPXGEFL.mjs} +11 -10
- package/dist/chunk-RMPXGEFL.mjs.map +1 -0
- package/dist/{chunk-QSCWV47U.js → chunk-RPNMDGRA.js} +50 -50
- package/dist/chunk-RPNMDGRA.js.map +1 -0
- package/dist/{chunk-5TLKFOEL.mjs → chunk-RSCRIDMW.mjs} +275 -313
- package/dist/chunk-RSCRIDMW.mjs.map +1 -0
- package/dist/{chunk-XGAPZT4J.js → chunk-RUZPOHJW.js} +48 -47
- package/dist/chunk-RUZPOHJW.js.map +1 -0
- package/dist/{chunk-ULKZGM2T.js → chunk-RWZ2PLMQ.js} +177 -177
- package/dist/chunk-RWZ2PLMQ.js.map +1 -0
- package/dist/{chunk-UVFWKDRO.mjs → chunk-SCGICCQM.mjs} +15 -15
- package/dist/chunk-SCGICCQM.mjs.map +1 -0
- package/dist/{chunk-EDI46QA7.mjs → chunk-TRNDFSM6.mjs} +274 -324
- package/dist/chunk-TRNDFSM6.mjs.map +1 -0
- package/dist/{chunk-LRNVB7MO.js → chunk-ULSG4JLR.js} +6 -6
- package/dist/{chunk-LRNVB7MO.js.map → chunk-ULSG4JLR.js.map} +1 -1
- package/dist/{chunk-MFF37C24.js → chunk-UPWJRCAD.js} +445 -483
- package/dist/chunk-UPWJRCAD.js.map +1 -0
- package/dist/{chunk-RBH723MG.mjs → chunk-UUTTS3VV.mjs} +45 -45
- package/dist/chunk-UUTTS3VV.mjs.map +1 -0
- package/dist/{chunk-MYHBXIO2.js → chunk-VCL5LDS5.js} +42 -41
- package/dist/chunk-VCL5LDS5.js.map +1 -0
- package/dist/{chunk-PLTLRL2V.mjs → chunk-VPRAESA7.mjs} +3 -3
- package/dist/{chunk-PLTLRL2V.mjs.map → chunk-VPRAESA7.mjs.map} +1 -1
- package/dist/{chunk-HTODLUKG.js → chunk-VWZ53TE2.js} +12 -12
- package/dist/{chunk-HTODLUKG.js.map → chunk-VWZ53TE2.js.map} +1 -1
- package/dist/{chunk-3VYD7QL2.mjs → chunk-WX44DAQD.mjs} +9 -9
- package/dist/chunk-WX44DAQD.mjs.map +1 -0
- package/dist/{chunk-DJ33CSGJ.mjs → chunk-XYMHIZ3K.mjs} +5 -33
- package/dist/chunk-XYMHIZ3K.mjs.map +1 -0
- package/dist/{chunk-YXN2K77G.js → chunk-Y5VN4SPH.js} +26 -3
- package/dist/chunk-Y5VN4SPH.js.map +1 -0
- package/dist/{chunk-NQGLSM46.mjs → chunk-Y65X2NHF.mjs} +4 -4
- package/dist/{chunk-NQGLSM46.mjs.map → chunk-Y65X2NHF.mjs.map} +1 -1
- package/dist/{chunk-YYNGXKUE.mjs → chunk-YHD6SJIN.mjs} +15 -15
- package/dist/{chunk-YYNGXKUE.mjs.map → chunk-YHD6SJIN.mjs.map} +1 -1
- package/dist/{chunk-7VJ7CMMT.mjs → chunk-ZEFNBGYI.mjs} +26 -3
- package/dist/chunk-ZEFNBGYI.mjs.map +1 -0
- package/dist/{chunk-WLNY3GVM.mjs → chunk-ZPV7X4ZE.mjs} +7 -7
- package/dist/{chunk-WLNY3GVM.mjs.map → chunk-ZPV7X4ZE.mjs.map} +1 -1
- package/dist/index.js +709 -709
- package/dist/index.mjs +3 -3
- package/dist/lib/i18n-context.d.mts +12 -4
- package/dist/lib/i18n-context.d.ts +12 -4
- package/dist/lib/i18n-context.js +6 -6
- package/dist/lib/i18n-context.mjs +1 -1
- package/dist/platform/admin/index.js +12 -12
- package/dist/platform/admin/index.mjs +6 -6
- package/dist/platform/agents-workspace.js +9 -9
- package/dist/platform/agents-workspace.mjs +8 -8
- package/dist/platform/app-shell.js +5 -5
- package/dist/platform/app-shell.mjs +4 -4
- package/dist/platform/auth/index.js +29 -29
- package/dist/platform/auth/index.mjs +6 -6
- package/dist/platform/billing/index.js +7 -7
- package/dist/platform/billing/index.mjs +5 -5
- package/dist/platform/impersonation/index.js +5 -5
- package/dist/platform/impersonation/index.mjs +4 -4
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +112 -112
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/index.mjs +30 -30
- package/dist/platform/index.mjs.map +1 -1
- package/dist/platform/pages/index.d.mts +12 -2
- package/dist/platform/pages/index.d.ts +12 -2
- package/dist/platform/pages/index.js +451 -450
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +51 -50
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +9 -9
- package/dist/platform/settings/index.mjs +8 -8
- package/dist/platform/workflow-canvas-shell.js +7 -7
- package/dist/platform/workflow-canvas-shell.mjs +6 -6
- package/package.json +2 -1
- package/dist/chunk-3VYD7QL2.mjs.map +0 -1
- package/dist/chunk-5TLKFOEL.mjs.map +0 -1
- package/dist/chunk-7VJ7CMMT.mjs.map +0 -1
- package/dist/chunk-DJ33CSGJ.mjs.map +0 -1
- package/dist/chunk-EDI46QA7.mjs.map +0 -1
- package/dist/chunk-FKRIQYRG.js.map +0 -1
- package/dist/chunk-ID55ABBB.js.map +0 -1
- package/dist/chunk-MFF37C24.js.map +0 -1
- package/dist/chunk-MYHBXIO2.js.map +0 -1
- package/dist/chunk-N5GQIT7A.mjs.map +0 -1
- package/dist/chunk-NK4H3JWN.mjs.map +0 -1
- package/dist/chunk-OM5NNUD2.mjs.map +0 -1
- package/dist/chunk-OW5LSEHU.mjs.map +0 -1
- package/dist/chunk-P4RVGMZL.js.map +0 -1
- package/dist/chunk-QGLGQXJE.js.map +0 -1
- package/dist/chunk-QSCWV47U.js.map +0 -1
- package/dist/chunk-RBH723MG.mjs.map +0 -1
- package/dist/chunk-ULKZGM2T.js.map +0 -1
- package/dist/chunk-UVFWKDRO.mjs.map +0 -1
- package/dist/chunk-VYU2FYDE.js.map +0 -1
- package/dist/chunk-XGAPZT4J.js.map +0 -1
- package/dist/chunk-YXN2K77G.js.map +0 -1
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { DatasourceFormModal } from './chunk-
|
|
3
|
-
import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-
|
|
2
|
+
import { DatasourceFormModal } from './chunk-4MNKVDTJ.mjs';
|
|
3
|
+
import { useSubworkflowStore, SaveStatusBadge, WorkflowListBar, NodePalette, AutoSaveWorkspace, AgentModal, PipelineSettingsModal, SubworkflowModal, RunPanel, RunInputDialog, PreviewPanel } from './chunk-RSCRIDMW.mjs';
|
|
4
4
|
import { validateWorkflowGraph } from './chunk-LEXBTVGM.mjs';
|
|
5
|
-
import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-
|
|
6
|
-
import { useNotifications, PageErrorState, PageEmptyState, CopyableId, DynamicIslandConfirm } from './chunk-
|
|
5
|
+
import { useWorkflowStore, useModalStore, WorkflowBuilderProvider } from './chunk-TRNDFSM6.mjs';
|
|
6
|
+
import { useNotifications, PageErrorState, PageEmptyState, CopyableId, DynamicIslandConfirm } from './chunk-QEACOJXX.mjs';
|
|
7
|
+
import { useLocale, useTranslations } from './chunk-ZEFNBGYI.mjs';
|
|
7
8
|
import { executeWorkflow, getWorkflowById, getAgentConfigsWithPrompts, getAgentModels, getAgentToolDefinitions, getAgentRules, getDatasources, listModelProviderConnections, getAgentTools, getWorkflows, saveWorkflowDraft, publishWorkflow, createWorkflow, deleteWorkflow, updateAgentTool, updateAgentRule, createDatasource, getDatasourceSchema, getDatasourceTables, updateAgentConfig, createAgentConfig, updateWorkflowSettings, getWorkflowRuns, buildAuthenticatedApiUrl } from './chunk-NBW6WJQT.mjs';
|
|
8
|
-
import {
|
|
9
|
-
import { Button } from './chunk-WR55H7DH.mjs';
|
|
9
|
+
import { Button } from './chunk-O4RZCDP2.mjs';
|
|
10
10
|
import { useState, useRef, useCallback, useEffect, useMemo } from 'react';
|
|
11
11
|
import { useNavigate } from 'react-router';
|
|
12
12
|
import { ChartBarIcon, StopIcon, PlayIcon, DocumentCheckIcon } from '@heroicons/react/24/outline';
|
|
@@ -677,9 +677,11 @@ function AgentsWorkspace({ workflowId, messages }) {
|
|
|
677
677
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-shrink-0 items-center justify-between px-5 py-3", children: [
|
|
678
678
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
679
679
|
/* @__PURE__ */ jsx(
|
|
680
|
-
|
|
680
|
+
Button,
|
|
681
681
|
{
|
|
682
682
|
type: "button",
|
|
683
|
+
plain: true,
|
|
684
|
+
size: "sm",
|
|
683
685
|
onClick: () => openPipelineSettingsModal(
|
|
684
686
|
workflow.name,
|
|
685
687
|
workflow.description ?? "",
|
|
@@ -689,7 +691,6 @@ function AgentsWorkspace({ workflowId, messages }) {
|
|
|
689
691
|
isActive: workflow.isActive
|
|
690
692
|
}
|
|
691
693
|
),
|
|
692
|
-
className: "rounded-lg px-2.5 py-1 text-sm font-semibold text-gray-900 transition-colors hover:bg-gray-100/80 dark:text-white dark:hover:bg-white/10",
|
|
693
694
|
title: tWorkflow("editName"),
|
|
694
695
|
children: workflow.name || tWorkflow("title")
|
|
695
696
|
}
|
|
@@ -940,5 +941,5 @@ function AgentsWorkspace({ workflowId, messages }) {
|
|
|
940
941
|
}
|
|
941
942
|
|
|
942
943
|
export { AgentsWorkspace, applyWorkflowExecutionEventToStore, resetWorkflowRunPresentation, useRunEvents, useWorkflowExecution, useWorkflowRunPresentation };
|
|
943
|
-
//# sourceMappingURL=chunk-
|
|
944
|
-
//# sourceMappingURL=chunk-
|
|
944
|
+
//# sourceMappingURL=chunk-RMPXGEFL.mjs.map
|
|
945
|
+
//# sourceMappingURL=chunk-RMPXGEFL.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-run-events.ts","../src/hooks/use-workflow-run-presentation.ts","../src/hooks/use-workflow-execution.ts","../src/platform/agents-workspace.tsx"],"names":["useEffect","useState","useCallback","useRef","workflow"],"mappings":";;;;;;;;;;;;;AAoBA,IAAM,WAAA,GAAc,MAAA,CAAA,IAAA,CAAY,GAAA,CAAI,gBAAA,IAAoB,EAAA;AACxD,IAAM,YAAA,GAAe,YAAY,MAAA,GAAS,CAAA;AAI1C,SAAS,UAAA,CACP,UAAA,EACA,KAAA,EACA,SAAA,EACY;AAIZ,EAAA,IAAI,WAAA,GAAkC,IAAA;AACtC,EAAA,IAAI,SAAA,GAAY,KAAA;AAEhB,EAAA,wBAAA;AAAA,IACE,cAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,MAAA,EAAS,kBAAA,CAAmB,KAAK,CAAC,CAAA,OAAA,CAAA;AAAA,IAC9E,EAAE,oBAAoB,IAAA;AAAK,GAC7B,CACG,IAAA,CAAK,CAAC,GAAA,KAAQ;AACb,IAAA,IAAI,SAAA,EAAW;AACf,IAAA,WAAA,GAAc,IAAI,YAAY,GAAG,CAAA;AAEjC,IAAA,WAAA,CAAY,gBAAA,CAAiB,WAAA,EAAa,MAAM,SAAA,CAAU,aAAa,CAAA;AAEvE,IAAA,WAAA,CAAY,gBAAA,CAAiB,WAAA,EAAa,CAAC,YAAA,KAAiB;AAC1D,MAAA,IAAI;AACF,QAAA,SAAA,CAAU,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAI,CAA2B,CAAA;AAAA,MAC3E,CAAA,CAAA,MAAQ;AAAA,MAAyB;AAAA,IACnC,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,gBAAA,CAAiB,MAAA,EAAQ,CAAC,YAAA,KAAiB;AACrD,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAI,CAAA;AACzC,QAAA,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,MAAA,KAAW,eAAA,GAAkB,cAAc,QAAQ,CAAA;AAAA,MAC3E,CAAA,CAAA,MAAQ;AACN,QAAA,SAAA,CAAU,OAAO,WAAW,CAAA;AAAA,MAC9B;AACA,MAAA,WAAA,EAAa,KAAA,EAAM;AAAA,IACrB,CAAC,CAAA;AAED,IAAA,WAAA,CAAY,gBAAA,CAAiB,SAAS,MAAM;AAC1C,MAAA,WAAA,EAAa,KAAA,EAAM;AACnB,MAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,IACpB,CAAC,CAAA;AAAA,EACH,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,SAAA,CAAU,SAAS,CAAA;AAElC,EAAA,OAAO,MAAM;AACX,IAAA,SAAA,GAAY,IAAA;AACZ,IAAA,WAAA,EAAa,KAAA,EAAM;AAAA,EACrB,CAAA;AACF;AAIA,SAAS,gBAAA,CACP,WAAA,EACA,KAAA,EACA,SAAA,EACY;AACZ,EAAA,MAAM,EAAA,GAAK,IAAI,SAAA,CAAU,WAAW,CAAA;AAEpC,EAAA,EAAA,CAAG,gBAAA,CAAiB,QAAQ,MAAM;AAEhC,IAAA,EAAA,CAAG,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,QAAQ,WAAA,EAAa,KAAA,EAAO,CAAC,CAAA;AACtD,IAAA,SAAA,CAAU,WAAA,EAAY;AAAA,EACxB,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,gBAAA,CAAiB,SAAA,EAAW,CAAC,YAAA,KAAiB;AAC/C,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,YAAA,CAAa,IAAc,CAAA;AACnD,MAAA,IAAI,IAAA,CAAK,IAAA,KAAS,eAAA,IAAmB,IAAA,CAAK,SAAS,YAAA,EAAc;AAC/D,QAAA,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,IAAA,KAAS,eAAA,GAAkB,cAAc,QAAQ,CAAA;AACvE,QAAA,EAAA,CAAG,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,QAAQ,aAAA,EAAe,KAAA,EAAO,CAAC,CAAA;AACxD,QAAA,EAAA,CAAG,KAAA,EAAM;AACT,QAAA;AAAA,MACF;AACA,MAAA,SAAA,CAAU,QAAQ,IAAI,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AAAA,IAAyB;AAAA,EACnC,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,gBAAA,CAAiB,SAAS,MAAM;AACjC,IAAA,SAAA,CAAU,OAAA,EAAQ;AAAA,EACpB,CAAC,CAAA;AAED,EAAA,EAAA,CAAG,gBAAA,CAAiB,SAAS,MAAM;AAAA,EAEnC,CAAC,CAAA;AAED,EAAA,OAAO,MAAM;AACX,IAAA,IAAI,EAAA,CAAG,UAAA,KAAe,SAAA,CAAU,IAAA,EAAM;AACpC,MAAA,EAAA,CAAG,IAAA,CAAK,KAAK,SAAA,CAAU,EAAE,QAAQ,aAAA,EAAe,KAAA,EAAO,CAAC,CAAA;AAAA,IAC1D;AACA,IAAA,EAAA,CAAG,KAAA,EAAM;AAAA,EACX,CAAA;AACF;AAuBO,SAAS,YAAA,CACd,YACA,KAAA,EACqB;AACrB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,QAAA,CAAmC,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAwC,MAAM,CAAA;AAC1E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,UAAA,GAAa,OAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,UAAA,GAAa,OAAO,CAAC,CAAA;AAE3B,EAAA,MAAM,OAAA,GAAU,YAAY,MAAM;AAChC,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,KAAA,EAAO;AAE3B,IAAA,MAAM,SAAA,GAAY,eAAe,gBAAA,GAAmB,UAAA;AAEpD,IAAA,MAAM,SAAA,GAA6B;AAAA,MACjC,aAAa,MAAM;AACjB,QAAA,SAAA,CAAU,WAAW,CAAA;AACrB,QAAA,QAAA,CAAS,IAAI,CAAA;AACb,QAAA,UAAA,CAAW,OAAA,GAAU,CAAA;AAAA,MACvB,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAAU;AAClB,QAAA,SAAA,CAAU,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,KAAK,CAAC,CAAA;AAAA,MACtC,CAAA;AAAA,MACA,MAAA,EAAQ,CAAC,cAAA,KAAmB;AAC1B,QAAA,SAAA,CAAU,cAAc,CAAA;AACxB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB,CAAA;AAAA,MACA,SAAS,MAAM;AACb,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,QAAA,IAAI,UAAA,CAAW,UAAU,CAAA,EAAG;AAC1B,UAAA,UAAA,CAAW,OAAA,EAAA;AACX,UAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,GAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAA,CAAW,OAAA,GAAU,CAAC,CAAA,EAAG,GAAI,CAAA;AACvE,UAAA,UAAA,CAAW,SAAS,KAAK,CAAA;AAAA,QAC3B,CAAA,MAAO;AACL,UAAA,SAAA,CAAU,OAAO,CAAA;AACjB,UAAA,QAAA,CAAS,iCAAiC,CAAA;AAAA,QAC5C;AAAA,MACF;AAAA,KACF;AAEA,IAAA,UAAA,CAAW,OAAA,GAAU,SAAA,CAAU,UAAA,EAAY,KAAA,EAAO,SAAS,CAAA;AAAA,EAC7D,CAAA,EAAG,CAAC,UAAA,EAAY,KAAK,CAAC,CAAA;AAEtB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,KAAA,EAAO;AAE3B,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,SAAA,CAAU,WAAW,CAAA;AACrB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,UAAA,CAAW,OAAA,GAAU,CAAA;AAErB,IAAA,OAAA,EAAQ;AAER,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,UAAA,CAAW,OAAA,EAAQ;AACnB,QAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAC,CAAA;AAE/B,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,aAAa,MAAA,KAAW,WAAA;AAAA,IACxB,MAAA;AAAA,IACA;AAAA,GACF;AACF;ACrMO,SAAS,6BAA6B,OAAA,EAA+C;AAC1F,EAAA,OAAA,CAAQ,gBAAA,EAAiB;AACzB,EAAA,OAAA,CAAQ,aAAa,KAAK,CAAA;AAC5B;AAEO,SAAS,kCAAA,CACd,SACA,KAAA,EACM;AACN,EAAA,QAAQ,MAAM,IAAA;AAAM,IAClB,KAAK,aAAA;AACH,MAAA,OAAA,CAAQ,gBAAA,EAAiB;AACzB,MAAA,OAAA,CAAQ,aAAa,IAAI,CAAA;AACzB,MAAA;AAAA,IACF,KAAK,cAAA;AACH,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,MAAA,OAAA,CAAQ,aAAA,CAAc,MAAM,MAAA,EAAQ;AAAA,QAClC,MAAA,EAAQ,SAAA;AAAA,QACR,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,gBAAA;AACH,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,MAAA,OAAA,CAAQ,aAAA,CAAc,MAAM,MAAA,EAAQ;AAAA,QAClC,MAAA,EAAQ,SAAA;AAAA,QACR,MAAM,KAAA,CAAM,OAAA;AAAA,QACZ,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,YAAA;AACH,MAAA,IAAI,CAAC,MAAM,MAAA,EAAQ;AACnB,MAAA,OAAA,CAAQ,aAAA,CAAc,MAAM,MAAA,EAAQ;AAAA,QAClC,MAAA,EAAQ,OAAA;AAAA,QACR,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA;AACD,MAAA;AAAA,IACF,KAAK,eAAA;AAAA,IACL,KAAK,YAAA;AACH,MAAA,OAAA,CAAQ,aAAa,KAAK,CAAA;AAC1B,MAAA;AAAA,IACF;AACE,MAAA;AAAA;AAEN;AAEO,SAAS,0BAAA,CACd,QACA,MAAA,EACM;AACN,EAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,gBAAgB,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,aAAa,CAAA;AAErE,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,MAAA,4BAAA,CAA6B,EAAE,gBAAA,EAAkB,YAAA,EAAc,aAAA,EAAe,CAAA;AAC9E,MAAA;AAAA,IACF;AAEA,IAAA,gBAAA,EAAiB;AACjB,IAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,MAAA,kCAAA,CAAmC,EAAE,gBAAA,EAAkB,YAAA,EAAc,aAAA,IAAiB,KAAK,CAAA;AAAA,IAC7F;AAEA,IAAA,IAAI,MAAA,KAAW,WAAA,IAAe,MAAA,KAAW,QAAA,IAAY,WAAW,OAAA,EAAS;AACvE,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,WAAW,WAAA,EAAa;AACjC,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,QAAQ,YAAA,EAAc,aAAA,EAAe,MAAM,CAAC,CAAA;AACpE;;;AC3EO,SAAS,qBAAqB,UAAA,EAAoB;AACvD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,SAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,IAAc,IAAA,EAAM,WAAW,CAAA;AAC3D,EAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,gBAAgB,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,aAAa,CAAA;AAErE,EAAA,0BAAA,CAA2B,MAAA,CAAO,MAAA,EAAQ,WAAA,GAAc,MAAA,CAAO,SAAS,MAAM,CAAA;AAE9E,EAAAD,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,CAAO,WAAW,WAAA,IAAe,MAAA,CAAO,WAAW,QAAA,IAAY,MAAA,CAAO,WAAW,OAAA,EAAS;AAC5F,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,CAAO,MAAM,CAAC,CAAA;AAElB,EAAA,MAAM,GAAA,GAAME,WAAAA,CAAY,OAAO,cAAA,KAAmD;AAChF,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB,UAAA,EAAY,cAAc,CAAA;AAClE,MAAA,cAAA,CAAe,UAAU,EAAE,CAAA;AAAA,IAC7B,CAAA,SAAE;AACA,MAAA,cAAA,CAAe,KAAK,CAAA;AAAA,IACtB;AAAA,EACF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,IAAA,GAAOA,YAAY,MAAM;AAC7B,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,4BAAA,CAA6B,EAAE,gBAAA,EAAkB,YAAA,EAAc,aAAA,EAAe,CAAA;AAAA,EAChF,CAAA,EAAG,CAAC,gBAAA,EAAkB,YAAA,EAAc,aAAa,CAAC,CAAA;AAElD,EAAAF,UAAU,MAAM;AACd,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,4BAAA,CAA6B,EAAE,gBAAA,EAAkB,YAAA,EAAc,aAAA,EAAe,CAAA;AAAA,EAChF,GAAG,CAAC,gBAAA,EAAkB,YAAA,EAAc,aAAA,EAAe,UAAU,CAAC,CAAA;AAE9D,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,WAAA,IAAe,MAAA,CAAO,MAAA,KAAW,WAAA;AAAA,IAC5C,OAAA,EAAS,GAAA;AAAA,IACT,IAAA;AAAA,IACA,KAAA,EAAO,WAAA;AAAA,IACP,SAAA,EAAW,WAAA,GAAc,MAAA,CAAO,MAAA,GAAS;AAAA,GAC3C;AACF;ACqBA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,OAAO,MAAA,CAAA,IAAA,CAAY,IAAI,qCAAA,IAAyC,EAAA;AAClE;AAEA,SAAS,mBAAA,GAA8C;AACrD,EAAA,MAAM,CAAA,GAAI,gBAAgB,sBAAsB,CAAA;AAChD,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,MAAM,IAAA,GAAO;AAAA,MACX,OAAA;AAAA,MAAS,UAAA;AAAA,MAAY,eAAA;AAAA,MAAiB,aAAA;AAAA,MAAe,YAAA;AAAA,MAAc,kBAAA;AAAA,MACnE,gBAAA;AAAA,MAAkB,eAAA;AAAA,MAClB,oBAAA;AAAA,MAAsB,eAAA;AAAA,MAAiB,mBAAA;AAAA,MAAqB,oBAAA;AAAA,MAC5D,eAAA;AAAA,MAAiB,kBAAA;AAAA,MAAoB,gBAAA;AAAA,MACrC,WAAA;AAAA,MAAa,sBAAA;AAAA,MAAwB,WAAA;AAAA,MAAa,sBAAA;AAAA,MAAwB,WAAA;AAAA,MAC1E,eAAA;AAAA,MAAiB,0BAAA;AAAA,MAA4B,eAAA;AAAA,MAAiB,0BAAA;AAAA,MAC9D,eAAA;AAAA,MAAiB,0BAAA;AAAA,MAA4B,aAAA;AAAA,MAAe,wBAAA;AAAA,MAC5D,UAAA;AAAA,MAAY,eAAA;AAAA,MAAiB,mBAAA;AAAA,MAC7B,uBAAA;AAAA,MAAyB,kCAAA;AAAA,MACzB,gBAAA;AAAA,MAAkB,2BAAA;AAAA,MAA6B,cAAA;AAAA,MAAgB,yBAAA;AAAA,MAC/D,cAAA;AAAA,MAAgB,yBAAA;AAAA,MAA2B,cAAA;AAAA,MAAgB,yBAAA;AAAA,MAC3D,gBAAA;AAAA,MAAkB,2BAAA;AAAA,MAA6B,aAAA;AAAA,MAAe,wBAAA;AAAA,MAC9D,aAAA;AAAA,MAAe,wBAAA;AAAA,MAA0B,YAAA;AAAA,MAAc,uBAAA;AAAA,MACvD,aAAA;AAAA,MAAe,wBAAA;AAAA,MAA0B,kBAAA;AAAA,MAAoB,6BAAA;AAAA,MAC7D,YAAA;AAAA,MAAc,uBAAA;AAAA,MAAyB,UAAA;AAAA,MAAY,qBAAA;AAAA,MACnD,gBAAA;AAAA,MAAkB,SAAA;AAAA,MAAW,mBAAA;AAAA,MAAqB,kBAAA;AAAA,MAClD,MAAA;AAAA,MAAQ,QAAA;AAAA,MAAU,QAAA;AAAA,MAAU,MAAA;AAAA,MAAQ,SAAA;AAAA,MAAW,UAAA;AAAA,MAAY,SAAA;AAAA,MAAW,SAAA;AAAA,MAAW,SAAA;AAAA,MAAW;AAAA,KAC9F;AACA,IAAA,MAAM,SAAiC,EAAC;AACxC,IAAA,KAAA,MAAW,OAAO,IAAA,EAAM,MAAA,CAAO,GAAG,CAAA,GAAI,EAAE,GAAG,CAAA;AAC3C,IAAA,OAAO,MAAA;AAAA,EACT,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AACR;AAgBO,SAAS,eAAA,CAAgB,EAAE,UAAA,EAAY,QAAA,EAAS,EAAyB;AAC9E,EAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,EAAA,MAAM,SAAS,SAAA,EAAU;AACzB,EAAA,MAAM,SAAA,GAAY,gBAAgB,iBAAiB,CAAA;AACnD,EAAA,MAAM,OAAA,GAAU,gBAAgB,QAAQ,CAAA;AACxC,EAAA,MAAM,mBAAmB,mBAAA,EAAoB;AAE7C,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,aAAA,KAAkB,gBAAA,EAAiB;AAExE,EAAA,MAAM,WAAA,GAAcE,WAAAA,CAAY,CAAC,KAAA,EAAe,OAAA,KAAqB;AACnE,IAAA,aAAA,CAAc,OAAO,OAAO,CAAA;AAAA,EAC9B,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AAClB,EAAA,MAAM,SAAA,GAAYA,WAAAA,CAAY,CAAC,KAAA,EAAe,OAAA,KAAqB;AACjE,IAAA,WAAA,CAAY,OAAO,OAAO,CAAA;AAC1B,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,OAAA,CAAQ,KAAA,CAAM,qBAAqB,OAAO,CAAA;AAAA,IAC5C;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAID,SAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAAqB,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAA0B,IAAI,CAAA;AAE9D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAA6B,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAuB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAyB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,QAAAA,CAAsB,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAsB,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAuB,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,QAAAA,CAAoC,EAAE,CAAA;AACtF,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEpE,EAAA,MAAM,yBAAA,GAA4B,aAAA,CAAc,CAAC,CAAA,KAAM,EAAE,yBAAyB,CAAA;AAClF,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,oBAAA,GAAuB,mBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACnE,EAAA,MAAM,qBAAA,GAAwB,mBAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAErE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAA8C,IAAI,CAAA;AAC1F,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAoB,MAAM,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAiBE,OAA6B,IAAI,CAAA;AACxD,EAAA,MAAM,YAAA,GAAeA,OAA6C,IAAI,CAAA;AACtE,EAAA,MAAM,sBAAA,GAAyBA,OAAO,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAA,GAAe,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,cAAc,CAAA;AACvE,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,KAAK,CAAA;AAE7D,EAAA,MAAM,EAAE,SAAS,kBAAA,EAAoB,IAAA,EAAM,iBAAiB,SAAA,EAAU,GAAI,qBAAqB,UAAU,CAAA;AAEzG,EAAA,MAAM,iBAAA,GAAoBD,YAAY,YAAY;AAChD,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,IAAI;AACF,MAAA,MAAM,CAAC,YAAA,EAAc,SAAA,EAAW,SAAA,EAAW,gBAAA,EAAkB,QAAA,EAAU,cAAA,EAAgB,cAAc,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI;AAAA,QACzH,gBAAgB,UAAU,CAAA;AAAA,QAC1B,0BAAA,EAA2B;AAAA,QAC3B,cAAA,EAAe;AAAA,QACf,uBAAA,EAAwB,CAAE,KAAA,CAAM,MAAM,EAAiB,CAAA;AAAA,QACvD,aAAA,EAAc;AAAA,QACd,cAAA,EAAe,CAAE,KAAA,CAAM,MAAM,EAAkB,CAAA;AAAA,QAC/C,4BAAA,EAA6B,CAAE,KAAA,CAAM,MAAM,EAA+B;AAAA,OAC3E,CAAA;AAGD,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,GAAA;AAAA,QAChC,SAAA,CAAU,GAAA,CAAI,CAAA,KAAA,KAAS,aAAA,CAAc,KAAA,CAAM,OAAO,CAAA,CAAE,KAAA,CAAM,MAAM,EAAoB,CAAC;AAAA,OACvF;AACA,MAAA,MAAM,QAAA,GAAW,YAAY,IAAA,EAAK;AAElC,MAAA,WAAA,CAAY,YAAY,CAAA;AACxB,MAAA,cAAA,CAAe,UAAU,YAAA,CAAa,KAAA;AACtC,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,gBAAA,CAAiB,gBAAgB,CAAA;AACjC,MAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,MAAA,cAAA,CAAe,cAAc,CAAA;AAC7B,MAAA,mBAAA,CAAoB,cAAc,CAAA;AAAA,IACpC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,QAAQ,qBAAqB,CAAA;AACtF,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,SAAA,CAAU,EAAE,CAAA;AACZ,MAAA,SAAA,CAAU,EAAE,CAAA;AACZ,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,cAAA,CAAe,EAAE,CAAA;AACjB,MAAA,mBAAA,CAAoB,EAAE,CAAA;AACtB,MAAA,YAAA,CAAa,OAAO,CAAA;AACpB,MAAA,WAAA,CAAY,OAAA,CAAQ,aAAa,CAAA,EAAG,OAAO,CAAA;AAAA,IAC7C,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EAEF,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,gBAAA,GAAmBA,YAAY,YAAY;AAC/C,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,YAAA,EAAa;AAChC,MAAA,YAAA,CAAa,IAAI,CAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AACN,MAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IACjB,CAAA,SAAE;AACA,MAAA,qBAAA,CAAsB,KAAK,CAAA;AAAA,IAC7B;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAAF,UAAU,MAAM;AACd,IAAA,KAAK,iBAAA,EAAkB;AAAA,EACzB,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAAA,UAAU,MAAM;AACd,IAAA,KAAK,gBAAA,EAAiB;AAAA,EACxB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAAA,UAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,OAAA,GAAU,IAAA;AAAA,EACnC,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,aAAa,OAAA,EAAS;AACxB,QAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,mBAAA,GAAsBE,WAAAA,CAAY,CAAC,KAAA,KAAyB;AAChE,IAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAGzB,IAAA,IAAI,SAAA,IAAa,uBAAuB,OAAA,EAAS;AAC/C,MAAA,sBAAA,CAAuB,OAAA,GAAU,KAAA;AACjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,aAAa,OAAA,EAAS;AACxB,MAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,IACnC;AAEA,IAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,IAAA,YAAA,CAAa,OAAA,GAAU,WAAW,MAAM;AACtC,MAAA,KAAK,kBAAkB,UAAA,EAAY,KAAK,CAAA,CACrC,IAAA,CAAK,CAAC,eAAA,KAAoB;AACzB,QAAA,WAAA,CAAY,eAAe,CAAA;AAC3B,QAAA,YAAA,CAAa,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KACrC,IAAA,CAAK,EAAA,KAAO,eAAA,CAAgB,EAAA,GAAK,eAAA,GAAkB,IACpD,CAAC,CAAA;AACF,QAAA,aAAA,CAAc,OAAO,CAAA;AACrB,QAAA,UAAA,CAAW,MAAM,aAAA,CAAc,MAAM,CAAA,EAAG,GAAG,CAAA;AAAA,MAC7C,CAAC,CAAA,CACA,KAAA,CAAM,MAAM;AACX,QAAA,aAAA,CAAc,MAAM,CAAA;AAAA,MACtB,CAAC,CAAA;AAAA,IACL,GAAG,GAAG,CAAA;AAAA,EACR,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,aAAA,GAAgBA,YAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAE7B,IAAA,MAAM,aAAa,qBAAA,CAAsB,cAAA,CAAe,OAAA,EAAS,EAAE,QAAQ,CAAA;AAC3E,IAAA,IAAI,CAAC,WAAW,KAAA,EAAO;AACrB,MAAA,SAAA,CAAU,SAAA,CAAU,iBAAiB,CAAA,EAAG,UAAA,CAAW,OAAO,CAAC,CAAA,IAAK,SAAA,CAAU,YAAY,CAAC,CAAA;AACvF,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,IAAI,CAAA;AACpB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB,UAAU,CAAA;AAClD,MAAA,WAAA,CAAY,SAAS,CAAA;AACrB,MAAA,YAAA,CAAa,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KACrC,IAAA,CAAK,EAAA,KAAO,SAAA,CAAU,EAAA,GAAK,SAAA,GAAY,IACxC,CAAC,CAAA;AAAA,IACJ,CAAA,SAAE;AACA,MAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,UAAU,CAAC,CAAA;AAE7C,EAAA,MAAM,oBAAA,GAAuBA,WAAAA,CAAY,CAAC,QAAA,KAAuB;AAC/D,IAAA,IAAI,QAAA,CAAS,OAAO,UAAA,EAAY;AAChC,IAAA,QAAA,CAAS,CAAA,2BAAA,EAA8B,kBAAA,CAAmB,QAAA,CAAS,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EAC1E,CAAA,EAAG,CAAC,QAAA,EAAU,UAAU,CAAC,CAAA;AAEzB,EAAA,MAAM,oBAAA,GAAuBA,YAAY,YAAY;AAInD,IAAA,MAAM,IAAA,GAAO,CAAA,SAAA,EAAY,MAAA,CAAO,UAAA,EAAW,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AAC1E,IAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,MACnC,IAAA,EAAM,UAAU,qBAAqB,CAAA;AAAA,MACrC;AAAA,KACD,CAAA;AACD,IAAA,QAAA,CAAS,CAAA,2BAAA,EAA8B,kBAAA,CAAmB,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,EACzE,CAAA,EAAG,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA;AAExB,EAAA,MAAM,oBAAA,GAAuBA,WAAAA,CAAY,CAAC,EAAA,EAAY,IAAA,KAAiB;AACrE,IAAA,eAAA,CAAgB,EAAE,EAAA,EAAI,IAAA,EAAM,CAAA;AAAA,EAC9B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,aAAA,GAAgBA,YAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAM,cAAA,CAAe,aAAa,EAAE,CAAA;AACpC,IAAA,MAAM,SAAA,GAAY,UAAU,MAAA,CAAO,CAAC,SAAS,IAAA,CAAK,EAAA,KAAO,aAAa,EAAE,CAAA;AACxE,IAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,MAAA,QAAA,CAAS,8BAA8B,kBAAA,CAAmB,SAAA,CAAU,CAAC,CAAA,CAAE,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,YAAY,CAAA;AAAA,IACvB;AACA,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,YAAA,EAAc,SAAA,EAAW,QAAQ,CAAC,CAAA;AAEtC,EAAA,MAAM,mBAAA,GAAsBA,YAAY,MAAM;AAC5C,IAAA,MAAM,YAAY,aAAA,CAAc,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,OAAO,CAAA;AACpE,IAAA,MAAM,aAAa,aAAA,CAAc,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,KAAK,CAAA;AACnE,IAAA,MAAM,mBAAA,GAAsB,OAAA;AAAA,MAC1B,aACA,OAAO,SAAA,CAAU,IAAA,KAAS,QAAA,IAC1B,UAAU,IAAA,KAAS,IAAA,IACnB,QAAA,IAAY,SAAA,CAAU,QACtB,SAAA,CAAU,IAAA,CAAK,UACd,SAAA,CAAU,IAAA,CAAK,OAA2B,IAAA,KAAS;AAAA,KACtD;AAEA,IAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,MAAA,SAAA,CAAU,SAAA,CAAU,iBAAiB,CAAA,EAAG,SAAA,CAAU,mBAAmB,CAAC,CAAA;AACtE,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,SAAA,CAAU,SAAA,CAAU,iBAAiB,CAAA,EAAG,SAAA,CAAU,iBAAiB,CAAC,CAAA;AACpE,MAAA;AAAA,IACF;AAEA,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAAA,EAC5B,CAAA,EAAG,CAAC,aAAA,EAAe,SAAA,EAAW,SAAS,CAAC,CAAA;AAExC,EAAA,MAAM,iBAAA,GAAoBA,YAAY,MAAM;AAC1C,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,uBAAA,GAA0BA,YAAY,MAAM;AAChD,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,YAAY,YAAY;AAC/C,IAAA,MAAM,UAAA,GAAa,MAAM,0BAAA,EAA2B;AACpD,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,WAAAA,CAAY,OAAO,IAAA,KAAuB;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAC,IAAA,CAAK,OAAA,EAAS,CAAA;AAC7E,MAAA,QAAA,CAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,GAAS,OAAA,GAAU,IAAK,CAAC,CAAA;AAC3F,MAAA,WAAA;AAAA,QACE,UAAU,cAAc,CAAA;AAAA,QACxB,QAAQ,OAAA,GAAU,SAAA,CAAU,WAAW,CAAA,GAAI,UAAU,YAAY;AAAA,OACnE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA;AAAA,QACE,UAAU,iBAAiB,CAAA;AAAA,QAC3B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,UAAU,cAAc;AAAA,OACnE;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,WAAA,EAAa,SAAS,CAAC,CAAA;AAEtC,EAAA,MAAM,gBAAA,GAAmBA,WAAAA,CAAY,OAAO,IAAA,KAAoB;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,IAAA,CAAK,MAAA,EAAQ,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,CAAC,IAAA,CAAK,OAAA,EAAS,CAAA;AACtF,MAAA,QAAA,CAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,CAAK,MAAA,KAAW,IAAA,CAAK,MAAA,GAAS,OAAA,GAAU,IAAK,CAAC,CAAA;AAC3F,MAAA,WAAA;AAAA,QACE,UAAU,cAAc,CAAA;AAAA,QACxB,QAAQ,OAAA,GAAU,SAAA,CAAU,WAAW,CAAA,GAAI,UAAU,YAAY;AAAA,OACnE;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,SAAA;AAAA,QACE,UAAU,iBAAiB,CAAA;AAAA,QAC3B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,UAAU,cAAc;AAAA,OACnE;AAAA,IACF;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,WAAA,EAAa,SAAS,CAAC,CAAA;AAEtC,EAAA,MAAM,gBAAA,GAAmBA,YAAY,MAAM;AACzC,IAAA,oBAAA,CAAqB,EAAE,QAAQ,EAAA,EAAI,IAAA,EAAM,IAAI,QAAA,EAAU,UAAA,EAAY,OAAA,EAAS,IAAA,EAAsB,CAAA;AAAA,EACpG,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,gBAAA,GAAmBA,YAAY,MAAM;AAAA,EAE3C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,qBAAA,GAAwBA,YAAY,MAAM;AAAA,EAEhD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,0BAAA,GAA6BA,WAAAA,CAAY,CAACE,SAAAA,KAAuB;AACrE,IAAA,oBAAA,CAAqB;AAAA,MACnB,MAAA,EAAQ,EAAA;AAAA,MACR,MAAMA,SAAAA,CAAS,IAAA;AAAA,MACf,WAAA,EAAaA,UAAS,WAAA,IAAe,EAAA;AAAA,MACrC,QAAA,EAAU,UAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,QAAQ,EAAE,IAAA,EAAM,UAAA,EAAY,KAAA,EAAOA,UAAS,KAAA;AAAM,KACnC,CAAA;AAAA,EACnB,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,cAAA,GAAiBF,WAAAA,CAAY,CAAC,IAAA,KAAuB;AACzD,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,sBAAA,GAAyBA,YAAY,MAAM;AAC/C,IAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAA,GAAuBA,WAAAA,CAAY,OAAO,IAAA,KAA6B;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,IAAI,CAAA;AAC3C,MAAA,cAAA,CAAe,CAAC,OAAA,KAAY,CAAC,GAAG,OAAA,EAAS,OAAO,CAAC,CAAA;AACjD,MAAA,WAAA,CAAY,UAAU,oBAAoB,CAAA,EAAG,OAAA,CAAQ,SAAS,KAAK,SAAS,CAAA;AAAA,IAC9E,SAAS,KAAA,EAAO;AACd,MAAA,SAAA;AAAA,QACE,UAAU,oBAAoB,CAAA;AAAA,QAC9B,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,QAAQ,wBAAwB;AAAA,OAC3E;AAAA,IACF;AAAA,EACF,GAAG,CAAC,WAAA,EAAa,SAAA,EAAW,SAAA,EAAW,OAAO,CAAC,CAAA;AAE/C,EAAA,MAAM,kBAAA,GAAiD,OAAA;AAAA,IAAQ,MAC7D,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACvB,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,KAAA,EAAO,EAAA,CAAG,IAAA,IAAQ,EAAA,CAAG,EAAA;AAAA,MACrB,WAAA,EAAa,GAAG,OAAA,IAAW,EAAA;AAAA,MAC3B,YAAA,EAAc,GAAA;AAAA,MACd,QAAQ;AAAC,KACX,CAAE,CAAA;AAAA,IACJ,CAAC,WAAW;AAAA,GAAC;AAMb,EAAA,MAAM,qBAAA,GAAwB,OAAA;AAAA,IAAQ,MACpC,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,MACvB,IAAI,EAAA,CAAG,EAAA;AAAA,MACP,IAAA,EAAM,EAAA,CAAG,IAAA,IAAQ,EAAA,CAAG,EAAA;AAAA,MACpB,OAAA,EAAS,GAAG,OAAA,IAAW;AAAA,KACzB,CAAE,CAAA;AAAA,IACJ,CAAC,WAAW;AAAA,GAAC;AAOb,EAAA,MAAM,qBAAA,GAAwB,QAAQ,MAAM;AAC1C,IAAA,MAAM,YAAA,GAAe,CAAC,IAAA,KAAqC;AACzD,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,eAAA;AAAiB,UAAA,OAAO,WAAA;AAAA,QAC7B,KAAK,YAAA;AAAc,UAAA,OAAO,QAAA;AAAA,QAC1B,KAAK,aAAA;AAAe,UAAA,OAAO,QAAA;AAAA,QAC3B,KAAK,eAAA;AAAiB,UAAA,OAAO,QAAA;AAAA,QAC7B;AAAS,UAAA,OAAO,IAAA,IAAQ,QAAA;AAAA;AAC1B,IACF,CAAA;AACA,IAAA,OAAO,gBAAA,CAAiB,GAAA,CAAI,CAAC,UAAA,MAAgB;AAAA,MAC3C,IAAI,UAAA,CAAW,EAAA;AAAA,MACf,MAAM,UAAA,CAAW,IAAA;AAAA,MACjB,QAAA,EAAU,YAAA,CAAa,UAAA,CAAW,YAAY,CAAA;AAAA,MAC9C,UAAA,EAAY,UAAA,CAAW,WAAA,EAAa,MAAA,IAAU,CAAA;AAAA,MAC9C,YAAY,UAAA,CAAW;AAAA,KACzB,CAAE,CAAA;AAAA,EACJ,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAU,uCACb,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAA8B,CAAA;AAAA,wBAC7C,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,CAAA;AAAA,8BAC9C,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,0BACd,GAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,gCAAA,EAAA,EAAjB,KAAkD,CAC7D,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EACb,8BAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+BAA8B,CAAA,EAC/C;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACZ,QAAA,EAAA,SAAA,mBACC,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,GAAA;AAAA,QACZ,KAAA,EAAO,QAAQ,aAAa,CAAA;AAAA,QAC5B,OAAA,EAAS,SAAA;AAAA,QACT,SAAS,MAAM;AAAE,UAAA,KAAK,iBAAA,EAAkB;AAAA,QAAE,CAAA;AAAA,QAC1C,UAAA,EAAY,QAAQ,OAAO;AAAA;AAAA,KAC7B,mBAEA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,UAAU,YAAY,CAAA;AAAA,QAC7B,OAAA,EAAS,UAAU,kBAAkB,CAAA;AAAA,QACrC,QAAA,EAAS;AAAA;AAAA,KACX,EAEJ,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACE,GAAA,CAAC,uBAAA,EAAA,EAAwB,cAAA,EAAgB,iBAAA,EAAkB,EACzD,+BAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,aAAA,EAAY,kBAAA,EAC/D,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EACb,QAAA,EAAA;AAAA,wBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,KAAA,EAAK,IAAA;AAAA,cACL,IAAA,EAAK,IAAA;AAAA,cACL,SAAS,MAAM,yBAAA;AAAA,gBACb,QAAA,CAAS,IAAA;AAAA,gBACT,SAAS,WAAA,IAAe,EAAA;AAAA,gBACxB;AAAA,kBACE,IAAA,EAAO,SAAiD,IAAA,IAAQ,IAAA;AAAA,kBAChE,SAAU,QAAA,CAA8C,OAAA;AAAA,kBACxD,UAAW,QAAA,CAA+C;AAAA;AAC5D,eACF;AAAA,cACA,KAAA,EAAO,UAAU,UAAU,CAAA;AAAA,cAE1B,QAAA,EAAA,QAAA,CAAS,IAAA,IAAQ,SAAA,CAAU,OAAO;AAAA;AAAA,WACrC;AAAA,0BACA,GAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,UAAA,EAAY,WAAU,aAAA,EAAc,CAAA;AAAA,UACnD,SAAS,OAAA,mBACR,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sJACb,QAAA,EAAA,SAAA,CAAU,YAAY,CAAA,EACzB,CAAA,uBAEC,MAAA,EAAA,EAAK,SAAA,EAAU,oJAAA,EACb,QAAA,EAAA,SAAA,CAAU,WAAW,CAAA,EACxB,CAAA;AAAA,0BAEF,GAAA,CAAC,eAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY;AAAA,SAAA,EACvC,CAAA;AAAA,wBAEA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,KAAA,EAAK,IAAA;AAAA,cACL,SAAS,MAAM,mBAAA,CAAoB,CAAC,QAAA,KAAa,CAAC,QAAQ,CAAA;AAAA,cAC1D,KAAA,EAAO,UAAU,oBAAoB,CAAA;AAAA,cAErC,QAAA,kBAAA,GAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,aAAA,EAAc,aAAU,MAAA,EAAO;AAAA;AAAA,WACzD;AAAA,UAQC,SAAA,wBACE,MAAA,EAAA,EAAO,IAAA,EAAK,MAAK,OAAA,EAAO,IAAA,EAAC,SAAS,eAAA,EACjC,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,WAAA,EAAU,MAAA,EAAO,CAAA;AAAA,YAClD,UAAU,eAAe;AAAA,WAAA,EAC5B,CAAA,mBAEA,IAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,IAAA;AAAA,cACL,OAAA,EAAO,IAAA;AAAA,cACP,OAAA,EAAS,mBAAA;AAAA,cACT,QAAA,EAAU,CAAC,QAAA,CAAS,cAAA,IAAkB,CAAC,cAAA,CAAe,OAAA;AAAA,cACtD,KAAA,EAAO,CAAC,QAAA,CAAS,cAAA,IAAkB,CAAC,cAAA,CAAe,OAAA,GAAU,SAAA,CAAU,qBAAqB,CAAA,GAAI,MAAA;AAAA,cAEhG,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,WAAA,EAAU,MAAA,EAAO,CAAA;AAAA,gBAClD,UAAU,cAAc;AAAA;AAAA;AAAA,WAC3B;AAAA,+BAGD,MAAA,EAAA,EAAO,QAAA,EAAQ,MAAC,IAAA,EAAK,IAAA,EAAK,SAAS,MAAM;AAAE,YAAA,KAAK,aAAA,EAAc;AAAA,UAAE,CAAA,EAAG,UAAU,YAAA,EAC5E,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,iBAAA,EAAA,EAAkB,SAAA,EAAU,aAAA,EAAc,WAAA,EAAU,MAAA,EAAO,CAAA;AAAA,YAC3D,UAAU,SAAS;AAAA,WAAA,EACtB;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,sBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,kBAAA,GAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,gBAAA,EAAkB,UAAA;AAAA,UAClB,SAAA,EAAW,kBAAA;AAAA,UACX,QAAA,EAAU,oBAAA;AAAA,UACV,UAAU,MAAM;AAAE,YAAA,KAAK,oBAAA,EAAqB;AAAA,UAAE,CAAA;AAAA,UAC9C,QAAA,EAAU,oBAAA;AAAA,UACV,sBAAA,EAAwB;AAAA;AAAA,OAC1B,EACF,CAAA;AAAA,sBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,MAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAA,EAAY,aAAA;AAAA,YACZ,KAAA;AAAA,YACA,QAAA,EAAU,kBAAA;AAAA,YACV,cAAA,EAAgB,qBAAA;AAAA,YAChB,aAAA,EAAe,iBAAA;AAAA,YACf,cAAc,MAAM;AAAE,cAAA,KAAK,gBAAA,EAAiB;AAAA,YAAE,CAAA;AAAA,YAC9C,mBAAmB,MAAM;AAAE,cAAA,KAAK,qBAAA,EAAsB;AAAA,YAAE,CAAA;AAAA,YACxD,cAAc,MAAM;AAAE,cAAA,KAAK,gBAAA,EAAiB;AAAA,YAAE,CAAA;AAAA,YAC9C,kBAAA,EAAoB;AAAA;AAAA,SACtB;AAAA,wBAEA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,kBAAA,GAAA;AAAA,UAAC,iBAAA;AAAA,UAAA;AAAA,YACC,UAAA;AAAA,YACA,SAAA,EAAU,eAAA;AAAA,YACV,MAAA;AAAA,YACC,GAAI,QAAA,GAAW,EAAE,QAAA,KAAa,EAAC;AAAA,YAChC,cAAc,QAAA,CAAS,KAAA;AAAA,YACvB,MAAA;AAAA,YACA,MAAA;AAAA,YACA,KAAA;AAAA,YACA,UAAA,EAAY,aAAA;AAAA,YACZ,KAAA;AAAA,YACA,WAAA,EAAa,qBAAA;AAAA,YACb,YAAA,EAAc,mBAAA;AAAA,YACd,YAAA,EAAc,mBAAA;AAAA,YACd,UAAA,EAAY,cAAA;AAAA,YACZ,YAAA,EAAc,gBAAA;AAAA,YACd,YAAA,EAAc,gBAAA;AAAA,YACd,cAAc,MAAM;AAAE,cAAA,KAAK,gBAAA,EAAiB;AAAA,YAAE,CAAA;AAAA,YAC9C,eAAA;AAAA,YACA,mBAAA,EAAqB,uBAAA;AAAA,YACrB,eAAA,EAAiB,mBAAA;AAAA,YACjB,eAAA,EAAiB,CAAC,KAAA,KAAU;AAC1B,cAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,YAC3B,CAAA;AAAA,YACA,gBAAA,EAAkB,CAAC,KAAA,qBACjB,GAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACE,GAAG,KAAA;AAAA,gBACJ,SAAS,MAAM;AACb,kBAAA,KAAA,CAAM,OAAA,EAAQ;AACd,kBAAA,KAAK,gBAAA,EAAiB;AAAA,gBACxB,CAAA;AAAA,gBACA,SAAA,EAAW,OAAO,OAAA,KAAY;AAM5B,kBAAA,MAAM,IAAA,GAAO;AAAA,oBACX,MAAM,OAAA,CAAQ,IAAA;AAAA,oBACd,aAAa,OAAA,CAAQ,WAAA;AAAA,oBACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,oBACrB,QAAQ,OAAA,CAAQ,MAAA;AAAA,oBAChB,SAAS,OAAA,CAAQ,OAAA;AAAA,oBACjB,iBAAiB,OAAA,CAAQ,YAAA;AAAA,oBACzB,WAAW,OAAA,CAAQ,SAAA;AAAA,oBACnB,cAAc,OAAA,CAAQ,YAAA;AAAA,oBACtB,aAAa,OAAA,CAAQ,YAAA;AAAA,oBACrB,aAAa,OAAA,CAAQ,WAAA;AAAA,oBACrB,iBAAiB,OAAA,CAAQ,eAAA;AAAA,oBACzB,WAAW,OAAA,CAAQ,eAAA;AAAA,oBACnB,MAAM,OAAA,CAAQ,IAAA;AAAA,oBACd,MAAM,OAAA,CAAQ,IAAA;AAAA,oBACd,KAAK,OAAA,CAAQ,GAAA;AAAA,oBACb,QAAQ,OAAA,CAAQ,MAAA;AAAA,oBAChB,MAAM,OAAA,CAAQ,IAAA;AAAA,oBACd,cAAc,OAAA,CAAQ;AAAA,mBACxB;AACA,kBAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,oBAAA,MAAM,iBAAA,CAAkB,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,kBAC/C,CAAA,MAAO;AACL,oBAAA,MAAM,kBAAkB,IAAI,CAAA;AAAA,kBAC9B;AAAA,gBACF;AAAA;AAAA;AACF;AAAA,SAEJ,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEA,GAAA;AAAA,MAAC,qBAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,OAAO,OAAA,KAAY;AAKzB,UAAA,MAAM,QAAA,GAIF;AAAA,YACF,MAAM,OAAA,CAAQ,IAAA;AAAA,YACd,aAAa,OAAA,CAAQ;AAAA,WACvB;AACA,UAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,EAAW,QAAA,CAAS,OAAO,OAAA,CAAQ,IAAA;AACxD,UAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,EAAW,QAAA,CAAS,UAAU,OAAA,CAAQ,OAAA;AAC9D,UAAA,IAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,EAAW,QAAA,CAAS,WAAW,OAAA,CAAQ,QAAA;AAKhE,UAAA,MAAM,OAAA,GAAU,cAAA,CAAe,OAAA,GAC3B,MAAM,iBAAA,CAAkB,UAAA,EAAY,cAAA,CAAe,OAAA,EAAS,QAAQ,CAAA,GACpE,MAAM,sBAAA,CAAuB,YAAY,QAAQ,CAAA;AACrD,UAAA,WAAA,CAAY,OAAO,CAAA;AACnB,UAAA,YAAA,CAAa,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KACrC,IAAA,CAAK,EAAA,KAAO,OAAA,CAAQ,EAAA,GAAK,OAAA,GAAU,IACpC,CAAC,CAAA;AAAA,QACJ;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,CAAC,aAAA,KAA0B;AACrC,UAAA,qBAAA,EAAsB;AACtB,UAAA,QAAA,CAAS,CAAA,2BAAA,EAA8B,kBAAA,CAAmB,aAAa,CAAC,CAAA,CAAE,CAAA;AAAA,QAC5E,CAAA;AAAA,QACA,OAAA,EAAS,OAAO,KAAA,KAAwB;AACtC,UAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,CAAM,MAAA;AACrB,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAM,OAAA,GAAU,MAAM,cAAA,CAAe;AAAA,cACnC,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,aAAa,KAAA,CAAM;AAAA,aACpB,CAAA;AACD,YAAA,qBAAA,EAAsB;AACtB,YAAA,QAAA,CAAS,CAAA,2BAAA,EAA8B,kBAAA,CAAmB,OAAA,CAAQ,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,UACzE,CAAA,MAAO;AACL,YAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,KAAA,CAAM,QAAQ,KAAK,CAAA;AACzD,YAAA,QAAA,CAAS,CAAC,OAAA,KAAY,OAAA,CAAQ,GAAA,CAAI,CAAC,IAAA,KAAU,IAAA,CAAK,MAAA,KAAW,KAAA,CAAM,MAAA,GAAS,OAAA,GAAU,IAAK,CAAC,CAAA;AAC5F,YAAA,qBAAA,EAAsB;AAAA,UACxB;AAAA,QACF;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,YAAA;AAAA,QACN,OAAA,EAAS,cAAA;AAAA,QACT,KAAA,EAAO,mBAAA;AAAA,QACP,MAAA,EAAQ;AAAA;AAAA,KACV;AAAA,oBAEA,GAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,kBAAA;AAAA,QACN,OAAA,EAAS,MAAM,qBAAA,CAAsB,KAAK,CAAA;AAAA,QAC1C,KAAA,EAAO,CAAC,cAAA,KAAmB;AACzB,UAAA,KAAK,mBAAmB,cAAc,CAAA;AACtC,UAAA,IAAI,CAAC,YAAA,EAAc;AACjB,YAAA,cAAA,EAAe;AAAA,UACjB;AAAA,QACF;AAAA;AAAA,KACF;AAAA,oBAEA,GAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,QACxC,UAAA;AAAA,QACA,QAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBAEA,GAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,mBAAA;AAAA,QACN,OAAA,EAAS,MAAM,sBAAA,CAAuB,KAAK,CAAA;AAAA,QAC3C,MAAA,EAAQ,gBAAA;AAAA,QACR,MAAA,EAAQ,CAAC,IAAA,KAAS;AAAE,UAAA,KAAK,qBAAqB,IAAI,CAAA;AAAA,QAAE;AAAA;AAAA,KACtD;AAAA,oBAEA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,MAAM,YAAA,KAAiB,IAAA;AAAA,QACvB,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,CAAA;AAAA,QACnC,WAAW,MAAM;AAAE,UAAA,KAAK,aAAA,EAAc;AAAA,QAAE,CAAA;AAAA,QACxC,KAAA,EAAO,GAAG,SAAA,CAAU,uBAAuB,CAAC,CAAA,CAAA,EAAI,YAAA,EAAc,QAAQ,EAAE,CAAA,CAAA;AAAA;AAAA;AAC1E,GAAA,EACF,CAAA,EACF,CAAA;AAEJ","file":"chunk-RMPXGEFL.mjs","sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react'\nimport type { WorkflowExecutionEvent } from '@datatechsolutions/shared-domain/common'\nimport { buildAuthenticatedApiUrl } from '@ui/platform/workflow-api-client'\n\nexport type RunEventStreamState = {\n /** All events received so far, in order */\n events: WorkflowExecutionEvent[]\n /** Whether the stream is currently connected */\n isStreaming: boolean\n /** Terminal status once the workflow finishes */\n status: 'idle' | 'streaming' | 'completed' | 'failed' | 'error'\n /** Error message if stream errored */\n error: string | null\n}\n\n/**\n * Detect transport based on environment.\n * - VITE_WS_ENDPOINT set → WebSocket (AWS production)\n * - otherwise → SSE (local dev, Kafka-backed)\n */\nconst WS_ENDPOINT = import.meta.env.VITE_WS_ENDPOINT ?? ''\nconst useWebSocket = WS_ENDPOINT.length > 0\n\n// ── SSE transport (local dev) ───────────────────────────────────────\n\nfunction connectSSE(\n workflowId: string,\n runId: string,\n callbacks: StreamCallbacks,\n): () => void {\n // EventSource cannot set an Authorization header, so the SSE endpoint\n // also accepts the JWT via `?accessToken=`. The Rust handler promotes it\n // to `Authorization: Bearer` before the standard JWT middleware runs.\n let eventSource: EventSource | null = null\n let cancelled = false\n\n buildAuthenticatedApiUrl(\n `/workflows/${encodeURIComponent(workflowId)}/runs/${encodeURIComponent(runId)}/events`,\n { includeAccessToken: true },\n )\n .then((url) => {\n if (cancelled) return\n eventSource = new EventSource(url)\n\n eventSource.addEventListener('connected', () => callbacks.onConnected())\n\n eventSource.addEventListener('execution', (messageEvent) => {\n try {\n callbacks.onEvent(JSON.parse(messageEvent.data) as WorkflowExecutionEvent)\n } catch { /* ignore malformed */ }\n })\n\n eventSource.addEventListener('done', (messageEvent) => {\n try {\n const data = JSON.parse(messageEvent.data) as { status: string }\n callbacks.onDone(data.status === 'run_completed' ? 'completed' : 'failed')\n } catch {\n callbacks.onDone('completed')\n }\n eventSource?.close()\n })\n\n eventSource.addEventListener('error', () => {\n eventSource?.close()\n callbacks.onError()\n })\n })\n .catch(() => callbacks.onError())\n\n return () => {\n cancelled = true\n eventSource?.close()\n }\n}\n\n// ── WebSocket transport (AWS production) ────────────────────────────\n\nfunction connectWebSocket(\n _workflowId: string,\n runId: string,\n callbacks: StreamCallbacks,\n): () => void {\n const ws = new WebSocket(WS_ENDPOINT)\n\n ws.addEventListener('open', () => {\n // Subscribe to the specific run\n ws.send(JSON.stringify({ action: 'subscribe', runId }))\n callbacks.onConnected()\n })\n\n ws.addEventListener('message', (messageEvent) => {\n try {\n const data = JSON.parse(messageEvent.data as string) as WorkflowExecutionEvent\n if (data.type === 'run_completed' || data.type === 'run_failed') {\n callbacks.onDone(data.type === 'run_completed' ? 'completed' : 'failed')\n ws.send(JSON.stringify({ action: 'unsubscribe', runId }))\n ws.close()\n return\n }\n callbacks.onEvent(data)\n } catch { /* ignore malformed */ }\n })\n\n ws.addEventListener('error', () => {\n callbacks.onError()\n })\n\n ws.addEventListener('close', () => {\n // If not explicitly closed by us, treat as error for reconnect\n })\n\n return () => {\n if (ws.readyState === WebSocket.OPEN) {\n ws.send(JSON.stringify({ action: 'unsubscribe', runId }))\n }\n ws.close()\n }\n}\n\n// ── Shared callback interface ───────────────────────────────────────\n\ntype StreamCallbacks = {\n onConnected: () => void\n onEvent: (event: WorkflowExecutionEvent) => void\n onDone: (status: 'completed' | 'failed') => void\n onError: () => void\n}\n\n// ── Hook ────────────────────────────────────────────────────────────\n\n/**\n * React hook that subscribes to real-time workflow execution events.\n *\n * Automatically selects transport:\n * - WebSocket when VITE_WS_ENDPOINT is set (AWS production)\n * - SSE when running locally (Kafka-backed)\n *\n * The stream auto-closes when the workflow completes or fails.\n * Reconnects automatically if the connection drops (up to 3 retries).\n */\nexport function useRunEvents(\n workflowId: string | null,\n runId: string | null,\n): RunEventStreamState {\n const [events, setEvents] = useState<WorkflowExecutionEvent[]>([])\n const [status, setStatus] = useState<RunEventStreamState['status']>('idle')\n const [error, setError] = useState<string | null>(null)\n const cleanupRef = useRef<(() => void) | null>(null)\n const retriesRef = useRef(0)\n\n const connect = useCallback(() => {\n if (!workflowId || !runId) return\n\n const connectFn = useWebSocket ? connectWebSocket : connectSSE\n\n const callbacks: StreamCallbacks = {\n onConnected: () => {\n setStatus('streaming')\n setError(null)\n retriesRef.current = 0\n },\n onEvent: (event) => {\n setEvents((prev) => [...prev, event])\n },\n onDone: (terminalStatus) => {\n setStatus(terminalStatus)\n cleanupRef.current = null\n },\n onError: () => {\n cleanupRef.current = null\n if (retriesRef.current < 3) {\n retriesRef.current++\n const delay = Math.min(1000 * Math.pow(2, retriesRef.current - 1), 5000)\n setTimeout(connect, delay)\n } else {\n setStatus('error')\n setError('Connection lost after 3 retries')\n }\n },\n }\n\n cleanupRef.current = connectFn(workflowId, runId, callbacks)\n }, [workflowId, runId])\n\n useEffect(() => {\n if (!workflowId || !runId) return\n\n setEvents([])\n setStatus('streaming')\n setError(null)\n retriesRef.current = 0\n\n connect()\n\n return () => {\n if (cleanupRef.current) {\n cleanupRef.current()\n cleanupRef.current = null\n }\n }\n }, [workflowId, runId, connect])\n\n return {\n events,\n isStreaming: status === 'streaming',\n status,\n error,\n }\n}\n","import { useEffect } from 'react'\nimport type { WorkflowExecutionEvent } from '@datatechsolutions/shared-domain/common'\nimport { useWorkflowStore, type NodeRunResult } from '@ui/astrlabe'\nimport type { RunEventStreamState } from './use-run-events'\n\ntype WorkflowRunPresentationActions = {\n clearNodeResults: () => void\n setIsRunning: (running: boolean) => void\n setNodeResult: (nodeId: string, result: NodeRunResult) => void\n}\n\nexport function resetWorkflowRunPresentation(actions: WorkflowRunPresentationActions): void {\n actions.clearNodeResults()\n actions.setIsRunning(false)\n}\n\nexport function applyWorkflowExecutionEventToStore(\n actions: WorkflowRunPresentationActions,\n event: WorkflowExecutionEvent,\n): void {\n switch (event.type) {\n case 'run_started':\n actions.clearNodeResults()\n actions.setIsRunning(true)\n return\n case 'node_started':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'running',\n durationMs: event.durationMs,\n })\n return\n case 'node_completed':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'success',\n data: event.outputs,\n durationMs: event.durationMs,\n })\n return\n case 'node_error':\n if (!event.nodeId) return\n actions.setNodeResult(event.nodeId, {\n status: 'error',\n error: event.error,\n durationMs: event.durationMs,\n })\n return\n case 'run_completed':\n case 'run_failed':\n actions.setIsRunning(false)\n return\n default:\n return\n }\n}\n\nexport function useWorkflowRunPresentation(\n events: WorkflowExecutionEvent[],\n status: RunEventStreamState['status'],\n): void {\n const clearNodeResults = useWorkflowStore((state) => state.clearNodeResults)\n const setIsRunning = useWorkflowStore((state) => state.setIsRunning)\n const setNodeResult = useWorkflowStore((state) => state.setNodeResult)\n\n useEffect(() => {\n if (status === 'idle') {\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n return\n }\n\n clearNodeResults()\n for (const event of events) {\n applyWorkflowExecutionEventToStore({ clearNodeResults, setIsRunning, setNodeResult }, event)\n }\n\n if (status === 'completed' || status === 'failed' || status === 'error') {\n setIsRunning(false)\n } else if (status === 'streaming') {\n setIsRunning(true)\n }\n }, [clearNodeResults, events, setIsRunning, setNodeResult, status])\n}\n","import { useCallback, useEffect, useState } from 'react'\nimport type { VariableValue } from '@ui/astrlabe/contracts'\nimport { executeWorkflow } from '@ui/platform/workflow-api-client'\nimport { useRunEvents } from './use-run-events'\nimport { resetWorkflowRunPresentation, useWorkflowRunPresentation } from './use-workflow-run-presentation'\nimport { useWorkflowStore } from '@ui/astrlabe'\n\nexport function useWorkflowExecution(workflowId: string) {\n const [activeRunId, setActiveRunId] = useState<string | null>(null)\n const [isLaunching, setIsLaunching] = useState(false)\n const stream = useRunEvents(workflowId || null, activeRunId)\n const clearNodeResults = useWorkflowStore((state) => state.clearNodeResults)\n const setIsRunning = useWorkflowStore((state) => state.setIsRunning)\n const setNodeResult = useWorkflowStore((state) => state.setNodeResult)\n\n useWorkflowRunPresentation(stream.events, activeRunId ? stream.status : 'idle')\n\n useEffect(() => {\n if (stream.status === 'completed' || stream.status === 'failed' || stream.status === 'error') {\n setIsLaunching(false)\n }\n }, [stream.status])\n\n const run = useCallback(async (inputVariables?: Record<string, VariableValue>) => {\n if (!workflowId) return\n setIsLaunching(true)\n try {\n const runRecord = await executeWorkflow(workflowId, inputVariables)\n setActiveRunId(runRecord.id)\n } finally {\n setIsLaunching(false)\n }\n }, [workflowId])\n\n const stop = useCallback(() => {\n setActiveRunId(null)\n setIsLaunching(false)\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n }, [clearNodeResults, setIsRunning, setNodeResult])\n\n useEffect(() => {\n setActiveRunId(null)\n setIsLaunching(false)\n resetWorkflowRunPresentation({ clearNodeResults, setIsRunning, setNodeResult })\n }, [clearNodeResults, setIsRunning, setNodeResult, workflowId])\n\n return {\n isRunning: isLaunching || stream.status === 'streaming',\n execute: run,\n stop,\n runId: activeRunId,\n runStatus: activeRunId ? stream.status : 'idle',\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { useNavigate } from 'react-router'\nimport { useLocale, useTranslations } from '@ui/lib/i18n-context'\nimport {\n ChartBarIcon,\n DocumentCheckIcon,\n PlayIcon,\n StopIcon,\n} from '@heroicons/react/24/outline'\nimport {\n Button,\n CopyableId,\n DynamicIslandConfirm,\n PageEmptyState,\n PageErrorState,\n useNotifications,\n} from '@ui/index'\nimport {\n AgentModal,\n SubworkflowModal,\n AutoSaveWorkspace,\n NodePalette,\n PipelineSettingsModal,\n PreviewPanel,\n RunInputDialog,\n RunPanel,\n SaveStatusBadge,\n WorkflowBuilderProvider,\n WorkflowListBar,\n useModalStore,\n useWorkflowStore,\n useSubworkflowStore,\n validateWorkflowGraph,\n type AgentWithPrompts,\n type WorkflowEntityDefinition,\n} from '@ui/astrlabe'\nimport type {\n AgentModel,\n AgentRule,\n AgentTool,\n StartNodeConfig,\n WorkflowTool,\n Workflow,\n WorkflowGraph,\n} from '@ui/astrlabe/contracts'\nimport type { AgentsWorkspaceProps as SharedAgentsWorkspaceProps, DataSource, SaveState } from '@datatechsolutions/shared-domain/common'\nimport {\n createAgentConfig,\n createDatasource,\n createWorkflow,\n deleteWorkflow,\n getAgentConfigsWithPrompts,\n getAgentModels,\n getAgentRules,\n getAgentToolDefinitions,\n getAgentTools,\n getDatasources,\n getDatasourceTables,\n getDatasourceSchema,\n listModelProviderConnections,\n type ModelProviderConnection,\n getWorkflowById,\n getWorkflowRuns,\n getWorkflows,\n publishWorkflow,\n saveWorkflowDraft,\n updateWorkflowSettings,\n updateAgentConfig,\n updateAgentRule,\n updateAgentTool,\n} from './workflow-api-client'\nimport { useWorkflowExecution } from '@ui/hooks/use-workflow-execution'\nimport { DatasourceFormModal, type DatasourceFormData } from './pages/datasource-modal'\n\nfunction getPublishableKey() {\n return import.meta.env.VITE_WORKFLOW_BUILDER_PUBLISHABLE_KEY ?? ''\n}\n\nfunction useDatasourceLabels(): Record<string, string> {\n const t = useTranslations('platform.datasources')\n return useMemo(() => {\n const keys = [\n 'title', 'subtitle', 'addDatasource', 'createTitle', 'emptyTitle', 'emptyDescription',\n 'stepSelectType', 'stepConfigure',\n 'categoryRelational', 'categoryNoSql', 'categoryWarehouse', 'categoryTimeSeries',\n 'categoryGraph', 'categoryKeyValue', 'categorySearch',\n 'fieldName', 'fieldNamePlaceholder', 'fieldHost', 'fieldHostPlaceholder', 'fieldPort',\n 'fieldDatabase', 'fieldDatabasePlaceholder', 'fieldUsername', 'fieldUsernamePlaceholder',\n 'fieldPassword', 'fieldPasswordPlaceholder', 'fieldSchema', 'fieldSchemaPlaceholder',\n 'fieldSsl', 'fieldReadOnly', 'fieldReadOnlyHelp',\n 'fieldConnectionString', 'fieldConnectionStringPlaceholder',\n 'fieldProjectId', 'fieldProjectIdPlaceholder', 'fieldDataset', 'fieldDatasetPlaceholder',\n 'fieldKeyFile', 'fieldKeyFilePlaceholder', 'fieldAccount', 'fieldAccountPlaceholder',\n 'fieldWarehouse', 'fieldWarehousePlaceholder', 'fieldRegion', 'fieldRegionPlaceholder',\n 'fieldBucket', 'fieldBucketPlaceholder', 'fieldToken', 'fieldTokenPlaceholder',\n 'fieldApiKey', 'fieldApiKeyPlaceholder', 'fieldEnvironment', 'fieldEnvironmentPlaceholder',\n 'fieldIndex', 'fieldIndexPlaceholder', 'fieldUrl', 'fieldUrlPlaceholder',\n 'testConnection', 'testing', 'connectionSuccess', 'connectionFailed',\n 'save', 'saving', 'cancel', 'back', 'enabled', 'disabled', 'dialect', 'created', 'deleted', 'deleteConfirm',\n ]\n const labels: Record<string, string> = {}\n for (const key of keys) labels[key] = t(key)\n return labels\n }, [t])\n}\n\n/**\n * Props accepted by the workspace.\n *\n * Extends the shared-domain `AgentsWorkspaceProps` (just `workflowId`) with\n * an optional `messages` bundle. Most consumers wrap their tree in\n * `<I18nProvider>` so the canvas reads its translations from context — in\n * that case `messages` can be omitted. Apps that need to inject a\n * precomputed bundle (e.g. tests, app-specific overrides) pass it\n * explicitly and it forwards into `<AutoSaveWorkspace>`.\n */\nexport type AgentsWorkspaceProps = SharedAgentsWorkspaceProps & {\n messages?: Record<string, unknown>\n}\n\nexport function AgentsWorkspace({ workflowId, messages }: AgentsWorkspaceProps) {\n const navigate = useNavigate()\n const locale = useLocale()\n const tWorkflow = useTranslations('agents.workflow')\n const tCommon = useTranslations('common')\n const datasourceLabels = useDatasourceLabels()\n\n const { error: notifyError, success: notifySuccess } = useNotifications()\n\n const showSuccess = useCallback((title: string, message?: string) => {\n notifySuccess(title, message)\n }, [notifySuccess])\n const showError = useCallback((title: string, message?: string) => {\n notifyError(title, message)\n if (message) {\n console.error('[AgentsWorkspace]', message)\n }\n }, [])\n\n const [isLoading, setIsLoading] = useState(true)\n const [loadError, setLoadError] = useState<string | null>(null)\n const [isLoadingWorkflows, setIsLoadingWorkflows] = useState(true)\n const [isPublishing, setIsPublishing] = useState(false)\n\n const [workflows, setWorkflows] = useState<Workflow[]>([])\n const [workflow, setWorkflow] = useState<Workflow | null>(null)\n\n const [agents, setAgents] = useState<AgentWithPrompts[]>([])\n const [models, setModels] = useState<AgentModel[]>([])\n const [tools, setTools] = useState<WorkflowTool[]>([])\n const [agentToolDefs, setAgentToolDefs] = useState<AgentTool[]>([])\n const [rules, setRules] = useState<AgentRule[]>([])\n const [datasources, setDatasources] = useState<DataSource[]>([])\n const [modelConnections, setModelConnections] = useState<ModelProviderConnection[]>([])\n const [showDatasourceModal, setShowDatasourceModal] = useState(false)\n\n const openPipelineSettingsModal = useModalStore((s) => s.openPipelineSettingsModal)\n const [showRunInputDialog, setShowRunInputDialog] = useState(false)\n const [showPreviewPanel, setShowPreviewPanel] = useState(false)\n const [isCreatingAgent, setIsCreatingAgent] = useState(false)\n const openSubworkflowModal = useSubworkflowStore((s) => s.openModal)\n const closeSubworkflowModal = useSubworkflowStore((s) => s.closeModal)\n\n const [deleteTarget, setDeleteTarget] = useState<{ id: string; name: string } | null>(null)\n const [saveStatus, setSaveStatus] = useState<SaveState>('idle')\n\n const latestGraphRef = useRef<WorkflowGraph | null>(null)\n const saveTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n const skipInitialAutoSaveRef = useRef(true)\n\n const showRunPanel = useWorkflowStore((state) => state.showRunPanel)\n const toggleRunPanel = useWorkflowStore((state) => state.toggleRunPanel)\n const workflowNodes = useWorkflowStore((state) => state.nodes)\n\n const { execute: executeWorkflowRun, stop: stopWorkflowRun, isRunning } = useWorkflowExecution(workflowId)\n\n const loadWorkspaceData = useCallback(async () => {\n setIsLoading(true)\n setLoadError(null)\n try {\n const [workflowData, agentList, modelList, agentToolDefList, ruleList, datasourceList, connectionList] = await Promise.all([\n getWorkflowById(workflowId),\n getAgentConfigsWithPrompts(),\n getAgentModels(),\n getAgentToolDefinitions().catch(() => [] as AgentTool[]),\n getAgentRules(),\n getDatasources().catch(() => [] as DataSource[]),\n listModelProviderConnections().catch(() => [] as ModelProviderConnection[]),\n ])\n\n // Load tools per-agent (agentId is required by the API)\n const toolResults = await Promise.all(\n agentList.map(agent => getAgentTools(agent.agentId).catch(() => [] as WorkflowTool[]))\n )\n const toolList = toolResults.flat()\n\n setWorkflow(workflowData)\n latestGraphRef.current = workflowData.graph\n setAgents(agentList)\n setModels(modelList)\n setTools(toolList)\n setAgentToolDefs(agentToolDefList)\n setRules(ruleList)\n setDatasources(datasourceList)\n setModelConnections(connectionList)\n } catch (error) {\n const message = error instanceof Error ? error.message : tCommon('loadWorkspaceFailed')\n setWorkflow(null)\n setAgents([])\n setModels([])\n setTools([])\n setAgentToolDefs([])\n setRules([])\n setDatasources([])\n setModelConnections([])\n setLoadError(message)\n notifyError(tCommon('serverError'), message)\n } finally {\n setIsLoading(false)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [workflowId])\n\n const loadWorkflowList = useCallback(async () => {\n setIsLoadingWorkflows(true)\n try {\n const list = await getWorkflows()\n setWorkflows(list)\n } catch {\n setWorkflows([])\n } finally {\n setIsLoadingWorkflows(false)\n }\n }, [])\n\n useEffect(() => {\n void loadWorkspaceData()\n }, [loadWorkspaceData])\n\n useEffect(() => {\n void loadWorkflowList()\n }, [loadWorkflowList])\n\n useEffect(() => {\n skipInitialAutoSaveRef.current = true\n }, [workflowId])\n\n useEffect(() => {\n return () => {\n if (saveTimerRef.current) {\n clearTimeout(saveTimerRef.current)\n }\n }\n }, [])\n\n const handleAutoSaveGraph = useCallback((graph: WorkflowGraph) => {\n latestGraphRef.current = graph\n\n // Don't auto-save until initial data has loaded\n if (isLoading || skipInitialAutoSaveRef.current) {\n skipInitialAutoSaveRef.current = false\n return\n }\n\n if (saveTimerRef.current) {\n clearTimeout(saveTimerRef.current)\n }\n\n setSaveStatus('saving')\n saveTimerRef.current = setTimeout(() => {\n void saveWorkflowDraft(workflowId, graph)\n .then((updatedWorkflow) => {\n setWorkflow(updatedWorkflow)\n setWorkflows((current) => current.map((item) => (\n item.id === updatedWorkflow.id ? updatedWorkflow : item\n )))\n setSaveStatus('saved')\n setTimeout(() => setSaveStatus('idle'), 900)\n })\n .catch(() => {\n setSaveStatus('idle')\n })\n }, 800)\n }, [workflowId])\n\n const handlePublish = useCallback(async () => {\n if (!latestGraphRef.current) return\n\n const validation = validateWorkflowGraph(latestGraphRef.current, { locale })\n if (!validation.valid) {\n showError(tWorkflow('validationError'), validation.errors[0] ?? tWorkflow('validation'))\n return\n }\n\n setIsPublishing(true)\n try {\n const published = await publishWorkflow(workflowId)\n setWorkflow(published)\n setWorkflows((current) => current.map((item) => (\n item.id === published.id ? published : item\n )))\n } finally {\n setIsPublishing(false)\n }\n }, [locale, showError, tWorkflow, workflowId])\n\n const handleSelectWorkflow = useCallback((selected: Workflow) => {\n if (selected.id === workflowId) return\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(selected.id)}`)\n }, [navigate, workflowId])\n\n const handleCreateWorkflow = useCallback(async () => {\n // Random 8-hex-char suffix so default \"Novo Pipeline\" creates don't\n // collide on slug (the auto-slugify would produce `novo-pipeline`\n // every time). User can still customize via pipeline settings.\n const slug = `pipeline-${crypto.randomUUID().replace(/-/g, '').slice(0, 8)}`\n const created = await createWorkflow({\n name: tWorkflow('defaultWorkflowName'),\n slug,\n })\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`)\n }, [navigate, tWorkflow])\n\n const handleDeleteWorkflow = useCallback((id: string, name: string) => {\n setDeleteTarget({ id, name })\n }, [])\n\n const confirmDelete = useCallback(async () => {\n if (!deleteTarget) return\n await deleteWorkflow(deleteTarget.id)\n const remaining = workflows.filter((item) => item.id !== deleteTarget.id)\n if (remaining.length > 0) {\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(remaining[0].id)}`)\n } else {\n navigate('/workflows')\n }\n setDeleteTarget(null)\n }, [deleteTarget, workflows, navigate])\n\n const handleOpenRunDialog = useCallback(() => {\n const startNode = workflowNodes.find((node) => node.type === 'start')\n const hasEndNode = workflowNodes.some((node) => node.type === 'end')\n const hasValidStartConfig = Boolean(\n startNode &&\n typeof startNode.data === 'object' &&\n startNode.data !== null &&\n 'config' in startNode.data &&\n startNode.data.config &&\n (startNode.data.config as StartNodeConfig).type === 'start'\n )\n\n if (!hasValidStartConfig) {\n showError(tWorkflow('validationError'), tWorkflow('startNodeRequired'))\n return\n }\n if (!hasEndNode) {\n showError(tWorkflow('validationError'), tWorkflow('endNodeRequired'))\n return\n }\n\n setShowRunInputDialog(true)\n }, [workflowNodes, showError, tWorkflow])\n\n const handleCreateAgent = useCallback(() => {\n setIsCreatingAgent(true)\n }, [])\n\n const handleCancelCreateAgent = useCallback(() => {\n setIsCreatingAgent(false)\n }, [])\n\n const handleAgentSaved = useCallback(async () => {\n const nextAgents = await getAgentConfigsWithPrompts()\n setAgents(nextAgents)\n setIsCreatingAgent(false)\n }, [])\n\n const handleToggleTool = useCallback(async (tool: WorkflowTool) => {\n try {\n const updated = await updateAgentTool(tool.toolId, { enabled: !tool.enabled })\n setTools((current) => current.map((item) => (item.toolId === tool.toolId ? updated : item)))\n showSuccess(\n tWorkflow('toolsSection'),\n updated.enabled ? tWorkflow('published') : tWorkflow('draftBadge')\n )\n } catch (error) {\n showError(\n tWorkflow('validationError'),\n error instanceof Error ? error.message : tWorkflow('publishError')\n )\n }\n }, [showError, showSuccess, tWorkflow])\n\n const handleToggleRule = useCallback(async (rule: AgentRule) => {\n try {\n const updated = await updateAgentRule(rule.ruleId, { ...rule, enabled: !rule.enabled })\n setRules((current) => current.map((item) => (item.ruleId === rule.ruleId ? updated : item)))\n showSuccess(\n tWorkflow('rulesSection'),\n updated.enabled ? tWorkflow('published') : tWorkflow('draftBadge')\n )\n } catch (error) {\n showError(\n tWorkflow('validationError'),\n error instanceof Error ? error.message : tWorkflow('publishError')\n )\n }\n }, [showError, showSuccess, tWorkflow])\n\n const handleCreateTool = useCallback(() => {\n openSubworkflowModal({ toolId: '', name: '', category: 'external', enabled: true } as WorkflowTool)\n }, [openSubworkflowModal])\n\n const handleCreateRule = useCallback(() => {\n // TODO: open rule drawer in create mode\n }, [])\n\n const handleCreateAgentTool = useCallback(() => {\n // TODO: open agent tool drawer in create mode\n }, [])\n\n const handleConvertToSubworkflow = useCallback((workflow: Workflow) => {\n openSubworkflowModal({\n toolId: '',\n name: workflow.name,\n description: workflow.description ?? '',\n category: 'external',\n enabled: true,\n config: { type: 'workflow', graph: workflow.graph },\n } as WorkflowTool)\n }, [openSubworkflowModal])\n\n const handleEditTool = useCallback((tool: WorkflowTool) => {\n openSubworkflowModal(tool)\n }, [openSubworkflowModal])\n\n const handleCreateDatasource = useCallback(() => {\n setShowDatasourceModal(true)\n }, [])\n\n const handleSaveDatasource = useCallback(async (data: DatasourceFormData) => {\n try {\n const created = await createDatasource(data)\n setDatasources((current) => [...current, created])\n showSuccess(tWorkflow('dataSourcesSection'), tCommon('created') ?? 'Created')\n } catch (error) {\n showError(\n tWorkflow('dataSourcesSection'),\n error instanceof Error ? error.message : tCommon('createDatasourceFailed')\n )\n }\n }, [showSuccess, showError, tWorkflow, tCommon])\n\n const datasourceEntities: WorkflowEntityDefinition[] = useMemo(() =>\n datasources.map((ds) => ({\n id: ds.id,\n label: ds.name ?? ds.id,\n description: ds.dialect ?? '',\n defaultLimit: 100,\n fields: [],\n })),\n [datasources])\n\n // Canvas datasource-node config modals expect `{id, name, dialect}[]` —\n // the same rows that `/datasources` admin manages. Pass them through\n // to AutoSaveWorkspace so opening a datasource node inside the canvas\n // picker lists what the admin page created, and vice versa.\n const datasourceDefinitions = useMemo(() =>\n datasources.map((ds) => ({\n id: ds.id,\n name: ds.name ?? ds.id,\n dialect: ds.dialect ?? 'postgres',\n })),\n [datasources])\n\n // NodePalette expects its own `ModelProvider` shape (distinct from both\n // our DB row and the UI's slug union). The `provider` field is the key\n // the palette uses to pick a logo (`PROVIDER_LOGOS`) and to synthesize\n // the node config's `providerType`. Keep the mapping honest so dragging\n // a provider chip spawns a node pointing at a real connection id.\n const paletteModelProviders = useMemo(() => {\n const toPaletteKey = (slug: string | undefined): string => {\n switch (slug) {\n case 'anthropic_api': return 'anthropic'\n case 'openai_api': return 'openai'\n case 'aws_bedrock': return 'amazon'\n case 'google_vertex': return 'google'\n default: return slug ?? 'custom'\n }\n }\n return modelConnections.map((connection) => ({\n id: connection.id,\n name: connection.name,\n provider: toPaletteKey(connection.providerSlug),\n modelCount: connection.modelFilter?.length ?? 1,\n configured: connection.enabled,\n }))\n }, [modelConnections])\n\n if (isLoading) {\n return (\n <div className=\"flex h-[calc(100vh-120px)] flex-col\">\n <div className=\"liquid-surface flex h-full flex-col overflow-hidden rounded-2xl\">\n <div className=\"flex flex-shrink-0 items-center justify-between px-5 py-3\">\n <div className=\"shimmer h-6 w-40 rounded-lg\" />\n <div className=\"shimmer h-8 w-24 rounded-lg\" />\n </div>\n <div className=\"liquid-divider border-t\" />\n <div className=\"flex min-h-0 flex-1 overflow-hidden\">\n <div className=\"w-56 border-r border-white/20 p-4 dark:border-white/10\">\n <div className=\"shimmer mb-3 h-5 w-24 rounded\" />\n <div className=\"space-y-2\">\n {[1, 2, 3].map((index) => (\n <div key={index} className=\"shimmer h-10 w-full rounded-lg\" />\n ))}\n </div>\n </div>\n <div className=\"flex flex-1 items-center justify-center\">\n <div className=\"shimmer h-8 w-48 rounded-lg\" />\n </div>\n </div>\n </div>\n </div>\n )\n }\n\n if (!workflow) {\n return (\n <div className=\"flex h-[calc(100vh-120px)] items-center justify-center\">\n {loadError ? (\n <PageErrorState\n statusCode={500}\n title={tCommon('serverError')}\n message={loadError}\n onRetry={() => { void loadWorkspaceData() }}\n retryLabel={tCommon('retry')}\n />\n ) : (\n <PageEmptyState\n title={tWorkflow('emptyTitle')}\n message={tWorkflow('emptyDescription')}\n iconName=\"cpu-chip\"\n />\n )}\n </div>\n )\n }\n\n return (\n <WorkflowBuilderProvider publishableKey={getPublishableKey()}>\n <div className=\"flex h-[calc(100vh-120px)] flex-col\" data-testid=\"agents-workspace\">\n <div className=\"liquid-surface flex h-full flex-col overflow-hidden rounded-2xl\">\n <div className=\"flex flex-shrink-0 items-center justify-between px-5 py-3\">\n <div className=\"flex items-center gap-3\">\n <Button\n type=\"button\"\n plain\n size=\"sm\"\n onClick={() => openPipelineSettingsModal(\n workflow.name,\n workflow.description ?? '',\n {\n slug: (workflow as unknown as { slug?: string | null }).slug ?? null,\n isDraft: (workflow as unknown as { isDraft?: boolean }).isDraft,\n isActive: (workflow as unknown as { isActive?: boolean }).isActive,\n },\n )}\n title={tWorkflow('editName')}\n >\n {workflow.name || tWorkflow('title')}\n </Button>\n <CopyableId id={workflowId} className=\"text-[10px]\" />\n {workflow.isDraft ? (\n <span className=\"inline-flex items-center rounded-full bg-amber-100 px-2.5 py-0.5 text-[10px] font-semibold text-amber-800 dark:bg-amber-900/30 dark:text-amber-300\">\n {tWorkflow('draftBadge')}\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full bg-green-100 px-2.5 py-0.5 text-[10px] font-semibold text-green-800 dark:bg-green-900/30 dark:text-green-300\">\n {tWorkflow('published')}\n </span>\n )}\n <SaveStatusBadge status={saveStatus} />\n </div>\n\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"xs\"\n plain\n onClick={() => setShowPreviewPanel((previous) => !previous)}\n title={tWorkflow('previewPanel.title')}\n >\n <ChartBarIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n </Button>\n\n {/* Run / Stop for the authenticated editor — these\n trigger real backend execution against live Bedrock.\n The button stays disabled until there's a published\n graph (or an in-memory edit) so a brand-new workflow\n can't fire an empty run. The landing-page preview\n uses a separate mocked executor (see preview-runtime). */}\n {isRunning ? (\n <Button size=\"xs\" outline onClick={stopWorkflowRun}>\n <StopIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('runPanel.stop')}\n </Button>\n ) : (\n <Button\n size=\"xs\"\n outline\n onClick={handleOpenRunDialog}\n disabled={!workflow.publishedGraph && !latestGraphRef.current}\n title={!workflow.publishedGraph && !latestGraphRef.current ? tWorkflow('noPublishedWorkflow') : undefined}\n >\n <PlayIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('runPanel.run')}\n </Button>\n )}\n\n <Button gradient size=\"xs\" onClick={() => { void handlePublish() }} disabled={isPublishing}>\n <DocumentCheckIcon className=\"h-3.5 w-3.5\" data-slot=\"icon\" />\n {tWorkflow('publish')}\n </Button>\n </div>\n </div>\n\n <div className=\"liquid-divider border-t\" />\n <div className=\"px-4 pt-3\">\n <WorkflowListBar\n workflows={workflows}\n activeWorkflowId={workflowId}\n isLoading={isLoadingWorkflows}\n onSelect={handleSelectWorkflow}\n onCreate={() => { void handleCreateWorkflow() }}\n onDelete={handleDeleteWorkflow}\n onConvertToSubworkflow={handleConvertToSubworkflow}\n />\n </div>\n\n <div className=\"liquid-divider border-t\" />\n <div className=\"flex min-h-0 flex-1 overflow-hidden\">\n <NodePalette\n agents={agents}\n tools={tools}\n agentTools={agentToolDefs}\n rules={rules}\n entities={datasourceEntities}\n modelProviders={paletteModelProviders}\n onCreateAgent={handleCreateAgent}\n onCreateTool={() => { void handleCreateTool() }}\n onCreateAgentTool={() => { void handleCreateAgentTool() }}\n onCreateRule={() => { void handleCreateRule() }}\n onCreateDatasource={handleCreateDatasource}\n />\n\n <div className=\"flex-1\">\n <AutoSaveWorkspace\n workflowId={workflowId}\n className=\"h-full w-full\"\n locale={locale}\n {...(messages ? { messages } : {})}\n initialGraph={workflow.graph}\n agents={agents}\n models={models}\n tools={tools}\n agentTools={agentToolDefs}\n rules={rules}\n datasources={datasourceDefinitions}\n onLoadTables={getDatasourceTables}\n onLoadSchema={getDatasourceSchema}\n onEditTool={handleEditTool}\n onToggleTool={handleToggleTool}\n onToggleRule={handleToggleRule}\n onAgentSaved={() => { void handleAgentSaved() }}\n isCreatingAgent={isCreatingAgent}\n onCancelCreateAgent={handleCancelCreateAgent}\n onAutoSaveGraph={handleAutoSaveGraph}\n onGraphSnapshot={(graph) => {\n latestGraphRef.current = graph\n }}\n renderAgentModal={(props) => (\n <AgentModal\n {...props}\n onSaved={() => {\n props.onSaved()\n void handleAgentSaved()\n }}\n onPersist={async (payload) => {\n // Translate the modal's canonical payload into the\n // shape the backend (`/agents/configs`) expects.\n // The handler ignores unknown fields, so it's safe\n // to spread the full payload and let serde pick\n // the ones it recognises.\n const body = {\n name: payload.name,\n displayName: payload.displayName,\n description: payload.description,\n avatar: payload.avatar,\n modelId: payload.modelId,\n modelProviderId: payload.connectionId,\n framework: payload.framework,\n systemPrompt: payload.systemPrompt,\n instruction: payload.systemPrompt,\n temperature: payload.temperature,\n maxOutputTokens: payload.maxOutputTokens,\n maxTokens: payload.maxOutputTokens,\n topP: payload.topP,\n topK: payload.topK,\n elo: payload.elo,\n status: payload.status,\n tags: payload.tags,\n agentToolIds: payload.enabledToolIds,\n }\n if (payload.agentId) {\n await updateAgentConfig(payload.agentId, body)\n } else {\n await createAgentConfig(body)\n }\n }}\n />\n )}\n />\n </div>\n </div>\n </div>\n\n <PipelineSettingsModal\n onSave={async (changes) => {\n // `saveWorkflowDraft` also piggy-backs the latest graph so\n // renames + graph-auto-save land in a single PATCH. The\n // lifecycle deltas (`isDraft`/`isActive`/`slug`) ride\n // alongside the name/description metadata.\n const metadata: {\n name?: string; description?: string;\n isDraft?: boolean; isActive?: boolean;\n slug?: string | null;\n } = {\n name: changes.name,\n description: changes.description,\n }\n if (changes.slug !== undefined) metadata.slug = changes.slug\n if (changes.isDraft !== undefined) metadata.isDraft = changes.isDraft\n if (changes.isActive !== undefined) metadata.isActive = changes.isActive\n\n // Use saveWorkflowDraft when the graph is loaded (so the\n // PATCH stays single-round-trip); fall back to the pure\n // settings-only updater otherwise.\n const updated = latestGraphRef.current\n ? await saveWorkflowDraft(workflowId, latestGraphRef.current, metadata)\n : await updateWorkflowSettings(workflowId, metadata)\n setWorkflow(updated)\n setWorkflows((current) => current.map((item) => (\n item.id === updated.id ? updated : item\n )))\n }}\n />\n\n <SubworkflowModal\n onMaximize={(subworkflowId: string) => {\n closeSubworkflowModal()\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(subworkflowId)}`)\n }}\n onSaved={async (saved: WorkflowTool) => {\n const isNew = !saved.toolId\n if (isNew) {\n const created = await createWorkflow({\n name: saved.name,\n description: saved.description as string | undefined,\n })\n closeSubworkflowModal()\n navigate(`/workflows/edit?workflowId=${encodeURIComponent(created.id)}`)\n } else {\n const updated = await updateAgentTool(saved.toolId, saved)\n setTools((current) => current.map((item) => (item.toolId === saved.toolId ? updated : item)))\n closeSubworkflowModal()\n }\n }}\n />\n\n <RunPanel\n open={showRunPanel}\n onClose={toggleRunPanel}\n onRun={handleOpenRunDialog}\n onStop={stopWorkflowRun}\n />\n\n <RunInputDialog\n open={showRunInputDialog}\n onClose={() => setShowRunInputDialog(false)}\n onRun={(inputVariables) => {\n void executeWorkflowRun(inputVariables)\n if (!showRunPanel) {\n toggleRunPanel()\n }\n }}\n />\n\n <PreviewPanel\n open={showPreviewPanel}\n onClose={() => setShowPreviewPanel(false)}\n workflowId={workflowId}\n loadRuns={getWorkflowRuns}\n />\n\n <DatasourceFormModal\n open={showDatasourceModal}\n onClose={() => setShowDatasourceModal(false)}\n labels={datasourceLabels}\n onSave={(data) => { void handleSaveDatasource(data) }}\n />\n\n <DynamicIslandConfirm\n open={deleteTarget !== null}\n onClose={() => setDeleteTarget(null)}\n onConfirm={() => { void confirmDelete() }}\n title={`${tWorkflow('deleteWorkflowConfirm')} ${deleteTarget?.name ?? ''}?`}\n />\n </div>\n </WorkflowBuilderProvider>\n )\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
4
|
+
var chunkRWZ2PLMQ_js = require('./chunk-RWZ2PLMQ.js');
|
|
5
|
+
var chunkY5VN4SPH_js = require('./chunk-Y5VN4SPH.js');
|
|
6
|
+
var chunkEBARYRSA_js = require('./chunk-EBARYRSA.js');
|
|
7
7
|
var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
|
|
8
8
|
var react = require('react');
|
|
9
9
|
var outline = require('@heroicons/react/24/outline');
|
|
@@ -14,7 +14,7 @@ function MembersTabContent({
|
|
|
14
14
|
organizationId,
|
|
15
15
|
client
|
|
16
16
|
}) {
|
|
17
|
-
const t =
|
|
17
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
18
18
|
const [members, setMembers] = react.useState([]);
|
|
19
19
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
20
20
|
const [removingId, setRemovingId] = react.useState(null);
|
|
@@ -61,14 +61,14 @@ function MembersTabContent({
|
|
|
61
61
|
return "zinc";
|
|
62
62
|
};
|
|
63
63
|
if (isLoading) {
|
|
64
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
65
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
64
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
65
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.InlineSpinner, {}),
|
|
66
66
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.members.loading") })
|
|
67
67
|
] });
|
|
68
68
|
}
|
|
69
69
|
if (members.length === 0) {
|
|
70
70
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
71
|
-
|
|
71
|
+
chunkRWZ2PLMQ_js.EmptyState,
|
|
72
72
|
{
|
|
73
73
|
message: t("admin.organizationDetail.members.emptyMessage"),
|
|
74
74
|
description: t("admin.organizationDetail.members.emptyDescription"),
|
|
@@ -78,11 +78,11 @@ function MembersTabContent({
|
|
|
78
78
|
);
|
|
79
79
|
}
|
|
80
80
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
81
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
-
|
|
81
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.ListCard, { children: members.map((member) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
82
|
+
chunkRWZ2PLMQ_js.ListCardItem,
|
|
83
83
|
{
|
|
84
84
|
leading: /* @__PURE__ */ jsxRuntime.jsx(
|
|
85
|
-
|
|
85
|
+
chunkRWZ2PLMQ_js.Avatar,
|
|
86
86
|
{
|
|
87
87
|
src: member.image,
|
|
88
88
|
initials: (member.name ?? member.email).slice(0, 2).toUpperCase(),
|
|
@@ -90,7 +90,7 @@ function MembersTabContent({
|
|
|
90
90
|
}
|
|
91
91
|
),
|
|
92
92
|
trailing: member.role !== "owner" ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
93
|
-
|
|
93
|
+
chunkEBARYRSA_js.Button,
|
|
94
94
|
{
|
|
95
95
|
size: "sm",
|
|
96
96
|
color: "ios-glass-red",
|
|
@@ -102,16 +102,16 @@ function MembersTabContent({
|
|
|
102
102
|
) : void 0,
|
|
103
103
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
104
104
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
|
|
105
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-
|
|
106
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs text-
|
|
105
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-sm font-medium text-slate-900 dark:text-white", children: member.name ?? member.email }),
|
|
106
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs text-slate-500 dark:text-slate-400", children: member.email })
|
|
107
107
|
] }),
|
|
108
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
108
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkEBARYRSA_js.Badge, { color: roleBadgeColor(member.role), children: member.role })
|
|
109
109
|
] })
|
|
110
110
|
},
|
|
111
111
|
member.id
|
|
112
112
|
)) }),
|
|
113
113
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
114
|
-
|
|
114
|
+
chunkRWZ2PLMQ_js.DynamicIslandConfirm,
|
|
115
115
|
{
|
|
116
116
|
open: removeTarget !== null,
|
|
117
117
|
onClose: handleRemoveCancel,
|
|
@@ -129,8 +129,8 @@ function InvitationsTabContent({
|
|
|
129
129
|
organizationId,
|
|
130
130
|
client
|
|
131
131
|
}) {
|
|
132
|
-
const t =
|
|
133
|
-
const format =
|
|
132
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
133
|
+
const format = chunkY5VN4SPH_js.useFormatter();
|
|
134
134
|
const [invitations, setInvitations] = react.useState([]);
|
|
135
135
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
136
136
|
const [isInviteSheetOpen, setIsInviteSheetOpen] = react.useState(false);
|
|
@@ -195,15 +195,15 @@ function InvitationsTabContent({
|
|
|
195
195
|
};
|
|
196
196
|
const roleOptions = ["viewer", "member", "admin", "owner"];
|
|
197
197
|
if (isLoading) {
|
|
198
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
199
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
198
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.InlineSpinner, {}),
|
|
200
200
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.invitations.loading") })
|
|
201
201
|
] });
|
|
202
202
|
}
|
|
203
203
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
204
204
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
205
205
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
206
|
-
|
|
206
|
+
chunkEBARYRSA_js.Button,
|
|
207
207
|
{
|
|
208
208
|
color: "ios-glass-blue",
|
|
209
209
|
onClick: handleOpenInviteSheet,
|
|
@@ -215,21 +215,21 @@ function InvitationsTabContent({
|
|
|
215
215
|
}
|
|
216
216
|
),
|
|
217
217
|
invitations.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
218
|
-
|
|
218
|
+
chunkRWZ2PLMQ_js.EmptyState,
|
|
219
219
|
{
|
|
220
220
|
message: t("admin.organizationDetail.invitations.emptyMessage"),
|
|
221
221
|
description: t("admin.organizationDetail.invitations.emptyDescription"),
|
|
222
222
|
icon: outline.EnvelopeIcon,
|
|
223
223
|
variant: "card"
|
|
224
224
|
}
|
|
225
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
|
|
225
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.ListCard, { children: invitations.map((invitation) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
+
chunkRWZ2PLMQ_js.ListCardItem,
|
|
227
227
|
{
|
|
228
228
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-9 w-9 items-center justify-center rounded-xl bg-gradient-to-br from-amber-500 to-orange-600 shadow-sm", children: /* @__PURE__ */ jsxRuntime.jsx(outline.EnvelopeIcon, { className: "h-5 w-5 text-white" }) }),
|
|
229
|
-
trailing: /* @__PURE__ */ jsxRuntime.jsx(
|
|
229
|
+
trailing: /* @__PURE__ */ jsxRuntime.jsx(chunkEBARYRSA_js.Badge, { color: statusBadgeColor(invitation.status), children: invitation.status }),
|
|
230
230
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
231
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-
|
|
232
|
-
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-0.5 text-xs text-
|
|
231
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: invitation.email }),
|
|
232
|
+
/* @__PURE__ */ jsxRuntime.jsxs("p", { className: "mt-0.5 text-xs text-slate-500 dark:text-slate-400", children: [
|
|
233
233
|
t("admin.organizationDetail.invitations.roleLabel", { role: invitation.role }),
|
|
234
234
|
" \xB7 ",
|
|
235
235
|
format.dateTime(new Date(invitation.createdAt), {
|
|
@@ -243,7 +243,7 @@ function InvitationsTabContent({
|
|
|
243
243
|
)) })
|
|
244
244
|
] }),
|
|
245
245
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
246
|
-
|
|
246
|
+
chunkRWZ2PLMQ_js.Sheet,
|
|
247
247
|
{
|
|
248
248
|
open: isInviteSheetOpen,
|
|
249
249
|
onClose: handleCloseInviteSheet,
|
|
@@ -252,7 +252,7 @@ function InvitationsTabContent({
|
|
|
252
252
|
size: "md",
|
|
253
253
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
254
254
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
255
|
-
|
|
255
|
+
chunkRWZ2PLMQ_js.Input,
|
|
256
256
|
{
|
|
257
257
|
label: t("admin.organizationDetail.invitations.emailLabel"),
|
|
258
258
|
type: "email",
|
|
@@ -264,7 +264,7 @@ function InvitationsTabContent({
|
|
|
264
264
|
}
|
|
265
265
|
),
|
|
266
266
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
267
|
-
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1.5 block text-sm font-medium text-
|
|
267
|
+
/* @__PURE__ */ jsxRuntime.jsx("label", { className: "mb-1.5 block text-sm font-medium text-slate-900 dark:text-white", children: t("admin.organizationDetail.invitations.roleSelectLabel") }),
|
|
268
268
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-4 gap-2", children: roleOptions.map((role) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
269
269
|
"button",
|
|
270
270
|
{
|
|
@@ -281,7 +281,7 @@ function InvitationsTabContent({
|
|
|
281
281
|
] }),
|
|
282
282
|
inviteError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: "alert", children: inviteError }),
|
|
283
283
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
284
|
-
|
|
284
|
+
chunkEBARYRSA_js.Button,
|
|
285
285
|
{
|
|
286
286
|
color: "ios-glass-blue",
|
|
287
287
|
fullWidth: true,
|
|
@@ -300,7 +300,7 @@ function DomainsTabContent({
|
|
|
300
300
|
organizationId,
|
|
301
301
|
client
|
|
302
302
|
}) {
|
|
303
|
-
const t =
|
|
303
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
304
304
|
const [domains, setDomains] = react.useState([]);
|
|
305
305
|
const [isLoading, setIsLoading] = react.useState(true);
|
|
306
306
|
const [isAddSheetOpen, setIsAddSheetOpen] = react.useState(false);
|
|
@@ -366,15 +366,15 @@ function DomainsTabContent({
|
|
|
366
366
|
}
|
|
367
367
|
}, [client, organizationId, fetchDomains]);
|
|
368
368
|
if (isLoading) {
|
|
369
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-
|
|
370
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
369
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-center gap-2 p-8 text-sm text-slate-500 dark:text-slate-400", children: [
|
|
370
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.InlineSpinner, {}),
|
|
371
371
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t("admin.organizationDetail.domains.loading") })
|
|
372
372
|
] });
|
|
373
373
|
}
|
|
374
374
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
375
375
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
376
376
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
377
|
-
|
|
377
|
+
chunkEBARYRSA_js.Button,
|
|
378
378
|
{
|
|
379
379
|
color: "ios-glass-blue",
|
|
380
380
|
onClick: handleOpenAddSheet,
|
|
@@ -386,19 +386,19 @@ function DomainsTabContent({
|
|
|
386
386
|
}
|
|
387
387
|
),
|
|
388
388
|
domains.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
389
|
-
|
|
389
|
+
chunkRWZ2PLMQ_js.EmptyState,
|
|
390
390
|
{
|
|
391
391
|
message: t("admin.organizationDetail.domains.emptyMessage"),
|
|
392
392
|
description: t("admin.organizationDetail.domains.emptyDescription"),
|
|
393
393
|
icon: outline.GlobeAltIcon,
|
|
394
394
|
variant: "card"
|
|
395
395
|
}
|
|
396
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
|
-
|
|
396
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.ListCard, { children: domains.map((domain) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
397
|
+
chunkRWZ2PLMQ_js.ListCardItem,
|
|
398
398
|
{
|
|
399
399
|
leading: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `flex h-9 w-9 items-center justify-center rounded-xl shadow-sm ${domain.verified ? "bg-gradient-to-br from-emerald-500 to-green-600" : "bg-gradient-to-br from-amber-500 to-orange-600"}`, children: domain.verified ? /* @__PURE__ */ jsxRuntime.jsx(outline.CheckCircleIcon, { className: "h-5 w-5 text-white" }) : /* @__PURE__ */ jsxRuntime.jsx(outline.GlobeAltIcon, { className: "h-5 w-5 text-white" }) }),
|
|
400
400
|
trailing: !domain.verified ? /* @__PURE__ */ jsxRuntime.jsxs(
|
|
401
|
-
|
|
401
|
+
chunkEBARYRSA_js.Button,
|
|
402
402
|
{
|
|
403
403
|
size: "sm",
|
|
404
404
|
color: "ios-glass-blue",
|
|
@@ -410,17 +410,17 @@ function DomainsTabContent({
|
|
|
410
410
|
t("admin.organizationDetail.domains.verifyButton")
|
|
411
411
|
]
|
|
412
412
|
}
|
|
413
|
-
) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
413
|
+
) : /* @__PURE__ */ jsxRuntime.jsx(chunkRWZ2PLMQ_js.StatusBadge, { status: "active", label: t("admin.organizationDetail.domains.verifiedLabel"), size: "sm" }),
|
|
414
414
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
415
|
-
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-
|
|
416
|
-
domain.autoJoinEnabled && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-
|
|
415
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium text-slate-900 dark:text-white", children: domain.domain }),
|
|
416
|
+
domain.autoJoinEnabled && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-slate-500 dark:text-slate-400", children: t("admin.organizationDetail.domains.autoJoinEnabled") })
|
|
417
417
|
] })
|
|
418
418
|
},
|
|
419
419
|
domain.id
|
|
420
420
|
)) })
|
|
421
421
|
] }),
|
|
422
422
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
423
|
-
|
|
423
|
+
chunkRWZ2PLMQ_js.Sheet,
|
|
424
424
|
{
|
|
425
425
|
open: isAddSheetOpen,
|
|
426
426
|
onClose: handleCloseAddSheet,
|
|
@@ -429,7 +429,7 @@ function DomainsTabContent({
|
|
|
429
429
|
size: "md",
|
|
430
430
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4 p-4 sm:p-6", children: [
|
|
431
431
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
432
|
-
|
|
432
|
+
chunkRWZ2PLMQ_js.Input,
|
|
433
433
|
{
|
|
434
434
|
label: t("admin.organizationDetail.domains.domainLabel"),
|
|
435
435
|
value: newDomain,
|
|
@@ -441,7 +441,7 @@ function DomainsTabContent({
|
|
|
441
441
|
),
|
|
442
442
|
addError && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-red-600 dark:text-red-400", role: "alert", children: addError }),
|
|
443
443
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
444
|
-
|
|
444
|
+
chunkEBARYRSA_js.Button,
|
|
445
445
|
{
|
|
446
446
|
color: "ios-glass-blue",
|
|
447
447
|
fullWidth: true,
|
|
@@ -460,14 +460,14 @@ function AdminOrganizationDetail({
|
|
|
460
460
|
organization,
|
|
461
461
|
client
|
|
462
462
|
}) {
|
|
463
|
-
const t =
|
|
463
|
+
const t = chunkY5VN4SPH_js.useTranslations("windsock");
|
|
464
464
|
const [activeTab, setActiveTab] = react.useState("members");
|
|
465
465
|
const segments = ALL_TABS.map((tab) => ({
|
|
466
466
|
value: tab,
|
|
467
467
|
label: t(`admin.organizationDetail.tabs.${tab}`)
|
|
468
468
|
}));
|
|
469
469
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-6", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
470
|
-
|
|
470
|
+
chunkRWZ2PLMQ_js.SectionCard,
|
|
471
471
|
{
|
|
472
472
|
header: {
|
|
473
473
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UsersIcon, { className: "h-5 w-5 text-white" }),
|
|
@@ -475,7 +475,7 @@ function AdminOrganizationDetail({
|
|
|
475
475
|
subtitle: organization.description ?? t("admin.organizationDetail.defaultSubtitle"),
|
|
476
476
|
gradient: "from-emerald-500 via-teal-500 to-cyan-500",
|
|
477
477
|
rightContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
478
|
-
|
|
478
|
+
chunkRWZ2PLMQ_js.StatusBadge,
|
|
479
479
|
{
|
|
480
480
|
status: organization.enabled ? "active" : "inactive",
|
|
481
481
|
label: organization.enabled ? t("admin.organizationDetail.statusEnabled") : t("admin.organizationDetail.statusDisabled"),
|
|
@@ -485,7 +485,7 @@ function AdminOrganizationDetail({
|
|
|
485
485
|
},
|
|
486
486
|
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
487
487
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
488
|
-
|
|
488
|
+
chunkRWZ2PLMQ_js.SegmentedControl,
|
|
489
489
|
{
|
|
490
490
|
segments,
|
|
491
491
|
value: activeTab,
|
|
@@ -502,5 +502,5 @@ function AdminOrganizationDetail({
|
|
|
502
502
|
}
|
|
503
503
|
|
|
504
504
|
exports.AdminOrganizationDetail = AdminOrganizationDetail;
|
|
505
|
-
//# sourceMappingURL=chunk-
|
|
506
|
-
//# sourceMappingURL=chunk-
|
|
505
|
+
//# sourceMappingURL=chunk-RPNMDGRA.js.map
|
|
506
|
+
//# sourceMappingURL=chunk-RPNMDGRA.js.map
|