@hotmeshio/long-tail 0.1.6 → 0.1.7
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/README.md +44 -4
- package/build/api/auth.d.ts +5 -0
- package/build/api/auth.js +42 -0
- package/build/api/bot-accounts.d.ts +50 -0
- package/build/api/bot-accounts.js +215 -0
- package/build/api/controlplane.d.ts +20 -0
- package/build/api/controlplane.js +110 -0
- package/build/api/dba.d.ts +15 -0
- package/build/api/dba.js +68 -0
- package/build/api/escalations.d.ts +70 -0
- package/build/api/escalations.js +656 -0
- package/build/api/exports.d.ts +32 -0
- package/build/api/exports.js +146 -0
- package/build/api/index.d.ts +18 -0
- package/build/api/index.js +54 -0
- package/build/api/insight.d.ts +29 -0
- package/build/api/insight.js +90 -0
- package/build/api/maintenance.d.ts +7 -0
- package/build/api/maintenance.js +28 -0
- package/build/api/mcp-runs.d.ts +16 -0
- package/build/api/mcp-runs.js +62 -0
- package/build/api/mcp.d.ts +52 -0
- package/build/api/mcp.js +212 -0
- package/build/api/namespaces.d.ts +7 -0
- package/build/{routes/escalations/helpers.js → api/namespaces.js} +24 -12
- package/build/api/roles.d.ts +25 -0
- package/build/api/roles.js +159 -0
- package/build/api/settings.d.ts +2 -0
- package/build/api/settings.js +35 -0
- package/build/api/tasks.d.ts +27 -0
- package/build/api/tasks.js +96 -0
- package/build/api/users.d.ts +44 -0
- package/build/api/users.js +162 -0
- package/build/api/workflow-sets.d.ts +26 -0
- package/build/api/workflow-sets.js +119 -0
- package/build/api/workflows.d.ts +48 -0
- package/build/api/workflows.js +298 -0
- package/build/api/yaml-workflows.d.ts +87 -0
- package/build/api/yaml-workflows.js +556 -0
- package/build/index.d.ts +4 -0
- package/build/index.js +6 -1
- package/build/lib/db/schemas/004_workflow_sets.sql +29 -0
- package/build/lib/db/schemas/005_unique_graph_topic.sql +7 -0
- package/build/lib/db/schemas/011_system_workflow_configs.sql +7 -0
- package/build/lib/events/callback.d.ts +41 -0
- package/build/lib/events/callback.js +98 -0
- package/build/modules/config.js +1 -1
- package/build/routes/auth.js +37 -36
- package/build/routes/bot-accounts.js +34 -164
- package/build/routes/controlplane.js +20 -60
- package/build/routes/dba.js +18 -28
- package/build/routes/escalations/bulk.js +17 -192
- package/build/routes/escalations/list.js +29 -75
- package/build/routes/escalations/resolve.js +3 -193
- package/build/routes/escalations/single.js +13 -122
- package/build/routes/exports.js +44 -95
- package/build/routes/index.js +2 -0
- package/build/routes/insight.js +46 -88
- package/build/routes/maintenance.js +41 -17
- package/build/routes/mcp-runs.js +52 -60
- package/build/routes/mcp.js +49 -177
- package/build/routes/namespaces.js +9 -20
- package/build/routes/roles.js +23 -97
- package/build/routes/settings.js +37 -25
- package/build/routes/tasks.js +28 -64
- package/build/routes/users.js +24 -113
- package/build/routes/workflow-sets.d.ts +2 -0
- package/build/routes/workflow-sets.js +98 -0
- package/build/routes/workflows/config.js +23 -57
- package/build/routes/workflows/discovery.js +11 -85
- package/build/routes/workflows/invocation.js +16 -84
- package/build/routes/yaml-workflows/cron.js +12 -61
- package/build/routes/yaml-workflows/crud.js +30 -223
- package/build/routes/yaml-workflows/deployment.js +15 -115
- package/build/routes/yaml-workflows/versions.js +20 -58
- package/build/sdk/index.d.ts +327 -0
- package/build/sdk/index.js +298 -0
- package/build/services/controlplane/index.d.ts +1 -2
- package/build/services/controlplane/index.js +3 -3
- package/build/services/controlplane/sql.d.ts +2 -2
- package/build/services/controlplane/sql.js +4 -5
- package/build/services/controlplane/types.d.ts +1 -0
- package/build/services/export/index.js +6 -1
- package/build/services/hotmesh-utils.js +2 -4
- package/build/services/insight/index.d.ts +7 -0
- package/build/services/insight/index.js +30 -0
- package/build/services/mcp/client/tools.js +13 -1
- package/build/services/mcp-runs/sql.js +1 -1
- package/build/services/workflow-sets/db.d.ts +16 -0
- package/build/services/workflow-sets/db.js +78 -0
- package/build/services/workflow-sets/index.d.ts +1 -0
- package/build/services/workflow-sets/index.js +11 -0
- package/build/services/workflow-sets/sql.d.ts +6 -0
- package/build/services/workflow-sets/sql.js +24 -0
- package/build/services/yaml-workflow/db-utils.d.ts +1 -0
- package/build/services/yaml-workflow/db-utils.js +4 -0
- package/build/services/yaml-workflow/db.d.ts +5 -0
- package/build/services/yaml-workflow/db.js +17 -0
- package/build/services/yaml-workflow/pipeline/build/wiring.js +14 -1
- package/build/services/yaml-workflow/pipeline/prompts.d.ts +1 -1
- package/build/services/yaml-workflow/pipeline/prompts.js +1 -1
- package/build/services/yaml-workflow/sql.d.ts +2 -1
- package/build/services/yaml-workflow/sql.js +8 -3
- package/build/services/yaml-workflow/types.d.ts +3 -0
- package/build/services/yaml-workflow/workers/callbacks.js +7 -1
- package/build/services/yaml-workflow/workers/register.js +7 -0
- package/build/start/adapters.js +4 -0
- package/build/system/index.js +6 -0
- package/build/system/mcp-servers/knowledge.js +1 -1
- package/build/system/seed/server-definitions.js +2 -1
- package/build/system/workflows/mcp-workflow-builder/activities/index.d.ts +1 -1
- package/build/system/workflows/mcp-workflow-builder/activities/index.js +2 -1
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.d.ts +6 -0
- package/build/system/workflows/mcp-workflow-builder/activities/tool-loader.js +26 -0
- package/build/system/workflows/mcp-workflow-builder/index.js +26 -2
- package/build/system/workflows/mcp-workflow-builder/prompts.js +104 -35
- package/build/system/workflows/mcp-workflow-planner/activities/analyze.d.ts +11 -0
- package/build/system/workflows/mcp-workflow-planner/activities/analyze.js +36 -0
- package/build/system/workflows/mcp-workflow-planner/activities/index.d.ts +3 -0
- package/build/system/workflows/mcp-workflow-planner/activities/index.js +12 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.d.ts +19 -0
- package/build/system/workflows/mcp-workflow-planner/activities/persist.js +55 -0
- package/build/system/workflows/mcp-workflow-planner/activities/plan.d.ts +10 -0
- package/build/system/workflows/mcp-workflow-planner/activities/plan.js +43 -0
- package/build/system/workflows/mcp-workflow-planner/index.d.ts +7 -0
- package/build/system/workflows/mcp-workflow-planner/index.js +152 -0
- package/build/system/workflows/mcp-workflow-planner/prompts.d.ts +7 -0
- package/build/system/workflows/mcp-workflow-planner/prompts.js +77 -0
- package/build/tsconfig.tsbuildinfo +1 -1
- package/build/types/index.d.ts +1 -0
- package/build/types/sdk.d.ts +27 -0
- package/build/types/sdk.js +2 -0
- package/build/types/workflow-set.d.ts +44 -0
- package/build/types/workflow-set.js +5 -0
- package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js → AdminDashboard-DRjkRSjJ.js} +2 -2
- package/dashboard/dist/assets/{AdminDashboard-BXkKGkb5.js.map → AdminDashboard-DRjkRSjJ.js.map} +1 -1
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js → AvailableEscalationsPage-CnivX4Tz.js} +2 -2
- package/dashboard/dist/assets/{AvailableEscalationsPage-DcH592mc.js.map → AvailableEscalationsPage-CnivX4Tz.js.map} +1 -1
- package/dashboard/dist/assets/BotPicker-DwwaBhTH.js +2 -0
- package/dashboard/dist/assets/{BotPicker-A6LtzyuO.js.map → BotPicker-DwwaBhTH.js.map} +1 -1
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js → CollapsibleSection-DQpaVA0M.js} +2 -2
- package/dashboard/dist/assets/{CollapsibleSection-C7nL2_mv.js.map → CollapsibleSection-DQpaVA0M.js.map} +1 -1
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js → ConfirmDeleteModal-B7JoDNvt.js} +2 -2
- package/dashboard/dist/assets/{ConfirmDeleteModal-CWFwJrSl.js.map → ConfirmDeleteModal-B7JoDNvt.js.map} +1 -1
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js → CopyableId-AqoZayBG.js} +2 -2
- package/dashboard/dist/assets/{CopyableId-DbZ5c3jh.js.map → CopyableId-AqoZayBG.js.map} +1 -1
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js → CredentialsPage-qGw1kQzi.js} +2 -2
- package/dashboard/dist/assets/{CredentialsPage-ClWkmLPu.js.map → CredentialsPage-qGw1kQzi.js.map} +1 -1
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js → CustomDurationPicker-D1HUQcd0.js} +2 -2
- package/dashboard/dist/assets/{CustomDurationPicker-CtH2hReF.js.map → CustomDurationPicker-D1HUQcd0.js.map} +1 -1
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js → DataTable-DKvSKoVG.js} +2 -2
- package/dashboard/dist/assets/{DataTable-CM5ZcpPi.js.map → DataTable-DKvSKoVG.js.map} +1 -1
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js → ElapsedCell-B0yrReGQ.js} +2 -2
- package/dashboard/dist/assets/{ElapsedCell-CwqavyeC.js.map → ElapsedCell-B0yrReGQ.js.map} +1 -1
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js → EmptyState-X0fIzYID.js} +2 -2
- package/dashboard/dist/assets/{EmptyState-BBn78pmm.js.map → EmptyState-X0fIzYID.js.map} +1 -1
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js → EscalationsOverview-BQAT9W7r.js} +2 -2
- package/dashboard/dist/assets/{EscalationsOverview-BcJ2E3X7.js.map → EscalationsOverview-BQAT9W7r.js.map} +1 -1
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js → EventTable-CX1KNLhZ.js} +2 -2
- package/dashboard/dist/assets/{EventTable-C1en_KZ0.js.map → EventTable-CX1KNLhZ.js.map} +1 -1
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js → FilterBar-DMTvuQy-.js} +2 -2
- package/dashboard/dist/assets/{FilterBar-CZTlrLQT.js.map → FilterBar-DMTvuQy-.js.map} +1 -1
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js → ListToolbar-DTOSxoEy.js} +2 -2
- package/dashboard/dist/assets/{ListToolbar-Cdbsapig.js.map → ListToolbar-DTOSxoEy.js.map} +1 -1
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js → McpOverview-BaKTIWrG.js} +2 -2
- package/dashboard/dist/assets/{McpOverview-CSpEJxKa.js.map → McpOverview-BaKTIWrG.js.map} +1 -1
- package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js +5 -0
- package/dashboard/dist/assets/McpQueryDetailPage-CC08T5k8.js.map +1 -0
- package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js +2 -0
- package/dashboard/dist/assets/McpQueryPage-CVfF9dYg.js.map +1 -0
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js → McpRunDetailPage-CKs1RWeV.js} +2 -2
- package/dashboard/dist/assets/{McpRunDetailPage-9xdxgG4d.js.map → McpRunDetailPage-CKs1RWeV.js.map} +1 -1
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js → McpRunsPage-CcPD_tY1.js} +2 -2
- package/dashboard/dist/assets/{McpRunsPage-wWLqHsd4.js.map → McpRunsPage-CcPD_tY1.js.map} +1 -1
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js → Modal-_2AbWxJT.js} +2 -2
- package/dashboard/dist/assets/{Modal-kB_P7ZOr.js.map → Modal-_2AbWxJT.js.map} +1 -1
- package/dashboard/dist/assets/OperatorDashboard-BGiRaRDr.js +2 -0
- package/dashboard/dist/assets/{OperatorDashboard-jc0vrgDI.js.map → OperatorDashboard-BGiRaRDr.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js → PageHeader-DVr5Qyzm.js} +2 -2
- package/dashboard/dist/assets/{PageHeader-NkOeBR05.js.map → PageHeader-DVr5Qyzm.js.map} +1 -1
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js → PageHeaderWithStats-D0KRASML.js} +2 -2
- package/dashboard/dist/assets/{PageHeaderWithStats-ywNhrmFK.js.map → PageHeaderWithStats-D0KRASML.js.map} +1 -1
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js → PriorityBadge-Bx2559OU.js} +2 -2
- package/dashboard/dist/assets/{PriorityBadge-B2MQbSxy.js.map → PriorityBadge-Bx2559OU.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js → ProcessDetailPage-69I--sry.js} +2 -2
- package/dashboard/dist/assets/{ProcessDetailPage-B7z7IdqE.js.map → ProcessDetailPage-69I--sry.js.map} +1 -1
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-BDpUbua2.js} +2 -2
- package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js.map → ProcessesListPage-BDpUbua2.js.map} +1 -1
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js → RolePill-CcAqEaSt.js} +2 -2
- package/dashboard/dist/assets/{RolePill-C1dgC-fK.js.map → RolePill-CcAqEaSt.js.map} +1 -1
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js → RolesPage-Cl23Hjet.js} +2 -2
- package/dashboard/dist/assets/{RolesPage-BSxrD1vm.js.map → RolesPage-Cl23Hjet.js.map} +1 -1
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js → RowActions-B4mqIt3Z.js} +2 -2
- package/dashboard/dist/assets/{RowActions-lYaHGI-v.js.map → RowActions-B4mqIt3Z.js.map} +1 -1
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js → StatCard-Cz_2OjAZ.js} +2 -2
- package/dashboard/dist/assets/{StatCard-v2TiITVr.js.map → StatCard-Cz_2OjAZ.js.map} +1 -1
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js → StatusBadge-Wi2FJZsn.js} +2 -2
- package/dashboard/dist/assets/{StatusBadge-DWlxevgG.js.map → StatusBadge-Wi2FJZsn.js.map} +1 -1
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js → StepIndicator-PW5NRDMb.js} +2 -2
- package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-PW5NRDMb.js.map} +1 -1
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js → StickyPagination-Bl2Uzz65.js} +2 -2
- package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-Bl2Uzz65.js.map} +1 -1
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js → SwimlaneTimeline-CUPqMd0z.js} +2 -2
- package/dashboard/dist/assets/{SwimlaneTimeline-CNlj7fgg.js.map → SwimlaneTimeline-CUPqMd0z.js.map} +1 -1
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js → TagInput-BLtf86Ly.js} +2 -2
- package/dashboard/dist/assets/{TagInput-CH8qMGhC.js.map → TagInput-BLtf86Ly.js.map} +1 -1
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js → TaskDetailPage-BXJFX74D.js} +2 -2
- package/dashboard/dist/assets/{TaskDetailPage-CdWo-6mu.js.map → TaskDetailPage-BXJFX74D.js.map} +1 -1
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js → TaskQueuePill-CWYj3xKe.js} +2 -2
- package/dashboard/dist/assets/{TaskQueuePill-BPj4ogVG.js.map → TaskQueuePill-CWYj3xKe.js.map} +1 -1
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js → TasksListPage-C3cX94Mw.js} +2 -2
- package/dashboard/dist/assets/{TasksListPage-CtRkMpKU.js.map → TasksListPage-C3cX94Mw.js.map} +1 -1
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js → TimeAgo-B_5yDDHV.js} +2 -2
- package/dashboard/dist/assets/{TimeAgo-Di1a3X5P.js.map → TimeAgo-B_5yDDHV.js.map} +1 -1
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js → TimestampCell-DRX724uU.js} +2 -2
- package/dashboard/dist/assets/{TimestampCell-CqrXql-S.js.map → TimestampCell-DRX724uU.js.map} +1 -1
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js → UserName-Ca8FA469.js} +2 -2
- package/dashboard/dist/assets/{UserName-BUFYCnRa.js.map → UserName-Ca8FA469.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js → WorkflowExecutionPage-BBYWEV2P.js} +2 -2
- package/dashboard/dist/assets/{WorkflowExecutionPage-25iusMml.js.map → WorkflowExecutionPage-BBYWEV2P.js.map} +1 -1
- package/dashboard/dist/assets/WorkflowPill-BXifAuLi.js +2 -0
- package/dashboard/dist/assets/{WorkflowPill-DPKOcbf4.js.map → WorkflowPill-BXifAuLi.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js → WorkflowsDashboard-Drl3juz9.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsDashboard-BgxslssH.js.map → WorkflowsDashboard-Drl3juz9.js.map} +1 -1
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js → WorkflowsOverview-03IRrDLg.js} +2 -2
- package/dashboard/dist/assets/{WorkflowsOverview-Doe5L-Re.js.map → WorkflowsOverview-03IRrDLg.js.map} +1 -1
- package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js +2 -0
- package/dashboard/dist/assets/YamlWorkflowsPage-DC2cLxVi.js.map +1 -0
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js → bots-DZEXcgiJ.js} +2 -2
- package/dashboard/dist/assets/{bots-Bi2_O1Ts.js.map → bots-DZEXcgiJ.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js → escalation-Cw48lNaF.js} +2 -2
- package/dashboard/dist/assets/{escalation-Ck1KlLkT.js.map → escalation-Cw48lNaF.js.map} +1 -1
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js → escalation-columns-NINpo3qf.js} +2 -2
- package/dashboard/dist/assets/{escalation-columns-ohDsj2eJ.js.map → escalation-columns-NINpo3qf.js.map} +1 -1
- package/dashboard/dist/assets/helpers-Cuu3xKfr.js +2 -0
- package/dashboard/dist/assets/helpers-Cuu3xKfr.js.map +1 -0
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js → helpers-fk_qr729.js} +2 -2
- package/dashboard/dist/assets/{helpers-BoD2SgUY.js.map → helpers-fk_qr729.js.map} +1 -1
- package/dashboard/dist/assets/index-B98ipWxE.js +2 -0
- package/dashboard/dist/assets/{index-D7zYZOnH.js.map → index-B98ipWxE.js.map} +1 -1
- package/dashboard/dist/assets/{index-BEtLIsML.js → index-BIG3KooI.js} +2 -2
- package/dashboard/dist/assets/{index-BEtLIsML.js.map → index-BIG3KooI.js.map} +1 -1
- package/dashboard/dist/assets/{index-DYyLF-Qb.js → index-BwN3KP_L.js} +5 -5
- package/dashboard/dist/assets/{index-DYyLF-Qb.js.map → index-BwN3KP_L.js.map} +1 -1
- package/dashboard/dist/assets/index-Bxe8h1x4.js +17 -0
- package/dashboard/dist/assets/{index-DOkHXmyf.js.map → index-Bxe8h1x4.js.map} +1 -1
- package/dashboard/dist/assets/{index-FuohTtaM.js → index-CNI7k7oB.js} +3 -3
- package/dashboard/dist/assets/{index-FuohTtaM.js.map → index-CNI7k7oB.js.map} +1 -1
- package/dashboard/dist/assets/{index-CZrJ09p-.js → index-CORHB0WC.js} +2 -2
- package/dashboard/dist/assets/{index-CZrJ09p-.js.map → index-CORHB0WC.js.map} +1 -1
- package/dashboard/dist/assets/{index-PyCTS05D.css → index-DcIKW-cZ.css} +1 -1
- package/dashboard/dist/assets/{index-D3NyVADW.js → index-Dj-z-x8M.js} +2 -2
- package/dashboard/dist/assets/index-Dj-z-x8M.js.map +1 -0
- package/dashboard/dist/assets/{index-Bn2xHDr8.js → index-DwRytW9O.js} +3 -3
- package/dashboard/dist/assets/{index-Bn2xHDr8.js.map → index-DwRytW9O.js.map} +1 -1
- package/dashboard/dist/assets/index-aRvL-dXp.js +2 -0
- package/dashboard/dist/assets/{index-Dk2Q51o0.js.map → index-aRvL-dXp.js.map} +1 -1
- package/dashboard/dist/assets/index-b03HlbnH.js +2 -0
- package/dashboard/dist/assets/{index-BpT-6WgJ.js.map → index-b03HlbnH.js.map} +1 -1
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js → mcp-BZoFryNc.js} +2 -2
- package/dashboard/dist/assets/{mcp-CJtYjA7A.js.map → mcp-BZoFryNc.js.map} +1 -1
- package/dashboard/dist/assets/mcp-query-wiw1kwm8.js +2 -0
- package/dashboard/dist/assets/mcp-query-wiw1kwm8.js.map +1 -0
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js → mcp-runs-BaEKnf5v.js} +2 -2
- package/dashboard/dist/assets/{mcp-runs-DUWm9Z4V.js.map → mcp-runs-BaEKnf5v.js.map} +1 -1
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js → namespaces-BwnZI4_A.js} +2 -2
- package/dashboard/dist/assets/{namespaces-BM5P2qmL.js.map → namespaces-BwnZI4_A.js.map} +1 -1
- package/dashboard/dist/assets/{roles-lv0shpjJ.js → roles-Bgn1K8zU.js} +2 -2
- package/dashboard/dist/assets/{roles-lv0shpjJ.js.map → roles-Bgn1K8zU.js.map} +1 -1
- package/dashboard/dist/assets/{settings-Wlq92mRo.js → settings-CizYiutL.js} +2 -2
- package/dashboard/dist/assets/{settings-Wlq92mRo.js.map → settings-CizYiutL.js.map} +1 -1
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js → tasks-Bmte_hc4.js} +2 -2
- package/dashboard/dist/assets/{tasks-BFGm4PuE.js.map → tasks-Bmte_hc4.js.map} +1 -1
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js → useEventHooks-CUCxpiI2.js} +2 -2
- package/dashboard/dist/assets/{useEventHooks-DIE6ue4x.js.map → useEventHooks-CUCxpiI2.js.map} +1 -1
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js → useYamlActivityEvents-Cum02Ej9.js} +2 -2
- package/dashboard/dist/assets/{useYamlActivityEvents-DCwSO73t.js.map → useYamlActivityEvents-Cum02Ej9.js.map} +1 -1
- package/dashboard/dist/assets/{users-tA5-K0wA.js → users-NSDgTt-z.js} +2 -2
- package/dashboard/dist/assets/{users-tA5-K0wA.js.map → users-NSDgTt-z.js.map} +1 -1
- package/dashboard/dist/assets/{vendor-icons-BiIug1SK.js → vendor-icons-D1DdudfH.js} +93 -73
- package/dashboard/dist/assets/vendor-icons-D1DdudfH.js.map +1 -0
- package/dashboard/dist/assets/{workflows-CfLc15Wr.js → workflows-k0XRdGXx.js} +2 -2
- package/dashboard/dist/assets/{workflows-CfLc15Wr.js.map → workflows-k0XRdGXx.js.map} +1 -1
- package/dashboard/dist/assets/yaml-workflows-DAre8I78.js +2 -0
- package/dashboard/dist/assets/yaml-workflows-DAre8I78.js.map +1 -0
- package/dashboard/dist/index.html +3 -3
- package/docs/epic-integration.md +224 -0
- package/docs/events.md +28 -0
- package/docs/sdk.md +177 -0
- package/docs/story.md +157 -0
- package/docs/workflow-builder.md +371 -0
- package/package.json +3 -2
- package/build/routes/escalations/helpers.d.ts +0 -5
- package/build/routes/resolve.d.ts +0 -9
- package/build/routes/resolve.js +0 -19
- package/build/routes/yaml-workflows/helpers.d.ts +0 -2
- package/build/routes/yaml-workflows/helpers.js +0 -8
- package/dashboard/dist/assets/BotPicker-A6LtzyuO.js +0 -2
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js +0 -5
- package/dashboard/dist/assets/McpQueryDetailPage-DhqEI180.js.map +0 -1
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js +0 -2
- package/dashboard/dist/assets/McpQueryPage-CIiVMlqo.js.map +0 -1
- package/dashboard/dist/assets/OperatorDashboard-jc0vrgDI.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js +0 -2
- package/dashboard/dist/assets/RunAsSelector-CJDnyp93.js.map +0 -1
- package/dashboard/dist/assets/WorkflowPill-DPKOcbf4.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js +0 -2
- package/dashboard/dist/assets/YamlWorkflowsPage-BliAckJ6.js.map +0 -1
- package/dashboard/dist/assets/index-BpT-6WgJ.js +0 -2
- package/dashboard/dist/assets/index-D3NyVADW.js.map +0 -1
- package/dashboard/dist/assets/index-D7zYZOnH.js +0 -2
- package/dashboard/dist/assets/index-DOkHXmyf.js +0 -17
- package/dashboard/dist/assets/index-Dk2Q51o0.js +0 -2
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js +0 -2
- package/dashboard/dist/assets/mcp-query-jQJQrs_7.js.map +0 -1
- package/dashboard/dist/assets/vendor-icons-BiIug1SK.js.map +0 -1
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js +0 -2
- package/dashboard/dist/assets/yaml-workflows-D7JXNqbM.js.map +0 -1
- package/docs/img/01-login.png +0 -0
- package/docs/img/02-dashboard-home.png +0 -0
- package/docs/img/03-processes-list.png +0 -0
- package/docs/img/04-escalations-list.png +0 -0
- package/docs/img/05-mcp-servers.png +0 -0
- package/docs/img/06-mcp-pipelines.png +0 -0
- package/docs/img/07-workflows-list.png +0 -0
- package/docs/img/compilation/01-query-submit.png +0 -0
- package/docs/img/compilation/02-mcp-servers.png +0 -0
- package/docs/img/compilation/03-query-completed.png +0 -0
- package/docs/img/compilation/04-wizard-original.png +0 -0
- package/docs/img/compilation/05-wizard-timeline.png +0 -0
- package/docs/img/compilation/06-wizard-profile.png +0 -0
- package/docs/img/compilation/07-wizard-deploy.png +0 -0
- package/docs/img/compilation/08-wizard-test-modal.png +0 -0
- package/docs/img/compilation/09-wizard-test-compare.png +0 -0
- package/docs/img/compilation/10-wizard-verify.png +0 -0
package/dashboard/dist/assets/{ProcessesListPage-C-uHadO6.js → ProcessesListPage-BDpUbua2.js}
RENAMED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=ProcessesListPage-
|
|
1
|
+
import{j as s}from"./index-BwN3KP_L.js";import{u as N}from"./tasks-Bmte_hc4.js";import{u as h}from"./workflows-k0XRdGXx.js";import{u as P}from"./useEventHooks-CUCxpiI2.js";import{u as x}from"./useFilterParams-BUyLHcx_.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{D as v}from"./DataTable-DKvSKoVG.js";import{T as p}from"./TimestampCell-DRX724uU.js";import{S as w}from"./StickyPagination-Bl2Uzz65.js";import{F as k,a as y,b as m}from"./FilterBar-DMTvuQy-.js";import{P as D}from"./PageHeader-DVr5Qyzm.js";import{L as E}from"./ListToolbar-DTOSxoEy.js";import{W as L}from"./WorkflowPill-BXifAuLi.js";import{c as _}from"./vendor-react-Co3Y8ikm.js";import"./vendor-icons-D1DdudfH.js";import"./EmptyState-X0fIzYID.js";function j(e,a=300){const[i,t]=n.useState(e);return n.useEffect(()=>{const l=setTimeout(()=>t(e),a);return()=>clearTimeout(l)},[e,a]),i}const V=[{value:"active",label:"Active"},{value:"completed",label:"Completed"},{value:"escalated",label:"Escalated"}],S=[{key:"origin_id",label:"Origin",render:e=>s.jsxDEV("span",{className:"font-mono text-xs",title:e.origin_id,children:e.origin_id.length>40?`${e.origin_id.slice(0,40)}…`:e.origin_id},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:26,columnNumber:7},void 0)},{key:"workflow_types",label:"Workflows",render:e=>s.jsxDEV("div",{className:"flex flex-wrap gap-1",children:e.workflow_types.map(a=>s.jsxDEV(L,{type:a},a,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:37,columnNumber:11},void 0))},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:35,columnNumber:7},void 0)},{key:"task_count",label:"Tasks",render:e=>s.jsxDEV("span",{children:e.task_count},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:45,columnNumber:22},void 0),className:"w-20 text-right"},{key:"completed",label:"Completed",render:e=>e.completed>0?s.jsxDEV("span",{className:"text-status-success",children:e.completed},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:53,columnNumber:11},void 0):s.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:54,columnNumber:11},void 0),className:"w-24 text-right"},{key:"escalated",label:"Escalated",render:e=>e.escalated>0?s.jsxDEV("span",{className:"text-status-error",children:e.escalated},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:62,columnNumber:11},void 0):s.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:63,columnNumber:11},void 0),className:"w-24 text-right"},{key:"started_at",label:"Started",render:e=>s.jsxDEV(p,{date:e.started_at},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:69,columnNumber:22},void 0),className:"w-44"},{key:"last_activity",label:"Last Activity",render:e=>s.jsxDEV(p,{date:e.last_activity},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:75,columnNumber:22},void 0),className:"w-44"}];function J(){P();const e=_(),{filters:a,setFilter:i,pagination:t}=x({filters:{workflow_type:"",status:"",search:""}}),l=j(a.search,300),{data:d}=h(),u=[...new Set((d??[]).map(r=>r.workflow_type))].sort(),{data:o,isLoading:f,refetch:g,isFetching:b}=N({workflow_type:a.workflow_type||void 0,status:a.status||void 0,search:l||void 0,limit:t.pageSize,offset:t.offset}),c=(o==null?void 0:o.total)??0;return s.jsxDEV("div",{children:[s.jsxDEV(D,{title:"All Processes"},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:104,columnNumber:7},this),s.jsxDEV(k,{actions:s.jsxDEV(E,{onRefresh:()=>g(),isFetching:b,apiPath:`/tasks/processes?limit=${t.pageSize}&offset=${t.offset}${a.workflow_type?`&workflow_type=${a.workflow_type}`:""}${a.status?`&status=${a.status}`:""}${l?`&search=${l}`:""}`},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:107,columnNumber:9},this),children:[s.jsxDEV(y,{label:"Search",value:a.search,onChange:r=>i("search",r),placeholder:"origin, workflow, or trace ID"},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:113,columnNumber:9},this),s.jsxDEV(m,{label:"Status",value:a.status,onChange:r=>i("status",r),options:V},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:119,columnNumber:9},this),s.jsxDEV(m,{label:"Workflow Type",value:a.workflow_type,onChange:r=>i("workflow_type",r),options:u.map(r=>({value:r,label:r}))},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:125,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:106,columnNumber:7},this),s.jsxDEV(v,{columns:S,data:(o==null?void 0:o.processes)??[],keyFn:r=>r.origin_id,onRowClick:r=>e(`/processes/detail/${encodeURIComponent(r.origin_id)}`),isLoading:f,emptyMessage:"No business processes found"},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:133,columnNumber:7},this),s.jsxDEV(w,{page:t.page,totalPages:t.totalPages(c),onPageChange:t.setPage,total:c,pageSize:t.pageSize,onPageSizeChange:t.setPageSize},void 0,!1,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:142,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/processes/ProcessesListPage.tsx",lineNumber:103,columnNumber:5},this)}export{J as ProcessesListPage};
|
|
2
|
+
//# sourceMappingURL=ProcessesListPage-BDpUbua2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProcessesListPage-C-uHadO6.js","sources":["../../src/hooks/useDebouncedValue.ts","../../src/pages/processes/ProcessesListPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Returns a debounced copy of `value` that only updates\n * after `delay` ms of inactivity.\n */\nexport function useDebouncedValue<T>(value: T, delay = 300): T {\n const [debounced, setDebounced] = useState(value);\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n return debounced;\n}\n","import { useNavigate } from 'react-router-dom';\nimport { useProcesses, type ProcessSummary } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useProcessListEvents } from '../../hooks/useEventHooks';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useDebouncedValue } from '../../hooks/useDebouncedValue';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\n\nconst STATUS_OPTIONS = [\n { value: 'active', label: 'Active' },\n { value: 'completed', label: 'Completed' },\n { value: 'escalated', label: 'Escalated' },\n];\n\nconst columns: Column<ProcessSummary>[] = [\n {\n key: 'origin_id',\n label: 'Origin',\n render: (row) => (\n <span className=\"font-mono text-xs\" title={row.origin_id}>\n {row.origin_id.length > 40 ? `${row.origin_id.slice(0, 40)}…` : row.origin_id}\n </span>\n ),\n },\n {\n key: 'workflow_types',\n label: 'Workflows',\n render: (row) => (\n <div className=\"flex flex-wrap gap-1\">\n {row.workflow_types.map((wt) => (\n <WorkflowPill key={wt} type={wt} />\n ))}\n </div>\n ),\n },\n {\n key: 'task_count',\n label: 'Tasks',\n render: (row) => <span>{row.task_count}</span>,\n className: 'w-20 text-right',\n },\n {\n key: 'completed',\n label: 'Completed',\n render: (row) =>\n row.completed > 0\n ? <span className=\"text-status-success\">{row.completed}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'escalated',\n label: 'Escalated',\n render: (row) =>\n row.escalated > 0\n ? <span className=\"text-status-error\">{row.escalated}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimestampCell date={row.started_at} />,\n className: 'w-44',\n },\n {\n key: 'last_activity',\n label: 'Last Activity',\n render: (row) => <TimestampCell date={row.last_activity} />,\n className: 'w-44',\n },\n];\n\nexport function ProcessesListPage() {\n useProcessListEvents();\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { workflow_type: '', status: '', search: '' },\n });\n\n const debouncedSearch = useDebouncedValue(filters.search, 300);\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading, refetch, isFetching } = useProcesses({\n workflow_type: filters.workflow_type || undefined,\n status: filters.status || undefined,\n search: debouncedSearch || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"All Processes\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/tasks/processes?limit=${pagination.pageSize}&offset=${pagination.offset}${filters.workflow_type ? `&workflow_type=${filters.workflow_type}` : ''}${filters.status ? `&status=${filters.status}` : ''}${debouncedSearch ? `&search=${debouncedSearch}` : ''}`}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"origin, workflow, or trace ID\"\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.processes ?? []}\n keyFn={(row) => row.origin_id}\n onRowClick={(row) => navigate(`/processes/detail/${encodeURIComponent(row.origin_id)}`)}\n isLoading={isLoading}\n emptyMessage=\"No business processes found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["useDebouncedValue","value","delay","debounced","setDebounced","useState","useEffect","timer","STATUS_OPTIONS","columns","row","jsxDEV","this","wt","WorkflowPill","TimestampCell","ProcessesListPage","useProcessListEvents","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","debouncedSearch","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","refetch","isFetching","useProcesses","total","PageHeader","FilterBar","ListToolbar","FilterInput","v","FilterSelect","t","DataTable","StickyPagination"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProcessesListPage-BDpUbua2.js","sources":["../../src/hooks/useDebouncedValue.ts","../../src/pages/processes/ProcessesListPage.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Returns a debounced copy of `value` that only updates\n * after `delay` ms of inactivity.\n */\nexport function useDebouncedValue<T>(value: T, delay = 300): T {\n const [debounced, setDebounced] = useState(value);\n useEffect(() => {\n const timer = setTimeout(() => setDebounced(value), delay);\n return () => clearTimeout(timer);\n }, [value, delay]);\n return debounced;\n}\n","import { useNavigate } from 'react-router-dom';\nimport { useProcesses, type ProcessSummary } from '../../api/tasks';\nimport { useWorkflowConfigs } from '../../api/workflows';\nimport { useProcessListEvents } from '../../hooks/useEventHooks';\nimport { useFilterParams } from '../../hooks/useFilterParams';\nimport { useDebouncedValue } from '../../hooks/useDebouncedValue';\nimport { DataTable, type Column } from '../../components/common/data/DataTable';\nimport { TimestampCell } from '../../components/common/display/TimestampCell';\nimport { StickyPagination } from '../../components/common/data/StickyPagination';\nimport { FilterBar, FilterSelect, FilterInput } from '../../components/common/data/FilterBar';\nimport { PageHeader } from '../../components/common/layout/PageHeader';\nimport { ListToolbar } from '../../components/common/data/ListToolbar';\nimport { WorkflowPill } from '../../components/common/display/WorkflowPill';\n\nconst STATUS_OPTIONS = [\n { value: 'active', label: 'Active' },\n { value: 'completed', label: 'Completed' },\n { value: 'escalated', label: 'Escalated' },\n];\n\nconst columns: Column<ProcessSummary>[] = [\n {\n key: 'origin_id',\n label: 'Origin',\n render: (row) => (\n <span className=\"font-mono text-xs\" title={row.origin_id}>\n {row.origin_id.length > 40 ? `${row.origin_id.slice(0, 40)}…` : row.origin_id}\n </span>\n ),\n },\n {\n key: 'workflow_types',\n label: 'Workflows',\n render: (row) => (\n <div className=\"flex flex-wrap gap-1\">\n {row.workflow_types.map((wt) => (\n <WorkflowPill key={wt} type={wt} />\n ))}\n </div>\n ),\n },\n {\n key: 'task_count',\n label: 'Tasks',\n render: (row) => <span>{row.task_count}</span>,\n className: 'w-20 text-right',\n },\n {\n key: 'completed',\n label: 'Completed',\n render: (row) =>\n row.completed > 0\n ? <span className=\"text-status-success\">{row.completed}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'escalated',\n label: 'Escalated',\n render: (row) =>\n row.escalated > 0\n ? <span className=\"text-status-error\">{row.escalated}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'started_at',\n label: 'Started',\n render: (row) => <TimestampCell date={row.started_at} />,\n className: 'w-44',\n },\n {\n key: 'last_activity',\n label: 'Last Activity',\n render: (row) => <TimestampCell date={row.last_activity} />,\n className: 'w-44',\n },\n];\n\nexport function ProcessesListPage() {\n useProcessListEvents();\n const navigate = useNavigate();\n const { filters, setFilter, pagination } = useFilterParams({\n filters: { workflow_type: '', status: '', search: '' },\n });\n\n const debouncedSearch = useDebouncedValue(filters.search, 300);\n\n const { data: configs } = useWorkflowConfigs();\n const workflowTypes = [...new Set((configs ?? []).map((c) => c.workflow_type))].sort();\n\n const { data, isLoading, refetch, isFetching } = useProcesses({\n workflow_type: filters.workflow_type || undefined,\n status: filters.status || undefined,\n search: debouncedSearch || undefined,\n limit: pagination.pageSize,\n offset: pagination.offset,\n });\n\n const total = data?.total ?? 0;\n\n return (\n <div>\n <PageHeader title=\"All Processes\" />\n\n <FilterBar actions={\n <ListToolbar\n onRefresh={() => refetch()}\n isFetching={isFetching}\n apiPath={`/tasks/processes?limit=${pagination.pageSize}&offset=${pagination.offset}${filters.workflow_type ? `&workflow_type=${filters.workflow_type}` : ''}${filters.status ? `&status=${filters.status}` : ''}${debouncedSearch ? `&search=${debouncedSearch}` : ''}`}\n />\n }>\n <FilterInput\n label=\"Search\"\n value={filters.search}\n onChange={(v) => setFilter('search', v)}\n placeholder=\"origin, workflow, or trace ID\"\n />\n <FilterSelect\n label=\"Status\"\n value={filters.status}\n onChange={(v) => setFilter('status', v)}\n options={STATUS_OPTIONS}\n />\n <FilterSelect\n label=\"Workflow Type\"\n value={filters.workflow_type}\n onChange={(v) => setFilter('workflow_type', v)}\n options={workflowTypes.map((t) => ({ value: t, label: t }))}\n />\n </FilterBar>\n\n <DataTable\n columns={columns}\n data={data?.processes ?? []}\n keyFn={(row) => row.origin_id}\n onRowClick={(row) => navigate(`/processes/detail/${encodeURIComponent(row.origin_id)}`)}\n isLoading={isLoading}\n emptyMessage=\"No business processes found\"\n />\n\n <StickyPagination\n page={pagination.page}\n totalPages={pagination.totalPages(total)}\n onPageChange={pagination.setPage}\n total={total}\n pageSize={pagination.pageSize}\n onPageSizeChange={pagination.setPageSize}\n />\n </div>\n );\n}\n"],"names":["useDebouncedValue","value","delay","debounced","setDebounced","useState","useEffect","timer","STATUS_OPTIONS","columns","row","jsxDEV","this","wt","WorkflowPill","TimestampCell","ProcessesListPage","useProcessListEvents","navigate","useNavigate","filters","setFilter","pagination","useFilterParams","debouncedSearch","configs","useWorkflowConfigs","workflowTypes","c","data","isLoading","refetch","isFetching","useProcesses","total","PageHeader","FilterBar","ListToolbar","FilterInput","v","FilterSelect","t","DataTable","StickyPagination"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=RolePill-
|
|
1
|
+
import{j as s}from"./index-BwN3KP_L.js";import{U as a}from"./vendor-icons-D1DdudfH.js";function i({role:t,size:e="sm"}){const o=e==="md"?"px-2.5 py-0.5 text-[11px] gap-1.5":"px-2 py-0.5 text-[10px] gap-1",n=e==="md"?"w-3 h-3":"w-2.5 h-2.5";return s.jsxDEV("span",{className:`inline-flex items-center ${o} bg-accent/[0.06] text-text-secondary rounded-lg`,children:[s.jsxDEV(a,{className:`${n} shrink-0 text-accent/75`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/RolePill.tsx",lineNumber:16,columnNumber:7},this),t]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/RolePill.tsx",lineNumber:15,columnNumber:5},this)}export{i as R};
|
|
2
|
+
//# sourceMappingURL=RolePill-CcAqEaSt.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RolePill-
|
|
1
|
+
{"version":3,"file":"RolePill-CcAqEaSt.js","sources":["../../src/components/common/display/RolePill.tsx"],"sourcesContent":["import { User } from 'lucide-react';\n\ninterface RolePillProps {\n role: string;\n size?: 'sm' | 'md';\n}\n\nexport function RolePill({ role, size = 'sm' }: RolePillProps) {\n const sizeClass = size === 'md'\n ? 'px-2.5 py-0.5 text-[11px] gap-1.5'\n : 'px-2 py-0.5 text-[10px] gap-1';\n const iconClass = size === 'md' ? 'w-3 h-3' : 'w-2.5 h-2.5';\n\n return (\n <span className={`inline-flex items-center ${sizeClass} bg-accent/[0.06] text-text-secondary rounded-lg`}>\n <User className={`${iconClass} shrink-0 text-accent/75`} />\n {role}\n </span>\n );\n}\n"],"names":["RolePill","role","size","sizeClass","iconClass","jsxDEV","User"],"mappings":"uFAOO,SAASA,EAAS,CAAE,KAAAC,EAAM,KAAAC,EAAO,MAAuB,CAC7D,MAAMC,EAAYD,IAAS,KACvB,oCACA,gCACEE,EAAYF,IAAS,KAAO,UAAY,cAE9C,OACEG,EAAAA,OAAC,OAAA,CAAK,UAAW,4BAA4BF,CAAS,mDACpD,SAAA,CAAAE,SAACC,EAAA,CAAK,UAAW,GAAGF,CAAS,0BAAA,EAA7B,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAyD,EACxDH,CAAA,CAAA,EAFH,OAAA,GAAA,CAAA,SAAA,4DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-DYyLF-Qb.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{b,c as h,d as f,e as g,f as E,g as v}from"./roles-lv0shpjJ.js";import{D}from"./DataTable-CM5ZcpPi.js";import{C as j}from"./ConfirmDeleteModal-CWFwJrSl.js";import{P as V}from"./PageHeader-NkOeBR05.js";import{M as C}from"./Modal-kB_P7ZOr.js";import{R}from"./RolePill-C1dgC-fK.js";import{R as P,a as y}from"./RowActions-lYaHGI-v.js";import{j as k}from"./vendor-icons-BiIug1SK.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-BBn78pmm.js";function w({open:s,onClose:r}){const l=b(),[i,c]=n.useState(""),[t,m]=n.useState(s);s!==t&&(m(s),s&&(c(""),l.reset()));const d=()=>{const o=i.trim().toLowerCase();o&&l.mutate(o,{onSuccess:r})};return e.jsxDEV(C,{open:s,onClose:r,title:"Create Role",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Role Name (required)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:34,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i,onChange:o=>c(o.target.value),placeholder:"e.g., reviewer",className:"input text-xs w-full",onKeyDown:o=>{o.key==="Enter"&&d()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:37,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Lowercase letters, numbers, hyphens, and underscores only."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:33,columnNumber:9},this),l.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:l.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:53,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:r,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:57,columnNumber:11},this),e.jsxDEV("button",{onClick:d,disabled:!i.trim()||l.isPending,className:"btn-primary text-xs",children:l.isPending?"Creating...":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:56,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:32,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:31,columnNumber:5},this)}function _({selectedRole:s,allRoles:r}){const{data:l}=h(),i=f(),c=g(),[t,m]=n.useState(""),d=(l==null?void 0:l.chains)??[],o=n.useMemo(()=>s?d.filter(a=>a.source_role===s).map(a=>a.target_role):[],[d,s]),u=n.useMemo(()=>s?r.filter(a=>a!==s&&a!=="superadmin"&&!o.includes(a)):[],[r,s,o]),p=()=>{!s||!t.trim()||i.mutate({source_role:s,target_role:t.trim()},{onSuccess:()=>m("")})},N=a=>{s&&c.mutate({source_role:s,target_role:a})},x=s==="superadmin";return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 min-h-[300px]",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Escalation Routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:49,columnNumber:7},this),s?x?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary mb-2",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:59,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Superadmins can escalate to any role implicitly."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:58,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:67,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"Can escalate to:"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:68,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:66,columnNumber:11},this),o.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"No escalation targets configured."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:72,columnNumber:13},this):e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:o.map(a=>e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono",children:[a,e.jsxDEV("button",{onClick:()=>N(a),className:"text-text-tertiary hover:text-status-error transition-colors",title:`Remove ${a}`,children:"×"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:83,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:78,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:76,columnNumber:13},this),u.length>0&&e.jsxDEV("div",{className:"pt-3 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Add Target"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:97,columnNumber:15},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("select",{value:t,onChange:a=>m(a.target.value),className:"select text-xs font-mono flex-1",children:[e.jsxDEV("option",{value:"",children:"Select a role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:106,columnNumber:19},this),u.map(a=>e.jsxDEV("option",{value:a,children:a},a,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:108,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:101,columnNumber:17},this),e.jsxDEV("button",{onClick:p,disabled:!t||i.isPending,className:"btn-primary text-xs",children:i.isPending?"Adding...":"Add"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:111,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:100,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:96,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:65,columnNumber:9},this):e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Select a role to manage its escalation targets."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:48,columnNumber:5},this)}function M(s){return[{key:"role",label:"Role",render:r=>e.jsxDEV(R,{role:r.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:14,columnNumber:24},this)},{key:"user_count",label:"Users",render:r=>r.user_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.user_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:21,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:22,columnNumber:13},this),className:"w-24 text-right"},{key:"chain_count",label:"Escalations",render:r=>r.chain_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.chain_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:30,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:31,columnNumber:13},this),className:"w-28 text-right"},{key:"workflow_count",label:"Workflows",render:r=>r.workflow_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.workflow_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:39,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:40,columnNumber:13},this),className:"w-28 text-right"},{key:"actions",label:"",render:r=>r.user_count>0||r.chain_count>0||r.workflow_count>0?null:e.jsxDEV(P,{children:e.jsxDEV(y,{icon:k,title:"Delete role",onClick:()=>s(r),colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:51,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:50,columnNumber:11},this),className:"w-16 text-right"}]}function $(){const{data:s,isLoading:r}=E(),l=v(),[i,c]=n.useState(!1),[t,m]=n.useState(null),[d,o]=n.useState(null),u=(s==null?void 0:s.roles)??[],p=n.useMemo(()=>u.map(a=>a.role),[u]),N=M(a=>m(a)),x=()=>{t&&l.mutate(t.role,{onSuccess:()=>m(null)})};return e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"Roles",actions:e.jsxDEV("button",{onClick:()=>c(!0),className:"btn-primary text-xs",children:"Add Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:35,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:32,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6",children:[e.jsxDEV("div",{children:e.jsxDEV(D,{columns:N,data:u,keyFn:a=>a.role,isLoading:r,emptyMessage:"No roles found",onRowClick:a=>o(a.role),activeRowKey:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:43,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:42,columnNumber:9},this),e.jsxDEV(_,{selectedRole:d,allRoles:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV(w,{open:i,onClose:()=>c(!1)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:57,columnNumber:7},this),e.jsxDEV(j,{open:!!t,onClose:()=>m(null),onConfirm:x,title:"Delete Role",description:e.jsxDEV(e.Fragment,{children:["Delete role"," ",e.jsxDEV("span",{className:"font-medium font-mono text-text-primary",children:t==null?void 0:t.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:67,columnNumber:13},this),"? This action cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:65,columnNumber:11},this),isPending:l.isPending,error:l.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:59,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:31,columnNumber:5},this)}export{$ as RolesPage};
|
|
2
|
-
//# sourceMappingURL=RolesPage-
|
|
1
|
+
import{j as e}from"./index-BwN3KP_L.js";import{a as n}from"./vendor-query-DLp59M9_.js";import{b,c as h,d as f,e as g,f as E,g as v}from"./roles-Bgn1K8zU.js";import{D}from"./DataTable-DKvSKoVG.js";import{C as j}from"./ConfirmDeleteModal-B7JoDNvt.js";import{P as V}from"./PageHeader-DVr5Qyzm.js";import{M as C}from"./Modal-_2AbWxJT.js";import{R}from"./RolePill-CcAqEaSt.js";import{R as P,a as y}from"./RowActions-B4mqIt3Z.js";import{j as k}from"./vendor-icons-D1DdudfH.js";import"./vendor-react-Co3Y8ikm.js";import"./EmptyState-X0fIzYID.js";function w({open:s,onClose:r}){const l=b(),[i,c]=n.useState(""),[t,m]=n.useState(s);s!==t&&(m(s),s&&(c(""),l.reset()));const d=()=>{const o=i.trim().toLowerCase();o&&l.mutate(o,{onSuccess:r})};return e.jsxDEV(C,{open:s,onClose:r,title:"Create Role",children:e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("label",{className:"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1",children:"Role Name (required)"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:34,columnNumber:11},this),e.jsxDEV("input",{type:"text",value:i,onChange:o=>c(o.target.value),placeholder:"e.g., reviewer",className:"input text-xs w-full",onKeyDown:o=>{o.key==="Enter"&&d()}},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:37,columnNumber:11},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-1",children:"Lowercase letters, numbers, hyphens, and underscores only."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:47,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:33,columnNumber:9},this),l.error&&e.jsxDEV("p",{className:"text-xs text-status-error",children:l.error.message},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:53,columnNumber:11},this),e.jsxDEV("div",{className:"flex justify-end gap-3 pt-2",children:[e.jsxDEV("button",{onClick:r,className:"btn-secondary text-xs",children:"Cancel"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:57,columnNumber:11},this),e.jsxDEV("button",{onClick:d,disabled:!i.trim()||l.isPending,className:"btn-primary text-xs",children:l.isPending?"Creating...":"Create"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:56,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:32,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/CreateRoleModal.tsx",lineNumber:31,columnNumber:5},this)}function _({selectedRole:s,allRoles:r}){const{data:l}=h(),i=f(),c=g(),[t,m]=n.useState(""),d=(l==null?void 0:l.chains)??[],o=n.useMemo(()=>s?d.filter(a=>a.source_role===s).map(a=>a.target_role):[],[d,s]),u=n.useMemo(()=>s?r.filter(a=>a!==s&&a!=="superadmin"&&!o.includes(a)):[],[r,s,o]),p=()=>{!s||!t.trim()||i.mutate({source_role:s,target_role:t.trim()},{onSuccess:()=>m("")})},N=a=>{s&&c.mutate({source_role:s,target_role:a})},x=s==="superadmin";return e.jsxDEV("div",{className:"border-l border-surface-border pl-6 min-h-[300px]",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4",children:"Escalation Routing"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:49,columnNumber:7},this),s?x?e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary mb-2",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:59,columnNumber:11},this),e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Superadmins can escalate to any role implicitly."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:60,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:58,columnNumber:9},this):e.jsxDEV("div",{className:"space-y-4",children:[e.jsxDEV("div",{children:[e.jsxDEV("p",{className:"text-sm font-mono text-text-primary",children:s},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:67,columnNumber:13},this),e.jsxDEV("p",{className:"text-[10px] text-text-tertiary mt-0.5",children:"Can escalate to:"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:68,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:66,columnNumber:11},this),o.length===0?e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"No escalation targets configured."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:72,columnNumber:13},this):e.jsxDEV("div",{className:"flex flex-wrap gap-2",children:o.map(a=>e.jsxDEV("span",{className:"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono",children:[a,e.jsxDEV("button",{onClick:()=>N(a),className:"text-text-tertiary hover:text-status-error transition-colors",title:`Remove ${a}`,children:"×"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:83,columnNumber:19},this)]},a,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:78,columnNumber:17},this))},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:76,columnNumber:13},this),u.length>0&&e.jsxDEV("div",{className:"pt-3 border-t border-surface-border",children:[e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2",children:"Add Target"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:97,columnNumber:15},this),e.jsxDEV("div",{className:"flex items-center gap-2",children:[e.jsxDEV("select",{value:t,onChange:a=>m(a.target.value),className:"select text-xs font-mono flex-1",children:[e.jsxDEV("option",{value:"",children:"Select a role..."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:106,columnNumber:19},this),u.map(a=>e.jsxDEV("option",{value:a,children:a},a,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:108,columnNumber:21},this))]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:101,columnNumber:17},this),e.jsxDEV("button",{onClick:p,disabled:!t||i.isPending,className:"btn-primary text-xs",children:i.isPending?"Adding...":"Add"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:111,columnNumber:17},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:100,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:96,columnNumber:13},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:65,columnNumber:9},this):e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:"Select a role to manage its escalation targets."},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/EscalationPanel.tsx",lineNumber:48,columnNumber:5},this)}function M(s){return[{key:"role",label:"Role",render:r=>e.jsxDEV(R,{role:r.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:14,columnNumber:24},this)},{key:"user_count",label:"Users",render:r=>r.user_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.user_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:21,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:22,columnNumber:13},this),className:"w-24 text-right"},{key:"chain_count",label:"Escalations",render:r=>r.chain_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.chain_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:30,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:31,columnNumber:13},this),className:"w-28 text-right"},{key:"workflow_count",label:"Workflows",render:r=>r.workflow_count>0?e.jsxDEV("span",{className:"text-text-primary",children:r.workflow_count},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:39,columnNumber:13},this):e.jsxDEV("span",{className:"text-text-tertiary",children:"0"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:40,columnNumber:13},this),className:"w-28 text-right"},{key:"actions",label:"",render:r=>r.user_count>0||r.chain_count>0||r.workflow_count>0?null:e.jsxDEV(P,{children:e.jsxDEV(y,{icon:k,title:"Delete role",onClick:()=>s(r),colorClass:"text-text-tertiary hover:text-status-error"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:51,columnNumber:13},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RoleColumns.tsx",lineNumber:50,columnNumber:11},this),className:"w-16 text-right"}]}function $(){const{data:s,isLoading:r}=E(),l=v(),[i,c]=n.useState(!1),[t,m]=n.useState(null),[d,o]=n.useState(null),u=(s==null?void 0:s.roles)??[],p=n.useMemo(()=>u.map(a=>a.role),[u]),N=M(a=>m(a)),x=()=>{t&&l.mutate(t.role,{onSuccess:()=>m(null)})};return e.jsxDEV("div",{children:[e.jsxDEV(V,{title:"Roles",actions:e.jsxDEV("button",{onClick:()=>c(!0),className:"btn-primary text-xs",children:"Add Role"},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:35,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:32,columnNumber:7},this),e.jsxDEV("div",{className:"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6",children:[e.jsxDEV("div",{children:e.jsxDEV(D,{columns:N,data:u,keyFn:a=>a.role,isLoading:r,emptyMessage:"No roles found",onRowClick:a=>o(a.role),activeRowKey:d},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:43,columnNumber:11},this)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:42,columnNumber:9},this),e.jsxDEV(_,{selectedRole:d,allRoles:p},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:54,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:41,columnNumber:7},this),e.jsxDEV(w,{open:i,onClose:()=>c(!1)},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:57,columnNumber:7},this),e.jsxDEV(j,{open:!!t,onClose:()=>m(null),onConfirm:x,title:"Delete Role",description:e.jsxDEV(e.Fragment,{children:["Delete role"," ",e.jsxDEV("span",{className:"font-medium font-mono text-text-primary",children:t==null?void 0:t.role},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:67,columnNumber:13},this),"? This action cannot be undone."]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:65,columnNumber:11},this),isPending:l.isPending,error:l.error},void 0,!1,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:59,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/pages/admin/roles/RolesPage.tsx",lineNumber:31,columnNumber:5},this)}export{$ as RolesPage};
|
|
2
|
+
//# sourceMappingURL=RolesPage-Cl23Hjet.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RolesPage-BSxrD1vm.js","sources":["../../src/pages/admin/roles/CreateRoleModal.tsx","../../src/pages/admin/roles/EscalationPanel.tsx","../../src/pages/admin/roles/RoleColumns.tsx","../../src/pages/admin/roles/RolesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateRole } from '../../../api/roles';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateRoleModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createRole = useCreateRole();\n const [roleName, setRoleName] = useState('');\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) {\n setRoleName('');\n createRole.reset();\n }\n }\n\n const handleCreate = () => {\n const trimmed = roleName.trim().toLowerCase();\n if (!trimmed) return;\n createRole.mutate(trimmed, { onSuccess: onClose });\n };\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Role\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Role Name (required)\n </label>\n <input\n type=\"text\"\n value={roleName}\n onChange={(e) => setRoleName(e.target.value)}\n placeholder=\"e.g., reviewer\"\n className=\"input text-xs w-full\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n }}\n />\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n Lowercase letters, numbers, hyphens, and underscores only.\n </p>\n </div>\n\n {createRole.error && (\n <p className=\"text-xs text-status-error\">{(createRole.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!roleName.trim() || createRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {createRole.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport {\n useEscalationChains,\n useAddEscalationChain,\n useRemoveEscalationChain,\n} from '../../../api/roles';\n\nexport function EscalationPanel({\n selectedRole,\n allRoles,\n}: {\n selectedRole: string | null;\n allRoles: string[];\n}) {\n const { data: chainsData } = useEscalationChains();\n const addChain = useAddEscalationChain();\n const removeChain = useRemoveEscalationChain();\n const [newTarget, setNewTarget] = useState('');\n\n const chains = chainsData?.chains ?? [];\n\n const targets = useMemo(() => {\n if (!selectedRole) return [];\n return chains.filter((c) => c.source_role === selectedRole).map((c) => c.target_role);\n }, [chains, selectedRole]);\n\n const available = useMemo(() => {\n if (!selectedRole) return [];\n return allRoles.filter((r) => r !== selectedRole && r !== 'superadmin' && !targets.includes(r));\n }, [allRoles, selectedRole, targets]);\n\n const handleAdd = () => {\n if (!selectedRole || !newTarget.trim()) return;\n addChain.mutate(\n { source_role: selectedRole, target_role: newTarget.trim() },\n { onSuccess: () => setNewTarget('') },\n );\n };\n\n const handleRemove = (target: string) => {\n if (!selectedRole) return;\n removeChain.mutate({ source_role: selectedRole, target_role: target });\n };\n\n const isSuperAdmin = selectedRole === 'superadmin';\n\n return (\n <div className=\"border-l border-surface-border pl-6 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Escalation Routing\n </p>\n\n {!selectedRole ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a role to manage its escalation targets.\n </p>\n ) : isSuperAdmin ? (\n <div>\n <p className=\"text-sm font-mono text-text-primary mb-2\">{selectedRole}</p>\n <p className=\"text-xs text-text-tertiary\">\n Superadmins can escalate to any role implicitly.\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-mono text-text-primary\">{selectedRole}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Can escalate to:</p>\n </div>\n\n {targets.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">\n No escalation targets configured.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {targets.map((target) => (\n <span\n key={target}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono\"\n >\n {target}\n <button\n onClick={() => handleRemove(target)}\n className=\"text-text-tertiary hover:text-status-error transition-colors\"\n title={`Remove ${target}`}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Target\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newTarget}\n onChange={(e) => setNewTarget(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <button\n onClick={handleAdd}\n disabled={!newTarget || addChain.isPending}\n className=\"btn-primary text-xs\"\n >\n {addChain.isPending ? 'Adding...' : 'Add'}\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { Trash2 } from 'lucide-react';\nimport { type RoleDetail } from '../../../api/roles';\nimport { type Column } from '../../../components/common/data/DataTable';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\n\nexport function getRoleColumns(\n onDelete: (row: RoleDetail) => void,\n): Column<RoleDetail>[] {\n return [\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n },\n {\n key: 'user_count',\n label: 'Users',\n render: (row) =>\n row.user_count > 0\n ? <span className=\"text-text-primary\">{row.user_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'chain_count',\n label: 'Escalations',\n render: (row) =>\n row.chain_count > 0\n ? <span className=\"text-text-primary\">{row.chain_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'workflow_count',\n label: 'Workflows',\n render: (row) =>\n row.workflow_count > 0\n ? <span className=\"text-text-primary\">{row.workflow_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => {\n const inUse = row.user_count > 0 || row.chain_count > 0 || row.workflow_count > 0;\n if (inUse) return null;\n return (\n <RowActionGroup>\n <RowAction\n icon={Trash2}\n title=\"Delete role\"\n onClick={() => onDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n );\n },\n className: 'w-16 text-right',\n },\n ];\n}\n","import { useState, useMemo } from 'react';\nimport { useRoleDetails, useDeleteRole, type RoleDetail } from '../../../api/roles';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { CreateRoleModal } from './CreateRoleModal';\nimport { EscalationPanel } from './EscalationPanel';\nimport { getRoleColumns } from './RoleColumns';\n\nexport function RolesPage() {\n const { data, isLoading } = useRoleDetails();\n const deleteRole = useDeleteRole();\n\n const [showCreate, setShowCreate] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState<RoleDetail | null>(null);\n const [selectedRole, setSelectedRole] = useState<string | null>(null);\n\n const roles = data?.roles ?? [];\n const allRoleNames = useMemo(() => roles.map((r) => r.role), [roles]);\n\n const columns = getRoleColumns((row) => setConfirmDelete(row));\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteRole.mutate(confirmDelete.role, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Roles\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Role\n </button>\n }\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n <div>\n <DataTable\n columns={columns}\n data={roles}\n keyFn={(row) => row.role}\n isLoading={isLoading}\n emptyMessage=\"No roles found\"\n onRowClick={(row) => setSelectedRole(row.role)}\n activeRowKey={selectedRole}\n />\n </div>\n\n <EscalationPanel selectedRole={selectedRole} allRoles={allRoleNames} />\n </div>\n\n <CreateRoleModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Role\"\n description={\n <>\n Delete role{' '}\n <span className=\"font-medium font-mono text-text-primary\">\n {confirmDelete?.role}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteRole.isPending}\n error={deleteRole.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateRoleModal","open","onClose","createRole","useCreateRole","roleName","setRoleName","useState","prevOpen","setPrevOpen","handleCreate","trimmed","jsxDEV","Modal","e","EscalationPanel","selectedRole","allRoles","chainsData","useEscalationChains","addChain","useAddEscalationChain","removeChain","useRemoveEscalationChain","newTarget","setNewTarget","chains","targets","useMemo","c","available","r","handleAdd","handleRemove","target","isSuperAdmin","getRoleColumns","onDelete","row","RolePill","RowActionGroup","RowAction","Trash2","RolesPage","data","isLoading","useRoleDetails","deleteRole","useDeleteRole","showCreate","setShowCreate","confirmDelete","setConfirmDelete","setSelectedRole","roles","allRoleNames","columns","handleDelete","PageHeader","DataTable","ConfirmDeleteModal","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RolesPage-Cl23Hjet.js","sources":["../../src/pages/admin/roles/CreateRoleModal.tsx","../../src/pages/admin/roles/EscalationPanel.tsx","../../src/pages/admin/roles/RoleColumns.tsx","../../src/pages/admin/roles/RolesPage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { useCreateRole } from '../../../api/roles';\nimport { Modal } from '../../../components/common/modal/Modal';\n\nexport function CreateRoleModal({\n open,\n onClose,\n}: {\n open: boolean;\n onClose: () => void;\n}) {\n const createRole = useCreateRole();\n const [roleName, setRoleName] = useState('');\n\n const [prevOpen, setPrevOpen] = useState(open);\n if (open !== prevOpen) {\n setPrevOpen(open);\n if (open) {\n setRoleName('');\n createRole.reset();\n }\n }\n\n const handleCreate = () => {\n const trimmed = roleName.trim().toLowerCase();\n if (!trimmed) return;\n createRole.mutate(trimmed, { onSuccess: onClose });\n };\n\n return (\n <Modal open={open} onClose={onClose} title=\"Create Role\">\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-1\">\n Role Name (required)\n </label>\n <input\n type=\"text\"\n value={roleName}\n onChange={(e) => setRoleName(e.target.value)}\n placeholder=\"e.g., reviewer\"\n className=\"input text-xs w-full\"\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleCreate();\n }}\n />\n <p className=\"text-[10px] text-text-tertiary mt-1\">\n Lowercase letters, numbers, hyphens, and underscores only.\n </p>\n </div>\n\n {createRole.error && (\n <p className=\"text-xs text-status-error\">{(createRole.error as Error).message}</p>\n )}\n\n <div className=\"flex justify-end gap-3 pt-2\">\n <button onClick={onClose} className=\"btn-secondary text-xs\">\n Cancel\n </button>\n <button\n onClick={handleCreate}\n disabled={!roleName.trim() || createRole.isPending}\n className=\"btn-primary text-xs\"\n >\n {createRole.isPending ? 'Creating...' : 'Create'}\n </button>\n </div>\n </div>\n </Modal>\n );\n}\n","import { useState, useMemo } from 'react';\nimport {\n useEscalationChains,\n useAddEscalationChain,\n useRemoveEscalationChain,\n} from '../../../api/roles';\n\nexport function EscalationPanel({\n selectedRole,\n allRoles,\n}: {\n selectedRole: string | null;\n allRoles: string[];\n}) {\n const { data: chainsData } = useEscalationChains();\n const addChain = useAddEscalationChain();\n const removeChain = useRemoveEscalationChain();\n const [newTarget, setNewTarget] = useState('');\n\n const chains = chainsData?.chains ?? [];\n\n const targets = useMemo(() => {\n if (!selectedRole) return [];\n return chains.filter((c) => c.source_role === selectedRole).map((c) => c.target_role);\n }, [chains, selectedRole]);\n\n const available = useMemo(() => {\n if (!selectedRole) return [];\n return allRoles.filter((r) => r !== selectedRole && r !== 'superadmin' && !targets.includes(r));\n }, [allRoles, selectedRole, targets]);\n\n const handleAdd = () => {\n if (!selectedRole || !newTarget.trim()) return;\n addChain.mutate(\n { source_role: selectedRole, target_role: newTarget.trim() },\n { onSuccess: () => setNewTarget('') },\n );\n };\n\n const handleRemove = (target: string) => {\n if (!selectedRole) return;\n removeChain.mutate({ source_role: selectedRole, target_role: target });\n };\n\n const isSuperAdmin = selectedRole === 'superadmin';\n\n return (\n <div className=\"border-l border-surface-border pl-6 min-h-[300px]\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-4\">\n Escalation Routing\n </p>\n\n {!selectedRole ? (\n <p className=\"text-xs text-text-tertiary\">\n Select a role to manage its escalation targets.\n </p>\n ) : isSuperAdmin ? (\n <div>\n <p className=\"text-sm font-mono text-text-primary mb-2\">{selectedRole}</p>\n <p className=\"text-xs text-text-tertiary\">\n Superadmins can escalate to any role implicitly.\n </p>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div>\n <p className=\"text-sm font-mono text-text-primary\">{selectedRole}</p>\n <p className=\"text-[10px] text-text-tertiary mt-0.5\">Can escalate to:</p>\n </div>\n\n {targets.length === 0 ? (\n <p className=\"text-xs text-text-tertiary\">\n No escalation targets configured.\n </p>\n ) : (\n <div className=\"flex flex-wrap gap-2\">\n {targets.map((target) => (\n <span\n key={target}\n className=\"inline-flex items-center gap-1.5 px-2.5 py-1 text-xs bg-surface-sunken rounded-full text-text-secondary font-mono\"\n >\n {target}\n <button\n onClick={() => handleRemove(target)}\n className=\"text-text-tertiary hover:text-status-error transition-colors\"\n title={`Remove ${target}`}\n >\n ×\n </button>\n </span>\n ))}\n </div>\n )}\n\n {available.length > 0 && (\n <div className=\"pt-3 border-t border-surface-border\">\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary mb-2\">\n Add Target\n </p>\n <div className=\"flex items-center gap-2\">\n <select\n value={newTarget}\n onChange={(e) => setNewTarget(e.target.value)}\n className=\"select text-xs font-mono flex-1\"\n >\n <option value=\"\">Select a role...</option>\n {available.map((r) => (\n <option key={r} value={r}>{r}</option>\n ))}\n </select>\n <button\n onClick={handleAdd}\n disabled={!newTarget || addChain.isPending}\n className=\"btn-primary text-xs\"\n >\n {addChain.isPending ? 'Adding...' : 'Add'}\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { Trash2 } from 'lucide-react';\nimport { type RoleDetail } from '../../../api/roles';\nimport { type Column } from '../../../components/common/data/DataTable';\nimport { RolePill } from '../../../components/common/display/RolePill';\nimport { RowAction, RowActionGroup } from '../../../components/common/layout/RowActions';\n\nexport function getRoleColumns(\n onDelete: (row: RoleDetail) => void,\n): Column<RoleDetail>[] {\n return [\n {\n key: 'role',\n label: 'Role',\n render: (row) => <RolePill role={row.role} />,\n },\n {\n key: 'user_count',\n label: 'Users',\n render: (row) =>\n row.user_count > 0\n ? <span className=\"text-text-primary\">{row.user_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-24 text-right',\n },\n {\n key: 'chain_count',\n label: 'Escalations',\n render: (row) =>\n row.chain_count > 0\n ? <span className=\"text-text-primary\">{row.chain_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'workflow_count',\n label: 'Workflows',\n render: (row) =>\n row.workflow_count > 0\n ? <span className=\"text-text-primary\">{row.workflow_count}</span>\n : <span className=\"text-text-tertiary\">0</span>,\n className: 'w-28 text-right',\n },\n {\n key: 'actions',\n label: '',\n render: (row) => {\n const inUse = row.user_count > 0 || row.chain_count > 0 || row.workflow_count > 0;\n if (inUse) return null;\n return (\n <RowActionGroup>\n <RowAction\n icon={Trash2}\n title=\"Delete role\"\n onClick={() => onDelete(row)}\n colorClass=\"text-text-tertiary hover:text-status-error\"\n />\n </RowActionGroup>\n );\n },\n className: 'w-16 text-right',\n },\n ];\n}\n","import { useState, useMemo } from 'react';\nimport { useRoleDetails, useDeleteRole, type RoleDetail } from '../../../api/roles';\nimport { DataTable } from '../../../components/common/data/DataTable';\nimport { ConfirmDeleteModal } from '../../../components/common/modal/ConfirmDeleteModal';\nimport { PageHeader } from '../../../components/common/layout/PageHeader';\nimport { CreateRoleModal } from './CreateRoleModal';\nimport { EscalationPanel } from './EscalationPanel';\nimport { getRoleColumns } from './RoleColumns';\n\nexport function RolesPage() {\n const { data, isLoading } = useRoleDetails();\n const deleteRole = useDeleteRole();\n\n const [showCreate, setShowCreate] = useState(false);\n const [confirmDelete, setConfirmDelete] = useState<RoleDetail | null>(null);\n const [selectedRole, setSelectedRole] = useState<string | null>(null);\n\n const roles = data?.roles ?? [];\n const allRoleNames = useMemo(() => roles.map((r) => r.role), [roles]);\n\n const columns = getRoleColumns((row) => setConfirmDelete(row));\n\n const handleDelete = () => {\n if (!confirmDelete) return;\n deleteRole.mutate(confirmDelete.role, {\n onSuccess: () => setConfirmDelete(null),\n });\n };\n\n return (\n <div>\n <PageHeader\n title=\"Roles\"\n actions={\n <button onClick={() => setShowCreate(true)} className=\"btn-primary text-xs\">\n Add Role\n </button>\n }\n />\n\n <div className=\"grid grid-cols-1 lg:grid-cols-[1fr_320px] gap-6\">\n <div>\n <DataTable\n columns={columns}\n data={roles}\n keyFn={(row) => row.role}\n isLoading={isLoading}\n emptyMessage=\"No roles found\"\n onRowClick={(row) => setSelectedRole(row.role)}\n activeRowKey={selectedRole}\n />\n </div>\n\n <EscalationPanel selectedRole={selectedRole} allRoles={allRoleNames} />\n </div>\n\n <CreateRoleModal open={showCreate} onClose={() => setShowCreate(false)} />\n\n <ConfirmDeleteModal\n open={!!confirmDelete}\n onClose={() => setConfirmDelete(null)}\n onConfirm={handleDelete}\n title=\"Delete Role\"\n description={\n <>\n Delete role{' '}\n <span className=\"font-medium font-mono text-text-primary\">\n {confirmDelete?.role}\n </span>\n ? This action cannot be undone.\n </>\n }\n isPending={deleteRole.isPending}\n error={deleteRole.error as Error | null}\n />\n </div>\n );\n}\n"],"names":["CreateRoleModal","open","onClose","createRole","useCreateRole","roleName","setRoleName","useState","prevOpen","setPrevOpen","handleCreate","trimmed","jsxDEV","Modal","e","EscalationPanel","selectedRole","allRoles","chainsData","useEscalationChains","addChain","useAddEscalationChain","removeChain","useRemoveEscalationChain","newTarget","setNewTarget","chains","targets","useMemo","c","available","r","handleAdd","handleRemove","target","isSuperAdmin","getRoleColumns","onDelete","row","RolePill","RowActionGroup","RowAction","Trash2","RolesPage","data","isLoading","useRoleDetails","deleteRole","useDeleteRole","showCreate","setShowCreate","confirmDelete","setConfirmDelete","setSelectedRole","roles","allRoleNames","columns","handleDelete","PageHeader","DataTable","ConfirmDeleteModal","Fragment"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as t}from"./index-
|
|
2
|
-
//# sourceMappingURL=RowActions-
|
|
1
|
+
import{j as t}from"./index-BwN3KP_L.js";function r({icon:o,title:s,onClick:a,colorClass:n="text-text-tertiary hover:text-accent",alwaysVisible:i}){return t.jsxDEV("button",{onClick:e=>{e.stopPropagation(),a(e)},className:`transition-opacity ${i?"opacity-100":"opacity-0 group-hover/row:opacity-100"} ${n}`,title:s,children:t.jsxDEV(o,{className:"w-[18px] h-[18px]",strokeWidth:1.5},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:32,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:22,columnNumber:5},this)}function m({children:o}){return t.jsxDEV("span",{className:"flex items-center justify-end gap-2.5",children:o},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/RowActions.tsx",lineNumber:42,columnNumber:5},this)}export{m as R,r as a};
|
|
2
|
+
//# sourceMappingURL=RowActions-B4mqIt3Z.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RowActions-
|
|
1
|
+
{"version":3,"file":"RowActions-B4mqIt3Z.js","sources":["../../src/components/common/layout/RowActions.tsx"],"sourcesContent":["import type { LucideIcon } from 'lucide-react';\nimport type { ReactNode } from 'react';\n\n/**\n * Ephemeral icon button that appears on row hover.\n * Uses `group-hover/row:opacity-100` to show on hover — rows must have `group/row`.\n */\nexport function RowAction({\n icon: Icon,\n title,\n onClick,\n colorClass = 'text-text-tertiary hover:text-accent',\n alwaysVisible,\n}: {\n icon: LucideIcon;\n title: string;\n onClick: (e: React.MouseEvent) => void;\n colorClass?: string;\n alwaysVisible?: boolean;\n}) {\n return (\n <button\n onClick={(e) => {\n e.stopPropagation();\n onClick(e);\n }}\n className={`transition-opacity ${\n alwaysVisible ? 'opacity-100' : 'opacity-0 group-hover/row:opacity-100'\n } ${colorClass}`}\n title={title}\n >\n <Icon className=\"w-[18px] h-[18px]\" strokeWidth={1.5} />\n </button>\n );\n}\n\n/**\n * Container for one or more RowAction icons in the last table column.\n */\nexport function RowActionGroup({ children }: { children: ReactNode }) {\n return (\n <span className=\"flex items-center justify-end gap-2.5\">\n {children}\n </span>\n );\n}\n"],"names":["RowAction","Icon","title","onClick","colorClass","alwaysVisible","jsxDEV","RowActionGroup","children"],"mappings":"wCAOO,SAASA,EAAU,CACxB,KAAMC,EACN,MAAAC,EACA,QAAAC,EACA,WAAAC,EAAa,uCACb,cAAAC,CACF,EAMG,CACD,OACEC,EAAAA,OAAC,SAAA,CACC,QAAU,GAAM,CACd,EAAE,gBAAA,EACFH,EAAQ,CAAC,CACX,EACA,UAAW,sBACTE,EAAgB,cAAgB,uCAClC,IAAID,CAAU,GACd,MAAAF,EAEA,SAAAI,EAAAA,OAACL,EAAA,CAAK,UAAU,oBAAoB,YAAa,GAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAsD,CAAA,EAVxD,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAA,CAaJ,CAKO,SAASM,EAAe,CAAE,SAAAC,GAAqC,CACpE,OACEF,EAAAA,OAAC,OAAA,CAAK,UAAU,wCACb,SAAAE,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,6DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=StatCard-
|
|
1
|
+
import{j as e}from"./index-BwN3KP_L.js";function i({label:m,value:n,sub:a,dotClass:t,colorClass:d="text-text-primary",onClick:r}){const s=e.jsxDEV(e.Fragment,{children:[e.jsxDEV("div",{className:"flex items-center gap-2 mb-1",children:[t&&e.jsxDEV("span",{className:`w-2 h-2 rounded-full ${t}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:21,columnNumber:22},this),e.jsxDEV("p",{className:"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary",children:m},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:22,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:20,columnNumber:7},this),e.jsxDEV("p",{className:`text-2xl font-light tabular-nums ${d}`,children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:26,columnNumber:7},this),a&&e.jsxDEV("p",{className:"text-xs text-text-tertiary mt-1",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:27,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:19,columnNumber:5},this),o="bg-surface-raised border border-surface-border rounded-md p-4 text-left";return r?e.jsxDEV("button",{onClick:r,className:`${o} hover:border-accent/40 transition-colors`,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:35,columnNumber:7},this):e.jsxDEV("div",{className:o,children:s},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StatCard.tsx",lineNumber:41,columnNumber:10},this)}export{i as S};
|
|
2
|
+
//# sourceMappingURL=StatCard-Cz_2OjAZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatCard-
|
|
1
|
+
{"version":3,"file":"StatCard-Cz_2OjAZ.js","sources":["../../src/components/common/data/StatCard.tsx"],"sourcesContent":["interface StatCardProps {\n label: string;\n value: string | number;\n sub?: string;\n dotClass?: string;\n colorClass?: string;\n onClick?: () => void;\n}\n\nexport function StatCard({\n label,\n value,\n sub,\n dotClass,\n colorClass = 'text-text-primary',\n onClick,\n}: StatCardProps) {\n const content = (\n <>\n <div className=\"flex items-center gap-2 mb-1\">\n {dotClass && <span className={`w-2 h-2 rounded-full ${dotClass}`} />}\n <p className=\"text-[10px] font-semibold uppercase tracking-widest text-text-tertiary\">\n {label}\n </p>\n </div>\n <p className={`text-2xl font-light tabular-nums ${colorClass}`}>{value}</p>\n {sub && <p className=\"text-xs text-text-tertiary mt-1\">{sub}</p>}\n </>\n );\n\n const base = 'bg-surface-raised border border-surface-border rounded-md p-4 text-left';\n\n if (onClick) {\n return (\n <button onClick={onClick} className={`${base} hover:border-accent/40 transition-colors`}>\n {content}\n </button>\n );\n }\n\n return <div className={base}>{content}</div>;\n}\n"],"names":["StatCard","label","value","sub","dotClass","colorClass","onClick","content","jsxDEV","Fragment","base"],"mappings":"wCASO,SAASA,EAAS,CACvB,MAAAC,EACA,MAAAC,EACA,IAAAC,EACA,SAAAC,EACA,WAAAC,EAAa,oBACb,QAAAC,CACF,EAAkB,CAChB,MAAMC,EACJC,EAAAA,OAAAC,EAAAA,SAAA,CACE,SAAA,CAAAD,EAAAA,OAAC,MAAA,CAAI,UAAU,+BACZ,SAAA,CAAAJ,GAAYI,EAAAA,OAAC,OAAA,CAAK,UAAW,wBAAwBJ,CAAQ,EAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAqD,EAClEI,SAAC,IAAA,CAAE,UAAU,yEACV,SAAAP,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAAA,CAAA,EAJF,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAKA,WACC,IAAA,CAAE,UAAW,oCAAoCI,CAAU,GAAK,SAAAH,GAAjE,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuE,EACtEC,GAAOK,EAAAA,OAAC,IAAA,CAAE,UAAU,kCAAmC,SAAAL,CAAA,EAAhD,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAoD,CAAA,CAAA,EAR9D,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IASA,EAGIO,EAAO,0EAEb,OAAIJ,WAEC,SAAA,CAAO,QAAAA,EAAkB,UAAW,GAAGI,CAAI,4CACzC,SAAAH,CAAA,EADH,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EAIGC,EAAAA,OAAC,MAAA,CAAI,UAAWE,EAAO,SAAAH,CAAA,EAAvB,OAAA,GAAA,CAAA,SAAA,yDAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAA+B,CACxC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as s}from"./index-
|
|
2
|
-
//# sourceMappingURL=StatusBadge-
|
|
1
|
+
import{j as s}from"./index-BwN3KP_L.js";const n={pending:"bg-status-pending",in_progress:"bg-status-active animate-pulse",completed:"bg-status-success",resolved:"bg-status-success",needs_intervention:"bg-status-error",failed:"bg-status-error",cancelled:"bg-accent-muted",draft:"bg-status-draft",deployed:"bg-status-active",active:"bg-status-success",archived:"bg-text-tertiary"},d={pending:"Pending",in_progress:"In Progress",completed:"Completed",resolved:"Resolved",needs_intervention:"Needs Intervention",failed:"Failed",cancelled:"Cancelled",draft:"Draft",deployed:"Deployed",active:"Active",archived:"Archived"};function r({status:e}){const t=n[e]??"bg-status-pending",a=d[e]??e;return s.jsxDEV("span",{className:"inline-flex items-center gap-2",children:[s.jsxDEV("span",{className:`w-2 h-2 rounded-full ${t}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:39,columnNumber:7},this),s.jsxDEV("span",{className:"text-xs text-text-secondary",children:a},void 0,!1,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:40,columnNumber:7},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/display/StatusBadge.tsx",lineNumber:38,columnNumber:5},this)}export{r as S};
|
|
2
|
+
//# sourceMappingURL=StatusBadge-Wi2FJZsn.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge-
|
|
1
|
+
{"version":3,"file":"StatusBadge-Wi2FJZsn.js","sources":["../../src/components/common/display/StatusBadge.tsx"],"sourcesContent":["import type { LTTaskStatus, LTEscalationStatus } from '../../../api/types';\n\ntype Status = LTTaskStatus | LTEscalationStatus | string;\n\nconst statusStyles: Record<string, string> = {\n pending: 'bg-status-pending',\n in_progress: 'bg-status-active animate-pulse',\n completed: 'bg-status-success',\n resolved: 'bg-status-success',\n needs_intervention: 'bg-status-error',\n failed: 'bg-status-error',\n cancelled: 'bg-accent-muted',\n draft: 'bg-status-draft',\n deployed: 'bg-status-active',\n active: 'bg-status-success',\n archived: 'bg-text-tertiary',\n};\n\nconst statusLabels: Record<string, string> = {\n pending: 'Pending',\n in_progress: 'In Progress',\n completed: 'Completed',\n resolved: 'Resolved',\n needs_intervention: 'Needs Intervention',\n failed: 'Failed',\n cancelled: 'Cancelled',\n draft: 'Draft',\n deployed: 'Deployed',\n active: 'Active',\n archived: 'Archived',\n};\n\nexport function StatusBadge({ status }: { status: Status }) {\n const dotClass = statusStyles[status] ?? 'bg-status-pending';\n const label = statusLabels[status] ?? status;\n\n return (\n <span className=\"inline-flex items-center gap-2\">\n <span className={`w-2 h-2 rounded-full ${dotClass}`} />\n <span className=\"text-xs text-text-secondary\">{label}</span>\n </span>\n );\n}\n"],"names":["statusStyles","statusLabels","StatusBadge","status","dotClass","label","jsxDEV"],"mappings":"wCAIA,MAAMA,EAAuC,CAC3C,QAAS,oBACT,YAAa,iCACb,UAAW,oBACX,SAAU,oBACV,mBAAoB,kBACpB,OAAQ,kBACR,UAAW,kBACX,MAAO,kBACP,SAAU,mBACV,OAAQ,oBACR,SAAU,kBACZ,EAEMC,EAAuC,CAC3C,QAAS,UACT,YAAa,cACb,UAAW,YACX,SAAU,WACV,mBAAoB,qBACpB,OAAQ,SACR,UAAW,YACX,MAAO,QACP,SAAU,WACV,OAAQ,SACR,SAAU,UACZ,EAEO,SAASC,EAAY,CAAE,OAAAC,GAA8B,CAC1D,MAAMC,EAAWJ,EAAaG,CAAM,GAAK,oBACnCE,EAAQJ,EAAaE,CAAM,GAAKA,EAEtC,OACEG,EAAAA,OAAC,OAAA,CAAK,UAAU,iCACd,SAAA,CAAAA,SAAC,OAAA,CAAK,UAAW,wBAAwBF,CAAQ,EAAA,EAAjD,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqD,EACrDE,SAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAD,CAAA,EAA/C,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAqD,CAAA,CAAA,EAFvD,OAAA,GAAA,CAAA,SAAA,+DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAGA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=StepIndicator-
|
|
1
|
+
import{j as e}from"./index-BwN3KP_L.js";function l({steps:m,currentStep:s,onStepClick:a}){return e.jsxDEV("div",{className:"flex items-center justify-center gap-1 pb-4 border-b border-surface-border mb-4",children:m.map((n,t)=>{const c=t<s,o=t===s,r=!!a;return e.jsxDEV("div",{className:"flex items-center gap-1",children:[t>0&&e.jsxDEV("div",{className:`w-4 h-px ${c?"bg-accent":"bg-surface-border"}`},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:17,columnNumber:15},this),e.jsxDEV("button",{type:"button",onClick:r?()=>a(t):void 0,className:`flex items-center gap-1 ${r?"cursor-pointer":"cursor-default"}`,children:[e.jsxDEV("span",{className:`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${o?"bg-accent text-text-inverse":c?"bg-accent-muted text-accent":"bg-surface-sunken text-text-tertiary"} ${r&&!o?"hover:bg-accent-muted hover:text-accent":""}`,children:t+1},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:24,columnNumber:15},this),e.jsxDEV("span",{className:`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${o?"text-text-primary":"text-text-tertiary"} ${r&&!o?"hover:text-text-primary":""}`,children:n},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:35,columnNumber:15},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:19,columnNumber:13},this)]},n,!0,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:15,columnNumber:11},this)})},void 0,!1,{fileName:"/app/dashboard/src/components/common/layout/StepIndicator.tsx",lineNumber:9,columnNumber:5},this)}export{l as S};
|
|
2
|
+
//# sourceMappingURL=StepIndicator-PW5NRDMb.js.map
|
package/dashboard/dist/assets/{StepIndicator-CRM4ft28.js.map → StepIndicator-PW5NRDMb.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StepIndicator-
|
|
1
|
+
{"version":3,"file":"StepIndicator-PW5NRDMb.js","sources":["../../src/components/common/layout/StepIndicator.tsx"],"sourcesContent":["interface StepIndicatorProps {\n steps: string[];\n currentStep: number;\n onStepClick?: (step: number) => void;\n}\n\nexport function StepIndicator({ steps, currentStep, onStepClick }: StepIndicatorProps) {\n return (\n <div className=\"flex items-center justify-center gap-1 pb-4 border-b border-surface-border mb-4\">\n {steps.map((label, i) => {\n const done = i < currentStep;\n const active = i === currentStep;\n const clickable = !!onStepClick;\n return (\n <div key={label} className=\"flex items-center gap-1\">\n {i > 0 && (\n <div className={`w-4 h-px ${done ? 'bg-accent' : 'bg-surface-border'}`} />\n )}\n <button\n type=\"button\"\n onClick={clickable ? () => onStepClick(i) : undefined}\n className={`flex items-center gap-1 ${clickable ? 'cursor-pointer' : 'cursor-default'}`}\n >\n <span\n className={`w-5 h-5 rounded-full text-[10px] font-semibold flex items-center justify-center shrink-0 transition-colors ${\n active\n ? 'bg-accent text-text-inverse'\n : done\n ? 'bg-accent-muted text-accent'\n : 'bg-surface-sunken text-text-tertiary'\n } ${clickable && !active ? 'hover:bg-accent-muted hover:text-accent' : ''}`}\n >\n {i + 1}\n </span>\n <span\n className={`text-[10px] font-semibold uppercase tracking-wider whitespace-nowrap transition-colors ${\n active ? 'text-text-primary' : 'text-text-tertiary'\n } ${clickable && !active ? 'hover:text-text-primary' : ''}`}\n >\n {label}\n </span>\n </button>\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["StepIndicator","steps","currentStep","onStepClick","jsxDEV","label","i","done","active","clickable"],"mappings":"wCAMO,SAASA,EAAc,CAAE,MAAAC,EAAO,YAAAC,EAAa,YAAAC,GAAmC,CACrF,OACEC,SAAC,OAAI,UAAU,kFACZ,WAAM,IAAI,CAACC,EAAOC,IAAM,CACvB,MAAMC,EAAOD,EAAIJ,EACXM,EAASF,IAAMJ,EACfO,EAAY,CAAC,CAACN,EACpB,OACEC,EAAAA,OAAC,MAAA,CAAgB,UAAU,0BACxB,SAAA,CAAAE,EAAI,YACF,MAAA,CAAI,UAAW,YAAYC,EAAO,YAAc,mBAAmB,EAAA,EAApE,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAwE,EAE1EH,EAAAA,OAAC,SAAA,CACC,KAAK,SACL,QAASK,EAAY,IAAMN,EAAYG,CAAC,EAAI,OAC5C,UAAW,2BAA2BG,EAAY,iBAAmB,gBAAgB,GAErF,SAAA,CAAAL,EAAAA,OAAC,OAAA,CACC,UAAW,8GACTI,EACI,8BACAD,EACE,8BACA,sCACR,IAAIE,GAAa,CAACD,EAAS,0CAA4C,EAAE,GAExE,SAAAF,EAAI,CAAA,EATP,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAWAF,EAAAA,OAAC,OAAA,CACC,UAAW,0FACTI,EAAS,oBAAsB,oBACjC,IAAIC,GAAa,CAACD,EAAS,0BAA4B,EAAE,GAExD,SAAAH,CAAA,EALH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAtBF,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAuBA,CAAA,EA3BQA,EAAV,GAAA,CAAA,SAAA,gEAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IA4BA,CAEJ,CAAC,CAAA,EApCH,OAAA,GAAA,CAAA,SAAA,gEAAA,WAAA,EAAA,aAAA,CAAA,EAAA,IAqCA,CAEJ"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as e}from"./index-
|
|
2
|
-
//# sourceMappingURL=StickyPagination-
|
|
1
|
+
import{j as e}from"./index-BwN3KP_L.js";const l=[10,25,50,100];function d({page:t,totalPages:s,onPageChange:i,total:n,pageSize:o,onPageSizeChange:m}){if(n===0)return null;const r=(t-1)*o+1,c=Math.min(t*o,n);return e.jsxDEV("div",{className:"flex items-center justify-between pt-4",children:[e.jsxDEV("div",{className:"flex items-center gap-4",children:[e.jsxDEV("p",{className:"text-xs text-text-tertiary",children:[r,"–",c," of ",n]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:28,columnNumber:9},this),m&&e.jsxDEV("select",{value:o,onChange:a=>m(parseInt(a.target.value)),className:"select text-xs py-1",children:l.map(a=>e.jsxDEV("option",{value:a,children:[a," / page"]},a,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:38,columnNumber:15},this))},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:32,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:27,columnNumber:7},this),s>1&&e.jsxDEV("div",{className:"flex items-center gap-1",children:[e.jsxDEV("button",{onClick:()=>i(t-1),disabled:t<=1,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Previous"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:47,columnNumber:11},this),e.jsxDEV("span",{className:"px-3 text-xs text-text-secondary",children:[t," / ",s]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:54,columnNumber:11},this),e.jsxDEV("button",{onClick:()=>i(t+1),disabled:t>=s,className:"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed",children:"Next"},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:57,columnNumber:11},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:46,columnNumber:9},this)]},void 0,!0,{fileName:"/app/dashboard/src/components/common/data/Pagination.tsx",lineNumber:26,columnNumber:5},this)}function b(t){return t.total===0?null:e.jsxDEV("div",{className:"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4",style:{bottom:"calc(var(--feed-height, 0px) - 8px)"},children:e.jsxDEV(d,{...t},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StickyPagination.tsx",lineNumber:17,columnNumber:7},this)},void 0,!1,{fileName:"/app/dashboard/src/components/common/data/StickyPagination.tsx",lineNumber:16,columnNumber:5},this)}export{b as S};
|
|
2
|
+
//# sourceMappingURL=StickyPagination-Bl2Uzz65.js.map
|
package/dashboard/dist/assets/{StickyPagination-CF0EToEU.js.map → StickyPagination-Bl2Uzz65.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StickyPagination-
|
|
1
|
+
{"version":3,"file":"StickyPagination-Bl2Uzz65.js","sources":["../../src/components/common/data/Pagination.tsx","../../src/components/common/data/StickyPagination.tsx"],"sourcesContent":["const PAGE_SIZE_OPTIONS = [10, 25, 50, 100];\n\ninterface PaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function Pagination({\n page,\n totalPages,\n onPageChange,\n total,\n pageSize,\n onPageSizeChange,\n}: PaginationProps) {\n if (total === 0) return null;\n\n const start = (page - 1) * pageSize + 1;\n const end = Math.min(page * pageSize, total);\n\n return (\n <div className=\"flex items-center justify-between pt-4\">\n <div className=\"flex items-center gap-4\">\n <p className=\"text-xs text-text-tertiary\">\n {start}–{end} of {total}\n </p>\n {onPageSizeChange && (\n <select\n value={pageSize}\n onChange={(e) => onPageSizeChange(parseInt(e.target.value))}\n className=\"select text-xs py-1\"\n >\n {PAGE_SIZE_OPTIONS.map((size) => (\n <option key={size} value={size}>\n {size} / page\n </option>\n ))}\n </select>\n )}\n </div>\n {totalPages > 1 && (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={() => onPageChange(page - 1)}\n disabled={page <= 1}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Previous\n </button>\n <span className=\"px-3 text-xs text-text-secondary\">\n {page} / {totalPages}\n </span>\n <button\n onClick={() => onPageChange(page + 1)}\n disabled={page >= totalPages}\n className=\"btn-ghost text-xs disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n Next\n </button>\n </div>\n )}\n </div>\n );\n}\n","import { Pagination } from './Pagination';\n\ninterface StickyPaginationProps {\n page: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n total: number;\n pageSize: number;\n onPageSizeChange?: (size: number) => void;\n}\n\nexport function StickyPagination(props: StickyPaginationProps) {\n if (props.total === 0) return null;\n\n return (\n <div className=\"sticky bg-surface/95 backdrop-blur-sm border-t border-surface-border -mx-10 px-10 pt-2 pb-4\" style={{ bottom: 'calc(var(--feed-height, 0px) - 8px)' }}>\n <Pagination {...props} />\n </div>\n );\n}\n"],"names":["PAGE_SIZE_OPTIONS","Pagination","page","totalPages","onPageChange","total","pageSize","onPageSizeChange","start","end","jsxDEV","e","size","StickyPagination","props"],"mappings":"wCAAA,MAAMA,EAAoB,CAAC,GAAI,GAAI,GAAI,GAAG,EAWnC,SAASC,EAAW,CACzB,KAAAC,EACA,WAAAC,EACA,aAAAC,EACA,MAAAC,EACA,SAAAC,EACA,iBAAAC,CACF,EAAoB,CAClB,GAAIF,IAAU,EAAG,OAAO,KAExB,MAAMG,GAASN,EAAO,GAAKI,EAAW,EAChCG,EAAM,KAAK,IAAIP,EAAOI,EAAUD,CAAK,EAE3C,OACEK,EAAAA,OAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAAA,EAAAA,OAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,IAAA,CAAE,UAAU,6BACV,SAAA,CAAAF,EAAM,IAAQC,EAAI,OAAKJ,CAAA,CAAA,EAD1B,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,EACCE,GACCG,EAAAA,OAAC,SAAA,CACC,MAAOJ,EACP,SAAWK,GAAMJ,EAAiB,SAASI,EAAE,OAAO,KAAK,CAAC,EAC1D,UAAU,sBAET,WAAkB,IAAKC,GACtBF,SAAC,SAAA,CAAkB,MAAOE,EACvB,SAAA,CAAAA,EAAK,SAAA,CAAA,EADKA,EAAb,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,CACD,CAAA,EATH,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAUA,CAAA,EAfJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAiBA,EACCT,EAAa,GACZO,SAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAAA,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMN,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQ,EAClB,UAAU,oEACX,SAAA,UAAA,EAJD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,EAOAQ,EAAAA,OAAC,OAAA,CAAK,UAAU,mCACb,SAAA,CAAAR,EAAK,MAAIC,CAAA,CAAA,EADZ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAEA,EACAO,EAAAA,OAAC,SAAA,CACC,QAAS,IAAMN,EAAaF,EAAO,CAAC,EACpC,SAAUA,GAAQC,EAClB,UAAU,oEACX,SAAA,MAAA,EAJD,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,EAAA,EAAA,IAAA,CAMA,CAAA,EAjBF,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAkBA,CAAA,CAAA,EAtCJ,OAAA,GAAA,CAAA,SAAA,2DAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAwCA,CAEJ,CCxDO,SAASU,EAAiBC,EAA8B,CAC7D,OAAIA,EAAM,QAAU,EAAU,KAG5BJ,EAAAA,OAAC,MAAA,CAAI,UAAU,8FAA8F,MAAO,CAAE,OAAQ,qCAAA,EAC5H,SAAAA,EAAAA,OAACT,EAAA,CAAY,GAAGa,CAAA,EAAhB,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAAuB,CAAA,EADzB,OAAA,GAAA,CAAA,SAAA,iEAAA,WAAA,GAAA,aAAA,CAAA,EAAA,IAEA,CAEJ"}
|