{"version":3,"sources":["dom-utils.ts"],"sourcesContent":["import { Datex } from \"datex-core-legacy\"\nimport { defaultElementAttributes, elementEventHandlerAttributes, htmlElementAttributes, mathMLTags, svgElementAttributes, svgElementAttributesLowercase, svgTags } from \"../attributes.ts\";\n\nimport { IterableHandler } from \"datex-core-legacy/utils/iterable-handler.ts\";\nimport { DX_VALUE, DX_REPLACE, PointerProperty } from \"datex-core-legacy/datex_all.ts\";\nimport type { DOMContext } from \"../dom/DOMContext.ts\";\nimport { JSTransferableFunction } from \"datex-core-legacy/types/js-function.ts\";\nimport { client_type } from \"datex-core-legacy/utils/constants.ts\";\nimport { weakAction } from \"datex-core-legacy/utils/weak-action.ts\";\nimport { LazyPointer } from \"datex-core-legacy/runtime/lazy-pointer.ts\";\nimport { isolatedScope } from \"datex-core-legacy/utils/isolated-scope.ts\";\nimport { Time } from \"datex-core-legacy/types/time.ts\";\nexport const JSX_INSERT_STRING: unique symbol = Symbol(\"JSX_INSERT_STRING\");\n\n\nconst logger = new Datex.Logger(\"UIX\");\n\ntype appendableContentBase = Datex.RefOrValue<Element|DocumentFragment|string|number|bigint|boolean>|Promise<appendableContent>;\nexport type appendableContent = appendableContentBase|Promise<appendableContentBase>\n\n\n// deno-lint-ignore no-namespace\nexport namespace DOMUtils {\n    export type elWithUIXAttributes = Element & {\n        [DOMUtils.EVENT_LISTENERS]:Map<keyof HTMLElementEventMap, Set<[(...args:any)=>any, boolean]>>\n        [DOMUtils.ATTR_BINDINGS]:Map<string, Datex.ReactiveValue>,\n        [DOMUtils.ATTR_DX_VALUES]:Map<string, Datex.ReactiveValue>,\n        [DOMUtils.STYLE_DX_VALUES]:Map<string, Datex.ReactiveValue<string>>,\n        [DOMUtils.STYLE_WEAK_PROPS]:Map<string, boolean>,\n        [DOMUtils.CHILDREN_DX_VALUES]:Set<Datex.ReactiveValue>,        \n        [DOMUtils.DATEX_UPDATE_TYPE]?: string,\n        [DOMUtils.ATTR_SELECTED_BINDING]?: Datex.ReactiveValue\n    }\n}\n\ntype InputValidation = {\n    message: Datex.RefOrValue<string>,\n    enabled: boolean\n}\n\nexport class DOMUtils {\n\n    static readonly EVENT_LISTENERS: unique symbol = Symbol.for(\"DOMUtils.EVENT_LISTENERS\");\n    static readonly ATTR_BINDINGS: unique symbol = Symbol.for(\"DOMUtils.ATTR_BINDINGS\");\n    static readonly ATTR_DX_VALUES: unique symbol = Symbol.for(\"DOMUtils.ATTR_DX_VALUES\");\n    static readonly STYLE_DX_VALUES: unique symbol = Symbol.for(\"DOMUtils.STYLE_DX_VALUES\");\n    static readonly STYLE_WEAK_PROPS: unique symbol = Symbol.for(\"DOMUtils.STYLE_WEAK_PROPS\");\n    static readonly CHILDREN_DX_VALUES: unique symbol = Symbol.for(\"DOMUtils.CHILDREN_DX_VALUES\");\n    static readonly ATTR_SELECTED_BINDING: unique symbol = Symbol.for(\"DOMUtils.ATTR_SELECTED_BINDING\");\n\n    static readonly DATEX_UPDATE_TYPE: unique symbol = Symbol.for(\"DOMUtils.DATEX_UPDATE_TYPE\");\n    static readonly PLACEHOLDER_CONTENT: unique symbol = Symbol.for(\"DOMUtils.PLACEHOLDER_CONTENT\");\n\n    readonly svgNS = \"http://www.w3.org/2000/svg\"\n\treadonly mathMLNS = \"http://www.w3.org/1998/Math/MathML\"\n\t\n\tconstructor(public readonly context: DOMContext) {}\n    get document() {return this.context.document}\n\n\n    /**\n     * Global settings for input validation.\n     * Per default, input values bound to number references are validated.\n     * Input validation for specific types can be disabled by setting the 'enabled' property to false,\n     * and custom validation messages can be set.\n     */\n    public defaultInputValidation: Record<'number'|'bigint', InputValidation> = {\n        'number': {\n            message: \"Invalid number\",\n            enabled: true,\n        },\n        'bigint': {\n            message: \"Invalid integer\",\n            enabled: true,\n        }\n    }\n\n\tescapeHtml(str:string) {\n        if (typeof str != \"string\") return \"\";\n        return str.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replaceAll('\"', '&quot;').replaceAll(\"'\", '&#039;').replace('\\u0009', '&#9;')\n    }\n\n\n    createHTMLElement(html?:string, content?:Datex.RefOrValue<HTMLElement>|(Datex.RefOrValue<HTMLElement>)[]):HTMLElement {\n        if (html == undefined) html = \"<div></div>\";\n        const template = this.document.createElement('template');\n        html = html.trim();\n        template.innerHTML = html;\n        const element = <HTMLElement>template.content.firstChild;\n\n        if (content != undefined) {\n            // set html\n            if (Datex.ReactiveValue.collapseValue(content,true,true) instanceof this.context.HTMLElement) this.setElementHTML(element, <HTMLElement>content);\n            // set child nodes\n            if (content instanceof Array) {\n                for (const el of content){\n                    if (Datex.ReactiveValue.collapseValue(el,true,true) instanceof this.context.HTMLElement) element.append(Datex.ReactiveValue.collapseValue(el,true,true))\n                    else {\n                        const container = this.document.createElement(\"div\");\n                        this.setElementText(container, el);\n                        element.append(container);\n                    }\n                }\n            }\n            // set text\n            else this.setElementText(element, content);\n        }\n        return element;\n    }\n\n    // remember which values are currently synced with element content - for unobserve\n    private element_bound_html_values = new WeakMap<Element, Datex.Value>();\n    private element_bound_text_values = new WeakMap<Element, Datex.Value>();\n\n    private updateElementHTML = function (this:Element, html:Element|string){\n        if (html instanceof Element) {\n            this.innerHTML = '';\n            this.append(html)\n        } \n        else this.innerHTML = html ?? '';\n    }\n\n    private updateElementText = function (this:HTMLElement, text:unknown){\n        if (this instanceof Datex.ReactiveValue) console.warn(\"update text invalid\", this, text)\n        \n        if (text instanceof Datex.Markdown) {\n            this.innerHTML = (text.getHTML() as HTMLElement).children[0].innerHTML;\n        }\n        // @ts-ignore _use_markdown\n        else if (this._use_markdown && typeof text == \"string\") {\n            this.innerHTML = (new Datex.Markdown(text).getHTML() as HTMLElement).children[0].innerHTML;\n        }\n        else this.innerText = ((<any>text)?.toString()) ?? ''\n    }\n\n    setElementHTML<T extends Element>(element:T, html:Datex.RefOrValue<string|boolean|Element>):T {\n        // unobserve?\n        this.element_bound_html_values.get(element)?.unobserve(element);\n        this.element_bound_text_values.get(element)?.unobserve(element);\n\n        // none\n        if (html == undefined || html === false) element.innerHTML = '';\n\n        // DatexValue\n        if (html instanceof Datex.ReactiveValue) {\n            this.updateElementHTML.call(element, html.val);\n\n            // @ts-ignore: TODO: fix?\n            html.observe(this.updateElementHTML, element);\n            this.element_bound_html_values.set(element, html);\n        }\n        // default\n        else this.updateElementHTML.call(element, html);\n\n        return element;\n    }\n\n    setElementText<T extends HTMLElement>(element:T, text:Datex.RefOrValue<unknown>, markdown = false):T{\n        // unobserve?\n        this.element_bound_html_values.get(element)?.unobserve(element);\n        this.element_bound_text_values.get(element)?.unobserve(element);\n\n        // @ts-ignore markdown flag\n        element._use_markdown = markdown;\n\n        // none\n        if (text == undefined || text === false) element.innerText = '';\n\n        // Datexv Ref\n        else if (text instanceof Datex.ReactiveValue) {\n            \n            this.updateElementText.call(element, text.val);\n\n            text.observe(this.updateElementText, element);\n            this.element_bound_text_values.set(element, text);\n        }\n        // default\n        else this.updateElementText.call(element, text);\n\n        return element;\n    }\n\n\n\tcreateElement(tagName:string): SVGElement|MathMLElement|HTMLElement {\n\t\tif (svgTags.has(tagName as any)) return this.document.createElementNS(this.svgNS, tagName as any) as SVGElement;\n\t\telse if (mathMLTags.has(tagName as any)) return this.document.createElementNS(this.mathMLNS, tagName as any) as MathMLElement;\n\t\telse return this.document.createElement(tagName as any) as HTMLElement;\n\t}\n\n\n    /**\n     * Append children to a parent, updates children dynamically if pointer of iterable provided\n     * @param parent \n     * @param children \n     * @returns \n     */\n    append<T extends Element|DocumentFragment>(parent:T, children:appendableContent|appendableContent[]):T | undefined {\n\n        // @ts-ignore extract children ref iterable from DocumentFragment\n        if (children instanceof this.context.DocumentFragment && children._uix_children) children = children._uix_children;\n\n        const collapsedChildren = Datex.ReactiveValue.collapseValue(children);\n\n        // is ref and iterable/element\n        if (!(parent instanceof this.context.DocumentFragment) && Datex.ReactiveValue.isRef(children) && (collapsedChildren instanceof Array || collapsedChildren instanceof Map || collapsedChildren instanceof Set)) {\n            // is iterable ref\n            // TODO: support promises\n            children = collapsedChildren;\n\n            const ref:Datex.ReactiveValue = children instanceof Datex.ReactiveValue ? children : Datex.Pointer.getByValue(children)!;\n\n            if (!(<DOMUtils.elWithUIXAttributes><unknown>parent)[DOMUtils.CHILDREN_DX_VALUES]) \n                (<DOMUtils.elWithUIXAttributes><unknown>parent)[DOMUtils.CHILDREN_DX_VALUES] = new Set<Datex.ReactiveValue>();\n            (<DOMUtils.elWithUIXAttributes><unknown>parent)[DOMUtils.CHILDREN_DX_VALUES].add(ref)\n\n            const startAnchor = new this.context.Comment(\"start \" + Datex.Pointer.getByValue(children)?.idString())\n            const endAnchor = new this.context.Comment(\"end \" + Datex.Pointer.getByValue(children)?.idString())\n            parent.append(startAnchor, endAnchor)\n\n            const Comment = this.context.Comment;\n\n            const iterableHandler = new IterableHandler<appendableContent, Node>(children as appendableContent[], {\n                map: (v,k) => {\n                    const {node: el} = this.valueToDOMNode(v);\n                    return el;\n                },\n                onEntryRemoved: (v,k) => {\n                    // remove kth child\n                    const node = parent.childNodes[k+1];\n                    // out of bounds\n                    if (!node || node === endAnchor || node === startAnchor){\n                        return;\n                    }\n                    node.remove();\n                },\n                onNewEntry(v,k,p)  {\n                    // if kth child exists, replace, otherwise append at end\n                    const current = parent.childNodes[k+1];\n                    if (current && current != endAnchor) parent.replaceChild(v, current);\n                    else {\n                        // fill gap if k is larger than current children\n                        if (k > parent.childNodes.length-2) {\n                            for (let i = parent.childNodes.length-2; i < k; i++) {\n                                parent.insertBefore(new Comment(\"empty\"), endAnchor);\n                            }\n                        }\n                        parent.insertBefore(v, endAnchor);\n                    }\n                },\n                onEmpty: () => {\n                    let current:Node|null|undefined = startAnchor.nextSibling;\n                    while (current && current !== endAnchor) {\n                        const removing = current;\n                        current = current?.nextSibling\n                        parent.removeChild(removing);\n                    }\n                }\n            })\n\n            // workaround: prevent iterableHandler GC \n            parent[Datex.Pointer.DISPOSABLES] = iterableHandler\n\n            // TODO: element references updating required?\n            // else if (children instanceof Element) {\n            //     const scheduler = new TaskScheduler(true);\n            //     let lastChildren: Node[] = [];\n    \n            //     Datex.ReactiveValue.observeAndInit(children, () => {\n            //         scheduler.schedule(\n            //                 Task(resolve => {\n            //                     appendNew(parent, Array.isArray(children) ? children : [children], lastChildren, (e) => {\n            //                         lastChildren = e;\n            //                         resolve();\n            //                     });\n            //                 })\n            //             ); \n            //         },\n            //         undefined,\n            //         null, \n            //         {\n            //             recursive: false,\n            //             types: [Datex.ReactiveValue.UPDATE_TYPE.INIT]\n            //         }\n            //     )\n            // }\n        }\n\n        // is iterable (no ref, collapse recursive)\n        // else if (children instanceof Array) {\n        //     for (const child of children) {\n        //         this.append(parent, child);\n        //     }\n        // }\n\n        // is not a ref iterable\n        else return this._append(parent, Array.isArray(children) ? children : [children]);\n    }\n\n\n    _append<T extends Element|DocumentFragment>(parent:T, children:appendableContent[]):T {\n        // use content if parent is <template>\n        const element = parent instanceof this.context.HTMLTemplateElement ? parent.content : parent;\n\n        // Handle HTMLTextAreaElement element body\n        if (element?.tagName?.toLowerCase?.() === \"textarea\") {\n            const reactiveProps = children.find(e => e instanceof Datex.ReactiveValue);\n            if (reactiveProps) {\n                this.setLiveAttribute(element, \"value\", reactiveProps);\n                return parent;\n            }\n        }\n\n        for (let child of children) {\n            child = (child as any)?.[JSX_INSERT_STRING] ? (child as any).val : child; // collapse safely injected strings\n\n            const {node} = this.valueToDOMNode(child);\n\n            // set shadow root or append\n            this.appendElementOrShadowRoot(element, node);\n        }\n\n        return parent;\n    }\n\n\tsetElementAttribute<T extends Element>(element:T, attr:string, value:Datex.RefOrValue<unknown>|LazyPointer<unknown>|((...args:unknown[])=>unknown)|{[JSX_INSERT_STRING]:true, val:string}, rootPath?:string|URL):boolean|Promise<boolean> {\n        \n        // not an element (e.g DocumentFragment)\n        if (!(element instanceof this.context.Element)) return false;\n\n        // valid attribute name?\n        // not an HTML attribute\n        if (!(\n            // if one of the following is true, the attribute is added\n            attr.startsWith(\"data-\") ||\n            attr.startsWith(\"aria-\") ||\n            (!element.tagName.startsWith(\"UIX-\") && element.tagName.includes(\"-\")) || // is custom element, but not a UIX component\n            defaultElementAttributes.includes(<typeof defaultElementAttributes[number]>attr) || \n            elementEventHandlerAttributes.includes(<typeof elementEventHandlerAttributes[number]>attr) ||\n            (<readonly string[]>htmlElementAttributes[<keyof typeof htmlElementAttributes>element.tagName.toLowerCase()])?.includes(<typeof htmlElementAttributes[keyof typeof htmlElementAttributes][number]>attr) ||\n            (<readonly string[]>svgElementAttributesLowercase[<keyof typeof svgElementAttributesLowercase>element.tagName.toLowerCase()])?.includes(<typeof svgElementAttributes[keyof typeof svgElementAttributes][number]>attr) )) {\n                return false;\n        }\n\n        // warnings for invalid attribute usage\n        // setting the 'value' attribute of a <input> checkbox element\n        if (element instanceof this.context.HTMLInputElement && attr == \"value\" && element.getAttribute(\"type\") == \"checkbox\" && typeof Datex.ReactiveValue.collapseValue(value, true, true) == \"boolean\") {\n            logger.warn(`You are assigning the \"value\" attribute of an <input type=\"checkbox\"> to a boolean value. This has no effect on the checkbox state. Did you mean to use the \"checked\" attribute instead\\\\?`)\n        }\n\n        // value:selected is only allowed for input type=\"radio\"\n        else if (attr == \"value:selected\" && !(element instanceof this.context.HTMLInputElement && (element as HTMLInputElement).type == \"radio\")) {\n            throw new Error(\"The \\\"value:selected\\\" attribute is only allowed for <input type=\\\"radio\\\"> elements\");\n        }\n        \n        value = value?.[JSX_INSERT_STRING] ? value.val : value; // collapse safely injected strings\n\n        // first await, if value is promise\n        if (value instanceof Promise) return value.then(v=>this.setElementAttribute(element, attr, v, rootPath))\n\n        if (!element) return false;\n        value = Datex.Pointer.pointerifyValue(value)\n\n        // LazyPointer or lazy pointer property\n        if (\n            value instanceof LazyPointer ||\n            (value instanceof PointerProperty && value.lazy_pointer)\n        ) {\n            value.onLoad(() => {\n                this.setElementAttribute(element, attr, value, rootPath)\n            })\n            return true;\n        }\n\n        // Datex Ref\n        else if (value instanceof Datex.ReactiveValue) {\n            return this.setLiveAttribute(element, attr, value, rootPath);\n        }\n\n        // default\n        else return this.setAttribute(element, attr, value, rootPath)\n    }\n\n    private async handleSetVal(ref: Datex.ReactiveValue, element: HTMLInputElement, val:any, type?: \"number\"|\"bigint\"|\"boolean\"|\"time\") {\n        if (this.defaultInputValidation.number?.enabled && type == \"number\") {\n            if (isNaN(Number(val))) {\n                element.setCustomValidity(Datex.ReactiveValue.collapseValue(this.defaultInputValidation.number.message, true, true) as string)\n                element.reportValidity()\n                return;\n            }\n        }\n\n        if (this.defaultInputValidation.bigint?.enabled && type == \"bigint\") {\n            if (!val.match(/^-?\\d+$/)) {\n                element.setCustomValidity(Datex.ReactiveValue.collapseValue(this.defaultInputValidation.bigint.message, true, true) as string)\n                element.reportValidity()\n                return;\n            }\n        }\n\n        if (type == \"boolean\") val = Boolean(val);\n        else if (type == \"bigint\") val = BigInt(val);\n        else if (type == \"number\") val = Number(val);\n\n        try {\n            await ref.setVal(val)\n            element.setCustomValidity(\"\")\n            element.reportValidity()\n        }\n        catch (e) {\n            const message = e?.message ?? e?.toString()\n            element.setCustomValidity(message)\n            element.reportValidity()\n        }\n    }\n\n\n    private setLiveAttribute<T extends Element>(element:T, attr:string, value:Datex.RefLike<unknown>, rootPath?:string|URL):boolean {\n        const isInputElement = element.tagName.toLowerCase() === \"input\";\n        const isSelectElement = element.tagName.toLowerCase() === \"select\";\n        const isTextareaElement = element.tagName.toLowerCase() === \"textarea\";\n        const isDateInput = isInputElement && (\n            (element as unknown as HTMLInputElement).type == \"datetime-local\" ||\n            (element as unknown as HTMLInputElement).type == \"date\" ||\n            (element as unknown as HTMLInputElement).type == \"time\" ||\n            (element as unknown as HTMLInputElement).type == \"month\" ||\n            (element as unknown as HTMLInputElement).type == \"week\"\n        );\n\n        let type = Datex.Type.ofValue(value);\n        if (type instanceof Datex.Conjunction) {\n            // find a type that is a Datex.Type\n            for (const t of type) {\n                if (t instanceof Datex.Type) {\n                    type = t;\n                    break;\n                }\n            }\n        }\n\n        // bind value (used for datex-over-http updates)\n        if (attr == \"value\" || attr == \"checked\") {\n            if (!(<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_BINDINGS]) \n                (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_BINDINGS] = new Map<string, Datex.ReactiveValue>();\n            (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_BINDINGS].set(attr, value)\n        }\n        else {\n            if (!(<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_DX_VALUES]) \n                (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_DX_VALUES] = new Map<string, Datex.ReactiveValue>();\n            (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.ATTR_DX_VALUES].set(attr, value)\n        }\n \n        // :out attributes\n        if ((isSelectElement || isInputElement || isTextareaElement) && (attr == \"value:selected\" || attr == \"value:out\" || attr == \"value:in\" || attr == \"value\")) {\n\n            const event = isSelectElement ? 'change' : 'input';\n            const inputElement = element as unknown as HTMLInputElement;\n            // out\n            if (attr == \"value\" || attr == \"value:out\" || attr == \"value:selected\") {\n                if (!(type instanceof Datex.Type)) {\n                    console.warn(\"Value has no type\", value);\n                }\n                else if (type.matchesType(Datex.Type.std.text)) element.addEventListener(event, () => this.handleSetVal(value, inputElement, inputElement.value))\n                else if (type.matchesType(Datex.Type.std.decimal)) element.addEventListener(event, () => {\n                    // date input\n                    if (isDateInput) {\n                        this.handleSetVal(value, inputElement, new Time((element as unknown as HTMLInputElement).valueAsDate ?? new Date((element as unknown as HTMLInputElement).value)), \"number\")\n                    }\n                    // normal input\n                    else {\n                        this.handleSetVal(value, inputElement, inputElement.value, \"number\")\n                    }\n                })\n                else if (type.matchesType(Datex.Type.std.integer)) element.addEventListener(event, () => this.handleSetVal(value, inputElement, inputElement.value, \"bigint\"))\n                else if (type.matchesType(Datex.Type.std.boolean)) element.addEventListener(event, () => this.handleSetVal(value, inputElement, inputElement.value, \"boolean\"))\n                else if (type.matchesType(Datex.Type.std.void) || type.matchesType(Datex.Type.std.null)) {console.warn(\"setting value attribute to \" + type, element)}\n                else if (type.matchesType(Datex.Type.std.time)) element.addEventListener(event, () => {\n                    this.handleSetVal(value, inputElement, new Time((element as unknown as HTMLInputElement).valueAsDate ?? new Date((element as unknown as HTMLInputElement).value)), \"time\")\n                })\n                else throw new Error(\"The type \"+type+\" is not supported for the '\"+attr+\"' attribute of the <\"+element.tagName.toLowerCase()+\"> element\");\n\n\n                // for all input elements that support a max, min or step attribute: listen for attribute changes and update the output value\n                if (isInputElement && (inputElement.type == \"number\" || inputElement.type == \"range\")) {\n                    const observer = new MutationObserver(() => {\n                        if (type.matchesType(Datex.Type.std.decimal)) this.handleSetVal(value, inputElement, inputElement.value, \"number\");\n                        else if (type.matchesType(Datex.Type.std.integer)) this.handleSetVal(value, inputElement, inputElement.value, \"bigint\");\n                    });\n                    observer.observe(inputElement, {attributes: true, attributeFilter: [\"max\", \"min\", \"step\"]})\n                }\n\n            }\n\n            // value:selected initial state\n            if (attr == \"value:selected\") {\n                (<DOMUtils.elWithUIXAttributes><unknown>inputElement)[DOMUtils.ATTR_SELECTED_BINDING] = value;\n                // check if the defined value of the input is equal to the value of the pointer\n                if (inputElement.value == value.val) inputElement.checked = true;\n            }\n            \n            // in\n            if (attr == \"value\" || attr == \"value:in\" || attr == \"value:selected\") {\n                const valid = attr==\"value:selected\" ? true : this.setAttribute(element, \"value\", value.val, rootPath)\n                const val = value;\n                if (valid) {\n                    weakAction(\n                        // weak dependencies for init\n                        {element}, \n                        // init (called once)\n                        ({element}) => {\n                            use(\"allow-globals\", this, logger, val, rootPath, isolatedScope, attr)\n                            const handler = isolatedScope(v => {\n                                use(\"allow-globals\", this, logger, rootPath, element, attr)\n                                const deref = element.deref();\n                                if (!deref) {\n                                    logger.warn(\"Undetected garbage collection (uix-w0001)\");\n                                    return;\n                                }\n                                // if value:selected, only update selection state\n                                if (attr == \"value:selected\") {\n                                    if (deref.value == v) deref.checked = true;\n                                }\n                                // set value attribute\n                                else {\n                                    this.setAttribute(deref, \"value\", v, rootPath);\n                                }\n                            })\n                            val.observe(handler);\n                            return handler;\n                        }, \n                        // deinit (called when a weak init dependency is removed) - not guaranteed to be called\n                        (handler, _, {val}) => val.unobserve(handler),\n                        // weak deinit dependencies (allow gc)\n                        {val}\n                    );\n                }\n                return valid;\n            }\n\n            return true;\n        }\n\n        // checked attribute\n        if (isInputElement && element.getAttribute(\"type\") === \"checkbox\" && attr == \"checked\") {\n            if (!(element instanceof this.context.HTMLInputElement)) throw new Error(\"the 'checked' attribute is only supported for <input> elements\");\n\n            const inputElement = element as HTMLInputElement;\n\n            if (type.matchesType(Datex.Type.std.boolean)) inputElement.addEventListener('change', () => this.handleSetVal(value, inputElement, inputElement.checked, \"boolean\"))\n            else if (type.matchesType(Datex.Type.std.void)) {console.warn(\"setting checked attribute to void\")}\n            else throw new Error(\"The type \"+type+\" is not supported for the 'checked' attribute of the <input> element\");\n        }\n\n        // default attributes\n\n        const currentVal = value.val;\n        const valid = this.setAttribute(element, attr, currentVal, rootPath)\n        // observe pointer value (TODO: this observe currently only works if value is a primitive pointer, otherwise only internal updates are reflected reactively, e.g. for style objects or arrays - this is handled in setAttribute)\n        const isPrimitive = (typeof currentVal != \"object\" || currentVal === null) && typeof currentVal != \"function\";\n        if (isPrimitive && valid) {\n            const val = value;\n            \n            weakAction({element}, \n                ({element}) => {\n                    use(\"allow-globals\", this, attr, rootPath, logger, val, isolatedScope);\n\n                    const handler = isolatedScope((v:any,...args) => {\n                        use(\"allow-globals\", this, logger, rootPath, element, attr);\n                        const deref = element.deref();\n                        if (!deref) {\n                            logger.warn(\"Undetected garbage collection (uix-w0001)\");\n                            return;\n                        }\n                        this.setAttribute(deref, attr, v, rootPath);\n                    });\n                    val.observe(handler);\n                    return handler;\n                },\n                (handler, _, {val}) => val.unobserve(handler),\n                {val}\n            );\n        }\n        return valid;\n    }\n\n    private isNormalFunction(fnSrc:string) {\n        return !!fnSrc.match(/^(async\\s+)?function(\\(| |\\*)/)\n    }\n\n\tprivate setAttribute(element: Element, attr:string, val:unknown, root_path?:string|URL): boolean {\n\n        // special suffixes:\n\n        // non-module-relative paths if :route suffix\n        if (attr.endsWith(\":route\")) {\n            attr = attr.replace(\":route\", \"\");\n            root_path = undefined;\n        }\n\n        // strip :in suffix\n        if (attr.endsWith(\":in\")) {\n            attr = attr.replace(\":in\", \"\");\n        }\n\n\n        // special attributes--------------\n\n        // update checkbox checked property (bug?)\n        if (element instanceof HTMLInputElement && attr == \"checked\") {\n            element.checked = val as boolean;\n        }\n\n        // update muted property\n        else if (element instanceof HTMLMediaElement && attr == \"muted\") {\n            element.muted = val as boolean;\n        }\n\n        // --------------------------------\n\n        // display context event handler function\n        if (attr.endsWith(\":frontend\")) {\n            if (typeof val !== \"function\") throw new Error(`Invalid value for attribute \"${attr}\" - must be a function`)\n            if (client_type == \"browser\" || val instanceof JSTransferableFunction) {\n                // don't change, already a JSTransferableFunction or in frontend context\n            }\n            else if (JSTransferableFunction.functionIsAsync(val as (...args: unknown[]) => unknown)) {\n                // async! (always returns true, doesn't await promise)\n                JSTransferableFunction\n                    .createAsync(val as (...args: unknown[]) => Promise<unknown>)\n                    .then(fn => {\n                        this.setAttribute(element, attr, fn, root_path)\n                        // auto-inject 'this' context\n                        if (this.isNormalFunction(fn.source)) fn.deps['this'] = element\n                    })\n                return true;\n            }\n            else {\n                val = JSTransferableFunction.create(val as (...args: unknown[]) => unknown);\n                \n                // auto-inject 'this' context\n                if (this.isNormalFunction((val as JSTransferableFunction).source)) (val as JSTransferableFunction).deps['this'] = element\n            }\n            attr = attr.replace(\":frontend\", \"\");\n\n        }\n\n        // invalid :out attributes here\n        if (attr.endsWith(\":out\") || attr.endsWith(\":selected\")) throw new Error(\"Invalid value for \"+attr+\" attribute - must be a pointer\");\n\n        // value attribute\n        else if (attr == \"value\") {\n            // handle select options\n            if (element.tagName.toLowerCase() === \"select\") {\n                for (const option of element.childNodes) {\n                    if (option instanceof this.context.HTMLOptionElement) {\n                        if (option.value == val) {\n                            option.setAttribute(\"selected\",\"\");\n                            break;\n                        }\n                    }\n                }\n            }\n            // set value property\n            else {\n                // if date input and value < 0, ignore\n                if (element instanceof HTMLInputElement && (element as HTMLInputElement).type == \"datetime-local\" && !(new Date(val as any).getTime() > 0)) return;\n                const newValue = this.formatAttributeValue(val, attr, root_path, element);\n                if ((element as HTMLInputElement).value !== newValue) (element as HTMLInputElement).value = newValue;\n            }\n\n            // handle DOMUtils.ATTR_SELECTED_BINDING\n            if ((<DOMUtils.elWithUIXAttributes>element)[DOMUtils.ATTR_SELECTED_BINDING]) {\n                if ((<DOMUtils.elWithUIXAttributes>element)[DOMUtils.ATTR_SELECTED_BINDING].val == val) {\n                    (element as HTMLInputElement).checked = true;\n                }\n            }\n        }\n\n        // set datex-update\n        else if (attr == \"datex-update\") {\n            (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.DATEX_UPDATE_TYPE] = val as string;\n        }\n\n        // set stylesheet\n        else if (attr == \"stylesheet\") {\n            element.append(this.createHTMLElement(`<link rel=\"stylesheet\" href=\"${this.formatAttributeValue(val, attr, root_path, element)}?scope\"/>`))\n        }\n\n        // update checkbox checked property (bug?)\n        else if (element instanceof this.context.HTMLDialogElement && attr == \"open\") {\n\n            const theVal = val;\n\n            weakAction({element}, \n                ({element}) => {\n                    use(\"allow-globals\", theVal, logger, Datex, isolatedScope);\n                    const handler = isolatedScope((val:any) => {\n                        use(\"allow-globals\", logger, element);\n                        const deref = element.deref();\n                        if (!deref) {\n                            logger.warn(\"Undetected garbage collection (uix-w0001)\");\n                            return;\n                        }\n                        if (val) deref.showModal();\n                        else deref.close()\n                    });\n                    Datex.ReactiveValue.observeAndInit(theVal, handler);\n                    return handler;\n                }, \n                (handler) => use(\"allow-globals\", Datex, theVal) && Datex.ReactiveValue.unobserve(theVal, handler)\n            );\n            \n        }\n\n        // display shorthand for style.display\n        else if (attr == \"display\") {\n            this.setCSSProperty(element as HTMLElement, \"display\", val as boolean);\n        }\n\n        // class mapping\n        else if (attr == \"class\" && typeof val == \"object\") {\n\n            const update = (key:string, val:Datex.RefOrValue<boolean>) => {\n                if (Datex.ReactiveValue.collapseValue(val, true, true)) element.classList.add(key);\n                else element.classList.remove(key);\n            }\n            const updateAll = (obj: Record<string, Datex.RefOrValue<boolean>>) => {\n                for (const [key, val] of Object.entries(obj)) update(key, val);\n            }\n\n            // handle array updates\n            let previousArray = [] as Array<string>;\n            const updateArray = (arr: Array<string>) => {\n                if (previousArray) {\n                    for (const key of previousArray) {\n                        if (!arr.includes(key)) {\n                            element.classList.remove(key);\n                        }\n                    }\n                }\n                element.classList.add(...arr);\n                previousArray = [...arr];\n            }\n            \n            if (Datex.ReactiveValue.isRef(val)) {\n                Datex.ReactiveValue.observeAndInit(val, (v, k, t) => {\n                    // update class list from array\n                    if (val instanceof Array) updateArray(val);\n                    // update class list from object\n                    else {\n                        if (t == Datex.Pointer.UPDATE_TYPE.INIT) updateAll(v);\n                        else if (typeof k == \"string\") update(k, v);\n                    }  \n                })\n            }\n            // simple object with pointers as properties\n            else {\n                if (val instanceof Array) updateArray(val);\n                else {\n                    updateAll(val);\n                    for (const [key, value] of Object.entries(val)) {\n                        if (value instanceof Datex.ReactiveValue) value.observe(v => update(key, v));\n                    }\n                }\n            }\n            \n        }\n    \n\n        // special attribute values\n        else if (val === false) element.removeAttribute(attr);\n        else if (val === true || val === undefined) element.setAttribute(attr,\"\");\n\n        // video src => srcObject\n        else if (element instanceof this.context.HTMLVideoElement && attr === \"src\" && globalThis.MediaStream && val instanceof MediaStream) {\n            element.srcObject = val;\n        }\n\n        // src path with import map specifier\n        // TODO: currently only enabled for specific folder names to keep backwards compatibility, this should be enabled for all paths\n        else if (attr === \"src\" && typeof val == \"string\" && (val.startsWith(\"common/\") || val.startsWith(\"frontend/\"))) {\n            element.setAttribute(attr, `/@uix/src/${val}`);\n        }\n\n        // event listener\n        else if (attr.startsWith(\"on\")) {\n            for (const handler of ((val instanceof Array || val instanceof Set) ? val : [val])) {\n                if (typeof handler == \"function\") {\n                    const eventName = <keyof HTMLElementEventMap & string>attr.replace(\"on\",\"\").toLowerCase();\n                    element.addEventListener(eventName, handler as any);\n                    // save in [DOMUtils.EVENT_LISTENERS]\n                    if (!(<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS]) (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS] = new Map<keyof HTMLElementEventMap, [Set<Function>, boolean]>();\n                    // clear previous standalone listeners for this event\n                    for (const [listener, isStandalone] of (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].get(eventName) ?? []) {\n                        if (isStandalone) element.removeEventListener(eventName, listener as any);\n                    }\n                    if (!(<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].has(eventName)) (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].set(eventName, new Set());\n                    (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].get(eventName)!.add([handler, false]);\n                }\n                else if (typeof handler == \"string\") element.setAttribute(attr, handler);\n                else {\n                    console.log(attr,handler)\n                    throw new Error(\"Cannot set event listener for element attribute '\"+attr+\"'\")\n                }\n            }\n            \n        }\n        // special form 'action' callback\n        else if (element instanceof this.context.HTMLFormElement && attr === \"action\") {\n            for (const handler of ((val instanceof Array || val instanceof Set) ? val : [val])) {\n                // action callback function\n                if (typeof handler == \"function\") {\n                    const eventName = \"submit\";\n\n                    // backend function\n                    let ptr = Datex.Pointer.getByValue(handler);\n\n                    if (!ptr) {\n                        if (client_type == \"deno\") {\n                            ptr = Datex.Pointer.createOrGet(handler);\n                            ptr.is_persistent = true;\n                            // TODO: garbage collection for ptr when form element is garbage collected\n                        }\n                        else {\n                            console.warn(\"Frontend functions for form action are not supported yet\")\n                        }\n                    }\n\n                    if (client_type == \"browser\" && ptr?.is_origin) {\n                        console.warn(\"Frontend functions for form action are not supported yet\")\n                    }\n                    else {\n                        element.setAttribute(\"action\", `/@uix/form-action/${ptr.idString()}`);\n                    }\n\n                    // save in [DOMUtils.EVENT_LISTENERS]\n                    if (!(<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS]) (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS] = new Map<keyof HTMLElementEventMap, [Set<Function>, boolean]>();\n                    if (!(<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].has(eventName)) (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].set(eventName, new Set());\n                    (<DOMUtils.elWithUIXAttributes>element)[DOMUtils.EVENT_LISTENERS].get(eventName)!.add([handler, false]);\n                }\n                // default \"action\" (path)\n                else element.setAttribute(attr, this.formatAttributeValue(val, attr, root_path, element));\n            }\n            \n        }\n    \n        // normal attribute\n        else {\n            if (val === false) {\n                if (element.hasAttribute(attr)) element.removeAttribute(attr);\n            }\n            else if (val === true) {\n                if (!element.hasAttribute(attr)) element.setAttribute(attr, \"\");\n            }\n            else {\n                const newValue = this.formatAttributeValue(val, attr, root_path, element);\n                if (element.getAttribute(attr) !== newValue) element.setAttribute(attr, newValue);\n            }\n        }\n\n    \n        return true;\n        \n    }\n\n    getFormattedWeek(d: Date) {\n        d = new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n        d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));\n        const yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1)).getTime();\n        const weekNo = Math.ceil(( ( (d.getTime() - yearStart) / 86400000) + 1)/7);\n        return `${d.getUTCFullYear()}-W${weekNo.toString().padStart(2,\"0\")}`;\n    }\n\n    getDateFromFormattedWeek(weekString: string) {\n        const [year, week] = weekString.split(\"-W\").map(Number)\n\n        if (week < 1 || week > 53) {\n          throw new RangeError(\"ISO 8601 weeks are numbered from 1 to 53\");\n        } else if (!Number.isInteger(week)) {\n          throw new TypeError(\"Week must be an integer\");\n        } else if (!Number.isInteger(year)) {\n          throw new TypeError(\"Year must be an integer\");\n        }\n        const simple = new Date(year, 0, 1 + (week - 1) * 7);\n        const dayOfWeek = simple.getDay();\n        const isoWeekStart = simple;\n        isoWeekStart.setDate(simple.getDate() - dayOfWeek + 1);\n        if (dayOfWeek > 4) {\n            isoWeekStart.setDate(isoWeekStart.getDate() + 7);\n        }\n        if (isoWeekStart.getFullYear() > year ||\n            (isoWeekStart.getFullYear() == year &&\n             isoWeekStart.getMonth() == 11 &&\n             isoWeekStart.getDate() > 28)) {\n            throw new RangeError(`${year} has no ISO week ${week}`);\n        }\n    \n        return isoWeekStart;\n    }\n    \n    formatAttributeValue(val:any, attr: string, root_path?:string|URL, element?:Element): string {\n        if (root_path==undefined) return val?.toString?.() ?? \"\"\n        else if (attr == \"value\" && element instanceof HTMLInputElement) {\n            if (element.type == \"datetime-local\") {\n                const unixTime = val instanceof Date ? val.getTime() : new Date(val).getTime();\n                const showSeconds = element.step && Number(element.step) < 60;\n                return new Date(unixTime + new Date(unixTime).getTimezoneOffset() * -60 * 1000).toISOString().slice(0,showSeconds ? -5 : -8);\n            }\n            else if (element.type == \"month\") {\n                const date = val instanceof Date ? val : new Date(val);\n                return date.toISOString().slice(0,7)\n            }\n            else if (element.type == \"week\") {\n                try {\n                    let date = val instanceof Date ? val : new Date(val);\n                    // if invalid date, use getDateFromFormattedWeek\n                    if (isNaN(date.getTime())) date = this.getDateFromFormattedWeek(val);\n                    return this.getFormattedWeek(date);\n                }\n                catch {\n                    // return current value of input if invalid\n                    return element.value;\n                }\n            }\n            else if (element.type == \"date\") {\n                const date = val instanceof Date ? val : new Date(val);\n                return date.toISOString().slice(0,10)\n            }\n            else if (element.type == \"time\") {\n                const date = val instanceof Date ? val : new Date(val);\n                // show seconds if step is < 60\n                if (element.step && Number(element.step) < 60) return date.toISOString().slice(11,19)\n                else return date.toISOString().slice(11,16)\n            }\n            else {\n                return val?.toString?.() ?? \"\"\n            }\n        } \n        else if (typeof val == \"string\" && (val.startsWith(\"./\") || val.startsWith(\"../\"))) return new URL(val, root_path).toString();\n        else return val?.toString?.() ?? \"\"\n    }\n\n\n    setCSS<T extends HTMLElement>(element:T, property:string, value?:Datex.CompatValue<string|number>):T\n    setCSS<T extends HTMLElement>(element:T, properties:{[property:string]:Datex.CompatValue<string|number>}):T\n    setCSS<T extends HTMLElement>(element:T, style:Datex.CompatValue<string>):T\n    setCSS<T extends HTMLElement>(element:T, properties_object_or_property:{[property:string]:Datex.CompatValue<string|number>}|Datex.CompatValue<string>, value?:Datex.CompatValue<string|number>):T {\n        let properties:{[property:string]:Datex.RefOrValue<string|number|undefined>};\n        if (typeof properties_object_or_property == \"string\" && value != undefined) properties = {[properties_object_or_property]:value};\n        else if (typeof properties_object_or_property == \"string\" || (properties_object_or_property instanceof Datex.Value && Datex.Type.ofValue(properties_object_or_property) == Datex.Type.std.text)) {\n            this.setElementAttribute(element, \"style\", properties_object_or_property)\n            return element;\n        }\n        else properties = Datex.ReactiveValue.collapseValue(properties_object_or_property,true,true) as {[property:string]:Datex.CompatValue<string|number|undefined>};\n\n        if (properties) {\n            for (const [property, value] of Object.entries(properties)) {\n                this.setCSSProperty(element, property, value);\n            }\n        }\n\n        if (properties_object_or_property instanceof Datex.ReactiveValue && typeof properties_object_or_property == \"object\") {\n            Datex.ReactiveValue.observe(properties_object_or_property, () => {\n                for (const [property, value] of Object.entries(properties_object_or_property.val)) {\n                    this.setCSSProperty(element, property, value);\n                }\n            });\n        }\n\n        return element;\n    }\n\n    /**\n     * When enabled, the binding is not preserved when transferring the element to another context\n     */\n    enableCSSPropertyWeakBinding<T extends HTMLElement>(element:T, property:string, weak = true) {\n        if (!(<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_WEAK_PROPS]) \n            (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_WEAK_PROPS] = new Map<string, boolean>();\n        (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_WEAK_PROPS].set(property, weak)\n    }\n\n    /**\n     * Set css property of an element, updates reactively if pointer\n     * If weakBinding is true, the binding is not preserved when transferring the element to another context\n     */\n    setCSSProperty<T extends HTMLElement>(element:T, property:string, value:Datex.RefOrValue<string|number|undefined|boolean>, weakBinding = false, unit?: string):T{\n        // convert camelCase to kebab-case\n        property = property?.replace(/[A-Z]/g, x => `-${x.toLowerCase()}`);\n        // none\n        if (value == undefined) {\n            if (element.style.removeProperty) element.style.removeProperty(property);\n            // @ts-ignore style property access\n            else delete element.style[property];\n        }\n\n        // // UIX color\n        // else if (value instanceof Datex.PointerProperty && value.pointer.val == Theme.colors) {\n        //     if (element.style.setProperty) element.style.setProperty(property, `var(--${value.key})`); // autmatically updated css variable\n        //     // @ts-ignore style property access\n        //     else element.style[property] = `var(--${value.key})`\n        // }\n        // other Datex CompatValue\n        else {\n\n            // remember style ref binding\n            if (!weakBinding && Datex.ReactiveValue.isRef(value)) {\n                if (!(<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_DX_VALUES]) \n                    (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_DX_VALUES] = new Map<string, Datex.ReactiveValue>();\n                (<DOMUtils.elWithUIXAttributes><unknown>element)[DOMUtils.STYLE_DX_VALUES].set(property, value)\n            }\n            \n            Datex.ReactiveValue.observeAndInit(value, (v,k,t) => {\n                if (property == \"display\" && typeof v == \"boolean\") {\n                    v = v ? (globalThis.CSS?.supports(\"display: revert-layer\") ? \"revert-layer\" : \"revert\") : \"none\";\n                }\n\n                if (v == undefined) {\n                    if (element.style.removeProperty) element.style.removeProperty(property);\n                    // @ts-ignore style property access\n                    else delete element.style[property];\n                }\n                else {\n                    if (!element.style) {\n                        // TODO: handle this case if trying to set global css variable on document (for reactive css)\n                        return;\n                    }\n                    if (element.style.setProperty) element.style.setProperty(property, this.getCSSProperty(<string>v, undefined, unit));\n                    // @ts-ignore style property access\n                    else element.style[property] = this.getCSSProperty(v, undefined, unit);\n                }\n            }, undefined, undefined);\n        }\n        return element;\n    }\n\n    readonly color_names = {\"aliceblue\":\"#f0f8ff\",\"antiquewhite\":\"#faebd7\",\"aqua\":\"#00ffff\",\"aquamarine\":\"#7fffd4\",\"azure\":\"#f0ffff\",\n        \"beige\":\"#f5f5dc\",\"bisque\":\"#ffe4c4\",\"black\":\"#000000\",\"blanchedalmond\":\"#ffebcd\",\"blue\":\"#0000ff\",\"blueviolet\":\"#8a2be2\",\"brown\":\"#a52a2a\",\"burlywood\":\"#deb887\",\n        \"cadetblue\":\"#5f9ea0\",\"chartreuse\":\"#7fff00\",\"chocolate\":\"#d2691e\",\"coral\":\"#ff7f50\",\"cornflowerblue\":\"#6495ed\",\"cornsilk\":\"#fff8dc\",\"crimson\":\"#dc143c\",\"cyan\":\"#00ffff\",\n        \"darkblue\":\"#00008b\",\"darkcyan\":\"#008b8b\",\"darkgoldenrod\":\"#b8860b\",\"darkgray\":\"#a9a9a9\",\"darkgreen\":\"#006400\",\"darkkhaki\":\"#bdb76b\",\"darkmagenta\":\"#8b008b\",\"darkolivegreen\":\"#556b2f\",\n        \"darkorange\":\"#ff8c00\",\"darkorchid\":\"#9932cc\",\"darkred\":\"#8b0000\",\"darksalmon\":\"#e9967a\",\"darkseagreen\":\"#8fbc8f\",\"darkslateblue\":\"#483d8b\",\"darkslategray\":\"#2f4f4f\",\"darkturquoise\":\"#00ced1\",\n        \"darkviolet\":\"#9400d3\",\"deeppink\":\"#ff1493\",\"deepskyblue\":\"#00bfff\",\"dimgray\":\"#696969\",\"dodgerblue\":\"#1e90ff\",\n        \"firebrick\":\"#b22222\",\"floralwhite\":\"#fffaf0\",\"forestgreen\":\"#228b22\",\"fuchsia\":\"#ff00ff\",\n        \"gainsboro\":\"#dcdcdc\",\"ghostwhite\":\"#f8f8ff\",\"gold\":\"#ffd700\",\"goldenrod\":\"#daa520\",\"gray\":\"#808080\",\"green\":\"#008000\",\"greenyellow\":\"#adff2f\",\n        \"honeydew\":\"#f0fff0\",\"hotpink\":\"#ff69b4\",\n        \"indianred \":\"#cd5c5c\",\"indigo\":\"#4b0082\",\"ivory\":\"#fffff0\",\"khaki\":\"#f0e68c\",\n        \"lavender\":\"#e6e6fa\",\"lavenderblush\":\"#fff0f5\",\"lawngreen\":\"#7cfc00\",\"lemonchiffon\":\"#fffacd\",\"lightblue\":\"#add8e6\",\"lightcoral\":\"#f08080\",\"lightcyan\":\"#e0ffff\",\"lightgoldenrodyellow\":\"#fafad2\",\n        \"lightgrey\":\"#d3d3d3\",\"lightgreen\":\"#90ee90\",\"lightpink\":\"#ffb6c1\",\"lightsalmon\":\"#ffa07a\",\"lightseagreen\":\"#20b2aa\",\"lightskyblue\":\"#87cefa\",\"lightslategray\":\"#778899\",\"lightsteelblue\":\"#b0c4de\",\n        \"lightyellow\":\"#ffffe0\",\"lime\":\"#00ff00\",\"limegreen\":\"#32cd32\",\"linen\":\"#faf0e6\",\n        \"magenta\":\"#ff00ff\",\"maroon\":\"#800000\",\"mediumaquamarine\":\"#66cdaa\",\"mediumblue\":\"#0000cd\",\"mediumorchid\":\"#ba55d3\",\"mediumpurple\":\"#9370d8\",\"mediumseagreen\":\"#3cb371\",\"mediumslateblue\":\"#7b68ee\",\n        \"mediumspringgreen\":\"#00fa9a\",\"mediumturquoise\":\"#48d1cc\",\"mediumvioletred\":\"#c71585\",\"midnightblue\":\"#191970\",\"mintcream\":\"#f5fffa\",\"mistyrose\":\"#ffe4e1\",\"moccasin\":\"#ffe4b5\",\n        \"navajowhite\":\"#ffdead\",\"navy\":\"#000080\",\n        \"oldlace\":\"#fdf5e6\",\"olive\":\"#808000\",\"olivedrab\":\"#6b8e23\",\"orange\":\"#ffa500\",\"orangered\":\"#ff4500\",\"orchid\":\"#da70d6\",\n        \"palegoldenrod\":\"#eee8aa\",\"palegreen\":\"#98fb98\",\"paleturquoise\":\"#afeeee\",\"palevioletred\":\"#d87093\",\"papayawhip\":\"#ffefd5\",\"peachpuff\":\"#ffdab9\",\"peru\":\"#cd853f\",\"pink\":\"#ffc0cb\",\"plum\":\"#dda0dd\",\"powderblue\":\"#b0e0e6\",\"purple\":\"#800080\",\n        \"rebeccapurple\":\"#663399\",\"red\":\"#ff0000\",\"rosybrown\":\"#bc8f8f\",\"royalblue\":\"#4169e1\",\n        \"saddlebrown\":\"#8b4513\",\"salmon\":\"#fa8072\",\"sandybrown\":\"#f4a460\",\"seagreen\":\"#2e8b57\",\"seashell\":\"#fff5ee\",\"sienna\":\"#a0522d\",\"silver\":\"#c0c0c0\",\"skyblue\":\"#87ceeb\",\"slateblue\":\"#6a5acd\",\"slategray\":\"#708090\",\"snow\":\"#fffafa\",\"springgreen\":\"#00ff7f\",\"steelblue\":\"#4682b4\",\n        \"tan\":\"#d2b48c\",\"teal\":\"#008080\",\"thistle\":\"#d8bfd8\",\"tomato\":\"#ff6347\",\"turquoise\":\"#40e0d0\",\n        \"violet\":\"#ee82ee\",\n        \"wheat\":\"#f5deb3\",\"white\":\"#ffffff\",\"whitesmoke\":\"#f5f5f5\",\n        \"yellow\":\"#ffff00\",\"yellowgreen\":\"#9acd32\"\n    };\n\n    // convert DatexCompatValue to css property\n    getCSSProperty(value:Datex.RefOrValue<number|string>, use_css_variables = true, unit?: string):string {\n        // UIX color value\n        // if (use_css_variables && value instanceof Datex.PointerProperty && value.pointer.val == Theme.colors) {\n        //     value = `var(--${value.key})`; // autmatically updated css variable\n        // }\n\n        // number value to unit (default px)\n        if (typeof value == \"number\") return value.toString() + (unit||\"px\");\n\n        else if (use_css_variables) return this.escapeCSSValue(value) ?? '';\n        // try to collapse value\n        else if (value!=undefined) {\n            // css variable\n            if (value.toString().startsWith('var(--')) return this.context.getComputedStyle(this.document.documentElement).getPropertyValue(value?.toString().replace('var(','').replace(')','')).trim();\n            // css color name\n            else if (!value.toString().startsWith(\"#\")) return this.color_names[<keyof typeof this.color_names>value.toString().toLowerCase()] ?? ''\n            // normal string value\n            else return this.escapeCSSValue(value);\n        }\n        else return '';\n    }\n\n\n    escapeCSSValue(value: any) {\n        return (value?.toString() as string).replace(/(;[\\S\\s]*)$/, (_, p1) => {\n            return '/*' + p1.replace(/\\*\\//, \"* /\") + '*/';\n        })\n    }\n    \n\n    valuesToDOMElement(...values:any[]): Node|DocumentFragment {\n        \n        if (values.length == 1) {\n            return this.valueToDOMNode(values[0]).node;\n        }\n        else {\n            const fragment = new this.context.DocumentFragment();\n            values\n                .map(v => this.valueToDOMNode(v).node)\n                .forEach(c=>this.append(fragment, c))\n            return fragment;\n        }\n    }\n\n    valueToDOMNode(value: unknown) {\n\n        let loadPromise: Promise<Node>|undefined\n        let newNode: any;\n\n        // is function\n\n        // collapse pointer if function\n        if (value instanceof Datex.ReactiveValue && typeof value.val == \"function\") {\n            value = value.val;\n        }\n\n        if (typeof value == \"function\") {\n            if (client_type == \"deno\") {\n                newNode = document.createElement(\"uix-placeholder\");\n                this.addProxy(newNode);\n                if ((value as any)[DOMUtils.PLACEHOLDER_CONTENT]) {\n                    this.append(newNode, (value as any)[DOMUtils.PLACEHOLDER_CONTENT]);\n                }\n                newNode![DX_REPLACE] = value;\n            }\n            else {\n                if (value instanceof JSTransferableFunction) {\n                    // waits until lazy dependencies are loaded\n                    value = value.callLazy()\n                }\n                else {\n                    value = value()\n                }\n            }\n        }\n\n        // wait for lazyPointer or lazy pointer property (convert to promise)\n        if (\n            value instanceof LazyPointer ||\n            (value instanceof Datex.PointerProperty && value.lazy_pointer)\n        ) {\n            const lazyPtr = value;\n            value = new Promise(resolve => lazyPtr.onLoad(v => resolve(v)));\n        }\n\n\n        // wait for promise\n        if (value instanceof Promise) {\n            loadPromise = value.then(v=>{\n                const node = this.valuesToDOMElement(v);\n                placeholder.replaceWith(node)\n                return node;\n            });\n\n            const placeholder = this.document.createElement(\"uix-placeholder\")\n            this.addProxy(placeholder);\n            newNode = placeholder;\n        }\n        else if (newNode == undefined) {\n            newNode = value;\n        }\n\n        // // is uix-fragment: no additional reactive wrapper needed, just return the fragment\n        // if (newNode instanceof Datex.ReactiveValue && newNode.val instanceof HTMLElement && newNode.val.tagName.toLowerCase() == \"uix-fragment\") {\n        //     newNode = newNode.val;\n        // }\n\n        // unsupported value - create text/content node\n        if (!(newNode instanceof this.context.Node || newNode instanceof this.context.DocumentFragment || newNode instanceof this.context.Comment)) {\n            newNode = this.getNode(newNode);\n        }\n\n        return {\n            node: newNode,\n            loadPromise\n        }\n    }\n\n    getNode(content:any) {\n        const contentVal = val(content);\n        // either use existing node or create new text node\n        const node = contentVal instanceof Node ? contentVal : this.document.createTextNode(\"\") as unknown as Text;\n        (node as any)[DX_VALUE] = content;\n\n        // lazy pointer or lazy pointer property\n        if (\n            content instanceof LazyPointer || \n            (content instanceof PointerProperty && content.lazy_pointer)\n        ) {\n            content.onLoad(() => {\n                this.bindNode(node, content)\n            })\n        }\n        // ref\n        else if (content instanceof Datex.ReactiveValue) {\n            this.bindNode(node, content)\n        }     \n       \n        else {\n            node.textContent = (content!=undefined && content!==false) ? (<any>content).toString() : ''\n        }\n\n        return node;\n    }\n\n    bindNode(node: Node, ref:Datex.RefLike<unknown>) {\n\n        weakAction({node}, \n            ({node}) => {\n                use(\"allow-globals\", logger, Datex, isolatedScope, ref);\n\n                let prevNode:{node?:WeakRef<Node>} = {node};\n\n                // TODO: dont reference 'ref' in handler, use args from handler\n                const handler = isolatedScope((...args:any[]) => {\n                    use(\"allow-globals\", logger, ref, prevNode);\n\n                    let prevNodeDeref = prevNode.node?.deref();\n                    if (!prevNodeDeref) return;\n\n                    try {\n                        let val = ref.val;\n\n                        // replace previous node if it is a node, otherwise update text content\n                        if (val instanceof Node) {\n                            if (val instanceof DocumentFragment) {\n                                const childNodes = val.childNodes;\n                                val = document.createElement(\"uix-fragment\");\n                                val.append(...childNodes);\n                            }\n                            prevNode.node = new WeakRef(val);\n                            prevNodeDeref.replaceWith(val);\n                        }\n                        else {\n                            if (!(prevNodeDeref instanceof Text)) {\n                                const node = document.createTextNode(\"\");\n                                prevNode.node = new WeakRef(node);\n                                prevNodeDeref.replaceWith(node);\n                                prevNodeDeref = node;\n                            }\n                            prevNodeDeref.textContent = (val!=undefined && val!==false) ? (<any>val).toString() : ''\n                        }\n                        \n                    }\n                    catch (e) {\n                        console.log(\"Error binding node\", ref, ref.val, prevNodeDeref)\n                        console.error(e)\n                    }  \n                });\n\n                // TODO: potential memory leak\n                if (ref instanceof Datex.Pointer) ref.is_persistent = true;\n\n                Datex.ReactiveValue.observeAndInit(ref, handler);\n                return handler;\n            }, \n            (handler, _, deps) => {\n                use(\"allow-globals\", Datex, ref);\n                ref.is_persistent = false;\n                Datex.ReactiveValue.unobserve(ref, handler)\n            }\n        );   \n    }\n\n    replaceWith(node: Element, newContent: any, lazy = false) {\n\n        const {node: newNode, loadPromise} = this.valueToDOMNode(newContent)\n\n        // only replace when loaded\n        if (lazy && loadPromise) {\n            return loadPromise.then(v => {\n                node.replaceWith(v)\n            })\n        }\n        // replace immediately\n        else node.replaceWith(newNode);\n    }\n\n    /**\n     * \n     * @param anchor \n     * @param element \n     * @param appendAll if false, only shadowRoot is set, other elements are ignored\n     * @returns true if element appended\n     */\n    appendElementOrShadowRoot(anchor: Element|DocumentFragment, element: Element|DocumentFragment|Text, appendAll = true, insertAfterAnchor = false, onAppend?: ((list: (Node)[]) => void)) {\n        const appendedContent: Node[] = [];\n\n        for (const candidate of (element instanceof this.context.DocumentFragment ? [...(element.childNodes as any)] : [element]) as unknown as Node[]) {\n            if (anchor instanceof this.context.HTMLElement && candidate instanceof this.context.HTMLTemplateElement && candidate.hasAttribute(\"shadowrootmode\")) {\n                if (anchor.shadowRoot) throw new Error(\"element <\"+anchor.tagName.toLowerCase()+\"> already has a shadow root\")\n                const shadowRoot = anchor.attachShadow({mode: (candidate.getAttribute(\"shadowrootmode\")??\"open\") as \"open\"|\"closed\"});\n                shadowRoot.append((candidate as HTMLTemplateElement).content);\n                appendedContent.push(shadowRoot);\n                if (!appendAll) {\n                    onAppend?.(appendedContent);\n                    return true;\n                }\n            }\n            else if (appendAll) {\n                if (insertAfterAnchor)\n                    anchor.parentElement?.insertBefore(candidate, anchor.nextSibling); // anchor is sibbling (e.g. old elem)\n                else anchor.append(candidate); // anchor is parent\n                appendedContent.push(candidate)\n            }\n        }\n        onAppend?.(appendedContent);\n        return appendAll;\n    }\n\n    // jquery-like event listener (multiple events at once)\n    addEventListener<E extends HTMLElement>(target:E, events:string, listener: (this: HTMLElement, ev: Event) => any, options?: boolean | AddEventListenerOptions){\n        for (const event of events.split(\" \")){\n            target.addEventListener(event.trim(), listener, options);\n        }\n    }\n\n    removeEventListener<E extends HTMLElement>(target:E, events:string, listener: (this: HTMLElement, ev: Event) => any, options?: boolean | AddEventListenerOptions){\n        for (const event of events.split(\" \")){\n            target.removeEventListener(event.trim(), listener, options);\n        }\n    }\n\n    // jquery-like event listener (multiple events at once + delegate with query selector)\n    addDelegatedEventListener<E extends Element>(target:E, events:string, selector:string,  listener: (this: Element, ev: Event) => any, options?: boolean | AddEventListenerOptions){\n        for (const event of events.split(\" \")){\n            target.addEventListener(event.trim(), (event) => {\n                if (event.target && event.target instanceof this.context.Element && event.target.closest(selector)) {\n                    listener.call(event.target, event)\n                }\n            }, options);\n        }\n    }\n\n    addProxy(element:Element) {\n        return $(element)\n    }\n}\n"],"names":["Datex","defaultElementAttributes","elementEventHandlerAttributes","htmlElementAttributes","mathMLTags","svgElementAttributesLowercase","svgTags","IterableHandler","DX_VALUE","DX_REPLACE","PointerProperty","JSTransferableFunction","client_type","weakAction","LazyPointer","isolatedScope","Time","JSX_INSERT_STRING","Symbol","logger","Logger","DOMUtils","EVENT_LISTENERS","for","ATTR_BINDINGS","ATTR_DX_VALUES","STYLE_DX_VALUES","STYLE_WEAK_PROPS","CHILDREN_DX_VALUES","ATTR_SELECTED_BINDING","DATEX_UPDATE_TYPE","PLACEHOLDER_CONTENT","svgNS","mathMLNS","constructor","context","defaultInputValidation","message","enabled","element_bound_html_values","WeakMap","element_bound_text_values","updateElementHTML","html","Element","innerHTML","append","updateElementText","text","ReactiveValue","console","warn","Markdown","getHTML","children","_use_markdown","innerText","toString","color_names","document","escapeHtml","str","replace","replaceAll","createHTMLElement","content","undefined","template","createElement","trim","element","firstChild","collapseValue","HTMLElement","setElementHTML","Array","el","container","setElementText","get","unobserve","call","val","observe","set","markdown","tagName","has","createElementNS","parent","DocumentFragment","_uix_children","collapsedChildren","isRef","Map","Set","_append","isArray","ref","Pointer","getByValue","add","startAnchor","Comment","idString","endAnchor","iterableHandler","map","v","k","node","valueToDOMNode","onEntryRemoved","childNodes","remove","onNewEntry","p","current","replaceChild","length","i","insertBefore","onEmpty","nextSibling","removing","removeChild","DISPOSABLES","HTMLTemplateElement","toLowerCase","reactiveProps","find","e","setLiveAttribute","child","appendElementOrShadowRoot","setElementAttribute","attr","value","rootPath","startsWith","includes","HTMLInputElement","getAttribute","type","Error","Promise","then","pointerifyValue","lazy_pointer","onLoad","setAttribute","handleSetVal","number","isNaN","Number","setCustomValidity","reportValidity","bigint","match","Boolean","BigInt","setVal","isInputElement","isSelectElement","isTextareaElement","isDateInput","Type","ofValue","Conjunction","t","event","matchesType","std","addEventListener","inputElement","decimal","valueAsDate","Date","integer","boolean","void","null","time","observer","MutationObserver","attributes","attributeFilter","checked","valid","use","handler","deref","_","currentVal","args","isNormalFunction","fnSrc","root_path","endsWith","HTMLMediaElement","muted","functionIsAsync","createAsync","fn","source","deps","create","option","HTMLOptionElement","getTime","newValue","formatAttributeValue","HTMLDialogElement","theVal","showModal","close","observeAndInit","setCSSProperty","update","key","classList","updateAll","obj","Object","entries","previousArray","updateArray","arr","UPDATE_TYPE","INIT","removeAttribute","HTMLVideoElement","globalThis","MediaStream","srcObject","eventName","listener","isStandalone","removeEventListener","log","HTMLFormElement","ptr","createOrGet","is_persistent","is_origin","hasAttribute","getFormattedWeek","d","UTC","getFullYear","getMonth","getDate","setUTCDate","getUTCDate","getUTCDay","yearStart","getUTCFullYear","weekNo","Math","ceil","padStart","getDateFromFormattedWeek","weekString","year","week","split","RangeError","isInteger","TypeError","simple","dayOfWeek","getDay","isoWeekStart","setDate","unixTime","showSeconds","step","getTimezoneOffset","toISOString","slice","date","URL","setCSS","properties_object_or_property","properties","Value","property","enableCSSPropertyWeakBinding","weak","weakBinding","unit","x","style","removeProperty","CSS","supports","setProperty","getCSSProperty","use_css_variables","escapeCSSValue","getComputedStyle","documentElement","getPropertyValue","p1","valuesToDOMElement","values","fragment","forEach","c","loadPromise","newNode","addProxy","callLazy","lazyPtr","resolve","placeholder","replaceWith","Node","getNode","contentVal","createTextNode","bindNode","textContent","prevNode","prevNodeDeref","WeakRef","Text","error","newContent","lazy","anchor","appendAll","insertAfterAnchor","onAppend","appendedContent","candidate","shadowRoot","attachShadow","mode","push","parentElement","target","events","options","addDelegatedEventListener","selector","closest","$"],"mappings":"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","sourceRoot":"/lib/uix-0.4.23/src/uix-dom/datex-bindings/","file":"dom-utils.ts"}