@principal-ai/file-city-react 0.5.5 → 0.5.7

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.
@@ -1,51 +1,16 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.CityViewWithReactFlow = void 0;
37
- const react_1 = __importStar(require("react"));
38
- const reactflow_1 = __importStar(require("reactflow"));
39
- require("reactflow/dist/style.css");
40
- const industry_theme_1 = require("@principal-ade/industry-theme");
41
- const file_city_builder_1 = require("@principal-ai/file-city-builder");
42
- const ArchitectureMapHighlightLayers_1 = require("./ArchitectureMapHighlightLayers");
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useMemo } from 'react';
3
+ import ReactFlow, { ReactFlowProvider, Controls, Background, MiniMap, Handle, Position, useNodesState, useEdgesState, BackgroundVariant, } from 'reactflow';
4
+ import 'reactflow/dist/style.css';
5
+ import { useTheme } from '@principal-ade/industry-theme';
6
+ import { GridLayoutManager, CodeCityBuilderWithGrid } from '@principal-ai/file-city-builder';
7
+ import { ArchitectureMapHighlightLayers } from './ArchitectureMapHighlightLayers';
43
8
  const CellNode = ({ data, selected }) => {
44
9
  const { label, fileTree, fileCount, directoryCount } = data;
45
- const { theme } = (0, industry_theme_1.useTheme)();
10
+ const { theme } = useTheme();
46
11
  // Build city data for this cell's file tree
47
- const cityBuilder = (0, react_1.useMemo)(() => new file_city_builder_1.CodeCityBuilderWithGrid(), []);
48
- const cityData = (0, react_1.useMemo)(() => {
12
+ const cityBuilder = useMemo(() => new CodeCityBuilderWithGrid(), []);
13
+ const cityData = useMemo(() => {
49
14
  if (!fileTree || !fileTree.root || fileTree.root.children.length === 0) {
50
15
  return null;
51
16
  }
@@ -58,7 +23,7 @@ const CellNode = ({ data, selected }) => {
58
23
  return null;
59
24
  }
60
25
  }, [fileTree, cityBuilder]);
61
- return (react_1.default.createElement("div", { className: "cell-node", style: {
26
+ return (_jsxs("div", { className: "cell-node", style: {
62
27
  boxSizing: 'border-box',
63
28
  background: selected
64
29
  ? `linear-gradient(135deg, ${theme.colors.primary} 0%, ${theme.colors.accent} 100%)`
@@ -74,75 +39,62 @@ const CellNode = ({ data, selected }) => {
74
39
  display: 'flex',
75
40
  flexDirection: 'column',
76
41
  transition: 'all 0.3s ease',
77
- } },
78
- react_1.default.createElement(reactflow_1.Handle, { type: "target", position: reactflow_1.Position.Top, style: { background: theme.colors.accent } }),
79
- react_1.default.createElement("div", { style: {
80
- marginBottom: `${theme.space[2]}px`,
81
- paddingBottom: `${theme.space[2]}px`,
82
- borderBottom: `1px solid ${theme.colors.border}`,
83
- } },
84
- react_1.default.createElement("h3", { style: {
85
- margin: `0 0 ${theme.space[1]}px 0`,
86
- fontSize: `${theme.fontSizes[2]}px`,
87
- fontWeight: theme.fontWeights.bold,
88
- fontFamily: theme.fonts.heading,
89
- color: theme.colors.text,
90
- } }, label),
91
- react_1.default.createElement("div", { style: {
92
- fontSize: `${theme.fontSizes[0]}px`,
93
- fontFamily: theme.fonts.body,
94
- color: theme.colors.textSecondary,
95
- display: 'flex',
96
- gap: `${theme.space[3]}px`,
97
- } },
98
- react_1.default.createElement("span", null,
99
- fileCount,
100
- " files"),
101
- react_1.default.createElement("span", null,
102
- directoryCount,
103
- " directories"))),
104
- react_1.default.createElement("div", { style: {
105
- position: 'relative',
106
- background: theme.colors.background,
107
- borderRadius: `${theme.radii[1]}px`,
108
- overflow: 'hidden',
109
- width: '350px',
110
- height: '350px',
111
- } }, cityData ? (react_1.default.createElement("div", { style: { width: '100%', height: '100%', position: 'relative', pointerEvents: 'none' } },
112
- react_1.default.createElement(ArchitectureMapHighlightLayers_1.ArchitectureMapHighlightLayers, { cityData: cityData, highlightLayers: [
113
- {
114
- id: 'typescript',
115
- name: 'TypeScript Files',
116
- enabled: true,
117
- color: theme.colors.success,
118
- opacity: 0.8,
119
- priority: 1,
120
- items: cityData.buildings
121
- .filter(b => b.path.endsWith('.ts') || b.path.endsWith('.tsx'))
122
- .map(b => ({
123
- path: b.path,
124
- type: 'file',
125
- opacity: 1,
126
- })),
127
- },
128
- ], showGrid: false, showDirectoryLabels: true, showFileNames: true, canvasBackgroundColor: theme.colors.background, defaultBuildingColor: theme.colors.muted, defaultDirectoryColor: theme.colors.backgroundSecondary, className: "w-full h-full",
129
- // Disable interactions to prevent conflicts with React Flow
130
- onFileClick: undefined }))) : (react_1.default.createElement("div", { style: {
131
- display: 'flex',
132
- alignItems: 'center',
133
- justifyContent: 'center',
134
- height: '100%',
135
- color: theme.colors.textMuted,
136
- fontSize: `${theme.fontSizes[1]}px`,
137
- fontFamily: theme.fonts.body,
138
- } }, "Empty cell"))),
139
- react_1.default.createElement(reactflow_1.Handle, { type: "source", position: reactflow_1.Position.Bottom, style: { background: theme.colors.accent } })));
42
+ }, children: [_jsx(Handle, { type: "target", position: Position.Top, style: { background: theme.colors.accent } }), _jsxs("div", { style: {
43
+ marginBottom: `${theme.space[2]}px`,
44
+ paddingBottom: `${theme.space[2]}px`,
45
+ borderBottom: `1px solid ${theme.colors.border}`,
46
+ }, children: [_jsx("h3", { style: {
47
+ margin: `0 0 ${theme.space[1]}px 0`,
48
+ fontSize: `${theme.fontSizes[2]}px`,
49
+ fontWeight: theme.fontWeights.bold,
50
+ fontFamily: theme.fonts.heading,
51
+ color: theme.colors.text,
52
+ }, children: label }), _jsxs("div", { style: {
53
+ fontSize: `${theme.fontSizes[0]}px`,
54
+ fontFamily: theme.fonts.body,
55
+ color: theme.colors.textSecondary,
56
+ display: 'flex',
57
+ gap: `${theme.space[3]}px`,
58
+ }, children: [_jsxs("span", { children: [fileCount, " files"] }), _jsxs("span", { children: [directoryCount, " directories"] })] })] }), _jsx("div", { style: {
59
+ position: 'relative',
60
+ background: theme.colors.background,
61
+ borderRadius: `${theme.radii[1]}px`,
62
+ overflow: 'hidden',
63
+ width: '350px',
64
+ height: '350px',
65
+ }, children: cityData ? (_jsx("div", { style: { width: '100%', height: '100%', position: 'relative', pointerEvents: 'none' }, children: _jsx(ArchitectureMapHighlightLayers, { cityData: cityData, highlightLayers: [
66
+ {
67
+ id: 'typescript',
68
+ name: 'TypeScript Files',
69
+ enabled: true,
70
+ color: theme.colors.success,
71
+ opacity: 0.8,
72
+ priority: 1,
73
+ items: cityData.buildings
74
+ .filter(b => b.path.endsWith('.ts') || b.path.endsWith('.tsx'))
75
+ .map(b => ({
76
+ path: b.path,
77
+ type: 'file',
78
+ opacity: 1,
79
+ })),
80
+ },
81
+ ], showGrid: false, showDirectoryLabels: true, showFileNames: true, canvasBackgroundColor: theme.colors.background, defaultBuildingColor: theme.colors.muted, defaultDirectoryColor: theme.colors.backgroundSecondary, className: "w-full h-full",
82
+ // Disable interactions to prevent conflicts with React Flow
83
+ onFileClick: undefined }) })) : (_jsx("div", { style: {
84
+ display: 'flex',
85
+ alignItems: 'center',
86
+ justifyContent: 'center',
87
+ height: '100%',
88
+ color: theme.colors.textMuted,
89
+ fontSize: `${theme.fontSizes[1]}px`,
90
+ fontFamily: theme.fonts.body,
91
+ }, children: "Empty cell" })) }), _jsx(Handle, { type: "source", position: Position.Bottom, style: { background: theme.colors.accent } })] }));
140
92
  };
141
93
  const nodeTypes = {
142
94
  cellNode: CellNode,
143
95
  };
144
96
  const CityViewWithReactFlowInner = ({ fileTree, gridConfig, onCellClick, cellWidth = 450, cellHeight = 350, cellSpacing = 100, }) => {
145
- const { theme } = (0, industry_theme_1.useTheme)();
97
+ const { theme } = useTheme();
146
98
  const defaultGridConfig = {
147
99
  id: 'default',
148
100
  version: '1.0',
@@ -166,8 +118,8 @@ const CityViewWithReactFlowInner = ({ fileTree, gridConfig, onCellClick, cellWid
166
118
  },
167
119
  };
168
120
  const config = gridConfig || defaultGridConfig;
169
- const { nodes, edges } = (0, react_1.useMemo)(() => {
170
- const gridManager = new file_city_builder_1.GridLayoutManager();
121
+ const { nodes, edges } = useMemo(() => {
122
+ const gridManager = new GridLayoutManager();
171
123
  const { rows, cols } = gridManager.getGridDimensions(config);
172
124
  const gridTrees = gridManager.splitTreeIntoGrid(fileTree, config);
173
125
  const generatedNodes = [];
@@ -247,21 +199,16 @@ const CityViewWithReactFlowInner = ({ fileTree, gridConfig, onCellClick, cellWid
247
199
  }
248
200
  return { nodes: generatedNodes, edges: generatedEdges };
249
201
  }, [fileTree, config, cellWidth, cellHeight, cellSpacing, theme]);
250
- const [nodesState, , onNodesChange] = (0, reactflow_1.useNodesState)(nodes);
251
- const [edgesState, , onEdgesChange] = (0, reactflow_1.useEdgesState)(edges);
252
- const onNodeClick = (0, react_1.useCallback)((_event, node) => {
202
+ const [nodesState, , onNodesChange] = useNodesState(nodes);
203
+ const [edgesState, , onEdgesChange] = useEdgesState(edges);
204
+ const onNodeClick = useCallback((_event, node) => {
253
205
  if (node.type === 'cellNode' && onCellClick) {
254
206
  onCellClick(node.id);
255
207
  }
256
208
  }, [onCellClick]);
257
- return (react_1.default.createElement("div", { style: { width: '100%', height: '100%', background: theme.colors.background } },
258
- react_1.default.createElement(reactflow_1.ReactFlowProvider, null,
259
- react_1.default.createElement(reactflow_1.default, { nodes: nodesState, edges: edgesState, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodeClick: onNodeClick, nodeTypes: nodeTypes, fitView: true, fitViewOptions: { padding: 0.2 }, attributionPosition: "bottom-left", defaultViewport: { x: 0, y: 0, zoom: 0.8 }, minZoom: 0.2, maxZoom: 2 },
260
- react_1.default.createElement(reactflow_1.Background, { variant: reactflow_1.BackgroundVariant.Dots, gap: 30, size: 1, color: `${theme.colors.border}40` }),
261
- react_1.default.createElement(reactflow_1.Controls, null),
262
- react_1.default.createElement(reactflow_1.MiniMap, { nodeColor: () => theme.colors.primary, style: {
263
- backgroundColor: theme.colors.backgroundSecondary,
264
- border: `1px solid ${theme.colors.border}`,
265
- }, maskColor: "rgba(0, 0, 0, 0.6)" })))));
209
+ return (_jsx("div", { style: { width: '100%', height: '100%', background: theme.colors.background }, children: _jsx(ReactFlowProvider, { children: _jsxs(ReactFlow, { nodes: nodesState, edges: edgesState, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, onNodeClick: onNodeClick, nodeTypes: nodeTypes, fitView: true, fitViewOptions: { padding: 0.2 }, attributionPosition: "bottom-left", defaultViewport: { x: 0, y: 0, zoom: 0.8 }, minZoom: 0.2, maxZoom: 2, children: [_jsx(Background, { variant: BackgroundVariant.Dots, gap: 30, size: 1, color: `${theme.colors.border}40` }), _jsx(Controls, {}), _jsx(MiniMap, { nodeColor: () => theme.colors.primary, style: {
210
+ backgroundColor: theme.colors.backgroundSecondary,
211
+ border: `1px solid ${theme.colors.border}`,
212
+ }, maskColor: "rgba(0, 0, 0, 0.6)" })] }) }) }));
266
213
  };
267
- exports.CityViewWithReactFlow = CityViewWithReactFlowInner;
214
+ export const CityViewWithReactFlow = CityViewWithReactFlowInner;
@@ -99,6 +99,6 @@ export interface FileCity3DProps {
99
99
  * Renders CityData as an interactive 3D city where buildings represent files
100
100
  * and their height corresponds to line count or file size.
101
101
  */
102
- export declare function FileCity3D({ cityData, width, height, onBuildingClick, className, style, animation, isGrown: externalIsGrown, onGrowChange, showControls, highlightLayers, isolationMode, dimOpacity, isLoading, loadingMessage, emptyMessage, heightScaling, linearScale, }: FileCity3DProps): React.JSX.Element;
102
+ export declare function FileCity3D({ cityData, width, height, onBuildingClick, className, style, animation, isGrown: externalIsGrown, onGrowChange, showControls, highlightLayers, isolationMode, dimOpacity, isLoading, loadingMessage, emptyMessage, heightScaling, linearScale, }: FileCity3DProps): import("react/jsx-runtime").JSX.Element;
103
103
  export default FileCity3D;
104
104
  //# sourceMappingURL=FileCity3D.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileCity3D.d.ts","sourceRoot":"","sources":["../../../src/components/FileCity3D/FileCity3D.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAMN,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EAEb,MAAM,iCAAiC,CAAC;AAEzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxD,OAAO,QAAQ,OAAO,CAAC;IAErB,UAAU,GAAG,CAAC;QAEZ,UAAU,iBAAkB,SAAQ,aAAa;SAAG;KACrD;CACF;AAGD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC7B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,mBAAmB;IACnB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5B;AAED,gDAAgD;AAChD,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,aAAa,GACb,UAAU,GACV,MAAM,CAAC;AAGX,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mFAAmF;IACnF,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,QAAQ,CAAC;AAkcrD,wBAAgB,WAAW,SAE1B;AA2QD,MAAM,WAAW,eAAe;IAC9B,uCAAuC;IACvC,QAAQ,EAAE,QAAQ,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;IACnD,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,8BAA8B;IAC9B,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,wEAAwE;IACxE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uCAAuC;IACvC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,2BAA2B;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,kEAAkE;IAClE,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,yEAAyE;IACzE,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,6DAA6D;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,KAAc,EACd,MAAY,EACZ,eAAe,EACf,SAAS,EACT,KAAK,EACL,SAAS,EACT,OAAO,EAAE,eAAe,EACxB,YAAY,EACZ,YAAmB,EACnB,eAAoB,EACpB,aAA6B,EAC7B,UAAiB,EACjB,SAAiB,EACjB,cAAuC,EACvC,YAA4C,EAC5C,aAA6B,EAC7B,WAAkB,GACnB,EAAE,eAAe,qBAmIjB;AAED,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"FileCity3D.d.ts","sourceRoot":"","sources":["../../../src/components/FileCity3D/FileCity3D.tsx"],"names":[],"mappings":"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"}