@principal-ade/dynamic-file-tree 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +237 -113
- package/dist/src/components/StoryboardWorkflowsTree/StatusBar.d.ts +27 -0
- package/dist/src/components/StoryboardWorkflowsTree/StatusBar.d.ts.map +1 -0
- package/dist/src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTree.stories.d.ts +1 -0
- package/dist/src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTree.stories.d.ts.map +1 -1
- package/dist/src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.d.ts.map +1 -1
- package/dist/src/components/StoryboardWorkflowsTree/types.d.ts +37 -0
- package/dist/src/components/StoryboardWorkflowsTree/types.d.ts.map +1 -1
- package/dist/src/hooks/useDndManager.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -19,8 +19,10 @@ export type { GitStatusFileTreeContainerProps } from './src/components/GitStatus
|
|
|
19
19
|
export { MultiFileTree, MultiFileTreeCore } from './src/components/MultiFileTree';
|
|
20
20
|
export type { MultiFileTreeProps, MultiFileTreeCoreProps } from './src/components/MultiFileTree';
|
|
21
21
|
export { StoryboardWorkflowsTreeCore } from './src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore';
|
|
22
|
-
export type { StoryboardWorkflowsTreeProps, StoryboardWorkflowNodeData, StoryboardWorkflowNodeType, StoryboardFilterMode, DiscoveredStoryboard, DiscoveredWorkflow, DiscoveredWorkflowWithContent, } from './src/components/StoryboardWorkflowsTree/types';
|
|
22
|
+
export type { StoryboardWorkflowsTreeProps, StoryboardWorkflowNodeData, StoryboardWorkflowNodeType, StoryboardFilterMode, DiscoveredStoryboard, DiscoveredWorkflow, DiscoveredWorkflowWithContent, WorkflowScenarioStatus, CanvasNodeStatus, StatusBarDisplay, } from './src/components/StoryboardWorkflowsTree/types';
|
|
23
23
|
export { hasWorkflowContent } from './src/components/StoryboardWorkflowsTree/types';
|
|
24
|
+
export { StatusBar } from './src/components/StoryboardWorkflowsTree/StatusBar';
|
|
25
|
+
export type { StatusBarProps, StatusBarSegment } from './src/components/StoryboardWorkflowsTree/StatusBar';
|
|
24
26
|
export { WorkflowScenarioTreeCore } from './src/components/WorkflowScenarioTree';
|
|
25
27
|
export type { WorkflowScenarioTreeProps, WorkflowScenarioNodeData, WorkflowScenarioNodeType, WorkflowWithScenarios, WorkflowFilterMode, } from './src/components/WorkflowScenarioTree';
|
|
26
28
|
export { CanvasListTreeCore } from './src/components/CanvasListTree/CanvasListTreeCore';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAG7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAGxG,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAGnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAGjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,YAAY,EAAE,+BAA+B,EAAE,MAAM,6CAA6C,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAClF,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACnH,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -1951,8 +1951,8 @@ var MultiFileTree = ({
|
|
|
1951
1951
|
}, "Selected: ", selectedFile.source.name, " / ", selectedFile.path));
|
|
1952
1952
|
};
|
|
1953
1953
|
// src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx
|
|
1954
|
-
import { Package, FolderKanban, LayoutDashboard, Workflow, BookOpen, FolderOpen,
|
|
1955
|
-
import
|
|
1954
|
+
import { Package, FolderKanban, LayoutDashboard, Workflow, BookOpen, FolderOpen, GitCommit, CircleDot, Circle } from "lucide-react";
|
|
1955
|
+
import React13, { useMemo as useMemo9, useRef as useRef5 } from "react";
|
|
1956
1956
|
import { Tree as Tree3 } from "react-arborist";
|
|
1957
1957
|
|
|
1958
1958
|
// src/utils/gitStatus.tsx
|
|
@@ -2062,8 +2062,67 @@ function lookupGitStatus(filePath, gitStatusMap) {
|
|
|
2062
2062
|
return null;
|
|
2063
2063
|
}
|
|
2064
2064
|
|
|
2065
|
+
// src/components/StoryboardWorkflowsTree/StatusBar.tsx
|
|
2066
|
+
import React12 from "react";
|
|
2067
|
+
var StatusBar = ({
|
|
2068
|
+
segments,
|
|
2069
|
+
width = 72,
|
|
2070
|
+
height = 6,
|
|
2071
|
+
gap = 1,
|
|
2072
|
+
borderRadius = 0
|
|
2073
|
+
}) => {
|
|
2074
|
+
const total = segments.reduce((sum, seg) => sum + seg.count, 0);
|
|
2075
|
+
if (total === 0) {
|
|
2076
|
+
return null;
|
|
2077
|
+
}
|
|
2078
|
+
const totalGapWidth = (segments.filter((s) => s.count > 0).length - 1) * gap;
|
|
2079
|
+
const availableWidth = width - totalGapWidth;
|
|
2080
|
+
const segmentWidths = segments.map((seg) => {
|
|
2081
|
+
if (seg.count === 0)
|
|
2082
|
+
return 0;
|
|
2083
|
+
return Math.max(2, Math.round(seg.count / total * availableWidth));
|
|
2084
|
+
});
|
|
2085
|
+
const totalCalculatedWidth = segmentWidths.reduce((sum, w) => sum + w, 0);
|
|
2086
|
+
const diff = availableWidth - totalCalculatedWidth;
|
|
2087
|
+
if (diff !== 0 && segmentWidths.length > 0) {
|
|
2088
|
+
const largestIndex = segmentWidths.indexOf(Math.max(...segmentWidths));
|
|
2089
|
+
if (largestIndex >= 0) {
|
|
2090
|
+
segmentWidths[largestIndex] += diff;
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
const tooltipParts = segments.filter((seg) => seg.count > 0 && seg.label).map((seg) => `${seg.label}: ${seg.count}`);
|
|
2094
|
+
const tooltip = tooltipParts.length > 0 ? tooltipParts.join(", ") : undefined;
|
|
2095
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
2096
|
+
style: {
|
|
2097
|
+
display: "flex",
|
|
2098
|
+
alignItems: "center",
|
|
2099
|
+
gap: `${gap}px`,
|
|
2100
|
+
width: `${width}px`,
|
|
2101
|
+
height: `${height}px`
|
|
2102
|
+
},
|
|
2103
|
+
title: tooltip
|
|
2104
|
+
}, segments.map((segment, index) => {
|
|
2105
|
+
const segmentWidth = segmentWidths[index];
|
|
2106
|
+
if (segmentWidth === 0)
|
|
2107
|
+
return null;
|
|
2108
|
+
const visibleSegments = segmentWidths.filter((w) => w > 0);
|
|
2109
|
+
const visibleIndex = segmentWidths.slice(0, index + 1).filter((w) => w > 0).length - 1;
|
|
2110
|
+
const isFirst = visibleIndex === 0;
|
|
2111
|
+
const isLast = visibleIndex === visibleSegments.length - 1;
|
|
2112
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
2113
|
+
key: index,
|
|
2114
|
+
style: {
|
|
2115
|
+
width: `${segmentWidth}px`,
|
|
2116
|
+
height: "100%",
|
|
2117
|
+
backgroundColor: segment.color,
|
|
2118
|
+
borderRadius: isFirst && isLast ? `${borderRadius}px` : isFirst ? `${borderRadius}px 0 0 ${borderRadius}px` : isLast ? `0 ${borderRadius}px ${borderRadius}px 0` : "0"
|
|
2119
|
+
}
|
|
2120
|
+
});
|
|
2121
|
+
}));
|
|
2122
|
+
};
|
|
2123
|
+
|
|
2065
2124
|
// src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx
|
|
2066
|
-
var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionPrefix, gitStatusMap) => {
|
|
2125
|
+
var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionPrefix, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap) => {
|
|
2067
2126
|
const packagesMap = new Map;
|
|
2068
2127
|
const rootStoryboards = [];
|
|
2069
2128
|
for (const storyboard of storyboards) {
|
|
@@ -2079,13 +2138,15 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
|
|
|
2079
2138
|
const children = [];
|
|
2080
2139
|
const canvasId = versionPrefix ? `canvas:${versionPrefix}:${storyboard.id}` : `canvas:${storyboard.id}`;
|
|
2081
2140
|
const canvasGitStatus = gitStatusMap ? lookupGitStatus(storyboard.canvas.path, gitStatusMap) : null;
|
|
2141
|
+
const canvasStatus = canvasNodeStatusMap?.[storyboard.canvas.path] ?? canvasNodeStatusMap?.[storyboard.id];
|
|
2082
2142
|
children.push({
|
|
2083
2143
|
id: canvasId,
|
|
2084
2144
|
name: "Storyboard",
|
|
2085
2145
|
type: "canvas",
|
|
2086
2146
|
canvas: storyboard.canvas,
|
|
2087
2147
|
storyboard,
|
|
2088
|
-
gitStatus: canvasGitStatus
|
|
2148
|
+
gitStatus: canvasGitStatus,
|
|
2149
|
+
canvasNodeStatus: canvasStatus
|
|
2089
2150
|
});
|
|
2090
2151
|
if (storyboard.canvas.markdownPath) {
|
|
2091
2152
|
const overviewId = versionPrefix ? `overview:${versionPrefix}:${storyboard.id}` : `overview:${storyboard.id}`;
|
|
@@ -2104,6 +2165,7 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
|
|
|
2104
2165
|
const workflowHasTraces = traceWorkflowsSet?.has(workflow.id) ?? false;
|
|
2105
2166
|
const workflowNodeId = versionPrefix ? `workflow:${versionPrefix}:${workflow.id}` : `workflow:${workflow.id}`;
|
|
2106
2167
|
const workflowGitStatus = gitStatusMap ? lookupGitStatus(workflow.path, gitStatusMap) : null;
|
|
2168
|
+
const scenarioStatus = scenarioStatusMap?.[workflow.id];
|
|
2107
2169
|
return {
|
|
2108
2170
|
id: workflowNodeId,
|
|
2109
2171
|
name: workflow.name,
|
|
@@ -2112,7 +2174,8 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
|
|
|
2112
2174
|
storyboard,
|
|
2113
2175
|
isFullyCovered: workflowCoverageMap?.[workflow.id] ?? false,
|
|
2114
2176
|
hasTraces: workflowHasTraces,
|
|
2115
|
-
gitStatus: workflowGitStatus
|
|
2177
|
+
gitStatus: workflowGitStatus,
|
|
2178
|
+
scenarioStatus
|
|
2116
2179
|
};
|
|
2117
2180
|
}).sort((a, b) => a.name.localeCompare(b.name));
|
|
2118
2181
|
if (filterMode === "with-traces") {
|
|
@@ -2197,7 +2260,7 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
|
|
|
2197
2260
|
return allStoryboards.map(buildStoryboardNode).filter((node) => node !== null).sort((a, b) => a.name.localeCompare(b.name));
|
|
2198
2261
|
}
|
|
2199
2262
|
};
|
|
2200
|
-
var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMode, traceWorkflowsSet, gitStatusMap) => {
|
|
2263
|
+
var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMode, traceWorkflowsSet, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap) => {
|
|
2201
2264
|
const result = [];
|
|
2202
2265
|
for (const snapshot of versionSnapshots) {
|
|
2203
2266
|
const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
|
|
@@ -2209,7 +2272,7 @@ var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMo
|
|
|
2209
2272
|
if (filterMode === "without-traces" && !versionHasUntracedWorkflows) {
|
|
2210
2273
|
continue;
|
|
2211
2274
|
}
|
|
2212
|
-
const storyboardChildren = buildTreeDataFromStoryboards(snapshot.storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionKey, gitStatusMap);
|
|
2275
|
+
const storyboardChildren = buildTreeDataFromStoryboards(snapshot.storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionKey, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap);
|
|
2213
2276
|
if (storyboardChildren.length === 0) {
|
|
2214
2277
|
continue;
|
|
2215
2278
|
}
|
|
@@ -2357,7 +2420,10 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2357
2420
|
traceWorkflowsSet,
|
|
2358
2421
|
gitStatusData,
|
|
2359
2422
|
enablePanelDrag = false,
|
|
2360
|
-
getDragConfig
|
|
2423
|
+
getDragConfig,
|
|
2424
|
+
scenarioStatusMap,
|
|
2425
|
+
canvasNodeStatusMap,
|
|
2426
|
+
statusBarDisplay = "both"
|
|
2361
2427
|
}) => {
|
|
2362
2428
|
const dndProps = getDndProps(enableDragAndDrop);
|
|
2363
2429
|
const parentDndManager = useParentDndManager();
|
|
@@ -2372,78 +2438,135 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2372
2438
|
}, [verticalNodePadding]);
|
|
2373
2439
|
const treeData = useMemo9(() => {
|
|
2374
2440
|
if (versionSnapshots && versionSnapshots.length > 0) {
|
|
2375
|
-
return buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet, gitStatusMap);
|
|
2441
|
+
return buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap);
|
|
2376
2442
|
} else {
|
|
2377
|
-
return buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, undefined, gitStatusMap);
|
|
2443
|
+
return buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, undefined, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap);
|
|
2378
2444
|
}
|
|
2379
|
-
}, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, gitStatusMap]);
|
|
2445
|
+
}, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap]);
|
|
2380
2446
|
const NodeRenderer = (props) => {
|
|
2381
2447
|
const { node } = props;
|
|
2382
2448
|
const data = node.data;
|
|
2383
|
-
const icon = data.type === "version" ? /* @__PURE__ */
|
|
2449
|
+
const icon = data.type === "version" ? /* @__PURE__ */ React13.createElement(GitCommit, {
|
|
2384
2450
|
size: 16
|
|
2385
|
-
}) : data.type === "package" ? /* @__PURE__ */
|
|
2451
|
+
}) : data.type === "package" ? /* @__PURE__ */ React13.createElement(Package, {
|
|
2386
2452
|
size: 16
|
|
2387
|
-
}) : data.type === "storyboard" ? /* @__PURE__ */
|
|
2453
|
+
}) : data.type === "storyboard" ? /* @__PURE__ */ React13.createElement(FolderKanban, {
|
|
2388
2454
|
size: 16
|
|
2389
|
-
}) : data.type === "overview" ? /* @__PURE__ */
|
|
2455
|
+
}) : data.type === "overview" ? /* @__PURE__ */ React13.createElement(BookOpen, {
|
|
2390
2456
|
size: 16
|
|
2391
|
-
}) : data.type === "canvas" ? /* @__PURE__ */
|
|
2457
|
+
}) : data.type === "canvas" ? /* @__PURE__ */ React13.createElement(LayoutDashboard, {
|
|
2392
2458
|
size: 16
|
|
2393
|
-
}) : data.type === "workflows" ? /* @__PURE__ */
|
|
2459
|
+
}) : data.type === "workflows" ? /* @__PURE__ */ React13.createElement(FolderOpen, {
|
|
2394
2460
|
size: 16
|
|
2395
|
-
}) : /* @__PURE__ */
|
|
2461
|
+
}) : /* @__PURE__ */ React13.createElement(Workflow, {
|
|
2396
2462
|
size: 16
|
|
2397
2463
|
});
|
|
2398
2464
|
const nameColor = data.type === "version" ? data.hasTraces ? "#a855f7" : theme.colors.textMuted : data.type === "package" ? theme.colors.primary : data.type === "storyboard" ? data.hasTraces ? theme.colors.success : theme.colors.textSecondary : data.type === "overview" ? theme.colors.info || "#3b82f6" : data.type === "canvas" ? theme.colors.warning || "#f59e0b" : data.type === "workflows" ? theme.colors.text : data.type === "workflow" ? data.hasTraces ? theme.colors.textSecondary : theme.colors.textMuted : theme.colors.textSecondary;
|
|
2399
2465
|
const nodeHorizontalPadding = data.type === "overview" || data.type === "canvas" || data.type === "workflows" || data.type === "workflow" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2400
2466
|
const rightContent = (() => {
|
|
2401
2467
|
const indicators = [];
|
|
2468
|
+
if (data.type === "storyboard" && data.storyboard && scenarioStatusMap && (statusBarDisplay === "traces" || statusBarDisplay === "both")) {
|
|
2469
|
+
let totalTraced = 0;
|
|
2470
|
+
let totalScenarios = 0;
|
|
2471
|
+
for (const workflow of data.storyboard.workflows) {
|
|
2472
|
+
const status = scenarioStatusMap[workflow.id];
|
|
2473
|
+
if (status) {
|
|
2474
|
+
totalTraced += status.scenarios.filter((s) => s.hasTrace).length;
|
|
2475
|
+
totalScenarios += status.scenarios.length;
|
|
2476
|
+
}
|
|
2477
|
+
}
|
|
2478
|
+
if (totalScenarios > 0) {
|
|
2479
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2480
|
+
key: "storyboard-traces",
|
|
2481
|
+
style: { marginLeft: "6px" }
|
|
2482
|
+
}, /* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2483
|
+
segments: [
|
|
2484
|
+
{ count: totalTraced, color: "#3b82f6", label: "Traced" },
|
|
2485
|
+
{ count: totalScenarios - totalTraced, color: "#6b7280", label: "Not traced" }
|
|
2486
|
+
]
|
|
2487
|
+
})));
|
|
2488
|
+
}
|
|
2489
|
+
}
|
|
2490
|
+
if (data.type === "canvas" && data.canvasNodeStatus && statusBarDisplay !== "traces") {
|
|
2491
|
+
const { implemented, approved, draft } = data.canvasNodeStatus;
|
|
2492
|
+
const total = implemented + approved + draft;
|
|
2493
|
+
if (total > 0) {
|
|
2494
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2495
|
+
key: "canvas-status",
|
|
2496
|
+
style: { marginLeft: "6px" }
|
|
2497
|
+
}, /* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2498
|
+
segments: [
|
|
2499
|
+
{ count: implemented, color: "#10b981", label: "Implemented" },
|
|
2500
|
+
{ count: approved, color: "#f59e0b", label: "Approved" },
|
|
2501
|
+
{ count: draft, color: "#6b7280", label: "Draft" }
|
|
2502
|
+
]
|
|
2503
|
+
})));
|
|
2504
|
+
}
|
|
2505
|
+
}
|
|
2506
|
+
if (data.type === "workflow" && data.scenarioStatus) {
|
|
2507
|
+
const { scenarios } = data.scenarioStatus;
|
|
2508
|
+
if (scenarios.length > 0) {
|
|
2509
|
+
const bars = [];
|
|
2510
|
+
if (statusBarDisplay === "implementation" || statusBarDisplay === "both") {
|
|
2511
|
+
const implemented = scenarios.filter((s) => s.implementationStatus === "implemented").length;
|
|
2512
|
+
const partial = scenarios.filter((s) => s.implementationStatus === "partial").length;
|
|
2513
|
+
const draft = scenarios.filter((s) => !s.implementationStatus || s.implementationStatus === "draft").length;
|
|
2514
|
+
if (implemented + partial + draft > 0) {
|
|
2515
|
+
bars.push(/* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2516
|
+
key: "impl",
|
|
2517
|
+
segments: [
|
|
2518
|
+
{ count: implemented, color: "#10b981", label: "Implemented" },
|
|
2519
|
+
{ count: partial, color: "#f59e0b", label: "Partial" },
|
|
2520
|
+
{ count: draft, color: "#6b7280", label: "Draft" }
|
|
2521
|
+
]
|
|
2522
|
+
}));
|
|
2523
|
+
}
|
|
2524
|
+
}
|
|
2525
|
+
if (statusBarDisplay === "traces" || statusBarDisplay === "both") {
|
|
2526
|
+
const traced = scenarios.filter((s) => s.hasTrace).length;
|
|
2527
|
+
const untraced = scenarios.length - traced;
|
|
2528
|
+
bars.push(/* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2529
|
+
key: "traces",
|
|
2530
|
+
segments: [
|
|
2531
|
+
{ count: traced, color: "#3b82f6", label: "Traced" },
|
|
2532
|
+
{ count: untraced, color: "#6b7280", label: "Not traced" }
|
|
2533
|
+
]
|
|
2534
|
+
}));
|
|
2535
|
+
}
|
|
2536
|
+
if (bars.length > 0) {
|
|
2537
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2538
|
+
key: "scenario-status",
|
|
2539
|
+
style: { marginLeft: "6px", display: "flex", flexDirection: "column", gap: "2px" }
|
|
2540
|
+
}, bars));
|
|
2541
|
+
}
|
|
2542
|
+
}
|
|
2543
|
+
}
|
|
2402
2544
|
if (data.gitStatus && (data.type === "canvas" || data.type === "overview" || data.type === "workflow")) {
|
|
2403
2545
|
const gitDisplay = getGitStatusDisplay3(data.gitStatus, theme);
|
|
2404
2546
|
if (gitDisplay) {
|
|
2405
|
-
indicators.push(/* @__PURE__ */
|
|
2547
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2406
2548
|
key: "git",
|
|
2407
2549
|
style: { display: "flex", alignItems: "center", color: gitDisplay.color, marginLeft: "6px" }
|
|
2408
2550
|
}, gitDisplay.icon));
|
|
2409
2551
|
}
|
|
2410
2552
|
}
|
|
2411
|
-
if (data.type === "
|
|
2412
|
-
|
|
2413
|
-
indicators.push(/* @__PURE__ */ React12.createElement(CheckCircle2, {
|
|
2414
|
-
key: "coverage",
|
|
2415
|
-
size: 14,
|
|
2416
|
-
style: { color: "#10b981", marginLeft: "6px" }
|
|
2417
|
-
}));
|
|
2418
|
-
} else if (data.hasTraces !== undefined) {
|
|
2419
|
-
indicators.push(data.hasTraces ? /* @__PURE__ */ React12.createElement(CircleDot, {
|
|
2420
|
-
key: "traces",
|
|
2421
|
-
size: 14,
|
|
2422
|
-
style: { color: "#10b981", marginLeft: "6px" }
|
|
2423
|
-
}) : /* @__PURE__ */ React12.createElement(Circle, {
|
|
2424
|
-
key: "traces",
|
|
2425
|
-
size: 14,
|
|
2426
|
-
style: { color: theme.colors.textMuted, marginLeft: "6px" }
|
|
2427
|
-
}));
|
|
2428
|
-
}
|
|
2429
|
-
}
|
|
2430
|
-
if ((data.type === "version" || data.type === "storyboard") && data.hasTraces !== undefined) {
|
|
2431
|
-
indicators.push(data.hasTraces ? /* @__PURE__ */ React12.createElement(CircleDot, {
|
|
2553
|
+
if (data.type === "version" && data.hasTraces !== undefined) {
|
|
2554
|
+
indicators.push(data.hasTraces ? /* @__PURE__ */ React13.createElement(CircleDot, {
|
|
2432
2555
|
key: "traces",
|
|
2433
2556
|
size: 14,
|
|
2434
2557
|
style: { color: "#10b981", marginLeft: "6px" }
|
|
2435
|
-
}) : /* @__PURE__ */
|
|
2558
|
+
}) : /* @__PURE__ */ React13.createElement(Circle, {
|
|
2436
2559
|
key: "traces",
|
|
2437
2560
|
size: 14,
|
|
2438
2561
|
style: { color: theme.colors.textMuted, marginLeft: "6px" }
|
|
2439
2562
|
}));
|
|
2440
2563
|
}
|
|
2441
|
-
return indicators.length > 0 ? /* @__PURE__ */
|
|
2564
|
+
return indicators.length > 0 ? /* @__PURE__ */ React13.createElement("div", {
|
|
2442
2565
|
style: { display: "flex", alignItems: "center" }
|
|
2443
2566
|
}, indicators) : undefined;
|
|
2444
2567
|
})();
|
|
2445
2568
|
const dragConfig = enablePanelDrag ? getDragConfig ? getDragConfig(data) : getDefaultDragConfig(data) : undefined;
|
|
2446
|
-
return /* @__PURE__ */
|
|
2569
|
+
return /* @__PURE__ */ React13.createElement(TreeNode, {
|
|
2447
2570
|
...props,
|
|
2448
2571
|
theme,
|
|
2449
2572
|
nameColor,
|
|
@@ -2472,7 +2595,7 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2472
2595
|
};
|
|
2473
2596
|
const initialHeight = 600;
|
|
2474
2597
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2475
|
-
return /* @__PURE__ */
|
|
2598
|
+
return /* @__PURE__ */ React13.createElement("div", {
|
|
2476
2599
|
ref: containerRef,
|
|
2477
2600
|
style: {
|
|
2478
2601
|
backgroundColor: theme.colors.background,
|
|
@@ -2481,7 +2604,7 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2481
2604
|
height: "100%",
|
|
2482
2605
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2483
2606
|
}
|
|
2484
|
-
}, /* @__PURE__ */
|
|
2607
|
+
}, /* @__PURE__ */ React13.createElement(Tree3, {
|
|
2485
2608
|
data: treeData,
|
|
2486
2609
|
onSelect: handleSelect,
|
|
2487
2610
|
openByDefault: defaultOpen,
|
|
@@ -2500,7 +2623,7 @@ function hasWorkflowContent(node) {
|
|
|
2500
2623
|
}
|
|
2501
2624
|
// src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.tsx
|
|
2502
2625
|
import { Package as Package2, Workflow as Workflow2, GitCommit as GitCommit2, ListChecks, List } from "lucide-react";
|
|
2503
|
-
import
|
|
2626
|
+
import React14, { useMemo as useMemo10 } from "react";
|
|
2504
2627
|
import { Tree as Tree4 } from "react-arborist";
|
|
2505
2628
|
var buildTreeDataFromWorkflows = (workflows, workflowTraceCounts, scenarioTraceCounts, filterMode, minTraceCount) => {
|
|
2506
2629
|
const packagesMap = new Map;
|
|
@@ -2666,20 +2789,20 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2666
2789
|
const NodeRenderer = (props) => {
|
|
2667
2790
|
const { node } = props;
|
|
2668
2791
|
const data = node.data;
|
|
2669
|
-
const icon = data.type === "version" ? /* @__PURE__ */
|
|
2792
|
+
const icon = data.type === "version" ? /* @__PURE__ */ React14.createElement(GitCommit2, {
|
|
2670
2793
|
size: 16
|
|
2671
|
-
}) : data.type === "package" ? /* @__PURE__ */
|
|
2794
|
+
}) : data.type === "package" ? /* @__PURE__ */ React14.createElement(Package2, {
|
|
2672
2795
|
size: 16
|
|
2673
|
-
}) : data.type === "workflow" ? /* @__PURE__ */
|
|
2796
|
+
}) : data.type === "workflow" ? /* @__PURE__ */ React14.createElement(Workflow2, {
|
|
2674
2797
|
size: 16
|
|
2675
|
-
}) : data.type === "scenario" ? data.hasTraces ? /* @__PURE__ */
|
|
2798
|
+
}) : data.type === "scenario" ? data.hasTraces ? /* @__PURE__ */ React14.createElement(ListChecks, {
|
|
2676
2799
|
size: 16
|
|
2677
|
-
}) : /* @__PURE__ */
|
|
2800
|
+
}) : /* @__PURE__ */ React14.createElement(List, {
|
|
2678
2801
|
size: 16
|
|
2679
2802
|
}) : null;
|
|
2680
2803
|
const nameColor = data.type === "version" ? data.hasTraces ? "#a855f7" : theme.colors.textMuted : data.type === "package" ? theme.colors.primary : data.type === "workflow" ? data.hasTraces ? theme.colors.success : theme.colors.textSecondary : data.hasTraces ? theme.colors.secondary : theme.colors.textMuted;
|
|
2681
2804
|
const nodeHorizontalPadding = data.type === "workflow" || data.type === "scenario" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2682
|
-
const rightContent = data.traceCount !== undefined ? /* @__PURE__ */
|
|
2805
|
+
const rightContent = data.traceCount !== undefined ? /* @__PURE__ */ React14.createElement("span", {
|
|
2683
2806
|
style: {
|
|
2684
2807
|
marginLeft: "8px",
|
|
2685
2808
|
fontSize: "12px",
|
|
@@ -2687,7 +2810,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2687
2810
|
fontWeight: 500
|
|
2688
2811
|
}
|
|
2689
2812
|
}, data.traceCount) : undefined;
|
|
2690
|
-
return /* @__PURE__ */
|
|
2813
|
+
return /* @__PURE__ */ React14.createElement(TreeNode, {
|
|
2691
2814
|
...props,
|
|
2692
2815
|
theme,
|
|
2693
2816
|
nameColor,
|
|
@@ -2708,7 +2831,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2708
2831
|
};
|
|
2709
2832
|
const initialHeight = 600;
|
|
2710
2833
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2711
|
-
return /* @__PURE__ */
|
|
2834
|
+
return /* @__PURE__ */ React14.createElement("div", {
|
|
2712
2835
|
ref: containerRef,
|
|
2713
2836
|
style: {
|
|
2714
2837
|
backgroundColor: theme.colors.background,
|
|
@@ -2717,7 +2840,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2717
2840
|
height: "100%",
|
|
2718
2841
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2719
2842
|
}
|
|
2720
|
-
}, /* @__PURE__ */
|
|
2843
|
+
}, /* @__PURE__ */ React14.createElement(Tree4, {
|
|
2721
2844
|
data: treeData,
|
|
2722
2845
|
onSelect: handleSelect,
|
|
2723
2846
|
openByDefault: defaultOpen,
|
|
@@ -2731,7 +2854,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2731
2854
|
};
|
|
2732
2855
|
// src/components/CanvasListTree/CanvasListTreeCore.tsx
|
|
2733
2856
|
import { Package as Package3, Folder, LayoutDashboard as LayoutDashboard2, FileText } from "lucide-react";
|
|
2734
|
-
import
|
|
2857
|
+
import React15, { useMemo as useMemo11, useRef as useRef6 } from "react";
|
|
2735
2858
|
import { Tree as Tree5 } from "react-arborist";
|
|
2736
2859
|
var buildTreeData = (canvases, gitStatusMap) => {
|
|
2737
2860
|
const packagesMap = new Map;
|
|
@@ -2932,13 +3055,13 @@ var CanvasListTreeCore = ({
|
|
|
2932
3055
|
const NodeRenderer = (props) => {
|
|
2933
3056
|
const { node } = props;
|
|
2934
3057
|
const data = node.data;
|
|
2935
|
-
const icon = data.type === "package" ? /* @__PURE__ */
|
|
3058
|
+
const icon = data.type === "package" ? /* @__PURE__ */ React15.createElement(Package3, {
|
|
2936
3059
|
size: 16
|
|
2937
|
-
}) : data.type === "canvas-folder" ? /* @__PURE__ */
|
|
3060
|
+
}) : data.type === "canvas-folder" ? /* @__PURE__ */ React15.createElement(Folder, {
|
|
2938
3061
|
size: 16
|
|
2939
|
-
}) : data.type === "overview" ? /* @__PURE__ */
|
|
3062
|
+
}) : data.type === "overview" ? /* @__PURE__ */ React15.createElement(FileText, {
|
|
2940
3063
|
size: 16
|
|
2941
|
-
}) : /* @__PURE__ */
|
|
3064
|
+
}) : /* @__PURE__ */ React15.createElement(LayoutDashboard2, {
|
|
2942
3065
|
size: 16
|
|
2943
3066
|
});
|
|
2944
3067
|
const nameColor = data.type === "package" ? theme.colors.primary : data.type === "canvas-folder" ? theme.colors.textSecondary : data.type === "overview" ? theme.colors.info || "#3b82f6" : theme.colors.warning || "#f59e0b";
|
|
@@ -2947,7 +3070,7 @@ var CanvasListTreeCore = ({
|
|
|
2947
3070
|
if (data.gitStatus && (data.type === "canvas" || data.type === "overview")) {
|
|
2948
3071
|
const gitDisplay = getGitStatusDisplay3(data.gitStatus, theme);
|
|
2949
3072
|
if (gitDisplay) {
|
|
2950
|
-
return /* @__PURE__ */
|
|
3073
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
2951
3074
|
style: { display: "flex", alignItems: "center", color: gitDisplay.color, marginLeft: "6px" }
|
|
2952
3075
|
}, gitDisplay.icon);
|
|
2953
3076
|
}
|
|
@@ -2955,7 +3078,7 @@ var CanvasListTreeCore = ({
|
|
|
2955
3078
|
return;
|
|
2956
3079
|
})();
|
|
2957
3080
|
const dragConfig = enablePanelDrag ? getDragConfig ? getDragConfig(data) : getDefaultCanvasDragConfig(data) : undefined;
|
|
2958
|
-
return /* @__PURE__ */
|
|
3081
|
+
return /* @__PURE__ */ React15.createElement(TreeNode, {
|
|
2959
3082
|
...props,
|
|
2960
3083
|
theme,
|
|
2961
3084
|
nameColor,
|
|
@@ -2984,7 +3107,7 @@ var CanvasListTreeCore = ({
|
|
|
2984
3107
|
};
|
|
2985
3108
|
const initialHeight = 600;
|
|
2986
3109
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2987
|
-
return /* @__PURE__ */
|
|
3110
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
2988
3111
|
ref: containerRef,
|
|
2989
3112
|
style: {
|
|
2990
3113
|
backgroundColor: theme.colors.background,
|
|
@@ -2993,7 +3116,7 @@ var CanvasListTreeCore = ({
|
|
|
2993
3116
|
height: "100%",
|
|
2994
3117
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2995
3118
|
}
|
|
2996
|
-
}, /* @__PURE__ */
|
|
3119
|
+
}, /* @__PURE__ */ React15.createElement(Tree5, {
|
|
2997
3120
|
initialData: treeData,
|
|
2998
3121
|
onSelect: handleSelect,
|
|
2999
3122
|
openByDefault: defaultOpen,
|
|
@@ -3008,7 +3131,7 @@ var CanvasListTreeCore = ({
|
|
|
3008
3131
|
};
|
|
3009
3132
|
// src/components/RepositoryTree/RepositoryTreeCore.tsx
|
|
3010
3133
|
import { Folder as Folder2, FolderGit2 } from "lucide-react";
|
|
3011
|
-
import
|
|
3134
|
+
import React16, { useMemo as useMemo12 } from "react";
|
|
3012
3135
|
import { Tree as Tree6 } from "react-arborist";
|
|
3013
3136
|
var buildRepositoryTree = (repositories) => {
|
|
3014
3137
|
if (repositories.length === 0)
|
|
@@ -3122,15 +3245,15 @@ var RepositoryTreeCore = ({
|
|
|
3122
3245
|
const NodeRenderer = (props) => {
|
|
3123
3246
|
const { node } = props;
|
|
3124
3247
|
const data = node.data;
|
|
3125
|
-
const icon = data.type === "directory" ? /* @__PURE__ */
|
|
3248
|
+
const icon = data.type === "directory" ? /* @__PURE__ */ React16.createElement(Folder2, {
|
|
3126
3249
|
size: 16
|
|
3127
|
-
}) : /* @__PURE__ */
|
|
3250
|
+
}) : /* @__PURE__ */ React16.createElement(FolderGit2, {
|
|
3128
3251
|
size: 16
|
|
3129
3252
|
});
|
|
3130
3253
|
const nameColor = data.type === "directory" ? theme.colors.textSecondary : theme.colors.text;
|
|
3131
3254
|
let rightContent = undefined;
|
|
3132
3255
|
if (data.type === "directory" && data.repositoryCount !== undefined) {
|
|
3133
|
-
rightContent = /* @__PURE__ */
|
|
3256
|
+
rightContent = /* @__PURE__ */ React16.createElement("span", {
|
|
3134
3257
|
style: {
|
|
3135
3258
|
marginLeft: "8px",
|
|
3136
3259
|
fontSize: "12px",
|
|
@@ -3142,7 +3265,7 @@ var RepositoryTreeCore = ({
|
|
|
3142
3265
|
const { owner, name } = data.entry.github;
|
|
3143
3266
|
const avatarUrl = `https://github.com/${owner}.png?size=32`;
|
|
3144
3267
|
const repoFullName = `${owner}/${name}`;
|
|
3145
|
-
rightContent = /* @__PURE__ */
|
|
3268
|
+
rightContent = /* @__PURE__ */ React16.createElement("img", {
|
|
3146
3269
|
src: avatarUrl,
|
|
3147
3270
|
alt: owner,
|
|
3148
3271
|
title: repoFullName,
|
|
@@ -3155,7 +3278,7 @@ var RepositoryTreeCore = ({
|
|
|
3155
3278
|
}
|
|
3156
3279
|
});
|
|
3157
3280
|
}
|
|
3158
|
-
return /* @__PURE__ */
|
|
3281
|
+
return /* @__PURE__ */ React16.createElement(TreeNode, {
|
|
3159
3282
|
...props,
|
|
3160
3283
|
theme,
|
|
3161
3284
|
nameColor,
|
|
@@ -3177,7 +3300,7 @@ var RepositoryTreeCore = ({
|
|
|
3177
3300
|
const initialHeight = 600;
|
|
3178
3301
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
3179
3302
|
const selection = selectedRepositoryPath ? `repo:${selectedRepositoryPath}` : undefined;
|
|
3180
|
-
return /* @__PURE__ */
|
|
3303
|
+
return /* @__PURE__ */ React16.createElement("div", {
|
|
3181
3304
|
ref: containerRef,
|
|
3182
3305
|
style: {
|
|
3183
3306
|
backgroundColor: theme.colors.background,
|
|
@@ -3186,7 +3309,7 @@ var RepositoryTreeCore = ({
|
|
|
3186
3309
|
height: "100%",
|
|
3187
3310
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
3188
3311
|
}
|
|
3189
|
-
}, /* @__PURE__ */
|
|
3312
|
+
}, /* @__PURE__ */ React16.createElement(Tree6, {
|
|
3190
3313
|
data: treeData,
|
|
3191
3314
|
onSelect: handleSelect,
|
|
3192
3315
|
openByDefault: defaultOpen,
|
|
@@ -3205,9 +3328,9 @@ import {
|
|
|
3205
3328
|
Circle as Circle2,
|
|
3206
3329
|
TestTube
|
|
3207
3330
|
} from "lucide-react";
|
|
3208
|
-
import
|
|
3331
|
+
import React17, { useMemo as useMemo13, useRef as useRef7 } from "react";
|
|
3209
3332
|
import { Tree as Tree7 } from "react-arborist";
|
|
3210
|
-
var TelemetryCoverageContext =
|
|
3333
|
+
var TelemetryCoverageContext = React17.createContext(null);
|
|
3211
3334
|
var DEFAULT_TEST_PATTERNS = [
|
|
3212
3335
|
/\.test\.[jt]sx?$/,
|
|
3213
3336
|
/\.spec\.[jt]sx?$/,
|
|
@@ -3224,7 +3347,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3224
3347
|
switch (status) {
|
|
3225
3348
|
case "covered":
|
|
3226
3349
|
return {
|
|
3227
|
-
icon: /* @__PURE__ */
|
|
3350
|
+
icon: /* @__PURE__ */ React17.createElement(Activity, {
|
|
3228
3351
|
size: 14
|
|
3229
3352
|
}),
|
|
3230
3353
|
color: "#22c55e",
|
|
@@ -3233,7 +3356,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3233
3356
|
};
|
|
3234
3357
|
case "partial":
|
|
3235
3358
|
return {
|
|
3236
|
-
icon: /* @__PURE__ */
|
|
3359
|
+
icon: /* @__PURE__ */ React17.createElement(CircleDot2, {
|
|
3237
3360
|
size: 14
|
|
3238
3361
|
}),
|
|
3239
3362
|
color: "#eab308",
|
|
@@ -3242,7 +3365,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3242
3365
|
};
|
|
3243
3366
|
case "none":
|
|
3244
3367
|
return {
|
|
3245
|
-
icon: /* @__PURE__ */
|
|
3368
|
+
icon: /* @__PURE__ */ React17.createElement(Circle2, {
|
|
3246
3369
|
size: 14
|
|
3247
3370
|
}),
|
|
3248
3371
|
color: "#6b7280",
|
|
@@ -3354,7 +3477,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
3354
3477
|
}, [coverageData]);
|
|
3355
3478
|
const NodeRenderer = (props) => {
|
|
3356
3479
|
const { node } = props;
|
|
3357
|
-
const ctx =
|
|
3480
|
+
const ctx = React17.useContext(TelemetryCoverageContext);
|
|
3358
3481
|
const coverage = ctx?.coverageMap.get(node.data.id);
|
|
3359
3482
|
const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
|
|
3360
3483
|
const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
|
|
@@ -3366,11 +3489,11 @@ var TelemetryCoverageFileTree = ({
|
|
|
3366
3489
|
} else if (node.data.isTestFile) {
|
|
3367
3490
|
nameColor = "#6b728080";
|
|
3368
3491
|
}
|
|
3369
|
-
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */
|
|
3492
|
+
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React17.createElement(TestTube, {
|
|
3370
3493
|
size: 14,
|
|
3371
3494
|
style: { marginRight: 4, color: "#6b7280" }
|
|
3372
3495
|
}) : null;
|
|
3373
|
-
const rightContent = coverageDisplay ? /* @__PURE__ */
|
|
3496
|
+
const rightContent = coverageDisplay ? /* @__PURE__ */ React17.createElement("div", {
|
|
3374
3497
|
style: {
|
|
3375
3498
|
display: "flex",
|
|
3376
3499
|
alignItems: "center",
|
|
@@ -3378,14 +3501,14 @@ var TelemetryCoverageFileTree = ({
|
|
|
3378
3501
|
marginRight: "8px"
|
|
3379
3502
|
},
|
|
3380
3503
|
title: coverageDisplay.label
|
|
3381
|
-
}, coverageDisplay.icon, /* @__PURE__ */
|
|
3504
|
+
}, coverageDisplay.icon, /* @__PURE__ */ React17.createElement("span", {
|
|
3382
3505
|
style: {
|
|
3383
3506
|
marginLeft: "4px",
|
|
3384
3507
|
fontSize: theme.fontSizes[0],
|
|
3385
3508
|
fontWeight: "bold",
|
|
3386
3509
|
fontFamily: "monospace"
|
|
3387
3510
|
}
|
|
3388
|
-
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */
|
|
3511
|
+
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React17.createElement("div", {
|
|
3389
3512
|
style: {
|
|
3390
3513
|
display: "flex",
|
|
3391
3514
|
alignItems: "center",
|
|
@@ -3394,10 +3517,10 @@ var TelemetryCoverageFileTree = ({
|
|
|
3394
3517
|
opacity: 0.5
|
|
3395
3518
|
},
|
|
3396
3519
|
title: "No telemetry instrumentation"
|
|
3397
|
-
}, /* @__PURE__ */
|
|
3520
|
+
}, /* @__PURE__ */ React17.createElement(Circle2, {
|
|
3398
3521
|
size: 14
|
|
3399
3522
|
})) : null;
|
|
3400
|
-
return /* @__PURE__ */
|
|
3523
|
+
return /* @__PURE__ */ React17.createElement(TreeNode, {
|
|
3401
3524
|
...props,
|
|
3402
3525
|
theme,
|
|
3403
3526
|
rightContent,
|
|
@@ -3470,7 +3593,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
3470
3593
|
return initialHeight;
|
|
3471
3594
|
}, [autoHeight, treeData, openByDefault, initialHeight]);
|
|
3472
3595
|
const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
|
|
3473
|
-
return /* @__PURE__ */
|
|
3596
|
+
return /* @__PURE__ */ React17.createElement("div", {
|
|
3474
3597
|
ref: containerRef,
|
|
3475
3598
|
style: {
|
|
3476
3599
|
backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
|
|
@@ -3479,9 +3602,9 @@ var TelemetryCoverageFileTree = ({
|
|
|
3479
3602
|
...autoHeight ? {} : { height: "100%" },
|
|
3480
3603
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
3481
3604
|
}
|
|
3482
|
-
}, /* @__PURE__ */
|
|
3605
|
+
}, /* @__PURE__ */ React17.createElement(TelemetryCoverageContext.Provider, {
|
|
3483
3606
|
value: { coverageMap, hasTracedChildrenMap }
|
|
3484
|
-
}, /* @__PURE__ */
|
|
3607
|
+
}, /* @__PURE__ */ React17.createElement(Tree7, {
|
|
3485
3608
|
data: treeData,
|
|
3486
3609
|
onSelect: handleSelect,
|
|
3487
3610
|
...selectedFile !== undefined && { selection: selectedFile },
|
|
@@ -3511,7 +3634,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
|
|
|
3511
3634
|
};
|
|
3512
3635
|
// src/components/TelemetryCoverageFileTreeContainer.tsx
|
|
3513
3636
|
import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle5, Activity as Activity2 } from "lucide-react";
|
|
3514
|
-
import
|
|
3637
|
+
import React18, { useState as useState7, useMemo as useMemo14 } from "react";
|
|
3515
3638
|
var TelemetryCoverageFileTreeContainer = ({
|
|
3516
3639
|
fileTree,
|
|
3517
3640
|
theme,
|
|
@@ -3544,34 +3667,34 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3544
3667
|
setShowUncoveredFiles(!showUncoveredFiles);
|
|
3545
3668
|
};
|
|
3546
3669
|
const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
|
|
3547
|
-
return /* @__PURE__ */
|
|
3670
|
+
return /* @__PURE__ */ React18.createElement("div", {
|
|
3548
3671
|
style: { display: "flex", flexDirection: "column", height: "100%" }
|
|
3549
|
-
}, showControls && /* @__PURE__ */
|
|
3672
|
+
}, showControls && /* @__PURE__ */ React18.createElement("div", {
|
|
3550
3673
|
style: {
|
|
3551
3674
|
padding: "12px",
|
|
3552
3675
|
borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
|
|
3553
3676
|
backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
|
|
3554
3677
|
}
|
|
3555
|
-
}, /* @__PURE__ */
|
|
3678
|
+
}, /* @__PURE__ */ React18.createElement("div", {
|
|
3556
3679
|
style: {
|
|
3557
3680
|
display: "flex",
|
|
3558
3681
|
alignItems: "center",
|
|
3559
3682
|
justifyContent: "space-between",
|
|
3560
3683
|
marginBottom: "8px"
|
|
3561
3684
|
}
|
|
3562
|
-
}, /* @__PURE__ */
|
|
3685
|
+
}, /* @__PURE__ */ React18.createElement("div", {
|
|
3563
3686
|
style: { display: "flex", alignItems: "center", gap: "8px" }
|
|
3564
|
-
}, /* @__PURE__ */
|
|
3687
|
+
}, /* @__PURE__ */ React18.createElement(Activity2, {
|
|
3565
3688
|
size: 16,
|
|
3566
3689
|
color: theme.colors.primary
|
|
3567
|
-
}), /* @__PURE__ */
|
|
3690
|
+
}), /* @__PURE__ */ React18.createElement("h3", {
|
|
3568
3691
|
style: {
|
|
3569
3692
|
margin: 0,
|
|
3570
3693
|
fontSize: theme.fontSizes[1],
|
|
3571
3694
|
fontWeight: "bold",
|
|
3572
3695
|
color: theme.colors.text
|
|
3573
3696
|
}
|
|
3574
|
-
}, title), stats.testFiles > 0 && /* @__PURE__ */
|
|
3697
|
+
}, title), stats.testFiles > 0 && /* @__PURE__ */ React18.createElement("span", {
|
|
3575
3698
|
style: {
|
|
3576
3699
|
backgroundColor: percentageColor,
|
|
3577
3700
|
color: "#ffffff",
|
|
@@ -3581,14 +3704,14 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3581
3704
|
fontWeight: "bold",
|
|
3582
3705
|
fontFamily: "monospace"
|
|
3583
3706
|
}
|
|
3584
|
-
}, stats.percentage, "%"), isLoading && /* @__PURE__ */
|
|
3707
|
+
}, stats.percentage, "%"), isLoading && /* @__PURE__ */ React18.createElement(RefreshCw2, {
|
|
3585
3708
|
size: 16,
|
|
3586
3709
|
color: theme.colors.text,
|
|
3587
3710
|
className: "telemetry-coverage-spinner",
|
|
3588
3711
|
style: { animation: "spin 1s linear infinite" }
|
|
3589
|
-
})), /* @__PURE__ */
|
|
3712
|
+
})), /* @__PURE__ */ React18.createElement("div", {
|
|
3590
3713
|
style: { display: "flex", gap: "8px" }
|
|
3591
|
-
}, /* @__PURE__ */
|
|
3714
|
+
}, /* @__PURE__ */ React18.createElement("button", {
|
|
3592
3715
|
onClick: toggleShowUncoveredFiles,
|
|
3593
3716
|
style: {
|
|
3594
3717
|
background: "none",
|
|
@@ -3603,11 +3726,11 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3603
3726
|
color: theme.colors.text
|
|
3604
3727
|
},
|
|
3605
3728
|
title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
|
|
3606
|
-
}, showUncoveredFiles ? /* @__PURE__ */
|
|
3729
|
+
}, showUncoveredFiles ? /* @__PURE__ */ React18.createElement(EyeOff2, {
|
|
3607
3730
|
size: 14
|
|
3608
|
-
}) : /* @__PURE__ */
|
|
3731
|
+
}) : /* @__PURE__ */ React18.createElement(Eye2, {
|
|
3609
3732
|
size: 14
|
|
3610
|
-
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */
|
|
3733
|
+
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React18.createElement("button", {
|
|
3611
3734
|
onClick: handleRefresh,
|
|
3612
3735
|
disabled: isLoading,
|
|
3613
3736
|
style: {
|
|
@@ -3624,9 +3747,9 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3624
3747
|
opacity: isLoading ? 0.6 : 1
|
|
3625
3748
|
},
|
|
3626
3749
|
title: "Refresh coverage data"
|
|
3627
|
-
}, /* @__PURE__ */
|
|
3750
|
+
}, /* @__PURE__ */ React18.createElement(RefreshCw2, {
|
|
3628
3751
|
size: 14
|
|
3629
|
-
}), "Refresh"))), error && /* @__PURE__ */
|
|
3752
|
+
}), "Refresh"))), error && /* @__PURE__ */ React18.createElement("div", {
|
|
3630
3753
|
style: {
|
|
3631
3754
|
display: "flex",
|
|
3632
3755
|
alignItems: "center",
|
|
@@ -3639,36 +3762,36 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3639
3762
|
color: "#856404",
|
|
3640
3763
|
marginBottom: "8px"
|
|
3641
3764
|
}
|
|
3642
|
-
}, /* @__PURE__ */
|
|
3765
|
+
}, /* @__PURE__ */ React18.createElement(AlertCircle5, {
|
|
3643
3766
|
size: 14
|
|
3644
|
-
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */
|
|
3767
|
+
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React18.createElement("div", {
|
|
3645
3768
|
style: {
|
|
3646
3769
|
display: "flex",
|
|
3647
3770
|
gap: "16px",
|
|
3648
3771
|
fontSize: theme.fontSizes[0],
|
|
3649
3772
|
color: theme.colors.textSecondary || "#666"
|
|
3650
3773
|
}
|
|
3651
|
-
}, /* @__PURE__ */
|
|
3774
|
+
}, /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3652
3775
|
style: { color: "#22c55e" }
|
|
3653
|
-
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */
|
|
3776
|
+
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3654
3777
|
style: { color: "#eab308" }
|
|
3655
|
-
}, stats.partialFiles), " partial"), /* @__PURE__ */
|
|
3778
|
+
}, stats.partialFiles), " partial"), /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3656
3779
|
style: { color: "#6b7280" }
|
|
3657
|
-
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */
|
|
3780
|
+
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React18.createElement("span", {
|
|
3658
3781
|
style: { marginLeft: "auto" }
|
|
3659
|
-
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */
|
|
3782
|
+
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React18.createElement("div", {
|
|
3660
3783
|
style: {
|
|
3661
3784
|
fontSize: theme.fontSizes[0],
|
|
3662
3785
|
color: theme.colors.textSecondary || "#666"
|
|
3663
3786
|
}
|
|
3664
|
-
}, "No test files with coverage data found")), /* @__PURE__ */
|
|
3787
|
+
}, "No test files with coverage data found")), /* @__PURE__ */ React18.createElement(DirectoryFilterInput, {
|
|
3665
3788
|
fileTree,
|
|
3666
3789
|
theme,
|
|
3667
3790
|
filters,
|
|
3668
3791
|
onFiltersChange: setFilters
|
|
3669
|
-
}), /* @__PURE__ */
|
|
3792
|
+
}), /* @__PURE__ */ React18.createElement("div", {
|
|
3670
3793
|
style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
|
|
3671
|
-
}, /* @__PURE__ */
|
|
3794
|
+
}, /* @__PURE__ */ React18.createElement(TelemetryCoverageFileTree, {
|
|
3672
3795
|
fileTree,
|
|
3673
3796
|
theme,
|
|
3674
3797
|
coverageData,
|
|
@@ -3704,6 +3827,7 @@ export {
|
|
|
3704
3827
|
TelemetryCoverageFileTreeContainer,
|
|
3705
3828
|
TelemetryCoverageFileTree,
|
|
3706
3829
|
StoryboardWorkflowsTreeCore,
|
|
3830
|
+
StatusBar,
|
|
3707
3831
|
RepositoryTreeCore,
|
|
3708
3832
|
OrderedFileList,
|
|
3709
3833
|
MultiFileTreeCore,
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface StatusBarSegment {
|
|
3
|
+
/** Number of items in this segment */
|
|
4
|
+
count: number;
|
|
5
|
+
/** Color for this segment (hex or CSS color) */
|
|
6
|
+
color: string;
|
|
7
|
+
/** Optional label for tooltip */
|
|
8
|
+
label?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface StatusBarProps {
|
|
11
|
+
/** Array of segments to display */
|
|
12
|
+
segments: StatusBarSegment[];
|
|
13
|
+
/** Total width of the bar in pixels (default: 72) */
|
|
14
|
+
width?: number;
|
|
15
|
+
/** Height of the bar in pixels (default: 6) */
|
|
16
|
+
height?: number;
|
|
17
|
+
/** Gap between segments in pixels (default: 1) */
|
|
18
|
+
gap?: number;
|
|
19
|
+
/** Border radius in pixels (default: 0) */
|
|
20
|
+
borderRadius?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A small inline status bar showing color-coded segments.
|
|
24
|
+
* Used to visualize scenario coverage or node implementation status.
|
|
25
|
+
*/
|
|
26
|
+
export declare const StatusBar: React.FC<StatusBarProps>;
|
|
27
|
+
//# sourceMappingURL=StatusBar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatusBar.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StatusBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAiF9C,CAAC"}
|
|
@@ -31,4 +31,5 @@ export declare const GitStatusAllTypes: Story;
|
|
|
31
31
|
export declare const GitStatusWithVersionGrouping: Story;
|
|
32
32
|
export declare const GitStatusMixedScenarios: Story;
|
|
33
33
|
export declare const DragAndDropTest: Story;
|
|
34
|
+
export declare const WithStatusBars: Story;
|
|
34
35
|
//# sourceMappingURL=StoryboardWorkflowsTree.stories.d.ts.map
|
package/dist/src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTree.stories.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardWorkflowsTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTree.stories.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAyP5E,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,2BAA2B,CAOlD,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE1D,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAuE7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAkEpC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAgE7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAwB/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAiBlC,CAAC;AA4CF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAqEvC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAyFvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAiH9B,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KA2GzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KAyEzC,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,KAwF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KA0H/B,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,KAwF1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAuIrC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,KAqK7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"StoryboardWorkflowsTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTree.stories.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAyP5E,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,2BAA2B,CAOlD,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAE1D,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAO3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAOhC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAOxB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAuE7B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,KAkEpC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAgE7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KAwB/B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,KAiBlC,CAAC;AA4CF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAqEvC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,KAyFvC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAiH9B,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KA2GzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,KAyEzC,CAAC;AAMF,eAAO,MAAM,aAAa,EAAE,KAwF3B,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,KA0H/B,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,KAwF1C,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,KAuIrC,CAAC;AAMF,eAAO,MAAM,eAAe,EAAE,KAqK7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAoH5B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAS/C,OAAO,KAAK,EAEV,4BAA4B,EAO7B,MAAM,SAAS,CAAC;AAwYjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAiU9E,CAAC"}
|
|
@@ -11,6 +11,35 @@ export type StoryboardWorkflowNodeType = 'version' | 'package' | 'storyboard' |
|
|
|
11
11
|
* - 'without-traces': Show only workflows that don't have traces
|
|
12
12
|
*/
|
|
13
13
|
export type StoryboardFilterMode = 'all' | 'with-traces' | 'without-traces';
|
|
14
|
+
/**
|
|
15
|
+
* Status bar data for workflow scenarios
|
|
16
|
+
* Key is workflow ID
|
|
17
|
+
*/
|
|
18
|
+
export interface WorkflowScenarioStatus {
|
|
19
|
+
/** Array of scenario statuses in order */
|
|
20
|
+
scenarios: Array<{
|
|
21
|
+
id: string;
|
|
22
|
+
hasTrace: boolean;
|
|
23
|
+
/** Implementation status of nodes in this scenario */
|
|
24
|
+
implementationStatus?: 'draft' | 'partial' | 'implemented';
|
|
25
|
+
}>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Which status bars to display
|
|
29
|
+
*/
|
|
30
|
+
export type StatusBarDisplay = 'implementation' | 'traces' | 'both';
|
|
31
|
+
/**
|
|
32
|
+
* Status bar data for canvas nodes
|
|
33
|
+
* Key is canvas path or storyboard ID
|
|
34
|
+
*/
|
|
35
|
+
export interface CanvasNodeStatus {
|
|
36
|
+
/** Number of implemented nodes */
|
|
37
|
+
implemented: number;
|
|
38
|
+
/** Number of approved (but not implemented) nodes */
|
|
39
|
+
approved: number;
|
|
40
|
+
/** Number of draft nodes */
|
|
41
|
+
draft: number;
|
|
42
|
+
}
|
|
14
43
|
export interface StoryboardWorkflowNodeData extends TreeNodeData {
|
|
15
44
|
type: StoryboardWorkflowNodeType;
|
|
16
45
|
children?: StoryboardWorkflowNodeData[];
|
|
@@ -26,6 +55,8 @@ export interface StoryboardWorkflowNodeData extends TreeNodeData {
|
|
|
26
55
|
repositoryUrl?: string;
|
|
27
56
|
commitSha?: string;
|
|
28
57
|
gitStatus?: GitStatus;
|
|
58
|
+
scenarioStatus?: WorkflowScenarioStatus;
|
|
59
|
+
canvasNodeStatus?: CanvasNodeStatus;
|
|
29
60
|
}
|
|
30
61
|
/**
|
|
31
62
|
* Type guard to check if a workflow node has full content (WorkflowTemplate with scenarios)
|
|
@@ -51,6 +82,12 @@ export interface StoryboardWorkflowsTreeProps {
|
|
|
51
82
|
workflowFilterMode?: StoryboardFilterMode;
|
|
52
83
|
traceWorkflowsSet?: Set<string>;
|
|
53
84
|
gitStatusData?: GitFileStatus[];
|
|
85
|
+
/** Map of workflow ID to scenario status (for showing scenario coverage bars) */
|
|
86
|
+
scenarioStatusMap?: Record<string, WorkflowScenarioStatus>;
|
|
87
|
+
/** Map of canvas path (or storyboard ID) to node status (for showing implementation bars) */
|
|
88
|
+
canvasNodeStatusMap?: Record<string, CanvasNodeStatus>;
|
|
89
|
+
/** Which status bars to display: 'implementation', 'traces', or 'both' (default: 'both') */
|
|
90
|
+
statusBarDisplay?: StatusBarDisplay;
|
|
54
91
|
/**
|
|
55
92
|
* Enable dragging nodes to other panels (e.g., terminal).
|
|
56
93
|
* When enabled, nodes will transfer their path/data using the panel-framework-core format.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEtL,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG5D,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAE7I,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjI;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,KAAK,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE5E,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,IAAI,EAAE,0BAA0B,CAAC;IACjC,QAAQ,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAGxC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAI1B,QAAQ,CAAC,EAAE,kBAAkB,GAAG,6BAA6B,CAAC;IAE9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,SAAS,CAAC,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDndManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDndManager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useDndManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/useDndManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,mBAAmB,QAAO,eAAe,GAAG,SAGxD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,2BAAyB,KAAG;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAKnG,CAAC"}
|