Files
website/src/lib/config/terminal.ts
T
2025-11-28 06:17:25 +00:00

239 lines
5.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// ============================================================================
// TERMINAL DISPLAY SETTINGS
// ============================================================================
export type SpeedPreset = 'instant' | 'fast' | 'normal' | 'slow' | 'typewriter';
export const terminalSettings = {
// Base typing speed in ms per character (will be adjusted by content length)
baseTypeSpeed: 20,
// Minimum typing speed (fastest)
minTypeSpeed: 5,
// Maximum typing speed (slowest)
maxTypeSpeed: 50,
// Delay before starting to type (ms)
startDelay: 300,
// Delay between lines (ms)
lineDelay: 100,
// Show cursor
showCursor: true,
// Prompt style
promptStyle: 'full' as 'full' | 'short' | 'minimal',
// Terminal icon (emoji or text)
icon: '🐧',
// Scroll margin when navigating buttons (px)
scrollMargin: 80,
};
// ============================================================================
// TUI (Terminal UI) STYLING
// ============================================================================
export const tuiStyle = {
// Border & container
borderRadius: 8, // px
borderWidth: 2, // px
width: '95%',
borderGlowOpacity: 0.5,
borderGlowBlur: 4, // px
// Header
headerPadding: '0.5rem 0.75rem',
headerFontSize: '0.8rem',
// Body
bodyPadding: '1rem 1.25rem 2rem 1.25rem',
bodyFontSize: '0.9rem',
lineHeight: 1.7,
lineMinHeight: '1.7em',
blankLineHeight: '0.5em',
// Divider
dividerMargin: '0.75rem 0',
// Images
imageBorderRadius: 6, // px
defaultImageWidth: 300, // px
// Cursor
cursorWidth: 8, // px
// Scrollbar
scrollbarWidth: 6, // px
// Footer/Statusbar
statusbarPadding: '0.4rem 0.75rem',
statusbarFontSize: '0.75rem',
hintFontSize: '0.7rem',
hintBorderRadius: 3, // px
// Buttons
buttonPadding: '0.5rem 0.75rem',
buttonMargin: '0.2rem 0',
buttonBorderRadius: 4, // px
buttonFontSize: '0.9rem',
buttonIndicatorFontSize: '0.8rem',
buttonIndicatorWidth: '1rem',
};
// ============================================================================
// TUI TEXT & INDICATORS
// ============================================================================
export const tuiText = {
// Status text
loading: 'Loading...',
ready: 'Ready',
skipButton: 'Skip (Y)',
tuiLabel: 'TUI',
// Keyboard hints
hints: {
navigate: '↑↓ navigate',
select: '⏎ select',
toggle: 'T theme',
},
// Line prefixes
prefixes: {
error: '✗ ',
success: '✓ ',
info: ' ',
warning: '⚠ ',
command: '$ ',
},
// Button indicators
buttonIndicator: {
selected: '▶',
unselected: ' ',
},
};
// ============================================================================
// Per-page speed settings (override global settings)
// Use preset names or custom multiplier (0.1 = 10x faster, 2 = 2x slower)
// ============================================================================
export const pageSpeedSettings: Record<string, SpeedPreset | number> = {
// Examples:
// 'home': 'fast', // Fast typing on home page
// 'portfolio': 'normal', // Normal speed
// 'models': 'instant', // No typing animation
// 'hackathons': 0.5, // Custom: 2x faster than normal
'home': 'fast',
'portfolio': 'fast',
'models': 'fast',
'projects': 'fast'
};
// Per-page autoscroll settings (whether to auto-scroll as content types)
// Set to false to disable autoscroll on specific pages
export const pageAutoscrollSettings: Record<string, boolean> = {
// Examples:
// 'home': true, // Enable autoscroll
// 'portfolio': false, // Disable autoscroll
'home': true,
'portfolio': false,
'models': false,
'projects': false,
'components': false
};
// Speed preset multipliers (lower = faster)
export const speedPresets: Record<SpeedPreset, number> = {
'instant': 0, // No delay, instant display
'fast': 0.1, // 3x faster
'normal': 0.5, // Default speed
'slow': 1.5, // 2x slower
'typewriter': 2 // 3x slower, classic typewriter feel
};
// ============================================================================
// MODEL VIEWER (3D)
// ============================================================================
export const modelViewer = {
// Container
borderRadius: 8, // px
minHeight: 300, // px
headerPadding: '0.5rem 0.75rem',
nameFontSize: '0.85rem',
// Controls
controlButtonSize: 28, // px
controlButtonBorderRadius: 4, // px
fullscreenZIndex: 100,
fullscreenTopOffset: 60, // px (navbar height)
// Camera
cameraFov: 45,
cameraNear: 0.1,
cameraFar: 1000,
cameraZ: 2.5, // initial camera distance
// Controls behavior
controlsMinDistance: 1,
controlsMaxDistance: 10,
dampingFactor: 0.05,
autoRotateSpeed: 2,
// Model
modelScale: 1.5,
// Ground plane
groundColor: 0x222222,
groundOpacity: 0.3,
// Lighting
ambientIntensity: 0.6,
directionalIntensity: 0.8,
lightColor: 0xffffff,
rimLightColor: 0x88ccff,
// Text
loadingText: 'Loading model...',
errorText: 'Failed to load model',
hints: {
rotate: 'Drag to rotate',
zoom: 'Scroll to zoom',
},
// Timing
resizeTimeout: 100, // ms
};
// ============================================================================
// PARTICLES (3D Background)
// ============================================================================
export const particles = {
count: 600,
spreadArea: 20,
size: 0.05,
velocityRange: 0.01,
// Opacity
darkOpacity: 0.6,
lightOpacity: 0.4,
// Motion
waveAmplitude: 0.001,
waveFrequency: 0.1,
boundary: 10, // wrap boundary
rotationSpeedY: 0.05,
rotationSpeedX: 0.02,
};
// ============================================================================
// KEYBOARD SHORTCUTS
// ============================================================================
export const keyboardShortcuts = {
skip: ['y', 'Y'], // Skip typing animation
toggleTheme: ['t', 'T'], // Toggle dark/light mode
navigateUp: ['ArrowUp', 'k'],
navigateDown: ['ArrowDown', 'j'],
select: ['Enter'],
};