@principal-ade/dynamic-file-tree 0.2.1 → 0.2.3
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 +287 -117
- package/dist/src/components/CanvasListTree/CanvasListTreeCore.d.ts.map +1 -1
- package/dist/src/components/CanvasListTree/types.d.ts +13 -0
- package/dist/src/components/CanvasListTree/types.d.ts.map +1 -1
- 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 +50 -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, useState as useState7, useEffect as useEffect3 } 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
|
}
|
|
@@ -2347,6 +2410,8 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2347
2410
|
selectedNodeId,
|
|
2348
2411
|
defaultOpen = false,
|
|
2349
2412
|
initialOpenState,
|
|
2413
|
+
openState,
|
|
2414
|
+
onToggle,
|
|
2350
2415
|
horizontalNodePadding = "16px",
|
|
2351
2416
|
verticalNodePadding = "6px",
|
|
2352
2417
|
verticalPadding = "20px",
|
|
@@ -2357,7 +2422,10 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2357
2422
|
traceWorkflowsSet,
|
|
2358
2423
|
gitStatusData,
|
|
2359
2424
|
enablePanelDrag = false,
|
|
2360
|
-
getDragConfig
|
|
2425
|
+
getDragConfig,
|
|
2426
|
+
scenarioStatusMap,
|
|
2427
|
+
canvasNodeStatusMap,
|
|
2428
|
+
statusBarDisplay = "both"
|
|
2361
2429
|
}) => {
|
|
2362
2430
|
const dndProps = getDndProps(enableDragAndDrop);
|
|
2363
2431
|
const parentDndManager = useParentDndManager();
|
|
@@ -2372,78 +2440,135 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2372
2440
|
}, [verticalNodePadding]);
|
|
2373
2441
|
const treeData = useMemo9(() => {
|
|
2374
2442
|
if (versionSnapshots && versionSnapshots.length > 0) {
|
|
2375
|
-
return buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet, gitStatusMap);
|
|
2443
|
+
return buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap);
|
|
2376
2444
|
} else {
|
|
2377
|
-
return buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, undefined, gitStatusMap);
|
|
2445
|
+
return buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, undefined, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap);
|
|
2378
2446
|
}
|
|
2379
|
-
}, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, gitStatusMap]);
|
|
2447
|
+
}, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap]);
|
|
2380
2448
|
const NodeRenderer = (props) => {
|
|
2381
2449
|
const { node } = props;
|
|
2382
2450
|
const data = node.data;
|
|
2383
|
-
const icon = data.type === "version" ? /* @__PURE__ */
|
|
2451
|
+
const icon = data.type === "version" ? /* @__PURE__ */ React13.createElement(GitCommit, {
|
|
2384
2452
|
size: 16
|
|
2385
|
-
}) : data.type === "package" ? /* @__PURE__ */
|
|
2453
|
+
}) : data.type === "package" ? /* @__PURE__ */ React13.createElement(Package, {
|
|
2386
2454
|
size: 16
|
|
2387
|
-
}) : data.type === "storyboard" ? /* @__PURE__ */
|
|
2455
|
+
}) : data.type === "storyboard" ? /* @__PURE__ */ React13.createElement(FolderKanban, {
|
|
2388
2456
|
size: 16
|
|
2389
|
-
}) : data.type === "overview" ? /* @__PURE__ */
|
|
2457
|
+
}) : data.type === "overview" ? /* @__PURE__ */ React13.createElement(BookOpen, {
|
|
2390
2458
|
size: 16
|
|
2391
|
-
}) : data.type === "canvas" ? /* @__PURE__ */
|
|
2459
|
+
}) : data.type === "canvas" ? /* @__PURE__ */ React13.createElement(LayoutDashboard, {
|
|
2392
2460
|
size: 16
|
|
2393
|
-
}) : data.type === "workflows" ? /* @__PURE__ */
|
|
2461
|
+
}) : data.type === "workflows" ? /* @__PURE__ */ React13.createElement(FolderOpen, {
|
|
2394
2462
|
size: 16
|
|
2395
|
-
}) : /* @__PURE__ */
|
|
2463
|
+
}) : /* @__PURE__ */ React13.createElement(Workflow, {
|
|
2396
2464
|
size: 16
|
|
2397
2465
|
});
|
|
2398
2466
|
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
2467
|
const nodeHorizontalPadding = data.type === "overview" || data.type === "canvas" || data.type === "workflows" || data.type === "workflow" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2400
2468
|
const rightContent = (() => {
|
|
2401
2469
|
const indicators = [];
|
|
2470
|
+
if (data.type === "storyboard" && data.storyboard && scenarioStatusMap && (statusBarDisplay === "traces" || statusBarDisplay === "both")) {
|
|
2471
|
+
let totalTraced = 0;
|
|
2472
|
+
let totalScenarios = 0;
|
|
2473
|
+
for (const workflow of data.storyboard.workflows) {
|
|
2474
|
+
const status = scenarioStatusMap[workflow.id];
|
|
2475
|
+
if (status) {
|
|
2476
|
+
totalTraced += status.scenarios.filter((s) => s.hasTrace).length;
|
|
2477
|
+
totalScenarios += status.scenarios.length;
|
|
2478
|
+
}
|
|
2479
|
+
}
|
|
2480
|
+
if (totalScenarios > 0) {
|
|
2481
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2482
|
+
key: "storyboard-traces",
|
|
2483
|
+
style: { marginLeft: "6px" }
|
|
2484
|
+
}, /* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2485
|
+
segments: [
|
|
2486
|
+
{ count: totalTraced, color: "#3b82f6", label: "Traced" },
|
|
2487
|
+
{ count: totalScenarios - totalTraced, color: "#6b7280", label: "Not traced" }
|
|
2488
|
+
]
|
|
2489
|
+
})));
|
|
2490
|
+
}
|
|
2491
|
+
}
|
|
2492
|
+
if (data.type === "canvas" && data.canvasNodeStatus && statusBarDisplay !== "traces") {
|
|
2493
|
+
const { implemented, approved, draft } = data.canvasNodeStatus;
|
|
2494
|
+
const total = implemented + approved + draft;
|
|
2495
|
+
if (total > 0) {
|
|
2496
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2497
|
+
key: "canvas-status",
|
|
2498
|
+
style: { marginLeft: "6px" }
|
|
2499
|
+
}, /* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2500
|
+
segments: [
|
|
2501
|
+
{ count: implemented, color: "#10b981", label: "Implemented" },
|
|
2502
|
+
{ count: approved, color: "#f59e0b", label: "Approved" },
|
|
2503
|
+
{ count: draft, color: "#6b7280", label: "Draft" }
|
|
2504
|
+
]
|
|
2505
|
+
})));
|
|
2506
|
+
}
|
|
2507
|
+
}
|
|
2508
|
+
if (data.type === "workflow" && data.scenarioStatus) {
|
|
2509
|
+
const { scenarios } = data.scenarioStatus;
|
|
2510
|
+
if (scenarios.length > 0) {
|
|
2511
|
+
const bars = [];
|
|
2512
|
+
if (statusBarDisplay === "implementation" || statusBarDisplay === "both") {
|
|
2513
|
+
const implemented = scenarios.filter((s) => s.implementationStatus === "implemented").length;
|
|
2514
|
+
const partial = scenarios.filter((s) => s.implementationStatus === "partial").length;
|
|
2515
|
+
const draft = scenarios.filter((s) => !s.implementationStatus || s.implementationStatus === "draft").length;
|
|
2516
|
+
if (implemented + partial + draft > 0) {
|
|
2517
|
+
bars.push(/* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2518
|
+
key: "impl",
|
|
2519
|
+
segments: [
|
|
2520
|
+
{ count: implemented, color: "#10b981", label: "Implemented" },
|
|
2521
|
+
{ count: partial, color: "#f59e0b", label: "Partial" },
|
|
2522
|
+
{ count: draft, color: "#6b7280", label: "Draft" }
|
|
2523
|
+
]
|
|
2524
|
+
}));
|
|
2525
|
+
}
|
|
2526
|
+
}
|
|
2527
|
+
if (statusBarDisplay === "traces" || statusBarDisplay === "both") {
|
|
2528
|
+
const traced = scenarios.filter((s) => s.hasTrace).length;
|
|
2529
|
+
const untraced = scenarios.length - traced;
|
|
2530
|
+
bars.push(/* @__PURE__ */ React13.createElement(StatusBar, {
|
|
2531
|
+
key: "traces",
|
|
2532
|
+
segments: [
|
|
2533
|
+
{ count: traced, color: "#3b82f6", label: "Traced" },
|
|
2534
|
+
{ count: untraced, color: "#6b7280", label: "Not traced" }
|
|
2535
|
+
]
|
|
2536
|
+
}));
|
|
2537
|
+
}
|
|
2538
|
+
if (bars.length > 0) {
|
|
2539
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2540
|
+
key: "scenario-status",
|
|
2541
|
+
style: { marginLeft: "6px", display: "flex", flexDirection: "column", gap: "2px" }
|
|
2542
|
+
}, bars));
|
|
2543
|
+
}
|
|
2544
|
+
}
|
|
2545
|
+
}
|
|
2402
2546
|
if (data.gitStatus && (data.type === "canvas" || data.type === "overview" || data.type === "workflow")) {
|
|
2403
2547
|
const gitDisplay = getGitStatusDisplay3(data.gitStatus, theme);
|
|
2404
2548
|
if (gitDisplay) {
|
|
2405
|
-
indicators.push(/* @__PURE__ */
|
|
2549
|
+
indicators.push(/* @__PURE__ */ React13.createElement("div", {
|
|
2406
2550
|
key: "git",
|
|
2407
2551
|
style: { display: "flex", alignItems: "center", color: gitDisplay.color, marginLeft: "6px" }
|
|
2408
2552
|
}, gitDisplay.icon));
|
|
2409
2553
|
}
|
|
2410
2554
|
}
|
|
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, {
|
|
2555
|
+
if (data.type === "version" && data.hasTraces !== undefined) {
|
|
2556
|
+
indicators.push(data.hasTraces ? /* @__PURE__ */ React13.createElement(CircleDot, {
|
|
2432
2557
|
key: "traces",
|
|
2433
2558
|
size: 14,
|
|
2434
2559
|
style: { color: "#10b981", marginLeft: "6px" }
|
|
2435
|
-
}) : /* @__PURE__ */
|
|
2560
|
+
}) : /* @__PURE__ */ React13.createElement(Circle, {
|
|
2436
2561
|
key: "traces",
|
|
2437
2562
|
size: 14,
|
|
2438
2563
|
style: { color: theme.colors.textMuted, marginLeft: "6px" }
|
|
2439
2564
|
}));
|
|
2440
2565
|
}
|
|
2441
|
-
return indicators.length > 0 ? /* @__PURE__ */
|
|
2566
|
+
return indicators.length > 0 ? /* @__PURE__ */ React13.createElement("div", {
|
|
2442
2567
|
style: { display: "flex", alignItems: "center" }
|
|
2443
2568
|
}, indicators) : undefined;
|
|
2444
2569
|
})();
|
|
2445
2570
|
const dragConfig = enablePanelDrag ? getDragConfig ? getDragConfig(data) : getDefaultDragConfig(data) : undefined;
|
|
2446
|
-
return /* @__PURE__ */
|
|
2571
|
+
return /* @__PURE__ */ React13.createElement(TreeNode, {
|
|
2447
2572
|
...props,
|
|
2448
2573
|
theme,
|
|
2449
2574
|
nameColor,
|
|
@@ -2472,7 +2597,25 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2472
2597
|
};
|
|
2473
2598
|
const initialHeight = 600;
|
|
2474
2599
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2475
|
-
|
|
2600
|
+
const treeRef = useRef5(null);
|
|
2601
|
+
const [treeKey, setTreeKey] = useState7(0);
|
|
2602
|
+
const prevOpenStateRef = useRef5(openState);
|
|
2603
|
+
useEffect3(() => {
|
|
2604
|
+
if (openState !== undefined && openState !== prevOpenStateRef.current) {
|
|
2605
|
+
prevOpenStateRef.current = openState;
|
|
2606
|
+
setTreeKey((k) => k + 1);
|
|
2607
|
+
}
|
|
2608
|
+
}, [openState]);
|
|
2609
|
+
const handleToggle = (id) => {
|
|
2610
|
+
if (onToggle && treeRef.current) {
|
|
2611
|
+
const node = treeRef.current.get(id);
|
|
2612
|
+
if (node) {
|
|
2613
|
+
onToggle(id, node.isOpen);
|
|
2614
|
+
}
|
|
2615
|
+
}
|
|
2616
|
+
};
|
|
2617
|
+
const effectiveInitialOpenState = openState ?? initialOpenState;
|
|
2618
|
+
return /* @__PURE__ */ React13.createElement("div", {
|
|
2476
2619
|
ref: containerRef,
|
|
2477
2620
|
style: {
|
|
2478
2621
|
backgroundColor: theme.colors.background,
|
|
@@ -2481,12 +2624,15 @@ var StoryboardWorkflowsTreeCore = ({
|
|
|
2481
2624
|
height: "100%",
|
|
2482
2625
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2483
2626
|
}
|
|
2484
|
-
}, /* @__PURE__ */
|
|
2627
|
+
}, /* @__PURE__ */ React13.createElement(Tree3, {
|
|
2628
|
+
key: treeKey,
|
|
2629
|
+
ref: treeRef,
|
|
2485
2630
|
data: treeData,
|
|
2486
2631
|
onSelect: handleSelect,
|
|
2487
2632
|
openByDefault: defaultOpen,
|
|
2488
|
-
...
|
|
2633
|
+
...effectiveInitialOpenState !== undefined && { initialOpenState: effectiveInitialOpenState },
|
|
2489
2634
|
...selectedNodeId !== undefined && { selection: selectedNodeId },
|
|
2635
|
+
...onToggle !== undefined && { onToggle: handleToggle },
|
|
2490
2636
|
width: "100%",
|
|
2491
2637
|
height: containerHeight,
|
|
2492
2638
|
rowHeight,
|
|
@@ -2500,7 +2646,7 @@ function hasWorkflowContent(node) {
|
|
|
2500
2646
|
}
|
|
2501
2647
|
// src/components/WorkflowScenarioTree/WorkflowScenarioTreeCore.tsx
|
|
2502
2648
|
import { Package as Package2, Workflow as Workflow2, GitCommit as GitCommit2, ListChecks, List } from "lucide-react";
|
|
2503
|
-
import
|
|
2649
|
+
import React14, { useMemo as useMemo10 } from "react";
|
|
2504
2650
|
import { Tree as Tree4 } from "react-arborist";
|
|
2505
2651
|
var buildTreeDataFromWorkflows = (workflows, workflowTraceCounts, scenarioTraceCounts, filterMode, minTraceCount) => {
|
|
2506
2652
|
const packagesMap = new Map;
|
|
@@ -2666,20 +2812,20 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2666
2812
|
const NodeRenderer = (props) => {
|
|
2667
2813
|
const { node } = props;
|
|
2668
2814
|
const data = node.data;
|
|
2669
|
-
const icon = data.type === "version" ? /* @__PURE__ */
|
|
2815
|
+
const icon = data.type === "version" ? /* @__PURE__ */ React14.createElement(GitCommit2, {
|
|
2670
2816
|
size: 16
|
|
2671
|
-
}) : data.type === "package" ? /* @__PURE__ */
|
|
2817
|
+
}) : data.type === "package" ? /* @__PURE__ */ React14.createElement(Package2, {
|
|
2672
2818
|
size: 16
|
|
2673
|
-
}) : data.type === "workflow" ? /* @__PURE__ */
|
|
2819
|
+
}) : data.type === "workflow" ? /* @__PURE__ */ React14.createElement(Workflow2, {
|
|
2674
2820
|
size: 16
|
|
2675
|
-
}) : data.type === "scenario" ? data.hasTraces ? /* @__PURE__ */
|
|
2821
|
+
}) : data.type === "scenario" ? data.hasTraces ? /* @__PURE__ */ React14.createElement(ListChecks, {
|
|
2676
2822
|
size: 16
|
|
2677
|
-
}) : /* @__PURE__ */
|
|
2823
|
+
}) : /* @__PURE__ */ React14.createElement(List, {
|
|
2678
2824
|
size: 16
|
|
2679
2825
|
}) : null;
|
|
2680
2826
|
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
2827
|
const nodeHorizontalPadding = data.type === "workflow" || data.type === "scenario" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
|
|
2682
|
-
const rightContent = data.traceCount !== undefined ? /* @__PURE__ */
|
|
2828
|
+
const rightContent = data.traceCount !== undefined ? /* @__PURE__ */ React14.createElement("span", {
|
|
2683
2829
|
style: {
|
|
2684
2830
|
marginLeft: "8px",
|
|
2685
2831
|
fontSize: "12px",
|
|
@@ -2687,7 +2833,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2687
2833
|
fontWeight: 500
|
|
2688
2834
|
}
|
|
2689
2835
|
}, data.traceCount) : undefined;
|
|
2690
|
-
return /* @__PURE__ */
|
|
2836
|
+
return /* @__PURE__ */ React14.createElement(TreeNode, {
|
|
2691
2837
|
...props,
|
|
2692
2838
|
theme,
|
|
2693
2839
|
nameColor,
|
|
@@ -2708,7 +2854,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2708
2854
|
};
|
|
2709
2855
|
const initialHeight = 600;
|
|
2710
2856
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2711
|
-
return /* @__PURE__ */
|
|
2857
|
+
return /* @__PURE__ */ React14.createElement("div", {
|
|
2712
2858
|
ref: containerRef,
|
|
2713
2859
|
style: {
|
|
2714
2860
|
backgroundColor: theme.colors.background,
|
|
@@ -2717,7 +2863,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2717
2863
|
height: "100%",
|
|
2718
2864
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2719
2865
|
}
|
|
2720
|
-
}, /* @__PURE__ */
|
|
2866
|
+
}, /* @__PURE__ */ React14.createElement(Tree4, {
|
|
2721
2867
|
data: treeData,
|
|
2722
2868
|
onSelect: handleSelect,
|
|
2723
2869
|
openByDefault: defaultOpen,
|
|
@@ -2731,7 +2877,7 @@ var WorkflowScenarioTreeCore = ({
|
|
|
2731
2877
|
};
|
|
2732
2878
|
// src/components/CanvasListTree/CanvasListTreeCore.tsx
|
|
2733
2879
|
import { Package as Package3, Folder, LayoutDashboard as LayoutDashboard2, FileText } from "lucide-react";
|
|
2734
|
-
import
|
|
2880
|
+
import React15, { useMemo as useMemo11, useRef as useRef6, useState as useState8, useEffect as useEffect4 } from "react";
|
|
2735
2881
|
import { Tree as Tree5 } from "react-arborist";
|
|
2736
2882
|
var buildTreeData = (canvases, gitStatusMap) => {
|
|
2737
2883
|
const packagesMap = new Map;
|
|
@@ -2909,6 +3055,8 @@ var CanvasListTreeCore = ({
|
|
|
2909
3055
|
selectedNodeId,
|
|
2910
3056
|
defaultOpen = false,
|
|
2911
3057
|
initialOpenState,
|
|
3058
|
+
openState,
|
|
3059
|
+
onToggle,
|
|
2912
3060
|
horizontalNodePadding = "16px",
|
|
2913
3061
|
verticalNodePadding = "6px",
|
|
2914
3062
|
verticalPadding = "20px",
|
|
@@ -2932,13 +3080,13 @@ var CanvasListTreeCore = ({
|
|
|
2932
3080
|
const NodeRenderer = (props) => {
|
|
2933
3081
|
const { node } = props;
|
|
2934
3082
|
const data = node.data;
|
|
2935
|
-
const icon = data.type === "package" ? /* @__PURE__ */
|
|
3083
|
+
const icon = data.type === "package" ? /* @__PURE__ */ React15.createElement(Package3, {
|
|
2936
3084
|
size: 16
|
|
2937
|
-
}) : data.type === "canvas-folder" ? /* @__PURE__ */
|
|
3085
|
+
}) : data.type === "canvas-folder" ? /* @__PURE__ */ React15.createElement(Folder, {
|
|
2938
3086
|
size: 16
|
|
2939
|
-
}) : data.type === "overview" ? /* @__PURE__ */
|
|
3087
|
+
}) : data.type === "overview" ? /* @__PURE__ */ React15.createElement(FileText, {
|
|
2940
3088
|
size: 16
|
|
2941
|
-
}) : /* @__PURE__ */
|
|
3089
|
+
}) : /* @__PURE__ */ React15.createElement(LayoutDashboard2, {
|
|
2942
3090
|
size: 16
|
|
2943
3091
|
});
|
|
2944
3092
|
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 +3095,7 @@ var CanvasListTreeCore = ({
|
|
|
2947
3095
|
if (data.gitStatus && (data.type === "canvas" || data.type === "overview")) {
|
|
2948
3096
|
const gitDisplay = getGitStatusDisplay3(data.gitStatus, theme);
|
|
2949
3097
|
if (gitDisplay) {
|
|
2950
|
-
return /* @__PURE__ */
|
|
3098
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
2951
3099
|
style: { display: "flex", alignItems: "center", color: gitDisplay.color, marginLeft: "6px" }
|
|
2952
3100
|
}, gitDisplay.icon);
|
|
2953
3101
|
}
|
|
@@ -2955,7 +3103,7 @@ var CanvasListTreeCore = ({
|
|
|
2955
3103
|
return;
|
|
2956
3104
|
})();
|
|
2957
3105
|
const dragConfig = enablePanelDrag ? getDragConfig ? getDragConfig(data) : getDefaultCanvasDragConfig(data) : undefined;
|
|
2958
|
-
return /* @__PURE__ */
|
|
3106
|
+
return /* @__PURE__ */ React15.createElement(TreeNode, {
|
|
2959
3107
|
...props,
|
|
2960
3108
|
theme,
|
|
2961
3109
|
nameColor,
|
|
@@ -2984,7 +3132,25 @@ var CanvasListTreeCore = ({
|
|
|
2984
3132
|
};
|
|
2985
3133
|
const initialHeight = 600;
|
|
2986
3134
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
2987
|
-
|
|
3135
|
+
const treeRef = useRef6(null);
|
|
3136
|
+
const [treeKey, setTreeKey] = useState8(0);
|
|
3137
|
+
const prevOpenStateRef = useRef6(openState);
|
|
3138
|
+
useEffect4(() => {
|
|
3139
|
+
if (openState !== undefined && openState !== prevOpenStateRef.current) {
|
|
3140
|
+
prevOpenStateRef.current = openState;
|
|
3141
|
+
setTreeKey((k) => k + 1);
|
|
3142
|
+
}
|
|
3143
|
+
}, [openState]);
|
|
3144
|
+
const handleToggle = (id) => {
|
|
3145
|
+
if (onToggle && treeRef.current) {
|
|
3146
|
+
const node = treeRef.current.get(id);
|
|
3147
|
+
if (node) {
|
|
3148
|
+
onToggle(id, node.isOpen);
|
|
3149
|
+
}
|
|
3150
|
+
}
|
|
3151
|
+
};
|
|
3152
|
+
const effectiveInitialOpenState = openState ?? initialOpenState;
|
|
3153
|
+
return /* @__PURE__ */ React15.createElement("div", {
|
|
2988
3154
|
ref: containerRef,
|
|
2989
3155
|
style: {
|
|
2990
3156
|
backgroundColor: theme.colors.background,
|
|
@@ -2993,12 +3159,15 @@ var CanvasListTreeCore = ({
|
|
|
2993
3159
|
height: "100%",
|
|
2994
3160
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
2995
3161
|
}
|
|
2996
|
-
}, /* @__PURE__ */
|
|
3162
|
+
}, /* @__PURE__ */ React15.createElement(Tree5, {
|
|
3163
|
+
key: treeKey,
|
|
3164
|
+
ref: treeRef,
|
|
2997
3165
|
initialData: treeData,
|
|
2998
3166
|
onSelect: handleSelect,
|
|
2999
3167
|
openByDefault: defaultOpen,
|
|
3000
|
-
...
|
|
3168
|
+
...effectiveInitialOpenState !== undefined && { initialOpenState: effectiveInitialOpenState },
|
|
3001
3169
|
...selectedNodeId !== undefined && { selection: selectedNodeId },
|
|
3170
|
+
...onToggle !== undefined && { onToggle: handleToggle },
|
|
3002
3171
|
width: "100%",
|
|
3003
3172
|
height: containerHeight,
|
|
3004
3173
|
rowHeight,
|
|
@@ -3008,7 +3177,7 @@ var CanvasListTreeCore = ({
|
|
|
3008
3177
|
};
|
|
3009
3178
|
// src/components/RepositoryTree/RepositoryTreeCore.tsx
|
|
3010
3179
|
import { Folder as Folder2, FolderGit2 } from "lucide-react";
|
|
3011
|
-
import
|
|
3180
|
+
import React16, { useMemo as useMemo12 } from "react";
|
|
3012
3181
|
import { Tree as Tree6 } from "react-arborist";
|
|
3013
3182
|
var buildRepositoryTree = (repositories) => {
|
|
3014
3183
|
if (repositories.length === 0)
|
|
@@ -3122,15 +3291,15 @@ var RepositoryTreeCore = ({
|
|
|
3122
3291
|
const NodeRenderer = (props) => {
|
|
3123
3292
|
const { node } = props;
|
|
3124
3293
|
const data = node.data;
|
|
3125
|
-
const icon = data.type === "directory" ? /* @__PURE__ */
|
|
3294
|
+
const icon = data.type === "directory" ? /* @__PURE__ */ React16.createElement(Folder2, {
|
|
3126
3295
|
size: 16
|
|
3127
|
-
}) : /* @__PURE__ */
|
|
3296
|
+
}) : /* @__PURE__ */ React16.createElement(FolderGit2, {
|
|
3128
3297
|
size: 16
|
|
3129
3298
|
});
|
|
3130
3299
|
const nameColor = data.type === "directory" ? theme.colors.textSecondary : theme.colors.text;
|
|
3131
3300
|
let rightContent = undefined;
|
|
3132
3301
|
if (data.type === "directory" && data.repositoryCount !== undefined) {
|
|
3133
|
-
rightContent = /* @__PURE__ */
|
|
3302
|
+
rightContent = /* @__PURE__ */ React16.createElement("span", {
|
|
3134
3303
|
style: {
|
|
3135
3304
|
marginLeft: "8px",
|
|
3136
3305
|
fontSize: "12px",
|
|
@@ -3142,7 +3311,7 @@ var RepositoryTreeCore = ({
|
|
|
3142
3311
|
const { owner, name } = data.entry.github;
|
|
3143
3312
|
const avatarUrl = `https://github.com/${owner}.png?size=32`;
|
|
3144
3313
|
const repoFullName = `${owner}/${name}`;
|
|
3145
|
-
rightContent = /* @__PURE__ */
|
|
3314
|
+
rightContent = /* @__PURE__ */ React16.createElement("img", {
|
|
3146
3315
|
src: avatarUrl,
|
|
3147
3316
|
alt: owner,
|
|
3148
3317
|
title: repoFullName,
|
|
@@ -3155,7 +3324,7 @@ var RepositoryTreeCore = ({
|
|
|
3155
3324
|
}
|
|
3156
3325
|
});
|
|
3157
3326
|
}
|
|
3158
|
-
return /* @__PURE__ */
|
|
3327
|
+
return /* @__PURE__ */ React16.createElement(TreeNode, {
|
|
3159
3328
|
...props,
|
|
3160
3329
|
theme,
|
|
3161
3330
|
nameColor,
|
|
@@ -3177,7 +3346,7 @@ var RepositoryTreeCore = ({
|
|
|
3177
3346
|
const initialHeight = 600;
|
|
3178
3347
|
const [containerRef, containerHeight] = useContainerHeight(initialHeight);
|
|
3179
3348
|
const selection = selectedRepositoryPath ? `repo:${selectedRepositoryPath}` : undefined;
|
|
3180
|
-
return /* @__PURE__ */
|
|
3349
|
+
return /* @__PURE__ */ React16.createElement("div", {
|
|
3181
3350
|
ref: containerRef,
|
|
3182
3351
|
style: {
|
|
3183
3352
|
backgroundColor: theme.colors.background,
|
|
@@ -3186,7 +3355,7 @@ var RepositoryTreeCore = ({
|
|
|
3186
3355
|
height: "100%",
|
|
3187
3356
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
3188
3357
|
}
|
|
3189
|
-
}, /* @__PURE__ */
|
|
3358
|
+
}, /* @__PURE__ */ React16.createElement(Tree6, {
|
|
3190
3359
|
data: treeData,
|
|
3191
3360
|
onSelect: handleSelect,
|
|
3192
3361
|
openByDefault: defaultOpen,
|
|
@@ -3205,9 +3374,9 @@ import {
|
|
|
3205
3374
|
Circle as Circle2,
|
|
3206
3375
|
TestTube
|
|
3207
3376
|
} from "lucide-react";
|
|
3208
|
-
import
|
|
3377
|
+
import React17, { useMemo as useMemo13, useRef as useRef7 } from "react";
|
|
3209
3378
|
import { Tree as Tree7 } from "react-arborist";
|
|
3210
|
-
var TelemetryCoverageContext =
|
|
3379
|
+
var TelemetryCoverageContext = React17.createContext(null);
|
|
3211
3380
|
var DEFAULT_TEST_PATTERNS = [
|
|
3212
3381
|
/\.test\.[jt]sx?$/,
|
|
3213
3382
|
/\.spec\.[jt]sx?$/,
|
|
@@ -3224,7 +3393,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3224
3393
|
switch (status) {
|
|
3225
3394
|
case "covered":
|
|
3226
3395
|
return {
|
|
3227
|
-
icon: /* @__PURE__ */
|
|
3396
|
+
icon: /* @__PURE__ */ React17.createElement(Activity, {
|
|
3228
3397
|
size: 14
|
|
3229
3398
|
}),
|
|
3230
3399
|
color: "#22c55e",
|
|
@@ -3233,7 +3402,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3233
3402
|
};
|
|
3234
3403
|
case "partial":
|
|
3235
3404
|
return {
|
|
3236
|
-
icon: /* @__PURE__ */
|
|
3405
|
+
icon: /* @__PURE__ */ React17.createElement(CircleDot2, {
|
|
3237
3406
|
size: 14
|
|
3238
3407
|
}),
|
|
3239
3408
|
color: "#eab308",
|
|
@@ -3242,7 +3411,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
|
|
|
3242
3411
|
};
|
|
3243
3412
|
case "none":
|
|
3244
3413
|
return {
|
|
3245
|
-
icon: /* @__PURE__ */
|
|
3414
|
+
icon: /* @__PURE__ */ React17.createElement(Circle2, {
|
|
3246
3415
|
size: 14
|
|
3247
3416
|
}),
|
|
3248
3417
|
color: "#6b7280",
|
|
@@ -3354,7 +3523,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
3354
3523
|
}, [coverageData]);
|
|
3355
3524
|
const NodeRenderer = (props) => {
|
|
3356
3525
|
const { node } = props;
|
|
3357
|
-
const ctx =
|
|
3526
|
+
const ctx = React17.useContext(TelemetryCoverageContext);
|
|
3358
3527
|
const coverage = ctx?.coverageMap.get(node.data.id);
|
|
3359
3528
|
const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
|
|
3360
3529
|
const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
|
|
@@ -3366,11 +3535,11 @@ var TelemetryCoverageFileTree = ({
|
|
|
3366
3535
|
} else if (node.data.isTestFile) {
|
|
3367
3536
|
nameColor = "#6b728080";
|
|
3368
3537
|
}
|
|
3369
|
-
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */
|
|
3538
|
+
const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React17.createElement(TestTube, {
|
|
3370
3539
|
size: 14,
|
|
3371
3540
|
style: { marginRight: 4, color: "#6b7280" }
|
|
3372
3541
|
}) : null;
|
|
3373
|
-
const rightContent = coverageDisplay ? /* @__PURE__ */
|
|
3542
|
+
const rightContent = coverageDisplay ? /* @__PURE__ */ React17.createElement("div", {
|
|
3374
3543
|
style: {
|
|
3375
3544
|
display: "flex",
|
|
3376
3545
|
alignItems: "center",
|
|
@@ -3378,14 +3547,14 @@ var TelemetryCoverageFileTree = ({
|
|
|
3378
3547
|
marginRight: "8px"
|
|
3379
3548
|
},
|
|
3380
3549
|
title: coverageDisplay.label
|
|
3381
|
-
}, coverageDisplay.icon, /* @__PURE__ */
|
|
3550
|
+
}, coverageDisplay.icon, /* @__PURE__ */ React17.createElement("span", {
|
|
3382
3551
|
style: {
|
|
3383
3552
|
marginLeft: "4px",
|
|
3384
3553
|
fontSize: theme.fontSizes[0],
|
|
3385
3554
|
fontWeight: "bold",
|
|
3386
3555
|
fontFamily: "monospace"
|
|
3387
3556
|
}
|
|
3388
|
-
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */
|
|
3557
|
+
}, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React17.createElement("div", {
|
|
3389
3558
|
style: {
|
|
3390
3559
|
display: "flex",
|
|
3391
3560
|
alignItems: "center",
|
|
@@ -3394,10 +3563,10 @@ var TelemetryCoverageFileTree = ({
|
|
|
3394
3563
|
opacity: 0.5
|
|
3395
3564
|
},
|
|
3396
3565
|
title: "No telemetry instrumentation"
|
|
3397
|
-
}, /* @__PURE__ */
|
|
3566
|
+
}, /* @__PURE__ */ React17.createElement(Circle2, {
|
|
3398
3567
|
size: 14
|
|
3399
3568
|
})) : null;
|
|
3400
|
-
return /* @__PURE__ */
|
|
3569
|
+
return /* @__PURE__ */ React17.createElement(TreeNode, {
|
|
3401
3570
|
...props,
|
|
3402
3571
|
theme,
|
|
3403
3572
|
rightContent,
|
|
@@ -3470,7 +3639,7 @@ var TelemetryCoverageFileTree = ({
|
|
|
3470
3639
|
return initialHeight;
|
|
3471
3640
|
}, [autoHeight, treeData, openByDefault, initialHeight]);
|
|
3472
3641
|
const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
|
|
3473
|
-
return /* @__PURE__ */
|
|
3642
|
+
return /* @__PURE__ */ React17.createElement("div", {
|
|
3474
3643
|
ref: containerRef,
|
|
3475
3644
|
style: {
|
|
3476
3645
|
backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
|
|
@@ -3479,9 +3648,9 @@ var TelemetryCoverageFileTree = ({
|
|
|
3479
3648
|
...autoHeight ? {} : { height: "100%" },
|
|
3480
3649
|
...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
|
|
3481
3650
|
}
|
|
3482
|
-
}, /* @__PURE__ */
|
|
3651
|
+
}, /* @__PURE__ */ React17.createElement(TelemetryCoverageContext.Provider, {
|
|
3483
3652
|
value: { coverageMap, hasTracedChildrenMap }
|
|
3484
|
-
}, /* @__PURE__ */
|
|
3653
|
+
}, /* @__PURE__ */ React17.createElement(Tree7, {
|
|
3485
3654
|
data: treeData,
|
|
3486
3655
|
onSelect: handleSelect,
|
|
3487
3656
|
...selectedFile !== undefined && { selection: selectedFile },
|
|
@@ -3511,7 +3680,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
|
|
|
3511
3680
|
};
|
|
3512
3681
|
// src/components/TelemetryCoverageFileTreeContainer.tsx
|
|
3513
3682
|
import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle5, Activity as Activity2 } from "lucide-react";
|
|
3514
|
-
import
|
|
3683
|
+
import React18, { useState as useState9, useMemo as useMemo14 } from "react";
|
|
3515
3684
|
var TelemetryCoverageFileTreeContainer = ({
|
|
3516
3685
|
fileTree,
|
|
3517
3686
|
theme,
|
|
@@ -3531,8 +3700,8 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3531
3700
|
verticalNodePadding,
|
|
3532
3701
|
verticalPadding
|
|
3533
3702
|
}) => {
|
|
3534
|
-
const [filters, setFilters] =
|
|
3535
|
-
const [showUncoveredFiles, setShowUncoveredFiles] =
|
|
3703
|
+
const [filters, setFilters] = useState9([]);
|
|
3704
|
+
const [showUncoveredFiles, setShowUncoveredFiles] = useState9(true);
|
|
3536
3705
|
const selectedDirectories = useMemo14(() => {
|
|
3537
3706
|
return filters.filter((f) => f.mode === "include").map((f) => f.path);
|
|
3538
3707
|
}, [filters]);
|
|
@@ -3544,34 +3713,34 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3544
3713
|
setShowUncoveredFiles(!showUncoveredFiles);
|
|
3545
3714
|
};
|
|
3546
3715
|
const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
|
|
3547
|
-
return /* @__PURE__ */
|
|
3716
|
+
return /* @__PURE__ */ React18.createElement("div", {
|
|
3548
3717
|
style: { display: "flex", flexDirection: "column", height: "100%" }
|
|
3549
|
-
}, showControls && /* @__PURE__ */
|
|
3718
|
+
}, showControls && /* @__PURE__ */ React18.createElement("div", {
|
|
3550
3719
|
style: {
|
|
3551
3720
|
padding: "12px",
|
|
3552
3721
|
borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
|
|
3553
3722
|
backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
|
|
3554
3723
|
}
|
|
3555
|
-
}, /* @__PURE__ */
|
|
3724
|
+
}, /* @__PURE__ */ React18.createElement("div", {
|
|
3556
3725
|
style: {
|
|
3557
3726
|
display: "flex",
|
|
3558
3727
|
alignItems: "center",
|
|
3559
3728
|
justifyContent: "space-between",
|
|
3560
3729
|
marginBottom: "8px"
|
|
3561
3730
|
}
|
|
3562
|
-
}, /* @__PURE__ */
|
|
3731
|
+
}, /* @__PURE__ */ React18.createElement("div", {
|
|
3563
3732
|
style: { display: "flex", alignItems: "center", gap: "8px" }
|
|
3564
|
-
}, /* @__PURE__ */
|
|
3733
|
+
}, /* @__PURE__ */ React18.createElement(Activity2, {
|
|
3565
3734
|
size: 16,
|
|
3566
3735
|
color: theme.colors.primary
|
|
3567
|
-
}), /* @__PURE__ */
|
|
3736
|
+
}), /* @__PURE__ */ React18.createElement("h3", {
|
|
3568
3737
|
style: {
|
|
3569
3738
|
margin: 0,
|
|
3570
3739
|
fontSize: theme.fontSizes[1],
|
|
3571
3740
|
fontWeight: "bold",
|
|
3572
3741
|
color: theme.colors.text
|
|
3573
3742
|
}
|
|
3574
|
-
}, title), stats.testFiles > 0 && /* @__PURE__ */
|
|
3743
|
+
}, title), stats.testFiles > 0 && /* @__PURE__ */ React18.createElement("span", {
|
|
3575
3744
|
style: {
|
|
3576
3745
|
backgroundColor: percentageColor,
|
|
3577
3746
|
color: "#ffffff",
|
|
@@ -3581,14 +3750,14 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3581
3750
|
fontWeight: "bold",
|
|
3582
3751
|
fontFamily: "monospace"
|
|
3583
3752
|
}
|
|
3584
|
-
}, stats.percentage, "%"), isLoading && /* @__PURE__ */
|
|
3753
|
+
}, stats.percentage, "%"), isLoading && /* @__PURE__ */ React18.createElement(RefreshCw2, {
|
|
3585
3754
|
size: 16,
|
|
3586
3755
|
color: theme.colors.text,
|
|
3587
3756
|
className: "telemetry-coverage-spinner",
|
|
3588
3757
|
style: { animation: "spin 1s linear infinite" }
|
|
3589
|
-
})), /* @__PURE__ */
|
|
3758
|
+
})), /* @__PURE__ */ React18.createElement("div", {
|
|
3590
3759
|
style: { display: "flex", gap: "8px" }
|
|
3591
|
-
}, /* @__PURE__ */
|
|
3760
|
+
}, /* @__PURE__ */ React18.createElement("button", {
|
|
3592
3761
|
onClick: toggleShowUncoveredFiles,
|
|
3593
3762
|
style: {
|
|
3594
3763
|
background: "none",
|
|
@@ -3603,11 +3772,11 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3603
3772
|
color: theme.colors.text
|
|
3604
3773
|
},
|
|
3605
3774
|
title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
|
|
3606
|
-
}, showUncoveredFiles ? /* @__PURE__ */
|
|
3775
|
+
}, showUncoveredFiles ? /* @__PURE__ */ React18.createElement(EyeOff2, {
|
|
3607
3776
|
size: 14
|
|
3608
|
-
}) : /* @__PURE__ */
|
|
3777
|
+
}) : /* @__PURE__ */ React18.createElement(Eye2, {
|
|
3609
3778
|
size: 14
|
|
3610
|
-
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */
|
|
3779
|
+
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React18.createElement("button", {
|
|
3611
3780
|
onClick: handleRefresh,
|
|
3612
3781
|
disabled: isLoading,
|
|
3613
3782
|
style: {
|
|
@@ -3624,9 +3793,9 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3624
3793
|
opacity: isLoading ? 0.6 : 1
|
|
3625
3794
|
},
|
|
3626
3795
|
title: "Refresh coverage data"
|
|
3627
|
-
}, /* @__PURE__ */
|
|
3796
|
+
}, /* @__PURE__ */ React18.createElement(RefreshCw2, {
|
|
3628
3797
|
size: 14
|
|
3629
|
-
}), "Refresh"))), error && /* @__PURE__ */
|
|
3798
|
+
}), "Refresh"))), error && /* @__PURE__ */ React18.createElement("div", {
|
|
3630
3799
|
style: {
|
|
3631
3800
|
display: "flex",
|
|
3632
3801
|
alignItems: "center",
|
|
@@ -3639,36 +3808,36 @@ var TelemetryCoverageFileTreeContainer = ({
|
|
|
3639
3808
|
color: "#856404",
|
|
3640
3809
|
marginBottom: "8px"
|
|
3641
3810
|
}
|
|
3642
|
-
}, /* @__PURE__ */
|
|
3811
|
+
}, /* @__PURE__ */ React18.createElement(AlertCircle5, {
|
|
3643
3812
|
size: 14
|
|
3644
|
-
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */
|
|
3813
|
+
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React18.createElement("div", {
|
|
3645
3814
|
style: {
|
|
3646
3815
|
display: "flex",
|
|
3647
3816
|
gap: "16px",
|
|
3648
3817
|
fontSize: theme.fontSizes[0],
|
|
3649
3818
|
color: theme.colors.textSecondary || "#666"
|
|
3650
3819
|
}
|
|
3651
|
-
}, /* @__PURE__ */
|
|
3820
|
+
}, /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3652
3821
|
style: { color: "#22c55e" }
|
|
3653
|
-
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */
|
|
3822
|
+
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3654
3823
|
style: { color: "#eab308" }
|
|
3655
|
-
}, stats.partialFiles), " partial"), /* @__PURE__ */
|
|
3824
|
+
}, stats.partialFiles), " partial"), /* @__PURE__ */ React18.createElement("span", null, /* @__PURE__ */ React18.createElement("strong", {
|
|
3656
3825
|
style: { color: "#6b7280" }
|
|
3657
|
-
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */
|
|
3826
|
+
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React18.createElement("span", {
|
|
3658
3827
|
style: { marginLeft: "auto" }
|
|
3659
|
-
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */
|
|
3828
|
+
}, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React18.createElement("div", {
|
|
3660
3829
|
style: {
|
|
3661
3830
|
fontSize: theme.fontSizes[0],
|
|
3662
3831
|
color: theme.colors.textSecondary || "#666"
|
|
3663
3832
|
}
|
|
3664
|
-
}, "No test files with coverage data found")), /* @__PURE__ */
|
|
3833
|
+
}, "No test files with coverage data found")), /* @__PURE__ */ React18.createElement(DirectoryFilterInput, {
|
|
3665
3834
|
fileTree,
|
|
3666
3835
|
theme,
|
|
3667
3836
|
filters,
|
|
3668
3837
|
onFiltersChange: setFilters
|
|
3669
|
-
}), /* @__PURE__ */
|
|
3838
|
+
}), /* @__PURE__ */ React18.createElement("div", {
|
|
3670
3839
|
style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
|
|
3671
|
-
}, /* @__PURE__ */
|
|
3840
|
+
}, /* @__PURE__ */ React18.createElement(TelemetryCoverageFileTree, {
|
|
3672
3841
|
fileTree,
|
|
3673
3842
|
theme,
|
|
3674
3843
|
coverageData,
|
|
@@ -3704,6 +3873,7 @@ export {
|
|
|
3704
3873
|
TelemetryCoverageFileTreeContainer,
|
|
3705
3874
|
TelemetryCoverageFileTree,
|
|
3706
3875
|
StoryboardWorkflowsTreeCore,
|
|
3876
|
+
StatusBar,
|
|
3707
3877
|
RepositoryTreeCore,
|
|
3708
3878
|
OrderedFileList,
|
|
3709
3879
|
MultiFileTreeCore,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CanvasListTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/CanvasListTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"CanvasListTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/CanvasListTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAQpE,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAuNjB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA0M5D,CAAC"}
|
|
@@ -20,6 +20,19 @@ export interface CanvasListTreeProps {
|
|
|
20
20
|
selectedNodeId?: string;
|
|
21
21
|
defaultOpen?: boolean;
|
|
22
22
|
initialOpenState?: Record<string, boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Controlled open state for tree nodes. When provided, the tree becomes controlled.
|
|
25
|
+
* Keys are node IDs, values are boolean (true = open, false = closed).
|
|
26
|
+
* Use with onToggle to handle state changes.
|
|
27
|
+
*/
|
|
28
|
+
openState?: Record<string, boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Callback fired when a node is toggled open/closed.
|
|
31
|
+
* Use with openState for controlled mode.
|
|
32
|
+
* @param nodeId - The ID of the toggled node
|
|
33
|
+
* @param isOpen - Whether the node is now open
|
|
34
|
+
*/
|
|
35
|
+
onToggle?: (nodeId: string, isOpen: boolean) => void;
|
|
23
36
|
horizontalNodePadding?: string;
|
|
24
37
|
verticalNodePadding?: string;
|
|
25
38
|
verticalPadding?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG5D,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErF,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAGhC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAGhC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,UAAU,GAAG,SAAS,CAAC;CACtE"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAE1E,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAG5D,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,eAAe,GAAG,QAAQ,GAAG,UAAU,CAAC;AAErF,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAGhC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACrD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAG5B,aAAa,CAAC,EAAE,aAAa,EAAE,CAAC;IAGhC;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,UAAU,GAAG,SAAS,CAAC;CACtE"}
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA+C,MAAM,OAAO,CAAC;AASpE,OAAO,KAAK,EAEV,4BAA4B,EAO7B,MAAM,SAAS,CAAC;AAwYjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAoW9E,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)
|
|
@@ -42,6 +73,19 @@ export interface StoryboardWorkflowsTreeProps {
|
|
|
42
73
|
selectedNodeId?: string;
|
|
43
74
|
defaultOpen?: boolean;
|
|
44
75
|
initialOpenState?: Record<string, boolean>;
|
|
76
|
+
/**
|
|
77
|
+
* Controlled open state for tree nodes. When provided, the tree becomes controlled.
|
|
78
|
+
* Keys are node IDs, values are boolean (true = open, false = closed).
|
|
79
|
+
* Use with onToggle to handle state changes.
|
|
80
|
+
*/
|
|
81
|
+
openState?: Record<string, boolean>;
|
|
82
|
+
/**
|
|
83
|
+
* Callback fired when a node is toggled open/closed.
|
|
84
|
+
* Use with openState for controlled mode.
|
|
85
|
+
* @param nodeId - The ID of the toggled node
|
|
86
|
+
* @param isOpen - Whether the node is now open
|
|
87
|
+
*/
|
|
88
|
+
onToggle?: (nodeId: string, isOpen: boolean) => void;
|
|
45
89
|
horizontalNodePadding?: string;
|
|
46
90
|
verticalNodePadding?: string;
|
|
47
91
|
verticalPadding?: string;
|
|
@@ -51,6 +95,12 @@ export interface StoryboardWorkflowsTreeProps {
|
|
|
51
95
|
workflowFilterMode?: StoryboardFilterMode;
|
|
52
96
|
traceWorkflowsSet?: Set<string>;
|
|
53
97
|
gitStatusData?: GitFileStatus[];
|
|
98
|
+
/** Map of workflow ID to scenario status (for showing scenario coverage bars) */
|
|
99
|
+
scenarioStatusMap?: Record<string, WorkflowScenarioStatus>;
|
|
100
|
+
/** Map of canvas path (or storyboard ID) to node status (for showing implementation bars) */
|
|
101
|
+
canvasNodeStatusMap?: Record<string, CanvasNodeStatus>;
|
|
102
|
+
/** Which status bars to display: 'implementation', 'traces', or 'both' (default: 'both') */
|
|
103
|
+
statusBarDisplay?: StatusBarDisplay;
|
|
54
104
|
/**
|
|
55
105
|
* Enable dragging nodes to other panels (e.g., terminal).
|
|
56
106
|
* 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"}
|