๐๏ธ The DOM Factory: $html( ) โ
$html is the internal engine that creates, attributes, and attaches reactivity to DOM elements. It uses $.watch to maintain a live, high-performance link between your Signals and the Document Object Model.
๐ Function Signature โ
$html(tagName: string, props?: Object, children?: any[] | any): HTMLElement| Parameter | Type | Required | Description |
|---|---|---|---|
tagName | string | Yes | Valid HTML tag name (e.g., "div", "button"). |
props | Object | No | HTML attributes, event listeners, and reactive bindings. |
children | any | No | Nested elements, text strings, or reactive functions. |
๐ Key Features โ
1. Attribute Handling โ
SigPro intelligently decides how to apply each property:
- Standard Props: Applied via
setAttributeor direct property assignment. - Class Names: Supports
classorclassNameinterchangeably. - Boolean Props: Automatic handling for
checked,disabled,hidden, etc.
2. Event Listeners โ
Events are defined by the on prefix. SigPro automatically registers the listener and ensures it is cleaned up when the element is destroyed.
Button({
onclick: (e) => console.log("Clicked!", e),
}, "Click Me");3. Reactive Attributes (One-Way) โ
If an attribute value is a function (like a Signal), $html creates an internal $.watch to keep the DOM in sync with the state.
Div({
// Updates the class whenever 'theme()' changes
class: () => theme() === "dark" ? "bg-black" : "bg-white"
});4. Smart Two-Way Binding (Automatic) โ
SigPro automatically enables bidirectional synchronization when it detects a Signal assigned to a form-capable attribute (value or checked) on an input element (input, textarea, select).
// Syncs input value <-> signal automatically
Input({
type: "text",
value: username // No special symbols needed!
})Note: To use a Signal as read-only in an input, wrap it in an anonymous function:
value: () => username().
5. Reactive Children โ
Children can be static or dynamic. When a child is a function, SigPro creates a reactive boundary using $.watch for that specific part of the DOM.
Div({}, [
H1("Static Title"),
// Only this text node re-renders when 'count' changes
() => `Current count: ${count()}`
]);๐งน Memory Management (Internal) โ
Every element created with $html is "self-aware" regarding its reactive dependencies.
._cleanups: A hiddenSetattached to the element that stores allstop()functions from its internal$.watchcalls and event listeners.- Lifecycle: When an element is removed by a Controller (
$.if,$.for, or$.router), SigPro performs a recursive "sweep" to execute these cleanups, ensuring zero memory leaks.
๐ก Tag Constructors (The Shortcuts) โ
Instead of writing $html("div", ...) every time, SigPro provides PascalCase global functions for all standard HTML tags:
// This:
Div({ class: "wrapper" }, [ Span("Hello") ])
// Is exactly equivalent to:
$html("div", { class: "wrapper" }, [ $html("span", {}, "Hello") ])