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,44 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* DetailsPanel Component
|
|
4
|
+
*
|
|
5
|
+
* Displays detailed information about the selected node.
|
|
6
|
+
* Shows table fields, entry point details, or path information.
|
|
7
|
+
*/
|
|
8
|
+
import { useGalaxyStore, useSelectedTable, useSelectedEntryPoint, useSelectedTablePaths } from '../../store/index.js';
|
|
9
|
+
import { SENSITIVITY_COLORS, AUTH_LEVEL_COLORS } from '../../constants/index.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Component
|
|
12
|
+
// ============================================================================
|
|
13
|
+
export function DetailsPanel() {
|
|
14
|
+
const { isPanelOpen, activePanel, closePanel, selection } = useGalaxyStore();
|
|
15
|
+
const selectedTable = useSelectedTable();
|
|
16
|
+
const selectedEntryPoint = useSelectedEntryPoint();
|
|
17
|
+
const tablePaths = useSelectedTablePaths();
|
|
18
|
+
if (!isPanelOpen || activePanel !== 'details')
|
|
19
|
+
return null;
|
|
20
|
+
return (_jsxs("div", { className: "absolute right-4 top-4 w-80 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: "Details" }), _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", children: [selectedTable && _jsx(TableDetails, { table: selectedTable, paths: tablePaths }), selectedEntryPoint && _jsx(EntryPointDetails, { entryPoint: selectedEntryPoint }), !selectedTable && !selectedEntryPoint && (_jsx("p", { className: "text-slate-400 text-sm", children: "Select a node to view details" }))] })] }));
|
|
21
|
+
}
|
|
22
|
+
function TableDetails({ table, paths }) {
|
|
23
|
+
const sensitiveFields = table.fields.filter(f => f.sensitivity !== 'public' && f.sensitivity !== 'low');
|
|
24
|
+
const untestedPaths = paths.filter(p => !p.isTested);
|
|
25
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("h3", { className: "text-xl font-bold text-white", children: table.name }), _jsx("span", { className: "px-2 py-0.5 rounded text-xs font-medium", style: { backgroundColor: SENSITIVITY_COLORS[table.sensitivity] + '33', color: SENSITIVITY_COLORS[table.sensitivity] }, children: table.sensitivity })] }), table.schema && _jsx("p", { className: "text-slate-400 text-sm", children: table.schema })] }), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsx(StatCard, { label: "Fields", value: table.fields.length }), _jsx(StatCard, { label: "Accesses", value: table.accessCount }), _jsx(StatCard, { label: "Sensitive", value: sensitiveFields.length, color: sensitiveFields.length > 0 ? '#f59e0b' : undefined }), _jsx(StatCard, { label: "Untested Paths", value: untestedPaths.length, color: untestedPaths.length > 0 ? '#ef4444' : undefined })] }), _jsxs("div", { children: [_jsxs("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: ["Fields (", table.fields.length, ")"] }), _jsx("div", { className: "space-y-1 max-h-48 overflow-y-auto", children: table.fields.map(field => (_jsxs("div", { className: "flex items-center justify-between p-2 rounded bg-slate-800/50 text-sm", children: [_jsxs("div", { className: "flex items-center gap-2", children: [field.isPrimaryKey && _jsx("span", { title: "Primary Key", children: "\uD83D\uDD11" }), field.isForeignKey && _jsx("span", { title: "Foreign Key", children: "\uD83D\uDD17" }), _jsx("span", { className: "text-white", children: field.name }), _jsx("span", { className: "text-slate-500", children: field.dataType })] }), _jsx("span", { className: "w-2 h-2 rounded-full", style: { backgroundColor: SENSITIVITY_COLORS[field.sensitivity] }, title: field.sensitivity })] }, field.id))) })] }), paths.length > 0 && (_jsxs("div", { children: [_jsxs("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: ["Access Paths (", paths.length, ")"] }), _jsx("div", { className: "space-y-1 max-h-32 overflow-y-auto", children: paths.slice(0, 10).map(path => (_jsxs("div", { className: "flex items-center justify-between p-2 rounded bg-slate-800/50 text-sm", children: [_jsx("span", { className: "text-slate-300", children: path.operation }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("span", { className: "text-slate-500", children: ["depth: ", path.depth] }), !path.isTested && _jsx("span", { className: "text-red-400 text-xs", children: "untested" })] })] }, path.id))) })] }))] }));
|
|
26
|
+
}
|
|
27
|
+
function EntryPointDetails({ entryPoint }) {
|
|
28
|
+
return (_jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: `px-2 py-0.5 rounded text-xs font-bold ${getMethodClass(entryPoint.method)}`, children: entryPoint.method }), _jsx("h3", { className: "text-lg font-bold text-white truncate", children: entryPoint.path })] }), _jsx("p", { className: "text-slate-400 text-sm mt-1", children: entryPoint.framework })] }), entryPoint.authLevel === 'public' && (_jsxs("div", { className: "p-3 rounded bg-red-500/20 border border-red-500/50", children: [_jsxs("div", { className: "flex items-center gap-2 text-red-400", 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: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), _jsx("span", { className: "font-medium", children: "Public Endpoint" })] }), _jsx("p", { className: "text-red-300 text-sm mt-1", children: "This endpoint is accessible without authentication" })] })), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsx(StatCard, { label: "Auth Level", value: entryPoint.authLevel, color: AUTH_LEVEL_COLORS[entryPoint.authLevel] }), _jsx(StatCard, { label: "Security Tier", value: entryPoint.securityTier }), _jsx(StatCard, { label: "Reachable Tables", value: entryPoint.reachableTables.length })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: "Source" }), _jsxs("div", { className: "p-2 rounded bg-slate-800/50 text-sm font-mono", children: [_jsx("span", { className: "text-slate-400", children: entryPoint.file }), _jsxs("span", { className: "text-slate-500", children: [":", entryPoint.line] })] })] }), entryPoint.reachableTables.length > 0 && (_jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: "Reachable Tables" }), _jsx("div", { className: "flex flex-wrap gap-1", children: entryPoint.reachableTables.map(tableId => (_jsx("span", { className: "px-2 py-1 rounded bg-slate-800 text-slate-300 text-xs", children: tableId }, tableId))) })] }))] }));
|
|
29
|
+
}
|
|
30
|
+
function StatCard({ label, value, color }) {
|
|
31
|
+
return (_jsxs("div", { className: "p-3 rounded bg-slate-800/50", children: [_jsx("p", { className: "text-slate-400 text-xs", children: label }), _jsx("p", { className: "text-lg font-semibold", style: { color: color || '#f8fafc' }, children: value })] }));
|
|
32
|
+
}
|
|
33
|
+
function getMethodClass(method) {
|
|
34
|
+
const classes = {
|
|
35
|
+
GET: 'bg-green-500/20 text-green-400',
|
|
36
|
+
POST: 'bg-blue-500/20 text-blue-400',
|
|
37
|
+
PUT: 'bg-amber-500/20 text-amber-400',
|
|
38
|
+
PATCH: 'bg-purple-500/20 text-purple-400',
|
|
39
|
+
DELETE: 'bg-red-500/20 text-red-400',
|
|
40
|
+
ALL: 'bg-slate-500/20 text-slate-400',
|
|
41
|
+
};
|
|
42
|
+
return classes[method] || classes.ALL;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=DetailsPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DetailsPanel.js","sourceRoot":"","sources":["../../../src/components/ui/DetailsPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SearchOverlay.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,wBAAgB,aAAa,4CAsI5B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SearchOverlay Component
|
|
4
|
+
*
|
|
5
|
+
* Search interface for finding tables, fields, and entry points.
|
|
6
|
+
*/
|
|
7
|
+
import { useState, useCallback, useEffect, useMemo } from 'react';
|
|
8
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Component
|
|
11
|
+
// ============================================================================
|
|
12
|
+
export function SearchOverlay() {
|
|
13
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
14
|
+
const [query, setQuery] = useState('');
|
|
15
|
+
const { galaxyData, selectTable, selectEntryPoint, focusOnNode } = useGalaxyStore();
|
|
16
|
+
// Search results
|
|
17
|
+
const results = useMemo(() => {
|
|
18
|
+
if (!galaxyData || !query.trim())
|
|
19
|
+
return { tables: [], entryPoints: [], fields: [] };
|
|
20
|
+
const q = query.toLowerCase();
|
|
21
|
+
const tables = galaxyData.tables
|
|
22
|
+
.filter(t => t.name.toLowerCase().includes(q))
|
|
23
|
+
.slice(0, 5);
|
|
24
|
+
const entryPoints = galaxyData.entryPoints
|
|
25
|
+
.filter(e => e.path.toLowerCase().includes(q))
|
|
26
|
+
.slice(0, 5);
|
|
27
|
+
const fields = galaxyData.tables
|
|
28
|
+
.flatMap(t => t.fields.map(f => ({ ...f, tableName: t.name })))
|
|
29
|
+
.filter(f => f.name.toLowerCase().includes(q))
|
|
30
|
+
.slice(0, 5);
|
|
31
|
+
return { tables, entryPoints, fields };
|
|
32
|
+
}, [galaxyData, query]);
|
|
33
|
+
// Keyboard shortcut
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const handleKeyDown = (e) => {
|
|
36
|
+
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
|
|
37
|
+
e.preventDefault();
|
|
38
|
+
setIsOpen(true);
|
|
39
|
+
}
|
|
40
|
+
if (e.key === 'Escape') {
|
|
41
|
+
setIsOpen(false);
|
|
42
|
+
setQuery('');
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
window.addEventListener('keydown', handleKeyDown);
|
|
46
|
+
return () => window.removeEventListener('keydown', handleKeyDown);
|
|
47
|
+
}, []);
|
|
48
|
+
const handleSelect = useCallback((type, id) => {
|
|
49
|
+
if (type === 'table') {
|
|
50
|
+
selectTable(id);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
selectEntryPoint(id);
|
|
54
|
+
}
|
|
55
|
+
focusOnNode(id);
|
|
56
|
+
setIsOpen(false);
|
|
57
|
+
setQuery('');
|
|
58
|
+
}, [selectTable, selectEntryPoint, focusOnNode]);
|
|
59
|
+
const hasResults = results.tables.length > 0 || results.entryPoints.length > 0 || results.fields.length > 0;
|
|
60
|
+
return (_jsxs(_Fragment, { children: [_jsxs("button", { onClick: () => setIsOpen(true), className: "absolute left-4 top-4 flex items-center gap-2 px-3 py-2 rounded-lg bg-slate-800/80 hover:bg-slate-700 text-slate-400 text-sm transition-colors", children: [_jsx("svg", { className: "w-4 h-4", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), "Search...", _jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-slate-700 text-xs", children: "\u2318K" })] }), isOpen && (_jsx("div", { className: "absolute inset-0 flex items-start justify-center pt-20 bg-black/50 backdrop-blur-sm z-50", children: _jsxs("div", { className: "w-full max-w-lg bg-slate-900 rounded-lg border border-slate-700 shadow-2xl overflow-hidden", children: [_jsxs("div", { className: "flex items-center gap-3 p-4 border-b border-slate-700", children: [_jsx("svg", { className: "w-5 h-5 text-slate-400", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) }), _jsx("input", { type: "text", value: query, onChange: (e) => setQuery(e.target.value), placeholder: "Search tables, fields, endpoints...", className: "flex-1 bg-transparent text-white placeholder-slate-500 outline-none", autoFocus: true }), _jsx("button", { onClick: () => { setIsOpen(false); setQuery(''); }, className: "text-slate-400 hover:text-white", children: _jsx("kbd", { className: "px-1.5 py-0.5 rounded bg-slate-700 text-xs", children: "ESC" }) })] }), query && (_jsxs("div", { className: "max-h-80 overflow-y-auto", children: [!hasResults && (_jsx("p", { className: "p-4 text-slate-400 text-center", children: "No results found" })), results.tables.length > 0 && (_jsx(ResultSection, { title: "Tables", children: results.tables.map(t => (_jsx(ResultItem, { icon: "\uD83E\uDE90", label: t.name, sublabel: `${t.fields.length} fields`, onClick: () => handleSelect('table', t.id) }, t.id))) })), results.entryPoints.length > 0 && (_jsx(ResultSection, { title: "Entry Points", children: results.entryPoints.map(e => (_jsx(ResultItem, { icon: "\uD83D\uDEF8", label: e.path, sublabel: `${e.method} • ${e.framework}`, onClick: () => handleSelect('entryPoint', e.id) }, e.id))) })), results.fields.length > 0 && (_jsx(ResultSection, { title: "Fields", children: results.fields.map(f => (_jsx(ResultItem, { icon: "\uD83C\uDF19", label: f.name, sublabel: `${f.tableName} • ${f.dataType}`, onClick: () => handleSelect('table', f.tableId) }, f.id))) }))] }))] }) }))] }));
|
|
61
|
+
}
|
|
62
|
+
function ResultSection({ title, children }) {
|
|
63
|
+
return (_jsxs("div", { className: "border-b border-slate-800 last:border-0", children: [_jsx("p", { className: "px-4 py-2 text-xs text-slate-500 uppercase", children: title }), children] }));
|
|
64
|
+
}
|
|
65
|
+
function ResultItem({ icon, label, sublabel, onClick }) {
|
|
66
|
+
return (_jsxs("button", { onClick: onClick, className: "w-full flex items-center gap-3 px-4 py-2 hover:bg-slate-800 text-left transition-colors", children: [_jsx("span", { children: icon }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("p", { className: "text-white truncate", children: label }), _jsx("p", { className: "text-slate-500 text-sm truncate", children: sublabel })] })] }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=SearchOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchOverlay.js","sourceRoot":"","sources":["../../../src/components/ui/SearchOverlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SecurityPanel Component
|
|
3
|
+
*
|
|
4
|
+
* Displays security-focused information about the galaxy.
|
|
5
|
+
* Shows sensitive data exposure, public endpoints, and untested paths.
|
|
6
|
+
*/
|
|
7
|
+
export declare function SecurityPanel(): import("react/jsx-runtime").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=SecurityPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityPanel.d.ts","sourceRoot":"","sources":["../../../src/components/ui/SecurityPanel.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,wBAAgB,aAAa,mDAyK5B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SecurityPanel Component
|
|
4
|
+
*
|
|
5
|
+
* Displays security-focused information about the galaxy.
|
|
6
|
+
* Shows sensitive data exposure, public endpoints, and untested paths.
|
|
7
|
+
*/
|
|
8
|
+
import { useMemo } from 'react';
|
|
9
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
10
|
+
import { SENSITIVITY_COLORS, SECURITY_TIER_COLORS } from '../../constants/index.js';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Component
|
|
13
|
+
// ============================================================================
|
|
14
|
+
export function SecurityPanel() {
|
|
15
|
+
const { isPanelOpen, activePanel, closePanel, galaxyData, setViewMode, setFilters } = useGalaxyStore();
|
|
16
|
+
// Calculate security metrics
|
|
17
|
+
const metrics = useMemo(() => {
|
|
18
|
+
if (!galaxyData)
|
|
19
|
+
return null;
|
|
20
|
+
const publicEndpoints = galaxyData.entryPoints.filter(e => e.authLevel === 'public');
|
|
21
|
+
const criticalTables = galaxyData.tables.filter(t => t.sensitivity === 'critical' || t.sensitivity === 'high');
|
|
22
|
+
const untestedPaths = galaxyData.dataPaths.filter(p => !p.isTested);
|
|
23
|
+
const p0Endpoints = galaxyData.entryPoints.filter(e => e.securityTier === 'P0');
|
|
24
|
+
// Find public endpoints reaching sensitive data
|
|
25
|
+
const publicToSensitive = publicEndpoints.filter(ep => ep.reachableTables.some(tableId => criticalTables.some(t => t.id === tableId)));
|
|
26
|
+
return {
|
|
27
|
+
publicEndpoints,
|
|
28
|
+
criticalTables,
|
|
29
|
+
untestedPaths,
|
|
30
|
+
p0Endpoints,
|
|
31
|
+
publicToSensitive,
|
|
32
|
+
healthScore: galaxyData.stats.healthScore,
|
|
33
|
+
};
|
|
34
|
+
}, [galaxyData]);
|
|
35
|
+
if (!isPanelOpen || activePanel !== 'security')
|
|
36
|
+
return null;
|
|
37
|
+
if (!metrics)
|
|
38
|
+
return null;
|
|
39
|
+
const hasIssues = metrics.publicToSensitive.length > 0 || metrics.untestedPaths.length > 0;
|
|
40
|
+
return (_jsxs("div", { className: "absolute right-4 top-4 w-80 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: "Security Overview" }), _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-4", children: [_jsxs("div", { className: "text-center p-4 rounded-lg bg-slate-800/50", children: [_jsx("div", { className: "text-4xl font-bold", style: { color: getHealthColor(metrics.healthScore) }, children: metrics.healthScore }), _jsx("p", { className: "text-slate-400 text-sm", children: "Security Health Score" })] }), metrics.publicToSensitive.length > 0 && (_jsxs("div", { className: "p-3 rounded bg-red-500/20 border border-red-500/50", children: [_jsxs("div", { className: "flex items-center gap-2 text-red-400 font-medium", 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: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" }) }), metrics.publicToSensitive.length, " Public \u2192 Sensitive Paths"] }), _jsx("p", { className: "text-red-300 text-sm mt-1", children: "Public endpoints can reach sensitive data without authentication" }), _jsx("button", { onClick: () => {
|
|
41
|
+
setViewMode('security');
|
|
42
|
+
setFilters({ publicOnly: true });
|
|
43
|
+
}, className: "mt-2 text-sm text-red-400 hover:text-red-300 underline", children: "View in Security Mode \u2192" })] })), _jsxs("div", { className: "grid grid-cols-2 gap-3", children: [_jsx(SecurityStat, { label: "Public Endpoints", value: metrics.publicEndpoints.length, color: metrics.publicEndpoints.length > 0 ? '#ef4444' : '#22c55e', onClick: () => setFilters({ publicOnly: true }) }), _jsx(SecurityStat, { label: "P0 Endpoints", value: metrics.p0Endpoints.length, color: SECURITY_TIER_COLORS.P0 }), _jsx(SecurityStat, { label: "Sensitive Tables", value: metrics.criticalTables.length, color: SENSITIVITY_COLORS.high, onClick: () => setFilters({ minSensitivity: 'high' }) }), _jsx(SecurityStat, { label: "Untested Paths", value: metrics.untestedPaths.length, color: metrics.untestedPaths.length > 0 ? '#f59e0b' : '#22c55e', onClick: () => setFilters({ untestedOnly: true }) })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: "Sensitivity Distribution" }), _jsx("div", { className: "space-y-2", children: ['critical', 'high', 'medium', 'low', 'public'].map(level => {
|
|
44
|
+
const count = galaxyData?.stats.sensitiveFields[level] || 0;
|
|
45
|
+
const total = galaxyData?.stats.fieldCount || 1;
|
|
46
|
+
const percentage = Math.round((count / total) * 100);
|
|
47
|
+
return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { className: "w-3 h-3 rounded-full", style: { backgroundColor: SENSITIVITY_COLORS[level] } }), _jsx("span", { className: "text-slate-300 text-sm capitalize flex-1", children: level }), _jsx("span", { className: "text-slate-400 text-sm", children: count }), _jsx("div", { className: "w-20 h-2 bg-slate-700 rounded-full overflow-hidden", children: _jsx("div", { className: "h-full rounded-full", style: {
|
|
48
|
+
width: `${percentage}%`,
|
|
49
|
+
backgroundColor: SENSITIVITY_COLORS[level],
|
|
50
|
+
} }) })] }, level));
|
|
51
|
+
}) })] }), _jsxs("div", { children: [_jsx("h4", { className: "text-sm font-medium text-slate-300 mb-2", children: "Quick Actions" }), _jsxs("div", { className: "space-y-2", children: [_jsx("button", { onClick: () => setViewMode('security'), className: "w-full p-2 rounded bg-slate-800 hover:bg-slate-700 text-left text-sm text-slate-300 transition-colors", children: "\uD83D\uDD12 Enable Security Mode" }), _jsx("button", { onClick: () => setViewMode('coverage'), className: "w-full p-2 rounded bg-slate-800 hover:bg-slate-700 text-left text-sm text-slate-300 transition-colors", children: "\uD83D\uDCCA View Test Coverage" }), _jsx("button", { onClick: () => setFilters({ untestedOnly: true }), className: "w-full p-2 rounded bg-slate-800 hover:bg-slate-700 text-left text-sm text-slate-300 transition-colors", children: "\u26A0\uFE0F Show Untested Paths" })] })] })] })] }));
|
|
52
|
+
}
|
|
53
|
+
function SecurityStat({ label, value, color, onClick }) {
|
|
54
|
+
return (_jsxs("button", { onClick: onClick, className: "p-3 rounded bg-slate-800/50 hover:bg-slate-800 transition-colors text-left", children: [_jsx("p", { className: "text-slate-400 text-xs", children: label }), _jsx("p", { className: "text-2xl font-bold", style: { color }, children: value })] }));
|
|
55
|
+
}
|
|
56
|
+
function getHealthColor(score) {
|
|
57
|
+
if (score >= 80)
|
|
58
|
+
return '#22c55e';
|
|
59
|
+
if (score >= 60)
|
|
60
|
+
return '#eab308';
|
|
61
|
+
if (score >= 40)
|
|
62
|
+
return '#f97316';
|
|
63
|
+
return '#ef4444';
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=SecurityPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SecurityPanel.js","sourceRoot":"","sources":["../../../src/components/ui/SecurityPanel.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEpF,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,UAAU,aAAa;IAC3B,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;IAEvG,6BAA6B;IAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC;QAE7B,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;QACrF,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC;QAC/G,MAAM,aAAa,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;QAEhF,gDAAgD;QAChD,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CACpD,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAChC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAC3C,CACF,CAAC;QAEF,OAAO;YACL,eAAe;YACf,cAAc;YACd,aAAa;YACb,WAAW;YACX,iBAAiB;YACjB,WAAW,EAAE,UAAU,CAAC,KAAK,CAAC,WAAW;SAC1C,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAEjB,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,UAAU;QAAE,OAAO,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,MAAM,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3F,OAAO,CACL,eAAK,SAAS,EAAC,oJAAoJ,aAEjK,eAAK,SAAS,EAAC,iEAAiE,aAC9E,aAAI,SAAS,EAAC,kCAAkC,kCAAuB,EACvE,iBACE,OAAO,EAAE,UAAU,EACnB,SAAS,EAAC,mDAAmD,YAE7D,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,sBAAsB,GAAG,GAC1F,GACC,IACL,EAGN,eAAK,SAAS,EAAC,eAAe,aAE5B,eAAK,SAAS,EAAC,4CAA4C,aACzD,cAAK,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,YACtF,OAAO,CAAC,WAAW,GAChB,EACN,YAAG,SAAS,EAAC,wBAAwB,sCAA0B,IAC3D,EAGL,OAAO,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,CACvC,eAAK,SAAS,EAAC,oDAAoD,aACjE,eAAK,SAAS,EAAC,kDAAkD,aAC/D,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,YAC5E,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EAAC,sIAAsI,GAAG,GAC1M,EACL,OAAO,CAAC,iBAAiB,CAAC,MAAM,sCAC7B,EACN,YAAG,SAAS,EAAC,2BAA2B,iFAEpC,EACJ,iBACE,OAAO,EAAE,GAAG,EAAE;oCACZ,WAAW,CAAC,UAAU,CAAC,CAAC;oCACxB,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gCACnC,CAAC,EACD,SAAS,EAAC,wDAAwD,6CAG3D,IACL,CACP,EAGD,eAAK,SAAS,EAAC,wBAAwB,aACrC,KAAC,YAAY,IACX,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,MAAM,EACrC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EACjE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,GAC/C,EACF,KAAC,YAAY,IACX,KAAK,EAAC,cAAc,EACpB,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,EACjC,KAAK,EAAE,oBAAoB,CAAC,EAAE,GAC9B,EACF,KAAC,YAAY,IACX,KAAK,EAAC,kBAAkB,EACxB,KAAK,EAAE,OAAO,CAAC,cAAc,CAAC,MAAM,EACpC,KAAK,EAAE,kBAAkB,CAAC,IAAI,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC,GACrD,EACF,KAAC,YAAY,IACX,KAAK,EAAC,gBAAgB,EACtB,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,EACnC,KAAK,EAAE,OAAO,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC/D,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GACjD,IACE,EAGN,0BACE,aAAI,SAAS,EAAC,yCAAyC,yCAA8B,EACrF,cAAK,SAAS,EAAC,WAAW,YACtB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;oCACtE,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oCAC5D,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;oCAChD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;oCAErD,OAAO,CACL,eAAiB,SAAS,EAAC,yBAAyB,aAClD,cACE,SAAS,EAAC,sBAAsB,EAChC,KAAK,EAAE,EAAE,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC,EAAE,GACrD,EACF,eAAM,SAAS,EAAC,0CAA0C,YAAE,KAAK,GAAQ,EACzE,eAAM,SAAS,EAAC,wBAAwB,YAAE,KAAK,GAAQ,EACvD,cAAK,SAAS,EAAC,oDAAoD,YACjE,cACE,SAAS,EAAC,qBAAqB,EAC/B,KAAK,EAAE;wDACL,KAAK,EAAE,GAAG,UAAU,GAAG;wDACvB,eAAe,EAAE,kBAAkB,CAAC,KAAK,CAAC;qDAC3C,GACD,GACE,KAfE,KAAK,CAgBT,CACP,CAAC;gCACJ,CAAC,CAAC,GACE,IACF,EAGN,0BACE,aAAI,SAAS,EAAC,yCAAyC,8BAAmB,EAC1E,eAAK,SAAS,EAAC,WAAW,aACxB,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,EACtC,SAAS,EAAC,uGAAuG,kDAG1G,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,EACtC,SAAS,EAAC,uGAAuG,gDAG1G,EACT,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,EACjD,SAAS,EAAC,uGAAuG,iDAG1G,IACL,IACF,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAaD,SAAS,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAqB;IACvE,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,4EAA4E,aAEtF,YAAG,SAAS,EAAC,wBAAwB,YAAE,KAAK,GAAK,EACjD,YAAG,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,YAC/C,KAAK,GACJ,IACG,CACV,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,SAAS,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatsOverlay.d.ts","sourceRoot":"","sources":["../../../src/components/ui/StatsOverlay.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,wBAAgB,YAAY,mDAyC3B"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* StatsOverlay Component
|
|
4
|
+
*
|
|
5
|
+
* Displays galaxy statistics in the corner of the visualization.
|
|
6
|
+
*/
|
|
7
|
+
import { useGalaxyStore } from '../../store/index.js';
|
|
8
|
+
import { getHealthScoreColor } from '../../utils/color-utils.js';
|
|
9
|
+
// ============================================================================
|
|
10
|
+
// Component
|
|
11
|
+
// ============================================================================
|
|
12
|
+
export function StatsOverlay() {
|
|
13
|
+
const { galaxyData, viewMode, isLiveMode } = useGalaxyStore();
|
|
14
|
+
if (!galaxyData)
|
|
15
|
+
return null;
|
|
16
|
+
const { stats } = galaxyData;
|
|
17
|
+
return (_jsxs("div", { className: "absolute left-4 bottom-4 flex items-end gap-4", children: [_jsx("div", { className: "bg-slate-900/80 backdrop-blur-sm rounded-lg p-3 border border-slate-700", children: _jsxs("div", { className: "flex items-center gap-4 text-sm", children: [_jsx(Stat, { icon: "\uD83E\uDE90", value: stats.tableCount, label: "Tables" }), _jsx(Stat, { icon: "\uD83D\uDEF8", value: stats.entryPointCount, label: "Endpoints" }), _jsx(Stat, { icon: "\uD83D\uDD17", value: stats.pathCount, label: "Paths" }), _jsx("div", { className: "w-px h-8 bg-slate-700" }), _jsxs("div", { className: "text-center", children: [_jsx("div", { className: "text-lg font-bold", style: { color: getHealthScoreColor(stats.healthScore) }, children: stats.healthScore }), _jsx("div", { className: "text-slate-500 text-xs", children: "Health" })] })] }) }), _jsx("div", { className: "bg-slate-900/80 backdrop-blur-sm rounded-lg px-3 py-2 border border-slate-700", children: _jsx("span", { className: "text-slate-400 text-sm", children: VIEW_MODE_LABELS[viewMode] }) }), isLiveMode && (_jsxs("div", { className: "bg-green-500/20 backdrop-blur-sm rounded-lg px-3 py-2 border border-green-500/50 flex items-center gap-2", children: [_jsx("span", { className: "w-2 h-2 rounded-full bg-green-500 animate-pulse" }), _jsx("span", { className: "text-green-400 text-sm", children: "Live" })] }))] }));
|
|
18
|
+
}
|
|
19
|
+
function Stat({ icon, value, label }) {
|
|
20
|
+
return (_jsxs("div", { className: "text-center", children: [_jsxs("div", { className: "flex items-center gap-1", children: [_jsx("span", { children: icon }), _jsx("span", { className: "text-white font-medium", children: value })] }), _jsx("div", { className: "text-slate-500 text-xs", children: label })] }));
|
|
21
|
+
}
|
|
22
|
+
const VIEW_MODE_LABELS = {
|
|
23
|
+
overview: '🌌 Overview',
|
|
24
|
+
security: '🔒 Security',
|
|
25
|
+
coverage: '📊 Coverage',
|
|
26
|
+
'blast-radius': '💥 Impact',
|
|
27
|
+
timeline: '📅 Timeline',
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=StatsOverlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StatsOverlay.js","sourceRoot":"","sources":["../../../src/components/ui/StatsOverlay.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;IAE9D,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAE7B,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,CAAC;IAE7B,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAE5D,cAAK,SAAS,EAAC,yEAAyE,YACtF,eAAK,SAAS,EAAC,iCAAiC,aAC9C,KAAC,IAAI,IAAC,IAAI,EAAC,cAAI,EAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,EAAC,QAAQ,GAAG,EAC1D,KAAC,IAAI,IAAC,IAAI,EAAC,cAAI,EAAC,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,EAAC,WAAW,GAAG,EAClE,KAAC,IAAI,IAAC,IAAI,EAAC,cAAI,EAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAC,OAAO,GAAG,EACxD,cAAK,SAAS,EAAC,uBAAuB,GAAG,EACzC,eAAK,SAAS,EAAC,aAAa,aAC1B,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,YACxF,KAAK,CAAC,WAAW,GACd,EACN,cAAK,SAAS,EAAC,wBAAwB,uBAAa,IAChD,IACF,GACF,EAGN,cAAK,SAAS,EAAC,+EAA+E,YAC5F,eAAM,SAAS,EAAC,wBAAwB,YACrC,gBAAgB,CAAC,QAAQ,CAAC,GACtB,GACH,EAGL,UAAU,IAAI,CACb,eAAK,SAAS,EAAC,0GAA0G,aACvH,eAAM,SAAS,EAAC,iDAAiD,GAAG,EACpE,eAAM,SAAS,EAAC,wBAAwB,qBAAY,IAChD,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAYD,SAAS,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAa;IAC7C,OAAO,CACL,eAAK,SAAS,EAAC,aAAa,aAC1B,eAAK,SAAS,EAAC,yBAAyB,aACtC,yBAAO,IAAI,GAAQ,EACnB,eAAM,SAAS,EAAC,wBAAwB,YAAE,KAAK,GAAQ,IACnD,EACN,cAAK,SAAS,EAAC,wBAAwB,YAAE,KAAK,GAAO,IACjD,CACP,CAAC;AACJ,CAAC;AAED,MAAM,gBAAgB,GAA2B;IAC/C,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE,aAAa;IACvB,cAAc,EAAE,WAAW;IAC3B,QAAQ,EAAE,aAAa;CACxB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Components Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all 2D overlay UI components for the galaxy visualization.
|
|
5
|
+
*/
|
|
6
|
+
export { DetailsPanel } from './DetailsPanel.js';
|
|
7
|
+
export { SecurityPanel } from './SecurityPanel.js';
|
|
8
|
+
export { ControlsPanel } from './ControlsPanel.js';
|
|
9
|
+
export { SearchOverlay } from './SearchOverlay.js';
|
|
10
|
+
export { StatsOverlay } from './StatsOverlay.js';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI Components Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all 2D overlay UI components for the galaxy visualization.
|
|
5
|
+
*/
|
|
6
|
+
export { DetailsPanel } from './DetailsPanel.js';
|
|
7
|
+
export { SecurityPanel } from './SecurityPanel.js';
|
|
8
|
+
export { ControlsPanel } from './ControlsPanel.js';
|
|
9
|
+
export { SearchOverlay } from './SearchOverlay.js';
|
|
10
|
+
export { StatsOverlay } from './StatsOverlay.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Galaxy Constants
|
|
3
|
+
*
|
|
4
|
+
* Centralized configuration for colors, sizes, and visual parameters.
|
|
5
|
+
* All values are tuned for optimal visual clarity and performance.
|
|
6
|
+
*/
|
|
7
|
+
import type { SensitivityLevel, SecurityTier, AuthLevel, DataOperation } from '../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Sensitivity level colors (hex)
|
|
10
|
+
* Designed for dark background with high contrast
|
|
11
|
+
*/
|
|
12
|
+
export declare const SENSITIVITY_COLORS: Record<SensitivityLevel, string>;
|
|
13
|
+
/**
|
|
14
|
+
* Sensitivity level emissive intensity (glow strength)
|
|
15
|
+
*/
|
|
16
|
+
export declare const SENSITIVITY_EMISSIVE: Record<SensitivityLevel, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Security tier colors
|
|
19
|
+
*/
|
|
20
|
+
export declare const SECURITY_TIER_COLORS: Record<SecurityTier, string>;
|
|
21
|
+
/**
|
|
22
|
+
* Authentication level colors for entry points
|
|
23
|
+
*/
|
|
24
|
+
export declare const AUTH_LEVEL_COLORS: Record<AuthLevel, string>;
|
|
25
|
+
/**
|
|
26
|
+
* Data operation colors for paths
|
|
27
|
+
*/
|
|
28
|
+
export declare const OPERATION_COLORS: Record<DataOperation, string>;
|
|
29
|
+
/**
|
|
30
|
+
* Table (planet) size configuration
|
|
31
|
+
*/
|
|
32
|
+
export declare const TABLE_SIZE: {
|
|
33
|
+
/** Minimum radius */
|
|
34
|
+
readonly MIN_RADIUS: 0.5;
|
|
35
|
+
/** Maximum radius */
|
|
36
|
+
readonly MAX_RADIUS: 3;
|
|
37
|
+
/** Base radius for average tables */
|
|
38
|
+
readonly BASE_RADIUS: 1;
|
|
39
|
+
/** Scale factor for row count */
|
|
40
|
+
readonly ROW_COUNT_SCALE: 0.0001;
|
|
41
|
+
/** Scale factor for access frequency */
|
|
42
|
+
readonly ACCESS_SCALE: 0.01;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Field (moon) size configuration
|
|
46
|
+
*/
|
|
47
|
+
export declare const FIELD_SIZE: {
|
|
48
|
+
/** Base radius */
|
|
49
|
+
readonly RADIUS: 0.15;
|
|
50
|
+
/** Orbit radius from parent table */
|
|
51
|
+
readonly ORBIT_RADIUS: 2;
|
|
52
|
+
/** Orbit speed (radians per second) */
|
|
53
|
+
readonly ORBIT_SPEED: 0.5;
|
|
54
|
+
/** Sensitive field scale multiplier */
|
|
55
|
+
readonly SENSITIVE_SCALE: 1.5;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Entry point (space station) size configuration
|
|
59
|
+
*/
|
|
60
|
+
export declare const ENTRY_POINT_SIZE: {
|
|
61
|
+
/** Base scale */
|
|
62
|
+
readonly SCALE: 0.8;
|
|
63
|
+
/** Distance from galaxy center */
|
|
64
|
+
readonly ORBIT_RADIUS: 50;
|
|
65
|
+
/** Height variation */
|
|
66
|
+
readonly HEIGHT_VARIANCE: 10;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Data path (hyperspace lane) configuration
|
|
70
|
+
*/
|
|
71
|
+
export declare const PATH_CONFIG: {
|
|
72
|
+
/** Base line width */
|
|
73
|
+
readonly BASE_WIDTH: 0.05;
|
|
74
|
+
/** Max line width */
|
|
75
|
+
readonly MAX_WIDTH: 0.3;
|
|
76
|
+
/** Curve segments */
|
|
77
|
+
readonly CURVE_SEGMENTS: 50;
|
|
78
|
+
/** Animation speed */
|
|
79
|
+
readonly FLOW_SPEED: 2;
|
|
80
|
+
/** Dash size */
|
|
81
|
+
readonly DASH_SIZE: 0.5;
|
|
82
|
+
/** Gap size */
|
|
83
|
+
readonly GAP_SIZE: 0.3;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* Galaxy layout configuration
|
|
87
|
+
*/
|
|
88
|
+
export declare const GALAXY_LAYOUT: {
|
|
89
|
+
/** Galaxy radius */
|
|
90
|
+
readonly RADIUS: 40;
|
|
91
|
+
/** Vertical spread */
|
|
92
|
+
readonly HEIGHT: 15;
|
|
93
|
+
/** Cluster separation */
|
|
94
|
+
readonly CLUSTER_SEPARATION: 20;
|
|
95
|
+
/** Minimum distance between tables */
|
|
96
|
+
readonly MIN_TABLE_DISTANCE: 5;
|
|
97
|
+
/** Force simulation iterations */
|
|
98
|
+
readonly SIMULATION_ITERATIONS: 300;
|
|
99
|
+
/** Force strength */
|
|
100
|
+
readonly FORCE_STRENGTH: -30;
|
|
101
|
+
/** Link distance */
|
|
102
|
+
readonly LINK_DISTANCE: 10;
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Camera configuration
|
|
106
|
+
*/
|
|
107
|
+
export declare const CAMERA_CONFIG: {
|
|
108
|
+
/** Default position */
|
|
109
|
+
readonly DEFAULT_POSITION: {
|
|
110
|
+
readonly x: 0;
|
|
111
|
+
readonly y: 30;
|
|
112
|
+
readonly z: 60;
|
|
113
|
+
};
|
|
114
|
+
/** Default target */
|
|
115
|
+
readonly DEFAULT_TARGET: {
|
|
116
|
+
readonly x: 0;
|
|
117
|
+
readonly y: 0;
|
|
118
|
+
readonly z: 0;
|
|
119
|
+
};
|
|
120
|
+
/** Field of view */
|
|
121
|
+
readonly FOV: 60;
|
|
122
|
+
/** Near clipping plane */
|
|
123
|
+
readonly NEAR: 0.1;
|
|
124
|
+
/** Far clipping plane */
|
|
125
|
+
readonly FAR: 1000;
|
|
126
|
+
/** Zoom limits */
|
|
127
|
+
readonly MIN_ZOOM: 0.5;
|
|
128
|
+
readonly MAX_ZOOM: 5;
|
|
129
|
+
/** Pan limits */
|
|
130
|
+
readonly PAN_LIMIT: 100;
|
|
131
|
+
/** Rotation speed */
|
|
132
|
+
readonly ROTATION_SPEED: 0.5;
|
|
133
|
+
/** Zoom speed */
|
|
134
|
+
readonly ZOOM_SPEED: 1.2;
|
|
135
|
+
/** Animation duration (ms) */
|
|
136
|
+
readonly ANIMATION_DURATION: 1000;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* Bloom effect configuration
|
|
140
|
+
*/
|
|
141
|
+
export declare const BLOOM_CONFIG: {
|
|
142
|
+
/** Intensity */
|
|
143
|
+
readonly INTENSITY: 1.5;
|
|
144
|
+
/** Luminance threshold */
|
|
145
|
+
readonly LUMINANCE_THRESHOLD: 0.2;
|
|
146
|
+
/** Luminance smoothing */
|
|
147
|
+
readonly LUMINANCE_SMOOTHING: 0.9;
|
|
148
|
+
/** Blur passes */
|
|
149
|
+
readonly BLUR_PASSES: 5;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* Particle effect configuration
|
|
153
|
+
*/
|
|
154
|
+
export declare const PARTICLE_CONFIG: {
|
|
155
|
+
/** Star field count */
|
|
156
|
+
readonly STAR_COUNT: 5000;
|
|
157
|
+
/** Star size */
|
|
158
|
+
readonly STAR_SIZE: 0.1;
|
|
159
|
+
/** Access pulse duration (ms) */
|
|
160
|
+
readonly PULSE_DURATION: 500;
|
|
161
|
+
/** Trail length */
|
|
162
|
+
readonly TRAIL_LENGTH: 20;
|
|
163
|
+
};
|
|
164
|
+
/**
|
|
165
|
+
* Animation configuration
|
|
166
|
+
*/
|
|
167
|
+
export declare const ANIMATION_CONFIG: {
|
|
168
|
+
/** Hover scale */
|
|
169
|
+
readonly HOVER_SCALE: 1.2;
|
|
170
|
+
/** Selection scale */
|
|
171
|
+
readonly SELECTION_SCALE: 1.3;
|
|
172
|
+
/** Pulse frequency (Hz) */
|
|
173
|
+
readonly PULSE_FREQUENCY: 2;
|
|
174
|
+
/** Rotation speed for idle animation */
|
|
175
|
+
readonly IDLE_ROTATION: 0.001;
|
|
176
|
+
/** Transition duration (ms) */
|
|
177
|
+
readonly TRANSITION_DURATION: 300;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Tooltip configuration
|
|
181
|
+
*/
|
|
182
|
+
export declare const TOOLTIP_CONFIG: {
|
|
183
|
+
/** Offset from cursor */
|
|
184
|
+
readonly OFFSET: {
|
|
185
|
+
readonly x: 15;
|
|
186
|
+
readonly y: 15;
|
|
187
|
+
};
|
|
188
|
+
/** Show delay (ms) */
|
|
189
|
+
readonly SHOW_DELAY: 200;
|
|
190
|
+
/** Hide delay (ms) */
|
|
191
|
+
readonly HIDE_DELAY: 100;
|
|
192
|
+
/** Max width */
|
|
193
|
+
readonly MAX_WIDTH: 300;
|
|
194
|
+
};
|
|
195
|
+
/**
|
|
196
|
+
* Label configuration
|
|
197
|
+
*/
|
|
198
|
+
export declare const LABEL_CONFIG: {
|
|
199
|
+
/** Font size */
|
|
200
|
+
readonly FONT_SIZE: 12;
|
|
201
|
+
/** Font family */
|
|
202
|
+
readonly FONT_FAMILY: "Inter, system-ui, sans-serif";
|
|
203
|
+
/** Background opacity */
|
|
204
|
+
readonly BG_OPACITY: 0.8;
|
|
205
|
+
/** Padding */
|
|
206
|
+
readonly PADDING: 4;
|
|
207
|
+
/** Distance from node */
|
|
208
|
+
readonly OFFSET: 0.5;
|
|
209
|
+
/** Fade distance */
|
|
210
|
+
readonly FADE_DISTANCE: 30;
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Performance thresholds
|
|
214
|
+
*/
|
|
215
|
+
export declare const PERFORMANCE_CONFIG: {
|
|
216
|
+
/** Max visible tables before LOD kicks in */
|
|
217
|
+
readonly MAX_DETAILED_TABLES: 50;
|
|
218
|
+
/** Max visible paths before simplification */
|
|
219
|
+
readonly MAX_DETAILED_PATHS: 200;
|
|
220
|
+
/** Max visible fields */
|
|
221
|
+
readonly MAX_VISIBLE_FIELDS: 500;
|
|
222
|
+
/** Frame rate target */
|
|
223
|
+
readonly TARGET_FPS: 60;
|
|
224
|
+
/** Frustum culling margin */
|
|
225
|
+
readonly CULLING_MARGIN: 1.5;
|
|
226
|
+
/** LOD distance thresholds */
|
|
227
|
+
readonly LOD_DISTANCES: readonly [20, 50, 100];
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Common domain clusters for auto-grouping tables
|
|
231
|
+
*/
|
|
232
|
+
export declare const DOMAIN_CLUSTERS: {
|
|
233
|
+
readonly auth: readonly ["users", "accounts", "sessions", "tokens", "permissions", "roles"];
|
|
234
|
+
readonly commerce: readonly ["orders", "products", "carts", "payments", "invoices", "subscriptions"];
|
|
235
|
+
readonly content: readonly ["posts", "comments", "media", "files", "documents", "attachments"];
|
|
236
|
+
readonly messaging: readonly ["messages", "notifications", "emails", "chats", "threads"];
|
|
237
|
+
readonly analytics: readonly ["events", "logs", "metrics", "analytics", "tracking"];
|
|
238
|
+
readonly config: readonly ["settings", "preferences", "configurations", "features", "flags"];
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* Cluster colors
|
|
242
|
+
*/
|
|
243
|
+
export declare const CLUSTER_COLORS: Record<string, string>;
|
|
244
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMlG;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAMtD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAMxD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAMpD,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAK9C,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAKjD,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,qBAAqB;;IAErB,qBAAqB;;IAErB,qCAAqC;;IAErC,iCAAiC;;IAEjC,wCAAwC;;CAEhC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,UAAU;IACrB,kBAAkB;;IAElB,qCAAqC;;IAErC,uCAAuC;;IAEvC,uCAAuC;;CAE/B,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,iBAAiB;;IAEjB,kCAAkC;;IAElC,uBAAuB;;CAEf,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;IACtB,sBAAsB;;IAEtB,qBAAqB;;IAErB,qBAAqB;;IAErB,sBAAsB;;IAEtB,gBAAgB;;IAEhB,eAAe;;CAEP,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB,oBAAoB;;IAEpB,sBAAsB;;IAEtB,yBAAyB;;IAEzB,sCAAsC;;IAEtC,kCAAkC;;IAElC,qBAAqB;;IAErB,oBAAoB;;CAEZ,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,aAAa;IACxB,uBAAuB;;;;;;IAEvB,qBAAqB;;;;;;IAErB,oBAAoB;;IAEpB,0BAA0B;;IAE1B,yBAAyB;;IAEzB,kBAAkB;;;IAGlB,iBAAiB;;IAEjB,qBAAqB;;IAErB,iBAAiB;;IAEjB,8BAA8B;;CAEtB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,gBAAgB;;IAEhB,0BAA0B;;IAE1B,0BAA0B;;IAE1B,kBAAkB;;CAEV,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,eAAe;IAC1B,uBAAuB;;IAEvB,gBAAgB;;IAEhB,iCAAiC;;IAEjC,mBAAmB;;CAEX,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,kBAAkB;;IAElB,sBAAsB;;IAEtB,2BAA2B;;IAE3B,wCAAwC;;IAExC,+BAA+B;;CAEvB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,yBAAyB;;;;;IAEzB,sBAAsB;;IAEtB,sBAAsB;;IAEtB,gBAAgB;;CAER,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,YAAY;IACvB,gBAAgB;;IAEhB,kBAAkB;;IAElB,yBAAyB;;IAEzB,cAAc;;IAEd,yBAAyB;;IAEzB,oBAAoB;;CAEZ,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,kBAAkB;IAC7B,6CAA6C;;IAE7C,8CAA8C;;IAE9C,yBAAyB;;IAEzB,wBAAwB;;IAExB,6BAA6B;;IAE7B,8BAA8B;;CAEtB,CAAC;AAMX;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;CAOlB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAQxC,CAAC"}
|