@principal-ade/dynamic-file-tree 0.1.36 → 0.1.38

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
@@ -18,6 +18,8 @@ export { GitStatusFileTreeContainer } from './src/components/GitStatusFileTreeCo
18
18
  export type { GitStatusFileTreeContainerProps } from './src/components/GitStatusFileTreeContainer';
19
19
  export { MultiFileTree, MultiFileTreeCore } from './src/components/MultiFileTree';
20
20
  export type { MultiFileTreeProps, MultiFileTreeCoreProps } from './src/components/MultiFileTree';
21
+ export { CanvasNarrativeTreeCore } from './src/components/CanvasNarrativeTree/CanvasNarrativeTreeCore';
22
+ export type { CanvasNarrativeTreeCoreProps, CanvasNarrativeNodeData, CanvasNarrativeNodeType, DiscoveredCanvas, NarrativeFile, } from './src/components/CanvasNarrativeTree/types';
21
23
  export { TelemetryCoverageFileTree, calculateTelemetryCoverageStats, } from './src/components/TelemetryCoverageFileTree';
22
24
  export type { TelemetryCoverageFileTreeProps, FileTelemetryCoverage, TelemetryCoverageStatus, } from './src/components/TelemetryCoverageFileTree';
23
25
  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,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,uBAAuB,EAAE,MAAM,8DAA8D,CAAC;AACvG,YAAY,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,aAAa,GACd,MAAM,4CAA4C,CAAC;AAGpD,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
@@ -1859,6 +1859,160 @@ var MultiFileTree = ({
1859
1859
  }
1860
1860
  }, "Selected: ", selectedFile.source.name, " / ", selectedFile.path));
1861
1861
  };
