@principal-ade/dynamic-file-tree 0.1.57 → 0.1.59

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 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 { CanvasListTreeCore } from './src/components/CanvasListTree/CanvasListTreeCore';
24
+ export type { CanvasListTreeProps, CanvasListNodeData, CanvasListNodeType, DiscoveredCanvas, } from './src/components/CanvasListTree/types';
23
25
  export { TelemetryCoverageFileTree, calculateTelemetryCoverageStats, } from './src/components/TelemetryCoverageFileTree';
24
26
  export type { TelemetryCoverageFileTreeProps, FileTelemetryCoverage, TelemetryCoverageStatus, } from './src/components/TelemetryCoverageFileTree';
25
27
  export { TelemetryCoverageFileTreeContainer } from './src/components/TelemetryCoverageFileTreeContainer';
@@ -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,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,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
@@ -1889,10 +1889,10 @@ var MultiFileTree = ({
1889
1889
  }, "Selected: ", selectedFile.source.name, " / ", selectedFile.path));
1890
1890
  };
1891
1891
  // src/components/StoryboardWorkflowsTree/StoryboardWorkflowsTreeCore.tsx
1892
- import { Package, FolderKanban, LayoutDashboard, Workflow, BookOpen, FolderOpen, CheckCircle2 } from "lucide-react";
1892
+ import { Package, FolderKanban, LayoutDashboard, Workflow, BookOpen, FolderOpen, CheckCircle2, GitCommit, CircleDot, Circle } from "lucide-react";
1893
1893
  import React11, { useMemo as useMemo9, useRef as useRef5 } from "react";
1894
1894
  import { Tree as Tree3 } from "react-arborist";
