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.
Files changed (149) hide show
  1. package/dist/audio/index.d.ts +8 -0
  2. package/dist/audio/index.d.ts.map +1 -0
  3. package/dist/audio/index.js +8 -0
  4. package/dist/audio/index.js.map +1 -0
  5. package/dist/audio/sound-effects.d.ts +78 -0
  6. package/dist/audio/sound-effects.d.ts.map +1 -0
  7. package/dist/audio/sound-effects.js +660 -0
  8. package/dist/audio/sound-effects.js.map +1 -0
  9. package/dist/audio/useGalaxySound.d.ts +70 -0
  10. package/dist/audio/useGalaxySound.d.ts.map +1 -0
  11. package/dist/audio/useGalaxySound.js +127 -0
  12. package/dist/audio/useGalaxySound.js.map +1 -0
  13. package/dist/components/canvas/GalaxyCamera.d.ts +16 -0
  14. package/dist/components/canvas/GalaxyCamera.d.ts.map +1 -0
  15. package/dist/components/canvas/GalaxyCamera.js +74 -0
  16. package/dist/components/canvas/GalaxyCamera.js.map +1 -0
  17. package/dist/components/canvas/GalaxyCanvas.d.ts +16 -0
  18. package/dist/components/canvas/GalaxyCanvas.d.ts.map +1 -0
  19. package/dist/components/canvas/GalaxyCanvas.js +104 -0
  20. package/dist/components/canvas/GalaxyCanvas.js.map +1 -0
  21. package/dist/components/canvas/GalaxyLighting.d.ts +8 -0
  22. package/dist/components/canvas/GalaxyLighting.d.ts.map +1 -0
  23. package/dist/components/canvas/GalaxyLighting.js +36 -0
  24. package/dist/components/canvas/GalaxyLighting.js.map +1 -0
  25. package/dist/components/canvas/index.d.ts +11 -0
  26. package/dist/components/canvas/index.d.ts.map +1 -0
  27. package/dist/components/canvas/index.js +9 -0
  28. package/dist/components/canvas/index.js.map +1 -0
  29. package/dist/components/connections/DataPathLane.d.ts +26 -0
  30. package/dist/components/connections/DataPathLane.d.ts.map +1 -0
  31. package/dist/components/connections/DataPathLane.js +71 -0
  32. package/dist/components/connections/DataPathLane.js.map +1 -0
  33. package/dist/components/connections/TableRelationship.d.ts +19 -0
  34. package/dist/components/connections/TableRelationship.d.ts.map +1 -0
  35. package/dist/components/connections/TableRelationship.js +46 -0
  36. package/dist/components/connections/TableRelationship.js.map +1 -0
  37. package/dist/components/connections/index.d.ts +10 -0
  38. package/dist/components/connections/index.d.ts.map +1 -0
  39. package/dist/components/connections/index.js +8 -0
  40. package/dist/components/connections/index.js.map +1 -0
  41. package/dist/components/effects/AccessPulse.d.ts +23 -0
  42. package/dist/components/effects/AccessPulse.d.ts.map +1 -0
  43. package/dist/components/effects/AccessPulse.js +72 -0
  44. package/dist/components/effects/AccessPulse.js.map +1 -0
  45. package/dist/components/effects/GalaxyBloom.d.ts +8 -0
  46. package/dist/components/effects/GalaxyBloom.d.ts.map +1 -0
  47. package/dist/components/effects/GalaxyBloom.js +23 -0
  48. package/dist/components/effects/GalaxyBloom.js.map +1 -0
  49. package/dist/components/effects/StarField.d.ts +18 -0
  50. package/dist/components/effects/StarField.d.ts.map +1 -0
  51. package/dist/components/effects/StarField.js +86 -0
  52. package/dist/components/effects/StarField.js.map +1 -0
  53. package/dist/components/effects/index.d.ts +11 -0
  54. package/dist/components/effects/index.d.ts.map +1 -0
  55. package/dist/components/effects/index.js +9 -0
  56. package/dist/components/effects/index.js.map +1 -0
  57. package/dist/components/index.d.ts +11 -0
  58. package/dist/components/index.d.ts.map +1 -0
  59. package/dist/components/index.js +16 -0
  60. package/dist/components/index.js.map +1 -0
  61. package/dist/components/nodes/EntryPointStation.d.ts +22 -0
  62. package/dist/components/nodes/EntryPointStation.d.ts.map +1 -0
  63. package/dist/components/nodes/EntryPointStation.js +120 -0
  64. package/dist/components/nodes/EntryPointStation.js.map +1 -0
  65. package/dist/components/nodes/FieldMoon.d.ts +30 -0
  66. package/dist/components/nodes/FieldMoon.d.ts.map +1 -0
  67. package/dist/components/nodes/FieldMoon.js +92 -0
  68. package/dist/components/nodes/FieldMoon.js.map +1 -0
  69. package/dist/components/nodes/TablePlanet.d.ts +22 -0
  70. package/dist/components/nodes/TablePlanet.d.ts.map +1 -0
  71. package/dist/components/nodes/TablePlanet.js +101 -0
  72. package/dist/components/nodes/TablePlanet.js.map +1 -0
  73. package/dist/components/nodes/index.d.ts +12 -0
  74. package/dist/components/nodes/index.d.ts.map +1 -0
  75. package/dist/components/nodes/index.js +9 -0
  76. package/dist/components/nodes/index.js.map +1 -0
  77. package/dist/components/ui/ControlsPanel.d.ts +7 -0
  78. package/dist/components/ui/ControlsPanel.d.ts.map +1 -0
  79. package/dist/components/ui/ControlsPanel.js +59 -0
  80. package/dist/components/ui/ControlsPanel.js.map +1 -0
  81. package/dist/components/ui/DetailsPanel.d.ts +8 -0
  82. package/dist/components/ui/DetailsPanel.d.ts.map +1 -0
  83. package/dist/components/ui/DetailsPanel.js +44 -0
  84. package/dist/components/ui/DetailsPanel.js.map +1 -0
  85. package/dist/components/ui/SearchOverlay.d.ts +7 -0
  86. package/dist/components/ui/SearchOverlay.d.ts.map +1 -0
  87. package/dist/components/ui/SearchOverlay.js +68 -0
  88. package/dist/components/ui/SearchOverlay.js.map +1 -0
  89. package/dist/components/ui/SecurityPanel.d.ts +8 -0
  90. package/dist/components/ui/SecurityPanel.d.ts.map +1 -0
  91. package/dist/components/ui/SecurityPanel.js +65 -0
  92. package/dist/components/ui/SecurityPanel.js.map +1 -0
  93. package/dist/components/ui/StatsOverlay.d.ts +7 -0
  94. package/dist/components/ui/StatsOverlay.d.ts.map +1 -0
  95. package/dist/components/ui/StatsOverlay.js +29 -0
  96. package/dist/components/ui/StatsOverlay.js.map +1 -0
  97. package/dist/components/ui/index.d.ts +11 -0
  98. package/dist/components/ui/index.d.ts.map +1 -0
  99. package/dist/components/ui/index.js +11 -0
  100. package/dist/components/ui/index.js.map +1 -0
  101. package/dist/constants/index.d.ts +244 -0
  102. package/dist/constants/index.d.ts.map +1 -0
  103. package/dist/constants/index.js +289 -0
  104. package/dist/constants/index.js.map +1 -0
  105. package/dist/hooks/index.d.ts +10 -0
  106. package/dist/hooks/index.d.ts.map +1 -0
  107. package/dist/hooks/index.js +8 -0
  108. package/dist/hooks/index.js.map +1 -0
  109. package/dist/hooks/useAccessStream.d.ts +23 -0
  110. package/dist/hooks/useAccessStream.d.ts.map +1 -0
  111. package/dist/hooks/useAccessStream.js +86 -0
  112. package/dist/hooks/useAccessStream.js.map +1 -0
  113. package/dist/hooks/useGalaxyData.d.ts +83 -0
  114. package/dist/hooks/useGalaxyData.d.ts.map +1 -0
  115. package/dist/hooks/useGalaxyData.js +176 -0
  116. package/dist/hooks/useGalaxyData.js.map +1 -0
  117. package/dist/index.d.ts +28 -0
  118. package/dist/index.d.ts.map +1 -0
  119. package/dist/index.js +38 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/store/galaxy-store.d.ts +85 -0
  122. package/dist/store/galaxy-store.d.ts.map +1 -0
  123. package/dist/store/galaxy-store.js +254 -0
  124. package/dist/store/galaxy-store.js.map +1 -0
  125. package/dist/store/index.d.ts +5 -0
  126. package/dist/store/index.d.ts.map +1 -0
  127. package/dist/store/index.js +5 -0
  128. package/dist/store/index.js.map +1 -0
  129. package/dist/types/index.d.ts +337 -0
  130. package/dist/types/index.d.ts.map +1 -0
  131. package/dist/types/index.js +8 -0
  132. package/dist/types/index.js.map +1 -0
  133. package/dist/utils/color-utils.d.ts +100 -0
  134. package/dist/utils/color-utils.d.ts.map +1 -0
  135. package/dist/utils/color-utils.js +217 -0
  136. package/dist/utils/color-utils.js.map +1 -0
  137. package/dist/utils/geometry-utils.d.ts +97 -0
  138. package/dist/utils/geometry-utils.d.ts.map +1 -0
  139. package/dist/utils/geometry-utils.js +245 -0
  140. package/dist/utils/geometry-utils.js.map +1 -0
  141. package/dist/utils/index.d.ts +7 -0
  142. package/dist/utils/index.d.ts.map +1 -0
  143. package/dist/utils/index.js +7 -0
  144. package/dist/utils/index.js.map +1 -0
  145. package/dist/utils/layout-engine.d.ts +40 -0
  146. package/dist/utils/layout-engine.d.ts.map +1 -0
  147. package/dist/utils/layout-engine.js +343 -0
  148. package/dist/utils/layout-engine.js.map +1 -0
  149. 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":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,wBAAwB,EACxB,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AA4BtF,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,UAAU,SAAS,CAAC,EACxB,KAAK,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,GAAG,KAAK,EAClB,SAAS,GAAG,KAAK,EACjB,OAAO,EACP,aAAa,EACb,YAAY,GACG;IACf,MAAM,OAAO,GAAG,MAAM,CAAa,IAAI,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,CAC1B,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAC/D,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IAE/C,iDAAiD;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;QACxB,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC;QAClF,OAAO,kBAAkB,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/E,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3C,aAAa;IACb,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE;QAC1B,MAAM,SAAS,GAAG,wBAAwB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC9D,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAEpE,OAAO;YACL,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,SAAS;YACnB,iBAAiB;SAClB,CAAC;IACJ,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IAExB,8CAA8C;IAC9C,MAAM,WAAW,GAAG,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC;IAE3D,sDAAsD;IACtD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE;QAC7B,OAAO,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IACtC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,kCAAkC;IAClC,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACxB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO;QAE7B,qBAAqB;QACrB,aAAa,CAAC,OAAO,IAAI,UAAU,CAAC,WAAW,GAAG,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;QAEjF,8BAA8B;QAC9B,MAAM,GAAG,GAAG,gBAAgB,CAC1B,cAAc,EACd,WAAW,EACX,aAAa,CAAC,OAAO,EACrB,SAAS,CACV,CAAC;QAEF,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAElD,gBAAgB;QAChB,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,cAAc,CAAC;QAE5D,4BAA4B;QAC5B,MAAM,WAAW,GAAG,UAAU;YAC5B,CAAC,CAAC,gBAAgB,CAAC,eAAe;YAClC,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,gBAAgB,CAAC,WAAW;gBAC9B,CAAC,CAAC,CAAC,CAAC;QAEN,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CACxB,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,EACxD,GAAG,CACJ,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,4CAA4C;IAC5C,MAAM,aAAa,GAAG,QAAQ,KAAK,UAAU;QAC3C,CAAC,KAAK,CAAC,WAAW,KAAK,UAAU,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;IAErE,oCAAoC;IACpC,IAAI,CAAC,OAAO,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,4BACE,KAAC,MAAM,IACL,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EACpB,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;oBACb,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,OAAO,EAAE,EAAE,CAAC;gBACd,CAAC,EACD,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE;oBACnB,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,aAAa,EAAE,EAAE,CAAC;gBACpB,CAAC,EACD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE;oBAClB,CAAC,CAAC,eAAe,EAAE,CAAC;oBACpB,YAAY,EAAE,EAAE,CAAC;gBACnB,CAAC,YAED,+BACE,KAAK,EAAE,MAAM,CAAC,IAAI,EAClB,QAAQ,EAAE,MAAM,CAAC,QAAQ,EACzB,iBAAiB,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,iBAAiB,EAC1F,SAAS,EAAE,GAAG,EACd,SAAS,EAAE,GAAG,GACd,GACK,EAGR,OAAO,CAAC,UAAU,IAAI,SAAS,IAAI,OAAO,CAAC,OAAO,IAAI,CACrD,KAAC,IAAI,IACH,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EACnF,MAAM,QACN,KAAK,EAAE;oBACL,aAAa,EAAE,MAAM;oBACrB,UAAU,EAAE,MAAM;iBACnB,YAED,eACE,KAAK,EAAE;wBACL,UAAU,EAAE,oBAAoB,YAAY,CAAC,UAAU,GAAG;wBAC1D,KAAK,EAAE,SAAS;wBAChB,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,MAAM,YAAY,CAAC,OAAO,GAAG,CAAC,IAAI;wBAClE,YAAY,EAAE,KAAK;wBACnB,QAAQ,EAAE,MAAM;wBAChB,UAAU,EAAE,YAAY,CAAC,WAAW;wBACpC,UAAU,EAAE,QAAQ;wBACpB,MAAM,EAAE,aAAa,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;qBAC9C,aAED,cAAK,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,YAAG,KAAK,CAAC,IAAI,GAAO,EACnD,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,aACzB,KAAK,CAAC,QAAQ,cAAK,KAAK,CAAC,WAAW,IACjC,EACL,KAAK,CAAC,YAAY,IAAI,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,yCAAsB,EAC5E,KAAK,CAAC,YAAY,IAAI,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,yCAAsB,EAC5E,CAAC,KAAK,CAAC,QAAQ,IAAI,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,sCAAmB,IACnE,GACD,CACR,IACK,CACT,CAAC;AACJ,CAAC"}
@@ -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,7 @@
1
+ /**
2
+ * ControlsPanel Component
3
+ *
4
+ * Display settings and filter controls for the galaxy visualization.
5
+ */
6
+ export declare function ControlsPanel(): import("react/jsx-runtime").JSX.Element | null;
7
+ //# sourceMappingURL=ControlsPanel.d.ts.map
@@ -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"}