1862
+ // src/components/CanvasNarrativeTree/CanvasNarrativeTreeCore.tsx
1863
+ import { Package, Workflow, Scroll } from "lucide-react";
1864
+ import React11, { useMemo as useMemo9 } from "react";
1865
+ import { Tree as Tree3 } from "react-arborist";
1866
+ var buildTreeData = (canvases, narratives) => {
1867
+ const packagesMap = new Map;
1868
+ const rootCanvases = [];
1869
+ for (const canvas of canvases) {
1870
+ if (canvas.scope === "package" && canvas.packageName) {
1871
+ const existing = packagesMap.get(canvas.packageName) || [];
1872
+ existing.push(canvas);
1873
+ packagesMap.set(canvas.packageName, existing);
1874
+ } else {
1875
+ rootCanvases.push(canvas);
1876
+ }
1877
+ }
1878
+ const canvasToNarratives = new Map;
1879
+ for (const narrative of narratives) {
1880
+ const canvasPath = narrative.template.canvas;
1881
+ if (canvasPath) {
1882
+ for (const canvas of canvases) {
1883
+ if (canvas.path === canvasPath || canvas.path.endsWith(canvasPath)) {
1884
+ const existing = canvasToNarratives.get(canvas.id) || [];
1885
+ existing.push(narrative);
1886
+ canvasToNarratives.set(canvas.id, existing);
1887
+ break;
1888
+ }
1889
+ }
1890
+ }
1891
+ }
1892
+ const buildCanvasNode = (canvas) => {
1893
+ const narrativesForCanvas = canvasToNarratives.get(canvas.id) || [];
1894
+ const narrativeNodes = narrativesForCanvas.map(({ file, template }) => ({
1895
+ id: `narrative:${file.id}`,
1896
+ name: file.name,
1897
+ type: "narrative",
1898
+ narrative: file,
1899
+ narrativeTemplate: template,
1900
+ canvas
1901
+ })).sort((a, b) => a.name.localeCompare(b.name));
1902
+ return {
1903
+ id: `canvas:${canvas.id}`,
1904
+ name: canvas.name,
1905
+ type: "canvas",
1906
+ canvas,
1907
+ children: narrativeNodes.length > 0 ? narrativeNodes : undefined
1908
+ };
1909
+ };
1910
+ const hasMultiplePackages = packagesMap.size > 1;
1911
+ const hasRootAndPackages = packagesMap.size > 0 && rootCanvases.length > 0;
1912
+ const shouldShowPackageLevel = hasMultiplePackages || hasRootAndPackages;
1913
+ if (shouldShowPackageLevel) {
1914
+ const result = [];
1915
+ for (const [packageName, packageCanvases] of packagesMap) {
1916
+ const canvasNodes = packageCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
1917
+ result.push({
1918
+ id: `package:${packageName}`,
1919
+ name: packageName,
1920
+ type: "package",
1921
+ packageName,
1922
+ scope: "package",
1923
+ children: canvasNodes
1924
+ });
1925
+ }
1926
+ if (rootCanvases.length > 0) {
1927
+ const rootCanvasNodes = rootCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
1928
+ result.push({
1929
+ id: "package:root",
1930
+ name: "Root",
1931
+ type: "package",
1932
+ packageName: "root",
1933
+ scope: "root",
1934
+ children: rootCanvasNodes
1935
+ });
1936
+ }
1937
+ return result.sort((a, b) => {
1938
+ if (a.packageName === "root")
1939
+ return 1;
1940
+ if (b.packageName === "root")
1941
+ return -1;
1942
+ return a.name.localeCompare(b.name);
1943
+ });
1944
+ } else {
1945
+ const allCanvases = [...rootCanvases];
1946
+ for (const packageCanvases of packagesMap.values()) {
1947
+ allCanvases.push(...packageCanvases);
1948
+ }
1949
+ return allCanvases.map(buildCanvasNode).sort((a, b) => a.name.localeCompare(b.name));
1950
+ }
1951
+ };
1952
+ var CanvasNarrativeTreeCore = ({
1953
+ canvases,
1954
+ narratives,
1955
+ theme,
1956
+ onClick,
1957
+ selectedNodeId,
1958
+ defaultOpen = false,
1959
+ initialOpenState,
1960
+ horizontalNodePadding = "8px",
1961
+ verticalNodePadding = "3px",
1962
+ verticalPadding
1963
+ }) => {
1964
+ const treeData = useMemo9(() => buildTreeData(canvases, narratives), [canvases, narratives]);
1965
+ const NodeRenderer = (props) => {
1966
+ const { node } = props;
1967
+ const data = node.data;
1968
+ const icon = data.type === "package" ? /* @__PURE__ */ React11.createElement(Package, {
1969
+ size: 16
1970
+ }) : data.type === "canvas" ? /* @__PURE__ */ React11.createElement(Workflow, {
1971
+ size: 16
1972
+ }) : /* @__PURE__ */ React11.createElement(Scroll, {
1973
+ size: 16
1974
+ });
1975
+ const nameColor = data.type === "package" ? theme.colors.primary : data.type === "canvas" ? theme.colors.success : theme.colors.textSecondary;
1976
+ return /* @__PURE__ */ React11.createElement(TreeNode, {
1977
+ ...props,
1978
+ theme,
1979
+ nameColor,
1980
+ rightContent: icon,
1981
+ horizontalNodePadding,
1982
+ verticalNodePadding
1983
+ });
1984
+ };
1985
+ const handleSelect = (selectedNodes) => {
1986
+ if (selectedNodes.length === 0)
1987
+ return;
1988
+ const node = selectedNodes[0];
1989
+ const nodeData = node.data;
1990
+ if (nodeData.type === "canvas" || nodeData.type === "narrative") {
1991
+ onClick(nodeData);
1992
+ }
1993
+ };
1994
+ const initialHeight = 600;
1995
+ const [containerRef, containerHeight] = useContainerHeight(initialHeight);
1996
+ return /* @__PURE__ */ React11.createElement("div", {
1997
+ ref: containerRef,
1998
+ style: {
1999
+ backgroundColor: theme.colors.background,
2000
+ color: theme.colors.text,
2001
+ fontFamily: theme.fonts.body,
2002
+ height: "100%",
2003
+ ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2004
+ }
2005
+ }, /* @__PURE__ */ React11.createElement(Tree3, {
2006
+ initialData: treeData,
2007
+ onSelect: handleSelect,
2008
+ openByDefault: defaultOpen,
2009
+ ...initialOpenState !== undefined && { initialOpenState },
2010
+ ...selectedNodeId !== undefined && { selection: selectedNodeId },
2011
+ width: "100%",
2012
+ height: containerHeight,
2013
+ rowHeight: 28
2014
+ }, NodeRenderer));
2015
+ };
1862
2016
  // src/components/TelemetryCoverageFileTree.tsx
