@manyducks.co/dolla 2.0.0-alpha.29 → 2.0.0-alpha.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/context.d.ts +6 -0
- package/dist/core/nodes/view.d.ts +2 -1
- package/dist/core/store.d.ts +2 -1
- package/dist/index.js +415 -398
- package/dist/index.js.map +1 -1
- package/dist/jsx-dev-runtime.js +2 -2
- package/dist/jsx-runtime.js +2 -2
- package/dist/{passthrough-eH8w4zJi.js → passthrough-d2lcM0cd.js} +248 -196
- package/dist/passthrough-d2lcM0cd.js.map +1 -0
- package/package.json +1 -1
- package/dist/passthrough-eH8w4zJi.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"passthrough-d2lcM0cd.js","sources":["../node_modules/simple-color-hash/lib/index.js","../src/typeChecking.ts","../node_modules/fast-deep-equal/es6/index.js","../src/utils.ts","../node_modules/@manyducks.co/emitter/dist/emitter.js","../src/core/stats.ts","../src/core/symbols.ts","../src/core/state.ts","../src/core/ref.ts","../src/core/context.ts","../src/core/store.ts","../node_modules/htm/mini/index.module.js","../src/core/nodes/dom.ts","../src/core/nodes/html.ts","../src/core/nodes/observer.ts","../src/core/nodes/outlet.ts","../src/core/nodes/portal.ts","../src/core/nodes/view.ts","../src/core/nodes/repeat.ts","../src/core/markup.ts","../src/views/passthrough.ts"],"sourcesContent":["\"use strict\";Object.defineProperty(exports,\"__esModule\",{value:!0});var _slicedToArray=function(){function a(a,b){var c=[],d=!0,e=!1,f=void 0;try{for(var g,h=a[Symbol.iterator]();!(d=(g=h.next()).done)&&(c.push(g.value),!(b&&c.length===b));d=!0);}catch(a){e=!0,f=a}finally{try{!d&&h[\"return\"]&&h[\"return\"]()}finally{if(e)throw f}}return c}return function(b,c){if(Array.isArray(b))return b;if(Symbol.iterator in Object(b))return a(b,c);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")}}(),rgbToHex=function(a){return a.reduce(function(a,b){return 16>b?a+\"0\"+b.toString(16):a+b.toString(16)},\"#\")},hslToRgb=function(a,b,c){var d=.5>c?c*(1+b):c+b-c*b,e=2*c-d,f=function(a,b,c){var d=Math.round,e=0>c?c+1:1<c?c-1:c;return e=e<1/6?a+6*(b-a)*e:e<1/2?b:e<2/3?a+6*(b-a)*(2/3-e):a,d(255*e)},g=f(e,d,a+1/3),h=f(e,d,a),i=f(e,d,a-1/3);return[g,h,i]},hslGeneration=function(a,b,c,d){var e=a%1007/1007,f=function(a,b,c){return a*(c-b)+b},g=f(e,b.min,b.max),h=f(e,c.min,c.max),i=f(e,d.max,d.min);// 1007 is a prime\nreturn[g,h,i]},standardHashFunction=function(a){return a.split(\"\").reduce(function(a,b,c){return a*b.charCodeAt(0)*c+1},1)},generateColorHash=function(a){var b=a.str,c=a.hue,d=c===void 0?{min:0,max:360}:c,e=a.sat,f=e===void 0?{min:.35,max:.65}:e,g=a.light,h=g===void 0?{min:.3,max:.7}:g,i=a.hashFunction,j=i===void 0?standardHashFunction:i,k=a.scheme,l=k===void 0?\"hex\":k,m=hslGeneration(j(b),d,f,h),n=_slicedToArray(m,3),o=n[0],p=n[1],q=n[2],r=hslToRgb(o/360,p,q),s=rgbToHex(r);if(\"hsl\"===l)return[o,p,q];return\"rgb\"===l?r:s};/**\n *\n * @param {Array} RGBArray\n *//**\n *\n * @param {number} H Hue\n * @param {number} S Saturation\n * @param {number} L Lightness\n *//**\n *\n * @param {string} hash generated hash\n * @param {number} hue Hue\n * @param {number} sat Saturation\n * @param {number} light Lightness\n *//**\n *\n * @param {string} str string to hash\n *//**\n *\n * @param {Object} {\n * str: String to be hashed,\n * hue: { min, max } values (in deg)\n * sat: { min, max } values (0 to 1)\n * light: { min, max } values (0 to 1),\n * hashFunction: Custom hash function,\n * scheme: return scheme\n * }\n */exports.default=generateColorHash,module.exports=exports.default;","type TypeNames =\n // These values can be returned by `typeof`.\n | \"string\"\n | \"number\"\n | \"bigint\"\n | \"boolean\"\n | \"symbol\"\n | \"undefined\"\n | \"object\"\n | \"function\"\n // These values are more specific ones that `Type.of` can return.\n | \"null\"\n | \"array\"\n | \"class\"\n | \"promise\"\n | \"map\"\n | \"set\"\n | \"NaN\";\n\n/**\n * Extends `typeof` operator with more specific and useful type distinctions.\n */\nexport function typeOf(value: any): TypeNames {\n const type = typeof value;\n switch (type) {\n case \"undefined\":\n return type;\n case \"number\":\n if (isNaN(value as any)) return \"NaN\";\n return type;\n case \"function\":\n if (/^\\s*class\\s+/.test(value.toString())) return \"class\";\n return type;\n case \"object\":\n if (value === null) return \"null\";\n if (value instanceof Promise) return \"promise\";\n if (value instanceof Map) return \"map\";\n if (value instanceof Set) return \"set\";\n if (Array.isArray(value)) return \"array\";\n return type;\n default:\n return type;\n }\n}\n\n/**\n * Throws a TypeError unless `condition` is truthy.\n *\n * @param condition - Value whose truthiness is in question.\n * @param errorMessage - Optional message for the thrown TypeError.\n */\nexport function assert(condition: any, errorMessage?: string): void {\n if (!condition) {\n throw new TypeError(\n formatError(condition, errorMessage || \"Failed assertion. Value is not truthy. Got type: %t, value: %v\"),\n );\n }\n}\n\n/**\n * Returns true if `value` is an array.\n */\nexport function isArray(value: unknown): value is Array<unknown> {\n return Array.isArray(value);\n}\n\n/**\n * Throws an error if `value` is not an array.\n */\nexport function assertArray(value: unknown, errorMessage?: string): value is Array<unknown> {\n if (isArray(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage || \"Expected array. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns a function that takes a `value` and ensures that it is an array for which `check` returns true for every item.\n *\n * @param check - Function to check items against.\n */\nexport function isArrayOf<T>(check: (item: unknown) => boolean): (value: unknown) => value is T[];\n\n/**\n * Returns true when `value` is an array and `check` returns true for every item.\n *\n * @param check - Function to check items against.\n * @param value - A possible array.\n */\nexport function isArrayOf<T>(check: (item: unknown) => boolean, value: unknown): value is T[];\n\nexport function isArrayOf<T>(...args: unknown[]) {\n const check = args[0] as (item: unknown) => boolean;\n\n const test = (value: unknown): value is T[] => {\n return isArray(value) && value.every((item) => check(item));\n };\n\n if (args.length < 2) {\n return test;\n } else {\n return test(args[1]);\n }\n}\n\n/**\n * Returns a function that takes a `value` and throws a TypeError unless it is an array for which `check` returns true for every item.\n *\n * @param check - Function to check items against.\n */\nexport function assertArrayOf<T>(check: (item: unknown) => boolean): (value: unknown) => value is T[];\n\n/**\n * Throws a TypeError unless `value` is an array and `check` returns true for every item.\n *\n * @param check - Function to check items against.\n * @param value - A possible array.\n * @param errorMessage - A custom error message.\n */\nexport function assertArrayOf<T>(\n check: (item: unknown) => boolean,\n value: unknown,\n errorMessage?: string,\n): value is T[];\n\nexport function assertArrayOf<T>(...args: unknown[]) {\n const check = args[0] as (item: unknown) => boolean;\n const message = isString(args[2]) ? args[2] : \"Expected an array of valid items. Got type: %t, value: %v\";\n\n const test = (value: unknown): value is T[] => {\n if (isArray(value) && value.every((item) => check(item))) {\n return true;\n }\n\n throw new TypeError(formatError(value, message));\n };\n\n if (args.length < 2) {\n return test;\n } else {\n return test(args[1]);\n }\n}\n\n/**\n * Returns true if `value` is equal to `true` or `false`.\n */\nexport function isBoolean(value: unknown): value is boolean {\n return value === true || value === false;\n}\n\n/**\n * Throws a TypeError unless `value` is equal to `true` or `false`.\n */\nexport function assertBoolean(value: unknown, errorMessage?: string): value is boolean {\n if (isBoolean(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a boolean. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is a string.\n */\nexport function isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\n/**\n * Throws a TypeError unless `value` is a string.\n */\nexport function assertString(value: unknown, errorMessage?: string): value is string {\n if (isString(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a string. Got type: %t, value: %v\"));\n}\n\n// TODO: More specific validation for common types of strings? Email address, URL, UUID, etc?\n\n/**\n * Returns true if `value` is a function (but not a class).\n */\nexport function isFunction<T = (...args: unknown[]) => unknown>(value: unknown): value is T {\n return typeof value === \"function\" && !isClass(value);\n}\n\n/**\n * Throws a TypeError unless `value` is a function.\n */\nexport function assertFunction<T = (...args: unknown[]) => unknown>(value: unknown, errorMessage?: string): value is T {\n if (isFunction(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a function. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is a number.\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === \"number\" && !isNaN(value);\n}\n\n/**\n * Throws a TypeError unless `value` is a number.\n */\nexport function assertNumber(value: unknown, errorMessage?: string): value is number {\n if (isNumber(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a number. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` implements the Promise protocol.\n * This matches true instances of Promise as well as any object that\n * implements `next`, `catch` and `finally` methods.\n *\n * To strictly match instances of Promise, use `isInstanceOf(Promise)`.\n */\nexport function isPromise<T = unknown>(value: unknown): value is Promise<T> {\n if (value == null) return false;\n\n const obj = value as any;\n\n return obj instanceof Promise || (isFunction(obj.then) && isFunction(obj.catch) && isFunction(obj.finally));\n}\n\n/**\n * Throws a TypeError unless `value` implements the Promise protocol.\n * This matches true instances of Promise as well as any object that\n * implements `next`, `catch` and `finally` methods.\n *\n * To strictly allow only instances of Promise, use `Type.assertInstanceOf(Promise)`.\n */\nexport function assertPromise<T = unknown>(value: unknown, errorMessage?: string): value is Promise<T> {\n if (isPromise(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a promise. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is a class.\n */\nexport function isClass(value: unknown): value is { new (): unknown } {\n return typeof value === \"function\" && /^\\s*class\\s+/.test(value.toString());\n}\n\n/**\n * Throws a TypeError unless `value` is a class.\n */\nexport function assertClass(value: unknown, errorMessage?: string): value is { new (): unknown } {\n if (isClass(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a class. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns a function that takes a `value` and returns true if `value` is an instance of `constructor`.\n *\n * @param constructor - The constructor a value must be an instance of to match.\n */\nexport function isInstanceOf<T extends Function>(constructor: T): (value: unknown) => value is T;\n\n/**\n * Returns `true` if `value` is an instance of `constructor`.\n *\n * @param constructor - The constructor `value` must be an instance of.\n * @param value - A value that may be an instance of `constructor`.\n */\nexport function isInstanceOf<T extends Function>(constructor: T, value: unknown): value is T;\n\nexport function isInstanceOf<T extends Function>(...args: unknown[]) {\n const constructor = args[0] as T;\n\n const test = (value: unknown): value is T => {\n return value instanceof constructor;\n };\n\n if (args.length < 2) {\n return test;\n } else {\n return test(args[1]);\n }\n}\n\n/**\n * Returns a function that takes a `value` and throws a TypeError unless `value` is an instance of `constructor`.\n *\n * @param constructor - The constructor a value must be an instance of to match.\n */\nexport function assertInstanceOf<T extends Function>(constructor: T): (value: unknown) => value is T;\n\n/**\n * Throws a TypeError unless `value` is an instance of `constructor`.\n *\n * @param constructor - The constructor `value` must be an instance of.\n * @param value - A value that may be an instance of `constructor`.\n * @param errorMessage - A custom error message for when the assertion fails.\n */\nexport function assertInstanceOf<T extends Function>(constructor: T, value: unknown, errorMessage?: string): value is T;\n\nexport function assertInstanceOf<T extends Function>(...args: unknown[]) {\n const constructor = args[0] as T;\n const errorMessage = isString(args[2])\n ? args[2]\n : `Expected instance of ${constructor.name}. Got type: %t, value: %v`;\n\n const test = (value: unknown): value is T => {\n if (value instanceof constructor) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage));\n };\n\n if (args.length < 2) {\n return test;\n } else {\n return test(args[1]);\n }\n}\n\n/**\n * Returns true if `value` is a Map.\n */\nexport function isMap<K = unknown, V = unknown>(value: any): value is Map<K, V> {\n return value instanceof Map;\n}\n\n/**\n * Throws a TypeError unless `value` is a Map.\n */\nexport function assertMap<K = unknown, V = unknown>(value: any, errorMessage?: string): value is Map<K, V> {\n if (isMap(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a Map. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is a Set.\n */\nexport function isSet<T = unknown>(value: any): value is Set<T> {\n return value instanceof Set;\n}\n\n/**\n * Throws a TypeError if `value` is not a Set.\n */\nexport function assertSet<T = unknown>(value: any, errorMessage?: string): value is Set<T> {\n if (isSet(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected a Set. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` implements the Iterable protocol.\n */\nexport function isIterable<T>(value: any): value is Iterable<T> {\n if (value == null) {\n return false;\n }\n\n // Must have a [Symbol.iterator] function that returns an iterator.\n if (!isFunction(value[Symbol.iterator])) {\n return false;\n }\n\n const iterator = value[Symbol.iterator]();\n\n // Iterator must implement the iterator protocol.\n if (!isFunction(iterator.next)) {\n return false;\n }\n\n // We have to assume next() returns the correct object.\n // We can't call it to make sure because we don't want to cause side effects.\n return true;\n}\n\n/**\n * Throws a TypeError unless `value` implements the Iterable protocol.\n */\nexport function assertIterable<T>(value: any, errorMessage?: string): value is Iterable<T> {\n if (isIterable(value)) {\n return true;\n }\n\n throw new TypeError(\n formatError(\n value,\n errorMessage ?? \"Expected an object that implements the iterable protocol. Got type: %t, value: %v\",\n ),\n );\n}\n\n/**\n * Returns true if `value` is a plain JavaScript object.\n */\nexport function isObject(value: unknown): value is Record<string | number | symbol, unknown> {\n return value != null && typeof value === \"object\" && !isArray(value);\n}\n\n/**\n * Throws a TypeError unless `value` is a plain JavaScript object.\n */\nexport function assertObject(value: unknown, errorMessage?: string): value is object {\n if (isObject(value)) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected an object. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is equal to `null`.\n */\nexport function isNull(value: unknown): value is null {\n return value === null;\n}\n\n/**\n * Throws a TypeError unless `value` is equal to `null`.\n */\nexport function assertNull(value: unknown, errorMessage?: string): value is null {\n if (value === null) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected null. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is equal to `undefined`.\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\n/**\n * Throws a TypeError unless `value` is equal to `undefined`.\n */\nexport function assertUndefined(value: unknown, errorMessage?: string): value is undefined {\n if (value === undefined) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected undefined. Got type: %t, value: %v\"));\n}\n\n/**\n * Returns true if `value` is equal to `null` or `undefined`.\n */\nexport function isEmpty(value: unknown): value is void {\n return value === null || value === undefined;\n}\n\n/**\n * Throws a TypeError unless `value` is equal to `null` or `undefined`.\n */\nexport function assertEmpty(value: unknown, errorMessage?: string): value is void {\n if (value == null) {\n return true;\n }\n\n throw new TypeError(formatError(value, errorMessage ?? \"Expected null or undefined. Got type: %t, value: %v\"));\n}\n\n/**\n * Replaces `%t` and `%v` placeholders in a message with real values.\n */\nfunction formatError(value: unknown, message: string) {\n const typeName = typeOf(value);\n\n // TODO: Pretty format value as string based on type.\n const valueString = value?.toString?.() || String(value);\n\n return message.replaceAll(\"%t\", typeName).replaceAll(\"%v\", valueString);\n}\n","'use strict';\n\n// do not edit .js files directly - edit src/index.jst\n\n\n var envHasBigInt64Array = typeof BigInt64Array !== 'undefined';\n\n\nmodule.exports = function equal(a, b) {\n if (a === b) return true;\n\n if (a && b && typeof a == 'object' && typeof b == 'object') {\n if (a.constructor !== b.constructor) return false;\n\n var length, i, keys;\n if (Array.isArray(a)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (!equal(a[i], b[i])) return false;\n return true;\n }\n\n\n if ((a instanceof Map) && (b instanceof Map)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n for (i of a.entries())\n if (!equal(i[1], b.get(i[0]))) return false;\n return true;\n }\n\n if ((a instanceof Set) && (b instanceof Set)) {\n if (a.size !== b.size) return false;\n for (i of a.entries())\n if (!b.has(i[0])) return false;\n return true;\n }\n\n if (ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n length = a.length;\n if (length != b.length) return false;\n for (i = length; i-- !== 0;)\n if (a[i] !== b[i]) return false;\n return true;\n }\n\n\n if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();\n if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();\n\n keys = Object.keys(a);\n length = keys.length;\n if (length !== Object.keys(b).length) return false;\n\n for (i = length; i-- !== 0;)\n if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n\n for (i = length; i-- !== 0;) {\n var key = keys[i];\n\n if (!equal(a[key], b[key])) return false;\n }\n\n return true;\n }\n\n // true if both NaN, false otherwise\n return a!==a && b!==b;\n};\n","import colorHash from \"simple-color-hash\";\nimport { isFunction, isObject, typeOf } from \"./typeChecking.js\";\nimport _deepEqual from \"fast-deep-equal/es6\";\n\nexport const noOp = () => {};\n\n// Guarantee unique ID by incrementing a global counter.\nlet idCounter = 1;\nexport function getUniqueId() {\n idCounter = (idCounter % Number.MAX_SAFE_INTEGER) + 1;\n return idCounter.toString(36) + Date.now().toString(36);\n}\n\n/*=============================*\\\n|| Object Equality ||\n\\*=============================*/\n\n/**\n * Equality check that passes if both values are the same object.\n * This is the default equality check for states.\n */\nexport function strictEqual(a: any, b: any): boolean {\n return Object.is(a, b);\n}\n\n/**\n * Equality check that passes if both values are the same object, or if both are objects or arrays with equal keys and values.\n */\nexport function shallowEqual(a: any, b: any): boolean {\n if (Object.is(a, b)) return true;\n\n // Must be same type\n const t = typeOf(a);\n if (t !== typeOf(b)) {\n return false;\n }\n\n switch (t) {\n case \"object\":\n // Objects must have same number of keys with strict equal values\n let size = 0;\n for (const key in a) {\n if (a[key] !== b[key]) return false;\n size++;\n }\n return Object.keys(b).length === size;\n case \"array\":\n // Arrays must be the same length with strict equal values\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n case \"map\":\n if (a.size !== b.size) return false;\n for (const key of a.keys()) {\n if (a[key] !== b[key]) return false;\n }\n return true;\n case \"set\":\n if (isFunction(a.symmetricDifference)) {\n return a.symmetricDifference(b).size === 0;\n } else {\n for (const key of a.keys()) {\n if (a[key] !== b.get(key)) return false;\n }\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Equality check that passes if two objects have equal values, even if they are not the same object.\n */\nexport const deepEqual = _deepEqual;\n\n/*=============================*\\\n|| Object Utils ||\n\\*=============================*/\n\n/**\n * Takes an old value and a new value. Returns a merged copy if both are objects, otherwise returns the new value.\n */\nexport function merge(one: unknown, two: unknown) {\n if (isObject(one)) {\n if (!isObject(two)) {\n return two;\n }\n\n const merged = Object.assign({}, one) as any;\n\n for (const key in two) {\n merged[key] = merge(merged[key], two[key]);\n }\n\n return merged;\n } else {\n return two;\n }\n}\n\n/**\n * Returns a new object without the specified keys.\n * If called without object, returns a function that takes an object\n * and returns a version with the original keys omitted.\n *\n * @param keys - An array of keys to omit.\n * @param object - An object to clone without the omitted keys.\n */\nexport function omit<O extends Record<any, any>>(keys: (keyof O)[], object: O): Record<any, any> {\n const process = (object: Record<any, any>) => {\n const newObject: Record<any, any> = {};\n\n for (const key in object) {\n if (!keys.includes(key)) {\n newObject[key] = object[key];\n }\n }\n\n return newObject;\n };\n\n if (object == null) {\n return process;\n }\n\n return process(object);\n}\n\n/*=============================*\\\n|| Object Utils ||\n\\*=============================*/\n\nexport function colorFromString(value: string) {\n return colorHash({\n str: value,\n sat: { min: 0.35, max: 0.55 },\n light: { min: 0.6, max: 0.6 },\n });\n}\n\nexport type MatcherFunction = (value: string) => boolean;\n\n/**\n * Parses a filter string into a matcher function.\n *\n * @param pattern - A string or regular expression that specifies a pattern for names of loggers whose messages you want to display.\n */\nexport function createMatcher(pattern: string | RegExp): MatcherFunction {\n if (pattern instanceof RegExp) {\n return (value: string) => pattern.test(value);\n }\n\n const matchers: Record<\"positive\" | \"negative\", MatcherFunction[]> = {\n positive: [],\n negative: [],\n };\n\n const parts = pattern\n .split(\",\")\n .map((p) => p.trim())\n .filter((p) => p !== \"\");\n\n for (let part of parts) {\n let section: \"positive\" | \"negative\" = \"positive\";\n\n if (part.startsWith(\"-\")) {\n section = \"negative\";\n part = part.slice(1);\n }\n\n if (part === \"*\") {\n matchers[section].push(function () {\n return true;\n });\n } else if (part.endsWith(\"*\")) {\n matchers[section].push(function (value) {\n return value.startsWith(part.slice(0, part.length - 1));\n });\n } else {\n matchers[section].push(function (value) {\n return value === part;\n });\n }\n }\n\n return function (name: string) {\n const { positive, negative } = matchers;\n\n // Matching any negative matcher disqualifies.\n if (negative.some((fn) => fn(name))) {\n return false;\n }\n\n // Matching at least one positive matcher is required if any are specified.\n if (positive.length > 0 && !positive.some((fn) => fn(name))) {\n return false;\n }\n\n return true;\n };\n}\n","var f = Object.defineProperty;\nvar c = (e, t, r) => t in e ? f(e, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : e[t] = r;\nvar l = (e, t, r) => c(e, typeof t != \"symbol\" ? t + \"\" : t, r);\nclass p {\n constructor() {\n l(this, \"_l\", /* @__PURE__ */ new Map());\n l(this, \"_a\", (t) => {\n if (typeof t != \"string\" && !(t instanceof Symbol))\n throw new TypeError(\"Emitter: eventName should be a string or symbol\");\n });\n }\n emit(t, ...r) {\n let s = this.listeners(t);\n for (const n of s)\n try {\n n(...r);\n } catch (o) {\n let i = this._l.get(\"error\");\n if (i != null && i.length)\n for (const h of i)\n h(o, t, n, ...r);\n else throw o;\n }\n return t != \"*\" && this.emit(\"*\", t, ...r) || s.length > 0;\n }\n on(t, r) {\n return this.listeners(t).push(r), this;\n }\n off(t, r) {\n const s = this.listeners(t);\n return s.splice(s.indexOf(r), 1), this;\n }\n once(t, r) {\n return this.on(t, (...s) => {\n r(...s), this.off(t, r);\n });\n }\n clear() {\n this._l.clear();\n }\n listeners(t) {\n return this._l.get(t) ?? (this._a(t), this._l.set(t, []).get(t));\n }\n events() {\n return [...this._l.entries()].filter(([, t]) => t.length).map(([t]) => t);\n }\n}\nexport {\n p as Emitter\n};\n//# sourceMappingURL=emitter.js.map\n","import { Emitter } from \"@manyducks.co/emitter\";\nimport type { Dolla } from \"./dolla\";\n\ninterface StatsStore {\n emitter: Emitter<StatsStoreEvents>;\n stats: {\n watcherCount: number;\n viewCount: number;\n };\n}\n\ntype StatsStoreEvents = {\n /**\n * Emitted when any stats are updated in the store.\n */\n statsChanged: [];\n\n _incrementWatcherCount: [amount: number];\n _incrementViewCount: [amount: number];\n};\n\n/**\n * Tracks runtime statistics.\n */\nexport class Stats {\n // #dolla;\n #logger;\n #store;\n\n constructor(dolla: Dolla) {\n // this.#dolla = dolla;\n this.#logger = dolla.createLogger(\"Dolla.stats\");\n this.#store = _getStore();\n\n let timeout: any;\n\n this.#store.emitter.on(\"statsChanged\", () => {\n if (timeout) {\n clearTimeout(timeout);\n }\n timeout = setTimeout(() => {\n this.#logger.info(this.#store.stats);\n }, 200);\n });\n }\n}\n\n/*========================*\\\n|| Internal Functions ||\n\\*========================*/\n\nconst key = Symbol.for(\"DollaStatsStore\");\n\nexport function _createStore(): StatsStore {\n const emitter = new Emitter<StatsStoreEvents>();\n const stats = {\n watcherCount: 0,\n viewCount: 0,\n };\n\n emitter.on(\"_incrementViewCount\", (amount) => {\n stats.viewCount += amount;\n emitter.emit(\"statsChanged\");\n });\n\n emitter.on(\"_incrementWatcherCount\", (amount) => {\n stats.watcherCount += amount;\n emitter.emit(\"statsChanged\");\n });\n\n return { emitter, stats };\n}\n\nexport function _getStore(): StatsStore {\n // Attempt to load/setup global store.\n\n if (typeof window !== \"undefined\") {\n if (!(window as any)[key]) {\n (window as any)[key] = _createStore();\n }\n return (window as any)[key];\n } else {\n // If we hit this, we're not in a browser. Probably server-side or a test environment.\n return _createStore();\n }\n}\n\nexport function _onWatcherAdded() {\n _getStore().emitter.emit(\"_incrementWatcherCount\", 1);\n}\n\nexport function _onWatcherRemoved() {\n _getStore().emitter.emit(\"_incrementWatcherCount\", -1);\n}\n\nexport function _onViewMounted() {\n _getStore().emitter.emit(\"_incrementViewCount\", 1);\n}\n\nexport function _onViewUnmounted() {\n _getStore().emitter.emit(\"_incrementViewCount\", -1);\n}\n","// Type symbols; these are used by isState, isRef, etc. functions to quickly check if a value is the expected object.\nexport const IS_STATE = Symbol.for(\"DollaState\");\nexport const IS_REF = Symbol.for(\"DollaRef\");\nexport const IS_MARKUP = Symbol.for(\"DollaMarkup\");\nexport const IS_MARKUP_ELEMENT = Symbol.for(\"DollaMarkupElement\");\n// export const IS_VIEW_TEMPLATE = Symbol.for(\"DollaViewTemplate\");\nexport const IS_STORE = Symbol.for(\"DollaStore\");\nexport const IS_STORE_FACTORY = Symbol.for(\"DollaStoreFactory\");\n","import { noOp, strictEqual } from \"../utils\";\nimport { _onWatcherAdded, _onWatcherRemoved } from \"./stats\";\nimport { IS_STATE } from \"./symbols\";\n\n/*==============================*\\\n|| Types ||\n\\*==============================*/\n\n/**\n * Stops the observer that created it when called.\n */\nexport type StopFunction = () => void;\n\ntype Unwrapped<T> = T extends State<infer V> ? V : T;\n\n/**\n * Extracts value types from an array of states.\n */\nexport type StateValues<T extends MaybeState<any>[]> = {\n [K in keyof T]: Unwrapped<T[K]>;\n};\n\nexport interface CreateStateOptions<T> {\n /**\n * Determines if the `next` value is equal to the `current` value.\n * If this function returns true, watchers will be notified of changes. If it returns false, watchers will not be notified.\n * Default equals check is `===` (strict) equality.\n *\n * @param next - The new value being set.\n * @param current - The current value being replaced.\n */\n equals?: (next: T, current: T) => boolean;\n}\n\nexport interface WatchOptions<T> {\n /**\n * If true the watch callback will be called for the first time on the next change.\n * Callback is immediately called with the state's current value by default.\n */\n lazy?: boolean;\n}\n\nexport interface State<T> {\n /**\n * Returns the current value.\n */\n get(): T;\n\n /**\n * Watch this state's value with a `callback` function.\n * The `callback` is only called if the value is not equal to the current value.\n *\n * > NOTE: If watching a state inside a view, use the `.watch` method on the `ViewContext`. That method will automatically\n * clean up all watchers when the view is disconnected. Watchers created here must be cleaned up manually.\n */\n watch(callback: (value: T) => void, options?: WatchOptions<T>): StopFunction;\n}\n\n/** A new value for a state, or a callback that receives the current value and returns a new one. */\nexport type SetAction<I, O = I> = O | SetFunction<I, O>;\nexport type SetFunction<I, O = I> = (current: I) => O;\n\n/** Callback that updates the value of a state. */\nexport type Setter<I, O = I> = (value: SetAction<I, O>) => void;\n\nexport type MaybeState<T> = State<T> | T;\n\n/*==============================*\\\n|| Utils ||\n\\*==============================*/\n\nexport function isState<T>(value: any): value is State<T> {\n return value?.[IS_STATE] === true;\n}\n\n/**\n * Retrieves a plain value from a variable that may be a state.\n */\nexport function toValue<T>(source: MaybeState<T>): T {\n if (isState(source)) {\n return source.get();\n } else {\n return source;\n }\n}\n\n/**\n * Ensures a variable that may be a state or plain value is a state.\n */\nexport function toState<T>(value: MaybeState<T>): State<T> {\n if (isState<T>(value)) {\n return value;\n } else {\n return new Signal({\n get() {\n return value;\n },\n watch(callback, options = {}) {\n if (!options?.lazy) {\n callback(value);\n }\n return noOp;\n },\n });\n }\n}\n\n/*==============================*\\\n|| State ||\n\\*==============================*/\n\n/**\n * ValueHolder implements the core functionality of a State.\n * It holds a value, which can be retrieved with `get`, updated with `set` and observed with `watch`.\n * The user-facing API splits up access into a read-only State and a setter function.\n */\nexport class ValueHolder<T> implements State<T> {\n value: T;\n watchers: ((value: T) => void)[] = [];\n equals = strictEqual;\n\n constructor(value: T, options?: CreateStateOptions<T>) {\n this.value = value;\n if (options?.equals) {\n this.equals = options.equals;\n }\n }\n\n get() {\n return this.value;\n }\n\n set(action: T | SetFunction<T>) {\n if (typeof action === \"function\") {\n action = (action as SetFunction<T>)(this.value);\n }\n\n if (!this.equals(action, this.value)) {\n this.value = action;\n\n try {\n for (const watcher of this.watchers) {\n watcher(action);\n }\n } catch (err) {\n console.error(\"Error in watcher\", err);\n throw err;\n }\n }\n }\n\n watch(callback: (value: T) => void, options?: WatchOptions<T>) {\n this.watchers.push(callback);\n\n if (!options?.lazy) {\n callback(this.value);\n }\n\n _onWatcherAdded();\n\n return () => {\n const index = this.watchers.indexOf(callback);\n if (index > -1) {\n this.watchers.splice(index, 1);\n }\n\n _onWatcherRemoved();\n };\n }\n}\n\n/**\n * Signal is the implementation of a read-only State.\n */\nexport class Signal<T> implements State<T> {\n [IS_STATE] = true;\n\n __value;\n\n constructor(value: State<T>) {\n this.__value = value;\n }\n\n get() {\n return this.__value.get();\n }\n\n watch(callback: (value: T) => void, options?: WatchOptions<T>) {\n return this.__value.watch(callback, options);\n }\n}\n\n/**\n * Creates a state and setter.\n */\nexport function createState<T>(value: T, options?: CreateStateOptions<T>): [State<T>, Setter<T>];\n\n/**\n * Creates a state and setter.\n */\nexport function createState<T>(\n value?: T,\n options?: CreateStateOptions<T | undefined>,\n): [State<T | undefined>, Setter<T | undefined>];\n\n/**\n * Creates a state and setter.\n */\nexport function createState<T>(value: T, options?: CreateStateOptions<T>): [State<T>, Setter<T>] {\n const holder = new ValueHolder(value, options);\n const signal = new Signal(holder);\n\n return [signal, (action) => holder.set(action)];\n}\n\n/*==============================*\\\n|| Derived States ||\n\\*==============================*/\n\nconst EMPTY = Symbol(\"EMPTY\");\n\nclass DerivedValueHolder<I extends MaybeState<any>[], O> implements State<O> {\n equals = strictEqual;\n\n /**\n * Array of states this holder's value is derived from.\n */\n sources: State<any>[] = [];\n /**\n * The function that does the deriving. Receives source values and returns a derived value.\n */\n fn: (...values: StateValues<I>) => MaybeState<O>;\n /**\n *\n */\n sourceWatcher = createWatcher();\n /**\n * Array of functions awaiting notification when this holder's value changes.\n */\n watchers: ((value: O) => void)[] = [];\n /**\n * True when this holder is actively watching sources.\n */\n isWatchingSources = false;\n\n /**\n * Latest values as received from sources.\n */\n previousSourceValues: StateValues<I>;\n\n /**\n * The current value as returned from `fn` (may be a State)\n */\n value: typeof EMPTY | MaybeState<O> = EMPTY;\n /**\n * The current unwrapped value.\n */\n rawValue!: O;\n\n /**\n * When value is a State, this function will stop watching its value.\n */\n stopWatchingCurrentValue?: StopFunction;\n\n constructor(states: [...I], fn: (...values: StateValues<I>) => MaybeState<O>, options?: DeriveOptions) {\n this.sources = states.map(toState);\n this.fn = fn;\n\n if (options?.equals) {\n this.equals = options.equals;\n }\n\n this.previousSourceValues = new Array(states.length).fill(EMPTY, 0, states.length) as StateValues<I>;\n }\n\n /*==========================*\\\n || \"Public\" methods ||\n \\*==========================*/\n\n get(): O {\n return this.getValue();\n }\n\n watch(callback: (value: O) => void, options?: WatchOptions<O>): StopFunction {\n if (!this.isWatchingSources) {\n this.startWatchingSources();\n }\n\n const watchers = this.watchers;\n\n watchers.push(callback);\n\n if (!options?.lazy) {\n callback(this.rawValue);\n }\n\n _onWatcherAdded();\n\n return () => {\n watchers.splice(watchers.indexOf(callback), 1);\n\n if (this.isWatchingSources && watchers.length === 0) {\n this.stopWatchingSources();\n }\n\n _onWatcherRemoved();\n };\n }\n\n /*==========================*\\\n || Internal ||\n \\*==========================*/\n\n notify(value: O) {\n for (const watcher of this.watchers) {\n watcher(value);\n }\n }\n\n update() {\n const sources = this.sources;\n const sourceValues = this.previousSourceValues;\n let changed = false;\n let value: any;\n\n for (let i = 0; i < sources.length; i++) {\n value = sources[i].get();\n if (!changed && !this.equals(value, sourceValues[i])) {\n changed = true;\n }\n sourceValues[i] = value;\n }\n\n // We are assuming purity of `fn`, wherein a change in source values means a different output and vice versa.\n if (changed) {\n this.setValue(this.fn(...sourceValues));\n }\n }\n\n getValue() {\n // Current value will always be up to date when watching sources.\n if (!this.isWatchingSources) {\n this.update();\n }\n return this.rawValue;\n }\n\n setValue(value: O | State<O>) {\n // Stop watching current value if it was a state.\n if (this.stopWatchingCurrentValue) {\n this.stopWatchingCurrentValue();\n this.stopWatchingCurrentValue = undefined;\n }\n\n this.value = value;\n this.rawValue = toValue(value);\n\n if (this.isWatchingSources && isState(value)) {\n this.stopWatchingCurrentValue = value.watch((current) => {\n this.rawValue = current;\n this.notify(current);\n });\n } else {\n this.notify(this.rawValue);\n }\n }\n\n startWatchingSources() {\n const sourceValues = this.previousSourceValues;\n\n for (let i = 0; i < this.sources.length; i++) {\n this.sourceWatcher.watch([this.sources[i] as State<any>], (next) => {\n sourceValues[i] = next;\n\n // This boolean is set after all sources have been watched.\n // We want to update previousSourceValues, but not actually run `fn` yet.\n if (this.isWatchingSources) {\n const value = this.fn(...sourceValues);\n if (!this.equals(value, this.value)) {\n this.setValue(value);\n }\n }\n });\n }\n\n this.isWatchingSources = true;\n\n const value = this.fn(...sourceValues);\n if (!this.equals(value, this.value)) {\n this.setValue(value);\n }\n }\n\n stopWatchingSources() {\n this.sourceWatcher.stopAll();\n\n // Stop watching current value if it was a state.\n if (this.stopWatchingCurrentValue) {\n this.stopWatchingCurrentValue();\n this.stopWatchingCurrentValue = undefined;\n }\n\n this.isWatchingSources = false;\n }\n}\n\nexport interface DeriveOptions {\n equals?: (next: unknown, current: unknown) => boolean;\n}\n\n/**\n * Derives a new `State` from one or more existing states.\n *\n * @param sources - Array of source states to track.\n * @param fn - A function called to recompute the value when any tracked source states receive a new value.\n *\n * @example\n * // With one source...\n * const [$count, setCount] = createState(5);\n * const $doubled = derive([$count], count => count * 2);\n * // ... or many:\n * const [$greeting, setGreeting] = createState(\"Hello\");\n * const [$name, setName] = createState(\"World\");\n * const $hello = derive([$greeting, name], (greeting, name) => `${greeting}, ${name}!`);\n */\nexport function derive<Sources extends MaybeState<any>[], T>(\n sources: [...Sources],\n fn: (...values: StateValues<Sources>) => T | State<T>,\n options?: DeriveOptions,\n): State<T> {\n const value = new DerivedValueHolder(sources, fn, options);\n return new Signal(value);\n}\n\n/*===========================*\\\n|| Watcher ||\n\\*===========================*/\n\nexport interface StateWatcher {\n /**\n * Watch one or more states, calling the provided `fn` each time one of their values changes.\n *\n * @param states - An array of states or plain values. States will be unwrapped before being passed to `fn`.\n * @param fn - A function that takes the values of `states` in the same order they were passed.\n */\n watch<I extends MaybeState<any>[]>(states: [...I], fn: (...currentValues: StateValues<I>) => void): StopFunction;\n\n /**\n * Stop all watch callbacks registered to this watcher.\n */\n stopAll(): void;\n}\n\nexport function createWatcher(): StateWatcher {\n const stopFns: StopFunction[] = [];\n\n return {\n watch(states, fn) {\n if (states.length === 0) {\n throw new TypeError(`Expected at least one state to watch.`);\n }\n states = states.map(toState) as any;\n\n let stop: StopFunction;\n\n if (states.length > 1) {\n stop = derive(states, fn).watch(() => null);\n } else {\n stop = states[0].watch(fn);\n }\n\n stopFns.push(stop);\n\n return () => {\n let index = stopFns.indexOf(stop);\n if (index > -1) {\n stopFns.splice(index, 1);\n }\n stop();\n };\n },\n\n stopAll() {\n while (stopFns.length > 0) {\n const stop = stopFns.pop()!;\n stop();\n }\n },\n };\n}\n","import { IS_REF } from \"./symbols\";\n\n/**\n * A `Ref` is a function that stores a value when called with a single argument,\n * and returns the most recently stored value when called with no arguments.\n */\nexport interface Ref<T> {\n /**\n * Get: returns the current value stored in the ref (or undefined).\n */\n (): T | undefined;\n\n /**\n * Set: stores a new `value` in the ref.\n */\n <T>(value: T | undefined): void;\n}\n\n/**\n * A Ref is a function that returns the last argument it was called with.\n * Calling it with no arguments will simply return the latest value.\n * Calling it with an argument will store that value and immediately return it.\n *\n * @param value - An (optional) initial value to store.\n *\n * @example\n * const ref = createRef(5);\n * ref(); // 5\n * ref(500);\n * ref(); // 500\n */\nexport function createRef<T>(value?: T): Ref<T> {\n function ref() {\n if (arguments.length === 1) {\n value = arguments[0];\n } else if (arguments.length > 1) {\n throw new Error(`Too many arguments. Expected 0 or 1. Got: ${arguments.length}`);\n }\n return value;\n }\n\n ref[IS_REF] = true;\n\n return ref;\n}\n\nexport function isRef<T extends Node>(value: any): value is Ref<T> {\n return value?.[IS_REF] === true;\n}\n","import type { Emitter } from \"@manyducks.co/emitter\";\nimport type { Store, StoreFactory } from \"./store\";\nimport type { Dolla } from \"./dolla\";\n\n/*===========================*\\\n|| ElementContext ||\n\\*===========================*/\n\ninterface ContextEmitterEvents {\n [eventName: string | symbol]: [ContextEvent<any>];\n}\n\nexport interface ElementContext {\n /**\n * The root Dolla instance this element belongs to.\n */\n root: Dolla;\n /**\n * Storage for context variables.\n */\n data: Record<string | symbol, unknown>;\n /**\n * Event emitter for this context.\n */\n emitter: Emitter<ContextEmitterEvents>;\n /**\n * Stores attached to this context.\n */\n stores: Map<string, Store<any, any>>;\n /**\n * A reference to the parent context.\n */\n parent?: ElementContext;\n /**\n * Whether to create DOM nodes in the SVG namespace. An `<svg>` element will set this to true and pass it down to children.\n */\n isSVG?: boolean;\n /**\n * The name of the nearest parent view.\n */\n viewName?: string;\n}\n\n/**\n * Mapping of listener function passed to `.on` -> wrapped versions that discard eventName.\n * Wrapping listeners is necessary because the context API's `.on` method does not pass the event name to \"*\" listeners while the emitter does.\n * ContextEvent objects already have the event name stored as `event.type`.\n */\nexport type WildcardListenerMap = Map<\n (event: ContextEvent<any>) => void,\n (eventName: string | symbol, event: ContextEvent<any>) => void\n>;\n\nexport interface ComponentContext {\n /**\n * Sets a context variable and returns its value.\n */\n set<T>(key: string | symbol, value: T): T;\n\n /**\n * Gets the value of a context variable. Returns null if the variable is not set.\n */\n get<T>(key: string | symbol): T | null;\n\n /**\n * Adds a listener to be called when `eventName` is emitted.\n */\n on<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void;\n\n /**\n * Removes a listener from the list to be called when `eventName` is emitted.\n */\n off<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void;\n\n /**\n * Adds a listener to be called when `eventName` is emitted. The listener is immediately removed after being called once.\n */\n once<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void;\n\n /**\n * Emits a new event to all listeners.\n */\n emit<T = unknown>(eventName: string, detail: T): boolean;\n}\n\n/**\n * A context capable of hosting stores.\n */\nexport interface StorableContext extends ComponentContext {\n /**\n * Attaches a new store to this context.\n */\n attachStore(store: Store<any, any>): void;\n\n /**\n * Gets the closest instance of a store. Throws an error if the store isn't provided higher in the tree.\n */\n useStore<Value>(factory: StoreFactory<any, Value>): Value;\n}\n\n/**\n * An event emitted from and received by a Dolla context. These are separate from DOM events.\n */\nexport class ContextEvent<T> {\n type: string;\n detail: T;\n\n #propagationStopped = false;\n\n get propagationStopped() {\n return this.#propagationStopped;\n }\n\n constructor(type: string, detail: T) {\n this.type = type;\n this.detail = detail;\n }\n\n stopPropagation() {\n this.#propagationStopped = true;\n }\n\n get [Symbol.toStringTag]() {\n return \"ContextEvent\";\n }\n\n // stopImmediatePropagation() {}\n}\n","import { Emitter } from \"@manyducks.co/emitter\";\nimport { getUniqueId } from \"../utils.js\";\nimport { ContextEvent, type WildcardListenerMap, type ComponentContext, type ElementContext } from \"./context.js\";\nimport type { Logger } from \"./dolla.js\";\nimport { IS_STORE, IS_STORE_FACTORY } from \"./symbols.js\";\nimport { createWatcher, type MaybeState, type StateValues, type StopFunction } from \"./state.js\";\n\nexport type StoreFunction<Options, Value> = (this: StoreContext, options: Options, context: StoreContext) => Value;\n\nexport type StoreFactory<Options, Value> = Options extends undefined\n ? () => Store<Options, Value>\n : (options: Options) => Store<Options, Value>;\n\nexport interface StoreContext extends Logger, ComponentContext {\n /**\n * True while this store is attached to a context that is currently mounted in the view tree.\n */\n readonly isMounted: boolean;\n\n /**\n * Registers a callback to run just after this store is mounted.\n */\n onMount(callback: () => void): void;\n\n /**\n * Registers a callback to run just after this store is unmounted.\n */\n onUnmount(callback: () => void): void;\n\n /**\n * Watch a set of states. The callback is called when any of the states receive a new value.\n * Watchers will be automatically stopped when this store is unmounted.\n */\n watch<T extends MaybeState<any>[]>(states: [...T], callback: (...values: StateValues<T>) => void): StopFunction;\n}\n\ninterface Context<Options, Value> extends Logger {}\n\nclass Context<Options, Value> implements StoreContext {\n __store;\n\n constructor(store: Store<Options, Value>) {\n this.__store = store;\n\n // Copy logger methods from logger.\n const descriptors = Object.getOwnPropertyDescriptors(this.__store._logger);\n for (const key in descriptors) {\n if (key !== \"setName\") {\n Object.defineProperty(this, key, descriptors[key]);\n }\n }\n }\n\n get isMounted() {\n return this.__store.isMounted;\n }\n\n setName(name: string): StoreContext {\n this.__store._logger.setName(name);\n return this;\n }\n\n set<T>(key: string | symbol, value: T): T {\n this.__store._elementContext.data[key] = value;\n return value;\n }\n\n get<T>(key: string | symbol): T | null {\n let ctx = this.__store._elementContext;\n\n while (true) {\n if (key in ctx.data) {\n return ctx.data[key] as T;\n } else if (ctx.parent) {\n ctx = ctx.parent;\n } else {\n break;\n }\n }\n\n return null;\n }\n\n // on<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__store._elementContext.emitter.on(eventName, listener);\n // }\n\n // off<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__store._elementContext.emitter.off(eventName, listener);\n // }\n\n // once<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__store._elementContext.emitter.once(eventName, listener);\n // }\n\n on<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = (_eventName: any, event: ContextEvent<T>) => {\n listener(event);\n };\n this.__store._elementContext.emitter.on(eventName, wrappedListener);\n this.__store._wildcardListeners.set(listener, wrappedListener);\n } else {\n this.__store._elementContext.emitter.on(eventName, listener);\n }\n }\n\n off<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = this.__store._wildcardListeners.get(listener);\n if (wrappedListener) {\n this.__store._elementContext.emitter.off(eventName, wrappedListener);\n this.__store._wildcardListeners.delete(listener);\n }\n } else {\n this.__store._elementContext.emitter.off(eventName, listener);\n }\n }\n\n once<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = (_eventName: any, event: ContextEvent<T>) => {\n this.__store._wildcardListeners.delete(listener);\n listener(event);\n };\n this.__store._elementContext.emitter.once(eventName, wrappedListener);\n this.__store._wildcardListeners.set(listener, wrappedListener);\n } else {\n this.__store._elementContext.emitter.once(eventName, listener);\n }\n }\n\n emit<T = unknown>(eventName: string, detail: T): boolean {\n return this.__store._elementContext.emitter.emit(eventName, new ContextEvent(eventName, detail));\n }\n\n onMount(callback: () => void): void {\n this.__store._emitter.on(\"mounted\", callback);\n }\n\n onUnmount(callback: () => void): void {\n this.__store._emitter.on(\"unmounted\", callback);\n }\n\n watch<T extends MaybeState<any>[]>(states: [...T], callback: (...values: StateValues<T>) => void): StopFunction {\n const view = this.__store;\n\n if (view.isMounted) {\n // If called when the component is connected, we assume this code is in a lifecycle hook\n // where it will be triggered at some point again after the component is reconnected.\n return view._watcher.watch(states, callback);\n } else {\n // This should only happen if called in the body of the component function.\n // This code is not always re-run between when a component is unmounted and remounted.\n let stop: StopFunction | undefined;\n let isStopped = false;\n view._emitter.on(\"mounted\", () => {\n if (!isStopped) {\n stop = view._watcher.watch(states, callback);\n }\n });\n return () => {\n if (stop != null) {\n isStopped = true;\n stop();\n }\n };\n }\n }\n}\n\ntype StoreEvents = {\n mounted: [];\n unmounted: [];\n};\n\nexport class Store<Options, Value> {\n readonly key;\n\n private _fn;\n private _options;\n\n /**\n * Value is guaranteed to be set after `attach` is called.\n */\n value!: Value;\n\n isMounted = false;\n\n _elementContext!: ElementContext;\n _emitter = new Emitter<StoreEvents>();\n _wildcardListeners: WildcardListenerMap = new Map();\n _logger!: Logger;\n _watcher = createWatcher();\n\n get name() {\n return this._fn.name;\n }\n\n constructor(key: string, fn: StoreFunction<Options, Value>, options: Options) {\n this.key = key;\n this._fn = fn;\n this._options = options;\n }\n\n /**\n * Attaches this Store to the elementContext.\n * Returns false if there was already an instance attached, and true otherwise.\n */\n attach(elementContext: ElementContext): boolean {\n if (elementContext.stores.has(this.key)) {\n return false;\n }\n this._elementContext = elementContext;\n this._logger = elementContext.root.createLogger(this._fn.name);\n this._emitter.on(\"error\", (error, eventName, ...args) => {\n console.log({ error, eventName, args });\n this._logger.crash(error as Error);\n });\n const context = new Context(this);\n try {\n this.value = this._fn.call(context, this._options, context);\n } catch (error) {\n this._logger.crash(error as Error);\n }\n elementContext.stores.set(this.key, this);\n return true;\n }\n\n handleMount() {\n this.isMounted = true;\n this._emitter.emit(\"mounted\");\n }\n\n handleUnmount() {\n this.isMounted = false;\n this._emitter.emit(\"unmounted\");\n this._emitter.clear();\n this._watcher.stopAll();\n }\n}\n\nexport function isStoreFactory<Options, Value>(value: any): value is StoreFactory<Options, Value> {\n return value?.[IS_STORE_FACTORY] === true;\n}\n\nexport function isStore<Options, Value>(value: any): value is Store<Options, Value> {\n return value?.[IS_STORE] === true;\n}\n\n/**\n * Defines a new store.\n */\nexport function createStore<Options = undefined, Value = unknown>(\n fn: StoreFunction<Options, Value>,\n): StoreFactory<Options, Value> {\n const key = getUniqueId();\n function factory(options?: any) {\n return new Store(key, fn, options);\n }\n factory[IS_STORE_FACTORY] = true;\n factory.key = key;\n return factory as any;\n}\n\nexport class StoreError extends Error {}\n","export default function(n){for(var l,e,s=arguments,t=1,r=\"\",u=\"\",a=[0],c=function(n){1===t&&(n||(r=r.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?a.push(n?s[n]:r):3===t&&(n||r)?(a[1]=n?s[n]:r,t=2):2===t&&\"...\"===r&&n?a[2]=Object.assign(a[2]||{},s[n]):2===t&&r&&!n?(a[2]=a[2]||{})[r]=!0:t>=5&&(5===t?((a[2]=a[2]||{})[e]=n?r?r+s[n]:s[n]:r,t=6):(n||r)&&(a[2][e]+=n?r+s[n]:r)),r=\"\"},h=0;h<n.length;h++){h&&(1===t&&c(),c(h));for(var i=0;i<n[h].length;i++)l=n[h][i],1===t?\"<\"===l?(c(),a=[a,\"\",null],t=3):r+=l:4===t?\"--\"===r&&\">\"===l?(t=1,r=\"\"):r=l+r[0]:u?l===u?u=\"\":r+=l:'\"'===l||\"'\"===l?u=l:\">\"===l?(c(),t=1):t&&(\"=\"===l?(t=5,e=r,r=\"\"):\"/\"===l&&(t<5||\">\"===n[h][i+1])?(c(),3===t&&(a=a[0]),t=a,(a=a[0]).push(this.apply(null,t.slice(1))),t=0):\" \"===l||\"\\t\"===l||\"\\n\"===l||\"\\r\"===l?(c(),t=2):r+=l),3===t&&\"!--\"===r&&(t=4,a=a[0])}return c(),a.length>2?a.slice(1):a[1]}\n","import type { MarkupElement } from \"../markup\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols\";\n\n/**\n * Wraps any plain DOM node in a MarkupElement interface.\n */\nexport class DOMNode implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n node: Node;\n\n get isMounted() {\n return this.node.parentNode != null;\n }\n\n constructor(node: Node) {\n this.node = node;\n }\n\n mount(parent: Node, after?: Node) {\n parent.insertBefore(this.node, after?.nextSibling ?? null);\n }\n\n unmount(parentIsUnmounting = false) {\n if (this.node.parentNode && !parentIsUnmounting) {\n this.node.parentNode.removeChild(this.node);\n }\n }\n}\n","import { isFunction, isObject, isString } from \"../../typeChecking.js\";\nimport { getUniqueId, omit } from \"../../utils.js\";\nimport { type ElementContext } from \"../context.js\";\nimport { constructMarkup, type Markup, type MarkupElement } from \"../markup.js\";\nimport { isRef, type Ref } from \"../ref.js\";\nimport { isState, type State, type StopFunction } from \"../state.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\n\n//const eventHandlerProps = Object.values(eventPropsToEventNames).map((event) => \"on\" + event);\nconst isCamelCaseEventName = (key: string) => /^on[A-Z]/.test(key);\n\ntype HTMLOptions = {\n elementContext: ElementContext;\n tag: string;\n props: Record<string, any>;\n children?: Markup[];\n};\n\nexport class HTML implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n node;\n props: Record<string, any>;\n childMarkup: Markup[] = [];\n children: MarkupElement[] = [];\n stopCallbacks: StopFunction[] = [];\n elementContext;\n uniqueId = getUniqueId();\n\n _batchWrite;\n\n // Track the ref so we can nullify it on unmount.\n ref?: Ref<any>;\n\n // Prevents 'onClickOutside' handlers from firing in the same cycle in which the element is connected.\n canClickAway = false;\n\n get isMounted() {\n return this.node.parentNode != null;\n }\n\n constructor({ tag, props, children, elementContext }: HTMLOptions) {\n elementContext = { ...elementContext };\n\n this._batchWrite = elementContext.root.batch.write.bind(elementContext.root.batch);\n\n // This and all nested views will be created as SVG elements.\n if (tag.toLowerCase() === \"svg\") {\n elementContext.isSVG = true;\n }\n\n // Create node with the appropriate constructor.\n if (elementContext.isSVG) {\n this.node = document.createElementNS(\"http://www.w3.org/2000/svg\", tag);\n } else {\n this.node = document.createElement(tag);\n }\n\n // if (elementContext.root.getEnv() === \"development\" && elementContext.viewName) {\n // this.node.dataset.view = elementContext.viewName;\n // }\n\n if (props.ref) {\n if (isRef(props.ref)) {\n this.ref = props.ref;\n this.ref(this.node);\n } else {\n throw new Error(\"Expected ref to be a function. Got: \" + props.ref);\n }\n }\n\n this.props = {\n ...omit([\"ref\", \"class\", \"className\"], props),\n class: props.className ?? props.class,\n };\n\n if (children) {\n this.childMarkup = children;\n }\n\n // this.children = children ? constructMarkup(elementContext, children) : [];\n this.elementContext = elementContext;\n this.children = constructMarkup(this.elementContext, this.childMarkup);\n }\n\n mount(parent: Node, after?: Node) {\n if (parent == null) {\n throw new Error(`HTML element requires a parent element as the first argument to connect. Got: ${parent}`);\n }\n\n if (!this.isMounted) {\n for (let i = 0; i < this.children.length; i++) {\n const child = this.children[i];\n const previous = i > 0 ? this.children[i - 1].node : undefined;\n child.mount(this.node, previous);\n }\n\n this.applyProps(this.node, this.props);\n if (this.props.style) this.applyStyles(this.node, this.props.style, this.stopCallbacks);\n if (this.props.class) this.applyClasses(this.node, this.props.class, this.stopCallbacks);\n }\n\n parent.insertBefore(this.node, after?.nextSibling ?? null);\n\n setTimeout(() => {\n this.canClickAway = true;\n }, 0);\n }\n\n unmount(parentIsUnmounting = false) {\n if (this.isMounted) {\n for (const child of this.children) {\n child.unmount(true);\n }\n\n if (!parentIsUnmounting) {\n this.node.parentNode?.removeChild(this.node);\n }\n\n if (this.ref) {\n this.ref(undefined);\n }\n\n this.canClickAway = false;\n\n for (const stop of this.stopCallbacks) {\n stop();\n }\n this.stopCallbacks = [];\n }\n }\n\n getUpdateKey(type: string, value: string | number) {\n return `${this.uniqueId}:${type}:${value}`;\n }\n\n _mutate(callback: () => any, updateKey?: string) {\n if (!this.isMounted) {\n // DOM operations on nodes that aren't connected yet shouldn't cause any\n // layout thrashing. Just execute now.\n callback();\n } else {\n // If we are mounted we have to be more mindful of layout thrashing.\n // These mutations get batched.\n this._batchWrite(callback, updateKey);\n }\n }\n\n attachProp<T>(value: State<T> | T, callback: (value: T) => void, updateKey: string) {\n if (isState(value)) {\n this.stopCallbacks.push(\n value.watch((current) => {\n this._mutate(() => callback(current), updateKey);\n }),\n );\n } else {\n this._mutate(() => callback(value), updateKey);\n }\n }\n\n applyProps(element: HTMLElement | SVGElement, props: Record<string, unknown>) {\n for (const key in props) {\n const value = props[key];\n\n if (key === \"attributes\") {\n const values = value as Record<string, any>;\n // Set attributes directly without mapping props\n for (const name in values) {\n this.attachProp(\n values[name],\n (current) => {\n if (current == null) {\n (element as any).removeAttribute(name);\n } else {\n (element as any).setAttribute(name, String(current));\n }\n },\n this.getUpdateKey(\"attr\", name),\n );\n }\n } else if (key === \"eventListeners\") {\n const values = value as Record<string, any>;\n\n for (const name in values) {\n const listener: (e: Event) => void = isState<(e: Event) => void>(value)\n ? (e: Event) => value.get()(e)\n : (value as (e: Event) => void);\n\n element.addEventListener(name, listener);\n\n this.stopCallbacks.push(() => {\n element.removeEventListener(name, listener);\n });\n }\n } else if (key === \"onClickOutside\" || key === \"onclickoutside\") {\n const listener = (e: Event) => {\n if (this.canClickAway && !element.contains(e.target as any)) {\n if (isState<(e: Event) => void>(value)) {\n value.get()(e);\n } else {\n (value as (e: Event) => void)(e);\n }\n }\n };\n\n const options = { capture: true };\n\n window.addEventListener(\"click\", listener, options);\n\n this.stopCallbacks.push(() => {\n window.removeEventListener(\"click\", listener, options);\n });\n } else if (isCamelCaseEventName(key)) {\n const eventName = key.slice(2).toLowerCase();\n\n const listener: (e: Event) => void = isState<(e: Event) => void>(value)\n ? (e: Event) => value.get()(e)\n : (value as (e: Event) => void);\n\n element.addEventListener(eventName, listener);\n\n this.stopCallbacks.push(() => {\n element.removeEventListener(eventName, listener);\n });\n } else if (key.includes(\"-\")) {\n // Names with dashes in them are not valid prop names, so they are treated as attributes.\n this.attachProp(\n value,\n (current) => {\n if (current == null) {\n element.removeAttribute(key);\n } else {\n element.setAttribute(key, String(current));\n }\n },\n this.getUpdateKey(\"attr\", key),\n );\n } else if (!privateProps.includes(key)) {\n if (this.elementContext.isSVG) {\n this.attachProp(\n value,\n (current) => {\n if (current != null) {\n element.setAttribute(key, String(props[key]));\n } else {\n element.removeAttribute(key);\n }\n },\n this.getUpdateKey(\"attr\", key),\n );\n } else {\n switch (key) {\n case \"contentEditable\":\n case \"value\":\n this.attachProp(\n value,\n (current) => {\n (element as any)[key] = String(current);\n },\n this.getUpdateKey(\"prop\", key),\n );\n break;\n\n case \"for\":\n this.attachProp(\n value,\n (current) => {\n (element as any).htmlFor = current;\n },\n this.getUpdateKey(\"prop\", \"htmlFor\"),\n );\n break;\n\n case \"checked\":\n this.attachProp(\n value,\n (current) => {\n (element as any).checked = current;\n\n // Set attribute also or styles don't take effect.\n if (current) {\n element.setAttribute(\"checked\", \"\");\n } else {\n element.removeAttribute(\"checked\");\n }\n },\n this.getUpdateKey(\"prop\", \"checked\"),\n );\n break;\n\n // Attribute-aliased props\n case \"exportParts\":\n case \"part\":\n case \"translate\":\n case \"type\":\n case \"title\": {\n const _key = key.toLowerCase();\n this.attachProp(\n value,\n (current) => {\n if (current == undefined) {\n element.removeAttribute(_key);\n } else {\n element.setAttribute(_key, String(current));\n }\n },\n this.getUpdateKey(\"attr\", _key),\n );\n break;\n }\n\n case \"autocomplete\":\n case \"autocapitalize\":\n this.attachProp(\n value,\n (current) => {\n if (typeof current === \"string\") {\n (element as any).autocomplete = current;\n } else if (current) {\n (element as any).autocomplete = \"on\";\n } else {\n (element as any).autocomplete = \"off\";\n }\n },\n this.getUpdateKey(\"prop\", key),\n );\n break;\n\n default: {\n this.attachProp(\n value,\n (current) => {\n (element as any)[key] = current;\n },\n this.getUpdateKey(\"prop\", key),\n );\n break;\n }\n }\n }\n }\n }\n }\n\n applyStyles(element: HTMLElement | SVGElement, styles: unknown, stopCallbacks: StopFunction[]) {\n const propStopCallbacks: StopFunction[] = [];\n\n if (isState(styles)) {\n let unapply: () => void;\n\n const stop = styles.watch((current) => {\n this._mutate(\n () => {\n if (isFunction(unapply)) {\n unapply();\n }\n element.style.cssText = \"\";\n unapply = this.applyStyles(element, current, stopCallbacks);\n },\n this.getUpdateKey(\"styles\", \"*\"),\n );\n });\n\n stopCallbacks.push(stop);\n propStopCallbacks.push(stop);\n } else {\n const mapped = getStyleMap(styles);\n\n for (const name in mapped) {\n const { value, priority } = mapped[name];\n\n if (isState(value)) {\n const stop = value.watch((current) => {\n this._mutate(() => {\n if (current) {\n element.style.setProperty(name, String(current), priority);\n } else {\n element.style.removeProperty(name);\n }\n }); // NOTE: Not keyed; all update callbacks must run to apply all properties.\n });\n\n stopCallbacks.push(stop);\n propStopCallbacks.push(stop);\n } else if (value != undefined) {\n element.style.setProperty(name, String(value));\n }\n }\n }\n\n return function unapply() {\n for (const stop of propStopCallbacks) {\n stop();\n stopCallbacks.splice(stopCallbacks.indexOf(stop), 1);\n }\n };\n }\n\n applyClasses(element: HTMLElement | SVGElement, classes: unknown, stopCallbacks: StopFunction[]) {\n const classStopCallbacks: StopFunction[] = [];\n\n if (isState(classes)) {\n let unapply: () => void;\n\n const stop = classes.watch((current) => {\n this._mutate(\n () => {\n if (isFunction(unapply)) {\n unapply();\n }\n element.removeAttribute(\"class\");\n unapply = this.applyClasses(element, current, stopCallbacks);\n },\n this.getUpdateKey(\"attr\", \"class\"),\n );\n });\n\n stopCallbacks.push(stop);\n classStopCallbacks.push(stop);\n } else {\n const mapped = getClassMap(classes);\n\n for (const name in mapped) {\n const value = mapped[name];\n\n if (isState(value)) {\n const stop = value.watch((current) => {\n this._mutate(() => {\n if (current) {\n element.classList.add(name);\n } else {\n element.classList.remove(name);\n }\n }); // NOTE: Not keyed; all update callbacks must run to apply all classes.\n });\n\n stopCallbacks.push(stop);\n classStopCallbacks.push(stop);\n } else if (value) {\n element.classList.add(name);\n }\n }\n }\n\n return function unapply() {\n for (const stop of classStopCallbacks) {\n stop();\n stopCallbacks.splice(stopCallbacks.indexOf(stop), 1);\n }\n };\n }\n}\n\n/**\n * Parse classes into a single object. Classes can be passed as a string, an object with class keys can boolean values, or an array with a mix of both.\n */\nfunction getClassMap(classes: unknown) {\n let mapped: Record<string, boolean> = {};\n\n if (isString(classes)) {\n // Support multiple classes in one string like HTML.\n const names = classes.split(\" \");\n for (const name of names) {\n mapped[name] = true;\n }\n } else if (isObject(classes)) {\n Object.assign(mapped, classes);\n } else if (Array.isArray(classes)) {\n Array.from(classes)\n .filter(Boolean)\n .forEach((item) => {\n Object.assign(mapped, getClassMap(item));\n });\n }\n\n // Delete undefined keys. These are usually the result of a class that is not specified in the stylesheet and would have no effect on appearance.\n delete mapped[\"undefined\"];\n\n return mapped;\n}\n\n/**\n * Parse styles into a single object.\n */\nfunction getStyleMap(styles: unknown) {\n let mapped: Record<string, { value: unknown; priority?: string }> = {};\n\n if (isString(styles)) {\n const lines = styles.split(\";\").filter((line) => line.trim() !== \"\");\n for (const line of lines) {\n const [key, _value] = line.split(\":\");\n const entry: { value: unknown; priority?: string } = {\n value: _value,\n };\n if (_value.includes(\"!important\")) {\n entry.priority = \"important\";\n entry.value = _value.replace(\"!important\", \"\").trim();\n } else {\n entry.value = _value.trim();\n }\n mapped[camelToKebab(key.trim())] = entry;\n }\n }\n if (isObject(styles)) {\n for (const key in styles) {\n if (key.startsWith(\"--\")) {\n // Pass through variable names without processing.\n mapped[key] = { value: styles[key] };\n } else {\n mapped[camelToKebab(key)] = { value: styles[key] };\n }\n }\n } else if (Array.isArray(styles)) {\n Array.from(styles)\n .filter((item) => item != null)\n .forEach((item) => {\n Object.assign(mapped, getStyleMap(item));\n });\n }\n\n return mapped;\n}\n\n/**\n * Converts a camelCase string to kebab-case.\n */\nexport function camelToKebab(value: string): string {\n return value.replace(/[A-Z]+(?![a-z])|[A-Z]/g, ($, ofs) => (ofs ? \"-\" : \"\") + $.toLowerCase());\n}\n\n// Attributes in this list will not be forwarded to the DOM node.\nconst privateProps = [\"ref\", \"children\", \"class\", \"style\", \"data\"];\n","import { isArray, typeOf } from \"../../typeChecking.js\";\nimport type { Renderable } from \"../../types.js\";\nimport type { ElementContext } from \"../context.js\";\nimport { constructMarkup, isMarkupElement, isRenderable, toMarkup, type MarkupElement } from \"../markup.js\";\nimport { createWatcher, type MaybeState } from \"../state.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\n\ninterface ObserverOptions {\n elementContext: ElementContext;\n sources: MaybeState<any>[];\n renderFn: (...values: any) => Renderable;\n}\n\n/**\n * Displays dynamic children without a parent element.\n * Used when a State is passed as a child in a view template.\n */\nexport class Observer implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n node = document.createTextNode(\"\");\n children: MarkupElement[] = [];\n renderFn: (...values: any) => Renderable;\n elementContext: ElementContext;\n watcher = createWatcher();\n\n sources: MaybeState<any>[];\n\n get isMounted() {\n return this.node.parentNode != null;\n }\n\n constructor({ sources, renderFn, elementContext }: ObserverOptions) {\n this.sources = sources;\n this.renderFn = renderFn;\n this.elementContext = elementContext;\n }\n\n mount(parent: Node, after?: Node) {\n if (!this.isMounted) {\n parent.insertBefore(this.node, after?.nextSibling ?? null);\n\n this.watcher.watch(this.sources, (...values) => {\n const content = this.renderFn(...values);\n\n if (!isRenderable(content)) {\n console.error(content, values);\n throw new TypeError(\n `Observer received invalid value to render. Got type: ${typeOf(content)}, value: ${content}`,\n );\n }\n\n this.update(isArray(content) ? content : [content]);\n });\n }\n }\n\n unmount(parentIsUnmounting = false) {\n this.watcher.stopAll();\n\n if (this.isMounted) {\n this.cleanup(parentIsUnmounting);\n this.node.parentNode?.removeChild(this.node);\n }\n }\n\n cleanup(parentIsUnmounting: boolean) {\n for (const element of this.children) {\n element.unmount(parentIsUnmounting);\n }\n this.children = [];\n }\n\n update(children: Renderable[]) {\n this.cleanup(false);\n\n if (children == null || children.length === 0 || !this.isMounted) {\n return;\n }\n\n const newElements: MarkupElement[] = children.flatMap((c) => {\n if (isMarkupElement(c)) {\n return c as MarkupElement;\n } else {\n return constructMarkup(this.elementContext, toMarkup(c));\n }\n });\n\n for (const element of newElements) {\n const previous = this.children.at(-1)?.node || this.node;\n element.mount(this.node.parentNode!, previous);\n this.children.push(element);\n }\n\n // Move marker node to end.\n const parent = this.node.parentNode!;\n const lastChildNextSibling = this.children.at(-1)?.node?.nextSibling ?? null;\n parent.insertBefore(this.node, lastChildNextSibling);\n }\n}\n","import { type MarkupElement } from \"../markup.js\";\nimport { isState, type MaybeState, type StopFunction } from \"../state.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\n\n/**\n * Manages several MarkupElements as one.\n */\nexport class Outlet implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n node = document.createTextNode(\"\");\n isMounted = false;\n\n source: MaybeState<MarkupElement[]>;\n elements: MarkupElement[] = [];\n\n stopCallback?: StopFunction;\n\n constructor(source: MaybeState<MarkupElement[]>) {\n this.source = source;\n }\n\n mount(parent: Node, after?: Node | undefined) {\n if (!this.isMounted) {\n this.isMounted = true;\n\n parent.insertBefore(this.node, after?.nextSibling ?? null);\n\n if (isState<MarkupElement[]>(this.source)) {\n this.stopCallback = this.source.watch((children) => {\n this.update(children);\n });\n } else {\n this.update(this.elements);\n }\n }\n }\n\n unmount(parentIsUnmounting = false) {\n if (this.stopCallback) {\n this.stopCallback();\n this.stopCallback = undefined;\n }\n\n if (this.isMounted) {\n this.cleanup(parentIsUnmounting);\n this.isMounted = false;\n }\n }\n\n cleanup(parentIsUnmounting: boolean) {\n for (const element of this.elements) {\n element.unmount(parentIsUnmounting);\n }\n this.elements = [];\n }\n\n update(newElements: MarkupElement[]) {\n this.cleanup(false);\n\n if (newElements.length > 0) {\n for (let i = 0; i < newElements.length; i++) {\n const element = newElements[i];\n const previous = i > 0 ? this.elements[i - 1] : undefined;\n element.mount(this.node.parentElement!, previous?.node);\n this.elements.push(element);\n }\n\n this.node.parentNode?.insertBefore(this.node, this.elements.at(-1)?.node ?? null);\n }\n }\n}\n","import type { Renderable } from \"../../types.js\";\nimport type { ElementContext } from \"../context.js\";\nimport { constructMarkup, groupElements, isMarkupElement, toMarkup, type MarkupElement } from \"../markup.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\n\ninterface PortalConfig {\n content: Renderable;\n parent: Node;\n elementContext: ElementContext;\n}\n\n/**\n * Renders content into a specified parent node.\n */\nexport class Portal implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n config: PortalConfig;\n element?: MarkupElement;\n\n get isMounted() {\n if (!this.element) {\n return false;\n }\n return this.element.isMounted;\n }\n\n constructor(config: PortalConfig) {\n this.config = config;\n }\n\n mount(_parent: Node, _after?: Node) {\n const { content, parent } = this.config;\n\n if (isMarkupElement(content)) {\n this.element = content;\n } else {\n this.element = groupElements(constructMarkup(this.config.elementContext, toMarkup(content)));\n }\n\n this.element.mount(parent);\n }\n\n unmount(parentIsUnmounting = false) {\n if (this.element?.isMounted) {\n this.element.unmount(parentIsUnmounting);\n }\n }\n}\n","import { Emitter } from \"@manyducks.co/emitter\";\nimport { isArrayOf, typeOf } from \"../../typeChecking.js\";\nimport { getUniqueId } from \"../../utils.js\";\nimport { ContextEvent, type WildcardListenerMap, type ElementContext, type StorableContext } from \"../context.js\";\nimport type { Logger } from \"../dolla.js\";\nimport { constructMarkup, createMarkup, groupElements, isMarkup, type Markup, type MarkupElement } from \"../markup.js\";\nimport {\n createState,\n createWatcher,\n isState,\n type MaybeState,\n type State,\n type StateValues,\n type StopFunction,\n} from \"../state.js\";\nimport { _onViewMounted, _onViewUnmounted } from \"../stats.js\";\nimport { isStore, isStoreFactory, type Store, StoreError, type StoreFactory } from \"../store.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\n\n/*=====================================*\\\n|| Types ||\n\\*=====================================*/\n\n/**\n * Any valid value that a View can return.\n */\nexport type ViewResult = Node | State<any> | Markup | Markup[] | null;\n\nexport type ViewFunction<P> = (this: ViewContext, props: P, context: ViewContext) => ViewResult;\n\n/**\n * A view that has been constructed into DOM nodes.\n */\nexport interface ViewElement extends MarkupElement {\n /**\n * Take a ViewFunction and render it as a child of this view.\n */\n setChildView(view: ViewFunction<{}>): ViewElement;\n}\n\nexport interface ViewContext extends Logger, StorableContext {\n /**\n * An ID unique to this view.\n */\n readonly uid: string;\n\n /**\n * Returns an object of all variables stored on this context.\n */\n // getAll(): Record<string | symbol, unknown>;\n\n /**\n * Sets the name of the view's built in logger.\n */\n setName(name: string): ViewContext;\n\n /**\n * True while this view is connected to the DOM.\n */\n readonly isMounted: boolean;\n\n /**\n * Registers a callback to run just before this view is mounted. DOM nodes are not yet attached to the page.\n */\n beforeMount(callback: () => void): void;\n\n /**\n * Registers a callback to run just after this view is mounted.\n */\n onMount(callback: () => void): void;\n\n /**\n * Registers a callback to run just before this view is unmounted. DOM nodes are still attached to the page.\n */\n beforeUnmount(callback: () => void): void;\n\n /**\n * Registers a callback to run just after this view is unmounted.\n */\n onUnmount(callback: () => void): void;\n\n /**\n * Watch a set of states. The callback is called when any of the states receive a new value.\n * Watchers will be automatically stopped when this view is unmounted.\n */\n watch<T extends MaybeState<any>[]>(states: [...T], callback: (...values: StateValues<T>) => void): StopFunction;\n\n /**\n * Returns a Markup element that displays this view's children.\n */\n outlet(): Markup;\n}\n\n/*=====================================*\\\n|| Convenience Helpers ||\n\\*=====================================*/\n\nexport function createView<Props extends Record<string, any> = Record<string, unknown>>(\n fn: ViewFunction<Props>,\n): ViewFunction<Props> {\n return fn;\n}\n\n/*=====================================*\\\n|| View Init ||\n\\*=====================================*/\n\n// class ViewTemplate<Props> {\n// private _fn;\n\n// constructor(fn: ViewFunction<Props>) {\n// this._fn = fn;\n// }\n\n// create(ctx: ElementContext, props: Props, children: Markup[]): View<Props> {\n// return new View(ctx, this._fn, props, children);\n// }\n\n// toString(ctx: ElementContext, props: Props, children: Markup[]): string {\n// // TODO: Render this view's content as an HTML string.\n// return \"\";\n// }\n// }\n\n// Defines logger methods on context.\ninterface Context extends Logger {}\n\nclass Context implements ViewContext {\n __view;\n\n constructor(view: View<any>) {\n this.__view = view;\n\n // Copy logger methods from logger.\n const descriptors = Object.getOwnPropertyDescriptors(this.__view._logger);\n for (const key in descriptors) {\n if (key !== \"setName\") {\n Object.defineProperty(this, key, descriptors[key]);\n }\n }\n }\n\n get uid() {\n return this.__view.uniqueId;\n }\n\n get isMounted() {\n return this.__view.isMounted;\n }\n\n setName(name: string): ViewContext {\n this.__view._logger.setName(name);\n this.__view._elementContext.viewName = name;\n return this;\n }\n\n set<T>(key: string | symbol, value: T): T {\n this.__view._elementContext.data[key] = value;\n return value;\n }\n\n get<T>(key: string | symbol): T | null {\n let ctx = this.__view._elementContext;\n\n while (true) {\n if (key in ctx.data) {\n return ctx.data[key] as T;\n } else if (ctx.parent) {\n ctx = ctx.parent;\n } else {\n break;\n }\n }\n\n return null;\n }\n\n // on<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__view._elementContext.emitter.on(eventName, listener);\n // }\n\n // off<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__view._elementContext.emitter.off(eventName, listener);\n // }\n\n // once<T = unknown>(eventName: string, listener: (...args: any) => void): void {\n // this.__view._elementContext.emitter.once(eventName, listener);\n // }\n\n on<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = (_eventName: any, event: ContextEvent<T>) => {\n listener(event);\n };\n this.__view._elementContext.emitter.on(eventName, wrappedListener);\n this.__view._wildcardListeners.set(listener, wrappedListener);\n } else {\n this.__view._elementContext.emitter.on(eventName, listener);\n }\n }\n\n off<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = this.__view._wildcardListeners.get(listener);\n if (wrappedListener) {\n this.__view._elementContext.emitter.off(eventName, wrappedListener);\n this.__view._wildcardListeners.delete(listener);\n }\n } else {\n this.__view._elementContext.emitter.off(eventName, listener);\n }\n }\n\n once<T = unknown>(eventName: string, listener: (event: ContextEvent<T>) => void): void {\n if (eventName === \"*\") {\n const wrappedListener = (_eventName: any, event: ContextEvent<T>) => {\n this.__view._wildcardListeners.delete(listener);\n listener(event);\n };\n this.__view._elementContext.emitter.once(eventName, wrappedListener);\n this.__view._wildcardListeners.set(listener, wrappedListener);\n } else {\n this.__view._elementContext.emitter.once(eventName, listener);\n }\n }\n\n emit<T = unknown>(eventName: string, detail: T): boolean {\n return this.__view._elementContext.emitter.emit(eventName, new ContextEvent(eventName, detail));\n }\n\n attachStore(store: Store<any, any>): void {\n const attached = store.attach(this.__view._elementContext);\n if (attached) {\n this.__view._emitter.on(\"mounted\", () => {\n store.handleMount();\n });\n this.__view._emitter.on(\"unmounted\", () => {\n store.handleUnmount();\n });\n } else {\n let name = store.name ? `'${store.name}'` : \"this store\";\n this.__view._logger.warn(`An instance of ${name} was already attached to this context.`);\n }\n }\n\n useStore<Value>(factory: StoreFactory<any, Value>): Value {\n if (isStoreFactory(factory)) {\n const key = (factory as any).key as string; // The key assigned inside of createStore.\n let context = this.__view._elementContext;\n let store: Store<any, Value> | undefined;\n while (true) {\n store = context.stores.get(key);\n if (store == null && context.parent != null) {\n context = context.parent;\n } else {\n break;\n }\n }\n if (store == null) {\n throw new StoreError(`Store not found on this context.`);\n } else {\n return store.value;\n }\n } else if (isStore(factory)) {\n throw new StoreError(\n `Received a Store instance. Please pass the Store factory function to useStore without calling it.`,\n );\n } else {\n throw new StoreError(`Invalid store.`);\n }\n }\n\n beforeMount(callback: () => void): void {\n this.__view._emitter.on(\"beforeMount\", callback);\n }\n\n onMount(callback: () => void): void {\n this.__view._emitter.on(\"mounted\", callback);\n }\n\n beforeUnmount(callback: () => void): void {\n this.__view._emitter.on(\"beforeUnmount\", callback);\n }\n\n onUnmount(callback: () => void): void {\n this.__view._emitter.on(\"unmounted\", callback);\n }\n\n watch<T extends MaybeState<any>[]>(states: [...T], callback: (...values: StateValues<T>) => void): StopFunction {\n const view = this.__view;\n\n if (view.isMounted) {\n // If called when the component is connected, we assume this code is in a lifecycle hook\n // where it will be triggered at some point again after the component is reconnected.\n return view._watcher.watch(states, callback);\n } else {\n // This should only happen if called in the body of the component function.\n // This code is not always re-run between when a component is unmounted and remounted.\n let stop: StopFunction | undefined;\n let isStopped = false;\n view._emitter.on(\"mounted\", () => {\n if (!isStopped) {\n stop = view._watcher.watch(states, callback);\n }\n });\n return () => {\n if (stop != null) {\n isStopped = true;\n stop();\n }\n };\n }\n }\n\n outlet(): Markup {\n return createMarkup(\"$outlet\", { $children: this.__view._$children });\n }\n}\n\ntype ViewEvents = {\n beforeMount: [];\n mounted: [];\n beforeUnmount: [];\n unmounted: [];\n};\n\nexport class View<P> implements ViewElement {\n [IS_MARKUP_ELEMENT] = true;\n\n uniqueId = getUniqueId();\n\n _elementContext: ElementContext;\n _logger;\n _view;\n _props;\n\n _element?: MarkupElement;\n\n _childMarkup;\n\n _$children;\n _setChildren;\n\n _watcher = createWatcher();\n _emitter = new Emitter<ViewEvents>();\n _wildcardListeners: WildcardListenerMap = new Map();\n\n constructor(elementContext: ElementContext, view: ViewFunction<P>, props: P, children: Markup[] = []) {\n this._elementContext = {\n ...elementContext,\n data: {},\n parent: elementContext,\n viewName: view.name,\n emitter: new Emitter(),\n stores: new Map(),\n };\n this._logger = elementContext.root.createLogger(view.name || \"🌇 anonymous view\", { uid: this.uniqueId });\n this._view = view;\n this._props = props;\n\n this._childMarkup = children;\n [this._$children, this._setChildren] = createState<MarkupElement[]>([]);\n\n this._emitter.on(\"error\", (error, eventName, ...args) => {\n this._logger.error({ error, eventName, args });\n this._logger.crash(error as Error);\n });\n\n // Bubble events by emitting them to parent.\n this._elementContext.emitter.on(\"*\", (eventName, event) => {\n if (event instanceof ContextEvent) {\n if (!event.propagationStopped) {\n this._elementContext.parent?.emitter.emit(eventName, event);\n }\n }\n });\n }\n\n /*===============================*\\\n || \"Public\" API ||\n \\*===============================*/\n\n get node() {\n return this._element?.node!;\n }\n\n isMounted = false;\n\n mount(parent: Node, after?: Node) {\n // Don't run lifecycle hooks or initialize if already connected.\n // Calling connect again can be used to re-order elements that are already connected to the DOM.\n const wasConnected = this.isMounted;\n\n if (!wasConnected) {\n this._initialize();\n this._emitter.emit(\"beforeMount\");\n }\n\n if (this._element) {\n this._element.mount(parent, after);\n }\n\n if (!wasConnected) {\n this.isMounted = true;\n\n _onViewMounted();\n\n // TODO: Figure out why rAF is needed for updates to DOM nodes to work in onMount callbacks.\n requestAnimationFrame(() => {\n this._emitter.emit(\"mounted\");\n });\n }\n }\n\n unmount(parentIsUnmounting = false) {\n this._emitter.emit(\"beforeUnmount\");\n\n if (this._element) {\n // parentIsUnmounting is forwarded to the element because the view acts as a proxy for an element.\n this._element.unmount(parentIsUnmounting);\n }\n\n if (this.isMounted) {\n _onViewUnmounted();\n }\n\n this.isMounted = false;\n\n this._emitter.emit(\"unmounted\");\n this._emitter.clear();\n\n // Clear elementContext's emitter as well? That was created in this constructor, so garbage collection should get it.\n\n this._watcher.stopAll();\n }\n\n setChildView(fn: ViewFunction<{}>) {\n this._childMarkup = [];\n const node = new View(this._elementContext, fn, {});\n this._setChildren([node]);\n return node;\n }\n\n /*===============================*\\\n || Internal ||\n \\*===============================*/\n\n private _initialize() {\n const context = new Context(this);\n\n let result: ViewResult;\n try {\n result = this._view.call(context, this._props, context);\n\n if (this._childMarkup.length) {\n this._setChildren(constructMarkup(this._elementContext, this._childMarkup));\n }\n } catch (error) {\n if (error instanceof Error) {\n this._logger.crash(error);\n }\n throw error;\n }\n\n if (result === null) {\n // Do nothing.\n } else if (result instanceof Node) {\n this._element = groupElements(constructMarkup(this._elementContext, createMarkup(\"$node\", { value: result })));\n } else if (isMarkup(result) || isArrayOf<Markup>(isMarkup, result)) {\n this._element = groupElements(constructMarkup(this._elementContext, result));\n } else if (isState(result)) {\n this._element = groupElements(\n constructMarkup(this._elementContext, createMarkup(\"$observer\", { sources: [result], renderFn: (x) => x })),\n );\n } else {\n const error = new TypeError(\n `Expected '${\n this._view.name\n }' function to return a DOM node, Markup element, Readable or null. Got: ${typeOf(result)}`,\n );\n this._logger.crash(error);\n }\n }\n}\n","import { type ElementContext } from \"../context.js\";\nimport { type MarkupElement } from \"../markup.js\";\nimport { createState, type Setter, type State, type StopFunction } from \"../state.js\";\nimport { IS_MARKUP_ELEMENT } from \"../symbols.js\";\nimport { View, type ViewContext, type ViewResult } from \"./view.js\";\n\n// ----- Types ----- //\n\ninterface RepeatOptions<T> {\n elementContext: ElementContext;\n $items: State<T[]>;\n keyFn: (value: T, index: number) => string | number | symbol;\n renderFn: ($value: State<T>, $index: State<number>, ctx: ViewContext) => ViewResult;\n}\n\ntype ConnectedItem<T> = {\n key: any;\n $value: State<T>;\n setValue: Setter<T>;\n $index: State<number>;\n setIndex: Setter<number>;\n element: MarkupElement;\n};\n\n// ----- Code ----- //\n\nexport class Repeat<T> implements MarkupElement {\n [IS_MARKUP_ELEMENT] = true;\n\n node = document.createTextNode(\"\");\n $items: State<T[]>;\n stopCallback?: StopFunction;\n connectedItems: ConnectedItem<T>[] = [];\n elementContext;\n renderFn: (this: ViewContext, $value: State<T>, $index: State<number>, context: ViewContext) => ViewResult;\n keyFn: (value: T, index: number) => string | number | symbol;\n\n get isMounted() {\n return this.node.parentNode != null;\n }\n\n constructor({ elementContext, $items, renderFn, keyFn }: RepeatOptions<T>) {\n this.elementContext = elementContext;\n\n this.$items = $items;\n this.renderFn = renderFn;\n this.keyFn = keyFn;\n }\n\n mount(parent: Node, after?: Node) {\n if (!this.isMounted) {\n parent.insertBefore(this.node, after?.nextSibling ?? null);\n\n this.stopCallback = this.$items.watch((value) => {\n if (!this.isMounted) {\n this._update(Array.from(value));\n } else {\n this.elementContext.root.batch.write(() => {\n this._update(Array.from(value));\n });\n }\n });\n }\n }\n\n unmount(parentIsUnmounting = false) {\n if (this.stopCallback) {\n this.stopCallback();\n this.stopCallback = undefined;\n }\n\n if (!parentIsUnmounting && this.isMounted) {\n this.node.parentNode?.removeChild(this.node);\n }\n\n this._cleanup(parentIsUnmounting);\n }\n\n _cleanup(parentIsUnmounting: boolean) {\n for (const item of this.connectedItems) {\n item.element.unmount(parentIsUnmounting);\n }\n this.connectedItems = [];\n }\n\n _update(value: T[]) {\n if (value.length === 0 || !this.isMounted) {\n return this._cleanup(false);\n }\n\n type UpdateItem = { key: string | number | symbol; value: T; index: number };\n\n const potentialItems: UpdateItem[] = [];\n let index = 0;\n\n for (const item of value) {\n potentialItems.push({\n key: this.keyFn(item, index),\n value: item,\n index: index++,\n });\n }\n\n const newItems: ConnectedItem<T>[] = [];\n\n // Remove views for items that no longer exist in the new list.\n for (const connected of this.connectedItems) {\n const potentialItem = potentialItems.find((p) => p.key === connected.key);\n\n if (!potentialItem) {\n connected.element.unmount(false);\n }\n }\n\n // Add new views and update state for existing ones.\n for (const potential of potentialItems) {\n const connected = this.connectedItems.find((item) => item.key === potential.key);\n\n if (connected) {\n connected.setValue(potential.value);\n connected.setIndex(potential.index);\n newItems[potential.index] = connected;\n } else {\n const [$value, setValue] = createState<T>(potential.value);\n const [$index, setIndex] = createState(potential.index);\n\n newItems[potential.index] = {\n key: potential.key,\n $value,\n setValue,\n $index,\n setIndex,\n element: new View(this.elementContext, RepeatItemView, {\n $value,\n $index,\n renderFn: this.renderFn,\n }),\n };\n }\n }\n\n // Reconnect to ensure order. Lifecycle hooks won't be run again if the view is already connected.\n // TODO: Use a smarter inline reordering method. This causes scrollbars to jump.\n for (let i = 0; i < newItems.length; i++) {\n const item = newItems[i];\n const previous = newItems[i - 1]?.element.node ?? this.node;\n item.element.mount(this.node.parentNode!, previous);\n }\n\n this.connectedItems = newItems;\n\n // Move marker node to end.\n const lastItem = newItems.at(-1)?.element.node ?? this.node;\n this.node.parentNode?.insertBefore(this.node, lastItem.nextSibling);\n }\n}\n\ninterface RepeatItemProps {\n $value: State<any>;\n $index: State<number>;\n renderFn: ($value: State<any>, $index: State<number>, context: ViewContext) => ViewResult;\n}\n\nfunction RepeatItemView({ $value, $index, renderFn }: RepeatItemProps, context: ViewContext) {\n context.setName(\"@RepeatItem\");\n return renderFn.call(context, $value, $index, context);\n}\n","import htm from \"htm/mini\";\n\nimport { isArray, isArrayOf, isFunction, isNumber, isString } from \"../typeChecking.js\";\nimport type { Renderable } from \"../types.js\";\nimport type { ElementContext } from \"./context.js\";\nimport { DOMNode } from \"./nodes/dom.js\";\nimport { HTML } from \"./nodes/html.js\";\nimport { Observer } from \"./nodes/observer.js\";\nimport { Outlet } from \"./nodes/outlet.js\";\nimport { Portal } from \"./nodes/portal.js\";\nimport { Repeat } from \"./nodes/repeat.js\";\nimport { View, type ViewContext, type ViewFunction, type ViewResult } from \"./nodes/view.js\";\nimport { isState, toState, type MaybeState, type State } from \"./state.js\";\nimport { IS_MARKUP, IS_MARKUP_ELEMENT } from \"./symbols.js\";\n\n/*===========================*\\\n|| Markup ||\n\\*===========================*/\n\n/**\n * Markup is a set of element metadata that hasn't been constructed into a MarkupElement yet.\n */\nexport interface Markup {\n /**\n * In the case of a view, type will be the View function itself. It can also hold an identifier for special nodes like \"$cond\", \"$repeat\", etc.\n * DOM nodes can be created by name, such as HTML elements like \"div\", \"ul\" or \"span\", SVG elements like \"\"\n */\n type: string | ViewFunction<any>;\n /**\n * Data that will be passed to a new MarkupElement instance when it is constructed.\n */\n props?: Record<string, any>;\n /**\n *\n */\n children?: Markup[];\n}\n\n/**\n * A DOM node that has been constructed from a Markup object.\n */\nexport interface MarkupElement {\n readonly node?: Node;\n\n readonly isMounted: boolean;\n\n mount(parent: Node, after?: Node): void;\n\n /**\n * Disconnect from the DOM and clean up. If parentIsUnmounting, DOM operations are skipped.\n * parentIsUnmounting is set for all children by HTML nodes when they unmount.\n */\n unmount(parentIsUnmounting?: boolean): void;\n}\n\nexport function isMarkup(value: any): value is Markup {\n return value?.[IS_MARKUP] === true;\n}\n\nexport function isMarkupElement(value: any): value is MarkupElement {\n return value?.[IS_MARKUP_ELEMENT] === true;\n}\n\nexport function toMarkup(renderables: Renderable | Renderable[]): Markup[] {\n if (!isArray(renderables)) {\n renderables = [renderables];\n }\n\n return renderables\n .flat(Infinity)\n .filter((x) => x !== null && x !== undefined && x !== false)\n .map((x) => {\n if (isMarkup(x)) {\n return x;\n }\n\n if (x instanceof Node) {\n return createMarkup(\"$node\", { value: x });\n }\n\n if (isState(x)) {\n return createMarkup(\"$observer\", {\n sources: [x],\n renderFn: (x) => x,\n });\n }\n\n // fallback to displaying value as text\n return createMarkup(\"$text\", { value: x });\n });\n}\n\nexport interface MarkupAttributes {\n $text: { value: any };\n $repeat: {\n $items: State<any[]>;\n keyFn: (value: any, index: number) => string | number | symbol;\n renderFn: ($item: State<any>, $index: State<number>, c: ViewContext) => ViewResult;\n };\n $observer: {\n sources: MaybeState<any>[];\n renderFn: (...items: any) => Renderable;\n };\n $outlet: {\n $children: State<MarkupElement[]>;\n };\n $node: {\n value: Node;\n };\n $portal: {\n content: Renderable;\n parent: Node;\n };\n\n [tag: string]: Record<string, any>;\n}\n\nexport function createMarkup<T extends keyof MarkupAttributes>(\n type: T,\n attributes: MarkupAttributes[T],\n ...children: Renderable[]\n): Markup;\n\nexport function createMarkup<I>(type: ViewFunction<I>, attributes?: I, ...children: Renderable[]): Markup;\n\nexport function createMarkup<P>(type: string | ViewFunction<P>, props?: P, ...children: Renderable[]) {\n return new VNode(type, props as any, ...children);\n}\n\nclass VNode<P extends Record<any, any>> implements Markup {\n [IS_MARKUP] = true;\n\n type;\n props;\n children;\n\n constructor(type: string | ViewFunction<P>, props?: P, ...children: Renderable[]) {\n this.type = type;\n this.props = props;\n this.children = toMarkup(children);\n }\n}\n\n/*===========================*\\\n|| View Helpers ||\n\\*===========================*/\n\n/**\n * Generate markup with HTML in a tagged template literal.\n */\nexport const html = htm.bind(createMarkup);\n\n/**\n * Displays content conditionally. When `predicate` holds a truthy value, `thenContent` is displayed; when `predicate` holds a falsy value, `elseContent` is displayed.\n */\nexport function cond(predicate: MaybeState<any>, thenContent?: Renderable, elseContent?: Renderable): Markup {\n return createMarkup(\"$observer\", {\n sources: [predicate],\n renderFn: (value) => {\n if (value && thenContent) {\n return thenContent;\n } else if (!value && elseContent) {\n return elseContent;\n }\n return null;\n },\n });\n}\n\n/**\n * Calls `renderFn` for each item in `items`. Dynamically adds and removes views as items change.\n * The result of `keyFn` is used to compare items and decide if item was added, removed or updated.\n */\nexport function repeat<T>(\n items: MaybeState<T[]>,\n keyFn: (value: T, index: number) => string | number | symbol,\n renderFn: ($value: State<T>, $index: State<number>, ctx: ViewContext) => ViewResult,\n): Markup {\n const $items = toState(items);\n return createMarkup(\"$repeat\", { $items, keyFn, renderFn });\n}\n\n/**\n * Renders `content` into a `parent` node anywhere in the page, rather than its usual position in the view.\n */\nexport function portal(parent: Node, content: Renderable): Markup {\n return createMarkup(\"$portal\", { parent, content });\n}\n\n/*===========================*\\\n|| Render ||\n\\*===========================*/\n\n/**\n * Construct Markup metadata into a set of MarkupElements.\n */\nexport function constructMarkup(elementContext: ElementContext, markup: Markup | Markup[]): MarkupElement[] {\n const items = isArray(markup) ? markup : [markup];\n\n return items.map((item) => {\n if (isFunction(item.type)) {\n return new View(elementContext, item.type as ViewFunction<any>, item.props, item.children);\n } else if (isString(item.type)) {\n switch (item.type) {\n case \"$node\": {\n const attrs = item.props! as MarkupAttributes[\"$node\"];\n return new DOMNode(attrs.value);\n }\n case \"$text\": {\n const attrs = item.props! as MarkupAttributes[\"$text\"];\n return new DOMNode(document.createTextNode(String(attrs.value)));\n }\n case \"$repeat\": {\n const attrs = item.props! as MarkupAttributes[\"$repeat\"];\n return new Repeat({\n $items: attrs.$items,\n keyFn: attrs.keyFn,\n renderFn: attrs.renderFn,\n elementContext,\n });\n }\n case \"$observer\": {\n const attrs = item.props! as MarkupAttributes[\"$observer\"];\n return new Observer({\n sources: attrs.sources,\n renderFn: attrs.renderFn,\n elementContext,\n });\n }\n case \"$outlet\": {\n const attrs = item.props! as MarkupAttributes[\"$outlet\"];\n return new Outlet(attrs.$children);\n }\n case \"$portal\": {\n const attrs = item.props! as MarkupAttributes[\"$portal\"];\n return new Portal({\n content: attrs.content,\n parent: attrs.parent,\n elementContext,\n });\n }\n default:\n if (item.type.startsWith(\"$\")) {\n throw new Error(`Unknown markup type: ${item.type}`);\n }\n return new HTML({\n tag: item.type,\n props: item.props ?? {},\n children: item.children,\n elementContext,\n });\n }\n } else {\n throw new TypeError(`Expected a string or view function. Got: ${item.type}`);\n }\n });\n}\n\n/**\n * Combines one or more MarkupElements into a single MarkupElement.\n */\nexport function groupElements(elements: MarkupElement[]): MarkupElement {\n if (elements.length === 1) {\n return elements[0];\n }\n\n return new Outlet(elements);\n}\n\nexport function isRenderable(value: unknown): value is Renderable {\n return (\n value == null ||\n value === false ||\n isString(value) ||\n isNumber(value) ||\n isMarkup(value) ||\n isState(value) ||\n isArrayOf(isRenderable, value)\n );\n}\n","import { type ViewContext } from \"../core/nodes/view.js\";\n\n/**\n * A utility view that simply displays its children.\n */\nexport function Passthrough(_: {}, ctx: ViewContext) {\n return ctx.outlet();\n}\n"],"names":["exports","_slicedToArray","a","b","c","e","f","g","h","rgbToHex","hslToRgb","d","i","hslGeneration","standardHashFunction","generateColorHash","j","k","l","m","n","o","p","q","r","s","module","typeOf","value","type","assert","condition","errorMessage","formatError","isArray","isArrayOf","args","check","test","item","assertArrayOf","message","isString","assertString","isFunction","isClass","isNumber","assertInstanceOf","constructor","isObject","typeName","valueString","_a","es6","equal","length","keys","key","noOp","idCounter","getUniqueId","strictEqual","shallowEqual","t","size","deepEqual","_deepEqual","omit","object","process","newObject","colorFromString","colorHash","createMatcher","pattern","matchers","parts","part","section","name","positive","negative","fn","Stats","dolla","__privateAdd","_logger","_store","__privateSet","_getStore","timeout","__privateGet","_createStore","emitter","Emitter","stats","amount","_onWatcherAdded","_onWatcherRemoved","_onViewMounted","_onViewUnmounted","IS_STATE","IS_REF","IS_MARKUP","IS_MARKUP_ELEMENT","IS_STORE","IS_STORE_FACTORY","isState","toValue","source","toState","Signal","callback","options","ValueHolder","__publicField","action","watcher","err","index","createState","holder","EMPTY","DerivedValueHolder","states","createWatcher","watchers","sources","sourceValues","changed","current","next","derive","stopFns","stop","createRef","ref","isRef","ContextEvent","detail","_propagationStopped","Context$1","store","descriptors","ctx","eventName","listener","wrappedListener","_eventName","event","view","isStopped","Store","elementContext","error","context","Context","isStoreFactory","isStore","createStore","factory","StoreError","htm","DOMNode","node","parent","after","parentIsUnmounting","isCamelCaseEventName","HTML","tag","props","children","constructMarkup","child","previous","updateKey","element","values","privateProps","_key","styles","stopCallbacks","propStopCallbacks","unapply","mapped","getStyleMap","priority","classes","classStopCallbacks","getClassMap","names","lines","line","_value","entry","camelToKebab","$","ofs","Observer","renderFn","content","isRenderable","newElements","isMarkupElement","toMarkup","lastChildNextSibling","_c","_b","Outlet","Portal","config","_parent","_after","groupElements","createView","createMarkup","_View","wasConnected","result","isMarkup","x","View","Repeat","$items","keyFn","potentialItems","newItems","connected","potential","$value","setValue","$index","setIndex","RepeatItemView","lastItem","renderables","VNode","html","cond","predicate","thenContent","elseContent","repeat","items","portal","markup","attrs","elements","Passthrough","_"],"mappings":"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","x_google_ignoreList":[0,2,4,11]}
|