@principal-ade/dynamic-file-tree 0.2.2 → 0.2.4

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.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, GitCommit, CircleDot, Circle } from "lucide-react";
1955
- import React13, { useMemo as useMemo9, useRef as useRef5 } from "react";
1954
+ import { Package, FolderKanban, LayoutDashboard, Workflow, BookOpen, FolderOpen, GitCommit, ExternalLink } 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
@@ -2262,6 +2262,11 @@ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkf
2262
2262
  };
2263
2263
  var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMode, traceWorkflowsSet, gitStatusMap, scenarioStatusMap, canvasNodeStatusMap) => {
2264
2264
  const result = [];
2265
+ const repoCountMap = new Map;
2266
+ for (const snapshot of versionSnapshots) {
2267
+ const count = repoCountMap.get(snapshot.repositoryUrl) || 0;
2268
+ repoCountMap.set(snapshot.repositoryUrl, count + 1);
2269
+ }
2265
2270
  for (const snapshot of versionSnapshots) {
2266
2271
  const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
2267
2272
  const versionHasTracedWorkflows = snapshot.storyboards.some((storyboard) => storyboard.workflows.some((workflow) => traceWorkflowsSet?.has(workflow.id) ?? false));
@@ -2278,9 +2283,10 @@ var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMo
2278
2283
  }
2279
2284
  const repoName = snapshot.repositoryUrl.replace("https://github.com/", "");
2280
2285
  const shortSha = snapshot.commitSha.substring(0, 8);
2286
+ const hasMultipleVersions = (repoCountMap.get(snapshot.repositoryUrl) || 0) > 1;
2281
2287
  result.push({
2282
2288
  id: `version:${versionKey}`,
2283
- name: `${repoName}@${shortSha}`,
2289
+ name: hasMultipleVersions ? `${repoName}@${shortSha}` : repoName,
2284
2290
  type: "version",
2285
2291
  versionSnapshot: snapshot,
2286
2292
  repositoryUrl: snapshot.repositoryUrl,
@@ -2410,6 +2416,8 @@ var StoryboardWorkflowsTreeCore = ({
2410
2416
  selectedNodeId,
2411
2417
  defaultOpen = false,
2412
2418
  initialOpenState,
2419
+ openState,
2420
+ onToggle,
2413
2421
  horizontalNodePadding = "16px",
2414
2422
  verticalNodePadding = "6px",
2415
2423
  verticalPadding = "20px",
@@ -2423,7 +2431,8 @@ var StoryboardWorkflowsTreeCore = ({
2423
2431
  getDragConfig,
2424
2432
  scenarioStatusMap,
2425
2433
  canvasNodeStatusMap,
2426
- statusBarDisplay = "both"
2434
+ statusBarDisplay = "both",
2435
+ onVersionOpen
2427
2436
  }) => {
2428
2437
  const dndProps = getDndProps(enableDragAndDrop);
2429
2438
  const parentDndManager = useParentDndManager();
@@ -2550,16 +2559,37 @@ var StoryboardWorkflowsTreeCore = ({
2550
2559
  }, gitDisplay.icon));
2551
2560
  }
2552
2561
  }
2553
- if (data.type === "version" && data.hasTraces !== undefined) {
2554
- indicators.push(data.hasTraces ? /* @__PURE__ */ React13.createElement(CircleDot, {
2555
- key: "traces",
2556
- size: 14,
2557
- style: { color: "#10b981", marginLeft: "6px" }
2558
- }) : /* @__PURE__ */ React13.createElement(Circle, {
2559
- key: "traces",
2560
- size: 14,
2561
- style: { color: theme.colors.textMuted, marginLeft: "6px" }
2562
- }));
2562
+ if (data.type === "version" && data.versionSnapshot && onVersionOpen) {
2563
+ indicators.push(/* @__PURE__ */ React13.createElement("button", {
2564
+ key: "open",
2565
+ onClick: (e) => {
2566
+ e.stopPropagation();
2567
+ onVersionOpen(data.versionSnapshot);
2568
+ },
2569
+ style: {
2570
+ display: "flex",
2571
+ alignItems: "center",
2572
+ justifyContent: "center",
2573
+ marginLeft: "6px",
2574
+ padding: "2px",
2575
+ background: "transparent",
2576
+ border: "none",
2577
+ cursor: "pointer",
2578
+ color: theme.colors.textMuted,
2579
+ borderRadius: "4px"
2580
+ },
2581
+ onMouseEnter: (e) => {
2582
+ e.currentTarget.style.color = theme.colors.text;
2583
+ e.currentTarget.style.background = theme.colors.backgroundHover || "rgba(255,255,255,0.1)";
2584
+ },
2585
+ onMouseLeave: (e) => {
2586
+ e.currentTarget.style.color = theme.colors.textMuted;
2587
+ e.currentTarget.style.background = "transparent";
2588
+ },
2589
+ title: "Open version"
2590
+ }, /* @__PURE__ */ React13.createElement(ExternalLink, {
2591
+ size: 14
2592
+ })));
2563
2593
  }
2564
2594
  return indicators.length > 0 ? /* @__PURE__ */ React13.createElement("div", {
2565
2595
  style: { display: "flex", alignItems: "center" }
@@ -2595,6 +2625,24 @@ var StoryboardWorkflowsTreeCore = ({
2595
2625
  };
2596
2626
  const initialHeight = 600;
2597
2627
  const [containerRef, containerHeight] = useContainerHeight(initialHeight);
2628
+ const treeRef = useRef5(null);
2629
+ const [treeKey, setTreeKey] = useState7(0);
2630
+ const prevOpenStateRef = useRef5(openState);
2631
+ useEffect3(() => {
2632
+ if (openState !== undefined && openState !== prevOpenStateRef.current) {
2633
+ prevOpenStateRef.current = openState;
2634
+ setTreeKey((k) => k + 1);
2635
+ }
2636
+ }, [openState]);
2637
+ const handleToggle = (id) => {
2638
+ if (onToggle && treeRef.current) {
2639
+ const node = treeRef.current.get(id);
2640
+ if (node) {
2641
+ onToggle(id, node.isOpen);
2642
+ }
2643
+ }
2644
+ };
2645
+ const effectiveInitialOpenState = openState ?? initialOpenState;
2598
2646
  return /* @__PURE__ */ React13.createElement("div", {
2599
2647
  ref: containerRef,
2600
2648
  style: {
@@ -2605,11 +2653,14 @@ var StoryboardWorkflowsTreeCore = ({
2605
2653
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2606
2654
  }
2607
2655
  }, /* @__PURE__ */ React13.createElement(Tree3, {
2656
+ key: treeKey,
2657
+ ref: treeRef,
2608
2658
  data: treeData,
2609
2659
  onSelect: handleSelect,
2610
2660
  openByDefault: defaultOpen,
2611
- ...initialOpenState !== undefined && { initialOpenState },
2661
+ ...effectiveInitialOpenState !== undefined && { initialOpenState: effectiveInitialOpenState },
2612
2662
  ...selectedNodeId !== undefined && { selection: selectedNodeId },
2663
+ ...onToggle !== undefined && { onToggle: handleToggle },
2613
2664
  width: "100%",
2614
2665
  height: containerHeight,
2615
2666
  rowHeight,
@@ -2854,7 +2905,7 @@ var WorkflowScenarioTreeCore = ({
2854
2905
  };
2855
2906
  // src/components/CanvasListTree/CanvasListTreeCore.tsx
2856
2907
  import { Package as Package3, Folder, LayoutDashboard as LayoutDashboard2, FileText } from "lucide-react";
2857
- import React15, { useMemo as useMemo11, useRef as useRef6 } from "react";
2908
+ import React15, { useMemo as useMemo11, useRef as useRef6, useState as useState8, useEffect as useEffect4 } from "react";
2858
2909
  import { Tree as Tree5 } from "react-arborist";
2859
2910
  var buildTreeData = (canvases, gitStatusMap) => {
2860
2911
  const packagesMap = new Map;
@@ -3032,6 +3083,8 @@ var CanvasListTreeCore = ({
3032
3083
  selectedNodeId,
3033
3084
  defaultOpen = false,
3034
3085
  initialOpenState,
3086
+ openState,
3087
+ onToggle,
3035
3088
  horizontalNodePadding = "16px",
3036
3089
  verticalNodePadding = "6px",
3037
3090
  verticalPadding = "20px",
@@ -3107,6 +3160,24 @@ var CanvasListTreeCore = ({
3107
3160
  };
3108
3161
  const initialHeight = 600;
3109
3162
  const [containerRef, containerHeight] = useContainerHeight(initialHeight);
3163
+ const treeRef = useRef6(null);
3164
+ const [treeKey, setTreeKey] = useState8(0);
3165
+ const prevOpenStateRef = useRef6(openState);
3166
+ useEffect4(() => {
3167
+ if (openState !== undefined && openState !== prevOpenStateRef.current) {
3168
+ prevOpenStateRef.current = openState;
3169
+ setTreeKey((k) => k + 1);
3170
+ }
3171
+ }, [openState]);
3172
+ const handleToggle = (id) => {
3173
+ if (onToggle && treeRef.current) {
3174
+ const node = treeRef.current.get(id);
3175
+ if (node) {
3176
+ onToggle(id, node.isOpen);
3177
+ }
3178
+ }
3179
+ };
3180
+ const effectiveInitialOpenState = openState ?? initialOpenState;
3110
3181
  return /* @__PURE__ */ React15.createElement("div", {
3111
3182
  ref: containerRef,
3112
3183
  style: {
@@ -3117,11 +3188,14 @@ var CanvasListTreeCore = ({
3117
3188
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
3118
3189
  }
3119
3190
  }, /* @__PURE__ */ React15.createElement(Tree5, {
3191
+ key: treeKey,
3192
+ ref: treeRef,
3120
3193
  initialData: treeData,
3121
3194
  onSelect: handleSelect,
3122
3195
  openByDefault: defaultOpen,
3123
- ...initialOpenState !== undefined && { initialOpenState },
3196
+ ...effectiveInitialOpenState !== undefined && { initialOpenState: effectiveInitialOpenState },
3124
3197
  ...selectedNodeId !== undefined && { selection: selectedNodeId },
3198
+ ...onToggle !== undefined && { onToggle: handleToggle },
3125
3199
  width: "100%",
3126
3200
  height: containerHeight,
3127
3201
  rowHeight,
@@ -3324,8 +3398,8 @@ var RepositoryTreeCore = ({
3324
3398
  // src/components/TelemetryCoverageFileTree.tsx
3325
3399
  import {
3326
3400
  Activity,
3327
- CircleDot as CircleDot2,
3328
- Circle as Circle2,
3401
+ CircleDot,
3402
+ Circle,
3329
3403
  TestTube
3330
3404
  } from "lucide-react";
3331
3405
  import React17, { useMemo as useMemo13, useRef as useRef7 } from "react";
@@ -3356,7 +3430,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
3356
3430
  };
3357
3431
  case "partial":
3358
3432
  return {
3359
- icon: /* @__PURE__ */ React17.createElement(CircleDot2, {
3433
+ icon: /* @__PURE__ */ React17.createElement(CircleDot, {
3360
3434
  size: 14
3361
3435
  }),
3362
3436
  color: "#eab308",
@@ -3365,7 +3439,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
3365
3439
  };
3366
3440
  case "none":
3367
3441
  return {
3368
- icon: /* @__PURE__ */ React17.createElement(Circle2, {
3442
+ icon: /* @__PURE__ */ React17.createElement(Circle, {
3369
3443
  size: 14
3370
3444
  }),
3371
3445
  color: "#6b7280",
@@ -3517,7 +3591,7 @@ var TelemetryCoverageFileTree = ({
3517
3591
  opacity: 0.5
3518
3592
  },
3519
3593
  title: "No telemetry instrumentation"
3520
- }, /* @__PURE__ */ React17.createElement(Circle2, {
3594
+ }, /* @__PURE__ */ React17.createElement(Circle, {
3521
3595
  size: 14
3522
3596
  })) : null;
3523
3597
  return /* @__PURE__ */ React17.createElement(TreeNode, {
@@ -3634,7 +3708,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
3634
3708
  };
3635
3709
  // src/components/TelemetryCoverageFileTreeContainer.tsx
3636
3710
  import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle5, Activity as Activity2 } from "lucide-react";
3637
- import React18, { useState as useState7, useMemo as useMemo14 } from "react";
3711
+ import React18, { useState as useState9, useMemo as useMemo14 } from "react";
3638
3712
  var TelemetryCoverageFileTreeContainer = ({
3639
3713
  fileTree,
3640
3714
  theme,
@@ -3654,8 +3728,8 @@ var TelemetryCoverageFileTreeContainer = ({
3654
3728
  verticalNodePadding,
3655
3729
  verticalPadding
3656
3730
  }) => {
3657
- const [filters, setFilters] = useState7([]);
3658
- const [showUncoveredFiles, setShowUncoveredFiles] = useState7(true);
3731
+ const [filters, setFilters] = useState9([]);
3732
+ const [showUncoveredFiles, setShowUncoveredFiles] = useState9(true);
3659
3733
  const selectedDirectories = useMemo14(() => {
3660
3734
  return filters.filter((f) => f.mode === "include").map((f) => f.path);
3661
3735
  }, [filters]);
@@ -1 +1 @@
1
- {"version":3,"file":"CanvasListTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/CanvasListTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAQ/C,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAuNjB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAuK5D,CAAC"}
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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StoryboardWorkflowsTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAS/C,OAAO,KAAK,EAEV,4BAA4B,EAO7B,MAAM,SAAS,CAAC;AAwYjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAiU9E,CAAC"}
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;AAgZjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA6X9E,CAAC"}
@@ -73,6 +73,19 @@ export interface StoryboardWorkflowsTreeProps {
73
73
  selectedNodeId?: string;
74
74
  defaultOpen?: boolean;
75
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;
76
89
  horizontalNodePadding?: string;
77
90
  verticalNodePadding?: string;
78
91
  verticalPadding?: string;
@@ -99,5 +112,10 @@ export interface StoryboardWorkflowsTreeProps {
99
112
  * Return undefined to disable dragging for a specific node.
100
113
  */
101
114
  getDragConfig?: (node: StoryboardWorkflowNodeData) => DragConfig | undefined;
115
+ /**
116
+ * Callback fired when the open button is clicked on a version node.
117
+ * @param versionSnapshot - The version snapshot data for the clicked node
118
+ */
119
+ onVersionOpen?: (versionSnapshot: VersionSnapshot) => void;
102
120
  }
103
121
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/StoryboardWorkflowsTree/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ade/dynamic-file-tree",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "React component for selective directory filtering and file tree visualization",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",