index.mjs 1.42 KB
import { camelToDash } from '../../render/dom/utils/camel-to-dash.mjs';
import { createSelectorEffect } from '../utils/create-dom-effect.mjs';
import { createEffect } from '../utils/create-effect.mjs';

function canSetAsProperty(element, name) {
    if (!(name in element))
        return false;
    const descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(element), name) ||
        Object.getOwnPropertyDescriptor(element, name);
    // Check if it has a setter
    return descriptor && typeof descriptor.set === "function";
}
const addAttrValue = (element, state, key, value) => {
    const isProp = canSetAsProperty(element, key);
    const name = isProp
        ? key
        : key.startsWith("data") || key.startsWith("aria")
            ? camelToDash(key)
            : key;
    /**
     * Set attribute directly via property if available
     */
    const render = isProp
        ? () => {
            element[name] = state.latest[key];
        }
        : () => {
            const v = state.latest[key];
            if (v === null || v === undefined) {
                element.removeAttribute(name);
            }
            else {
                element.setAttribute(name, String(v));
            }
        };
    return state.set(key, value, render);
};
const attrEffect = /*@__PURE__*/ createSelectorEffect(
/*@__PURE__*/ createEffect(addAttrValue));

export { addAttrValue, attrEffect };
//# sourceMappingURL=index.mjs.map