1895
- var buildTreeData = (storyboards, workflowCoverageMap) => {
1895
+ var buildTreeDataFromStoryboards = (storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionPrefix) => {
1896
1896
  const packagesMap = new Map;
1897
1897
  const rootStoryboards = [];
1898
1898
  for (const storyboard of storyboards) {
@@ -1906,16 +1906,18 @@ var buildTreeData = (storyboards, workflowCoverageMap) => {
1906
1906
  }
1907
1907
  const buildStoryboardNode = (storyboard) => {
1908
1908
  const children = [];
1909
+ const canvasId = versionPrefix ? `canvas:${versionPrefix}:${storyboard.id}` : `canvas:${storyboard.id}`;
1909
1910
  children.push({
1910
- id: `canvas:${storyboard.id}`,
1911
+ id: canvasId,
1911
1912
  name: "Storyboard",
1912
1913
  type: "canvas",
1913
1914
  canvas: storyboard.canvas,
1914
1915
  storyboard
1915
1916
  });
1916
1917
  if (storyboard.canvas.markdownPath) {
1918
+ const overviewId = versionPrefix ? `overview:${versionPrefix}:${storyboard.id}` : `overview:${storyboard.id}`;
1917
1919
  children.push({
1918
- id: `overview:${storyboard.id}`,
1920
+ id: overviewId,
1919
1921
  name: "Overview",
1920
1922
  type: "overview",
1921
1923
  storyboard,
@@ -1923,28 +1925,51 @@ var buildTreeData = (storyboards, workflowCoverageMap) => {
1923
1925
  });
1924
1926
  }
1925
1927
  if (storyboard.workflows.length > 0) {
1926
- const workflowNodes = storyboard.workflows.map((workflow) => ({
1927
- id: `workflow:${workflow.id}`,
1928
- name: workflow.name,
1929
- type: "workflow",
1930
- workflow,
1931
- storyboard,
1932
- isFullyCovered: workflowCoverageMap?.[workflow.id] ?? false
1933
- })).sort((a, b) => a.name.localeCompare(b.name));
1934
- children.push({
1935
- id: `workflows:${storyboard.id}`,
1936
- name: "Workflows",
1937
- type: "workflows",
1938
- storyboard,
1939
- children: workflowNodes
1940
- });
1928
+ let workflowNodes = storyboard.workflows.map((workflow) => {
1929
+ const workflowHasTraces = traceWorkflowsSet?.has(workflow.id) ?? false;
1930
+ const workflowNodeId = versionPrefix ? `workflow:${versionPrefix}:${workflow.id}` : `workflow:${workflow.id}`;
1931
+ return {
1932
+ id: workflowNodeId,
1933
+ name: workflow.name,
1934
+ type: "workflow",
1935
+ workflow,
1936
+ storyboard,
1937
+ isFullyCovered: workflowCoverageMap?.[workflow.id] ?? false,
1938
+ hasTraces: workflowHasTraces
1939
+ };
1940
+ }).sort((a, b) => a.name.localeCompare(b.name));
1941
+ if (filterMode === "with-traces") {
1942
+ workflowNodes = workflowNodes.filter((node) => node.hasTraces);
1943
+ } else if (filterMode === "without-traces") {
1944
+ workflowNodes = workflowNodes.filter((node) => !node.hasTraces);
1945
+ }
1946
+ if (workflowNodes.length > 0) {
1947
+ const workflowsId = versionPrefix ? `workflows:${versionPrefix}:${storyboard.id}` : `workflows:${storyboard.id}`;
1948
+ children.push({
1949
+ id: workflowsId,
1950
+ name: "Workflows",
1951
+ type: "workflows",
1952
+ storyboard,
1953
+ children: workflowNodes
1954
+ });
1955
+ }
1956
+ }
1957
+ const storyboardHasTracedWorkflows = storyboard.workflows.some((workflow) => traceWorkflowsSet?.has(workflow.id) ?? false);
1958
+ const storyboardHasUntracedWorkflows = storyboard.workflows.some((workflow) => !(traceWorkflowsSet?.has(workflow.id) ?? false));
1959
+ if (filterMode === "with-traces" && !storyboardHasTracedWorkflows) {
1960
+ return null;
1961
+ }
1962
+ if (filterMode === "without-traces" && !storyboardHasUntracedWorkflows) {
1963
+ return null;
1941
1964
  }
1965
+ const storyboardId = versionPrefix ? `storyboard:${versionPrefix}:${storyboard.id}` : `storyboard:${storyboard.id}`;
1942
1966
  return {
1943
- id: `storyboard:${storyboard.id}`,
1967
+ id: storyboardId,
1944
1968
  name: storyboard.name,
1945
1969
  type: "storyboard",
1946
1970
  storyboard,
1947
- children
1971
+ children,
1972
+ hasTraces: storyboardHasTracedWorkflows
1948
1973
  };
1949
1974
  };
1950
1975
  const hasMultiplePackages = packagesMap.size > 1;
@@ -1953,26 +1978,32 @@ var buildTreeData = (storyboards, workflowCoverageMap) => {
1953
1978
  if (shouldShowPackageLevel) {
1954
1979
  const result = [];
1955
1980
  for (const [packageName, packageStoryboards] of packagesMap) {
1956
- const storyboardNodes = packageStoryboards.map(buildStoryboardNode).sort((a, b) => a.name.localeCompare(b.name));
1957
- result.push({
1958
- id: `package:${packageName}`,
1959
- name: packageName,
1960
- type: "package",
1961
- packageName,
1962
- scope: "package",
1963
- children: storyboardNodes
1964
- });
1981
+ const storyboardNodes = packageStoryboards.map(buildStoryboardNode).filter((node) => node !== null).sort((a, b) => a.name.localeCompare(b.name));
1982
+ if (storyboardNodes.length > 0) {
1983
+ const packageId = versionPrefix ? `package:${versionPrefix}:${packageName}` : `package:${packageName}`;
1984
+ result.push({
1985
+ id: packageId,
1986
+ name: packageName,
1987
+ type: "package",
1988
+ packageName,
1989
+ scope: "package",
1990
+ children: storyboardNodes
1991
+ });
1992
+ }
1965
1993
  }
1966
1994
  if (rootStoryboards.length > 0) {
1967
- const rootStoryboardNodes = rootStoryboards.map(buildStoryboardNode).sort((a, b) => a.name.localeCompare(b.name));
1968
- result.push({
1969
- id: "package:root",
1970
- name: "Root",
1971
- type: "package",
1972
- packageName: "root",
1973
- scope: "root",
1974
- children: rootStoryboardNodes
1975
- });
1995
+ const rootStoryboardNodes = rootStoryboards.map(buildStoryboardNode).filter((node) => node !== null).sort((a, b) => a.name.localeCompare(b.name));
1996
+ if (rootStoryboardNodes.length > 0) {
1997
+ const rootPackageId = versionPrefix ? `package:${versionPrefix}:root` : "package:root";
1998
+ result.push({
1999
+ id: rootPackageId,
2000
+ name: "Root",
2001
+ type: "package",
2002
+ packageName: "root",
2003
+ scope: "root",
2004
+ children: rootStoryboardNodes
2005
+ });
2006
+ }
1976
2007
  }
1977
2008
  return result.sort((a, b) => {
1978
2009
  if (a.packageName === "root")
@@ -1986,9 +2017,40 @@ var buildTreeData = (storyboards, workflowCoverageMap) => {
1986
2017
  for (const packageStoryboards of packagesMap.values()) {
1987
2018
  allStoryboards.push(...packageStoryboards);
1988
2019
  }
1989
- return allStoryboards.map(buildStoryboardNode).sort((a, b) => a.name.localeCompare(b.name));
2020
+ return allStoryboards.map(buildStoryboardNode).filter((node) => node !== null).sort((a, b) => a.name.localeCompare(b.name));
1990
2021
  }
1991
2022
  };
2023
+ var buildTreeDataFromVersions = (versionSnapshots, workflowCoverageMap, filterMode, traceWorkflowsSet) => {
2024
+ const result = [];
2025
+ for (const snapshot of versionSnapshots) {
2026
+ const versionKey = `${snapshot.repositoryUrl}@${snapshot.commitSha}`;
2027
+ const versionHasTracedWorkflows = snapshot.storyboards.some((storyboard) => storyboard.workflows.some((workflow) => traceWorkflowsSet?.has(workflow.id) ?? false));
2028
+ const versionHasUntracedWorkflows = snapshot.storyboards.some((storyboard) => storyboard.workflows.some((workflow) => !(traceWorkflowsSet?.has(workflow.id) ?? false)));
2029
+ if (filterMode === "with-traces" && !versionHasTracedWorkflows) {
2030
+ continue;
2031
+ }
2032
+ if (filterMode === "without-traces" && !versionHasUntracedWorkflows) {
2033
+ continue;
2034
+ }
2035
+ const storyboardChildren = buildTreeDataFromStoryboards(snapshot.storyboards, workflowCoverageMap, traceWorkflowsSet, filterMode, versionKey);
2036
+ if (storyboardChildren.length === 0) {
2037
+ continue;
2038
+ }
2039
+ const repoName = snapshot.repositoryUrl.replace("https://github.com/", "");
2040
+ const shortSha = snapshot.commitSha.substring(0, 8);
2041
+ result.push({
2042
+ id: `version:${versionKey}`,
2043
+ name: `${repoName}@${shortSha}`,
2044
+ type: "version",
2045
+ versionSnapshot: snapshot,
2046
+ repositoryUrl: snapshot.repositoryUrl,
2047
+ commitSha: snapshot.commitSha,
2048
+ hasTraces: versionHasTracedWorkflows,
2049
+ children: storyboardChildren
2050
+ });
2051
+ }
2052
+ return result;
2053
+ };
1992
2054
  var StoryboardWorkflowsTreeCore = ({
1993
2055
  storyboards,
1994
2056
  theme,
@@ -2000,7 +2062,10 @@ var StoryboardWorkflowsTreeCore = ({
2000
2062
  verticalNodePadding = "6px",
2001
2063
  verticalPadding = "20px",
2002
2064
  enableDragAndDrop = false,
2003
- workflowCoverageMap
2065
+ workflowCoverageMap,
2066
+ versionSnapshots,
2067
+ workflowFilterMode = "all",
2068
+ traceWorkflowsSet
2004
2069
  }) => {
2005
2070
  const dndProps = getDndProps(enableDragAndDrop);
2006
2071
  const rowHeight = useMemo9(() => {
@@ -2009,11 +2074,19 @@ var StoryboardWorkflowsTreeCore = ({
2009
2074
  const borderHeight = 2;
2010
2075
  return contentLineHeight + paddingValue * 2 + borderHeight;
2011
2076
  }, [verticalNodePadding]);
2012
- const treeData = useMemo9(() => buildTreeData(storyboards, workflowCoverageMap), [storyboards, workflowCoverageMap]);
2077
+ const treeData = useMemo9(() => {
2078
+ if (versionSnapshots && versionSnapshots.length > 0) {
2079
+ return buildTreeDataFromVersions(versionSnapshots, workflowCoverageMap, workflowFilterMode, traceWorkflowsSet);
2080
+ } else {
2081
+ return buildTreeDataFromStoryboards(storyboards, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode);
2082
+ }
2083
+ }, [storyboards, versionSnapshots, workflowCoverageMap, traceWorkflowsSet, workflowFilterMode]);
2013
2084
  const NodeRenderer = (props) => {
2014
2085
  const { node } = props;
2015
2086
  const data = node.data;
2016
- const icon = data.type === "package" ? /* @__PURE__ */ React11.createElement(Package, {
2087
+ const icon = data.type === "version" ? /* @__PURE__ */ React11.createElement(GitCommit, {
2088
+ size: 16
2089
+ }) : data.type === "package" ? /* @__PURE__ */ React11.createElement(Package, {
2017
2090
  size: 16
2018
2091
  }) : data.type === "storyboard" ? /* @__PURE__ */ React11.createElement(FolderKanban, {
2019
2092
  size: 16
@@ -2026,12 +2099,36 @@ var StoryboardWorkflowsTreeCore = ({
2026
2099
  }) : /* @__PURE__ */ React11.createElement(Workflow, {
2027
2100
  size: 16
2028
2101
  });
2029
- const nameColor = data.type === "package" ? theme.colors.primary : data.type === "storyboard" ? theme.colors.success : data.type === "overview" ? theme.colors.info || "#3b82f6" : data.type === "canvas" ? theme.colors.warning || "#f59e0b" : data.type === "workflows" ? theme.colors.text : theme.colors.textSecondary;
2102
+ 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;
2030
2103
  const nodeHorizontalPadding = data.type === "overview" || data.type === "canvas" || data.type === "workflows" || data.type === "workflow" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
2031
- const rightContent = data.type === "workflow" && data.isFullyCovered ? /* @__PURE__ */ React11.createElement(CheckCircle2, {
2032
- size: 14,
2033
- style: { color: "#10b981", marginLeft: "6px" }
2034
- }) : undefined;
2104
+ const rightContent = (() => {
2105
+ if (data.type === "workflow") {
2106
+ if (data.isFullyCovered) {
2107
+ return /* @__PURE__ */ React11.createElement(CheckCircle2, {
2108
+ size: 14,
2109
+ style: { color: "#10b981", marginLeft: "6px" }
2110
+ });
2111
+ } else if (data.hasTraces !== undefined) {
2112
+ return data.hasTraces ? /* @__PURE__ */ React11.createElement(CircleDot, {
2113
+ size: 14,
2114
+ style: { color: "#10b981", marginLeft: "6px" }
2115
+ }) : /* @__PURE__ */ React11.createElement(Circle, {
2116
+ size: 14,
2117
+ style: { color: theme.colors.textMuted, marginLeft: "6px" }
2118
+ });
2119
+ }
2120
+ }
2121
+ if ((data.type === "version" || data.type === "storyboard") && data.hasTraces !== undefined) {
2122
+ return data.hasTraces ? /* @__PURE__ */ React11.createElement(CircleDot, {
2123
+ size: 14,
2124
+ style: { color: "#10b981", marginLeft: "6px" }
2125
+ }) : /* @__PURE__ */ React11.createElement(Circle, {
2126
+ size: 14,
2127
+ style: { color: theme.colors.textMuted, marginLeft: "6px" }
2128
+ });
2129
+ }
2130
+ return;
2131
+ })();
2035
2132
  return /* @__PURE__ */ React11.createElement(TreeNode, {
2036
2133
  ...props,
2037
2134
  theme,
@@ -2070,6 +2167,171 @@ var StoryboardWorkflowsTreeCore = ({
2070
2167
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2071
2168
  }
2072
2169
  }, /* @__PURE__ */ React11.createElement(Tree3, {
2170
+ data: treeData,
2171
+ onSelect: handleSelect,
2172
+ openByDefault: defaultOpen,
2173
+ ...initialOpenState !== undefined && { initialOpenState },
2174
+ ...selectedNodeId !== undefined && { selection: selectedNodeId },
2175
+ width: "100%",
2176
+ height: containerHeight,
2177
+ rowHeight,
2178
+ ...dndProps
2179
+ }, NodeRenderer));
2180
+ };
2181
+ // src/components/CanvasListTree/CanvasListTreeCore.tsx
2182
+ import { Package as Package2, Folder, LayoutDashboard as LayoutDashboard2, FileText } from "lucide-react";
2183
+ import React12, { useMemo as useMemo10, useRef as useRef6 } from "react";
2184
+ import { Tree as Tree4 } from "react-arborist";
2185
+ var buildTreeData = (canvases) => {
2186
+ const packagesMap = new Map;
2187
+ const rootCanvases = [];
2188
+ for (const canvas of canvases) {
2189
+ if (canvas.scope === "package" && canvas.packageName) {
2190
+ const existing = packagesMap.get(canvas.packageName) || [];
2191
+ existing.push(canvas);
2192
+ packagesMap.set(canvas.packageName, existing);
2193
+ } else {
2194
+ rootCanvases.push(canvas);
2195
+ }
2196
+ }
2197
+ const buildCanvasNode = (canvas) => {
2198
+ const children = [];
2199
+ children.push({
2200
+ id: `canvas:${canvas.id}`,
2201
+ name: "Canvas",
2202
+ type: "canvas",
2203
+ canvas
2204
+ });
2205
+ if (canvas.markdownPath) {
2206
+ children.push({
2207
+ id: `overview:${canvas.id}`,
2208
+ name: "Overview",
2209
+ type: "overview",
2210
+ canvas,
2211
+ markdownPath: canvas.markdownPath
2212
+ });
2213
+ }
2214
+ return {
2215
+ id: `canvas-folder:${canvas.id}`,
2216
+ name: canvas.name,
2217
+ type: "canvas-folder",
2218
+ canvas,
2219
+ children
2220
+ };
2221
+ };
2222
+ const hasMultiplePackages = packagesMap.size > 1;
2223
+ const hasRootAndPackages = packagesMap.size > 0 && rootCanvases.length > 0;
2224
+ const shouldShowPackageLevel = hasMultiplePackages || hasRootAndPackages;
2225
+ if (shouldShowPackageLevel) {
2226
+ const result = [];
2227
+ for (const [packageName, packageCanvases] of packagesMap) {
2228
+ const canvasNodes = packageCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
2229
+ result.push({
2230
+ id: `package:${packageName}`,
2231
+ name: packageName,
2232
+ type: "package",
2233
+ packageName,
2234
+ scope: "package",
2235
+ children: canvasNodes
2236
+ });
2237
+ }
2238
+ if (rootCanvases.length > 0) {
2239
+ const rootCanvasNodes = rootCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
2240
+ result.push({
2241
+ id: "package:root",
2242
+ name: "Root",
2243
+ type: "package",
2244
+ packageName: "root",
2245
+ scope: "root",
2246
+ children: rootCanvasNodes
2247
+ });
2248
+ }
2249
+ return result.sort((a, b) => {
2250
+ if (a.packageName === "root")
2251
+ return 1;
2252
+ if (b.packageName === "root")
2253
+ return -1;
2254
+ return a.name.localeCompare(b.name);
2255
+ });
2256
+ } else {
2257
+ const allCanvases = [...rootCanvases];
2258
+ for (const packageCanvases of packagesMap.values()) {
2259
+ allCanvases.push(...packageCanvases);
2260
+ }
2261
+ return allCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
2262
+ }
2263
+ };
2264
+ var CanvasListTreeCore = ({
2265
+ canvases,
2266
+ theme,
2267
+ onClick,
2268
+ selectedNodeId,
2269
+ defaultOpen = false,
2270
+ initialOpenState,
2271
+ horizontalNodePadding = "16px",
2272
+ verticalNodePadding = "6px",
2273
+ verticalPadding = "20px",
2274
+ enableDragAndDrop = false
2275
+ }) => {
2276
+ const dndProps = getDndProps(enableDragAndDrop);
2277
+ const rowHeight = useMemo10(() => {
2278
+ const paddingValue = parseFloat(verticalNodePadding);
2279
+ const contentLineHeight = 20;
2280
+ const borderHeight = 2;
2281
+ return contentLineHeight + paddingValue * 2 + borderHeight;
2282
+ }, [verticalNodePadding]);
2283
+ const treeData = useMemo10(() => buildTreeData(canvases), [canvases]);
2284
+ const NodeRenderer = (props) => {
2285
+ const { node } = props;
2286
+ const data = node.data;
2287
+ const icon = data.type === "package" ? /* @__PURE__ */ React12.createElement(Package2, {
2288
+ size: 16
2289
+ }) : data.type === "canvas-folder" ? /* @__PURE__ */ React12.createElement(Folder, {
2290
+ size: 16
2291
+ }) : data.type === "overview" ? /* @__PURE__ */ React12.createElement(FileText, {
2292
+ size: 16
2293
+ }) : /* @__PURE__ */ React12.createElement(LayoutDashboard2, {
2294
+ size: 16
2295
+ });
2296
+ 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
+ const nodeHorizontalPadding = data.type === "overview" || data.type === "canvas" ? `calc(${horizontalNodePadding} + 12px)` : horizontalNodePadding;
2298
+ return /* @__PURE__ */ React12.createElement(TreeNode, {
2299
+ ...props,
2300
+ theme,
2301
+ nameColor,
2302
+ leftIcon: icon,
2303
+ horizontalNodePadding: nodeHorizontalPadding,
2304
+ verticalNodePadding
2305
+ });
2306
+ };
2307
+ const lastSelectionRef = useRef6(null);
2308
+ const handleSelect = (selectedNodes) => {
2309
+ if (selectedNodes.length === 0)
2310
+ return;
2311
+ const node = selectedNodes[0];
2312
+ const nodeData = node.data;
2313
+ const now = Date.now();
2314
+ const lastSelection = lastSelectionRef.current;
2315
+ if (lastSelection && lastSelection.nodeId === nodeData.id && now - lastSelection.timestamp < 50) {
2316
+ return;
2317
+ }
2318
+ lastSelectionRef.current = { nodeId: nodeData.id, timestamp: now };
2319
+ if (nodeData.type === "overview" || nodeData.type === "canvas") {
2320
+ onClick(nodeData);
2321
+ }
2322
+ };
2323
+ const initialHeight = 600;
2324
+ const [containerRef, containerHeight] = useContainerHeight(initialHeight);
2325
+ return /* @__PURE__ */ React12.createElement("div", {
2326
+ ref: containerRef,
2327
+ style: {
2328
+ backgroundColor: theme.colors.background,
2329
+ color: theme.colors.text,
2330
+ fontFamily: theme.fonts.body,
2331
+ height: "100%",
2332
+ ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2333
+ }
2334
+ }, /* @__PURE__ */ React12.createElement(Tree4, {
2073
2335
  initialData: treeData,
2074
2336
  onSelect: handleSelect,
2075
2337
  openByDefault: defaultOpen,
@@ -2084,13 +2346,13 @@ var StoryboardWorkflowsTreeCore = ({
2084
2346
  // src/components/TelemetryCoverageFileTree.tsx
2085
2347
  import {
2086
2348
  Activity,
2087
- CircleDot,
2088
- Circle,
2349
+ CircleDot as CircleDot2,
2350
+ Circle as Circle2,
2089
2351
  TestTube
2090
2352
  } from "lucide-react";
2091
- import React12, { useMemo as useMemo10, useRef as useRef6 } from "react";
2092
- import { Tree as Tree4 } from "react-arborist";
2093
- var TelemetryCoverageContext = React12.createContext(null);
2353
+ import React13, { useMemo as useMemo11, useRef as useRef7 } from "react";
2354
+ import { Tree as Tree5 } from "react-arborist";
2355
+ var TelemetryCoverageContext = React13.createContext(null);
2094
2356
  var DEFAULT_TEST_PATTERNS = [
2095
2357
  /\.test\.[jt]sx?$/,
2096
2358
  /\.spec\.[jt]sx?$/,
@@ -2107,7 +2369,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
2107
2369
  switch (status) {
2108
2370
  case "covered":
2109
2371
  return {
2110
- icon: /* @__PURE__ */ React12.createElement(Activity, {
2372
+ icon: /* @__PURE__ */ React13.createElement(Activity, {
2111
2373
  size: 14
2112
2374
  }),
2113
2375
  color: "#22c55e",
@@ -2116,7 +2378,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
2116
2378
  };
2117
2379
  case "partial":
2118
2380
  return {
2119
- icon: /* @__PURE__ */ React12.createElement(CircleDot, {
2381
+ icon: /* @__PURE__ */ React13.createElement(CircleDot2, {
2120
2382
  size: 14
2121
2383
  }),
2122
2384
  color: "#eab308",
@@ -2125,7 +2387,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
2125
2387
  };
2126
2388
  case "none":
2127
2389
  return {
2128
- icon: /* @__PURE__ */ React12.createElement(Circle, {
2390
+ icon: /* @__PURE__ */ React13.createElement(Circle2, {
2129
2391
  size: 14
2130
2392
  }),
2131
2393
  color: "#6b7280",
@@ -2227,7 +2489,7 @@ var TelemetryCoverageFileTree = ({
2227
2489
  enableDragAndDrop = false
2228
2490
  }) => {
2229
2491
  const dndProps = getDndProps(enableDragAndDrop);
2230
- const coverageMap = useMemo10(() => {
2492
+ const coverageMap = useMemo11(() => {
2231
2493
  const map = new Map;
2232
2494
  coverageData.forEach((item) => {
2233
2495
  map.set(item.filePath, item);
@@ -2236,7 +2498,7 @@ var TelemetryCoverageFileTree = ({
2236
2498
  }, [coverageData]);
2237
2499
  const NodeRenderer = (props) => {
2238
2500
  const { node } = props;
2239
- const ctx = React12.useContext(TelemetryCoverageContext);
2501
+ const ctx = React13.useContext(TelemetryCoverageContext);
2240
2502
  const coverage = ctx?.coverageMap.get(node.data.id);
2241
2503
  const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
2242
2504
  const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
@@ -2248,11 +2510,11 @@ var TelemetryCoverageFileTree = ({
2248
2510
  } else if (node.data.isTestFile) {
2249
2511
  nameColor = "#6b728080";
2250
2512
  }
2251
- const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React12.createElement(TestTube, {
2513
+ const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React13.createElement(TestTube, {
2252
2514
  size: 14,
2253
2515
  style: { marginRight: 4, color: "#6b7280" }
2254
2516
  }) : null;
2255
- const rightContent = coverageDisplay ? /* @__PURE__ */ React12.createElement("div", {
2517
+ const rightContent = coverageDisplay ? /* @__PURE__ */ React13.createElement("div", {
2256
2518
  style: {
2257
2519
  display: "flex",
2258
2520
  alignItems: "center",
@@ -2260,14 +2522,14 @@ var TelemetryCoverageFileTree = ({
2260
2522
  marginRight: "8px"
2261
2523
  },
2262
2524
  title: coverageDisplay.label
2263
- }, coverageDisplay.icon, /* @__PURE__ */ React12.createElement("span", {
2525
+ }, coverageDisplay.icon, /* @__PURE__ */ React13.createElement("span", {
2264
2526
  style: {
2265
2527
  marginLeft: "4px",
2266
2528
  fontSize: theme.fontSizes[0],
2267
2529
  fontWeight: "bold",
2268
2530
  fontFamily: "monospace"
2269
2531
  }
2270
- }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React12.createElement("div", {
2532
+ }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React13.createElement("div", {
2271
2533
  style: {
2272
2534
  display: "flex",
2273
2535
  alignItems: "center",
@@ -2276,10 +2538,10 @@ var TelemetryCoverageFileTree = ({
2276
2538
  opacity: 0.5
2277
2539
  },
2278
2540
  title: "No telemetry instrumentation"
2279
- }, /* @__PURE__ */ React12.createElement(Circle, {
2541
+ }, /* @__PURE__ */ React13.createElement(Circle2, {
2280
2542
  size: 14
2281
2543
  })) : null;
2282
- return /* @__PURE__ */ React12.createElement(TreeNode, {
2544
+ return /* @__PURE__ */ React13.createElement(TreeNode, {
2283
2545
  ...props,
2284
2546
  theme,
2285
2547
  rightContent,
@@ -2294,16 +2556,16 @@ var TelemetryCoverageFileTree = ({
2294
2556
  }
2295
2557
  });
2296
2558
  };
2297
- const treeStructure = useMemo10(() => {
2559
+ const treeStructure = useMemo11(() => {
2298
2560
  return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
2299
2561
  }, [fileTree, showOnlyTestFiles, testFilePatterns]);
2300
- const treeData = useMemo10(() => {
2562
+ const treeData = useMemo11(() => {
2301
2563
  if (showUncoveredFiles) {
2302
2564
  return treeStructure;
2303
2565
  }
2304
2566
  return filterCoveredNodes(treeStructure, coverageMap);
2305
2567
  }, [treeStructure, showUncoveredFiles, coverageMap]);
2306
- const hasTracedChildrenMap = useMemo10(() => {
2568
+ const hasTracedChildrenMap = useMemo11(() => {
2307
2569
  const map = new Map;
2308
2570
  const markTracedParents = (nodes) => {
2309
2571
  let hasTraced = false;
@@ -2325,7 +2587,7 @@ var TelemetryCoverageFileTree = ({
2325
2587
  markTracedParents(treeData);
2326
2588
  return map;
2327
2589
  }, [treeData, coverageMap]);
2328
- const lastSelectionRef = useRef6(null);
2590
+ const lastSelectionRef = useRef7(null);
2329
2591
  const handleSelect = (selectedNodes) => {
2330
2592
  const selectedFiles = selectedNodes.filter((node) => !node.data.children).map((node) => node.data.id);
2331
2593
  const selectedDirs = selectedNodes.filter((node) => node.data.children).map((node) => node.data.id);
@@ -2344,7 +2606,7 @@ var TelemetryCoverageFileTree = ({
2344
2606
  onDirectorySelect(selectedDirs);
2345
2607
  }
2346
2608
  };
2347
- const calculatedHeight = useMemo10(() => {
2609
+ const calculatedHeight = useMemo11(() => {
2348
2610
  if (autoHeight) {
2349
2611
  const visibleNodeCount = countVisibleNodes3(treeData, openByDefault);
2350
2612
  return visibleNodeCount * 28;
@@ -2352,7 +2614,7 @@ var TelemetryCoverageFileTree = ({
2352
2614
  return initialHeight;
2353
2615
  }, [autoHeight, treeData, openByDefault, initialHeight]);
2354
2616
  const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
2355
- return /* @__PURE__ */ React12.createElement("div", {
2617
+ return /* @__PURE__ */ React13.createElement("div", {
2356
2618
  ref: containerRef,
2357
2619
  style: {
2358
2620
  backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
@@ -2361,9 +2623,9 @@ var TelemetryCoverageFileTree = ({
2361
2623
  ...autoHeight ? {} : { height: "100%" },
2362
2624
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2363
2625
  }
2364
- }, /* @__PURE__ */ React12.createElement(TelemetryCoverageContext.Provider, {
2626
+ }, /* @__PURE__ */ React13.createElement(TelemetryCoverageContext.Provider, {
2365
2627
  value: { coverageMap, hasTracedChildrenMap }
2366
- }, /* @__PURE__ */ React12.createElement(Tree4, {
2628
+ }, /* @__PURE__ */ React13.createElement(Tree5, {
2367
2629
  data: treeData,
2368
2630
  onSelect: handleSelect,
2369
2631
  ...selectedFile !== undefined && { selection: selectedFile },
@@ -2392,7 +2654,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
2392
2654
  };
2393
2655
  // src/components/TelemetryCoverageFileTreeContainer.tsx
2394
2656
  import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle4, Activity as Activity2 } from "lucide-react";
2395
- import React13, { useState as useState7, useMemo as useMemo11 } from "react";
2657
+ import React14, { useState as useState7, useMemo as useMemo12 } from "react";
2396
2658
  var TelemetryCoverageFileTreeContainer = ({
2397
2659
  fileTree,
2398
2660
  theme,
@@ -2414,10 +2676,10 @@ var TelemetryCoverageFileTreeContainer = ({
2414
2676
  }) => {
2415
2677
  const [filters, setFilters] = useState7([]);
2416
2678
  const [showUncoveredFiles, setShowUncoveredFiles] = useState7(true);
2417
- const selectedDirectories = useMemo11(() => {
2679
+ const selectedDirectories = useMemo12(() => {
2418
2680
  return filters.filter((f) => f.mode === "include").map((f) => f.path);
2419
2681
  }, [filters]);
2420
- const stats = useMemo11(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
2682
+ const stats = useMemo12(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
2421
2683
  const handleRefresh = () => {
2422
2684
  onRefresh?.();
2423
2685
  };
@@ -2425,34 +2687,34 @@ var TelemetryCoverageFileTreeContainer = ({
2425
2687
  setShowUncoveredFiles(!showUncoveredFiles);
2426
2688
  };
2427
2689
  const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
2428
- return /* @__PURE__ */ React13.createElement("div", {
2690
+ return /* @__PURE__ */ React14.createElement("div", {
2429
2691
  style: { display: "flex", flexDirection: "column", height: "100%" }
2430
- }, showControls && /* @__PURE__ */ React13.createElement("div", {
2692
+ }, showControls && /* @__PURE__ */ React14.createElement("div", {
2431
2693
  style: {
2432
2694
  padding: "12px",
2433
2695
  borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
2434
2696
  backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
2435
2697
  }
2436
- }, /* @__PURE__ */ React13.createElement("div", {
2698
+ }, /* @__PURE__ */ React14.createElement("div", {
2437
2699
  style: {
2438
2700
  display: "flex",
2439
2701
  alignItems: "center",
2440
2702
  justifyContent: "space-between",
2441
2703
  marginBottom: "8px"
2442
2704
  }
2443
- }, /* @__PURE__ */ React13.createElement("div", {
2705
+ }, /* @__PURE__ */ React14.createElement("div", {
2444
2706
  style: { display: "flex", alignItems: "center", gap: "8px" }
2445
- }, /* @__PURE__ */ React13.createElement(Activity2, {
2707
+ }, /* @__PURE__ */ React14.createElement(Activity2, {
2446
2708
  size: 16,
2447
2709
  color: theme.colors.primary
2448
- }), /* @__PURE__ */ React13.createElement("h3", {
2710
+ }), /* @__PURE__ */ React14.createElement("h3", {
2449
2711
  style: {
2450
2712
  margin: 0,
2451
2713
  fontSize: theme.fontSizes[1],
2452
2714
  fontWeight: "bold",
2453
2715
  color: theme.colors.text
2454
2716
  }
2455
- }, title), stats.testFiles > 0 && /* @__PURE__ */ React13.createElement("span", {
2717
+ }, title), stats.testFiles > 0 && /* @__PURE__ */ React14.createElement("span", {
2456
2718
  style: {
2457
2719
  backgroundColor: percentageColor,
2458
2720
  color: "#ffffff",
@@ -2462,14 +2724,14 @@ var TelemetryCoverageFileTreeContainer = ({
2462
2724
  fontWeight: "bold",
2463
2725
  fontFamily: "monospace"
2464
2726
  }
2465
- }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React13.createElement(RefreshCw2, {
2727
+ }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React14.createElement(RefreshCw2, {
2466
2728
  size: 16,
2467
2729
  color: theme.colors.text,
2468
2730
  className: "telemetry-coverage-spinner",
2469
2731
  style: { animation: "spin 1s linear infinite" }
2470
- })), /* @__PURE__ */ React13.createElement("div", {
2732
+ })), /* @__PURE__ */ React14.createElement("div", {
2471
2733
  style: { display: "flex", gap: "8px" }
2472
- }, /* @__PURE__ */ React13.createElement("button", {
2734
+ }, /* @__PURE__ */ React14.createElement("button", {
2473
2735
  onClick: toggleShowUncoveredFiles,
2474
2736
  style: {
2475
2737
  background: "none",
@@ -2484,11 +2746,11 @@ var TelemetryCoverageFileTreeContainer = ({
2484
2746
  color: theme.colors.text
2485
2747
  },
2486
2748
  title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
2487
- }, showUncoveredFiles ? /* @__PURE__ */ React13.createElement(EyeOff2, {
2749
+ }, showUncoveredFiles ? /* @__PURE__ */ React14.createElement(EyeOff2, {
2488
2750
  size: 14
2489
- }) : /* @__PURE__ */ React13.createElement(Eye2, {
2751
+ }) : /* @__PURE__ */ React14.createElement(Eye2, {
2490
2752
  size: 14
2491
- }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React13.createElement("button", {
2753
+ }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React14.createElement("button", {
2492
2754
  onClick: handleRefresh,
2493
2755
  disabled: isLoading,
2494
2756
  style: {
@@ -2505,9 +2767,9 @@ var TelemetryCoverageFileTreeContainer = ({
2505
2767
  opacity: isLoading ? 0.6 : 1
2506
2768
  },
2507
2769
  title: "Refresh coverage data"
2508
- }, /* @__PURE__ */ React13.createElement(RefreshCw2, {
2770
+ }, /* @__PURE__ */ React14.createElement(RefreshCw2, {
2509
2771
  size: 14
2510
- }), "Refresh"))), error && /* @__PURE__ */ React13.createElement("div", {
2772
+ }), "Refresh"))), error && /* @__PURE__ */ React14.createElement("div", {
2511
2773
  style: {
2512
2774
  display: "flex",
2513
2775
  alignItems: "center",
@@ -2520,36 +2782,36 @@ var TelemetryCoverageFileTreeContainer = ({
2520
2782
  color: "#856404",
2521
2783
  marginBottom: "8px"
2522
2784
  }
2523
- }, /* @__PURE__ */ React13.createElement(AlertCircle4, {
2785
+ }, /* @__PURE__ */ React14.createElement(AlertCircle4, {
2524
2786
  size: 14
2525
- }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React13.createElement("div", {
2787
+ }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React14.createElement("div", {
2526
2788
  style: {
2527
2789
  display: "flex",
2528
2790
  gap: "16px",
2529
2791
  fontSize: theme.fontSizes[0],
2530
2792
  color: theme.colors.textSecondary || "#666"
2531
2793
  }
2532
- }, /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2794
+ }, /* @__PURE__ */ React14.createElement("span", null, /* @__PURE__ */ React14.createElement("strong", {
2533
2795
  style: { color: "#22c55e" }
2534
- }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2796
+ }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React14.createElement("span", null, /* @__PURE__ */ React14.createElement("strong", {
2535
2797
  style: { color: "#eab308" }
2536
- }, stats.partialFiles), " partial"), /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2798
+ }, stats.partialFiles), " partial"), /* @__PURE__ */ React14.createElement("span", null, /* @__PURE__ */ React14.createElement("strong", {
2537
2799
  style: { color: "#6b7280" }
2538
- }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React13.createElement("span", {
2800
+ }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React14.createElement("span", {
2539
2801
  style: { marginLeft: "auto" }
2540
- }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React13.createElement("div", {
2802
+ }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React14.createElement("div", {
2541
2803
  style: {
2542
2804
  fontSize: theme.fontSizes[0],
2543
2805
  color: theme.colors.textSecondary || "#666"
2544
2806
  }
2545
- }, "No test files with coverage data found")), /* @__PURE__ */ React13.createElement(DirectoryFilterInput, {
2807
+ }, "No test files with coverage data found")), /* @__PURE__ */ React14.createElement(DirectoryFilterInput, {
2546
2808
  fileTree,
2547
2809
  theme,
2548
2810
  filters,
2549
2811
  onFiltersChange: setFilters
2550
- }), /* @__PURE__ */ React13.createElement("div", {
2812
+ }), /* @__PURE__ */ React14.createElement("div", {
2551
2813
  style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
2552
- }, /* @__PURE__ */ React13.createElement(TelemetryCoverageFileTree, {
2814
+ }, /* @__PURE__ */ React14.createElement(TelemetryCoverageFileTree, {
2553
2815
  fileTree,
2554
2816
  theme,
2555
2817
  coverageData,
@@ -2587,5 +2849,6 @@ export {
2587
2849
  GitOrderedFileList,
2588
2850
  FileTreeContainer,
2589
2851
  DynamicFileTree,
2590
- DirectoryFilterInput
2852
+ DirectoryFilterInput,
2853
+ CanvasListTreeCore
2591
2854
  };
@@ -0,0 +1,12 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { CanvasListTreeCore } from './CanvasListTreeCore';
3
+ declare const meta: Meta<typeof CanvasListTreeCore>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CanvasListTreeCore>;
6
+ export declare const MultiPackage: Story;
7
+ export declare const SinglePackage: Story;
8
+ export declare const RootOnly: Story;
9
+ export declare const Empty: Story;
10
+ export declare const TerminalTheme: Story;
11
+ export declare const MatrixTheme: Story;
12
+ //# sourceMappingURL=CanvasListTree.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasListTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/CanvasListTree.stories.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AA0G1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAmCzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAyBjD,eAAO,MAAM,YAAY,EAAE,KAU1B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAUtB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAUnB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { CanvasListTreeProps } from './types';
3
+ export declare const CanvasListTreeCore: React.FC<CanvasListTreeProps>;
4
+ //# sourceMappingURL=CanvasListTreeCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasListTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasListTree/CanvasListTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAO/C,OAAO,KAAK,EAEV,mBAAmB,EAEpB,MAAM,SAAS,CAAC;AAkHjB,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAuI5D,CAAC"}
@@ -0,0 +1,26 @@
1
+ import type { Theme } from '@principal-ade/industry-theme';
2
+ import type { DiscoveredCanvas } from '@principal-ai/principal-view-core';
3
+ import type { TreeNodeData } from '../TreeNode';
4
+ export type { DiscoveredCanvas };
5
+ export type CanvasListNodeType = 'package' | 'canvas-folder' | 'canvas' | 'overview';
6
+ export interface CanvasListNodeData extends TreeNodeData {
7
+ type: CanvasListNodeType;
8
+ children?: CanvasListNodeData[];
9
+ canvas?: DiscoveredCanvas;
10
+ packageName?: string;
11
+ scope?: 'package' | 'root';
12
+ markdownPath?: string;
13
+ }
14
+ export interface CanvasListTreeProps {
15
+ canvases: DiscoveredCanvas[];
16
+ theme: Theme;
17
+ onClick: (node: CanvasListNodeData) => void;
18
+ selectedNodeId?: string;
19
+ defaultOpen?: boolean;
20
+ initialOpenState?: Record<string, boolean>;
21
+ horizontalNodePadding?: string;
22
+ verticalNodePadding?: string;
23
+ verticalPadding?: string;
24
+ enableDragAndDrop?: boolean;
25
+ }
26
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,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;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;CAC7B"}
@@ -20,4 +20,10 @@ export declare const ThemeComparison: Story;
20
20
  export declare const CustomPadding: Story;
21
21
  export declare const WithOverviewNodes: Story;
22
22
  export declare const WithoutOverviewNodes: Story;
23
+ export declare const VersionGrouping: Story;
24
+ export declare const VersionGroupingWithTraces: Story;
25
+ export declare const VersionGroupingWithFilter: Story;
26
+ export declare const VersionEvolution: Story;
27
+ export declare const MultiServiceVersionGrouping: Story;
28
+ export declare const VersionGroupingWithCoverage: Story;
23
29
  //# sourceMappingURL=StoryboardWorkflowsTree.stories.d.ts.map
@@ -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"}
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"}
@@ -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,EAG7B,MAAM,SAAS,CAAC;AAyIjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAsJ9E,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;AAyPjB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CAsM9E,CAAC"}
@@ -1,11 +1,19 @@
1
1
  import type { Theme } from '@principal-ade/industry-theme';
2
- import type { DiscoveredStoryboard, DiscoveredCanvas, DiscoveredWorkflow, WorkflowTemplate } from '@principal-ai/principal-view-core';
2
+ import type { DiscoveredStoryboard, DiscoveredCanvas, DiscoveredWorkflow, WorkflowTemplate, VersionSnapshot } from '@principal-ai/principal-view-core';
3
3
  import type { TreeNodeData } from '../TreeNode';
4
- export type { DiscoveredStoryboard, DiscoveredCanvas, DiscoveredWorkflow, WorkflowTemplate };
5
- export type StoryboardWorkflowNodeType = 'package' | 'storyboard' | 'overview' | 'canvas' | 'workflows' | 'workflow';
4
+ export type { DiscoveredStoryboard, DiscoveredCanvas, DiscoveredWorkflow, WorkflowTemplate, VersionSnapshot };
5
+ export type StoryboardWorkflowNodeType = 'version' | 'package' | 'storyboard' | 'overview' | 'canvas' | 'workflows' | 'workflow';
6
+ /**
7
+ * Workflow filter mode
8
+ * - 'all': Show all workflows (default)
9
+ * - 'with-traces': Show only workflows that have traces
10
+ * - 'without-traces': Show only workflows that don't have traces
11
+ */
12
+ export type WorkflowFilterMode = 'all' | 'with-traces' | 'without-traces';
6
13
  export interface StoryboardWorkflowNodeData extends TreeNodeData {
7
14
  type: StoryboardWorkflowNodeType;
8
15
  children?: StoryboardWorkflowNodeData[];
16
+ versionSnapshot?: VersionSnapshot;
9
17
  storyboard?: DiscoveredStoryboard;
10
18
  canvas?: DiscoveredCanvas;
11
19
  workflow?: DiscoveredWorkflow;
@@ -14,6 +22,9 @@ export interface StoryboardWorkflowNodeData extends TreeNodeData {
14
22
  scope?: 'package' | 'root';
15
23
  markdownPath?: string;
16
24
  isFullyCovered?: boolean;
25
+ hasTraces?: boolean;
26
+ repositoryUrl?: string;
27
+ commitSha?: string;
17
28
  }
18
29
  export interface StoryboardWorkflowsTreeProps {
19
30
  storyboards: DiscoveredStoryboard[];
@@ -27,5 +38,8 @@ export interface StoryboardWorkflowsTreeProps {
27
38
  verticalPadding?: string;
28
39
  enableDragAndDrop?: boolean;
29
40
  workflowCoverageMap?: Record<string, boolean>;
41
+ versionSnapshots?: VersionSnapshot[];
42
+ workflowFilterMode?: WorkflowFilterMode;
43
+ traceWorkflowsSet?: Set<string>;
30
44
  }
31
45
  //# sourceMappingURL=types.d.ts.map
@@ -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,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAEtI,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,CAAC;AAE7F,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAErH,MAAM,WAAW,0BAA2B,SAAQ,YAAY;IAC9D,IAAI,EAAE,0BAA0B,CAAC;IACjC,QAAQ,CAAC,EAAE,0BAA0B,EAAE,CAAC;IAGxC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,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;CAC1B;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACpD,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;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/C"}
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,gBAAgB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEvJ,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC;AAE9G,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEjI;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,aAAa,GAAG,gBAAgB,CAAC;AAE1E,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;IAC1B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,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;CACpB;AAED,MAAM,WAAW,4BAA4B;IAC3C,WAAW,EAAE,oBAAoB,EAAE,CAAC;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,IAAI,CAAC;IACpD,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;IAC5B,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAG9C,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACjC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ade/dynamic-file-tree",
3
- "version": "0.1.57",
3
+ "version": "0.1.59",
4
4
  "description": "React component for selective directory filtering and file tree visualization",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -48,7 +48,7 @@
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@principal-ade/industry-theme": ">=0.1.0",
51
- "@principal-ai/principal-view-core": "^0.21.0",
51
+ "@principal-ai/principal-view-core": "^0.22.1",
52
52
  "@principal-ai/repository-abstraction": "^0.5.2",
53
53
  "lucide-react": ">=0.263.0",
54
54
  "react": ">=19.0.0",
@@ -69,10 +69,10 @@
69
69
  }
70
70
  },
71
71
  "devDependencies": {
72
+ "@eslint/js": "^9.32.0",
72
73
  "@principal-ade/industry-theme": "^0.1.0",
73
- "@principal-ai/principal-view-core": "^0.21.0",
74
+ "@principal-ai/principal-view-core": "^0.22.1",
74
75
  "@principal-ai/repository-abstraction": "^0.5.2",
75
- "@eslint/js": "^9.32.0",
76
76
  "@storybook/addon-docs": "^9.1.3",
77
77
  "@storybook/addon-onboarding": "^9.1.3",
78
78
  "@storybook/addon-webpack5-compiler-swc": "^3.0.0",