import { StatusLevel } from '../../utils'; import { AstroIconName } from '../display/AstroIcon'; /** * Threshold configuration for automatic status derivation * Values are compared: value >= threshold triggers that status (high thresholds) * or value <= threshold triggers that status (low thresholds) */ export interface StatusThresholds { /** Value at or above which status becomes 'critical' (high is bad) */ critical?: number; /** Value at or above which status becomes 'serious' (high is bad) */ serious?: number; /** Value at or above which status becomes 'caution' (high is bad) */ caution?: number; /** Value at or below which status becomes 'caution' (low is bad) */ cautionLow?: number; /** Value at or below which status becomes 'serious' (low is bad) */ seriousLow?: number; /** Value at or below which status becomes 'critical' (low is bad) */ criticalLow?: number; } /** * Complete property configuration */ export interface PropertyConfig { /** Display name (sentence case per AstroUXDS) */ label: string; /** Astro icon name */ icon: AstroIconName; /** Unit of measurement */ unit?: string; /** Precision for number formatting */ precision?: number; /** Status thresholds for auto-derivation */ thresholds?: StatusThresholds; /** Category for grouping */ category?: PropertyCategory; /** Description for tooltips */ description?: string; /** Format function override */ format?: (value: number) => string; } /** * Property categories for organization */ export type PropertyCategory = "power" | "thermal" | "attitude" | "communications" | "propulsion" | "navigation" | "payload" | "health" | "orbital" | "general"; /** * Property key - either a preset name or custom string */ export type PropertyKey = keyof typeof PROPERTY_PRESETS | (string & {}); /** * Predefined property configurations for common space operations telemetry * * These provide sensible defaults that can be overridden per-use. */ export declare const PROPERTY_PRESETS: { readonly battery: { readonly label: "Battery"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly criticalLow: 10; readonly seriousLow: 20; readonly cautionLow: 30; }; readonly description: "Battery state of charge"; }; readonly voltage: { readonly label: "Voltage"; readonly icon: AstroIconName; readonly unit: "V"; readonly precision: 2; readonly category: PropertyCategory; readonly thresholds: { readonly criticalLow: 24; readonly cautionLow: 26; }; readonly description: "Bus voltage"; }; readonly current: { readonly label: "Current"; readonly icon: AstroIconName; readonly unit: "A"; readonly precision: 2; readonly category: PropertyCategory; readonly description: "Current draw"; }; readonly power: { readonly label: "Power"; readonly icon: AstroIconName; readonly unit: "W"; readonly precision: 1; readonly category: PropertyCategory; readonly description: "Power consumption or generation"; }; readonly solarPower: { readonly label: "Solar"; readonly icon: AstroIconName; readonly unit: "W"; readonly precision: 1; readonly category: PropertyCategory; readonly description: "Solar array output"; }; readonly load: { readonly label: "Load"; readonly icon: AstroIconName; readonly unit: "W"; readonly precision: 1; readonly category: PropertyCategory; readonly description: "Power load"; }; readonly temperature: { readonly label: "Temperature"; readonly icon: AstroIconName; readonly unit: "°C"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 80; readonly serious: 70; readonly caution: 60; readonly cautionLow: -20; readonly criticalLow: -40; }; readonly description: "Component temperature"; }; readonly heater: { readonly label: "Heater"; readonly icon: AstroIconName; readonly unit: ""; readonly category: PropertyCategory; readonly description: "Heater status"; }; readonly roll: { readonly label: "Roll"; readonly icon: AstroIconName; readonly unit: "°"; readonly precision: 2; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 45; readonly caution: 30; }; readonly description: "Roll angle"; }; readonly pitch: { readonly label: "Pitch"; readonly icon: AstroIconName; readonly unit: "°"; readonly precision: 2; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 45; readonly caution: 30; }; readonly description: "Pitch angle"; }; readonly yaw: { readonly label: "Yaw"; readonly icon: AstroIconName; readonly unit: "°"; readonly precision: 2; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 45; readonly caution: 30; }; readonly description: "Yaw angle"; }; readonly pointingError: { readonly label: "Pointing error"; readonly icon: AstroIconName; readonly unit: "°"; readonly precision: 3; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 1; readonly serious: 0.5; readonly caution: 0.1; }; readonly description: "Attitude pointing error"; }; readonly angularVelocity: { readonly label: "Angular velocity"; readonly icon: AstroIconName; readonly unit: "°/s"; readonly precision: 3; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 5; readonly caution: 2; }; readonly description: "Rotation rate"; }; readonly signalStrength: { readonly label: "Signal"; readonly icon: AstroIconName; readonly unit: "dBm"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly criticalLow: -100; readonly cautionLow: -85; }; readonly description: "Received signal strength"; }; readonly dataRate: { readonly label: "Data rate"; readonly icon: AstroIconName; readonly unit: "Mbps"; readonly precision: 2; readonly category: PropertyCategory; readonly description: "Communication data rate"; }; readonly packetLoss: { readonly label: "Packet loss"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 2; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 10; readonly serious: 5; readonly caution: 1; }; readonly description: "Communication packet loss rate"; }; readonly snr: { readonly label: "SNR"; readonly icon: AstroIconName; readonly unit: "dB"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly criticalLow: 5; readonly cautionLow: 10; }; readonly description: "Signal-to-noise ratio"; }; readonly queue: { readonly label: "Queue"; readonly icon: AstroIconName; readonly unit: "pkts"; readonly precision: 0; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 1000; readonly caution: 500; }; readonly description: "Packet queue depth"; }; readonly fuelLevel: { readonly label: "Fuel"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 5; readonly serious: 10; readonly caution: 20; }; readonly description: "Propellant remaining"; }; readonly deltaV: { readonly label: "Delta-V"; readonly icon: AstroIconName; readonly unit: "m/s"; readonly precision: 1; readonly category: PropertyCategory; readonly description: "Available delta-V budget"; }; readonly thrustLevel: { readonly label: "Thrust"; readonly icon: AstroIconName; readonly unit: "N"; readonly precision: 2; readonly category: PropertyCategory; readonly description: "Current thrust output"; }; readonly altitude: { readonly label: "Altitude"; readonly icon: AstroIconName; readonly unit: "km"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly criticalLow: 200; readonly cautionLow: 250; }; readonly description: "Orbital altitude"; }; readonly velocity: { readonly label: "Velocity"; readonly icon: AstroIconName; readonly unit: "km/s"; readonly precision: 3; readonly category: PropertyCategory; readonly description: "Orbital velocity"; }; readonly inclination: { readonly label: "Inclination"; readonly icon: AstroIconName; readonly unit: "°"; readonly precision: 2; readonly category: PropertyCategory; readonly description: "Orbital inclination"; }; readonly eccentricity: { readonly label: "Eccentricity"; readonly icon: AstroIconName; readonly unit: ""; readonly precision: 6; readonly category: PropertyCategory; readonly description: "Orbital eccentricity"; }; readonly payloadStatus: { readonly label: "Payload"; readonly icon: AstroIconName; readonly unit: ""; readonly category: PropertyCategory; readonly description: "Payload operational status"; }; readonly storageUsed: { readonly label: "Storage"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 95; readonly serious: 90; readonly caution: 80; }; readonly description: "Onboard storage usage"; }; readonly cpuUsage: { readonly label: "CPU"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 95; readonly serious: 85; readonly caution: 75; }; readonly description: "Processor utilization"; }; readonly memoryUsage: { readonly label: "Memory"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly thresholds: { readonly critical: 95; readonly serious: 85; readonly caution: 75; }; readonly description: "Memory utilization"; }; readonly uptime: { readonly label: "Uptime"; readonly icon: AstroIconName; readonly unit: "s"; readonly precision: 0; readonly category: PropertyCategory; readonly description: "System uptime"; }; readonly count: { readonly label: "Count"; readonly icon: AstroIconName; readonly unit: ""; readonly precision: 0; readonly category: PropertyCategory; readonly description: "Item count"; }; readonly percentage: { readonly label: "Percentage"; readonly icon: AstroIconName; readonly unit: "%"; readonly precision: 1; readonly category: PropertyCategory; readonly description: "Percentage value"; }; readonly duration: { readonly label: "Duration"; readonly icon: AstroIconName; readonly unit: "s"; readonly precision: 0; readonly category: PropertyCategory; readonly description: "Time duration"; }; }; export declare const CATEGORY_ICONS: Record; export declare const CATEGORY_LABELS: Record; /** * Get property configuration by key * Returns preset config or a default config for unknown properties */ export declare function getPropertyConfig(key: PropertyKey): PropertyConfig; /** * Format a property key into a display label (sentence case) */ export declare function formatPropertyLabel(key: string): string; /** * Derive status level from a value and thresholds * * @param value - Current value * @param thresholds - Status thresholds * @returns StatusLevel * * @example * ```tsx * deriveStatus(75, { caution: 60, critical: 80 }) // 'caution' * deriveStatus(25, { criticalLow: 10, cautionLow: 30 }) // 'caution' * deriveStatus(50, { caution: 60, critical: 80 }) // 'normal' * ``` */ export declare function deriveStatus(value: number | undefined | null, thresholds?: StatusThresholds): StatusLevel; /** * Derive status for battery specifically (low is bad) */ export declare function deriveBatteryStatus(level: number | undefined): StatusLevel; /** * Format a value with its property config */ export declare function formatPropertyValue(value: number | undefined | null, config: PropertyConfig): string; /** * Create a custom property config by merging with a preset */ export declare function createPropertyConfig(baseKey: PropertyKey, overrides: Partial): PropertyConfig; /** * Get all properties in a category */ export declare function getPropertiesByCategory(category: PropertyCategory): Array<{ key: string; config: PropertyConfig; }>;