@principal-ai/file-city-react 0.3.0

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.
Files changed (51) hide show
  1. package/dist/builder/cityDataUtils.d.ts +15 -0
  2. package/dist/builder/cityDataUtils.d.ts.map +1 -0
  3. package/dist/builder/cityDataUtils.js +348 -0
  4. package/dist/components/ArchitectureMapHighlightLayers.d.ts +63 -0
  5. package/dist/components/ArchitectureMapHighlightLayers.d.ts.map +1 -0
  6. package/dist/components/ArchitectureMapHighlightLayers.js +1040 -0
  7. package/dist/components/CityViewWithReactFlow.d.ts +14 -0
  8. package/dist/components/CityViewWithReactFlow.d.ts.map +1 -0
  9. package/dist/components/CityViewWithReactFlow.js +266 -0
  10. package/dist/config/files.json +996 -0
  11. package/dist/hooks/useCodeCityData.d.ts +21 -0
  12. package/dist/hooks/useCodeCityData.d.ts.map +1 -0
  13. package/dist/hooks/useCodeCityData.js +57 -0
  14. package/dist/index.d.ts +14 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +29 -0
  17. package/dist/render/client/drawLayeredBuildings.d.ts +51 -0
  18. package/dist/render/client/drawLayeredBuildings.d.ts.map +1 -0
  19. package/dist/render/client/drawLayeredBuildings.js +650 -0
  20. package/dist/stories/ArchitectureMapGridLayout.stories.d.ts +73 -0
  21. package/dist/stories/ArchitectureMapGridLayout.stories.d.ts.map +1 -0
  22. package/dist/stories/ArchitectureMapGridLayout.stories.js +345 -0
  23. package/dist/stories/ArchitectureMapHighlightLayers.stories.d.ts +78 -0
  24. package/dist/stories/ArchitectureMapHighlightLayers.stories.d.ts.map +1 -0
  25. package/dist/stories/ArchitectureMapHighlightLayers.stories.js +270 -0
  26. package/dist/stories/CityViewWithReactFlow.stories.d.ts +24 -0
  27. package/dist/stories/CityViewWithReactFlow.stories.d.ts.map +1 -0
  28. package/dist/stories/CityViewWithReactFlow.stories.js +778 -0
  29. package/dist/stories/sample-data.d.ts +4 -0
  30. package/dist/stories/sample-data.d.ts.map +1 -0
  31. package/dist/stories/sample-data.js +268 -0
  32. package/dist/types/react-types.d.ts +17 -0
  33. package/dist/types/react-types.d.ts.map +1 -0
  34. package/dist/types/react-types.js +4 -0
  35. package/dist/utils/fileColorHighlightLayers.d.ts +86 -0
  36. package/dist/utils/fileColorHighlightLayers.d.ts.map +1 -0
  37. package/dist/utils/fileColorHighlightLayers.js +283 -0
  38. package/package.json +49 -0
  39. package/src/builder/cityDataUtils.ts +430 -0
  40. package/src/components/ArchitectureMapHighlightLayers.tsx +1518 -0
  41. package/src/components/CityViewWithReactFlow.tsx +365 -0
  42. package/src/config/files.json +996 -0
  43. package/src/hooks/useCodeCityData.ts +82 -0
  44. package/src/index.ts +64 -0
  45. package/src/render/client/drawLayeredBuildings.ts +946 -0
  46. package/src/stories/ArchitectureMapGridLayout.stories.tsx +410 -0
  47. package/src/stories/ArchitectureMapHighlightLayers.stories.tsx +312 -0
  48. package/src/stories/CityViewWithReactFlow.stories.tsx +787 -0
  49. package/src/stories/sample-data.ts +301 -0
  50. package/src/types/react-types.ts +18 -0
  51. package/src/utils/fileColorHighlightLayers.ts +378 -0
