Ashutosh1975270's picture
feat: improve graph visualization, stabilize multi-hop path reasoning, and update multi-hop page styling
f14eb69
Raw
History Blame Contribute Delete
2.92 kB
export const API_BASE_URL =
process.env.NEXT_PUBLIC_API_URL || 'http://127.0.0.1:8000/api';
export const POLLING_INTERVAL_MS = 4000;
export const ENTITY_COLORS: Record<string, string> = {
PERSON: '#60a5fa',
ORGANIZATION: '#34d399',
PRODUCT: '#f97316',
TECHNOLOGY: '#a78bfa',
LOCATION: '#fbbf24',
EVENT: '#f472b6',
DATE: '#94a3b8',
CONCEPT: '#e879f9',
DOCUMENT: '#22d3ee',
SYSTEM: '#fb923c',
MODULE: '#c084fc',
SERVICE: '#2dd4bf',
COMPONENT: '#f87171',
TEAM: '#60a5fa',
PROJECT: '#a3e635',
DATABASE: '#facc15',
API: '#38bdf8',
FRAMEWORK: '#818cf8',
LIBRARY: '#fb7185',
INFRASTRUCTURE: '#4ade80',
DEPARTMENT: '#22d3ee',
CLASS: '#e879f9',
FUNCTION: '#c084fc',
INTERFACE: '#f87171',
SCHEMA: '#fbbf24',
TABLE: '#a78bfa',
FILE: '#60a5fa',
REPOSITORY: '#34d399',
SERVER: '#f97316',
CLOUD: '#38bdf8',
PROTOCOL: '#2dd4bf',
ALGORITHM: '#e879f9',
STANDARD: '#94a3b8',
COMPANY: '#34d399',
EMPLOYEE: '#60a5fa',
USER: '#60a5fa',
ROLE: '#c084fc',
PERMISSION: '#f87171',
CONFIGURATION: '#fbbf24',
DEPLOYMENT: '#4ade80',
RELEASE: '#a3e635',
VERSION: '#fb923c',
TEST: '#22d3ee',
BUG: '#f87171',
FEATURE: '#e879f9',
REQUIREMENT: '#a78bfa',
TASK: '#34d399',
SPRINT: '#f97316',
EPIC: '#fb7185',
STORY: '#60a5fa',
UNKNOWN: '#94a3b8',
};
export const ENTITY_TYPES = Object.keys(ENTITY_COLORS);
export const RELATIONSHIP_TYPES = [
'WORKS_AT',
'MANAGES',
'PART_OF',
'DEPENDS_ON',
'CREATED_BY',
'LOCATED_IN',
'RELATED_TO',
'COMPETES_WITH',
'PARTNER_OF',
'SUCCEEDED_BY',
'BUILT_BY',
'LEADS',
'IMPLEMENTED_BY',
'USES',
'CONTAINS',
'BELONGS_TO',
'OWNS',
'DEVELOPS',
'DEPLOYS',
'TESTS',
'MAINTAINS',
'SUPPORTS',
'INTEGRATES_WITH',
'CALLS',
'INVOKES',
'TRIGGERS',
'REQUIRES',
'EXTENDS',
'IMPLEMENTS',
'INHERITS',
'COMPOSED_OF',
'GENERATES',
'PRODUCES',
'CONSUMES',
'SENDS',
'RECEIVES',
'STORES',
'READS',
'WRITES',
'CONFIGURES',
'MONITORS',
'LOGS',
'TRANSFORMS',
'VALIDATES',
'TRANSFERS',
'ROUTES',
'CONNECTS',
'ASSIGNS',
'DELEGATES',
'AUTHORIZES',
'AUTHENTICATES',
];
const EXTRA_COLORS: string[] = [
'#14b8a6', '#f59e0b', '#8b5cf6', '#ef4444', '#22c55e',
'#06b6d4', '#ec4899', '#84cc16', '#6366f1', '#f97316',
'#10b981', '#a855f7', '#e11d48', '#0ea5e9', '#eab308',
'#d946ef', '#3b82f6', '#2dd4bf', '#f43f5e', '#86efac',
'#7dd3fc', '#fda4af', '#bef264', '#c4b5fd', '#fed7aa',
];
function simpleHash(str: string): number {
let hash = 0;
for (let i = 0; i < str.length; i++) {
hash = ((hash << 5) - hash + str.charCodeAt(i)) | 0;
}
return Math.abs(hash);
}
export function entityColor(type: string): string {
if (!type) return '#94a3b8';
const upper = type.toUpperCase();
if (ENTITY_COLORS[upper]) return ENTITY_COLORS[upper];
return EXTRA_COLORS[simpleHash(upper) % EXTRA_COLORS.length] || '#94a3b8';
}