UNPKG

55.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"core.js","sources":["../src/core/hooks.js","../src/core/render/diff-props.js","../src/core/vnode.js","../src/core/render/diff.js","../src/core/render/render.js","../src/core/element/utils.js","../src/core/task.js","../src/core/element/element.js","../src/core/element/hooks.js"],"sourcesContent":["import {\r\n HOOK_MOUNT,\r\n HOOK_UPDATE,\r\n HOOK_CURRENT,\r\n HOOK_MOUNTED,\r\n HOOK_UPDATED,\r\n HOOK_UNMOUNT,\r\n ARRAY_EMPTY\r\n} from \"./constants\";\r\nimport { isFunction, isEqualArray } from \"./utils\";\r\n\r\nfunction update(hook, type) {\r\n hook[0] && (hook[1] = hook[0](hook[1], type));\r\n}\r\n\r\nfunction updateAll(hooks, type) {\r\n for (let i in hooks) update(hooks[i], type);\r\n}\r\n\r\nexport function useHook(reducer, initialState) {\r\n if (HOOK_CURRENT.ref.hook) {\r\n return HOOK_CURRENT.ref.hook.use(reducer, initialState)[1];\r\n }\r\n}\r\n\r\nexport function useRender() {\r\n return HOOK_CURRENT.ref.render;\r\n}\r\n\r\nexport function useHost() {\r\n return useHook(0, { current: HOOK_CURRENT.ref.host });\r\n}\r\n\r\nexport function createHookCollection(render, host) {\r\n let hooks = {};\r\n let mounted;\r\n let hook = {\r\n use,\r\n load,\r\n updated,\r\n unmount\r\n };\r\n\r\n let ref = { hook, host, render };\r\n\r\n function load(callback, param) {\r\n HOOK_CURRENT.index = 0;\r\n HOOK_CURRENT.ref = ref;\r\n let resolve = callback(param);\r\n HOOK_CURRENT.ref = 0;\r\n return resolve;\r\n }\r\n function use(reducer, state) {\r\n let index = HOOK_CURRENT.index++;\r\n let mount;\r\n // record the hook and the initial state of this\r\n if (!hooks[index]) {\r\n hooks[index] = [null, state];\r\n mount = 1;\r\n }\r\n // The hook always receives the last reduce.\r\n hooks[index][0] = reducer;\r\n update(hooks[index], mount ? HOOK_MOUNT : HOOK_UPDATE);\r\n return hooks[index];\r\n }\r\n function updated() {\r\n let type = mounted ? HOOK_UPDATED : HOOK_MOUNTED;\r\n mounted = 1;\r\n updateAll(hooks, type);\r\n }\r\n function unmount() {\r\n updateAll(hooks, HOOK_UNMOUNT);\r\n }\r\n return hook;\r\n}\r\n\r\nexport function useState(initialState) {\r\n let render = useRender();\r\n return useHook((state, type) => {\r\n if (HOOK_MOUNT == type) {\r\n state[0] = isFunction(initialState) ? initialState() : initialState;\r\n state[1] = nextState => {\r\n nextState = isFunction(nextState)\r\n ? nextState(state[0])\r\n : nextState;\r\n if (nextState != state[0]) {\r\n state[0] = nextState;\r\n render();\r\n }\r\n };\r\n }\r\n return state;\r\n }, []);\r\n}\r\n\r\nexport function useEffect(callback, args) {\r\n // define whether the effect in the render cycle should be regenerated\r\n let executeEffect;\r\n useHook((state, type) => {\r\n if (executeEffect == null) {\r\n executeEffect =\r\n args && state[0] ? !isEqualArray(args, state[0]) : true;\r\n state[0] = args;\r\n }\r\n\r\n switch (type) {\r\n case HOOK_UPDATE:\r\n case HOOK_UNMOUNT:\r\n // save the current args, for comparison\r\n if ((executeEffect || type == HOOK_UNMOUNT) && state[1]) {\r\n // compare the previous snapshot with the generated state\r\n state[1]();\r\n // clean the effect collector\r\n state[1] = 0;\r\n }\r\n // delete the previous argument for a hook\r\n // run if the hook is inserted in a new node\r\n // Why? ... to perform again dom operations associated with the parent\r\n if (type == HOOK_UNMOUNT) {\r\n state[0] = null;\r\n }\r\n break;\r\n case HOOK_MOUNTED:\r\n case HOOK_UPDATED:\r\n // save the current args, for comparison, repeats due to additional type HOOK_MOUNTED\r\n if (executeEffect || type == HOOK_MOUNTED) {\r\n // save the effect collector\r\n state[1] = callback();\r\n }\r\n // save the comparison argument\r\n break;\r\n }\r\n return state;\r\n }, []);\r\n}\r\n\r\nexport function useRef(current) {\r\n return useHook(0, { current });\r\n}\r\n\r\nexport function useMemo(callback, args = ARRAY_EMPTY) {\r\n let state = useHook(0, []);\r\n\r\n if (!state[0] || (state[0] && !isEqualArray(state[0], args))) {\r\n state[1] = callback();\r\n }\r\n state[0] = args;\r\n return state[1];\r\n}\r\n\r\nexport function useReducer(reducer, initialState) {\r\n let render = useRender();\r\n let hook = useHook((state, type) => {\r\n if (HOOK_MOUNT == type) {\r\n state[0] = initialState;\r\n state[1] = action => {\r\n let nextState = state[2](state[0], action);\r\n if (nextState != state[0]) {\r\n state[0] = nextState;\r\n render();\r\n }\r\n };\r\n }\r\n return state;\r\n }, []);\r\n // allows the reduce to always access the scope of the component\r\n hook[2] = reducer;\r\n\r\n return hook;\r\n}\r\n/**\r\n * @todo add test use callback\r\n */\r\nexport function useCallback(callback, args = ARRAY_EMPTY) {\r\n return useMemo(() => callback, args);\r\n}\r\n","import {\r\n CACHE_STYLE_SHEET,\r\n IGNORE_CHILDREN,\r\n HYDRATE_PROPS,\r\n KEY,\r\n SUPPORT_STYLE_SHEET\r\n} from \"../constants\";\r\nimport { isFunction } from \"../utils\";\r\n/**\r\n *\r\n * @param {import(\"./render\").HTMLNode} node\r\n * @param {Object} props\r\n * @param {Object} nextProps\r\n * @param {boolean} isSvg\r\n * @param {Object} handlers\r\n **/\r\nexport function diffProps(node, props, nextProps, isSvg, handlers) {\r\n props = props || {};\r\n\r\n for (let key in props) {\r\n if (!(key in nextProps)) {\r\n setProperty(node, key, props[key], null, isSvg, handlers);\r\n }\r\n }\r\n let ignoreChildren;\r\n for (let key in nextProps) {\r\n setProperty(node, key, props[key], nextProps[key], isSvg, handlers);\r\n ignoreChildren = ignoreChildren || IGNORE_CHILDREN[key];\r\n }\r\n return ignoreChildren;\r\n}\r\n\r\nfunction setProperty(node, key, prevValue, nextValue, isSvg, handlers) {\r\n key = key == \"class\" && !isSvg ? \"className\" : key;\r\n // define empty value\r\n prevValue = prevValue == null ? null : prevValue;\r\n nextValue = nextValue == null ? null : nextValue;\r\n\r\n if (key in node && HYDRATE_PROPS[key]) {\r\n prevValue = node[key];\r\n }\r\n\r\n if (nextValue === prevValue) return;\r\n\r\n if (\r\n key[0] == \"o\" &&\r\n key[1] == \"n\" &&\r\n (isFunction(nextValue) || isFunction(prevValue))\r\n ) {\r\n setEvent(node, key, nextValue, handlers);\r\n return;\r\n }\r\n\r\n switch (key) {\r\n /**\r\n * add support {@link https://developer.mozilla.org/es/docs/Web/API/CSSStyleSheet}\r\n */\r\n case \"styleSheet\":\r\n if (SUPPORT_STYLE_SHEET)\r\n node.shadowRoot.adoptedStyleSheets = []\r\n .concat(nextValue)\r\n .map(cssText => {\r\n if (cssText instanceof CSSStyleSheet) {\r\n return cssText;\r\n }\r\n if (!CACHE_STYLE_SHEET[cssText]) {\r\n CACHE_STYLE_SHEET[cssText] = new CSSStyleSheet();\r\n CACHE_STYLE_SHEET[cssText].replace(cssText);\r\n }\r\n\r\n return CACHE_STYLE_SHEET[cssText];\r\n });\r\n\r\n break;\r\n case \"ref\":\r\n if (nextValue) nextValue.current = node;\r\n break;\r\n case \"style\":\r\n setStyle(node, prevValue || \"\", nextValue || \"\");\r\n break;\r\n case \"key\":\r\n node[KEY] = nextValue;\r\n break;\r\n default:\r\n if (!isSvg && key != \"list\" && key in node) {\r\n node[key] = nextValue == null ? \"\" : nextValue;\r\n } else if (nextValue == null) {\r\n node.removeAttribute(key);\r\n } else {\r\n node.setAttribute(\r\n key,\r\n typeof nextValue == \"object\"\r\n ? JSON.stringify(nextValue)\r\n : nextValue\r\n );\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {import(\"./render\").HTMLNode} node\r\n * @param {string} type\r\n * @param {function} [nextHandler]\r\n * @param {object} handlers\r\n */\r\nexport function setEvent(node, type, nextHandler, handlers) {\r\n // get the name of the event to use\r\n type = type.slice(type[2] == \"-\" ? 3 : 2);\r\n // add handleEvent to handlers\r\n if (!handlers.handleEvent) {\r\n /**\r\n * {@link https://developer.mozilla.org/es/docs/Web/API/EventTarget/addEventListener#The_value_of_this_within_the_handler}\r\n **/\r\n handlers.handleEvent = event => handlers[event.type].call(node, event);\r\n }\r\n if (nextHandler) {\r\n // create the subscriber if it does not exist\r\n if (!handlers[type]) {\r\n node.addEventListener(type, handlers);\r\n }\r\n // update the associated event\r\n handlers[type] = nextHandler;\r\n } else {\r\n // \tdelete the associated event\r\n if (handlers[type]) {\r\n node.removeEventListener(type, handlers);\r\n delete handlers[type];\r\n }\r\n }\r\n}\r\n/**\r\n * define style as string inline,this generates less mutation\r\n * to the sun and cleans the previously defined properties.\r\n * @param {import(\"./render\").HTMLNode} node\r\n * @param {(string|object)} prevValue\r\n * @param {(string|object)} nextValue\r\n */\r\nfunction setStyle(node, prevValue, nextValue) {\r\n let style = node.style,\r\n prevIsObject;\r\n if (typeof prevValue == \"object\") {\r\n prevIsObject = true;\r\n for (let key in prevValue) {\r\n if (!(key in nextValue)) setPropertyStyle(style, key, null);\r\n }\r\n }\r\n if (typeof nextValue == \"object\") {\r\n for (let key in nextValue) {\r\n let value = nextValue[key];\r\n if (prevIsObject && prevValue[key] === value) continue;\r\n setPropertyStyle(style, key, value);\r\n }\r\n } else {\r\n style.cssText = nextValue;\r\n }\r\n}\r\n\r\nfunction setPropertyStyle(style, key, value) {\r\n let method = \"setProperty\";\r\n if (value == null) {\r\n method = \"removeProperty\";\r\n value = null;\r\n }\r\n if (~key.indexOf(\"-\")) {\r\n style[method](key, value);\r\n } else {\r\n style[key] = value;\r\n }\r\n}\r\n","import {\r\n SUPPORT_STYLE_SHEET,\r\n META_STYLE_SHEET,\r\n META_MAP_CHILDREN,\r\n STYLE_SHEET_KEY,\r\n META_KEYES\r\n} from \"./constants\";\r\n\r\nimport { isArray, isFunction } from \"./utils\";\r\n\r\nlet vNodeEmpty = createElement(null, { children: \"\" });\r\n\r\n/**\r\n * @param {VnodeType} nodeType\r\n * @param {VnodeProps} [props]\r\n * @param {Vnode|Vnode[]} [children]\r\n * @returns {Vnode}\r\n **/\r\nexport function createElement(nodeType, props, ...children) {\r\n let vnode = { children, ...props, nodeType: nodeType || null };\r\n return vnode;\r\n}\r\n/**\r\n * toVnode, processes the object for correct use within the diff process.\r\n **/\r\nexport function toVnode(value) {\r\n if (isVnodeValue(value)) {\r\n return value;\r\n } else {\r\n if (!value[META_MAP_CHILDREN]) {\r\n let scan = mapChildren(value.children);\r\n value.children = scan.children;\r\n if (scan.keyes) {\r\n value[META_KEYES] = scan.keyes;\r\n }\r\n value[META_MAP_CHILDREN] = true;\r\n }\r\n if (value.styleSheet && !SUPPORT_STYLE_SHEET) {\r\n if (!value[META_STYLE_SHEET]) {\r\n value.children.unshift(\r\n toVnode(\r\n createElement(\r\n \"style\",\r\n value[META_KEYES] ? { key: STYLE_SHEET_KEY } : {},\r\n value.styleSheet\r\n )\r\n )\r\n );\r\n if (value[META_KEYES]) {\r\n value[META_KEYES].unshift(STYLE_SHEET_KEY);\r\n }\r\n }\r\n value[META_STYLE_SHEET] = true;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nfunction mapChildren(children, scan = { children: [] }, deep = 0) {\r\n if (isArray(children)) {\r\n let length = children.length;\r\n for (let i = 0; i < length; i++) {\r\n mapChildren(children[i], scan, deep + 1);\r\n }\r\n } else {\r\n if (children == null && !deep) return scan;\r\n\r\n let vnode = toVnode(children);\r\n\r\n if (vnode != null && typeof vnode == \"object\") {\r\n if (isFunction(vnode.nodeType)) {\r\n let { nodeType, ...props } = vnode;\r\n return mapChildren(nodeType(props), scan, deep + 1);\r\n }\r\n if (\"key\" in vnode) {\r\n scan.keyes = scan.keyes || [];\r\n if (!~scan.keyes.indexOf(vnode.key)) {\r\n scan.keyes.push(vnode.key);\r\n }\r\n }\r\n }\r\n\r\n scan.children.push(vnode);\r\n }\r\n return scan;\r\n}\r\n\r\nexport function isVnodeEmpty(value) {\r\n let type = typeof value;\r\n return value == null || type == \"boolean\" || type == \"function\";\r\n}\r\n\r\nexport function fillVnodeValue(value) {\r\n return isVnodeEmpty(value)\r\n ? vNodeEmpty\r\n : createElement(null, { children: \"\" + value });\r\n}\r\n\r\nexport function isVnodeValue(value) {\r\n let type = typeof value;\r\n return (\r\n value == null ||\r\n type == \"string\" ||\r\n type == \"number\" ||\r\n type == \"function\" ||\r\n type == \"boolean\"\r\n );\r\n}\r\n\r\n/**\r\n * @typedef {(Object<string,any>)} VnodeProps;\r\n *\r\n * @typedef {(Function|string)} VnodeType;\r\n *\r\n * @typedef {{type:VnodeType,props:VnodeProps}} Vnode\r\n **/\r\n","import {\r\n KEY,\r\n META_KEYES,\r\n NODE_TYPE,\r\n NODE_HOST,\r\n JOIN_CHILDREN\r\n} from \"../constants\";\r\nimport { diffProps } from \"./diff-props\";\r\nimport { isVnodeValue, fillVnodeValue } from \"../vnode\";\r\n/**\r\n *\r\n * @param {import(\"./render\").ConfigRender} config\r\n * @param {import(\"./render\").HTMLNode} node\r\n * @param {import(\"./vnode\").Vnode} nextVnode\r\n * @param {boolean} isSvg\r\n * @param {Function} currentUpdateComponent\r\n * @return {import(\"./render\").HTMLNode}\r\n **/\r\nexport function diff(id, node, nextVnode, isSvg) {\r\n let { vnode, handlers = {} } = (node && node[id]) || {};\r\n\r\n if (vnode == nextVnode && vnode != null) return node;\r\n\r\n nextVnode = isVnodeValue(nextVnode) ? fillVnodeValue(nextVnode) : nextVnode;\r\n\r\n let { nodeType, shadowDom, children, ...props } = vnode || {};\r\n\r\n let {\r\n nodeType: nextNodeType,\r\n shadowDom: nextShadowDom,\r\n children: nextChildren,\r\n ...nextProps\r\n } = nextVnode;\r\n\r\n isSvg = isSvg || nextNodeType == \"svg\";\r\n\r\n if (nextNodeType != NODE_HOST && getNodeName(node) !== nextNodeType) {\r\n let nextNode = createNode(nextNodeType, isSvg);\r\n let parent = node && node.parentNode;\r\n\r\n if (parent) {\r\n parent.replaceChild(nextNode, node);\r\n }\r\n\r\n node = nextNode;\r\n handlers = {};\r\n }\r\n if (JOIN_CHILDREN[nextNodeType]) {\r\n nextNodeType = null;\r\n nextChildren = nextChildren.join(\"\");\r\n }\r\n if (nextNodeType == null) {\r\n if (node.textContent != nextChildren) {\r\n node.textContent = nextChildren;\r\n }\r\n } else {\r\n if (shadowDom != nextShadowDom) {\r\n let { shadowRoot } = node;\r\n let mode =\r\n nextShadowDom && !shadowRoot\r\n ? \"open\"\r\n : !nextShadowDom && shadowRoot\r\n ? \"closed\"\r\n : 0;\r\n if (mode) node.attachShadow({ mode });\r\n }\r\n\r\n let ignoreChildren = diffProps(\r\n node,\r\n props,\r\n nextProps,\r\n isSvg,\r\n handlers,\r\n id\r\n );\r\n if (!ignoreChildren && children != nextChildren) {\r\n diffChildren(\r\n id,\r\n nextShadowDom ? node.shadowRoot : node,\r\n nextChildren,\r\n nextProps[META_KEYES],\r\n isSvg\r\n );\r\n }\r\n }\r\n node[id] = { vnode: nextVnode, handlers };\r\n return node;\r\n}\r\n/**\r\n *\r\n * @param {import(\"./render\").ConfigRender} config\r\n * @param {import(\"./render\").HTMLNode} parent\r\n * @param {import(\"./vnode\").Vnode[]} [nextChildren]\r\n * @param {boolean} isSvg\r\n */\r\nexport function diffChildren(id, parent, children, keyes, isSvg) {\r\n let childrenLenght = children.length;\r\n let { childNodes } = parent;\r\n let childNodesKeyes = {};\r\n let childNodesLength = childNodes.length;\r\n let index = keyes\r\n ? 0\r\n : childNodesLength > childrenLenght\r\n ? childrenLenght\r\n : childNodesLength;\r\n\r\n for (; index < childNodesLength; index++) {\r\n let childNode = childNodes[index];\r\n let key = index;\r\n if (keyes) {\r\n key = childNode[KEY];\r\n if (keyes.indexOf(key) > -1) {\r\n childNodesKeyes[key] = childNode;\r\n continue;\r\n }\r\n }\r\n index--;\r\n childNodesLength--;\r\n parent.removeChild(childNode);\r\n }\r\n for (let i = 0; i < childrenLenght; i++) {\r\n let child = children[i];\r\n let indexChildNode = childNodes[i];\r\n let key = keyes ? child.key : i;\r\n let childNode = keyes ? childNodesKeyes[key] : indexChildNode;\r\n\r\n if (keyes && childNode) {\r\n if (childNode != indexChildNode) {\r\n parent.insertBefore(childNode, indexChildNode);\r\n }\r\n }\r\n\r\n let nextChildNode = diff(id, childNode, child, isSvg);\r\n\r\n if (!childNode) {\r\n if (childNodes[i]) {\r\n parent.insertBefore(nextChildNode, childNodes[i]);\r\n } else {\r\n parent.appendChild(nextChildNode);\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n *\r\n * @param {string} type\r\n * @param {boolean} isSvg\r\n * @returns {import(\"./render\").HTMLNode}\r\n */\r\nexport function createNode(type, isSvg) {\r\n let doc = document;\r\n let nextNode;\r\n if (type != null) {\r\n nextNode = isSvg\r\n ? doc.createElementNS(\"http://www.w3.org/2000/svg\", type)\r\n : doc.createElement(type);\r\n } else {\r\n nextNode = doc.createTextNode(\"\");\r\n }\r\n return nextNode;\r\n}\r\n\r\n/**\r\n * returns the localName of the node\r\n * @param {import(\"./render\").HTMLNode} node\r\n */\r\nexport function getNodeName(node) {\r\n if (!node) return;\r\n if (!node[NODE_TYPE]) {\r\n node[NODE_TYPE] = node.nodeName.toLowerCase();\r\n }\r\n let localName = node[NODE_TYPE];\r\n return localName == \"#text\" ? null : localName;\r\n}\r\n","import { diff } from \"./diff\";\r\nimport { toVnode, createElement } from \"../vnode\";\r\nimport { NODE_HOST } from \"../constants\";\r\n\r\nexport function render(vnode, node, id = \"vnode\") {\r\n if (\r\n vnode != null &&\r\n typeof vnode == \"object\" &&\r\n vnode.nodeType != NODE_HOST\r\n ) {\r\n vnode = createElement(NODE_HOST, { children: vnode });\r\n }\r\n vnode = toVnode(vnode);\r\n diff(id, node, vnode);\r\n return node;\r\n}\r\n","import { ELEMENT_TRUE_VALUES } from \"../constants\";\r\n\r\nexport function setAttr(node, attr, value) {\r\n if (value == null) {\r\n node.removeAttribute(attr);\r\n } else {\r\n node.setAttribute(\r\n attr,\r\n typeof value == \"object\" ? JSON.stringify(value) : value\r\n );\r\n }\r\n}\r\n\r\nexport function formatType(value, type = String) {\r\n try {\r\n if (type == Boolean) {\r\n value = ELEMENT_TRUE_VALUES.indexOf(value) > -1;\r\n } else if (typeof value == \"string\") {\r\n value =\r\n type == Number\r\n ? Number(value)\r\n : type == Object || type == Array\r\n ? JSON.parse(value)\r\n : type == Date\r\n ? new Date(value)\r\n : value;\r\n }\r\n if ({}.toString.call(value) == `[object ${type.name}]`) {\r\n return { value, error: type == Number && Number.isNaN(value) };\r\n }\r\n } catch (e) {}\r\n\r\n return { value, error: true };\r\n}\r\n\r\nexport function propToAttr(prop) {\r\n return prop.replace(/([A-Z])/g, \"-$1\").toLowerCase();\r\n}\r\n\r\nexport function attrToProp(attr) {\r\n return attr.replace(/-(\\w)/g, (all, letter) => letter.toUpperCase());\r\n}\r\n\r\nexport function dispatchEvent(node, type, customEventInit) {\r\n node.dispatchEvent(\r\n new CustomEvent(\r\n type,\r\n typeof customEventInit == \"object\" ? customEventInit : null\r\n )\r\n );\r\n}\r\n","let defer = Promise.resolve();\r\nlet queue = [];\r\nlet running;\r\n\r\nlet maxFps = 1000 / 60;\r\n\r\nexport const IMPORTANT = Symbol(\"important\");\r\n\r\nexport function clearQueue() {\r\n let time = performance.now();\r\n\r\n let length = queue.length;\r\n let current = queue;\r\n\r\n queue = [];\r\n\r\n while (length--) {\r\n let callback = current[length];\r\n if (callback[IMPORTANT] || performance.now() - time < maxFps) {\r\n callback();\r\n } else {\r\n queue = queue.concat(current.slice(0, length + 1));\r\n break;\r\n }\r\n }\r\n\r\n if (queue.length) {\r\n requestAnimationFrame(clearQueue);\r\n return;\r\n }\r\n running = false;\r\n}\r\n/**\r\n * add a task to the queue\r\n * @param {Function} callback\r\n * @returns {Promise} Generate a promise that show if the queue is complete\r\n */\r\nexport function addQueue(callback) {\r\n if (!running) {\r\n running = true;\r\n defer.then(clearQueue);\r\n }\r\n if (!queue.includes(callback)) queue.push(callback);\r\n}\r\n","import { ELEMENT_PROPS, ELEMENT_IGNORE_ATTR } from \"../constants\";\r\nimport { createHookCollection } from \"../hooks\";\r\nimport { render } from \"../render/render\";\r\nimport {\r\n formatType,\r\n setAttr,\r\n propToAttr,\r\n attrToProp,\r\n dispatchEvent\r\n} from \"./utils\";\r\n\r\nimport { isFunction, promise } from \"../utils\";\r\nimport { createElement } from \"../vnode\";\r\nimport { addQueue, IMPORTANT } from \"../task\";\r\n\r\nfunction load(self) {\r\n if (self.mount) return;\r\n\r\n let id = Symbol(\"vnode\");\r\n\r\n let isPrevent;\r\n let isUnmount;\r\n\r\n self[ELEMENT_PROPS] = {};\r\n\r\n let isMounted;\r\n\r\n let resolveUpdate;\r\n\r\n let rerender = () => {\r\n // disables blocking, allowing the cycle to be regenerate\r\n isPrevent = false;\r\n // After the first render it disables the important condition\r\n if (rerender[IMPORTANT]) rerender[IMPORTANT] = false;\r\n try {\r\n render(\r\n hooks.load(self.render, { ...self[ELEMENT_PROPS] }),\r\n self,\r\n id\r\n );\r\n\r\n resolveUpdate();\r\n } catch (e) {\r\n self.error(e);\r\n }\r\n };\r\n // mark the first render as important, self speeds up the rendering\r\n rerender[IMPORTANT] = true;\r\n\r\n self.update = () => {\r\n if (isUnmount) return;\r\n let rendered = self.rendered;\r\n if (!isPrevent) {\r\n isPrevent = true;\r\n // create a promise to observe the status of the update\r\n rendered = promise(resolve => (resolveUpdate = resolve)).then(\r\n // the UPDATED state is only propagated through\r\n // the resolution of the promise\r\n // Why? ... to improve communication between web-component parent and children\r\n hooks.updated\r\n );\r\n\r\n // if the component is already mounted, avoid using self.mounted,\r\n // to speed up the microtask\r\n isMounted\r\n ? addQueue(rerender)\r\n : self.mounted.then(() => {\r\n isMounted = true;\r\n addQueue(rerender);\r\n });\r\n }\r\n\r\n return (self.rendered = rendered);\r\n };\r\n\r\n // any update from hook is added to a separate queue\r\n let hooks = createHookCollection(() => addQueue(self.update), self);\r\n\r\n // creates a collection of microtask\r\n // associated with the mounted of the component\r\n\r\n self.mounted = promise(\r\n resolve =>\r\n (self.mount = () => {\r\n isMounted = false;\r\n // allows the reuse of the component when it is isUnmounted and mounted\r\n if (isUnmount == true) {\r\n isUnmount = false;\r\n self.mounted = self.update();\r\n }\r\n resolve();\r\n })\r\n );\r\n /**\r\n * creates a collection of microtask\r\n * associated with the unmounted of the component\r\n */\r\n self.unmounted = promise(\r\n resolve =>\r\n (self.unmount = () => {\r\n isUnmount = true;\r\n hooks.unmount();\r\n resolve();\r\n })\r\n );\r\n\r\n self.initialize();\r\n\r\n self.update();\r\n}\r\n\r\nclass AtomicoElement extends HTMLElement {\r\n constructor() {\r\n super();\r\n /**\r\n * identifier to store the virtual-dom state,\r\n * this is unique between instances of the\r\n * component to securely consider the host status\r\n */\r\n load(this);\r\n }\r\n connectedCallback() {\r\n load(this);\r\n this.mount();\r\n }\r\n disconnectedCallback() {\r\n this.unmount();\r\n }\r\n attributeChangedCallback(attr, oldValue, value) {\r\n if (attr === this[ELEMENT_IGNORE_ATTR] || oldValue === value) return;\r\n this[attrToProp(attr)] = value;\r\n }\r\n}\r\n\r\n/**\r\n * register the component, be it a class or function\r\n * @param {string} nodeType\r\n * @param {Function} component\r\n * @return {Function} returns a jsx component\r\n */\r\nexport function customElement(nodeType, component) {\r\n if (isFunction(nodeType)) {\r\n component = nodeType;\r\n\r\n let CustomElement = class extends AtomicoElement {};\r\n let prototype = CustomElement.prototype;\r\n\r\n let props = component.props;\r\n\r\n prototype.error = component.error || console.error;\r\n prototype.render = component;\r\n // allows to define the default values of the props\r\n prototype.initialize = function() {\r\n let length = initialize.length;\r\n while (length--) initialize[length](this);\r\n };\r\n /**@type {Function[]}*/\r\n let initialize = [];\r\n /**@type {string[]} */\r\n let attrs = [];\r\n\r\n for (let prop in props)\r\n setProperty(prototype, initialize, attrs, prop, props[prop]);\r\n\r\n CustomElement.observedAttributes = attrs;\r\n\r\n return CustomElement;\r\n } else {\r\n customElements.define(nodeType, customElement(component));\r\n return props => createElement(nodeType, props);\r\n }\r\n}\r\n\r\nfunction setProperty(prototype, initialize, attrs, prop, schema) {\r\n let attr = propToAttr(prop);\r\n\r\n schema = schema.name ? { type: schema } : schema;\r\n\r\n // avoid rewriting the prototype\r\n if (prop in prototype) return;\r\n\r\n function set(nextValue) {\r\n let prevValue = this[ELEMENT_PROPS][prop];\r\n\r\n if (isFunction(nextValue)) {\r\n nextValue = nextValue(prevValue);\r\n }\r\n let { value, error } = formatType(nextValue, schema.type);\r\n\r\n if (error && value != null) {\r\n throw `the observable [${prop}] must be of the type [${schema.type.name}]`;\r\n }\r\n\r\n if (prevValue == value) return;\r\n\r\n this[ELEMENT_PROPS][prop] = value;\r\n\r\n let rendered = this.update();\r\n\r\n if (schema.event) {\r\n // The event is only dispatched if the component has finished\r\n // the rendering cycle, this is useful to observe the changes\r\n rendered.then(() =>\r\n dispatchEvent(this, schema.event.type || prop, schema.event)\r\n );\r\n }\r\n\r\n if (schema.reflect) {\r\n // the default properties are only reflected once the web-component is mounted\r\n this.mounted.then(() => {\r\n this[ELEMENT_IGNORE_ATTR] = attr; //update is prevented\r\n setAttr(\r\n this,\r\n attr,\r\n schema.type == Boolean && !value ? null : value //\r\n );\r\n this[ELEMENT_IGNORE_ATTR] = false; // an upcoming update is allowed\r\n });\r\n }\r\n }\r\n\r\n function get() {\r\n return this[ELEMENT_PROPS][prop];\r\n }\r\n\r\n Object.defineProperty(prototype, prop, { set, get });\r\n\r\n if (\"value\" in schema) {\r\n initialize.push(self => (self[prop] = schema.value));\r\n }\r\n attrs.push(attr);\r\n}\r\n","import { useHost } from \"../hooks\";\r\nimport { dispatchEvent } from \"./utils\";\r\n\r\nexport function useProp(name) {\r\n let ref = useHost();\r\n if (name in ref.current) {\r\n if (!ref[name]) {\r\n ref[name] = [null, nextValue => (ref.current[name] = nextValue)];\r\n }\r\n ref[name][0] = ref.current[name];\r\n return ref[name];\r\n }\r\n}\r\n\r\nexport function useEvent(type, customEventInit) {\r\n let ref = useHost();\r\n if (!ref[type]) {\r\n ref[type] = detail =>\r\n dispatchEvent(\r\n ref.current,\r\n type,\r\n detail ? { ...customEventInit, detail } : customEventInit\r\n );\r\n }\r\n return ref[type];\r\n}\r\n\r\nexport function usePublic(name, value) {\r\n let { current } = useHost();\r\n if (current[name] != value) {\r\n current[name] = value;\r\n }\r\n return current[name];\r\n}\r\n"],"names":["HOOK_CURRENT","HOOK_MOUNT","HOOK_UPDATE","HOOK_UPDATED","HOOK_MOUNTED","HOOK_UNMOUNT","isFunction","isEqualArray","ARRAY_EMPTY","IGNORE_CHILDREN","HYDRATE_PROPS","SUPPORT_STYLE_SHEET","CACHE_STYLE_SHEET","KEY","META_MAP_CHILDREN","META_KEYES","META_STYLE_SHEET","STYLE_SHEET_KEY","isArray","NODE_HOST","JOIN_CHILDREN","NODE_TYPE","ELEMENT_TRUE_VALUES","ELEMENT_PROPS","promise","ELEMENT_IGNORE_ATTR","setProperty"],"mappings":"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"}
\No newline at end of file