resig.js
Version:
Universal reactive signal library with complete platform features: signals, animations, CRDTs, scheduling, DOM integration. Works identically across React, SolidJS, Svelte, Vue, and Qwik.
105 lines • 8.32 kB
JavaScript
/**
* DOM Integration Module
* Provides DOM utilities and bindings for Signal-Σ
*/
import { signal } from '../core/signal';
// DOM Signal utilities
export const domSignal = (initialValue) => {
return signal(initialValue);
};
// Bind element to signal
export const bindElement = (element, sig) => {
const unsubscribe = sig.subscribe((value) => {
if (element.textContent !== String(value)) {
element.textContent = String(value);
}
});
return unsubscribe;
};
// Bind event to signal
export const bindEvent = (element, event, sig) => {
const handler = (e) => {
if (element instanceof HTMLInputElement) {
sig._set(element.value);
}
else {
sig._set(e);
}
};
element.addEventListener(event, handler);
return () => {
element.removeEventListener(event, handler);
};
};
// Bind attribute to signal
export const bindAttribute = (element, attribute, sig) => {
const unsubscribe = sig.subscribe((value) => {
element.setAttribute(attribute, String(value));
});
return unsubscribe;
};
// Additional DOM utilities for compatibility
export const bindProperty = (element, property, sig) => {
const unsubscribe = sig.subscribe((value) => {
element[property] = value;
});
return unsubscribe;
};
export const domBlock = (element) => {
return { element, render: () => element };
};
export const reactiveDOMBlock = (element, sig) => {
bindElement(element, sig);
return { element, signal: sig, render: () => element };
};
export const syncCRDTToDOM = (_element, _crdt) => {
// Simplified CRDT to DOM sync
return () => { };
};
export const bindFormToSignal = (form, sig) => {
const handler = () => {
const formData = new FormData(form);
const entries = Array.from(formData.entries());
const data = Object.fromEntries(entries);
sig._set(data);
};
form.addEventListener('input', handler);
form.addEventListener('change', handler);
return () => {
form.removeEventListener('input', handler);
form.removeEventListener('change', handler);
};
};
export const delegate = (element, selector, event, handler) => {
const delegateHandler = (e) => {
const target = e.target;
if (target.matches(selector)) {
handler(e);
}
};
element.addEventListener(event, delegateHandler);
return () => {
element.removeEventListener(event, delegateHandler);
};
};
export const animateElement = (_element, _animation) => {
// Simplified animation
return Promise.resolve();
};
export const observeIntersection = (element, callback) => {
// Simplified intersection observer
const observer = new IntersectionObserver((entries) => {
entries.forEach(callback);
});
observer.observe(element);
return () => observer.disconnect();
};
export const observeResize = (element, callback) => {
// Simplified resize observer
const observer = new ResizeObserver((entries) => {
entries.forEach(callback);
});
observer.observe(element);
return () => observer.disconnect();
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZG9tL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCx1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLFlBQWUsRUFDMkIsRUFBRTtJQUM1QyxPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUM5QixDQUFDLENBQUM7QUFFRix5QkFBeUI7QUFDekIsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsT0FBb0IsRUFBRSxHQUFnQixFQUFFLEVBQUU7SUFDcEUsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQzFDLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDLENBQUM7QUFFRix1QkFBdUI7QUFDdkIsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQ3ZCLE9BQW9CLEVBQ3BCLEtBQWEsRUFDYixHQUFpRCxFQUNqRCxFQUFFO0lBQ0YsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFRLEVBQUUsRUFBRTtRQUMzQixJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLENBQUM7YUFBTSxDQUFDO1lBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDLENBQUM7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