UNPKG

388 kBSource Map (JSON)View Raw
1{"version":3,"file":"_hyperscript_w9y.modern.js","sources":["../src/lib/utils.js","../src/lib/core.js","../src/lib/plugin/socket.js","../src/lib/web.js","../src/web/_hyperscript_w9y.js","../src/lib/plugin/worker.js","../src/lib/plugin/eventsource.js","../src/lib/plugin/template.js","../src/lib/plugin/hdb.js"],"sourcesContent":["\n/**\n * mergeObjects combines the keys from obj2 into obj2, then returns obj1\n *\n * @param {object} obj1\n * @param {object} obj2\n * @returns object\n */\nexport function mergeObjects(obj1, obj2) {\n\tfor (var key in obj2) {\n\t\tif (obj2.hasOwnProperty(key)) {\n\t\t\tobj1[key] = obj2[key];\n\t\t}\n\t}\n\treturn obj1;\n}\n\nexport function getOrInitObject(root, prop) {\n\tvar value = root[prop];\n\tif (value) {\n\t\treturn value;\n\t} else {\n\t\tvar newObj = {};\n\t\troot[prop] = newObj;\n\t\treturn newObj;\n\t}\n}\n\n/**\n * parseJSON parses a JSON string into a corresponding value. If the\n * value passed in is not valid JSON, then it logs an error and returns `null`.\n *\n * @param {string} jString\n * @returns any\n */\nexport function parseJSON(jString) {\n\ttry {\n\t\treturn JSON.parse(jString);\n\t} catch (error) {\n\t\tlogError(error);\n\t\treturn null;\n\t}\n}\n\n/**\n * logError writes an error message to the Javascript console. It can take any\n * value, but msg should commonly be a simple string.\n * @param {*} msg\n */\nexport function logError(msg) {\n\tif (console.error) {\n\t\tconsole.error(msg);\n\t} else if (console.log) {\n\t\tconsole.log(\"ERROR: \", msg);\n\t}\n}\n\n// TODO: JSDoc description of what's happening here\nexport function varargConstructor(Cls, args) {\n\treturn new (Cls.bind.apply(Cls, [Cls].concat(args)))();\n}\n","///=========================================================================\n/// This module provides the core runtime and grammar for hyperscript\n///=========================================================================\n\nimport {getOrInitObject, mergeObjects, parseJSON, varargConstructor} from \"./utils.js\";\n\n\n/**\n * @type {HyperscriptObject}\n */\nlet _hyperscript\n\nvar globalScope = globalThis;\n\n//====================================================================\n// Standard library\n//====================================================================\n\nclass ElementCollection {\n\tconstructor(css, relativeToElement, escape) {\n\t\tthis._css = css;\n\t\tthis.relativeToElement = relativeToElement;\n\t\tthis.escape = escape;\n\t}\n\n\tget css() {\n\t\tif (this.escape) {\n\t\t\treturn _runtime.escapeSelector(this._css);\n\t\t} else {\n\t\t\treturn this._css;\n\t\t}\n\t}\n\n\tget className() {\n\t\treturn this._css.substr(1);\n\t}\n\n\tget id() {\n\t\treturn this.className();\n\t}\n\n\tcontains(elt) {\n\t\tfor (let element of this) {\n\t\t\tif (element.contains(elt)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tget length() {\n\t\treturn this.selectMatches().length;\n\t}\n\n\t[Symbol.iterator]() {\n\t\tlet query = this.selectMatches();\n\t\treturn query [Symbol.iterator]();\n\t}\n\n\tselectMatches() {\n\t\tlet query = _runtime.getRootNode(this.relativeToElement).querySelectorAll(this.css);\n\t\treturn query;\n\t}\n}\n\n//====================================================================\n// Lexer\n//====================================================================\n\n/** @type LexerObject */\nvar _lexer = (function () {\n\tvar OP_TABLE = {\n\t\t\"+\": \"PLUS\",\n\t\t\"-\": \"MINUS\",\n\t\t\"*\": \"MULTIPLY\",\n\t\t\"/\": \"DIVIDE\",\n\t\t\".\": \"PERIOD\",\n\t\t\"..\": \"ELLIPSIS\",\n\t\t\"\\\\\": \"BACKSLASH\",\n\t\t\":\": \"COLON\",\n\t\t\"%\": \"PERCENT\",\n\t\t\"|\": \"PIPE\",\n\t\t\"!\": \"EXCLAMATION\",\n\t\t\"?\": \"QUESTION\",\n\t\t\"#\": \"POUND\",\n\t\t\"&\": \"AMPERSAND\",\n\t\t$: \"DOLLAR\",\n\t\t\";\": \"SEMI\",\n\t\t\",\": \"COMMA\",\n\t\t\"(\": \"L_PAREN\",\n\t\t\")\": \"R_PAREN\",\n\t\t\"<\": \"L_ANG\",\n\t\t\">\": \"R_ANG\",\n\t\t\"<=\": \"LTE_ANG\",\n\t\t\">=\": \"GTE_ANG\",\n\t\t\"==\": \"EQ\",\n\t\t\"===\": \"EQQ\",\n\t\t\"!=\": \"NEQ\",\n\t\t\"!==\": \"NEQQ\",\n\t\t\"{\": \"L_BRACE\",\n\t\t\"}\": \"R_BRACE\",\n\t\t\"[\": \"L_BRACKET\",\n\t\t\"]\": \"R_BRACKET\",\n\t\t\"=\": \"EQUALS\",\n\t};\n\n\t/**\n\t * isValidCSSClassChar returns `true` if the provided character is valid in a CSS class.\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isValidCSSClassChar(c) {\n\t\treturn isAlpha(c) || isNumeric(c) || c === \"-\" || c === \"_\" || c === \":\";\n\t}\n\n\t/**\n\t * isValidCSSIDChar returns `true` if the provided character is valid in a CSS ID\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isValidCSSIDChar(c) {\n\t\treturn isAlpha(c) || isNumeric(c) || c === \"-\" || c === \"_\" || c === \":\";\n\t}\n\n\t/**\n\t * isWhitespace returns `true` if the provided character is whitespace.\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isWhitespace(c) {\n\t\treturn c === \" \" || c === \"\\t\" || isNewline(c);\n\t}\n\n\t/**\n\t * positionString returns a string representation of a Token's line and column details.\n\t * @param {Token} token\n\t * @returns string\n\t */\n\tfunction positionString(token) {\n\t\treturn \"[Line: \" + token.line + \", Column: \" + token.column + \"]\";\n\t}\n\n\t/**\n\t * isNewline returns `true` if the provided character is a carrage return or newline\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isNewline(c) {\n\t\treturn c === \"\\r\" || c === \"\\n\";\n\t}\n\n\t/**\n\t * isNumeric returns `true` if the provided character is a number (0-9)\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isNumeric(c) {\n\t\treturn c >= \"0\" && c <= \"9\";\n\t}\n\n\t/**\n\t * isAlpha returns `true` if the provided character is a letter in the alphabet\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isAlpha(c) {\n\t\treturn (c >= \"a\" && c <= \"z\") || (c >= \"A\" && c <= \"Z\");\n\t}\n\n\t/**\n\t * @param {string} c\n\t * @param {boolean} [dollarIsOp]\n\t * @returns boolean\n\t */\n\tfunction isIdentifierChar(c, dollarIsOp) {\n\t\treturn c === \"_\" || c === \"$\";\n\t}\n\n\t/**\n\t * @param {string} c\n\t * @returns boolean\n\t */\n\tfunction isReservedChar(c) {\n\t\treturn c === \"`\" || c === \"^\";\n\t}\n\n\t/**\n\t * @param {Token[]} tokens\n\t * @param {Token[]} consumed\n\t * @param {string} source\n\t * @returns {TokensObject}\n\t */\n\tfunction makeTokensObject(tokens, consumed, source) {\n\t\tconsumeWhitespace(); // consume initial whitespace\n\n\t\t/** @type Token | null */\n\t\tvar _lastConsumed = null;\n\n\t\tfunction consumeWhitespace() {\n\t\t\twhile (token(0, true).type === \"WHITESPACE\") {\n\t\t\t\tconsumed.push(tokens.shift());\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {TokensObject} tokens\n\t\t * @param {*} error\n\t\t */\n\t\tfunction raiseError(tokens, error) {\n\t\t\t_parser.raiseParseError(tokens, error);\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireOpToken(value) {\n\t\t\tvar token = matchOpToken(value);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected '\" + value + \"' but found '\" + currentToken().value + \"'\");\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} op1\n\t\t * @param {string} [op2]\n\t\t * @param {string} [op3]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchAnyOpToken(op1, op2, op3) {\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar opToken = arguments[i];\n\t\t\t\tvar match = matchOpToken(opToken);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} op1\n\t\t * @param {string} [op2]\n\t\t * @param {string} [op3]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchAnyToken(op1, op2, op3) {\n\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\tvar opToken = arguments[i];\n\t\t\t\tvar match = matchToken(opToken);\n\t\t\t\tif (match) {\n\t\t\t\t\treturn match;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchOpToken(value) {\n\t\t\tif (currentToken() && currentToken().op && currentToken().value === value) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type1\n\t\t * @param {string} [type2]\n\t\t * @param {string} [type3]\n\t\t * @param {string} [type4]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireTokenType(type1, type2, type3, type4) {\n\t\t\tvar token = matchTokenType(type1, type2, type3, type4);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected one of \" + JSON.stringify([type1, type2, type3]));\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} type1\n\t\t * @param {string} [type2]\n\t\t * @param {string} [type3]\n\t\t * @param {string} [type4]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchTokenType(type1, type2, type3, type4) {\n\t\t\tif (\n\t\t\t\tcurrentToken() &&\n\t\t\t\tcurrentToken().type &&\n\t\t\t\t[type1, type2, type3, type4].indexOf(currentToken().type) >= 0\n\t\t\t) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction requireToken(value, type) {\n\t\t\tvar token = matchToken(value, type);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\traiseError(this, \"Expected '\" + value + \"' but found '\" + currentToken().value + \"'\");\n\t\t\t}\n\t\t}\n\n\t\tfunction peekToken(value, peek, type) {\n\t\t\treturn tokens[peek] && tokens[peek].value === value && tokens[peek].type === type\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token | void}\n\t\t */\n\t\tfunction matchToken(value, type) {\n\t\t\tif (follows.indexOf(value) !== -1) {\n\t\t\t\treturn; // disallowed token here\n\t\t\t}\n\t\t\tvar type = type || \"IDENTIFIER\";\n\t\t\tif (currentToken() && currentToken().value === value && currentToken().type === type) {\n\t\t\t\treturn consumeToken();\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction consumeToken() {\n\t\t\tvar match = tokens.shift();\n\t\t\tconsumed.push(match);\n\t\t\t_lastConsumed = match;\n\t\t\tconsumeWhitespace(); // consume any whitespace\n\t\t\treturn match;\n\t\t}\n\n\t\t/**\n\t\t * @param {string} value\n\t\t * @param {string} [type]\n\t\t * @returns {Token[]}\n\t\t */\n\t\tfunction consumeUntil(value, type) {\n\t\t\t/** @type Token[] */\n\t\t\tvar tokenList = [];\n\t\t\tvar currentToken = token(0, true);\n\n\t\t\twhile (\n\t\t\t\t(type == null || currentToken.type !== type) &&\n\t\t\t\t(value == null || currentToken.value !== value) &&\n\t\t\t\tcurrentToken.type !== \"EOF\"\n\t\t\t) {\n\t\t\t\tvar match = tokens.shift();\n\t\t\t\tconsumed.push(match);\n\t\t\t\ttokenList.push(currentToken);\n\t\t\t\tcurrentToken = token(0, true);\n\t\t\t}\n\t\t\tconsumeWhitespace(); // consume any whitespace\n\t\t\treturn tokenList;\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction lastWhitespace() {\n\t\t\tif (consumed[consumed.length - 1] && consumed[consumed.length - 1].type === \"WHITESPACE\") {\n\t\t\t\treturn consumed[consumed.length - 1].value;\n\t\t\t} else {\n\t\t\t\treturn \"\";\n\t\t\t}\n\t\t}\n\n\t\tfunction consumeUntilWhitespace() {\n\t\t\treturn consumeUntil(null, \"WHITESPACE\");\n\t\t}\n\n\t\t/**\n\t\t * @returns {boolean}\n\t\t */\n\t\tfunction hasMore() {\n\t\t\treturn tokens.length > 0;\n\t\t}\n\n\t\t/**\n\t\t * @param {number} n\n\t\t * @param {boolean} [dontIgnoreWhitespace]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction token(n, dontIgnoreWhitespace) {\n\t\t\tvar /**@type {Token}*/ token;\n\t\t\tvar i = 0;\n\t\t\tdo {\n\t\t\t\tif (!dontIgnoreWhitespace) {\n\t\t\t\t\twhile (tokens[i] && tokens[i].type === \"WHITESPACE\") {\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoken = tokens[i];\n\t\t\t\tn--;\n\t\t\t\ti++;\n\t\t\t} while (n > -1);\n\t\t\tif (token) {\n\t\t\t\treturn token;\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"EOF\",\n\t\t\t\t\tvalue: \"<<<EOF>>>\",\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction currentToken() {\n\t\t\treturn token(0);\n\t\t}\n\n\t\t/**\n\t\t * @returns {Token | null}\n\t\t */\n\t\tfunction lastMatch() {\n\t\t\treturn _lastConsumed;\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction sourceFor() {\n\t\t\treturn source.substring(this.startToken.start, this.endToken.end);\n\t\t}\n\n\t\t/**\n\t\t * @returns {string}\n\t\t */\n\t\tfunction lineFor() {\n\t\t\treturn source.split(\"\\n\")[this.startToken.line - 1];\n\t\t}\n\n\t\tvar follows = [];\n\n\t\tfunction pushFollow(str) {\n\t\t\tfollows.push(str);\n\t\t}\n\n\t\tfunction popFollow() {\n\t\t\tfollows.pop();\n\t\t}\n\n\t\tfunction clearFollows() {\n\t\t\tvar tmp = follows;\n\t\t\tfollows = [];\n\t\t\treturn tmp;\n\t\t}\n\n\t\tfunction restoreFollows(f) {\n\t\t\tfollows = f;\n\t\t}\n\n\t\t/** @type {TokensObject} */\n\t\treturn {\n\t\t\tpushFollow: pushFollow,\n\t\t\tpopFollow: popFollow,\n\t\t\tclearFollow: clearFollows,\n\t\t\trestoreFollow: restoreFollows,\n\t\t\tmatchAnyToken: matchAnyToken,\n\t\t\tmatchAnyOpToken: matchAnyOpToken,\n\t\t\tmatchOpToken: matchOpToken,\n\t\t\trequireOpToken: requireOpToken,\n\t\t\tmatchTokenType: matchTokenType,\n\t\t\trequireTokenType: requireTokenType,\n\t\t\tconsumeToken: consumeToken,\n\t\t\tpeekToken: peekToken,\n\t\t\tmatchToken: matchToken,\n\t\t\trequireToken: requireToken,\n\t\t\tlist: tokens,\n\t\t\tconsumed: consumed,\n\t\t\tsource: source,\n\t\t\thasMore: hasMore,\n\t\t\tcurrentToken: currentToken,\n\t\t\tlastMatch: lastMatch,\n\t\t\ttoken: token,\n\t\t\tconsumeUntil: consumeUntil,\n\t\t\tconsumeUntilWhitespace: consumeUntilWhitespace,\n\t\t\tlastWhitespace: lastWhitespace,\n\t\t\tsourceFor: sourceFor,\n\t\t\tlineFor: lineFor,\n\t\t};\n\t}\n\n\t/**\n\t * @param {Token[]} tokens\n\t * @returns {boolean}\n\t */\n\tfunction isValidSingleQuoteStringStart(tokens) {\n\t\tif (tokens.length > 0) {\n\t\t\tvar previousToken = tokens[tokens.length - 1];\n\t\t\tif (\n\t\t\t\tpreviousToken.type === \"IDENTIFIER\" ||\n\t\t\t\tpreviousToken.type === \"CLASS_REF\" ||\n\t\t\t\tpreviousToken.type === \"ID_REF\"\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (previousToken.op && (previousToken.value === \">\" || previousToken.value === \")\")) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t/**\n\t * @param {string} string\n\t * @param {boolean} [template]\n\t * @returns {TokensObject}\n\t */\n\tfunction tokenize(string, template) {\n\t\tvar tokens = /** @type {Token[]}*/ [];\n\t\tvar source = string;\n\t\tvar position = 0;\n\t\tvar column = 0;\n\t\tvar line = 1;\n\t\tvar lastToken = \"<START>\";\n\t\tvar templateBraceCount = 0;\n\n\t\tfunction inTemplate() {\n\t\t\treturn template && templateBraceCount === 0;\n\t\t}\n\n\t\twhile (position < source.length) {\n\t\t\tif (currentChar() === \"-\" && nextChar() === \"-\" && (isWhitespace(charAfterThat()) || charAfterThat() === \"\")) {\n\t\t\t\tconsumeComment();\n\t\t\t} else {\n\t\t\t\tif (isWhitespace(currentChar())) {\n\t\t\t\t\ttokens.push(consumeWhitespace());\n\t\t\t\t} else if (\n\t\t\t\t\t!possiblePrecedingSymbol() &&\n\t\t\t\t\tcurrentChar() === \".\" &&\n\t\t\t\t\t(isAlpha(nextChar()) || nextChar() === \"{\")\n\t\t\t\t) {\n\t\t\t\t\ttokens.push(consumeClassReference());\n\t\t\t\t} else if (\n\t\t\t\t\t!possiblePrecedingSymbol() &&\n\t\t\t\t\tcurrentChar() === \"#\" &&\n\t\t\t\t\t(isAlpha(nextChar()) || nextChar() === \"{\")\n\t\t\t\t) {\n\t\t\t\t\ttokens.push(consumeIdReference());\n\t\t\t\t} else if (currentChar() === \"[\" && nextChar() === \"@\") {\n\t\t\t\t\ttokens.push(consumeAttributeReference());\n\t\t\t\t} else if (currentChar() === \"@\") {\n\t\t\t\t\ttokens.push(consumeShortAttributeReference());\n\t\t\t\t} else if (currentChar() === \"*\" && isAlpha(nextChar())) {\n\t\t\t\t\ttokens.push(consumeStyleReference());\n\t\t\t\t} else if (isAlpha(currentChar()) || (!inTemplate() && isIdentifierChar(currentChar()))) {\n\t\t\t\t\ttokens.push(consumeIdentifier());\n\t\t\t\t} else if (isNumeric(currentChar())) {\n\t\t\t\t\ttokens.push(consumeNumber());\n\t\t\t\t} else if (!inTemplate() && (currentChar() === '\"' || currentChar() === \"`\")) {\n\t\t\t\t\ttokens.push(consumeString());\n\t\t\t\t} else if (!inTemplate() && currentChar() === \"'\") {\n\t\t\t\t\tif (isValidSingleQuoteStringStart(tokens)) {\n\t\t\t\t\t\ttokens.push(consumeString());\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttokens.push(consumeOp());\n\t\t\t\t\t}\n\t\t\t\t} else if (OP_TABLE[currentChar()]) {\n\t\t\t\t\tif (lastToken === \"$\" && currentChar() === \"{\") {\n\t\t\t\t\t\ttemplateBraceCount++;\n\t\t\t\t\t}\n\t\t\t\t\tif (currentChar() === \"}\") {\n\t\t\t\t\t\ttemplateBraceCount--;\n\t\t\t\t\t}\n\t\t\t\t\ttokens.push(consumeOp());\n\t\t\t\t} else if (inTemplate() || isReservedChar(currentChar())) {\n\t\t\t\t\ttokens.push(makeToken(\"RESERVED\", consumeChar()));\n\t\t\t\t} else {\n\t\t\t\t\tif (position < source.length) {\n\t\t\t\t\t\tthrow Error(\"Unknown token: \" + currentChar() + \" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn makeTokensObject(tokens, [], source);\n\n\t\t/**\n\t\t * @param {string} [type]\n\t\t * @param {string} [value]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction makeOpToken(type, value) {\n\t\t\tvar token = makeToken(type, value);\n\t\t\ttoken.op = true;\n\t\t\treturn token;\n\t\t}\n\n\t\t/**\n\t\t * @param {string} [type]\n\t\t * @param {string} [value]\n\t\t * @returns {Token}\n\t\t */\n\t\tfunction makeToken(type, value) {\n\t\t\treturn {\n\t\t\t\ttype: type,\n\t\t\t\tvalue: value,\n\t\t\t\tstart: position,\n\t\t\t\tend: position + 1,\n\t\t\t\tcolumn: column,\n\t\t\t\tline: line,\n\t\t\t};\n\t\t}\n\n\t\tfunction consumeComment() {\n\t\t\twhile (currentChar() && !isNewline(currentChar())) {\n\t\t\t\tconsumeChar();\n\t\t\t}\n\t\t\tconsumeChar();\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeClassReference() {\n\t\t\tvar classRef = makeToken(\"CLASS_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\tif (currentChar() === \"{\") {\n\t\t\t\tclassRef.template = true;\n\t\t\t\tvalue += consumeChar();\n\t\t\t\twhile (currentChar() && currentChar() !== \"}\") {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t\tif (currentChar() !== \"}\") {\n\t\t\t\t\tthrow Error(\"Unterminated class reference\");\n\t\t\t\t} else {\n\t\t\t\t\tvalue += consumeChar(); // consume final curly\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (isValidCSSClassChar(currentChar())) {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t}\n\t\t\tclassRef.value = value;\n\t\t\tclassRef.end = position;\n\t\t\treturn classRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeAttributeReference() {\n\t\t\tvar attributeRef = makeToken(\"ATTRIBUTE_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (position < source.length && currentChar() !== \"]\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() === \"]\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tattributeRef.value = value;\n\t\t\tattributeRef.end = position;\n\t\t\treturn attributeRef;\n\t\t}\n\n\t\tfunction consumeShortAttributeReference() {\n\t\t\tvar attributeRef = makeToken(\"ATTRIBUTE_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isValidCSSIDChar(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tattributeRef.value = value;\n\t\t\tattributeRef.end = position;\n\t\t\treturn attributeRef;\n\t\t}\n\n\t\tfunction consumeStyleReference() {\n\t\t\tvar styleRef = makeToken(\"STYLE_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isAlpha(currentChar()) || currentChar() === \"-\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tstyleRef.value = value;\n\t\t\tstyleRef.end = position;\n\t\t\treturn styleRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeIdReference() {\n\t\t\tvar idRef = makeToken(\"ID_REF\");\n\t\t\tvar value = consumeChar();\n\t\t\tif (currentChar() === \"{\") {\n\t\t\t\tidRef.template = true;\n\t\t\t\tvalue += consumeChar();\n\t\t\t\twhile (currentChar() && currentChar() !== \"}\") {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t\tif (currentChar() !== \"}\") {\n\t\t\t\t\tthrow Error(\"Unterminated id reference\");\n\t\t\t\t} else {\n\t\t\t\t\tconsumeChar(); // consume final quote\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile (isValidCSSIDChar(currentChar())) {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t}\n\t\t\tidRef.value = value;\n\t\t\tidRef.end = position;\n\t\t\treturn idRef;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeIdentifier() {\n\t\t\tvar identifier = makeToken(\"IDENTIFIER\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isAlpha(currentChar()) ||\n\t\t\t isNumeric(currentChar()) ||\n\t\t\t isIdentifierChar(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() === \"!\" && value === \"beep\") {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tidentifier.value = value;\n\t\t\tidentifier.end = position;\n\t\t\treturn identifier;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeNumber() {\n\t\t\tvar number = makeToken(\"NUMBER\");\n\t\t\tvar value = consumeChar();\n\t\t\twhile (isNumeric(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tif (currentChar() === \".\" && isNumeric(nextChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\twhile (isNumeric(currentChar())) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\tnumber.value = value;\n\t\t\tnumber.end = position;\n\t\t\treturn number;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeOp() {\n\t\t\tvar op = makeOpToken();\n\t\t\tvar value = consumeChar(); // consume leading char\n\t\t\twhile (currentChar() && OP_TABLE[value + currentChar()]) {\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\top.type = OP_TABLE[value];\n\t\t\top.value = value;\n\t\t\top.end = position;\n\t\t\treturn op;\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeString() {\n\t\t\tvar string = makeToken(\"STRING\");\n\t\t\tvar startChar = consumeChar(); // consume leading quote\n\t\t\tvar value = \"\";\n\t\t\twhile (currentChar() && currentChar() !== startChar) {\n\t\t\t\tif (currentChar() === \"\\\\\") {\n\t\t\t\t\tconsumeChar(); // consume escape char and get the next one\n\t\t\t\t\tlet nextChar = consumeChar();\n\t\t\t\t\tif (nextChar === \"b\") {\n\t\t\t\t\t\tvalue += \"\\b\";\n\t\t\t\t\t} else if (nextChar === \"f\") {\n\t\t\t\t\t\tvalue += \"\\f\";\n\t\t\t\t\t} else if (nextChar === \"n\") {\n\t\t\t\t\t\tvalue += \"\\n\";\n\t\t\t\t\t} else if (nextChar === \"r\") {\n\t\t\t\t\t\tvalue += \"\\r\";\n\t\t\t\t\t} else if (nextChar === \"t\") {\n\t\t\t\t\t\tvalue += \"\\t\";\n\t\t\t\t\t} else if (nextChar === \"v\") {\n\t\t\t\t\t\tvalue += \"\\v\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue += nextChar;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvalue += consumeChar();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (currentChar() !== startChar) {\n\t\t\t\tthrow Error(\"Unterminated string at \" + positionString(string));\n\t\t\t} else {\n\t\t\t\tconsumeChar(); // consume final quote\n\t\t\t}\n\t\t\tstring.value = value;\n\t\t\tstring.end = position;\n\t\t\tstring.template = startChar === \"`\";\n\t\t\treturn string;\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction currentChar() {\n\t\t\treturn source.charAt(position);\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction nextChar() {\n\t\t\treturn source.charAt(position + 1);\n\t\t}\n\n\t\tfunction charAfterThat() {\n\t\t\treturn source.charAt(position + 2);\n\t\t}\n\n\t\t/**\n\t\t * @returns string\n\t\t */\n\t\tfunction consumeChar() {\n\t\t\tlastToken = currentChar();\n\t\t\tposition++;\n\t\t\tcolumn++;\n\t\t\treturn lastToken;\n\t\t}\n\n\t\t/**\n\t\t * @returns boolean\n\t\t */\n\t\tfunction possiblePrecedingSymbol() {\n\t\t\treturn (\n\t\t\t\tisAlpha(lastToken) ||\n\t\t\t\tisNumeric(lastToken) ||\n\t\t\t\tlastToken === \")\" ||\n\t\t\t\tlastToken === \"\\\"\" ||\n\t\t\t\tlastToken === \"'\" ||\n\t\t\t\tlastToken === \"`\" ||\n\t\t\t\tlastToken === \"}\" ||\n\t\t\t\tlastToken === \"]\"\n\t\t\t);\n\t\t}\n\n\t\t/**\n\t\t * @returns Token\n\t\t */\n\t\tfunction consumeWhitespace() {\n\t\t\tvar whitespace = makeToken(\"WHITESPACE\");\n\t\t\tvar value = \"\";\n\t\t\twhile (currentChar() && isWhitespace(currentChar())) {\n\t\t\t\tif (isNewline(currentChar())) {\n\t\t\t\t\tcolumn = 0;\n\t\t\t\t\tline++;\n\t\t\t\t}\n\t\t\t\tvalue += consumeChar();\n\t\t\t}\n\t\t\twhitespace.value = value;\n\t\t\twhitespace.end = position;\n\t\t\treturn whitespace;\n\t\t}\n\t}\n\n\treturn {\n\t\ttokenize: tokenize,\n\t\tmakeTokensObject: makeTokensObject,\n\t};\n})();\n\n//====================================================================\n// Parser\n//====================================================================\n\n/** @type ParserObject */\nvar _parser = (function () {\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar GRAMMAR = {};\n\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar COMMANDS = {};\n\n\t/** @type {Object<string,GrammarDefinition>} */\n\tvar FEATURES = {};\n\n\tvar LEAF_EXPRESSIONS = [];\n\tvar INDIRECT_EXPRESSIONS = [];\n\n\t/**\n\t * @param {*} parseElement\n\t * @param {*} start\n\t * @param {TokensObject} tokens\n\t */\n\tfunction initElt(parseElement, start, tokens) {\n\t\tparseElement.startToken = start;\n\t\tparseElement.sourceFor = tokens.sourceFor;\n\t\tparseElement.lineFor = tokens.lineFor;\n\t\tparseElement.programSource = tokens.source;\n\t}\n\n\t/**\n\t * @param {string} type\n\t * @param {TokensObject} tokens\n\t * @param {GrammarElement?} root\n\t * @returns GrammarElement\n\t */\n\tfunction parseElement(type, tokens, root = undefined) {\n\t\tvar elementDefinition = GRAMMAR[type];\n\t\tif (elementDefinition) {\n\t\t\tvar start = tokens.currentToken();\n\t\t\tvar parseElement = elementDefinition(_parser, _runtime, tokens, root);\n\t\t\tif (parseElement) {\n\t\t\t\tinitElt(parseElement, start, tokens);\n\t\t\t\tparseElement.endToken = parseElement.endToken || tokens.lastMatch();\n\t\t\t\tvar root = parseElement.root;\n\t\t\t\twhile (root != null) {\n\t\t\t\t\tinitElt(root, start, tokens);\n\t\t\t\t\troot = root.root;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn parseElement;\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} type\n\t * @param {TokensObject} tokens\n\t * @param {string} [message]\n\t * @param {*} [root]\n\t * @returns {GrammarElement}\n\t */\n\tfunction requireElement(type, tokens, message, root) {\n\t\tvar result = parseElement(type, tokens, root);\n\t\tif (!result) raiseParseError(tokens, message || \"Expected \" + type);\n\t\t// @ts-ignore\n\t\treturn result;\n\t}\n\n\t/**\n\t * @param {string[]} types\n\t * @param {TokensObject} tokens\n\t * @returns {GrammarElement}\n\t */\n\tfunction parseAnyOf(types, tokens) {\n\t\tfor (var i = 0; i < types.length; i++) {\n\t\t\tvar type = types[i];\n\t\t\tvar expression = parseElement(type, tokens);\n\t\t\tif (expression) {\n\t\t\t\treturn expression;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addGrammarElement(name, definition) {\n\t\tGRAMMAR[name] = definition;\n\t}\n\n\t/**\n\t * @param {string} keyword\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addCommand(keyword, definition) {\n\t\tvar commandGrammarType = keyword + \"Command\";\n\t\tvar commandDefinitionWrapper = function (parser, runtime, tokens) {\n\t\t\tconst commandElement = definition(parser, runtime, tokens);\n\t\t\tif (commandElement) {\n\t\t\t\tcommandElement.type = commandGrammarType;\n\t\t\t\tcommandElement.execute = function (context) {\n\t\t\t\t\tcontext.meta.command = commandElement;\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t};\n\t\t\t\treturn commandElement;\n\t\t\t}\n\t\t};\n\t\tGRAMMAR[commandGrammarType] = commandDefinitionWrapper;\n\t\tCOMMANDS[keyword] = commandDefinitionWrapper;\n\t}\n\n\t/**\n\t * @param {string} keyword\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addFeature(keyword, definition) {\n\t\tvar featureGrammarType = keyword + \"Feature\";\n\n\t\t/** @type {GrammarDefinition} */\n\t\tvar featureDefinitionWrapper = function (parser, runtime, tokens) {\n\t\t\tvar featureElement = definition(parser, runtime, tokens);\n\t\t\tif (featureElement) {\n\t\t\t\tfeatureElement.isFeature = true;\n\t\t\t\tfeatureElement.keyword = keyword;\n\t\t\t\tfeatureElement.type = featureGrammarType;\n\t\t\t\treturn featureElement;\n\t\t\t}\n\t\t};\n\t\tGRAMMAR[featureGrammarType] = featureDefinitionWrapper;\n\t\tFEATURES[keyword] = featureDefinitionWrapper;\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addLeafExpression(name, definition) {\n\t\tLEAF_EXPRESSIONS.push(name);\n\t\taddGrammarElement(name, definition);\n\t}\n\n\t/**\n\t * @param {string} name\n\t * @param {GrammarDefinition} definition\n\t */\n\tfunction addIndirectExpression(name, definition) {\n\t\tINDIRECT_EXPRESSIONS.push(name);\n\t\taddGrammarElement(name, definition);\n\t}\n\n\t/* ============================================================================================ */\n\t/* Core hyperscript Grammar Elements */\n\t/* ============================================================================================ */\n\taddGrammarElement(\"feature\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tvar featureElement = parser.requireElement(\"feature\", tokens);\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn featureElement;\n\t\t}\n\n\t\tvar featureDefinition = FEATURES[tokens.currentToken().value];\n\t\tif (featureDefinition) {\n\t\t\treturn featureDefinition(parser, runtime, tokens);\n\t\t}\n\t});\n\n\taddGrammarElement(\"command\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tconst commandElement = parser.requireElement(\"command\", tokens);\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn commandElement;\n\t\t}\n\n\t\tvar commandDefinition = COMMANDS[tokens.currentToken().value];\n\t\tlet commandElement;\n\t\tif (commandDefinition) {\n\t\t\tcommandElement = commandDefinition(parser, runtime, tokens);\n\t\t} else if (tokens.currentToken().type === \"IDENTIFIER\") {\n\t\t\tcommandElement = parser.parseElement(\"pseudoCommand\", tokens);\n\t\t}\n\t\tif (commandElement) {\n\t\t\treturn parser.parseElement(\"indirectStatement\", tokens, commandElement);\n\t\t}\n\n\t\treturn commandElement;\n\t});\n\n\taddGrammarElement(\"commandList\", function (parser, runtime, tokens) {\n\t\tvar cmd = parser.parseElement(\"command\", tokens);\n\t\tif (cmd) {\n\t\t\ttokens.matchToken(\"then\");\n\t\t\tconst next = parser.parseElement(\"commandList\", tokens);\n\t\t\tif (next) cmd.next = next;\n\t\t\treturn cmd;\n\t\t}\n\t});\n\n\taddGrammarElement(\"leaf\", function (parser, runtime, tokens) {\n\t\tvar result = parseAnyOf(LEAF_EXPRESSIONS, tokens);\n\t\t// symbol is last so it doesn't consume any constants\n\t\tif (result == null) {\n\t\t\treturn parseElement(\"symbol\", tokens);\n\t\t}\n\n\t\treturn result;\n\t});\n\n\taddGrammarElement(\"indirectExpression\", function (parser, runtime, tokens, root) {\n\t\tfor (var i = 0; i < INDIRECT_EXPRESSIONS.length; i++) {\n\t\t\tvar indirect = INDIRECT_EXPRESSIONS[i];\n\t\t\troot.endToken = tokens.lastMatch();\n\t\t\tvar result = parser.parseElement(indirect, tokens, root);\n\t\t\tif (result) {\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t\treturn root;\n\t});\n\n\taddGrammarElement(\"indirectStatement\", function (parser, runtime, tokens, root) {\n\t\tif (tokens.matchToken(\"unless\")) {\n\t\t\troot.endToken = tokens.lastMatch();\n\t\t\tvar conditional = parser.requireElement(\"expression\", tokens);\n\t\t\tvar unless = {\n\t\t\t\ttype: \"unlessStatementModifier\",\n\t\t\t\targs: [conditional],\n\t\t\t\top: function (context, conditional) {\n\t\t\t\t\tif (conditional) {\n\t\t\t\t\t\treturn this.next;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn root;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\troot.parent = unless;\n\t\t\treturn unless;\n\t\t}\n\t\treturn root;\n\t});\n\n\taddGrammarElement(\"primaryExpression\", function (parser, runtime, tokens) {\n\t\tvar leaf = parser.parseElement(\"leaf\", tokens);\n\t\tif (leaf) {\n\t\t\treturn parser.parseElement(\"indirectExpression\", tokens, leaf);\n\t\t}\n\t\tparser.raiseParseError(tokens, \"Unexpected value: \" + tokens.currentToken().value);\n\t});\n\n\t/* ============================================================================================ */\n\t/* END Core hyperscript Grammar Elements */\n\n\t/* ============================================================================================ */\n\n\t/**\n\t *\n\t * @param {TokensObject} tokens\n\t * @returns string\n\t */\n\tfunction createParserContext(tokens) {\n\t\tvar currentToken = tokens.currentToken();\n\t\tvar source = tokens.source;\n\t\tvar lines = source.split(\"\\n\");\n\t\tvar line = currentToken && currentToken.line ? currentToken.line - 1 : lines.length - 1;\n\t\tvar contextLine = lines[line];\n\t\tvar offset = currentToken && currentToken.line ? currentToken.column : contextLine.length - 1;\n\t\treturn contextLine + \"\\n\" + \" \".repeat(offset) + \"^^\\n\\n\";\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @param {string} [message]\n\t */\n\tfunction raiseParseError(tokens, message) {\n\t\tmessage =\n\t\t\t(message || \"Unexpected Token : \" + tokens.currentToken().value) + \"\\n\\n\" + createParserContext(tokens);\n\t\tvar error = new Error(message);\n\t\terror[\"tokens\"] = tokens;\n\t\tthrow error;\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @returns {GrammarElement}\n\t */\n\tfunction parseHyperScript(tokens) {\n\t\tvar result = parseElement(\"hyperscript\", tokens);\n\t\tif (tokens.hasMore()) raiseParseError(tokens);\n\t\tif (result) return result;\n\t}\n\n\t/**\n\t * @param {GrammarElement} elt\n\t * @param {GrammarElement} parent\n\t */\n\tfunction setParent(elt, parent) {\n\t\tif (typeof elt === 'object') {\n\t\t\telt.parent = parent;\n\t\t\tif (typeof parent === 'object') {\n\t\t\t\tparent.children = (parent.children || new Set());\n\t\t\t\tparent.children.add(elt)\n\t\t\t}\n\t\t\tsetParent(elt.next, parent);\n\t\t}\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {GrammarDefinition}\n\t */\n\tfunction commandStart(token) {\n\t\treturn COMMANDS[token.value];\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {GrammarDefinition}\n\t */\n\tfunction featureStart(token) {\n\t\treturn FEATURES[token.value];\n\t}\n\n\t/**\n\t * @param {Token} token\n\t * @returns {boolean}\n\t */\n\tfunction commandBoundary(token) {\n\t\tif (\n\t\t\ttoken.value == \"end\" ||\n\t\t\ttoken.value == \"then\" ||\n\t\t\ttoken.value == \"else\" ||\n\t\t\ttoken.value == \"otherwise\" ||\n\t\t\ttoken.value == \")\" ||\n\t\t\tcommandStart(token) ||\n\t\t\tfeatureStart(token) ||\n\t\t\ttoken.type == \"EOF\"\n\t\t) {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * @param {TokensObject} tokens\n\t * @returns {(string | GrammarElement)[]}\n\t */\n\tfunction parseStringTemplate(tokens) {\n\t\t/** @type {(string | GrammarElement)[]} */\n\t\tvar returnArr = [\"\"];\n\t\tdo {\n\t\t\treturnArr.push(tokens.lastWhitespace());\n\t\t\tif (tokens.currentToken().value === \"$\") {\n\t\t\t\ttokens.consumeToken();\n\t\t\t\tvar startingBrace = tokens.matchOpToken(\"{\");\n\t\t\t\treturnArr.push(requireElement(\"expression\", tokens));\n\t\t\t\tif (startingBrace) {\n\t\t\t\t\ttokens.requireOpToken(\"}\");\n\t\t\t\t}\n\t\t\t\treturnArr.push(\"\");\n\t\t\t} else if (tokens.currentToken().value === \"\\\\\") {\n\t\t\t\ttokens.consumeToken(); // skip next\n\t\t\t\ttokens.consumeToken();\n\t\t\t} else {\n\t\t\t\tvar token = tokens.consumeToken();\n\t\t\t\treturnArr[returnArr.length - 1] += token ? token.value : \"\";\n\t\t\t}\n\t\t} while (tokens.hasMore());\n\t\treturnArr.push(tokens.lastWhitespace());\n\t\treturn returnArr;\n\t}\n\n\t/**\n\t * @param {GrammarElement} commandList\n\t */\n\tfunction ensureTerminated(commandList) {\n\t\tvar implicitReturn = {\n\t\t\ttype: \"implicitReturn\",\n\t\t\top: function (context) {\n\t\t\t\tcontext.meta.returned = true;\n\t\t\t\tif (context.meta.resolve) {\n\t\t\t\t\tcontext.meta.resolve();\n\t\t\t\t}\n\t\t\t\treturn _runtime.HALT;\n\t\t\t},\n\t\t\texecute: function (ctx) {\n\t\t\t\t// do nothing\n\t\t\t},\n\t\t};\n\n\t\tvar end = commandList;\n\t\twhile (end.next) {\n\t\t\tend = end.next;\n\t\t}\n\t\tend.next = implicitReturn;\n\t}\n\n\n\t// parser API\n\treturn {\n\t\tsetParent,\n\t\trequireElement,\n\t\tparseElement,\n\t\tfeatureStart,\n\t\tcommandStart,\n\t\tcommandBoundary,\n\t\tparseAnyOf,\n\t\tparseHyperScript,\n\t\traiseParseError,\n\t\taddGrammarElement,\n\t\taddCommand,\n\t\taddFeature,\n\t\taddLeafExpression,\n\t\taddIndirectExpression,\n\t\tparseStringTemplate,\n\t\tensureTerminated,\n\t};\n})();\n\n//====================================================================\n// Runtime\n//====================================================================\n\nvar CONVERSIONS = {\n\tdynamicResolvers: /** @type DynamicConversionFunction[] */ [\n\t\tfunction(str, value){\n\t\t\tif (str === \"Fixed\") {\n\t\t\t\treturn Number(value).toFixed();\n\t\t\t} else if (str.indexOf(\"Fixed:\") === 0) {\n\t\t\t\tlet num = str.split(\":\")[1];\n\t\t\t\treturn Number(value).toFixed(parseInt(num));\n\t\t\t}\n\t\t}\n\t],\n\tString: function (val) {\n\t\tif (val.toString) {\n\t\t\treturn val.toString();\n\t\t} else {\n\t\t\treturn \"\" + val;\n\t\t}\n\t},\n\tInt: function (val) {\n\t\treturn parseInt(val);\n\t},\n\tFloat: function (val) {\n\t\treturn parseFloat(val);\n\t},\n\tNumber: function (val) {\n\t\treturn Number(val);\n\t},\n\tDate: function (val) {\n\t\treturn new Date(val);\n\t},\n\tArray: function (val) {\n\t\treturn Array.from(val);\n\t},\n\tJSON: function (val) {\n\t\treturn JSON.stringify(val);\n\t},\n\tObject: function (val) {\n\t\tif (val instanceof String) {\n\t\t\tval = val.toString();\n\t\t}\n\t\tif (typeof val === \"string\") {\n\t\t\treturn JSON.parse(val);\n\t\t} else {\n\t\t\treturn mergeObjects({}, val);\n\t\t}\n\t},\n};\n\n/********************************************\n * RUNTIME OBJECT\n ********************************************/\n\n/** @type {RuntimeObject} */\nvar _runtime = (function () {\n\t/**\n\t * @param {HTMLElement} elt\n\t * @param {string} selector\n\t * @returns boolean\n\t */\n\tfunction matchesSelector(elt, selector) {\n\t\t// noinspection JSUnresolvedVariable\n\t\tvar matchesFunction =\n\t\t\t// @ts-ignore\n\t\t\telt.matches || elt.matchesSelector || elt.msMatchesSelector || elt.mozMatchesSelector || elt.webkitMatchesSelector || elt.oMatchesSelector;\n\t\treturn matchesFunction && matchesFunction.call(elt, selector);\n\t}\n\n\t/**\n\t * @param {string} eventName\n\t * @param {Object} [detail]\n\t * @returns {Event}\n\t */\n\tfunction makeEvent(eventName, detail) {\n\t\tvar evt;\n\t\tif (globalScope.Event && typeof globalScope.Event === \"function\") {\n\t\t\tevt = new Event(eventName, {\n\t\t\t\tbubbles: true,\n\t\t\t\tcancelable: true,\n\t\t\t});\n\t\t\tevt['detail'] = detail;\n\t\t} else {\n\t\t\tevt = document.createEvent(\"CustomEvent\");\n\t\t\tevt.initCustomEvent(eventName, true, true, detail);\n\t\t}\n\t\treturn evt;\n\t}\n\n\t/**\n\t * @param {Element} elt\n\t * @param {string} eventName\n\t * @param {Object} [detail]\n\t * @param {Element} sender\n\t * @returns {boolean}\n\t */\n\tfunction triggerEvent(elt, eventName, detail, sender) {\n\t\tdetail = detail || {};\n\t\tdetail[\"sender\"] = sender;\n\t\tvar event = makeEvent(eventName, detail);\n\t\tvar eventResult = elt.dispatchEvent(event);\n\t\treturn eventResult;\n\t}\n\n\t/**\n\t * isArrayLike returns `true` if the provided value is an array or\n\t * a NodeList (which is close enough to being an array for our purposes).\n\t *\n\t * @param {any} value\n\t * @returns {value is Array | NodeList}\n\t */\n\tfunction isArrayLike(value) {\n\t\treturn Array.isArray(value) ||\n\t\t\t(typeof NodeList !== 'undefined' && (value instanceof NodeList || value instanceof HTMLCollection));\n\t}\n\n\t/**\n\t * isIterable returns `true` if the provided value supports the\n\t * iterator protocol.\n\t *\n\t * @param {any} value\n\t * @returns {value is Iterable}\n\t */\n\tfunction isIterable(value) {\n\t\treturn typeof value === 'object'\n\t\t\t&& Symbol.iterator in value\n\t\t\t&& typeof value[Symbol.iterator] === 'function';\n\t}\n\n\t/**\n\t * shouldAutoIterate returns `true` if the provided value\n\t * should be implicitly iterated over when accessing properties,\n\t * and as the target of some commands.\n\t *\n\t * Currently, this is when the value is an {ElementCollection}\n\t * or {isArrayLike} returns true.\n\t *\n\t * @param {any} value\n\t * @returns {value is any[] | NodeList | ElementCollection}\n\t */\n\tfunction shouldAutoIterate(value) {\n\t\treturn value instanceof ElementCollection ||\n\t\t\t isArrayLike(value);\n\t}\n\n\t/**\n\t * forEach executes the provided `func` on every item in the `value` array.\n\t * if `value` is a single item (and not an array) then `func` is simply called\n\t * once. If `value` is null, then no further actions are taken.\n\t *\n\t * @template T\n\t * @param {T | Iterable<T>} value\n\t * @param {(item: T) => void} func\n\t */\n\tfunction forEach(value, func) {\n\t\tif (value == null) {\n\t\t\t// do nothing\n\t\t} else if (isIterable(value)) {\n\t\t\tfor (const nth of value) {\n\t\t\t\tfunc(nth);\n\t\t\t}\n\t\t} else if (isArrayLike(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tfunc(value[i]);\n\t\t\t}\n\t\t} else {\n\t\t\tfunc(value);\n\t\t}\n\t}\n\n\t/**\n\t * implicitLoop executes the provided `func` on:\n\t * - every item of {value}, if {value} should be auto-iterated\n\t * (see {shouldAutoIterate})\n\t * - {value} otherwise\n\t *\n\t * @template T\n\t * @param {NodeList | T | T[]} value\n\t * @param {(item:Node | T) => void} func\n\t */\n\tfunction implicitLoop(value, func) {\n\t\tif (shouldAutoIterate(value)) {\n\t\t\tfor (const x of value) func(x);\n\t\t} else {\n\t\t\tfunc(value);\n\t\t}\n\t}\n\n\tfunction wrapArrays(args) {\n\t\tvar arr = [];\n\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\tvar arg = args[i];\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\tarr.push(Promise.all(arg));\n\t\t\t} else {\n\t\t\t\tarr.push(arg);\n\t\t\t}\n\t\t}\n\t\treturn arr;\n\t}\n\n\tfunction unwrapAsyncs(values) {\n\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\tvar value = values[i];\n\t\t\tif (value.asyncWrapper) {\n\t\t\t\tvalues[i] = value.value;\n\t\t\t}\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tfor (var j = 0; j < value.length; j++) {\n\t\t\t\t\tvar valueElement = value[j];\n\t\t\t\t\tif (valueElement.asyncWrapper) {\n\t\t\t\t\t\tvalue[j] = valueElement.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar HALT = {};\n\n\t/**\n\t * @param {GrammarElement} command\n\t * @param {Context} ctx\n\t */\n\tfunction unifiedExec(command, ctx) {\n\t\twhile (true) {\n\t\t\ttry {\n\t\t\t\tvar next = unifiedEval(command, ctx);\n\t\t\t} catch (e) {\n\t\t\t\tif (ctx.meta.handlingFinally) {\n\t\t\t\t\tconsole.error(\" Exception in finally block: \", e);\n\t\t\t\t\tnext = HALT;\n\t\t\t\t} else {\n\t\t\t\t\t_runtime.registerHyperTrace(ctx, e);\n\t\t\t\t\tif (ctx.meta.errorHandler && !ctx.meta.handlingError) {\n\t\t\t\t\t\tctx.meta.handlingError = true;\n\t\t\t\t\t\tctx[ctx.meta.errorSymbol] = e;\n\t\t\t\t\t\tcommand = ctx.meta.errorHandler;\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.meta.currentException = e;\n\t\t\t\t\t\tnext = HALT;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (next == null) {\n\t\t\t\tconsole.error(command, \" did not return a next element to execute! context: \", ctx);\n\t\t\t\treturn;\n\t\t\t} else if (next.then) {\n\t\t\t\tnext.then(function (resolvedNext) {\n\t\t\t\t\tunifiedExec(resolvedNext, ctx);\n\t\t\t\t}).catch(function (reason) {\n\t\t\t\t\tunifiedExec({ // Anonymous command to simply throw the exception\n\t\t\t\t\t\top: function(){\n\t\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, ctx);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (next === HALT) {\n\t\t\t\tif (ctx.meta.finallyHandler && !ctx.meta.handlingFinally) {\n\t\t\t\t\tctx.meta.handlingFinally = true;\n\t\t\t\t\tcommand = ctx.meta.finallyHandler;\n\t\t\t\t} else {\n\t\t\t\t\tif (ctx.meta.onHalt) {\n\t\t\t\t\t\tctx.meta.onHalt();\n\t\t\t\t\t}\n\t\t\t\t\tif (ctx.meta.currentException) {\n\t\t\t\t\t\tif (ctx.meta.reject) {\n\t\t\t\t\t\t\tctx.meta.reject(ctx.meta.currentException);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow ctx.meta.currentException;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcommand = next; // move to the next command\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {*} parseElement\n\t* @param {Context} ctx\n\t* @returns {*}\n\t*/\n\tfunction unifiedEval(parseElement, ctx) {\n\t\t/** @type any[] */\n\t\tvar args = [ctx];\n\t\tvar async = false;\n\t\tvar wrappedAsyncs = false;\n\n\t\tif (parseElement.args) {\n\t\t\tfor (var i = 0; i < parseElement.args.length; i++) {\n\t\t\t\tvar argument = parseElement.args[i];\n\t\t\t\tif (argument == null) {\n\t\t\t\t\targs.push(null);\n\t\t\t\t} else if (Array.isArray(argument)) {\n\t\t\t\t\tvar arr = [];\n\t\t\t\t\tfor (var j = 0; j < argument.length; j++) {\n\t\t\t\t\t\tvar element = argument[j];\n\t\t\t\t\t\tvar value = element ? element.evaluate(ctx) : null; // OK\n\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\tif (value.then) {\n\t\t\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\t\t} else if (value.asyncWrapper) {\n\t\t\t\t\t\t\t\twrappedAsyncs = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarr.push(value);\n\t\t\t\t\t}\n\t\t\t\t\targs.push(arr);\n\t\t\t\t} else if (argument.evaluate) {\n\t\t\t\t\tvar value = argument.evaluate(ctx); // OK\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tif (value.then) {\n\t\t\t\t\t\t\tasync = true;\n\t\t\t\t\t\t} else if (value.asyncWrapper) {\n\t\t\t\t\t\t\twrappedAsyncs = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\targs.push(value);\n\t\t\t\t} else {\n\t\t\t\t\targs.push(argument);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (async) {\n\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\targs = wrapArrays(args);\n\t\t\t\tPromise.all(args)\n\t\t\t\t\t.then(function (values) {\n\t\t\t\t\t\tif (wrappedAsyncs) {\n\t\t\t\t\t\t\tunwrapAsyncs(values);\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar apply = parseElement.op.apply(parseElement, values);\n\t\t\t\t\t\t\tresolve(apply);\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\treject(e);\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (reason) {\n\t\t\t\t\t\treject(reason);\n\t\t\t\t\t});\n\t\t\t});\n\t\t} else {\n\t\t\tif (wrappedAsyncs) {\n\t\t\t\tunwrapAsyncs(args);\n\t\t\t}\n\t\t\treturn parseElement.op.apply(parseElement, args);\n\t\t}\n\t}\n\n\tlet _scriptAttrs = null;\n\n\t/**\n\t* getAttributes returns the attribute name(s) to use when\n\t* locating hyperscript scripts in a DOM element. If no value\n\t* has been configured, it defaults to _hyperscript.config.attributes\n\t* @returns string[]\n\t*/\n\tfunction getScriptAttributes() {\n\t\tif (_scriptAttrs == null) {\n\t\t\t_scriptAttrs = _hyperscript.config.attributes.replace(/ /g, \"\").split(\",\");\n\t\t}\n\t\treturn _scriptAttrs;\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @returns {string | null}\n\t*/\n\tfunction getScript(elt) {\n\t\tfor (var i = 0; i < getScriptAttributes().length; i++) {\n\t\t\tvar scriptAttribute = getScriptAttributes()[i];\n\t\t\tif (elt.hasAttribute && elt.hasAttribute(scriptAttribute)) {\n\t\t\t\treturn elt.getAttribute(scriptAttribute);\n\t\t\t}\n\t\t}\n\t\tif (elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\") {\n\t\t\treturn elt.innerText;\n\t\t}\n\t\treturn null;\n\t}\n\n\tvar hyperscriptFeaturesMap = new WeakMap\n\n\t/**\n\t* @param {*} elt\n\t* @returns {Object}\n\t*/\n\tfunction getHyperscriptFeatures(elt) {\n\t\tvar hyperscriptFeatures = hyperscriptFeaturesMap.get(elt);\n\t\tif (typeof hyperscriptFeatures === 'undefined') {\n\t\t\thyperscriptFeaturesMap.set(elt, hyperscriptFeatures = {});\n\t\t}\n\t\treturn hyperscriptFeatures;\n\t}\n\n\t/**\n\t* @param {Object} owner\n\t* @param {Context} ctx\n\t*/\n\tfunction addFeatures(owner, ctx) {\n\t\tif (owner) {\n\t\t\tmergeObjects(ctx, getHyperscriptFeatures(owner));\n\t\t\taddFeatures(owner.parentElement, ctx);\n\t\t}\n\t}\n\n\t/**\n\t* @param {*} owner\n\t* @param {*} feature\n\t* @param {*} hyperscriptTarget\n\t* @param {*} event\n\t* @returns {Context}\n\t*/\n\tfunction makeContext(owner, feature, hyperscriptTarget, event) {\n\t\t/** @type {Context} */\n\t\tvar ctx = {\n\t\t\tmeta: {\n\t\t\t\tparser: _parser,\n\t\t\t\tlexer: _lexer,\n\t\t\t\truntime: _runtime,\n\t\t\t\towner: owner,\n\t\t\t\tfeature: feature,\n\t\t\t\titerators: {},\n\t\t\t},\n\t\t\tme: hyperscriptTarget,\n\t\t\tevent: event,\n\t\t\ttarget: event ? event.target : null,\n\t\t\tdetail: event ? event.detail : null,\n\t\t\tsender: event ? event.detail ? event.detail.sender : null : null,\n\t\t\tbody: \"document\" in globalScope ? document.body : null,\n\t\t};\n\t\tctx.meta.ctx = ctx;\n\t\taddFeatures(owner, ctx);\n\t\treturn ctx;\n\t}\n\n\t/**\n\t* @returns string\n\t*/\n\tfunction getScriptSelector() {\n\t\treturn getScriptAttributes()\n\t\t\t.map(function (attribute) {\n\t\t\t\treturn \"[\" + attribute + \"]\";\n\t\t\t})\n\t\t\t.join(\", \");\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {string} type\n\t* @returns {any}\n\t*/\n\tfunction convertValue(value, type) {\n\t\tvar dynamicResolvers = CONVERSIONS.dynamicResolvers;\n\t\tfor (var i = 0; i < dynamicResolvers.length; i++) {\n\t\t\tvar dynamicResolver = dynamicResolvers[i];\n\t\t\tvar converted = dynamicResolver(type, value);\n\t\t\tif (converted !== undefined) {\n\t\t\t\treturn converted;\n\t\t\t}\n\t\t}\n\n\t\tif (value == null) {\n\t\t\treturn null;\n\t\t}\n\t\tvar converter = CONVERSIONS[type];\n\t\tif (converter) {\n\t\t\treturn converter(value);\n\t\t}\n\n\t\tthrow \"Unknown conversion : \" + type;\n\t}\n\n\t// TODO: There do not seem to be any references to this function.\n\t// Is it still in use, or can it be removed?\n\tfunction isType(o, type) {\n\t\treturn Object.prototype.toString.call(o) === \"[object \" + type + \"]\";\n\t}\n\n\t/**\n\t* @param {string} src\n\t* @returns {GrammarElement}\n\t*/\n\tfunction parse(src) {\n\t\tvar tokens = _lexer.tokenize(src);\n\t\tif (_parser.commandStart(tokens.currentToken())) {\n\t\t\tvar commandList = _parser.requireElement(\"commandList\", tokens);\n\t\t\tif (tokens.hasMore()) _parser.raiseParseError(tokens);\n\t\t\t_parser.ensureTerminated(commandList);\n\t\t\treturn commandList;\n\t\t} else if (_parser.featureStart(tokens.currentToken())) {\n\t\t\tvar hyperscript = _parser.requireElement(\"hyperscript\", tokens);\n\t\t\tif (tokens.hasMore()) _parser.raiseParseError(tokens);\n\t\t\treturn hyperscript;\n\t\t} else {\n\t\t\tvar expression = _parser.requireElement(\"expression\", tokens);\n\t\t\tif (tokens.hasMore()) _parser.raiseParseError(tokens);\n\t\t\treturn expression;\n\t\t}\n\t}\n\n\t/**\n\t *\n\t * @param {GrammarElement} elt\n\t * @param {Context} ctx\n\t * @returns {any}\n\t */\n\tfunction evaluateNoPromise(elt, ctx) {\n\t\tlet result = elt.evaluate(ctx);\n\t\tif (result.next) {\n\t\t\tthrow new Error(elt.sourceFor() + \" returned a Promise in a context that they are not allowed.\");\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t* @param {string} src\n\t* @param {Context} [ctx]\n\t* @param {Object} [args]\n\t* @returns {any}\n\t*/\n\tfunction evaluate(src, ctx, args) {\n\t\tclass HyperscriptModule extends EventTarget {\n\t\t\tconstructor(mod) {\n\t\t\t\tsuper();\n\t\t\t\tthis.module = mod;\n\t\t\t}\n\t\t\ttoString() {\n\t\t\t\treturn this.module.id;\n\t\t\t}\n\t\t}\n\n\t\tvar body = 'document' in globalScope\n\t\t\t? globalScope.document.body\n\t\t\t: new HyperscriptModule(args && args.module);\n\t\tctx = mergeObjects(makeContext(body, null, body, null), ctx || {});\n\t\tvar element = parse(src);\n\t\tif (element.execute) {\n\t\t\telement.execute(ctx);\n\t\t\treturn ctx.result;\n\t\t} else if (element.apply) {\n\t\t\telement.apply(body, body, args);\n\t\t\treturn getHyperscriptFeatures(body);\n\t\t} else {\n\t\t\treturn element.evaluate(ctx);\n\t\t}\n\n\t\tfunction makeModule() {\n\t\t\treturn {}\n\t\t}\n\t}\n\n\t/**\n\t* @param {HTMLElement} elt\n\t*/\n\tfunction processNode(elt) {\n\t\tvar selector = _runtime.getScriptSelector();\n\t\tif (matchesSelector(elt, selector)) {\n\t\t\tinitElement(elt, elt);\n\t\t}\n\t\tif (elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\") {\n\t\t\tinitElement(elt, document.body);\n\t\t}\n\t\tif (elt.querySelectorAll) {\n\t\t\tforEach(elt.querySelectorAll(selector + \", [type='text/hyperscript']\"), function (elt) {\n\t\t\t\tinitElement(elt, elt instanceof HTMLScriptElement && elt.type === \"text/hyperscript\" ? document.body : elt);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @param {Element} [target]\n\t*/\n\tfunction initElement(elt, target) {\n\t\tif (elt.closest && elt.closest(_hyperscript.config.disableSelector)) {\n\t\t\treturn;\n\t\t}\n\t\tvar internalData = getInternalData(elt);\n\t\tif (!internalData.initialized) {\n\t\t\tvar src = getScript(elt);\n\t\t\tif (src) {\n\t\t\t\ttry {\n\t\t\t\t\tinternalData.initialized = true;\n\t\t\t\t\tinternalData.script = src;\n\t\t\t\t\tvar tokens = _lexer.tokenize(src);\n\t\t\t\t\tvar hyperScript = _parser.parseHyperScript(tokens);\n\t\t\t\t\tif (!hyperScript) return;\n\t\t\t\t\thyperScript.apply(target || elt, elt);\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\ttriggerEvent(target || elt, \"load\", {\n\t\t\t\t\t\t\thyperscript: true,\n\t\t\t\t\t\t});\n\t\t\t\t\t}, 1);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_runtime.triggerEvent(elt, \"exception\", {\n\t\t\t\t\t\terror: e,\n\t\t\t\t\t});\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t\"hyperscript errors were found on the following element:\",\n\t\t\t\t\t\telt,\n\t\t\t\t\t\t\"\\n\\n\",\n\t\t\t\t\t\te.message,\n\t\t\t\t\t\te.stack\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tvar internalDataMap = new WeakMap\n\n\t/**\n\t* @param {Element} elt\n\t* @returns {Object}\n\t*/\n\tfunction getInternalData(elt) {\n\t\tvar internalData = internalDataMap.get(elt);\n\t\tif (typeof internalData === 'undefined') {\n\t\t\tinternalDataMap.set(elt, internalData = {});\n\t\t}\n\t\treturn internalData;\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {string} typeString\n\t* @param {boolean} [nullOk]\n\t* @returns {boolean}\n\t*/\n\tfunction typeCheck(value, typeString, nullOk) {\n\t\tif (value == null && nullOk) {\n\t\t\treturn true;\n\t\t}\n\t\tvar typeName = Object.prototype.toString.call(value).slice(8, -1);\n\t\treturn typeName === typeString;\n\t}\n\n\tfunction getElementScope(context) {\n\t\tvar elt = context.meta && context.meta.owner;\n\t\tif (elt) {\n\t\t\tvar internalData = getInternalData(elt);\n\t\t\tvar scopeName = \"elementScope\";\n\t\t\tif (context.meta.feature && context.meta.feature.behavior) {\n\t\t\t\tscopeName = context.meta.feature.behavior + \"Scope\";\n\t\t\t}\n\t\t\tvar elementScope = getOrInitObject(internalData, scopeName);\n\t\t\treturn elementScope;\n\t\t} else {\n\t\t\treturn {}; // no element, return empty scope\n\t\t}\n\t}\n\n\t/**\n\t* @param {string} str\n\t* @param {Context} context\n\t* @returns {any}\n\t*/\n\tfunction resolveSymbol(str, context, type) {\n\t\tif (str === \"me\" || str === \"my\" || str === \"I\") {\n\t\t\treturn context[\"me\"];\n\t\t}\n\t\tif (str === \"it\" || str === \"its\") {\n\t\t\treturn context[\"result\"];\n\t\t}\n\t\tif (str === \"you\" || str === \"your\" || str === \"yourself\") {\n\t\t\treturn context[\"beingTold\"];\n\t\t} else {\n\t\t\tif (type === \"global\") {\n\t\t\t\treturn globalScope[str];\n\t\t\t} else if (type === \"element\") {\n\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\treturn elementScope[str];\n\t\t\t} else if (type === \"local\") {\n\t\t\t\treturn context[str];\n\t\t\t} else {\n\t\t\t\t// meta scope (used for event conditionals)\n\t\t\t\tif (context.meta && context.meta.context) {\n\t\t\t\t\tvar fromMetaContext = context.meta.context[str];\n\t\t\t\t\tif (typeof fromMetaContext !== \"undefined\") {\n\t\t\t\t\t\treturn fromMetaContext;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// local scope\n\t\t\t\tvar fromContext = context[str];\n\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\treturn fromContext;\n\t\t\t\t} else {\n\t\t\t\t\t// element scope\n\t\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\t\tfromContext = elementScope[str];\n\t\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\t\treturn fromContext;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// global scope\n\t\t\t\t\t\treturn globalScope[str];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction setSymbol(str, context, type, value) {\n\t\tif (type === \"global\") {\n\t\t\tglobalScope[str] = value;\n\t\t} else if (type === \"element\") {\n\t\t\tvar elementScope = getElementScope(context);\n\t\t\telementScope[str] = value;\n\t\t} else if (type === \"local\") {\n\t\t\tcontext[str] = value;\n\t\t} else {\n\t\t\t// local scope\n\t\t\tvar fromContext = context[str];\n\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\tcontext[str] = value;\n\t\t\t} else {\n\t\t\t\t// element scope\n\t\t\t\tvar elementScope = getElementScope(context);\n\t\t\t\tfromContext = elementScope[str];\n\t\t\t\tif (typeof fromContext !== \"undefined\") {\n\t\t\t\t\telementScope[str] = value;\n\t\t\t\t} else {\n\t\t\t\t\tcontext[str] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {GrammarElement} command\n\t* @param {Context} context\n\t* @returns {undefined | GrammarElement}\n\t*/\n\tfunction findNext(command, context) {\n\t\tif (command) {\n\t\t\tif (command.resolveNext) {\n\t\t\t\treturn command.resolveNext(context);\n\t\t\t} else if (command.next) {\n\t\t\t\treturn command.next;\n\t\t\t} else {\n\t\t\t\treturn findNext(command.parent, context);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* @param {Object<string,any>} root\n\t* @param {string} property\n\t* @param {boolean} attribute\n\t* @returns {any}\n\t*/\n\tfunction flatGet(root, property, getter) {\n\t\tif (root != null) {\n\t\t\tvar val = getter(root, property);\n\t\t\tif (typeof val !== \"undefined\") {\n\t\t\t\treturn val;\n\t\t\t}\n\n\t\t\tif (shouldAutoIterate(root)) {\n\t\t\t\t// flat map\n\t\t\t\tvar result = [];\n\t\t\t\tfor (var component of root) {\n\t\t\t\t\tvar componentValue = getter(component, property);\n\t\t\t\t\tif (componentValue) {\n\t\t\t\t\t\tresult.push(componentValue);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction resolveProperty(root, property) {\n\t\treturn flatGet(root, property, (root, property) => root[property] )\n\t}\n\n\tfunction resolveAttribute(root, property) {\n\t\treturn flatGet(root, property, (root, property) => root.getAttribute && root.getAttribute(property) )\n\t}\n\n\t/**\n\t *\n\t * @param {Object<string, any>} root\n\t * @param {string} property\n\t * @returns {string}\n\t */\n\tfunction resolveStyle(root, property) {\n\t\treturn flatGet(root, property, (root, property) => root.style && root.style[property] )\n\t}\n\n\t/**\n\t *\n\t * @param {Object<string, any>} root\n\t * @param {string} property\n\t * @returns {string}\n\t */\n\tfunction resolveComputedStyle(root, property) {\n\t\treturn flatGet(root, property, (root, property) => getComputedStyle(root).getPropertyValue(property) )\n\t}\n\n\t/**\n\t* @param {Element} elt\n\t* @param {string[]} nameSpace\n\t* @param {string} name\n\t* @param {any} value\n\t*/\n\tfunction assignToNamespace(elt, nameSpace, name, value) {\n\t\tlet root\n\t\tif (typeof document !== \"undefined\" && elt === document.body) {\n\t\t\troot = globalScope;\n\t\t} else {\n\t\t\troot = getHyperscriptFeatures(elt);\n\t\t}\n\t\twhile (nameSpace.length > 0) {\n\t\t\tvar propertyName = nameSpace.shift();\n\t\t\tvar newRoot = root[propertyName];\n\t\t\tif (newRoot == null) {\n\t\t\t\tnewRoot = {};\n\t\t\t\troot[propertyName] = newRoot;\n\t\t\t}\n\t\t\troot = newRoot;\n\t\t}\n\n\t\troot[name] = value;\n\t}\n\n\tfunction getHyperTrace(ctx, thrown) {\n\t\tvar trace = [];\n\t\tvar root = ctx;\n\t\twhile (root.meta.caller) {\n\t\t\troot = root.meta.caller;\n\t\t}\n\t\tif (root.meta.traceMap) {\n\t\t\treturn root.meta.traceMap.get(thrown, trace);\n\t\t}\n\t}\n\n\tfunction registerHyperTrace(ctx, thrown) {\n\t\tvar trace = [];\n\t\tvar root = null;\n\t\twhile (ctx != null) {\n\t\t\ttrace.push(ctx);\n\t\t\troot = ctx;\n\t\t\tctx = ctx.meta.caller;\n\t\t}\n\t\tif (root.meta.traceMap == null) {\n\t\t\troot.meta.traceMap = new Map(); // TODO - WeakMap?\n\t\t}\n\t\tif (!root.meta.traceMap.get(thrown)) {\n\t\t\tvar traceEntry = {\n\t\t\t\ttrace: trace,\n\t\t\t\tprint: function (logger) {\n\t\t\t\t\tlogger = logger || console.error;\n\t\t\t\t\tlogger(\"hypertrace /// \");\n\t\t\t\t\tvar maxLen = 0;\n\t\t\t\t\tfor (var i = 0; i < trace.length; i++) {\n\t\t\t\t\t\tmaxLen = Math.max(maxLen, trace[i].meta.feature.displayName.length);\n\t\t\t\t\t}\n\t\t\t\t\tfor (var i = 0; i < trace.length; i++) {\n\t\t\t\t\t\tvar traceElt = trace[i];\n\t\t\t\t\t\tlogger(\n\t\t\t\t\t\t\t\" ->\",\n\t\t\t\t\t\t\ttraceElt.meta.feature.displayName.padEnd(maxLen + 2),\n\t\t\t\t\t\t\t\"-\",\n\t\t\t\t\t\t\ttraceElt.meta.owner\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\troot.meta.traceMap.set(thrown, traceEntry);\n\t\t}\n\t}\n\n\t/**\n\t* @param {string} str\n\t* @returns {string}\n\t*/\n\tfunction escapeSelector(str) {\n\t\treturn str.replace(/:/g, function (str) {\n\t\t\treturn \"\\\\\" + str;\n\t\t});\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @param {*} elt\n\t*/\n\tfunction nullCheck(value, elt) {\n\t\tif (value == null) {\n\t\t\tthrow new Error(\"'\" + elt.sourceFor() + \"' is null\");\n\t\t}\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @returns {boolean}\n\t*/\n\tfunction isEmpty(value) {\n\t\treturn value == undefined || value.length === 0;\n\t}\n\n\t/**\n\t* @param {any} value\n\t* @returns {boolean}\n\t*/\n\tfunction doesExist(value) {\n\t\tif(value == null){\n\t\t\treturn false;\n\t\t}\n\t\tif (shouldAutoIterate(value)) {\n\t\t\tfor (const elt of value) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t* @param {Node} node\n\t* @returns {Document|ShadowRoot}\n\t*/\n\tfunction getRootNode(node) {\n\t\tif (node && node instanceof Node) {\n\t\t\tvar rv = node.getRootNode();\n\t\t\tif (rv instanceof Document || rv instanceof ShadowRoot) return rv;\n\t\t}\n\t\treturn document;\n\t}\n\n\t/**\n\t *\n\t * @param {Element} elt\n\t * @param {GrammarElement} onFeature\n\t * @returns {EventQueue}\n\t */\n\tfunction getEventQueueFor(elt, onFeature) {\n\t\tlet internalData = getInternalData(elt);\n\t\tvar eventQueuesForElt = internalData.eventQueues;\n\t\tif (eventQueuesForElt == null) {\n\t\t\teventQueuesForElt = new Map();\n\t\t\tinternalData.eventQueues = eventQueuesForElt;\n\t\t}\n\t\tvar eventQueueForFeature = eventQueuesForElt.get(onFeature);\n\t\tif (eventQueueForFeature == null) {\n\t\t\teventQueueForFeature = {queue:[], executing:false};\n\t\t\teventQueuesForElt.set(onFeature, eventQueueForFeature);\n\t\t}\n\t\treturn eventQueueForFeature;\n\t}\n\n\t/** @type string | null */\n\t// @ts-ignore\n\tvar hyperscriptUrl = \"document\" in globalScope ? import.meta.url : null;\n\n\t/** @type {RuntimeObject} */\n\treturn {\n\t\ttypeCheck,\n\t\tforEach,\n\t\timplicitLoop,\n\t\tshouldAutoIterate,\n\t\ttriggerEvent,\n\t\tmatchesSelector,\n\t\tgetScript,\n\t\tprocessNode,\n\t\tevaluate,\n\t\tevaluateNoPromise,\n\t\tparse,\n\t\tgetScriptSelector,\n\t\tresolveSymbol,\n\t\tsetSymbol,\n\t\tmakeContext,\n\t\tfindNext,\n\t\tunifiedEval,\n\t\tconvertValue,\n\t\tunifiedExec,\n\t\tresolveProperty,\n\t\tresolveAttribute,\n\t\tresolveStyle,\n\t\tresolveComputedStyle,\n\t\tassignToNamespace,\n\t\tregisterHyperTrace,\n\t\tgetHyperTrace,\n\t\tgetInternalData,\n\t\tgetHyperscriptFeatures,\n\t\tescapeSelector,\n\t\tnullCheck,\n\t\tisEmpty,\n\t\tdoesExist,\n\t\tgetRootNode,\n\t\tgetEventQueueFor,\n\t\thyperscriptUrl,\n\t\tHALT,\n\t};\n})();\n\n//====================================================================\n// Grammar\n//====================================================================\n{\n\t_parser.addLeafExpression(\"parenthesized\", function (parser, _runtime, tokens) {\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tvar follows = tokens.clearFollow();\n\t\t\ttry {\n\t\t\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\t\t} finally {\n\t\t\t\ttokens.restoreFollow(follows);\n\t\t\t}\n\t\t\ttokens.requireOpToken(\")\");\n\t\t\treturn expr;\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"string\", function (parser, runtime, tokens) {\n\t\tvar stringToken = tokens.matchTokenType(\"STRING\");\n\t\tif (!stringToken) return;\n\t\tvar rawValue = stringToken.value;\n\t\t/** @type {any[]} */\n\t\tvar args;\n\t\tif (stringToken.template) {\n\t\t\tvar innerTokens = _lexer.tokenize(rawValue, true);\n\t\t\targs = parser.parseStringTemplate(innerTokens);\n\t\t} else {\n\t\t\targs = [];\n\t\t}\n\t\treturn {\n\t\t\ttype: \"string\",\n\t\t\ttoken: stringToken,\n\t\t\targs: args,\n\t\t\top: function (context) {\n\t\t\t\tvar returnStr = \"\";\n\t\t\t\tfor (var i = 1; i < arguments.length; i++) {\n\t\t\t\t\tvar val = arguments[i];\n\t\t\t\t\tif (val !== undefined) {\n\t\t\t\t\t\treturnStr += val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn returnStr;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\tif (args.length === 0) {\n\t\t\t\t\treturn rawValue;\n\t\t\t\t} else {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"nakedString\", function (parser, runtime, tokens) {\n\t\tif (tokens.hasMore()) {\n\t\t\tvar tokenArr = tokens.consumeUntilWhitespace();\n\t\t\ttokens.matchTokenType(\"WHITESPACE\");\n\t\t\treturn {\n\t\t\t\ttype: \"nakedString\",\n\t\t\t\ttokens: tokenArr,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn tokenArr\n\t\t\t\t\t\t.map(function (t) {\n\t\t\t\t\t\t\treturn t.value;\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.join(\"\");\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"number\", function (parser, runtime, tokens) {\n\t\tvar number = tokens.matchTokenType(\"NUMBER\");\n\t\tif (!number) return;\n\t\tvar numberToken = number;\n\t\tvar value = parseFloat(number.value);\n\t\treturn {\n\t\t\ttype: \"number\",\n\t\t\tvalue: value,\n\t\t\tnumberToken: numberToken,\n\t\t\tevaluate: function () {\n\t\t\t\treturn value;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"idRef\", function (parser, runtime, tokens) {\n\t\tvar elementId = tokens.matchTokenType(\"ID_REF\");\n\t\tif (!elementId) return;\n\t\t// TODO - unify these two expression types\n\t\tif (elementId.template) {\n\t\t\tvar templateValue = elementId.value.substr(2, elementId.value.length - 2);\n\t\t\tvar innerTokens = _lexer.tokenize(templateValue);\n\t\t\tvar innerExpression = parser.requireElement(\"expression\", innerTokens);\n\t\t\treturn {\n\t\t\t\ttype: \"idRefTemplate\",\n\t\t\t\targs: [innerExpression],\n\t\t\t\top: function (context, arg) {\n\t\t\t\t\treturn runtime.getRootNode(context.me).getElementById(arg);\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tconst value = elementId.value.substr(1);\n\t\t\treturn {\n\t\t\t\ttype: \"idRef\",\n\t\t\t\tcss: elementId.value,\n\t\t\t\tvalue: value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\truntime.getRootNode(context.me).getElementById(value)\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"classRef\", function (parser, runtime, tokens) {\n\t\tvar classRef = tokens.matchTokenType(\"CLASS_REF\");\n\n\t\tif (!classRef) return;\n\n\t\t// TODO - unify these two expression types\n\t\tif (classRef.template) {\n\t\t\tvar templateValue = classRef.value.substr(2, classRef.value.length - 2);\n\t\t\tvar innerTokens = _lexer.tokenize(templateValue);\n\t\t\tvar innerExpression = parser.requireElement(\"expression\", innerTokens);\n\t\t\treturn {\n\t\t\t\ttype: \"classRefTemplate\",\n\t\t\t\targs: [innerExpression],\n\t\t\t\top: function (context, arg) {\n\t\t\t\t\treturn new ElementCollection(\".\" + arg, context.me, true)\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tconst css = classRef.value;\n\t\t\treturn {\n\t\t\t\ttype: \"classRef\",\n\t\t\t\tcss: css,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn new ElementCollection(css, context.me, true)\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\tclass TemplatedQueryElementCollection extends ElementCollection {\n\t\tconstructor(css, relativeToElement, templateParts) {\n\t\t\tsuper(css, relativeToElement);\n\t\t\tthis.templateParts = templateParts;\n\t\t\tthis.elements = templateParts.filter(elt => elt instanceof Element);\n\t\t}\n\n\t\tget css() {\n\t\t\tlet rv = \"\", i = 0\n\t\t\tfor (const val of this.templateParts) {\n\t\t\t\tif (val instanceof Element) {\n\t\t\t\t\trv += \"[data-hs-query-id='\" + i++ + \"']\";\n\t\t\t\t} else rv += val;\n\t\t\t}\n\t\t\treturn rv;\n\t\t}\n\n\t\t[Symbol.iterator]() {\n\t\t\tthis.elements.forEach((el, i) => el.dataset.hsQueryId = i);\n\t\t\tconst rv = super[Symbol.iterator]();\n\t\t\tthis.elements.forEach(el => el.removeAttribute('data-hs-query-id'));\n\t\t\treturn rv;\n\t\t}\n\t}\n\n\t_parser.addLeafExpression(\"queryRef\", function (parser, runtime, tokens) {\n\t\tvar queryStart = tokens.matchOpToken(\"<\");\n\t\tif (!queryStart) return;\n\t\tvar queryTokens = tokens.consumeUntil(\"/\");\n\t\ttokens.requireOpToken(\"/\");\n\t\ttokens.requireOpToken(\">\");\n\t\tvar queryValue = queryTokens\n\t\t\t.map(function (t) {\n\t\t\t\tif (t.type === \"STRING\") {\n\t\t\t\t\treturn '\"' + t.value + '\"';\n\t\t\t\t} else {\n\t\t\t\t\treturn t.value;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.join(\"\");\n\n\t\tif (queryValue.indexOf(\"$\") >= 0) {\n\t\t\tvar template = true;\n\t\t\tvar innerTokens = _lexer.tokenize(queryValue, true);\n\t\t\tvar args = parser.parseStringTemplate(innerTokens);\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"queryRef\",\n\t\t\tcss: queryValue,\n\t\t\targs: args,\n\t\t\top: function (context, ...args) {\n\t\t\t\tif (template) {\n\t\t\t\t\treturn new TemplatedQueryElementCollection(queryValue, context.me, args)\n\t\t\t\t} else {\n\t\t\t\t\treturn new ElementCollection(queryValue, context.me)\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"attributeRef\", function (parser, runtime, tokens) {\n\t\tvar attributeRef = tokens.matchTokenType(\"ATTRIBUTE_REF\");\n\t\tif (!attributeRef) return;\n\t\tvar outerVal = attributeRef.value;\n\t\tif (outerVal.indexOf(\"[\") === 0) {\n\t\t\tvar innerValue = outerVal.substring(2, outerVal.length - 1);\n\t\t} else {\n\t\t\tvar innerValue = outerVal.substring(1);\n\t\t}\n\t\tvar css = \"[\" + innerValue + \"]\";\n\t\tvar split = innerValue.split(\"=\");\n\t\tvar name = split[0];\n\t\tvar value = split[1];\n\t\tif (value) {\n\t\t\t// strip quotes\n\t\t\tif (value.indexOf('\"') === 0) {\n\t\t\t\tvalue = value.substring(1, value.length - 1);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: \"attributeRef\",\n\t\t\tname: name,\n\t\t\tcss: css,\n\t\t\tvalue: value,\n\t\t\top: function (context) {\n\t\t\t\tvar target = context.beingTold || context.me;\n\t\t\t\tif (target) {\n\t\t\t\t\treturn target.getAttribute(name);\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"styleRef\", function (parser, runtime, tokens) {\n\t\tvar styleRef = tokens.matchTokenType(\"STYLE_REF\");\n\t\tif (!styleRef) return;\n\t\tvar styleProp = styleRef.value.substr(1);\n\t\tif (styleProp.startsWith(\"computed-\")) {\n\t\t\tstyleProp = styleProp.substr(\"computed-\".length);\n\t\t\treturn {\n\t\t\t\ttype: \"computedStyleRef\",\n\t\t\t\tname: styleProp,\n\t\t\t\top: function (context) {\n\t\t\t\t\tvar target = context.beingTold || context.me;\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\treturn runtime.resolveComputedStyle(target, styleProp);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttype: \"styleRef\",\n\t\t\t\tname: styleProp,\n\t\t\t\top: function (context) {\n\t\t\t\t\tvar target = context.beingTold || context.me;\n\t\t\t\t\tif (target) {\n\t\t\t\t\t\treturn runtime.resolveStyle(target, styleProp);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"objectKey\", function (parser, runtime, tokens) {\n\t\tvar token;\n\t\tif ((token = tokens.matchTokenType(\"STRING\"))) {\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\tkey: token.value,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn token.value;\n\t\t\t\t},\n\t\t\t};\n\t\t} else if (tokens.matchOpToken(\"[\")) {\n\t\t\tvar expr = parser.parseElement(\"expression\", tokens);\n\t\t\ttokens.requireOpToken(\"]\");\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\texpr: expr,\n\t\t\t\targs: [expr],\n\t\t\t\top: function (ctx, expr) {\n\t\t\t\t\treturn expr;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tvar key = \"\";\n\t\t\tdo {\n\t\t\t\ttoken = tokens.matchTokenType(\"IDENTIFIER\") || tokens.matchOpToken(\"-\");\n\t\t\t\tif (token) key += token.value;\n\t\t\t} while (token);\n\t\t\treturn {\n\t\t\t\ttype: \"objectKey\",\n\t\t\t\tkey: key,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn key;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"objectLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"{\")) return;\n\t\tvar keyExpressions = [];\n\t\tvar valueExpressions = [];\n\t\tif (!tokens.matchOpToken(\"}\")) {\n\t\t\tdo {\n\t\t\t\tvar name = parser.requireElement(\"objectKey\", tokens);\n\t\t\t\ttokens.requireOpToken(\":\");\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalueExpressions.push(value);\n\t\t\t\tkeyExpressions.push(name);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\"}\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"objectLiteral\",\n\t\t\targs: [keyExpressions, valueExpressions],\n\t\t\top: function (context, keys, values) {\n\t\t\t\tvar returnVal = {};\n\t\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\t\treturnVal[keys[i]] = values[i];\n\t\t\t\t}\n\t\t\t\treturn returnVal;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"nakedNamedArgumentList\", function (parser, runtime, tokens) {\n\t\tvar fields = [];\n\t\tvar valueExpressions = [];\n\t\tif (tokens.currentToken().type === \"IDENTIFIER\") {\n\t\t\tdo {\n\t\t\t\tvar name = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\ttokens.requireOpToken(\":\");\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalueExpressions.push(value);\n\t\t\t\tfields.push({ name: name, value: value });\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t}\n\t\treturn {\n\t\t\ttype: \"namedArgumentList\",\n\t\t\tfields: fields,\n\t\t\targs: [valueExpressions],\n\t\t\top: function (context, values) {\n\t\t\t\tvar returnVal = { _namedArgList_: true };\n\t\t\t\tfor (var i = 0; i < values.length; i++) {\n\t\t\t\t\tvar field = fields[i];\n\t\t\t\t\treturnVal[field.name.value] = values[i];\n\t\t\t\t}\n\t\t\t\treturn returnVal;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"namedArgumentList\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"(\")) return;\n\t\tvar elt = parser.requireElement(\"nakedNamedArgumentList\", tokens);\n\t\ttokens.requireOpToken(\")\");\n\t\treturn elt;\n\t});\n\n\t_parser.addGrammarElement(\"symbol\", function (parser, runtime, tokens) {\n\t\t/** @scope {SymbolScope} */\n\t\tvar scope = \"default\";\n\t\tif (tokens.matchToken(\"global\")) {\n\t\t\tscope = \"global\";\n\t\t} else if (tokens.matchToken(\"element\") || tokens.matchToken(\"module\")) {\n\t\t\tscope = \"element\";\n\t\t\t// optional possessive\n\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t} else if (tokens.matchToken(\"local\")) {\n\t\t\tscope = \"local\";\n\t\t}\n\n\t\t// TODO better look ahead here\n\t\tlet eltPrefix = tokens.matchOpToken(\":\");\n\t\tlet identifier = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (identifier) {\n\t\t\tvar name = identifier.value;\n\t\t\tif (eltPrefix) {\n\t\t\t\tname = \":\" + name;\n\t\t\t}\n\t\t\tif (scope === \"default\") {\n\t\t\t\tif (name.indexOf(\"$\") === 0) {\n\t\t\t\t\tscope = \"global\";\n\t\t\t\t}\n\t\t\t\tif (name.indexOf(\":\") === 0) {\n\t\t\t\t\tscope = \"element\";\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\ttype: \"symbol\",\n\t\t\t\ttoken: identifier,\n\t\t\t\tscope: scope,\n\t\t\t\tname: name,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.resolveSymbol(name, context, scope);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"implicitMeTarget\", function (parser, runtime, tokens) {\n\t\treturn {\n\t\t\ttype: \"implicitMeTarget\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn context.beingTold || context.me;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"boolean\", function (parser, runtime, tokens) {\n\t\tvar booleanLiteral = tokens.matchToken(\"true\") || tokens.matchToken(\"false\");\n\t\tif (!booleanLiteral) return;\n\t\tconst value = booleanLiteral.value === \"true\";\n\t\treturn {\n\t\t\ttype: \"boolean\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn value;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"null\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"null\")) {\n\t\t\treturn {\n\t\t\t\ttype: \"null\",\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn null;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_parser.addLeafExpression(\"arrayLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"[\")) return;\n\t\tvar values = [];\n\t\tif (!tokens.matchOpToken(\"]\")) {\n\t\t\tdo {\n\t\t\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\t\t\tvalues.push(expr);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\"]\");\n\t\t}\n\t\treturn {\n\t\t\ttype: \"arrayLiteral\",\n\t\t\tvalues: values,\n\t\t\targs: [values],\n\t\t\top: function (context, values) {\n\t\t\t\treturn values;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"blockLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"\\\\\")) return;\n\t\tvar args = [];\n\t\tvar arg1 = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (arg1) {\n\t\t\targs.push(arg1);\n\t\t\twhile (tokens.matchOpToken(\",\")) {\n\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t}\n\t\t}\n\t\t// TODO compound op token\n\t\ttokens.requireOpToken(\"-\");\n\t\ttokens.requireOpToken(\">\");\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\treturn {\n\t\t\ttype: \"blockLiteral\",\n\t\t\targs: args,\n\t\t\texpr: expr,\n\t\t\tevaluate: function (ctx) {\n\t\t\t\tvar returnFunc = function () {\n\t\t\t\t\t//TODO - push scope\n\t\t\t\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\t\t\t\tctx[args[i].value] = arguments[i];\n\t\t\t\t\t}\n\t\t\t\t\treturn expr.evaluate(ctx); //OK\n\t\t\t\t};\n\t\t\t\treturn returnFunc;\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addIndirectExpression(\"propertyAccess\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\".\")) return;\n\t\tvar prop = tokens.requireTokenType(\"IDENTIFIER\");\n\t\tvar propertyAccess = {\n\t\t\ttype: \"propertyAccess\",\n\t\t\troot: root,\n\t\t\tprop: prop,\n\t\t\targs: [root],\n\t\t\top: function (_context, rootVal) {\n\t\t\t\tvar value = runtime.resolveProperty(rootVal, prop.value);\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"of\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"of\")) return;\n\t\tvar newRoot = parser.requireElement(\"unaryExpression\", tokens);\n\t\t// find the urroot\n\t\tvar childOfUrRoot = null;\n\t\tvar urRoot = root;\n\t\twhile (urRoot.root) {\n\t\t\tchildOfUrRoot = urRoot;\n\t\t\turRoot = urRoot.root;\n\t\t}\n\t\tif (urRoot.type !== \"symbol\" && urRoot.type !== \"attributeRef\" && urRoot.type !== \"styleRef\" && urRoot.type !== \"computedStyleRef\") {\n\t\t\tparser.raiseParseError(tokens, \"Cannot take a property of a non-symbol: \" + urRoot.type);\n\t\t}\n\t\tvar attribute = urRoot.type === \"attributeRef\";\n\t\tvar style = urRoot.type === \"styleRef\" || urRoot.type === \"computedStyleRef\";\n\t\tif (attribute || style) {\n\t\t\tvar attributeElt = urRoot\n\t\t}\n\t\tvar prop = urRoot.name;\n\n\t\tvar propertyAccess = {\n\t\t\ttype: \"ofExpression\",\n\t\t\tprop: urRoot.token,\n\t\t\troot: newRoot,\n\t\t\tattribute: attributeElt,\n\t\t\texpression: root,\n\t\t\targs: [newRoot],\n\t\t\top: function (context, rootVal) {\n\t\t\t\tif (attribute) {\n\t\t\t\t\treturn runtime.resolveAttribute(rootVal, prop);\n\t\t\t\t} else if (style) {\n\t\t\t\t\tif (urRoot.type === \"computedStyleRef\") {\n\t\t\t\t\t\treturn runtime.resolveComputedStyle(rootVal, prop);\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn runtime.resolveStyle(rootVal, prop);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn runtime.resolveProperty(rootVal, prop);\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\n\t\tif (urRoot.type === \"attributeRef\") {\n\t\t\tpropertyAccess.attribute = urRoot;\n\t\t}\n\t\tif (childOfUrRoot) {\n\t\t\tchildOfUrRoot.root = propertyAccess;\n\t\t\tchildOfUrRoot.args = [propertyAccess];\n\t\t} else {\n\t\t\troot = propertyAccess;\n\t\t}\n\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, root);\n\t});\n\n\t_parser.addIndirectExpression(\"possessive\", function (parser, runtime, tokens, root) {\n\t\tif (parser.possessivesDisabled) {\n\t\t\treturn;\n\t\t}\n\t\tvar apostrophe = tokens.matchOpToken(\"'\");\n\t\tif (\n\t\t\tapostrophe ||\n\t\t\t(root.type === \"symbol\" &&\n\t\t\t\t(root.name === \"my\" || root.name === \"its\" || root.name === \"your\") &&\n\t\t\t\t(tokens.currentToken().type === \"IDENTIFIER\" || tokens.currentToken().type === \"ATTRIBUTE_REF\" || tokens.currentToken().type === \"STYLE_REF\"))\n\t\t) {\n\t\t\tif (apostrophe) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t\tvar attribute = parser.parseElement(\"attributeRef\", tokens);\n\t\t\tif (attribute == null) {\n\t\t\t\tvar style = parser.parseElement(\"styleRef\", tokens);\n\t\t\t\tif (style == null) {\n\t\t\t\t\tvar prop = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar propertyAccess = {\n\t\t\t\ttype: \"possessive\",\n\t\t\t\troot: root,\n\t\t\t\tattribute: attribute || style,\n\t\t\t\tprop: prop,\n\t\t\t\targs: [root],\n\t\t\t\top: function (context, rootVal) {\n\t\t\t\t\tif (attribute) {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tvar value = runtime.resolveAttribute(rootVal, attribute.name);\n\t\t\t\t\t} else if (style) {\n\t\t\t\t\t\t// @ts-ignore\n\t\t\t\t\t\tif (style.type === 'computedStyleRef') {\n\t\t\t\t\t\t\tvar value = runtime.resolveComputedStyle(rootVal, style.name);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar value = runtime.resolveStyle(rootVal, style.name);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar value = runtime.resolveProperty(rootVal, prop.value);\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t\t}\n\t});\n\n\t_parser.addIndirectExpression(\"inExpression\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"in\")) return;\n\t\tvar target = parser.requireElement(\"unaryExpression\", tokens);\n\t\tvar propertyAccess = {\n\t\t\ttype: \"inExpression\",\n\t\t\troot: root,\n\t\t\targs: [root, target],\n\t\t\top: function (context, rootVal, target) {\n\t\t\t\tvar returnArr = [];\n\t\t\t\tif (rootVal.css) {\n\t\t\t\t\truntime.implicitLoop(target, function (targetElt) {\n\t\t\t\t\t\tvar results = targetElt.querySelectorAll(rootVal.css);\n\t\t\t\t\t\tfor (var i = 0; i < results.length; i++) {\n\t\t\t\t\t\t\treturnArr.push(results[i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else if (rootVal instanceof Element) {\n\t\t\t\t\tvar within = false;\n\t\t\t\t\truntime.implicitLoop(target, function (targetElt) {\n\t\t\t\t\t\tif (targetElt.contains(rootVal)) {\n\t\t\t\t\t\t\twithin = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tif(within) {\n\t\t\t\t\t\treturn rootVal;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\truntime.implicitLoop(rootVal, function (rootElt) {\n\t\t\t\t\t\truntime.implicitLoop(target, function (targetElt) {\n\t\t\t\t\t\t\tif (rootElt === targetElt) {\n\t\t\t\t\t\t\t\treturnArr.push(rootElt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn returnArr;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"asExpression\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchToken(\"as\")) return;\n\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\t\tvar conversion = parser.requireElement(\"dotOrColonPath\", tokens).evaluate(); // OK No promise\n\t\tvar propertyAccess = {\n\t\t\ttype: \"asExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, rootVal) {\n\t\t\t\treturn runtime.convertValue(rootVal, conversion);\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, propertyAccess);\n\t});\n\n\t_parser.addIndirectExpression(\"functionCall\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\"(\")) return;\n\t\tvar args = [];\n\t\tif (!tokens.matchOpToken(\")\")) {\n\t\t\tdo {\n\t\t\t\targs.push(parser.requireElement(\"expression\", tokens));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\n\t\tif (root.root) {\n\t\t\tvar functionCall = {\n\t\t\t\ttype: \"functionCall\",\n\t\t\t\troot: root,\n\t\t\t\targExressions: args,\n\t\t\t\targs: [root.root, args],\n\t\t\t\top: function (context, rootRoot, args) {\n\t\t\t\t\truntime.nullCheck(rootRoot, root.root);\n\t\t\t\t\tvar func = rootRoot[root.prop.value];\n\t\t\t\t\truntime.nullCheck(func, root);\n\t\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\t\targs.push(context);\n\t\t\t\t\t}\n\t\t\t\t\treturn func.apply(rootRoot, args);\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\tvar functionCall = {\n\t\t\t\ttype: \"functionCall\",\n\t\t\t\troot: root,\n\t\t\t\targExressions: args,\n\t\t\t\targs: [root, args],\n\t\t\t\top: function (context, func, argVals) {\n\t\t\t\t\truntime.nullCheck(func, root);\n\t\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\t\targVals.push(context);\n\t\t\t\t\t}\n\t\t\t\t\tvar apply = func.apply(null, argVals);\n\t\t\t\t\treturn apply;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn parser.parseElement(\"indirectExpression\", tokens, functionCall);\n\t});\n\n\t_parser.addIndirectExpression(\"attributeRefAccess\", function (parser, runtime, tokens, root) {\n\t\tvar attribute = parser.parseElement(\"attributeRef\", tokens);\n\t\tif (!attribute) return;\n\t\tvar attributeAccess = {\n\t\t\ttype: \"attributeRefAccess\",\n\t\t\troot: root,\n\t\t\tattribute: attribute,\n\t\t\targs: [root],\n\t\t\top: function (_ctx, rootVal) {\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar value = runtime.resolveAttribute(rootVal, attribute.name);\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn _runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t\treturn attributeAccess;\n\t});\n\n\t_parser.addIndirectExpression(\"arrayIndex\", function (parser, runtime, tokens, root) {\n\t\tif (!tokens.matchOpToken(\"[\")) return;\n\t\tvar andBefore = false;\n\t\tvar andAfter = false;\n\t\tvar firstIndex = null;\n\t\tvar secondIndex = null;\n\n\t\tif (tokens.matchOpToken(\"..\")) {\n\t\t\tandBefore = true;\n\t\t\tfirstIndex = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\tfirstIndex = parser.requireElement(\"expression\", tokens);\n\n\t\t\tif (tokens.matchOpToken(\"..\")) {\n\t\t\t\tandAfter = true;\n\t\t\t\tvar current = tokens.currentToken();\n\t\t\t\tif (current.type !== \"R_BRACKET\") {\n\t\t\t\t\tsecondIndex = parser.parseElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\ttokens.requireOpToken(\"]\");\n\n\t\tvar arrayIndex = {\n\t\t\ttype: \"arrayIndex\",\n\t\t\troot: root,\n\t\t\tprop: firstIndex,\n\t\t\tfirstIndex: firstIndex,\n\t\t\tsecondIndex: secondIndex,\n\t\t\targs: [root, firstIndex, secondIndex],\n\t\t\top: function (_ctx, root, firstIndex, secondIndex) {\n\t\t\t\tif (root == null) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\tif (andBefore) {\n\t\t\t\t\tif (firstIndex < 0) {\n\t\t\t\t\t\tfirstIndex = root.length + firstIndex;\n\t\t\t\t\t}\n\t\t\t\t\treturn root.slice(0, firstIndex + 1); // returns all items from beginning to firstIndex (inclusive)\n\t\t\t\t} else if (andAfter) {\n\t\t\t\t\tif (secondIndex != null) {\n\t\t\t\t\t\tif (secondIndex < 0) {\n\t\t\t\t\t\t\tsecondIndex = root.length + secondIndex;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn root.slice(firstIndex, secondIndex + 1); // returns all items from firstIndex to secondIndex (inclusive)\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn root.slice(firstIndex); // returns from firstIndex to end of array\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn root[firstIndex];\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn _runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\n\t\treturn _parser.parseElement(\"indirectExpression\", tokens, arrayIndex);\n\t});\n\n\t// taken from https://drafts.csswg.org/css-values-4/#relative-length\n\t// and https://drafts.csswg.org/css-values-4/#absolute-length\n\t// (NB: we do not support `in` dues to conflicts w/ the hyperscript grammar)\n\tvar STRING_POSTFIXES = [\n\t\t'em', 'ex', 'cap', 'ch', 'ic', 'rem', 'lh', 'rlh', 'vw', 'vh', 'vi', 'vb', 'vmin', 'vmax',\n\t\t'cm', 'mm', 'Q', 'pc', 'pt', 'px'\n\t];\n\t_parser.addGrammarElement(\"postfixExpression\", function (parser, runtime, tokens) {\n\t\tvar root = parser.parseElement(\"primaryExpression\", tokens);\n\n\t\tlet stringPosfix = tokens.matchAnyToken.apply(tokens, STRING_POSTFIXES) || tokens.matchOpToken(\"%\");\n\t\tif (stringPosfix) {\n\t\t\treturn {\n\t\t\t\ttype: \"stringPostfix\",\n\t\t\t\tpostfix: stringPosfix.value,\n\t\t\t\targs: [root],\n\t\t\t\top: function (context, val) {\n\t\t\t\t\treturn \"\" + val + stringPosfix.value;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tvar timeFactor = null;\n\t\tif (tokens.matchToken(\"s\") || tokens.matchToken(\"seconds\")) {\n\t\t\ttimeFactor = 1000;\n\t\t} else if (tokens.matchToken(\"ms\") || tokens.matchToken(\"milliseconds\")) {\n\t\t\ttimeFactor = 1;\n\t\t}\n\t\tif (timeFactor) {\n\t\t\treturn {\n\t\t\t\ttype: \"timeExpression\",\n\t\t\t\ttime: root,\n\t\t\t\tfactor: timeFactor,\n\t\t\t\targs: [root],\n\t\t\t\top: function (_context, val) {\n\t\t\t\t\treturn val * timeFactor;\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\tif (tokens.matchOpToken(\":\")) {\n\t\t\tvar typeName = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tvar nullOk = !tokens.matchOpToken(\"!\");\n\t\t\treturn {\n\t\t\t\ttype: \"typeCheck\",\n\t\t\t\ttypeName: typeName,\n\t\t\t\tnullOk: nullOk,\n\t\t\t\targs: [root],\n\t\t\t\top: function (context, val) {\n\t\t\t\t\tvar passed = runtime.typeCheck(val, typeName.value, nullOk);\n\t\t\t\t\tif (passed) {\n\t\t\t\t\t\treturn val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow new Error(\"Typecheck failed! Expected: \" + typeName.value);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\treturn root;\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"logicalNot\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"not\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"logicalNot\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, val) {\n\t\t\t\treturn !val;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"noExpression\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"no\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"noExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (_context, val) {\n\t\t\t\treturn runtime.isEmpty(val);\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addLeafExpression(\"some\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"some\")) return;\n\t\tvar root = parser.requireElement(\"expression\", tokens);\n\t\treturn {\n\t\t\ttype: \"noExpression\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (_context, val) {\n\t\t\t\treturn !runtime.isEmpty(val);\n\t\t\t},\n\t\t\tevaluate(context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"negativeNumber\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"-\")) return;\n\t\tvar root = parser.requireElement(\"unaryExpression\", tokens);\n\t\treturn {\n\t\t\ttype: \"negativeNumber\",\n\t\t\troot: root,\n\t\t\targs: [root],\n\t\t\top: function (context, value) {\n\t\t\t\treturn -1 * value;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"unaryExpression\", function (parser, runtime, tokens) {\n\t\ttokens.matchToken(\"the\"); // optional \"the\"\n\t\treturn parser.parseAnyOf(\n\t\t\t[\"beepExpression\", \"logicalNot\", \"relativePositionalExpression\", \"positionalExpression\", \"noExpression\", \"negativeNumber\", \"postfixExpression\"],\n\t\t\ttokens\n\t\t);\n\t});\n\n\t_parser.addGrammarElement(\"beepExpression\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"beep!\")) return;\n\t\tvar expression = parser.parseElement(\"unaryExpression\", tokens);\n\t\tif (expression) {\n\t\t\texpression.booped = true;\n\t\t\tvar originalEvaluate = expression.evaluate;\n\t\t\texpression.evaluate = function(ctx){\n\t\t\t\tlet value = originalEvaluate.apply(expression, arguments);\n\t\t\t\tlet element = ctx.me;\n\t\t\t\tif (runtime.triggerEvent(element, \"hyperscript:beep\", {element, expression, value})) {\n\t\t\t\t\tvar typeName;\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tif (value instanceof ElementCollection){\n\t\t\t\t\t\t\ttypeName = \"ElementCollection\";\n\t\t\t\t\t\t} else if (value.constructor) {\n\t\t\t\t\t\t\ttypeName = value.constructor.name;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttypeName = \"unknown\";\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttypeName = \"object (null)\"\n\t\t\t\t\t}\n\t\t\t\t\tvar logValue = value;\n\t\t\t\t\tif (typeName === \"String\") {\n\t\t\t\t\t\tlogValue = '\"' + logValue + '\"';\n\t\t\t\t\t} else if (value instanceof ElementCollection) {\n\t\t\t\t\t\tlogValue = Array.from(value);\n\t\t\t\t\t}\n\t\t\t\t\tconsole.log(\"///_ BEEP! The expression (\" + expression.sourceFor().substr(6) + \") evaluates to:\", logValue, \"of type \" + typeName);\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\treturn expression;\n\t\t}\n\t});\n\n\tvar scanForwardQuery = function(start, root, match, wrap) {\n\t\tvar results = root.querySelectorAll(match);\n\t\tfor (var i = 0; i < results.length; i++) {\n\t\t\tvar elt = results[i];\n\t\t\tif (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) {\n\t\t\t\treturn elt;\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\treturn results[0];\n\t\t}\n\t}\n\n\tvar scanBackwardsQuery = function(start, root, match, wrap) {\n\t\tvar results = root.querySelectorAll(match);\n\t\tfor (var i = results.length - 1; i >= 0; i--) {\n\t\t\tvar elt = results[i];\n\t\t\tif (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) {\n\t\t\t\treturn elt;\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\treturn results[results.length - 1];\n\t\t}\n\t}\n\n\tvar scanForwardArray = function(start, array, match, wrap) {\n\t\tvar matches = [];\n\t\t_runtime.forEach(array, function(elt){\n\t\t\tif (elt.matches(match) || elt === start) {\n\t\t\t\tmatches.push(elt);\n\t\t\t}\n\t\t})\n\t\tfor (var i = 0; i < matches.length - 1; i++) {\n\t\t\tvar elt = matches[i];\n\t\t\tif (elt === start) {\n\t\t\t\treturn matches[i + 1];\n\t\t\t}\n\t\t}\n\t\tif (wrap) {\n\t\t\tvar first = matches[0];\n\t\t\tif (first && first.matches(match)) {\n\t\t\t\treturn first;\n\t\t\t}\n\t\t}\n\t}\n\n\tvar scanBackwardsArray = function(start, array, match, wrap) {\n\t\treturn scanForwardArray(start, Array.from(array).reverse(), match, wrap);\n\t}\n\n\t_parser.addGrammarElement(\"relativePositionalExpression\", function (parser, runtime, tokens) {\n\t\tvar op = tokens.matchAnyToken(\"next\", \"previous\");\n\t\tif (!op) return;\n\t\tif (op.value === \"next\") {\n\t\t\tvar forwardSearch = true;\n\t\t}\n\n\t\tvar thing = parser.parseElement(\"expression\", tokens);\n\n\t\tif (tokens.matchToken(\"from\")) {\n\t\t\ttokens.pushFollow(\"in\");\n\t\t\ttry {\n\t\t\t\tvar from = parser.requireElement(\"unaryExpression\", tokens);\n\t\t\t} finally {\n\t\t\t\ttokens.popFollow();\n\t\t\t}\n\t\t} else {\n\t\t\tvar from = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t}\n\n\t\tvar inSearch = false;\n\t\tvar withinElt;\n\t\tif (tokens.matchToken(\"in\")) {\n\t\t\tinSearch = true;\n\t\t\tvar inElt = parser.requireElement(\"unaryExpression\", tokens);\n\t\t} else if (tokens.matchToken(\"within\")) {\n\t\t\twithinElt = parser.requireElement(\"unaryExpression\", tokens);\n\t\t} else {\n\t\t\twithinElt = document.body;\n\t\t}\n\n\t\tvar wrapping = false;\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\ttokens.requireToken(\"wrapping\")\n\t\t\twrapping = true;\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"relativePositionalExpression\",\n\t\t\tfrom: from,\n\t\t\tforwardSearch: forwardSearch,\n\t\t\tinSearch: inSearch,\n\t\t\twrapping: wrapping,\n\t\t\tinElt: inElt,\n\t\t\twithinElt: withinElt,\n\t\t\toperator: op.value,\n\t\t\targs: [thing, from, inElt, withinElt],\n\t\t\top: function (context, thing, from, inElt, withinElt) {\n\n\t\t\t\tvar css = thing.css;\n\t\t\t\tif (css == null) {\n\t\t\t\t\tthrow \"Expected a CSS value\";\n\t\t\t\t}\n\n\t\t\t\tif(inSearch) {\n\t\t\t\t\tif (inElt) {\n\t\t\t\t\t\tif (forwardSearch) {\n\t\t\t\t\t\t\treturn scanForwardArray(from, inElt, css, wrapping);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn scanBackwardsArray(from, inElt, css, wrapping);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (withinElt) {\n\t\t\t\t\t\tif (forwardSearch) {\n\t\t\t\t\t\t\treturn scanForwardQuery(from, withinElt, css, wrapping);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn scanBackwardsQuery(from, withinElt, css, wrapping);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t}\n\n\t});\n\n\t_parser.addGrammarElement(\"positionalExpression\", function (parser, runtime, tokens) {\n\t\tvar op = tokens.matchAnyToken(\"first\", \"last\", \"random\");\n\t\tif (!op) return;\n\t\ttokens.matchAnyToken(\"in\", \"from\", \"of\");\n\t\tvar rhs = parser.requireElement(\"unaryExpression\", tokens);\n\t\tconst operator = op.value;\n\t\treturn {\n\t\t\ttype: \"positionalExpression\",\n\t\t\trhs: rhs,\n\t\t\toperator: op.value,\n\t\t\targs: [rhs],\n\t\t\top: function (context, rhsVal) {\n\t\t\t\tif (rhsVal && !Array.isArray(rhsVal)) {\n\t\t\t\t\tif (rhsVal.children) {\n\t\t\t\t\t\trhsVal = rhsVal.children;\n\t\t\t\t\t} else {\n\t\t\t\t\t\trhsVal = Array.from(rhsVal);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (rhsVal) {\n\t\t\t\t\tif (operator === \"first\") {\n\t\t\t\t\t\treturn rhsVal[0];\n\t\t\t\t\t} else if (operator === \"last\") {\n\t\t\t\t\t\treturn rhsVal[rhsVal.length - 1];\n\t\t\t\t\t} else if (operator === \"random\") {\n\t\t\t\t\t\treturn rhsVal[Math.floor(Math.random() * rhsVal.length)];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addGrammarElement(\"mathOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"unaryExpression\", tokens);\n\t\tvar mathOp,\n\t\t\tinitialMathOp = null;\n\t\tmathOp = tokens.matchAnyOpToken(\"+\", \"-\", \"*\", \"/\", \"%\");\n\t\twhile (mathOp) {\n\t\t\tinitialMathOp = initialMathOp || mathOp;\n\t\t\tvar operator = mathOp.value;\n\t\t\tif (initialMathOp.value !== operator) {\n\t\t\t\tparser.raiseParseError(tokens, \"You must parenthesize math operations with different operators\");\n\t\t\t}\n\t\t\tvar rhs = parser.parseElement(\"unaryExpression\", tokens);\n\t\t\texpr = {\n\t\t\t\ttype: \"mathOperator\",\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\toperator: operator,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"+\") {\n\t\t\t\t\t\treturn lhsVal + rhsVal;\n\t\t\t\t\t} else if (operator === \"-\") {\n\t\t\t\t\t\treturn lhsVal - rhsVal;\n\t\t\t\t\t} else if (operator === \"*\") {\n\t\t\t\t\t\treturn lhsVal * rhsVal;\n\t\t\t\t\t} else if (operator === \"/\") {\n\t\t\t\t\t\treturn lhsVal / rhsVal;\n\t\t\t\t\t} else if (operator === \"%\") {\n\t\t\t\t\t\treturn lhsVal % rhsVal;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\tmathOp = tokens.matchAnyOpToken(\"+\", \"-\", \"*\", \"/\", \"%\");\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"mathExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"mathOperator\", \"unaryExpression\"], tokens);\n\t});\n\n\tfunction sloppyContains(src, container, value){\n\t\tif (container['contains']) {\n\t\t\treturn container.contains(value);\n\t\t} else if (container['includes']) {\n\t\t\treturn container.includes(value);\n\t\t} else {\n\t\t\tthrow Error(\"The value of \" + src.sourceFor() + \" does not have a contains or includes method on it\");\n\t\t}\n\t}\n\tfunction sloppyMatches(src, target, toMatch){\n\t\tif (target['match']) {\n\t\t\treturn !!target.match(toMatch);\n\t\t} else if (target['matches']) {\n\t\t\treturn target.matches(toMatch);\n\t\t} else {\n\t\t\tthrow Error(\"The value of \" + src.sourceFor() + \" does not have a match or matches method on it\");\n\t\t}\n\t}\n\n\t_parser.addGrammarElement(\"comparisonOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"mathExpression\", tokens);\n\t\tvar comparisonToken = tokens.matchAnyOpToken(\"<\", \">\", \"<=\", \">=\", \"==\", \"===\", \"!=\", \"!==\");\n\t\tvar operator = comparisonToken ? comparisonToken.value : null;\n\t\tvar hasRightValue = true; // By default, most comparisons require two values, but there are some exceptions.\n\t\tvar typeCheck = false;\n\n\t\tif (operator == null) {\n\t\t\tif (tokens.matchToken(\"is\") || tokens.matchToken(\"am\")) {\n\t\t\t\tif (tokens.matchToken(\"not\")) {\n\t\t\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\t\t\toperator = \"not in\";\n\t\t\t\t\t} else if (tokens.matchToken(\"a\")) {\n\t\t\t\t\t\toperator = \"not a\";\n\t\t\t\t\t\ttypeCheck = true;\n\t\t\t\t\t} else if (tokens.matchToken(\"empty\")) {\n\t\t\t\t\t\toperator = \"not empty\";\n\t\t\t\t\t\thasRightValue = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \"!=\";\n\t\t\t\t\t}\n\t\t\t\t} else if (tokens.matchToken(\"in\")) {\n\t\t\t\t\toperator = \"in\";\n\t\t\t\t} else if (tokens.matchToken(\"a\")) {\n\t\t\t\t\toperator = \"a\";\n\t\t\t\t\ttypeCheck = true;\n\t\t\t\t} else if (tokens.matchToken(\"empty\")) {\n\t\t\t\t\toperator = \"empty\";\n\t\t\t\t\thasRightValue = false;\n\t\t\t\t} else if (tokens.matchToken(\"less\")) {\n\t\t\t\t\ttokens.requireToken(\"than\");\n\t\t\t\t\tif (tokens.matchToken(\"or\")) {\n\t\t\t\t\t\ttokens.requireToken(\"equal\");\n\t\t\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\t\t\toperator = \"<=\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \"<\";\n\t\t\t\t\t}\n\t\t\t\t} else if (tokens.matchToken(\"greater\")) {\n\t\t\t\t\ttokens.requireToken(\"than\");\n\t\t\t\t\tif (tokens.matchToken(\"or\")) {\n\t\t\t\t\t\ttokens.requireToken(\"equal\");\n\t\t\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\t\t\toperator = \">=\";\n\t\t\t\t\t} else {\n\t\t\t\t\t\toperator = \">\";\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\toperator = \"==\";\n\t\t\t\t}\n\t\t\t} else if (tokens.matchToken(\"exist\") || tokens.matchToken(\"exists\")) {\n\t\t\t\toperator = \"exist\";\n\t\t\t\thasRightValue = false;\n\t\t\t} else if (tokens.matchToken(\"matches\") || tokens.matchToken(\"match\")) {\n\t\t\t\toperator = \"match\";\n\t\t\t} else if (tokens.matchToken(\"contains\") || tokens.matchToken(\"contain\")) {\n\t\t\t\toperator = \"contain\";\n\t\t\t} else if (tokens.matchToken(\"includes\") || tokens.matchToken(\"include\")) {\n\t\t\t\toperator = \"include\";\n\t\t\t} else if (tokens.matchToken(\"do\") || tokens.matchToken(\"does\")) {\n\t\t\t\ttokens.requireToken(\"not\");\n\t\t\t\tif (tokens.matchToken(\"matches\") || tokens.matchToken(\"match\")) {\n\t\t\t\t\toperator = \"not match\";\n\t\t\t\t} else if (tokens.matchToken(\"contains\") || tokens.matchToken(\"contain\")) {\n\t\t\t\t\toperator = \"not contain\";\n\t\t\t\t} else if (tokens.matchToken(\"exist\") || tokens.matchToken(\"exist\")) {\n\t\t\t\t\toperator = \"not exist\";\n\t\t\t\t\thasRightValue = false;\n\t\t\t\t} else if (tokens.matchToken(\"include\")) {\n\t\t\t\t\toperator = \"not include\";\n\t\t\t\t} else {\n\t\t\t\t\tparser.raiseParseError(tokens, \"Expected matches or contains\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (operator) {\n\t\t\t// Do not allow chained comparisons, which is dumb\n\t\t\tif (typeCheck) {\n\t\t\t\tvar typeName = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\tvar nullOk = !tokens.matchOpToken(\"!\");\n\t\t\t} else if (hasRightValue) {\n\t\t\t\tvar rhs = parser.requireElement(\"mathExpression\", tokens);\n\t\t\t\tif (operator === \"match\" || operator === \"not match\") {\n\t\t\t\t\trhs = rhs.css ? rhs.css : rhs;\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar lhs = expr;\n\t\t\texpr = {\n\t\t\t\ttype: \"comparisonOperator\",\n\t\t\t\toperator: operator,\n\t\t\t\ttypeName: typeName,\n\t\t\t\tnullOk: nullOk,\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"==\") {\n\t\t\t\t\t\treturn lhsVal == rhsVal;\n\t\t\t\t\t} else if (operator === \"!=\") {\n\t\t\t\t\t\treturn lhsVal != rhsVal;\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"match\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyMatches(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not match\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyMatches(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"in\") {\n\t\t\t\t\t\treturn rhsVal != null && sloppyContains(rhs, rhsVal, lhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not in\") {\n\t\t\t\t\t\treturn rhsVal == null || !sloppyContains(rhs, rhsVal, lhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"contain\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not contain\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"include\") {\n\t\t\t\t\t\treturn lhsVal != null && sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"not include\") {\n\t\t\t\t\t\treturn lhsVal == null || !sloppyContains(lhs, lhsVal, rhsVal);\n\t\t\t\t\t}\n\t\t\t\t\tif (operator === \"===\") {\n\t\t\t\t\t\treturn lhsVal === rhsVal;\n\t\t\t\t\t} else if (operator === \"!==\") {\n\t\t\t\t\t\treturn lhsVal !== rhsVal;\n\t\t\t\t\t} else if (operator === \"<\") {\n\t\t\t\t\t\treturn lhsVal < rhsVal;\n\t\t\t\t\t} else if (operator === \">\") {\n\t\t\t\t\t\treturn lhsVal > rhsVal;\n\t\t\t\t\t} else if (operator === \"<=\") {\n\t\t\t\t\t\treturn lhsVal <= rhsVal;\n\t\t\t\t\t} else if (operator === \">=\") {\n\t\t\t\t\t\treturn lhsVal >= rhsVal;\n\t\t\t\t\t} else if (operator === \"empty\") {\n\t\t\t\t\t\treturn runtime.isEmpty(lhsVal);\n\t\t\t\t\t} else if (operator === \"not empty\") {\n\t\t\t\t\t\treturn !runtime.isEmpty(lhsVal);\n\t\t\t\t\t} else if (operator === \"exist\") {\n\t\t\t\t\t\treturn runtime.doesExist(lhsVal);\n\t\t\t\t\t} else if (operator === \"not exist\") {\n\t\t\t\t\t\treturn !runtime.doesExist(lhsVal);\n\t\t\t\t\t} else if (operator === \"a\") {\n\t\t\t\t\t\treturn runtime.typeCheck(lhsVal, typeName.value, nullOk);\n\t\t\t\t\t} else if (operator === \"not a\") {\n\t\t\t\t\t\treturn !runtime.typeCheck(lhsVal, typeName.value, nullOk);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow \"Unknown comparison : \" + operator;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"comparisonExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"comparisonOperator\", \"mathExpression\"], tokens);\n\t});\n\n\t_parser.addGrammarElement(\"logicalOperator\", function (parser, runtime, tokens) {\n\t\tvar expr = parser.parseElement(\"comparisonExpression\", tokens);\n\t\tvar logicalOp,\n\t\t\tinitialLogicalOp = null;\n\t\tlogicalOp = tokens.matchToken(\"and\") || tokens.matchToken(\"or\");\n\t\twhile (logicalOp) {\n\t\t\tinitialLogicalOp = initialLogicalOp || logicalOp;\n\t\t\tif (initialLogicalOp.value !== logicalOp.value) {\n\t\t\t\tparser.raiseParseError(tokens, \"You must parenthesize logical operations with different operators\");\n\t\t\t}\n\t\t\tvar rhs = parser.requireElement(\"comparisonExpression\", tokens);\n\t\t\tconst operator = logicalOp.value;\n\t\t\texpr = {\n\t\t\t\ttype: \"logicalOperator\",\n\t\t\t\toperator: operator,\n\t\t\t\tlhs: expr,\n\t\t\t\trhs: rhs,\n\t\t\t\targs: [expr, rhs],\n\t\t\t\top: function (context, lhsVal, rhsVal) {\n\t\t\t\t\tif (operator === \"and\") {\n\t\t\t\t\t\treturn lhsVal && rhsVal;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn lhsVal || rhsVal;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\tlogicalOp = tokens.matchToken(\"and\") || tokens.matchToken(\"or\");\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"logicalExpression\", function (parser, runtime, tokens) {\n\t\treturn parser.parseAnyOf([\"logicalOperator\", \"mathExpression\"], tokens);\n\t});\n\n\t_parser.addGrammarElement(\"asyncExpression\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"async\")) {\n\t\t\tvar value = parser.requireElement(\"logicalExpression\", tokens);\n\t\t\tvar expr = {\n\t\t\t\ttype: \"asyncExpression\",\n\t\t\t\tvalue: value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tasyncWrapper: true,\n\t\t\t\t\t\tvalue: this.value.evaluate(context), //OK\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn expr;\n\t\t} else {\n\t\t\treturn parser.parseElement(\"logicalExpression\", tokens);\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"expression\", function (parser, runtime, tokens) {\n\t\ttokens.matchToken(\"the\"); // optional the\n\t\treturn parser.parseElement(\"asyncExpression\", tokens);\n\t});\n\n\t_parser.addGrammarElement(\"assignableExpression\", function (parser, runtime, tokens) {\n\t\ttokens.matchToken(\"the\"); // optional the\n\n\t\t// TODO obviously we need to generalize this as a left hand side / targetable concept\n\t\tvar expr = parser.parseElement(\"primaryExpression\", tokens);\n\t\tif (expr && (\n\t\t\texpr.type === \"symbol\" ||\n\t\t\texpr.type === \"ofExpression\" ||\n\t\t\texpr.type === \"propertyAccess\" ||\n\t\t\texpr.type === \"attributeRefAccess\" ||\n\t\t\texpr.type === \"attributeRef\" ||\n\t\t\texpr.type === \"styleRef\" ||\n\t\t\texpr.type === \"arrayIndex\" ||\n\t\t\texpr.type === \"possessive\")\n\t\t) {\n\t\t\treturn expr;\n\t\t} else {\n\t\t\t_parser.raiseParseError(\n\t\t\t\ttokens,\n\t\t\t\t\"A target expression must be writable. The expression type '\" + (expr && expr.type) + \"' is not.\"\n\t\t\t);\n\t\t}\n\t\treturn expr;\n\t});\n\n\t_parser.addGrammarElement(\"hyperscript\", function (parser, runtime, tokens) {\n\t\tvar features = [];\n\n\t\tif (tokens.hasMore()) {\n\t\t\twhile (parser.featureStart(tokens.currentToken()) || tokens.currentToken().value === \"(\") {\n\t\t\t\tvar feature = parser.requireElement(\"feature\", tokens);\n\t\t\t\tfeatures.push(feature);\n\t\t\t\ttokens.matchToken(\"end\"); // optional end\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\ttype: \"hyperscript\",\n\t\t\tfeatures: features,\n\t\t\tapply: function (target, source, args) {\n\t\t\t\t// no op\n\t\t\t\tfor (const feature of features) {\n\t\t\t\t\tfeature.install(target, source, args);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\n\tvar parseEventArgs = function (tokens) {\n\t\tvar args = [];\n\t\t// handle argument list (look ahead 3)\n\t\tif (\n\t\t\ttokens.token(0).value === \"(\" &&\n\t\t\t(tokens.token(1).value === \")\" || tokens.token(2).value === \",\" || tokens.token(2).value === \")\")\n\t\t) {\n\t\t\ttokens.matchOpToken(\"(\");\n\t\t\tdo {\n\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\t\treturn args;\n\t};\n\n\t_parser.addFeature(\"on\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"on\")) return;\n\t\tvar every = false;\n\t\tif (tokens.matchToken(\"every\")) {\n\t\t\tevery = true;\n\t\t}\n\t\tvar events = [];\n\t\tvar displayName = null;\n\t\tdo {\n\t\t\tvar on = parser.requireElement(\"eventName\", tokens, \"Expected event name\");\n\n\t\t\tvar eventName = on.evaluate(); // OK No Promise\n\n\t\t\tif (displayName) {\n\t\t\t\tdisplayName = displayName + \" or \" + eventName;\n\t\t\t} else {\n\t\t\t\tdisplayName = \"on \" + eventName;\n\t\t\t}\n\t\t\tvar args = parseEventArgs(tokens);\n\n\t\t\tvar filter = null;\n\t\t\tif (tokens.matchOpToken(\"[\")) {\n\t\t\t\tfilter = parser.requireElement(\"expression\", tokens);\n\t\t\t\ttokens.requireOpToken(\"]\");\n\t\t\t}\n\n\t\t\tif (tokens.currentToken().type === \"NUMBER\") {\n\t\t\t\tvar startCountToken = tokens.consumeToken();\n\t\t\t\tvar startCount = parseInt(startCountToken.value);\n\t\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\t\tvar endCountToken = tokens.consumeToken();\n\t\t\t\t\tvar endCount = parseInt(endCountToken.value);\n\t\t\t\t} else if (tokens.matchToken(\"and\")) {\n\t\t\t\t\tvar unbounded = true;\n\t\t\t\t\ttokens.requireToken(\"on\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (eventName === \"intersection\") {\n\t\t\t\tvar intersectionSpec = {};\n\t\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\t\tintersectionSpec[\"with\"] = parser.requireElement(\"expression\", tokens).evaluate();\n\t\t\t\t}\n\t\t\t\tif (tokens.matchToken(\"having\")) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (tokens.matchToken(\"margin\")) {\n\t\t\t\t\t\t\tintersectionSpec[\"rootMargin\"] = parser.requireElement(\"stringLike\", tokens).evaluate();\n\t\t\t\t\t\t} else if (tokens.matchToken(\"threshold\")) {\n\t\t\t\t\t\t\tintersectionSpec[\"threshold\"] = parser.requireElement(\"expression\", tokens).evaluate();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.raiseParseError(tokens, \"Unknown intersection config specification\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (tokens.matchToken(\"and\"));\n\t\t\t\t}\n\t\t\t} else if (eventName === \"mutation\") {\n\t\t\t\tvar mutationSpec = {};\n\t\t\t\tif (tokens.matchToken(\"of\")) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tif (tokens.matchToken(\"anything\")) {\n\t\t\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"subtree\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"childList\")) {\n\t\t\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"attributes\")) {\n\t\t\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"attributeOldValue\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"subtree\")) {\n\t\t\t\t\t\t\tmutationSpec[\"subtree\"] = true;\n\t\t\t\t\t\t} else if (tokens.matchToken(\"characterData\")) {\n\t\t\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\t\t\tmutationSpec[\"characterDataOldValue\"] = true;\n\t\t\t\t\t\t} else if (tokens.currentToken().type === \"ATTRIBUTE_REF\") {\n\t\t\t\t\t\t\tvar attribute = tokens.consumeToken();\n\t\t\t\t\t\t\tif (mutationSpec[\"attributeFilter\"] == null) {\n\t\t\t\t\t\t\t\tmutationSpec[\"attributeFilter\"] = [];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (attribute.value.indexOf(\"@\") == 0) {\n\t\t\t\t\t\t\t\tmutationSpec[\"attributeFilter\"].push(attribute.value.substring(1));\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tparser.raiseParseError(\n\t\t\t\t\t\t\t\t\ttokens,\n\t\t\t\t\t\t\t\t\t\"Only shorthand attribute references are allowed here\"\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tparser.raiseParseError(tokens, \"Unknown mutation config specification\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (tokens.matchToken(\"or\"));\n\t\t\t\t} else {\n\t\t\t\t\tmutationSpec[\"attributes\"] = true;\n\t\t\t\t\tmutationSpec[\"characterData\"] = true;\n\t\t\t\t\tmutationSpec[\"childList\"] = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar from = null;\n\t\t\tvar elsewhere = false;\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tif (tokens.matchToken(\"elsewhere\")) {\n\t\t\t\t\telsewhere = true;\n\t\t\t\t} else {\n\t\t\t\t\tfrom = parser.parseElement(\"expression\", tokens);\n\t\t\t\t\tif (!from) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, 'Expected either target value or \"elsewhere\".');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// support both \"elsewhere\" and \"from elsewhere\"\n\t\t\tif (from === null && elsewhere === false && tokens.matchToken(\"elsewhere\")) {\n\t\t\t\telsewhere = true;\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\tvar inExpr = parser.parseElement('unaryExpression', tokens);\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"debounced\")) {\n\t\t\t\ttokens.requireToken(\"at\");\n\t\t\t\tvar timeExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar debounceTime = timeExpr.evaluate({}); // OK No promise TODO make a literal time expr\n\t\t\t} else if (tokens.matchToken(\"throttled\")) {\n\t\t\t\ttokens.requireToken(\"at\");\n\t\t\t\tvar timeExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t\t// @ts-ignore\n\t\t\t\tvar throttleTime = timeExpr.evaluate({}); // OK No promise TODO make a literal time expr\n\t\t\t}\n\n\t\t\tevents.push({\n\t\t\t\texecCount: 0,\n\t\t\t\tevery: every,\n\t\t\t\ton: eventName,\n\t\t\t\targs: args,\n\t\t\t\tfilter: filter,\n\t\t\t\tfrom: from,\n\t\t\t\tinExpr: inExpr,\n\t\t\t\telsewhere: elsewhere,\n\t\t\t\tstartCount: startCount,\n\t\t\t\tendCount: endCount,\n\t\t\t\tunbounded: unbounded,\n\t\t\t\tdebounceTime: debounceTime,\n\t\t\t\tthrottleTime: throttleTime,\n\t\t\t\tmutationSpec: mutationSpec,\n\t\t\t\tintersectionSpec: intersectionSpec,\n\t\t\t\tdebounced: undefined,\n\t\t\t\tlastExec: undefined,\n\t\t\t});\n\t\t} while (tokens.matchToken(\"or\"));\n\n\t\tvar queueLast = true;\n\t\tif (!every) {\n\t\t\tif (tokens.matchToken(\"queue\")) {\n\t\t\t\tif (tokens.matchToken(\"all\")) {\n\t\t\t\t\tvar queueAll = true;\n\t\t\t\t\tvar queueLast = false;\n\t\t\t\t} else if (tokens.matchToken(\"first\")) {\n\t\t\t\t\tvar queueFirst = true;\n\t\t\t\t} else if (tokens.matchToken(\"none\")) {\n\t\t\t\t\tvar queueNone = true;\n\t\t\t\t} else {\n\t\t\t\t\ttokens.requireToken(\"last\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\t\tparser.ensureTerminated(start);\n\n\t\tif (tokens.matchToken(\"catch\")) {\n\t\t\tvar errorSymbol = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\tvar errorHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(errorHandler);\n\t\t}\n\n\t\tif (tokens.matchToken(\"finally\")) {\n\t\t\tvar finallyHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(finallyHandler);\n\t\t}\n\n\t\tvar onFeature = {\n\t\t\tdisplayName: displayName,\n\t\t\tevents: events,\n\t\t\tstart: start,\n\t\t\tevery: every,\n\t\t\texecCount: 0,\n\t\t\terrorHandler: errorHandler,\n\t\t\terrorSymbol: errorSymbol,\n\t\t\texecute: function (/** @type {Context} */ ctx) {\n\t\t\t\tlet eventQueueInfo = runtime.getEventQueueFor(ctx.me, onFeature);\n\t\t\t\tif (eventQueueInfo.executing && every === false) {\n\t\t\t\t\tif (queueNone || (queueFirst && eventQueueInfo.queue.length > 0)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (queueLast) {\n\t\t\t\t\t\teventQueueInfo.queue.length = 0;\n\t\t\t\t\t}\n\t\t\t\t\teventQueueInfo.queue.push(ctx);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tonFeature.execCount++;\n\t\t\t\teventQueueInfo.executing = true;\n\t\t\t\tctx.meta.onHalt = function () {\n\t\t\t\t\teventQueueInfo.executing = false;\n\t\t\t\t\tvar queued = eventQueueInfo.queue.shift();\n\t\t\t\t\tif (queued) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tonFeature.execute(queued);\n\t\t\t\t\t\t}, 1);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tctx.meta.reject = function (err) {\n\t\t\t\t\tconsole.error(err.message ? err.message : err);\n\t\t\t\t\tvar hypertrace = runtime.getHyperTrace(ctx, err);\n\t\t\t\t\tif (hypertrace) {\n\t\t\t\t\t\thypertrace.print();\n\t\t\t\t\t}\n\t\t\t\t\truntime.triggerEvent(ctx.me, \"exception\", {\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t\tstart.execute(ctx);\n\t\t\t},\n\t\t\tinstall: function (elt, source) {\n\t\t\t\tfor (const eventSpec of onFeature.events) {\n\t\t\t\t\tvar targets;\n\t\t\t\t\tif (eventSpec.elsewhere) {\n\t\t\t\t\t\ttargets = [document];\n\t\t\t\t\t} else if (eventSpec.from) {\n\t\t\t\t\t\ttargets = eventSpec.from.evaluate(runtime.makeContext(elt, onFeature, elt, null));\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttargets = [elt];\n\t\t\t\t\t}\n\t\t\t\t\truntime.implicitLoop(targets, function (target) {\n\t\t\t\t\t\t// OK NO PROMISE\n\n\t\t\t\t\t\tvar eventName = eventSpec.on;\n\t\t\t\t\t\tif (eventSpec.mutationSpec) {\n\t\t\t\t\t\t\teventName = \"hyperscript:mutation\";\n\t\t\t\t\t\t\tconst observer = new MutationObserver(function (mutationList, observer) {\n\t\t\t\t\t\t\t\tif (!onFeature.executing) {\n\t\t\t\t\t\t\t\t\t_runtime.triggerEvent(target, eventName, {\n\t\t\t\t\t\t\t\t\t\tmutationList: mutationList,\n\t\t\t\t\t\t\t\t\t\tobserver: observer,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tobserver.observe(target, eventSpec.mutationSpec);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (eventSpec.intersectionSpec) {\n\t\t\t\t\t\t\teventName = \"hyperscript:insersection\";\n\t\t\t\t\t\t\tconst observer = new IntersectionObserver(function (entries) {\n\t\t\t\t\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\t\t\t\t\tvar detail = {\n\t\t\t\t\t\t\t\t\t\tobserver: observer,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tdetail = mergeObjects(detail, entry);\n\t\t\t\t\t\t\t\t\tdetail[\"intersecting\"] = entry.isIntersecting;\n\t\t\t\t\t\t\t\t\t_runtime.triggerEvent(target, eventName, detail);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, eventSpec.intersectionSpec);\n\t\t\t\t\t\t\tobserver.observe(target);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar addEventListener = target.addEventListener || target.on;\n\t\t\t\t\t\taddEventListener.call(target, eventName, function listener(evt) {\n\t\t\t\t\t\t\t// OK NO PROMISE\n\t\t\t\t\t\t\tif (typeof Node !== 'undefined' && elt instanceof Node && target !== elt && !elt.isConnected) {\n\t\t\t\t\t\t\t\ttarget.removeEventListener(eventName, listener);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar ctx = runtime.makeContext(elt, onFeature, elt, evt);\n\t\t\t\t\t\t\tif (eventSpec.elsewhere && elt.contains(evt.target)) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (eventSpec.from) {\n\t\t\t\t\t\t\t\tctx.result = target;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// establish context\n\t\t\t\t\t\t\tfor (const arg of eventSpec.args) {\n\t\t\t\t\t\t\t\tlet eventValue = ctx.event[arg.value];\n\t\t\t\t\t\t\t\tif (eventValue !== undefined) {\n\t\t\t\t\t\t\t\t\tctx[arg.value] = eventValue;\n\t\t\t\t\t\t\t\t} else if ('detail' in ctx.event) {\n\t\t\t\t\t\t\t\t\tctx[arg.value] = ctx.event['detail'][arg.value];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// install error handler if any\n\t\t\t\t\t\t\tctx.meta.errorHandler = errorHandler;\n\t\t\t\t\t\t\tctx.meta.errorSymbol = errorSymbol;\n\t\t\t\t\t\t\tctx.meta.finallyHandler = finallyHandler;\n\n\t\t\t\t\t\t\t// apply filter\n\t\t\t\t\t\t\tif (eventSpec.filter) {\n\t\t\t\t\t\t\t\tvar initialCtx = ctx.meta.context;\n\t\t\t\t\t\t\t\tctx.meta.context = ctx.event;\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tvar value = eventSpec.filter.evaluate(ctx); //OK NO PROMISE\n\t\t\t\t\t\t\t\t\tif (value) {\n\t\t\t\t\t\t\t\t\t\t// match the javascript semantics for if statements\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\t\t\tctx.meta.context = initialCtx;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (eventSpec.inExpr) {\n\t\t\t\t\t\t\t\tvar inElement = evt.target;\n\t\t\t\t\t\t\t\twhile (true) {\n\t\t\t\t\t\t\t\t\tif (inElement.matches && inElement.matches(eventSpec.inExpr.css)) {\n\t\t\t\t\t\t\t\t\t\tctx.result = inElement;\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tinElement = inElement.parentElement;\n\t\t\t\t\t\t\t\t\t\tif (inElement == null) {\n\t\t\t\t\t\t\t\t\t\t\treturn; // no match found\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// verify counts\n\t\t\t\t\t\t\teventSpec.execCount++;\n\t\t\t\t\t\t\tif (eventSpec.startCount) {\n\t\t\t\t\t\t\t\tif (eventSpec.endCount) {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\teventSpec.execCount < eventSpec.startCount ||\n\t\t\t\t\t\t\t\t\t\teventSpec.execCount > eventSpec.endCount\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (eventSpec.unbounded) {\n\t\t\t\t\t\t\t\t\tif (eventSpec.execCount < eventSpec.startCount) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (eventSpec.execCount !== eventSpec.startCount) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//debounce\n\t\t\t\t\t\t\tif (eventSpec.debounceTime) {\n\t\t\t\t\t\t\t\tif (eventSpec.debounced) {\n\t\t\t\t\t\t\t\t\tclearTimeout(eventSpec.debounced);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\teventSpec.debounced = setTimeout(function () {\n\t\t\t\t\t\t\t\t\tonFeature.execute(ctx);\n\t\t\t\t\t\t\t\t}, eventSpec.debounceTime);\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// throttle\n\t\t\t\t\t\t\tif (eventSpec.throttleTime) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\teventSpec.lastExec &&\n\t\t\t\t\t\t\t\t\tDate.now() < eventSpec.lastExec + eventSpec.throttleTime\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\teventSpec.lastExec = Date.now();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// apply execute\n\t\t\t\t\t\t\tonFeature.execute(ctx);\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(start, onFeature);\n\t\treturn onFeature;\n\t});\n\n\t_parser.addFeature(\"def\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"def\")) return;\n\t\tvar functionName = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\tvar nameVal = functionName.evaluate(); // OK\n\t\tvar nameSpace = nameVal.split(\".\");\n\t\tvar funcName = nameSpace.pop();\n\n\t\tvar args = [];\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t// emtpy args list\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\targs.push(tokens.requireTokenType(\"IDENTIFIER\"));\n\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t}\n\t\t}\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\n\t\tif (tokens.matchToken(\"catch\")) {\n\t\t\tvar errorSymbol = tokens.requireTokenType(\"IDENTIFIER\").value;\n\t\t\tvar errorHandler = parser.parseElement(\"commandList\", tokens);\n\t\t}\n\n\t\tif (tokens.matchToken(\"finally\")) {\n\t\t\tvar finallyHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\tparser.ensureTerminated(finallyHandler);\n\t\t}\n\n\t\tvar functionFeature = {\n\t\t\tdisplayName:\n\t\t\t\tfuncName +\n\t\t\t\t\"(\" +\n\t\t\t\targs\n\t\t\t\t\t.map(function (arg) {\n\t\t\t\t\t\treturn arg.value;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\", \") +\n\t\t\t\t\")\",\n\t\t\tname: funcName,\n\t\t\targs: args,\n\t\t\tstart: start,\n\t\t\terrorHandler: errorHandler,\n\t\t\terrorSymbol: errorSymbol,\n\t\t\tfinallyHandler: finallyHandler,\n\t\t\tinstall: function (target, source) {\n\t\t\t\tvar func = function () {\n\t\t\t\t\t// null, worker\n\t\t\t\t\tvar ctx = runtime.makeContext(source, functionFeature, target, null);\n\n\t\t\t\t\t// install error handler if any\n\t\t\t\t\tctx.meta.errorHandler = errorHandler;\n\t\t\t\t\tctx.meta.errorSymbol = errorSymbol;\n\t\t\t\t\tctx.meta.finallyHandler = finallyHandler;\n\n\t\t\t\t\tfor (var i = 0; i < args.length; i++) {\n\t\t\t\t\t\tvar name = args[i];\n\t\t\t\t\t\tvar argumentVal = arguments[i];\n\t\t\t\t\t\tif (name) {\n\t\t\t\t\t\t\tctx[name.value] = argumentVal;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.meta.caller = arguments[args.length];\n\t\t\t\t\tif (ctx.meta.caller) {\n\t\t\t\t\t\tctx.meta.callingCommand = ctx.meta.caller.meta.command;\n\t\t\t\t\t}\n\t\t\t\t\tvar resolve,\n\t\t\t\t\t\treject = null;\n\t\t\t\t\tvar promise = new Promise(function (theResolve, theReject) {\n\t\t\t\t\t\tresolve = theResolve;\n\t\t\t\t\t\treject = theReject;\n\t\t\t\t\t});\n\t\t\t\t\tstart.execute(ctx);\n\t\t\t\t\tif (ctx.meta.returned) {\n\t\t\t\t\t\treturn ctx.meta.returnValue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.meta.resolve = resolve;\n\t\t\t\t\t\tctx.meta.reject = reject;\n\t\t\t\t\t\treturn promise;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfunc.hyperfunc = true;\n\t\t\t\tfunc.hypername = nameVal;\n\t\t\t\truntime.assignToNamespace(target, nameSpace, funcName, func);\n\t\t\t},\n\t\t};\n\n\t\tparser.ensureTerminated(start);\n\n\t\t// terminate error handler if any\n\t\tif (errorHandler) {\n\t\t\tparser.ensureTerminated(errorHandler);\n\t\t}\n\n\t\tparser.setParent(start, functionFeature);\n\t\treturn functionFeature;\n\t});\n\n\t_parser.addFeature(\"set\", function (parser, runtime, tokens) {\n\t\tlet setCmd = parser.parseElement(\"setCommand\", tokens);\n\t\tif (setCmd) {\n\t\t\tif (setCmd.target.scope !== \"element\") {\n\t\t\t\tparser.raiseParseError(tokens, \"variables declared at the feature level must be element scoped.\");\n\t\t\t}\n\t\t\tlet setFeature = {\n\t\t\t\tstart: setCmd,\n\t\t\t\tinstall: function (target, source) {\n\t\t\t\t\tsetCmd && setCmd.execute(runtime.makeContext(target, setFeature, target, null));\n\t\t\t\t},\n\t\t\t};\n\t\t\tparser.ensureTerminated(setCmd);\n\t\t\treturn setFeature;\n\t\t}\n\t});\n\n\t_parser.addFeature(\"init\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"init\")) return;\n\n\t\tvar start = parser.requireElement(\"commandList\", tokens);\n\t\tvar initFeature = {\n\t\t\tstart: start,\n\t\t\tinstall: function (target, source) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tstart && start.execute(runtime.makeContext(target, initFeature, target, null));\n\t\t\t\t}, 0);\n\t\t\t},\n\t\t};\n\n\t\t// terminate body\n\t\tparser.ensureTerminated(start);\n\t\tparser.setParent(start, initFeature);\n\t\treturn initFeature;\n\t});\n\n\t_parser.addFeature(\"worker\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"worker\")) {\n\t\t\tparser.raiseParseError(\n\t\t\t\ttokens,\n\t\t\t\t\"In order to use the 'worker' feature, include \" +\n\t\t\t\t\t\"the _hyperscript worker plugin. See \" +\n\t\t\t\t\t\"https://hyperscript.org/features/worker/ for \" +\n\t\t\t\t\t\"more info.\"\n\t\t\t);\n\t\t}\n\t});\n\n\t_parser.addFeature(\"behavior\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"behavior\")) return;\n\t\tvar path = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\tvar nameSpace = path.split(\".\");\n\t\tvar name = nameSpace.pop();\n\n\t\tvar formalParams = [];\n\t\tif (tokens.matchOpToken(\"(\") && !tokens.matchOpToken(\")\")) {\n\t\t\tdo {\n\t\t\t\tformalParams.push(tokens.requireTokenType(\"IDENTIFIER\").value);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\ttokens.requireOpToken(\")\");\n\t\t}\n\t\tvar hs = parser.requireElement(\"hyperscript\", tokens);\n\t\tfor (var i = 0; i < hs.features.length; i++) {\n\t\t\tvar feature = hs.features[i];\n\t\t\tfeature.behavior = path;\n\t\t}\n\n\t\treturn {\n\t\t\tinstall: function (target, source) {\n\t\t\t\truntime.assignToNamespace(\n\t\t\t\t\tglobalScope.document && globalScope.document.body,\n\t\t\t\t\tnameSpace,\n\t\t\t\t\tname,\n\t\t\t\t\tfunction (target, source, innerArgs) {\n\t\t\t\t\t\tvar internalData = runtime.getInternalData(target);\n\t\t\t\t\t\tvar elementScope = getOrInitObject(internalData, path + \"Scope\");\n\t\t\t\t\t\tfor (var i = 0; i < formalParams.length; i++) {\n\t\t\t\t\t\t\telementScope[formalParams[i]] = innerArgs[formalParams[i]];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ths.apply(target, source);\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addFeature(\"install\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"install\")) return;\n\t\tvar behaviorPath = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\tvar behaviorNamespace = behaviorPath.split(\".\");\n\t\tvar args = parser.parseElement(\"namedArgumentList\", tokens);\n\n\t\tvar installFeature;\n\t\treturn (installFeature = {\n\t\t\tinstall: function (target, source) {\n\t\t\t\truntime.unifiedEval(\n\t\t\t\t\t{\n\t\t\t\t\t\targs: [args],\n\t\t\t\t\t\top: function (ctx, args) {\n\t\t\t\t\t\t\tvar behavior = globalScope;\n\t\t\t\t\t\t\tfor (var i = 0; i < behaviorNamespace.length; i++) {\n\t\t\t\t\t\t\t\tbehavior = behavior[behaviorNamespace[i]];\n\t\t\t\t\t\t\t\tif (typeof behavior !== \"object\" && typeof behavior !== \"function\")\n\t\t\t\t\t\t\t\t\tthrow new Error(\"No such behavior defined as \" + behaviorPath);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (!(behavior instanceof Function))\n\t\t\t\t\t\t\t\tthrow new Error(behaviorPath + \" is not a behavior\");\n\n\t\t\t\t\t\t\tbehavior(target, source, args);\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\truntime.makeContext(target, installFeature, target)\n\t\t\t\t);\n\t\t\t},\n\t\t});\n\t});\n\n\t_parser.addGrammarElement(\"jsBody\", function (parser, runtime, tokens) {\n\t\tvar jsSourceStart = tokens.currentToken().start;\n\t\tvar jsLastToken = tokens.currentToken();\n\n\t\tvar funcNames = [];\n\t\tvar funcName = \"\";\n\t\tvar expectFunctionDeclaration = false;\n\t\twhile (tokens.hasMore()) {\n\t\t\tjsLastToken = tokens.consumeToken();\n\t\t\tvar peek = tokens.token(0, true);\n\t\t\tif (peek.type === \"IDENTIFIER\" && peek.value === \"end\") {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (expectFunctionDeclaration) {\n\t\t\t\tif (jsLastToken.type === \"IDENTIFIER\" || jsLastToken.type === \"NUMBER\") {\n\t\t\t\t\tfuncName += jsLastToken.value;\n\t\t\t\t} else {\n\t\t\t\t\tif (funcName !== \"\") funcNames.push(funcName);\n\t\t\t\t\tfuncName = \"\";\n\t\t\t\t\texpectFunctionDeclaration = false;\n\t\t\t\t}\n\t\t\t} else if (jsLastToken.type === \"IDENTIFIER\" && jsLastToken.value === \"function\") {\n\t\t\t\texpectFunctionDeclaration = true;\n\t\t\t}\n\t\t}\n\t\tvar jsSourceEnd = jsLastToken.end + 1;\n\n\t\treturn {\n\t\t\ttype: \"jsBody\",\n\t\t\texposedFunctionNames: funcNames,\n\t\t\tjsSource: tokens.source.substring(jsSourceStart, jsSourceEnd),\n\t\t};\n\t});\n\n\t_parser.addFeature(\"js\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"js\")) return;\n\t\tvar jsBody = parser.requireElement(\"jsBody\", tokens);\n\n\t\tvar jsSource =\n\t\t\tjsBody.jsSource +\n\t\t\t\"\\nreturn { \" +\n\t\t\tjsBody.exposedFunctionNames\n\t\t\t\t.map(function (name) {\n\t\t\t\t\treturn name + \":\" + name;\n\t\t\t\t})\n\t\t\t\t.join(\",\") +\n\t\t\t\" } \";\n\t\tvar func = new Function(jsSource);\n\n\t\treturn {\n\t\t\tjsSource: jsSource,\n\t\t\tfunction: func,\n\t\t\texposedFunctionNames: jsBody.exposedFunctionNames,\n\t\t\tinstall: function () {\n\t\t\t\tmergeObjects(globalScope, func());\n\t\t\t},\n\t\t};\n\t});\n\n\t_parser.addCommand(\"js\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"js\")) return;\n\t\t// Parse inputs\n\t\tvar inputs = [];\n\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t// empty input list\n\t\t\t} else {\n\t\t\t\tdo {\n\t\t\t\t\tvar inp = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\t\t\tinputs.push(inp.value);\n\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t}\n\t\t}\n\n\t\tvar jsBody = parser.requireElement(\"jsBody\", tokens);\n\t\ttokens.matchToken(\"end\");\n\n\t\tvar func = varargConstructor(Function, inputs.concat([jsBody.jsSource]));\n\n\t\tvar command = {\n\t\t\tjsSource: jsBody.jsSource,\n\t\t\tfunction: func,\n\t\t\tinputs: inputs,\n\t\t\top: function (context) {\n\t\t\t\tvar args = [];\n\t\t\t\tinputs.forEach(function (input) {\n\t\t\t\t\targs.push(runtime.resolveSymbol(input, context, 'default'));\n\t\t\t\t});\n\t\t\t\tvar result = func.apply(globalScope, args);\n\t\t\t\tif (result && typeof result.then === \"function\") {\n\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\tresult.then(function (actualResult) {\n\t\t\t\t\t\t\tcontext.result = actualResult;\n\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcontext.result = result;\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"async\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"async\")) return;\n\t\tif (tokens.matchToken(\"do\")) {\n\t\t\tvar body = parser.requireElement(\"commandList\", tokens);\n\n\t\t\t// Append halt\n\t\t\tvar end = body;\n\t\t\twhile (end.next) end = end.next;\n\t\t\tend.next = runtime.HALT;\n\n\t\t\ttokens.requireToken(\"end\");\n\t\t} else {\n\t\t\tvar body = parser.requireElement(\"command\", tokens);\n\t\t}\n\t\tvar command = {\n\t\t\tbody: body,\n\t\t\top: function (context) {\n\t\t\t\tsetTimeout(function () {\n\t\t\t\t\tbody.execute(context);\n\t\t\t\t});\n\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(body, command);\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"tell\", function (parser, runtime, tokens) {\n\t\tvar startToken = tokens.currentToken();\n\t\tif (!tokens.matchToken(\"tell\")) return;\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\tvar body = parser.requireElement(\"commandList\", tokens);\n\t\tif (tokens.hasMore() && !parser.featureStart(tokens.currentToken())) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\t\tvar slot = \"tell_\" + startToken.start;\n\t\tvar tellCmd = {\n\t\t\tvalue: value,\n\t\t\tbody: body,\n\t\t\targs: [value],\n\t\t\tresolveNext: function (context) {\n\t\t\t\tvar iterator = context.meta.iterators[slot];\n\t\t\t\tif (iterator.index < iterator.value.length) {\n\t\t\t\t\tcontext.beingTold = iterator.value[iterator.index++];\n\t\t\t\t\treturn body;\n\t\t\t\t} else {\n\t\t\t\t\t// restore original me\n\t\t\t\t\tcontext.beingTold = iterator.originalBeingTold;\n\t\t\t\t\tif (this.next) {\n\t\t\t\t\t\treturn this.next;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn runtime.findNext(this.parent, context);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\top: function (context, value) {\n\t\t\t\tif (value == null) {\n\t\t\t\t\tvalue = [];\n\t\t\t\t} else if (!(Array.isArray(value) || value instanceof NodeList)) {\n\t\t\t\t\tvalue = [value];\n\t\t\t\t}\n\t\t\t\tcontext.meta.iterators[slot] = {\n\t\t\t\t\toriginalBeingTold: context.beingTold,\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: value,\n\t\t\t\t};\n\t\t\t\treturn this.resolveNext(context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(body, tellCmd);\n\t\treturn tellCmd;\n\t});\n\n\t_parser.addCommand(\"wait\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"wait\")) return;\n\t\tvar command;\n\n\t\t// wait on event\n\t\tif (tokens.matchToken(\"for\")) {\n\t\t\ttokens.matchToken(\"a\"); // optional \"a\"\n\t\t\tvar events = [];\n\t\t\tdo {\n\t\t\t\tvar lookahead = tokens.token(0);\n\t\t\t\tif (lookahead.type === 'NUMBER' || lookahead.type === 'L_PAREN') {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\ttime: parser.requireElement('expression', tokens).evaluate() // TODO: do we want to allow async here?\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tevents.push({\n\t\t\t\t\t\tname: _parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\").evaluate(),\n\t\t\t\t\t\targs: parseEventArgs(tokens),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} while (tokens.matchToken(\"or\"));\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar on = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\t// wait on event\n\t\t\tcommand = {\n\t\t\t\tevent: events,\n\t\t\t\ton: on,\n\t\t\t\targs: [on],\n\t\t\t\top: function (context, on) {\n\t\t\t\t\tvar target = on ? on : context.me;\n\t\t\t\t\tif (!(target instanceof EventTarget))\n\t\t\t\t\t\tthrow new Error(\"Not a valid event target: \" + this.on.sourceFor());\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tvar resolved = false;\n\t\t\t\t\t\tfor (const eventInfo of events) {\n\t\t\t\t\t\t\tvar listener = (event) => {\n\t\t\t\t\t\t\t\tcontext.result = event;\n\t\t\t\t\t\t\t\tif (eventInfo.args) {\n\t\t\t\t\t\t\t\t\tfor (const arg of eventInfo.args) {\n\t\t\t\t\t\t\t\t\t\tcontext[arg.value] =\n\t\t\t\t\t\t\t\t\t\t\tevent[arg.value] || (event.detail ? event.detail[arg.value] : null);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tif (eventInfo.name){\n\t\t\t\t\t\t\t\ttarget.addEventListener(eventInfo.name, listener, {once: true});\n\t\t\t\t\t\t\t} else if (eventInfo.time != null) {\n\t\t\t\t\t\t\t\tsetTimeout(listener, eventInfo.time, eventInfo.time)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t} else {\n\t\t\tvar time;\n\t\t\tif (tokens.matchToken(\"a\")) {\n\t\t\t\ttokens.requireToken(\"tick\");\n\t\t\t\ttime = 0;\n\t\t\t} else {\n\t\t\t\ttime = _parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tcommand = {\n\t\t\t\ttype: \"waitCmd\",\n\t\t\t\ttime: time,\n\t\t\t\targs: [time],\n\t\t\t\top: function (context, timeValue) {\n\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tresolve(runtime.findNext(this, context));\n\t\t\t\t\t\t}, timeValue);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\t});\n\n\t// TODO - colon path needs to eventually become part of ruby-style symbols\n\t_parser.addGrammarElement(\"dotOrColonPath\", function (parser, runtime, tokens) {\n\t\tvar root = tokens.matchTokenType(\"IDENTIFIER\");\n\t\tif (root) {\n\t\t\tvar path = [root.value];\n\n\t\t\tvar separator = tokens.matchOpToken(\".\") || tokens.matchOpToken(\":\");\n\t\t\tif (separator) {\n\t\t\t\tdo {\n\t\t\t\t\tpath.push(tokens.requireTokenType(\"IDENTIFIER\", \"NUMBER\").value);\n\t\t\t\t} while (tokens.matchOpToken(separator.value));\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttype: \"dotOrColonPath\",\n\t\t\t\tpath: path,\n\t\t\t\tevaluate: function () {\n\t\t\t\t\treturn path.join(separator ? separator.value : \"\");\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\n\t_parser.addGrammarElement(\"eventName\", function (parser, runtime, tokens) {\n\t\tvar token;\n\t\tif ((token = tokens.matchTokenType(\"STRING\"))) {\n\t\t\treturn {\n\t\t\t\tevaluate: function() {\n\t\t\t\t\treturn token.value;\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn parser.parseElement(\"dotOrColonPath\", tokens);\n\t});\n\n\tfunction parseSendCmd(cmdType, parser, runtime, tokens) {\n\t\tvar eventName = parser.requireElement(\"eventName\", tokens);\n\n\t\tvar details = parser.parseElement(\"namedArgumentList\", tokens);\n\t\tif ((cmdType === \"send\" && tokens.matchToken(\"to\")) ||\n\t\t\t(cmdType === \"trigger\" && tokens.matchToken(\"on\"))) {\n\t\t\tvar toExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\tvar toExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t}\n\n\t\tvar sendCmd = {\n\t\t\teventName: eventName,\n\t\t\tdetails: details,\n\t\t\tto: toExpr,\n\t\t\targs: [toExpr, eventName, details],\n\t\t\top: function (context, to, eventName, details) {\n\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\truntime.forEach(to, function (target) {\n\t\t\t\t\truntime.triggerEvent(target, eventName, details, context.me);\n\t\t\t\t});\n\t\t\t\treturn runtime.findNext(sendCmd, context);\n\t\t\t},\n\t\t};\n\t\treturn sendCmd;\n\t}\n\n\t_parser.addCommand(\"trigger\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"trigger\")) {\n\t\t\treturn parseSendCmd(\"trigger\", parser, runtime, tokens);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"send\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"send\")) {\n\t\t\treturn parseSendCmd(\"send\", parser, runtime, tokens);\n\t\t}\n\t});\n\n\tvar parseReturnFunction = function (parser, runtime, tokens, returnAValue) {\n\t\tif (returnAValue) {\n\t\t\tif (parser.commandBoundary(tokens.currentToken())) {\n\t\t\t\tparser.raiseParseError(tokens, \"'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.\");\n\t\t\t} else {\n\t\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\t\t}\n\n\t\tvar returnCmd = {\n\t\t\tvalue: value,\n\t\t\targs: [value],\n\t\t\top: function (context, value) {\n\t\t\t\tvar resolve = context.meta.resolve;\n\t\t\t\tcontext.meta.returned = true;\n\t\t\t\tcontext.meta.returnValue = value;\n\t\t\t\tif (resolve) {\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tresolve(value);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn runtime.HALT;\n\t\t\t},\n\t\t};\n\t\treturn returnCmd;\n\t};\n\n\t_parser.addCommand(\"return\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"return\")) {\n\t\t\treturn parseReturnFunction(parser, runtime, tokens, true);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"exit\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"exit\")) {\n\t\t\treturn parseReturnFunction(parser, runtime, tokens, false);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"halt\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"halt\")) {\n\t\t\tif (tokens.matchToken(\"the\")) {\n\t\t\t\ttokens.requireToken(\"event\");\n\t\t\t\t// optional possessive\n\t\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t\t}\n\t\t\t\tvar keepExecuting = true;\n\t\t\t}\n\t\t\tif (tokens.matchToken(\"bubbling\")) {\n\t\t\t\tvar bubbling = true;\n\t\t\t} else if (tokens.matchToken(\"default\")) {\n\t\t\t\tvar haltDefault = true;\n\t\t\t}\n\t\t\tvar exit = parseReturnFunction(parser, runtime, tokens, false);\n\n\t\t\tvar haltCmd = {\n\t\t\t\tkeepExecuting: true,\n\t\t\t\tbubbling: bubbling,\n\t\t\t\thaltDefault: haltDefault,\n\t\t\t\texit: exit,\n\t\t\t\top: function (ctx) {\n\t\t\t\t\tif (ctx.event) {\n\t\t\t\t\t\tif (bubbling) {\n\t\t\t\t\t\t\tctx.event.stopPropagation();\n\t\t\t\t\t\t} else if (haltDefault) {\n\t\t\t\t\t\t\tctx.event.preventDefault();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tctx.event.stopPropagation();\n\t\t\t\t\t\t\tctx.event.preventDefault();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (keepExecuting) {\n\t\t\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn exit;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn haltCmd;\n\t\t}\n\t});\n\n\t_parser.addCommand(\"log\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"log\")) return;\n\t\tvar exprs = [parser.parseElement(\"expression\", tokens)];\n\t\twhile (tokens.matchOpToken(\",\")) {\n\t\t\texprs.push(parser.requireElement(\"expression\", tokens));\n\t\t}\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\tvar withExpr = parser.requireElement(\"expression\", tokens);\n\t\t}\n\t\tvar logCmd = {\n\t\t\texprs: exprs,\n\t\t\twithExpr: withExpr,\n\t\t\targs: [withExpr, exprs],\n\t\t\top: function (ctx, withExpr, values) {\n\t\t\t\tif (withExpr) {\n\t\t\t\t\twithExpr.apply(null, values);\n\t\t\t\t} else {\n\t\t\t\t\tconsole.log.apply(null, values);\n\t\t\t\t}\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t\treturn logCmd;\n\t});\n\n\t_parser.addCommand(\"throw\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"throw\")) return;\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\tvar throwCmd = {\n\t\t\texpr: expr,\n\t\t\targs: [expr],\n\t\t\top: function (ctx, expr) {\n\t\t\t\truntime.registerHyperTrace(ctx, expr);\n\t\t\t\tthrow expr;\n\t\t\t},\n\t\t};\n\t\treturn throwCmd;\n\t});\n\n\tvar parseCallOrGet = function (parser, runtime, tokens) {\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\tvar callCmd = {\n\t\t\texpr: expr,\n\t\t\targs: [expr],\n\t\t\top: function (context, result) {\n\t\t\t\tcontext.result = result;\n\t\t\t\treturn runtime.findNext(callCmd, context);\n\t\t\t},\n\t\t};\n\t\treturn callCmd;\n\t};\n\t_parser.addCommand(\"call\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"call\")) return;\n\t\tvar call = parseCallOrGet(parser, runtime, tokens);\n\t\tif (call.expr && call.expr.type !== \"functionCall\") {\n\t\t\tparser.raiseParseError(tokens, \"Must be a function invocation\");\n\t\t}\n\t\treturn call;\n\t});\n\t_parser.addCommand(\"get\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"get\")) {\n\t\t\treturn parseCallOrGet(parser, runtime, tokens);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"make\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"make\")) return;\n\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\n\t\tvar args = [];\n\t\tif (expr.type !== \"queryRef\" && tokens.matchToken(\"from\")) {\n\t\t\tdo {\n\t\t\t\targs.push(parser.requireElement(\"expression\", tokens));\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t}\n\n\t\tif (tokens.matchToken(\"called\")) {\n\t\t\tvar target = parser.requireElement(\"symbol\", tokens);\n\t\t}\n\n\t\tvar command;\n\t\tif (expr.type === \"queryRef\") {\n\t\t\tcommand = {\n\t\t\t\top: function (ctx) {\n\t\t\t\t\tvar match,\n\t\t\t\t\t\ttagname = \"div\",\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tclasses = [];\n\t\t\t\t\tvar re = /(?:(^|#|\\.)([^#\\. ]+))/g;\n\t\t\t\t\twhile ((match = re.exec(expr.css))) {\n\t\t\t\t\t\tif (match[1] === \"\") tagname = match[2].trim();\n\t\t\t\t\t\telse if (match[1] === \"#\") id = match[2].trim();\n\t\t\t\t\t\telse classes.push(match[2].trim());\n\t\t\t\t\t}\n\n\t\t\t\t\tvar result = document.createElement(tagname);\n\t\t\t\t\tif (id !== undefined) result.id = id;\n\t\t\t\t\tfor (var i = 0; i < classes.length; i++) {\n\t\t\t\t\t\tvar cls = classes[i];\n\t\t\t\t\t\tresult.classList.add(cls)\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.result = result;\n\t\t\t\t\tif (target){\n\t\t\t\t\t\truntime.setSymbol(target.name, ctx, target.scope, result);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t} else {\n\t\t\tcommand = {\n\t\t\t\targs: [expr, args],\n\t\t\t\top: function (ctx, expr, args) {\n\t\t\t\t\tctx.result = varargConstructor(expr, args);\n\t\t\t\t\tif (target){\n\t\t\t\t\t\truntime.setSymbol(target.name, ctx, target.scope, ctx.result);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\t});\n\n\t_parser.addGrammarElement(\"pseudoCommand\", function (parser, runtime, tokens) {\n\n\t\tlet lookAhead = tokens.token(1);\n\t\tif (!(lookAhead && lookAhead.op && (lookAhead.value === '.' || lookAhead.value === \"(\"))) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar expr = parser.requireElement(\"primaryExpression\", tokens);\n\n\t\tvar rootRoot = expr.root;\n\t\tvar root = expr;\n\t\twhile (rootRoot.root != null) {\n\t\t\troot = root.root;\n\t\t\trootRoot = rootRoot.root;\n\t\t}\n\n\t\tif (expr.type !== \"functionCall\") {\n\t\t\tparser.raiseParseError(tokens, \"Pseudo-commands must be function calls\");\n\t\t}\n\n\t\tif (root.type === \"functionCall\" && root.root.root == null) {\n\t\t\tif (tokens.matchAnyToken(\"the\", \"to\", \"on\", \"with\", \"into\", \"from\", \"at\")) {\n\t\t\t\tvar realRoot = parser.requireElement(\"expression\", tokens);\n\t\t\t} else if (tokens.matchToken(\"me\")) {\n\t\t\t\tvar realRoot = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\n\t\tif(realRoot){\n\t\t\tvar pseudoCommand = {\n\t\t\t\ttype: \"pseudoCommand\",\n\t\t\t\troot: realRoot,\n\t\t\t\targExressions: root.argExressions,\n\t\t\t\targs: [realRoot, root.argExressions],\n\t\t\t\top: function (context, rootRoot, args) {\n\t\t\t\t\truntime.nullCheck(rootRoot, realRoot);\n\t\t\t\t\tvar func = rootRoot[root.root.name];\n\t\t\t\t\truntime.nullCheck(func, root);\n\t\t\t\t\tif (func.hyperfunc) {\n\t\t\t\t\t\targs.push(context);\n\t\t\t\t\t}\n\t\t\t\t\tcontext.result = func.apply(rootRoot, args);\n\t\t\t\t\treturn runtime.findNext(pseudoCommand, context);\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t}\n\t\t} else {\n\t\t\tvar pseudoCommand = {\n\t\t\t\ttype: \"pseudoCommand\",\n\t\t\t\texpr: expr,\n\t\t\t\targs: [expr],\n\t\t\t\top: function (context, result) {\n\t\t\t\t\tcontext.result = result;\n\t\t\t\t\treturn runtime.findNext(pseudoCommand, context);\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\n\t\treturn pseudoCommand;\n\t});\n\n\t/**\n\t* @param {ParserObject} parser\n\t* @param {RuntimeObject} runtime\n\t* @param {TokensObject} tokens\n\t* @param {*} target\n\t* @param {*} value\n\t* @returns\n\t*/\n\tvar makeSetter = function (parser, runtime, tokens, target, value) {\n\n\t\tvar symbolWrite = target.type === \"symbol\";\n\t\tvar attributeWrite = target.type === \"attributeRef\";\n\t\tvar styleWrite = target.type === \"styleRef\";\n\t\tvar arrayWrite = target.type === \"arrayIndex\";\n\n\t\tif (!(attributeWrite || styleWrite || symbolWrite) && target.root == null) {\n\t\t\tparser.raiseParseError(tokens, \"Can only put directly into symbols, not references\");\n\t\t}\n\n\t\tvar rootElt = null;\n\t\tvar prop = null;\n\t\tif (symbolWrite) {\n\t\t\t// rootElt is null\n\t\t} else if (attributeWrite || styleWrite) {\n\t\t\trootElt = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\tvar attribute = target;\n\t\t} else if(arrayWrite) {\n\t\t\tprop = target.firstIndex;\n\t\t\trootElt = target.root;\n\t\t} else {\n\t\t\tprop = target.prop ? target.prop.value : null;\n\t\t\tvar attribute = target.attribute;\n\t\t\trootElt = target.root;\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\t\tvar setCmd = {\n\t\t\ttarget: target,\n\t\t\tsymbolWrite: symbolWrite,\n\t\t\tvalue: value,\n\t\t\targs: [rootElt, prop, value],\n\t\t\top: function (context, root, prop, valueToSet) {\n\t\t\t\tif (symbolWrite) {\n\t\t\t\t\truntime.setSymbol(target.name, context, target.scope, valueToSet);\n\t\t\t\t} else {\n\t\t\t\t\truntime.nullCheck(root, rootElt);\n\t\t\t\t\tif (arrayWrite) {\n\t\t\t\t\t\troot[prop] = valueToSet;\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\tif (attribute) {\n\t\t\t\t\t\t\t\tif (attribute.type === \"attributeRef\") {\n\t\t\t\t\t\t\t\t\tif (valueToSet == null) {\n\t\t\t\t\t\t\t\t\t\telt.removeAttribute(attribute.name);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\telt.setAttribute(attribute.name, valueToSet);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\telt.style[attribute.name] = valueToSet;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\telt[prop] = valueToSet;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t},\n\t\t};\n\t\treturn setCmd;\n\t};\n\n\t_parser.addCommand(\"default\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"default\")) return;\n\t\tvar target = parser.requireElement(\"assignableExpression\", tokens);\n\t\ttokens.requireToken(\"to\");\n\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\t/** @type {GrammarElement} */\n\t\tvar setter = makeSetter(parser, runtime, tokens, target, value);\n\t\tvar defaultCmd = {\n\t\t\ttarget: target,\n\t\t\tvalue: value,\n\t\t\tsetter: setter,\n\t\t\targs: [target],\n\t\t\top: function (context, target) {\n\t\t\t\tif (target) {\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else {\n\t\t\t\t\treturn setter;\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tsetter.parent = defaultCmd;\n\t\treturn defaultCmd;\n\t});\n\n\t_parser.addCommand(\"set\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"set\")) return;\n\t\tif (tokens.currentToken().type === \"L_BRACE\") {\n\t\t\tvar obj = parser.requireElement(\"objectLiteral\", tokens);\n\t\t\ttokens.requireToken(\"on\");\n\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar command = {\n\t\t\t\tobjectLiteral: obj,\n\t\t\t\ttarget: target,\n\t\t\t\targs: [obj, target],\n\t\t\t\top: function (ctx, obj, target) {\n\t\t\t\t\tmergeObjects(target, obj);\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn command;\n\t\t}\n\n\t\ttry {\n\t\t\ttokens.pushFollow(\"to\");\n\t\t\tvar target = parser.requireElement(\"assignableExpression\", tokens);\n\t\t} finally {\n\t\t\ttokens.popFollow();\n\t\t}\n\t\ttokens.requireToken(\"to\");\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\t\treturn makeSetter(parser, runtime, tokens, target, value);\n\t});\n\n\t_parser.addCommand(\"if\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"if\")) return;\n\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\ttokens.matchToken(\"then\"); // optional 'then'\n\t\tvar trueBranch = parser.parseElement(\"commandList\", tokens);\n\t\tif (tokens.matchToken(\"else\") || tokens.matchToken(\"otherwise\")) {\n\t\t\tvar falseBranch = parser.parseElement(\"commandList\", tokens);\n\t\t}\n\t\tif (tokens.hasMore()) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\n\t\t/** @type {GrammarElement} */\n\t\tvar ifCmd = {\n\t\t\texpr: expr,\n\t\t\ttrueBranch: trueBranch,\n\t\t\tfalseBranch: falseBranch,\n\t\t\targs: [expr],\n\t\t\top: function (context, exprValue) {\n\t\t\t\tif (exprValue) {\n\t\t\t\t\treturn trueBranch;\n\t\t\t\t} else if (falseBranch) {\n\t\t\t\t\treturn falseBranch;\n\t\t\t\t} else {\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(trueBranch, ifCmd);\n\t\tparser.setParent(falseBranch, ifCmd);\n\t\treturn ifCmd;\n\t});\n\n\tvar parseRepeatExpression = function (parser, tokens, runtime, startedWithForToken) {\n\t\tvar innerStartToken = tokens.currentToken();\n\t\tvar identifier;\n\t\tif (tokens.matchToken(\"for\") || startedWithForToken) {\n\t\t\tvar identifierToken = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tidentifier = identifierToken.value;\n\t\t\ttokens.requireToken(\"in\");\n\t\t\tvar expression = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"in\")) {\n\t\t\tidentifier = \"it\";\n\t\t\tvar expression = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"while\")) {\n\t\t\tvar whileExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else if (tokens.matchToken(\"until\")) {\n\t\t\tvar isUntil = true;\n\t\t\tif (tokens.matchToken(\"event\")) {\n\t\t\t\tvar evt = _parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\");\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tvar on = parser.requireElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar whileExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\t\t} else {\n\t\t\tif (!parser.commandBoundary(tokens.currentToken()) &&\n\t\t\t tokens.currentToken().value !== 'forever') {\n\t\t\t\tvar times = parser.requireElement(\"expression\", tokens);\n\t\t\t\ttokens.requireToken(\"times\");\n\t\t\t} else {\n\t\t\t\ttokens.matchToken(\"forever\"); // consume optional forever\n\t\t\t\tvar forever = true;\n\t\t\t}\n\t\t}\n\n\t\tif (tokens.matchToken(\"index\")) {\n\t\t\tvar identifierToken = tokens.requireTokenType(\"IDENTIFIER\");\n\t\t\tvar indexIdentifier = identifierToken.value;\n\t\t}\n\n\t\tvar loop = parser.parseElement(\"commandList\", tokens);\n\t\tif (loop && evt) {\n\t\t\t// if this is an event based loop, wait a tick at the end of the loop so that\n\t\t\t// events have a chance to trigger in the loop condition o_O)))\n\t\t\tvar last = loop;\n\t\t\twhile (last.next) {\n\t\t\t\tlast = last.next;\n\t\t\t}\n\t\t\tvar waitATick = {\n\t\t\t\ttype: \"waitATick\",\n\t\t\t\top: function () {\n\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\tresolve(runtime.findNext(waitATick));\n\t\t\t\t\t\t}, 0);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\tlast.next = waitATick;\n\t\t}\n\t\tif (tokens.hasMore()) {\n\t\t\ttokens.requireToken(\"end\");\n\t\t}\n\n\t\tif (identifier == null) {\n\t\t\tidentifier = \"_implicit_repeat_\" + innerStartToken.start;\n\t\t\tvar slot = identifier;\n\t\t} else {\n\t\t\tvar slot = identifier + \"_\" + innerStartToken.start;\n\t\t}\n\n\t\tvar repeatCmd = {\n\t\t\tidentifier: identifier,\n\t\t\tindexIdentifier: indexIdentifier,\n\t\t\tslot: slot,\n\t\t\texpression: expression,\n\t\t\tforever: forever,\n\t\t\ttimes: times,\n\t\t\tuntil: isUntil,\n\t\t\tevent: evt,\n\t\t\ton: on,\n\t\t\twhileExpr: whileExpr,\n\t\t\tresolveNext: function () {\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tloop: loop,\n\t\t\targs: [whileExpr, times],\n\t\t\top: function (context, whileValue, times) {\n\t\t\t\tvar iteratorInfo = context.meta.iterators[slot];\n\t\t\t\tvar keepLooping = false;\n\t\t\t\tvar loopVal = null;\n\t\t\t\tif (this.forever) {\n\t\t\t\t\tkeepLooping = true;\n\t\t\t\t} else if (this.until) {\n\t\t\t\t\tif (evt) {\n\t\t\t\t\t\tkeepLooping = context.meta.iterators[slot].eventFired === false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tkeepLooping = whileValue !== true;\n\t\t\t\t\t}\n\t\t\t\t} else if (whileExpr) {\n\t\t\t\t\tkeepLooping = whileValue;\n\t\t\t\t} else if (times) {\n\t\t\t\t\tkeepLooping = iteratorInfo.index < times;\n\t\t\t\t} else {\n\t\t\t\t\tvar nextValFromIterator = iteratorInfo.iterator.next();\n\t\t\t\t\tkeepLooping = !nextValFromIterator.done;\n\t\t\t\t\tloopVal = nextValFromIterator.value;\n\t\t\t\t}\n\n\t\t\t\tif (keepLooping) {\n\t\t\t\t\tif (iteratorInfo.value) {\n\t\t\t\t\t\tcontext.result = context[identifier] = loopVal;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.result = iteratorInfo.index;\n\t\t\t\t\t}\n\t\t\t\t\tif (indexIdentifier) {\n\t\t\t\t\t\tcontext[indexIdentifier] = iteratorInfo.index;\n\t\t\t\t\t}\n\t\t\t\t\titeratorInfo.index++;\n\t\t\t\t\treturn loop;\n\t\t\t\t} else {\n\t\t\t\t\tcontext.meta.iterators[slot] = null;\n\t\t\t\t\treturn runtime.findNext(this.parent, context);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t\tparser.setParent(loop, repeatCmd);\n\t\tvar repeatInit = {\n\t\t\tname: \"repeatInit\",\n\t\t\targs: [expression, evt, on],\n\t\t\top: function (context, value, event, on) {\n\t\t\t\tvar iteratorInfo = {\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\teventFired: false,\n\t\t\t\t};\n\t\t\t\tcontext.meta.iterators[slot] = iteratorInfo;\n\t\t\t\tif (value && value[Symbol.iterator]) {\n\t\t\t\t\titeratorInfo.iterator = value[Symbol.iterator]();\n\t\t\t\t}\n\t\t\t\tif (evt) {\n\t\t\t\t\tvar target = on || context.me;\n\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\t\tcontext.meta.iterators[slot].eventFired = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn repeatCmd; // continue to loop\n\t\t\t},\n\t\t\texecute: function (context) {\n\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t},\n\t\t};\n\t\tparser.setParent(repeatCmd, repeatInit);\n\t\treturn repeatInit;\n\t};\n\n\t_parser.addCommand(\"repeat\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"repeat\")) {\n\t\t\treturn parseRepeatExpression(parser, tokens, runtime, false);\n\t\t}\n\t});\n\n\t_parser.addCommand(\"for\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"for\")) {\n\t\t\treturn parseRepeatExpression(parser, tokens, runtime, true);\n\t\t}\n\t});\n\n _parser.addCommand(\"continue\", function (parser, runtime, tokens) {\n\n if (!tokens.matchToken(\"continue\")) return;\n\n var command = {\n op: function (context) {\n\n // scan for the closest repeat statement\n for (var parent = this.parent ; true ; parent = parent.parent) {\n\n if (parent == undefined) {\n parser.raiseParseError(tokens, \"Command `continue` cannot be used outside of a `repeat` loop.\")\n }\n if (parent.loop != undefined) {\n return parent.resolveNext(context)\n }\n }\n }\n };\n return command;\n });\n\n _parser.addCommand(\"break\", function (parser, runtime, tokens) {\n\n if (!tokens.matchToken(\"break\")) return;\n\n var command = {\n op: function (context) {\n\n // scan for the closest repeat statement\n for (var parent = this.parent ; true ; parent = parent.parent) {\n\n if (parent == undefined) {\n parser.raiseParseError(tokens, \"Command `continue` cannot be used outside of a `repeat` loop.\")\n }\n if (parent.loop != undefined) {\n\t\t\t return runtime.findNext(parent.parent, context);\n }\n }\n }\n };\n return command;\n });\n\n\t_parser.addGrammarElement(\"stringLike\", function (parser, runtime, tokens) {\n\t\treturn _parser.parseAnyOf([\"string\", \"nakedString\"], tokens);\n\t});\n\n\t_parser.addCommand(\"append\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"append\")) return;\n\t\tvar targetExpr = null;\n\n\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\tvar implicitResultSymbol = {\n\t\t\ttype: \"symbol\",\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.resolveSymbol(\"result\", context);\n\t\t\t},\n\t\t};\n\n\t\tif (tokens.matchToken(\"to\")) {\n\t\t\ttargetExpr = parser.requireElement(\"expression\", tokens);\n\t\t} else {\n\t\t\ttargetExpr = implicitResultSymbol;\n\t\t}\n\n\t\tvar setter = null;\n\t\tif (targetExpr.type === \"symbol\" || targetExpr.type === \"attributeRef\" || targetExpr.root != null) {\n\t\t\tsetter = makeSetter(parser, runtime, tokens, targetExpr, implicitResultSymbol);\n\t\t}\n\n\t\tvar command = {\n\t\t\tvalue: value,\n\t\t\ttarget: targetExpr,\n\t\t\targs: [targetExpr, value],\n\t\t\top: function (context, target, value) {\n\t\t\t\tif (Array.isArray(target)) {\n\t\t\t\t\ttarget.push(value);\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else if (target instanceof Element) {\n\t\t\t\t\ttarget.innerHTML += value;\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t} else if(setter) {\n\t\t\t\t\tcontext.result = (target || \"\") + value;\n\t\t\t\t\treturn setter;\n\t\t\t\t} else {\n\t\t\t\t\tthrow Error(\"Unable to append a value!\")\n\t\t\t\t}\n\t\t\t},\n\t\t\texecute: function (context) {\n\t\t\t\treturn runtime.unifiedExec(this, context/*, value, target*/);\n\t\t\t},\n\t\t};\n\n\t\tif (setter != null) {\n\t\t\tsetter.parent = command;\n\t\t}\n\n\t\treturn command;\n\t});\n\n\t_parser.addCommand(\"increment\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"increment\")) return;\n\t\tvar amount;\n\n\t\t// This is optional. Defaults to \"result\"\n\t\tvar target = parser.parseElement(\"assignableExpression\", tokens);\n\n\t\t// This is optional. Defaults to 1.\n\t\tif (tokens.matchToken(\"by\")) {\n\t\t\tamount = parser.requireElement(\"expression\", tokens);\n\t\t}\n\n\t\tvar implicitIncrementOp = {\n\t\t\ttype: \"implicitIncrementOp\",\n\t\t\ttarget: target,\n\t\t\targs: [target, amount],\n\t\t\top: function (context, targetValue, amount) {\n\t\t\t\ttargetValue = targetValue ? parseFloat(targetValue) : 0;\n\t\t\t\tamount = amount ? parseFloat(amount) : 1;\n\t\t\t\tvar newValue = targetValue + amount;\n\t\t\t\tcontext.result = newValue;\n\t\t\t\treturn newValue;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t}\n\t\t};\n\n\t\treturn makeSetter(parser, runtime, tokens, target, implicitIncrementOp);\n\t});\n\n\t_parser.addCommand(\"decrement\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"decrement\")) return;\n\t\tvar amount;\n\n\t\t// This is optional. Defaults to \"result\"\n\t\tvar target = parser.parseElement(\"assignableExpression\", tokens);\n\n\t\t// This is optional. Defaults to 1.\n\t\tif (tokens.matchToken(\"by\")) {\n\t\t\tamount = parser.requireElement(\"expression\", tokens);\n\t\t}\n\n\t\tvar implicitDecrementOp = {\n\t\t\ttype: \"implicitDecrementOp\",\n\t\t\ttarget: target,\n\t\t\targs: [target, amount],\n\t\t\top: function (context, targetValue, amount) {\n\t\t\t\ttargetValue = targetValue ? parseFloat(targetValue) : 0;\n\t\t\t\tamount = amount ? parseFloat(amount) : 1;\n\t\t\t\tvar newValue = targetValue - amount;\n\t\t\t\tcontext.result = newValue;\n\t\t\t\treturn newValue;\n\t\t\t},\n\t\t\tevaluate: function (context) {\n\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t}\n\t\t};\n\n\t\treturn makeSetter(parser, runtime, tokens, target, implicitDecrementOp);\n\t});\n\n\tfunction parseConversionInfo(tokens, parser) {\n\t\tvar type = \"text\";\n\t\tvar conversion;\n\t\ttokens.matchToken(\"a\") || tokens.matchToken(\"an\");\n\t\tif (tokens.matchToken(\"json\") || tokens.matchToken(\"Object\")) {\n\t\t\ttype = \"json\";\n\t\t} else if (tokens.matchToken(\"response\")) {\n\t\t\ttype = \"response\";\n\t\t} else if (tokens.matchToken(\"html\")) {\n\t\t\ttype = \"html\";\n\t\t} else if (tokens.matchToken(\"text\")) {\n\t\t\t// default, ignore\n\t\t} else {\n\t\t\tconversion = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\t}\n\t\treturn {type, conversion};\n\t}\n\n\t_parser.addCommand(\"fetch\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"fetch\")) return;\n\t\tvar url = parser.requireElement(\"stringLike\", tokens);\n\n\t\tif (tokens.matchToken(\"as\")) {\n\t\t\tvar conversionInfo = parseConversionInfo(tokens, parser);\n\t\t}\n\n\t\tif (tokens.matchToken(\"with\") && tokens.currentToken().value !== \"{\") {\n\t\t\tvar args = parser.parseElement(\"nakedNamedArgumentList\", tokens);\n\t\t} else {\n\t\t\tvar args = parser.parseElement(\"objectLiteral\", tokens);\n\t\t}\n\n\t\tif (conversionInfo == null && tokens.matchToken(\"as\")) {\n\t\t\tconversionInfo = parseConversionInfo(tokens, parser);\n\t\t}\n\n\t\tvar type = conversionInfo ? conversionInfo.type : \"text\";\n\t\tvar conversion = conversionInfo ? conversionInfo.conversion : null\n\n\t\t/** @type {GrammarElement} */\n\t\tvar fetchCmd = {\n\t\t\turl: url,\n\t\t\targExpressions: args,\n\t\t\targs: [url, args],\n\t\t\top: function (context, url, args) {\n\t\t\t\tvar detail = args || {};\n\t\t\t\tdetail[\"sender\"] = context.me;\n\t\t\t\tdetail[\"headers\"] = detail[\"headers\"] || {}\n\t\t\t\tvar abortController = new AbortController();\n\t\t\t\tlet abortListener = context.me.addEventListener('fetch:abort', function(){\n\t\t\t\t\tabortController.abort();\n\t\t\t\t}, {once: true});\n\t\t\t\tdetail['signal'] = abortController.signal;\n\t\t\t\truntime.triggerEvent(context.me, \"hyperscript:beforeFetch\", detail);\n\t\t\t\truntime.triggerEvent(context.me, \"fetch:beforeRequest\", detail);\n\t\t\t\targs = detail;\n\t\t\t\tvar finished = false;\n\t\t\t\tif (args.timeout) {\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (!finished) {\n\t\t\t\t\t\t\tabortController.abort();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, args.timeout);\n\t\t\t\t}\n\t\t\t\treturn fetch(url, args)\n\t\t\t\t\t.then(function (resp) {\n\t\t\t\t\t\tlet resultDetails = {response:resp};\n\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterResponse\", resultDetails);\n\t\t\t\t\t\tresp = resultDetails.response;\n\n\t\t\t\t\t\tif (type === \"response\") {\n\t\t\t\t\t\t\tcontext.result = resp;\n\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result:resp});\n\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (type === \"json\") {\n\t\t\t\t\t\t\treturn resp.json().then(function (result) {\n\t\t\t\t\t\t\t\tcontext.result = result;\n\t\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result});\n\t\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn resp.text().then(function (result) {\n\t\t\t\t\t\t\tif (conversion) result = runtime.convertValue(result, conversion);\n\n\t\t\t\t\t\t\tif (type === \"html\") result = runtime.convertValue(result, \"Fragment\");\n\n\t\t\t\t\t\t\tcontext.result = result;\n\t\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:afterRequest\", {result});\n\t\t\t\t\t\t\tfinished = true;\n\t\t\t\t\t\t\treturn runtime.findNext(fetchCmd, context);\n\t\t\t\t\t\t});\n\t\t\t\t\t})\n\t\t\t\t\t.catch(function (reason) {\n\t\t\t\t\t\truntime.triggerEvent(context.me, \"fetch:error\", {\n\t\t\t\t\t\t\treason: reason,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tthrow reason;\n\t\t\t\t\t}).finally(function(){\n\t\t\t\t\t\tcontext.me.removeEventListener('fetch:abort', abortListener);\n\t\t\t\t\t});\n\t\t\t},\n\t\t};\n\t\treturn fetchCmd;\n\t});\n}\n\n//====================================================================\n// Initialization\n//====================================================================\nfunction ready(fn) {\n\tif (document.readyState !== \"loading\") {\n\t\tsetTimeout(fn);\n\t} else {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", fn);\n\t}\n}\n\nfunction getMetaConfig() {\n\t/** @type {HTMLMetaElement} */\n\tvar element = document.querySelector('meta[name=\"htmx-config\"]');\n\tif (element) {\n\t\treturn parseJSON(element.content);\n\t} else {\n\t\treturn null;\n\t}\n}\n\nfunction mergeMetaConfig() {\n\tvar metaConfig = getMetaConfig();\n\tif (metaConfig) {\n\t\t_hyperscript.config = mergeObjects(_hyperscript.config, metaConfig);\n\t}\n}\n\nif (\"document\" in globalScope) {\n\t/** @type {HTMLScriptElement[]} */\n\tvar scripts = Array.from(document.querySelectorAll(\"script[type='text/hyperscript'][src]\"))\n\tPromise.all(\n\t\t\tscripts.map(function (script) {\n\t\t\t\treturn fetch(script.src)\n\t\t\t\t\t.then(function (res) {\n\t\t\t\t\t\treturn res.text();\n\t\t\t\t\t});\n\t\t\t})\n\t\t)\n\t\t.then(function (script_values) {\n\t\t\t// forEach instead of map, since the return value of .evaluate is not used by the then\n\t\t\treturn script_values.forEach(_runtime.evaluate);\n\t\t})\n\t\t.then(function () {\n\t\t\tready(function () {\n\t\t\t\tmergeMetaConfig();\n\t\t\t\t_runtime.processNode(document.documentElement);\n\t\t\t\tdocument.addEventListener(\"htmx:load\", function (/** @type {CustomEvent} */ evt) {\n\n\t\t\t\t\t_runtime.processNode(evt.detail.elt);\n\t\t\t\t});\n\t\t\t});\n\t\t});\n}\n\n//====================================================================\n// API\n//====================================================================\n/** @type {HyperscriptObject} */\nexport default _hyperscript = mergeObjects(\n\tfunction (str, ctx) {\n\t\treturn _runtime.evaluate(str, ctx); //OK\n\t},\n\t{\n\t\tinternals: {\n\t\t\tlexer: _lexer,\n\t\t\tparser: _parser,\n\t\t\truntime: _runtime,\n\t\t},\n\t\tElementCollection: ElementCollection,\n\t\taddFeature: function (keyword, definition) {\n\t\t\t_parser.addFeature(keyword, definition);\n\t\t},\n\t\taddCommand: function (keyword, definition) {\n\t\t\t_parser.addCommand(keyword, definition);\n\t\t},\n\t\taddLeafExpression: function (name, definition) {\n\t\t\t_parser.addLeafExpression(name, definition);\n\t\t},\n\t\taddIndirectExpression: function (name, definition) {\n\t\t\t_parser.addIndirectExpression(name, definition);\n\t\t},\n\t\tevaluate: _runtime.evaluate.bind(_runtime),\n\t\tparse: _runtime.parse.bind(_runtime),\n\t\tprocessNode: _runtime.processNode.bind(_runtime),\n\t\tconfig: {\n\t\t\tattributes: \"_, script, data-script\",\n\t\t\tdefaultTransition: \"all 500ms ease-in\",\n\t\t\tdisableSelector: \"[disable-scripting], [data-disable-scripting]\",\n\t\t\tconversions: CONVERSIONS,\n\t\t},\n\t}\n);\n","\nimport { mergeObjects } from \"../utils.js\";\n\nfunction genUUID() {\n\treturn \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/g, function (c) {\n\t\tvar r = (Math.random() * 16) | 0,\n\t\tv = c == \"x\" ? r : (r & 0x3) | 0x8;\n\t\treturn v.toString(16);\n\t});\n}\n\nfunction parseUrl(url) {\n\tvar finalUrl = url;\n\tif (finalUrl.indexOf(\"/\") === 0) { // complete absolute paths without scheme only\n\t\tvar basePart = window.location.hostname + (window.location.port ? ':' + window.location.port : '');\n\t\tif (window.location.protocol === 'https:') {\n\t\t\tfinalUrl = \"wss://\" + basePart + finalUrl;\n\t\t} else if (window.location.protocol === 'http:') {\n\t\t\tfinalUrl = \"ws://\" + basePart + finalUrl;\n\t\t}\n\t}\n\treturn finalUrl;\n}\n\nfunction createSocket(url) {\n\tvar parsedUrl = parseUrl(url.evaluate());\n\treturn new WebSocket(parsedUrl);\n}\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\t/** @type {(string | symbol)[]} */\n\tvar PROXY_BLACKLIST = [\"then\", \"catch\", \"length\", \"asyncWrapper\", \"toJSON\"];\n\n\t_hyperscript.addFeature(\"socket\", function (parser, runtime, tokens) {\n\t\tfunction getProxy(timeout) {\n\t\t\treturn new Proxy(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tget: function (obj, property) {\n\t\t\t\t\t\tif (PROXY_BLACKLIST.indexOf(property) >= 0) {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t} else if (property === \"noTimeout\") {\n\t\t\t\t\t\t\treturn getProxy(-1);\n\t\t\t\t\t\t} else if (property === \"timeout\") {\n\t\t\t\t\t\t\treturn function (i) {\n\t\t\t\t\t\t\t\treturn getProxy(parseInt(i));\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn function () {\n\t\t\t\t\t\t\t\tvar uuid = genUUID();\n\t\t\t\t\t\t\t\tvar args = [];\n\t\t\t\t\t\t\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\t\t\t\t\t\t\targs.push(arguments[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tvar rpcInfo = {\n\t\t\t\t\t\t\t\t\tiid: uuid,\n\t\t\t\t\t\t\t\t\tfunction: property,\n\t\t\t\t\t\t\t\t\targs: args,\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tsocket = socket ? socket : createSocket(url); //recreate socket if needed\n\t\t\t\t\t\t\t\tsocket.send(JSON.stringify(rpcInfo));\n\n\t\t\t\t\t\t\t\tvar promise = new Promise(function (resolve, reject) {\n\t\t\t\t\t\t\t\t\tpromises[uuid] = {\n\t\t\t\t\t\t\t\t\t\tresolve: resolve,\n\t\t\t\t\t\t\t\t\t\treject: reject,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\tif (timeout >= 0) {\n\t\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\t\tif (promises[uuid]) {\n\t\t\t\t\t\t\t\t\t\t\tpromises[uuid].reject(\"Timed out\");\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tdelete promises[uuid];\n\t\t\t\t\t\t\t\t\t}, timeout); // TODO configurable?\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn promise;\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t);\n\t\t}\n\n\t\tif (tokens.matchToken(\"socket\")) {\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\t\tvar qualifiedName = name.evaluate();\n\t\t\tvar nameSpace = qualifiedName.split(\".\");\n\t\t\tvar socketName = nameSpace.pop();\n\n\t\t\tvar promises = {};\n\t\t\tvar url = parser.requireElement(\"stringLike\", tokens);\n\n\t\t\tvar defaultTimeout = 10000;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\ttokens.requireToken(\"timeout\");\n\t\t\t\tdefaultTimeout = parser.requireElement(\"expression\", tokens).evaluate();\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"on\")) {\n\t\t\t\ttokens.requireToken(\"message\");\n\t\t\t\tif (tokens.matchToken(\"as\")) {\n\t\t\t\t\ttokens.requireToken(\"json\");\n\t\t\t\t\tvar jsonMessages = true;\n\t\t\t\t}\n\t\t\t\tvar messageHandler = parser.requireElement(\"commandList\", tokens);\n\t\t\t\tvar implicitReturn = {\n\t\t\t\t\ttype: \"implicitReturn\",\n\t\t\t\t\top: function (context) {\n\t\t\t\t\t\treturn runtime.HALT;\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (context) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t\tvar end = messageHandler;\n\t\t\t\twhile (end.next) {\n\t\t\t\t\tend = end.next;\n\t\t\t\t}\n\t\t\t\tend.next = implicitReturn;\n\t\t\t\t// TODO set parent?\n\t\t\t\t// parser.setParent(implicitReturn, initFeature);\n\t\t\t}\n\n\t\t\tvar socket = createSocket(url);\n\t\t\tvar rpcProxy = getProxy(defaultTimeout);\n\n\t\t\tvar socketObject = {\n\t\t\t\traw: socket,\n\t\t\t\tdispatchEvent: function (evt) {\n\t\t\t\t\tvar details = evt.detail;\n\t\t\t\t\t// remove hyperscript internals\n\t\t\t\t\tdelete details.sender;\n\t\t\t\t\tdelete details._namedArgList_;\n\t\t\t\t\tsocket.send(JSON.stringify(mergeObjects({ type: evt.type }, details)));\n\t\t\t\t},\n\t\t\t\trpc: rpcProxy,\n\t\t\t};\n\n\t\t\tvar socketFeature = {\n\t\t\t\tname: socketName,\n\t\t\t\tsocket: socketObject,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, socketName, socketObject);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tsocket.onmessage = function (evt) {\n\t\t\t\tvar data = evt.data;\n\t\t\t\ttry {\n\t\t\t\t\tvar dataAsJson = JSON.parse(data);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// not JSON\n\t\t\t\t}\n\n\t\t\t\t// RPC reply\n\t\t\t\tif (dataAsJson && dataAsJson.iid) {\n\t\t\t\t\tif (dataAsJson.throw) {\n\t\t\t\t\t\tpromises[dataAsJson.iid].reject(dataAsJson.throw);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpromises[dataAsJson.iid].resolve(dataAsJson.return);\n\t\t\t\t\t}\n\t\t\t\t\tdelete promises[dataAsJson.iid];\n\t\t\t\t}\n\n\t\t\t\tif (messageHandler) {\n\t\t\t\t\tvar context = runtime.makeContext(socketObject, socketFeature, socketObject);\n\t\t\t\t\tif (jsonMessages) {\n\t\t\t\t\t\tif (dataAsJson) {\n\t\t\t\t\t\t\tcontext.message = dataAsJson;\n\t\t\t\t\t\t\tcontext.result = dataAsJson;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow \"Received non-JSON message from socket: \" + data;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.message = data;\n\t\t\t\t\t\tcontext.result = data;\n\t\t\t\t\t}\n\t\t\t\t\tmessageHandler.execute(context);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// clear socket on close to be recreated\n\t\t\tsocket.addEventListener(\"close\", function (e) {\n\t\t\t\tsocket = null;\n\t\t\t});\n\n\t\t\treturn socketFeature;\n\t\t}\n\t});\n}\n","///=========================================================================\n/// This module provides the core web functionality for hyperscript\n///=========================================================================\n\nimport { mergeObjects } from \"./utils.js\"\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\t_hyperscript.addCommand(\"settle\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"settle\")) {\n\t\t\tif (!parser.commandBoundary(tokens.currentToken())) {\n\t\t\t\tvar onExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar onExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar settleCommand = {\n\t\t\t\ttype: \"settleCmd\",\n\t\t\t\targs: [onExpr],\n\t\t\t\top: function (context, on) {\n\t\t\t\t\truntime.nullCheck(on, onExpr);\n\t\t\t\t\tvar resolve = null;\n\t\t\t\t\tvar resolved = false;\n\t\t\t\t\tvar transitionStarted = false;\n\n\t\t\t\t\tvar promise = new Promise(function (r) {\n\t\t\t\t\t\tresolve = r;\n\t\t\t\t\t});\n\n\t\t\t\t\t// listen for a transition begin\n\t\t\t\t\ton.addEventListener(\n\t\t\t\t\t\t\"transitionstart\",\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\ttransitionStarted = true;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\n\t\t\t\t\t// if no transition begins in 500ms, cancel\n\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\tif (!transitionStarted && !resolved) {\n\t\t\t\t\t\t\tresolve(runtime.findNext(settleCommand, context));\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 500);\n\n\t\t\t\t\t// continue on a transition emd\n\t\t\t\t\ton.addEventListener(\n\t\t\t\t\t\t\"transitionend\",\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\tresolve(runtime.findNext(settleCommand, context));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t);\n\t\t\t\t\treturn promise;\n\t\t\t\t},\n\t\t\t\texecute: function (context) {\n\t\t\t\t\treturn runtime.unifiedExec(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn settleCommand;\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"add\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"add\")) {\n\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\tvar attributeRef = null;\n\t\t\tvar cssDeclaration = null;\n\t\t\tif (classRef == null) {\n\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\tcssDeclaration = parser.parseElement(\"styleLiteral\", tokens);\n\t\t\t\t\tif (cssDeclaration == null) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, \"Expected either a class reference or attribute expression\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar classRefs = [classRef];\n\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\tvar toExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar toExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"when\")) {\n\t\t\t\tif (cssDeclaration) {\n\t\t\t\t\tparser.raiseParseError(tokens, \"Only class and properties are supported with a when clause\")\n\t\t\t\t}\n\t\t\t\tvar when = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tif (classRefs) {\n\t\t\t\treturn {\n\t\t\t\t\tclassRefs: classRefs,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr, classRefs],\n\t\t\t\t\top: function (context, to, classRefs) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\t\tif (when) {\n\t\t\t\t\t\t\t\t\tcontext['result'] = target;\n\t\t\t\t\t\t\t\t\tlet whenResult = runtime.evaluateNoPromise(when, context);\n\t\t\t\t\t\t\t\t\tif (whenResult) {\n\t\t\t\t\t\t\t\t\t\tif (target instanceof Element) target.classList.add(classRef.className);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (target instanceof Element) target.classList.remove(classRef.className);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tcontext['result'] = null;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tif (target instanceof Element) target.classList.add(classRef.className);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else if (attributeRef) {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"addCmd\",\n\t\t\t\t\tattributeRef: attributeRef,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr],\n\t\t\t\t\top: function (context, to, attrRef) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\tif (when) {\n\t\t\t\t\t\t\t\tcontext['result'] = target;\n\t\t\t\t\t\t\t\tlet whenResult = runtime.evaluateNoPromise(when, context);\n\t\t\t\t\t\t\t\tif (whenResult) {\n\t\t\t\t\t\t\t\t\ttarget.setAttribute(attributeRef.name, attributeRef.value);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttarget.removeAttribute(attributeRef.name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcontext['result'] = null;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.setAttribute(attributeRef.name, attributeRef.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (ctx) {\n\t\t\t\t\t\treturn runtime.unifiedExec(this, ctx);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\ttype: \"addCmd\",\n\t\t\t\t\tcssDeclaration: cssDeclaration,\n\t\t\t\t\tto: toExpr,\n\t\t\t\t\targs: [toExpr, cssDeclaration],\n\t\t\t\t\top: function (context, to, css) {\n\t\t\t\t\t\truntime.nullCheck(to, toExpr);\n\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\t\t\t\t\t\t\ttarget.style.cssText += css;\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (ctx) {\n\t\t\t\t\t\treturn runtime.unifiedExec(this, ctx);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.internals.parser.addGrammarElement(\"styleLiteral\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchOpToken(\"{\")) return;\n\n\t\tvar stringParts = [\"\"]\n\t\tvar exprs = []\n\n\t\twhile (tokens.hasMore()) {\n\t\t\tif (tokens.matchOpToken(\"\\\\\")) {\n\t\t\t\ttokens.consumeToken();\n\t\t\t} else if (tokens.matchOpToken(\"}\")) {\n\t\t\t\tbreak;\n\t\t\t} else if (tokens.matchToken(\"$\")) {\n\t\t\t\tvar opencurly = tokens.matchOpToken(\"{\");\n\t\t\t\tvar expr = parser.parseElement(\"expression\", tokens);\n\t\t\t\tif (opencurly) tokens.requireOpToken(\"}\");\n\n\t\t\t\texprs.push(expr)\n\t\t\t\tstringParts.push(\"\")\n\t\t\t} else {\n\t\t\t\tvar tok = tokens.consumeToken();\n\t\t\t\tstringParts[stringParts.length-1] += tokens.source.substring(tok.start, tok.end);\n\t\t\t}\n\n\t\t\tstringParts[stringParts.length-1] += tokens.lastWhitespace();\n\t\t}\n\n\t\treturn {\n\t\t\ttype: \"styleLiteral\",\n\t\t\targs: [exprs],\n\t\t\top: function (ctx, exprs) {\n\t\t\t\tvar rv = \"\";\n\n\t\t\t\tstringParts.forEach(function (part, idx) {\n\t\t\t\t\trv += part;\n\t\t\t\t\tif (idx in exprs) rv += exprs[idx];\n\t\t\t\t});\n\n\t\t\t\treturn rv;\n\t\t\t},\n\t\t\tevaluate: function(ctx) {\n\t\t\t\treturn runtime.unifiedEval(this, ctx);\n\t\t\t}\n\t\t}\n\t})\n\n\t_hyperscript.addCommand(\"remove\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"remove\")) {\n\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\tvar attributeRef = null;\n\t\t\tvar elementExpr = null;\n\t\t\tif (classRef == null) {\n\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\telementExpr = parser.parseElement(\"expression\", tokens);\n\t\t\t\t\tif (elementExpr == null) {\n\t\t\t\t\t\tparser.raiseParseError(\n\t\t\t\t\t\t\ttokens,\n\t\t\t\t\t\t\t\"Expected either a class reference, attribute expression or value expression\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar classRefs = [classRef];\n\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar fromExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar fromExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tif (elementExpr) {\n\t\t\t\treturn {\n\t\t\t\t\telementExpr: elementExpr,\n\t\t\t\t\tfrom: fromExpr,\n\t\t\t\t\targs: [elementExpr],\n\t\t\t\t\top: function (context, element) {\n\t\t\t\t\t\truntime.nullCheck(element, elementExpr);\n\t\t\t\t\t\truntime.implicitLoop(element, function (target) {\n\t\t\t\t\t\t\tif (target.parentElement) {\n\t\t\t\t\t\t\t\ttarget.parentElement.removeChild(target);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\tclassRefs: classRefs,\n\t\t\t\t\tattributeRef: attributeRef,\n\t\t\t\t\telementExpr: elementExpr,\n\t\t\t\t\tfrom: fromExpr,\n\t\t\t\t\targs: [classRefs, fromExpr],\n\t\t\t\t\top: function (context, classRefs, from) {\n\t\t\t\t\t\truntime.nullCheck(from, fromExpr);\n\t\t\t\t\t\tif (classRefs) {\n\t\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\t\t\t\ttarget.classList.remove(classRef.className);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\t\t\ttarget.removeAttribute(attributeRef.name);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"toggle\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"toggle\")) {\n\t\t\ttokens.matchAnyToken(\"the\", \"my\");\n\t\t\tif (tokens.currentToken().type === \"STYLE_REF\") {\n\t\t\t\tlet styleRef = tokens.consumeToken();\n\t\t\t\tvar name = styleRef.value.substr(1);\n\t\t\t\tvar visibility = true;\n\t\t\t\tvar hideShowStrategy = resolveStrategy(parser, tokens, name);\n\t\t\t\tif (tokens.matchToken(\"of\")) {\n\t\t\t\t\ttokens.pushFollow(\"with\");\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar onExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\ttokens.popFollow();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar onExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t\t}\n\t\t\t} else if (tokens.matchToken(\"between\")) {\n\t\t\t\tvar between = true;\n\t\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\t\ttokens.requireToken(\"and\");\n\t\t\t\tvar classRef2 = parser.requireElement(\"classRef\", tokens);\n\t\t\t} else {\n\t\t\t\tvar classRef = parser.parseElement(\"classRef\", tokens);\n\t\t\t\tvar attributeRef = null;\n\t\t\t\tif (classRef == null) {\n\t\t\t\t\tattributeRef = parser.parseElement(\"attributeRef\", tokens);\n\t\t\t\t\tif (attributeRef == null) {\n\t\t\t\t\t\tparser.raiseParseError(tokens, \"Expected either a class reference or attribute expression\");\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar classRefs = [classRef];\n\t\t\t\t\twhile ((classRef = parser.parseElement(\"classRef\", tokens))) {\n\t\t\t\t\t\tclassRefs.push(classRef);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (visibility !== true) {\n\t\t\t\tif (tokens.matchToken(\"on\")) {\n\t\t\t\t\tvar onExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t\t} else {\n\t\t\t\t\tvar onExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"for\")) {\n\t\t\t\tvar time = parser.requireElement(\"expression\", tokens);\n\t\t\t} else if (tokens.matchToken(\"until\")) {\n\t\t\t\tvar evt = parser.requireElement(\"dotOrColonPath\", tokens, \"Expected event name\");\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tvar from = parser.requireElement(\"expression\", tokens);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar toggleCmd = {\n\t\t\t\tclassRef: classRef,\n\t\t\t\tclassRef2: classRef2,\n\t\t\t\tclassRefs: classRefs,\n\t\t\t\tattributeRef: attributeRef,\n\t\t\t\ton: onExpr,\n\t\t\t\ttime: time,\n\t\t\t\tevt: evt,\n\t\t\t\tfrom: from,\n\t\t\t\ttoggle: function (on, classRef, classRef2, classRefs) {\n\t\t\t\t\truntime.nullCheck(on, onExpr);\n\t\t\t\t\tif (visibility) {\n\t\t\t\t\t\truntime.implicitLoop(on, function (target) {\n\t\t\t\t\t\t\thideShowStrategy(\"toggle\", target);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (between) {\n\t\t\t\t\t\truntime.implicitLoop(on, function (target) {\n\t\t\t\t\t\t\tif (target.classList.contains(classRef.className)) {\n\t\t\t\t\t\t\t\ttarget.classList.remove(classRef.className);\n\t\t\t\t\t\t\t\ttarget.classList.add(classRef2.className);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.classList.add(classRef.className);\n\t\t\t\t\t\t\t\ttarget.classList.remove(classRef2.className);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (classRefs) {\n\t\t\t\t\t\truntime.forEach(classRefs, function (classRef) {\n\t\t\t\t\t\t\truntime.implicitLoop(on, function (target) {\n\t\t\t\t\t\t\t\ttarget.classList.toggle(classRef.className);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.forEach(on, function (target) {\n\t\t\t\t\t\t\tif (target.hasAttribute(attributeRef.name)) {\n\t\t\t\t\t\t\t\ttarget.removeAttribute(attributeRef.name);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.setAttribute(attributeRef.name, attributeRef.value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\targs: [onExpr, time, evt, from, classRef, classRef2, classRefs],\n\t\t\t\top: function (context, on, time, evt, from, classRef, classRef2, classRefs) {\n\t\t\t\t\tif (time) {\n\t\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\t\tresolve(runtime.findNext(toggleCmd, context));\n\t\t\t\t\t\t\t}, time);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else if (evt) {\n\t\t\t\t\t\treturn new Promise(function (resolve) {\n\t\t\t\t\t\t\tvar target = from || context.me;\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\tevt,\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t\t\t\tresolve(runtime.findNext(toggleCmd, context));\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\ttoggleCmd.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.toggle(on, classRef, classRef2, classRefs);\n\t\t\t\t\t\treturn runtime.findNext(toggleCmd, context);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn toggleCmd;\n\t\t}\n\t});\n\n\tvar HIDE_SHOW_STRATEGIES = {\n\t\tdisplay: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.display = arg;\n\t\t\t} else if (op === \"toggle\") {\n\t\t\t\tif (getComputedStyle(element).display === \"none\") {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.display(\"show\", element, arg);\n\t\t\t\t} else {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.display(\"hide\", element, arg);\n\t\t\t\t}\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\tconst internalData = _hyperscript.internals.runtime.getInternalData(element);\n\t\t\t\tif (internalData.originalDisplay == null) {\n\t\t\t\t\tinternalData.originalDisplay = element.style.display;\n\t\t\t\t}\n\t\t\t\telement.style.display = \"none\";\n\t\t\t} else {\n\t\t\t\tconst internalData = _hyperscript.internals.runtime.getInternalData(element);\n\t\t\t\tif (internalData.originalDisplay && internalData.originalDisplay !== 'none') {\n\t\t\t\t\telement.style.display = internalData.originalDisplay;\n\t\t\t\t} else {\n\t\t\t\t\telement.style.removeProperty('display');\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tvisibility: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.visibility = arg;\n\t\t\t} else if (op === \"toggle\") {\n\t\t\t\tif (getComputedStyle(element).visibility === \"hidden\") {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.visibility(\"show\", element, arg);\n\t\t\t\t} else {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.visibility(\"hide\", element, arg);\n\t\t\t\t}\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\telement.style.visibility = \"hidden\";\n\t\t\t} else {\n\t\t\t\telement.style.visibility = \"visible\";\n\t\t\t}\n\t\t},\n\t\topacity: function (op, element, arg) {\n\t\t\tif (arg) {\n\t\t\t\telement.style.opacity = arg;\n\t\t\t} else if (op === \"toggle\") {\n\t\t\t\tif (getComputedStyle(element).opacity === \"0\") {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.opacity(\"show\", element, arg);\n\t\t\t\t} else {\n\t\t\t\t\tHIDE_SHOW_STRATEGIES.opacity(\"hide\", element, arg);\n\t\t\t\t}\n\t\t\t} else if (op === \"hide\") {\n\t\t\t\telement.style.opacity = \"0\";\n\t\t\t} else {\n\t\t\t\telement.style.opacity = \"1\";\n\t\t\t}\n\t\t},\n\t};\n\n\tvar parseShowHideTarget = function (parser, runtime, tokens) {\n\t\tvar target;\n\t\tvar currentTokenValue = tokens.currentToken();\n\t\tif (currentTokenValue.value === \"when\" || currentTokenValue.value === \"with\" || parser.commandBoundary(currentTokenValue)) {\n\t\t\ttarget = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t} else {\n\t\t\ttarget = parser.parseElement(\"expression\", tokens);\n\t\t}\n\t\treturn target;\n\t};\n\n\tvar resolveStrategy = function (parser, tokens, name) {\n\t\tvar configDefault = _hyperscript.config.defaultHideShowStrategy;\n\t\tvar strategies = HIDE_SHOW_STRATEGIES;\n\t\tif (_hyperscript.config.hideShowStrategies) {\n\t\t\tstrategies = mergeObjects(strategies, _hyperscript.config.hideShowStrategies); // merge in user provided strategies\n\t\t}\n\t\tname = name || configDefault || \"display\";\n\t\tvar value = strategies[name];\n\t\tif (value == null) {\n\t\t\tparser.raiseParseError(tokens, \"Unknown show/hide strategy : \" + name);\n\t\t}\n\t\treturn value;\n\t};\n\n\t_hyperscript.addCommand(\"hide\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"hide\")) {\n\t\t\tvar targetExpr = parseShowHideTarget(parser, runtime, tokens);\n\n\t\t\tvar name = null;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tname = tokens.requireTokenType(\"IDENTIFIER\", \"STYLE_REF\").value;\n\t\t\t\tif (name.indexOf(\"*\") === 0) {\n\t\t\t\t\tname = name.substr(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar hideShowStrategy = resolveStrategy(parser, tokens, name);\n\n\t\t\treturn {\n\t\t\t\ttarget: targetExpr,\n\t\t\t\targs: [targetExpr],\n\t\t\t\top: function (ctx, target) {\n\t\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\t\truntime.implicitLoop(target, function (elt) {\n\t\t\t\t\t\thideShowStrategy(\"hide\", elt);\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"show\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"show\")) {\n\t\t\tvar targetExpr = parseShowHideTarget(parser, runtime, tokens);\n\n\t\t\tvar name = null;\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tname = tokens.requireTokenType(\"IDENTIFIER\", \"STYLE_REF\").value;\n\t\t\t\tif (name.indexOf(\"*\") === 0) {\n\t\t\t\t\tname = name.substr(1);\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar arg = null;\n\t\t\tif (tokens.matchOpToken(\":\")) {\n\t\t\t\tvar tokenArr = tokens.consumeUntilWhitespace();\n\t\t\t\ttokens.matchTokenType(\"WHITESPACE\");\n\t\t\t\targ = tokenArr\n\t\t\t\t\t.map(function (t) {\n\t\t\t\t\t\treturn t.value;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\");\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"when\")) {\n\t\t\t\tvar when = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tvar hideShowStrategy = resolveStrategy(parser, tokens, name);\n\n\t\t\treturn {\n\t\t\t\ttarget: targetExpr,\n\t\t\t\twhen: when,\n\t\t\t\targs: [targetExpr],\n\t\t\t\top: function (ctx, target) {\n\t\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\t\truntime.implicitLoop(target, function (elt) {\n\t\t\t\t\t\tif (when) {\n\t\t\t\t\t\t\tctx['result'] = elt;\n\t\t\t\t\t\t\tlet whenResult = runtime.evaluateNoPromise(when, ctx);\n\t\t\t\t\t\t\tif (whenResult) {\n\t\t\t\t\t\t\t\thideShowStrategy(\"show\", elt, arg);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\thideShowStrategy(\"hide\", elt);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tctx['result'] = null;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thideShowStrategy(\"show\", elt, arg);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"take\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"take\")) {\n\t\t\tvar classRef = parser.requireElement(\"classRef\", tokens);\n\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\tvar fromExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar fromExpr = classRef;\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"for\")) {\n\t\t\t\tvar forExpr = parser.requireElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar forExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar takeCmd = {\n\t\t\t\tclassRef: classRef,\n\t\t\t\tfrom: fromExpr,\n\t\t\t\tforElt: forExpr,\n\t\t\t\targs: [classRef, fromExpr, forExpr],\n\t\t\t\top: function (context, eltColl, from, forElt) {\n\t\t\t\t\truntime.nullCheck(from, fromExpr);\n\t\t\t\t\truntime.nullCheck(forElt, forExpr);\n\t\t\t\t\tvar clazz = eltColl.className;\n\t\t\t\t\truntime.implicitLoop(from, function (target) {\n\t\t\t\t\t\ttarget.classList.remove(clazz);\n\t\t\t\t\t});\n\t\t\t\t\truntime.implicitLoop(forElt, function (target) {\n\t\t\t\t\t\ttarget.classList.add(clazz);\n\t\t\t\t\t});\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn takeCmd;\n\t\t}\n\t});\n\n\tfunction putInto(runtime, context, prop, valueToPut) {\n\t\tif (prop != null) {\n\t\t\tvar value = runtime.resolveSymbol(prop, context);\n\t\t} else {\n\t\t\tvar value = context;\n\t\t}\n\t\tif (value instanceof Element || value instanceof HTMLDocument) {\n\t\t\twhile (value.firstChild) value.removeChild(value.firstChild);\n\t\t\tvalue.append(_hyperscript.internals.runtime.convertValue(valueToPut, \"Fragment\"));\n\t\t} else {\n\t\t\tif (prop != null) {\n\t\t\t\truntime.setSymbol(prop, context, null, valueToPut);\n\t\t\t} else {\n\t\t\t\tthrow \"Don't know how to put a value into \" + typeof context;\n\t\t\t}\n\t\t}\n\t}\n\n\t_hyperscript.addCommand(\"put\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"put\")) {\n\t\t\tvar value = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar operationToken = tokens.matchAnyToken(\"into\", \"before\", \"after\");\n\n\t\t\tif (operationToken == null && tokens.matchToken(\"at\")) {\n\t\t\t\ttokens.matchToken(\"the\"); // optional \"the\"\n\t\t\t\toperationToken = tokens.matchAnyToken(\"start\", \"end\");\n\t\t\t\ttokens.requireToken(\"of\");\n\t\t\t}\n\n\t\t\tif (operationToken == null) {\n\t\t\t\tparser.raiseParseError(tokens, \"Expected one of 'into', 'before', 'at start of', 'at end of', 'after'\");\n\t\t\t}\n\t\t\tvar target = parser.requireElement(\"expression\", tokens);\n\n\t\t\tvar operation = operationToken.value;\n\n\t\t\tvar arrayIndex = false;\n\t\t\tvar symbolWrite = false;\n\t\t\tvar rootExpr = null;\n\t\t\tvar prop = null;\n\n\t\t\tif (target.type === \"arrayIndex\" && operation === \"into\") {\n\t\t\t\tarrayIndex = true;\n\t\t\t\tprop = target.prop;\n\t\t\t\trootExpr = target.root;\n\t\t\t} else if (target.prop && target.root && operation === \"into\") {\n\t\t\t\tprop = target.prop.value;\n\t\t\t\trootExpr = target.root;\n\t\t\t} else if (target.type === \"symbol\" && operation === \"into\") {\n\t\t\t\tsymbolWrite = true;\n\t\t\t\tprop = target.name;\n\t\t\t} else if (target.type === \"attributeRef\" && operation === \"into\") {\n\t\t\t\tvar attributeWrite = true;\n\t\t\t\tprop = target.name;\n\t\t\t\trootExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t} else if (target.type === \"styleRef\" && operation === \"into\") {\n\t\t\t\tvar styleWrite = true;\n\t\t\t\tprop = target.name;\n\t\t\t\trootExpr = parser.requireElement(\"implicitMeTarget\", tokens);\n\t\t\t} else if (target.attribute && operation === \"into\") {\n\t\t\t\tvar attributeWrite = target.attribute.type === \"attributeRef\";\n\t\t\t\tvar styleWrite = target.attribute.type === \"styleRef\";\n\t\t\t\tprop = target.attribute.name;\n\t\t\t\trootExpr = target.root;\n\t\t\t} else {\n\t\t\t\trootExpr = target;\n\t\t\t}\n\n\t\t\tvar putCmd = {\n\t\t\t\ttarget: target,\n\t\t\t\toperation: operation,\n\t\t\t\tsymbolWrite: symbolWrite,\n\t\t\t\tvalue: value,\n\t\t\t\targs: [rootExpr, prop, value],\n\t\t\t\top: function (context, root, prop, valueToPut) {\n\t\t\t\t\tif (symbolWrite) {\n\t\t\t\t\t\tputInto(runtime, context, prop, valueToPut);\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.nullCheck(root, rootExpr);\n\t\t\t\t\t\tif (operation === \"into\") {\n\t\t\t\t\t\t\tif (attributeWrite) {\n\t\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\t\telt.setAttribute(prop, valueToPut);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (styleWrite) {\n\t\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\t\telt.style[prop] = valueToPut;\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t} else if (arrayIndex) {\n\t\t\t\t\t\t\t\troot[prop] = valueToPut;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\t\tputInto(runtime, elt, prop, valueToPut);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar op =\n\t\t\t\t\t\t\t\toperation === \"before\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.before\n\t\t\t\t\t\t\t\t\t: operation === \"after\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.after\n\t\t\t\t\t\t\t\t\t: operation === \"start\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.prepend\n\t\t\t\t\t\t\t\t\t: operation === \"end\"\n\t\t\t\t\t\t\t\t\t? Element.prototype.append\n\t\t\t\t\t\t\t\t\t: Element.prototype.append; // unreachable\n\n\t\t\t\t\t\t\truntime.implicitLoop(root, function (elt) {\n\t\t\t\t\t\t\t\top.call(\n\t\t\t\t\t\t\t\t\telt,\n\t\t\t\t\t\t\t\t\tvalueToPut instanceof Node\n\t\t\t\t\t\t\t\t\t\t? valueToPut\n\t\t\t\t\t\t\t\t\t\t: runtime.convertValue(valueToPut, \"Fragment\")\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn runtime.findNext(this, context);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn putCmd;\n\t\t}\n\t});\n\n\tfunction parsePseudopossessiveTarget(parser, runtime, tokens) {\n\t\tvar targets;\n\t\tif (\n\t\t\ttokens.matchToken(\"the\") ||\n\t\t\ttokens.matchToken(\"element\") ||\n\t\t\ttokens.matchToken(\"elements\") ||\n\t\t\ttokens.currentToken().type === \"CLASS_REF\" ||\n\t\t\ttokens.currentToken().type === \"ID_REF\" ||\n\t\t\t(tokens.currentToken().op && tokens.currentToken().value === \"<\")\n\t\t) {\n\t\t\tparser.possessivesDisabled = true;\n\t\t\ttry {\n\t\t\t\ttargets = parser.parseElement(\"expression\", tokens);\n\t\t\t} finally {\n\t\t\t\tdelete parser.possessivesDisabled;\n\t\t\t}\n\t\t\t// optional possessive\n\t\t\tif (tokens.matchOpToken(\"'\")) {\n\t\t\t\ttokens.requireToken(\"s\");\n\t\t\t}\n\t\t} else if (tokens.currentToken().type === \"IDENTIFIER\" && tokens.currentToken().value === \"its\") {\n\t\t\tvar identifier = tokens.matchToken(\"its\");\n\t\t\ttargets = {\n\t\t\t\ttype: \"pseudopossessiveIts\",\n\t\t\t\ttoken: identifier,\n\t\t\t\tname: identifier.value,\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.resolveSymbol(\"it\", context);\n\t\t\t\t},\n\t\t\t};\n\t\t} else {\n\t\t\ttokens.matchToken(\"my\") || tokens.matchToken(\"me\"); // consume optional 'my'\n\t\t\ttargets = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t}\n\t\treturn targets;\n\t}\n\n\t_hyperscript.addCommand(\"transition\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"transition\")) {\n\t\t\tvar targetsExpr = parsePseudopossessiveTarget(parser, runtime, tokens);\n\n\t\t\tvar properties = [];\n\t\t\tvar from = [];\n\t\t\tvar to = [];\n\t\t\tvar currentToken = tokens.currentToken();\n\t\t\twhile (\n\t\t\t\t!parser.commandBoundary(currentToken) &&\n\t\t\t\tcurrentToken.value !== \"over\" &&\n\t\t\t\tcurrentToken.value !== \"using\"\n\t\t\t) {\n\t\t\t\tif (tokens.currentToken().type === \"STYLE_REF\") {\n\t\t\t\t\tlet styleRef = tokens.consumeToken();\n\t\t\t\t\tlet styleProp = styleRef.value.substr(1);\n\t\t\t\t\tproperties.push({\n\t\t\t\t\t\ttype: \"styleRefValue\",\n\t\t\t\t\t\tevaluate: function () {\n\t\t\t\t\t\t\treturn styleProp;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tproperties.push(parser.requireElement(\"stringLike\", tokens));\n\t\t\t\t}\n\n\t\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\t\tfrom.push(parser.requireElement(\"expression\", tokens));\n\t\t\t\t} else {\n\t\t\t\t\tfrom.push(null);\n\t\t\t\t}\n\t\t\t\ttokens.requireToken(\"to\");\n\t\t\t\tif (tokens.matchToken(\"initial\")) {\n\t\t\t\t\tto.push({\n\t\t\t\t\t\ttype: \"initial_literal\",\n\t\t\t\t\t\tevaluate : function(){\n\t\t\t\t\t\t\treturn \"initial\";\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tto.push(parser.requireElement(\"expression\", tokens));\n\t\t\t\t}\n\t\t\t\tcurrentToken = tokens.currentToken();\n\t\t\t}\n\t\t\tif (tokens.matchToken(\"over\")) {\n\t\t\t\tvar over = parser.requireElement(\"expression\", tokens);\n\t\t\t} else if (tokens.matchToken(\"using\")) {\n\t\t\t\tvar using = parser.requireElement(\"expression\", tokens);\n\t\t\t}\n\n\t\t\tvar transition = {\n\t\t\t\tto: to,\n\t\t\t\targs: [targetsExpr, properties, from, to, using, over],\n\t\t\t\top: function (context, targets, properties, from, to, using, over) {\n\t\t\t\t\truntime.nullCheck(targets, targetsExpr);\n\t\t\t\t\tvar promises = [];\n\t\t\t\t\truntime.implicitLoop(targets, function (target) {\n\t\t\t\t\t\tvar promise = new Promise(function (resolve, reject) {\n\t\t\t\t\t\t\tvar initialTransition = target.style.transition;\n\t\t\t\t\t\t\tif (over) {\n\t\t\t\t\t\t\t\ttarget.style.transition = \"all \" + over + \"ms ease-in\";\n\t\t\t\t\t\t\t} else if (using) {\n\t\t\t\t\t\t\t\ttarget.style.transition = using;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttarget.style.transition = _hyperscript.config.defaultTransition;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar internalData = runtime.getInternalData(target);\n\t\t\t\t\t\t\tvar computedStyles = getComputedStyle(target);\n\n\t\t\t\t\t\t\tvar initialStyles = {};\n\t\t\t\t\t\t\tfor (var i = 0; i < computedStyles.length; i++) {\n\t\t\t\t\t\t\t\tvar name = computedStyles[i];\n\t\t\t\t\t\t\t\tvar initialValue = computedStyles[name];\n\t\t\t\t\t\t\t\tinitialStyles[name] = initialValue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// store intitial values\n\t\t\t\t\t\t\tif (!internalData.initalStyles) {\n\t\t\t\t\t\t\t\tinternalData.initalStyles = initialStyles;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfor (var i = 0; i < properties.length; i++) {\n\t\t\t\t\t\t\t\tvar property = properties[i];\n\t\t\t\t\t\t\t\tvar fromVal = from[i];\n\t\t\t\t\t\t\t\tif (fromVal === \"computed\" || fromVal == null) {\n\t\t\t\t\t\t\t\t\ttarget.style[property] = initialStyles[property];\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttarget.style[property] = fromVal;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t//console.log(\"transition started\", transition);\n\n\t\t\t\t\t\t\tvar transitionStarted = false;\n\t\t\t\t\t\t\tvar resolved = false;\n\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\t\"transitionend\",\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\tif (!resolved) {\n\t\t\t\t\t\t\t\t\t\t//console.log(\"transition ended\", transition);\n\t\t\t\t\t\t\t\t\t\ttarget.style.transition = initialTransition;\n\t\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\ttarget.addEventListener(\n\t\t\t\t\t\t\t\t\"transitionstart\",\n\t\t\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\t\t\ttransitionStarted = true;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{ once: true }\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t// it no transition has started in 100ms, continue\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tif (!resolved && !transitionStarted) {\n\t\t\t\t\t\t\t\t\t//console.log(\"transition ended\", transition);\n\t\t\t\t\t\t\t\t\ttarget.style.transition = initialTransition;\n\t\t\t\t\t\t\t\t\tresolved = true;\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 100);\n\n\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\tvar autoProps = [];\n\t\t\t\t\t\t\t\tfor (var i = 0; i < properties.length; i++) {\n\t\t\t\t\t\t\t\t\tvar property = properties[i];\n\t\t\t\t\t\t\t\t\tvar toVal = to[i];\n\t\t\t\t\t\t\t\t\tif (toVal === \"initial\") {\n\t\t\t\t\t\t\t\t\t\tvar propertyValue = internalData.initalStyles[property];\n\t\t\t\t\t\t\t\t\t\ttarget.style[property] = propertyValue;\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\ttarget.style[property] = toVal;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t//console.log(\"set\", property, \"to\", target.style[property], \"on\", target, \"value passed in : \", toVal);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, 0);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tpromises.push(promise);\n\t\t\t\t\t});\n\t\t\t\t\treturn Promise.all(promises).then(function () {\n\t\t\t\t\t\treturn runtime.findNext(transition, context);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn transition;\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"measure\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"measure\")) return;\n\n\t\tvar targetExpr = parsePseudopossessiveTarget(parser, runtime, tokens);\n\n\t\tvar propsToMeasure = [];\n\t\tif (!parser.commandBoundary(tokens.currentToken()))\n\t\t\tdo {\n\t\t\t\tpropsToMeasure.push(tokens.matchTokenType(\"IDENTIFIER\").value);\n\t\t\t} while (tokens.matchOpToken(\",\"));\n\n\t\treturn {\n\t\t\tproperties: propsToMeasure,\n\t\t\targs: [targetExpr],\n\t\t\top: function (ctx, target) {\n\t\t\t\truntime.nullCheck(target, targetExpr);\n\t\t\t\tif (0 in target) target = target[0]; // not measuring multiple elts\n\t\t\t\tvar rect = target.getBoundingClientRect();\n\t\t\t\tvar scroll = {\n\t\t\t\t\ttop: target.scrollTop,\n\t\t\t\t\tleft: target.scrollLeft,\n\t\t\t\t\ttopMax: target.scrollTopMax,\n\t\t\t\t\tleftMax: target.scrollLeftMax,\n\t\t\t\t\theight: target.scrollHeight,\n\t\t\t\t\twidth: target.scrollWidth,\n\t\t\t\t};\n\n\t\t\t\tctx.result = {\n\t\t\t\t\tx: rect.x,\n\t\t\t\t\ty: rect.y,\n\t\t\t\t\tleft: rect.left,\n\t\t\t\t\ttop: rect.top,\n\t\t\t\t\tright: rect.right,\n\t\t\t\t\tbottom: rect.bottom,\n\t\t\t\t\twidth: rect.width,\n\t\t\t\t\theight: rect.height,\n\t\t\t\t\tbounds: rect,\n\n\t\t\t\t\tscrollLeft: scroll.left,\n\t\t\t\t\tscrollTop: scroll.top,\n\t\t\t\t\tscrollLeftMax: scroll.leftMax,\n\t\t\t\t\tscrollTopMax: scroll.topMax,\n\t\t\t\t\tscrollWidth: scroll.width,\n\t\t\t\t\tscrollHeight: scroll.height,\n\t\t\t\t\tscroll: scroll,\n\t\t\t\t};\n\n\t\t\t\truntime.forEach(propsToMeasure, function (prop) {\n\t\t\t\t\tif (prop in ctx.result) ctx[prop] = ctx.result[prop];\n\t\t\t\t\telse throw \"No such measurement as \" + prop;\n\t\t\t\t});\n\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n\n\t_hyperscript.addLeafExpression(\"closestExpr\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"closest\")) {\n\t\t\tif (tokens.matchToken(\"parent\")) {\n\t\t\t\tvar parentSearch = true;\n\t\t\t}\n\n\t\t\tvar css = null;\n\t\t\tif (tokens.currentToken().type === \"ATTRIBUTE_REF\") {\n\t\t\t\tvar attributeRef = parser.requireElement(\"attributeRefAccess\", tokens, null);\n\t\t\t\tcss = \"[\" + attributeRef.attribute.name + \"]\";\n\t\t\t}\n\n\t\t\tif (css == null) {\n\t\t\t\tvar expr = parser.requireElement(\"expression\", tokens);\n\t\t\t\tif (expr.css == null) {\n\t\t\t\t\tparser.raiseParseError(tokens, \"Expected a CSS expression\");\n\t\t\t\t} else {\n\t\t\t\t\tcss = expr.css;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tokens.matchToken(\"to\")) {\n\t\t\t\tvar to = parser.parseElement(\"expression\", tokens);\n\t\t\t} else {\n\t\t\t\tvar to = parser.parseElement(\"implicitMeTarget\", tokens);\n\t\t\t}\n\n\t\t\tvar closestExpr = {\n\t\t\t\ttype: \"closestExpr\",\n\t\t\t\tparentSearch: parentSearch,\n\t\t\t\texpr: expr,\n\t\t\t\tcss: css,\n\t\t\t\tto: to,\n\t\t\t\targs: [to],\n\t\t\t\top: function (ctx, to) {\n\t\t\t\t\tif (to == null) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet result = [];\n\t\t\t\t\t\truntime.implicitLoop(to, function(to){\n\t\t\t\t\t\t\tif (parentSearch) {\n\t\t\t\t\t\t\t\tresult.push(to.parentElement ? to.parentElement.closest(css) : null);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresult.push(to.closest(css));\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif (runtime.shouldAutoIterate(to)) {\n\t\t\t\t\t\t\treturn result;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn result[0];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tevaluate: function (context) {\n\t\t\t\t\treturn runtime.unifiedEval(this, context);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\tif (attributeRef) {\n\t\t\t\tattributeRef.root = closestExpr;\n\t\t\t\tattributeRef.args = [closestExpr];\n\t\t\t\treturn attributeRef;\n\t\t\t} else {\n\t\t\t\treturn closestExpr;\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.addCommand(\"go\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"go\")) {\n\t\t\tif (tokens.matchToken(\"back\")) {\n\t\t\t\tvar back = true;\n\t\t\t} else {\n\t\t\t\ttokens.matchToken(\"to\");\n\t\t\t\tif (tokens.matchToken(\"url\")) {\n\t\t\t\t\tvar target = parser.requireElement(\"stringLike\", tokens);\n\t\t\t\t\tvar url = true;\n\t\t\t\t\tif (tokens.matchToken(\"in\")) {\n\t\t\t\t\t\ttokens.requireToken(\"new\");\n\t\t\t\t\t\ttokens.requireToken(\"window\");\n\t\t\t\t\t\tvar newWindow = true;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttokens.matchToken(\"the\"); // optional the\n\t\t\t\t\tvar verticalPosition = tokens.matchAnyToken(\"top\", \"middle\", \"bottom\");\n\t\t\t\t\tvar horizontalPosition = tokens.matchAnyToken(\"left\", \"center\", \"right\");\n\t\t\t\t\tif (verticalPosition || horizontalPosition) {\n\t\t\t\t\t\ttokens.requireToken(\"of\");\n\t\t\t\t\t}\n\t\t\t\t\tvar target = parser.requireElement(\"unaryExpression\", tokens);\n\n\t\t\t\t\tvar plusOrMinus = tokens.matchAnyOpToken(\"+\", \"-\");\n\t\t\t\t\tif (plusOrMinus) {\n\t\t\t\t\t\ttokens.pushFollow(\"px\");\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tvar offset = parser.requireElement(\"expression\", tokens);\n\t\t\t\t\t\t} finally {\n\t\t\t\t\t\t\ttokens.popFollow();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\ttokens.matchToken(\"px\"); // optional px\n\n\t\t\t\t\tvar smoothness = tokens.matchAnyToken(\"smoothly\", \"instantly\");\n\n\t\t\t\t\tvar scrollOptions = {};\n\t\t\t\t\tif (verticalPosition) {\n\t\t\t\t\t\tif (verticalPosition.value === \"top\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"start\";\n\t\t\t\t\t\t} else if (verticalPosition.value === \"bottom\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"end\";\n\t\t\t\t\t\t} else if (verticalPosition.value === \"middle\") {\n\t\t\t\t\t\t\tscrollOptions.block = \"center\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (horizontalPosition) {\n\t\t\t\t\t\tif (horizontalPosition.value === \"left\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"start\";\n\t\t\t\t\t\t} else if (horizontalPosition.value === \"center\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"center\";\n\t\t\t\t\t\t} else if (horizontalPosition.value === \"right\") {\n\t\t\t\t\t\t\tscrollOptions.inline = \"end\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (smoothness) {\n\t\t\t\t\t\tif (smoothness.value === \"smoothly\") {\n\t\t\t\t\t\t\tscrollOptions.behavior = \"smooth\";\n\t\t\t\t\t\t} else if (smoothness.value === \"instantly\") {\n\t\t\t\t\t\t\tscrollOptions.behavior = \"instant\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar goCmd = {\n\t\t\t\ttarget: target,\n\t\t\t\targs: [target, offset],\n\t\t\t\top: function (ctx, to, offset) {\n\t\t\t\t\tif (back) {\n\t\t\t\t\t\twindow.history.back();\n\t\t\t\t\t} else if (url) {\n\t\t\t\t\t\tif (to) {\n\t\t\t\t\t\t\tif (newWindow) {\n\t\t\t\t\t\t\t\twindow.open(to);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twindow.location.href = to;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\truntime.implicitLoop(to, function (target) {\n\n\t\t\t\t\t\t\tif (target === window) {\n\t\t\t\t\t\t\t\ttarget = document.body;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(plusOrMinus) {\n\t\t\t\t\t\t\t\t// a top scroll w/ an offset of some sort\n\t\t\t\t\t\t\t\tvar boundingRect = target.getBoundingClientRect();\n\t\t\t\t\t\t\t\tlet scrollShim = document.createElement('div');\n\n\t\t\t\t\t\t\t\tif (plusOrMinus.value === \"-\") {\n\t\t\t\t\t\t\t\t\tvar finalOffset = -offset;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvar finalOffset = offset;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tscrollShim.style.position = 'absolute';\n\t\t\t\t\t\t\t\tscrollShim.style.top = (boundingRect.x + finalOffset) + \"px\";\n\t\t\t\t\t\t\t\tscrollShim.style.left = (boundingRect.y + finalOffset) + \"px\";\n\t\t\t\t\t\t\t\tscrollShim.style.height = (boundingRect.height + (2 * finalOffset)) + \"px\";\n\t\t\t\t\t\t\t\tscrollShim.style.width = (boundingRect.width + (2 * finalOffset)) + \"px\";\n\t\t\t\t\t\t\t\tscrollShim.style.zIndex = \"\" + Number.MIN_SAFE_INTEGER;\n\t\t\t\t\t\t\t\tscrollShim.style.opacity = \"0\";\n\n\t\t\t\t\t\t\t\tdocument.body.appendChild(scrollShim);\n\t\t\t\t\t\t\t\tsetTimeout(function () {\n\t\t\t\t\t\t\t\t\tdocument.body.removeChild(scrollShim);\n\t\t\t\t\t\t\t\t}, 100);\n\n\t\t\t\t\t\t\t\ttarget = scrollShim;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\ttarget.scrollIntoView(scrollOptions);\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\treturn runtime.findNext(goCmd, ctx);\n\t\t\t\t},\n\t\t\t};\n\t\t\treturn goCmd;\n\t\t}\n\t});\n\n\t_hyperscript.config.conversions.dynamicResolvers.push(function (str, node) {\n\t\tif (!(str === \"Values\" || str.indexOf(\"Values:\") === 0)) {\n\t\t\treturn;\n\t\t}\n\t\tvar conversion = str.split(\":\")[1];\n\t\t/** @type Object<string,string | string[]> */\n\t\tvar result = {};\n\n\t\tvar implicitLoop = _hyperscript.internals.runtime.implicitLoop;\n\n\t\timplicitLoop(node, function (/** @type HTMLInputElement */ node) {\n\t\t\t// Try to get a value directly from this node\n\t\t\tvar input = getInputInfo(node);\n\n\t\t\tif (input !== undefined) {\n\t\t\t\tresult[input.name] = input.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Otherwise, try to query all child elements of this node that *should* contain values.\n\t\t\tif (node.querySelectorAll != undefined) {\n\t\t\t\tvar children = node.querySelectorAll(\"input,select,textarea\");\n\t\t\t\tchildren.forEach(appendValue);\n\t\t\t}\n\t\t});\n\n\t\tif (conversion) {\n\t\t\tif (conversion === \"JSON\") {\n\t\t\t\treturn JSON.stringify(result);\n\t\t\t} else if (conversion === \"Form\") {\n\t\t\t\treturn new URLSearchParams(result).toString();\n\t\t\t} else {\n\t\t\t\tthrow \"Unknown conversion: \" + conversion;\n\t\t\t}\n\t\t} else {\n\t\t\treturn result;\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLInputElement} node\n\t\t */\n\t\tfunction appendValue(node) {\n\t\t\tvar info = getInputInfo(node);\n\n\t\t\tif (info == undefined) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If there is no value already stored in this space.\n\t\t\tif (result[info.name] == undefined) {\n\t\t\t\tresult[info.name] = info.value;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (Array.isArray(result[info.name]) && Array.isArray(info.value)) {\n\t\t\t\tresult[info.name] = [].concat(result[info.name], info.value);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * @param {HTMLInputElement} node\n\t\t * @returns {{name:string, value:string | string[]} | undefined}\n\t\t */\n\t\tfunction getInputInfo(node) {\n\t\t\ttry {\n\t\t\t\t/** @type {{name: string, value: string | string[]}}*/\n\t\t\t\tvar result = {\n\t\t\t\t\tname: node.name,\n\t\t\t\t\tvalue: node.value,\n\t\t\t\t};\n\n\t\t\t\tif (result.name == undefined || result.value == undefined) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"radio\" && node.checked == false) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"checkbox\") {\n\t\t\t\t\tif (node.checked == false) {\n\t\t\t\t\t\tresult.value = undefined;\n\t\t\t\t\t} else if (typeof result.value === \"string\") {\n\t\t\t\t\t\tresult.value = [result.value];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (node.type == \"select-multiple\") {\n\t\t\t\t\t/** @type {NodeListOf<HTMLSelectElement>} */\n\t\t\t\t\tvar selected = node.querySelectorAll(\"option[selected]\");\n\n\t\t\t\t\tresult.value = [];\n\t\t\t\t\tfor (var index = 0; index < selected.length; index++) {\n\t\t\t\t\t\tresult.value.push(selected[index].value);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} catch (e) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t}\n\t});\n\n\t_hyperscript.config.conversions[\"HTML\"] = function (value) {\n\t\tvar toHTML = /** @returns {string}*/ function (/** @type any*/ value) {\n\t\t\tif (value instanceof Array) {\n\t\t\t\treturn value\n\t\t\t\t\t.map(function (item) {\n\t\t\t\t\t\treturn toHTML(item);\n\t\t\t\t\t})\n\t\t\t\t\t.join(\"\");\n\t\t\t}\n\n\t\t\tif (value instanceof HTMLElement) {\n\t\t\t\treturn value.outerHTML;\n\t\t\t}\n\n\t\t\tif (value instanceof NodeList) {\n\t\t\t\tvar result = \"\";\n\t\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\t\tvar node = value[i];\n\t\t\t\t\tif (node instanceof HTMLElement) {\n\t\t\t\t\t\tresult += node.outerHTML;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t}\n\n\t\t\tif (value.toString) {\n\t\t\t\treturn value.toString();\n\t\t\t}\n\n\t\t\treturn \"\";\n\t\t};\n\n\t\treturn toHTML(value);\n\t};\n\n\t_hyperscript.config.conversions[\"Fragment\"] = function (val) {\n\t\tvar frag = document.createDocumentFragment();\n\t\t_hyperscript.internals.runtime.implicitLoop(val, function (val) {\n\t\t\tif (val instanceof Node) frag.append(val);\n\t\t\telse {\n\t\t\t\tvar temp = document.createElement(\"template\");\n\t\t\t\ttemp.innerHTML = val;\n\t\t\t\tfrag.append(temp.content);\n\t\t\t}\n\t\t});\n\t\treturn frag;\n\t};\n}\n","\nimport _hyperscript from \"../lib/core.js\"\n\nimport web from \"../lib/web.js\"\nimport worker from \"../lib/plugin/worker.js\"\nimport socket from \"../lib/plugin/socket.js\"\nimport eventsource from \"../lib/plugin/eventsource.js\"\nimport template from \"../lib/plugin/template.js\"\nimport hdb from \"../lib/plugin/hdb.js\"\n\nweb(_hyperscript)\nworker(_hyperscript)\nsocket(_hyperscript)\neventsource(_hyperscript)\ntemplate(_hyperscript)\nhdb(_hyperscript)\n\nexport default _hyperscript","///=========================================================================\n/// This module provides the worker feature for hyperscript\n///=========================================================================\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\tvar invocationIdCounter = 0;\n\n\tvar workerFunc = function (self) {\n\t\tself.onmessage = function (e) {\n\t\t\tswitch (e.data.type) {\n\t\t\t\tcase \"init\":\n\t\t\t\t\tself.importScripts(e.data._hyperscript);\n\t\t\t\t\tself.importScripts.apply(self, e.data.extraScripts);\n\t\t\t\t\tconst _hyperscript = self['_hyperscript']\n\t\t\t\t\tvar tokens = _hyperscript.internals.lexer.makeTokensObject(e.data.tokens, [], e.data.source);\n\t\t\t\t\tvar hyperscript = _hyperscript.internals.parser.parseElement(\"hyperscript\", tokens);\n\t\t\t\t\thyperscript.apply(self, self);\n\t\t\t\t\tpostMessage({ type: \"didInit\" });\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"call\":\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar result = self['_hyperscript'].internals.runtime\n\t\t\t\t\t\t\t.getHyperscriptFeatures(self)[e.data.function]\n\t\t\t\t\t\t\t.apply(self, e.data.args);\n\t\t\t\t\t\tPromise.resolve(result)\n\t\t\t\t\t\t\t.then(function (value) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"resolve\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.catch(function (error) {\n\t\t\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t});\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tpostMessage({\n\t\t\t\t\t\t\ttype: \"reject\",\n\t\t\t\t\t\t\tid: e.data.id,\n\t\t\t\t\t\t\terror: error.toString(),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t};\n\n\t// extract the body of the function, which was only defined so\n\t// that we can get syntax highlighting\n\tvar workerCode = \"(\" + workerFunc.toString() + \")(self)\";\n\tvar blob = new Blob([workerCode], { type: \"text/javascript\" });\n\tvar workerUri = URL.createObjectURL(blob);\n\n\t_hyperscript.addFeature(\"worker\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"worker\")) {\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens);\n\t\t\tvar qualifiedName = name.evaluate();\n\t\t\tvar nameSpace = qualifiedName.split(\".\");\n\t\t\tvar workerName = nameSpace.pop();\n\n\t\t\t// Parse extra scripts\n\t\t\tvar extraScripts = [];\n\t\t\tif (tokens.matchOpToken(\"(\")) {\n\t\t\t\tif (tokens.matchOpToken(\")\")) {\n\t\t\t\t\t// no external scripts\n\t\t\t\t} else {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tvar extraScript = tokens.requireTokenType(\"STRING\").value;\n\t\t\t\t\t\tvar absoluteUrl = new URL(extraScript, location.href).href;\n\t\t\t\t\t\textraScripts.push(absoluteUrl);\n\t\t\t\t\t} while (tokens.matchOpToken(\",\"));\n\t\t\t\t\ttokens.requireOpToken(\")\");\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Consume worker methods\n\n\t\t\tvar funcNames = [];\n\t\t\tvar bodyStartIndex = tokens.consumed.length;\n\t\t\tvar bodyEndIndex = tokens.consumed.length;\n\t\t\tdo {\n\t\t\t\tvar feature = parser.parseAnyOf([\"defFeature\", \"jsFeature\"], tokens);\n\t\t\t\tif (feature) {\n\t\t\t\t\tif (feature.type === \"defFeature\") {\n\t\t\t\t\t\tfuncNames.push(feature.name);\n\t\t\t\t\t\tbodyEndIndex = tokens.consumed.length;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (tokens.hasMore()) continue;\n\t\t\t\t\t}\n\t\t\t\t} else break;\n\t\t\t} while (tokens.matchToken(\"end\") && tokens.hasMore()); // worker end\n\n\t\t\tvar bodyTokens = tokens.consumed.slice(bodyStartIndex, bodyEndIndex + 1);\n\n\t\t\t// Create worker\n\n\t\t\tvar worker = new Worker(workerUri);\n\n\t\t\t// Send init message to worker\n\n\t\t\tworker.postMessage({\n\t\t\t\ttype: \"init\",\n\t\t\t\t_hyperscript: runtime.hyperscriptUrl,\n\t\t\t\textraScripts: extraScripts,\n\t\t\t\ttokens: bodyTokens,\n\t\t\t\tsource: tokens.source,\n\t\t\t});\n\n\t\t\tvar workerPromise = new Promise(function (resolve, reject) {\n\t\t\t\tworker.addEventListener(\n\t\t\t\t\t\"message\",\n\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\tif (e.data.type === \"didInit\") resolve();\n\t\t\t\t\t},\n\t\t\t\t\t{ once: true }\n\t\t\t\t);\n\t\t\t});\n\n\t\t\t// Create function stubs\n\t\t\tvar stubs = {};\n\t\t\tfuncNames.forEach(function (funcName) {\n\t\t\t\tconsole.log(funcName)\n\t\t\t\tstubs[funcName] = function () {\n\t\t\t\t\tvar args = arguments;\n\t\t\t\t\treturn new Promise(function (resolve, reject) {\n\t\t\t\t\t\tvar id = invocationIdCounter++;\n\t\t\t\t\t\tworker.addEventListener(\"message\", function returnListener(e) {\n\t\t\t\t\t\t\tif (e.data.id !== id) return;\n\t\t\t\t\t\t\tworker.removeEventListener(\"message\", returnListener);\n\t\t\t\t\t\t\tif (e.data.type === \"resolve\") resolve(e.data.value);\n\t\t\t\t\t\t\telse reject(e.data.error);\n\t\t\t\t\t\t});\n\t\t\t\t\t\tworkerPromise.then(function () {\n\t\t\t\t\t\t\t// Worker has been initialized, send invocation.\n\t\t\t\t\t\t\tworker.postMessage({\n\t\t\t\t\t\t\t\ttype: \"call\",\n\t\t\t\t\t\t\t\tfunction: funcName,\n\t\t\t\t\t\t\t\targs: Array.from(args),\n\t\t\t\t\t\t\t\tid: id,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t};\n\t\t\t});\n\n\t\t\treturn {\n\t\t\t\tname: workerName,\n\t\t\t\tworker: worker,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, workerName, stubs);\n\t\t\t\t},\n\t\t\t};\n\t\t}\n\t});\n}\n","///=========================================================================\n/// This module provides the EventSource (SSE) feature for hyperscript\n///=========================================================================\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\t_hyperscript.addFeature(\"eventsource\", function (parser, runtime, tokens) {\n\t\tif (tokens.matchToken(\"eventsource\")) {\n\t\t\tvar urlElement;\n\t\t\tvar withCredentials = false;\n\n\t\t\t// Get the name we'll assign to this EventSource in the hyperscript context\n\t\t\t/** @type {string} */\n\t\t\tvar name = parser.requireElement(\"dotOrColonPath\", tokens).evaluate();\n\t\t\tvar nameSpace = name.split(\".\");\n\t\t\tvar eventSourceName = nameSpace.pop();\n\n\t\t\t// Get the URL of the EventSource\n\t\t\tif (tokens.matchToken(\"from\")) {\n\t\t\t\turlElement = parser.requireElement(\"stringLike\", tokens);\n\t\t\t}\n\n\t\t\t// Get option to connect with/without credentials\n\t\t\tif (tokens.matchToken(\"with\")) {\n\t\t\t\tif (tokens.matchToken(\"credentials\")) {\n\t\t\t\t\twithCredentials = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/** @type {EventSourceStub} */\n\t\t\tvar stub = {\n\t\t\t\teventSource: null,\n\t\t\t\tlisteners: [],\n\t\t\t\tretryCount: 0,\n\t\t\t\topen: function (url) {\n\t\t\t\t\t// calculate default values for URL argument.\n\t\t\t\t\tif (url == undefined) {\n\t\t\t\t\t\tif (stub.eventSource != null && stub.eventSource.url != undefined) {\n\t\t\t\t\t\t\turl = stub.eventSource.url;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthrow \"no url defined for EventSource.\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Guard multiple opens on the same EventSource\n\t\t\t\t\tif (stub.eventSource != null) {\n\t\t\t\t\t\t// If we're opening a new URL, then close the old one first.\n\t\t\t\t\t\tif (url != stub.eventSource.url) {\n\t\t\t\t\t\t\tstub.eventSource.close();\n\t\t\t\t\t\t} else if (stub.eventSource.readyState != EventSource.CLOSED) {\n\t\t\t\t\t\t\t// Otherwise, we already have the right connection open, so there's nothing left to do.\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open the EventSource and get ready to populate event handlers\n\t\t\t\t\tstub.eventSource = new EventSource(url, {\n\t\t\t\t\t\twithCredentials: withCredentials,\n\t\t\t\t\t});\n\n\t\t\t\t\t// On successful connection. Reset retry count.\n\t\t\t\t\tstub.eventSource.addEventListener(\"open\", function (event) {\n\t\t\t\t\t\tstub.retryCount = 0;\n\t\t\t\t\t});\n\n\t\t\t\t\t// On connection error, use exponential backoff to retry (random values from 1 second to 2^7 (128) seconds\n\t\t\t\t\tstub.eventSource.addEventListener(\"error\", function (event) {\n\t\t\t\t\t\t// If the EventSource is closed, then try to reopen\n\t\t\t\t\t\tif (stub.eventSource.readyState == EventSource.CLOSED) {\n\t\t\t\t\t\t\tstub.retryCount = Math.min(7, stub.retryCount + 1);\n\t\t\t\t\t\t\tvar timeout = Math.random() * (2 ^ stub.retryCount) * 500;\n\t\t\t\t\t\t\twindow.setTimeout(stub.open, timeout);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\n\t\t\t\t\t// Add event listeners\n\t\t\t\t\tfor (var index = 0; index < stub.listeners.length; index++) {\n\t\t\t\t\t\tvar item = stub.listeners[index];\n\t\t\t\t\t\tstub.eventSource.addEventListener(item.type, item.handler, item.options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tclose: function () {\n\t\t\t\t\tif (stub.eventSource != undefined) {\n\t\t\t\t\t\tstub.eventSource.close();\n\t\t\t\t\t}\n\t\t\t\t\tstub.retryCount = 0;\n\t\t\t\t},\n\t\t\t\taddEventListener: function (type, handler, options) {\n\t\t\t\t\tstub.listeners.push({\n\t\t\t\t\t\ttype: type,\n\t\t\t\t\t\thandler: handler,\n\t\t\t\t\t\toptions: options,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (stub.eventSource != null) {\n\t\t\t\t\t\tstub.eventSource.addEventListener(type, handler, options);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Create the \"feature\" that will be returned by this function.\n\n\t\t\t/** @type {EventSourceFeature} */\n\t\t\tvar feature = {\n\t\t\t\tname: eventSourceName,\n\t\t\t\tobject: stub,\n\t\t\t\tinstall: function (target) {\n\t\t\t\t\truntime.assignToNamespace(target, nameSpace, eventSourceName, stub);\n\t\t\t\t},\n\t\t\t};\n\n\t\t\t// Parse each event listener and add it into the list\n\t\t\twhile (tokens.matchToken(\"on\")) {\n\t\t\t\t// get event name\n\t\t\t\tvar eventName = parser.requireElement(\"stringLike\", tokens, \"Expected event name\").evaluate(); // OK to evaluate this in real-time?\n\n\t\t\t\t// default encoding is \"\" (autodetect)\n\t\t\t\tvar encoding = \"\";\n\n\t\t\t\t// look for alternate encoding\n\t\t\t\tif (tokens.matchToken(\"as\")) {\n\t\t\t\t\tencoding = parser.requireElement(\"stringLike\", tokens, \"Expected encoding type\").evaluate(); // Ok to evaluate this in real time?\n\t\t\t\t}\n\n\t\t\t\t// get command list for this event handler\n\t\t\t\tvar commandList = parser.requireElement(\"commandList\", tokens);\n\t\t\t\taddImplicitReturnToCommandList(commandList);\n\t\t\t\ttokens.requireToken(\"end\");\n\n\t\t\t\t// Save the event listener into the feature. This lets us\n\t\t\t\t// connect listeners to new EventSources if we have to reconnect.\n\t\t\t\tstub.listeners.push({\n\t\t\t\t\ttype: eventName,\n\t\t\t\t\thandler: makeHandler(encoding, commandList),\n\t\t\t\t});\n\t\t\t}\n\n\t\t\ttokens.requireToken(\"end\");\n\n\t\t\t// If we have a URL element, then connect to the remote server now.\n\t\t\t// Otherwise, we can connect later with a call to .open()\n\t\t\tif (urlElement != undefined) {\n\t\t\t\tstub.open(urlElement.evaluate());\n\t\t\t}\n\n\t\t\t// Success!\n\t\t\treturn feature;\n\n\t\t\t////////////////////////////////////////////\n\t\t\t// ADDITIONAL HELPER FUNCTIONS HERE...\n\t\t\t////////////////////////////////////////////\n\n\t\t\t/**\n\t\t\t * Makes an eventHandler function that can execute the correct hyperscript commands\n\t\t\t * This is outside of the main loop so that closures don't cause us to run the wrong commands.\n\t\t\t *\n\t\t\t * @param {string} encoding\n\t\t\t * @param {*} commandList\n\t\t\t * @returns {EventHandlerNonNull}\n\t\t\t */\n\t\t\tfunction makeHandler(encoding, commandList) {\n\t\t\t\treturn function (evt) {\n\t\t\t\t\tvar data = decode(evt[\"data\"], encoding);\n\t\t\t\t\tvar context = runtime.makeContext(stub, feature, stub);\n\t\t\t\t\tcontext.event = evt;\n\t\t\t\t\tcontext.result = data;\n\t\t\t\t\tcommandList.execute(context);\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Decodes/Unmarshals a string based on the selected encoding. If the\n\t\t\t * encoding is not recognized, attempts to auto-detect based on its content\n\t\t\t *\n\t\t\t * @param {string} data - The original data to be decoded\n\t\t\t * @param {string} encoding - The method that the data is currently encoded (\"string\", \"json\", or unknown)\n\t\t\t * @returns {string} - The decoded data\n\t\t\t */\n\t\t\tfunction decode(data, encoding) {\n\t\t\t\t// Force JSON encoding\n\t\t\t\tif (encoding == \"json\") {\n\t\t\t\t\treturn JSON.parse(data);\n\t\t\t\t}\n\n\t\t\t\t// Otherwise, return the data without modification\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Adds a \"HALT\" command to the commandList.\n\t\t\t * TODO: This seems like something that could be optimized:\n\t\t\t * maybe the parser could do automatically,\n\t\t\t * or could be a public function in the parser available to everyone,\n\t\t\t * or the command-executer-thingy could just handle nulls implicitly.\n\t\t\t *\n\t\t\t * @param {*} commandList\n\t\t\t * @returns void\n\t\t\t */\n\t\t\tfunction addImplicitReturnToCommandList(commandList) {\n\t\t\t\tif (commandList.next) {\n\t\t\t\t\treturn addImplicitReturnToCommandList(commandList.next);\n\t\t\t\t}\n\n\t\t\t\tcommandList.next = {\n\t\t\t\t\ttype: \"implicitReturn\",\n\t\t\t\t\top: function (/** @type {Context} */ _context) {\n\t\t\t\t\t\treturn runtime.HALT;\n\t\t\t\t\t},\n\t\t\t\t\texecute: function (/** @type {Context} */ _context) {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t},\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t});\n}","\nfunction compileTemplate(template) {\n\treturn template.replace(/(?:^|\\n)([^@]*)@?/gm, function (match, p1) {\n\t\tvar templateStr = (\" \" + p1).replace(/([^\\\\])\\$\\{/g, \"$1$${escape html \").substring(1);\n\t\treturn \"\\ncall __ht_template_result.push(`\" + templateStr + \"`)\\n\";\n\t});\n}\n\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\n\tfunction renderTemplate(template, ctx) {\n\t\tvar buf = [];\n\t\t_hyperscript.evaluate(template, Object.assign({ __ht_template_result: buf }, ctx));\n\t\treturn buf.join(\"\");\n\t}\n\n\t_hyperscript.addCommand(\"render\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"render\")) return;\n\t\tvar template_ = parser.requireElement(\"expression\", tokens);\n\t\tvar templateArgs = {};\n\t\tif (tokens.matchToken(\"with\")) {\n\t\t\ttemplateArgs = parser.parseElement(\"namedArgumentList\", tokens);\n\t\t}\n\t\treturn {\n\t\t\targs: [template_, templateArgs],\n\t\t\top: function (ctx, template, templateArgs) {\n\t\t\t\tif (!(template instanceof Element)) throw new Error(template_.sourceFor() + \" is not an element\");\n\t\t\t\tctx.result = renderTemplate(compileTemplate(template.innerHTML), templateArgs);\n\t\t\t\treturn runtime.findNext(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n\n\tfunction escapeHTML(html) {\n\t\treturn String(html)\n\t\t\t.replace(/&/g, \"&amp;\")\n\t\t\t.replace(/</g, \"&lt;\")\n\t\t\t.replace(/>/g, \"&gt;\")\n\t\t\t.replace(/\\x22/g, \"&quot;\")\n\t\t\t.replace(/\\x27/g, \"&#039;\");\n\t}\n\n\t_hyperscript.addLeafExpression(\"escape\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"escape\")) return;\n\t\tvar escapeType = tokens.matchTokenType(\"IDENTIFIER\").value;\n\n\t\t// hidden! for use in templates\n\t\tvar unescaped = tokens.matchToken(\"unescaped\");\n\n\t\tvar arg = parser.requireElement(\"expression\", tokens);\n\n\t\treturn {\n\t\t\targs: [arg],\n\t\t\top: function (ctx, arg) {\n\t\t\t\tif (unescaped) return arg;\n\t\t\t\tif (arg === undefined) return \"\";\n\t\t\t\tswitch (escapeType) {\n\t\t\t\t\tcase \"html\":\n\t\t\t\t\t\treturn escapeHTML(arg);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow new Error(\"Unknown escape: \" + escapeType);\n\t\t\t\t}\n\t\t\t},\n\t\t\tevaluate: function (ctx) {\n\t\t\t\treturn runtime.unifiedEval(this, ctx);\n\t\t\t},\n\t\t};\n\t});\n}\n","\n/**\n * @param {HyperscriptObject} _hyperscript\n */\nexport default _hyperscript => {\n\tfunction HDB(ctx, runtime, breakpoint) {\n\t\tthis.ctx = ctx;\n\t\tthis.runtime = runtime;\n\t\tthis.cmd = breakpoint;\n\t\tthis._hyperscript = _hyperscript;\n\n\t\tthis.cmdMap = [];\n\n\t\tthis.bus = new EventTarget();\n\t} // See below for methods\n\n\t_hyperscript.addCommand(\"breakpoint\", function (parser, runtime, tokens) {\n\t\tif (!tokens.matchToken(\"breakpoint\")) return;\n\n\t\tvar hdb;\n\n\t\treturn {\n\t\t\top: function (ctx) {\n\t\t\t\tglobalThis.hdb = hdb = new HDB(ctx, runtime, this);\n\t\t\t\ttry {\n\t\t\t\t\treturn hdb.break(ctx);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e, e.stack);\n\t\t\t\t}\n\t\t\t},\n\t\t};\n\t});\n\tHDB.prototype.break = function(ctx) {\n\t\tconsole.log(\"=== HDB///_hyperscript/debugger ===\");\n\t\tthis.ui();\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.bus.addEventListener(\n\t\t\t\t\"continue\",\n\t\t\t\t() => {\n\t\t\t\t\tif (this.ctx !== ctx) {\n\t\t\t\t\t\t// Context switch\n\t\t\t\t\t\tfor (var attr in ctx) {\n\t\t\t\t\t\t\tdelete ctx[attr];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tObject.assign(ctx, this.ctx);\n\t\t\t\t\t}\n\t\t\t\t\tdelete window['hdb'];\n\t\t\t\t\tresolve(this.runtime.findNext(this.cmd, this.ctx));\n\t\t\t\t},\n\t\t\t\t{ once: true }\n\t\t\t);\n\t\t});\n\t};\n\n\tHDB.prototype.continueExec = function () {\n\t\tthis.bus.dispatchEvent(new Event(\"continue\"));\n\t};\n\n\tHDB.prototype.stepOver = function () {\n\t\tif (!this.cmd) return this.continueExec();\n\t\tvar result =\n\t\t\tthis.cmd && this.cmd.type === \"breakpointCommand\"\n\t\t\t\t? this.runtime.findNext(this.cmd, this.ctx)\n\t\t\t\t: this.runtime.unifiedEval(this.cmd, this.ctx);\n\t\tif (result.type === \"implicitReturn\") return this.stepOut();\n\t\tif (result && result.then instanceof Function) {\n\t\t\treturn result.then(next => {\n\t\t\t\tthis.cmd = next;\n\t\t\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t\t\t\tthis.logCommand();\n\t\t\t});\n\t\t} else if (result.halt_flag) {\n\t\t\tthis.bus.dispatchEvent(new Event(\"continue\"));\n\t\t} else {\n\t\t\tthis.cmd = result;\n\t\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t\t\tthis.logCommand();\n\t\t}\n\t};\n\n\tHDB.prototype.stepOut = function () {\n\t\tif (!this.ctx.meta.caller) return this.continueExec();\n\t\tvar callingCmd = this.ctx.meta.callingCommand;\n\t\tvar oldMe = this.ctx.me;\n\t\tthis.ctx = this.ctx.meta.caller;\n\t\tconsole.log(\n\t\t\t\"[hdb] stepping out into \" + this.ctx.meta.feature.displayName)\n\t\tif (this.ctx.me instanceof Element && this.ctx.me !== oldMe) {\n\t\t\tconsole.log(\"[hdb] me: \", this.ctx.me)\n\t\t}\n\t\tthis.cmd = this.runtime.findNext(callingCmd, this.ctx);\n\t\tthis.cmd = this.runtime.findNext(this.cmd, this.ctx);\n\t\tthis.logCommand();\n\t\tthis.bus.dispatchEvent(new Event(\"step\"));\n\t};\n\n\tHDB.prototype.skipTo = function (toCmd) {\n\t\tthis.cmd = toCmd.cmd\n\t\tthis.bus.dispatchEvent(new Event(\"skip\"));\n\t}\n\n\tHDB.prototype.rewrite = function (command, newCode) {\n\t\tconsole.log('##', command)\n\t\tconst parent = command.cmd.parent\n\t\tlet prev\n\t\tfor (prev of parent.children) {\n\t\t\tif (prev.next === command.cmd) break;\n\t\t}\n\t\tconst next = command.next\n\n\t\tconst tok = _hyperscript.internals.lexer.tokenize(newCode)\n\t\tconst newcmd = _hyperscript.internals.parser.requireElement('command', tok)\n\n\t\tconsole.log(newcmd)\n\t\tnewcmd.startToken = command.startToken\n\t\tnewcmd.endToken = command.endToken\n\t\tnewcmd.programSource = command.programSource\n\t\tnewcmd.sourceFor = function () { return newCode }\n\n\t\tprev.next = newcmd\n\t\tnewcmd.next = next\n\t\tnewcmd.parent = parent\n\n\t\tthis.bus.dispatchEvent(new Event('step'))\n\t}\n\n\tHDB.prototype.logCommand = function () {\n\t\tvar hasSource = this.cmd.sourceFor instanceof Function;\n\t\tvar cmdSource = hasSource ? this.cmd.sourceFor() : '-- '+this.cmd.type;\n\t\tconsole.log(\"[hdb] current command: \" + cmdSource)\n\t}\n\n\tHDB.prototype.traverse = function (ge) {\n\t\tconst rv = [];\n\n\t\t(function recurse (ge) {\n\t\t\trv.push(ge);\n\t\t\tif ('children' in ge) for (const child of ge.children) recurse(child);\n\t\t})(ge);\n\n\t\treturn rv;\n\t}\n\n\tvar ui = `\n<div class=\"hdb\" _=\"\n\ton load trigger update end\n\ton step from hdb.bus trigger update end\n\ton skip from hdb.bus trigger update end\n\ton continue from hdb.bus log 'done' then remove me.getRootNode().host\">\n\n\t<script type=\"text/hyperscript\">\n\n\tdef escapeHTML(unsafe)\n\t\tjs(unsafe) return unsafe\n\t\t\t.replace(/&/g, \"&amp;\")\n\t\t\t.replace(/</g, \"&lt;\")\n\t\t\t.replace(/>/g, \"&gt;\")\n\t\t\t.replace(/\\\\x22/g, \"&quot;\")\n\t\t\t.replace(/\\\\x27/g, \"&#039;\") end\n\t\treturn it\n\tend\n\n\tdef makeCommandWidget(i)\n\t\tget \\`<span data-cmd=\\${i}><button class=skip data-cmd=\\${i}>&rdca;</button>\\`\n\t\tif hdb.EXPERIMENTAL\n\t\t\tappend \\`<button class=rewrite data-cmd=\\${i}>Rewrite</button></span>\\`\n\t\tend\n\t\treturn it\n\tend\n\n\tdef renderCode\n\t\tset hdb.cmdMap to []\n\t\tset src to hdb.cmd.programSource\n\n\t\t-- Find feature\n\t\tset feat to hdb.cmd\n\t\trepeat until no feat.parent or feat.isFeature set feat to feat.parent end\n\n\t\t-- Traverse, finding starts\n\t\tfor cmd in hdb.traverse(feat)\n\t\t\tif no cmd.startToken continue end\n\t\t\tappend {\n\t\t\t\tindex: cmd.startToken.start,\n\t\t\t\twidget: makeCommandWidget(hdb.cmdMap.length),\n\t\t\t\tcmd: cmd\n\t\t\t} to hdb.cmdMap\n\t\tend\n\n\t\tset rv to src.slice(0, hdb.cmdMap[0].index)\n\t\tfor obj in hdb.cmdMap index i\n\t\t\tif obj.cmd is hdb.cmd\n\t\t\t\tappend obj.widget + '<u class=current>' +\n\t\t\t\t\tescapeHTML(src.slice(obj.index, hdb.cmdMap[i+1].index)) + '</u>' to rv\n\t\t\telse\n\t\t\t\tappend obj.widget + escapeHTML(src.slice(obj.index, hdb.cmdMap[i+1].index)) to rv\n\t\t\tend\n\t\tend\n\t\treturn rv\n\tend\n\n\tdef truncate(str, len)\n\t\tif str.length <= len return str end\n\t\treturn str.substr(0, len) + '…'\n\n\tdef prettyPrint(obj)\n\t\tif obj is null return 'null' end\n\t\tif Element.prototype.isPrototypeOf(obj)\n\t\t\tset rv to '&lt;<span class=\"token tagname\">' +\n\t\t\t\tobj.tagName.toLowerCase() + \"</span>\"\n\t\t\tfor attr in Array.from(obj.attributes)\n\t\t\t\tif attr.specified\n\t\t\t\t\tset rv to rv +\n\t\t\t\t\t\t' <span class=\"token attr\">' + attr.nodeName +\n\t\t\t\t\t\t'</span>=<span class=\"token string\">\"' + truncate(attr.textContent, 10) +\n\t\t\t\t\t\t'\"</span>'\n\t\t\t\tend\n\t\t\tend\n\t\t\tset rv to rv + '>'\n\t\t\treturn rv\n\t\telse if obj.call\n\t\t\tif obj.hyperfunc\n\t\t\t\tget \"def \" + obj.hypername + ' ...'\n\t\t\telse\n\t\t\t\tget \"function \"+obj.name+\"(...) {...}\"\n\t\t\tend\n\t\telse if obj.toString\n\t\t\tcall obj.toString()\n\t\tend\n\t\treturn escapeHTML((it or 'undefined').trim())\n\tend\n\t</script>\n\n\t<header _=\"\n\ton pointerdown(clientX, clientY)\n\t\thalt the event\n\t\tcall event.stopPropagation()\n\t\tget first .hdb\n\t\tmeasure its x, y\n\t\tset xoff to clientX - x\n\t\tset yoff to clientY - y\n\t\trepeat until event pointerup from document\n\t\t\twait for pointermove or pointerup from document\n\t\t\tadd {\n\t\t\t\tleft: \\${its clientX - xoff}px;\n\t\t\t\ttop: \\${its clientY - yoff}px;\n\t\t\t} to .hdb\n\t\tend\n\t\">\n\t\t<h2 class=\"titlebar\">HDB</h2>\n\t\t<ul role=\"toolbar\" class=\"toolbar\" _=\"on pointerdown halt\">\n\t\t\t<li><button _=\"on click call hdb.continueExec()\">\n\t\t\t\t&#x23F5; Continue\n\t\t\t</button>\n\t\t\t<li><button _=\"on click call hdb.stepOver()\">\n\t\t\t\t&#8631; Step Over\n\t\t\t</button>\n\t\t</ul>\n\t</header>\n\n\t<section class=\"sec-code\">\n\n\t\t<div class=\"code-container\">\n\t\t\t<pre class=\"code language-hyperscript\" _=\"\n\t\t\t\ton update from .hdb if hdb.cmd.programSource\n\t\t\t \tput renderCode() into me\n\t\t\t \tif Prism\n\t\t\t \t\tcall Prism.highlightAllUnder(me)\n\t\t\t \tend\n\t\t\t go to bottom of .current in me\n\t\t\t\tend\n\n\t\t\t\ton click\n\t\t\t\t\tif target matches .skip\n\t\t\t\t\t\tget (target's @data-cmd) as Int\n\t\t\t\t\t\tcall hdb.skipTo(hdb.cmdMap[result])\n\t\t\t\t\tend\n\t\t\t\t\tif target matches .rewrite\n\t\t\t\t\t\tset cmdNo to (target's @data-cmd) as Int\n\t\t\t\t\t\tset span to the first <span[data-cmd='\\${cmdNo}'] />\n\t\t\t\t\t\tput \\`<form class=rewrite><input id=cmd></form>\\` into the span\n\t\t\t\t\tend\n\t\t\t\tend\n\n\t\t\t\ton submit\n\t\t\t\t\thalt the event\n\t\t\t\t\tget (closest @data-cmd to target) as Int\n\t\t\t\t\tcall hdb.rewrite(hdb.cmdMap[result], #cmd's value)\n\t\t\t\tend\n\t\t\t\"><code></code></pre>\n\t\t</div>\n\t</section>\n\n\t<section class=\"sec-console\" _=\"\n\t\t-- Print context at startup\n\t\tinit repeat for var in Object.keys(hdb.ctx) if var is not 'meta'\n\t\t\tsend hdbUI:consoleEntry(input: var, output: hdb.ctx[var]) to #console\">\n\n\t\t<ul id=\"console\" role=\"list\" _=\"\n\t\t\ton hdbUI:consoleEntry(input, output)\n\t\t\t\tif no hdb.consoleHistory set hdb.consoleHistory to [] end\n\t\t\t\tpush(input) on hdb.consoleHistory\n\t\t\t\tset node to #tmpl-console-entry.content.cloneNode(true)\n\t\t\t\tput the node at end of me\n\t\t\t\tset entry to my lastElementChild\n\t\t\t\tgo to bottom of the entry\n\t\t\t\tput escapeHTML(input) into .input in the entry\n\t\t\t\tif no output\n\t\t\t\t\tcall hdb._hyperscript.parse(input)\n\t\t\t\t\tif its execute is not undefined then call its execute(hdb.ctx)\n\t\t\t\t\telse call its evaluate(hdb.ctx)\n\t\t\t\t\tend\n\t\t\t\t\tset output to it\n\t\t\t\tend\n\t\t\t\tput prettyPrint(output) as Fragment into .output in the entry\n\t\t\t\">\n\t\t\t<template id=\"tmpl-console-entry\">\n\t\t\t\t<li class=\"console-entry\">\n\t\t\t\t\t<kbd><code class=\"input\"></code></kbd>\n\t\t\t\t\t<samp class=\"output\"></samp>\n\t\t\t\t</li>\n\t\t\t</template>\n\t\t</ul>\n\n\t\t<form id=\"console-form\" data-hist=\"0\" _=\"on submit\n\t\t\t\tsend hdbUI:consoleEntry(input: #console-input's value) to #console\n\t\t\t\tset #console-input's value to ''\n\t\t\t\tset @data-hist to 0\n\t\t\t\tset element oldContent to null\n\t\t\t\thalt\n\t\t\ton keydown[key is 'ArrowUp' or key is 'ArrowDown']\n\t\t\t\tif no hdb.consoleHistory or exit end\n\t\t\t\tif element oldContent is null set element oldContent to #console-input.value end\n\t\t\t\tif event.key is 'ArrowUp' and hdb.consoleHistory.length > -@data-hist\n\t\t\t\t\tdecrement @data-hist\n\t\t\t\telse if event.key is 'ArrowDown' and @data-hist < 0\n\t\t\t\t\tincrement @data-hist\n\t\t\t\tend end\n\t\t\t\tset #console-input.value to hdb.consoleHistory[hdb.consoleHistory.length + @data-hist as Int]\n\t\t\t\t\tor oldContent\n\t\t\t\thalt default\n\t\t\ton input if @data-hist is '0' set element oldContent to #console-input.value\">\n\t\t\t<input id=\"console-input\" placeholder=\"Enter an expression&hellip;\"\n\t\t\t\tautocomplete=\"off\">\n\t\t</form>\n\t</section>\n\n\t<style>\n\t.hdb {\n\t\tborder: 1px solid #888;\n\t\tborder-radius: .3em;\n\t\tbox-shadow: 0 .2em .3em #0008;\n\t\tposition: fixed;\n\t\ttop: .5em; right: .5em;\n\t\twidth: min(40ch, calc(100% - 1em));\n\t\tmax-height: calc(100% - 1em);\n\t\tbackground-color: white;\n\t\tfont-family: sans-serif;\n\t\topacity: .9;\n\t\tz-index: 2147483647;\n\t\tcolor: black;\n\t\tdisplay: flex;\n\t\tflex-flow: column;\n\t}\n\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n\n\theader {\n\t\tdisplay: flex;\n\t\tjustify-content: space-between;\n\t\talign-items: center;\n\t\tpadding: .4em;\n\t}\n\n\t.titlebar {\n\t\tmargin: 0;\n\t\tfont-size: 1em;\n\t\ttouch-action: none;\n\t}\n\n\t.toolbar {\n\t\tdisplay: flex;\n\t\tgap: .35em;\n\n\t\tlist-style: none;\n\t\tpadding-left: 0;\n\t\tmargin: 0;\n\t}\n\n\t.toolbar a, .toolbar button {\n\t\tbackground: #2183ff;\n\t\tborder: 1px solid #3465a4;\n\t\tbox-shadow: 0 1px #b3c6ff inset, 0 .06em .06em #000;\n\t\tborder-radius: .2em;\n\t\tfont: inherit;\n\t\tpadding: .2em .3em;\n\t\tcolor: white;\n\t\ttext-shadow: 0 1px black;\n\t\tfont-weight: bold;\n\t}\n\n\t.toolbar a:hover .toolbar a:focus, .toolbar button:hover, .toolbar button:focus {\n\t\tbackground: #94c8ff;\n\t}\n\n\t.toolbar a:active, .toolbar button:active {\n\t\tbackground: #3465a4;\n\t}\n\n\t.sec-code {\n\t\tborder-radius: .3em;\n\t\toverflow: hidden;\n\t\tbox-shadow: 0 1px white inset, 0 .06em .06em #0008;\n\t\tbackground: #bdf;\n\t\tmargin: 0 .4em;\n\t\tborder: 1px solid #3465a4;\n\t}\n\n\t.hdb h3 {\n\t\tmargin: 0;\n\t\tfont-size: 1em;\n\t\tpadding: .2em .4em 0 .4em;\n\t}\n\n\t.code-container {\n\t\tdisplay: grid;\n\t\tline-height: 1.2em;\n\t\theight: calc(12 * 1.2em);\n\t\tborder-radius: 0 0 .2em .2em;\n\t\toverflow: auto;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: #0003 transparent;\n\t}\n\n\t.code, #console, #console-input {\n\t\tfont-family: Consolas, \"Andale Mono WT\", \"Andale Mono\", \"Lucida Console\", \"Lucida Sans Typewriter\", \"DejaVu Sans Mono\", \"Bitstream Vera Sans Mono\", \"Liberation Mono\", \"Nimbus Mono L\", Monaco, \"Courier New\", Courier, monospace;\n\t}\n\n\t.code {\n\t\twidth: 0;\n\t\tmargin: 0;\n\t\tpadding-left: 1ch;\n\t\ttab-size: 2;\n\t\t-moz-tab-size: 2;\n\t\t-o-tab-size: 2;\n\t}\n\n\t.current {\n\t\tfont-weight: bold;\n\t\tbackground: #abf;\n\t}\n\n\t.skip {\n\t\tpadding: 0;\n\t\tmargin: 2px;\n\t\tborder: 1px solid #3465a4;\n\t\tborder-radius: 50%;\n\t\tcolor: #3465a4;\n\t\tbackground: none;\n\t\tfont-weight: bold;\n\t\tfont-size: 1.2em;\n\t\twidth: calc(2ch / 1.2 - 4px);\n\t\theight: calc(2ch / 1.2 - 4px);\n\t\tline-height: 0.6;\n\t}\n\n\t.skip:hover {\n\t\tbackground: #3465a4;\n\t\tcolor: #bdf;\n\t}\n\n\t#console {\n\t\toverflow-y: scroll;\n\t\tscrollbar-width: thin;\n\t\tscrollbar-color: #afc2db transparent;\n\t\theight: calc(12 * 1.2em);\n\t\tlist-style: none;\n\t\tpadding-left: 0;\n\t\tmargin: 0 .4em .4em .4em;\n\t\tposition: relative;\n\t\tword-wrap: break-word;\n\t}\n\n\t#console>*+* {\n\t\tmargin-top: .5em;\n\t}\n\n\t.console-entry>* {\n\t\tdisplay: block;\n\t}\n\n\t.console-entry .input { color: #3465a4; }\n\t.console-entry .output { color: #333; }\n\n\t.console-entry .input:before { content: '>> ' }\n\t.console-entry .output:before { content: '<- ' }\n\n\t#console-form {\n\t\tmargin: 0 .4em .4em .4em;\n\t}\n\n\t#console-input {\n\t\twidth: 100%;\n\t\tfont-size: inherit;\n\t}\n\n\t.token.tagname { font-weight: bold; }\n\t.token.attr, .token.builtin, .token.italic { font-style: italic; }\n\t.token.string { opacity: .8; }\n\t.token.keyword { color: #3465a4; }\n\t.token.bold, .token.punctuation, .token.operator { font-weight: bold; }\n\t</style>\n\t</div>\n\t`;\n\tHDB.prototype.ui = function () {\n\t\tvar node = document.createElement(\"div\");\n\t\tvar shadow = node.attachShadow({ mode: \"open\" });\n\t\tnode.style.cssText = \"all: initial\";\n\t\tshadow.innerHTML = ui;\n\t\tdocument.body.appendChild(node);\n\t\t_hyperscript.processNode(shadow.querySelector(\".hdb\"));\n\t};\n}\n"],"names":["mergeObjects","obj1","obj2","key","hasOwnProperty","getOrInitObject","root","prop","value","newObj","varargConstructor","Cls","args","bind","apply","concat","_hyperscript","globalScope","globalThis","ElementCollection","constructor","css","relativeToElement","escape","this","_css","_runtime","escapeSelector","className","substr","id","contains","elt","element","length","selectMatches","Symbol","iterator","getRootNode","querySelectorAll","_lexer","OP_TABLE","$","isValidCSSClassChar","c","isAlpha","isNumeric","isValidCSSIDChar","isWhitespace","isNewline","isIdentifierChar","dollarIsOp","makeTokensObject","tokens","consumed","source","consumeWhitespace","_lastConsumed","token","type","push","shift","raiseError","error","_parser","raiseParseError","matchOpToken","currentToken","op","consumeToken","matchTokenType","type1","type2","type3","type4","indexOf","matchToken","follows","match","consumeUntil","tokenList","n","dontIgnoreWhitespace","i","pushFollow","str","popFollow","pop","clearFollow","tmp","restoreFollow","f","matchAnyToken","op1","op2","op3","arguments","opToken","matchAnyOpToken","requireOpToken","requireTokenType","JSON","stringify","peekToken","peek","requireToken","list","hasMore","lastMatch","consumeUntilWhitespace","lastWhitespace","sourceFor","substring","startToken","start","endToken","end","lineFor","split","line","isValidSingleQuoteStringStart","previousToken","tokenize","string","template","position","column","lastToken","templateBraceCount","inTemplate","currentChar","nextChar","charAfterThat","possiblePrecedingSymbol","consumeAttributeReference","consumeShortAttributeReference","consumeStyleReference","consumeIdentifier","consumeNumber","consumeOp","makeToken","consumeChar","Error","consumeString","consumeIdReference","consumeClassReference","consumeComment","classRef","attributeRef","styleRef","idRef","identifier","number","makeOpToken","startChar","charAt","whitespace","GRAMMAR","COMMANDS","FEATURES","LEAF_EXPRESSIONS","INDIRECT_EXPRESSIONS","initElt","parseElement","programSource","elementDefinition","requireElement","message","result","parseAnyOf","types","expression","addGrammarElement","name","definition","lines","contextLine","repeat","createParserContext","commandStart","featureStart","parser","runtime","featureElement","featureDefinition","commandElement","commandDefinition","cmd","next","indirect","unless","context","conditional","execute","unifiedExec","parent","leaf","setParent","children","Set","add","commandBoundary","parseHyperScript","addCommand","keyword","commandGrammarType","commandDefinitionWrapper","meta","command","addFeature","featureGrammarType","featureDefinitionWrapper","isFeature","addLeafExpression","addIndirectExpression","parseStringTemplate","returnArr","startingBrace","ensureTerminated","commandList","implicitReturn","returned","resolve","HALT","ctx","CONVERSIONS","dynamicResolvers","Number","toFixed","num","parseInt","String","val","toString","Int","Float","parseFloat","Date","Array","from","Object","parse","matchesSelector","selector","matchesFunction","matches","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","call","triggerEvent","eventName","detail","sender","event","evt","Event","bubbles","cancelable","document","createEvent","initCustomEvent","makeEvent","dispatchEvent","isArrayLike","isArray","NodeList","HTMLCollection","shouldAutoIterate","forEach","func","isIterable","nth","unwrapAsyncs","values","asyncWrapper","j","valueElement","unifiedEval","async","wrappedAsyncs","argument","arr","evaluate","then","Promise","reject","arg","all","wrapArrays","e","catch","reason","_scriptAttrs","getScriptAttributes","config","attributes","replace","getScript","scriptAttribute","hasAttribute","getAttribute","HTMLScriptElement","innerText","hyperscriptFeaturesMap","WeakMap","getHyperscriptFeatures","hyperscriptFeatures","get","set","addFeatures","owner","parentElement","makeContext","feature","hyperscriptTarget","lexer","iterators","me","target","body","src","hyperscript","initElement","closest","disableSelector","internalData","getInternalData","initialized","script","hyperScript","setTimeout","console","stack","internalDataMap","getElementScope","scopeName","behavior","flatGet","property","getter","component","componentValue","typeCheck","typeString","nullOk","prototype","slice","implicitLoop","x","processNode","getScriptSelector","HyperscriptModule","EventTarget","mod","super","module","evaluateNoPromise","map","attribute","join","resolveSymbol","fromMetaContext","fromContext","setSymbol","elementScope","findNext","resolveNext","convertValue","converted","dynamicResolver","undefined","converter","handlingFinally","registerHyperTrace","errorHandler","handlingError","errorSymbol","currentException","resolvedNext","finallyHandler","onHalt","resolveProperty","resolveAttribute","resolveStyle","style","resolveComputedStyle","getComputedStyle","getPropertyValue","assignToNamespace","nameSpace","propertyName","newRoot","thrown","trace","caller","traceMap","Map","print","logger","maxLen","Math","max","displayName","traceElt","padEnd","getHyperTrace","nullCheck","isEmpty","doesExist","node","Node","rv","Document","ShadowRoot","getEventQueueFor","onFeature","eventQueuesForElt","eventQueues","eventQueueForFeature","queue","executing","hyperscriptUrl","import","url","expr","stringToken","rawValue","innerTokens","returnStr","tokenArr","t","numberToken","elementId","templateValue","getElementById","TemplatedQueryElementCollection","templateParts","elements","filter","Element","el","dataset","hsQueryId","removeAttribute","queryTokens","queryValue","outerVal","innerValue","beingTold","styleProp","startsWith","keyExpressions","valueExpressions","keys","returnVal","fields","_namedArgList_","scope","eltPrefix","booleanLiteral","arg1","_context","rootVal","childOfUrRoot","urRoot","attributeElt","propertyAccess","possessivesDisabled","apostrophe","targetElt","results","within","rootElt","conversion","functionCall","argExressions","rootRoot","hyperfunc","argVals","_ctx","andBefore","andAfter","firstIndex","secondIndex","arrayIndex","STRING_POSTFIXES","stringPosfix","postfix","timeFactor","time","factor","typeName","booped","originalEvaluate","logValue","log","scanForwardArray","array","wrap","first","sloppyContains","container","includes","sloppyMatches","toMatch","forwardSearch","thing","withinElt","inSearch","inElt","wrapping","operator","reverse","compareDocumentPosition","DOCUMENT_POSITION_PRECEDING","scanForwardQuery","DOCUMENT_POSITION_FOLLOWING","scanBackwardsQuery","rhs","rhsVal","floor","random","mathOp","initialMathOp","lhs","lhsVal","comparisonToken","hasRightValue","logicalOp","initialLogicalOp","features","install","parseEventArgs","parseSendCmd","cmdType","details","toExpr","sendCmd","to","every","events","startCountToken","startCount","endCountToken","endCount","unbounded","intersectionSpec","mutationSpec","elsewhere","inExpr","debounceTime","throttleTime","execCount","on","debounced","lastExec","queueLast","queueFirst","queueNone","eventQueueInfo","queued","err","hypertrace","eventSpec","targets","MutationObserver","mutationList","observer","observe","IntersectionObserver","entries","entry","isIntersecting","addEventListener","listener","isConnected","removeEventListener","eventValue","initialCtx","inElement","clearTimeout","now","nameVal","funcName","functionFeature","argumentVal","callingCommand","promise","theResolve","theReject","returnValue","hypername","setCmd","setFeature","initFeature","path","formalParams","hs","innerArgs","installFeature","behaviorPath","behaviorNamespace","Function","jsSourceStart","jsLastToken","funcNames","expectFunctionDeclaration","exposedFunctionNames","jsSource","jsBody","function","inputs","inp","input","actualResult","slot","tellCmd","index","originalBeingTold","lookahead","resolved","eventInfo","once","timeValue","separator","parseReturnFunction","returnAValue","returnCmd","keepExecuting","bubbling","haltDefault","exit","stopPropagation","preventDefault","exprs","withExpr","logCmd","throwCmd","parseCallOrGet","callCmd","tagname","classes","re","exec","trim","createElement","classList","lookAhead","realRoot","pseudoCommand","makeSetter","symbolWrite","attributeWrite","styleWrite","arrayWrite","valueToSet","setAttribute","setter","defaultCmd","obj","objectLiteral","trueBranch","falseBranch","ifCmd","exprValue","parseRepeatExpression","startedWithForToken","innerStartToken","identifierToken","whileExpr","isUntil","forever","times","indexIdentifier","loop","last","waitATick","repeatCmd","until","whileValue","iteratorInfo","keepLooping","loopVal","eventFired","nextValFromIterator","done","repeatInit","parseConversionInfo","targetExpr","implicitResultSymbol","innerHTML","amount","implicitIncrementOp","targetValue","newValue","implicitDecrementOp","conversionInfo","fetchCmd","argExpressions","abortController","AbortController","abortListener","abort","signal","finished","timeout","fetch","resp","resultDetails","response","json","text","finally","scripts","res","script_values","fn","metaConfig","querySelector","jString","msg","parseJSON","content","documentElement","readyState","PROXY_BLACKLIST","internals","defaultTransition","conversions","genUUID","r","createSocket","parsedUrl","finalUrl","basePart","window","location","hostname","port","protocol","parseUrl","WebSocket","onExpr","settleCommand","transitionStarted","cssDeclaration","classRefs","when","remove","attrRef","cssText","stringParts","opencurly","tok","part","idx","elementExpr","fromExpr","removeChild","visibility","hideShowStrategy","resolveStrategy","between","classRef2","toggleCmd","toggle","HIDE_SHOW_STRATEGIES","display","originalDisplay","removeProperty","opacity","parseShowHideTarget","currentTokenValue","configDefault","defaultHideShowStrategy","strategies","hideShowStrategies","putInto","valueToPut","HTMLDocument","firstChild","append","parsePseudopossessiveTarget","forExpr","forElt","eltColl","clazz","operationToken","operation","rootExpr","putCmd","before","after","prepend","targetsExpr","properties","over","using","transition","promises","initialTransition","computedStyles","initialStyles","initalStyles","fromVal","toVal","propsToMeasure","rect","getBoundingClientRect","scroll","top","scrollTop","left","scrollLeft","topMax","scrollTopMax","leftMax","scrollLeftMax","height","scrollHeight","width","scrollWidth","y","right","bottom","bounds","parentSearch","closestExpr","back","newWindow","verticalPosition","horizontalPosition","plusOrMinus","offset","smoothness","scrollOptions","block","inline","goCmd","history","open","href","boundingRect","scrollShim","finalOffset","zIndex","MIN_SAFE_INTEGER","appendChild","scrollIntoView","getInputInfo","appendValue","URLSearchParams","info","checked","selected","toHTML","item","HTMLElement","outerHTML","frag","createDocumentFragment","temp","web","invocationIdCounter","workerCode","self","onmessage","data","importScripts","extraScripts","postMessage","blob","Blob","workerUri","URL","createObjectURL","workerName","extraScript","absoluteUrl","bodyStartIndex","bodyEndIndex","bodyTokens","worker","Worker","workerPromise","stubs","returnListener","socketName","defaultTimeout","jsonMessages","messageHandler","socket","rpcProxy","getProxy","Proxy","uuid","rpcInfo","iid","send","socketObject","raw","rpc","socketFeature","dataAsJson","throw","return","urlElement","withCredentials","eventSourceName","stub","eventSource","listeners","retryCount","close","EventSource","CLOSED","min","handler","options","object","encoding","addImplicitReturnToCommandList","makeHandler","decode","template_","templateArgs","buf","assign","__ht_template_result","renderTemplate","p1","compileTemplate","escapeType","unescaped","HDB","breakpoint","cmdMap","bus","hdb","break","ui","attr","continueExec","stepOver","stepOut","logCommand","halt_flag","callingCmd","oldMe","skipTo","toCmd","rewrite","newCode","prev","newcmd","cmdSource","traverse","ge","recurse","child","shadow","attachShadow","mode"],"mappings":"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"}
\No newline at end of file