UNPKG

337 kBSource Map (JSON)View Raw
1{"version":3,"file":"_hyperscript_web.modern.js","sources":["../src/lib/utils.js","../src/lib/core.js","../src/lib/web.js","../src/web/_hyperscript_web.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","///=========================================================================\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\"\n\nweb(_hyperscript)\n\nexport default _hyperscript\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","internals","defaultTransition","conversions","onExpr","settleCommand","transitionStarted","r","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","window","history","open","location","href","boundingRect","scrollShim","finalOffset","zIndex","MIN_SAFE_INTEGER","appendChild","scrollIntoView","getInputInfo","appendValue","URLSearchParams","info","checked","selected","toHTML","item","HTMLElement","outerHTML","frag","createDocumentFragment","temp","web"],"mappings":"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"}
\No newline at end of file