@oi-reactive/io-reactive
Version:
Modern reactive UI framework with router, state management, and islands architecture
1,240 lines (1,237 loc) • 35.2 kB
TypeScript
// Generated by dts-bundle-generator v9.5.1
/**
* Tag enumeration for supported HTML elements
*/
export declare enum tag {
DIV = "div",
H1 = "h1",
H2 = "h2",
H3 = "h3",
H4 = "h4",
H5 = "h5",
H6 = "h6",
P = "p",
SPAN = "span",
A = "a",
IMG = "img",
UL = "ul",
OL = "ol",
LI = "li",
NAV = "nav",
HEADER = "header",
FOOTER = "footer",
SECTION = "section",
ARTICLE = "article",
ASIDE = "aside",
MAIN = "main",
FORM = "form",
INPUT = "input",
BUTTON = "button",
LABEL = "label",
TEXTAREA = "textarea",
SELECT = "select",
OPTION = "option",
TABLE = "table",
TR = "tr",
TD = "td",
TH = "th",
THEAD = "thead",
TBODY = "tbody",
TFOOT = "tfoot",
CAPTION = "caption",
VIDEO = "video",
AUDIO = "audio",
IFRAME = "iframe",
CANVAS = "canvas",
SVG = "svg",
PATH = "path"
}
/**
* Type for tag property (enum or string)
*/
export type _tag = tag | string;
/**
* Type for classList property
*/
export type _classList = ((() => string) | string)[];
/**
* Type for id property
*/
export type _id = (number | string) | (() => string | number);
/**
* Type for events property
*/
export type _events = {
[key: string]: (e?: Event | undefined) => void;
};
/**
* Type for attributes property
*/
export type _atr = {
[key: string]: (() => string) | string | undefined;
};
/**
* Type for children property
*/
export type _children = unknown[];
/**
* Type for text property
*/
export type _text = (() => string | number) | (string | number);
/**
* Type for inner property
*/
export type _inner = string | null;
/**
* Interface for IO element props
*/
export interface iIO {
tag?: _tag;
classList?: _classList;
id?: _id;
events?: _events;
atr?: _atr;
children?: _children;
components?: _components;
text?: _text;
inner?: _inner;
inputProps?: {
placeholder?: string;
[key: string]: unknown;
};
}
/**
* Interface for query status
*/
export interface iQueryStatus<T> {
data: () => T;
loading: boolean;
error: Error | null;
}
/**
* Interface for IO root
*/
export interface iIORoot {
rootElement: HTMLElement;
rootComponent: (() => unknown) | null;
}
/**
* Interface for IO page
*/
export interface iPage {
[key: string]: () => unknown;
}
/**
* Interface for state query callbacks
*/
export interface iStateQueryCallbacks<T> {
ok?: (res: T) => void;
error?: (err: Error) => void;
}
/**
* Model directive for two-way data binding
*/
export type ModelDirective<T = string> = [
getter: () => T,
setter: (value: T) => void
];
/**
* Submit directive for form submission
*/
export type SubmitDirective<T = string> = (value: T) => void;
/**
* Validate directive for value validation
*/
export type ValidateDirective<T = string> = (value: T) => boolean | string;
/**
* Transform directive for value transformation
*/
export type TransformDirective<TInput = string, TOutput = string> = {
toState?: (value: TInput) => TOutput;
toDOM?: (value: TOutput) => TInput;
};
/**
* Mask directive configuration
*/
export interface MaskDirective {
pattern: string;
placeholder?: string;
definitions?: Record<string, RegExp>;
showMaskOnFocus?: boolean;
showMaskOnHover?: boolean;
clearIncomplete?: boolean;
}
/**
* Custom directive configuration
*/
export interface CustomDirective<T = unknown> {
name: string;
init: (element: HTMLElement, value: T, context: DirectiveContext) => void;
destroy?: () => void;
update?: (newValue: T) => void;
options?: Record<string, unknown>;
}
/**
* Directive execution context
*/
export interface DirectiveContext {
element: HTMLElement;
io: unknown;
addCleanup: (fn: () => void) => void;
getValue: () => unknown;
setValue: (value: unknown) => void;
}
/**
* Advanced directive options
*/
export interface AdvancedDirectiveOptions {
debounceOptions?: {
delay: number;
leading?: boolean;
maxWait?: number;
};
focusOptions?: {
preserve: boolean;
preserveCursor?: boolean;
preserveSelection?: boolean;
};
validationOptions?: {
validateOnChange?: boolean;
validateOnBlur?: boolean;
showErrorsRealtime?: boolean;
cssClasses?: {
valid?: string;
invalid?: string;
pending?: string;
};
};
}
/**
* Full set of form directives
*/
export interface FormDirectives<T = string> extends AdvancedDirectiveOptions {
model?: ModelDirective<T>;
onSubmit?: SubmitDirective<T>;
validate?: ValidateDirective<T>;
transform?: TransformDirective<unknown, T>;
mask?: MaskDirective;
custom?: CustomDirective[];
debounce?: number;
preserveFocus?: boolean;
clearOnSubmit?: boolean;
autoTrim?: boolean;
autoLowercase?: boolean;
autoUppercase?: boolean;
maxLength?: number;
allowedChars?: RegExp;
forbiddenChars?: RegExp;
}
/**
* Factory for synchronous module
*/
export type ModuleFactory<T> = () => T;
/**
* Factory for asynchronous module
*/
export type AsyncModuleFactory<T> = () => Promise<T>;
/**
* Lazy module type
*/
export type LazyModule<T> = () => Promise<T>;
/**
* Lazy load configuration
*/
export interface LazyLoadConfig {
preload?: boolean;
timeout?: number;
retries?: number;
fallback?: unknown;
priority?: number;
}
/**
* Cache entry for element cache
*/
export interface CacheEntry {
element: Element;
timestamp: number;
ttl: number;
}
/**
* Type that can be returned by component functions in the components array.
* @template IOType - Main IO component type
* @template IslandType - Island component type
*/
export type ComponentReturn<IOType = unknown, IslandType = unknown> = IOType | IslandType | null;
/**
* Array of component-returning functions.
* @template IOType - Main IO component type
* @template IslandType - Island component type
*/
export type IOArray<IOType = unknown, IslandType = unknown> = (() => ComponentReturn<IOType, IslandType>)[];
/**
* Type for components property (array of component-returning functions or a function returning such an array)
* @template IOType - Main IO component type
* @template IslandType - Island component type
*/
export type _components<IOType = unknown, IslandType = unknown> = IOArray<IOType, IslandType> | (() => IOArray<IOType, IslandType>);
/**
* Hydration strategy for islands
*/
export type HydrationStrategy = {
"client:load"?: boolean;
"client:idle"?: boolean;
"client:visible"?: boolean;
"client:media"?: string;
};
/**
* Island configuration interface
*/
export interface IslandConfig {
classList?: unknown;
id?: unknown;
atr?: unknown;
hydration: HydrationStrategy;
fallback?: () => unknown;
component: () => unknown | Promise<unknown>;
props?: Record<string, unknown>;
}
/**
* Stream message interface
*/
export interface iStreamMessage {
id: string;
data: unknown;
}
/**
* Path type for route definitions
*/
export type path = `/${string}`;
/**
* Route parameters interface
*/
export interface iRouteParams {
isActive?: boolean;
isPrivate?: boolean;
redirectTo?: path;
guards?: RouteGuard[];
metadata?: RouteMetadata;
cache?: boolean;
preload?: boolean;
layout?: layoutTemplate;
useIOLayout?: boolean;
layoutDepth?: number;
animateLayoutLevel?: boolean;
}
/**
* Route interface
*/
export interface iRoute {
path: path;
name?: string;
template: routeIO;
params?: iRouteParams;
children?: iRoutes;
includes?: iRoutes;
guards?: RouteGuard[];
metadata?: RouteMetadata;
}
/**
* Array of routes
*/
export type iRoutes = iRoute[];
/**
* Router map type
*/
export type routerMap = Map<string, Route>;
/**
* Route IO function type
*/
export type routeIO = (data: string) => unknown | Promise<unknown>;
/**
* Domain type
*/
export type domain = string;
/**
* Middleware function type
*/
export type middleware = ((data: iMiddlewareData) => void) | undefined;
/**
* Layout template function type
*/
export type layoutTemplate = ((children: (() => unknown)[]) => unknown) | undefined;
/**
* Router instance interface
*/
export interface iIORouter {
domain: domain;
routes: Promise<iRoutes>;
root?: HTMLElement;
auth?: () => Promise<boolean>;
middleware?: (data: iMiddlewareData) => void;
layout?: layoutTemplate;
}
/**
* Middleware data interface
*/
export interface iMiddlewareData {
domain: string;
routes: [
string,
Route
][];
href: path;
state?: unknown;
}
/**
* Router config interface
*/
export interface iConfig {
root: HTMLElement;
domain: domain;
routes: Promise<iRoutes>;
auth?: (() => Promise<boolean>) | undefined;
middleware?: middleware;
layout?: layoutTemplate;
}
/**
* Query params interface
*/
export interface iQueryParams {
[key: string]: string;
}
/**
* Route guard interface
*/
export interface RouteGuard {
canActivate(route: Route): Promise<boolean> | boolean;
canDeactivate?(route: Route): Promise<boolean> | boolean;
resolve?(route: Route): Promise<unknown> | unknown;
onReject?(route: Route): void;
}
/**
* Open Graph metadata interface
*/
export interface OpenGraphData {
title?: string;
description?: string;
image?: string;
url?: string;
type?: string;
siteName?: string;
}
/**
* Twitter Card metadata interface
*/
export interface TwitterCardData {
card?: "summary" | "summary_large_image" | "app" | "player";
site?: string;
creator?: string;
title?: string;
description?: string;
image?: string;
}
/**
* Route metadata interface
*/
export interface RouteMetadata {
title?: string;
description?: string;
keywords?: string[];
author?: string;
canonical?: string;
robots?: string;
viewport?: string;
charset?: string;
openGraph?: OpenGraphData;
twitterCard?: TwitterCardData;
customMeta?: {
[key: string]: string;
};
structuredData?: unknown;
}
/**
* Route class stub for type references
*/
export declare class Route {
path: path;
name: string;
}
/**
* Класс интерактивного островка
*/
export declare class IslandComponent {
private _tag;
private _config;
private _isHydrated;
private _element;
private _hydratedComponent;
private _observerCleanup;
constructor(tag: _tag$1, config: IslandConfig$1);
/**
* Рендерит островок (изначально fallback)
*/
render(): HTMLElement;
/**
* Инициализирует гидратацию в зависимости от стратегии
*/
private _initHydration;
/**
* Настройка Intersection Observer для 'client:visible'
*/
private _setupVisibilityObserver;
/**
* Настройка медиа-запроса для 'client:media'
*/
private _setupMediaQuery;
/**
* Выполняет гидратацию островка
*/
private _hydrate;
/**
* Уничтожает островок и очищает ресурсы
*/
destroy(): void;
/**
* Возвращает состояние гидратации
*/
isHydrated(): boolean;
/**
* Возвращает гидратированный компонент (если есть)
*/
getHydratedComponent(): IO | null;
}
type ModelDirective$1<T = string> = [
/** Получить текущее значение */
getter: () => T,
/** Установить новое значение */
setter: (value: T) => void
];
type SubmitDirective$1<T = string> = (value: T) => void;
type ValidateDirective$1<T = string> = (value: T) => boolean | string;
type TransformDirective$1<TInput = string, TOutput = string> = {
/** Преобразование из DOM в состояние */
toState?: (value: TInput) => TOutput;
/** Преобразование из состояния в DOM */
toDOM?: (value: TOutput) => TInput;
};
interface MaskDirective$1 {
/** Шаблон маски (например: "+7 (###) ###-##-##") */
pattern: string;
/** Символ-заполнитель (по умолчанию '_') */
placeholder?: string;
/** Разрешенные символы для замены */
definitions?: Record<string, RegExp>;
/** Показывать маску при фокусе */
showMaskOnFocus?: boolean;
/** Показывать маску при hover */
showMaskOnHover?: boolean;
/** Очищать неполные значения */
clearIncomplete?: boolean;
}
interface CustomDirective$1<T = unknown> {
/** Имя директивы */
name: string;
/** Инициализация директивы */
init: (element: HTMLElement, value: T, context: DirectiveContext$1) => void;
/** Очистка ресурсов */
destroy?: () => void;
/** Обновление значения */
update?: (newValue: T) => void;
/** Опции директивы */
options?: Record<string, unknown>;
}
interface DirectiveContext$1 {
/** Элемент, к которому применяется директива */
element: HTMLElement;
/** IO компонент */
io: unknown;
/** Функции для добавления cleanup */
addCleanup: (fn: () => void) => void;
/** Получить значение элемента */
getValue: () => unknown;
/** Установить значение элемента */
setValue: (value: unknown) => void;
}
interface AdvancedDirectiveOptions$1 {
/** Настройки debounce */
debounceOptions?: {
/** Задержка в миллисекундах */
delay: number;
/** Срабатывание на leading edge */
leading?: boolean;
/** Максимальное время ожидания */
maxWait?: number;
};
/** Настройки сохранения фокуса */
focusOptions?: {
/** Сохранять фокус при обновлениях */
preserve: boolean;
/** Сохранять позицию курсора */
preserveCursor?: boolean;
/** Восстанавливать выделение */
preserveSelection?: boolean;
};
/** Настройки валидации */
validationOptions?: {
/** Валидировать при каждом изменении */
validateOnChange?: boolean;
/** Валидировать при потере фокуса */
validateOnBlur?: boolean;
/** Показывать ошибки в реальном времени */
showErrorsRealtime?: boolean;
/** CSS классы для состояний */
cssClasses?: {
valid?: string;
invalid?: string;
pending?: string;
};
};
}
interface FormDirectives$1<T = string> extends AdvancedDirectiveOptions$1 {
/** Двустороннее связывание данных */
model?: ModelDirective$1<T>;
/** Обработчик отправки формы */
onSubmit?: SubmitDirective$1<T>;
/** Функция валидации */
validate?: ValidateDirective$1<T>;
/** Преобразование значений */
transform?: TransformDirective$1<unknown, T>;
/** Маска ввода */
mask?: MaskDirective$1;
/** Пользовательские директивы */
custom?: CustomDirective$1[];
/** Задержка debounce (упрощенная версия) */
debounce?: number;
/** Сохранять фокус при обновлениях */
preserveFocus?: boolean;
/** Очищать поле после отправки */
clearOnSubmit?: boolean;
/** Автоматическое обрезание пробелов */
autoTrim?: boolean;
/** Автоматическое приведение к нижнему регистру */
autoLowercase?: boolean;
/** Автоматическое приведение к верхнему регистру */
autoUppercase?: boolean;
/** Максимальная длина ввода */
maxLength?: number;
/** Разрешенные символы (регулярное выражение) */
allowedChars?: RegExp;
/** Запрещенные символы (регулярное выражение) */
forbiddenChars?: RegExp;
}
export type tSetState<T> = {
(value: T): void;
(updater: (value: T) => T): void;
};
declare enum tag$1 {
DIV = "div",
H1 = "h1",
H2 = "h2",
H3 = "h3",
H4 = "h4",
H5 = "h5",
H6 = "h6",
P = "p",
SPAN = "span",
A = "a",
IMG = "img",
UL = "ul",
OL = "ol",
LI = "li",
NAV = "nav",
HEADER = "header",
FOOTER = "footer",
SECTION = "section",
ARTICLE = "article",
ASIDE = "aside",
MAIN = "main",
FORM = "form",
INPUT = "input",
BUTTON = "button",
LABEL = "label",
TEXTAREA = "textarea",
SELECT = "select",
OPTION = "option",
TABLE = "table",
TR = "tr",
TD = "td",
TH = "th",
THEAD = "thead",
TBODY = "tbody",
TFOOT = "tfoot",
CAPTION = "caption",
VIDEO = "video",
AUDIO = "audio",
IFRAME = "iframe",
CANVAS = "canvas",
SVG = "svg",
PATH = "path"
}
type _components$1 = _components<IO, IslandComponent>;
type _tag$1 = tag$1 | string;
type _classList$1 = ((() => string) | string)[];
type _id$1 = (number | string) | (() => string | number);
type _events$1 = {
[key: string]: (e?: Event | undefined) => void;
};
type _atr$1 = {
[key: string]: (() => string) | string | undefined;
};
type _children$1 = IO[];
type _text$1 = (() => string | number) | (string | number);
type _inner$1 = string | null;
interface iIO$1 extends FormDirectives$1 {
tag?: _tag$1;
classList?: _classList$1;
id?: _id$1;
events?: _events$1;
atr?: _atr$1;
children?: _children$1;
components?: _components$1;
text?: _text$1;
inner?: _inner$1;
/**
* Специфичные свойства для input (placeholder, type, value и др.)
*/
inputProps?: {
placeholder?: string;
[key: string]: unknown;
};
}
interface iStateQueryCallbacks$1<T> {
ok?: (res: T) => void;
error?: (err: Error) => void;
}
type HydrationStrategy$1 = {
"client:load"?: boolean;
"client:idle"?: boolean;
"client:visible"?: boolean;
"client:media"?: string;
};
interface IslandConfig$1 {
classList?: _classList$1;
id?: _id$1;
atr?: _atr$1;
hydration: HydrationStrategy$1;
fallback?: () => IO;
component: () => IO | Promise<IO>;
props?: Record<string, unknown>;
}
declare class DirectiveManager {
private element;
private directives;
private cleanup;
private domCache;
private lazyInit;
private initialized;
private stats;
constructor(element: HTMLElement, directives: FormDirectives$1);
/**
* Ленивая инициализация директив
* Директивы инициализируются только при первом использовании
*/
init(): void;
/**
* Получает статистику производительности
*/
getPerformanceStats(): {
cacheEfficiency: number;
domOperationsPerEvent: number;
domOperations: number;
eventsFired: number;
validationCalls: number;
cacheHits: number;
cacheMisses: number;
};
/** Очистка ресурсов с оптимизированной очисткой */
destroy(): void;
/**
* Строит кэш DOM операций для повышения производительности
*/
private buildDOMCache;
/**
* Планирует ленивую инициализацию директив
*/
private scheduleDirectiveInit;
/**
* Планирует инициализацию директив при первом взаимодействии
*/
private scheduleInteractionInit;
private validateDirectives;
/**
* Инициализация model директивы с оптимизированной синхронизацией
*/
private initModelDirective;
/**
* Настройка умной синхронизации состояния без rAF polling
*/
private setupStateSync;
/**
* Обновление с сохранением фокуса и позиции курсора
*/
private preserveFocusUpdate;
/**
* Инициализация submit директивы
*/
private initSubmitDirective;
/**
* Инициализация validate директивы
*/
private initValidateDirective;
/**
* Оптимизированное получение значения элемента с кэшированием
*/
private getElementValueOptimized;
/**
* Оптимизированная установка значения элемента
*/
private setElementValueOptimized;
/**
* Fallback методы для совместимости
*/
private getElementValueFallback;
private setElementValueFallback;
private getRelevantEvents;
}
declare class Hydration {
private tagSwitcher;
private create;
private createSVG;
/**
* Устанавливает classList для элемента
* @param element - HTML элемент
* @param classList - список классов или реактивная ссылка
* @param batched - использовать батчинг
*/
private setClassList;
/**
* Устанавливает id для элемента
* @param element - HTML элемент
* @param id - id или реактивная ссылка
*/
private setID;
/**
* Устанавливает события для элемента
* @param element - HTML элемент
* @param events - объект событий или реактивная ссылка
*/
private setEvents;
private setComponents;
/**
* Устанавливает текстовое содержимое для элемента
* @param element - HTML элемент
* @param text - текст, функция или реактивная ссылка
* @param batched - использовать батчинг
*/
private setText;
/**
* Метод для установки HTML содержимого (ВНИМАНИЕ: потенциально небезопасно!)
* Используйте только с доверенным контентом или предварительной санитизацией
* @param element - HTML элемент
* @param html - HTML содержимое (строка или функция)
* @param options - опции безопасности
*/
setHTML(element: HTMLElement, html: string | (() => string), options?: {
trusted?: boolean;
sanitize?: boolean;
warnInDev?: boolean;
}): void;
/**
* Устанавливает атрибуты для элемента
* @param element - HTML элемент
* @param atr - объект атрибутов или реактивная ссылка
* @param batched - использовать батчинг
*/
private setAtr;
private setComponentId;
hydrate(_node: IO, renderStackOrBatching?: Set<IO> | boolean, useBatching?: boolean): HTMLElement;
mutate(_node: IO, _element: HTMLElement): HTMLElement | undefined;
/**
* Легаси метод mutate (старая версия для обратной совместимости)
* Рекомендуется использовать новый mutate с diff алгоритмом
*/
mutateLegacy(_node: IO, _element: HTMLElement): HTMLElement | undefined;
}
export declare class StateQueryModule {
private readonly _node;
private readonly _state;
private _update;
constructor(node: IO);
stateQuery<stateType>(init: stateType | null, queryPromise: Promise<stateType>, callback?: iStateQueryCallbacks$1<stateType>): {
data: () => stateType;
refetch: () => void;
};
}
export interface ReactiveRef<T> {
value: T;
subscribe: (callback: (value: T) => void) => void;
unsubscribe: (callback: (value: T) => void) => void;
}
export declare function reactiveRef<T>(initialValue: T): ReactiveRef<T>;
export interface iSignal<T> {
value: T;
effect: null | ((data: T) => void);
}
export declare function signal<T>(value: T): iSignal<T>;
export interface stateInterface<stateType> {
init: stateType;
update?: boolean;
callback?: (val: stateType) => void;
forceRender?: boolean;
debounce?: boolean | {
wait?: number;
maxWait?: number;
immediate?: boolean;
};
}
export declare class StateModule {
private readonly _node;
private readonly _state;
private _update;
private componentUpdateFunc;
constructor(node: IO);
private getComponentUpdateFunction;
state<stateType>({ init, update, callback, forceRender }: stateInterface<stateType>): [
ReactiveRef<stateType>,
tSetState<stateType>
];
}
export interface iSubscriber<T> {
id: string;
subscriber: StreamSubscriber<T>;
}
declare class Stream<T> {
private subscribers;
constructor();
notify(message: T): void;
subscribe(subscriber: iSubscriber<T>): void;
unsubscribe(id: string): void;
clearSubscribers(): void;
}
declare class StreamSubscriber<T> {
private callback;
private id;
private stream;
constructor(stream: Stream<T>, callback: (message: T) => void);
effect(message: T): void;
unsubscribe(): void;
}
interface iStreamMessage$1 {
id: string;
data: unknown;
}
export declare class StreamModule {
protected readonly _$stream: Stream<iStreamMessage$1>;
protected $subscriber: StreamSubscriber<iStreamMessage$1> | null;
constructor();
stream<T>(): {
subscribe: (id: string, effect?: (data: T) => void) => StreamSubscriber<iStreamMessage$1>;
notify: (id: string, data?: T) => void;
};
}
/**
* Главный класс UI-элемента IO.
* Обеспечивает реактивность, управление DOM, поддержку директив, батчинг, оптимизации и интеграцию с островковой архитектурой.
* Используйте для создания интерактивных и статических компонентов.
*/
export declare class IO {
_hydration: Hydration;
_testStateModule: StateModule | null;
_testStateQueryModule: StateQueryModule | null;
_stream: StreamModule | null;
protected _tag: _tag$1;
protected _classList?: _classList$1;
protected _id?: _id$1;
protected _events?: _events$1;
protected _atr?: _atr$1;
_elementID: string;
protected _components?: _components$1;
protected _text?: _text$1;
protected _inputProps?: iIO$1["inputProps"];
protected _directives?: FormDirectives$1;
protected _directiveManager: DirectiveManager | null;
onRender: ((io: IO) => void) | null;
onMutate: ((io: IO) => void) | null;
elementRef: HTMLElement | null;
protected _reactiveUnsubscribers: Record<string, (() => void) | null>;
constructor(tag: _tag$1, props?: iIO$1, children?: _components$1);
/**
* Сеттер/геттер для tag
*/
set tag(value: _tag$1);
get tag(): _tag$1;
/**
* Сеттер/геттер для classList
*/
set classList(value: _classList$1 | ReactiveRef<_classList$1>);
get classList(): _classList$1 | undefined;
/**
* Сеттер/геттер для id
*/
set id(value: _id$1 | ReactiveRef<_id$1>);
get id(): _id$1 | undefined;
/**
* Сеттер/геттер для events
*/
set events(value: _events$1 | ReactiveRef<_events$1>);
get events(): _events$1 | undefined;
/**
* Сеттер/геттер для atr
*/
set atr(value: _atr$1 | ReactiveRef<_atr$1>);
get atr(): _atr$1 | undefined;
/**
* Сеттер/геттер для text
*/
set text(value: _text$1 | ReactiveRef<_text$1>);
get text(): _text$1 | undefined;
/**
* Сеттер/геттер для components
*/
set components(value: _components$1 | IO[]);
get components(): _components$1 | undefined;
state<T>(init: T, isUpdate?: boolean, forceRender?: boolean): [
ReactiveRef<T>,
tSetState<T>
];
stateQuery<T>(init: T | null, promise: Promise<T>, callback?: iStateQueryCallbacks<T>): Promise<{
data: () => T;
refetch: () => void;
}>;
stream<T>(): Promise<{
subscribe: (id: string, effect?: ((data: T) => void) | undefined) => StreamSubscriber<iStreamMessage$1>;
notify: (id: string, data?: T | undefined) => void;
}>;
render(renderStack?: Set<IO>): HTMLElement;
forceUpdate(): void;
/**
* Установить HTML содержимое
*/
setHTML(html: string | (() => string), options?: {
trusted?: boolean;
sanitize?: boolean;
warnInDev?: boolean;
}): void;
/**
* Удаление компонента IO (destroy + очистка директив)
*/
destroy(): void;
/**
* Алиас для destroy (unmount)
*/
unmount(): void;
/**
* Получить ссылку на DOM элемент
*/
getRef(): HTMLElement | null;
/**
* Оптимизированная установка текста
*/
setOptimizedText(text: string): void;
/**
* Оптимизированный поиск элементов
*/
querySelector(selector: string, parent?: Element | Document): Element | null;
/**
* Оптимизированный поиск всех элементов
*/
querySelectorAll(selector: string, parent?: Element | Document): NodeList;
/**
* Делегированный обработчик событий
*/
delegateEvent(selector: string, eventType: string, handler: (event: Event, element: Element) => void): () => void;
/**
* Автоматический выбор способа обработки событий
*/
autoEvent(selector: string | null, eventType: string, handler: EventListenerOrEventListenerObject | ((event: Event, element: Element) => void)): () => void;
/**
* Принудительно выполнить все отложенные DOM операции
*/
flushDOMOperations(): void;
/**
* Получить статистику DOM оптимизаций
*/
getDOMOptimizationStats(): Record<string, unknown>;
/**
* Получить количество активных event listeners
*/
getListenerCount(): number;
/**
* Настройка дебаунса состояния
*/
setStateDebouncing(enabled: boolean, options?: {
delay?: number;
leading?: boolean;
maxWait?: number;
strategyByProperty?: Record<string, {
delay: number;
leading?: boolean;
}>;
condition?: (oldValue: unknown, newValue: unknown) => boolean;
}): void;
/**
* Получить статистику дебаунса состояния
*/
getStateDebounceStats(): {
activeDebounces: number;
debouncers: Array<{
key: string;
lastUpdate: number;
updateCount: number;
timeSinceLastUpdate: number;
}>;
totalStateChanges?: number;
debouncedUpdates?: number;
preventedRenders?: number;
};
/**
* Принудительно выполнить все отложенные обновления состояния
*/
flushStateUpdates(): void;
/**
* Принудительно обновить компонент с использованием diff-алгоритма
*/
forceUpdateWithDiff(): void;
/**
* Принудительно обновить компонент с использованием legacy-алгоритма
*/
forceUpdateLegacy(): void;
/**
* Умное обновление компонента (выбор diff/legacy)
*/
smartUpdate(): void;
/**
* Глобальная настройка diff-алгоритма
*/
static configureDiff(config: {
useKeys?: boolean;
compareAttributes?: boolean;
compareText?: boolean;
}): void;
/**
* Глобальный flush для всех обновлений
*/
static flushAllUpdates(): void;
/**
* Создает статический компонент (для SSR/SSG)
* Не имеет JavaScript логики, быстро рендерится
* @param tag - HTML тег
* @param props - свойства компонента
* @param children - дочерние элементы
*/
static static(tag: _tag$1, props?: iIO$1, children?: _components$1): IO;
/**
* Создает интерактивный островок с гидратацией
* @param tag - HTML тег
* @param config - конфигурация островка
* @returns Функция, создающая IslandComponent (из modules/islands/IslandComponent)
*/
static island(tag: _tag$1, config: IslandConfig$1): () => IslandComponent;
/**
* Проверяет, является ли компонент статическим
*/
isStatic(): boolean;
/**
* Включить или отключить глобальный батчинг DOM
*/
static setBatchingEnabled(enabled: boolean): void;
/**
* Получить глобальную статистику DOM батчера
*/
static getDOMBatcherStats(): {
queueLength: number;
isScheduled: boolean;
batchingEnabled: boolean;
operations: string[];
};
/**
* Принудительно выполнить все DOM оптимизации глобально
*/
static flushDOMOptimizations(): void;
/**
* Оптимизированный querySelector (глобальный)
*/
static optimizedQuerySelector(parent: Element | Document, selector: string): Element | null;
/**
* Оптимизированная установка текста (глобальная)
*/
static optimizedSetText(element: HTMLElement, text: string): void;
/**
* Планировщик чтения DOM
*/
static scheduleRead<T>(readFn: () => T): Promise<T>;
/**
* Планировщик записи в DOM
*/
static scheduleWrite(writeFn: () => void): void;
/**
* Получить глобальную статистику DOM-оптимизаций
*/
static getDOMOptimizationStats(): Record<string, unknown>;
/**
* Зарегистрировать ленивый модуль
*/
static registerLazyModule<T>(name: string, factory: (() => T) | (() => Promise<T>), config?: {
preload?: boolean;
timeout?: number;
retries?: number;
}): void;
/**
* Загрузить ленивый модуль
*/
static loadLazyModule<T>(name: string): Promise<T>;
/**
* Получить ленивый модуль
*/
static getLazyModule<T>(name: string): T | null;
/**
* Проверить, загружен ли ленивый модуль
*/
static isLazyModuleLoaded(name: string): boolean;
/**
* Прелоад ленивого модуля
*/
static preloadLazyModule(name: string): void;
/**
* Получить статистику ленивых модулей
*/
static getLazyModuleStats(): {
registered: number;
loaded: number;
loading: number;
cached: string[];
loading_modules: string[];
modulesLoaded?: number;
modulesPreloaded?: number;
loadingErrors?: number;
modulesRegistered?: number;
memoryEfficiency?: number;
cacheHits?: number;
};
}
/**
* Инкрементальный генератор ID для компонентов IO
* Более быстрый и предсказуемый, чем случайная генерация
*/
/**
* Генерирует уникальный ID для компонента
* Формат: io-{sessionPrefix}-{counter}
* Пример: io-kx2m-1, io-kx2m-2, etc.
* @returns уникальный ID
*/
export declare function getID(): string;
/**
* Получает ссылку на элемент по ID компонента с кэшированием
* @param id - ID компонента
* @returns HTML элемент или null
*/
export declare function getRef(id: string): HTMLElement | null;
/**
* @deprecated Используйте `new IO('input', { model, onSubmit, validate, … })`.
* Класс оставлен для обратной совместимости. Будет удалён в следующем major релизе.
*/
export declare class IOInput extends IO {
constructor(tag?: string, props?: iIO$1, children?: _components$1, callback?: (value: string) => void);
}
export declare const VERSION = "1.0.8";
export {};