driftdetect-galaxy 0.4.2
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/audio/index.d.ts +8 -0
- package/dist/audio/index.d.ts.map +1 -0
- package/dist/audio/index.js +8 -0
- package/dist/audio/index.js.map +1 -0
- package/dist/audio/sound-effects.d.ts +78 -0
- package/dist/audio/sound-effects.d.ts.map +1 -0
- package/dist/audio/sound-effects.js +660 -0
- package/dist/audio/sound-effects.js.map +1 -0
- package/dist/audio/useGalaxySound.d.ts +70 -0
- package/dist/audio/useGalaxySound.d.ts.map +1 -0
- package/dist/audio/useGalaxySound.js +127 -0
- package/dist/audio/useGalaxySound.js.map +1 -0
- package/dist/components/canvas/GalaxyCamera.d.ts +16 -0
- package/dist/components/canvas/GalaxyCamera.d.ts.map +1 -0
- package/dist/components/canvas/GalaxyCamera.js +74 -0
- package/dist/components/canvas/GalaxyCamera.js.map +1 -0
- package/dist/components/canvas/GalaxyCanvas.d.ts +16 -0
- package/dist/components/canvas/GalaxyCanvas.d.ts.map +1 -0
- package/dist/components/canvas/GalaxyCanvas.js +104 -0
- package/dist/components/canvas/GalaxyCanvas.js.map +1 -0
- package/dist/components/canvas/GalaxyLighting.d.ts +8 -0
- package/dist/components/canvas/GalaxyLighting.d.ts.map +1 -0
- package/dist/components/canvas/GalaxyLighting.js +36 -0
- package/dist/components/canvas/GalaxyLighting.js.map +1 -0
- package/dist/components/canvas/index.d.ts +11 -0
- package/dist/components/canvas/index.d.ts.map +1 -0
- package/dist/components/canvas/index.js +9 -0
- package/dist/components/canvas/index.js.map +1 -0
- package/dist/components/connections/DataPathLane.d.ts +26 -0
- package/dist/components/connections/DataPathLane.d.ts.map +1 -0
- package/dist/components/connections/DataPathLane.js +71 -0
- package/dist/components/connections/DataPathLane.js.map +1 -0
- package/dist/components/connections/TableRelationship.d.ts +19 -0
- package/dist/components/connections/TableRelationship.d.ts.map +1 -0
- package/dist/components/connections/TableRelationship.js +46 -0
- package/dist/components/connections/TableRelationship.js.map +1 -0
- package/dist/components/connections/index.d.ts +10 -0
- package/dist/components/connections/index.d.ts.map +1 -0
- package/dist/components/connections/index.js +8 -0
- package/dist/components/connections/index.js.map +1 -0
- package/dist/components/effects/AccessPulse.d.ts +23 -0
- package/dist/components/effects/AccessPulse.d.ts.map +1 -0
- package/dist/components/effects/AccessPulse.js +72 -0
- package/dist/components/effects/AccessPulse.js.map +1 -0
- package/dist/components/effects/GalaxyBloom.d.ts +8 -0
- package/dist/components/effects/GalaxyBloom.d.ts.map +1 -0
- package/dist/components/effects/GalaxyBloom.js +23 -0
- package/dist/components/effects/GalaxyBloom.js.map +1 -0
- package/dist/components/effects/StarField.d.ts +18 -0
- package/dist/components/effects/StarField.d.ts.map +1 -0
- package/dist/components/effects/StarField.js +86 -0
- package/dist/components/effects/StarField.js.map +1 -0
- package/dist/components/effects/index.d.ts +11 -0
- package/dist/components/effects/index.d.ts.map +1 -0
- package/dist/components/effects/index.js +9 -0
- package/dist/components/effects/index.js.map +1 -0
- package/dist/components/index.d.ts +11 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +16 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/nodes/EntryPointStation.d.ts +22 -0
- package/dist/components/nodes/EntryPointStation.d.ts.map +1 -0
- package/dist/components/nodes/EntryPointStation.js +120 -0
- package/dist/components/nodes/EntryPointStation.js.map +1 -0
- package/dist/components/nodes/FieldMoon.d.ts +30 -0
- package/dist/components/nodes/FieldMoon.d.ts.map +1 -0
- package/dist/components/nodes/FieldMoon.js +92 -0
- package/dist/components/nodes/FieldMoon.js.map +1 -0
- package/dist/components/nodes/TablePlanet.d.ts +22 -0
- package/dist/components/nodes/TablePlanet.d.ts.map +1 -0
- package/dist/components/nodes/TablePlanet.js +101 -0
- package/dist/components/nodes/TablePlanet.js.map +1 -0
- package/dist/components/nodes/index.d.ts +12 -0
- package/dist/components/nodes/index.d.ts.map +1 -0
- package/dist/components/nodes/index.js +9 -0
- package/dist/components/nodes/index.js.map +1 -0
- package/dist/components/ui/ControlsPanel.d.ts +7 -0
- package/dist/components/ui/ControlsPanel.d.ts.map +1 -0
- package/dist/components/ui/ControlsPanel.js +59 -0
- package/dist/components/ui/ControlsPanel.js.map +1 -0
- package/dist/components/ui/DetailsPanel.d.ts +8 -0
- package/dist/components/ui/DetailsPanel.d.ts.map +1 -0
- package/dist/components/ui/DetailsPanel.js +44 -0
- package/dist/components/ui/DetailsPanel.js.map +1 -0
- package/dist/components/ui/SearchOverlay.d.ts +7 -0
- package/dist/components/ui/SearchOverlay.d.ts.map +1 -0
- package/dist/components/ui/SearchOverlay.js +68 -0
- package/dist/components/ui/SearchOverlay.js.map +1 -0
- package/dist/components/ui/SecurityPanel.d.ts +8 -0
- package/dist/components/ui/SecurityPanel.d.ts.map +1 -0
- package/dist/components/ui/SecurityPanel.js +65 -0
- package/dist/components/ui/SecurityPanel.js.map +1 -0
- package/dist/components/ui/StatsOverlay.d.ts +7 -0
- package/dist/components/ui/StatsOverlay.d.ts.map +1 -0
- package/dist/components/ui/StatsOverlay.js +29 -0
- package/dist/components/ui/StatsOverlay.js.map +1 -0
- package/dist/components/ui/index.d.ts +11 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +11 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/constants/index.d.ts +244 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +289 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/hooks/index.d.ts +10 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +8 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useAccessStream.d.ts +23 -0
- package/dist/hooks/useAccessStream.d.ts.map +1 -0
- package/dist/hooks/useAccessStream.js +86 -0
- package/dist/hooks/useAccessStream.js.map +1 -0
- package/dist/hooks/useGalaxyData.d.ts +83 -0
- package/dist/hooks/useGalaxyData.d.ts.map +1 -0
- package/dist/hooks/useGalaxyData.js +176 -0
- package/dist/hooks/useGalaxyData.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/store/galaxy-store.d.ts +85 -0
- package/dist/store/galaxy-store.d.ts.map +1 -0
- package/dist/store/galaxy-store.js +254 -0
- package/dist/store/galaxy-store.js.map +1 -0
- package/dist/store/index.d.ts +5 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +5 -0
- package/dist/store/index.js.map +1 -0
- package/dist/types/index.d.ts +337 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/color-utils.d.ts +100 -0
- package/dist/utils/color-utils.d.ts.map +1 -0
- package/dist/utils/color-utils.js +217 -0
- package/dist/utils/color-utils.js.map +1 -0
- package/dist/utils/geometry-utils.d.ts +97 -0
- package/dist/utils/geometry-utils.d.ts.map +1 -0
- package/dist/utils/geometry-utils.js +245 -0
- package/dist/utils/geometry-utils.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/layout-engine.d.ts +40 -0
- package/dist/utils/layout-engine.d.ts.map +1 -0
- package/dist/utils/layout-engine.js +343 -0
- package/dist/utils/layout-engine.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* EntryPointStation Component
|
|
4
|
+
*
|
|
5
|
+
* Renders an API entry point as a space station at the galaxy edge.
|
|
6
|
+
* Color indicates authentication level (red = public, green = protected).
|
|
7
|
+
*/
|
|
8
|
+
import { useRef, useMemo, useState, useCallback } from 'react';
|
|
9
|
+
import { useFrame } from '@react-three/fiber';
|
|
10
|
+
import { Html } from '@react-three/drei';
|
|
11
|
+
import * as THREE from 'three';
|
|
12
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
13
|
+
import { getAuthLevelThreeColor, getSecurityTierThreeColor, } from '../../utils/color-utils.js';
|
|
14
|
+
import { toThreeVector } from '../../utils/geometry-utils.js';
|
|
15
|
+
import { ENTRY_POINT_SIZE, ANIMATION_CONFIG, LABEL_CONFIG } from '../../constants/index.js';
|
|
16
|
+
import { useGalaxySound } from '../../audio/index.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// HTTP Method Colors
|
|
19
|
+
// ============================================================================
|
|
20
|
+
const METHOD_COLORS = {
|
|
21
|
+
GET: '#22c55e', // Green
|
|
22
|
+
POST: '#3b82f6', // Blue
|
|
23
|
+
PUT: '#f59e0b', // Amber
|
|
24
|
+
PATCH: '#8b5cf6', // Purple
|
|
25
|
+
DELETE: '#ef4444', // Red
|
|
26
|
+
ALL: '#6b7280', // Gray
|
|
27
|
+
};
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Component
|
|
30
|
+
// ============================================================================
|
|
31
|
+
export function EntryPointStation({ entryPoint, isSelected = false, isHovered = false, onClick, onPointerOver, onPointerOut, }) {
|
|
32
|
+
const groupRef = useRef(null);
|
|
33
|
+
const [localHover, setLocalHover] = useState(false);
|
|
34
|
+
const { display, viewMode } = useGalaxyStore();
|
|
35
|
+
const { play, playAlert } = useGalaxySound({ debounceMs: 100 });
|
|
36
|
+
// Sound handlers
|
|
37
|
+
const handlePointerOver = useCallback((e) => {
|
|
38
|
+
e.stopPropagation();
|
|
39
|
+
setLocalHover(true);
|
|
40
|
+
// Play alert sound for public endpoints, regular hover otherwise
|
|
41
|
+
if (entryPoint.authLevel === 'public') {
|
|
42
|
+
playAlert('medium');
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
play('hover');
|
|
46
|
+
}
|
|
47
|
+
onPointerOver?.();
|
|
48
|
+
}, [entryPoint.authLevel, play, playAlert, onPointerOver]);
|
|
49
|
+
const handlePointerOut = useCallback((e) => {
|
|
50
|
+
e.stopPropagation();
|
|
51
|
+
setLocalHover(false);
|
|
52
|
+
onPointerOut?.();
|
|
53
|
+
}, [onPointerOut]);
|
|
54
|
+
const handleClick = useCallback(() => {
|
|
55
|
+
// Play different sounds based on security tier
|
|
56
|
+
if (entryPoint.securityTier === 'P0') {
|
|
57
|
+
playAlert('critical');
|
|
58
|
+
}
|
|
59
|
+
else if (entryPoint.securityTier === 'P1') {
|
|
60
|
+
playAlert('high');
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
play('select');
|
|
64
|
+
}
|
|
65
|
+
onClick?.();
|
|
66
|
+
}, [entryPoint.securityTier, play, playAlert, onClick]);
|
|
67
|
+
// Get colors
|
|
68
|
+
const colors = useMemo(() => {
|
|
69
|
+
const authColor = getAuthLevelThreeColor(entryPoint.authLevel);
|
|
70
|
+
const tierColor = getSecurityTierThreeColor(entryPoint.securityTier);
|
|
71
|
+
const methodColor = new THREE.Color(METHOD_COLORS[entryPoint.method] ?? METHOD_COLORS['ALL'] ?? '#6b7280');
|
|
72
|
+
return {
|
|
73
|
+
auth: authColor,
|
|
74
|
+
tier: tierColor,
|
|
75
|
+
method: methodColor,
|
|
76
|
+
};
|
|
77
|
+
}, [entryPoint.authLevel, entryPoint.securityTier, entryPoint.method]);
|
|
78
|
+
// Position
|
|
79
|
+
const position = useMemo(() => {
|
|
80
|
+
return entryPoint.position ? toThreeVector(entryPoint.position) : new THREE.Vector3(0, 0, 0);
|
|
81
|
+
}, [entryPoint.position]);
|
|
82
|
+
// Animation
|
|
83
|
+
useFrame((state, delta) => {
|
|
84
|
+
if (!groupRef.current)
|
|
85
|
+
return;
|
|
86
|
+
// Slow rotation
|
|
87
|
+
groupRef.current.rotation.y += 0.005 * display.animationSpeed;
|
|
88
|
+
// Scale for hover/selection
|
|
89
|
+
const targetScale = isSelected
|
|
90
|
+
? ANIMATION_CONFIG.SELECTION_SCALE
|
|
91
|
+
: isHovered || localHover
|
|
92
|
+
? ANIMATION_CONFIG.HOVER_SCALE
|
|
93
|
+
: 1;
|
|
94
|
+
groupRef.current.scale.lerp(new THREE.Vector3(targetScale, targetScale, targetScale), 0.1);
|
|
95
|
+
});
|
|
96
|
+
// Highlight public endpoints in security mode
|
|
97
|
+
const isHighlighted = viewMode === 'security' && entryPoint.authLevel === 'public';
|
|
98
|
+
const scale = ENTRY_POINT_SIZE.SCALE;
|
|
99
|
+
return (_jsxs("group", { ref: groupRef, position: position, onClick: handleClick, onPointerOver: handlePointerOver, onPointerOut: handlePointerOut, children: [_jsxs("mesh", { children: [_jsx("octahedronGeometry", { args: [scale, 0] }), _jsx("meshStandardMaterial", { color: colors.auth, emissive: colors.auth, emissiveIntensity: isHighlighted ? 0.8 : 0.3, roughness: 0.3, metalness: 0.7 })] }), _jsxs("mesh", { children: [_jsx("octahedronGeometry", { args: [scale * 0.5, 0] }), _jsx("meshStandardMaterial", { color: colors.method, emissive: colors.method, emissiveIntensity: 0.5, roughness: 0.2, metalness: 0.8 })] }), _jsxs("mesh", { rotation: [Math.PI / 2, 0, 0], children: [_jsx("torusGeometry", { args: [scale * 1.5, scale * 0.1, 8, 32] }), _jsx("meshStandardMaterial", { color: colors.tier, emissive: colors.tier, emissiveIntensity: 0.4, roughness: 0.4, metalness: 0.6 })] }), isSelected && (_jsxs("mesh", { rotation: [0, 0, Math.PI / 4], children: [_jsx("torusGeometry", { args: [scale * 2, scale * 0.05, 8, 32] }), _jsx("meshBasicMaterial", { color: "#ffffff", transparent: true, opacity: 0.8 })] })), entryPoint.authLevel === 'public' && display.enableBloom && (_jsxs("mesh", { children: [_jsx("sphereGeometry", { args: [scale * 2, 16, 16] }), _jsx("meshBasicMaterial", { color: "#ff3333", transparent: true, opacity: 0.1, side: THREE.BackSide })] })), display.showLabels && (isHovered || localHover || isSelected) && (_jsx(Html, { position: [0, scale * 2, 0], center: true, style: {
|
|
100
|
+
pointerEvents: 'none',
|
|
101
|
+
userSelect: 'none',
|
|
102
|
+
}, children: _jsxs("div", { style: {
|
|
103
|
+
background: `rgba(15, 23, 42, ${LABEL_CONFIG.BG_OPACITY})`,
|
|
104
|
+
color: '#f8fafc',
|
|
105
|
+
padding: `${LABEL_CONFIG.PADDING}px ${LABEL_CONFIG.PADDING * 2}px`,
|
|
106
|
+
borderRadius: '4px',
|
|
107
|
+
fontSize: `${LABEL_CONFIG.FONT_SIZE}px`,
|
|
108
|
+
fontFamily: LABEL_CONFIG.FONT_FAMILY,
|
|
109
|
+
whiteSpace: 'nowrap',
|
|
110
|
+
border: `1px solid ${colors.auth.getStyle()}`,
|
|
111
|
+
maxWidth: '250px',
|
|
112
|
+
}, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: '6px' }, children: [_jsx("span", { style: {
|
|
113
|
+
background: METHOD_COLORS[entryPoint.method],
|
|
114
|
+
padding: '2px 6px',
|
|
115
|
+
borderRadius: '3px',
|
|
116
|
+
fontSize: '10px',
|
|
117
|
+
fontWeight: 700,
|
|
118
|
+
}, children: entryPoint.method }), _jsx("span", { style: { fontWeight: 600, overflow: 'hidden', textOverflow: 'ellipsis' }, children: entryPoint.path })] }), _jsxs("div", { style: { fontSize: '10px', opacity: 0.7, marginTop: '4px' }, children: [entryPoint.framework, " \u2022 ", entryPoint.authLevel, entryPoint.authLevel === 'public' && (_jsx("span", { style: { color: '#ef4444', marginLeft: '4px' }, children: "\u26A0\uFE0F PUBLIC" }))] }), _jsxs("div", { style: { fontSize: '10px', opacity: 0.7 }, children: ["Reaches ", entryPoint.reachableTables.length, " tables"] })] }) }))] }));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=EntryPointStation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntryPointStation.js","sourceRoot":"","sources":["../../../src/components/nodes/EntryPointStation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FieldMoon Component
|
|
3
|
+
*
|
|
4
|
+
* Renders a database field as a small moon orbiting its parent table.
|
|
5
|
+
* Sensitive fields glow brighter and are larger.
|
|
6
|
+
*/
|
|
7
|
+
import type { FieldNode, Vector3D } from '../../types/index.js';
|
|
8
|
+
export interface FieldMoonProps {
|
|
9
|
+
/** Field data */
|
|
10
|
+
field: FieldNode;
|
|
11
|
+
/** Parent table center position */
|
|
12
|
+
parentPosition: Vector3D;
|
|
13
|
+
/** Parent table radius */
|
|
14
|
+
parentRadius: number;
|
|
15
|
+
/** Index for orbit positioning */
|
|
16
|
+
orbitIndex: number;
|
|
17
|
+
/** Total fields for orbit spacing */
|
|
18
|
+
totalFields: number;
|
|
19
|
+
/** Whether this field is selected */
|
|
20
|
+
isSelected?: boolean;
|
|
21
|
+
/** Whether this field is hovered */
|
|
22
|
+
isHovered?: boolean;
|
|
23
|
+
/** Click handler */
|
|
24
|
+
onClick?: () => void;
|
|
25
|
+
/** Hover handlers */
|
|
26
|
+
onPointerOver?: () => void;
|
|
27
|
+
onPointerOut?: () => void;
|
|
28
|
+
}
|
|
29
|
+
export declare function FieldMoon({ field, parentPosition, parentRadius, orbitIndex, totalFields, isSelected, isHovered, onClick, onPointerOver, onPointerOut, }: FieldMoonProps): import("react/jsx-runtime").JSX.Element | null;
|
|
30
|
+
//# sourceMappingURL=FieldMoon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldMoon.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/FieldMoon.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAahE,MAAM,WAAW,cAAc;IAC7B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,mCAAmC;IACnC,cAAc,EAAE,QAAQ,CAAC;IACzB,0BAA0B;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAMD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAkB,EAClB,SAAiB,EACjB,OAAO,EACP,aAAa,EACb,YAAY,GACb,EAAE,cAAc,kDAuIhB"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* FieldMoon Component
|
|
4
|
+
*
|
|
5
|
+
* Renders a database field as a small moon orbiting its parent table.
|
|
6
|
+
* Sensitive fields glow brighter and are larger.
|
|
7
|
+
*/
|
|
8
|
+
import { useRef, useMemo } from 'react';
|
|
9
|
+
import { useFrame } from '@react-three/fiber';
|
|
10
|
+
import { Sphere, Html } from '@react-three/drei';
|
|
11
|
+
import * as THREE from 'three';
|
|
12
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
13
|
+
import { getSensitivityThreeColor, getSensitivityEmissive, } from '../../utils/color-utils.js';
|
|
14
|
+
import { calculateFieldSize, getOrbitPosition } from '../../utils/geometry-utils.js';
|
|
15
|
+
import { FIELD_SIZE, ANIMATION_CONFIG, LABEL_CONFIG } from '../../constants/index.js';
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Component
|
|
18
|
+
// ============================================================================
|
|
19
|
+
export function FieldMoon({ field, parentPosition, parentRadius, orbitIndex, totalFields, isSelected = false, isHovered = false, onClick, onPointerOver, onPointerOut, }) {
|
|
20
|
+
const meshRef = useRef(null);
|
|
21
|
+
const orbitAngleRef = useRef((orbitIndex / totalFields) * Math.PI * 2 + Math.random() * 0.5);
|
|
22
|
+
const { display, viewMode } = useGalaxyStore();
|
|
23
|
+
// Calculate size based on sensitivity and access
|
|
24
|
+
const size = useMemo(() => {
|
|
25
|
+
const isSensitive = field.sensitivity !== 'public' && field.sensitivity !== 'low';
|
|
26
|
+
return calculateFieldSize(field.accessCount, isSensitive, FIELD_SIZE.RADIUS);
|
|
27
|
+
}, [field.accessCount, field.sensitivity]);
|
|
28
|
+
// Get colors
|
|
29
|
+
const colors = useMemo(() => {
|
|
30
|
+
const mainColor = getSensitivityThreeColor(field.sensitivity);
|
|
31
|
+
const emissiveIntensity = getSensitivityEmissive(field.sensitivity);
|
|
32
|
+
return {
|
|
33
|
+
main: mainColor,
|
|
34
|
+
emissive: mainColor,
|
|
35
|
+
emissiveIntensity,
|
|
36
|
+
};
|
|
37
|
+
}, [field.sensitivity]);
|
|
38
|
+
// Calculate orbit radius based on parent size
|
|
39
|
+
const orbitRadius = parentRadius + FIELD_SIZE.ORBIT_RADIUS;
|
|
40
|
+
// Orbit tilt based on index (creates 3D distribution)
|
|
41
|
+
const orbitTilt = useMemo(() => {
|
|
42
|
+
return ((orbitIndex % 3) - 1) * 0.3;
|
|
43
|
+
}, [orbitIndex]);
|
|
44
|
+
// Animation - orbit around parent
|
|
45
|
+
useFrame((state, delta) => {
|
|
46
|
+
if (!meshRef.current)
|
|
47
|
+
return;
|
|
48
|
+
// Update orbit angle
|
|
49
|
+
orbitAngleRef.current += FIELD_SIZE.ORBIT_SPEED * delta * display.animationSpeed;
|
|
50
|
+
// Calculate position on orbit
|
|
51
|
+
const pos = getOrbitPosition(parentPosition, orbitRadius, orbitAngleRef.current, orbitTilt);
|
|
52
|
+
meshRef.current.position.set(pos.x, pos.y, pos.z);
|
|
53
|
+
// Self rotation
|
|
54
|
+
meshRef.current.rotation.y += 0.02 * display.animationSpeed;
|
|
55
|
+
// Scale for hover/selection
|
|
56
|
+
const targetScale = isSelected
|
|
57
|
+
? ANIMATION_CONFIG.SELECTION_SCALE
|
|
58
|
+
: isHovered
|
|
59
|
+
? ANIMATION_CONFIG.HOVER_SCALE
|
|
60
|
+
: 1;
|
|
61
|
+
meshRef.current.scale.lerp(new THREE.Vector3(targetScale, targetScale, targetScale), 0.1);
|
|
62
|
+
});
|
|
63
|
+
// Determine if highlighted in security mode
|
|
64
|
+
const isHighlighted = viewMode === 'security' &&
|
|
65
|
+
(field.sensitivity === 'critical' || field.sensitivity === 'high');
|
|
66
|
+
// Don't render if fields are hidden
|
|
67
|
+
if (!display.showFields)
|
|
68
|
+
return null;
|
|
69
|
+
return (_jsxs("group", { children: [_jsx(Sphere, { ref: meshRef, args: [size, 16, 16], onClick: (e) => {
|
|
70
|
+
e.stopPropagation();
|
|
71
|
+
onClick?.();
|
|
72
|
+
}, onPointerOver: (e) => {
|
|
73
|
+
e.stopPropagation();
|
|
74
|
+
onPointerOver?.();
|
|
75
|
+
}, onPointerOut: (e) => {
|
|
76
|
+
e.stopPropagation();
|
|
77
|
+
onPointerOut?.();
|
|
78
|
+
}, children: _jsx("meshStandardMaterial", { color: colors.main, emissive: colors.emissive, emissiveIntensity: isHighlighted ? colors.emissiveIntensity * 3 : colors.emissiveIntensity, roughness: 0.5, metalness: 0.5 }) }), display.showLabels && isHovered && meshRef.current && (_jsx(Html, { position: meshRef.current.position.clone().add(new THREE.Vector3(0, size + 0.3, 0)), center: true, style: {
|
|
79
|
+
pointerEvents: 'none',
|
|
80
|
+
userSelect: 'none',
|
|
81
|
+
}, children: _jsxs("div", { style: {
|
|
82
|
+
background: `rgba(15, 23, 42, ${LABEL_CONFIG.BG_OPACITY})`,
|
|
83
|
+
color: '#f8fafc',
|
|
84
|
+
padding: `${LABEL_CONFIG.PADDING}px ${LABEL_CONFIG.PADDING * 2}px`,
|
|
85
|
+
borderRadius: '4px',
|
|
86
|
+
fontSize: '10px',
|
|
87
|
+
fontFamily: LABEL_CONFIG.FONT_FAMILY,
|
|
88
|
+
whiteSpace: 'nowrap',
|
|
89
|
+
border: `1px solid ${colors.main.getStyle()}`,
|
|
90
|
+
}, children: [_jsx("div", { style: { fontWeight: 600 }, children: field.name }), _jsxs("div", { style: { opacity: 0.7 }, children: [field.dataType, " \u2022 ", field.sensitivity] }), field.isPrimaryKey && _jsx("div", { style: { color: '#fbbf24' }, children: "\uD83D\uDD11 Primary Key" }), field.isForeignKey && _jsx("div", { style: { color: '#60a5fa' }, children: "\uD83D\uDD17 Foreign Key" }), !field.isTested && _jsx("div", { style: { color: '#ef4444' }, children: "\u26A0\uFE0F Untested" })] }) }))] }));
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=FieldMoon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldMoon.js","sourceRoot":"","sources":["../../../src/components/nodes/FieldMoon.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TablePlanet Component
|
|
3
|
+
*
|
|
4
|
+
* Renders a database table as a 3D planet/sphere in the galaxy.
|
|
5
|
+
* Size reflects importance, color reflects sensitivity level.
|
|
6
|
+
*/
|
|
7
|
+
import type { TableNode } from '../../types/index.js';
|
|
8
|
+
export interface TablePlanetProps {
|
|
9
|
+
/** Table data */
|
|
10
|
+
table: TableNode;
|
|
11
|
+
/** Whether this table is selected */
|
|
12
|
+
isSelected?: boolean;
|
|
13
|
+
/** Whether this table is hovered */
|
|
14
|
+
isHovered?: boolean;
|
|
15
|
+
/** Click handler */
|
|
16
|
+
onClick?: () => void;
|
|
17
|
+
/** Hover handlers */
|
|
18
|
+
onPointerOver?: () => void;
|
|
19
|
+
onPointerOut?: () => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function TablePlanet({ table, isSelected, isHovered, onClick, onPointerOver, onPointerOut, }: TablePlanetProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=TablePlanet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePlanet.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/TablePlanet.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAetD,MAAM,WAAW,gBAAgB;IAC/B,iBAAiB;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,qCAAqC;IACrC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oCAAoC;IACpC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,qBAAqB;IACrB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAMD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,UAAkB,EAClB,SAAiB,EACjB,OAAO,EACP,aAAa,EACb,YAAY,GACb,EAAE,gBAAgB,2CAuKlB"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* TablePlanet Component
|
|
4
|
+
*
|
|
5
|
+
* Renders a database table as a 3D planet/sphere in the galaxy.
|
|
6
|
+
* Size reflects importance, color reflects sensitivity level.
|
|
7
|
+
*/
|
|
8
|
+
import { useRef, useMemo, useState, useCallback } from 'react';
|
|
9
|
+
import { useFrame } from '@react-three/fiber';
|
|
10
|
+
import { Sphere, Html } from '@react-three/drei';
|
|
11
|
+
import * as THREE from 'three';
|
|
12
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
13
|
+
import { getSensitivityThreeColor, getSensitivityEmissive, getClusterThreeColor, } from '../../utils/color-utils.js';
|
|
14
|
+
import { calculateTableSize, toThreeVector } from '../../utils/geometry-utils.js';
|
|
15
|
+
import { TABLE_SIZE, ANIMATION_CONFIG, LABEL_CONFIG } from '../../constants/index.js';
|
|
16
|
+
import { useGalaxySound } from '../../audio/index.js';
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Component
|
|
19
|
+
// ============================================================================
|
|
20
|
+
export function TablePlanet({ table, isSelected = false, isHovered = false, onClick, onPointerOver, onPointerOut, }) {
|
|
21
|
+
const meshRef = useRef(null);
|
|
22
|
+
const glowRef = useRef(null);
|
|
23
|
+
const [localHover, setLocalHover] = useState(false);
|
|
24
|
+
const { display, viewMode } = useGalaxyStore();
|
|
25
|
+
const { play, playVaried } = useGalaxySound({ debounceMs: 100 });
|
|
26
|
+
// Sound handlers
|
|
27
|
+
const handlePointerOver = useCallback((e) => {
|
|
28
|
+
e.stopPropagation();
|
|
29
|
+
setLocalHover(true);
|
|
30
|
+
// Play hover sound with pitch based on sensitivity
|
|
31
|
+
const pitchVariation = table.sensitivity === 'critical' ? 0.3 : 0.1;
|
|
32
|
+
playVaried('hover', pitchVariation);
|
|
33
|
+
onPointerOver?.();
|
|
34
|
+
}, [table.sensitivity, playVaried, onPointerOver]);
|
|
35
|
+
const handlePointerOut = useCallback((e) => {
|
|
36
|
+
e.stopPropagation();
|
|
37
|
+
setLocalHover(false);
|
|
38
|
+
onPointerOut?.();
|
|
39
|
+
}, [onPointerOut]);
|
|
40
|
+
const handleClick = useCallback(() => {
|
|
41
|
+
play('select');
|
|
42
|
+
onClick?.();
|
|
43
|
+
}, [play, onClick]);
|
|
44
|
+
// Calculate size based on metrics
|
|
45
|
+
const baseSize = useMemo(() => {
|
|
46
|
+
return calculateTableSize(table.rowCount, table.accessCount, TABLE_SIZE.MIN_RADIUS, TABLE_SIZE.MAX_RADIUS);
|
|
47
|
+
}, [table.rowCount, table.accessCount]);
|
|
48
|
+
// Get colors based on sensitivity
|
|
49
|
+
const colors = useMemo(() => {
|
|
50
|
+
const mainColor = getSensitivityThreeColor(table.sensitivity);
|
|
51
|
+
const emissiveIntensity = getSensitivityEmissive(table.sensitivity);
|
|
52
|
+
const clusterColor = getClusterThreeColor(table.cluster || 'other');
|
|
53
|
+
return {
|
|
54
|
+
main: mainColor,
|
|
55
|
+
emissive: mainColor,
|
|
56
|
+
emissiveIntensity,
|
|
57
|
+
cluster: clusterColor,
|
|
58
|
+
};
|
|
59
|
+
}, [table.sensitivity, table.cluster]);
|
|
60
|
+
// Position
|
|
61
|
+
const position = useMemo(() => {
|
|
62
|
+
return table.position ? toThreeVector(table.position) : new THREE.Vector3(0, 0, 0);
|
|
63
|
+
}, [table.position]);
|
|
64
|
+
// Animation
|
|
65
|
+
useFrame((state, delta) => {
|
|
66
|
+
if (!meshRef.current)
|
|
67
|
+
return;
|
|
68
|
+
// Idle rotation
|
|
69
|
+
meshRef.current.rotation.y += ANIMATION_CONFIG.IDLE_ROTATION * display.animationSpeed;
|
|
70
|
+
// Scale animation for hover/selection
|
|
71
|
+
const targetScale = isSelected
|
|
72
|
+
? ANIMATION_CONFIG.SELECTION_SCALE
|
|
73
|
+
: isHovered || localHover
|
|
74
|
+
? ANIMATION_CONFIG.HOVER_SCALE
|
|
75
|
+
: 1;
|
|
76
|
+
meshRef.current.scale.lerp(new THREE.Vector3(targetScale, targetScale, targetScale), 0.1);
|
|
77
|
+
// Glow pulse for sensitive data
|
|
78
|
+
if (glowRef.current && table.sensitivity !== 'public') {
|
|
79
|
+
const pulse = Math.sin(state.clock.elapsedTime * ANIMATION_CONFIG.PULSE_FREQUENCY) * 0.5 + 0.5;
|
|
80
|
+
const material = glowRef.current.material;
|
|
81
|
+
material.opacity = 0.1 + pulse * 0.2 * colors.emissiveIntensity;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
// Determine if we should show enhanced visuals in security mode
|
|
85
|
+
const isHighlighted = viewMode === 'security' &&
|
|
86
|
+
(table.sensitivity === 'critical' || table.sensitivity === 'high');
|
|
87
|
+
return (_jsxs("group", { position: position, children: [_jsx(Sphere, { ref: meshRef, args: [baseSize, 32, 32], onClick: handleClick, onPointerOver: handlePointerOver, onPointerOut: handlePointerOut, children: _jsx("meshStandardMaterial", { color: colors.main, emissive: colors.emissive, emissiveIntensity: isHighlighted ? colors.emissiveIntensity * 2 : colors.emissiveIntensity, roughness: 0.7, metalness: 0.3 }) }), table.sensitivity !== 'public' && display.enableBloom && (_jsx(Sphere, { ref: glowRef, args: [baseSize * 1.3, 16, 16], children: _jsx("meshBasicMaterial", { color: colors.main, transparent: true, opacity: 0.15, side: THREE.BackSide }) })), isSelected && (_jsxs("mesh", { rotation: [Math.PI / 2, 0, 0], children: [_jsx("ringGeometry", { args: [baseSize * 1.5, baseSize * 1.7, 32] }), _jsx("meshBasicMaterial", { color: "#ffffff", transparent: true, opacity: 0.8, side: THREE.DoubleSide })] })), display.showLabels && (isHovered || localHover || isSelected) && (_jsx(Html, { position: [0, baseSize + LABEL_CONFIG.OFFSET, 0], center: true, style: {
|
|
88
|
+
pointerEvents: 'none',
|
|
89
|
+
userSelect: 'none',
|
|
90
|
+
}, children: _jsxs("div", { style: {
|
|
91
|
+
background: `rgba(15, 23, 42, ${LABEL_CONFIG.BG_OPACITY})`,
|
|
92
|
+
color: '#f8fafc',
|
|
93
|
+
padding: `${LABEL_CONFIG.PADDING}px ${LABEL_CONFIG.PADDING * 2}px`,
|
|
94
|
+
borderRadius: '4px',
|
|
95
|
+
fontSize: `${LABEL_CONFIG.FONT_SIZE}px`,
|
|
96
|
+
fontFamily: LABEL_CONFIG.FONT_FAMILY,
|
|
97
|
+
whiteSpace: 'nowrap',
|
|
98
|
+
border: `1px solid ${colors.main.getStyle()}`,
|
|
99
|
+
}, children: [_jsx("div", { style: { fontWeight: 600 }, children: table.name }), _jsxs("div", { style: { fontSize: '10px', opacity: 0.7 }, children: [table.fields.length, " fields \u2022 ", table.accessCount, " accesses"] })] }) }))] }));
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=TablePlanet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TablePlanet.js","sourceRoot":"","sources":["../../../src/components/nodes/TablePlanet.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Components Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all 3D node components for the galaxy visualization.
|
|
5
|
+
*/
|
|
6
|
+
export { TablePlanet } from './TablePlanet.js';
|
|
7
|
+
export type { TablePlanetProps } from './TablePlanet.js';
|
|
8
|
+
export { FieldMoon } from './FieldMoon.js';
|
|
9
|
+
export type { FieldMoonProps } from './FieldMoon.js';
|
|
10
|
+
export { EntryPointStation } from './EntryPointStation.js';
|
|
11
|
+
export type { EntryPointStationProps } from './EntryPointStation.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/nodes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node Components Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all 3D node components for the galaxy visualization.
|
|
5
|
+
*/
|
|
6
|
+
export { TablePlanet } from './TablePlanet.js';
|
|
7
|
+
export { FieldMoon } from './FieldMoon.js';
|
|
8
|
+
export { EntryPointStation } from './EntryPointStation.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/nodes/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/ControlsPanel.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,wBAAgB,aAAa,mDAqQ5B"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* ControlsPanel Component
|
|
4
|
+
*
|
|
5
|
+
* Display settings and filter controls for the galaxy visualization.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useCallback } from 'react';
|
|
8
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
9
|
+
import { useGalaxySound } from '../../audio/index.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Component
|
|
12
|
+
// ============================================================================
|
|
13
|
+
export function ControlsPanel() {
|
|
14
|
+
const { isPanelOpen, activePanel, closePanel, viewMode, setViewMode, filters, setFilters, resetFilters, display, setDisplay, resetCamera, } = useGalaxyStore();
|
|
15
|
+
const { play, getConfig, setConfig, toggleMute, setVolume } = useGalaxySound();
|
|
16
|
+
const [soundConfig, setSoundConfig] = useState(getConfig);
|
|
17
|
+
// Handle sound toggle
|
|
18
|
+
const handleSoundToggle = useCallback((enabled) => {
|
|
19
|
+
setConfig({ enabled });
|
|
20
|
+
setSoundConfig(prev => ({ ...prev, enabled }));
|
|
21
|
+
if (enabled) {
|
|
22
|
+
play('powerUp');
|
|
23
|
+
}
|
|
24
|
+
}, [setConfig, play]);
|
|
25
|
+
// Handle mute toggle
|
|
26
|
+
const handleMuteToggle = useCallback(() => {
|
|
27
|
+
const newMuted = toggleMute();
|
|
28
|
+
setSoundConfig(prev => ({ ...prev, muted: newMuted }));
|
|
29
|
+
if (!newMuted) {
|
|
30
|
+
play('click');
|
|
31
|
+
}
|
|
32
|
+
}, [toggleMute, play]);
|
|
33
|
+
// Handle volume change
|
|
34
|
+
const handleVolumeChange = useCallback((volume) => {
|
|
35
|
+
setVolume(volume);
|
|
36
|
+
setSoundConfig(prev => ({ ...prev, volume }));
|
|
37
|
+
}, [setVolume]);
|
|
38
|
+
if (!isPanelOpen || activePanel !== 'settings')
|
|
39
|
+
return null;
|
|
40
|
+
return (_jsxs("div", { className: "absolute right-4 top-4 w-72 max-h-[calc(100vh-8rem)] overflow-y-auto bg-slate-900/95 backdrop-blur-sm rounded-lg border border-slate-700 shadow-xl", children: [_jsxs("div", { className: "flex items-center justify-between p-4 border-b border-slate-700", children: [_jsx("h2", { className: "text-lg font-semibold text-white", children: "Controls" }), _jsx("button", { onClick: closePanel, className: "text-slate-400 hover:text-white transition-colors", children: _jsx("svg", { className: "w-5 h-5", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) })] }), _jsxs("div", { className: "p-4 space-y-6", children: [_jsx(Section, { title: "View Mode", children: _jsx("div", { className: "grid grid-cols-2 gap-2", children: VIEW_MODES.map(mode => (_jsxs("button", { onClick: () => setViewMode(mode.value), className: `p-2 rounded text-sm transition-colors ${viewMode === mode.value
|
|
41
|
+
? 'bg-blue-500/20 text-blue-400 border border-blue-500/50'
|
|
42
|
+
: 'bg-slate-800 text-slate-300 hover:bg-slate-700'}`, children: [mode.icon, " ", mode.label] }, mode.value))) }) }), _jsx(Section, { title: "Filters", children: _jsxs("div", { className: "space-y-3", children: [_jsxs("div", { children: [_jsx("label", { className: "text-xs text-slate-400 block mb-1", children: "Min Sensitivity" }), _jsxs("select", { value: filters.minSensitivity || '', onChange: (e) => setFilters({ minSensitivity: (e.target.value || null) }), className: "w-full p-2 rounded bg-slate-800 text-slate-300 text-sm border border-slate-700", children: [_jsx("option", { value: "", children: "All" }), _jsx("option", { value: "low", children: "Low+" }), _jsx("option", { value: "medium", children: "Medium+" }), _jsx("option", { value: "high", children: "High+" }), _jsx("option", { value: "critical", children: "Critical" })] })] }), _jsxs("div", { children: [_jsx("label", { className: "text-xs text-slate-400 block mb-1", children: "Operation Type" }), _jsxs("select", { value: filters.operationType || '', onChange: (e) => setFilters({ operationType: (e.target.value || null) }), className: "w-full p-2 rounded bg-slate-800 text-slate-300 text-sm border border-slate-700", children: [_jsx("option", { value: "", children: "All" }), _jsx("option", { value: "read", children: "Read" }), _jsx("option", { value: "write", children: "Write" }), _jsx("option", { value: "delete", children: "Delete" })] })] }), _jsx(Toggle, { label: "Untested paths only", checked: filters.untestedOnly, onChange: (checked) => setFilters({ untestedOnly: checked }) }), _jsx(Toggle, { label: "Public endpoints only", checked: filters.publicOnly, onChange: (checked) => setFilters({ publicOnly: checked }) }), _jsx("button", { onClick: resetFilters, className: "w-full p-2 rounded bg-slate-800 hover:bg-slate-700 text-slate-400 text-sm transition-colors", children: "Reset Filters" })] }) }), _jsx(Section, { title: "Display", children: _jsxs("div", { className: "space-y-3", children: [_jsx(Toggle, { label: "Show field moons", checked: display.showFields, onChange: (checked) => setDisplay({ showFields: checked }) }), _jsx(Toggle, { label: "Show data paths", checked: display.showPaths, onChange: (checked) => setDisplay({ showPaths: checked }) }), _jsx(Toggle, { label: "Show relationships", checked: display.showRelationships, onChange: (checked) => setDisplay({ showRelationships: checked }) }), _jsx(Toggle, { label: "Show labels", checked: display.showLabels, onChange: (checked) => setDisplay({ showLabels: checked }) }), _jsx(Toggle, { label: "Enable bloom effect", checked: display.enableBloom, onChange: (checked) => setDisplay({ enableBloom: checked }) }), _jsxs("div", { children: [_jsxs("label", { className: "text-xs text-slate-400 block mb-1", children: ["Animation Speed: ", display.animationSpeed.toFixed(1), "x"] }), _jsx("input", { type: "range", min: "0", max: "2", step: "0.1", value: display.animationSpeed, onChange: (e) => setDisplay({ animationSpeed: parseFloat(e.target.value) }), className: "w-full" })] }), _jsxs("div", { children: [_jsxs("label", { className: "text-xs text-slate-400 block mb-1", children: ["Path Opacity: ", Math.round(display.pathOpacity * 100), "%"] }), _jsx("input", { type: "range", min: "0.1", max: "1", step: "0.1", value: display.pathOpacity, onChange: (e) => setDisplay({ pathOpacity: parseFloat(e.target.value) }), className: "w-full" })] })] }) }), _jsx(Section, { title: "Camera", children: _jsx("button", { onClick: resetCamera, className: "w-full p-2 rounded bg-slate-800 hover:bg-slate-700 text-slate-300 text-sm transition-colors", children: "\uD83C\uDFA5 Reset Camera" }) }), _jsx(Section, { title: "Sound", children: _jsxs("div", { className: "space-y-3", children: [_jsx(Toggle, { label: "Enable sounds", checked: soundConfig.enabled, onChange: handleSoundToggle }), _jsx(Toggle, { label: "Mute", checked: soundConfig.muted, onChange: handleMuteToggle }), _jsxs("div", { children: [_jsxs("label", { className: "text-xs text-slate-400 block mb-1", children: ["Volume: ", Math.round(soundConfig.volume * 100), "%"] }), _jsx("input", { type: "range", min: "0", max: "1", step: "0.1", value: soundConfig.volume, onChange: (e) => handleVolumeChange(parseFloat(e.target.value)), className: "w-full", disabled: !soundConfig.enabled || soundConfig.muted })] }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { onClick: () => play('hover'), className: "flex-1 p-2 rounded bg-slate-800 hover:bg-slate-700 text-slate-300 text-xs transition-colors", disabled: !soundConfig.enabled || soundConfig.muted, children: "\uD83D\uDD0A Test" }), _jsx("button", { onClick: () => play('alertCritical'), className: "flex-1 p-2 rounded bg-red-900/50 hover:bg-red-800/50 text-red-300 text-xs transition-colors", disabled: !soundConfig.enabled || soundConfig.muted, children: "\uD83D\uDEA8 Alert" })] })] }) })] })] }));
|
|
43
|
+
}
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// Helpers
|
|
46
|
+
// ============================================================================
|
|
47
|
+
const VIEW_MODES = [
|
|
48
|
+
{ value: 'overview', label: 'Overview', icon: '🌌' },
|
|
49
|
+
{ value: 'security', label: 'Security', icon: '🔒' },
|
|
50
|
+
{ value: 'coverage', label: 'Coverage', icon: '📊' },
|
|
51
|
+
{ value: 'blast-radius', label: 'Impact', icon: '💥' },
|
|
52
|
+
];
|
|
53
|
+
function Section({ title, children }) {
|
|
54
|
+
return (_jsxs("div", { children: [_jsx("h3", { className: "text-sm font-medium text-slate-300 mb-2", children: title }), children] }));
|
|
55
|
+
}
|
|
56
|
+
function Toggle({ label, checked, onChange }) {
|
|
57
|
+
return (_jsxs("label", { className: "flex items-center justify-between cursor-pointer", children: [_jsx("span", { className: "text-sm text-slate-300", children: label }), _jsx("button", { onClick: () => onChange(!checked), className: `w-10 h-5 rounded-full transition-colors ${checked ? 'bg-blue-500' : 'bg-slate-700'}`, children: _jsx("div", { className: `w-4 h-4 rounded-full bg-white transition-transform ${checked ? 'translate-x-5' : 'translate-x-0.5'}` }) })] }));
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=ControlsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ControlsPanel.js","sourceRoot":"","sources":["../../../src/components/ui/ControlsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DetailsPanel Component
|
|
3
|
+
*
|
|
4
|
+
* Displays detailed information about the selected node.
|
|
5
|
+
* Shows table fields, entry point details, or path information.
|
|
6
|
+
*/
|
|
7
|
+
export declare function DetailsPanel(): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=DetailsPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsPanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/DetailsPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,wBAAgB,YAAY,mDAiC3B"}
|