@principal-ade/dynamic-file-tree 0.1.59 → 0.1.60
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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +318 -63
- package/dist/src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.d.ts.map +1 -1
- package/dist/src/components/WorkflowScenarioTree/WorkflowScenarioTree.stories.d.ts +9 -0
- package/dist/src/components/WorkflowScenarioTree/WorkflowScenarioTree.stories.d.ts.map +1 -0
- package/dist/src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.d.ts +4 -0
- package/dist/src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.d.ts.map +1 -0
- package/dist/src/components/WorkflowScenarioTree/index.d.ts +3 -0
- package/dist/src/components/WorkflowScenarioTree/index.d.ts.map +1 -0
- package/dist/src/components/WorkflowScenarioTree/types.d.ts +76 -0
- package/dist/src/components/WorkflowScenarioTree/types.d.ts.map +1 -0
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ 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
22
|
export type { StoryboardWorkflowsTreeProps, StoryboardWorkflowNodeData, StoryboardWorkflowNodeType, DiscoveredStoryboard, DiscoveredWorkflow, } from './src/components/StoryboardWorkflowsTree/types';
|
|
23
|
+
export { WorkflowScenarioTreeCore } from './src/components/WorkflowScenarioTree';
|
|
24
|
+
export type { WorkflowScenarioTreeProps, WorkflowScenarioNodeData, WorkflowScenarioNodeType, WorkflowWithScenarios, WorkflowFilterMode, } from './src/components/WorkflowScenarioTree';
|
|
23
25
|
export { CanvasListTreeCore } from './src/components/CanvasListTree/CanvasListTreeCore';
|
|
24
26
|
export type { CanvasListTreeProps, CanvasListNodeData, CanvasListNodeType, DiscoveredCanvas, } from './src/components/CanvasListTree/types';
|
|
25
27
|
export { TelemetryCoverageFileTree, calculateTelemetryCoverageStats, } from './src/components/TelemetryCoverageFileTree';
|
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,MAAM,2BAA2B,CAAC;AAGxD,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,MAAM,2BAA2B,CAAC;AAG7E,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,EACtB,aAAa,EACb,SAAS,EACV,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,kBAAkB,GACnB,MAAM,gDAAgD,CAAC;AAGxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,kCAAkC,EAAE,MAAM,qDAAqD,CAAC;AACzG,YAAY,EAAE,uCAAuC,EAAE,MAAM,qDAAqD,CAAC;AAGnH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
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,MAAM,2BAA2B,CAAC;AAGxD,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,MAAM,2BAA2B,CAAC;AAG7E,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,EACtB,aAAa,EACb,SAAS,EACV,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,kBAAkB,GACnB,MAAM,gDAAgD,CAAC;AAGxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,kCAAkC,EAAE,MAAM,qDAAqD,CAAC;AACzG,YAAY,EAAE,uCAAuC,EAAE,MAAM,qDAAqD,CAAC;AAGnH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
package/dist/index.mjs
CHANGED
|
@@ -2021,19 +2021,34 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
|
|
|
2021
2021
|
}
|
|
2022
2022
|
};
|
|
2023
2023
|
var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMode, traceWorkflowsSet) => {
|
|
2024
|
+
console.log("[buildTreeDataFromVersions] Called with:", {
|
|
2025
|
+
snapshotCount: versionSnapshots.length,
|
|
2026
|
+
filterMode,
|
|
2027
|
+
traceWorkflowsSet
|
|
2028
|
+
});
|
|
2024
2029
|
const result = [];
|
|
2025
2030
|
for (const snapshot of versionSnapshots) {
|
|
2026
2031
|
const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
|
|
2032
|
+
console.log("[buildTreeDataFromVersions] Processing version:", versionKey);
|
|
2033
|
+
console.log("[buildTreeDataFromVersions] Storyboards in snapshot:", snapshot.storyboards.length);
|
|
2027
2034
|
const versionHasTracedWorkflows = snapshot.storyboards.some((storyboard) => storyboard.workflows.some((workflow) => traceWorkflowsSet?.has(workflow.id) ?? false));
|
|
2028
2035
|
const versionHasUntracedWorkflows = snapshot.storyboards.some((storyboard) => storyboard.workflows.some((workflow) => !(traceWorkflowsSet?.has(workflow.id) ?? false)));
|
|
2036
|
+
console.log("[buildTreeDataFromVersions] Version has traced workflows:", versionHasTracedWorkflows);
|
|
2037
|
+
console.log("[buildTreeDataFromVersions] Version has untraced workflows:", versionHasUntracedWorkflows);
|
|
2029
2038
|
if (filterMode === "with-traces" && !versionHasTracedWorkflows) {
|
|
2039
|
+
console.log("[buildTreeDataFromVersions] Skipping version (no traced workflows)");
|
|
2030
2040
|
continue;
|
|
2031
2041
|
}
|
|
2032
2042
|
if (filterMode === "without-traces" && !versionHasUntracedWorkflows) {
|
|
2043
|
+
console.log("[buildTreeDataFromVersions] Skipping version (no untraced workflows)");
|
|
2033
2044
|
continue;
|
|
2034
2045
|
}
|
|
2046
|
+
console.log("[buildTreeDataFromVersions] Building storyboard children...");
|
|
2035
2047
|
const storyboardChildren = buildTreeDataFromStoryboards(snapshot.storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionKey);
|
|
2048
|
+
console.log("[buildTreeDataFromVersions] Storyboard children:", storyboardChildren);
|
|
2049
|
+
console.log("[buildTreeDataFromVersions] Storyboard children length:", storyboardChildren.length);
|
|
2036
2050
|
if (storyboardChildren.length === 0) {
|
|
2051
|
+
console.log("[buildTreeDataFromVersions] Skipping version (no children after filtering)");
|
|
2037
2052
|
continue;
|
|
2038
2053
|
}
|
|
2039
2054
|
const repoName = snapshot.repositoryUrl.replace("https://github.com/", "");
|
|
@@ -2075,10 +2090,20 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2075
2090
|
return contentLineHeight + paddingValue * 2 + borderHeight;
|
|
2076
2091
|
}, [verticalNodePadding]);
|
|
2077
2092
|
const treeData = useMemo9(() => {
|
|
2093
|
+
console.log("[StoryboardWorkflowsTreeCore] Building tree data...");
|
|
2094
|
+
console.log("[StoryboardWorkflowsTreeCore] versionSnapshots:", versionSnapshots);
|
|
2095
|
+
console.log("[StoryboardWorkflowsTreeCore] versionSnapshots.length:", versionSnapshots?.length);
|
|
2096
|
+
console.log("[StoryboardWorkflowsTreeCore] workflowFilterMode:", workflowFilterMode);
|
|
2097
|
+
console.log("[StoryboardWorkflowsTreeCore] traceWorkflowsSet:", traceWorkflowsSet);
|
|
2078
2098
|
if (versionSnapshots && versionSnapshots.length > 0) {
|
|
2079
|
-
|
|
2099
|
+
const result = buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet);
|
|
2100
|
+
console.log("[StoryboardWorkflowsTreeCore] buildTreeDataFromVersions result:", result);
|
|
2101
|
+
console.log("[StoryboardWorkflowsTreeCore] result.length:", result.length);
|
|
2102
|
+
return result;
|
|
2080
2103
|
} else {
|
|
2081
|
-
|
|
2104
|
+
const result = buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode);
|
|
2105
|
+
console.log("[StoryboardWorkflowsTreeCore] buildTreeDataFromStoryboards result:", result);
|
|
2106
|
+
return result;
|
|
2082
2107
|
}
|
|
2083
2108
|
}, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode]);
|
|
2084
2109
|
const NodeRenderer = (props) => {
|
|
@@ -2178,10 +2203,239 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2178
2203
|
...dndProps
|
|
2179
2204
|
}, NodeRenderer));
|
|
2180
2205
|
};
|
|
2181
|
-
// src/components/
|
|
2182
|
-
import { Package as Package2,
|
|
2183
|
-
import React12, { useMemo as useMemo10
|
|
2206
|
+
// src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.tsx
|
|
2207
|
+
import { Package as Package2, Workflow as Workflow2, GitCommit as GitCommit2, ListChecks, List } from "lucide-react";
|
|
2208
|
+
import React12, { useMemo as useMemo10 } from "react";
|
|
2184
2209
|
import { Tree as Tree4 } from "react-arborist";
|
|
2210
|
+
var buildTreeDataFromWorkflows = (workflows, workflowTraceCounts, scenarioTraceCounts, filterMode, minTraceCount) => {
|
|
2211
|
+
const packagesMap = new Map;
|
|
2212
|
+
const rootWorkflows = [];
|
|
2213
|
+
for (const workflow of workflows) {
|
|
2214
|
+
if (workflow.scope === "package" && workflow.packageName) {
|
|
2215
|
+
const existing = packagesMap.get(workflow.packageName) || [];
|
|
2216
|
+
existing.push(workflow);
|
|
2217
|
+
packagesMap.set(workflow.packageName, existing);
|
|
2218
|
+
} else {
|
|
2219
|
+
rootWorkflows.push(workflow);
|
|
2220
|
+
}
|
|
2221
|
+
}
|
|
2222
|
+
const buildWorkflowNode = (workflow) => {
|
|
2223
|
+
const workflowTraceCount = workflowTraceCounts?.[workflow.id] ?? 0;
|
|
2224
|
+
const hasTraces = workflowTraceCount > 0;
|
|
2225
|
+
if (filterMode === "with-traces" && !hasTraces) {
|
|
2226
|
+
return null;
|
|
2227
|
+
}
|
|
2228
|
+
if (filterMode === "without-traces" && hasTraces) {
|
|
2229
|
+
return null;
|
|
2230
|
+
}
|
|
2231
|
+
if (filterMode === "minimum-traces" && workflowTraceCount < (minTraceCount ?? 1)) {
|
|
2232
|
+
return null;
|
|
2233
|
+
}
|
|
2234
|
+
const scenarioNodes = workflow.scenarios.map((scenario) => {
|
|
2235
|
+
const scenarioKey = `${workflow.id}/${scenario.id}`;
|
|
2236
|
+
const scenarioTraceCount = scenarioTraceCounts?.[scenarioKey] ?? 0;
|
|
2237
|
+
return {
|
|
2238
|
+
id: `scenario:${workflow.id}:${scenario.id}`,
|
|
2239
|
+
name: scenario.description,
|
|
2240
|
+
type: "scenario",
|
|
2241
|
+
scenario,
|
|
2242
|
+
workflow,
|
|
2243
|
+
traceCount: scenarioTraceCount,
|
|
2244
|
+
hasTraces: scenarioTraceCount > 0
|
|
2245
|
+
};
|
|
2246
|
+
}).sort((a, b) => (b.traceCount ?? 0) - (a.traceCount ?? 0));
|
|
2247
|
+
const displayName = `${workflow.storyboard.name}: ${workflow.name}`;
|
|
2248
|
+
return {
|
|
2249
|
+
id: `workflow:${workflow.id}`,
|
|
2250
|
+
name: displayName,
|
|
2251
|
+
type: "workflow",
|
|
2252
|
+
workflow,
|
|
2253
|
+
storyboard: workflow.storyboard,
|
|
2254
|
+
traceCount: workflowTraceCount,
|
|
2255
|
+
hasTraces,
|
|
2256
|
+
children: scenarioNodes.length > 0 ? scenarioNodes : undefined
|
|
2257
|
+
};
|
|
2258
|
+
};
|
|
2259
|
+
const hasMultiplePackages = packagesMap.size > 1;
|
|
2260
|
+
const hasRootAndPackages = packagesMap.size > 0 && rootWorkflows.length > 0;
|
|
2261
|
+
const shouldShowPackageLevel = hasMultiplePackages || hasRootAndPackages;
|
|
2262
|
+
if (shouldShowPackageLevel) {
|
|
2263
|
+
const result = [];
|
|
2264
|
+
for (const [packageName, packageWorkflows] of packagesMap) {
|
|
2265
|
+
const workflowNodes = packageWorkflows.map(buildWorkflowNode).filter((node) => node !== null).sort((a, b) => (b.traceCount ?? 0) - (a.traceCount ?? 0));
|
|
2266
|
+
if (workflowNodes.length > 0) {
|
|
2267
|
+
result.push({
|
|
2268
|
+
id: `package:${packageName}`,
|
|
2269
|
+
name: packageName,
|
|
2270
|
+
type: "package",
|
|
2271
|
+
packageName,
|
|
2272
|
+
scope: "package",
|
|
2273
|
+
children: workflowNodes
|
|
2274
|
+
});
|
|
2275
|
+
}
|
|
2276
|
+
}
|
|
2277
|
+
if (rootWorkflows.length > 0) {
|
|
2278
|
+
const rootWorkflowNodes = rootWorkflows.map(buildWorkflowNode).filter((node) => node !== null).sort((a, b) => (b.traceCount ?? 0) - (a.traceCount ?? 0));
|
|
2279
|
+
if (rootWorkflowNodes.length > 0) {
|
|
2280
|
+
result.push({
|
|
2281
|
+
id: "package:root",
|
|
2282
|
+
name: "Root",
|
|
2283
|
+
type: "package",
|
|
2284
|
+
packageName: "root",
|
|
2285
|
+
scope: "root",
|
|
2286
|
+
children: rootWorkflowNodes
|
|
2287
|
+
});
|
|
2288
|
+
}
|
|
2289
|
+
}
|
|
2290
|
+
return result.sort((a, b) => {
|
|
2291
|
+
if (a.packageName === "root")
|
|
2292
|
+
return 1;
|
|
2293
|
+
if (b.packageName === "root")
|
|
2294
|
+
return -1;
|
|
2295
|
+
return a.name.localeCompare(b.name);
|
|
2296
|
+
});
|
|
2297
|
+
} else {
|
|
2298
|
+
const allWorkflows = [...rootWorkflows];
|
|
2299
|
+
for (const packageWorkflows of packagesMap.values()) {
|
|
2300
|
+
allWorkflows.push(...packageWorkflows);
|
|
2301
|
+
}
|
|
2302
|
+
return allWorkflows.map(buildWorkflowNode).filter((node) => node !== null).sort((a, b) => (b.traceCount ?? 0) - (a.traceCount ?? 0));
|
|
2303
|
+
}
|
|
2304
|
+
};
|
|
2305
|
+
var buildTreeDataFromVersions2 = (versionSnapshots, workflowsByVersion, workflowTraceCounts, scenarioTraceCounts, filterMode, minTraceCount) => {
|
|
2306
|
+
const result = [];
|
|
2307
|
+
for (const snapshot of versionSnapshots) {
|
|
2308
|
+
const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
|
|
2309
|
+
const versionWorkflows = workflowsByVersion.get(versionKey) || [];
|
|
2310
|
+
const workflowChildren = buildTreeDataFromWorkflows(versionWorkflows, workflowTraceCounts, scenarioTraceCounts, filterMode, minTraceCount);
|
|
2311
|
+
if (workflowChildren.length === 0) {
|
|
2312
|
+
continue;
|
|
2313
|
+
}
|
|
2314
|
+
const versionTraceCount = versionWorkflows.reduce((sum, workflow) => {
|
|
2315
|
+
return sum + (workflowTraceCounts?.[workflow.id] ?? 0);
|
|
2316
|
+
}, 0);
|
|
2317
|
+
const repoName = snapshot.repositoryUrl.replace("https://github.com/", "");
|
|
2318
|
+
const shortSha = snapshot.commitSha.substring(0, 8);
|
|
2319
|
+
result.push({
|
|
2320
|
+
id: `version:${versionKey}`,
|
|
2321
|
+
name: `${repoName}@${shortSha}`,
|
|
2322
|
+
type: "version",
|
|
2323
|
+
versionSnapshot: snapshot,
|
|
2324
|
+
repositoryUrl: snapshot.repositoryUrl,
|
|
2325
|
+
commitSha: snapshot.commitSha,
|
|
2326
|
+
traceCount: versionTraceCount,
|
|
2327
|
+
hasTraces: versionTraceCount > 0,
|
|
2328
|
+
children: workflowChildren
|
|
2329
|
+
});
|
|
2330
|
+
}
|
|
2331
|
+
return result.sort((a, b) => (b.traceCount ?? 0) - (a.traceCount ?? 0));
|
|
2332
|
+
};
|
|
2333
|
+
var WorkflowScenarioTreeCore = ({
|
|
2334
|
+
workflows,
|
|
2335
|
+
theme,
|
|
2336
|
+
onClick,
|
|
2337
|
+
selectedNodeId,
|
|
2338
|
+
defaultOpen = false,
|
|
2339
|
+
initialOpenState,
|
|
2340
|
+
horizontalNodePadding = "16px",
|
|
2341
|
+
verticalNodePadding = "6px",
|
|
2342
|
+
verticalPadding = "20px",
|
|
2343
|
+
versionSnapshots,
|
|
2344
|
+
workflowTraceCounts,
|
|
2345
|
+
scenarioTraceCounts,
|
|
2346
|
+
workflowFilterMode = "all",
|
|
2347
|
+
minTraceCount = 1
|
|
2348
|
+
}) => {
|
|
2349
|
+
const rowHeight = useMemo10(() => {
|
|
2350
|
+
const paddingValue = parseFloat(verticalNodePadding);
|
|
2351
|
+
const contentLineHeight = 20;
|
|
2352
|
+
const borderHeight = 2;
|
|
2353
|
+
return contentLineHeight + paddingValue * 2 + borderHeight;
|
|
2354
|
+
}, [verticalNodePadding]);
|
|
2355
|
+
const treeData = useMemo10(() => {
|
|
2356
|
+
if (versionSnapshots && versionSnapshots.length > 0) {
|
|
2357
|
+
const workflowsByVersion = new Map;
|
|
2358
|
+
for (const snapshot of versionSnapshots) {
|
|
2359
|
+
const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
|
|
2360
|
+
const versionWorkflows = workflows.filter((workflow) => {
|
|
2361
|
+
return snapshot.storyboards.some((sb) => sb.id === workflow.storyboardId);
|
|
2362
|
+
});
|
|
2363
|
+
workflowsByVersion.set(versionKey, versionWorkflows);
|
|
2364
|
+
}
|
|
2365
|
+
return buildTreeDataFromVersions2(versionSnapshots, workflowsByVersion, workflowTraceCounts, scenarioTraceCounts, workflowFilterMode, minTraceCount);
|
|
2366
|
+
} else {
|
|
2367
|
+
return buildTreeDataFromWorkflows(workflows, workflowTraceCounts, scenarioTraceCounts, workflowFilterMode, minTraceCount);
|
|
2368
|
+
}
|
|
2369
|
+
}, [workflows, versionSnapshots, workflowTraceCounts, scenarioTraceCounts, workflowFilterMode, minTraceCount]);
|
|
2370
|
+
const NodeRenderer = (props) => {
|
|
2371
|
+
const { node } = props;
|
|
2372
|
+
const data = node.data;
|
|
2373
|
+
const icon = data.type === "version" ? /* @__PURE__ */ React12.createElement(GitCommit2, {
|
|
2374
|
+
size: 16
|
|
2375
|
+
}) : data.type === "package" ? /* @__PURE__ */ React12.createElement(Package2, {
|
|
2376
|
+
size: 16
|
|
2377
|
+
}) : data.type === "workflow" ? /* @__PURE__ */ React12.createElement(Workflow2, {
|
|
2378
|
+
size: 16
|
|
2379
|
+
}) : data.type === "scenario" ? data.hasTraces ? /* @__PURE__ */ React12.createElement(ListChecks, {
|
|
2380
|
+
size: 16
|
|
2381
|
+
}) : /* @__PURE__ */ React12.createElement(List, {
|
|
2382
|
+
size: 16
|
|
2383
|
+
}) : null;
|
|
2384
|
+
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;
|
|
2385
|
+
const nodeHorizontalPadding = data.type === "workflow" || data.type === "scenario" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2386
|
+
const rightContent = data.traceCount !== undefined ? /* @__PURE__ */ React12.createElement("span", {
|
|
2387
|
+
style: {
|
|
2388
|
+
marginLeft: "8px",
|
|
2389
|
+
fontSize: "12px",
|
|
2390
|
+
color: data.hasTraces ? data.type === "scenario" ? theme.colors.secondary : theme.colors.success : theme.colors.textMuted,
|
|
2391
|
+
fontWeight: 500
|
|
2392
|
+
}
|
|
2393
|
+
}, data.traceCount) : undefined;
|
|
2394
|
+
return /* @__PURE__ */ React12.createElement(TreeNode, {
|
|
2395
|
+
...props,
|
|
2396
|
+
theme,
|
|
2397
|
+
nameColor,
|
|
2398
|
+
leftIcon: icon,
|
|
2399
|
+
rightContent,
|
|
2400
|
+
horizontalNodePadding: nodeHorizontalPadding,
|
|
2401
|
+
verticalNodePadding
|
|
2402
|
+
});
|
|
2403
|
+
};
|
|
2404
|
+
const handleSelect = (selectedNodes) => {
|
|
2405
|
+
if (selectedNodes.length === 0)
|
|
2406
|
+
return;
|
|
2407
|
+
const node = selectedNodes[0];
|
|
2408
|
+
const nodeData = node.data;
|
|
2409
|
+
if (nodeData.type === "workflow" || nodeData.type === "scenario") {
|
|
2410
|
+
onClick(nodeData);
|
|
2411
|
+
}
|
|
2412
|
+
};
|
|
2413
|
+
const initialHeight = 600;
|
|
2414
|
+
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2415
|
+
return /* @__PURE__ */ React12.createElement("div", {
|
|
2416
|
+
ref: containerRef,
|
|
2417
|
+
style: {
|
|
2418
|
+
backgroundColor: theme.colors.background,
|
|
2419
|
+
color: theme.colors.text,
|
|
2420
|
+
fontFamily: theme.fonts.body,
|
|
2421
|
+
height: "100%",
|
|
2422
|
+
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2423
|
+
}
|
|
2424
|
+
}, /* @__PURE__ */ React12.createElement(Tree4, {
|
|
2425
|
+
data: treeData,
|
|
2426
|
+
onSelect: handleSelect,
|
|
2427
|
+
openByDefault: defaultOpen,
|
|
2428
|
+
...initialOpenState !== undefined && { initialOpenState },
|
|
2429
|
+
...selectedNodeId !== undefined && { selection: selectedNodeId },
|
|
2430
|
+
width: "100%",
|
|
2431
|
+
height: containerHeight,
|
|
2432
|
+
rowHeight
|
|
2433
|
+
}, NodeRenderer));
|
|
2434
|
+
};
|
|
2435
|
+
// src/components/CanvasListTree/CanvasListTreeCore.tsx
|
|
2436
|
+
import { Package as Package3, Folder, LayoutDashboard as LayoutDashboard2, FileText } from "lucide-react";
|
|
2437
|
+
import React13, { useMemo as useMemo11, useRef as useRef6 } from "react";
|
|
2438
|
+
import { Tree as Tree5 } from "react-arborist";
|
|
2185
2439
|
var buildTreeData = (canvases) => {
|
|
2186
2440
|
const packagesMap = new Map;
|
|
2187
2441
|
const rootCanvases = [];
|
|
@@ -2274,28 +2528,28 @@ var CanvasListTreeCore = ({
|
|
|
2274
2528
|
enableDragAndDrop = false
|
|
2275
2529
|
}) => {
|
|
2276
2530
|
const dndProps = getDndProps(enableDragAndDrop);
|
|
2277
|
-
const rowHeight =
|
|
2531
|
+
const rowHeight = useMemo11(() => {
|
|
2278
2532
|
const paddingValue = parseFloat(verticalNodePadding);
|
|
2279
2533
|
const contentLineHeight = 20;
|
|
2280
2534
|
const borderHeight = 2;
|
|
2281
2535
|
return contentLineHeight + paddingValue * 2 + borderHeight;
|
|
2282
2536
|
}, [verticalNodePadding]);
|
|
2283
|
-
const treeData =
|
|
2537
|
+
const treeData = useMemo11(() => buildTreeData(canvases), [canvases]);
|
|
2284
2538
|
const NodeRenderer = (props) => {
|
|
2285
2539
|
const { node } = props;
|
|
2286
2540
|
const data = node.data;
|
|
2287
|
-
const icon = data.type === "package" ? /* @__PURE__ */
|
|
2541
|
+
const icon = data.type === "package" ? /* @__PURE__ */ React13.createElement(Package3, {
|
|
2288
2542
|
size: 16
|
|
2289
|
-
}) : data.type === "canvas-folder" ? /* @__PURE__ */
|
|
2543
|
+
}) : data.type === "canvas-folder" ? /* @__PURE__ */ React13.createElement(Folder, {
|
|
2290
2544
|
size: 16
|
|
2291
|
-
}) : data.type === "overview" ? /* @__PURE__ */
|
|
2545
|
+
}) : data.type === "overview" ? /* @__PURE__ */ React13.createElement(FileText, {
|
|
2292
2546
|
size: 16
|
|
2293
|
-
}) : /* @__PURE__ */
|
|
2547
|
+
}) : /* @__PURE__ */ React13.createElement(LayoutDashboard2, {
|
|
2294
2548
|
size: 16
|
|
2295
2549
|
});
|
|
2296
2550
|
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";
|
|
2297
2551
|
const nodeHorizontalPadding = data.type === "overview" || data.type === "canvas" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2298
|
-
return /* @__PURE__ */
|
|
2552
|
+
return /* @__PURE__ */ React13.createElement(TreeNode, {
|
|
2299
2553
|
...props,
|
|
2300
2554
|
theme,
|
|
2301
2555
|
nameColor,
|
|
@@ -2322,7 +2576,7 @@ var CanvasListTreeCore = ({
|
|
|
2322
2576
|
};
|
|
2323
2577
|
const initialHeight = 600;
|
|
2324
2578
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2325
|
-
return /* @__PURE__ */
|
|
2579
|
+
return /* @__PURE__ */ React13.createElement("div", {
|
|
2326
2580
|
ref: containerRef,
|
|
2327
2581
|
style: {
|
|
2328
2582
|
backgroundColor: theme.colors.background,
|
|
@@ -2331,7 +2585,7 @@ var CanvasListTreeCore = ({
|
|
|
2331
2585
|
height: "100%",
|
|
2332
2586
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2333
2587
|
}
|
|
2334
|
-
}, /* @__PURE__ */
|
|
2588
|
+
}, /* @__PURE__ */ React13.createElement(Tree5, {
|
|
2335
2589
|
initialData: treeData,
|
|
2336
2590
|
onSelect: handleSelect,
|
|
2337
2591
|
openByDefault: defaultOpen,
|
|
@@ -2350,9 +2604,9 @@ import {
|
|
|
2350
2604
|
Circle as Circle2,
|
|
2351
2605
|
TestTube
|
|
2352
2606
|
} from "lucide-react";
|
|
2353
|
-
import
|
|
2354
|
-
import { Tree as
|
|
2355
|
-
var TelemetryCoverageContext =
|
|
2607
|
+
import React14, { useMemo as useMemo12, useRef as useRef7 } from "react";
|
|
2608
|
+
import { Tree as Tree6 } from "react-arborist";
|
|
2609
|
+
var TelemetryCoverageContext = React14.createContext(null);
|
|
2356
2610
|
var DEFAULT_TEST_PATTERNS = [
|
|
2357
2611
|
/\.test\.[jt]sx?$/,
|
|
2358
2612
|
/\.spec\.[jt]sx?$/,
|
|
@@ -2369,7 +2623,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
2369
2623
|
switch (status) {
|
|
2370
2624
|
case "covered":
|
|
2371
2625
|
return {
|
|
2372
|
-
icon: /* @__PURE__ */
|
|
2626
|
+
icon: /* @__PURE__ */ React14.createElement(Activity, {
|
|
2373
2627
|
size: 14
|
|
2374
2628
|
}),
|
|
2375
2629
|
color: "#22c55e",
|
|
@@ -2378,7 +2632,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
2378
2632
|
};
|
|
2379
2633
|
case "partial":
|
|
2380
2634
|
return {
|
|
2381
|
-
icon: /* @__PURE__ */
|
|
2635
|
+
icon: /* @__PURE__ */ React14.createElement(CircleDot2, {
|
|
2382
2636
|
size: 14
|
|
2383
2637
|
}),
|
|
2384
2638
|
color: "#eab308",
|
|
@@ -2387,7 +2641,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
2387
2641
|
};
|
|
2388
2642
|
case "none":
|
|
2389
2643
|
return {
|
|
2390
|
-
icon: /* @__PURE__ */
|
|
2644
|
+
icon: /* @__PURE__ */ React14.createElement(Circle2, {
|
|
2391
2645
|
size: 14
|
|
2392
2646
|
}),
|
|
2393
2647
|
color: "#6b7280",
|
|
@@ -2489,7 +2743,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
2489
2743
|
enableDragAndDrop = false
|
|
2490
2744
|
}) => {
|
|
2491
2745
|
const dndProps = getDndProps(enableDragAndDrop);
|
|
2492
|
-
const coverageMap =
|
|
2746
|
+
const coverageMap = useMemo12(() => {
|
|
2493
2747
|
const map = new Map;
|
|
2494
2748
|
coverageData.forEach((item) => {
|
|
2495
2749
|
map.set(item.filePath, item);
|
|
@@ -2498,7 +2752,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
2498
2752
|
}, [coverageData]);
|
|
2499
2753
|
const NodeRenderer = (props) => {
|
|
2500
2754
|
const { node } = props;
|
|
2501
|
-
const ctx =
|
|
2755
|
+
const ctx = React14.useContext(TelemetryCoverageContext);
|
|
2502
2756
|
const coverage = ctx?.coverageMap.get(node.data.id);
|
|
2503
2757
|
const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
|
|
2504
2758
|
const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
|
|
@@ -2510,11 +2764,11 @@ var TelemetryCoverageFileTree = ({
|
|
|
2510
2764
|
} else if (node.data.isTestFile) {
|
|
2511
2765
|
nameColor = "#6b728080";
|
|
2512
2766
|
}
|
|
2513
|
-
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */
|
|
2767
|
+
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React14.createElement(TestTube, {
|
|
2514
2768
|
size: 14,
|
|
2515
2769
|
style: { marginRight: 4, color: "#6b7280" }
|
|
2516
2770
|
}) : null;
|
|
2517
|
-
const rightContent = coverageDisplay ? /* @__PURE__ */
|
|
2771
|
+
const rightContent = coverageDisplay ? /* @__PURE__ */ React14.createElement("div", {
|
|
2518
2772
|
style: {
|
|
2519
2773
|
display: "flex",
|
|
2520
2774
|
alignItems: "center",
|
|
@@ -2522,14 +2776,14 @@ var TelemetryCoverageFileTree = ({
|
|
|
2522
2776
|
marginRight: "8px"
|
|
2523
2777
|
},
|
|
2524
2778
|
title: coverageDisplay.label
|
|
2525
|
-
}, coverageDisplay.icon, /* @__PURE__ */
|
|
2779
|
+
}, coverageDisplay.icon, /* @__PURE__ */ React14.createElement("span", {
|
|
2526
2780
|
style: {
|
|
2527
2781
|
marginLeft: "4px",
|
|
2528
2782
|
fontSize: theme.fontSizes[0],
|
|
2529
2783
|
fontWeight: "bold",
|
|
2530
2784
|
fontFamily: "monospace"
|
|
2531
2785
|
}
|
|
2532
|
-
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */
|
|
2786
|
+
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React14.createElement("div", {
|
|
2533
2787
|
style: {
|
|
2534
2788
|
display: "flex",
|
|
2535
2789
|
alignItems: "center",
|
|
@@ -2538,10 +2792,10 @@ var TelemetryCoverageFileTree = ({
|
|
|
2538
2792
|
opacity: 0.5
|
|
2539
2793
|
},
|
|
2540
2794
|
title: "No telemetry instrumentation"
|
|
2541
|
-
}, /* @__PURE__ */
|
|
2795
|
+
}, /* @__PURE__ */ React14.createElement(Circle2, {
|
|
2542
2796
|
size: 14
|
|
2543
2797
|
})) : null;
|
|
2544
|
-
return /* @__PURE__ */
|
|
2798
|
+
return /* @__PURE__ */ React14.createElement(TreeNode, {
|
|
2545
2799
|
...props,
|
|
2546
2800
|
theme,
|
|
2547
2801
|
rightContent,
|
|
@@ -2556,16 +2810,16 @@ var TelemetryCoverageFileTree = ({
|
|
|
2556
2810
|
}
|
|
2557
2811
|
});
|
|
2558
2812
|
};
|
|
2559
|
-
const treeStructure =
|
|
2813
|
+
const treeStructure = useMemo12(() => {
|
|
2560
2814
|
return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
|
|
2561
2815
|
}, [fileTree, showOnlyTestFiles, testFilePatterns]);
|
|
2562
|
-
const treeData =
|
|
2816
|
+
const treeData = useMemo12(() => {
|
|
2563
2817
|
if (showUncoveredFiles) {
|
|
2564
2818
|
return treeStructure;
|
|
2565
2819
|
}
|
|
2566
2820
|
return filterCoveredNodes(treeStructure, coverageMap);
|
|
2567
2821
|
}, [treeStructure, showUncoveredFiles, coverageMap]);
|
|
2568
|
-
const hasTracedChildrenMap =
|
|
2822
|
+
const hasTracedChildrenMap = useMemo12(() => {
|
|
2569
2823
|
const map = new Map;
|
|
2570
2824
|
const markTracedParents = (nodes) => {
|
|
2571
2825
|
let hasTraced = false;
|
|
@@ -2606,7 +2860,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
2606
2860
|
onDirectorySelect(selectedDirs);
|
|
2607
2861
|
}
|
|
2608
2862
|
};
|
|
2609
|
-
const calculatedHeight =
|
|
2863
|
+
const calculatedHeight = useMemo12(() => {
|
|
2610
2864
|
if (autoHeight) {
|
|
2611
2865
|
const visibleNodeCount = countVisibleNodes3(treeData, openByDefault);
|
|
2612
2866
|
return visibleNodeCount * 28;
|
|
@@ -2614,7 +2868,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
2614
2868
|
return initialHeight;
|
|
2615
2869
|
}, [autoHeight, treeData, openByDefault, initialHeight]);
|
|
2616
2870
|
const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
|
|
2617
|
-
return /* @__PURE__ */
|
|
2871
|
+
return /* @__PURE__ */ React14.createElement("div", {
|
|
2618
2872
|
ref: containerRef,
|
|
2619
2873
|
style: {
|
|
2620
2874
|
backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
|
|
@@ -2623,9 +2877,9 @@ var TelemetryCoverageFileTree = ({
|
|
|
2623
2877
|
...autoHeight ? {} : { height: "100%" },
|
|
2624
2878
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2625
2879
|
}
|
|
2626
|
-
}, /* @__PURE__ */
|
|
2880
|
+
}, /* @__PURE__ */ React14.createElement(TelemetryCoverageContext.Provider, {
|
|
2627
2881
|
value: { coverageMap, hasTracedChildrenMap }
|
|
2628
|
-
}, /* @__PURE__ */
|
|
2882
|
+
}, /* @__PURE__ */ React14.createElement(Tree6, {
|
|
2629
2883
|
data: treeData,
|
|
2630
2884
|
onSelect: handleSelect,
|
|
2631
2885
|
...selectedFile !== undefined && { selection: selectedFile },
|
|
@@ -2654,7 +2908,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
|
|
|
2654
2908
|
};
|
|
2655
2909
|
// src/components/TelemetryCoverageFileTreeContainer.tsx
|
|
2656
2910
|
import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle4, Activity as Activity2 } from "lucide-react";
|
|
2657
|
-
import
|
|
2911
|
+
import React15, { useState as useState7, useMemo as useMemo13 } from "react";
|
|
2658
2912
|
var TelemetryCoverageFileTreeContainer = ({
|
|
2659
2913
|
fileTree,
|
|
2660
2914
|
theme,
|
|
@@ -2676,10 +2930,10 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2676
2930
|
}) => {
|
|
2677
2931
|
const [filters, setFilters] = useState7([]);
|
|
2678
2932
|
const [showUncoveredFiles, setShowUncoveredFiles] = useState7(true);
|
|
2679
|
-
const selectedDirectories =
|
|
2933
|
+
const selectedDirectories = useMemo13(() => {
|
|
2680
2934
|
return filters.filter((f) => f.mode === "include").map((f) => f.path);
|
|
2681
2935
|
}, [filters]);
|
|
2682
|
-
const stats =
|
|
2936
|
+
const stats = useMemo13(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
|
|
2683
2937
|
const handleRefresh = () => {
|
|
2684
2938
|
onRefresh?.();
|
|
2685
2939
|
};
|
|
@@ -2687,34 +2941,34 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2687
2941
|
setShowUncoveredFiles(!showUncoveredFiles);
|
|
2688
2942
|
};
|
|
2689
2943
|
const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
|
|
2690
|
-
return /* @__PURE__ */
|
|
2944
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
2691
2945
|
style: { display: "flex", flexDirection: "column", height: "100%" }
|
|
2692
|
-
}, showControls && /* @__PURE__ */
|
|
2946
|
+
}, showControls && /* @__PURE__ */ React15.createElement("div", {
|
|
2693
2947
|
style: {
|
|
2694
2948
|
padding: "12px",
|
|
2695
2949
|
borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
|
|
2696
2950
|
backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
|
|
2697
2951
|
}
|
|
2698
|
-
}, /* @__PURE__ */
|
|
2952
|
+
}, /* @__PURE__ */ React15.createElement("div", {
|
|
2699
2953
|
style: {
|
|
2700
2954
|
display: "flex",
|
|
2701
2955
|
alignItems: "center",
|
|
2702
2956
|
justifyContent: "space-between",
|
|
2703
2957
|
marginBottom: "8px"
|
|
2704
2958
|
}
|
|
2705
|
-
}, /* @__PURE__ */
|
|
2959
|
+
}, /* @__PURE__ */ React15.createElement("div", {
|
|
2706
2960
|
style: { display: "flex", alignItems: "center", gap: "8px" }
|
|
2707
|
-
}, /* @__PURE__ */
|
|
2961
|
+
}, /* @__PURE__ */ React15.createElement(Activity2, {
|
|
2708
2962
|
size: 16,
|
|
2709
2963
|
color: theme.colors.primary
|
|
2710
|
-
}), /* @__PURE__ */
|
|
2964
|
+
}), /* @__PURE__ */ React15.createElement("h3", {
|
|
2711
2965
|
style: {
|
|
2712
2966
|
margin: 0,
|
|
2713
2967
|
fontSize: theme.fontSizes[1],
|
|
2714
2968
|
fontWeight: "bold",
|
|
2715
2969
|
color: theme.colors.text
|
|
2716
2970
|
}
|
|
2717
|
-
}, title), stats.testFiles > 0 && /* @__PURE__ */
|
|
2971
|
+
}, title), stats.testFiles > 0 && /* @__PURE__ */ React15.createElement("span", {
|
|
2718
2972
|
style: {
|
|
2719
2973
|
backgroundColor: percentageColor,
|
|
2720
2974
|
color: "#ffffff",
|
|
@@ -2724,14 +2978,14 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2724
2978
|
fontWeight: "bold",
|
|
2725
2979
|
fontFamily: "monospace"
|
|
2726
2980
|
}
|
|
2727
|
-
}, stats.percentage, "%"), isLoading && /* @__PURE__ */
|
|
2981
|
+
}, stats.percentage, "%"), isLoading && /* @__PURE__ */ React15.createElement(RefreshCw2, {
|
|
2728
2982
|
size: 16,
|
|
2729
2983
|
color: theme.colors.text,
|
|
2730
2984
|
className: "telemetry-coverage-spinner",
|
|
2731
2985
|
style: { animation: "spin 1s linear infinite" }
|
|
2732
|
-
})), /* @__PURE__ */
|
|
2986
|
+
})), /* @__PURE__ */ React15.createElement("div", {
|
|
2733
2987
|
style: { display: "flex", gap: "8px" }
|
|
2734
|
-
}, /* @__PURE__ */
|
|
2988
|
+
}, /* @__PURE__ */ React15.createElement("button", {
|
|
2735
2989
|
onClick: toggleShowUncoveredFiles,
|
|
2736
2990
|
style: {
|
|
2737
2991
|
background: "none",
|
|
@@ -2746,11 +3000,11 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2746
3000
|
color: theme.colors.text
|
|
2747
3001
|
},
|
|
2748
3002
|
title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
|
|
2749
|
-
}, showUncoveredFiles ? /* @__PURE__ */
|
|
3003
|
+
}, showUncoveredFiles ? /* @__PURE__ */ React15.createElement(EyeOff2, {
|
|
2750
3004
|
size: 14
|
|
2751
|
-
}) : /* @__PURE__ */
|
|
3005
|
+
}) : /* @__PURE__ */ React15.createElement(Eye2, {
|
|
2752
3006
|
size: 14
|
|
2753
|
-
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */
|
|
3007
|
+
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React15.createElement("button", {
|
|
2754
3008
|
onClick: handleRefresh,
|
|
2755
3009
|
disabled: isLoading,
|
|
2756
3010
|
style: {
|
|
@@ -2767,9 +3021,9 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2767
3021
|
opacity: isLoading ? 0.6 : 1
|
|
2768
3022
|
},
|
|
2769
3023
|
title: "Refresh coverage data"
|
|
2770
|
-
}, /* @__PURE__ */
|
|
3024
|
+
}, /* @__PURE__ */ React15.createElement(RefreshCw2, {
|
|
2771
3025
|
size: 14
|
|
2772
|
-
}), "Refresh"))), error && /* @__PURE__ */
|
|
3026
|
+
}), "Refresh"))), error && /* @__PURE__ */ React15.createElement("div", {
|
|
2773
3027
|
style: {
|
|
2774
3028
|
display: "flex",
|
|
2775
3029
|
alignItems: "center",
|
|
@@ -2782,36 +3036,36 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
2782
3036
|
color: "#856404",
|
|
2783
3037
|
marginBottom: "8px"
|
|
2784
3038
|
}
|
|
2785
|
-
}, /* @__PURE__ */
|
|
3039
|
+
}, /* @__PURE__ */ React15.createElement(AlertCircle4, {
|
|
2786
3040
|
size: 14
|
|
2787
|
-
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */
|
|
3041
|
+
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React15.createElement("div", {
|
|
2788
3042
|
style: {
|
|
2789
3043
|
display: "flex",
|
|
2790
3044
|
gap: "16px",
|
|
2791
3045
|
fontSize: theme.fontSizes[0],
|
|
2792
3046
|
color: theme.colors.textSecondary || "#666"
|
|
2793
3047
|
}
|
|
2794
|
-
}, /* @__PURE__ */
|
|
3048
|
+
}, /* @__PURE__ */ React15.createElement("span", null, /* @__PURE__ */ React15.createElement("strong", {
|
|
2795
3049
|
style: { color: "#22c55e" }
|
|
2796
|
-
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */
|
|
3050
|
+
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React15.createElement("span", null, /* @__PURE__ */ React15.createElement("strong", {
|
|
2797
3051
|
style: { color: "#eab308" }
|
|
2798
|
-
}, stats.partialFiles), " partial"), /* @__PURE__ */
|
|
3052
|
+
}, stats.partialFiles), " partial"), /* @__PURE__ */ React15.createElement("span", null, /* @__PURE__ */ React15.createElement("strong", {
|
|
2799
3053
|
style: { color: "#6b7280" }
|
|
2800
|
-
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */
|
|
3054
|
+
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React15.createElement("span", {
|
|
2801
3055
|
style: { marginLeft: "auto" }
|
|
2802
|
-
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */
|
|
3056
|
+
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React15.createElement("div", {
|
|
2803
3057
|
style: {
|
|
2804
3058
|
fontSize: theme.fontSizes[0],
|
|
2805
3059
|
color: theme.colors.textSecondary || "#666"
|
|
2806
3060
|
}
|
|
2807
|
-
}, "No test files with coverage data found")), /* @__PURE__ */
|
|
3061
|
+
}, "No test files with coverage data found")), /* @__PURE__ */ React15.createElement(DirectoryFilterInput, {
|
|
2808
3062
|
fileTree,
|
|
2809
3063
|
theme,
|
|
2810
3064
|
filters,
|
|
2811
3065
|
onFiltersChange: setFilters
|
|
2812
|
-
}), /* @__PURE__ */
|
|
3066
|
+
}), /* @__PURE__ */ React15.createElement("div", {
|
|
2813
3067
|
style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
|
|
2814
|
-
}, /* @__PURE__ */
|
|
3068
|
+
}, /* @__PURE__ */ React15.createElement(TelemetryCoverageFileTree, {
|
|
2815
3069
|
fileTree,
|
|
2816
3070
|
theme,
|
|
2817
3071
|
coverageData,
|
|
@@ -2837,6 +3091,7 @@ export {
|
|
|
2837
3091
|
extractNameFromPath,
|
|
2838
3092
|
combineRepositoryTrees,
|
|
2839
3093
|
calculateTelemetryCoverageStats,
|
|
3094
|
+
WorkflowScenarioTreeCore,
|
|
2840
3095
|
TreeNode,
|
|
2841
3096
|
TelemetryCoverageFileTreeContainer,
|
|
2842
3097
|
TelemetryCoverageFileTree,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAO/C,OAAO,KAAK,EAEV,4BAA4B,EAK7B,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAO/C,OAAO,KAAK,EAEV,4BAA4B,EAK7B,MAAM,SAAS,CAAC;AA2QjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAiN9E,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
+
import { WorkflowScenarioTreeCore } from './WorkflowScenarioTreeCore';
|
|
3
|
+
declare const meta: Meta<typeof WorkflowScenarioTreeCore>;
|
|
4
|
+
export default meta;
|
|
5
|
+
type Story = StoryObj<typeof WorkflowScenarioTreeCore>;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const WithFilterMode: Story;
|
|
8
|
+
export declare const WithVersions: Story;
|
|
9
|
+
//# sourceMappingURL=WorkflowScenarioTree.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowScenarioTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowScenarioTree/WorkflowScenarioTree.stories.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AA8MtE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,wBAAwB,CAI/C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEvD,eAAO,MAAM,OAAO,EAAE,KASrB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAuG5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAwC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowScenarioTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAEV,yBAAyB,EAI1B,MAAM,SAAS,CAAC;AAwMjB,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAgKxE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowScenarioTree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { Theme } from '@principal-ade/industry-theme';
|
|
2
|
+
import type { DiscoveredStoryboard, DiscoveredWorkflow, WorkflowScenario, VersionSnapshot } from '@principal-ai/principal-view-core';
|
|
3
|
+
import type { TreeNodeData } from '../TreeNode';
|
|
4
|
+
export type { DiscoveredStoryboard, DiscoveredWorkflow, WorkflowScenario, VersionSnapshot };
|
|
5
|
+
/**
|
|
6
|
+
* Workflow filter mode
|
|
7
|
+
* - 'all': Show all workflows
|
|
8
|
+
* - 'with-traces': Show only workflows that have traces
|
|
9
|
+
* - 'without-traces': Show only workflows that don't have traces
|
|
10
|
+
* - 'minimum-traces': Show workflows with at least N traces (use minTraceCount)
|
|
11
|
+
*/
|
|
12
|
+
export type WorkflowFilterMode = 'all' | 'with-traces' | 'without-traces' | 'minimum-traces';
|
|
13
|
+
/**
|
|
14
|
+
* Node types in the workflow-scenario tree
|
|
15
|
+
*/
|
|
16
|
+
export type WorkflowScenarioNodeType = 'version' | 'package' | 'workflow' | 'scenario';
|
|
17
|
+
/**
|
|
18
|
+
* Extended workflow with scenarios and parent storyboard info
|
|
19
|
+
*/
|
|
20
|
+
export interface WorkflowWithScenarios extends DiscoveredWorkflow {
|
|
21
|
+
/** Parent storyboard for context */
|
|
22
|
+
storyboard: DiscoveredStoryboard;
|
|
23
|
+
/** Workflow scenarios (from WorkflowTemplate.scenarios) */
|
|
24
|
+
scenarios: WorkflowScenario[];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Node data for workflow-scenario tree
|
|
28
|
+
*/
|
|
29
|
+
export interface WorkflowScenarioNodeData extends TreeNodeData {
|
|
30
|
+
type: WorkflowScenarioNodeType;
|
|
31
|
+
children?: WorkflowScenarioNodeData[];
|
|
32
|
+
versionSnapshot?: VersionSnapshot;
|
|
33
|
+
repositoryUrl?: string;
|
|
34
|
+
commitSha?: string;
|
|
35
|
+
packageName?: string;
|
|
36
|
+
scope?: 'package' | 'root';
|
|
37
|
+
workflow?: WorkflowWithScenarios;
|
|
38
|
+
scenario?: WorkflowScenario;
|
|
39
|
+
storyboard?: DiscoveredStoryboard;
|
|
40
|
+
traceCount?: number;
|
|
41
|
+
hasTraces?: boolean;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Props for WorkflowScenarioTree component
|
|
45
|
+
*/
|
|
46
|
+
export interface WorkflowScenarioTreeProps {
|
|
47
|
+
/** Workflows with scenarios and storyboard context */
|
|
48
|
+
workflows: WorkflowWithScenarios[];
|
|
49
|
+
/** Theme for styling */
|
|
50
|
+
theme: Theme;
|
|
51
|
+
/** Click handler */
|
|
52
|
+
onClick: (node: WorkflowScenarioNodeData) => void;
|
|
53
|
+
/** Selected node ID */
|
|
54
|
+
selectedNodeId?: string;
|
|
55
|
+
/** Default open state */
|
|
56
|
+
defaultOpen?: boolean;
|
|
57
|
+
/** Initial open state for specific nodes */
|
|
58
|
+
initialOpenState?: Record<string, boolean>;
|
|
59
|
+
/** Horizontal padding for nodes */
|
|
60
|
+
horizontalNodePadding?: string;
|
|
61
|
+
/** Vertical padding for nodes */
|
|
62
|
+
verticalNodePadding?: string;
|
|
63
|
+
/** Vertical padding for container */
|
|
64
|
+
verticalPadding?: string;
|
|
65
|
+
/** Optional version snapshots for grouping workflows by version */
|
|
66
|
+
versionSnapshots?: VersionSnapshot[];
|
|
67
|
+
/** Map of workflow ID to trace count */
|
|
68
|
+
workflowTraceCounts?: Record<string, number>;
|
|
69
|
+
/** Map of scenario ID to trace count (format: "workflowId/scenarioId") */
|
|
70
|
+
scenarioTraceCounts?: Record<string, number>;
|
|
71
|
+
/** Filter mode for workflows/scenarios */
|
|
72
|
+
workflowFilterMode?: WorkflowFilterMode;
|
|
73
|
+
/** Minimum trace count (when workflowFilterMode is 'minimum-traces') */
|
|
74
|
+
minTraceCount?: number;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowScenarioTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAErI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAE5F;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,aAAa,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAE7F;;GAEG;AACH,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,kBAAkB;IAC/D,oCAAoC;IACpC,UAAU,EAAE,oBAAoB,CAAC;IACjC,2DAA2D;IAC3D,SAAS,EAAE,gBAAgB,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,YAAY;IAC5D,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAC;IAGtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAGlC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,sDAAsD;IACtD,SAAS,EAAE,qBAAqB,EAAE,CAAC;IACnC,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,oBAAoB;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,wBAAwB,KAAK,IAAI,CAAC;IAClD,uBAAuB;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yBAAyB;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,mCAAmC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,eAAe,CAAC,EAAE,MAAM,CAAC;IAGzB,mEAAmE;IACnE,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IAGrC,wCAAwC;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,0EAA0E;IAC1E,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAG7C,0CAA0C;IAC1C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB"}
|
package/package.json
CHANGED