@opensip-cli/dashboard 0.1.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/LICENSE +202 -0
- package/NOTICE +8 -0
- package/README.md +31 -0
- package/dist/__tests__/catalog-provenance.test.d.ts +11 -0
- package/dist/__tests__/catalog-provenance.test.d.ts.map +1 -0
- package/dist/__tests__/catalog-provenance.test.js +130 -0
- package/dist/__tests__/catalog-provenance.test.js.map +1 -0
- package/dist/__tests__/coupling-attribution.test.d.ts +9 -0
- package/dist/__tests__/coupling-attribution.test.d.ts.map +1 -0
- package/dist/__tests__/coupling-attribution.test.js +99 -0
- package/dist/__tests__/coupling-attribution.test.js.map +1 -0
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts +16 -0
- package/dist/__tests__/dashboard-bundle-weight.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-bundle-weight.test.js +73 -0
- package/dist/__tests__/dashboard-bundle-weight.test.js.map +1 -0
- package/dist/__tests__/dashboard-cell-containment.test.d.ts +2 -0
- package/dist/__tests__/dashboard-cell-containment.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-cell-containment.test.js +49 -0
- package/dist/__tests__/dashboard-cell-containment.test.js.map +1 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts +10 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js +40 -0
- package/dist/__tests__/dashboard-cytoscape-vendor.test.js.map +1 -0
- package/dist/__tests__/dashboard-editor-link.test.d.ts +5 -0
- package/dist/__tests__/dashboard-editor-link.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-editor-link.test.js +36 -0
- package/dist/__tests__/dashboard-editor-link.test.js.map +1 -0
- package/dist/__tests__/dashboard-filters.test.d.ts +9 -0
- package/dist/__tests__/dashboard-filters.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-filters.test.js +95 -0
- package/dist/__tests__/dashboard-filters.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts +9 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.js +87 -0
- package/dist/__tests__/dashboard-function-card-singleton.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-card.test.d.ts +10 -0
- package/dist/__tests__/dashboard-function-card.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-card.test.js +403 -0
- package/dist/__tests__/dashboard-function-card.test.js.map +1 -0
- package/dist/__tests__/dashboard-function-row.test.d.ts +11 -0
- package/dist/__tests__/dashboard-function-row.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-function-row.test.js +101 -0
- package/dist/__tests__/dashboard-function-row.test.js.map +1 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts +9 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js +75 -0
- package/dist/__tests__/dashboard-generator-graph-catalog.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts +13 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.js +55 -0
- package/dist/__tests__/dashboard-graph-offline.integration.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-scc.test.d.ts +17 -0
- package/dist/__tests__/dashboard-graph-scc.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-scc.test.js +89 -0
- package/dist/__tests__/dashboard-graph-scc.test.js.map +1 -0
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts +12 -0
- package/dist/__tests__/dashboard-graph-view-model.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-graph-view-model.test.js +331 -0
- package/dist/__tests__/dashboard-graph-view-model.test.js.map +1 -0
- package/dist/__tests__/dashboard-help-drawer.test.d.ts +9 -0
- package/dist/__tests__/dashboard-help-drawer.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-help-drawer.test.js +101 -0
- package/dist/__tests__/dashboard-help-drawer.test.js.map +1 -0
- package/dist/__tests__/dashboard-html.test.d.ts +2 -0
- package/dist/__tests__/dashboard-html.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-html.test.js +169 -0
- package/dist/__tests__/dashboard-html.test.js.map +1 -0
- package/dist/__tests__/dashboard-indexes.test.d.ts +9 -0
- package/dist/__tests__/dashboard-indexes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-indexes.test.js +211 -0
- package/dist/__tests__/dashboard-indexes.test.js.map +1 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts +6 -0
- package/dist/__tests__/dashboard-path-utils.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-path-utils.test.js +54 -0
- package/dist/__tests__/dashboard-path-utils.test.js.map +1 -0
- package/dist/__tests__/dashboard-search.test.d.ts +5 -0
- package/dist/__tests__/dashboard-search.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-search.test.js +46 -0
- package/dist/__tests__/dashboard-search.test.js.map +1 -0
- package/dist/__tests__/dashboard-sessions.test.d.ts +14 -0
- package/dist/__tests__/dashboard-sessions.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-sessions.test.js +330 -0
- package/dist/__tests__/dashboard-sessions.test.js.map +1 -0
- package/dist/__tests__/dashboard-trace.test.d.ts +5 -0
- package/dist/__tests__/dashboard-trace.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-trace.test.js +147 -0
- package/dist/__tests__/dashboard-trace.test.js.map +1 -0
- package/dist/__tests__/dashboard-validation.integration.test.d.ts +14 -0
- package/dist/__tests__/dashboard-validation.integration.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-validation.integration.test.js +221 -0
- package/dist/__tests__/dashboard-validation.integration.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-conformance.test.d.ts +12 -0
- package/dist/__tests__/dashboard-view-conformance.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-conformance.test.js +58 -0
- package/dist/__tests__/dashboard-view-conformance.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-coupling.test.d.ts +7 -0
- package/dist/__tests__/dashboard-view-coupling.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-coupling.test.js +381 -0
- package/dist/__tests__/dashboard-view-coupling.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-distribution.test.d.ts +10 -0
- package/dist/__tests__/dashboard-view-distribution.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-distribution.test.js +272 -0
- package/dist/__tests__/dashboard-view-distribution.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-graph.test.d.ts +13 -0
- package/dist/__tests__/dashboard-view-graph.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-graph.test.js +332 -0
- package/dist/__tests__/dashboard-view-graph.test.js.map +1 -0
- package/dist/__tests__/dashboard-view-template.test.d.ts +21 -0
- package/dist/__tests__/dashboard-view-template.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard-view-template.test.js +153 -0
- package/dist/__tests__/dashboard-view-template.test.js.map +1 -0
- package/dist/__tests__/dashboard.test.d.ts +2 -0
- package/dist/__tests__/dashboard.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard.test.js +129 -0
- package/dist/__tests__/dashboard.test.js.map +1 -0
- package/dist/__tests__/graph-tab.test.d.ts +10 -0
- package/dist/__tests__/graph-tab.test.d.ts.map +1 -0
- package/dist/__tests__/graph-tab.test.js +76 -0
- package/dist/__tests__/graph-tab.test.js.map +1 -0
- package/dist/checks.d.ts +7 -0
- package/dist/checks.d.ts.map +1 -0
- package/dist/checks.js +283 -0
- package/dist/checks.js.map +1 -0
- package/dist/code-paths/__tests__/views-registry.test.d.ts +13 -0
- package/dist/code-paths/__tests__/views-registry.test.d.ts.map +1 -0
- package/dist/code-paths/__tests__/views-registry.test.js +39 -0
- package/dist/code-paths/__tests__/views-registry.test.js.map +1 -0
- package/dist/code-paths/catalog-provenance.d.ts +22 -0
- package/dist/code-paths/catalog-provenance.d.ts.map +1 -0
- package/dist/code-paths/catalog-provenance.js +108 -0
- package/dist/code-paths/catalog-provenance.js.map +1 -0
- package/dist/code-paths/catalog-recipes-tables.d.ts +11 -0
- package/dist/code-paths/catalog-recipes-tables.d.ts.map +1 -0
- package/dist/code-paths/catalog-recipes-tables.js +86 -0
- package/dist/code-paths/catalog-recipes-tables.js.map +1 -0
- package/dist/code-paths/cytoscape-vendor.d.ts +27 -0
- package/dist/code-paths/cytoscape-vendor.d.ts.map +1 -0
- package/dist/code-paths/cytoscape-vendor.js +68 -0
- package/dist/code-paths/cytoscape-vendor.js.map +1 -0
- package/dist/code-paths/editor-link.d.ts +10 -0
- package/dist/code-paths/editor-link.d.ts.map +1 -0
- package/dist/code-paths/editor-link.js +20 -0
- package/dist/code-paths/editor-link.js.map +1 -0
- package/dist/code-paths/filters.d.ts +19 -0
- package/dist/code-paths/filters.d.ts.map +1 -0
- package/dist/code-paths/filters.js +47 -0
- package/dist/code-paths/filters.js.map +1 -0
- package/dist/code-paths/function-card.d.ts +15 -0
- package/dist/code-paths/function-card.d.ts.map +1 -0
- package/dist/code-paths/function-card.js +169 -0
- package/dist/code-paths/function-card.js.map +1 -0
- package/dist/code-paths/function-row.d.ts +17 -0
- package/dist/code-paths/function-row.d.ts.map +1 -0
- package/dist/code-paths/function-row.js +77 -0
- package/dist/code-paths/function-row.js.map +1 -0
- package/dist/code-paths/graph-controls.d.ts +27 -0
- package/dist/code-paths/graph-controls.d.ts.map +1 -0
- package/dist/code-paths/graph-controls.js +257 -0
- package/dist/code-paths/graph-controls.js.map +1 -0
- package/dist/code-paths/graph-scc.d.ts +32 -0
- package/dist/code-paths/graph-scc.d.ts.map +1 -0
- package/dist/code-paths/graph-scc.js +136 -0
- package/dist/code-paths/graph-scc.js.map +1 -0
- package/dist/code-paths/graph-stylesheet.d.ts +22 -0
- package/dist/code-paths/graph-stylesheet.d.ts.map +1 -0
- package/dist/code-paths/graph-stylesheet.js +121 -0
- package/dist/code-paths/graph-stylesheet.js.map +1 -0
- package/dist/code-paths/graph-view-model.d.ts +120 -0
- package/dist/code-paths/graph-view-model.d.ts.map +1 -0
- package/dist/code-paths/graph-view-model.js +199 -0
- package/dist/code-paths/graph-view-model.js.map +1 -0
- package/dist/code-paths/help-drawer.d.ts +18 -0
- package/dist/code-paths/help-drawer.d.ts.map +1 -0
- package/dist/code-paths/help-drawer.js +54 -0
- package/dist/code-paths/help-drawer.js.map +1 -0
- package/dist/code-paths/indexes.d.ts +28 -0
- package/dist/code-paths/indexes.d.ts.map +1 -0
- package/dist/code-paths/indexes.js +97 -0
- package/dist/code-paths/indexes.js.map +1 -0
- package/dist/code-paths/path-utils.d.ts +15 -0
- package/dist/code-paths/path-utils.d.ts.map +1 -0
- package/dist/code-paths/path-utils.js +47 -0
- package/dist/code-paths/path-utils.js.map +1 -0
- package/dist/code-paths/search.d.ts +14 -0
- package/dist/code-paths/search.d.ts.map +1 -0
- package/dist/code-paths/search.js +54 -0
- package/dist/code-paths/search.js.map +1 -0
- package/dist/code-paths/trace.d.ts +11 -0
- package/dist/code-paths/trace.d.ts.map +1 -0
- package/dist/code-paths/trace.js +60 -0
- package/dist/code-paths/trace.js.map +1 -0
- package/dist/code-paths/view-coupling.d.ts +22 -0
- package/dist/code-paths/view-coupling.d.ts.map +1 -0
- package/dist/code-paths/view-coupling.js +218 -0
- package/dist/code-paths/view-coupling.js.map +1 -0
- package/dist/code-paths/view-distribution.d.ts +20 -0
- package/dist/code-paths/view-distribution.d.ts.map +1 -0
- package/dist/code-paths/view-distribution.js +82 -0
- package/dist/code-paths/view-distribution.js.map +1 -0
- package/dist/code-paths/view-graph.d.ts +35 -0
- package/dist/code-paths/view-graph.d.ts.map +1 -0
- package/dist/code-paths/view-graph.js +379 -0
- package/dist/code-paths/view-graph.js.map +1 -0
- package/dist/code-paths/view-template.d.ts +154 -0
- package/dist/code-paths/view-template.d.ts.map +1 -0
- package/dist/code-paths/view-template.js +218 -0
- package/dist/code-paths/view-template.js.map +1 -0
- package/dist/code-paths/views-registry.d.ts +13 -0
- package/dist/code-paths/views-registry.d.ts.map +1 -0
- package/dist/code-paths/views-registry.js +53 -0
- package/dist/code-paths/views-registry.js.map +1 -0
- package/dist/code-paths.d.ts +69 -0
- package/dist/code-paths.d.ts.map +1 -0
- package/dist/code-paths.js +356 -0
- package/dist/code-paths.js.map +1 -0
- package/dist/css/cards.d.ts +9 -0
- package/dist/css/cards.d.ts.map +1 -0
- package/dist/css/cards.js +36 -0
- package/dist/css/cards.js.map +1 -0
- package/dist/css/code-paths.d.ts +9 -0
- package/dist/css/code-paths.d.ts.map +1 -0
- package/dist/css/code-paths.js +111 -0
- package/dist/css/code-paths.js.map +1 -0
- package/dist/css/data-table.d.ts +12 -0
- package/dist/css/data-table.d.ts.map +1 -0
- package/dist/css/data-table.js +103 -0
- package/dist/css/data-table.js.map +1 -0
- package/dist/css/function-card.d.ts +6 -0
- package/dist/css/function-card.d.ts.map +1 -0
- package/dist/css/function-card.js +26 -0
- package/dist/css/function-card.js.map +1 -0
- package/dist/css/help-drawer.d.ts +6 -0
- package/dist/css/help-drawer.d.ts.map +1 -0
- package/dist/css/help-drawer.js +22 -0
- package/dist/css/help-drawer.js.map +1 -0
- package/dist/css/tabs.d.ts +9 -0
- package/dist/css/tabs.d.ts.map +1 -0
- package/dist/css/tabs.js +28 -0
- package/dist/css/tabs.js.map +1 -0
- package/dist/css/theme.d.ts +8 -0
- package/dist/css/theme.d.ts.map +1 -0
- package/dist/css/theme.js +34 -0
- package/dist/css/theme.js.map +1 -0
- package/dist/css.d.ts +13 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +30 -0
- package/dist/css.js.map +1 -0
- package/dist/generator.d.ts +33 -0
- package/dist/generator.d.ts.map +1 -0
- package/dist/generator.js +161 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/overview.d.ts +13 -0
- package/dist/overview.d.ts.map +1 -0
- package/dist/overview.js +91 -0
- package/dist/overview.js.map +1 -0
- package/dist/recipes.d.ts +6 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/recipes.js +68 -0
- package/dist/recipes.js.map +1 -0
- package/dist/sessions.d.ts +6 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +288 -0
- package/dist/sessions.js.map +1 -0
- package/dist/shared/el.d.ts +13 -0
- package/dist/shared/el.d.ts.map +1 -0
- package/dist/shared/el.js +27 -0
- package/dist/shared/el.js.map +1 -0
- package/dist/shared/pagination.d.ts +15 -0
- package/dist/shared/pagination.d.ts.map +1 -0
- package/dist/shared/pagination.js +113 -0
- package/dist/shared/pagination.js.map +1 -0
- package/dist/shared/sortable.d.ts +14 -0
- package/dist/shared/sortable.d.ts.map +1 -0
- package/dist/shared/sortable.js +101 -0
- package/dist/shared/sortable.js.map +1 -0
- package/dist/shared/tab-activators.d.ts +16 -0
- package/dist/shared/tab-activators.d.ts.map +1 -0
- package/dist/shared/tab-activators.js +33 -0
- package/dist/shared/tab-activators.js.map +1 -0
- package/dist/shared/tab-bar.d.ts +8 -0
- package/dist/shared/tab-bar.d.ts.map +1 -0
- package/dist/shared/tab-bar.js +20 -0
- package/dist/shared/tab-bar.js.map +1 -0
- package/dist/shared.d.ts +26 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +39 -0
- package/dist/shared.js.map +1 -0
- package/dist/subtab-bar.d.ts +23 -0
- package/dist/subtab-bar.d.ts.map +1 -0
- package/dist/subtab-bar.js +77 -0
- package/dist/subtab-bar.js.map +1 -0
- package/dist/tool-tab-registry.d.ts +76 -0
- package/dist/tool-tab-registry.d.ts.map +1 -0
- package/dist/tool-tab-registry.js +44 -0
- package/dist/tool-tab-registry.js.map +1 -0
- package/dist/tool-tabs-registrations.d.ts +19 -0
- package/dist/tool-tabs-registrations.d.ts.map +1 -0
- package/dist/tool-tabs-registrations.js +46 -0
- package/dist/tool-tabs-registrations.js.map +1 -0
- package/dist/tool-tabs.d.ts +12 -0
- package/dist/tool-tabs.d.ts.map +1 -0
- package/dist/tool-tabs.js +80 -0
- package/dist/tool-tabs.js.map +1 -0
- package/dist/vendor/cytoscape-bundle.js +600 -0
- package/package.json +52 -0
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
// @fitness-ignore-file module-coupling-fan-out -- Panel aggregator: composes JS-string emitters from sibling view-*.ts modules; fan-out is intrinsic to its role as the entry point
|
|
2
|
+
/**
|
|
3
|
+
* Dashboard Code Paths panel — graph-tool surface with two subtabs:
|
|
4
|
+
* 1. Sessions — recent graph runs and their per-rule findings
|
|
5
|
+
* (uses the shared renderSessionTable from sessions.ts).
|
|
6
|
+
* 2. Explore — interactive catalog browser with three views
|
|
7
|
+
* (Graph, Coupling, Functions/distribution). The Graph view
|
|
8
|
+
* carries the SCC cycle highlight that the standalone SCCs view
|
|
9
|
+
* used to own. The Functions view absorbs the former standalone
|
|
10
|
+
* Search subtab via an in-table name filter.
|
|
11
|
+
*
|
|
12
|
+
* Architecture: vanilla DOM, no framework. Each view-*.ts emits a
|
|
13
|
+
* JS string that pushes a `View` literal into the singleton `views`
|
|
14
|
+
* registry. The Explore subtab renders the view tab bar + one
|
|
15
|
+
* container per view; Sessions subtab renders the standard session
|
|
16
|
+
* table.
|
|
17
|
+
*
|
|
18
|
+
* The file imports JS-string emitters from sibling modules under
|
|
19
|
+
* `code-paths/`. It MUST NOT import from `@opensip-cli/graph` —
|
|
20
|
+
* the catalog is consumed by JSON shape only (the structural shape
|
|
21
|
+
* lives in @opensip-cli/contracts to keep this panel decoupled
|
|
22
|
+
* from the graph engine's runtime types).
|
|
23
|
+
*/
|
|
24
|
+
import { dashboardCatalogProvenanceJs } from './code-paths/catalog-provenance.js';
|
|
25
|
+
import { dashboardCatalogRecipesTablesJs } from './code-paths/catalog-recipes-tables.js';
|
|
26
|
+
import { dashboardCytoscapeVendorJs } from './code-paths/cytoscape-vendor.js';
|
|
27
|
+
import { dashboardEditorLinkJs } from './code-paths/editor-link.js';
|
|
28
|
+
import { dashboardFiltersJs } from './code-paths/filters.js';
|
|
29
|
+
import { dashboardFunctionCardJs } from './code-paths/function-card.js';
|
|
30
|
+
import { dashboardFunctionRowJs } from './code-paths/function-row.js';
|
|
31
|
+
import { dashboardHelpDrawerJs } from './code-paths/help-drawer.js';
|
|
32
|
+
import { dashboardIndexesJs } from './code-paths/indexes.js';
|
|
33
|
+
import { dashboardPathUtilsJs } from './code-paths/path-utils.js';
|
|
34
|
+
import { dashboardSearchJs } from './code-paths/search.js';
|
|
35
|
+
import { dashboardTraceJs } from './code-paths/trace.js';
|
|
36
|
+
import { dashboardViewCouplingJs } from './code-paths/view-coupling.js';
|
|
37
|
+
import { dashboardViewDistributionJs } from './code-paths/view-distribution.js';
|
|
38
|
+
import { dashboardViewGraphJs } from './code-paths/view-graph.js';
|
|
39
|
+
import { dashboardViewsRegistryJs } from './code-paths/views-registry.js';
|
|
40
|
+
/**
|
|
41
|
+
* Build flag for the Code Paths explore-tab restructure.
|
|
42
|
+
*
|
|
43
|
+
* `true` (Plan D default, current): the restructured set — graph (with the
|
|
44
|
+
* SCC-highlight fold) / coupling + the ranked-distribution "Functions"
|
|
45
|
+
* affordance (which hosts the in-table name filter that replaced the
|
|
46
|
+
* former standalone Search subtab). The legacy single-metric views
|
|
47
|
+
* (`view-big/hot/wide/untested/sccs`) were deleted in Plan D once their
|
|
48
|
+
* signal moved into the engine gate rules (`graph:large-function`,
|
|
49
|
+
* `graph:wide-function`, `graph:high-blast-untested`, `graph:cycle`); the
|
|
50
|
+
* standalone SCCs view's signal lives on as the graph view's cycle highlight.
|
|
51
|
+
*
|
|
52
|
+
* `false`: there is no legacy branch anymore — the constant is retained only
|
|
53
|
+
* as the default for the `dashboardCodePathsJs(restructured)` test seam, which
|
|
54
|
+
* always exercises the restructured set.
|
|
55
|
+
*
|
|
56
|
+
* This is a build-time, server-side seam — no runtime toggle in the page.
|
|
57
|
+
*/
|
|
58
|
+
const RESTRUCTURED_EXPLORE_TABS = true;
|
|
59
|
+
/**
|
|
60
|
+
* Concatenation order is load-bearing — each emitter declares
|
|
61
|
+
* top-level names that later emitters reference. The order below is
|
|
62
|
+
* the topological sort; reordering will silently break the page with
|
|
63
|
+
* `<name> is not defined`. Free-identifier dependencies of each
|
|
64
|
+
* emitter, listed against the emitter that supplies them:
|
|
65
|
+
*
|
|
66
|
+
* 1. path-utils — declares `displayName`, `packageOfPath`, `pkgOf`,
|
|
67
|
+
* `shortPkg`.
|
|
68
|
+
* 2. indexes — declares `buildIndexes`, `resolveCalleeOcc`. Uses
|
|
69
|
+
* `pkgOf` (path-utils, above).
|
|
70
|
+
* 3. filters — declares `filterState` (default, non-interactive),
|
|
71
|
+
* `passesFilter`, `packagesInCatalog`, `KIND_LIST`.
|
|
72
|
+
* Uses `pkgOf` (path-utils, above).
|
|
73
|
+
* 4. editor-link — declares `editorLink`. Reads `EDITOR_PROTOCOL`
|
|
74
|
+
* (declared in generator.ts before the script
|
|
75
|
+
* block).
|
|
76
|
+
* 5. trace — declares `findUpstreamTrace`. Uses `indexes`.
|
|
77
|
+
* 6. search — declares `searchFunctions`. Uses `indexes`,
|
|
78
|
+
* `displayName`.
|
|
79
|
+
* 7. function-row — declares `renderFunctionRows` and the empty
|
|
80
|
+
* states it uses. Calls `el`, `displayName`,
|
|
81
|
+
* `packageOfPath`, `passesFilter`.
|
|
82
|
+
* 8. function-card — declares `openFunctionCard`, `closeFunctionCard`.
|
|
83
|
+
* Uses `editorLink`, `findUpstreamTrace`, `el`.
|
|
84
|
+
* 9. views-registry — declares the singleton `views = []` array.
|
|
85
|
+
* Must come before any view emitter.
|
|
86
|
+
* 10. help-drawer — declares `openHelpDrawer`. No external deps
|
|
87
|
+
* beyond `el`.
|
|
88
|
+
* 11-13. view-* — push View descriptors into `views` in TAB order:
|
|
89
|
+
* coupling / distribution / graph (alphabetical:
|
|
90
|
+
* Coupling, Functions, Visualization — the first is the
|
|
91
|
+
* default view). Each renderer closes over `el`,
|
|
92
|
+
* `passesFilter`, `displayName`, `packageOfPath`,
|
|
93
|
+
* `renderFunctionRows`, plus its own utilities; the
|
|
94
|
+
* Visualization renderer also uses `resolveCalleeOcc`
|
|
95
|
+
* (prelude) for its function-level projection.
|
|
96
|
+
* 15. panelOrchestrator — top-level `renderCodePathsTab`,
|
|
97
|
+
* `renderCodePathsExplore`, `openCodePathsSession`.
|
|
98
|
+
* Uses every name above plus `renderSubtabBar`
|
|
99
|
+
* (from shared/) and `registerTabActivator`.
|
|
100
|
+
*
|
|
101
|
+
* If the list grows past ~30 entries, replace this manual order with
|
|
102
|
+
* a `{ id, deps, emit }` topological sort.
|
|
103
|
+
*/
|
|
104
|
+
export function dashboardCodePathsJs(_restructured = RESTRUCTURED_EXPLORE_TABS) {
|
|
105
|
+
// The explore-tab restructure has shipped: there is one view set (coupling /
|
|
106
|
+
// distribution / graph). The `_restructured` parameter is kept
|
|
107
|
+
// for the test seam's call-shape compatibility but no longer selects a
|
|
108
|
+
// legacy branch (the single-metric view emitters were deleted in Plan D).
|
|
109
|
+
// Shared prelude — utilities + the views registry + help drawer. Every view
|
|
110
|
+
// emitter depends on these top-level names.
|
|
111
|
+
const prelude = [
|
|
112
|
+
// 0. cytoscape vendor — defines the `cytoscape` / `cytoscapeDagre`
|
|
113
|
+
// browser globals the Graph view consumes. MUST precede any view
|
|
114
|
+
// emitter that references them. No deps of its own.
|
|
115
|
+
dashboardCytoscapeVendorJs(),
|
|
116
|
+
dashboardPathUtilsJs(),
|
|
117
|
+
dashboardIndexesJs(),
|
|
118
|
+
dashboardFiltersJs(),
|
|
119
|
+
// Depends on `packagesInCatalog` (filters, above) + `el`; declares
|
|
120
|
+
// `renderCatalogProvenance`, called at the top of the Explore body.
|
|
121
|
+
dashboardCatalogProvenanceJs(),
|
|
122
|
+
// Declares `renderGraphRuleCatalog` / `renderGraphRecipeCatalog` (the
|
|
123
|
+
// Catalog/Recipes subtab tables); only needs `el`.
|
|
124
|
+
dashboardCatalogRecipesTablesJs(),
|
|
125
|
+
dashboardEditorLinkJs(),
|
|
126
|
+
dashboardTraceJs(),
|
|
127
|
+
dashboardSearchJs(),
|
|
128
|
+
dashboardFunctionRowJs(),
|
|
129
|
+
dashboardFunctionCardJs(),
|
|
130
|
+
dashboardViewsRegistryJs(),
|
|
131
|
+
dashboardHelpDrawerJs(),
|
|
132
|
+
];
|
|
133
|
+
// The kept visualizations + the ranked-distribution affordance, in TAB
|
|
134
|
+
// order (alphabetical): Coupling, Functions, Visualization. `views[0]` is
|
|
135
|
+
// the default view, so Coupling opens first. SCCs fold into the graph view's
|
|
136
|
+
// cycle highlight; the single-metric tabs were dropped (their signal moved
|
|
137
|
+
// into the engine gate rules). `renderCodePathsExplore` iterates `views` to
|
|
138
|
+
// build the tab bar. Emission order here is also the runtime registry order;
|
|
139
|
+
// the three view emitters have no cross-dependencies (each only references
|
|
140
|
+
// prelude names), so this order is free to match the desired tab order.
|
|
141
|
+
const views = [dashboardViewCouplingJs(), dashboardViewDistributionJs(), dashboardViewGraphJs()];
|
|
142
|
+
return [...prelude, ...views, panelOrchestratorJs()].join('\n');
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Top-level orchestrator emitter for the Code Paths tab. Concerns,
|
|
146
|
+
* with the section delimiters that mark them in the emitted JS:
|
|
147
|
+
*
|
|
148
|
+
* 1. CATALOG STATE — singleton `graphCatalog` and `graphIndexes`.
|
|
149
|
+
* 2. CATALOG LOAD — `loadGraphCatalogFromBlob` reads the inline
|
|
150
|
+
* `<script id="graph-catalog">` blob.
|
|
151
|
+
* 3. PANEL ENTRY — `renderCodePathsTab` mounts the Sessions /
|
|
152
|
+
* Explore subtabs via `renderSubtabBar` (F2).
|
|
153
|
+
* 4. EXPLORE BODY — `renderCodePathsExplore` builds the view tab
|
|
154
|
+
* bar, view containers, row-click delegation, escape handler,
|
|
155
|
+
* and runs each view's initial render.
|
|
156
|
+
* 5. HASH ROUTE — `readViewIdFromHash` parses `#code-paths/<id>`
|
|
157
|
+
* for deep-link initial view.
|
|
158
|
+
* 6. CROSS-TAB NAV — `openCodePathsSession` is the activator
|
|
159
|
+
* Overview's row-click handler invokes via
|
|
160
|
+
* `activateTabForSession` for graph sessions.
|
|
161
|
+
* 7. ACTIVATOR REGISTRATION — registers `openCodePathsSession`
|
|
162
|
+
* under key `'graph'` in the shared `tabActivators` registry.
|
|
163
|
+
*
|
|
164
|
+
* The escape handler in EXPLORE BODY is attached to `document`; if
|
|
165
|
+
* `renderCodePathsTab` runs more than once (it does not today) the
|
|
166
|
+
* handler would leak.
|
|
167
|
+
*/
|
|
168
|
+
function panelOrchestratorJs() {
|
|
169
|
+
return String.raw `
|
|
170
|
+
// =======================================================
|
|
171
|
+
// CODE PATHS — CATALOG STATE
|
|
172
|
+
// =======================================================
|
|
173
|
+
let graphCatalog = null;
|
|
174
|
+
let graphIndexes = { byBodyHash: new Map(), occurrencesByHash: new Map(), bySimpleName: new Map(), callees: new Map(), callers: new Map() };
|
|
175
|
+
|
|
176
|
+
// =======================================================
|
|
177
|
+
// CODE PATHS — CATALOG LOAD
|
|
178
|
+
// =======================================================
|
|
179
|
+
function loadGraphCatalogFromBlob() {
|
|
180
|
+
const blob = document.getElementById('graph-catalog');
|
|
181
|
+
if (!blob || !blob.textContent) return null;
|
|
182
|
+
try {
|
|
183
|
+
return JSON.parse(blob.textContent);
|
|
184
|
+
} catch (err) {
|
|
185
|
+
return null;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// =======================================================
|
|
190
|
+
// CODE PATHS — PANEL ENTRY (Sessions | Explore subtabs)
|
|
191
|
+
// =======================================================
|
|
192
|
+
function renderCodePathsTab() {
|
|
193
|
+
const panel = document.getElementById('panel-code-paths');
|
|
194
|
+
if (!panel) return;
|
|
195
|
+
while (panel.firstChild) panel.removeChild(panel.firstChild);
|
|
196
|
+
|
|
197
|
+
const graphSessions = sessions.filter(s => s.tool === 'graph');
|
|
198
|
+
graphCatalog = loadGraphCatalogFromBlob();
|
|
199
|
+
|
|
200
|
+
// Code Paths uses the shared renderSubtabBar Strategy (F2). The
|
|
201
|
+
// two-subtab Sessions/Explore shape is a config; the DOM-and-click
|
|
202
|
+
// boilerplate now lives in subtab-bar.ts and is shared with
|
|
203
|
+
// renderToolTab's three-subtab shape. The subtabs render even when
|
|
204
|
+
// empty so the tab matches the visual pattern used by Fitness and
|
|
205
|
+
// Simulation (subtab bar + italic-centered .empty placeholder).
|
|
206
|
+
renderSubtabBar(panel, [
|
|
207
|
+
{
|
|
208
|
+
id: 'sessions',
|
|
209
|
+
label: 'Sessions',
|
|
210
|
+
render: function(p) {
|
|
211
|
+
if (graphSessions.length > 0) {
|
|
212
|
+
renderSessionTable(p, graphSessions, 'var(--accent)');
|
|
213
|
+
} else {
|
|
214
|
+
p.appendChild(el('div', { class: 'empty', text: 'No sessions yet.' }));
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
id: 'catalog',
|
|
220
|
+
label: 'Catalog',
|
|
221
|
+
render: function(p) {
|
|
222
|
+
renderGraphRuleCatalog(p, typeof graphRuleCatalog !== 'undefined' ? graphRuleCatalog : []);
|
|
223
|
+
},
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: 'recipes',
|
|
227
|
+
label: 'Recipes',
|
|
228
|
+
render: function(p) {
|
|
229
|
+
renderGraphRecipeCatalog(p, typeof graphRecipeCatalog !== 'undefined' ? graphRecipeCatalog : []);
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: 'explore',
|
|
234
|
+
label: 'Explore',
|
|
235
|
+
render: function(p) {
|
|
236
|
+
if (graphCatalog) {
|
|
237
|
+
renderCodePathsExplore(p);
|
|
238
|
+
} else {
|
|
239
|
+
p.appendChild(el('div', { class: 'empty', text: 'No catalog yet.' }));
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
]);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// =======================================================
|
|
247
|
+
// CODE PATHS — EXPLORE BODY (view tab bar + view stack)
|
|
248
|
+
// =======================================================
|
|
249
|
+
function renderCodePathsExplore(host) {
|
|
250
|
+
graphIndexes = buildIndexes(graphCatalog);
|
|
251
|
+
|
|
252
|
+
// Provenance bar — what this Explore view is built from (package scope,
|
|
253
|
+
// function count, build time, engine). Shown above the view tabs so a SCOPED
|
|
254
|
+
// or stale catalog (e.g. a 'graph packages/contracts' run) reads as "1
|
|
255
|
+
// package, built 8 min ago", not as a broken/empty graph. Covers all three
|
|
256
|
+
// views since they share the one cached catalog.
|
|
257
|
+
renderCatalogProvenance(host, graphCatalog);
|
|
258
|
+
|
|
259
|
+
// (No shared filter chip bar — the Visualization view owns its own controls;
|
|
260
|
+
// the Functions table reads the default filterState via passesFilter.)
|
|
261
|
+
|
|
262
|
+
// View tab bar — built from the registered views.
|
|
263
|
+
const tabBar = el('div', { class: 'code-paths-tabs', id: 'code-paths-tabs' });
|
|
264
|
+
for (const view of views) {
|
|
265
|
+
const tab = el('div', {
|
|
266
|
+
class: 'code-paths-tab',
|
|
267
|
+
'data-view': view.id,
|
|
268
|
+
text: view.label,
|
|
269
|
+
onclick: () => activateView(view.id),
|
|
270
|
+
});
|
|
271
|
+
tabBar.appendChild(tab);
|
|
272
|
+
}
|
|
273
|
+
host.appendChild(tabBar);
|
|
274
|
+
|
|
275
|
+
// One container per view; only one is .active at a time.
|
|
276
|
+
const stack = el('div', { class: 'code-paths-view-container', id: 'code-paths-view-container' });
|
|
277
|
+
for (const view of views) {
|
|
278
|
+
const c = el('div', { class: 'code-paths-view', id: 'code-paths-view-' + view.id });
|
|
279
|
+
stack.appendChild(c);
|
|
280
|
+
}
|
|
281
|
+
host.appendChild(stack);
|
|
282
|
+
|
|
283
|
+
// Delegate row clicks to the function card.
|
|
284
|
+
stack.addEventListener('click', e => {
|
|
285
|
+
const row = e.target.closest && e.target.closest('[data-body-hash]');
|
|
286
|
+
if (!row) return;
|
|
287
|
+
openFunctionCard(row.dataset.bodyHash);
|
|
288
|
+
});
|
|
289
|
+
|
|
290
|
+
// Escape closes the function card.
|
|
291
|
+
document.addEventListener('keydown', e => {
|
|
292
|
+
if (e.key === 'Escape') closeFunctionCard();
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
// Render every view once on init.
|
|
296
|
+
for (const view of views) {
|
|
297
|
+
const container = document.getElementById('code-paths-view-' + view.id);
|
|
298
|
+
if (container) view.render(container, graphCatalog, graphIndexes, filterState);
|
|
299
|
+
}
|
|
300
|
+
const initialId = readViewIdFromHash() || (views[0] && views[0].id);
|
|
301
|
+
if (initialId) activateView(initialId);
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
// =======================================================
|
|
305
|
+
// CODE PATHS — HASH ROUTE (deep-link initial view)
|
|
306
|
+
// =======================================================
|
|
307
|
+
function readViewIdFromHash() {
|
|
308
|
+
const m = /^#code-paths\/([a-z]+)/.exec(window.location.hash || '');
|
|
309
|
+
return m ? m[1] : null;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// =======================================================
|
|
313
|
+
// CODE PATHS — CROSS-TAB NAV (graph sessions deep-link)
|
|
314
|
+
// =======================================================
|
|
315
|
+
/**
|
|
316
|
+
* Open the Code Paths tab on the Sessions subtab, scrolling to and
|
|
317
|
+
* selecting the row matching the given session id. Used by the
|
|
318
|
+
* Overview row-click handler so a graph row in Recent Activity opens
|
|
319
|
+
* the same per-session detail view that fit/sim rows open.
|
|
320
|
+
*
|
|
321
|
+
* Registered into the shared tabActivators registry under the key
|
|
322
|
+
* 'graph' (the StoredSession.tool value for graph runs); the Overview
|
|
323
|
+
* row-click handler invokes it through activateTabForSession() rather
|
|
324
|
+
* than naming this function directly.
|
|
325
|
+
*/
|
|
326
|
+
function openCodePathsSession(sessionId) {
|
|
327
|
+
const tab = document.querySelector('.tab[data-tab="code-paths"]');
|
|
328
|
+
const panel = document.getElementById('panel-code-paths');
|
|
329
|
+
if (!tab || !panel) return;
|
|
330
|
+
document.querySelectorAll('.tab').forEach(t => t.classList.remove('active'));
|
|
331
|
+
document.querySelectorAll('.tab-panel').forEach(p => p.classList.remove('active'));
|
|
332
|
+
tab.classList.add('active');
|
|
333
|
+
panel.classList.add('active');
|
|
334
|
+
// Force the Sessions subtab.
|
|
335
|
+
const sessionsSub = panel.querySelector('.subtab[data-subtab="sessions"]');
|
|
336
|
+
const exploreSub = panel.querySelector('.subtab[data-subtab="explore"]');
|
|
337
|
+
const sessionsPanel = document.getElementById('panel-code-paths-sessions');
|
|
338
|
+
const explorePanel = document.getElementById('panel-code-paths-explore');
|
|
339
|
+
if (sessionsSub) sessionsSub.classList.add('active');
|
|
340
|
+
if (exploreSub) exploreSub.classList.remove('active');
|
|
341
|
+
if (sessionsPanel) sessionsPanel.classList.add('active');
|
|
342
|
+
if (explorePanel) explorePanel.classList.remove('active');
|
|
343
|
+
// Click the matching row to trigger the standard renderDetail flow.
|
|
344
|
+
const row = sessionsPanel && sessionsPanel.querySelector('tr[data-session-id="' + sessionId + '"]');
|
|
345
|
+
if (row) row.click();
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// =======================================================
|
|
349
|
+
// CODE PATHS — ACTIVATOR REGISTRATION
|
|
350
|
+
// =======================================================
|
|
351
|
+
if (typeof registerTabActivator === 'function') {
|
|
352
|
+
registerTabActivator('graph', openCodePathsSession);
|
|
353
|
+
}
|
|
354
|
+
`;
|
|
355
|
+
}
|
|
356
|
+
//# sourceMappingURL=code-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-paths.js","sourceRoot":"","sources":["../src/code-paths.ts"],"names":[],"mappings":"AAAA,oLAAoL;AACpL;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,+BAA+B,EAAE,MAAM,wCAAwC,CAAC;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,2BAA2B,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,yBAAyB,GAAG,IAAI,CAAC;AAEvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AACH,MAAM,UAAU,oBAAoB,CAAC,gBAAyB,yBAAyB;IACrF,6EAA6E;IAC7E,+DAA+D;IAC/D,uEAAuE;IACvE,0EAA0E;IAC1E,4EAA4E;IAC5E,4CAA4C;IAC5C,MAAM,OAAO,GAAG;QACd,mEAAmE;QACnE,oEAAoE;QACpE,uDAAuD;QACvD,0BAA0B,EAAE;QAC5B,oBAAoB,EAAE;QACtB,kBAAkB,EAAE;QACpB,kBAAkB,EAAE;QACpB,mEAAmE;QACnE,oEAAoE;QACpE,4BAA4B,EAAE;QAC9B,sEAAsE;QACtE,mDAAmD;QACnD,+BAA+B,EAAE;QACjC,qBAAqB,EAAE;QACvB,gBAAgB,EAAE;QAClB,iBAAiB,EAAE;QACnB,sBAAsB,EAAE;QACxB,uBAAuB,EAAE;QACzB,wBAAwB,EAAE;QAC1B,qBAAqB,EAAE;KACxB,CAAC;IAEF,uEAAuE;IACvE,0EAA0E;IAC1E,6EAA6E;IAC7E,2EAA2E;IAC3E,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,KAAK,GAAG,CAAC,uBAAuB,EAAE,EAAE,2BAA2B,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAEjG,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,SAAS,mBAAmB;IAC1B,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyLlB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cards, stats grid, sections, empty states, and the trend chart.
|
|
3
|
+
*
|
|
4
|
+
* Container shells used by every panel — score cards, the
|
|
5
|
+
* `.section + .card` shell that wraps every tabular view, and the
|
|
6
|
+
* empty-state placeholder.
|
|
7
|
+
*/
|
|
8
|
+
export declare function dashboardCssCards(): string;
|
|
9
|
+
//# sourceMappingURL=cards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.d.ts","sourceRoot":"","sources":["../../src/css/cards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CA2B1C"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cards, stats grid, sections, empty states, and the trend chart.
|
|
3
|
+
*
|
|
4
|
+
* Container shells used by every panel — score cards, the
|
|
5
|
+
* `.section + .card` shell that wraps every tabular view, and the
|
|
6
|
+
* empty-state placeholder.
|
|
7
|
+
*/
|
|
8
|
+
export function dashboardCssCards() {
|
|
9
|
+
return String.raw `
|
|
10
|
+
/* Cards and stats */
|
|
11
|
+
.stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; margin-bottom: 24px; }
|
|
12
|
+
.stat-card { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; }
|
|
13
|
+
.stat-label { font-size: 12px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; margin-bottom: 4px; }
|
|
14
|
+
.stat-value { font-size: 28px; font-weight: 700; }
|
|
15
|
+
.score-good { color: var(--success); } .score-warn { color: var(--warning); } .score-bad { color: var(--error); }
|
|
16
|
+
.card { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; margin-bottom: 16px; }
|
|
17
|
+
.section { margin-bottom: 32px; }
|
|
18
|
+
.empty { color: var(--text-dim); font-style: italic; padding: 24px; text-align: center; }
|
|
19
|
+
|
|
20
|
+
/* Contributed per-run tabs (host-owned-run-timing Phase 5) — generic
|
|
21
|
+
declarative views rendered without any tool import. */
|
|
22
|
+
.panel-title { font-size: 18px; font-weight: 600; margin: 0 0 16px; }
|
|
23
|
+
.chart-title { font-size: 14px; font-weight: 600; color: var(--text-dim); margin-bottom: 8px; }
|
|
24
|
+
.timeline { display: flex; flex-direction: column; gap: 8px; }
|
|
25
|
+
.timeline-row { display: flex; gap: 12px; align-items: baseline; padding: 8px 12px; background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-sm); }
|
|
26
|
+
.timeline-time { font-variant-numeric: tabular-nums; color: var(--text-dim); font-size: 12px; white-space: nowrap; }
|
|
27
|
+
.timeline-detail { font-size: 13px; }
|
|
28
|
+
.contributed-html { white-space: pre-wrap; word-break: break-word; background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 16px; font-size: 12px; overflow-x: auto; }
|
|
29
|
+
|
|
30
|
+
/* Trend chart */
|
|
31
|
+
.trend-chart { display: flex; align-items: flex-end; gap: 4px; height: 80px; padding: 16px; background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 24px; }
|
|
32
|
+
.trend-bar { flex: 1; border-radius: 2px 2px 0 0; min-width: 8px; max-width: 40px; position: relative; cursor: pointer; }
|
|
33
|
+
.trend-bar:hover::after { content: attr(data-tooltip); position: absolute; bottom: calc(100% + 4px); left: 50%; transform: translateX(-50%); background: var(--bg-hover); color: var(--text); padding: 4px 8px; border-radius: var(--radius-sm); font-size: 11px; white-space: nowrap; border: 1px solid var(--border); }
|
|
34
|
+
`;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=cards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cards.js","sourceRoot":"","sources":["../../src/css/cards.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Paths panel styling — search/chip bar, filter drawer, view tab
|
|
3
|
+
* bar, info button, view containers, and the Coupling heat-map.
|
|
4
|
+
*
|
|
5
|
+
* All selectors here are scoped to `.code-paths-*` so they cannot
|
|
6
|
+
* accidentally style the fit/sim panels.
|
|
7
|
+
*/
|
|
8
|
+
export declare function dashboardCssCodePaths(): string;
|
|
9
|
+
//# sourceMappingURL=code-paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-paths.d.ts","sourceRoot":"","sources":["../../src/css/code-paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAsG9C"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code Paths panel styling — search/chip bar, filter drawer, view tab
|
|
3
|
+
* bar, info button, view containers, and the Coupling heat-map.
|
|
4
|
+
*
|
|
5
|
+
* All selectors here are scoped to `.code-paths-*` so they cannot
|
|
6
|
+
* accidentally style the fit/sim panels.
|
|
7
|
+
*/
|
|
8
|
+
export function dashboardCssCodePaths() {
|
|
9
|
+
return String.raw `
|
|
10
|
+
/* ====== Code Paths panel (v0.3) ====== */
|
|
11
|
+
.code-paths-search { width: 320px; margin-bottom: 12px; display: block; }
|
|
12
|
+
/* (The shared filter chip bar / collapsible filter drawer was removed — the
|
|
13
|
+
Visualization view owns its own controls and the other views don't need it.) */
|
|
14
|
+
.code-paths-tabs { display: flex; gap: 0; border-bottom: 1px solid var(--border); margin-bottom: 16px; flex-wrap: wrap; }
|
|
15
|
+
.code-paths-tab { padding: 8px 16px; cursor: pointer; color: var(--text-dim); font-size: 13px; font-weight: 500; border-bottom: 2px solid transparent; transition: color 0.15s, border-color 0.15s; user-select: none; }
|
|
16
|
+
.code-paths-tab:hover { color: var(--text-secondary); }
|
|
17
|
+
.code-paths-tab.active { color: var(--text); border-bottom-color: var(--accent); }
|
|
18
|
+
|
|
19
|
+
/* Inline ⓘ button next to a section heading; opens the help drawer. */
|
|
20
|
+
.section-info { background: var(--bg-surface); border: 1px solid var(--border); color: var(--text-dim); width: 18px; height: 18px; border-radius: 50%; font-size: 11px; font-style: italic; font-weight: 700; line-height: 16px; padding: 0; margin-left: 8px; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; vertical-align: middle; transition: color 0.15s, border-color 0.15s; }
|
|
21
|
+
.section-info:hover { color: var(--accent); border-color: var(--accent); }
|
|
22
|
+
.code-paths-view { display: none; }
|
|
23
|
+
.code-paths-view.active { display: block; }
|
|
24
|
+
|
|
25
|
+
/* Code Paths tables can hold long file paths and synthetic function
|
|
26
|
+
names; allow cells to wrap rather than overflow the card width. */
|
|
27
|
+
.code-paths-view .data-table { table-layout: fixed; width: 100%; }
|
|
28
|
+
.code-paths-view .data-table td,
|
|
29
|
+
.code-paths-view .data-table th { white-space: normal; word-break: break-all; overflow-wrap: anywhere; vertical-align: top; }
|
|
30
|
+
|
|
31
|
+
/* ====== Code Paths Graph view (Cytoscape) ====== */
|
|
32
|
+
.code-paths-graph-toolbar { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
|
|
33
|
+
.code-paths-graph-toolbar-label { font-size: 11px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; }
|
|
34
|
+
/* Visualization controls — a 2-row × 4-column grid; each cell is a labeled
|
|
35
|
+
control (label + control flex pair). Auto-flow fills 4 cells per row:
|
|
36
|
+
Row 1: Layout · Scope · Search · Highlight cycles
|
|
37
|
+
Row 2: Level · Package · Kind · Edges
|
|
38
|
+
Each label has a fixed width so the controls line up within a column, and
|
|
39
|
+
the columns are content-sized so the rows read like a table. Package, Kind,
|
|
40
|
+
and Edges are disabled at package level (they only apply at function level),
|
|
41
|
+
so they fade rather than vanish. */
|
|
42
|
+
.code-paths-graph-grid { display: grid; grid-template-columns: repeat(4, max-content); gap: 12px 24px; align-items: center; margin-bottom: 12px; }
|
|
43
|
+
.code-paths-graph-cell { display: flex; align-items: center; gap: 8px; }
|
|
44
|
+
.code-paths-graph-cell .code-paths-graph-toolbar-label { min-width: 56px; text-align: right; }
|
|
45
|
+
.code-paths-graph-cell .code-paths-graph-select { width: 190px; min-width: 0; }
|
|
46
|
+
.code-paths-graph-cell .code-paths-graph-ms { width: 190px; }
|
|
47
|
+
.code-paths-graph-cell .code-paths-graph-ms-trigger { width: 100%; }
|
|
48
|
+
.code-paths-graph-cell-search .code-paths-graph-search { width: 220px; margin-bottom: 0; }
|
|
49
|
+
.code-paths-graph-checkbox { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--text-muted); cursor: pointer; user-select: none; height: 30px; }
|
|
50
|
+
.code-paths-graph-checkbox input { cursor: pointer; }
|
|
51
|
+
/* Functions view controls row (Kind · Package · search). */
|
|
52
|
+
.code-paths-ranked-controls { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 10px; margin-bottom: 12px; }
|
|
53
|
+
.code-paths-ranked-controls .code-paths-search { margin-bottom: 0; }
|
|
54
|
+
.code-paths-graph-select { font-size: 12px; padding: 4px 8px; border-radius: var(--radius-sm); background: var(--bg-surface); border: 1px solid var(--border); color: var(--text-muted); font-family: var(--font); min-width: 150px; height: 30px; box-sizing: border-box; }
|
|
55
|
+
.code-paths-graph-select:disabled { opacity: 0.4; cursor: not-allowed; }
|
|
56
|
+
/* Kind multi-select: a trigger button + a checkbox popover (native
|
|
57
|
+
<select multiple> renders an always-open listbox, which looked wrong). */
|
|
58
|
+
.code-paths-graph-ms { position: relative; display: inline-block; }
|
|
59
|
+
.code-paths-graph-ms-trigger { cursor: pointer; text-align: left; }
|
|
60
|
+
.code-paths-graph-ms-panel { position: absolute; z-index: 30; top: calc(100% + 4px); left: 0; min-width: 190px; max-height: 230px; overflow-y: auto; background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 4px; box-shadow: 0 6px 18px rgba(0,0,0,0.45); }
|
|
61
|
+
.code-paths-graph-ms-item { display: flex; align-items: center; gap: 6px; padding: 4px 6px; font-size: 12px; color: var(--text-muted); cursor: pointer; white-space: nowrap; border-radius: 3px; }
|
|
62
|
+
.code-paths-graph-ms-item:hover { background: var(--bg-hover); color: var(--text); }
|
|
63
|
+
.code-paths-graph-banner { font-size: 12px; color: var(--text-muted); background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 6px 10px; margin-bottom: 10px; }
|
|
64
|
+
.code-paths-graph-search { width: 320px; margin-bottom: 10px; display: block; }
|
|
65
|
+
.code-paths-graph-canvas { width: 100%; height: 640px; background: var(--bg); border: 1px solid var(--border); border-radius: var(--radius-sm); }
|
|
66
|
+
/* Node highlight + impact states live on the Cytoscape canvas (set via cy
|
|
67
|
+
classes gv-search-hit / gv-search-fade / gv-selected / gv-upstream /
|
|
68
|
+
gv-downstream / gv-dimmed). The canvas can't read CSS custom properties,
|
|
69
|
+
so the authoritative colors are inline in view-graph.ts's stylesheet;
|
|
70
|
+
these DOM classes mirror the naming for any future DOM overlay. */
|
|
71
|
+
.search-hit { outline: 2px solid var(--accent); }
|
|
72
|
+
.search-fade { opacity: 0.3; }
|
|
73
|
+
.gv-selected { outline: 2px solid var(--accent); }
|
|
74
|
+
.gv-upstream { color: var(--accent-sim); }
|
|
75
|
+
.gv-downstream { color: var(--accent-fitness); }
|
|
76
|
+
.gv-dimmed { opacity: 0.1; }
|
|
77
|
+
|
|
78
|
+
/* Coupling toolbar (Export CSV) — sits between the heading and the matrix. */
|
|
79
|
+
.coupling-toolbar { display: flex; justify-content: flex-start; margin-bottom: 8px; }
|
|
80
|
+
.coupling-export-btn { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 4px 12px; color: var(--text-muted); font-size: 12px; cursor: pointer; font-family: var(--font); }
|
|
81
|
+
.coupling-export-btn:hover { background: var(--bg-hover); color: var(--text); }
|
|
82
|
+
|
|
83
|
+
/* Coupling heat map cell shading — set --coupling-density per cell */
|
|
84
|
+
.coupling-cell { background: color-mix(in srgb, var(--bg-surface), var(--accent) calc(var(--coupling-density, 0) * 60%)); cursor: pointer; }
|
|
85
|
+
.coupling-cell.empty { color: var(--text-dim); cursor: default; }
|
|
86
|
+
|
|
87
|
+
/* Bounded, scrollable viewport so a large N×N matrix stays on the page —
|
|
88
|
+
gives both a vertical and a horizontal scrollbar instead of overflowing. */
|
|
89
|
+
.coupling-scroll { overflow: auto; max-height: 70vh; max-width: 100%; }
|
|
90
|
+
|
|
91
|
+
/* border-collapse:separate (not collapse) so sticky cells keep their borders
|
|
92
|
+
while scrolling — collapsed borders detach from sticky elements. Cells carry
|
|
93
|
+
only right+bottom borders to avoid doubling; the first row/column add the
|
|
94
|
+
top/left outer edges. */
|
|
95
|
+
.coupling-table { width: auto; border-collapse: separate; border-spacing: 0; font-size: 12px; }
|
|
96
|
+
.coupling-table th, .coupling-table td { border-right: 1px solid var(--border); border-bottom: 1px solid var(--border); padding: 4px 8px; text-align: center; min-width: 36px; }
|
|
97
|
+
.coupling-table thead th { border-top: 1px solid var(--border); }
|
|
98
|
+
.coupling-table tr > :first-child { border-left: 1px solid var(--border); }
|
|
99
|
+
.coupling-table th { color: var(--text-muted); background: var(--bg-surface); }
|
|
100
|
+
.coupling-table th.row-label { text-align: right; padding-right: 10px; }
|
|
101
|
+
|
|
102
|
+
/* Pin the header row (survives vertical scroll) and the label column (survives
|
|
103
|
+
horizontal scroll); the top-left corner is pinned on both axes and layered
|
|
104
|
+
above both. Sticky cells need an opaque background — the th rule above
|
|
105
|
+
supplies one — so scrolling content doesn't bleed through. */
|
|
106
|
+
.coupling-table thead th { position: sticky; top: 0; z-index: 2; }
|
|
107
|
+
.coupling-table th.row-label { position: sticky; left: 0; z-index: 1; }
|
|
108
|
+
.coupling-table thead th.row-label { z-index: 3; }
|
|
109
|
+
`;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=code-paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-paths.js","sourceRoot":"","sources":["../../src/css/code-paths.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGlB,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data tables — the `.data-table` shell used by every list view —
|
|
3
|
+
* plus check rows, findings, expander rows, badges, pagination, the
|
|
4
|
+
* search/filter bar, the long-description block, and the pass-rate
|
|
5
|
+
* progress bar.
|
|
6
|
+
*
|
|
7
|
+
* One file because all of these only ever appear inside a card body
|
|
8
|
+
* around a `.data-table`; splitting further would just create a pile
|
|
9
|
+
* of two-rule files.
|
|
10
|
+
*/
|
|
11
|
+
export declare function dashboardCssDataTable(): string;
|
|
12
|
+
//# sourceMappingURL=data-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-table.d.ts","sourceRoot":"","sources":["../../src/css/data-table.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CA2F9C"}
|