Files
datacenter-designer/public/js/config.js
Stefano Manfredi 3431a121a9 First commit
2025-10-27 11:57:38 +00:00

246 lines
4.8 KiB
JavaScript

/**
* Frontend Configuration
* Central configuration for all frontend constants and settings
*/
export const CONFIG = {
// Rack Configuration
RACK: {
WIDTH: 520,
HEIGHT: 1510,
SLOTS: 42,
NAME_PREFIX_DEFAULT: 'RACK',
// Grid snapping
GRID: {
HORIZONTAL: 600,
VERTICAL: 1610
},
// Visual styling
FILL_COLOR: '#f8f8f8',
STROKE_COLOR: '#333',
STROKE_WIDTH: 2,
// Name label
NAME_OFFSET_Y: -25,
NAME_FONT_SIZE: 16,
NAME_FONT_FAMILY: 'Arial',
NAME_COLOR: '#333'
},
// Device Configuration
DEVICE: {
HEIGHT: 32,
SPACING: 2,
// Width varies by view
WIDTH: {
PHYSICAL: 500,
LOGICAL: 120
},
// Margins within rack
MARGIN: {
TOP: 10,
RIGHT: 10,
BOTTOM: 10,
LEFT: 10
},
// Visual styling
STROKE_WIDTH: 1,
CORNER_RADIUS: 4,
// Text
FONT_SIZE: 13,
FONT_FAMILY: 'Arial',
TEXT_COLOR: '#fff',
// Form factor
MIN_RACK_UNITS: 1,
MAX_RACK_UNITS: 42
},
// Connection Configuration
CONNECTION: {
STROKE_WIDTH: 2,
STROKE_COLOR: '#4A90E2',
STROKE_COLOR_HOVER: '#357ABD',
STROKE_COLOR_SELECTED: '#FF6B6B',
SELECTED_WIDTH: 3,
// Waypoint handles
HANDLE_RADIUS: 6,
HANDLE_FILL: '#4A90E2',
HANDLE_STROKE: '#fff',
HANDLE_STROKE_WIDTH: 2,
// Hit detection
HIT_STROKE_WIDTH: 10
},
// Canvas/Stage Configuration
CANVAS: {
// Initial position offset
INITIAL_OFFSET: { x: 50, y: 50 },
// Zoom limits
MIN_SCALE: 0.1,
MAX_SCALE: 3.0,
// Zoom step
ZOOM_STEP: 0.1,
// Default scale
DEFAULT_SCALE: 1.0,
// Pan cursor
PAN_CURSOR: 'grabbing'
},
// View Configuration
VIEWS: {
CANVAS: {
PHYSICAL: 'physical',
LOGICAL: 'logical'
},
TABLE: {
RACKS: 'racks',
DEVICES: 'devices',
CONNECTIONS: 'connections'
}
},
// UI Configuration
UI: {
// Toolbar height
TOOLBAR_HEIGHT: 50,
// Table pane
TABLE_PANE: {
MIN_HEIGHT: 150,
DEFAULT_HEIGHT: 300,
MAX_HEIGHT_RATIO: 0.7 // 70% of viewport
},
// Resize handle
RESIZE_HANDLE_HEIGHT: 6,
// Context menu
CONTEXT_MENU: {
MIN_WIDTH: 200,
ANIMATION_DELAY: 100
},
// Modals
MODAL: {
MAX_WIDTH: 600,
MAX_WIDTH_LARGE: 800,
MAX_HEIGHT_RATIO: 0.8
}
},
// Animation Configuration
ANIMATION: {
DURATION: 200, // ms
EASING: 'ease-in-out'
},
// Colors (Theme)
COLORS: {
PRIMARY: '#4A90E2',
PRIMARY_DARK: '#357ABD',
SECONDARY: '#f5f5f5',
SUCCESS: '#4CAF50',
DANGER: '#d32f2f',
WARNING: '#ff9800',
// Grays
GRAY_100: '#f9f9f9',
GRAY_200: '#f5f5f5',
GRAY_300: '#e0e0e0',
GRAY_400: '#d0d0d0',
GRAY_500: '#999',
GRAY_600: '#666',
GRAY_700: '#333',
// Backgrounds
BG_CANVAS: '#f5f5f5',
BG_RACK: '#f8f8f8',
BG_MODAL: 'rgba(0, 0, 0, 0.5)',
// Selection
SELECTION_BG: '#e3f2fd',
HOVER_BG: '#f0f7ff'
},
// Keyboard Shortcuts
KEYS: {
DELETE: ['Delete', 'Backspace'],
ESCAPE: 'Escape',
CTRL: 'Control',
// Future shortcuts
UNDO: 'z', // Ctrl+Z
REDO: 'y', // Ctrl+Y
SAVE: 's', // Ctrl+S
SELECT_ALL: 'a', // Ctrl+A
COPY: 'c', // Ctrl+C
PASTE: 'v', // Ctrl+V
FIT_VIEW: 'f' // F key
},
// API Configuration
API: {
BASE_URL: '', // Same origin
TIMEOUT: 30000, // 30 seconds
RETRY_ATTEMPTS: 3,
RETRY_DELAY: 1000 // 1 second
},
// Local Storage Keys
STORAGE: {
CURRENT_PROJECT_ID: 'currentProjectId',
CURRENT_CANVAS_VIEW: 'currentCanvasView',
GRID_SIZE: 'gridSize',
GRID_VERTICAL: 'gridVertical',
THEME: 'theme', // 'light' or 'dark'
ZOOM_LEVEL: 'zoomLevel'
},
// Export/Import
EXPORT: {
VERSION: '1.0',
JSON_INDENT: 2,
EXCEL_FORMATS: {
DATE: 'yyyy-mm-dd',
DATETIME: 'yyyy-mm-dd hh:mm:ss'
}
},
// Validation
VALIDATION: {
PROJECT: {
NAME_MIN: 1,
NAME_MAX: 100,
DESC_MAX: 500
},
RACK: {
NAME_MIN: 1,
NAME_MAX: 50,
COUNT_MIN: 1,
COUNT_MAX: 20
},
DEVICE: {
NAME_MIN: 1,
NAME_MAX: 50
}
},
// Debug
DEBUG: {
ENABLED: false, // Set to true for development
LOG_API_CALLS: false,
LOG_STATE_CHANGES: false,
SHOW_FPS: false,
KONVA_WARNINGS: true
}
};
// Freeze config to prevent modifications
Object.freeze(CONFIG);
Object.freeze(CONFIG.RACK);
Object.freeze(CONFIG.DEVICE);
Object.freeze(CONFIG.CONNECTION);
Object.freeze(CONFIG.CANVAS);
Object.freeze(CONFIG.VIEWS);
Object.freeze(CONFIG.UI);
Object.freeze(CONFIG.COLORS);
Object.freeze(CONFIG.KEYS);
Object.freeze(CONFIG.API);
Object.freeze(CONFIG.STORAGE);
Object.freeze(CONFIG.EXPORT);
Object.freeze(CONFIG.VALIDATION);
Object.freeze(CONFIG.DEBUG);
export default CONFIG;