agentjs-core
Version:
A comprehensive agent-based modeling framework with built-in p5.js visualization
208 lines (206 loc) • 5.03 kB
TypeScript
import { EventEmitter } from 'eventemitter3';
/**
* Parameter value types
*/
export type ParameterValue = number | boolean | string;
/**
* Parameter types
*/
export declare enum ParameterType {
NUMBER = "number",
BOOLEAN = "boolean",
ENUM = "enum"
}
/**
* Parameter definition
*/
export interface ParameterDefinition {
key: string;
label: string;
type: ParameterType;
defaultValue: ParameterValue;
description?: string;
category?: string;
min?: number;
max?: number;
step?: number;
options?: string[];
validator?: (value: ParameterValue) => boolean;
displayOrder?: number;
hidden?: boolean;
readonly?: boolean;
}
/**
* Parameter group for organization
*/
export interface ParameterGroup {
name: string;
label: string;
parameters: ParameterDefinition[];
collapsed?: boolean;
}
/**
* Parameter change event
*/
export interface ParameterChangeEvent {
key: string;
oldValue: ParameterValue;
newValue: ParameterValue;
source: 'ui' | 'api' | 'preset';
}
/**
* Parameter preset
*/
export interface ParameterPreset {
name: string;
description?: string;
values: Record<string, ParameterValue>;
}
/**
* Manager events
*/
export interface ParameterManagerEvents {
'parameter:changed': (event: ParameterChangeEvent) => void;
'parameter:registered': (definition: ParameterDefinition) => void;
'preset:applied': (preset: ParameterPreset) => void;
'validation:failed': (key: string, value: ParameterValue, error: string) => void;
}
/**
* Dynamic parameter management system
*/
export declare class ParameterManager extends EventEmitter<ParameterManagerEvents> {
private parameters;
private values;
private groups;
private presets;
private changeCallbacks;
constructor();
/**
* Register a new parameter
*/
registerParameter(definition: ParameterDefinition): void;
/**
* Register multiple parameters at once
*/
registerParameters(definitions: ParameterDefinition[]): void;
/**
* Register a parameter group
*/
registerGroup(group: ParameterGroup): void;
/**
* Get parameter value
*/
getValue(key: string): ParameterValue | undefined;
/**
* Get typed parameter value
*/
getNumber(key: string): number;
/**
* Get typed boolean value
*/
getBoolean(key: string): boolean;
/**
* Get typed string value
*/
getString(key: string): string;
/**
* Set parameter value
*/
setValue(key: string, value: ParameterValue, source?: 'ui' | 'api' | 'preset'): boolean;
/**
* Set multiple values at once
*/
setValues(values: Record<string, ParameterValue>, source?: 'ui' | 'api' | 'preset'): void;
/**
* Register a callback for parameter changes
*/
onChange(key: string, callback: (value: ParameterValue) => void): () => void;
/**
* Get parameter definition
*/
getDefinition(key: string): ParameterDefinition | undefined;
/**
* Get all parameter definitions
*/
getAllDefinitions(): ParameterDefinition[];
/**
* Get parameters by category
*/
getByCategory(category: string): ParameterDefinition[];
/**
* Get all groups
*/
getGroups(): ParameterGroup[];
/**
* Get all current values
*/
getAllValues(): Record<string, ParameterValue>;
/**
* Save current values as a preset
*/
savePreset(name: string, description?: string): ParameterPreset;
/**
* Apply a preset
*/
applyPreset(name: string): boolean;
/**
* Get all presets
*/
getPresets(): ParameterPreset[];
/**
* Delete a preset
*/
deletePreset(name: string): boolean;
/**
* Export configuration
*/
exportConfig(): {
definitions: ParameterDefinition[];
values: Record<string, ParameterValue>;
presets: ParameterPreset[];
};
/**
* Import configuration
*/
importConfig(config: {
definitions?: ParameterDefinition[];
values?: Record<string, ParameterValue>;
presets?: ParameterPreset[];
}): void;
/**
* Reset parameter to default value
*/
resetToDefault(key: string): boolean;
/**
* Reset all parameters to defaults
*/
resetAllToDefaults(): void;
/**
* Validate parameter definition
*/
private validateDefinition;
/**
* Validate parameter value
*/
private validateValue;
/**
* Add parameter to group
*/
private addToGroup;
/**
* Create UI controls for parameters
*/
createUIControls(container: HTMLElement): void;
/**
* Create group element
*/
private createGroupElement;
/**
* Create parameter control element
*/
private createParameterControl;
}
/**
* Factory function for creating parameter managers
*/
export declare function createParameterManager(): ParameterManager;