{ "version": 3, "sources": ["node_modules/imba/src/imba/dom/flags.imba", "node_modules/imba/src/imba/utils.imba", "node_modules/imba/src/imba/dom/core.web.imba", "node_modules/imba/src/imba/scheduler.imba", "node_modules/imba/src/imba/events/keyboard.imba", "node_modules/imba/src/imba/events/mouse.imba", "node_modules/imba/src/imba/events/core.imba", "node_modules/imba/src/imba/dom/fragment.imba", "node_modules/imba/src/imba/dom/component.imba"], "sourcesContent": ["export class Flags\n\n\tdef constructor dom\n\t\tdom = dom\n\t\tstring = \"\"\n\n\tdef contains ref\n\t\treturn dom.classList.contains(ref)\n\n\tdef add ref\n\t\treturn self if contains(ref)\n\t\tstring += (string ? ' ' : '') + ref\n\t\tdom.classList.add(ref)\n\t\t# sync!\n\t\treturn self\n\n\tdef remove ref\n\t\treturn self unless contains(ref)\n\t\tlet regex = new RegExp('(^|\\\\s)*' + ref + '(\\\\s|$)*', 'g')\n\t\tstring = string.replace(regex, '')\n\t\tdom.classList.remove(ref)\n\t\t# sync!\n\t\treturn self\n\n\tdef toggle ref, bool\n\t\tbool = !contains(ref) if bool === undefined\n\t\tbool ? add(ref) : remove(ref)\n\t\t\n\tdef incr ref\n\t\tlet m = stacks ||= {}\n\t\tlet c = m[ref] or 0\n\t\tadd(ref) if c < 1\n\t\treturn m[ref] = Math.max(c,0) + 1\n\t\n\tdef decr ref\n\t\tlet m = stacks ||= {}\n\t\tlet c = m[ref] or 0\n\t\tremove(ref) if c == 1\n\t\treturn m[ref] = Math.max(c,1) - 1\n\n\tdef valueOf\n\t\tstring\n\n\tdef toString\n\t\tstring\n\n\tdef sync\n\t\tdom.flagSync$!", "const dashRegex = /-./g\n\nexport class LazyProxy\n\tstatic def for getter\n\t\tnew Proxy({}, new self(getter))\n\n\tdef constructor getter\n\t\tgetter = getter\n\t\n\tget target\n\t\tgetter!\n\n\tdef get _, key\n\t\ttarget[key]\n\t\n\tdef set _, key, value\n\t\ttarget[key] = value\n\t\treturn true\n\nexport def proxy getter, placeholder = {}\n\tnew Proxy(placeholder, new LazyProxy(getter))\n\nexport def parseTime value\n\tlet typ = typeof value\n\tif typ == 'number'\n\t\treturn value\n\n\tif typ == 'string'\n\t\tif (/^\\d+fps$/).test(value)\n\t\t\treturn 1000 / parseFloat(value)\n\t\telif (/^([-+]?[\\d\\.]+)s$/).test(value)\n\t\t\treturn parseFloat(value) * 1000\n\t\telif (/^([-+]?[\\d\\.]+)ms$/).test(value)\n\t\t\treturn parseFloat(value)\n\t# throw or return NaN?\n\treturn null\n\t\n\nexport def serializeData data\n\tlet map = new Map\n\tlet arr = []\n\tlet logging = no\n\tlet replacer = do(key,value)\n\t\tif value and value.#type and key !== ''\n\t\t\tlet ref = map.get(value) # value[sym] ||= \"$${nr++}$$\"\n\t\t\tunless map.has(value)\n\t\t\t\tmap.set(value,ref = \"$${arr.length}$$\")\n\t\t\t\tarr.push(value)\n\t\t\treturn key == null ? value : ref\n\t\tvalue\n\n\tlet json = JSON.stringify(data,replacer,2)\n\tlet i = 0\n\tlogging = yes\n\twhile i < arr.length\n\t\tarr[i] = JSON.stringify(arr[i],replacer,2)\n\t\ti++\n\n\tlet inject = \"\"\n\tfor item,i in arr\n\t\tinject += \"\\\"$${i}$$\\\":{item},\\n\"\n\tjson = '{' + inject + json.slice(1)\n\treturn json\n\t\n\nexport def deserializeData data, reviver = null\n\tlet objects = {}\n\tlet reg = /\\$\\$\\d+\\$\\$/\n\tlet lookup = do(value)\n\t\treturn objects[value] ||= reviver ? reviver(value) : {}\n\n\tlet parser = do(key,value)\n\t\tif typeof value == 'string'\n\t\t\tif value[0] == '$' and reg.test(value)\n\t\t\t\treturn lookup(value)\n\t\telif typeof key == 'string' and key[0] == '$' and reg.test(key)\n\t\t\tlet obj = lookup(key)\n\t\t\tObject.assign(obj,value)\n\t\t\treturn obj\n\n\t\treturn value\n\n\tlet parsed = JSON.parse(data,parser)\n\treturn parsed\n\nexport def patchManifest prev, curr\n\tlet origs = {}\n\tlet diff = {\n\t\tadded: []\n\t\tchanged: []\n\t\tremoved: []\n\t\tall: []\n\t\turls: {}\n\t}\n\n\tif prev.assets\n\t\tfor item in prev.assets\n\t\t\tlet ref = item.originalPath or item.path\n\t\t\torigs[ref] = item\n\t\t\tif item.url\n\t\t\t\t# add old urls to the new manifest\n\t\t\t\tcurr.urls[item.url] ||= item\n\t\n\tfor item in (curr.assets or [])\n\t\tlet ref = item.originalPath or item.path\n\t\tlet orig = origs[ref]\n\n\t\tif item.url and prev.urls\n\t\t\tprev.urls[item.url] = item\n\n\t\tif orig\n\t\t\tif orig.hash != item.hash\n\t\t\t\torig.invalidated = Date.now!\n\t\t\t\torig.replacedBy = item\n\t\t\t\titem.replaces = orig\n\t\t\t\tdiff.changed.push(item)\n\t\t\t\tdiff.all.push(item)\n\n\t\t\t\tif orig == prev.main\n\t\t\t\t\tdiff.main = item\n\n\t\t\tdelete origs[ref]\n\t\telse\n\t\t\tdiff.added.push(item)\n\t\t\tdiff.all.push(item)\n\n\t# these are the items that are no longer referencd\n\tfor own path,item of origs\n\t\titem.removed = Date.now!\n\t\tdiff.all.push(item)\n\n\tfor item in diff.all\n\t\tlet typ = diff[item.type] ||= []\n\t\ttyp.push(item)\n\n\tdiff.removed = Object.values(origs)\n\tcurr.changes = diff\n\treturn curr\n\nexport def toCamelCase str\n\tif str.indexOf('-') >= 0\n\t\tstr.replace(dashRegex) do $1.charAt(1).toUpperCase!\n\telse\n\t\tstr\n\nexport def getDeepPropertyDescriptor item, key, stop\n\t\n\tif !item\n\t\treturn undefined\n\n\tlet desc = Object.getOwnPropertyDescriptor(item,key)\n\n\tif desc or item == stop\n\t\treturn desc or undefined\n\t\t\n\tgetDeepPropertyDescriptor(Reflect.getPrototypeOf(item),key,stop)\n\n# Basic events - move to separate file?\nconst emit__ = do(event, args, node)\n\tlet prev\n\tlet cb\n\tlet ret\n\n\twhile (prev = node) and (node = node.next)\n\t\tif cb = node.listener\n\t\t\tif node.path and cb[node.path]\n\t\t\t\tret = args ? cb[node.path].apply(cb,args) : cb[node.path]()\n\t\t\telse\n\t\t\t\t# check if it is a method?\n\t\t\t\tret = args ? cb.apply(node, args) : cb.call(node)\n\n\t\tif node.times && --node.times <= 0\n\t\t\tprev.next = node.next\n\t\t\tnode.listener = null\n\treturn\n\n# method for registering a listener on object\nexport def listen obj, event, listener, path\n\tlet cbs\n\tlet list\n\tlet tail\n\tcbs = obj.#__listeners__ ||= {}\n\tlist = cbs[event] ||= {}\n\ttail = list.tail || (list.tail = (list.next = {}))\n\ttail.listener = listener\n\ttail.path = path\n\tlist.tail = tail.next = {}\n\treturn tail\n\n# register a listener once\nexport def once obj, event, listener\n\tlet tail = listen(obj,event,listener)\n\ttail.times = 1\n\treturn tail\n\n# remove a listener\nexport def unlisten obj, event, cb, meth\n\tlet node\n\tlet prev\n\tlet meta = obj.#__listeners__\n\treturn unless meta\n\n\tif node = meta[event]\n\t\twhile (prev = node) and (node = node.next)\n\t\t\tif node == cb || node.listener == cb\n\t\t\t\tprev.next = node.next\n\t\t\t\t# check for correct path as well?\n\t\t\t\tnode.listener = null\n\t\t\t\tbreak\n\treturn\n\n# emit event\nexport def emit obj, event, params\n\tif let cb = obj.#__listeners__\n\t\temit__(event,params,cb[event]) if cb[event]\n\t\temit__(event,[event,params],cb.all) if cb.all\n\treturn", "import {Flags} from './flags'\nimport {getDeepPropertyDescriptor} from '../utils'\n\nexport const {\n\tEvent,\n\tUIEvent,\n\tMouseEvent,\n\tPointerEvent,\n\tKeyboardEvent,\n\tCustomEvent,\n\tNode,\n\tComment,\n\tText,\n\tElement,\n\tHTMLElement,\n\tHTMLHtmlElement,\n\tHTMLSelectElement,\n\tHTMLInputElement,\n\tHTMLTextAreaElement,\n\tHTMLButtonElement,\n\tHTMLOptionElement,\n\tHTMLScriptElement,\n\tSVGElement,\n\tDocumentFragment,\n\tShadowRoot,\n\tDocument,\n\tWindow,\n\tcustomElements\n} = global.window\n\n\nconst descriptorCache = {}\ndef getDescriptor item,key,cache\n\tif !item\n\t\treturn cache[key] = null\n\n\tif cache[key] !== undefined\n\t\treturn cache[key]\n\t\n\tlet desc = Object.getOwnPropertyDescriptor(item,key)\n\n\tif desc !== undefined or item == SVGElement\n\t\treturn cache[key] = desc or null\n\n\tgetDescriptor(Reflect.getPrototypeOf(item),key,cache)\n\n# export const document = global.window.document\nconst CustomTagConstructors = {}\nconst CustomTagToElementNames = {}\nexport const TYPES = {}\nexport const CUSTOM_TYPES = {}\nexport def get_document\n\tglobal.document\n\nexport def use_window\n\tyes\n\n\n\n# Basic node extensions\n\nconst contextHandler =\n\tdef get target, name\n\t\tlet ctx = target\n\t\tlet val = undefined\n\t\twhile ctx and val == undefined\n\t\t\tif ctx = ctx.#parent\n\t\t\t\tval = ctx[name]\n\t\treturn val\n\n\tdef set target, name, value\n\t\tlet ctx = target\n\t\tlet val = undefined\n\t\twhile ctx and val == undefined\n\t\t\tlet desc = getDeepPropertyDescriptor(ctx,name,Element)\n\t\t\tif desc\n\t\t\t\tctx[name] = value\n\t\t\t\treturn yes\n\t\t\telse \n\t\t\t\tctx = ctx.#parent\n\t\treturn yes\n\nextend class Document\n\tget flags\n\t\tself.documentElement.flags\n\nextend class Node\n\tget #parent\n\t\t##parent or this.parentNode or ##up # FIX\n\n\tget #context\n\t\t##context ||= new Proxy(self,contextHandler)\n\n\tdef #__init__\n\t\tself\n\t\n\tdef #insertChild newnode, refnode\n\t\tnewnode.#insertInto(self,refnode)\n\t\n\tdef #appendChild newnode\n\t\tnewnode.#insertInto(self,null)\n\t\t\n\tdef #replaceChild newnode, oldnode\n\t\tlet res = #insertChild(newnode,oldnode)\n\t\t#removeChild(oldnode)\n\t\treturn res\n\t\t\n\tdef #removeChild node\n\t\tnode.#removeFrom(self)\n\n\t# can override if the element itself wants ot deal with this\n\tdef #insertInto parent, before = null\n\t\tif before\n\t\t\tparent.insertBefore(self,before)\n\t\telse\n\t\t\tparent.appendChild(self)\n\t\treturn self\n\t\t\n\tdef #insertIntoDeopt parent, before\n\t\t# log '#insertIntoDeopt',parent,before\n\t\tif before\n\t\t\tparent.insertBefore(#domNode or self,before)\n\t\telse\n\t\t\tparent.appendChild(#domNode or self)\n\t\treturn self\n\n\tdef #removeFrom parent\n\t\tparent.removeChild(self)\n\t\t\n\tdef #removeFromDeopt parent\n\t\tparent.removeChild(#domNode or self)\n\t\t\n\tdef #replaceWith other, parent\n\t\tparent.#replaceChild(other,self)\n\t\t\n\tdef #replaceWithDeopt other, parent\n\t\tparent.#replaceChild(other,#domNode or self)\n\n\tget #placeholderNode\n\t\t##placeholderNode ||= global.document.createComment(\"placeholder\")\n\n\tset #placeholderNode value\n\t\tlet prev = ##placeholderNode\n\t\t##placeholderNode = value\n\t\tif prev and prev != value and prev.parentNode\n\t\t\tprev.#replaceWith(value)\n\n\tdef #attachToParent\n\t\tlet ph = #domNode\n\t\tlet par = ph and ph.parentNode\n\t\tif ph and par and ph != self\n\t\t\t#domNode = null\n\t\t\t#insertInto(par,ph)\n\t\t\tph.#removeFrom(par)\n\t\tself\n\n\tdef #detachFromParent\n\t\tif #domDeopt =? yes\n\t\t\t#replaceWith = #replaceWithDeopt\n\t\t\t#removeFrom = #removeFromDeopt\n\t\t\t#insertInto = #insertIntoDeopt\n\n\t\tlet ph = #placeholderNode\n\t\tif parentNode and ph != self\n\t\t\tph.#insertInto(parentNode,self)\n\t\t\t#removeFrom(parentNode)\n\n\t\t#domNode = ph\n\t\t# self.#replaceWith(ph,parentNode)\n\t\tself\n\t\t\n\tdef #placeChild item, f, prev\n\t\t\n\t\tlet type = typeof item\n\t\t# console.log '#inserting!',item,f,prev,type\n\n\t\tif type === 'undefined' or item === null\n\t\t\t# what if the prev value was the same?\n\t\t\tif prev and prev isa Comment # check perf\n\t\t\t\treturn prev\n\n\t\t\tlet el = document.createComment('')\n\t\t\treturn prev ? prev.#replaceWith(el,self) : el.#insertInto(this,null)\n\n\t\t# dont reinsert again\n\t\tif item === prev\n\t\t\treturn item\n\n\t\t# what if this is null or undefined -- add comment and return? Or blank text node?\n\t\telif type !== 'object'\n\t\t\tlet res\n\t\t\tlet txt = item\n\t\t\t\n\t\t\tif (f & $TAG_FIRST_CHILD$) && (f & $TAG_LAST_CHILD$) and false\n\t\t\t\t# FIXME what if the previous one was not text? Possibly dangerous\n\t\t\t\t# when we set this on a fragment - it essentially replaces the whole\n\t\t\t\t# fragment?\n\t\t\t\t# log 'set textcontent raw',txt,prev\n\t\t\t\tself.textContent = txt\n\t\t\t\treturn\n\n\t\t\tif prev\n\t\t\t\tif prev isa Text # check perf\n\t\t\t\t\tprev.textContent = txt\n\t\t\t\t\treturn prev\n\t\t\t\telse\n\t\t\t\t\tres = document.createTextNode(txt)\n\t\t\t\t\tprev.#replaceWith(res,self)\n\t\t\t\t\treturn res\n\t\t\telse\n\t\t\t\tself.appendChild(res = document.createTextNode(txt))\n\t\t\t\treturn res\t\n\n\t\telse\n\t\t\treturn prev ? prev.#replaceWith(item,this) : item.#insertInto(this,null)\n\t\treturn\n\n# Basic element extensions\nextend class Element\n\t\n\tdef log ...params\n\t\tconsole.log(...params)\n\t\tself\n\n\tdef emit name, detail, o = {bubbles: true, cancelable: true}\n\t\to.detail = detail if detail != undefined\n\t\tlet event = new CustomEvent(name, o)\n\t\tlet res = self.dispatchEvent(event)\n\t\treturn event\n\n\tdef slot$ name, ctx\n\t\treturn self\n\n\t# inline in files or remove all together?\n\tdef text$ item\n\t\tself.textContent = item\n\t\tself\n\t\n\tdef #beforeReconcile\n\t\tself\n\t\t\n\tdef #afterReconcile\n\t\tself\n\t\t\n\tdef #afterVisit\n\t\tself.render! if self.render\n\t\treturn\n\n\tget flags\n\t\tunless $flags\n\t\t\t# unless deopted - we want to first cache the extflags\n\t\t\t$flags = new Flags(self)\n\t\t\tif flag$ == Element.prototype.flag$\n\t\t\t\tflags$ext = self.className\n\t\t\tflagDeopt$()\n\t\treturn $flags\n\n\tdef flag$ str\n\t\t# Potentially slow\n\t\tlet ns = flags$ns\n\t\tself.className = ns ? (ns + (flags$ext = str)) : (flags$ext = str)\n\t\treturn\n\t\t\n\tdef flagDeopt$\n\t\tself.flag$ = self.flagExt$ # do(str) self.flagSync$(flags$ext = str)\n\t\tself.flagSelf$ = do(str) self.flagSync$(flags$own = str)\n\t\treturn\n\t\t\n\tdef flagExt$ str\n\t\tself.flagSync$(flags$ext = str)\n\n\tdef flagSelf$ str\n\t\t# if a tag receives flags from inside we need to\n\t\t# redefine the flag-methods to later use both\n\t\tflagDeopt$()\n\t\treturn flagSelf$(str)\n\n\tdef flagSync$\n\t\tself.className = ((flags$ns or '') + (flags$ext or '') + ' ' + (flags$own || '') + ' ' + ($flags or ''))\n\t\t\n\tdef set$ key,value\n\t\t# FIXME relatively slow\n\t\tlet desc = getDeepPropertyDescriptor(this,key,Element)\n\t\tif !desc or !desc.set\n\t\t\tsetAttribute(key,value)\n\t\telse\n\t\t\tself[key] = value\n\t\treturn\n\t\t\n\tget richValue\n\t\tvalue\n\n\tset richValue value\n\t\tself.value = value\n\n# Element.prototype.set$ = Element.prototype.setAttribute\nElement.prototype.setns$ = Element.prototype.setAttributeNS\n\nexport def createElement name, parent, flags, text\n\tlet el = document.createElement(name)\n\t\t\n\tel.className = flags if flags\n\n\tif text !== null\n\t\tel.text$(text)\n\n\tif parent and parent.#appendChild\n\t\tparent.#appendChild(el)\n\t\t# el.#insertInto(parent)\n\n\treturn el\n\n\n\n\nextend class SVGElement\n\n\tdef set$ key,value\n\t\tlet cache = descriptorCache[nodeName] ||= {}\n\t\tlet desc = getDescriptor(this,key,cache)\n\n\t\tif !desc or !desc.set\n\t\t\tsetAttribute(key,value)\n\t\telse\n\t\t\tself[key] = value\n\t\treturn\n\n\tdef flag$ str\n\t\tlet ns = flags$ns\n\t\tself.setAttribute('class',ns ? (ns + (flags$ext = str)) : (flags$ext = str))\n\t\treturn\n\n\tdef flagSelf$ str\n\t\t# if a tag receives flags from inside we need to\n\t\t# redefine the flag-methods to later use both\n\t\tself.flag$ = do(str) self.flagSync$(flags$ext = str)\n\t\tself.flagSelf$ = do(str) self.flagSync$(flags$own = str)\n\t\treturn flagSelf$(str)\n\n\tdef flagSync$\n\t\tself.setAttribute('class',(flags$ns or '') + (flags$ext or '') + ' ' + (flags$own || '') + ' ' + ($flags or ''))\n\n\nextend class SVGSVGElement\n\n\tset src value\n\t\tif #src =? value\n\t\t\tif value\n\t\t\t\tif value.adoptNode\n\t\t\t\t\tvalue.adoptNode(self)\n\t\t\t\telif value.content\n\t\t\t\t\tfor own k,v of value.attributes\n\t\t\t\t\t\tsetAttribute(k,v)\n\t\t\t\t\tinnerHTML = value.content\n\t\treturn\n\n\t\t\n\nexport def createSVGElement name, parent, flags, text, ctx\n\tlet el = document.createElementNS(\"http://www.w3.org/2000/svg\",name)\n\n\tif flags\n\t\tel.className.baseVal = flags\n\n\tif parent and parent.#appendChild\n\t\tparent.#appendChild(el) # .#appendChild(parent)\n\n\tif text\n\t\tel.textContent = text\n\n\treturn el\n\nexport def createComment text\n\tdocument.createComment(text)\n\nexport def createTextNode text\n\tdocument.createTextNode(text)\n\t\nexport def createFragment\n\tdocument.createDocumentFragment!\n\n\nconst navigator = global.navigator\nconst vendor = navigator and navigator.vendor or ''\nconst ua = navigator and navigator.userAgent or ''\n\nconst isSafari = vendor.indexOf('Apple') > -1 || ua.indexOf('CriOS') >= 0 || ua.indexOf('FxiOS') >= 0\nconst supportsCustomizedBuiltInElements = !isSafari\nconst CustomDescriptorCache = new Map\n\nclass CustomHook < HTMLElement\n\tdef connectedCallback\n\t\tif supportsCustomizedBuiltInElements\n\t\t\tparentNode.removeChild(self)\n\t\telse\n\t\t\tparentNode.connectedCallback!\n\n\tdef disconnectedCallback\n\t\tif !supportsCustomizedBuiltInElements\n\t\t\tparentNode.disconnectedCallback!\n\nwindow.customElements.define('i-hook',CustomHook)\n\ndef getCustomDescriptors el, klass\n\tlet props = CustomDescriptorCache.get(klass)\n\n\tunless props\n\t\tprops = {}\n\t\tlet proto = klass.prototype\n\t\tlet protos = [proto]\n\t\twhile proto = (proto and Object.getPrototypeOf(proto))\n\t\t\tbreak if proto.constructor == el.constructor\n\t\t\tprotos.unshift(proto)\n\n\t\tfor item in protos\n\t\t\tlet desc = Object.getOwnPropertyDescriptors(item)\n\t\t\tObject.assign(props,desc)\n\t\tCustomDescriptorCache.set(klass,props)\n\n\treturn props\n\n# Registry\nexport def createComponent name, parent, flags, text, ctx\n\t# the component could have a different web-components name?\n\tlet el\n\t\n\tif typeof name != 'string'\n\t\tif name and name.nodeName\n\t\t\tname = name.nodeName\n\n\tlet cmpname = CustomTagToElementNames[name] or name\n\n\tif CustomTagConstructors[name]\n\t\tlet cls = CustomTagConstructors[name]\n\t\tlet typ = cls.prototype.#htmlNodeName\n\t\tif typ and supportsCustomizedBuiltInElements\n\t\t\tel = document.createElement(typ,is: name)\n\t\telif cls.create$ and typ\n\t\t\tel = document.createElement(typ)\n\t\t\tel.setAttribute('is',cmpname)\n\t\t\tlet props = getCustomDescriptors(el,cls)\n\t\t\tObject.defineProperties(el,props)\n\t\t\tel.__slots = {}\n\t\t\t# check if we need a hook though?\n\t\t\tel.appendChild(document.createElement('i-hook'))\n\t\telif cls.create$\n\t\t\tel = cls.create$(el)\n\t\t\tel.__slots = {}\n\t\telse\n\t\t\tconsole.warn \"could not create tag {name}\"\n\telse\n\t\tel = document.createElement(CustomTagToElementNames[name] or name)\n\n\tel.##parent = parent\n\tel.#__init__!\n\n\tif text !== null\n\t\tel.slot$('__').text$(text)\n\t\t\n\tif flags or el.flags$ns # or nsflag\n\t\tel.flag$(flags or '')\n\treturn el\n\nexport def getTagType name, klass\n\t# TODO follow same structure as ssr TYPES\n\tif TYPES[name]\n\t\treturn TYPES[name]\n\n\tif window[klass]\n\t\treturn window[klass]\n\n\tif window[name]\n\t\treturn window[name]\n\nexport def getSuperTagType name, klass, cmp\n\tlet typ = getTagType(name,klass)\n\tlet custom = typ == cmp or typ.prototype isa cmp or typ.prototype.#htmlNodeName\n\t\n\tif !custom\n\t\tlet cls = typ.prototype.#ImbaElement\n\n\t\tif !cls\n\t\t\tcls = class CustomBuiltInElement < typ\n\t\t\t\tdef constructor\n\t\t\t\t\tsuper\n\t\t\t\t\t__slots = {}\n\t\t\t\t\t__F = 0\n\n\t\t\ttyp.prototype.#ImbaElement = cls\n\t\t\tlet descriptors = Object.getOwnPropertyDescriptors(cmp.prototype)\n\t\t\tObject.defineProperties(cls.prototype,descriptors)\n\t\t\tcls.prototype.#htmlNodeName = name\n\n\t\treturn cls\n\n\treturn typ\n\nexport def defineTag name, klass, options = {}\n\tTYPES[name] = CUSTOM_TYPES[name] = klass\n\n\tklass.nodeName = name\n\n\tlet componentName = name\n\tlet proto = klass.prototype\n\n\tif name.indexOf('-') == -1\n\t\tcomponentName = \"{name}-tag\"\n\t\tCustomTagToElementNames[name] = componentName\n\n\tlet basens = proto._ns_\n\tif options.ns\n\t\tlet ns = options.ns\n\t\tlet flags = ns + ' ' + ns + '_ '\n\t\tif basens\n\t\t\tflags += proto.flags$ns \n\t\t\tns += ' ' + basens\n\t\tproto._ns_ = ns\n\t\tproto.flags$ns = flags\n\n\tif proto.#htmlNodeName and !options.extends\n\t\toptions.extends = proto.#htmlNodeName\n\n\tif options.extends\n\t\tproto.#htmlNodeName = options.extends\n\t\tCustomTagConstructors[name] = klass\n\n\t\tif supportsCustomizedBuiltInElements\n\t\t\twindow.customElements.define(componentName,klass,extends: options.extends)\n\telse\n\t\twindow.customElements.define(componentName,klass)\n\n\treturn klass\n\t\nlet instance = global.imba ||= {}\ninstance.document = global.document\n", "# imba$imbaPath=global\nlet rAF = global.requestAnimationFrame || (do(blk) setTimeout(blk,1000 / 60))\nlet FPS = 60\nlet SPF = 1 / 60\n\t\t\n# Scheduler\nclass Scheduled\n\towner = null\n\ttarget = null\n\tactive = no\n\tvalue = undefined\n\tskip = 0\n\tlast = 0\n\n\tdef tick scheduler, source\n\t\tlast = owner.#frames\n\t\ttarget.tick(self, source)\n\t\t1\n\n\tdef update o, activate?\n\t\tlet on = active\n\t\tlet val = o.value\n\t\tlet changed = value != val\n\n\t\tif changed\n\t\t\tdeactivate!\n\t\t\tvalue = val\n\n\t\tif value or on or activate?\n\t\t\tactivate!\n\t\tself\n\n\tdef queue\n\t\towner.add(self)\n\t\treturn\n\n\tdef activate\n\t\tif value === yes\n\t\t\towner.on('commit',self)\n\t\telif value === no\n\t\t\tyes\n\t\telif typeof value == 'number'\n\t\t\t# duration\n\t\t\tlet tock = value / (1000 / 60)\n\t\t\tif tock <= 2\n\t\t\t\t# FIXME everything from 30 to 60 fps is treated as 60fps\n\t\t\t\towner.on('raf',self)\n\t\t\telse\n\t\t\t\t#interval = global.setInterval(queue.bind(self),value)\n\n\t\tactive = yes\n\t\tself\n\n\tdef deactivate\n\t\tif value === yes\n\t\t\towner.un('commit',self)\n\t\towner.un('raf',self)\n\n\t\tif #interval\n\t\t\tglobal.clearInterval(#interval)\n\t\t\t#interval = null\n\n\t\tactive = no\n\t\tself\n\nexport class Scheduler\n\tdef constructor\n\t\tid = Symbol!\n\t\tself.queue = []\n\t\tself.stage = -1\n\t\t#stage = -1\n\t\t#frames = 0\n\t\t#scheduled = no\n\t\t\n\t\tself.listeners = {}\n\t\tself.intervals = {}\n\t\tself.commit = do\n\t\t\tadd('commit')\n\t\t\treturn self\n\n\t\t#fps = 0\n\n\t\t$promise = null\n\t\t$resolve = null\n\t\t#ticker = do(e)\n\t\t\t#scheduled = no\n\t\t\tself.tick(e)\n\t\tself\n\n\tdef add item, force\n\t\tif force or self.queue.indexOf(item) == -1\n\t\t\tself.queue.push(item)\n\n\t\t#schedule! unless #scheduled\n\t\treturn self\n\t\n\tget committing?\n\t\tself.queue.indexOf('commit') >= 0\n\n\n\tdef listen ns, item\n\t\tlet set = listeners[ns]\n\t\tlet first = !set\n\t\tset ||= listeners[ns] = new Set\n\t\tset.add(item)\n\n\t\tadd('raf') if ns == 'raf' and first\n\t\tself\t\n\n\tdef unlisten ns, item\n\t\tlet set = listeners[ns]\n\t\tset && set.delete(item)\n\t\tif ns == 'raf' and set and set.size == 0\n\t\t\tdelete listeners.raf\n\t\tself\n\n\tdef on ns,item\n\t\tlisten(ns,item)\n\n\tdef un ns,item\n\t\tunlisten(ns,item)\n\n\tget promise\n\t\t$promise ||= new Promise do(resolve)\n\t\t\t$resolve = resolve\n\n\tdef tick timestamp\n\t\tlet items = self.queue\n\t\tlet frame = #frames++\n\t\tself.ts = timestamp unless self.ts\n\t\tself.dt = timestamp - self.ts\n\t\tself.ts = timestamp\n\t\tself.queue = []\n\t\t#stage = 1\n\n\t\t# calculate frames elapsed since last tick etc?\n\n\t\tif items.length\n\t\t\tfor item,i in items\n\t\t\t\tif typeof item === 'string' && listeners[item]\n\t\t\t\t\tlisteners[item].forEach do(listener)\n\t\t\t\t\t\tif listener.tick isa Function\n\t\t\t\t\t\t\tlistener.tick(self,item)\n\t\t\t\t\t\telif listener isa Function\n\t\t\t\t\t\t\tlistener(self,item)\n\t\t\t\telif item isa Function\n\t\t\t\t\titem(self.dt,self)\n\t\t\t\telif item.tick\n\t\t\t\t\titem.tick(self.dt,self)\n\n\t\t#stage = #scheduled ? 0 : -1\n\n\t\tif $promise\n\t\t\t$resolve(self)\n\t\t\t$promise = $resolve = null\n\n\t\tif listeners.raf and true\n\t\t\tadd('raf')\n\t\tself\n\n\tdef #schedule\n\t\tif !#scheduled\n\t\t\t#scheduled = yes\n\t\t\t#stage = 0 if #stage == -1\n\t\t\trAF(#ticker)\n\t\tself\n\n\tdef schedule item, o\n\t\to ||= (item[id] ||= {value: yes})\n\t\tlet state = o[id] ||= new Scheduled(owner: self, target: item)\n\t\tstate.update(o,yes)\n\n\tdef unschedule item, o = {}\n\t\to ||= item[id]\n\t\tlet state = o and o[id]\n\t\tif state and state.active\n\t\t\tstate.deactivate!\n\t\tself\n\nexport const scheduler = new Scheduler \n\nexport def commit\n\tscheduler.add('commit').promise\n\nexport def setTimeout fn,ms\n\tglobal.setTimeout(&,ms) do\n\t\tfn!\n\t\tcommit!\n\t\treturn\n\nexport def setInterval fn,ms\n\tglobal.setInterval(&,ms) do\n\t\tfn!\n\t\tcommit!\n\t\treturn\n\nexport const clearInterval = global.clearInterval\nexport const clearTimeout = global.clearTimeout\n\nlet instance = global.imba ||= {}\ninstance.commit = commit\ninstance.setTimeout = setTimeout\ninstance.setInterval = setInterval\ninstance.clearInterval = clearInterval\ninstance.clearTimeout = clearTimeout\n", "import {KeyboardEvent} from '../dom/core'\n\nexport def use_events_keyboard\n\tyes\n\nextend class KeyboardEvent\n\n\tdef @esc do keyCode == 27\n\tdef @tab do keyCode == 9\n\tdef @enter do keyCode == 13\n\tdef @space do keyCode == 32\n\tdef @up do keyCode == 38\n\tdef @down do keyCode == 40\n\tdef @left do keyCode == 37\n\tdef @right do keyCode == 39\n\tdef @del do keyCode == 8 or keyCode == 46\n\tdef @key code\n\t\tif typeof code == 'string'\n\t\t\treturn key == code\n\t\telif typeof code == 'number'\n\t\t\treturn keyCode == code", "import {MouseEvent} from '../dom/core'\n\nexport def use_events_mouse\n\tyes\n\nextend class MouseEvent\n\n\tdef @left do button == 0\n\n\tdef @middle do button == 1\n\n\tdef @right do button == 2\n\n\tdef @shift do !!shiftKey\n\n\tdef @alt do !!altKey\n\n\tdef @ctrl do !!ctrlKey\n\n\tdef @meta do !!metaKey", "# imba$imbaPath=global\nimport {Event,Element,KeyboardEvent,MouseEvent,CustomEvent} from '../dom/core'\nimport {listen,once,emit,unlisten,parseTime} from '../utils'\nimport {scheduler} from '../scheduler'\n\nimport {use_events_keyboard} from './keyboard'\nuse_events_keyboard!\n\nimport {use_events_mouse} from './mouse'\nuse_events_mouse!\n\nextend class CustomEvent\n\n\tdef #extendType kls\n\t\tlet ext = kls.#extendDescriptors ||= if true\n\t\t\tlet desc = Object.getOwnPropertyDescriptors(kls.prototype)\n\t\t\tdelete desc.constructor\n\t\t\tdesc\n\t\tObject.defineProperties(self,ext)\n\nextend class Event\n\n\tget #modifierState\n\t\t#context[#context.step] ||= {}\n\t\t\n\tget #sharedModifierState\n\t\t#context.handler[#context.step] ||= {}\n\t\t\n\t\t\n\tdef #onceHandlerEnd cb\n\t\tonce(#context,'end',cb)\n\t\t\n\tdef @sel selector\n\t\treturn !!target.matches(String(selector))\n\n\tdef @log ...params\n\t\tconsole.info(...params)\n\t\treturn true\n\n\tdef @trusted\n\t\treturn !!isTrusted\n\n\tdef @if expr\n\t\treturn !!expr\n\n\tdef @wait time = 250\n\t\tnew Promise(do setTimeout($1,parseTime(time)))\n\n\tdef @self\n\t\treturn target == #context.element\n\t\n\tdef @cooldown time = 250\n\t\tlet o = #sharedModifierState\n\n\t\tif o.active\n\t\t\treturn no\n\n\t\to.active = yes\n\t\to.target = #context.element\n\t\to.target.flags.incr('cooldown')\n\n\t\t#onceHandlerEnd do\n\t\t\tsetTimeout(&,parseTime(time)) do\n\t\t\t\to.target.flags.decr('cooldown')\t\n\t\t\t\to.active = no\n\n\t\treturn yes\n\n\tdef @throttle time = 250\n\t\tlet o = #sharedModifierState\n\n\t\tif o.active\n\t\t\to.next(no) if o.next\n\n\t\t\treturn new Promise do(r)\n\t\t\t\to.next = do(val)\n\t\t\t\t\to.next = null\n\t\t\t\t\tr(val)\n\n\t\to.active = yes\n\t\to.el ||= #context.element\n\t\to.el.flags.incr('throttled')\n\n\t\tonce(#context,'end') do\n\t\t\tlet delay = parseTime(time)\n\t\t\tlet iv = setInterval(&,delay) do\n\t\t\t\tif o.next\n\t\t\t\t\to.next(yes)\n\t\t\t\telse\n\t\t\t\t\tclearInterval(iv)\n\t\t\t\t\to.el.flags.decr('throttled')\n\t\t\t\t\to.active = no\n\t\t\t\treturn\n\n\t\treturn yes\n\n\tdef @debounce time = 250\n\t\tlet o = #sharedModifierState\n\t\tlet e = self\n\t\to.queue ||= []\n\t\to.queue.push(o.last = e)\n\t\tnew Promise do(resolve)\n\t\t\tsetTimeout(&,parseTime(time)) do\n\t\t\t\tif o.last == e\n\t\t\t\t\t# if this event is still the last\n\t\t\t\t\t# add the debounced queue to the event\n\t\t\t\t\t# and let the chain continue\n\t\t\t\t\te.debounced = o.queue\n\t\t\t\t\to.last = null\n\t\t\t\t\to.queue = []\n\t\t\t\t\tresolve(true)\n\t\t\t\telse\n\t\t\t\t\tresolve(false)\n\n\t# will add a css className to the element (or selector)\n\t# and keep it for the duration of the event handling,\n\t# or at least 250ms\n\tdef @flag name, sel\n\t\tconst {element,step,state,id,current} = #context\n\t\n\t\tlet el = sel isa Element ? sel : (sel ? element.closest(sel) : element)\n\n\t\treturn true unless el\n\n\t\t#context.commit = yes\n\t\n\t\tstate[step] = id\n\t\tel.flags.incr(name)\n\n\t\tlet ts = Date.now!\n\t\t\n\t\tonce(current,'end') do\n\t\t\tlet elapsed = Date.now! - ts\n\t\t\tlet delay = Math.max(250 - elapsed,0)\n\t\t\tsetTimeout(&,delay) do el.flags.decr(name)\n\n\t\treturn true\n\n\tdef @busy sel\n\t\t# TODO REMOVE\n\t\tself['\u03B1flag']('busy',sel)\n\n\tdef @mod name\n\t\t# TODO REMOVE\n\t\tself['\u03B1flag'](\"mod-{name}\",global.document.documentElement)\n\n\tdef @outside\n\t\tconst {handler} = #context\n\t\tif handler and handler.#self\n\t\t\treturn !handler.#self.parentNode.contains(target)\n\n\nexport const events = {}\n\nexport def use_events\n\tyes\n\n# could cache similar event handlers with the same parts\nexport class EventHandler\n\tdef constructor params,closure\n\t\tself.params = params\n\t\tself.closure = closure\n\n\tdef getHandlerForMethod el, name\n\t\treturn null unless el\n\t\tel[name] ? el : self.getHandlerForMethod(el.parentNode,name)\n\n\t# okay to auto-import these?\n\tdef emit name, ...params do emit(self,name,params)\n\tdef on name, ...params do listen(self,name,...params)\n\tdef once name, ...params do once(self,name,...params)\n\tdef un name, ...params do unlisten(self,name,...params)\n\t\t\n\tget passive?\n\t\tparams.passive\n\t\t\n\tget capture?\n\t\tparams.capture\n\t\t\n\tget silent?\n\t\tparams.silent\n\t\t\n\tget global?\n\t\tparams.global\n\n\tdef handleEvent event\n\t\tlet element = #target or event.currentTarget\n\t\tlet mods = self.params\n\t\t# let i = 0\n\t\t# let awaited = no\n\t\tlet error = null\n\t\tlet silence = mods.silence or mods.silent\n\t\t\n\t\tself.count ||= 0\n\t\tself.state ||= {}\n\n\t\tlet state = {\n\t\t\telement: element\n\t\t\tevent: event\n\t\t\tmodifiers: mods\n\t\t\thandler: this\n\t\t\tid: ++self.count\n\t\t\tstep: -1\n\t\t\tstate: self.state\n\t\t\tcommit: null\n\t\t\tcurrent: null\n\t\t}\n\t\t\n\t\t# console.log 'handling event',event.target,event.currentTarget\n\n\t\tstate.current = state\n\n\t\tif event.handle$mod\n\t\t\tif event.handle$mod.apply(state,mods.options or []) == false\n\t\t\t\treturn\n\n\t\tlet guard = Event[self.type + '$handle'] or Event[event.type + '$handle'] or event.handle$mod\n\t\t\t\n\t\tif guard and guard.apply(state,mods.options or []) == false\n\t\t\treturn\n\t\t\n\t\t# let object = state.proxy or event \n\t\t\n\t\tself.currentEvents ||= new Set\n\t\tself.currentEvents.add(event)\t\n\n\t\tfor own handler,val of mods\n\t\t\tstate.step++\n\n\t\t\tif handler[0] == '_'\n\t\t\t\tcontinue\n\n\t\t\tif handler.indexOf('~') > 0\n\t\t\t\thandler = handler.split('~')[0]\n\t\t\t\n\t\t\tlet modargs = null\n\t\t\tlet args = [event,state]\n\t\t\tlet res = undefined\n\t\t\tlet context = null\n\t\t\tlet m\n\t\t\tlet negated = no\n\t\t\tlet isstring = typeof handler == 'string'\n\t\t\t\n\t\t\tif handler[0] == '$' and handler[1] == '_' and val[0] isa Function\n\t\t\t\t# handlers should commit by default\n\t\t\t\thandler = val[0]\n\t\t\t\tstate.commit = yes unless handler.passive\n\t\t\t\targs = [event,state].concat(val.slice(1))\n\t\t\t\tcontext = element\n\t\t\t\t\n\n\t\t\t# parse the arguments\n\t\t\telif val isa Array\n\t\t\t\targs = val.slice()\n\t\t\t\tmodargs = args\n\n\t\t\t\tfor par,i in args\n\t\t\t\t\t# what about fully nested arrays and objects?\n\t\t\t\t\t# ought to redirect this\n\t\t\t\t\tif typeof par == 'string' && par[0] == '~' and par[1] == '$'\n\t\t\t\t\t\tlet name = par.slice(2)\n\t\t\t\t\t\tlet chain = name.split('.')\n\t\t\t\t\t\tlet value = state[chain.shift()] or event\n\n\t\t\t\t\t\tfor part,i in chain\n\t\t\t\t\t\t\tvalue = value ? value[part] : undefined\n\n\t\t\t\t\t\targs[i] = value\n\n\t\t\tif typeof handler == 'string' and m = handler.match(/^(emit|flag|mod|moved|pin|fit|refit|map|remap|css)-(.+)$/)\n\t\t\t\tmodargs = args = [] unless modargs\n\t\t\t\targs.unshift(m[2])\n\t\t\t\thandler = m[1]\n\n\t\t\tif handler == 'trap'\n\t\t\t\tevent.#stopPropagation = yes\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.#defaultPrevented = yes\n\t\t\t\tevent.preventDefault()\n\n\t\t\telif handler == 'stop'\n\t\t\t\tevent.#stopPropagation = yes\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\telif handler == 'prevent'\n\t\t\t\tevent.#defaultPrevented = yes\n\t\t\t\tevent.preventDefault()\n\t\t\telif handler == 'commit'\n\t\t\t\tstate.commit = yes\n\n\t\t\telif handler == 'once'\n\t\t\t\t# clean up bound data as well\n\t\t\t\telement.removeEventListener(event.type,self)\n\t\t\telif handler == 'options' or handler == 'silence' or handler == 'silent'\n\t\t\t\tcontinue\n\n\t\t\telif handler == 'emit'\n\t\t\t\tlet name = args[0]\n\t\t\t\tlet detail = args[1] # is custom event if not?\n\t\t\t\tlet e = new CustomEvent(name, bubbles: true, detail: detail) # : new Event(name)\n\t\t\t\te.originalEvent = event\n\t\t\t\tlet customRes = element.dispatchEvent(e)\n\n\t\t\telif typeof handler == 'string'\n\t\t\t\tif handler[0] == '!'\n\t\t\t\t\tnegated = yes\n\t\t\t\t\thandler = handler.slice(1)\n\n\t\t\t\tlet path = \"\u03B1{handler}\"\n\n\t\t\t\tlet fn = event[path]\n\t\t\t\tfn ||= (self.type and Event[self.type + '$' + handler + '$mod'])\n\t\t\t\tfn ||= event[handler + '$mod'] or Event[event.type + '$' + handler] or Event[handler + '$mod']\n\t\t\t\t\n\t\t\t\tif fn isa Function\n\t\t\t\t\thandler = fn\n\t\t\t\t\tcontext = state\n\t\t\t\t\targs = modargs or []\n\n\t\t\t\t\tif event[path]\n\t\t\t\t\t\tcontext = event\n\t\t\t\t\t\tevent.#context = state\n\n\t\t\t\t# should default to first look at closure - no?\n\t\t\t\telif handler[0] == '_'\n\t\t\t\t\thandler = handler.slice(1)\n\t\t\t\t\tcontext = self.closure\n\t\t\t\telse\n\t\t\t\t\t# TODO deprecate this functionality and warn about it?\n\t\t\t\t\tcontext = self.getHandlerForMethod(element,handler)\n\t\t\t\n\t\t\ttry\n\t\t\t\tif handler isa Function\n\t\t\t\t\tres = handler.apply(context or element,args)\n\t\t\t\telif context\n\t\t\t\t\tres = context[handler].apply(context,args)\n\n\t\t\t\tif res and res.then isa Function and res != scheduler.$promise\n\t\t\t\t\tscheduler.commit! if state.commit and !silence\n\t\t\t\t\tres = await res\n\t\t\tcatch e\n\t\t\t\terror = e\n\t\t\t\tbreak\n\n\t\t\tif negated and res === true\n\t\t\t\tbreak\n\t\t\tif !negated and res === false\n\t\t\t\tbreak\n\n\t\t\tstate.value = res\n\t\t\n\t\temit(state,'end',state)\n\n\t\tscheduler.commit! if state.commit and !silence\n\n\t\tself.currentEvents.delete(event)\n\t\tif self.currentEvents.size == 0\n\t\t\tself.emit('idle')\n\t\t# what if the result is a promise\n\t\t\n\t\tif error\n\t\t\tthrow error\n\n\t\treturn\n\n\n# Add methods to Element\nextend class Element\n\n\tdef on$ type, mods, scope\n\t\tlet check = 'on$' + type\n\t\tlet handler\n\n\t\thandler = new EventHandler(mods,scope)\n\n\t\tlet capture = mods.capture or no\n\t\tlet passive = mods.passive\n\n\t\tlet o = capture\n\n\t\tif passive\n\t\t\to = {passive: passive, capture: capture}\n\n\t\t# check if a custom handler exists for this type?\n\t\tif self[check] isa Function\n\t\t\thandler = self[check](mods,scope,handler,o)\n\t\telse\n\t\t\tself.addEventListener(type,handler,o)\n\t\treturn handler\n", "import {Text,createComment,createTextNode,Comment} from './core'\n\nexport class Fragment\n\t\n\tdef constructor\n\t\tchildNodes = []\n\t\t\n\tdef log ...params\n\t\treturn\n\t\tconsole.log this.constructor.name,...params\n\t\t\n\tdef hasChildNodes\n\t\tfalse\n\nlet counter = 0\n# like a list\nclass VirtualFragment < Fragment\n\tdef constructor flags, parent\n\t\tsuper\n\t\t##up = parent\n\t\tparentNode = null\n\t\t#domFlags = flags\n\t\tchildNodes = []\n\t\t#end = createComment('slot' + counter++)\n\t\t# #end.node = self\n\t\t\n\t\tif parent\n\t\t\tparent.#appendChild(self)\n\n\tget #parent\n\t\t##parent or parentNode or ##up\n\t\n\tset textContent text\n\t\t#textContent = text\n\t\n\tget textContent\n\t\t#textContent\n\t\t\n\tdef hasChildNodes\n\t\tfor item in childNodes\n\t\t\tif item isa Fragment\n\t\t\t\treturn true if item.hasChildNodes!\n\t\t\tif item isa Comment\n\t\t\t\tyes\n\t\t\telif item isa Node\n\t\t\t\treturn true\n\n\t\t\t# unless item isa Comment\n\t\t\t#\treturn false\n\t\treturn false\n\t\t# #children.length == 0\n\t\t\n\tdef text$ item\n\t\tunless #textNode\n\t\t\t#textNode = #placeChild(item)\n\t\telse\n\t\t\t#textNode.textContent = item\n\t\treturn #textNode\n\t\t\n\tdef appendChild child\n\t\tif parentNode\n\t\t\tchild.#insertInto(parentNode,#end)\n\t\tchildNodes.push(child)\n\t\n\tdef #appendChild child\n\t\tif parentNode\n\t\t\tchild.#insertInto(parentNode,#end)\n\t\tchildNodes.push(child)\n\t\n\tdef insertBefore node,refnode\n\t\t# check if this should really happen?\n\t\tif parentNode\n\t\t\tparentNode.#insertChild(node,refnode)\n\t\tlet idx = childNodes.indexOf(refnode)\n\t\tif idx >= 0\n\t\t\tchildNodes.splice(idx,0,node)\n\t\treturn node\n\t\n\t\n\tdef #removeChild node\n\t\tif parentNode\n\t\t\tparentNode.#removeChild(node)\n\t\tlet idx = childNodes.indexOf(node)\n\t\tif idx >= 0\n\t\t\tchildNodes.splice(idx,1)\n\t\treturn\n\t\t\t\n\tdef #insertInto parent, before\n\t\t# console.log 'frag #insertInto',parent,before,#children\n\t\tlet prev = parentNode\n\n\t\tif parentNode =? parent\n\t\t\t# log '#insertInto',parent,prev,before,#end\n\t\t\t# what if before is a fragment etc?\n\t\t\tif #end\n\t\t\t\tbefore = #end.#insertInto(parent,before)\n\t\t\t# before = #end\n\t\t\tfor item in childNodes\n\t\t\t\titem.#insertInto(parent,before)\n\t\treturn self\n\t\t\n\tdef #replaceWith node, parent\n\t\t# log '#replaceWith',node,parent\n\t\t# what if this\n\t\t# log 'replaced with',node,parent\n\t\tlet res = node.#insertInto(parent,#end)\n\t\t#removeFrom(parent)\n\t\tres\n\t\n\tdef #insertChild node,refnode\n\t\tif parentNode\n\t\t\tinsertBefore(node,refnode or #end)\n\t\t\n\t\tif refnode\n\t\t\tlet idx = childNodes.indexOf(refnode)\n\t\t\t# console.log 'vfragment #insertChild',node,refnode,refnode == #end,idx,#children\n\t\t\tif idx >= 0\n\t\t\t\tchildNodes.splice(idx,0,node)\n\t\telse\n\t\t\tchildNodes.push(node)\n\t\treturn node\n\t\t\n\t\t\n\t\t# for item in #children\n\t\t# \titem.#removeFrom(parent)\n\t\n\tdef #removeFrom parent\n\t\tfor item in childNodes\n\t\t\t# log '#removeFrom',item,parent\n\t\t\titem.#removeFrom(parent)\n\t\t#end.#removeFrom(parent) if #end\n\t\tparentNode = null\n\t\tself\n\n\tdef #placeChild item, f, prev\n\t\tlet par = parentNode\n\t\tlet type = typeof item\n\t\t\n\t\tif type === 'undefined' or item === null\n\t\t\tif prev and prev isa Comment # check perf\n\t\t\t\treturn prev\n\t\t\t\n\t\t\tlet el = createComment('')\n\t\t\t\n\t\t\tif prev\n\t\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\t\tchildNodes.splice(idx,1,el)\n\t\t\t\tif par\n\t\t\t\t\tprev.#replaceWith(el,par)\n\t\t\t\t# parentNode.#insert(item,f,prev or #end)\n\t\t\t\treturn el\n\t\t\t\n\t\t\t\n\t\t\tchildNodes.push(el)\n\t\t\tel.#insertInto(par,#end) if par\n\t\t\treturn el\n\t\t\t# return prev ? prev.#replaceWith(el,self) : el.#insertInto(this,null)\n\n\t\tif item === prev\n\t\t\treturn item\n\t\t\t\n\t\tif type !== 'object'\n\t\t\tlet res\n\t\t\tlet txt = item\n\n\t\t\tif prev\n\t\t\t\tif prev isa Text # check perf\n\t\t\t\t\tprev.textContent = txt\n\t\t\t\t\treturn prev\n\t\t\t\telse\n\t\t\t\t\tres = createTextNode(txt)\n\t\t\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\t\t\tchildNodes.splice(idx,1,res)\n\t\t\t\t\tprev.#replaceWith(res,par) if par\n\t\t\t\t\treturn res\n\t\t\telse\n\t\t\t\tchildNodes.push(res = createTextNode(txt))\n\t\t\t\t# self.appendChild$(res = createTextNode(txt))\n\t\t\t\tres.#insertInto(par,#end) if par\n\t\t\t\treturn res\n\n\t\telif prev\n\t\t\tlet idx = childNodes.indexOf(prev)\n\t\t\tchildNodes.splice(idx,1,item)\n\t\t\tprev.#replaceWith(item,par) if par\n\t\t\treturn item\n\t\telse\n\t\t\tchildNodes.push(item)\n\t\t\titem.#insertInto(par,#end) if par\n\t\t\treturn item\n\n\nexport def createLiveFragment bitflags, par\n\tconst el = new VirtualFragment(bitflags, par)\n\treturn el\n\t\nexport def createSlot bitflags, par\n\tconst el = new VirtualFragment(bitflags, null)\n\tel.##up = par\n\t# el.setup$(bitflags, options)\n\t# el.##up = par if par\n\treturn el", "import {Node,HTMLElement,CUSTOM_TYPES} from './core'\nimport {createLiveFragment,createSlot} from './fragment'\nimport {scheduler} from '../scheduler'\n\nconst hydrator = new class\n\titems = []\n\tcurrent = null\n\tlastQueued = null\n\ttests = 0\n\n\tdef flush\n\t\tlet item = null\n\n\t\tif false\n\t\t\tconsole.log 'flush hydrate',items,tests\n\t\t\tfor item,i in items\n\t\t\t\tlet next = items[i + 1]\n\t\t\t\tif next\n\t\t\t\t\tunless next.compareDocumentPosition(item) & Node.DOCUMENT_POSITION_PRECEDING\n\t\t\t\t\t\tconsole.log \"WRONG ORDER!!!\",item,next,next.compareDocumentPosition(item)\n\n\t\twhile item = items.shift!\n\t\t\tcontinue if !item.parentNode or item.hydrated?\n\t\t\t# Mark as inited to stop connectedCallback from early exit\n\t\t\tlet prev = current\n\t\t\tcurrent = item\n\t\t\titem.__F |= $EL_SSR$\n\t\t\titem.connectedCallback!\n\t\t\tcurrent = prev\n\t\treturn\n\n\tdef queue item\n\t\t# let len = items.push(item)\n\t\tlet len = items.length\n\t\tlet idx = 0\n\t\tlet prev = lastQueued\n\t\tlastQueued = item\n\n\t\tlet BEFORE = Node.DOCUMENT_POSITION_PRECEDING\n\t\tlet AFTER = Node.DOCUMENT_POSITION_FOLLOWING\n\n\t\tif len\n\t\t\tlet prevIndex = items.indexOf(prev)\n\t\t\tlet index = prevIndex\n\n\t\t\tlet compare = do(a,b)\n\t\t\t\ttests++\n\t\t\t\ta.compareDocumentPosition(b)\n\n\t\t\tif prevIndex == -1 or prev.nodeName != item.nodeName\n\t\t\t\tindex = prevIndex = 0\n\n\t\t\tlet curr = items[index]\n\n\t\t\twhile curr and compare(curr,item) & AFTER\n\t\t\t\tcurr = items[++index]\n\n\t\t\tif index != prevIndex\n\t\t\t\tcurr ? items.splice(index,0,item) : items.push(item)\n\t\t\telse\n\t\t\t\twhile curr and compare(curr,item) & BEFORE\n\t\t\t\t\tcurr = items[--index]\n\t\t\t\tif index != prevIndex\n\t\t\t\t\tcurr ? items.splice(index + 1,0,item) : items.unshift(item)\n\t\telse\n\t\t\titems.push(item)\n\t\t\tglobal.queueMicrotask(flush.bind(self)) if !current\n\n\t\treturn\n\n\tdef run item\n\t\treturn if active\n\t\t# look for parents that are still hydrated\n\t\t# only the ssr elements that are not yet awakened\n\t\tactive = yes\n\t\t# let all = global.document.getElementsByClassName('__ssr')\n\t\tlet all = global.document.querySelectorAll('.__ssr')\n\t\tconsole.log 'running hydrator',item,all.length,Array.from(all)\n\n\t\tfor item in all\n\t\t\titem.#count ||= 1\n\t\t\titem.#count++\n\t\t\tlet name = item.nodeName\n\t\t\tlet typ = map[name] ||= global.window.customElements.get(name.toLowerCase!) or HTMLElement\n\t\t\tconsole.log 'item type',name,typ,!!CUSTOM_TYPES[name.toLowerCase!]\n\t\t\t# console.log 'hydrate??',item.constructor\n\t\t\tcontinue if !item.connectedCallback or !item.parentNode or item.hydrated?\n\t\t\tconsole.log 'hydrate',item # !!item.parentNode,item,item.connectedCallback\n\t\t\t# item.connectedCallback!\n\n\t\tactive = no\n\nexport def hydrate\n\thydrator.flush!\n\nexport class ImbaElement < HTMLElement\n\tdef constructor\n\t\tsuper()\n\t\tif flags$ns\n\t\t\t# explain?\n\t\t\tflag$ = flagExt$\n\n\t\tsetup$()\n\t\tbuild()\n\n\tdef setup$\n\t\t__slots = {}\n\t\t__F = 0\n\n\tdef #__init__\n\t\t__F |= ($EL_INITED$ | $EL_HYDRATED$)\n\t\tself\n\t\t\n\tdef flag$ str\n\n\t\tself.className = flags$ext = str\n\t\treturn\n\n\t# returns the named slot - for context\n\tdef slot$ name, ctx\n\t\tif name == '__' and !render\n\t\t\treturn self\n\n\t\t__slots[name] ||= createSlot(0,self)\n\n\t# called immediately after construction \n\tdef build\n\t\tself\n\n\t# called before the first mount\n\tdef awaken\n\t\tself\n\t\n\t# called when element is attached to document\n\tdef mount\n\t\tself\n\t\n\t# called when element is detached from document\n\tdef unmount\n\t\tself\n\n\t# called after render\n\tdef rendered\n\t\tself\n\n\t# called before element is stringified on server (SSR)\n\tdef dehydrate\n\t\tself\n\n\t# called before awaken if element was not initially created via imba - on the client\n\tdef hydrate\n\t\t# should only autoschedule if we are not awakening inside a parent context that\n\t\tautoschedule = yes\n\t\tself\n\n\tdef tick\n\t\tcommit()\n\n\t# called when component is (re-)rendered from its parent\n\tdef visit\n\t\tcommit()\n\n\t# Wrapper for rendering. Default implementation\n\tdef commit\n\t\tunless render?\n\t\t\t__F |= $EL_UNRENDERED$\n\t\t\treturn self\n\t\t__F |= $EL_RENDERING$ \n\t\trender && render()\n\t\trendered()\n\t\t__F = (__F | $EL_RENDERED$) & ~$EL_RENDERING$ & ~$EL_UNRENDERED$\n\n\tget autoschedule\n\t\t(__F & $EL_SCHEDULE$) != 0\n\t\n\tset autoschedule value\n\t\tvalue ? (__F |= $EL_SCHEDULE$) : (__F &= ~$EL_SCHEDULE$)\n\n\t###\n\tNaming and accepted values will likely change - experimental\n\n\tyes = render on events / imba.commit\n\tno = force manual render\n\tnull / undefined = render via parent\n\t(n)s = render every n s\n\t(n)ms = render every n ms\n\t(n)fps = render n times per second\n\t###\n\tset autorender value\n\t\tlet o = #autorender ||= {}\n\t\to.value = value\n\t\tscheduler.schedule(self,o) if mounted?\n\t\treturn\n\n\tget render?\n\t\treturn !suspended?\n\n\tget mounting?\n\t\treturn (__F & $EL_MOUNTING$) != 0\n\n\tget mounted?\n\t\treturn (__F & $EL_MOUNTED$) != 0\n\t\n\tget awakened?\n\t\treturn (__F & $EL_AWAKENED$) != 0\n\t\n\tget rendered?\n\t\treturn (__F & $EL_RENDERED$) != 0\n\n\tget suspended?\n\t\treturn (__F & $EL_SUSPENDED$) != 0\n\n\tget rendering?\n\t\treturn (__F & $EL_RENDERING$) != 0\n\t\n\tget scheduled?\n\t\treturn (__F & $EL_SCHEDULED$) != 0\n\n\tget hydrated?\n\t\treturn (__F & $EL_HYDRATED$) != 0\n\n\tget ssr?\n\t\treturn (__F & $EL_SSR$) != 0\n\n\tdef schedule\n\t\tscheduler.on('commit',self)\n\t\t__F |= $EL_SCHEDULED$\n\t\treturn self\n\n\tdef unschedule\n\t\tscheduler.un('commit',self)\n\t\t__F &= ~$EL_SCHEDULED$\n\t\treturn self\n\n\tdef suspend cb = null\n\t\tlet val = flags.incr('_suspended_')\n\t\t__F |= $EL_SUSPENDED$\n\t\tif cb isa Function\n\t\t\tawait cb()\n\t\t\tunsuspend!\n\t\tself\n\n\tdef unsuspend\n\t\tlet val = flags.decr('_suspended_')\n\t\tif val == 0\n\t\t\t__F &= ~$EL_SUSPENDED$\n\t\t\tcommit! if $EL_UNRENDERED$\n\n\t\tself\n\t\t\n\tdef #afterVisit\n\t\tvisit()\n\n\tdef #beforeReconcile\n\t\tif __F & $EL_SSR$\n\t\t\t__F = __F & ~$EL_SSR$\n\t\t\t# remove flag\n\t\t\t# not if ssr?!\n\t\t\tclassList.remove('_ssr_')\n\t\t\tif flags$ext and flags$ext.indexOf('_ssr_') == 0\n\t\t\t\tflags$ext = flags$ext.slice(5)\n\t\t\tinnerHTML = '' unless __F & $EL_RENDERED$\n\t\tself\n\n\tdef connectedCallback\n\t\tlet flags = __F\n\t\tlet inited = flags & $EL_INITED$\n\t\tlet awakened = flags & $EL_AWAKENED$\n\n\t\tif !inited and !(flags & $EL_SSR$)\n\t\t\thydrator.queue(self)\n\t\t\treturn\n\n\t\t# return if we are already in the process of mounting - or have mounted\n\t\tif flags & ($EL_MOUNTING$ | $EL_MOUNTED$)\n\t\t\treturn\n\t\t\n\t\t__F |= $EL_MOUNTING$\n\n\t\tunless inited\n\t\t\t#__init__!\n\n\t\tunless flags & $EL_HYDRATED$\n\t\t\t# clearly seems wrong?\n\t\t\tflags$ext = className\n\t\t\t__F |= $EL_HYDRATED$\n\t\t\tself.hydrate()\n\t\t\tcommit()\n\n\t\tunless awakened\n\t\t\tawaken()\n\t\t\t__F |= $EL_AWAKENED$\n\n\t\tlet res = mount()\n\t\tif res && res.then isa Function\n\t\t\tres.then(scheduler.commit)\n\n\t\tflags = __F = (__F | $EL_MOUNTED$) & ~$EL_MOUNTING$\n\t\t\n\t\tif flags & $EL_SCHEDULE$\n\t\t\tschedule()\n\t\t\n\t\t\n\t\tscheduler.schedule(self,#autorender) if #autorender\n\t\treturn this\n\n\tdef disconnectedCallback\n\t\t__F = __F & (~$EL_MOUNTED$ & ~$EL_MOUNTING$)\n\t\tif __F & $EL_SCHEDULED$\n\t\t\t# trigger potential unschedule listeners\n\t\t\tunschedule()\n\n\t\tunmount()\n\t\tscheduler.unschedule(self,#autorender) if #autorender"], "mappings": "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", "names": [] }