@contraagent/ui 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +137 -2
- package/custom-elements.json +7286 -0
- package/dist/adapters/check-rows.d.ts +20 -0
- package/dist/adapters/check-rows.d.ts.map +1 -0
- package/dist/adapters/check-rows.js +77 -0
- package/dist/adapters/check-rows.js.map +1 -0
- package/dist/adapters/filters.d.ts +29 -0
- package/dist/adapters/filters.d.ts.map +1 -0
- package/dist/adapters/filters.js +74 -0
- package/dist/adapters/filters.js.map +1 -0
- package/dist/adapters/graph/compound.d.ts +93 -0
- package/dist/adapters/graph/compound.d.ts.map +1 -0
- package/dist/adapters/graph/compound.js +322 -0
- package/dist/adapters/graph/compound.js.map +1 -0
- package/dist/adapters/graph/flow-index.d.ts +54 -0
- package/dist/adapters/graph/flow-index.d.ts.map +1 -0
- package/dist/adapters/graph/flow-index.js +129 -0
- package/dist/adapters/graph/flow-index.js.map +1 -0
- package/dist/adapters/graph/highlight.d.ts +14 -0
- package/dist/adapters/graph/highlight.d.ts.map +1 -0
- package/dist/adapters/graph/highlight.js +33 -0
- package/dist/adapters/graph/highlight.js.map +1 -0
- package/dist/adapters/graph/input.d.ts +50 -0
- package/dist/adapters/graph/input.d.ts.map +1 -0
- package/dist/adapters/graph/input.js +201 -0
- package/dist/adapters/graph/input.js.map +1 -0
- package/dist/adapters/graph/layer.d.ts +33 -0
- package/dist/adapters/graph/layer.d.ts.map +1 -0
- package/dist/adapters/graph/layer.js +94 -0
- package/dist/adapters/graph/layer.js.map +1 -0
- package/dist/adapters/graph/matrix.d.ts +62 -0
- package/dist/adapters/graph/matrix.d.ts.map +1 -0
- package/dist/adapters/graph/matrix.js +96 -0
- package/dist/adapters/graph/matrix.js.map +1 -0
- package/dist/adapters/graph/project.d.ts +49 -0
- package/dist/adapters/graph/project.d.ts.map +1 -0
- package/dist/adapters/graph/project.js +319 -0
- package/dist/adapters/graph/project.js.map +1 -0
- package/dist/adapters/graph/selection.d.ts +31 -0
- package/dist/adapters/graph/selection.d.ts.map +1 -0
- package/dist/adapters/graph/selection.js +48 -0
- package/dist/adapters/graph/selection.js.map +1 -0
- package/dist/adapters/graph/states.d.ts +6 -0
- package/dist/adapters/graph/states.d.ts.map +1 -0
- package/dist/adapters/graph/states.js +5 -0
- package/dist/adapters/graph/states.js.map +1 -0
- package/dist/adapters/graph/types.d.ts +141 -0
- package/dist/adapters/graph/types.d.ts.map +1 -0
- package/dist/adapters/graph/types.js +3 -0
- package/dist/adapters/graph/types.js.map +1 -0
- package/dist/adapters/graph/words.d.ts +48 -0
- package/dist/adapters/graph/words.d.ts.map +1 -0
- package/dist/adapters/graph/words.js +128 -0
- package/dist/adapters/graph/words.js.map +1 -0
- package/dist/adapters/index.d.ts +18 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +23 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/journal-columns.d.ts +21 -0
- package/dist/adapters/journal-columns.d.ts.map +1 -0
- package/dist/adapters/journal-columns.js +179 -0
- package/dist/adapters/journal-columns.js.map +1 -0
- package/dist/adapters/kpi-tiles.d.ts +47 -0
- package/dist/adapters/kpi-tiles.d.ts.map +1 -0
- package/dist/adapters/kpi-tiles.js +173 -0
- package/dist/adapters/kpi-tiles.js.map +1 -0
- package/dist/adapters/lanes.d.ts +31 -0
- package/dist/adapters/lanes.d.ts.map +1 -0
- package/dist/adapters/lanes.js +75 -0
- package/dist/adapters/lanes.js.map +1 -0
- package/dist/adapters/model-shares.d.ts +27 -0
- package/dist/adapters/model-shares.d.ts.map +1 -0
- package/dist/adapters/model-shares.js +52 -0
- package/dist/adapters/model-shares.js.map +1 -0
- package/dist/adapters/panel-body.d.ts +34 -0
- package/dist/adapters/panel-body.d.ts.map +1 -0
- package/dist/adapters/panel-body.js +90 -0
- package/dist/adapters/panel-body.js.map +1 -0
- package/dist/adapters/preflight.d.ts +12 -0
- package/dist/adapters/preflight.d.ts.map +1 -0
- package/dist/adapters/preflight.js +15 -0
- package/dist/adapters/preflight.js.map +1 -0
- package/dist/adapters/task-columns.d.ts +19 -0
- package/dist/adapters/task-columns.d.ts.map +1 -0
- package/dist/adapters/task-columns.js +107 -0
- package/dist/adapters/task-columns.js.map +1 -0
- package/dist/adapters/transcript/index.d.ts +6 -0
- package/dist/adapters/transcript/index.d.ts.map +1 -0
- package/dist/adapters/transcript/index.js +8 -0
- package/dist/adapters/transcript/index.js.map +1 -0
- package/dist/adapters/transcript/model.d.ts +42 -0
- package/dist/adapters/transcript/model.d.ts.map +1 -0
- package/dist/adapters/transcript/model.js +128 -0
- package/dist/adapters/transcript/model.js.map +1 -0
- package/dist/adapters/transcript/rounds.d.ts +15 -0
- package/dist/adapters/transcript/rounds.d.ts.map +1 -0
- package/dist/adapters/transcript/rounds.js +74 -0
- package/dist/adapters/transcript/rounds.js.map +1 -0
- package/dist/adapters/transcript/sections.d.ts +18 -0
- package/dist/adapters/transcript/sections.d.ts.map +1 -0
- package/dist/adapters/transcript/sections.js +69 -0
- package/dist/adapters/transcript/sections.js.map +1 -0
- package/dist/adapters/transcript/web.d.ts +12 -0
- package/dist/adapters/transcript/web.d.ts.map +1 -0
- package/dist/adapters/transcript/web.js +39 -0
- package/dist/adapters/transcript/web.js.map +1 -0
- package/dist/adapters/transcript/who.d.ts +15 -0
- package/dist/adapters/transcript/who.d.ts.map +1 -0
- package/dist/adapters/transcript/who.js +42 -0
- package/dist/adapters/transcript/who.js.map +1 -0
- package/dist/adapters/trends.d.ts +11 -0
- package/dist/adapters/trends.d.ts.map +1 -0
- package/dist/adapters/trends.js +316 -0
- package/dist/adapters/trends.js.map +1 -0
- package/dist/contraagent-ui.js +1028 -0
- package/dist/controllers/locale.d.ts +25 -0
- package/dist/controllers/locale.d.ts.map +1 -0
- package/dist/controllers/locale.js +33 -0
- package/dist/controllers/locale.js.map +1 -0
- package/dist/controllers/shortcuts.d.ts +29 -0
- package/dist/controllers/shortcuts.d.ts.map +1 -0
- package/dist/controllers/shortcuts.js +51 -0
- package/dist/controllers/shortcuts.js.map +1 -0
- package/dist/controllers/stream.d.ts +41 -0
- package/dist/controllers/stream.d.ts.map +1 -0
- package/dist/controllers/stream.js +90 -0
- package/dist/controllers/stream.js.map +1 -0
- package/dist/controllers/task-detail.d.ts +22 -0
- package/dist/controllers/task-detail.d.ts.map +1 -0
- package/dist/controllers/task-detail.js +50 -0
- package/dist/controllers/task-detail.js.map +1 -0
- package/dist/controllers/theme.d.ts +32 -0
- package/dist/controllers/theme.d.ts.map +1 -0
- package/dist/controllers/theme.js +56 -0
- package/dist/controllers/theme.js.map +1 -0
- package/dist/core/events.d.ts +107 -0
- package/dist/core/events.d.ts.map +1 -0
- package/dist/core/events.js +5 -0
- package/dist/core/events.js.map +1 -0
- package/dist/core/i18n.d.ts +21 -0
- package/dist/core/i18n.d.ts.map +1 -0
- package/dist/core/i18n.js +71 -0
- package/dist/core/i18n.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +7 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/memory.d.ts +51 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +174 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/scroll.d.ts +21 -0
- package/dist/core/scroll.d.ts.map +1 -0
- package/dist/core/scroll.js +74 -0
- package/dist/core/scroll.js.map +1 -0
- package/dist/core/view-route.d.ts +62 -0
- package/dist/core/view-route.d.ts.map +1 -0
- package/dist/core/view-route.js +143 -0
- package/dist/core/view-route.js.map +1 -0
- package/dist/core/view-router.d.ts +27 -0
- package/dist/core/view-router.d.ts.map +1 -0
- package/dist/core/view-router.js +57 -0
- package/dist/core/view-router.js.map +1 -0
- package/dist/define/all.d.ts +13 -0
- package/dist/define/all.d.ts.map +1 -0
- package/dist/define/all.js +14 -0
- package/dist/define/all.js.map +1 -0
- package/dist/define/contracts.d.ts +2 -0
- package/dist/define/contracts.d.ts.map +1 -0
- package/dist/define/contracts.js +3 -0
- package/dist/define/contracts.js.map +1 -0
- package/dist/define/definitions.d.ts +3 -0
- package/dist/define/definitions.d.ts.map +1 -0
- package/dist/define/definitions.js +4 -0
- package/dist/define/definitions.js.map +1 -0
- package/dist/define/journal-table.d.ts +2 -0
- package/dist/define/journal-table.d.ts.map +1 -0
- package/dist/define/journal-table.js +3 -0
- package/dist/define/journal-table.js.map +1 -0
- package/dist/define/kpis.d.ts +2 -0
- package/dist/define/kpis.d.ts.map +1 -0
- package/dist/define/kpis.js +3 -0
- package/dist/define/kpis.js.map +1 -0
- package/dist/define/monitor.d.ts +2 -0
- package/dist/define/monitor.d.ts.map +1 -0
- package/dist/define/monitor.js +3 -0
- package/dist/define/monitor.js.map +1 -0
- package/dist/define/overview.d.ts +2 -0
- package/dist/define/overview.d.ts.map +1 -0
- package/dist/define/overview.js +3 -0
- package/dist/define/overview.js.map +1 -0
- package/dist/define/pipeline-graph.d.ts +2 -0
- package/dist/define/pipeline-graph.d.ts.map +1 -0
- package/dist/define/pipeline-graph.js +3 -0
- package/dist/define/pipeline-graph.js.map +1 -0
- package/dist/define/procs.d.ts +3 -0
- package/dist/define/procs.d.ts.map +1 -0
- package/dist/define/procs.js +4 -0
- package/dist/define/procs.js.map +1 -0
- package/dist/define/task-table.d.ts +2 -0
- package/dist/define/task-table.d.ts.map +1 -0
- package/dist/define/task-table.js +3 -0
- package/dist/define/task-table.js.map +1 -0
- package/dist/define/task-view.d.ts +2 -0
- package/dist/define/task-view.d.ts.map +1 -0
- package/dist/define/task-view.js +3 -0
- package/dist/define/task-view.js.map +1 -0
- package/dist/define/timeline.d.ts +2 -0
- package/dist/define/timeline.d.ts.map +1 -0
- package/dist/define/timeline.js +3 -0
- package/dist/define/timeline.js.map +1 -0
- package/dist/define/transcript.d.ts +2 -0
- package/dist/define/transcript.d.ts.map +1 -0
- package/dist/define/transcript.js +3 -0
- package/dist/define/transcript.js.map +1 -0
- package/dist/elements/lists/ca-contracts.d.ts +46 -0
- package/dist/elements/lists/ca-contracts.d.ts.map +1 -0
- package/dist/elements/lists/ca-contracts.js +199 -0
- package/dist/elements/lists/ca-contracts.js.map +1 -0
- package/dist/elements/lists/ca-definitions.d.ts +41 -0
- package/dist/elements/lists/ca-definitions.d.ts.map +1 -0
- package/dist/elements/lists/ca-definitions.js +182 -0
- package/dist/elements/lists/ca-definitions.js.map +1 -0
- package/dist/elements/lists/ca-journal-table.d.ts +37 -0
- package/dist/elements/lists/ca-journal-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-journal-table.js +170 -0
- package/dist/elements/lists/ca-journal-table.js.map +1 -0
- package/dist/elements/lists/ca-panel-body.d.ts +42 -0
- package/dist/elements/lists/ca-panel-body.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-body.js +210 -0
- package/dist/elements/lists/ca-panel-body.js.map +1 -0
- package/dist/elements/lists/ca-panel-view.d.ts +21 -0
- package/dist/elements/lists/ca-panel-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-panel-view.js +59 -0
- package/dist/elements/lists/ca-panel-view.js.map +1 -0
- package/dist/elements/lists/ca-proc-tree.d.ts +16 -0
- package/dist/elements/lists/ca-proc-tree.d.ts.map +1 -0
- package/dist/elements/lists/ca-proc-tree.js +63 -0
- package/dist/elements/lists/ca-proc-tree.js.map +1 -0
- package/dist/elements/lists/ca-procs-view.d.ts +27 -0
- package/dist/elements/lists/ca-procs-view.d.ts.map +1 -0
- package/dist/elements/lists/ca-procs-view.js +91 -0
- package/dist/elements/lists/ca-procs-view.js.map +1 -0
- package/dist/elements/lists/ca-task-table.d.ts +33 -0
- package/dist/elements/lists/ca-task-table.d.ts.map +1 -0
- package/dist/elements/lists/ca-task-table.js +115 -0
- package/dist/elements/lists/ca-task-table.js.map +1 -0
- package/dist/elements/lists/index.d.ts +9 -0
- package/dist/elements/lists/index.d.ts.map +1 -0
- package/dist/elements/lists/index.js +9 -0
- package/dist/elements/lists/index.js.map +1 -0
- package/dist/elements/overview/ca-kpis.d.ts +32 -0
- package/dist/elements/overview/ca-kpis.d.ts.map +1 -0
- package/dist/elements/overview/ca-kpis.js +62 -0
- package/dist/elements/overview/ca-kpis.js.map +1 -0
- package/dist/elements/overview/ca-model-usage.d.ts +25 -0
- package/dist/elements/overview/ca-model-usage.d.ts.map +1 -0
- package/dist/elements/overview/ca-model-usage.js +118 -0
- package/dist/elements/overview/ca-model-usage.js.map +1 -0
- package/dist/elements/overview/ca-overview.d.ts +67 -0
- package/dist/elements/overview/ca-overview.d.ts.map +1 -0
- package/dist/elements/overview/ca-overview.js +463 -0
- package/dist/elements/overview/ca-overview.js.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts +211 -0
- package/dist/elements/overview/ca-pipeline-graph.d.ts.map +1 -0
- package/dist/elements/overview/ca-pipeline-graph.js +616 -0
- package/dist/elements/overview/ca-pipeline-graph.js.map +1 -0
- package/dist/elements/overview/ca-quota.d.ts +42 -0
- package/dist/elements/overview/ca-quota.d.ts.map +1 -0
- package/dist/elements/overview/ca-quota.js +179 -0
- package/dist/elements/overview/ca-quota.js.map +1 -0
- package/dist/elements/overview/ca-run-driver.d.ts +33 -0
- package/dist/elements/overview/ca-run-driver.d.ts.map +1 -0
- package/dist/elements/overview/ca-run-driver.js +146 -0
- package/dist/elements/overview/ca-run-driver.js.map +1 -0
- package/dist/elements/overview/ca-services.d.ts +25 -0
- package/dist/elements/overview/ca-services.d.ts.map +1 -0
- package/dist/elements/overview/ca-services.js +77 -0
- package/dist/elements/overview/ca-services.js.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts +24 -0
- package/dist/elements/overview/ca-spend-breakdown.d.ts.map +1 -0
- package/dist/elements/overview/ca-spend-breakdown.js +108 -0
- package/dist/elements/overview/ca-spend-breakdown.js.map +1 -0
- package/dist/elements/overview/ca-timeline.d.ts +28 -0
- package/dist/elements/overview/ca-timeline.d.ts.map +1 -0
- package/dist/elements/overview/ca-timeline.js +72 -0
- package/dist/elements/overview/ca-timeline.js.map +1 -0
- package/dist/elements/overview/ca-workers.d.ts +23 -0
- package/dist/elements/overview/ca-workers.d.ts.map +1 -0
- package/dist/elements/overview/ca-workers.js +86 -0
- package/dist/elements/overview/ca-workers.js.map +1 -0
- package/dist/elements/overview/index.d.ts +11 -0
- package/dist/elements/overview/index.d.ts.map +1 -0
- package/dist/elements/overview/index.js +11 -0
- package/dist/elements/overview/index.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts +16 -0
- package/dist/elements/overview/pipeline-graph/actions.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/actions.js +42 -0
- package/dist/elements/overview/pipeline-graph/actions.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts +15 -0
- package/dist/elements/overview/pipeline-graph/crumbs.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js +70 -0
- package/dist/elements/overview/pipeline-graph/crumbs.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts +24 -0
- package/dist/elements/overview/pipeline-graph/host.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/host.js +2 -0
- package/dist/elements/overview/pipeline-graph/host.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts +5 -0
- package/dist/elements/overview/pipeline-graph/inspector.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/inspector.js +100 -0
- package/dist/elements/overview/pipeline-graph/inspector.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts +53 -0
- package/dist/elements/overview/pipeline-graph/outline.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/outline.js +111 -0
- package/dist/elements/overview/pipeline-graph/outline.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts +11 -0
- package/dist/elements/overview/pipeline-graph/strings.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/strings.js +49 -0
- package/dist/elements/overview/pipeline-graph/strings.js.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts +4 -0
- package/dist/elements/overview/pipeline-graph/styles.d.ts.map +1 -0
- package/dist/elements/overview/pipeline-graph/styles.js +96 -0
- package/dist/elements/overview/pipeline-graph/styles.js.map +1 -0
- package/dist/elements/shared/ca-definition.d.ts +26 -0
- package/dist/elements/shared/ca-definition.d.ts.map +1 -0
- package/dist/elements/shared/ca-definition.js +202 -0
- package/dist/elements/shared/ca-definition.js.map +1 -0
- package/dist/elements/shared/contract-parts.d.ts +35 -0
- package/dist/elements/shared/contract-parts.d.ts.map +1 -0
- package/dist/elements/shared/contract-parts.js +167 -0
- package/dist/elements/shared/contract-parts.js.map +1 -0
- package/dist/elements/shared/file-card.d.ts +17 -0
- package/dist/elements/shared/file-card.d.ts.map +1 -0
- package/dist/elements/shared/file-card.js +37 -0
- package/dist/elements/shared/file-card.js.map +1 -0
- package/dist/elements/shared/prompt-text.d.ts +5 -0
- package/dist/elements/shared/prompt-text.d.ts.map +1 -0
- package/dist/elements/shared/prompt-text.js +13 -0
- package/dist/elements/shared/prompt-text.js.map +1 -0
- package/dist/elements/shared/task-chip.d.ts +10 -0
- package/dist/elements/shared/task-chip.d.ts.map +1 -0
- package/dist/elements/shared/task-chip.js +19 -0
- package/dist/elements/shared/task-chip.js.map +1 -0
- package/dist/elements/shell/ca-clock.d.ts +13 -0
- package/dist/elements/shell/ca-clock.d.ts.map +1 -0
- package/dist/elements/shell/ca-clock.js +30 -0
- package/dist/elements/shell/ca-clock.js.map +1 -0
- package/dist/elements/shell/ca-hosts.d.ts +21 -0
- package/dist/elements/shell/ca-hosts.d.ts.map +1 -0
- package/dist/elements/shell/ca-hosts.js +97 -0
- package/dist/elements/shell/ca-hosts.js.map +1 -0
- package/dist/elements/shell/ca-monitor.d.ts +182 -0
- package/dist/elements/shell/ca-monitor.d.ts.map +1 -0
- package/dist/elements/shell/ca-monitor.js +549 -0
- package/dist/elements/shell/ca-monitor.js.map +1 -0
- package/dist/elements/shell/ca-run-picker.d.ts +71 -0
- package/dist/elements/shell/ca-run-picker.d.ts.map +1 -0
- package/dist/elements/shell/ca-run-picker.js +313 -0
- package/dist/elements/shell/ca-run-picker.js.map +1 -0
- package/dist/elements/shell/ca-theme-switch.d.ts +36 -0
- package/dist/elements/shell/ca-theme-switch.d.ts.map +1 -0
- package/dist/elements/shell/ca-theme-switch.js +186 -0
- package/dist/elements/shell/ca-theme-switch.js.map +1 -0
- package/dist/elements/shell/ca-toasts.d.ts +23 -0
- package/dist/elements/shell/ca-toasts.d.ts.map +1 -0
- package/dist/elements/shell/ca-toasts.js +88 -0
- package/dist/elements/shell/ca-toasts.js.map +1 -0
- package/dist/elements/shell/header.d.ts +13 -0
- package/dist/elements/shell/header.d.ts.map +1 -0
- package/dist/elements/shell/header.js +38 -0
- package/dist/elements/shell/header.js.map +1 -0
- package/dist/elements/shell/styles.d.ts +2 -0
- package/dist/elements/shell/styles.d.ts.map +1 -0
- package/dist/elements/shell/styles.js +72 -0
- package/dist/elements/shell/styles.js.map +1 -0
- package/dist/elements/shell/tabs.d.ts +32 -0
- package/dist/elements/shell/tabs.d.ts.map +1 -0
- package/dist/elements/shell/tabs.js +125 -0
- package/dist/elements/shell/tabs.js.map +1 -0
- package/dist/elements/shell/views.d.ts +27 -0
- package/dist/elements/shell/views.d.ts.map +1 -0
- package/dist/elements/shell/views.js +55 -0
- package/dist/elements/shell/views.js.map +1 -0
- package/dist/elements/task/ca-task-view.d.ts +55 -0
- package/dist/elements/task/ca-task-view.d.ts.map +1 -0
- package/dist/elements/task/ca-task-view.js +199 -0
- package/dist/elements/task/ca-task-view.js.map +1 -0
- package/dist/elements/task/ca-transcript.d.ts +74 -0
- package/dist/elements/task/ca-transcript.d.ts.map +1 -0
- package/dist/elements/task/ca-transcript.js +241 -0
- package/dist/elements/task/ca-transcript.js.map +1 -0
- package/dist/elements/task/context.d.ts +57 -0
- package/dist/elements/task/context.d.ts.map +1 -0
- package/dist/elements/task/context.js +61 -0
- package/dist/elements/task/context.js.map +1 -0
- package/dist/elements/task/header.d.ts +9 -0
- package/dist/elements/task/header.d.ts.map +1 -0
- package/dist/elements/task/header.js +291 -0
- package/dist/elements/task/header.js.map +1 -0
- package/dist/elements/task/index.d.ts +3 -0
- package/dist/elements/task/index.d.ts.map +1 -0
- package/dist/elements/task/index.js +3 -0
- package/dist/elements/task/index.js.map +1 -0
- package/dist/elements/task/inputs.d.ts +28 -0
- package/dist/elements/task/inputs.d.ts.map +1 -0
- package/dist/elements/task/inputs.js +27 -0
- package/dist/elements/task/inputs.js.map +1 -0
- package/dist/elements/task/panes/definition.d.ts +5 -0
- package/dist/elements/task/panes/definition.d.ts.map +1 -0
- package/dist/elements/task/panes/definition.js +5 -0
- package/dist/elements/task/panes/definition.js.map +1 -0
- package/dist/elements/task/panes/io.d.ts +8 -0
- package/dist/elements/task/panes/io.d.ts.map +1 -0
- package/dist/elements/task/panes/io.js +184 -0
- package/dist/elements/task/panes/io.js.map +1 -0
- package/dist/elements/task/panes/transcript.d.ts +5 -0
- package/dist/elements/task/panes/transcript.d.ts.map +1 -0
- package/dist/elements/task/panes/transcript.js +29 -0
- package/dist/elements/task/panes/transcript.js.map +1 -0
- package/dist/elements/task/styles.d.ts +2 -0
- package/dist/elements/task/styles.d.ts.map +1 -0
- package/dist/elements/task/styles.js +66 -0
- package/dist/elements/task/styles.js.map +1 -0
- package/dist/elements/trends/ca-trends.d.ts +55 -0
- package/dist/elements/trends/ca-trends.d.ts.map +1 -0
- package/dist/elements/trends/ca-trends.js +213 -0
- package/dist/elements/trends/ca-trends.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/tone.d.ts +29 -0
- package/dist/lib/tone.d.ts.map +1 -0
- package/dist/lib/tone.js +97 -0
- package/dist/lib/tone.js.map +1 -0
- package/dist/lib/trends.d.ts +15 -0
- package/dist/lib/trends.d.ts.map +1 -0
- package/dist/lib/trends.js +36 -0
- package/dist/lib/trends.js.map +1 -0
- package/dist/locales/codes.d.ts +14 -0
- package/dist/locales/codes.d.ts.map +1 -0
- package/dist/locales/codes.js +21 -0
- package/dist/locales/codes.js.map +1 -0
- package/dist/locales/ja.d.ts +785 -0
- package/dist/locales/ja.d.ts.map +1 -0
- package/dist/locales/ja.js +791 -0
- package/dist/locales/ja.js.map +1 -0
- package/dist/words/api-error.d.ts +4 -0
- package/dist/words/api-error.d.ts.map +1 -0
- package/dist/words/api-error.js +13 -0
- package/dist/words/api-error.js.map +1 -0
- package/dist/words/attempts.d.ts +17 -0
- package/dist/words/attempts.d.ts.map +1 -0
- package/dist/words/attempts.js +26 -0
- package/dist/words/attempts.js.map +1 -0
- package/dist/words/causes.d.ts +33 -0
- package/dist/words/causes.d.ts.map +1 -0
- package/dist/words/causes.js +58 -0
- package/dist/words/causes.js.map +1 -0
- package/dist/words/changes.d.ts +9 -0
- package/dist/words/changes.d.ts.map +1 -0
- package/dist/words/changes.js +23 -0
- package/dist/words/changes.js.map +1 -0
- package/dist/words/claims.d.ts +9 -0
- package/dist/words/claims.d.ts.map +1 -0
- package/dist/words/claims.js +12 -0
- package/dist/words/claims.js.map +1 -0
- package/dist/words/context.d.ts +18 -0
- package/dist/words/context.d.ts.map +1 -0
- package/dist/words/context.js +39 -0
- package/dist/words/context.js.map +1 -0
- package/dist/words/contract.d.ts +25 -0
- package/dist/words/contract.d.ts.map +1 -0
- package/dist/words/contract.js +52 -0
- package/dist/words/contract.js.map +1 -0
- package/dist/words/credential.d.ts +5 -0
- package/dist/words/credential.d.ts.map +1 -0
- package/dist/words/credential.js +7 -0
- package/dist/words/credential.js.map +1 -0
- package/dist/words/executor.d.ts +12 -0
- package/dist/words/executor.d.ts.map +1 -0
- package/dist/words/executor.js +20 -0
- package/dist/words/executor.js.map +1 -0
- package/dist/words/export.d.ts +8 -0
- package/dist/words/export.d.ts.map +1 -0
- package/dist/words/export.js +17 -0
- package/dist/words/export.js.map +1 -0
- package/dist/words/format.d.ts +36 -0
- package/dist/words/format.d.ts.map +1 -0
- package/dist/words/format.js +109 -0
- package/dist/words/format.js.map +1 -0
- package/dist/words/hops.d.ts +12 -0
- package/dist/words/hops.d.ts.map +1 -0
- package/dist/words/hops.js +27 -0
- package/dist/words/hops.js.map +1 -0
- package/dist/words/hosts.d.ts +18 -0
- package/dist/words/hosts.d.ts.map +1 -0
- package/dist/words/hosts.js +22 -0
- package/dist/words/hosts.js.map +1 -0
- package/dist/words/index.d.ts +28 -0
- package/dist/words/index.d.ts.map +1 -0
- package/dist/words/index.js +32 -0
- package/dist/words/index.js.map +1 -0
- package/dist/words/models.d.ts +10 -0
- package/dist/words/models.d.ts.map +1 -0
- package/dist/words/models.js +45 -0
- package/dist/words/models.js.map +1 -0
- package/dist/words/outcome.d.ts +14 -0
- package/dist/words/outcome.d.ts.map +1 -0
- package/dist/words/outcome.js +58 -0
- package/dist/words/outcome.js.map +1 -0
- package/dist/words/panels.d.ts +17 -0
- package/dist/words/panels.d.ts.map +1 -0
- package/dist/words/panels.js +63 -0
- package/dist/words/panels.js.map +1 -0
- package/dist/words/passes.d.ts +11 -0
- package/dist/words/passes.d.ts.map +1 -0
- package/dist/words/passes.js +13 -0
- package/dist/words/passes.js.map +1 -0
- package/dist/words/preflight.d.ts +28 -0
- package/dist/words/preflight.d.ts.map +1 -0
- package/dist/words/preflight.js +30 -0
- package/dist/words/preflight.js.map +1 -0
- package/dist/words/priority.d.ts +5 -0
- package/dist/words/priority.d.ts.map +1 -0
- package/dist/words/priority.js +7 -0
- package/dist/words/priority.js.map +1 -0
- package/dist/words/prompt.d.ts +10 -0
- package/dist/words/prompt.d.ts.map +1 -0
- package/dist/words/prompt.js +17 -0
- package/dist/words/prompt.js.map +1 -0
- package/dist/words/quota.d.ts +35 -0
- package/dist/words/quota.d.ts.map +1 -0
- package/dist/words/quota.js +102 -0
- package/dist/words/quota.js.map +1 -0
- package/dist/words/rests.d.ts +26 -0
- package/dist/words/rests.d.ts.map +1 -0
- package/dist/words/rests.js +77 -0
- package/dist/words/rests.js.map +1 -0
- package/dist/words/rounds.d.ts +14 -0
- package/dist/words/rounds.d.ts.map +1 -0
- package/dist/words/rounds.js +60 -0
- package/dist/words/rounds.js.map +1 -0
- package/dist/words/row-extras.d.ts +7 -0
- package/dist/words/row-extras.d.ts.map +1 -0
- package/dist/words/row-extras.js +26 -0
- package/dist/words/row-extras.js.map +1 -0
- package/dist/words/run-line.d.ts +40 -0
- package/dist/words/run-line.d.ts.map +1 -0
- package/dist/words/run-line.js +66 -0
- package/dist/words/run-line.js.map +1 -0
- package/dist/words/services.d.ts +16 -0
- package/dist/words/services.d.ts.map +1 -0
- package/dist/words/services.js +45 -0
- package/dist/words/services.js.map +1 -0
- package/dist/words/stop.d.ts +6 -0
- package/dist/words/stop.d.ts.map +1 -0
- package/dist/words/stop.js +69 -0
- package/dist/words/stop.js.map +1 -0
- package/dist/words/table.d.ts +4 -0
- package/dist/words/table.d.ts.map +1 -0
- package/dist/words/table.js +8 -0
- package/dist/words/table.js.map +1 -0
- package/dist/words/task-definition.d.ts +23 -0
- package/dist/words/task-definition.d.ts.map +1 -0
- package/dist/words/task-definition.js +27 -0
- package/dist/words/task-definition.js.map +1 -0
- package/dist/words/time-box.d.ts +8 -0
- package/dist/words/time-box.d.ts.map +1 -0
- package/dist/words/time-box.js +12 -0
- package/dist/words/time-box.js.map +1 -0
- package/dist/words/trends.d.ts +86 -0
- package/dist/words/trends.d.ts.map +1 -0
- package/dist/words/trends.js +104 -0
- package/dist/words/trends.js.map +1 -0
- package/docs/embed.md +121 -0
- package/docs/events.md +38 -0
- package/docs/examples/embed.html +31 -0
- package/docs/examples/journal.ts +32 -0
- package/docs/examples/live-transcript.ts +22 -0
- package/docs/examples/vite/index.html +30 -0
- package/docs/examples/vite/main.ts +23 -0
- package/docs/languages.md +48 -0
- package/docs/live-data.md +17 -0
- package/docs/theming.md +21 -0
- package/docs/tsconfig.json +14 -0
- package/package.json +131 -4
- package/src/adapters/check-rows.ts +81 -0
- package/src/adapters/filters.ts +76 -0
- package/src/adapters/graph/compound.ts +359 -0
- package/src/adapters/graph/flow-index.ts +154 -0
- package/src/adapters/graph/highlight.ts +40 -0
- package/src/adapters/graph/input.ts +236 -0
- package/src/adapters/graph/layer.ts +92 -0
- package/src/adapters/graph/matrix.ts +133 -0
- package/src/adapters/graph/plans.fixture.ts +194 -0
- package/src/adapters/graph/project.ts +358 -0
- package/src/adapters/graph/selection.ts +54 -0
- package/src/adapters/graph/states.ts +10 -0
- package/src/adapters/graph/types.ts +148 -0
- package/src/adapters/graph/words.ts +146 -0
- package/src/adapters/index.ts +22 -0
- package/src/adapters/journal-columns.ts +200 -0
- package/src/adapters/kpi-tiles.ts +211 -0
- package/src/adapters/lanes.ts +98 -0
- package/src/adapters/model-shares.ts +62 -0
- package/src/adapters/panel-body.ts +112 -0
- package/src/adapters/preflight.ts +27 -0
- package/src/adapters/task-columns.ts +120 -0
- package/src/adapters/transcript/index.ts +14 -0
- package/src/adapters/transcript/model.ts +156 -0
- package/src/adapters/transcript/rounds.ts +86 -0
- package/src/adapters/transcript/sections.ts +82 -0
- package/src/adapters/transcript/web.ts +40 -0
- package/src/adapters/transcript/who.ts +53 -0
- package/src/adapters/trends.ts +337 -0
- package/src/controllers/locale.ts +47 -0
- package/src/controllers/shortcuts.ts +69 -0
- package/src/controllers/stream.ts +103 -0
- package/src/controllers/task-detail.ts +54 -0
- package/src/controllers/theme.ts +73 -0
- package/src/core/events.ts +120 -0
- package/src/core/i18n.ts +76 -0
- package/src/core/index.ts +6 -0
- package/src/core/memory.ts +177 -0
- package/src/core/scroll.ts +73 -0
- package/src/core/view-route.ts +177 -0
- package/src/core/view-router.ts +66 -0
- package/src/define/all.ts +13 -0
- package/src/define/contracts.ts +2 -0
- package/src/define/definitions.ts +3 -0
- package/src/define/journal-table.ts +2 -0
- package/src/define/kpis.ts +2 -0
- package/src/define/monitor.ts +2 -0
- package/src/define/overview.ts +2 -0
- package/src/define/pipeline-graph.ts +2 -0
- package/src/define/procs.ts +3 -0
- package/src/define/task-table.ts +2 -0
- package/src/define/task-view.ts +2 -0
- package/src/define/timeline.ts +2 -0
- package/src/define/transcript.ts +2 -0
- package/src/elements/lists/ca-contracts.ts +204 -0
- package/src/elements/lists/ca-definitions.ts +170 -0
- package/src/elements/lists/ca-journal-table.ts +141 -0
- package/src/elements/lists/ca-panel-body.ts +200 -0
- package/src/elements/lists/ca-panel-view.ts +50 -0
- package/src/elements/lists/ca-proc-tree.ts +57 -0
- package/src/elements/lists/ca-procs-view.ts +89 -0
- package/src/elements/lists/ca-task-table.ts +94 -0
- package/src/elements/lists/index.ts +8 -0
- package/src/elements/overview/ca-kpis.ts +51 -0
- package/src/elements/overview/ca-model-usage.ts +113 -0
- package/src/elements/overview/ca-overview.ts +499 -0
- package/src/elements/overview/ca-pipeline-graph.ts +617 -0
- package/src/elements/overview/ca-quota.ts +164 -0
- package/src/elements/overview/ca-run-driver.ts +140 -0
- package/src/elements/overview/ca-services.ts +66 -0
- package/src/elements/overview/ca-spend-breakdown.ts +107 -0
- package/src/elements/overview/ca-timeline.ts +57 -0
- package/src/elements/overview/ca-workers.ts +82 -0
- package/src/elements/overview/index.ts +10 -0
- package/src/elements/overview/pipeline-graph/actions.ts +45 -0
- package/src/elements/overview/pipeline-graph/crumbs.ts +75 -0
- package/src/elements/overview/pipeline-graph/host.ts +26 -0
- package/src/elements/overview/pipeline-graph/inspector.ts +104 -0
- package/src/elements/overview/pipeline-graph/outline.ts +150 -0
- package/src/elements/overview/pipeline-graph/strings.ts +53 -0
- package/src/elements/overview/pipeline-graph/styles.ts +97 -0
- package/src/elements/shared/ca-definition.ts +206 -0
- package/src/elements/shared/contract-parts.ts +174 -0
- package/src/elements/shared/file-card.ts +49 -0
- package/src/elements/shared/prompt-text.ts +13 -0
- package/src/elements/shared/task-chip.ts +18 -0
- package/src/elements/shell/ca-clock.ts +27 -0
- package/src/elements/shell/ca-hosts.ts +93 -0
- package/src/elements/shell/ca-monitor.ts +528 -0
- package/src/elements/shell/ca-run-picker.ts +284 -0
- package/src/elements/shell/ca-theme-switch.ts +170 -0
- package/src/elements/shell/ca-toasts.ts +100 -0
- package/src/elements/shell/header.ts +45 -0
- package/src/elements/shell/styles.ts +72 -0
- package/src/elements/shell/tabs.ts +143 -0
- package/src/elements/shell/views.ts +67 -0
- package/src/elements/task/ca-task-view.ts +157 -0
- package/src/elements/task/ca-transcript.ts +214 -0
- package/src/elements/task/context.ts +105 -0
- package/src/elements/task/header.ts +296 -0
- package/src/elements/task/index.ts +2 -0
- package/src/elements/task/inputs.ts +46 -0
- package/src/elements/task/panes/definition.ts +7 -0
- package/src/elements/task/panes/io.ts +190 -0
- package/src/elements/task/panes/transcript.ts +29 -0
- package/src/elements/task/styles.ts +66 -0
- package/src/elements/trends/ca-trends.ts +204 -0
- package/src/index.ts +23 -0
- package/src/lib/tone.ts +109 -0
- package/src/lib/trends.ts +44 -0
- package/src/locales/codes.ts +23 -0
- package/src/locales/ja.ts +795 -0
- package/src/words/api-error.ts +17 -0
- package/src/words/attempts.ts +28 -0
- package/src/words/causes.ts +67 -0
- package/src/words/changes.ts +29 -0
- package/src/words/claims.ts +16 -0
- package/src/words/context.ts +47 -0
- package/src/words/contract.ts +63 -0
- package/src/words/credential.ts +8 -0
- package/src/words/executor.ts +22 -0
- package/src/words/export.ts +22 -0
- package/src/words/format.ts +107 -0
- package/src/words/hops.ts +30 -0
- package/src/words/hosts.ts +37 -0
- package/src/words/index.ts +31 -0
- package/src/words/models.ts +50 -0
- package/src/words/outcome.ts +61 -0
- package/src/words/panels.ts +71 -0
- package/src/words/passes.ts +18 -0
- package/src/words/preflight.ts +53 -0
- package/src/words/priority.ts +8 -0
- package/src/words/prompt.ts +20 -0
- package/src/words/quota.ts +108 -0
- package/src/words/rests.ts +96 -0
- package/src/words/rounds.ts +56 -0
- package/src/words/row-extras.ts +24 -0
- package/src/words/run-line.ts +77 -0
- package/src/words/services.ts +57 -0
- package/src/words/stop.ts +65 -0
- package/src/words/table.ts +10 -0
- package/src/words/task-definition.ts +37 -0
- package/src/words/time-box.ts +21 -0
- package/src/words/trends.ts +118 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// What the pipeline graph does: the events it sends for a selection, a layer and a task.
|
|
2
|
+
import { emit } from '../../../core/events.js';
|
|
3
|
+
import { parentLayer } from '../../../adapters/graph/layer.js';
|
|
4
|
+
import type { Selected } from '../../../adapters/graph/selection.js';
|
|
5
|
+
import type { GraphNode, LayerMark } from '../../../adapters/graph/types.js';
|
|
6
|
+
import type { PipelineHost } from './host.js';
|
|
7
|
+
|
|
8
|
+
/** Select a node, a loop box or a mark (by its selection id); '' clears the selection. */
|
|
9
|
+
export function select(h: PipelineHost, id: string): void {
|
|
10
|
+
if (id !== h.sel) emit(h.el, 'ca-navigate', { sel: id });
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/** Go to a layer (its segments; [] for the layer the graph opens on), with a unit highlighted or not. */
|
|
14
|
+
export function go(h: PipelineHost, segments: readonly string[], unit = h.unit): void {
|
|
15
|
+
const layer = segments.join('/');
|
|
16
|
+
emit(h.el, 'ca-navigate', { layer: layer === h.auto.join('/') ? '' : layer, unit });
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** The Tasks tab, filtered to a kind node's kind. */
|
|
20
|
+
export function tasksOf(h: PipelineHost, n: GraphNode): void {
|
|
21
|
+
emit(h.el, 'ca-navigate', { tab: 'tasks', kind: n.kinds.length === 1 ? n.kinds[0] : '' });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Open a mark of `node`: a task (on its input when it did not start, a Python task on its output), or a flow call's function. */
|
|
25
|
+
export function open(h: PipelineHost, m: LayerMark, node?: GraphNode): void {
|
|
26
|
+
if (m.flow) return go(h, [...(node?.layer ?? h.graph.path), m.flow], m.unit || h.unit);
|
|
27
|
+
const t = h.links.byKey.get(m.key);
|
|
28
|
+
emit(h.el, 'ca-open-task', m.state === 'blocked' ? { key: m.key, view: 'input' } : t?.executor === 'python' ? { key: m.key, view: 'output' } : { key: m.key });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** What a double click or Enter does: a mark opens its task (or its flow call's function), a function node or a loop box opens inside, a kind node its tasks. */
|
|
32
|
+
export function primary(h: PipelineHost, s: Selected): void {
|
|
33
|
+
if (s.type === 'mark') return open(h, s.mark, s.node);
|
|
34
|
+
if (s.type === 'box') return go(h, [...s.box.layer, s.box.local]);
|
|
35
|
+
if (s.node.type === 'flow') return go(h, [...s.node.layer, s.node.name]);
|
|
36
|
+
tasksOf(h, s.node);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** "Graph" in a loop's passes: the layer the loop is in, with its box selected. */
|
|
40
|
+
export function leavePasses(h: PipelineHost): void {
|
|
41
|
+
const box = h.segments[h.segments.length - 1] ?? '';
|
|
42
|
+
const up = parentLayer(h.segments, h.auto) ?? [];
|
|
43
|
+
const auto = h.auto.join('/');
|
|
44
|
+
emit(h.el, 'ca-navigate', { layer: up.join('/') === auto ? '' : up.join('/'), unit: h.unit, sel: box });
|
|
45
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
// The line above the frame: where the layer is, the pinned unit, and a layer the run does not have.
|
|
2
|
+
import { msg, str } from '@lit/localize';
|
|
3
|
+
import { html, nothing, type TemplateResult } from 'lit';
|
|
4
|
+
import { shortName } from '../../../adapters/graph/flow-index.js';
|
|
5
|
+
import { splitLayer } from '../../../adapters/graph/layer.js';
|
|
6
|
+
import { LOOP_SEGMENT } from '../../../adapters/graph/types.js';
|
|
7
|
+
import { where } from '../../../adapters/graph/words.js';
|
|
8
|
+
import { emit } from '../../../core/events.js';
|
|
9
|
+
import { go } from './actions.js';
|
|
10
|
+
import type { PipelineHost } from './host.js';
|
|
11
|
+
|
|
12
|
+
/** Which functions are drawn open: those the graph chooses, every one, or only those the reader opened. */
|
|
13
|
+
export type OpenMode = 'auto' | 'all' | 'none';
|
|
14
|
+
|
|
15
|
+
/** "Show all inside" and "Hide all inside": each sets its mode, and, pressed again, gives the choice back to the graph. */
|
|
16
|
+
export function openControls(mode: OpenMode, set: (m: OpenMode) => void): TemplateResult {
|
|
17
|
+
const button = (m: OpenMode, label: string) =>
|
|
18
|
+
html`<button type="button" class="switch" aria-pressed=${mode === m} @click=${() => set(mode === m ? 'auto' : m)}>${label}</button>`;
|
|
19
|
+
return html`<span class="opens">${button('all', msg('Show all inside'))}${button('none', msg('Hide all inside'))}</span>`;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Where the layer is: "Pipeline", then every level down to the one shown, auto-descended
|
|
24
|
+
* levels included; a nested loop's box is a level below the box it is in. `controls`
|
|
25
|
+
* (the open controls) end the line.
|
|
26
|
+
*/
|
|
27
|
+
export function crumbs(h: PipelineHost, controls: TemplateResult | null = null) {
|
|
28
|
+
const segs = h.segments;
|
|
29
|
+
const pinned = h.unit;
|
|
30
|
+
if (!segs.length && !pinned && !controls) return nothing;
|
|
31
|
+
const { path, loop } = splitLayer(segs);
|
|
32
|
+
const levels = [
|
|
33
|
+
...path.map((fn, i) => ({ name: shortName(fn), tip: fn, to: path.slice(0, i + 1) })),
|
|
34
|
+
// A loop by where it is: two loops one in the other are told apart.
|
|
35
|
+
...(loop ? loop.slice(LOOP_SEGMENT.length).split('.') : []).map((line, i, lines) => {
|
|
36
|
+
const id = LOOP_SEGMENT + lines.slice(0, i + 1).join('.');
|
|
37
|
+
const file = h.graph.boxes.find((b) => b.id === id)?.file || h.matrix?.box.file || '';
|
|
38
|
+
const known = /^\d+$/.test(line);
|
|
39
|
+
return {
|
|
40
|
+
name: known ? msg(str`Loop at ${where(line, file)}`) : msg('Loop'),
|
|
41
|
+
tip: known && file ? `${file}:${line}` : '',
|
|
42
|
+
to: [...path, id],
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
];
|
|
46
|
+
return html`<div class="bar">
|
|
47
|
+
${segs.length
|
|
48
|
+
? html`<nav aria-label=${msg('Pipeline layer')}>
|
|
49
|
+
<ol class="crumbs">
|
|
50
|
+
<li><button type="button" @click=${() => go(h, [])}>${msg('Pipeline')}</button></li>
|
|
51
|
+
${levels.map((l, i) => {
|
|
52
|
+
const last = i === levels.length - 1;
|
|
53
|
+
return html`<li><span class="sep" aria-hidden="true">›</span>
|
|
54
|
+
${last
|
|
55
|
+
? html`<span aria-current="page" title=${l.tip || nothing}>${l.name}</span>`
|
|
56
|
+
: html`<button type="button" title=${l.tip || nothing} @click=${() => go(h, l.to)}>${l.name}</button>`}</li>`;
|
|
57
|
+
})}
|
|
58
|
+
</ol>
|
|
59
|
+
</nav>`
|
|
60
|
+
: nothing}
|
|
61
|
+
${pinned
|
|
62
|
+
? html`<span class="pin">${msg(str`Unit: ${pinned}`)}
|
|
63
|
+
<button type="button" class="switch" @click=${() => emit(h.el, 'ca-navigate', { unit: '' })}>${msg('Clear highlight')}</button></span>`
|
|
64
|
+
: nothing}
|
|
65
|
+
${controls ?? nothing}
|
|
66
|
+
</div>`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** The layer the view route named that this run does not have. */
|
|
70
|
+
export function missingLine(missing: string) {
|
|
71
|
+
if (!missing) return nothing;
|
|
72
|
+
const segs = missing.split('/');
|
|
73
|
+
const name = segs[segs.length - 1] || missing;
|
|
74
|
+
return html`<div class="missing" role="status" title=${missing}>${msg(html`No layer <code>${name}</code> in this run`)}</div>`;
|
|
75
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// What the pipeline graph's parts read from `ca-pipeline-graph`: the run, the layer
|
|
2
|
+
// shown, and its model as the plan has it (the generic graph draws it).
|
|
3
|
+
import type { JournalRow, Plan } from '@contraagent/api';
|
|
4
|
+
import type { TaskLinks } from '../../../adapters/graph/highlight.js';
|
|
5
|
+
import type { PassMatrix } from '../../../adapters/graph/matrix.js';
|
|
6
|
+
import type { LayerGraph } from '../../../adapters/graph/types.js';
|
|
7
|
+
|
|
8
|
+
export interface PipelineHost {
|
|
9
|
+
readonly el: HTMLElement;
|
|
10
|
+
readonly plan: Plan;
|
|
11
|
+
readonly journal: readonly JournalRow[];
|
|
12
|
+
/** The run id: paths in a cause are shown relative to it. */
|
|
13
|
+
readonly run: string;
|
|
14
|
+
readonly live: boolean;
|
|
15
|
+
/** The view route's selection and pinned unit. */
|
|
16
|
+
readonly sel: string;
|
|
17
|
+
readonly unit: string;
|
|
18
|
+
/** The layer shown (its segments), and the layer the graph opens on. */
|
|
19
|
+
readonly segments: readonly string[];
|
|
20
|
+
readonly auto: readonly string[];
|
|
21
|
+
/** The layer, arranged as it is drawn. */
|
|
22
|
+
readonly graph: LayerGraph;
|
|
23
|
+
/** A loop's passes, when the layer shown is a loop. */
|
|
24
|
+
readonly matrix: PassMatrix | null;
|
|
25
|
+
readonly links: TaskLinks;
|
|
26
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
// The selection's card: what is selected, its facts and where it leads. The
|
|
2
|
+
// generic graph places it beside the item (its `inspector` slot).
|
|
3
|
+
import { isLaunched } from '@contraagent/api';
|
|
4
|
+
import { cycleIcon, innerIcon } from '@contraagent/elements/graph';
|
|
5
|
+
import { toneAttr } from '@contraagent/elements';
|
|
6
|
+
import { msg, str } from '@lit/localize';
|
|
7
|
+
import { html, nothing } from 'lit';
|
|
8
|
+
import { shortName } from '../../../adapters/graph/flow-index.js';
|
|
9
|
+
import { causeOf } from '../../../adapters/graph/input.js';
|
|
10
|
+
import type { Selected } from '../../../adapters/graph/selection.js';
|
|
11
|
+
import { doneOf, exceptions, executorWord, neighbours, notDone, stateWord, taskStateStyles, where } from '../../../adapters/graph/words.js';
|
|
12
|
+
import { executorIcon } from '../../../words/executor.js';
|
|
13
|
+
import { fmtDur, kindUnit, listText, usd } from '../../../words/format.js';
|
|
14
|
+
import { deadlineAtText, passCount, passLabel, passSpread, passesRan, timeBoxFacts, timeBoxTip } from '../../../words/index.js';
|
|
15
|
+
import { primary, select, tasksOf } from './actions.js';
|
|
16
|
+
import type { PipelineHost } from './host.js';
|
|
17
|
+
|
|
18
|
+
/** The selection's card content, for the graph's `inspector` slot: its heading names the item, `[data-status]` its status. */
|
|
19
|
+
export function inspector(h: PipelineHost, s: Selected) {
|
|
20
|
+
return html`<div slot="inspector" class="card">${inspect(h, s)}</div>`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function inspect(h: PipelineHost, s: Selected) {
|
|
24
|
+
const row = (dt: string, dd: unknown) => html`<dt>${dt}</dt><dd>${dd}</dd>`;
|
|
25
|
+
const link = (text: string, go: () => void, primary = false) =>
|
|
26
|
+
html`<button type="button" class="go ${primary ? 'primary' : ''}" @click=${go}>${text}</button>`;
|
|
27
|
+
const clear = html`<button type="button" class="switch" @click=${() => select(h, '')}>${msg('Clear selection')}</button>`;
|
|
28
|
+
const list = (xs: string[]) => (xs.length ? listText(xs) : msg('none', { id: 'none', desc: 'An empty value' }));
|
|
29
|
+
if (s.type === 'box') {
|
|
30
|
+
const b = s.box;
|
|
31
|
+
const at = where(b.loop, b.file);
|
|
32
|
+
return html`<h4 title=${b.file ? `${b.file}:${b.loop}` : nothing}>${cycleIcon(16)}${msg(str`Loop at ${at}`)}</h4>
|
|
33
|
+
<dl>
|
|
34
|
+
${row(msg('Passes'), passCount(b.passes))}
|
|
35
|
+
${b.spread.length > 1 ? row(msg('Units by number of passes'), passSpread(b.spread)) : nothing}
|
|
36
|
+
</dl>
|
|
37
|
+
<div class="acts">${link(msg(str`Passes of the loop at ${at}`), () => primary(h, s), true)}${clear}</div>`;
|
|
38
|
+
}
|
|
39
|
+
if (s.type === 'node') {
|
|
40
|
+
const n = s.node;
|
|
41
|
+
const c = n.counts;
|
|
42
|
+
const { waits, after, feeds } = neighbours(n, h.graph);
|
|
43
|
+
const states = exceptions(n, h.live).map(([cls, t]) => html`<div class=${cls}>${t}</div>`);
|
|
44
|
+
if (n.type === 'flow') {
|
|
45
|
+
return html`<h4 title=${n.name}>${innerIcon()}${n.label}</h4>
|
|
46
|
+
<div class="sub">${msg('Function')}</div>
|
|
47
|
+
<dl>
|
|
48
|
+
${row(msg('Flow calls'), n.calls)}
|
|
49
|
+
${n.timeBox ? row(msg('Deadline'), html`<span title=${timeBoxTip()}>${timeBoxFacts(n.timeBox)}</span>`) : nothing}
|
|
50
|
+
${row(msg('Tasks', { id: 'tasks', desc: 'A count of tasks' }), html`${doneOf(c)}${states}`)}
|
|
51
|
+
${row(msg('Waits for'), list(waits))}
|
|
52
|
+
${after.length ? row(msg('Created after'), list(after)) : nothing}
|
|
53
|
+
${row(msg('Later tasks'), list(feeds))}
|
|
54
|
+
</dl>
|
|
55
|
+
<div class="acts">${link(msg(str`Inside ${n.label}`), () => primary(h, s), true)}${clear}</div>`;
|
|
56
|
+
}
|
|
57
|
+
return html`<h4>${n.executor && n.executor !== 'mixed' ? executorIcon(n.executor === 'python') : nothing}${n.label}</h4>
|
|
58
|
+
<div class="sub">${executorWord(n)}</div>
|
|
59
|
+
<dl>
|
|
60
|
+
${n.kinds.length > 1 ? row(msg('Kinds'), listText(n.kinds)) : nothing}
|
|
61
|
+
${row(msg('Tasks', { id: 'tasks', desc: 'A count of tasks' }), html`${doneOf(c)}${states}`)}
|
|
62
|
+
${row(msg('Waits for'), list(waits))}
|
|
63
|
+
${after.length ? row(msg('Created after'), list(after)) : nothing}
|
|
64
|
+
${row(msg('Later tasks'), list(feeds))}
|
|
65
|
+
</dl>
|
|
66
|
+
<div class="acts">${link(msg(str`Tasks of ${n.label}`), () => primary(h, s), true)}${clear}</div>`;
|
|
67
|
+
}
|
|
68
|
+
const { node, mark: m, passes } = s;
|
|
69
|
+
const task = m.flow || m.count !== 1 ? undefined : h.links.byKey.get(m.key);
|
|
70
|
+
const name = kindUnit({ kind: task?.kind ?? node.label, unit: m.unit });
|
|
71
|
+
const cause = !m.flow && m.state === 'blocked' ? causeOf(h)(m.key) : '';
|
|
72
|
+
const status = html`<span data-status class=${m.state === 'failed' ? 'err' : m.state === 'blocked' || m.state === 'partial' ? 'warn' : ''}>${stateWord(m.state, h.live)}</span>`;
|
|
73
|
+
const look = taskStateStyles(h.live)[m.state];
|
|
74
|
+
const head = html`<h4 title=${m.flow ? msg(str`Flow call ${m.key}`) : m.key}><i class="mark" data-tone=${toneAttr(look?.tone)} data-shape=${look?.shape ?? nothing} aria-hidden="true"></i>${name}</h4>`;
|
|
75
|
+
const pass = passes.length ? listText(passes.map(passLabel)) : m.passes ? passesRan(m.passes) : '';
|
|
76
|
+
if (m.flow) {
|
|
77
|
+
const c = m.counts;
|
|
78
|
+
return html`${head}
|
|
79
|
+
<dl>
|
|
80
|
+
${row(msg('Status', { id: 'status', desc: 'The status of a task: done, failed, not started' }), status)}
|
|
81
|
+
${pass ? row(msg('Pass'), pass) : nothing}
|
|
82
|
+
${m.deadlineAt ? row(msg('Deadline'), html`<span title=${timeBoxTip()}>${deadlineAtText(m.deadlineAt)}</span>`) : nothing}
|
|
83
|
+
${c ? row(msg('Tasks', { id: 'tasks', desc: 'A count of tasks' }), html`${doneOf(c)}${notDone(c, h.live).map((t) => html`<div>${t}</div>`)}`) : nothing}
|
|
84
|
+
${m.error !== undefined ? row(msg('Error'), html`<span class="err">${m.error || msg('Flow call stopped with an error')}</span>`) : nothing}
|
|
85
|
+
</dl>
|
|
86
|
+
<div class="acts">${link(msg(str`Inside ${shortName(m.flow)}`), () => primary(h, s), true)}${clear}</div>`;
|
|
87
|
+
}
|
|
88
|
+
const rows = h.journal.filter((r) => m.keys.includes(r.key));
|
|
89
|
+
const ran = rows.filter(isLaunched);
|
|
90
|
+
const costs = ran.map((r) => r.cost_usd).filter((x): x is number => typeof x === 'number');
|
|
91
|
+
const wall = ran.reduce((a, r) => a + (r.wall_s ?? 0), 0);
|
|
92
|
+
return html`${head}
|
|
93
|
+
<dl>
|
|
94
|
+
${row(msg('Status', { id: 'status', desc: 'The status of a task: done, failed, not started' }), cause ? html`${status}<div>${cause}</div>` : status)}
|
|
95
|
+
${pass ? row(msg('Pass'), pass) : nothing}
|
|
96
|
+
${m.count > 1 ? row(msg('Tasks', { id: 'tasks', desc: 'A count of tasks' }), msg(str`${m.count} tasks`)) : nothing}
|
|
97
|
+
${row(msg('Attempts'), ran.length || msg('none', { id: 'none', desc: 'An empty value' }))}
|
|
98
|
+
${row(msg('Time'), ran.length ? fmtDur(wall) : msg('none', { id: 'none', desc: 'An empty value' }))}
|
|
99
|
+
${row(msg('Cost'), costs.length ? usd(costs.reduce((a, x) => a + x, 0)) : '—')}
|
|
100
|
+
</dl>
|
|
101
|
+
<div class="acts">${link(msg('Task detail'), () => primary(h, s), true)}${node.kinds.length === 1
|
|
102
|
+
? link(msg(str`Tasks of ${node.label}`), () => tasksOf(h, node))
|
|
103
|
+
: nothing}${clear}</div>`;
|
|
104
|
+
}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
// The outline beside the pipeline graph: every function of the run's flow, and the loops
|
|
2
|
+
// they are in, as a tree, each with its tasks done of its tasks and what is not done. It
|
|
3
|
+
// shows the whole flow at once, whatever the graph draws open; the graph shows how its
|
|
4
|
+
// parts connect.
|
|
5
|
+
import { cycleIcon } from '@contraagent/elements/graph';
|
|
6
|
+
import { msg, str } from '@lit/localize';
|
|
7
|
+
import { html, nothing } from 'lit';
|
|
8
|
+
import type { PlaceStats } from '../../../adapters/graph/compound.js';
|
|
9
|
+
import { shortName } from '../../../adapters/graph/flow-index.js';
|
|
10
|
+
import { LOOP_SEGMENT, type NodeCounts } from '../../../adapters/graph/types.js';
|
|
11
|
+
import { doneOf, exceptions, where } from '../../../adapters/graph/words.js';
|
|
12
|
+
|
|
13
|
+
/** An item of the outline: a function (its place) or a loop of the layer it is in. */
|
|
14
|
+
export interface OutlineItem {
|
|
15
|
+
/** A function's place key; a loop's `<layer>|loop:<line>`. */
|
|
16
|
+
id: string;
|
|
17
|
+
type: 'fn' | 'loop';
|
|
18
|
+
label: string;
|
|
19
|
+
tip: string;
|
|
20
|
+
/** The layer it is in (function names, outermost first). */
|
|
21
|
+
layer: string[];
|
|
22
|
+
/** A function: its name; a loop: its segment (`loop:12`, `loop:12.30`). */
|
|
23
|
+
name: string;
|
|
24
|
+
counts: NodeCounts;
|
|
25
|
+
errors: boolean;
|
|
26
|
+
kids: OutlineItem[];
|
|
27
|
+
/**
|
|
28
|
+
* The functions it stands for, outermost first: itself, then, for a chain of functions
|
|
29
|
+
* each the only function in the layer of the one before, the rest of the chain (as the
|
|
30
|
+
* graph draws it in one box). Going into it goes into the last.
|
|
31
|
+
*/
|
|
32
|
+
parts: { id: string; layer: string[]; name: string }[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const ZERO = (): NodeCounts => ({ total: 0, done: 0, partial: 0, failed: 0, running: 0, pending: 0, skipped: 0, blocked: 0 });
|
|
36
|
+
|
|
37
|
+
/** The outline of the flow: the places of `stats` (from the top of the flow) as a tree, a loop an item around the places in it. */
|
|
38
|
+
export function outlineTree(stats: ReadonlyMap<string, PlaceStats>): OutlineItem[] {
|
|
39
|
+
const kidsOf = new Map<string | null, PlaceStats[]>();
|
|
40
|
+
for (const s of stats.values()) (kidsOf.get(s.parent) ?? kidsOf.set(s.parent, []).get(s.parent))?.push(s);
|
|
41
|
+
const build = (parent: string | null): OutlineItem[] => {
|
|
42
|
+
const out: OutlineItem[] = [];
|
|
43
|
+
const loops = new Map<string, OutlineItem>();
|
|
44
|
+
for (const s of kidsOf.get(parent) ?? []) {
|
|
45
|
+
const item: OutlineItem = {
|
|
46
|
+
id: s.key,
|
|
47
|
+
type: 'fn',
|
|
48
|
+
label: shortName(s.name),
|
|
49
|
+
tip: s.name,
|
|
50
|
+
layer: s.layer,
|
|
51
|
+
name: s.name,
|
|
52
|
+
counts: s.counts,
|
|
53
|
+
errors: s.errors,
|
|
54
|
+
kids: build(s.key),
|
|
55
|
+
parts: [{ id: s.key, layer: s.layer, name: s.name }],
|
|
56
|
+
};
|
|
57
|
+
// In a loop: inside the loop's item (a nested loop's inside its outer one).
|
|
58
|
+
let into = out;
|
|
59
|
+
s.loops.forEach((_, i) => {
|
|
60
|
+
const seg = `${LOOP_SEGMENT}${s.loops.slice(0, i + 1).join('.')}`;
|
|
61
|
+
const id = `${s.layer.join('/')}|${seg}`;
|
|
62
|
+
let loop = loops.get(id);
|
|
63
|
+
if (!loop) {
|
|
64
|
+
const line = s.loops[i] as number;
|
|
65
|
+
loop = { id, type: 'loop', label: msg(str`Loop at ${where(line, s.file)}`), tip: s.file ? `${s.file}:${line}` : '', layer: s.layer, name: seg, counts: ZERO(), errors: false, kids: [], parts: [{ id, layer: s.layer, name: seg }] };
|
|
66
|
+
loops.set(id, loop);
|
|
67
|
+
into.push(loop);
|
|
68
|
+
}
|
|
69
|
+
for (const k of Object.keys(loop.counts) as (keyof NodeCounts)[]) loop.counts[k] += s.counts[k];
|
|
70
|
+
loop.errors ||= s.errors;
|
|
71
|
+
into = loop.kids;
|
|
72
|
+
});
|
|
73
|
+
into.push(item);
|
|
74
|
+
}
|
|
75
|
+
return out;
|
|
76
|
+
};
|
|
77
|
+
return build(null);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The items with each chain of single functions as one item named by its path (as the
|
|
82
|
+
* graph draws it in one box): a function whose only item is a function, with no loop
|
|
83
|
+
* between. A function on the way to the layer shown (`current`) stays an item of its own.
|
|
84
|
+
*/
|
|
85
|
+
export function chained(items: readonly OutlineItem[], current: (id: string) => boolean): OutlineItem[] {
|
|
86
|
+
const chain = (it: OutlineItem): OutlineItem => {
|
|
87
|
+
let x = it;
|
|
88
|
+
while (x.type === 'fn' && !current(x.id) && x.kids.length === 1 && x.kids[0]?.type === 'fn' && !current(x.kids[0].id)) {
|
|
89
|
+
const k = x.kids[0];
|
|
90
|
+
x = { ...x, label: `${x.label} › ${k.label}`, tip: `${x.tip}\n${k.tip}`, kids: k.kids, parts: [...x.parts, ...k.parts] };
|
|
91
|
+
}
|
|
92
|
+
return { ...x, kids: x.kids.map(chain) };
|
|
93
|
+
};
|
|
94
|
+
return items.map(chain);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** What the outline reads and does: which items are expanded, current or selected, and what a pick and Enter do. */
|
|
98
|
+
export interface OutlineHost {
|
|
99
|
+
readonly live: boolean;
|
|
100
|
+
expanded(id: string): boolean;
|
|
101
|
+
expand(id: string, on: boolean): void;
|
|
102
|
+
/** The item is on the way to the layer shown, or is it. */
|
|
103
|
+
current(id: string): boolean;
|
|
104
|
+
/** The item is the layer shown. */
|
|
105
|
+
here(id: string): boolean;
|
|
106
|
+
selected(id: string): boolean;
|
|
107
|
+
/** Show the item in the graph, selected. */
|
|
108
|
+
pick(item: OutlineItem): void;
|
|
109
|
+
/** Go into the item: a function's layer, a loop's passes. */
|
|
110
|
+
enter(item: OutlineItem): void;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/** The outline: a tree of buttons; a click shows an item in the graph, a double click or Enter goes into it. */
|
|
114
|
+
export function outline(h: OutlineHost, tree: readonly OutlineItem[]) {
|
|
115
|
+
const items = chained(tree, (id) => h.current(id));
|
|
116
|
+
const notesOf = (it: OutlineItem) => exceptions({ counts: it.counts, errors: it.errors ? 1 : 0 }, h.live);
|
|
117
|
+
// A note only where it says something the item around it does not: where the problem narrows.
|
|
118
|
+
const row = (it: OutlineItem, above = ''): unknown => {
|
|
119
|
+
const open = it.kids.length > 0 && h.expanded(it.id);
|
|
120
|
+
const c = it.counts;
|
|
121
|
+
const pct = c.total ? Math.round(((c.done + c.partial + c.skipped) / c.total) * 100) : 0;
|
|
122
|
+
const all = notesOf(it);
|
|
123
|
+
const said = all.map(([, t]) => t).join('|');
|
|
124
|
+
const notes = said === above ? [] : all;
|
|
125
|
+
const cur = it.parts.some((p) => h.current(p.id));
|
|
126
|
+
const here = it.parts.some((p) => h.here(p.id));
|
|
127
|
+
return html`<li>
|
|
128
|
+
<div class="orow ${cur ? 'cur' : ''} ${it.parts.some((p) => h.selected(p.id)) ? 'sel' : ''}">
|
|
129
|
+
${it.kids.length
|
|
130
|
+
? html`<button type="button" class="odisc" aria-expanded=${open} aria-label=${open ? msg(str`Fold ${it.label}`) : msg(str`Unfold ${it.label}`)}
|
|
131
|
+
@click=${() => h.expand(it.id, !open)}><span aria-hidden="true">${open ? '▾' : '▸'}</span></button>`
|
|
132
|
+
: html`<span class="odisc" aria-hidden="true"></span>`}
|
|
133
|
+
<button type="button" class="oname" title=${it.tip || nothing} aria-current=${here ? 'location' : nothing}
|
|
134
|
+
@click=${(e: MouseEvent) => e.detail < 2 && h.pick(it)} @dblclick=${() => h.enter(it)}
|
|
135
|
+
@keydown=${(e: KeyboardEvent) => {
|
|
136
|
+
if (e.key !== 'Enter') return;
|
|
137
|
+
e.preventDefault();
|
|
138
|
+
h.enter(it);
|
|
139
|
+
}}>
|
|
140
|
+
${it.type === 'loop' ? cycleIcon(12) : nothing}<span class="ol">${it.label}</span>
|
|
141
|
+
<span class="obar" aria-hidden="true"><i style="width:${pct}%"></i></span>
|
|
142
|
+
<span class="ocount" title=${doneOf(c)}>${c.done}/${c.total}</span>
|
|
143
|
+
</button>
|
|
144
|
+
${notes.length ? html`<div class="onote">${notes.map(([cls, text]) => html`<span class=${cls}>${text}</span>`)}</div>` : nothing}
|
|
145
|
+
</div>
|
|
146
|
+
${open ? html`<ul>${it.kids.map((k) => row(k, said))}</ul>` : nothing}
|
|
147
|
+
</li>`;
|
|
148
|
+
};
|
|
149
|
+
return html`<nav class="outline" aria-label=${msg('Outline of the flow')}><ul class="otree">${items.map((it) => row(it))}</ul></nav>`;
|
|
150
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// The generic graph's and mark matrix's words, as the pipeline graph says them.
|
|
2
|
+
import type { LayeredGraphStrings } from '@contraagent/elements/graph';
|
|
3
|
+
import type { MarkMatrixStrings } from '@contraagent/elements/matrix';
|
|
4
|
+
import { msg, str } from '@lit/localize';
|
|
5
|
+
import { listText } from '../../../words/format.js';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Every word of the graph (`up`: Escape's hint without a selection, '' at the top;
|
|
9
|
+
* `functions`: the layer has function nodes, so a row names a kind or a function); a
|
|
10
|
+
* node always has its `progress`, so the words of a node's default count are not needed.
|
|
11
|
+
*/
|
|
12
|
+
export function graphStrings(up: boolean, functions: boolean): Omit<LayeredGraphStrings, 'progress'> {
|
|
13
|
+
const enter = msg('Enter: open');
|
|
14
|
+
return {
|
|
15
|
+
graph: msg('Graph', { id: 'view-graph', desc: 'Button: show the pipeline as a graph' }),
|
|
16
|
+
table: msg('Table', { id: 'view-table', desc: 'Button: show the pipeline as a table' }),
|
|
17
|
+
view: msg('View'),
|
|
18
|
+
zoomIn: msg('Zoom in'),
|
|
19
|
+
zoomInTip: msg('Zoom in (Ctrl + scroll)'),
|
|
20
|
+
zoomOut: msg('Zoom out'),
|
|
21
|
+
zoomOutTip: msg('Zoom out (Ctrl + scroll)'),
|
|
22
|
+
showAll: msg('Show all'),
|
|
23
|
+
graphKeys: [msg('Tab: next node'), msg('Arrow keys: marks'), msg('Shift + arrow keys: earlier and later tasks'), enter],
|
|
24
|
+
tableKeys: [msg('Tab: next row'), enter],
|
|
25
|
+
matrixKeys: [msg('Arrow keys: marks'), enter],
|
|
26
|
+
clearKey: msg('Esc: clear selection'),
|
|
27
|
+
upKey: up ? msg('Esc: up a level') : '',
|
|
28
|
+
inspector: msg('Selected item'),
|
|
29
|
+
stubTip: msg('Outside this layer'),
|
|
30
|
+
more: (n) => msg(str`+${n}`),
|
|
31
|
+
badge: msg('number of passes'),
|
|
32
|
+
solidEdge: msg('waits for output'),
|
|
33
|
+
dashedEdge: msg('created after result'),
|
|
34
|
+
cycle: msg('next pass'),
|
|
35
|
+
drill: msg('has a level below'),
|
|
36
|
+
open: msg('Show inside'),
|
|
37
|
+
close: msg('Hide inside'),
|
|
38
|
+
iconNames: { agent: msg('agent task'), python: msg('Python task') },
|
|
39
|
+
nameHeader: functions ? msg('Kind or function') : msg('Kind'),
|
|
40
|
+
statusHeader: msg('Status', { id: 'status', desc: 'The status of a task: done, failed, not started' }),
|
|
41
|
+
solidHeader: msg('Waits for'),
|
|
42
|
+
dashedHeader: msg('Created after'),
|
|
43
|
+
laterHeader: msg('Later tasks'),
|
|
44
|
+
none: msg('none', { id: 'none', desc: 'An empty value' }),
|
|
45
|
+
inCluster: (label) => msg(str`${label} in the loop`),
|
|
46
|
+
list: (items) => listText(items),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** The words of a loop's passes. */
|
|
51
|
+
export function matrixStrings(): MarkMatrixStrings {
|
|
52
|
+
return { sortBy: msg('Sort units'), rowsHeader: msg('Unit') };
|
|
53
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
// The pipeline graph's own styles: the line above the graph (where the layer is, the
|
|
2
|
+
// pinned unit, a missing layer) and the card's content, which it renders into the
|
|
3
|
+
// generic graph's slots; and the executor icons the generic graph draws for it.
|
|
4
|
+
import { base, markStyles } from '@contraagent/elements/styles';
|
|
5
|
+
import { css } from 'lit';
|
|
6
|
+
import { executorIconStyles } from '../../../words/executor.js';
|
|
7
|
+
|
|
8
|
+
export const graphStyles = [
|
|
9
|
+
base,
|
|
10
|
+
executorIconStyles,
|
|
11
|
+
markStyles,
|
|
12
|
+
css`
|
|
13
|
+
/* A column: a height set on the host is the graph's, less the outline's line above it. */
|
|
14
|
+
:host { display: flex; flex-direction: column; }
|
|
15
|
+
cae-layered-graph { flex: auto; min-height: 0; }
|
|
16
|
+
|
|
17
|
+
.bar { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin-bottom: 8px; font-size: 12px; }
|
|
18
|
+
.crumbs { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; list-style: none; margin: 0; padding: 0; }
|
|
19
|
+
.crumbs li { display: inline-flex; align-items: center; gap: 4px; }
|
|
20
|
+
.crumbs .sep { color: var(--text-muted); }
|
|
21
|
+
.crumbs button { all: unset; cursor: pointer; color: var(--accent); font-family: var(--mono); }
|
|
22
|
+
.crumbs button:hover { text-decoration: underline; }
|
|
23
|
+
.crumbs button:focus-visible { outline: var(--focus-width) solid var(--focus); outline-offset: 2px; border-radius: 3px; }
|
|
24
|
+
.crumbs [aria-current] { font-family: var(--mono); color: var(--text); font-weight: 600; }
|
|
25
|
+
.pin { display: inline-flex; align-items: center; gap: 8px; color: var(--text-2); }
|
|
26
|
+
.pin b { font-family: var(--mono); }
|
|
27
|
+
.missing { margin-bottom: 8px; font-size: 12px; color: var(--status-attention); }
|
|
28
|
+
.missing code { font-family: var(--mono); }
|
|
29
|
+
|
|
30
|
+
/* The card's content: laid out by the card itself. */
|
|
31
|
+
.card { display: contents; }
|
|
32
|
+
.ic { display: block; flex: none; }
|
|
33
|
+
.loop-ic { color: var(--text-2); }
|
|
34
|
+
.in-ic { color: var(--text-muted); }
|
|
35
|
+
.card h4 { margin: 0; display: flex; align-items: center; gap: 7px; font-family: var(--mono); font-size: 13px; font-weight: 600;
|
|
36
|
+
color: var(--text); overflow-wrap: anywhere; }
|
|
37
|
+
.card h4 .mark { --m: 11px; flex: none; cursor: default; animation: none; }
|
|
38
|
+
.card h4 .mark:hover { transform: none; outline: none; }
|
|
39
|
+
.card h4 .k-ic { width: 18px; height: 18px; margin: 0; border-radius: 5px; font-size: 10px; }
|
|
40
|
+
.card .sub { color: var(--text-2); }
|
|
41
|
+
.card dl { display: grid; grid-template-columns: fit-content(42%) minmax(0, 1fr); gap: 4px 12px; margin: 0; }
|
|
42
|
+
.card dt { color: var(--text-muted); word-break: keep-all; overflow-wrap: break-word; }
|
|
43
|
+
.card dd { margin: 0; color: var(--text); overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
|
|
44
|
+
.card dd .err { color: var(--status-failed); }
|
|
45
|
+
.card dd .warn { color: var(--status-attention); }
|
|
46
|
+
.card .acts { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; padding-top: 2px; }
|
|
47
|
+
.card .go { all: unset; cursor: pointer; color: var(--accent); overflow-wrap: anywhere; }
|
|
48
|
+
.card .go.primary { font-weight: 600; }
|
|
49
|
+
.card .go:hover { text-decoration: underline; }
|
|
50
|
+
.card .go:focus-visible { outline: var(--focus-width) solid var(--focus); outline-offset: 2px; border-radius: 3px; }
|
|
51
|
+
.card .acts .switch { margin-left: auto; }
|
|
52
|
+
.switch { all: unset; cursor: pointer; font-size: 11.5px; color: var(--text-2); padding: 2px 8px; border-radius: 6px; border: 1px solid var(--line); }
|
|
53
|
+
.switch:hover { color: var(--text); border-color: var(--line2); }
|
|
54
|
+
.switch:focus-visible { outline: var(--focus-width) solid var(--focus); outline-offset: 1px; }
|
|
55
|
+
.switch[aria-pressed='true'] { color: var(--text); background: var(--accent-bg); border-color: var(--accent); }
|
|
56
|
+
.opens { display: inline-flex; gap: 6px; margin-left: auto; }
|
|
57
|
+
|
|
58
|
+
/* The outline: a column beside the graph, or a part above it on a narrow frame. */
|
|
59
|
+
.whole { display: grid; grid-template-columns: minmax(200px, 282px) minmax(0, 1fr); gap: 14px; align-items: start; }
|
|
60
|
+
.whole > .g { min-width: 0; }
|
|
61
|
+
.outline { font-size: 12px; max-height: 70vh; overflow: auto; padding: 2px 6px 2px 0; border-right: 1px solid var(--line); }
|
|
62
|
+
.otree, .otree ul { list-style: none; margin: 0; padding: 0; }
|
|
63
|
+
.otree ul { padding-left: 10px; }
|
|
64
|
+
.orow { display: grid; grid-template-columns: 16px minmax(0, 1fr); align-items: start; border-radius: 6px; }
|
|
65
|
+
.orow.sel { background: var(--accent-bg); }
|
|
66
|
+
.orow.cur .ol { font-weight: 600; color: var(--text); }
|
|
67
|
+
.odisc { all: unset; cursor: pointer; width: 16px; text-align: center; color: var(--text-muted); font-size: 10px; line-height: 22px; }
|
|
68
|
+
.odisc:focus-visible, .oname:focus-visible { outline: var(--focus-width) solid var(--focus); outline-offset: 1px; border-radius: 4px; }
|
|
69
|
+
.oname { all: unset; cursor: pointer; display: flex; align-items: flex-start; gap: 6px; min-width: 0; padding: 3px 6px 3px 2px; border-radius: 6px; color: var(--text-2); }
|
|
70
|
+
.oname:hover { background: var(--raise); color: var(--text); }
|
|
71
|
+
.oname .loop-ic { flex: none; color: var(--text-muted); }
|
|
72
|
+
.ol { flex: 1; min-width: 0; overflow-wrap: break-word; font-family: var(--mono); line-height: 1.35; }
|
|
73
|
+
.obar { flex: none; width: 32px; height: 4px; margin-top: 6px; border-radius: 2px; background: var(--track); overflow: hidden; }
|
|
74
|
+
.obar i { display: block; height: 100%; background: var(--meter); }
|
|
75
|
+
.ocount { flex: none; font-size: 11px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
|
|
76
|
+
.onote { grid-column: 2; display: flex; flex-wrap: wrap; gap: 0 8px; padding: 0 6px 2px 2px; font-size: 11px; }
|
|
77
|
+
.onote .err { color: var(--status-failed); }
|
|
78
|
+
.onote .warn { color: var(--status-attention); }
|
|
79
|
+
.onote .live { color: var(--status-running); }
|
|
80
|
+
.onote .mut { color: var(--text-muted); }
|
|
81
|
+
.odet { margin-bottom: 8px; }
|
|
82
|
+
.odet > summary { cursor: pointer; font-size: 12px; color: var(--text-2); padding: 2px 0; }
|
|
83
|
+
.odet .outline { border-right: none; max-height: 50vh; }
|
|
84
|
+
`,
|
|
85
|
+
];
|
|
86
|
+
|
|
87
|
+
/** The executor icons as the generic graph draws them: in a node's name, the legend, the table and a loop's passes. */
|
|
88
|
+
export const iconStyles = [
|
|
89
|
+
executorIconStyles,
|
|
90
|
+
css`
|
|
91
|
+
.node .k-ic { width: 16px; height: 16px; margin-right: 6px; border-radius: 4px; font-size: 9.5px; }
|
|
92
|
+
.legend .k-ic { width: 14px; height: 14px; margin: 0; border-radius: 4px; font-size: 8.5px; }
|
|
93
|
+
.list .k-ic { width: 16px; height: 16px; border-radius: 4px; font-size: 9.5px; }
|
|
94
|
+
.list .nm .k-ic { margin: 0 -2px 0 0; }
|
|
95
|
+
.matrix thead th.nh .k-ic { width: 14px; height: 14px; margin-right: 5px; border-radius: 4px; font-size: 8.5px; vertical-align: -2px; }
|
|
96
|
+
`,
|
|
97
|
+
];
|