@@ -0,0 +1,21 @@
1
+ import { FileTree as FileSystemTree } from '@principal-ai/file-city-builder';
2
+ import { CityData } from '@principal-ai/file-city-builder';
3
+ export interface UseCodeCityDataOptions {
4
+ fileSystemTree?: FileSystemTree;
5
+ autoUpdate?: boolean;
6
+ colorMapping?: Record<string, string>;
7
+ }
8
+ export interface UseCodeCityDataReturn {
9
+ cityData: CityData | null;
10
+ isLoading: boolean;
11
+ error: string | null;
12
+ rebuild: () => void;
13
+ setHighlightedPaths: (paths: Set<string>) => void;
14
+ setSelectedPaths: (paths: Set<string>) => void;
15
+ setFocusDirectory: (directory: string | null) => void;
16
+ highlightedPaths: Set<string>;
17
+ selectedPaths: Set<string>;
18
+ focusDirectory: string | null;
19
+ }
20
+ export declare function useCodeCityData({ fileSystemTree, autoUpdate, }: UseCodeCityDataOptions): UseCodeCityDataReturn;
21
+ //# sourceMappingURL=useCodeCityData.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCodeCityData.d.ts","sourceRoot":"","sources":["../../src/hooks/useCodeCityData.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC7E,OAAO,EAA2B,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEpF,MAAM,WAAW,sBAAsB;IACrC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,mBAAmB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAClD,gBAAgB,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC;IAC/C,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,wBAAgB,eAAe,CAAC,EAC9B,cAAc,EACd,UAAiB,GAClB,EAAE,sBAAsB,GAAG,qBAAqB,CAuDhD"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCodeCityData = useCodeCityData;
4
+ const react_1 = require("react");
5
+ const file_city_builder_1 = require("@principal-ai/file-city-builder");
6
+ function useCodeCityData({ fileSystemTree, autoUpdate = true, }) {
7
+ const [cityData, setCityData] = (0, react_1.useState)(null);
8
+ const [isLoading, setIsLoading] = (0, react_1.useState)(false);
9
+ const [error, setError] = (0, react_1.useState)(null);
10
+ // UI state
11
+ const [highlightedPaths, setHighlightedPaths] = (0, react_1.useState)(new Set());
12
+ const [selectedPaths, setSelectedPaths] = (0, react_1.useState)(new Set());
13
+ const [focusDirectory, setFocusDirectory] = (0, react_1.useState)(null);
14
+ // Rebuild city data
15
+ const rebuild = (0, react_1.useMemo)(() => {
16
+ return () => {
17
+ if (!fileSystemTree) {
18
+ setCityData(null);
19
+ setError('No file system tree provided');
20
+ return;
21
+ }
22
+ setIsLoading(true);
23
+ setError(null);
24
+ try {
25
+ // Create a single-version map for the builder
26
+ const versionMap = new Map([['main', fileSystemTree]]);
27
+ const { unionCity } = file_city_builder_1.MultiVersionCityBuilder.build(versionMap);
28
+ setCityData(unionCity);
29
+ }
30
+ catch (err) {
31
+ setError(err instanceof Error ? err.message : 'Failed to build city data');
32
+ setCityData(null);
33
+ }
34
+ finally {
35
+ setIsLoading(false);
36
+ }
37
+ };
38
+ }, [fileSystemTree]);
39
+ // Auto rebuild when dependencies change
40
+ (0, react_1.useEffect)(() => {
41
+ if (autoUpdate) {
42
+ rebuild();
43
+ }
44
+ }, [autoUpdate, rebuild]);
45
+ return {
46
+ cityData,
47
+ isLoading,
48
+ error,
49
+ rebuild,
50
+ setHighlightedPaths,
51
+ setSelectedPaths,
52
+ setFocusDirectory,
53
+ highlightedPaths,
54
+ selectedPaths,
55
+ focusDirectory,
56
+ };
57
+ }
@@ -0,0 +1,14 @@
1
+ export { ArchitectureMapHighlightLayers, type ArchitectureMapHighlightLayersProps, } from './components/ArchitectureMapHighlightLayers';
2
+ export { type LayerRenderStrategy, type LayerItem, type HighlightLayer, } from './render/client/drawLayeredBuildings';
3
+ export { type MapInteractionState, type MapDisplayOptions } from './types/react-types';
4
+ export { filterCityDataForSelectiveRender, filterCityDataForSubdirectory, filterCityDataForMultipleDirectories, } from './builder/cityDataUtils';
5
+ export { createFileColorHighlightLayers, getDefaultFileColorConfig, getFileColorMapping, } from './utils/fileColorHighlightLayers';
6
+ export type { ColorLayerConfig, FileSuffixConfig, FileSuffixColorConfig, } from './utils/fileColorHighlightLayers';
7
+ export type { CityData, CityBuilding, CityDistrict, SelectiveRenderOptions, Bounds2D, Position3D, } from '@principal-ai/file-city-builder';
8
+ export { MultiVersionCityBuilder } from '@principal-ai/file-city-builder';
9
+ export { useCodeCityData } from './hooks/useCodeCityData';
10
+ export type { UseCodeCityDataOptions, UseCodeCityDataReturn } from './hooks/useCodeCityData';
11
+ export type { FileTree } from '@principal-ai/file-city-builder';
12
+ export { CityViewWithReactFlow, type CityViewWithReactFlowProps, } from './components/CityViewWithReactFlow';
13
+ export { ThemeProvider, useTheme } from '@principal-ade/industry-theme';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,8BAA8B,EAC9B,KAAK,mCAAmC,GACzC,MAAM,6CAA6C,CAAC;AAGrD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGvF,OAAO,EACL,gCAAgC,EAChC,6BAA6B,EAC7B,oCAAoC,GACrC,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAE1C,YAAY,EACV,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAG1C,YAAY,EACV,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,sBAAsB,EACtB,QAAQ,EACR,UAAU,GACX,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAG7F,YAAY,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAGhE,OAAO,EACL,qBAAqB,EACrB,KAAK,0BAA0B,GAChC,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useTheme = exports.ThemeProvider = exports.CityViewWithReactFlow = exports.useCodeCityData = exports.MultiVersionCityBuilder = exports.getFileColorMapping = exports.getDefaultFileColorConfig = exports.createFileColorHighlightLayers = exports.filterCityDataForMultipleDirectories = exports.filterCityDataForSubdirectory = exports.filterCityDataForSelectiveRender = exports.ArchitectureMapHighlightLayers = void 0;
4
+ // Main component export
5
+ var ArchitectureMapHighlightLayers_1 = require("./components/ArchitectureMapHighlightLayers");
6
+ Object.defineProperty(exports, "ArchitectureMapHighlightLayers", { enumerable: true, get: function () { return ArchitectureMapHighlightLayers_1.ArchitectureMapHighlightLayers; } });
7
+ // Utility functions
8
+ var cityDataUtils_1 = require("./builder/cityDataUtils");
9
+ Object.defineProperty(exports, "filterCityDataForSelectiveRender", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForSelectiveRender; } });
10
+ Object.defineProperty(exports, "filterCityDataForSubdirectory", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForSubdirectory; } });
11
+ Object.defineProperty(exports, "filterCityDataForMultipleDirectories", { enumerable: true, get: function () { return cityDataUtils_1.filterCityDataForMultipleDirectories; } });
12
+ // File color highlight layer utilities
13
+ var fileColorHighlightLayers_1 = require("./utils/fileColorHighlightLayers");
14
+ Object.defineProperty(exports, "createFileColorHighlightLayers", { enumerable: true, get: function () { return fileColorHighlightLayers_1.createFileColorHighlightLayers; } });
15
+ Object.defineProperty(exports, "getDefaultFileColorConfig", { enumerable: true, get: function () { return fileColorHighlightLayers_1.getDefaultFileColorConfig; } });
16
+ Object.defineProperty(exports, "getFileColorMapping", { enumerable: true, get: function () { return fileColorHighlightLayers_1.getFileColorMapping; } });
17
+ // Re-export MultiVersionCityBuilder which was requested
18
+ var file_city_builder_1 = require("@principal-ai/file-city-builder");
19
+ Object.defineProperty(exports, "MultiVersionCityBuilder", { enumerable: true, get: function () { return file_city_builder_1.MultiVersionCityBuilder; } });
20
+ // Export the useCodeCityData hook
21
+ var useCodeCityData_1 = require("./hooks/useCodeCityData");
22
+ Object.defineProperty(exports, "useCodeCityData", { enumerable: true, get: function () { return useCodeCityData_1.useCodeCityData; } });
23
+ // Export React Flow based city view component
24
+ var CityViewWithReactFlow_1 = require("./components/CityViewWithReactFlow");
25
+ Object.defineProperty(exports, "CityViewWithReactFlow", { enumerable: true, get: function () { return CityViewWithReactFlow_1.CityViewWithReactFlow; } });
26
+ // Re-export theme utilities for consumers
27
+ var industry_theme_1 = require("@principal-ade/industry-theme");
28
+ Object.defineProperty(exports, "ThemeProvider", { enumerable: true, get: function () { return industry_theme_1.ThemeProvider; } });
29
+ Object.defineProperty(exports, "useTheme", { enumerable: true, get: function () { return industry_theme_1.useTheme; } });
@@ -0,0 +1,51 @@
1
+ import { CityBuilding, CityDistrict } from '@principal-ai/file-city-builder';
2
+ export type LayerRenderStrategy = 'border' | 'fill' | 'glow' | 'pattern' | 'cover' | 'icon' | 'custom';
3
+ export interface LayerItem {
4
+ path: string;
5
+ type: 'file' | 'directory';
6
+ renderStrategy?: LayerRenderStrategy;
7
+ coverOptions?: {
8
+ opacity?: number;
9
+ image?: string;
10
+ text?: string;
11
+ textSize?: number;
12
+ backgroundColor?: string;
13
+ borderRadius?: number;
14
+ icon?: string;
15
+ iconSize?: number;
16
+ };
17
+ customRender?: (ctx: CanvasRenderingContext2D, bounds: {
18
+ x: number;
19
+ y: number;
20
+ width: number;
21
+ height: number;
22
+ }, scale: number) => void;
23
+ }
24
+ export interface HighlightLayer {
25
+ id: string;
26
+ name: string;
27
+ enabled: boolean;
28
+ color: string;
29
+ opacity?: number;
30
+ borderWidth?: number;
31
+ priority: number;
32
+ items: LayerItem[];
33
+ dynamic?: boolean;
34
+ }
35
+ export declare function drawGrid(ctx: CanvasRenderingContext2D, width: number, height: number, gridSize: number): void;
36
+ export declare function drawLayeredDistricts(ctx: CanvasRenderingContext2D, districts: CityDistrict[], worldToCanvas: (x: number, z: number) => {
37
+ x: number;
38
+ y: number;
39
+ }, scale: number, // This includes the zoom scale for text proportionality
40
+ layers: HighlightLayer[], hoveredDistrict?: CityDistrict | null, fullSize?: boolean, defaultDirectoryColor?: string, layoutConfig?: {
41
+ paddingTop: number;
42
+ paddingBottom: number;
43
+ paddingLeft: number;
44
+ paddingRight: number;
45
+ }, abstractedPaths?: Set<string>, // Paths of directories that are abstracted (have covers)
46
+ showDirectoryLabels?: boolean, borderRadius?: number): void;
47
+ export declare function drawLayeredBuildings(ctx: CanvasRenderingContext2D, buildings: CityBuilding[], worldToCanvas: (x: number, z: number) => {
48
+ x: number;
49
+ y: number;
50
+ }, scale: number, layers: HighlightLayer[], hoveredBuilding?: CityBuilding | null, defaultBuildingColor?: string, showFileNames?: boolean, hoverBorderColor?: string, disableOpacityDimming?: boolean, showFileTypeIcons?: boolean, borderRadius?: number): void;
51
+ //# sourceMappingURL=drawLayeredBuildings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drawLayeredBuildings.d.ts","sourceRoot":"","sources":["../../../src/render/client/drawLayeredBuildings.ts"],"names":[],"mappings":"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"}