1863
2017
  import {
1864
2018
  Activity,
@@ -1866,9 +2020,9 @@ import {
1866
2020
  Circle,
1867
2021
  TestTube
1868
2022
  } from "lucide-react";
1869
- import React11, { useMemo as useMemo9 } from "react";
1870
- import { Tree as Tree3 } from "react-arborist";
1871
- var TelemetryCoverageContext = React11.createContext(null);
2023
+ import React12, { useMemo as useMemo10 } from "react";
2024
+ import { Tree as Tree4 } from "react-arborist";
2025
+ var TelemetryCoverageContext = React12.createContext(null);
1872
2026
  var DEFAULT_TEST_PATTERNS = [
1873
2027
  /\.test\.[jt]sx?$/,
1874
2028
  /\.spec\.[jt]sx?$/,
@@ -1885,7 +2039,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
1885
2039
  switch (status) {
1886
2040
  case "covered":
1887
2041
  return {
1888
- icon: /* @__PURE__ */ React11.createElement(Activity, {
2042
+ icon: /* @__PURE__ */ React12.createElement(Activity, {
1889
2043
  size: 14
1890
2044
  }),
1891
2045
  color: "#22c55e",
@@ -1894,7 +2048,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
1894
2048
  };
1895
2049
  case "partial":
1896
2050
  return {
1897
- icon: /* @__PURE__ */ React11.createElement(CircleDot, {
2051
+ icon: /* @__PURE__ */ React12.createElement(CircleDot, {
1898
2052
  size: 14
1899
2053
  }),
1900
2054
  color: "#eab308",
@@ -1903,7 +2057,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
1903
2057
  };
1904
2058
  case "none":
1905
2059
  return {
1906
- icon: /* @__PURE__ */ React11.createElement(Circle, {
2060
+ icon: /* @__PURE__ */ React12.createElement(Circle, {
1907
2061
  size: 14
1908
2062
  }),
1909
2063
  color: "#6b7280",
@@ -2005,7 +2159,7 @@ var TelemetryCoverageFileTree = ({
2005
2159
  enableDragAndDrop = false
2006
2160
  }) => {
2007
2161
  const dndProps = getDndProps(enableDragAndDrop);
2008
- const coverageMap = useMemo9(() => {
2162
+ const coverageMap = useMemo10(() => {
2009
2163
  const map = new Map;
2010
2164
  coverageData.forEach((item) => {
2011
2165
  map.set(item.filePath, item);
@@ -2014,7 +2168,7 @@ var TelemetryCoverageFileTree = ({
2014
2168
  }, [coverageData]);
2015
2169
  const NodeRenderer = (props) => {
2016
2170
  const { node } = props;
2017
- const ctx = React11.useContext(TelemetryCoverageContext);
2171
+ const ctx = React12.useContext(TelemetryCoverageContext);
2018
2172
  const coverage = ctx?.coverageMap.get(node.data.id);
2019
2173
  const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
2020
2174
  const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
@@ -2026,11 +2180,11 @@ var TelemetryCoverageFileTree = ({
2026
2180
  } else if (node.data.isTestFile) {
2027
2181
  nameColor = "#6b728080";
2028
2182
  }
2029
- const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React11.createElement(TestTube, {
2183
+ const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React12.createElement(TestTube, {
2030
2184
  size: 14,
2031
2185
  style: { marginRight: 4, color: "#6b7280" }
2032
2186
  }) : null;
2033
- const rightContent = coverageDisplay ? /* @__PURE__ */ React11.createElement("div", {
2187
+ const rightContent = coverageDisplay ? /* @__PURE__ */ React12.createElement("div", {
2034
2188
  style: {
2035
2189
  display: "flex",
2036
2190
  alignItems: "center",
@@ -2038,14 +2192,14 @@ var TelemetryCoverageFileTree = ({
2038
2192
  marginRight: "8px"
2039
2193
  },
2040
2194
  title: coverageDisplay.label
2041
- }, coverageDisplay.icon, /* @__PURE__ */ React11.createElement("span", {
2195
+ }, coverageDisplay.icon, /* @__PURE__ */ React12.createElement("span", {
2042
2196
  style: {
2043
2197
  marginLeft: "4px",
2044
2198
  fontSize: "11px",
2045
2199
  fontWeight: "bold",
2046
2200
  fontFamily: "monospace"
2047
2201
  }
2048
- }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React11.createElement("div", {
2202
+ }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React12.createElement("div", {
2049
2203
  style: {
2050
2204
  display: "flex",
2051
2205
  alignItems: "center",
@@ -2054,10 +2208,10 @@ var TelemetryCoverageFileTree = ({
2054
2208
  opacity: 0.5
2055
2209
  },
2056
2210
  title: "No telemetry instrumentation"
2057
- }, /* @__PURE__ */ React11.createElement(Circle, {
2211
+ }, /* @__PURE__ */ React12.createElement(Circle, {
2058
2212
  size: 14
2059
2213
  })) : null;
2060
- return /* @__PURE__ */ React11.createElement(TreeNode, {
2214
+ return /* @__PURE__ */ React12.createElement(TreeNode, {
2061
2215
  ...props,
2062
2216
  theme,
2063
2217
  rightContent,
@@ -2072,16 +2226,16 @@ var TelemetryCoverageFileTree = ({
2072
2226
  }
2073
2227
  });
2074
2228
  };
2075
- const treeStructure = useMemo9(() => {
2229
+ const treeStructure = useMemo10(() => {
2076
2230
  return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
2077
2231
  }, [fileTree, showOnlyTestFiles, testFilePatterns]);
2078
- const treeData = useMemo9(() => {
2232
+ const treeData = useMemo10(() => {
2079
2233
  if (showUncoveredFiles) {
2080
2234
  return treeStructure;
2081
2235
  }
2082
2236
  return filterCoveredNodes(treeStructure, coverageMap);
2083
2237
  }, [treeStructure, showUncoveredFiles, coverageMap]);
2084
- const hasTracedChildrenMap = useMemo9(() => {
2238
+ const hasTracedChildrenMap = useMemo10(() => {
2085
2239
  const map = new Map;
2086
2240
  const markTracedParents = (nodes) => {
2087
2241
  let hasTraced = false;
@@ -2113,7 +2267,7 @@ var TelemetryCoverageFileTree = ({
2113
2267
  onDirectorySelect(selectedDirs);
2114
2268
  }
2115
2269
  };
2116
- const calculatedHeight = useMemo9(() => {
2270
+ const calculatedHeight = useMemo10(() => {
2117
2271
  if (autoHeight) {
2118
2272
  const visibleNodeCount = countVisibleNodes3(treeData, openByDefault);
2119
2273
  return visibleNodeCount * 28;
@@ -2121,7 +2275,7 @@ var TelemetryCoverageFileTree = ({
2121
2275
  return initialHeight;
2122
2276
  }, [autoHeight, treeData, openByDefault, initialHeight]);
2123
2277
  const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
2124
- return /* @__PURE__ */ React11.createElement("div", {
2278
+ return /* @__PURE__ */ React12.createElement("div", {
2125
2279
  ref: containerRef,
2126
2280
  style: {
2127
2281
  backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
@@ -2130,9 +2284,9 @@ var TelemetryCoverageFileTree = ({
2130
2284
  ...autoHeight ? {} : { height: "100%" },
2131
2285
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
2132
2286
  }
2133
- }, /* @__PURE__ */ React11.createElement(TelemetryCoverageContext.Provider, {
2287
+ }, /* @__PURE__ */ React12.createElement(TelemetryCoverageContext.Provider, {
2134
2288
  value: { coverageMap, hasTracedChildrenMap }
2135
- }, /* @__PURE__ */ React11.createElement(Tree3, {
2289
+ }, /* @__PURE__ */ React12.createElement(Tree4, {
2136
2290
  data: treeData,
2137
2291
  onSelect: handleSelect,
2138
2292
  ...selectedFile !== undefined && { selection: selectedFile },
@@ -2161,7 +2315,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
2161
2315
  };
2162
2316
  // src/components/TelemetryCoverageFileTreeContainer.tsx
2163
2317
  import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle4, Activity as Activity2 } from "lucide-react";
2164
- import React12, { useState as useState7, useMemo as useMemo10 } from "react";
2318
+ import React13, { useState as useState7, useMemo as useMemo11 } from "react";
2165
2319
  var TelemetryCoverageFileTreeContainer = ({
2166
2320
  fileTree,
2167
2321
  theme,
@@ -2183,10 +2337,10 @@ var TelemetryCoverageFileTreeContainer = ({
2183
2337
  }) => {
2184
2338
  const [filters, setFilters] = useState7([]);
2185
2339
  const [showUncoveredFiles, setShowUncoveredFiles] = useState7(true);
2186
- const selectedDirectories = useMemo10(() => {
2340
+ const selectedDirectories = useMemo11(() => {
2187
2341
  return filters.filter((f) => f.mode === "include").map((f) => f.path);
2188
2342
  }, [filters]);
2189
- const stats = useMemo10(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
2343
+ const stats = useMemo11(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
2190
2344
  const handleRefresh = () => {
2191
2345
  onRefresh?.();
2192
2346
  };
@@ -2194,34 +2348,34 @@ var TelemetryCoverageFileTreeContainer = ({
2194
2348
  setShowUncoveredFiles(!showUncoveredFiles);
2195
2349
  };
2196
2350
  const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
2197
- return /* @__PURE__ */ React12.createElement("div", {
2351
+ return /* @__PURE__ */ React13.createElement("div", {
2198
2352
  style: { display: "flex", flexDirection: "column", height: "100%" }
2199
- }, showControls && /* @__PURE__ */ React12.createElement("div", {
2353
+ }, showControls && /* @__PURE__ */ React13.createElement("div", {
2200
2354
  style: {
2201
2355
  padding: "12px",
2202
2356
  borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
2203
2357
  backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
2204
2358
  }
2205
- }, /* @__PURE__ */ React12.createElement("div", {
2359
+ }, /* @__PURE__ */ React13.createElement("div", {
2206
2360
  style: {
2207
2361
  display: "flex",
2208
2362
  alignItems: "center",
2209
2363
  justifyContent: "space-between",
2210
2364
  marginBottom: "8px"
2211
2365
  }
2212
- }, /* @__PURE__ */ React12.createElement("div", {
2366
+ }, /* @__PURE__ */ React13.createElement("div", {
2213
2367
  style: { display: "flex", alignItems: "center", gap: "8px" }
2214
- }, /* @__PURE__ */ React12.createElement(Activity2, {
2368
+ }, /* @__PURE__ */ React13.createElement(Activity2, {
2215
2369
  size: 16,
2216
2370
  color: theme.colors.primary
2217
- }), /* @__PURE__ */ React12.createElement("h3", {
2371
+ }), /* @__PURE__ */ React13.createElement("h3", {
2218
2372
  style: {
2219
2373
  margin: 0,
2220
2374
  fontSize: "14px",
2221
2375
  fontWeight: "bold",
2222
2376
  color: theme.colors.text
2223
2377
  }
2224
- }, title), stats.testFiles > 0 && /* @__PURE__ */ React12.createElement("span", {
2378
+ }, title), stats.testFiles > 0 && /* @__PURE__ */ React13.createElement("span", {
2225
2379
  style: {
2226
2380
  backgroundColor: percentageColor,
2227
2381
  color: "#ffffff",
@@ -2231,14 +2385,14 @@ var TelemetryCoverageFileTreeContainer = ({
2231
2385
  fontWeight: "bold",
2232
2386
  fontFamily: "monospace"
2233
2387
  }
2234
- }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React12.createElement(RefreshCw2, {
2388
+ }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React13.createElement(RefreshCw2, {
2235
2389
  size: 16,
2236
2390
  color: theme.colors.text,
2237
2391
  className: "telemetry-coverage-spinner",
2238
2392
  style: { animation: "spin 1s linear infinite" }
2239
- })), /* @__PURE__ */ React12.createElement("div", {
2393
+ })), /* @__PURE__ */ React13.createElement("div", {
2240
2394
  style: { display: "flex", gap: "8px" }
2241
- }, /* @__PURE__ */ React12.createElement("button", {
2395
+ }, /* @__PURE__ */ React13.createElement("button", {
2242
2396
  onClick: toggleShowUncoveredFiles,
2243
2397
  style: {
2244
2398
  background: "none",
@@ -2253,11 +2407,11 @@ var TelemetryCoverageFileTreeContainer = ({
2253
2407
  color: theme.colors.text
2254
2408
  },
2255
2409
  title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
2256
- }, showUncoveredFiles ? /* @__PURE__ */ React12.createElement(EyeOff2, {
2410
+ }, showUncoveredFiles ? /* @__PURE__ */ React13.createElement(EyeOff2, {
2257
2411
  size: 14
2258
- }) : /* @__PURE__ */ React12.createElement(Eye2, {
2412
+ }) : /* @__PURE__ */ React13.createElement(Eye2, {
2259
2413
  size: 14
2260
- }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React12.createElement("button", {
2414
+ }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React13.createElement("button", {
2261
2415
  onClick: handleRefresh,
2262
2416
  disabled: isLoading,
2263
2417
  style: {
@@ -2274,9 +2428,9 @@ var TelemetryCoverageFileTreeContainer = ({
2274
2428
  opacity: isLoading ? 0.6 : 1
2275
2429
  },
2276
2430
  title: "Refresh coverage data"
2277
- }, /* @__PURE__ */ React12.createElement(RefreshCw2, {
2431
+ }, /* @__PURE__ */ React13.createElement(RefreshCw2, {
2278
2432
  size: 14
2279
- }), "Refresh"))), error && /* @__PURE__ */ React12.createElement("div", {
2433
+ }), "Refresh"))), error && /* @__PURE__ */ React13.createElement("div", {
2280
2434
  style: {
2281
2435
  display: "flex",
2282
2436
  alignItems: "center",
@@ -2289,36 +2443,36 @@ var TelemetryCoverageFileTreeContainer = ({
2289
2443
  color: "#856404",
2290
2444
  marginBottom: "8px"
2291
2445
  }
2292
- }, /* @__PURE__ */ React12.createElement(AlertCircle4, {
2446
+ }, /* @__PURE__ */ React13.createElement(AlertCircle4, {
2293
2447
  size: 14
2294
- }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React12.createElement("div", {
2448
+ }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React13.createElement("div", {
2295
2449
  style: {
2296
2450
  display: "flex",
2297
2451
  gap: "16px",
2298
2452
  fontSize: "12px",
2299
2453
  color: theme.colors.textSecondary || "#666"
2300
2454
  }
2301
- }, /* @__PURE__ */ React12.createElement("span", null, /* @__PURE__ */ React12.createElement("strong", {
2455
+ }, /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2302
2456
  style: { color: "#22c55e" }
2303
- }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React12.createElement("span", null, /* @__PURE__ */ React12.createElement("strong", {
2457
+ }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2304
2458
  style: { color: "#eab308" }
2305
- }, stats.partialFiles), " partial"), /* @__PURE__ */ React12.createElement("span", null, /* @__PURE__ */ React12.createElement("strong", {
2459
+ }, stats.partialFiles), " partial"), /* @__PURE__ */ React13.createElement("span", null, /* @__PURE__ */ React13.createElement("strong", {
2306
2460
  style: { color: "#6b7280" }
2307
- }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React12.createElement("span", {
2461
+ }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React13.createElement("span", {
2308
2462
  style: { marginLeft: "auto" }
2309
- }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React12.createElement("div", {
2463
+ }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React13.createElement("div", {
2310
2464
  style: {
2311
2465
  fontSize: "12px",
2312
2466
  color: theme.colors.textSecondary || "#666"
2313
2467
  }
2314
- }, "No test files with coverage data found")), /* @__PURE__ */ React12.createElement(DirectoryFilterInput, {
2468
+ }, "No test files with coverage data found")), /* @__PURE__ */ React13.createElement(DirectoryFilterInput, {
2315
2469
  fileTree,
2316
2470
  theme,
2317
2471
  filters,
2318
2472
  onFiltersChange: setFilters
2319
- }), /* @__PURE__ */ React12.createElement("div", {
2473
+ }), /* @__PURE__ */ React13.createElement("div", {
2320
2474
  style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
2321
- }, /* @__PURE__ */ React12.createElement(TelemetryCoverageFileTree, {
2475
+ }, /* @__PURE__ */ React13.createElement(TelemetryCoverageFileTree, {
2322
2476
  fileTree,
2323
2477
  theme,
2324
2478
  coverageData,
@@ -2355,5 +2509,6 @@ export {
2355
2509
  GitOrderedFileList,
2356
2510
  FileTreeContainer,
2357
2511
  DynamicFileTree,
2358
- DirectoryFilterInput
2512
+ DirectoryFilterInput,
2513
+ CanvasNarrativeTreeCore
2359
2514
  };
@@ -0,0 +1,20 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { CanvasNarrativeTreeCore } from './CanvasNarrativeTreeCore';
3
+ declare const meta: Meta<typeof CanvasNarrativeTreeCore>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CanvasNarrativeTreeCore>;
6
+ export declare const Default: Story;
7
+ export declare const SinglePackage: Story;
8
+ export declare const RootCanvasOnly: Story;
9
+ export declare const NoNarratives: Story;
10
+ export declare const CollapsedByDefault: Story;
11
+ export declare const WithSelection: Story;
12
+ export declare const RegalTheme: Story;
13
+ export declare const TerminalTheme: Story;
14
+ export declare const MatrixTheme: Story;
15
+ export declare const MatrixMinimalTheme: Story;
16
+ export declare const SlateTheme: Story;
17
+ export declare const InteractiveDemo: Story;
18
+ export declare const ThemeComparison: Story;
19
+ export declare const CustomPadding: Story;
20
+ //# sourceMappingURL=CanvasNarrativeTree.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasNarrativeTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasNarrativeTree/CanvasNarrativeTree.stories.tsx"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAgMpE,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,uBAAuB,CAO9C,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAEtD,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAQ5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAQ1B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAQhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAS3B,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAQ3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAQzB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAQhC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAQxB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA6D7B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KA2D7B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAW3B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import type { CanvasNarrativeTreeCoreProps } from './types';
3
+ export declare const CanvasNarrativeTreeCore: React.FC<CanvasNarrativeTreeCoreProps>;
4
+ //# sourceMappingURL=CanvasNarrativeTreeCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CanvasNarrativeTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasNarrativeTree/CanvasNarrativeTreeCore.tsx"],"names":[],"mappings":"AACA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EAEV,4BAA4B,EAG7B,MAAM,SAAS,CAAC;AA2HjB,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA+F1E,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { Theme } from '@principal-ade/industry-theme';
2
+ import type { DiscoveredCanvas, NarrativeTemplate } from '@principal-ai/principal-view-core/browser';
3
+ import type { TreeNodeData } from '../TreeNode';
4
+ export interface NarrativeFile {
5
+ id: string;
6
+ name: string;
7
+ path: string;
8
+ packageName?: string;
9
+ canvasPath?: string;
10
+ }
11
+ export type { DiscoveredCanvas, NarrativeTemplate };
12
+ export type CanvasNarrativeNodeType = 'package' | 'canvas' | 'narrative';
13
+ export interface CanvasNarrativeNodeData extends TreeNodeData {
14
+ type: CanvasNarrativeNodeType;
15
+ children?: CanvasNarrativeNodeData[];
16
+ canvas?: DiscoveredCanvas;
17
+ narrative?: NarrativeFile;
18
+ narrativeTemplate?: NarrativeTemplate;
19
+ packageName?: string;
20
+ scope?: 'package' | 'root';
21
+ }
22
+ export interface CanvasNarrativeTreeCoreProps {
23
+ canvases: DiscoveredCanvas[];
24
+ narratives: Array<{
25
+ file: NarrativeFile;
26
+ template: NarrativeTemplate;
27
+ }>;
28
+ theme: Theme;
29
+ onClick: (node: CanvasNarrativeNodeData) => void;
30
+ selectedNodeId?: string;
31
+ defaultOpen?: boolean;
32
+ initialOpenState?: Record<string, boolean>;
33
+ horizontalNodePadding?: string;
34
+ verticalNodePadding?: string;
35
+ verticalPadding?: string;
36
+ }
37
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/CanvasNarrativeTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,2CAA2C,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;AAEpD,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEzE,MAAM,WAAW,uBAAwB,SAAQ,YAAY;IAC3D,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAGrC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,aAAa,CAAC;QAAC,QAAQ,EAAE,iBAAiB,CAAA;KAAE,CAAC,CAAC;IACxE,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACjD,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;CAC1B"}
@@ -20,4 +20,5 @@ export declare const MatrixTheme: Story;
20
20
  export declare const MatrixMinimalTheme: Story;
21
21
  export declare const SlateTheme: Story;
22
22
  export declare const RapidStatusChanges: Story;
23
+ export declare const MultipleInstances: Story;
23
24
  //# sourceMappingURL=GitStatusFileTree.stories.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GitStatusFileTree.stories.d.ts","sourceRoot":"","sources":["../../../src/components/GitStatusFileTree.stories.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,qBAAqB,CAAC;AA8OlF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CASxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhD,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KA2BzB,CAAC;AAoDF,eAAO,MAAM,cAAc,EAAE,KAe5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAe5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,KAyB7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,KAwD7B,CAAC;AAIF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAe3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAezB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAehC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAqGF,eAAO,MAAM,kBAAkB,EAAE,KAuBhC,CAAC"}
1
+ {"version":3,"file":"GitStatusFileTree.stories.d.ts","sourceRoot":"","sources":["../../../src/components/GitStatusFileTree.stories.tsx"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAA4B,MAAM,qBAAqB,CAAC;AA8OlF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,iBAAiB,CASxC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEhD,eAAO,MAAM,OAAO,EAAE,KAOrB,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,KAO9B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAOvB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KA2BzB,CAAC;AAoDF,eAAO,MAAM,cAAc,EAAE,KAe5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,KAe5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAe7B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAe1B,CAAC;AAKF,eAAO,MAAM,eAAe,EAAE,KAyB7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,KAwD7B,CAAC;AAIF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAe3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAezB,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAehC,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAexB,CAAC;AAqGF,eAAO,MAAM,kBAAkB,EAAE,KAuBhC,CAAC;AAwHF,eAAO,MAAM,iBAAiB,EAAE,KAoC/B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ade/dynamic-file-tree",
3
- "version": "0.1.36",
3
+ "version": "0.1.38",
4
4
  "description": "React component for selective directory filtering and file tree visualization",
5
5
  "type": "module",
6
6
  "main": "dist/index.mjs",
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "scripts": {
19
19
  "build": "bun run clean && bun run build:esm && bun run build:types",
20
- "build:esm": "bun build ./index.ts --outfile ./dist/index.mjs --format esm --target browser --external react --external react-dom --external lucide-react --external react-arborist --external @principal-ade/industry-theme --external @principal-ai/repository-abstraction",
20
+ "build:esm": "bun build ./index.ts --outfile ./dist/index.mjs --format esm --target browser --external react --external react-dom --external lucide-react --external react-arborist --external @principal-ade/industry-theme --external @principal-ai/repository-abstraction --external @principal-ai/principal-view-core",
21
21
  "build:types": "tsc --emitDeclarationOnly --declaration --declarationMap",
22
22
  "dev": "bun run build --watch",
23
23
  "test": "bun test",
@@ -48,6 +48,7 @@
48
48
  },
49
49
  "peerDependencies": {
50
50
  "@principal-ade/industry-theme": ">=0.1.0",
51
+ "@principal-ai/principal-view-core": "^0.11.7",
51
52
  "@principal-ai/repository-abstraction": "^0.2.3",
52
53
  "lucide-react": ">=0.263.0",
53
54
  "react": ">=19.0.0",