{"version":3,"sources":["bound_content_properties.ts"],"sourcesContent":["// @ts-ignore sfgafari workaround\nexport const COMPONENT_CONTEXT: unique symbol = globalThis.uix_COMPONENT_CONTEXT ??= Symbol(\"COMPONENT_CONTEXT\");\n// @ts-ignore sfgafari workaround\nexport const STANDALONE: unique symbol = globalThis.uix_STANDALONE ??= Symbol(\"STANDALONE\");\n\n// @ts-ignore TODO: reenable\nconst PROPS_MAP = globalThis.uix_PROPS_MAP ??= Symbol(\"PROPS_MAP\");\n\n\nfunction getElementWithId(parent:Element|ShadowRoot, id:string) {\n\treturn parent.querySelector(\"#\"+id) ?? \n\t\tparent.querySelector(`[data-placeholder-id=\"${id}\"]`) ??\n\t\t(parent as Element).shadowRoot?.querySelector(\"#\"+id) ?? \n\t\t(parent as Element).shadowRoot?.querySelector(`[data-placeholder-id=\"${id}\"]`);\n}\n\n/**\n * \n * @param element \n * @param id_props \n * @param content_props \n * @param layout_props \n * @param child_props \n * @param allow_existing \n * @param load_from_props \n */\nexport function bindContentProperties(element: HTMLElement & {[key:string|symbol]:any}, id_props?:Record<string,string>, content_props?:Record<string,string>, layout_props?:Record<string,string>, child_props?:Record<string,string>, allow_existing = false, load_from_props = true){\n\t\n\t// @UIX.id props\n\tif (!element[PROPS_MAP]) element[PROPS_MAP] = new Map<string,any>();\n\tconst props_map = element[PROPS_MAP];\n\n\tif (id_props) {\n\t\tfor (const [prop,id] of Object.entries(id_props)) {\n\t\t\tif (content_props?.[prop] || layout_props?.[prop] || child_props?.[prop]) continue; // is content, ignore\n\n\t\t\tconst prev = element[prop];\n\t\t\tObject.defineProperty(element, prop, {\n\t\t\t\tget() {\n\t\t\t\t\treturn props_map.get(prop) ?? getElementWithId(element, id);\n\t\t\t\t},\n\t\t\t\tset(el) {\n\t\t\t\t\tif (el instanceof Element) el.setAttribute(\"id\", id); // auto set id\n\t\t\t\t\tif (el) props_map.set(prop, el)\n\t\t\t\t},\n\t\t\t\tconfigurable: true,\n\t\t\t})\n\t\t\t// console.log(Object.getOwnPropertyDescriptor(element, prop), id, prop)\n\n\t\t\tif (prev != undefined) element[prop] = prev; // trigger setter\n\t\t}\n\t}\n\n\t// @UIX.content props\n\tif (content_props) {\n\t\tconst container = ()=>element.shadowRoot?.querySelector(\"#content\")??element\n\t\tfor (const [prop,id] of Object.entries(content_props)) {\n\t\t\tif (!allow_existing && element[prop] instanceof Element && element.shadowRoot?.contains(element[prop])) throw new Error(\"property '\" + prop +\"' cannot be used as an @content property - already part of the component\")\n\t\t\tbindContent(element, container, prop, id, load_from_props)\n\t\t}\n\t}\n\n\t// @UIX.layout props\n\tif (layout_props) {\n\t\tconst container = ()=>element.shadowRoot?.querySelector(\"#content_container\")??element.shadowRoot??element\n\t\tfor (const [prop,id] of Object.entries(layout_props)) bindContent(element, container, prop, id, load_from_props)\n\t}\n\n\t// @UIX.child props\n\tif (child_props) {\n\t\tconst container = ()=>element;\n\t\tfor (const [prop,id] of Object.entries(child_props)) bindContent(element, container, prop, id, load_from_props)\n\t}\n\n}\n\n\nfunction bindContent(element:HTMLElement & {[key:string|symbol]:any}, container:()=>Element|ShadowRoot|null|undefined, prop:string, id:string, load_from_prop = true) {\n\t\n\n\tif (!element[PROPS_MAP]) element[PROPS_MAP] = new Map<string,any>();\n\tconst props_map = element[PROPS_MAP]!;\n\n\tconst prev = element[prop];\n\n\tconst property_descriptor = Object.getOwnPropertyDescriptor(element, prop) \n\t\t\t\t\t\n\tObject.defineProperty(element, prop, {\n\t\tconfigurable: true,\n\t\tget: () => {\n\t\t\tif (property_descriptor?.get) return property_descriptor.get.call(element);\n\t\t\treturn props_map.get(prop)\n\t\t},\n\t\tset: (el) => {\n\t\t\t// use placeholder if not set\n\t\t\tlet isPlaceholder = false;\n\t\t\tif (!el) {\n\t\t\t\tel = document.createElement(\"div\");\n\t\t\t\tisPlaceholder = true;\n\t\t\t}\n\t\t\t// encapsulate in HTMLElement\n\t\t\tif (!(el instanceof Element)) {\n\t\t\t\tconst inner = el;\n\t\t\t\tel = document.createElement(\"span\");\n\t\t\t\tel.append(inner);\n\t\t\t}\n\n\t\t\t// set outer element as [COMPONENT_CONTEXT]\n\t\t\tel[COMPONENT_CONTEXT] = element;\n\t\t\t// set [STANDALONE]\n\t\t\tif (element.isStandaloneProperty?.(prop)) el[STANDALONE]  = true;\n\n\t\t\t// add to content if it exists\n\t\t\tconst content = container();\n\t\t\tif (content) {\n\t\t\t\tconst previous = getElementWithId(content, id);\n\t\t\t\tif (previous == el) {/* ignore */}\n\t\t\t\telse if (previous) content.replaceChild(el, previous);\n\t\t\t\telse {\n\t\t\t\t\tconst contentSlot = (content instanceof ShadowRoot || content.id==\"content_container\") && content.querySelector(\"#content\");\n\t\t\t\t\t// insert before #content slot in #content_container\n\t\t\t\t\tif (contentSlot) content.insertBefore(el, contentSlot);\n\t\t\t\t\telse content.append(el);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!isPlaceholder) {\n\t\t\t\tel.setAttribute(\"id\", id); // auto set id\n\t\t\t\tif (property_descriptor?.set) property_descriptor.set.call(element, el);\n\t\t\t\tprops_map.set(prop, el)\n\t\t\t}\n\t\t\telse el.setAttribute(\"data-placeholder-id\", id);\n\t\t}\n\t})\n\n\tif (load_from_prop) element[prop] = prev; // trigger setter\n}"],"names":["COMPONENT_CONTEXT","globalThis","uix_COMPONENT_CONTEXT","Symbol","STANDALONE","uix_STANDALONE","PROPS_MAP","uix_PROPS_MAP","getElementWithId","parent","id","querySelector","shadowRoot","bindContentProperties","element","id_props","content_props","layout_props","child_props","allow_existing","load_from_props","Map","props_map","prop","Object","entries","prev","defineProperty","get","set","el","Element","setAttribute","configurable","undefined","container","contains","Error","bindContent","load_from_prop","property_descriptor","getOwnPropertyDescriptor","call","isPlaceholder","document","createElement","inner","append","isStandaloneProperty","content","previous","replaceChild","contentSlot","ShadowRoot","insertBefore"],"mappings":"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","sourceRoot":"/lib/uix-0.4.39/src/standalone/","file":"bound_content_properties.ts"}