sprae
Version:
DOM microhydration
234 lines • 7.14 kB
TypeScript
/** Symbol for disposal (using standard Symbol.dispose if available) */
export const _dispose: any;
/** Symbol for accessing element's reactive state */
export const _state: unique symbol;
/** Symbol for enabling element effects */
export const _on: unique symbol;
/** Symbol for disabling element effects */
export const _off: unique symbol;
/** Symbol for adding child to element */
export const _add: unique symbol;
/** Directive prefix (default: ':') */
export let prefix: string;
export function isCE(el: any): any;
/**
* A reactive signal containing a value.
* @template T
* @typedef {Object} Signal
* @property {T} value - Current value (reading subscribes, writing notifies)
* @property {() => T} peek - Read without subscribing
* @property {() => T} valueOf - Get value for coercion
* @property {() => T} toJSON - Get value for JSON serialization
* @property {() => string} toString - Get value as string
*/
/**
* Internal effect function type.
* @typedef {Object} EffectFn
* @property {Set<Set<EffectFn>>} deps - Dependency sets
* @property {() => void} fn - Original function
*/
/**
* Creates a reactive signal.
* @template T
* @type {<T>(value: T) => Signal<T>}
*/
export let signal: <T_1>(value: T_1) => Signal<T_1>;
/**
* Creates a reactive effect that re-runs when dependencies change.
* @type {(fn: () => void | (() => void)) => () => void}
*/
export let effect: (fn: () => void | (() => void)) => () => void;
/**
* Creates a computed signal derived from other signals.
* @template T
* @type {<T>(fn: () => T) => Signal<T>}
*/
export let computed: <T_1>(fn: () => T_1) => Signal<T_1>;
/**
* Batches multiple signal updates into a single notification.
* @template T
* @type {<T>(fn: () => T) => T}
*/
export let batch: <T_1>(fn: () => T_1) => T_1;
/**
* Runs a function without tracking signal dependencies.
* @template T
* @type {<T>(fn: () => T) => T}
*/
export let untracked: <T_1>(fn: () => T_1) => T_1;
/**
* Registry of directive handlers.
* @type {Record<string, DirectiveHandler>}
*/
export let directive: Record<string, DirectiveHandler>;
/**
* Registry of modifier functions.
* @type {Record<string, ModifierHandler>}
*/
export let modifier: Record<string, ModifierHandler>;
/** @type {(el: Element, name: string, expr: string, state: Object) => () => (() => void) | void} */
export let dir: (el: Element, name: string, expr: string, state: any) => () => (() => void) | void;
/**
* Compiles an expression string into an evaluator function.
* @type {(expr: string) => (state: Object) => any}
*/
export let compile: (expr: string) => (state: any) => any;
export function parse(expr: string): (state: any, cb?: (value: any) => any) => any;
export function use(config: SpraeConfig): void;
export function decorate(fn: Function & {
target?: Element;
}, mods: string[]): Function;
/** MutationObserver reference, set by sprae.start() */
export let mo: any;
export function mutate(fn: any): void;
export function start(root?: Element, values?: any): any;
export function frag(tpl: HTMLTemplateElement | FragmentLike): FragmentLike;
export function dashcase(str: string): string;
export function attr(el: any, name: any, v: any): any;
export function clsx(c: string | string[] | Record<string, boolean> | null | undefined): string;
export function throttle<T_1 extends Function>(fn: T_1, ms?: number | Function): T_1;
export function debounce<T_1 extends Function>(fn: T_1, ms?: number | Function, immediate?: boolean): T_1;
export * from "./store.js";
export default sprae;
/**
* A reactive signal containing a value.
*/
export type Signal<T_1> = {
/**
* - Current value (reading subscribes, writing notifies)
*/
value: T_1;
/**
* - Read without subscribing
*/
peek: () => T_1;
/**
* - Get value for coercion
*/
valueOf: () => T_1;
/**
* - Get value for JSON serialization
*/
toJSON: () => T_1;
/**
* - Get value as string
*/
toString: () => string;
};
/**
* Internal effect function type.
*/
export type EffectFn = {
/**
* - Dependency sets
*/
deps: Set<Set<EffectFn>>;
/**
* - Original function
*/
fn: () => void;
};
export type DirectiveHandler = (el: Element, state: any, expr: string, name?: string) => ((value: any) => void | (() => void)) | {
[Symbol.dispose]: () => void;
} | void;
export type ModifierHandler = (fn: Function, ...args: string[]) => Function;
export type SpraeState = {
/**
* - Internal signals map
*/
_signals?: Record<string, Signal>;
};
export type SpraeConfig = {
/**
* - Custom expression compiler
*/
compile?: (expr: string) => (state: any) => any;
/**
* - Directive prefix (default: ':')
*/
prefix?: string;
/**
* - Signal factory
*/
signal?: <T_1>(value: T_1) => Signal<T_1>;
/**
* - Effect factory
*/
effect?: (fn: () => void | (() => void)) => () => void;
/**
* - Computed factory
*/
computed?: <T_1>(fn: () => T_1) => Signal<T_1>;
/**
* - Batch function
*/
batch?: <T_1>(fn: () => T_1) => T_1;
/**
* - Untracked function
*/
untracked?: <T_1>(fn: () => T_1) => T_1;
/**
* - Directive initializer
*/
dir?: (el: Element, name: string, expr: string, state: any) => () => (() => void) | void;
};
export type FragmentLike = {
/**
* - The owner document
*/
ownerDocument: Document;
/**
* - Child nodes of the fragment
*/
childNodes: Node[];
/**
* - The document fragment content
*/
content: DocumentFragment;
/**
* - Remove the fragment from DOM
*/
remove: () => void;
/**
* - Replace the fragment with an element
*/
replaceWith: (el: Node) => void;
/**
* - Attributes from the original template
*/
attributes: Attr[];
/**
* - Remove an attribute
*/
removeAttribute: (name: string) => void;
};
/**
* @callback DirectiveHandler
* @param {Element} el - Target element
* @param {Object} state - Reactive state object
* @param {string} expr - Expression string
* @param {string} [name] - Directive name with modifiers
* @returns {((value: any) => void | (() => void)) | { [Symbol.dispose]: () => void } | void}
*/
/**
* @callback ModifierHandler
* @param {Function} fn - Function to modify
* @param {...string} args - Modifier arguments (from dash-separated values)
* @returns {Function}
*/
/**
* @typedef {Object} SpraeState
* @property {Record<string, Signal>} [_signals] - Internal signals map
*/
/**
* Applies directives to an HTML element and manages its reactive state.
*
* @param {Element} [el=document.body] - The target HTML element to apply directives to.
* @param {Object} [state] - Initial state values to populate the element's reactive state.
* @returns {SpraeState & Object} The reactive state object associated with the element.
*/
declare function sprae(root?: HTMLElement, state?: any): SpraeState & any;
declare namespace sprae {
let version: any;
}
//# sourceMappingURL=core.d.ts.map