@principal-ade/dynamic-file-tree 0.1.72 → 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 +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +221 -49
- package/dist/src/components/RepositoryTree/RepositoryTree.stories.d.ts +13 -0
- package/dist/src/components/RepositoryTree/RepositoryTree.stories.d.ts.map +1 -0
- package/dist/src/components/RepositoryTree/RepositoryTreeCore.d.ts +9 -0
- package/dist/src/components/RepositoryTree/RepositoryTreeCore.d.ts.map +1 -0
- package/dist/src/components/RepositoryTree/index.d.ts +3 -0
- package/dist/src/components/RepositoryTree/index.d.ts.map +1 -0
- package/dist/src/components/RepositoryTree/types.d.ts +40 -0
- package/dist/src/components/RepositoryTree/types.d.ts.map +1 -0
- package/package.json +7 -2
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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,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
|
@@ -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
|
|
2994
|
-
import { Tree as
|
|
2995
|
-
var TelemetryCoverageContext =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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 =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3352
|
+
}, /* @__PURE__ */ React16.createElement(Circle2, {
|
|
3182
3353
|
size: 14
|
|
3183
3354
|
})) : null;
|
|
3184
|
-
return /* @__PURE__ */
|
|
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 =
|
|
3370
|
+
const treeStructure = useMemo13(() => {
|
|
3200
3371
|
return transformTreeStructure2(fileTree, showOnlyTestFiles, testFilePatterns);
|
|
3201
3372
|
}, [fileTree, showOnlyTestFiles, testFilePatterns]);
|
|
3202
|
-
const treeData =
|
|
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 =
|
|
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 =
|
|
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__ */
|
|
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__ */
|
|
3437
|
+
}, /* @__PURE__ */ React16.createElement(TelemetryCoverageContext.Provider, {
|
|
3267
3438
|
value: { coverageMap, hasTracedChildrenMap }
|
|
3268
|
-
}, /* @__PURE__ */
|
|
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
|
|
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 =
|
|
3490
|
+
const selectedDirectories = useMemo14(() => {
|
|
3320
3491
|
return filters.filter((f) => f.mode === "include").map((f) => f.path);
|
|
3321
3492
|
}, [filters]);
|
|
3322
|
-
const stats =
|
|
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__ */
|
|
3501
|
+
return /* @__PURE__ */ React17.createElement("div", {
|
|
3331
3502
|
style: { display: "flex", flexDirection: "column", height: "100%" }
|
|
3332
|
-
}, showControls && /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
3516
|
+
}, /* @__PURE__ */ React17.createElement("div", {
|
|
3346
3517
|
style: { display: "flex", alignItems: "center", gap: "8px" }
|
|
3347
|
-
}, /* @__PURE__ */
|
|
3518
|
+
}, /* @__PURE__ */ React17.createElement(Activity2, {
|
|
3348
3519
|
size: 16,
|
|
3349
3520
|
color: theme.colors.primary
|
|
3350
|
-
}), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3543
|
+
})), /* @__PURE__ */ React17.createElement("div", {
|
|
3373
3544
|
style: { display: "flex", gap: "8px" }
|
|
3374
|
-
}, /* @__PURE__ */
|
|
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__ */
|
|
3560
|
+
}, showUncoveredFiles ? /* @__PURE__ */ React17.createElement(EyeOff2, {
|
|
3390
3561
|
size: 14
|
|
3391
|
-
}) : /* @__PURE__ */
|
|
3562
|
+
}) : /* @__PURE__ */ React17.createElement(Eye2, {
|
|
3392
3563
|
size: 14
|
|
3393
|
-
}), showUncoveredFiles ? "Hide uncovered" : "Show all"), onRefresh && /* @__PURE__ */
|
|
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__ */
|
|
3581
|
+
}, /* @__PURE__ */ React17.createElement(RefreshCw2, {
|
|
3411
3582
|
size: 14
|
|
3412
|
-
}), "Refresh"))), error && /* @__PURE__ */
|
|
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__ */
|
|
3596
|
+
}, /* @__PURE__ */ React17.createElement(AlertCircle5, {
|
|
3426
3597
|
size: 14
|
|
3427
|
-
}), error), !error && stats.testFiles > 0 && /* @__PURE__ */
|
|
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__ */
|
|
3605
|
+
}, /* @__PURE__ */ React17.createElement("span", null, /* @__PURE__ */ React17.createElement("strong", {
|
|
3435
3606
|
style: { color: "#22c55e" }
|
|
3436
|
-
}, stats.coveredFiles), " covered"), stats.partialFiles > 0 && /* @__PURE__ */
|
|
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__ */
|
|
3609
|
+
}, stats.partialFiles), " partial"), /* @__PURE__ */ React17.createElement("span", null, /* @__PURE__ */ React17.createElement("strong", {
|
|
3439
3610
|
style: { color: "#6b7280" }
|
|
3440
|
-
}, stats.uncoveredFiles), " uncovered"), /* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3623
|
+
}), /* @__PURE__ */ React17.createElement("div", {
|
|
3453
3624
|
style: { flex: 1, marginTop: "1rem", overflow: "hidden" }
|
|
3454
|
-
}, /* @__PURE__ */
|
|
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 @@
|
|
|
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.
|
|
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",
|