@principal-ade/dynamic-file-tree 0.1.71 → 0.1.73

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
@@ -25,6 +25,8 @@ export { WorkflowScenarioTreeCore } from './src/components/WorkflowScenarioTree'
25
25
  export type { WorkflowScenarioTreeProps, WorkflowScenarioNodeData, WorkflowScenarioNodeType, WorkflowWithScenarios, WorkflowFilterMode, } from './src/components/WorkflowScenarioTree';
26
26
  export { CanvasListTreeCore } from './src/components/CanvasListTree/CanvasListTreeCore';
27
27
  export type { CanvasListTreeProps, CanvasListNodeData, CanvasListNodeType, DiscoveredCanvas, } from './src/components/CanvasListTree/types';
28
+ export { RepositoryTreeCore } from './src/components/RepositoryTree';
29
+ export type { RepositoryTreeProps, RepositoryNodeData, RepositoryNodeType, } from './src/components/RepositoryTree';
28
30
  export { TelemetryCoverageFileTree, calculateTelemetryCoverageStats, } from './src/components/TelemetryCoverageFileTree';
29
31
  export type { TelemetryCoverageFileTreeProps, FileTelemetryCoverage, TelemetryCoverageStatus, } from './src/components/TelemetryCoverageFileTree';
30
32
  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,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAG7E,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,YAAY,EAAE,oBAAoB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kCAAkC,CAAC;AAGhG,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AAGnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAGjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,YAAY,EACV,sBAAsB,EACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,YAAY,EAAE,+BAA+B,EAAE,MAAM,6CAA6C,CAAC;AAGnG,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAClF,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAGjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,sEAAsE,CAAC;AACnH,YAAY,EACV,4BAA4B,EAC5B,0BAA0B,EAC1B,0BAA0B,EAC1B,oBAAoB,EACpB,oBAAoB,EACpB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,gDAAgD,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAGpF,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,YAAY,EACV,yBAAyB,EACzB,wBAAwB,EACxB,wBAAwB,EACxB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oDAAoD,CAAC;AACxF,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uCAAuC,CAAC;AAG/C,OAAO,EACL,yBAAyB,EACzB,+BAA+B,GAChC,MAAM,4CAA4C,CAAC;AACpD,YAAY,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EAAE,kCAAkC,EAAE,MAAM,qDAAqD,CAAC;AACzG,YAAY,EAAE,uCAAuC,EAAE,MAAM,qDAAqD,CAAC;AAGnH,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAG7E,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,GACjB,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -2226,7 +2226,7 @@ var getDefaultDragConfig = (node) => {
2226
2226
  const canvasType = node.canvas.type === "otel" ? "OTEL Canvas" : "Canvas";
2227
2227
  const content = [
2228
2228
  `# ${canvasType}: ${node.canvas.name}`,
2229
- `# View with: ${CLI} canvas view "${node.canvas.path}"`,
2229
+ `# For more information: ${CLI}`,
2230
2230
  node.canvas.path
2231
2231
  ].join(`
2232
2232
  `);
@@ -2250,7 +2250,7 @@ var getDefaultDragConfig = (node) => {
2250
2250
  if (node.workflow) {
2251
2251
  const content = [
2252
2252
  `# Workflow: ${node.workflow.name}`,
2253
- `# Run with: ${CLI} workflow run "${node.workflow.path}"`,
2253
+ `# For more information: ${CLI}`,
2254
2254
  node.workflow.path
2255
2255
  ].join(`
2256
2256
  `);
@@ -2274,7 +2274,7 @@ var getDefaultDragConfig = (node) => {
2274
2274
  if (node.markdownPath) {
2275
2275
  const content = [
2276
2276
  `# Overview: ${node.storyboard?.name || node.name}`,
2277
- `# Documentation: ${node.markdownPath}`,
2277
+ `# For more information: ${CLI}`,
2278
2278
  node.markdownPath
2279
2279
  ].join(`
2280
2280
  `);
@@ -2298,7 +2298,7 @@ var getDefaultDragConfig = (node) => {
2298
2298
  const content = [
2299
2299
  `# Storyboard: ${node.storyboard.name}`,
2300
2300
  `# Contains ${node.storyboard.workflows.length} workflow(s)`,
2301
- `# Info: ${CLI} storyboard info "${node.storyboard.path}"`,
2301
+ `# For more information: ${CLI}`,
2302
2302
  node.storyboard.path
2303
2303
  ].join(`
2304
2304
  `);
@@ -2810,7 +2810,7 @@ var getDefaultCanvasDragConfig = (node) => {
2810
2810
  const canvasType = node.canvas.type === "otel" ? "OTEL Canvas" : "Canvas";
2811
2811
  const content = [
2812
2812
  `# ${canvasType}: ${node.canvas.name}`,
2813
- `# View with: ${CLI} canvas view "${node.canvas.path}"`,
2813
+ `# For more information: ${CLI}`,
2814
2814
  node.canvas.path
2815
2815
  ].join(`
2816
2816
  `);
@@ -2833,7 +2833,7 @@ var getDefaultCanvasDragConfig = (node) => {
2833
2833
  if (node.markdownPath) {
2834
2834
  const content = [
2835
2835
  `# Overview: ${node.canvas?.name || node.name}`,
2836
- `# Documentation: ${node.markdownPath}`,
2836
+ `# For more information: ${CLI}`,
2837
2837
  node.markdownPath
2838
2838
  ].join(`
2839
2839
  `);
@@ -2857,7 +2857,7 @@ var getDefaultCanvasDragConfig = (node) => {
2857
2857
  const folderPath = node.canvas.path.replace(/\/[^/]+$/, "");
2858
2858
  const content = [
2859
2859
  `# Canvas Folder: ${node.canvas.name}`,
2860
- `# Info: ${CLI} canvas info "${node.canvas.path}"`,
2860
+ `# For more information: ${CLI}`,
2861
2861
  folderPath
2862
2862
  ].join(`
2863
2863
  `);
@@ -2983,6 +2983,177 @@ var CanvasListTreeCore = ({
2983
2983
  ...dndProps
2984
2984
  }, NodeRenderer));
2985
2985
  };
2986
+ // src/components/RepositoryTree/RepositoryTreeCore.tsx
2987
+ import { Folder as Folder2, FolderGit2 } from "lucide-react";
2988
+ import React15, { useMemo as useMemo12 } from "react";
2989
+ import { Tree as Tree6 } from "react-arborist";
2990
+ var buildRepositoryTree = (repositories) => {
2991
+ if (repositories.length === 0)
2992
+ return [];
2993
+ const paths = repositories.map((r) => r.path);
2994
+ const commonPrefix = findCommonPrefix(paths);
2995
+ return buildTreeFromRepos(repositories, commonPrefix);
2996
+ };
2997
+ var findCommonPrefix = (paths) => {
2998
+ if (paths.length === 0)
2999
+ return "";
3000
+ if (paths.length === 1) {
3001
+ const parts = paths[0].split("/");
3002
+ parts.pop();
3003
+ return parts.join("/") + "/";
3004
+ }
3005
+ const splitPaths = paths.map((p) => p.split("/"));
3006
+ const minLength = Math.min(...splitPaths.map((p) => p.length));
3007
+ const commonParts = [];
3008
+ for (let i = 0;i < minLength - 1; i++) {
3009
+ const segment = splitPaths[0][i];
3010
+ if (splitPaths.every((p) => p[i] === segment)) {
3011
+ commonParts.push(segment);
3012
+ } else {
3013
+ break;
3014
+ }
3015
+ }
3016
+ return commonParts.length > 0 ? commonParts.join("/") + "/" : "";
3017
+ };
3018
+ var buildTreeFromRepos = (repositories, commonPrefix) => {
3019
+ const tree = {};
3020
+ for (const repo of repositories) {
3021
+ const relativePath = repo.path.startsWith(commonPrefix) ? repo.path.slice(commonPrefix.length) : repo.path;
3022
+ const segments = relativePath.split("/").filter(Boolean);
3023
+ let current = tree;
3024
+ for (let i = 0;i < segments.length - 1; i++) {
3025
+ const segment = segments[i];
3026
+ if (!current[segment] || current[segment] instanceof Object && "path" in current[segment]) {
3027
+ current[segment] = {};
3028
+ }
3029
+ current = current[segment];
3030
+ }
3031
+ const repoName = segments[segments.length - 1] || repo.name;
3032
+ current[repoName] = repo;
3033
+ }
3034
+ const convertToNodes = (obj, pathPrefix) => {
3035
+ const nodes = [];
3036
+ for (const [name, value] of Object.entries(obj)) {
3037
+ const currentPath = pathPrefix ? `${pathPrefix}/${name}` : name;
3038
+ if ("path" in value && "name" in value) {
3039
+ nodes.push({
3040
+ id: `repo:${value.path}`,
3041
+ name,
3042
+ type: "repository",
3043
+ entry: value
3044
+ });
3045
+ } else {
3046
+ const children = convertToNodes(value, currentPath);
3047
+ const repoCount = countRepositories(children);
3048
+ nodes.push({
3049
+ id: `dir:${currentPath}`,
3050
+ name,
3051
+ type: "directory",
3052
+ children,
3053
+ repositoryCount: repoCount
3054
+ });
3055
+ }
3056
+ }
3057
+ return nodes.sort((a, b) => {
3058
+ if (a.type === "directory" && b.type !== "directory")
3059
+ return -1;
3060
+ if (a.type !== "directory" && b.type === "directory")
3061
+ return 1;
3062
+ return a.name.localeCompare(b.name, undefined, { sensitivity: "base" });
3063
+ });
3064
+ };
3065
+ return convertToNodes(tree, "");
3066
+ };
3067
+ var countRepositories = (nodes) => {
3068
+ let count = 0;
3069
+ for (const node of nodes) {
3070
+ if (node.type === "repository") {
3071
+ count++;
3072
+ } else if (node.children) {
3073
+ count += countRepositories(node.children);
3074
+ }
3075
+ }
3076
+ return count;
3077
+ };
3078
+ var RepositoryTreeCore = ({
3079
+ repositories,
3080
+ theme,
3081
+ onSelect,
3082
+ selectedRepositoryPath,
3083
+ defaultOpen = true,
3084
+ initialOpenState,
3085
+ horizontalNodePadding = "16px",
3086
+ verticalNodePadding = "6px",
3087
+ verticalPadding = "8px"
3088
+ }) => {
3089
+ const rowHeight = useMemo12(() => {
3090
+ const paddingValue = parseFloat(verticalNodePadding);
3091
+ const contentLineHeight = 20;
3092
+ const borderHeight = 2;
3093
+ return contentLineHeight + paddingValue * 2 + borderHeight;
3094
+ }, [verticalNodePadding]);
3095
+ const treeData = useMemo12(() => {
3096
+ return buildRepositoryTree(repositories);
3097
+ }, [repositories]);
3098
+ const NodeRenderer = (props) => {
3099
+ const { node } = props;
3100
+ const data = node.data;
3101
+ const icon = data.type === "directory" ? /* @__PURE__ */ React15.createElement(Folder2, {
3102
+ size: 16
3103
+ }) : /* @__PURE__ */ React15.createElement(FolderGit2, {
3104
+ size: 16
3105
+ });
3106
+ const nameColor = data.type === "directory" ? theme.colors.textSecondary : theme.colors.text;
3107
+ const rightContent = data.type === "directory" && data.repositoryCount !== undefined ? /* @__PURE__ */ React15.createElement("span", {
3108
+ style: {
3109
+ marginLeft: "8px",
3110
+ fontSize: "12px",
3111
+ color: theme.colors.textMuted,
3112
+ fontWeight: 500
3113
+ }
3114
+ }, data.repositoryCount) : undefined;
3115
+ return /* @__PURE__ */ React15.createElement(TreeNode, {
3116
+ ...props,
3117
+ theme,
3118
+ nameColor,
3119
+ leftIcon: icon,
3120
+ rightContent,
3121
+ horizontalNodePadding,
3122
+ verticalNodePadding
3123
+ });
3124
+ };
3125
+ const handleSelect = (selectedNodes) => {
3126
+ if (selectedNodes.length === 0)
3127
+ return;
3128
+ const node = selectedNodes[0];
3129
+ const nodeData = node.data;
3130
+ if (nodeData.type === "repository" && nodeData.entry && onSelect) {
3131
+ onSelect(nodeData.entry);
3132
+ }
3133
+ };
3134
+ const initialHeight = 600;
3135
+ const [containerRef, containerHeight] = useContainerHeight(initialHeight);
3136
+ const selection = selectedRepositoryPath ? `repo:${selectedRepositoryPath}` : undefined;
3137
+ return /* @__PURE__ */ React15.createElement("div", {
3138
+ ref: containerRef,
3139
+ style: {
3140
+ backgroundColor: theme.colors.background,
3141
+ color: theme.colors.text,
3142
+ fontFamily: theme.fonts.body,
3143
+ height: "100%",
3144
+ ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
3145
+ }
3146
+ }, /* @__PURE__ */ React15.createElement(Tree6, {
3147
+ data: treeData,
3148
+ onSelect: handleSelect,
3149
+ openByDefault: defaultOpen,
3150
+ ...initialOpenState !== undefined && { initialOpenState },
3151
+ ...selection !== undefined && { selection },
3152
+ width: "100%",
3153
+ height: containerHeight,
3154
+ rowHeight
3155
+ }, NodeRenderer));
3156
+ };
2986
3157
  // src/components/TelemetryCoverageFileTree.tsx
2987
3158
  import {
2988
3159
  Activity,
@@ -2990,9 +3161,9 @@ import {
2990
3161
  Circle as Circle2,
2991
3162
  TestTube
2992
3163
  } from "lucide-react";
2993
- import React15, { useMemo as useMemo12, useRef as useRef7 } from "react";
2994
- import { Tree as Tree6 } from "react-arborist";
2995
- var TelemetryCoverageContext = React15.createContext(null);
3164
+ import React16, { useMemo as useMemo13, useRef as useRef7 } from "react";
3165
+ import { Tree as Tree7 } from "react-arborist";
3166
+ var TelemetryCoverageContext = React16.createContext(null);
2996
3167
  var DEFAULT_TEST_PATTERNS = [
2997
3168
  /\.test\.[jt]sx?$/,
2998
3169
  /\.spec\.[jt]sx?$/,
@@ -3009,7 +3180,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
3009
3180
  switch (status) {
3010
3181
  case "covered":
3011
3182
  return {
3012
- icon: /* @__PURE__ */ React15.createElement(Activity, {
3183
+ icon: /* @__PURE__ */ React16.createElement(Activity, {
3013
3184
  size: 14
3014
3185
  }),
3015
3186
  color: "#22c55e",
@@ -3018,7 +3189,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
3018
3189
  };
3019
3190
  case "partial":
3020
3191
  return {
3021
- icon: /* @__PURE__ */ React15.createElement(CircleDot2, {
3192
+ icon: /* @__PURE__ */ React16.createElement(CircleDot2, {
3022
3193
  size: 14
3023
3194
  }),
3024
3195
  color: "#eab308",
@@ -3027,7 +3198,7 @@ var getCoverageStatusDisplay = (coverage, _theme) => {
3027
3198
  };
3028
3199
  case "none":
3029
3200
  return {
3030
- icon: /* @__PURE__ */ React15.createElement(Circle2, {
3201
+ icon: /* @__PURE__ */ React16.createElement(Circle2, {
3031
3202
  size: 14
3032
3203
  }),
3033
3204
  color: "#6b7280",
@@ -3129,7 +3300,7 @@ var TelemetryCoverageFileTree = ({
3129
3300
  enableDragAndDrop = false
3130
3301
  }) => {
3131
3302
  const dndProps = getDndProps(enableDragAndDrop);
3132
- const coverageMap = useMemo12(() => {
3303
+ const coverageMap = useMemo13(() => {
3133
3304
  const map = new Map;
3134
3305
  coverageData.forEach((item) => {
3135
3306
  map.set(item.filePath, item);
@@ -3138,7 +3309,7 @@ var TelemetryCoverageFileTree = ({
3138
3309
  }, [coverageData]);
3139
3310
  const NodeRenderer = (props) => {
3140
3311
  const { node } = props;
3141
- const ctx = React15.useContext(TelemetryCoverageContext);
3312
+ const ctx = React16.useContext(TelemetryCoverageContext);
3142
3313
  const coverage = ctx?.coverageMap.get(node.data.id);
3143
3314
  const hasTracedChildren = ctx?.hasTracedChildrenMap.get(node.data.id);
3144
3315
  const coverageDisplay = coverage ? getCoverageStatusDisplay(coverage, theme) : null;
@@ -3150,11 +3321,11 @@ var TelemetryCoverageFileTree = ({
3150
3321
  } else if (node.data.isTestFile) {
3151
3322
  nameColor = "#6b728080";
3152
3323
  }
3153
- const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React15.createElement(TestTube, {
3324
+ const leftIcon = node.data.isTestFile && !coverage ? /* @__PURE__ */ React16.createElement(TestTube, {
3154
3325
  size: 14,
3155
3326
  style: { marginRight: 4, color: "#6b7280" }
3156
3327
  }) : null;
3157
- const rightContent = coverageDisplay ? /* @__PURE__ */ React15.createElement("div", {
3328
+ const rightContent = coverageDisplay ? /* @__PURE__ */ React16.createElement("div", {
3158
3329
  style: {
3159
3330
  display: "flex",
3160
3331
  alignItems: "center",
@@ -3162,14 +3333,14 @@ var TelemetryCoverageFileTree = ({
3162
3333
  marginRight: "8px"
3163
3334
  },
3164
3335
  title: coverageDisplay.label
3165
- }, coverageDisplay.icon, /* @__PURE__ */ React15.createElement("span", {
3336
+ }, coverageDisplay.icon, /* @__PURE__ */ React16.createElement("span", {
3166
3337
  style: {
3167
3338
  marginLeft: "4px",
3168
3339
  fontSize: theme.fontSizes[0],
3169
3340
  fontWeight: "bold",
3170
3341
  fontFamily: "monospace"
3171
3342
  }
3172
- }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React15.createElement("div", {
3343
+ }, coverageDisplay.badge)) : node.data.isTestFile ? /* @__PURE__ */ React16.createElement("div", {
3173
3344
  style: {
3174
3345
  display: "flex",
3175
3346
  alignItems: "center",
@@ -3178,10 +3349,10 @@ var TelemetryCoverageFileTree = ({
3178
3349
  opacity: 0.5
3179
3350
  },
3180
3351
  title: "No telemetry instrumentation"
3181
- }, /* @__PURE__ */ React15.createElement(Circle2, {
3352
+ }, /* @__PURE__ */ React16.createElement(Circle2, {
3182
3353
  size: 14
3183
3354
  })) : null;
3184
- return /* @__PURE__ */ React15.createElement(TreeNode, {
3355
+ return /* @__PURE__ */ React16.createElement(TreeNode, {
3185
3356
  ...props,
3186
3357
  theme,
3187
3358
  rightContent,
@@ -3196,16 +3367,16 @@ var TelemetryCoverageFileTree = ({
3196
3367
  }
3197
3368
  });
3198
3369
  };
3199
- const treeStructure = useMemo12(() => {
3370
+ const treeStructure = useMemo13(() => {
3200
3371
  return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
3201
3372
  }, [fileTree, showOnlyTestFiles, testFilePatterns]);
3202
- const treeData = useMemo12(() => {
3373
+ const treeData = useMemo13(() => {
3203
3374
  if (showUncoveredFiles) {
3204
3375
  return treeStructure;
3205
3376
  }
3206
3377
  return filterCoveredNodes(treeStructure, coverageMap);
3207
3378
  }, [treeStructure, showUncoveredFiles, coverageMap]);
3208
- const hasTracedChildrenMap = useMemo12(() => {
3379
+ const hasTracedChildrenMap = useMemo13(() => {
3209
3380
  const map = new Map;
3210
3381
  const markTracedParents = (nodes) => {
3211
3382
  let hasTraced = false;
@@ -3246,7 +3417,7 @@ var TelemetryCoverageFileTree = ({
3246
3417
  onDirectorySelect(selectedDirs);
3247
3418
  }
3248
3419
  };
3249
- const calculatedHeight = useMemo12(() => {
3420
+ const calculatedHeight = useMemo13(() => {
3250
3421
  if (autoHeight) {
3251
3422
  const visibleNodeCount = countVisibleNodes3(treeData, openByDefault);
3252
3423
  return visibleNodeCount * 28;
@@ -3254,7 +3425,7 @@ var TelemetryCoverageFileTree = ({
3254
3425
  return initialHeight;
3255
3426
  }, [autoHeight, treeData, openByDefault, initialHeight]);
3256
3427
  const [containerRef, containerHeight] = useContainerHeight(calculatedHeight);
3257
- return /* @__PURE__ */ React15.createElement("div", {
3428
+ return /* @__PURE__ */ React16.createElement("div", {
3258
3429
  ref: containerRef,
3259
3430
  style: {
3260
3431
  backgroundColor: transparentBackground ? "transparent" : theme.colors.background,
@@ -3263,9 +3434,9 @@ var TelemetryCoverageFileTree = ({
3263
3434
  ...autoHeight ? {} : { height: "100%" },
3264
3435
  ...verticalPadding ? { paddingTop: verticalPadding, paddingBottom: verticalPadding } : {}
3265
3436
  }
3266
- }, /* @__PURE__ */ React15.createElement(TelemetryCoverageContext.Provider, {
3437
+ }, /* @__PURE__ */ React16.createElement(TelemetryCoverageContext.Provider, {
3267
3438
  value: { coverageMap, hasTracedChildrenMap }
3268
- }, /* @__PURE__ */ React15.createElement(Tree6, {
3439
+ }, /* @__PURE__ */ React16.createElement(Tree7, {
3269
3440
  data: treeData,
3270
3441
  onSelect: handleSelect,
3271
3442
  ...selectedFile !== undefined && { selection: selectedFile },
@@ -3294,7 +3465,7 @@ var calculateTelemetryCoverageStats = (coverageData) => {
3294
3465
  };
3295
3466
  // src/components/TelemetryCoverageFileTreeContainer.tsx
3296
3467
  import { RefreshCw as RefreshCw2, Eye as Eye2, EyeOff as EyeOff2, AlertCircle as AlertCircle5, Activity as Activity2 } from "lucide-react";
3297
- import React16, { useState as useState7, useMemo as useMemo13 } from "react";
3468
+ import React17, { useState as useState7, useMemo as useMemo14 } from "react";
3298
3469
  var TelemetryCoverageFileTreeContainer = ({
3299
3470
  fileTree,
3300
3471
  theme,
@@ -3316,10 +3487,10 @@ var TelemetryCoverageFileTreeContainer = ({
3316
3487
  }) => {
3317
3488
  const [filters, setFilters] = useState7([]);
3318
3489
  const [showUncoveredFiles, setShowUncoveredFiles] = useState7(true);
3319
- const selectedDirectories = useMemo13(() => {
3490
+ const selectedDirectories = useMemo14(() => {
3320
3491
  return filters.filter((f) => f.mode === "include").map((f) => f.path);
3321
3492
  }, [filters]);
3322
- const stats = useMemo13(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
3493
+ const stats = useMemo14(() => calculateTelemetryCoverageStats(coverageData), [coverageData]);
3323
3494
  const handleRefresh = () => {
3324
3495
  onRefresh?.();
3325
3496
  };
@@ -3327,34 +3498,34 @@ var TelemetryCoverageFileTreeContainer = ({
3327
3498
  setShowUncoveredFiles(!showUncoveredFiles);
3328
3499
  };
3329
3500
  const percentageColor = stats.percentage >= 80 ? "#22c55e" : stats.percentage >= 50 ? "#eab308" : stats.percentage > 0 ? "#f97316" : "#6b7280";
3330
- return /* @__PURE__ */ React16.createElement("div", {
3501
+ return /* @__PURE__ */ React17.createElement("div", {
3331
3502
  style: { display: "flex", flexDirection: "column", height: "100%" }
3332
- }, showControls && /* @__PURE__ */ React16.createElement("div", {
3503
+ }, showControls && /* @__PURE__ */ React17.createElement("div", {
3333
3504
  style: {
3334
3505
  padding: "12px",
3335
3506
  borderBottom: `1px solid ${theme.colors.border || "#e0e0e0"}`,
3336
3507
  backgroundColor: theme.colors.backgroundSecondary || theme.colors.background
3337
3508
  }
3338
- }, /* @__PURE__ */ React16.createElement("div", {
3509
+ }, /* @__PURE__ */ React17.createElement("div", {
3339
3510
  style: {
3340
3511
  display: "flex",
3341
3512
  alignItems: "center",
3342
3513
  justifyContent: "space-between",
3343
3514
  marginBottom: "8px"
3344
3515
  }
3345
- }, /* @__PURE__ */ React16.createElement("div", {
3516
+ }, /* @__PURE__ */ React17.createElement("div", {
3346
3517
  style: { display: "flex", alignItems: "center", gap: "8px" }
3347
- }, /* @__PURE__ */ React16.createElement(Activity2, {
3518
+ }, /* @__PURE__ */ React17.createElement(Activity2, {
3348
3519
  size: 16,
3349
3520
  color: theme.colors.primary
3350
- }), /* @__PURE__ */ React16.createElement("h3", {
3521
+ }), /* @__PURE__ */ React17.createElement("h3", {
3351
3522
  style: {
3352
3523
  margin: 0,
3353
3524
  fontSize: theme.fontSizes[1],
3354
3525
  fontWeight: "bold",
3355
3526
  color: theme.colors.text
3356
3527
  }
3357
- }, title), stats.testFiles > 0 && /* @__PURE__ */ React16.createElement("span", {
3528
+ }, title), stats.testFiles > 0 && /* @__PURE__ */ React17.createElement("span", {
3358
3529
  style: {
3359
3530
  backgroundColor: percentageColor,
3360
3531
  color: "#ffffff",
@@ -3364,14 +3535,14 @@ var TelemetryCoverageFileTreeContainer = ({
3364
3535
  fontWeight: "bold",
3365
3536
  fontFamily: "monospace"
3366
3537
  }
3367
- }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React16.createElement(RefreshCw2, {
3538
+ }, stats.percentage, "%"), isLoading && /* @__PURE__ */ React17.createElement(RefreshCw2, {
3368
3539
  size: 16,
3369
3540
  color: theme.colors.text,
3370
3541
  className: "telemetry-coverage-spinner",
3371
3542
  style: { animation: "spin 1s linear infinite" }
3372
- })), /* @__PURE__ */ React16.createElement("div", {
3543
+ })), /* @__PURE__ */ React17.createElement("div", {
3373
3544
  style: { display: "flex", gap: "8px" }
3374
- }, /* @__PURE__ */ React16.createElement("button", {
3545
+ }, /* @__PURE__ */ React17.createElement("button", {
3375
3546
  onClick: toggleShowUncoveredFiles,
3376
3547
  style: {
3377
3548
  background: "none",
@@ -3386,11 +3557,11 @@ var TelemetryCoverageFileTreeContainer = ({
3386
3557
  color: theme.colors.text
3387
3558
  },
3388
3559
  title: showUncoveredFiles ? "Show only covered files" : "Show all test files"
3389
- }, showUncoveredFiles ? /* @__PURE__ */ React16.createElement(EyeOff2, {
3560
+ }, showUncoveredFiles ? /* @__PURE__ */ React17.createElement(EyeOff2, {
3390
3561
  size: 14
3391
- }) : /* @__PURE__ */ React16.createElement(Eye2, {
3562
+ }) : /* @__PURE__ */ React17.createElement(Eye2, {
3392
3563
  size: 14
3393
- }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React16.createElement("button", {
3564
+ }), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */ React17.createElement("button", {
3394
3565
  onClick: handleRefresh,
3395
3566
  disabled: isLoading,
3396
3567
  style: {
@@ -3407,9 +3578,9 @@ var TelemetryCoverageFileTreeContainer = ({
3407
3578
  opacity: isLoading ? 0.6 : 1
3408
3579
  },
3409
3580
  title: "Refresh coverage data"
3410
- }, /* @__PURE__ */ React16.createElement(RefreshCw2, {
3581
+ }, /* @__PURE__ */ React17.createElement(RefreshCw2, {
3411
3582
  size: 14
3412
- }), "Refresh"))), error && /* @__PURE__ */ React16.createElement("div", {
3583
+ }), "Refresh"))), error && /* @__PURE__ */ React17.createElement("div", {
3413
3584
  style: {
3414
3585
  display: "flex",
3415
3586
  alignItems: "center",
@@ -3422,36 +3593,36 @@ var TelemetryCoverageFileTreeContainer = ({
3422
3593
  color: "#856404",
3423
3594
  marginBottom: "8px"
3424
3595
  }
3425
- }, /* @__PURE__ */ React16.createElement(AlertCircle5, {
3596
+ }, /* @__PURE__ */ React17.createElement(AlertCircle5, {
3426
3597
  size: 14
3427
- }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React16.createElement("div", {
3598
+ }), error), !error && stats.testFiles > 0 && /* @__PURE__ */ React17.createElement("div", {
3428
3599
  style: {
3429
3600
  display: "flex",
3430
3601
  gap: "16px",
3431
3602
  fontSize: theme.fontSizes[0],
3432
3603
  color: theme.colors.textSecondary || "#666"
3433
3604
  }
3434
- }, /* @__PURE__ */ React16.createElement("span", null, /* @__PURE__ */ React16.createElement("strong", {
3605
+ }, /* @__PURE__ */ React17.createElement("span", null, /* @__PURE__ */ React17.createElement("strong", {
3435
3606
  style: { color: "#22c55e" }
3436
- }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React16.createElement("span", null, /* @__PURE__ */ React16.createElement("strong", {
3607
+ }, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */ React17.createElement("span", null, /* @__PURE__ */ React17.createElement("strong", {
3437
3608
  style: { color: "#eab308" }
3438
- }, stats.partialFiles), " partial"), /* @__PURE__ */ React16.createElement("span", null, /* @__PURE__ */ React16.createElement("strong", {
3609
+ }, stats.partialFiles), " partial"), /* @__PURE__ */ React17.createElement("span", null, /* @__PURE__ */ React17.createElement("strong", {
3439
3610
  style: { color: "#6b7280" }
3440
- }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React16.createElement("span", {
3611
+ }, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */ React17.createElement("span", {
3441
3612
  style: { marginLeft: "auto" }
3442
- }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React16.createElement("div", {
3613
+ }, stats.totalTraced, "/", stats.totalTests, " tests traced")), !error && stats.testFiles === 0 && /* @__PURE__ */ React17.createElement("div", {
3443
3614
  style: {
3444
3615
  fontSize: theme.fontSizes[0],
3445
3616
  color: theme.colors.textSecondary || "#666"
3446
3617
  }
3447
- }, "No test files with coverage data found")), /* @__PURE__ */ React16.createElement(DirectoryFilterInput, {
3618
+ }, "No test files with coverage data found")), /* @__PURE__ */ React17.createElement(DirectoryFilterInput, {
3448
3619
  fileTree,
3449
3620
  theme,
3450
3621
  filters,
3451
3622
  onFiltersChange: setFilters
3452
- }), /* @__PURE__ */ React16.createElement("div", {
3623
+ }), /* @__PURE__ */ React17.createElement("div", {
3453
3624
  style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
3454
- }, /* @__PURE__ */ React16.createElement(TelemetryCoverageFileTree, {
3625
+ }, /* @__PURE__ */ React17.createElement(TelemetryCoverageFileTree, {
3455
3626
  fileTree,
3456
3627
  theme,
3457
3628
  coverageData,
@@ -3486,6 +3657,7 @@ export {
3486
3657
  TelemetryCoverageFileTreeContainer,
3487
3658
  TelemetryCoverageFileTree,
3488
3659
  StoryboardWorkflowsTreeCore,
3660
+ RepositoryTreeCore,
3489
3661
  OrderedFileList,
3490
3662
  MultiFileTreeCore,
3491
3663
  MultiFileTree,
@@ -0,0 +1,13 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { RepositoryTreeCore } from './RepositoryTreeCore';
3
+ declare const meta: Meta<typeof RepositoryTreeCore>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof RepositoryTreeCore>;
6
+ export declare const Default: Story;
7
+ export declare const SingleDirectory: Story;
8
+ export declare const Collapsed: Story;
9
+ export declare const Empty: Story;
10
+ export declare const TerminalTheme: Story;
11
+ export declare const MatrixTheme: Story;
12
+ export declare const SlateTheme: Story;
13
+ //# sourceMappingURL=RepositoryTree.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositoryTree.stories.d.ts","sourceRoot":"","sources":["../../../../src/components/RepositoryTree/RepositoryTree.stories.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAqG1D,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,kBAAkB,CAkCzC,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAyBjD,eAAO,MAAM,OAAO,EAAE,KAUrB,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAU7B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,KAUvB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,KAUnB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,KAU3B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,KAUzB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,KAUxB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { RepositoryTreeProps } from './types';
3
+ /**
4
+ * RepositoryTreeCore component
5
+ *
6
+ * Displays repositories organized by their filesystem paths in a tree structure.
7
+ */
8
+ export declare const RepositoryTreeCore: React.FC<RepositoryTreeProps>;
9
+ //# sourceMappingURL=RepositoryTreeCore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RepositoryTreeCore.d.ts","sourceRoot":"","sources":["../../../../src/components/RepositoryTree/RepositoryTreeCore.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAsB,mBAAmB,EAAE,MAAM,SAAS,CAAC;AA+IvE;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+G5D,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { RepositoryTreeCore } from './RepositoryTreeCore';
2
+ export type { RepositoryTreeProps, RepositoryNodeData, RepositoryNodeType, } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/RepositoryTree/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,40 @@
1
+ import type { Theme } from '@principal-ade/industry-theme';
2
+ import type { AlexandriaEntry } from '@principal-ai/alexandria-core-library';
3
+ import type { TreeNodeData } from '../TreeNode';
4
+ /**
5
+ * Node types in the repository tree
6
+ */
7
+ export type RepositoryNodeType = 'directory' | 'repository';
8
+ /**
9
+ * Node data for repository tree
10
+ */
11
+ export interface RepositoryNodeData extends TreeNodeData {
12
+ type: RepositoryNodeType;
13
+ children?: RepositoryNodeData[];
14
+ entry?: AlexandriaEntry;
15
+ repositoryCount?: number;
16
+ }
17
+ /**
18
+ * Props for RepositoryTreeCore component
19
+ */
20
+ export interface RepositoryTreeProps {
21
+ /** Array of repositories to display in the tree */
22
+ repositories: AlexandriaEntry[];
23
+ /** Theme for styling */
24
+ theme: Theme;
25
+ /** Callback when a repository is selected */
26
+ onSelect?: (entry: AlexandriaEntry) => void;
27
+ /** Path of the currently selected repository */
28
+ selectedRepositoryPath?: string;
29
+ /** Default open state for all nodes */
30
+ defaultOpen?: boolean;
31
+ /** Initial open state for specific nodes by id */
32
+ initialOpenState?: Record<string, boolean>;
33
+ /** Horizontal padding for nodes */
34
+ horizontalNodePadding?: string;
35
+ /** Vertical padding for nodes */
36
+ verticalNodePadding?: string;
37
+ /** Vertical padding for the container */
38
+ verticalPadding?: string;
39
+ }
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/components/RepositoryTree/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAE7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,YAAY,CAAC;AAE5D;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACtD,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAGhC,KAAK,CAAC,EAAE,eAAe,CAAC;IAGxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,wBAAwB;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;IAC5C,gDAAgD;IAChD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3C,mCAAmC;IACnC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iCAAiC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,yCAAyC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@principal-ade/dynamic-file-tree",
3
- "version": "0.1.71",
3
+ "version": "0.1.73",
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-ade/panel-framework-core --external @principal-ai/repository-abstraction --external @principal-ai/principal-view-core",
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-ade/panel-framework-core --external @principal-ai/repository-abstraction --external @principal-ai/principal-view-core --external @principal-ai/alexandria-core-library",
21
21
  "build:types": "tsc --emitDeclarationOnly --declaration --declarationMap",
22
22
  "dev": "bun run build --watch",
23
23
  "test": "bun test",
@@ -49,6 +49,7 @@
49
49
  "peerDependencies": {
50
50
  "@principal-ade/industry-theme": ">=0.1.0",
51
51
  "@principal-ade/panel-framework-core": ">=0.4.0",
52
+ "@principal-ai/alexandria-core-library": ">=0.3.0",
52
53
  "@principal-ai/principal-view-core": "^0.24.8",
53
54
  "@principal-ai/repository-abstraction": "^0.5.7",
54
55
  "lucide-react": ">=0.263.0",
@@ -62,6 +63,9 @@
62
63
  "@principal-ade/panel-framework-core": {
63
64
  "optional": true
64
65
  },
66
+ "@principal-ai/alexandria-core-library": {
67
+ "optional": true
68
+ },
65
69
  "react": {
66
70
  "optional": true
67
71
  },
@@ -76,6 +80,7 @@
76
80
  "@eslint/js": "^9.32.0",
77
81
  "@principal-ade/industry-theme": "^0.1.0",
78
82
  "@principal-ade/panel-framework-core": "^0.4.2",
83
+ "@principal-ai/alexandria-core-library": "^0.3.3",
79
84
  "@principal-ai/principal-view-core": "^0.24.8",
80
85
  "@principal-ai/repository-abstraction": "^0.5.7",
81
86
  "@storybook/addon-docs": "^10.0.0",