/**
* Keyed list rendering plugin for templates.
*
* @example
* ```ts
* import { html as baseHtml, signal } from "balises";
* import eachPlugin, { each } from "balises/each";
*
* const html = baseHtml.with(eachPlugin);
* const items = signal([{ id: 1, name: "Alice" }, { id: 2, name: "Bob" }]);
*
* html`
* ${each(items, i => i.id, itemSignal => html`- ${() => itemSignal.value.name}
`)}
*
`.render();
* ```
*/
import { ReadonlySignal, type Reactive } from "./signals/index.js";
import { Template, type InterpolationPlugin } from "./template.js";
declare const EACH: unique symbol;
/** Each descriptor returned by each() */
export interface EachDescriptor {
readonly [EACH]: true;
/** @internal */ __list__: T[] | Reactive | (() => T[]);
/** @internal */ __keyFn__: (item: T, index: number) => unknown;
/** @internal */ __renderFn__: (item: ReadonlySignal, index: number) => Template;
}
/**
* Create a keyed list descriptor for efficient list rendering.
*
* @param list - Array, signal, or getter returning the list
* @param keyFn - Extract unique key from each item
* @param renderFn - Render function receiving ReadonlySignal for reactive updates
*/
export declare function each(list: T[] | Reactive | (() => T[]), keyFn: (item: T, index: number) => unknown, renderFn: (item: ReadonlySignal, index: number) => Template): EachDescriptor;
/** Plugin that handles each() descriptors in templates. */
declare const eachPlugin: InterpolationPlugin;
export default eachPlugin;
//# sourceMappingURL=each.d.ts.map