{ "version": 3, "sources": ["../../lib/common.ts", "../../lib/noderange.ts", "../../lib/morph.ts", "../../lib/render.ts", "../../lib/psatina.ts"], "sourcesContent": ["export const { TEXT_NODE, COMMENT_NODE, ELEMENT_NODE, DOCUMENT_FRAGMENT_NODE } = Node\n\nexport type VComment = { nodeType: typeof COMMENT_NODE, nodeValue: string | null }\nexport type VText = { nodeType: typeof TEXT_NODE, nodeValue: string | null }\nexport type VElement = {\n nodeType: typeof ELEMENT_NODE,\n tagName: string,\n attributes: Record,\n properties: Record,\n eventListeners?: EventListener,\n childNodes: VNode[],\n inits: ((el: Element) => void)[]\n}\n\nexport type VNode = VText | VComment | VElement\n\nexport const withFunc = (body: string, ...args: string[]) =>\n new Function(...args, `with(this)return(${body})`)\n\nexport const ieval = (expr: string, data: unknown) =>\n withFunc(expr).call(data)\n\nexport const flatMap = (xs: Iterable, f: (x: X, i: number) => Iterable) => {\n let rv = [], i = 0\n for (let x of xs) for (let o of f(x, i++)) rv.push(o)\n return rv\n}\n", "export type NodeRange = { root: Document | ShadowRoot, parent: ParentNode, start: Node | null, end: Node | null }\n\nexport const getRoot = (node: Node) => {\n let result = node.getRootNode()\n if (result instanceof Element) return document\n return result as Document | ShadowRoot\n}\n\nexport const children = (parent: ParentNode): NodeRange => ({ parent, start: null, end: null, root: getRoot(parent) })\n\nexport const after = (start: Node): NodeRange => ({ parent: start.parentNode!, start, end: start.nextSibling, root: getRoot(start.parentNode!) })\n\nexport const first = ({ start, parent }: NodeRange) => start ? start.nextSibling : parent.firstChild\n\nexport const next = (_: NodeRange, current: Node | null) => current?.nextSibling ?? null\n\nexport const done = ({ end }: NodeRange, current: Node | null) => current === end || !current\n\nconst tryMoveBefore = (parent: ParentNode, newChild: Node, refChild: Node | null) => {\n // @ts-ignore new API\n try { parent.moveBefore(newChild, refChild) }\n catch (e) { parent.insertBefore(newChild, refChild) }\n}\n\nexport const insertBehind = ({ parent, end }: NodeRange, current: Node | null, newChild: Node) => {\n if (current === newChild) return newChild\n if (current === null) tryMoveBefore(parent, newChild, end)\n else tryMoveBefore(parent, newChild, current)\n return newChild\n}\n", "import { COMMENT_NODE, ELEMENT_NODE, TEXT_NODE, VElement, VNode } from \"./common.ts\"\nimport { children, done, first, insertBehind, next, NodeRange } from \"./noderange.ts\"\n\n/* terminology: we mutate the _destination tree_ (`dst`)\n * to become like the _source tree_ (`src`)\n * preconditions: both trees must have elements as roots.\n * the destination tree must be connected to the document\n * or a shadow root.\n * both trees should have unique ids, both within themselves\n * and within the rest of the document/shadow root.\n * (the same id can occur within both trees, though.)\n * warning: this will remove the source node from the document\n * and mutate it in unspecified ways\n */\n\nexport const morph = (dst: NodeRange, src: VNode[]) => {\n let focused = document.activeElement\n\n let stash = Object.assign(\n document.createElement('div'),\n { hidden: true, className: 'murph-stash' }\n )\n // @ts-expect-error hacky way to avoid instanceof check\n ~(dst.root.body ?? dst.root).append(stash)\n\n morphNodes(stash, dst, src)\n\n // @ts-expect-error it was focused, so presumably it's focusable\n focused?.focus?.()\n stash.remove()\n}\n\nconst morphNode = (stash: Element, dst: Node, src: VNode): Node => {\n if (dst.nodeType !== src.nodeType) {\n const real = realize(stash, src)\n dst.parentNode!.replaceChild(real, dst)\n return real\n } else if (src.nodeType === 1) {\n return morphElement(stash, dst as Element, src)\n } else if (src.nodeType === 3 || src.nodeType === 8) {\n if (dst.nodeValue !== src.nodeValue) dst.nodeValue = src.nodeValue\n return dst\n }\n throw \"unreachable\"\n}\n\nconst morphElement = (stash: Element, dst: Element, src: VElement) => {\n morphNodes(stash, children(dst), src.childNodes)\n if (dst.tagName === src.tagName && dst.id === (src.attributes.id ?? \"\")) {\n morphAttributesAndProperties(dst, src)\n return dst\n } else {\n let real = realize(stash, src) as Element\n real.replaceChildren(...dst.children)\n dst.replaceWith(real)\n return real\n }\n}\n\nconst morphAttributesAndProperties = (dst: Element, src: VElement) => {\n for (const [name, value] of Object.entries(src.attributes))\n if (dst.getAttribute(name) !== value) dst.setAttribute(name, value)\n for (const { name } of [...dst.attributes])\n if (!(name in src.attributes)) dst.removeAttribute(name)\n for (const prop in src.properties) {\n // event handler properties for custom events\n if (prop.startsWith('on') && !(prop in dst))\n // @ts-expect-error\n dst.addEventListener(prop.slice(2), (e: Event) => dst[prop]?.(e))\n // @ts-expect-error\n if (dst[prop] !== src.properties[prop]) dst[prop] = src.properties[prop]\n }\n}\n\nconst morphNodes = (stash: Element, dst: NodeRange, src: VNode[]) => {\n let d = first(dst)\n for (let s of src) {\n let match: Node | null = null\n let id = (s as VElement).attributes?.id\n if (id) match = dst.root.getElementById(id)\n // [TODO] Possible to avoid making \"find best dst node\" O(n)?\n // This makes the overall match operation O(n^2).\n // Nanomorph seems not to worry about it.\n else for (let m = d; !done(dst, m) && !match; m = next(dst, m))\n if (decentMatch(m!, s)) match = m\n if (match) d = next(dst, morphNode(stash, insertBehind(dst, d, match), s))\n else d = next(dst, insertBehind(dst, d, realize(stash, s)))\n }\n while (!done(dst, d)) { let v = d!; d = next(dst, d); stash.append(v) }\n}\n\nconst decentMatch = (a: Node, b: VNode) =>\n a.nodeType === b.nodeType && (\n b.nodeType !== 1 || (\n (a as Element).tagName === b.tagName &&\n (a as Element).id === \"\"\n )\n )\n\nconst realize = (stash: Element, src: VNode): Node => {\n if (src.nodeType === ELEMENT_NODE) {\n const el = document.createElement(src.tagName)\n morphAttributesAndProperties(el, src)\n morphNodes(stash, children(el), src.childNodes)\n src.inits.forEach(init => init(el))\n return el\n }\n if (src.nodeType === TEXT_NODE) return document.createTextNode(src.nodeValue!)\n if (src.nodeType === COMMENT_NODE) return document.createComment(src.nodeValue!)\n throw \"unreachable\"\n}\n", "/// \n\nimport { COMMENT_NODE, DOCUMENT_FRAGMENT_NODE, ELEMENT_NODE, flatMap, ieval, TEXT_NODE, VElement, VNode, withFunc } from \"./common.ts\"\n\nconst interpolate = (str: string, data: unknown) =>\n str.replace(/\\[\\|(.*)\\|\\]/g, (_, expr) => ieval(expr, data))\n\nexport type TemplateDirective = (o: {\n modifiers: string[],\n value: string,\n element: Element,\n data: Record,\n render: (d: Record) => VNode[],\n}) => VNode[]\n\nexport const templateDirectives = new Map()\n\nexport const render = (\n template: Node,\n data: Record,\n donelist: Attr[] = [],\n): VNode[] => {\n let { nodeType, nodeValue } = template\n if (nodeType === TEXT_NODE || nodeType === COMMENT_NODE)\n return [{ nodeType, nodeValue: interpolate(nodeValue!, data) }]\n \n if (nodeType === DOCUMENT_FRAGMENT_NODE)\n return flatMap(template.childNodes, n => render(n, data))\n \n if (nodeType === ELEMENT_NODE) {\n let element = template as Element\n let { tagName } = element\n let attributes = {} as Record\n let properties = {} as Record\n\n for (let attr of element.attributes) {\n let { name, value } = attr\n if (name.startsWith('p:')) {\n if (donelist.includes(attr)) continue\n let donelist_ = donelist.concat(attr)\n let [, directive, ...modifiers] = name.split(':')\n let dir = templateDirectives.get(directive)\n if (dir) return dir({\n modifiers,\n value,\n element,\n data,\n render: element instanceof HTMLTemplateElement\n ? (data => flatMap(\n element.content.childNodes,\n element => render(element, data, [])\n ) as VNode[])\n : (data => render(element, data, donelist_)),\n })\n }\n else attributes[name] = interpolate(value, data)\n }\n \n let childNodes = flatMap(element.childNodes, n => render(n, data))\n \n return [{ nodeType, tagName, attributes, properties, childNodes, inits: [] }]\n }\n\n throw new Error(`Unsupported node type: ${nodeType}`)\n}\n\ntemplateDirectives.set('for', ({\n render, data, value,\n modifiers: [vvar, kvar]\n}) => {\n let iterable = ieval(value, data)\n return Symbol.iterator in iterable\n ? flatMap(iterable, (v, k) =>\n render({ __proto__: data, [vvar]: v, [kvar]: k }))\n : Object.entries(iterable).flatMap(([k, v]) =>\n render({ __proto__: data, [vvar]: v, [kvar]: k }))\n})\n\ntemplateDirectives.set('if', ({ render, data, value }) =>\n ieval(value, data) ? render(data) : [])\n\ntemplateDirectives.set('on', ({ render, data, value, modifiers: [eventType] }) =>\n render(data).map(vn => {\n (vn as VElement).properties['on' + eventType] = withFunc(value, 'event').bind(data)\n return vn\n }))\n\ntemplateDirectives.set('set', ({ render, data, value, modifiers: [prop] }) =>\n render(data).map(vn => {\n (vn as VElement).properties[prop] = ieval(value, data)\n return vn\n }))\n\ntemplateDirectives.set('init', ({ render, data, value }) =>\n render(data)\n .map(vn => ((vn as VElement).inits.push(withFunc(value, 'element').bind(data)), vn)))\n\ntemplateDirectives.set('ref', ({ render, data, value }) =>\n render(data)\n .map(vn => ((vn as VElement).inits.push(\n el => data[value] = el\n ), vn)))\n\ntemplateDirectives.set('data', ({ render, data, value }) =>\n render(Object.assign(Object.create(data), ieval(value || '{}', data))))\n", "import { ieval } from \"./common.js\";\nimport { after, NodeRange } from \"./noderange.js\";\nimport { morph } from \"./morph.js\";\nimport { render } from \"./render.js\";\n\nexport const psatina = (\n template: HTMLTemplateElement,\n dataExpr: string,\n targetRange: NodeRange = after(template),\n) => {\n let data = ieval(dataExpr, template)\n ~(data.update = async (f?: () => unknown) => {\n await f?.()\n morph(targetRange, render(template.content, data))\n })() \n}\n\ndocument.querySelectorAll('template[p\\\\:data]').forEach(n =>\n psatina(n, n.getAttribute('p:data') || '{}'))\n"], "mappings": ";AAAO,IAAM,EAAE,WAAW,cAAc,cAAc,uBAAuB,IAAI;AAgB1E,IAAM,WAAW,CAAC,SAAiB,SACxC,IAAI,SAAS,GAAG,MAAM,oBAAoB,IAAI,GAAG;AAE5C,IAAM,QAAQ,CAAC,MAAc,SAClC,SAAS,IAAI,EAAE,KAAK,IAAI;AAEnB,IAAM,UAAU,CAAO,IAAiB,MAAwC;AACrF,MAAI,KAAK,CAAC,GAAG,IAAI;AACjB,WAAS,KAAK,GAAI,UAAS,KAAK,EAAE,GAAG,GAAG,EAAG,IAAG,KAAK,CAAC;AACpD,SAAO;AACT;;;ACxBO,IAAM,UAAU,CAAC,SAAe;AACrC,MAAI,SAAS,KAAK,YAAY;AAC9B,MAAI,kBAAkB,QAAS,QAAO;AACtC,SAAO;AACT;AAEO,IAAM,WAAW,CAAC,YAAmC,EAAE,QAAQ,OAAO,MAAM,KAAK,MAAM,MAAM,QAAQ,MAAM,EAAE;AAE7G,IAAM,QAAQ,CAAC,WAA4B,EAAE,QAAQ,MAAM,YAAa,OAAO,KAAK,MAAM,aAAa,MAAM,QAAQ,MAAM,UAAW,EAAE;AAExI,IAAM,QAAQ,CAAC,EAAE,OAAO,OAAO,MAAiB,QAAQ,MAAM,cAAc,OAAO;AAEnF,IAAM,OAAO,CAAC,GAAc,YAAyB,SAAS,eAAe;AAE7E,IAAM,OAAO,CAAC,EAAE,IAAI,GAAc,YAAyB,YAAY,OAAO,CAAC;AAEtF,IAAM,gBAAgB,CAAC,QAAoB,UAAgB,aAA0B;AAEnF,MAAI;AAAE,WAAO,WAAW,UAAU,QAAQ;AAAA,EAAE,SACrC,GAAG;AAAE,WAAO,aAAa,UAAU,QAAQ;AAAA,EAAE;AACtD;AAEO,IAAM,eAAe,CAAC,EAAE,QAAQ,IAAI,GAAc,SAAsB,aAAmB;AAChG,MAAI,YAAY,SAAU,QAAO;AACjC,MAAI,YAAY,KAAM,eAAc,QAAQ,UAAU,GAAG;AAAA,MACpD,eAAc,QAAQ,UAAU,OAAO;AAC5C,SAAO;AACT;;;ACdO,IAAM,QAAQ,CAAC,KAAgB,QAAiB;AACrD,MAAI,UAAU,SAAS;AAEvB,MAAI,QAAQ,OAAO;AAAA,IACjB,SAAS,cAAc,KAAK;AAAA,IAC5B,EAAE,QAAQ,MAAM,WAAW,cAAc;AAAA,EAC3C;AAEA,IAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,OAAO,KAAK;AAEzC,aAAW,OAAO,KAAK,GAAG;AAG1B,WAAS,QAAQ;AACjB,QAAM,OAAO;AACf;AAEA,IAAM,YAAY,CAAC,OAAgB,KAAW,QAAqB;AACjE,MAAI,IAAI,aAAa,IAAI,UAAU;AACjC,UAAM,OAAO,QAAQ,OAAO,GAAG;AAC/B,QAAI,WAAY,aAAa,MAAM,GAAG;AACtC,WAAO;AAAA,EACT,WAAW,IAAI,aAAa,GAAG;AAC7B,WAAO,aAAa,OAAO,KAAgB,GAAG;AAAA,EAChD,WAAW,IAAI,aAAa,KAAK,IAAI,aAAa,GAAG;AACnD,QAAI,IAAI,cAAc,IAAI,UAAW,KAAI,YAAY,IAAI;AACzD,WAAO;AAAA,EACT;AACA,QAAM;AACR;AAEA,IAAM,eAAe,CAAC,OAAgB,KAAc,QAAkB;AACpE,aAAW,OAAO,SAAS,GAAG,GAAG,IAAI,UAAU;AAC/C,MAAI,IAAI,YAAY,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,MAAM,KAAK;AACvE,iCAA6B,KAAK,GAAG;AACrC,WAAO;AAAA,EACT,OAAO;AACL,QAAI,OAAO,QAAQ,OAAO,GAAG;AAC7B,SAAK,gBAAgB,GAAG,IAAI,QAAQ;AACpC,QAAI,YAAY,IAAI;AACpB,WAAO;AAAA,EACT;AACF;AAEA,IAAM,+BAA+B,CAAC,KAAc,QAAkB;AACpE,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,IAAI,UAAU;AACvD,QAAI,IAAI,aAAa,IAAI,MAAM,MAAO,KAAI,aAAa,MAAM,KAAK;AACpE,aAAW,EAAE,KAAK,KAAK,CAAC,GAAG,IAAI,UAAU;AACvC,QAAI,EAAE,QAAQ,IAAI,YAAa,KAAI,gBAAgB,IAAI;AACzD,aAAW,QAAQ,IAAI,YAAY;AAEjC,QAAI,KAAK,WAAW,IAAI,KAAK,EAAE,QAAQ;AAErC,UAAI,iBAAiB,KAAK,MAAM,CAAC,GAAG,CAAC,MAAa,IAAI,IAAI,IAAI,CAAC,CAAC;AAElE,QAAI,IAAI,IAAI,MAAM,IAAI,WAAW,IAAI,EAAG,KAAI,IAAI,IAAI,IAAI,WAAW,IAAI;AAAA,EACzE;AACF;AAEA,IAAM,aAAa,CAAC,OAAgB,KAAgB,QAAiB;AACnE,MAAI,IAAI,MAAM,GAAG;AACjB,WAAS,KAAK,KAAK;AACjB,QAAI,QAAqB;AACzB,QAAI,KAAM,EAAe,YAAY;AACrC,QAAI,GAAI,SAAQ,IAAI,KAAK,eAAe,EAAE;AAAA,QAIrC,UAAS,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,KAAK,CAAC;AAC3D,UAAI,YAAY,GAAI,CAAC,EAAG,SAAQ;AAClC,QAAI,MAAO,KAAI,KAAK,KAAK,UAAU,OAAO,aAAa,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC;AAAA,QACpE,KAAI,KAAK,KAAK,aAAa,KAAK,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC;AAAA,EAC5D;AACA,SAAO,CAAC,KAAK,KAAK,CAAC,GAAG;AAAE,QAAI,IAAI;AAAI,QAAI,KAAK,KAAK,CAAC;AAAG,UAAM,OAAO,CAAC;AAAA,EAAE;AACxE;AAEA,IAAM,cAAc,CAAC,GAAS,MAC5B,EAAE,aAAa,EAAE,aACf,EAAE,aAAa,KACZ,EAAc,YAAY,EAAE,WAC5B,EAAc,OAAO;AAI5B,IAAM,UAAU,CAAC,OAAgB,QAAqB;AACpD,MAAI,IAAI,aAAa,cAAc;AACjC,UAAM,KAAK,SAAS,cAAc,IAAI,OAAO;AAC7C,iCAA6B,IAAI,GAAG;AACpC,eAAW,OAAO,SAAS,EAAE,GAAG,IAAI,UAAU;AAC9C,QAAI,MAAM,QAAQ,UAAQ,KAAK,EAAE,CAAC;AAClC,WAAO;AAAA,EACT;AACA,MAAI,IAAI,aAAa,UAAW,QAAO,SAAS,eAAe,IAAI,SAAU;AAC7E,MAAI,IAAI,aAAa,aAAc,QAAO,SAAS,cAAc,IAAI,SAAU;AAC/E,QAAM;AACR;;;AC1GA,IAAM,cAAc,CAAC,KAAa,SAChC,IAAI,QAAQ,iBAAiB,CAAC,GAAG,SAAS,MAAM,MAAM,IAAI,CAAC;AAUtD,IAAM,qBAAqB,oBAAI,IAA+B;AAE9D,IAAM,SAAS,CACpB,UACA,MACA,WAAmB,CAAC,MACR;AACZ,MAAI,EAAE,UAAU,UAAU,IAAI;AAC9B,MAAI,aAAa,aAAa,aAAa;AACzC,WAAO,CAAC,EAAE,UAAU,WAAW,YAAY,WAAY,IAAI,EAAE,CAAC;AAEhE,MAAI,aAAa;AACf,WAAO,QAAQ,SAAS,YAAY,OAAK,OAAO,GAAG,IAAI,CAAC;AAE1D,MAAI,aAAa,cAAc;AAC7B,QAAI,UAAU;AACd,QAAI,EAAE,QAAQ,IAAI;AAClB,QAAI,aAAa,CAAC;AAClB,QAAI,aAAa,CAAC;AAElB,aAAS,QAAQ,QAAQ,YAAY;AACnC,UAAI,EAAE,MAAM,MAAM,IAAI;AACtB,UAAI,KAAK,WAAW,IAAI,GAAG;AACzB,YAAI,SAAS,SAAS,IAAI,EAAG;AAC7B,YAAI,YAAY,SAAS,OAAO,IAAI;AACpC,YAAI,CAAC,EAAE,WAAW,GAAG,SAAS,IAAI,KAAK,MAAM,GAAG;AAChD,YAAI,MAAM,mBAAmB,IAAI,SAAS;AAC1C,YAAI,IAAK,QAAO,IAAI;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,QAAQ,mBAAmB,uBACtB,CAAAA,UAAQ;AAAA,YACP,QAAQ,QAAQ;AAAA,YAChB,CAAAC,aAAW,OAAOA,UAASD,OAAM,CAAC,CAAC;AAAA,UACrC,MACC,CAAAA,UAAQ,OAAO,SAASA,OAAM,SAAS;AAAA,QAC9C,CAAC;AAAA,MACH,MACK,YAAW,IAAI,IAAI,YAAY,OAAO,IAAI;AAAA,IACjD;AAEA,QAAI,aAAa,QAAQ,QAAQ,YAAY,OAAK,OAAO,GAAG,IAAI,CAAC;AAEjE,WAAO,CAAC,EAAE,UAAU,SAAS,YAAY,YAAY,YAAY,OAAO,CAAC,EAAE,CAAC;AAAA,EAC9E;AAEA,QAAM,IAAI,MAAM,0BAA0B,QAAQ,EAAE;AACtD;AAEA,mBAAmB,IAAI,OAAO,CAAC;AAAA,EAC7B,QAAAE;AAAA,EAAQ;AAAA,EAAM;AAAA,EACd,WAAW,CAAC,MAAM,IAAI;AACxB,MAAM;AACJ,MAAI,WAAW,MAAM,OAAO,IAAI;AAChC,SAAO,OAAO,YAAY,WACtB,QAAQ,UAAU,CAAC,GAAG,MACpBA,QAAO,EAAE,WAAW,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,IACnD,OAAO,QAAQ,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,MACrCA,QAAO,EAAE,WAAW,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,mBAAmB,IAAI,MAAM,CAAC,EAAE,QAAAA,SAAQ,MAAM,MAAM,MAClD,MAAM,OAAO,IAAI,IAAIA,QAAO,IAAI,IAAI,CAAC,CAAC;AAExC,mBAAmB,IAAI,MAAM,CAAC,EAAE,QAAAA,SAAQ,MAAM,OAAO,WAAW,CAAC,SAAS,EAAE,MAC1EA,QAAO,IAAI,EAAE,IAAI,QAAM;AACrB,EAAC,GAAgB,WAAW,OAAO,SAAS,IAAI,SAAS,OAAO,OAAO,EAAE,KAAK,IAAI;AAClF,SAAO;AACT,CAAC,CAAC;AAEJ,mBAAmB,IAAI,OAAO,CAAC,EAAE,QAAAA,SAAQ,MAAM,OAAO,WAAW,CAAC,IAAI,EAAE,MACtEA,QAAO,IAAI,EAAE,IAAI,QAAM;AACrB,EAAC,GAAgB,WAAW,IAAI,IAAI,MAAM,OAAO,IAAI;AACrD,SAAO;AACT,CAAC,CAAC;AAEJ,mBAAmB,IAAI,QAAQ,CAAC,EAAE,QAAAA,SAAQ,MAAM,MAAM,MACpDA,QAAO,IAAI,EACR,IAAI,SAAQ,GAAgB,MAAM,KAAK,SAAS,OAAO,SAAS,EAAE,KAAK,IAAI,CAAC,GAAG,GAAG,CAAC;AAExF,mBAAmB,IAAI,OAAO,CAAC,EAAE,QAAAA,SAAQ,MAAM,MAAM,MACnDA,QAAO,IAAI,EACR,IAAI,SAAQ,GAAgB,MAAM;AAAA,EACjC,QAAM,KAAK,KAAK,IAAI;AACtB,GAAG,GAAG,CAAC;AAEX,mBAAmB,IAAI,QAAQ,CAAC,EAAE,QAAAA,SAAQ,MAAM,MAAM,MACpDA,QAAO,OAAO,OAAO,OAAO,OAAO,IAAI,GAAG,MAAM,SAAS,MAAM,IAAI,CAAC,CAAC,CAAC;;;ACnGjE,IAAM,UAAU,CACrB,UACA,UACA,cAAyB,MAAM,QAAQ,MACpC;AACH,MAAI,OAAO,MAAM,UAAU,QAAQ;AACnC,IAAE,KAAK,SAAS,OAAO,MAAsB;AAC3C,UAAM,IAAI;AACV,UAAM,aAAa,OAAO,SAAS,SAAS,IAAI,CAAC;AAAA,EACnD,GAAG;AACL;AAEA,SAAS,iBAAsC,oBAAoB,EAAE,QAAQ,OAC3E,QAAQ,GAAG,EAAE,aAAa,QAAQ,KAAK,IAAI,CAAC;", "names": ["data", "element", "render"] }