From 89c2e3be0a86aad8e5da4a8b88ffa246a45ec329 Mon Sep 17 00:00:00 2001 From: Robert Biggs Date: Sun, 4 Nov 2018 14:14:01 -0800 Subject: [PATCH] Minor update for readibility. --- dist/composi-core.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/runtime.js | 10 +++++----- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/dist/composi-core.js.map b/dist/composi-core.js.map index 4fdee36..1c48e4e 100644 --- a/dist/composi-core.js.map +++ b/dist/composi-core.js.map @@ -1 +1 @@ -{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/mapEffect.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object. | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Create a virtual node represeting an element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n return createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, vnodeFromChild),\n element,\n null,\n RECYCLED_NODE\n )\n}\n\n/**\n * Cycle through the child nodes of an element and create virtual nodes of them.\n * @param {Element} element\n * @return {VNode} VNode\n */\nfunction vnodeFromChild(element) {\n if (element.nodeType === 3) {\n return createTextVNode(element.nodeValue, element)\n } else {\n return hydrate(element)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.[]} objects One or more objects to use for merging.\n * @return {Object.} Object.\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object} Object\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n","import { RECYCLED_NODE, TEXT_NODE, XLINK_NS, SVG_NS } from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.} Object.\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n for (; startCount <= end; startCount++) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n } else if (prop === 'style') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop in element &&\n prop !== 'list' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop !== 'translate' &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n if (nullOrFalse) {\n element.removeAttribute(prop)\n }\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, lifecycle, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n lifecycle.push(function() {\n props['onmount'](element)\n })\n }\n\n for (let i = 0, length = vnode.children.length; i < length; i++) {\n element.appendChild(createElement(vnode.children[i], lifecycle, isSVG))\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} node\n * @return {Element}\n */\nfunction removeChildren(node) {\n for (let i = 0, length = node.children.length; i < length; i++) {\n removeChildren(node.children[i])\n }\n\n return node.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(done, vnode.element)\n } else {\n done()\n }\n}\n\n/**\n * Update and element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {Lifecycle} lifecycle\n * @param {boolean} isSVG\n * @param {boolean} isRecycled\n * @return {void} undefined\n */\nfunction updateElement(\n element,\n oldProps,\n newProps,\n lifecycle,\n isSVG,\n isRecycled\n) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb = isRecycled ? newProps['onmount'] : newProps['onupdate']\n if (cb != null) {\n lifecycle.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, lifecycle, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, lifecycle, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n lifecycle,\n (isSVG = isSVG || newVNode.type === 'svg'),\n oldVNode.flag === RECYCLED_NODE\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let lastChildren = oldVNode.children\n let lastChildStart = 0\n let lastChildEnd = lastChildren.length - 1\n\n let nextKey\n const nextChildren = newVNode.children\n let nextChildStart = 0\n let nextChildEnd = nextChildren.length - 1\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildStart])\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildStart].element,\n lastChildren[lastChildStart],\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n\n lastChildStart++\n nextChildStart++\n }\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildEnd])\n nextKey = getKey(nextChildren[nextChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildEnd].element,\n lastChildren[lastChildEnd],\n nextChildren[nextChildEnd],\n lifecycle,\n isSVG\n )\n\n lastChildEnd--\n nextChildEnd--\n }\n\n if (lastChildStart > lastChildEnd) {\n while (nextChildStart <= nextChildEnd) {\n element.insertBefore(\n createElement(nextChildren[nextChildStart++], lifecycle, isSVG),\n (childNode = lastChildren[lastChildStart]) && childNode.element\n )\n }\n } else if (nextChildStart > nextChildEnd) {\n while (lastChildStart <= lastChildEnd) {\n removeElement(element, lastChildren[lastChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(lastChildren, lastChildStart, lastChildEnd)\n const nextKeyed = {}\n\n while (nextChildStart <= nextChildEnd) {\n lastKey = getKey((childNode = lastChildren[lastChildStart]))\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(lastChildren[lastChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n lastChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextChildStart++\n }\n lastChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n lastChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n }\n }\n nextChildStart++\n }\n }\n\n while (lastChildStart <= lastChildEnd) {\n if (getKey((childNode = lastChildren[lastChildStart++])) == null) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n const lifecycle = []\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(\n container,\n oldVNode && oldVNode.element,\n oldVNode,\n newVNode,\n lifecycle\n )\n\n if (newVNode !== oldVNode) {\n while (lifecycle.length > 0) lifecycle.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction safeUnion(types, options) {\n const prefix = (options && options.prefix) || ''\n const prefixSize = prefix.length\n let stripPrefix\n if (prefixSize) {\n stripPrefix = tag =>\n tag &&\n tag.type &&\n tag.type.startsWith(prefix) &&\n tag.type.slice(prefixSize)\n } else {\n stripPrefix = x => x && x.type\n }\n\n const matcher = (handlers, catchAll) => {\n return function _matcher(tag, context) {\n const tagType = stripPrefix(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n const methods = {\n match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n },\n matcher,\n matches(tag, type) {\n const tagType = stripPrefix(tag)\n return !!(typeof tagType === 'string' && variants[tagType] === type)\n }\n }\n\n const variants = Object.create(null)\n for (let i = 0; i < types.length; i++) {\n const type = types[i]\n const prefixedType = prefix + type\n variants[type] = data => ({ type: prefixedType, data })\n }\n\n return { variants, methods }\n}\n\nexport function union(types, options) {\n const { variants, methods } = safeUnion(types, options)\n for (const key in methods) {\n variants[key] = methods[key]\n }\n return variants\n}\n","/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = Reflect.get(props, 'key')\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (Reflect.get(props, 'children')) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n for (length = node.length; length-- > 0; ) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {Element | string} container\n * @param { Element | string } [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n let cont\n if (typeof container === 'string') {\n cont = document.querySelector(container)\n } else {\n cont = container\n }\n if (!cont) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n oldVNode = hydrate(hydrateThis)\n } else {\n oldVNode = cont && Reflect.get(cont, 'vnode')\n }\n const vnode = patch(oldVNode, VNode, cont)\n cont['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @typedef {any} State\n * @typedef {Function} Effect\n * @typedef {Object<string, any>} Program\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.done]\n * @param {Program} program\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const done = program.done\n let state, effect\n let isRunning = true\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n change(update(message, state))\n }\n }\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function change(update) {\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n } else {\n state = []\n }\n if (effect) {\n effect(send)\n }\n view(state, send)\n }\n\n change(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n function end() {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n return end\n}\n","/**\n * Map effects to ease composition of runtime programs.\n * @param {Function} effect\n * @param {Function} callback\n * @return {Function} Function\n */\nexport function mapEffect(effect, callback) {\n if (!effect) {\n return\n }\n return send =>\n function intercept(message) {\n send(callback(message))\n return effect(intercept)\n }\n}\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","TEXT_NODE","hydrate","document","querySelector","nodeName","toLowerCase","map","call","childNodes","vnodeFromChild","RECYCLED_NODE","nodeType","nodeValue","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","nullOrFalse","removeAttribute","setAttributeNS","XLINK_NS","setAttribute","createElement","lifecycle","createTextNode","createElementNS","SVG_NS","push","length","appendChild","removeChildren","node","removeElement","parent","done","removeChild","cb","updateElement","oldProps","newProps","isRecycled","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","lastChildren","lastChildStart","lastChildEnd","nextChildren","nextChildStart","nextChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","safeUnion","types","options","prefix","prefixSize","stripPrefix","tag","startsWith","x","matcher","handlers","catchAll","context","tagType","match","hasOwnProperty","data","methods","matches","variants","message","toString","tempBox","Reflect","VNode","hydrateThis","cont","console","error","program","send","isRunning","change","update","state","init","effect","view","callback","intercept"],"mappings":"2LAmCO,QAASA,CAAAA,CAAT,CAAqBC,CAArB,CAA2BC,CAA3B,CAAkCC,CAAlC,CAA4CC,CAA5C,CAAqDC,CAArD,CAA0DC,CAA1D,CAAgE,OAC9D,CACLL,IADK,CACLA,CADK,CAELC,KAFK,CAELA,CAFK,CAGLC,QAHK,CAGLA,CAHK,CAILC,OAJK,CAILA,CAJK,CAKLC,GALK,CAKLA,CALK,CAMLC,KAAAA,CANK,EAgBF,QAASC,CAAAA,CAAT,CAAyBC,CAAzB,CAA+BJ,CAA/B,CAAwC,OACtCJ,CAAAA,CAAW,CAACQ,CAAD,CAAOC,CAAP,CAAqBC,CAArB,CAAkCN,CAAlC,CAA2C,IAA3C,CAAiDO,CAAjD,EAQb,QAASC,CAAAA,CAAT,CAAiBR,CAAjB,CAA0B,OACR,QAAnB,QAAOA,CAAAA,IACTA,CAAO,CAAGS,QAAQ,CAACC,aAATD,CAAuBT,CAAvBS,GAELb,CAAW,CAChBI,CAAO,CAACW,QAARX,CAAiBY,WAAjBZ,EADgB,CAEhBK,CAFgB,CAGhBC,CAAW,CAACO,GAAZP,CAAgBQ,IAAhBR,CAAqBN,CAAO,CAACe,UAA7BT,CAAyCU,CAAzCV,CAHgB,CAIhBN,CAJgB,CAKhB,IALgB,CAMhBiB,CANgB,EAepB,QAASD,CAAAA,CAAT,CAAwBhB,CAAxB,CAAiC,OACN,EAArBA,GAAAA,CAAO,CAACkB,QADmB,CAEtBf,CAAe,CAACH,CAAO,CAACmB,SAAT,CAAoBnB,CAApB,CAFO,CAItBQ,CAAO,CAACR,CAAD,EC3EX,QAASoB,CAAAA,CAAT,CAAsB,GAAGC,CAAzB,CAAkC,CAevC,QAASC,CAAAA,CAAT,CAAqBC,CAArB,CAA6BC,CAAI,CAAG,GAAIC,CAAAA,OAAxC,CAAmD,CAEjD,GAAIC,MAAM,CAACH,CAAD,CAAN,GAAmBA,CAAvB,CAA+B,MAAOA,CAAAA,CAAP,CAE/B,GAAIC,CAAI,CAACG,GAAL,CAASJ,CAAT,CAAJ,CAAsB,MAAOC,CAAAA,CAAI,CAACI,GAAL,CAASL,CAAT,CAAP,CACtB,KAAMM,CAAAA,CAAM,CACVN,CAAM,WAAYO,CAAAA,IAAlB,CACI,GAAIA,CAAAA,IAAJ,CAASP,CAAT,CADJ,CAEIA,CAAM,WAAYQ,CAAAA,MAAlB,CACE,GAAIA,CAAAA,MAAJ,CAAWR,CAAM,CAACS,MAAlB,CAA0BT,CAAM,CAACU,KAAjC,CADF,CAEEV,CAAM,CAACW,WAAP,CACE,GAAIX,CAAAA,CAAM,CAACW,WADb,CAEER,MAAM,CAACS,MAAP,CAAc,IAAd,CAPV,CAiBA,MATAX,CAAAA,CAAI,CAACY,GAAL,CAASb,CAAT,CAAiBM,CAAjB,CASA,CAAOH,MAAM,CAACW,MAAP,CACLR,CADK,CAEL,GAAGH,MAAM,CAACY,IAAP,CAAYf,CAAZ,EAAoBV,GAApB,CAAwBZ,CAAG,GAAK,CACjC,CAACA,CAAD,EAAOqB,CAAW,CAACC,CAAM,CAACtB,CAAD,CAAP,CAAcuB,CAAd,CADe,CAAL,CAA3B,CAFE,CAMR,CA3CsC,OAGnCe,KAAK,CAACC,OAAN,CAAcnB,CAAO,GAArB,CAHmC,CAIrCA,CAAO,CAACoB,OAAR,CAAgB,EAAhB,CAJqC,CAMrCpB,CAAO,CAACoB,OAAR,CAAgB,EAAhB,CANqC,CA6CnCF,KAAK,CAACC,OAAN,CAAcnB,CAAO,GAArB,CA7CmC,EA8C9BA,CAAO,CAACqB,MAAR,CAAe,CAACC,CAAD,CAAIC,CAAJ,GAAUL,KAAK,CAACM,SAAN,CAAgBC,MAAhB,CAAuBH,CAAvB,CAA0BrB,CAAW,CAACsB,CAAD,CAArC,CAAzB,CA9C8B,CA+CO,QAAnC,QAAOvB,CAAAA,CAAO,GA/Cc,CAgD9BA,CAAO,CAACqB,MAAR,CAAe,CAACC,CAAD,CAAIC,CAAJ,GAAUlB,MAAM,CAACW,MAAP,CAAcM,CAAd,CAAiBrB,CAAW,CAACsB,CAAD,CAA5B,CAAzB,CAhD8B,OAkDxC,CCnDD,QAASG,CAAAA,CAAT,CAAoBC,CAApB,CAA2B,OAClBA,CAAAA,CAAK,CAACC,aAAND,QAA8BA,CAAK,CAACnD,IAApCmD,EAA0CA,CAA1CA,EAST,QAASE,CAAAA,CAAT,CAAgBC,CAAhB,CAAuB,OACL,KAATA,EAAAA,CAAK,CAAW,IAAX,CAAkBA,CAAK,CAAClD,IAWtC,QAASmD,CAAAA,CAAT,CAAsBrD,CAAtB,CAAgCsD,CAAhC,CAA4CC,CAA5C,CAAiD,MACzCC,CAAAA,CAAG,CAAG,GADmC,GAE3CtD,CAAAA,CAF2C,CAG3CkD,CAH2C,MAKxCE,CAAU,EAAIC,EAAKD,CAAU,GACgB,IAA9C,GAACpD,CAAG,CAAG,CAACkD,CAAK,CAAGpD,CAAQ,CAACsD,CAAD,CAAjB,EAA+BpD,GAAtC,IACFsD,CAAG,CAACtD,CAAD,CAAHsD,CAAWJ,SAIRI,CAAAA,EAYT,QAASC,CAAAA,CAAT,CAAiBxD,CAAjB,CAA0ByD,CAA1B,CAAgCC,CAAhC,CAA0CC,CAA1C,CAAoDC,CAApD,CAA2D,IAC5C,KAATH,GAAAA,EAAgB,KACb,IAAa,OAATA,GAAAA,CAAJ,KACA,GAAII,CAAAA,IAAKzC,CAAAA,CAAY,CAACsC,CAAD,CAAWC,CAAX,EAAsB,MACxCG,CAAAA,CAAK,CAAe,IAAZH,EAAAA,CAAQ,EAA2B,IAAfA,EAAAA,CAAQ,CAACE,CAAD,CAA5BF,CAA0C,EAA1CA,CAA+CA,CAAQ,CAACE,CAAD,EACxD,GAATA,GAAAA,CAAC,CAAC,CAAD,CAFyC,CAG5C7D,CAAO,CAACyD,CAAD,CAAPzD,CAAc+D,WAAd/D,CAA0B6D,CAA1B7D,CAA6B8D,CAA7B9D,CAH4C,CAK5CA,CAAO,CAACyD,CAAD,CAAPzD,CAAc6D,CAAd7D,EAAmB8D,EANlB,QAUW,GAAZL,GAAAA,CAAI,CAAC,CAAD,CAAJA,EAA+B,GAAZA,GAAAA,CAAI,CAAC,CAAD,EACzBA,CAAI,CAAGA,CAAI,CAACO,KAALP,CAAW,CAAXA,EAAc7C,WAAd6C,GAEFzD,CAAO,UAAYA,CAAO,OAAPA,CAAoB,IAE5CA,CAAO,OAAPA,CAAkByD,CAAlBzD,EAA0B2D,EAEV,IAAZA,EAAAA,EACF3D,CAAO,CAACiE,mBAARjE,CAA4ByD,CAA5BzD,CAAkC+C,CAAlC/C,EACqB,IAAZ0D,EAAAA,GACT1D,CAAO,CAACkE,gBAARlE,CAAyByD,CAAzBzD,CAA+B+C,CAA/B/C,MAEG,IACDmE,CAAAA,CAAW,CAAe,IAAZR,EAAAA,CAAQ,EAAYA,KAAAA,EAGpCF,CAAI,GAAIzD,CAAAA,CAARyD,EACS,MAATA,GAAAA,CADAA,EAES,MAATA,GAAAA,CAFAA,EAGS,WAATA,GAAAA,CAHAA,EAIS,YAATA,GAAAA,CAJAA,EAKS,WAATA,GAAAA,CALAA,EAMA,CAACG,CAVE,EAYH5D,CAAO,CAACyD,CAAD,CAAPzD,CAA4B,IAAZ2D,EAAAA,CAAQ,CAAW,EAAX,CAAgBA,CAZrC,CAaCQ,CAbD,EAcDnE,CAAO,CAACoE,eAARpE,CAAwByD,CAAxBzD,CAdC,EAiBU,YAATyD,GAAAA,CAAI,EAA8B,WAATA,GAAAA,CAjB1B,EAkBDzD,CAAO,CAACqE,cAARrE,CAAuBsE,CAAvBtE,CAAiC,MAAjCA,CAAyC2D,CAAzC3D,CAlBC,CAmBDA,CAAO,CAACuE,YAARvE,CAAqB,MAArBA,CAA6B2D,CAA7B3D,CAnBC,EAqBGmE,CArBH,CAsBCnE,CAAO,CAACoE,eAARpE,CAAwByD,CAAxBzD,CAtBD,CAwBCA,CAAO,CAACuE,YAARvE,CAAqByD,CAArBzD,CAA2B2D,CAA3B3D,GAgBZ,QAASwE,CAAAA,CAAT,CAAuBrB,CAAvB,CAA8BsB,CAA9B,CAAyCb,CAAzC,CAAgD,IAC1C5D,CAAAA,CAAJ,CACImD,CAAK,CAACjD,IAANiD,GAAe5C,CADnB,CAEYE,QAAQ,CAACiE,cAATjE,CAA+C0C,CAAK,CAACtD,IAArDY,CAFZ,EAIOmD,CAAK,CAAGA,CAAK,EAAmB,KAAfT,GAAAA,CAAK,CAACtD,IAJ9B,EAKcY,QAAQ,CAACkE,eAATlE,CACRmE,CADQnE,CAEe0C,CAAK,CAACtD,IAFrBY,CALd,CAUcA,QAAQ,CAAC+D,aAAT/D,CAA8C0C,CAAK,CAACtD,IAApDY,OAIRX,CAAAA,CAAK,CAAGqD,CAAK,CAACrD,MAChBA,CAAK,QAhBqC,EAiB5C2E,CAAS,CAACI,IAAVJ,CAAe,UAAW,CACxB3E,CAAK,QAALA,CAAiBE,CAAjBF,CADF,CAAA2E,CAjB4C,KAsBzC,GAAIZ,CAAAA,CAAC,CAAG,CAAR,CAAWiB,CAAM,CAAG3B,CAAK,CAACpD,QAANoD,CAAe2B,OAAQjB,CAAC,CAAGiB,EAAQjB,CAAC,GAC3D7D,CAAO,CAAC+E,WAAR/E,CAAoBwE,CAAa,CAACrB,CAAK,CAACpD,QAANoD,CAAeU,CAAfV,CAAD,CAAoBsB,CAApB,CAA+Bb,CAA/B,CAAjC5D,MAGG,GAAIyD,CAAAA,IAAQ3D,CAAAA,EACf0D,CAAO,CAAyBxD,CAAzB,CAAmCyD,CAAnC,CAAyC,IAAzC,CAA+C3D,CAAK,CAAC2D,CAAD,CAApD,CAA4DG,CAA5D,CAAPJ,OAGML,CAAAA,CAAK,CAACnD,OAANmD,CAAwCnD,EAQlD,QAASgF,CAAAA,CAAT,CAAwBC,CAAxB,CAA8B,KACvB,GAAIpB,CAAAA,CAAC,CAAG,CAAR,CAAWiB,CAAM,CAAGG,CAAI,CAAClF,QAALkF,CAAcH,OAAQjB,CAAC,CAAGiB,EAAQjB,CAAC,GAC1DmB,CAAc,CAACC,CAAI,CAAClF,QAALkF,CAAcpB,CAAdoB,CAAD,CAAdD,OAGKC,CAAAA,CAAI,CAACjF,QASd,QAASkF,CAAAA,CAAT,CAAuBC,CAAvB,CAA+BhC,CAA/B,CAAsC,MAC9BiC,CAAAA,CAAI,CAAG,UAAW,CACtBD,CAAM,CAACE,WAAPF,CAAmBH,CAAc,CAAC7B,CAAD,CAAjCgC,CADF,CADoC,CAK9BG,CAAE,CAAGnC,CAAK,CAACrD,KAANqD,EAAeA,CAAK,CAACrD,KAANqD,UALU,CAM1B,IAANmC,EAAAA,CANgC,CASlCF,CAAI,EAT8B,CAOlCE,CAAE,CAACF,CAAD,CAAOjC,CAAK,CAACnD,OAAb,EAiBN,QAASuF,CAAAA,CAAT,CACEvF,CADF,CAEEwF,CAFF,CAGEC,CAHF,CAIEhB,CAJF,CAKEb,CALF,CAME8B,CANF,CAOE,KACK,GAAIjC,CAAAA,IAAQrC,CAAAA,CAAY,CAACoE,CAAD,CAAWC,CAAX,EAEzB,CAAU,OAAThC,EAAAA,CAAI,EAAyB,SAATA,EAAAA,CAApBA,CACGzD,CAAO,CAACyD,CAAD,CADVA,CAEG+B,CAAQ,CAAC/B,CAAD,CAFZ,IAEwBgC,CAAQ,CAAChC,CAAD,GAEhCD,CAAO,CAACxD,CAAD,CAAUyD,CAAV,CAAgB+B,CAAQ,CAAC/B,CAAD,CAAxB,CAAgCgC,CAAQ,CAAChC,CAAD,CAAxC,CAAgDG,CAAhD,OAIL0B,CAAAA,CAAE,CAAGI,CAAU,CAAGD,CAAQ,QAAX,CAAyBA,CAAQ,UAC5C,IAANH,EAAAA,CAZJ,EAaEb,CAAS,CAACI,IAAVJ,CAAe,UAAW,CACxBa,CAAE,CAACtF,CAAD,CAAUwF,CAAV,CAAoBC,CAApB,CADJ,CAAAhB,EAgBJ,QAASkB,CAAAA,CAAT,CAAsBR,CAAtB,CAA8BnF,CAA9B,CAAuC4F,CAAvC,CAAiDC,CAAjD,CAA2DpB,CAA3D,CAAsEb,CAAtE,CAA6E,IACvEiC,CAAQ,GAAKD,EAAU,KACpB,IACO,IAAZA,EAAAA,CAAQ,EACRA,CAAQ,CAAC1F,IAAT0F,GAAkBrF,CADlBqF,EAEAC,CAAQ,CAAC3F,IAAT2F,GAAkBtF,CAHb,CAKDqF,CAAQ,CAAC/F,IAAT+F,GAAkBC,CAAQ,CAAChG,IAL1B,GAMHG,CAAO,CAACmB,SAARnB,CAAwC6F,CAAQ,CAAChG,IAN9C,MAQA,IAAgB,IAAZ+F,EAAAA,CAAQ,EAAYA,CAAQ,CAAC/F,IAAT+F,GAAkBC,CAAQ,CAAChG,IAAnD,CAAyD,MACxDiG,CAAAA,CAAU,CAAGX,CAAM,CAACY,YAAPZ,CACjBX,CAAa,CAACqB,CAAD,CAAWpB,CAAX,CAAsBb,CAAtB,CADIuB,CAEjBnF,CAFiBmF,EAKH,IAAZS,EAAAA,CAN0D,EAMxCV,CAAa,CAACC,CAAD,CAASS,CAAT,CAN2B,CAQ9D5F,CAAO,CAAG8F,CARL,CAAA,IASA,CACLP,CAAa,CACXvF,CADW,CAEX4F,CAAQ,CAAC9F,KAFE,CAGX+F,CAAQ,CAAC/F,KAHE,CAIX2E,CAJW,CAKVb,CAAK,CAAGA,CAAK,EAAsB,KAAlBiC,GAAAA,CAAQ,CAAChG,IALhB,CAMX+F,CAAQ,CAAC1F,IAAT0F,GAAkB3E,CANP,CADR,IAUD+E,CAAAA,CAVC,CAWDC,CAXC,CAaDC,CAbC,CAkBDC,CAlBC,CAcDC,CAAY,CAAGR,CAAQ,CAAC7F,QAdvB,CAeDsG,CAAc,CAAG,CAfhB,CAgBDC,CAAY,CAAGF,CAAY,CAACtB,MAAbsB,CAAsB,CAhBpC,MAmBCG,CAAAA,CAAY,CAAGV,CAAQ,CAAC9F,SAnBzB,GAoBDyG,CAAAA,CAAc,CAAG,CApBhB,CAqBDC,CAAY,CAAGF,CAAY,CAACzB,MAAbyB,CAAsB,CArBpC,MAuBEC,CAAc,EAAIC,CAAlBD,EAAkCH,CAAc,EAAIC,CAvBtD,GAwBHJ,CAAO,CAAGhD,CAAM,CAACkD,CAAY,CAACC,CAAD,CAAb,CAxBb,CAyBHF,CAAO,CAAGjD,CAAM,CAACqD,CAAY,CAACC,CAAD,CAAb,CAzBb,CA2BY,IAAXN,EAAAA,CAAO,EAAYA,CAAO,GAAKC,CA3BhC,GA6BHR,CAAY,CACV3F,CADU,CAEVoG,CAAY,CAACC,CAAD,CAAZD,CAA6BpG,OAFnB,CAGVoG,CAAY,CAACC,CAAD,CAHF,CAIVE,CAAY,CAACC,CAAD,CAJF,CAKV/B,CALU,CAMVb,CANU,CA7BT,CAsCHyC,CAAc,EAtCX,CAuCHG,CAAc,EAvCX,MA0CEA,CAAc,EAAIC,CAAlBD,EAAkCH,CAAc,EAAIC,CA1CtD,GA2CHJ,CAAO,CAAGhD,CAAM,CAACkD,CAAY,CAACE,CAAD,CAAb,CA3Cb,CA4CHH,CAAO,CAAGjD,CAAM,CAACqD,CAAY,CAACE,CAAD,CAAb,CA5Cb,CA8CY,IAAXP,EAAAA,CAAO,EAAYA,CAAO,GAAKC,CA9ChC,GAgDHR,CAAY,CACV3F,CADU,CAEVoG,CAAY,CAACE,CAAD,CAAZF,CAA2BpG,OAFjB,CAGVoG,CAAY,CAACE,CAAD,CAHF,CAIVC,CAAY,CAACE,CAAD,CAJF,CAKVhC,CALU,CAMVb,CANU,CAhDT,CAyDH0C,CAAY,EAzDT,CA0DHG,CAAY,EA1DT,IA6DDJ,CAAc,CAAGC,OACZE,CAAc,EAAIC,GACvBzG,CAAO,CAAC+F,YAAR/F,CACEwE,CAAa,CAAC+B,CAAY,CAACC,CAAc,EAAf,CAAb,CAAiC/B,CAAjC,CAA4Cb,CAA5C,CADf5D,CAEE,CAACiG,CAAS,CAAGG,CAAY,CAACC,CAAD,CAAzB,GAA8CJ,CAAS,CAACjG,OAF1DA,MAKG,IAAIwG,CAAc,CAAGC,CAArB,MACEJ,CAAc,EAAIC,CADpB,EAEHpB,CAAa,CAAClF,CAAD,CAAUoG,CAAY,CAACC,CAAc,EAAf,CAAtB,CAAbnB,CAFG,IAIA,MACCwB,CAAAA,CAAS,CAAGtD,CAAY,CAACgD,CAAD,CAAeC,CAAf,CAA+BC,CAA/B,CADzB,CAECK,CAAS,CAAG,EAFb,MAIEH,CAAc,EAAIC,CAJpB,EAIkC,IACrCP,CAAO,CAAGhD,CAAM,CAAE+C,CAAS,CAAGG,CAAY,CAACC,CAAD,CAA1B,EAChBF,CAAO,CAAGjD,CAAM,CAACqD,CAAY,CAACC,CAAD,CAAb,EAGdG,CAAS,CAACT,CAAD,CAATS,EACY,IAAXR,EAAAA,CAAO,EACNA,CAAO,GAAKjD,CAAM,CAACkD,CAAY,CAACC,CAAc,CAAG,CAAlB,CAAb,EACpB,CACe,IAAXH,EAAAA,CADJ,EAEEhB,CAAa,CAAClF,CAAD,CAAUiG,CAAV,CAFf,CAIAI,CAAc,EAJd,UAQa,IAAXF,EAAAA,CAAO,EAAYP,CAAQ,CAAC1F,IAAT0F,GAAkB3E,CAhBJ,EAiBpB,IAAXiF,EAAAA,CAjB+B,GAkBjCP,CAAY,CACV3F,CADU,CAEViG,CAAS,EAAIA,CAAS,CAACjG,OAFb,CAGViG,CAHU,CAIVM,CAAY,CAACC,CAAD,CAJF,CAKV/B,CALU,CAMVb,CANU,CAlBqB,CA0BjC4C,CAAc,EA1BmB,EA4BnCH,CAAc,EA5BqB,GA8B/BH,CAAO,GAAKC,CA9BmB,EA+BjCR,CAAY,CACV3F,CADU,CAEViG,CAAS,CAACjG,OAFA,CAGViG,CAHU,CAIVM,CAAY,CAACC,CAAD,CAJF,CAKV/B,CALU,CAMVb,CANU,CA/BqB,CAuCjC+C,CAAS,CAACR,CAAD,CAATQ,GAvCiC,CAwCjCN,CAAc,EAxCmB,EA0CO,IAApC,GAACL,CAAS,CAAGU,CAAS,CAACP,CAAD,CAAtB,CA1C6B,CAwD/BR,CAAY,CACV3F,CADU,CAEViG,CAAS,EAAIA,CAAS,CAACjG,OAFb,CAGV,IAHU,CAIVuG,CAAY,CAACC,CAAD,CAJF,CAKV/B,CALU,CAMVb,CANU,CAxDmB,EA2C/B+B,CAAY,CACV3F,CADU,CAEVA,CAAO,CAAC+F,YAAR/F,CACEgG,CAAS,CAAChG,OADZA,CAEEiG,CAAS,EAAIA,CAAS,CAACjG,OAFzBA,CAFU,CAMVgG,CANU,CAOVO,CAAY,CAACC,CAAD,CAPF,CAQV/B,CARU,CASVb,CATU,CA3CmB,CAsD/B+C,CAAS,CAACR,CAAD,CAATQ,GAtD+B,EAkEnCH,CAAc,EAlEqB,EAJlC,KA0EEH,CAAc,EAAIC,CA1EpB,EA2EyD,IAAxDpD,EAAAA,CAAM,CAAE+C,CAAS,CAAGG,CAAY,CAACC,CAAc,EAAf,CAA1B,CA3EP,EA4EDnB,CAAa,CAAClF,CAAD,CAAUiG,CAAV,CA5EZ,KAgFA,GAAIhG,CAAAA,IAAOyG,CAAAA,EACQ,IAAlBC,EAAAA,CAAS,CAAC1G,CAAD,GACXiF,CAAa,CAAClF,CAAD,CAAU0G,CAAS,CAACzG,CAAD,CAAnB,SAMjBD,CAAAA,IACF6F,CAAQ,CAAC7F,OAAT6F,CAAmB7F,GAEd6F,EAuBF,QAASe,CAAAA,CAAT,CAAehB,CAAf,CAAyBC,CAAzB,CAAmCgB,CAAnC,CAA8C,MAC7CpC,CAAAA,CAAS,CAAG,MACO,QAArB,QAAOoC,CAAAA,IACTA,CAAS,CAAGpG,QAAQ,CAACC,aAATD,CAAuBoG,CAAvBpG,GAGV8B,KAAK,CAACC,OAAND,CAAcsD,CAAdtD,EAAyB,KAAM,IAAIuE,CAAAA,CAAV,IAC7BnB,CAAY,CACVkB,CADU,CAEVjB,CAAQ,EAAIA,CAAQ,CAAC5F,OAFX,CAGV4F,CAHU,CAIVC,CAJU,CAKVpB,CALU,EAQRoB,CAAQ,GAAKD,OACW,CAAnBnB,CAAAA,CAAS,CAACK,QAAYL,CAAS,CAACsC,GAAVtC,WAGxBoB,CAAAA,qaCncT,QAASmB,CAAAA,CAAT,CAAmBC,CAAnB,CAA0BC,CAA1B,CAAmC,MAC3BC,CAAAA,CAAM,CAAID,CAAO,EAAIA,CAAO,CAACC,MAAnBD,EAA8B,EADb,CAE3BE,CAAU,CAAGD,CAAM,CAACrC,MAFO,IAG7BuC,CAAAA,CAAJ,CACID,CADJ,CAEgBE,CAAG,EACfA,CAAG,EACHA,CAAG,CAACzH,IADJyH,EAEAA,CAAG,CAACzH,IAAJyH,CAASC,UAATD,CAAoBH,CAApBG,CAFAA,EAGAA,CAAG,CAACzH,IAAJyH,CAAStD,KAATsD,CAAeF,CAAfE,CANJ,CAQgBE,CAAC,EAAIA,CAAC,EAAIA,CAAC,CAAC3H,KAXK,KAc3B4H,CAAAA,CAAO,CAAG,CAACC,CAAD,CAAWC,CAAX,GACP,SAAkBL,CAAlB,CAAuBM,CAAvB,CAAgC,MAC/BC,CAAAA,CAAO,CAAGR,CAAW,CAACC,CAAD,CADU,CAE/BQ,CAAK,CAAGC,CAAc,CAACjH,IAAfiH,CAAoBL,CAApBK,CAA8BF,CAA9BE,GAA0CL,CAAQ,CAACG,CAAD,CAF3B,OAG9BC,CAAAA,CAAK,CAAGA,CAAK,CAACR,CAAG,CAACU,IAAL,CAAWJ,CAAX,CAAR,CAA8BD,CAAQ,CAACC,CAAD,CAHpD,CAf+B,CAsB3BK,CAAO,CAAG,CACdH,KAAK,CAACR,CAAD,CAAMI,CAAN,CAAgBC,CAAhB,CAA0B,OACtBF,CAAAA,CAAO,CAACC,CAAD,CAAWC,CAAX,CAAPF,CAA4BH,CAA5BG,CAFK,CAAA,CAIdA,OAJc,CAIdA,CAJc,CAKdS,OAAO,CAACZ,CAAD,CAAMzH,CAAN,CAAY,MACXgI,CAAAA,CAAO,CAAGR,CAAW,CAACC,CAAD,QACpB,EAAsB,QAAnB,QAAOO,CAAAA,CAAP,EAA+BM,CAAQ,CAACN,CAAD,CAARM,GAAsBtI,CAAxD,EAPK,CAtBiB,CAiC3BsI,CAAQ,CAAGzG,MAAM,CAACS,MAAPT,CAAc,IAAdA,CAjCgB,KAkC5B,GAAImC,CAAAA,CAAC,CAAG,EAAGA,CAAC,CAAGoD,CAAK,CAACnC,OAAQjB,CAAC,GAAI,MAC/BhE,CAAAA,CAAI,CAAGoH,CAAK,CAACpD,CAAD,CADmB,CAGrCsE,CAAQ,CAACtI,CAAD,CAARsI,CAAiBH,CAAI,GAAK,CAAEnI,IAAI,CADXsH,CAAM,CAAGtH,CACJ,CAAsBmI,KAAAA,CAAtB,CAAL,QAGhB,CAAEG,QAAF,CAAEA,CAAF,CAAYF,QAAAA,CAAZ,OCtCIhH,CAAAA,CAAa,CAAG,EAYhBV,CAAS,CAAG,EAMZ+D,CAAQ,CAAG,+BAMXM,CAAM,CAAG,6BAMTvE,CAAY,CAAG,GAMfC,CAAW,CAAG,GF0XpB,KAAMwG,CAAAA,CAAc,CACzB5E,WAAW,EAAG,MACPkG,QAAU,+CADH,MAEPC,SAAW,UAAW,OAClB,MAAKD,OADd,EAHuB,CCla3B,KAAML,CAAAA,CAAc,CAAGrG,MAAM,CAACmB,SAAPnB,CAAiBqG,cAAxC,KEUO,SAAWlI,CAAX,CAAiBC,CAAjB,CAAwB,GAAGC,CAA3B,CAAqC,CAC1CD,CAAK,CAAGA,CAAK,EAAI,EADyB,IAEtCmF,CAAAA,EAFsC,KAGpCqD,CAAAA,CAAO,CAAG,EAH0B,CAIpCvH,CAAU,CAAG,EAJuB,IAKtC+D,CAAAA,CAAM,CAAG/E,CAAQ,CAAC+E,YAChB7E,CAAAA,CAAG,CAAGsI,OAAO,CAAC3G,GAAR2G,CAAYzI,CAAZyI,CAAmB,KAAnBA,EAN8B,KAQxB,CAAXzD,CAAAA,CAAM,EAR6B,EAQrBwD,CAAO,CAACzD,IAARyD,CAAavI,CAAQ,CAAC+E,CAAD,CAArBwD,EARqB,IAUtCC,OAAO,CAAC3G,GAAR2G,CAAYzI,CAAZyI,CAAmB,UAAnBA,CAVsC,GAWlB,CAAlBD,EAAAA,CAAO,CAACxD,MAX4B,EAYtCwD,CAAO,CAACzD,IAARyD,CAAaxI,CAAK,CAACC,QAAnBuI,CAZsC,OAcjCxI,CAAAA,CAAK,CAACC,QAd2B,EAiBlB,CAAjBuI,CAAAA,CAAO,CAACxD,MAjB2B,KAkBpCvC,KAAK,CAACC,OAAND,CAAe0C,CAAI,CAAGqD,CAAO,CAACvB,GAARuB,EAAtB/F,MACGuC,CAAM,CAAGG,CAAI,CAACH,OAAmB,CAAXA,CAAAA,CAAM,IAC/BwD,CAAO,CAACzD,IAARyD,CAAarD,CAAI,CAACH,CAAD,CAAjBwD,MAEG,IAAIrD,KAAAA,CAAI,EAAcA,KAAAA,CAAlBA,EAA2C,IAARA,EAAAA,CAAvC,CAAqD,CAArD,IAELlE,CAAAA,CAAU,CAAC8D,IAAX9D,CAAgC,QAAhB,QAAOkE,CAAAA,CAAP,CAA2BA,CAA3B,CAAkC9E,CAAe,CAAC8E,CAAD,CAAjElE,CAFK,CAtBiC,MA4BtB,UAAhB,QAAOlB,CAAAA,CA5B+B,CA6BjCA,CAAI,CAACC,CAAD,CAASA,CAAK,CAACC,QAAND,CAAiBiB,CAA1B,CA7B6B,CA+BjCnB,CAAW,CAACC,CAAD,CAAOC,CAAP,CAAciB,CAAd,CAA0B,IAA1B,CAAgCd,CAAhC,CD/BM,CC+BN,YCrBf,SAAgBuI,CAAhB,CAAuB3B,CAAvB,CAAkC4B,CAAlC,CAA+C,IAChDC,CAAAA,KAEFA,EADuB,QAArB,QAAO7B,CAAAA,EACFpG,QAAQ,CAACC,aAATD,CAAuBoG,CAAvBpG,EAEAoG,EAEL,CAAC6B,QACHC,CAAAA,OAAO,CAACC,KAARD,CACE,oMADFA,MAGAA,CAAAA,OAAO,CAACC,KAARD,2DAC4D9B,IAD5D8B,KAKE/C,CAAAA,EACA6C,CAjBgD,EAkBvB,QAAvB,QAAOA,CAAAA,CAlBuC,GAmBhDA,CAAW,CAAGhI,QAAQ,CAACC,aAATD,CAAuBgI,CAAvBhI,CAnBkC,EAqBlDmF,CAAQ,CAAGpF,CAAO,CAACiI,CAAD,CArBgC,EAuBlD7C,CAAQ,CAAG8C,CAAI,EAAIH,OAAO,CAAC3G,GAAR2G,CAAYG,CAAZH,CAAkB,OAAlBA,CAvB+B,MAyB9CpF,CAAAA,CAAK,CAAGyD,CAAK,CAAChB,CAAD,CAAW4C,CAAX,CAAkBE,CAAlB,EACnBA,CAAI,MAAJA,CAAgBvF,qBClCX,SAAa0F,CAAb,CAAsB,SAYlBC,CAAAA,EAAKV,EAAS,CACjBW,CADiB,EAEnBC,CAAM,CAACC,CAAM,CAACb,CAAD,CAAUc,CAAV,CAAP,UASDF,CAAAA,EAAOC,EAAQ,IAClBE,CAAAA,CAAI,CAAGN,CAAO,CAACM,IAARN,MACPI,EAAQ,SACSA,KAAjBC,CADQ,KAAA,CACDE,CADC,KAAZ,KAEO,IAAID,CAAI,EAAIA,CAAI,CAACrE,MAAjB,CAAyB,SACXqE,KAAjBD,CAD4B,KAAA,CACrBE,CADqB,KAAzB,CAAA,IAGLF,CAAAA,CAAK,CAAG,EAHH,CAKHE,CATkB,EAUpBA,CAAM,CAACN,CAAD,CAVc,CAYtBO,CAAI,CAACH,CAAD,CAAQJ,CAAR,UASGxF,CAAAA,GAAM,CACTyF,CADS,GAEXA,CAAS,GAFE,CAGP3D,CAHO,EAITA,CAAI,CAAC8D,CAAD,CAJK,EA5CY,KACrBD,CAAAA,CAAM,CAAGJ,CAAO,CAACI,MADI,CAErBI,CAAI,CAAGR,CAAO,CAACQ,IAFM,CAGrBjE,CAAI,CAAGyD,CAAO,CAACzD,IAHM,IAIvB8D,CAAAA,CAJuB,CAIhBE,CAJgB,CAKvBL,CAAS,GALc,OAsC3BC,CAAAA,CAAM,CAACE,CAAD,EAcC5F,WJnBF,SAAe2D,CAAf,CAAsBC,CAAtB,CAA+B,SACNF,CAAS,CAACC,CAAD,CAAQC,CAAR,EAA/BiB,CAD4B,GAC5BA,SAAUF,CADkB,GAClBA,YACb,KAAMhI,CAAAA,IAAOgI,CAAAA,EAChBE,CAAQ,CAAClI,CAAD,CAARkI,CAAgBF,CAAO,CAAChI,CAAD,CAAvBkI,OAEKA,CAAAA,eK5CF,SAAmBiB,CAAnB,CAA2BE,CAA3B,CAAqC,OACrCF,CAAAA,CADqC,CAInCN,CAAI,EACT,QAASS,CAAAA,CAAT,CAAmBnB,CAAnB,CAA4B,OAC1BU,CAAAA,CAAI,CAACQ,CAAQ,CAAClB,CAAD,CAAT,EACGgB,CAAM,CAACG,CAAD,CAHjB,CAJ0C"} \ No newline at end of file +{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/mapEffect.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object.<string, any> | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.<string, any>} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Create a virtual node represeting an element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n return createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, vnodeFromChild),\n element,\n null,\n RECYCLED_NODE\n )\n}\n\n/**\n * Cycle through the child nodes of an element and create virtual nodes of them.\n * @param {Element} element\n * @return {VNode} VNode\n */\nfunction vnodeFromChild(element) {\n if (element.nodeType === 3) {\n return createTextVNode(element.nodeValue, element)\n } else {\n return hydrate(element)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.<string, any>[]} objects One or more objects to use for merging.\n * @return {Object.<string, any>} Object.<string, any>\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object<string, any>} Object<string, any>\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n","import { RECYCLED_NODE, TEXT_NODE, XLINK_NS, SVG_NS } from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.<string, any>} Object.<string, any>\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n for (; startCount <= end; startCount++) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n } else if (prop === 'style') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop in element &&\n prop !== 'list' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop !== 'translate' &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n if (nullOrFalse) {\n element.removeAttribute(prop)\n }\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, lifecycle, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n lifecycle.push(function() {\n props['onmount'](element)\n })\n }\n\n for (let i = 0, length = vnode.children.length; i < length; i++) {\n element.appendChild(createElement(vnode.children[i], lifecycle, isSVG))\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} node\n * @return {Element}\n */\nfunction removeChildren(node) {\n for (let i = 0, length = node.children.length; i < length; i++) {\n removeChildren(node.children[i])\n }\n\n return node.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(done, vnode.element)\n } else {\n done()\n }\n}\n\n/**\n * Update and element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {Lifecycle} lifecycle\n * @param {boolean} isSVG\n * @param {boolean} isRecycled\n * @return {void} undefined\n */\nfunction updateElement(\n element,\n oldProps,\n newProps,\n lifecycle,\n isSVG,\n isRecycled\n) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb = isRecycled ? newProps['onmount'] : newProps['onupdate']\n if (cb != null) {\n lifecycle.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, lifecycle, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, lifecycle, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n lifecycle,\n (isSVG = isSVG || newVNode.type === 'svg'),\n oldVNode.flag === RECYCLED_NODE\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let lastChildren = oldVNode.children\n let lastChildStart = 0\n let lastChildEnd = lastChildren.length - 1\n\n let nextKey\n const nextChildren = newVNode.children\n let nextChildStart = 0\n let nextChildEnd = nextChildren.length - 1\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildStart])\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildStart].element,\n lastChildren[lastChildStart],\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n\n lastChildStart++\n nextChildStart++\n }\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildEnd])\n nextKey = getKey(nextChildren[nextChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildEnd].element,\n lastChildren[lastChildEnd],\n nextChildren[nextChildEnd],\n lifecycle,\n isSVG\n )\n\n lastChildEnd--\n nextChildEnd--\n }\n\n if (lastChildStart > lastChildEnd) {\n while (nextChildStart <= nextChildEnd) {\n element.insertBefore(\n createElement(nextChildren[nextChildStart++], lifecycle, isSVG),\n (childNode = lastChildren[lastChildStart]) && childNode.element\n )\n }\n } else if (nextChildStart > nextChildEnd) {\n while (lastChildStart <= lastChildEnd) {\n removeElement(element, lastChildren[lastChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(lastChildren, lastChildStart, lastChildEnd)\n const nextKeyed = {}\n\n while (nextChildStart <= nextChildEnd) {\n lastKey = getKey((childNode = lastChildren[lastChildStart]))\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(lastChildren[lastChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n lastChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextChildStart++\n }\n lastChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n lastChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n }\n }\n nextChildStart++\n }\n }\n\n while (lastChildStart <= lastChildEnd) {\n if (getKey((childNode = lastChildren[lastChildStart++])) == null) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n const lifecycle = []\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(\n container,\n oldVNode && oldVNode.element,\n oldVNode,\n newVNode,\n lifecycle\n )\n\n if (newVNode !== oldVNode) {\n while (lifecycle.length > 0) lifecycle.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction safeUnion(types, options) {\n const prefix = (options && options.prefix) || ''\n const prefixSize = prefix.length\n let stripPrefix\n if (prefixSize) {\n stripPrefix = tag =>\n tag &&\n tag.type &&\n tag.type.startsWith(prefix) &&\n tag.type.slice(prefixSize)\n } else {\n stripPrefix = x => x && x.type\n }\n\n const matcher = (handlers, catchAll) => {\n return function _matcher(tag, context) {\n const tagType = stripPrefix(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n const methods = {\n match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n },\n matcher,\n matches(tag, type) {\n const tagType = stripPrefix(tag)\n return !!(typeof tagType === 'string' && variants[tagType] === type)\n }\n }\n\n const variants = Object.create(null)\n for (let i = 0; i < types.length; i++) {\n const type = types[i]\n const prefixedType = prefix + type\n variants[type] = data => ({ type: prefixedType, data })\n }\n\n return { variants, methods }\n}\n\nexport function union(types, options) {\n const { variants, methods } = safeUnion(types, options)\n for (const key in methods) {\n variants[key] = methods[key]\n }\n return variants\n}\n","/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.<string, any>} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let length = children.length\n const key = Reflect.get(props, 'key')\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (Reflect.get(props, 'children')) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n for (length = node.length; length-- > 0; ) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(<Title message='Hello World!'/>, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {Element | string} container\n * @param { Element | string } [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n let cont\n if (typeof container === 'string') {\n cont = document.querySelector(container)\n } else {\n cont = container\n }\n if (!cont) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n oldVNode = hydrate(hydrateThis)\n } else {\n oldVNode = cont && Reflect.get(cont, 'vnode')\n }\n const vnode = patch(oldVNode, VNode, cont)\n cont['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @typedef {any} State\n * @typedef {Function} Effect\n * @typedef {Object<string, any>} Program\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.done]\n * @param {Program} program\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const done = program.done\n let state, effect\n let isRunning = true\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(message, state))\n }\n }\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n } else {\n state = []\n }\n if (effect) {\n effect(send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n function endProgram() {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n return endProgram\n}\n","/**\n * Map effects to ease composition of runtime programs.\n * @param {Function} effect\n * @param {Function} callback\n * @return {Function} Function\n */\nexport function mapEffect(effect, callback) {\n if (!effect) {\n return\n }\n return send =>\n function intercept(message) {\n send(callback(message))\n return effect(intercept)\n }\n}\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","TEXT_NODE","hydrate","document","querySelector","nodeName","toLowerCase","map","call","childNodes","vnodeFromChild","RECYCLED_NODE","nodeType","nodeValue","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","nullOrFalse","removeAttribute","setAttributeNS","XLINK_NS","setAttribute","createElement","lifecycle","createTextNode","createElementNS","SVG_NS","push","length","appendChild","removeChildren","node","removeElement","parent","done","removeChild","cb","updateElement","oldProps","newProps","isRecycled","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","lastChildren","lastChildStart","lastChildEnd","nextChildren","nextChildStart","nextChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","safeUnion","types","options","prefix","prefixSize","stripPrefix","tag","startsWith","x","matcher","handlers","catchAll","context","tagType","match","hasOwnProperty","data","methods","matches","variants","message","toString","tempBox","Reflect","VNode","hydrateThis","cont","console","error","program","send","isRunning","updateView","update","state","init","effect","view","endProgram","callback","intercept"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 192c301..d6541c0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "0.9.2", + "version": "0.9.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b0e986a..16ec607 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "0.9.2", + "version": "0.9.3", "description": "A JavaScript library for creating websites, PWAs and hybrid apps.", "main": "src/index.js", "scripts": { diff --git a/src/runtime.js b/src/runtime.js index a907aa1..6327626 100644 --- a/src/runtime.js +++ b/src/runtime.js @@ -24,7 +24,7 @@ export function run(program) { */ function send(message) { if (isRunning) { - change(update(message, state)) + updateView(update(message, state)) } } @@ -33,7 +33,7 @@ export function run(program) { * @param {any[]} update * @return {void} undefined */ - function change(update) { + function updateView(update) { let init = program.init() if (update) { ;[state, effect] = update @@ -48,13 +48,13 @@ export function run(program) { view(state, send) } - change(state) + updateView(state) /** * Function to end runtime. * @return {void} undefined */ - function end() { + function endProgram() { if (isRunning) { isRunning = false if (done) { @@ -62,5 +62,5 @@ export function run(program) { } } } - return end + return endProgram }