UNPKG

@ordojs/core

Version:

Core compiler and runtime for OrdoJS framework

255 lines 7.26 kB
/** * @fileoverview OrdoJS Component System - Modern component architecture * @author OrdoJS Framework Team */ import type { Props } from '../types/index.js'; import { type EffectCleanup, type Signal } from './reactivity.js'; /** * Component lifecycle phases */ export declare enum ComponentLifecycle { CREATED = "created", MOUNTED = "mounted", UPDATED = "updated", UNMOUNTED = "unmounted", ERROR = "error" } /** * Component context for dependency injection */ export interface ComponentContext { /** Parent component */ parent?: ComponentInstance; /** Injected dependencies */ injected: Map<string | symbol, any>; /** Provided dependencies */ provided: Map<string | symbol, any>; /** Component registry */ registry: ComponentRegistry; } /** * Component definition interface */ export interface ComponentDefinition<P extends Props = Props, S = any> { /** Component name */ name: string; /** Props validation schema */ props?: PropSchema<P>; /** Setup function */ setup?: (props: P, context: SetupContext) => S | Promise<S>; /** Render function */ render?: (state: S, props: P) => VNode | string; /** Lifecycle hooks */ lifecycle?: Partial<LifecycleHooks>; /** Component styles */ styles?: string | (() => string); /** Component metadata */ meta?: ComponentMeta; } /** * Component metadata */ export interface ComponentMeta { /** Component version */ version?: string; /** Component description */ description?: string; /** Component tags */ tags?: string[]; /** Is component async */ async?: boolean; /** Component dependencies */ dependencies?: string[]; } /** * Props validation schema */ export interface PropSchema<P = any> { [key: string]: PropDefinition<any>; } /** * Prop definition */ export interface PropDefinition<T = any> { /** Prop type */ type: PropType<T>; /** Is required */ required?: boolean; /** Default value */ default?: T | (() => T); /** Validation function */ validator?: (value: T) => boolean; /** Prop description */ description?: string; } /** * Prop types */ export type PropType<T> = 'string' | 'number' | 'boolean' | 'object' | 'array' | 'function' | ((value: any) => value is T); /** * Setup context */ export interface SetupContext { /** Component props */ props: Signal<Props>; /** Emit events */ emit: (event: string, payload?: any) => void; /** Expose public API */ expose: (api: Record<string, any>) => void; /** Access parent context */ parent?: ComponentInstance; /** Inject dependency */ inject: <T>(key: string | symbol, defaultValue?: T) => T; /** Provide dependency */ provide: <T>(key: string | symbol, value: T) => void; /** Component slots */ slots: Record<string, () => VNode[]>; } /** * Lifecycle hooks */ export interface LifecycleHooks { /** Before component creation */ beforeCreate?: () => void; /** After component creation */ created?: () => void; /** Before component mount */ beforeMount?: () => void; /** After component mount */ mounted?: () => void; /** Before component update */ beforeUpdate?: () => void; /** After component update */ updated?: () => void; /** Before component unmount */ beforeUnmount?: () => void; /** After component unmount */ unmounted?: () => void; /** Error handler */ errorCaptured?: (error: Error, instance: ComponentInstance) => boolean | void; } /** * Virtual DOM node */ export interface VNode { /** Node type */ type: string | ComponentDefinition; /** Node props */ props?: Props; /** Child nodes */ children?: VNode[]; /** Node key */ key?: string | number; /** Node ref */ ref?: (el: Element | ComponentInstance | null) => void; /** Raw HTML */ innerHTML?: string; } /** * Component instance */ export interface ComponentInstance<P extends Props = Props, S = any> { /** Component ID */ id: string; /** Component definition */ definition: ComponentDefinition<P, S>; /** Component props */ props: Signal<P>; /** Component state */ state: S; /** Component context */ context: ComponentContext; /** Current lifecycle phase */ lifecycle: Signal<ComponentLifecycle>; /** DOM element */ element: Element | null; /** Child components */ children: ComponentInstance[]; /** Event emitter */ emit: (event: string, payload?: any) => void; /** Exposed API */ exposed: Record<string, any>; /** Cleanup functions */ cleanups: EffectCleanup[]; /** Mount component */ mount: (target: Element) => Promise<void>; /** Unmount component */ unmount: () => Promise<void>; /** Update component */ update: (newProps?: Partial<P>) => Promise<void>; /** Force re-render */ forceUpdate: () => Promise<void>; } /** * Component registry */ export interface ComponentRegistry { /** Register component */ register: (definition: ComponentDefinition) => void; /** Get component */ get: (name: string) => ComponentDefinition | undefined; /** Unregister component */ unregister: (name: string) => boolean; /** List all components */ list: () => ComponentDefinition[]; } /** * Component factory options */ export interface ComponentFactoryOptions { /** Global component registry */ registry?: ComponentRegistry; /** Global error handler */ errorHandler?: (error: Error, instance: ComponentInstance) => void; /** Development mode */ devMode?: boolean; } /** * Create component instance */ export declare function createComponent<P extends Props = Props, S = any>(definition: ComponentDefinition<P, S>, props: P, context?: ComponentContext): ComponentInstance<P, S>; /** * Define a component */ export declare function defineComponent<P extends Props = Props, S = any>(definition: ComponentDefinition<P, S>): ComponentDefinition<P, S>; /** * Create virtual DOM node */ export declare function h(type: string | ComponentDefinition, props?: Props, ...children: (VNode | string)[]): VNode; /** * Fragment component for multiple root nodes */ export declare const Fragment: ComponentDefinition<Props, any>; /** * Component factory */ export declare class ComponentFactory { private registry; private options; constructor(options?: ComponentFactoryOptions); /** * Register component */ register(definition: ComponentDefinition): void; /** * Create component instance */ create<P extends Props = Props>(nameOrDefinition: string | ComponentDefinition<P>, props: P): ComponentInstance<P>; /** * Get registry */ getRegistry(): ComponentRegistry; } /** * Default component factory */ export declare const componentFactory: ComponentFactory; /** * Global component registration */ export declare function registerComponent(definition: ComponentDefinition): void; /** * Create component from name */ export declare function createComponentByName<P extends Props = Props>(name: string, props: P): ComponentInstance<P>; //# sourceMappingURL=component-system.d.ts.map