@datatechsolutions/ui 3.7.3 → 3.7.5
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/index.js +108 -108
- package/dist/astrlabe/index.mjs +4 -4
- package/dist/astrlabe/workflow-canvas.js +4 -4
- package/dist/astrlabe/workflow-canvas.mjs +3 -3
- package/dist/{chunk-5W6LMDXV.mjs → chunk-4HP7XS5I.mjs} +4 -4
- package/dist/{chunk-5W6LMDXV.mjs.map → chunk-4HP7XS5I.mjs.map} +1 -1
- package/dist/{chunk-7JZFNKJD.js → chunk-7WIWDSF6.js} +36 -36
- package/dist/{chunk-7JZFNKJD.js.map → chunk-7WIWDSF6.js.map} +1 -1
- package/dist/{chunk-FKUIVS6I.js → chunk-BEUPW5WS.js} +28 -28
- package/dist/{chunk-FKUIVS6I.js.map → chunk-BEUPW5WS.js.map} +1 -1
- package/dist/{chunk-PYNXIDG3.mjs → chunk-CTCO2YI5.mjs} +3 -3
- package/dist/{chunk-PYNXIDG3.mjs.map → chunk-CTCO2YI5.mjs.map} +1 -1
- package/dist/{chunk-A4A3SQTV.mjs → chunk-DCBRGVD3.mjs} +3 -3
- package/dist/{chunk-A4A3SQTV.mjs.map → chunk-DCBRGVD3.mjs.map} +1 -1
- package/dist/{chunk-E57RZXOR.js → chunk-DWIBK7GV.js} +25 -25
- package/dist/{chunk-E57RZXOR.js.map → chunk-DWIBK7GV.js.map} +1 -1
- package/dist/{chunk-5YVOLHSW.mjs → chunk-EIZM2EQA.mjs} +4 -4
- package/dist/{chunk-5YVOLHSW.mjs.map → chunk-EIZM2EQA.mjs.map} +1 -1
- package/dist/{chunk-TCP45Q4B.js → chunk-FIB2CFJK.js} +9 -9
- package/dist/{chunk-TCP45Q4B.js.map → chunk-FIB2CFJK.js.map} +1 -1
- package/dist/{chunk-32DHEVOH.mjs → chunk-GAN7AKZ2.mjs} +3 -3
- package/dist/{chunk-32DHEVOH.mjs.map → chunk-GAN7AKZ2.mjs.map} +1 -1
- package/dist/{chunk-FNA66TT4.js → chunk-GD6FHRHV.js} +3 -3
- package/dist/{chunk-FNA66TT4.js.map → chunk-GD6FHRHV.js.map} +1 -1
- package/dist/{chunk-PCUINUIC.mjs → chunk-IKH5IRDK.mjs} +3 -3
- package/dist/{chunk-PCUINUIC.mjs.map → chunk-IKH5IRDK.mjs.map} +1 -1
- package/dist/{chunk-VS6PTRQ7.mjs → chunk-IKHWYYZC.mjs} +3 -3
- package/dist/{chunk-VS6PTRQ7.mjs.map → chunk-IKHWYYZC.mjs.map} +1 -1
- package/dist/{chunk-3H5CFLVK.js → chunk-IYDGO7RW.js} +135 -135
- package/dist/{chunk-3H5CFLVK.js.map → chunk-IYDGO7RW.js.map} +1 -1
- package/dist/{chunk-CZZOCKEA.mjs → chunk-JUDQX6MP.mjs} +3 -3
- package/dist/{chunk-CZZOCKEA.mjs.map → chunk-JUDQX6MP.mjs.map} +1 -1
- package/dist/{chunk-HBOORO52.js → chunk-KI4UPW4Z.js} +4 -4
- package/dist/{chunk-HBOORO52.js.map → chunk-KI4UPW4Z.js.map} +1 -1
- package/dist/{chunk-74BU2EBZ.mjs → chunk-KZSL7AXW.mjs} +6 -6
- package/dist/{chunk-74BU2EBZ.mjs.map → chunk-KZSL7AXW.mjs.map} +1 -1
- package/dist/{chunk-Q4QORAMH.js → chunk-MFAVWJWE.js} +10 -10
- package/dist/{chunk-Q4QORAMH.js.map → chunk-MFAVWJWE.js.map} +1 -1
- package/dist/{chunk-KKXI7CPF.mjs → chunk-MGZTZELL.mjs} +3 -3
- package/dist/{chunk-KKXI7CPF.mjs.map → chunk-MGZTZELL.mjs.map} +1 -1
- package/dist/{chunk-ZP37M2QK.mjs → chunk-MRLEINJN.mjs} +7 -7
- package/dist/{chunk-ZP37M2QK.mjs.map → chunk-MRLEINJN.mjs.map} +1 -1
- package/dist/{chunk-57E4TCB2.mjs → chunk-N5365CGD.mjs} +3 -3
- package/dist/{chunk-57E4TCB2.mjs.map → chunk-N5365CGD.mjs.map} +1 -1
- package/dist/{chunk-EWYAM4WJ.mjs → chunk-P7GVXI7Y.mjs} +3 -3
- package/dist/{chunk-EWYAM4WJ.mjs.map → chunk-P7GVXI7Y.mjs.map} +1 -1
- package/dist/{chunk-3X3IYDG6.js → chunk-QL2JYRBN.js} +68 -68
- package/dist/{chunk-3X3IYDG6.js.map → chunk-QL2JYRBN.js.map} +1 -1
- package/dist/{chunk-RCHTRG7R.js → chunk-R2RPRRB4.js} +55 -55
- package/dist/{chunk-RCHTRG7R.js.map → chunk-R2RPRRB4.js.map} +1 -1
- package/dist/{chunk-H37VDL7Y.js → chunk-RBB5YGWH.js} +4 -4
- package/dist/{chunk-H37VDL7Y.js.map → chunk-RBB5YGWH.js.map} +1 -1
- package/dist/{chunk-TJPPZU77.js → chunk-SUU7XPRX.js} +34 -34
- package/dist/{chunk-TJPPZU77.js.map → chunk-SUU7XPRX.js.map} +1 -1
- package/dist/{chunk-VPFVW7ZF.js → chunk-XT76DMP5.js} +35 -35
- package/dist/{chunk-VPFVW7ZF.js.map → chunk-XT76DMP5.js.map} +1 -1
- package/dist/{chunk-F35GFICG.js → chunk-Y2FR242F.js} +13 -13
- package/dist/{chunk-F35GFICG.js.map → chunk-Y2FR242F.js.map} +1 -1
- package/dist/{chunk-WDBVIU7W.mjs → chunk-YNHQ36UU.mjs} +3 -3
- package/dist/{chunk-WDBVIU7W.mjs.map → chunk-YNHQ36UU.mjs.map} +1 -1
- package/dist/{chunk-E6C7MFHJ.mjs → chunk-Z3BMHKKH.mjs} +3 -3
- package/dist/{chunk-E6C7MFHJ.mjs.map → chunk-Z3BMHKKH.mjs.map} +1 -1
- package/dist/{chunk-Q7HRCCFT.js → chunk-ZF7RJNPD.js} +45 -45
- package/dist/{chunk-Q7HRCCFT.js.map → chunk-ZF7RJNPD.js.map} +1 -1
- package/dist/index.js +665 -665
- package/dist/index.mjs +2 -2
- package/dist/platform/admin/index.js +10 -10
- package/dist/platform/admin/index.mjs +4 -4
- package/dist/platform/agents-workspace.js +7 -7
- package/dist/platform/agents-workspace.mjs +6 -6
- package/dist/platform/app-shell.js +4 -4
- package/dist/platform/app-shell.mjs +3 -3
- package/dist/platform/auth/index.js +22 -22
- package/dist/platform/auth/index.mjs +4 -4
- package/dist/platform/billing/index.js +4 -4
- package/dist/platform/billing/index.mjs +3 -3
- package/dist/platform/impersonation/index.js +4 -4
- package/dist/platform/impersonation/index.mjs +3 -3
- package/dist/platform/index.js +78 -78
- package/dist/platform/index.mjs +18 -18
- package/dist/platform/pages/index.d.mts +12 -0
- package/dist/platform/pages/index.d.ts +12 -0
- package/dist/platform/pages/index.js +416 -254
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +193 -31
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +7 -7
- package/dist/platform/settings/index.mjs +6 -6
- package/dist/platform/workflow-canvas-shell.js +5 -5
- package/dist/platform/workflow-canvas-shell.mjs +4 -4
- package/package.json +1 -1
|
@@ -1 +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":["buildAuthenticatedApiUrl","useState","useRef","useCallback","useEffect","useWorkflowStore","executeWorkflow","useTranslations","useMemo","useNavigate","useLocale","useNotifications","useModalStore","useSubworkflowStore","getWorkflowById","getAgentConfigsWithPrompts","getAgentModels","getAgentToolDefinitions","getAgentRules","getDatasources","listModelProviderConnections","getAgentTools","getWorkflows","saveWorkflowDraft","validateWorkflowGraph","publishWorkflow","createWorkflow","deleteWorkflow","updateAgentTool","updateAgentRule","workflow","createDatasource","jsxs","jsx","PageErrorState","PageEmptyState","WorkflowBuilderProvider","CopyableId","SaveStatusBadge","Button","ChartBarIcon","StopIcon","PlayIcon","DocumentCheckIcon","WorkflowListBar","NodePalette","AutoSaveWorkspace","getDatasourceTables","getDatasourceSchema","AgentModal","updateAgentConfig","createAgentConfig","PipelineSettingsModal","updateWorkflowSettings","SubworkflowModal","RunPanel","RunInputDialog","PreviewPanel","getWorkflowRuns","DatasourceFormModal","DynamicIslandConfirm"],"mappings":";;;;;;;;;;;;;;;AAoBA,IAAM,WAAA,GAAc,SAAY,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,EAAAA,yCAAA;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,GAAIC,cAAA,CAAmC,EAAE,CAAA;AACjE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAwC,MAAM,CAAA;AAC1E,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,UAAA,GAAaC,aAA4B,IAAI,CAAA;AACnD,EAAA,MAAM,UAAA,GAAaA,aAAO,CAAC,CAAA;AAE3B,EAAA,MAAM,OAAA,GAAUC,kBAAY,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,EAAAC,eAAA,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,GAAmBC,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,gBAAgB,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAeA,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgBA,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,aAAa,CAAA;AAErE,EAAAD,gBAAU,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,GAAIH,eAAwB,IAAI,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,KAAK,CAAA;AACpD,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,IAAc,IAAA,EAAM,WAAW,CAAA;AAC3D,EAAA,MAAM,gBAAA,GAAmBI,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,gBAAgB,CAAA;AAC3E,EAAA,MAAM,YAAA,GAAeA,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,aAAA,GAAgBA,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,aAAa,CAAA;AAErE,EAAA,0BAAA,CAA2B,MAAA,CAAO,MAAA,EAAQ,WAAA,GAAc,MAAA,CAAO,SAAS,MAAM,CAAA;AAE9E,EAAAD,gBAAU,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,GAAMD,iBAAAA,CAAY,OAAO,cAAA,KAAmD;AAChF,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,cAAA,CAAe,IAAI,CAAA;AACnB,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAMG,gCAAA,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,GAAOH,kBAAY,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,EAAAC,gBAAU,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,UAAgB,qCAAA,IAAyC,EAAA;AAClE;AAEA,SAAS,mBAAA,GAA8C;AACrD,EAAA,MAAM,CAAA,GAAIG,iCAAgB,sBAAsB,CAAA;AAChD,EAAA,OAAOC,cAAQ,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,WAAWC,uBAAA,EAAY;AAC7B,EAAA,MAAM,SAASC,0BAAA,EAAU;AACzB,EAAA,MAAM,SAAA,GAAYH,iCAAgB,iBAAiB,CAAA;AACnD,EAAA,MAAM,OAAA,GAAUA,iCAAgB,QAAQ,CAAA;AACxC,EAAA,MAAM,mBAAmB,mBAAA,EAAoB;AAE7C,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,EAAS,aAAA,KAAkBI,iCAAA,EAAiB;AAExE,EAAA,MAAM,WAAA,GAAcR,iBAAAA,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,iBAAAA,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,GAAIF,eAAS,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAC9D,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,eAAS,IAAI,CAAA;AACjE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEtD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAAA,CAAqB,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAA0B,IAAI,CAAA;AAE9D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAA6B,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,cAAAA,CAAuB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAAA,CAAyB,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,cAAAA,CAAsB,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,cAAAA,CAAsB,EAAE,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAAA,CAAuB,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,cAAAA,CAAoC,EAAE,CAAA;AACtF,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEpE,EAAA,MAAM,yBAAA,GAA4BW,8BAAA,CAAc,CAAC,CAAA,KAAM,EAAE,yBAAyB,CAAA;AAClF,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIX,eAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC9D,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5D,EAAA,MAAM,oBAAA,GAAuBY,oCAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACnE,EAAA,MAAM,qBAAA,GAAwBA,oCAAA,CAAoB,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAErE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIZ,eAA8C,IAAI,CAAA;AAC1F,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,eAAoB,MAAM,CAAA;AAE9D,EAAA,MAAM,cAAA,GAAiBC,aAA6B,IAAI,CAAA;AACxD,EAAA,MAAM,YAAA,GAAeA,aAA6C,IAAI,CAAA;AACtE,EAAA,MAAM,sBAAA,GAAyBA,aAAO,IAAI,CAAA;AAE1C,EAAA,MAAM,YAAA,GAAeG,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,YAAY,CAAA;AACnE,EAAA,MAAM,cAAA,GAAiBA,iCAAA,CAAiB,CAAC,KAAA,KAAU,MAAM,cAAc,CAAA;AACvE,EAAA,MAAM,aAAA,GAAgBA,iCAAA,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,GAAoBF,kBAAY,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,QACzHW,iCAAgB,UAAU,CAAA;AAAA,QAC1BC,2CAAA,EAA2B;AAAA,QAC3BC,+BAAA,EAAe;AAAA,QACfC,wCAAA,EAAwB,CAAE,KAAA,CAAM,MAAM,EAAiB,CAAA;AAAA,QACvDC,8BAAA,EAAc;AAAA,QACdC,+BAAA,EAAe,CAAE,KAAA,CAAM,MAAM,EAAkB,CAAA;AAAA,QAC/CC,6CAAA,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,KAASC,8BAAA,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,GAAmBlB,kBAAY,YAAY;AAC/C,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAMmB,6BAAA,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,EAAAlB,gBAAU,MAAM;AACd,IAAA,KAAK,iBAAA,EAAkB;AAAA,EACzB,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAEtB,EAAAA,gBAAU,MAAM;AACd,IAAA,KAAK,gBAAA,EAAiB;AAAA,EACxB,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAAA,gBAAU,MAAM;AACd,IAAA,sBAAA,CAAuB,OAAA,GAAU,IAAA;AAAA,EACnC,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAAA,gBAAU,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,GAAsBD,iBAAAA,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,KAAKoB,mCAAkB,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,GAAgBpB,kBAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAE7B,IAAA,MAAM,aAAaqB,sCAAA,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,MAAMC,gCAAA,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,GAAuBtB,iBAAAA,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,kBAAY,YAAY;AACnD,IAAA,MAAM,OAAA,GAAU,MAAMuB,+BAAA,CAAe;AAAA,MACnC,IAAA,EAAM,UAAU,qBAAqB;AAAA,KACtC,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,GAAuBvB,iBAAAA,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,kBAAY,YAAY;AAC5C,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,MAAMwB,+BAAA,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,GAAsBxB,kBAAY,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,kBAAY,MAAM;AAC1C,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,uBAAA,GAA0BA,kBAAY,MAAM;AAChD,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,kBAAY,YAAY;AAC/C,IAAA,MAAM,UAAA,GAAa,MAAMY,2CAAA,EAA2B;AACpD,IAAA,SAAA,CAAU,UAAU,CAAA;AACpB,IAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,EAC1B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBZ,iBAAAA,CAAY,OAAO,IAAA,KAAuB;AACjE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAMyB,gCAAA,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,GAAmBzB,iBAAAA,CAAY,OAAO,IAAA,KAAoB;AAC9D,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM0B,gCAAA,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,GAAmB1B,kBAAY,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,kBAAY,MAAM;AAAA,EAE3C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,qBAAA,GAAwBA,kBAAY,MAAM;AAAA,EAEhD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,0BAAA,GAA6BA,iBAAAA,CAAY,CAAC2B,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,GAAiB3B,iBAAAA,CAAY,CAAC,IAAA,KAAuB;AACzD,IAAA,oBAAA,CAAqB,IAAI,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,sBAAA,GAAyBA,kBAAY,MAAM;AAC/C,IAAA,sBAAA,CAAuB,IAAI,CAAA;AAAA,EAC7B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,oBAAA,GAAuBA,iBAAAA,CAAY,OAAO,IAAA,KAA6B;AAC3E,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAU,MAAM4B,iCAAA,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,GAAiDvB,aAAA;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,GAAwBA,aAAA;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,GAAwBA,cAAQ,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,sCACG,KAAA,EAAA,EAAI,SAAA,EAAU,uCACb,QAAA,kBAAAwB,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6BAAA,EAA8B,CAAA;AAAA,wBAC7CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EAA8B;AAAA,OAAA,EAC/C,CAAA;AAAA,sBACAA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,wDAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,CAAA;AAAA,yCAC9C,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,0BACdA,cAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,gCAAA,EAAA,EAAjB,KAAkD,CAC7D,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,cAAA,CAAC,SAAI,SAAA,EAAU,yCAAA,EACb,yCAAC,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,uBACEA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDAAA,EACZ,QAAA,EAAA,SAAA,mBACCA,cAAA;AAAA,MAACC,+BAAA;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,mBAEAD,cAAA;AAAA,MAACE,+BAAA;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,uBACEF,cAAA,CAACG,wCAAA,EAAA,EAAwB,cAAA,EAAgB,iBAAA,EAAkB,EACzD,0CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EAAsC,aAAA,EAAY,kBAAA,EAC/D,QAAA,EAAA;AAAA,oBAAAJ,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2DAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;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,SAAA,EAAU,0IAAA;AAAA,cACV,KAAA,EAAO,UAAU,UAAU,CAAA;AAAA,cAE1B,QAAA,EAAA,QAAA,CAAS,IAAA,IAAQ,SAAA,CAAU,OAAO;AAAA;AAAA,WACrC;AAAA,0BACAA,cAAA,CAACI,2BAAA,EAAA,EAAW,EAAA,EAAI,UAAA,EAAY,WAAU,aAAA,EAAc,CAAA;AAAA,UACnD,SAAS,OAAA,mBACRJ,cAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sJACb,QAAA,EAAA,SAAA,CAAU,YAAY,CAAA,EACzB,CAAA,kCAEC,MAAA,EAAA,EAAK,SAAA,EAAU,oJAAA,EACb,QAAA,EAAA,SAAA,CAAU,WAAW,CAAA,EACxB,CAAA;AAAA,0BAEFA,cAAA,CAACK,gCAAA,EAAA,EAAgB,MAAA,EAAQ,UAAA,EAAY;AAAA,SAAA,EACvC,CAAA;AAAA,wBAEAN,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACM,uBAAA;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,kBAAAN,cAAA,CAACO,oBAAA,EAAA,EAAa,SAAA,EAAU,aAAA,EAAc,aAAU,MAAA,EAAO;AAAA;AAAA,WACzD;AAAA,UAQC,SAAA,mCACED,uBAAA,EAAA,EAAO,IAAA,EAAK,MAAK,OAAA,EAAO,IAAA,EAAC,SAAS,eAAA,EACjC,QAAA,EAAA;AAAA,4BAAAN,cAAA,CAACQ,gBAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,WAAA,EAAU,MAAA,EAAO,CAAA;AAAA,YAClD,UAAU,eAAe;AAAA,WAAA,EAC5B,CAAA,mBAEAT,eAAA;AAAA,YAACO,uBAAA;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,gCAAAN,cAAA,CAACS,gBAAA,EAAA,EAAS,SAAA,EAAU,aAAA,EAAc,WAAA,EAAU,MAAA,EAAO,CAAA;AAAA,gBAClD,UAAU,cAAc;AAAA;AAAA;AAAA,WAC3B;AAAA,0CAGDH,uBAAA,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,4BAAAN,cAAA,CAACU,yBAAA,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,sBAEAV,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,QAACW,gCAAA;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,sBAEAX,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,sBACzCD,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,cAAA;AAAA,UAACY,4BAAA;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,wBAEAZ,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,UAACa,kCAAA;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,EAAcC,oCAAA;AAAA,YACd,YAAA,EAAcC,oCAAA;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,qBACjBf,cAAA;AAAA,cAACgB,2BAAA;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,MAAMC,kCAAA,CAAkB,OAAA,CAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,kBAC/C,CAAA,MAAO;AACL,oBAAA,MAAMC,mCAAkB,IAAI,CAAA;AAAA,kBAC9B;AAAA,gBACF;AAAA;AAAA;AACF;AAAA,SAEJ,EACF;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAEAlB,cAAA;AAAA,MAACmB,sCAAA;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,MAAM7B,kCAAA,CAAkB,UAAA,EAAY,cAAA,CAAe,OAAA,EAAS,QAAQ,CAAA,GACpE,MAAM8B,uCAAA,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,oBAEApB,cAAA;AAAA,MAACqB,iCAAA;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,MAAM5B,+BAAA,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,MAAME,gCAAA,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,oBAEAK,cAAA;AAAA,MAACsB,yBAAA;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,oBAEAtB,cAAA;AAAA,MAACuB,+BAAA;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,oBAEAvB,cAAA;AAAA,MAACwB,6BAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAM,gBAAA;AAAA,QACN,OAAA,EAAS,MAAM,mBAAA,CAAoB,KAAK,CAAA;AAAA,QACxC,UAAA;AAAA,QACA,QAAA,EAAUC;AAAA;AAAA,KACZ;AAAA,oBAEAzB,cAAA;AAAA,MAAC0B,oCAAA;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,oBAEA1B,cAAA;AAAA,MAAC2B,qCAAA;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-7JZFNKJD.js","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 const created = await createWorkflow({\n name: tWorkflow('defaultWorkflowName'),\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 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 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\"\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
|
+
{"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":["buildAuthenticatedApiUrl","useState","useRef","useCallback","useEffect","useWorkflowStore","executeWorkflow","useTranslations","useMemo","useNavigate","useLocale","useNotifications","useModalStore","useSubworkflowStore","getWorkflowById","getAgentConfigsWithPrompts","getAgentModels","getAgentToolDefinitions","getAgentRules","getDatasources","listModelProviderConnections","getAgentTools","getWorkflows","saveWorkflowDraft","validateWorkflowGraph","publishWorkflow","createWorkflow","deleteWorkflow","updateAgentTool","updateAgentRule","workflow","createDatasource","jsxs","jsx","PageErrorState","PageEmptyState","WorkflowBuilderProvider","CopyableId","SaveStatusBadge","Button","ChartBarIcon","StopIcon","PlayIcon","DocumentCheckIcon","WorkflowListBar","NodePalette","AutoSaveWorkspace","getDatasourceTables","getDatasourceSchema","AgentModal","updateAgentConfig","createAgentConfig","PipelineSettingsModal","updateWorkflowSettings","SubworkflowModal","RunPanel","RunInputDialog","PreviewPanel","getWorkflowRuns","DatasourceFormModal","DynamicIslandConfirm"],"mappings":"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","file":"chunk-7WIWDSF6.js","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 const created = await createWorkflow({\n name: tWorkflow('defaultWorkflowName'),\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 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 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\"\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,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var chunkQL2JYRBN_js = require('./chunk-QL2JYRBN.js');
|
|
5
|
+
var chunkGD6FHRHV_js = require('./chunk-GD6FHRHV.js');
|
|
6
6
|
var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
|
|
7
7
|
var chunkBHOT22QL_js = require('./chunk-BHOT22QL.js');
|
|
8
8
|
var react = require('react');
|
|
@@ -27,7 +27,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
27
27
|
const labelsAny = labels;
|
|
28
28
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
29
29
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
30
|
-
|
|
30
|
+
chunkGD6FHRHV_js.HeroSection,
|
|
31
31
|
{
|
|
32
32
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.UserGroupIcon, { className: "h-5 w-5" }),
|
|
33
33
|
label: labels.title,
|
|
@@ -35,7 +35,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
35
35
|
subtitle: labels.subtitle,
|
|
36
36
|
gradient: "from-violet-500 to-indigo-600",
|
|
37
37
|
toolbar: /* @__PURE__ */ jsxRuntime.jsx(
|
|
38
|
-
|
|
38
|
+
chunkGD6FHRHV_js.CreateActionButton,
|
|
39
39
|
{
|
|
40
40
|
mode: "desktop",
|
|
41
41
|
label: labels.create,
|
|
@@ -46,7 +46,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
46
46
|
}
|
|
47
47
|
),
|
|
48
48
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
49
|
-
|
|
49
|
+
chunkGD6FHRHV_js.CreateActionButton,
|
|
50
50
|
{
|
|
51
51
|
mode: "mobile",
|
|
52
52
|
label: labels.create,
|
|
@@ -55,7 +55,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
55
55
|
}
|
|
56
56
|
),
|
|
57
57
|
!isEmpty && /* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
-
|
|
58
|
+
chunkGD6FHRHV_js.SearchBar,
|
|
59
59
|
{
|
|
60
60
|
searchTerm,
|
|
61
61
|
onSearchChange: setSearchTerm,
|
|
@@ -65,14 +65,14 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
65
65
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
|
|
66
66
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.list }),
|
|
67
67
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
-
|
|
68
|
+
chunkGD6FHRHV_js.EntityCard,
|
|
69
69
|
{
|
|
70
70
|
accentGradient: "from-violet-500 to-indigo-700",
|
|
71
71
|
icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.UserGroupIcon, { className: "h-6 w-6" }) }),
|
|
72
72
|
title: user.name,
|
|
73
73
|
subtitle: user.email,
|
|
74
74
|
status: /* @__PURE__ */ jsxRuntime.jsx(
|
|
75
|
-
|
|
75
|
+
chunkGD6FHRHV_js.StatusBadge,
|
|
76
76
|
{
|
|
77
77
|
status: user.active ? "active" : "inactive",
|
|
78
78
|
label: user.active ? labels.statusActive : labels.statusInactive,
|
|
@@ -88,8 +88,8 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
88
88
|
const role = String(formData.get("role") ?? "viewer");
|
|
89
89
|
onUpdateRole({ email: user.email, role });
|
|
90
90
|
},
|
|
91
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
92
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
91
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGD6FHRHV_js.InlineForm, { children: [
|
|
92
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormSelect, { name: "role", options: ROLE_OPTIONS, defaultValue: user.role }),
|
|
93
93
|
/* @__PURE__ */ jsxRuntime.jsx(chunkBHOT22QL_js.Button, { type: "submit", outline: true, size: "sm", children: labels.save })
|
|
94
94
|
] })
|
|
95
95
|
}
|
|
@@ -99,7 +99,7 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
99
99
|
)) })
|
|
100
100
|
] }),
|
|
101
101
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
-
|
|
102
|
+
chunkGD6FHRHV_js.GlassModal,
|
|
103
103
|
{
|
|
104
104
|
open: createOpen,
|
|
105
105
|
onClose: () => setCreateOpen(false),
|
|
@@ -117,10 +117,10 @@ function UsersPageView({ labels, users, onCreateUser, onUpdateRole }) {
|
|
|
117
117
|
onCreateUser({ name, email, role });
|
|
118
118
|
setCreateOpen(false);
|
|
119
119
|
},
|
|
120
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
121
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
122
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
123
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
120
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGD6FHRHV_js.FormGrid, { children: [
|
|
121
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormInput, { name: "name", label: labels.name, placeholder: labels.userNamePlaceholder, required: true }),
|
|
122
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormInput, { name: "email", label: labels.email, placeholder: labels.userEmailPlaceholder, required: true, type: "email" }),
|
|
123
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormSelect, { name: "role", label: labels.role, options: ROLE_OPTIONS })
|
|
124
124
|
] })
|
|
125
125
|
}
|
|
126
126
|
)
|
|
@@ -146,7 +146,7 @@ function RolesPageView({
|
|
|
146
146
|
const labelsAny = labels;
|
|
147
147
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-4", children: [
|
|
148
148
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
149
|
-
|
|
149
|
+
chunkGD6FHRHV_js.HeroSection,
|
|
150
150
|
{
|
|
151
151
|
icon: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-5 w-5" }),
|
|
152
152
|
label: labels.title,
|
|
@@ -154,7 +154,7 @@ function RolesPageView({
|
|
|
154
154
|
subtitle: labels.subtitle,
|
|
155
155
|
gradient: "from-emerald-500 to-teal-600",
|
|
156
156
|
toolbar: /* @__PURE__ */ jsxRuntime.jsx(
|
|
157
|
-
|
|
157
|
+
chunkGD6FHRHV_js.CreateActionButton,
|
|
158
158
|
{
|
|
159
159
|
mode: "desktop",
|
|
160
160
|
label: labels.assign,
|
|
@@ -165,7 +165,7 @@ function RolesPageView({
|
|
|
165
165
|
}
|
|
166
166
|
),
|
|
167
167
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
168
|
-
|
|
168
|
+
chunkGD6FHRHV_js.CreateActionButton,
|
|
169
169
|
{
|
|
170
170
|
mode: "mobile",
|
|
171
171
|
label: labels.assign,
|
|
@@ -174,7 +174,7 @@ function RolesPageView({
|
|
|
174
174
|
}
|
|
175
175
|
),
|
|
176
176
|
!isEmpty && /* @__PURE__ */ jsxRuntime.jsx(
|
|
177
|
-
|
|
177
|
+
chunkGD6FHRHV_js.SearchBar,
|
|
178
178
|
{
|
|
179
179
|
searchTerm,
|
|
180
180
|
onSearchChange: setSearchTerm,
|
|
@@ -184,7 +184,7 @@ function RolesPageView({
|
|
|
184
184
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
|
|
185
185
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.definitions }),
|
|
186
186
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-4", children: filteredRoleDefinitions.map((role) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
187
|
-
|
|
187
|
+
chunkGD6FHRHV_js.EntityCard,
|
|
188
188
|
{
|
|
189
189
|
accentGradient: "from-emerald-500 to-teal-700",
|
|
190
190
|
icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-emerald-500/10 text-emerald-600 dark:bg-emerald-500/20 dark:text-emerald-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-6 w-6" }) }),
|
|
@@ -201,7 +201,7 @@ function RolesPageView({
|
|
|
201
201
|
/* @__PURE__ */ jsxRuntime.jsxs("section", { className: "space-y-3", children: [
|
|
202
202
|
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: labels.current }),
|
|
203
203
|
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3", children: filteredUsers.map((user) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
204
|
-
|
|
204
|
+
chunkGD6FHRHV_js.EntityCard,
|
|
205
205
|
{
|
|
206
206
|
accentGradient: "from-violet-500 to-indigo-700",
|
|
207
207
|
icon: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-11 w-11 items-center justify-center rounded-lg bg-violet-500/10 text-violet-600 dark:bg-violet-500/20 dark:text-violet-400", children: /* @__PURE__ */ jsxRuntime.jsx(outline.ShieldCheckIcon, { className: "h-6 w-6" }) }),
|
|
@@ -213,7 +213,7 @@ function RolesPageView({
|
|
|
213
213
|
)) })
|
|
214
214
|
] }),
|
|
215
215
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
216
|
-
|
|
216
|
+
chunkGD6FHRHV_js.GlassModal,
|
|
217
217
|
{
|
|
218
218
|
open: assignOpen,
|
|
219
219
|
onClose: () => setAssignOpen(false),
|
|
@@ -230,9 +230,9 @@ function RolesPageView({
|
|
|
230
230
|
onAssignRole({ email, role });
|
|
231
231
|
setAssignOpen(false);
|
|
232
232
|
},
|
|
233
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
234
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
235
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
233
|
+
children: /* @__PURE__ */ jsxRuntime.jsxs(chunkGD6FHRHV_js.FormGrid, { children: [
|
|
234
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormInput, { name: "email", label: labels.userEmail, placeholder: "user@company.com", required: true }),
|
|
235
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkGD6FHRHV_js.FormSelect, { name: "role", label: labels.role, options: roleOptions })
|
|
236
236
|
] })
|
|
237
237
|
}
|
|
238
238
|
)
|
|
@@ -240,11 +240,11 @@ function RolesPageView({
|
|
|
240
240
|
}
|
|
241
241
|
function WorkflowWorkspace({ graph }) {
|
|
242
242
|
const locale = chunkYXN2K77G_js.useLocale();
|
|
243
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
243
|
+
return /* @__PURE__ */ jsxRuntime.jsx(chunkQL2JYRBN_js.Workspace, { initialGraph: graph, locale });
|
|
244
244
|
}
|
|
245
245
|
|
|
246
246
|
exports.RolesPageView = RolesPageView;
|
|
247
247
|
exports.UsersPageView = UsersPageView;
|
|
248
248
|
exports.WorkflowWorkspace = WorkflowWorkspace;
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
250
|
-
//# sourceMappingURL=chunk-
|
|
249
|
+
//# sourceMappingURL=chunk-BEUPW5WS.js.map
|
|
250
|
+
//# sourceMappingURL=chunk-BEUPW5WS.js.map
|