@forest-js/core
Version:
A tiny, functional DOM engine with explicit update and real DOM.
61 lines • 1.68 kB
JavaScript
import { enqueue } from "../dom";
/**
* @function createUtility
* @description Creates a utility function that enqueues a function to be executed on the next tick.
* Useful for batching updates to avoid layout thrashing.
*
* @template E - Element type.
* @param fn - The function to be executed.
* @returns A utility function that processes the element.
* @example
* ```ts
* const delayedUpdate = createUtility<HTMLDivElement>((el) => {
* el.style.color = "blue";
* return el;
* });
* ```
*/
export const createUtility = (fn) => {
return (el) => {
enqueue(() => fn(el));
return el;
};
};
/**
* @function use
* @description Combines multiple utility functions into a single utility.
* Sequentially applies each utility to the element.
*
* @template E - Element type.
* @param utils - Array of utility functions to combine
* @returns Combined utility function
* @example
* ```ts
* const combinedUtility = use<HTMLDivElement>(
* addAttribute({ "data-active": true })
* );
*
* combinedUtility(MyElement);
* ```
*/
export const use = (...utils) => {
return (el) => utils.reduce((acc, fn) => fn(acc), el);
};
/**
* @function decorate
* @description Directly applies multiple utility functions to an element.
* Similar to UseUtility but applies immediately.
*
* @template E - Element type.
* @param el - Element to decorate
* @param utils - Array of utility functions to apply
* @returns Decorated element
* @example
* ```ts
* decorate(MyElement, addAttribute({ "data-active": true }));
* ```
*/
export const decorate = (el, ...utils) => {
return use(...utils)(el);
};
//# sourceMappingURL=core.js.map