aberdeen 1.18.1 → 1.18.2

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.
Files changed (78) hide show
  1. package/dist/src/aberdeen.d.ts +2 -0
  2. package/dist/src/aberdeen.js +21 -7
  3. package/dist/src/aberdeen.js.map +3 -3
  4. package/dist/tests/fakedom.js +20 -3
  5. package/dist/tests/fakedom.js.map +3 -3
  6. package/dist/tests/helpers.js +20 -3
  7. package/dist/tests/helpers.js.map +3 -3
  8. package/dist-docs/Tutorial/index.html +2 -2
  9. package/dist-docs/aberdeen/A/index.html +3 -2
  10. package/dist-docs/aberdeen/CUSTOM_DUMP/index.html +2 -2
  11. package/dist-docs/aberdeen/NO_COPY/index.html +2 -2
  12. package/dist-docs/aberdeen/OPAQUE/index.html +2 -2
  13. package/dist-docs/aberdeen/PromiseProxy/index.html +5 -5
  14. package/dist-docs/aberdeen/clean/index.html +2 -2
  15. package/dist-docs/aberdeen/clone/index.html +2 -2
  16. package/dist-docs/aberdeen/copy/index.html +3 -3
  17. package/dist-docs/aberdeen/count/index.html +2 -2
  18. package/dist-docs/aberdeen/cssVars/index.html +2 -2
  19. package/dist-docs/aberdeen/darkMode/index.html +2 -2
  20. package/dist-docs/aberdeen/default/index.html +3 -2
  21. package/dist-docs/aberdeen/derive/index.html +2 -2
  22. package/dist-docs/aberdeen/disableCreateDestroy/index.html +2 -2
  23. package/dist-docs/aberdeen/dump/index.html +2 -2
  24. package/dist-docs/aberdeen/index.html +2 -2
  25. package/dist-docs/aberdeen/insertCss/index.html +2 -2
  26. package/dist-docs/aberdeen/insertGlobalCss/index.html +2 -2
  27. package/dist-docs/aberdeen/invertString/index.html +2 -2
  28. package/dist-docs/aberdeen/isEmpty/index.html +2 -2
  29. package/dist-docs/aberdeen/map/index.html +4 -4
  30. package/dist-docs/aberdeen/merge/index.html +3 -3
  31. package/dist-docs/aberdeen/mount/index.html +2 -2
  32. package/dist-docs/aberdeen/multiMap/index.html +4 -4
  33. package/dist-docs/aberdeen/onEach/index.html +2 -2
  34. package/dist-docs/aberdeen/partition/index.html +4 -4
  35. package/dist-docs/aberdeen/peek/index.html +5 -5
  36. package/dist-docs/aberdeen/proxy/index.html +2 -2
  37. package/dist-docs/aberdeen/ref/index.html +2 -2
  38. package/dist-docs/aberdeen/runQueue/index.html +2 -2
  39. package/dist-docs/aberdeen/setErrorHandler/index.html +2 -2
  40. package/dist-docs/aberdeen/setSpacingCssVars/index.html +2 -2
  41. package/dist-docs/aberdeen/unmountAll/index.html +2 -2
  42. package/dist-docs/aberdeen/unproxy/index.html +2 -2
  43. package/dist-docs/assets/aberdeen/aberdeen.d.ts +2 -0
  44. package/dist-docs/assets/aberdeen/aberdeen.js +21 -7
  45. package/dist-docs/assets/aberdeen/aberdeen.js.map +3 -3
  46. package/dist-docs/dispatcher/Dispatcher/index.html +4 -4
  47. package/dist-docs/dispatcher/MATCH_FAILED/index.html +2 -2
  48. package/dist-docs/dispatcher/MATCH_REST/index.html +2 -2
  49. package/dist-docs/dispatcher/index.html +2 -2
  50. package/dist-docs/hierarchy.html +1 -1
  51. package/dist-docs/index.html +2 -2
  52. package/dist-docs/media/CHANGELOG.md +6 -0
  53. package/dist-docs/modules.html +1 -1
  54. package/dist-docs/prediction/applyCanon/index.html +2 -2
  55. package/dist-docs/prediction/applyPrediction/index.html +2 -2
  56. package/dist-docs/prediction/index.html +2 -2
  57. package/dist-docs/route/Route/index.html +9 -9
  58. package/dist-docs/route/back/index.html +2 -2
  59. package/dist-docs/route/current/index.html +2 -2
  60. package/dist-docs/route/go/index.html +2 -2
  61. package/dist-docs/route/index.html +2 -2
  62. package/dist-docs/route/interceptLinks/index.html +2 -2
  63. package/dist-docs/route/matchCurrent/index.html +2 -2
  64. package/dist-docs/route/persistScroll/index.html +2 -2
  65. package/dist-docs/route/push/index.html +2 -2
  66. package/dist-docs/route/setLog/index.html +2 -2
  67. package/dist-docs/route/up/index.html +2 -2
  68. package/dist-docs/sitemap.xml +59 -59
  69. package/dist-docs/transitions/grow/index.html +2 -2
  70. package/dist-docs/transitions/index.html +2 -2
  71. package/dist-docs/transitions/shrink/index.html +2 -2
  72. package/package.json +1 -1
  73. package/skill/aberdeen.md +56 -54
  74. package/skill/dispatcher.md +6 -6
  75. package/skill/prediction.md +3 -3
  76. package/skill/route.md +18 -18
  77. package/skill/transitions.md +3 -3
  78. package/src/aberdeen.ts +26 -9
@@ -35,6 +35,23 @@ var getCounts = function() {
35
35
  var clearBody = function() {
36
36
  document.body.childNodes.length = 0;
37
37
  };
38
+ function makeStyle() {
39
+ const s = {};
40
+ Object.defineProperties(s, {
41
+ setProperty: { value(k, v) {
42
+ s[k] = v;
43
+ changeCount++;
44
+ } },
45
+ removeProperty: { value(k) {
46
+ delete s[k];
47
+ changeCount++;
48
+ } },
49
+ getPropertyValue: { value(k) {
50
+ return s[k] ?? "";
51
+ } }
52
+ });
53
+ return s;
54
+ }
38
55
 
39
56
  class Node {
40
57
  parentNode = null;
@@ -59,7 +76,7 @@ class Node {
59
76
  class Element extends Node {
60
77
  tagName;
61
78
  namespaceURI;
62
- _style = {};
79
+ _style = makeStyle();
63
80
  attrs = {};
64
81
  events = {};
65
82
  _classList;
@@ -195,7 +212,7 @@ class Element extends Node {
195
212
  set style(val) {
196
213
  if (val !== "")
197
214
  throw new Error("non-empty style string cannot be emulated");
198
- this._style = {};
215
+ this._style = makeStyle();
199
216
  changeCount++;
200
217
  }
201
218
  get style() {
@@ -588,5 +605,5 @@ export {
588
605
  clearBody
589
606
  };
590
607
 
591
- //# debugId=DF55C10CD150A50F64756E2164756E21
608
+ //# debugId=6A274713F60ECF7C64756E2164756E21
592
609
  //# sourceMappingURL=fakedom.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../../tests/fakedom.ts"],
4
4
  "sourcesContent": [
5
- "let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n \n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n"
5
+ "let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\n// A minimal stand-in for CSSStyleDeclaration: a plain string bag (so `style[prop]` keeps working)\n// plus the setProperty/getPropertyValue/removeProperty methods needed for custom properties.\n// The methods are non-enumerable so they don't leak into `Object.keys()`/`for..in` iteration.\nfunction makeStyle(): Record<string, string> {\n const s: Record<string, string> = {};\n Object.defineProperties(s, {\n setProperty: { value(k: string, v: string) { s[k] = v; changeCount++; } },\n removeProperty: { value(k: string) { delete s[k]; changeCount++; } },\n getPropertyValue: { value(k: string) { return s[k] ?? \"\"; } },\n });\n return s;\n}\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = makeStyle();\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = makeStyle();\n changeCount++;\n }\n\n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "DF55C10CD150A50F64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "6A274713F60ECF7C64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -35,6 +35,23 @@ var getCounts = function() {
35
35
  var clearBody = function() {
36
36
  document2.body.childNodes.length = 0;
37
37
  };
38
+ function makeStyle() {
39
+ const s = {};
40
+ Object.defineProperties(s, {
41
+ setProperty: { value(k, v) {
42
+ s[k] = v;
43
+ changeCount++;
44
+ } },
45
+ removeProperty: { value(k) {
46
+ delete s[k];
47
+ changeCount++;
48
+ } },
49
+ getPropertyValue: { value(k) {
50
+ return s[k] ?? "";
51
+ } }
52
+ });
53
+ return s;
54
+ }
38
55
 
39
56
  class Node {
40
57
  parentNode = null;
@@ -59,7 +76,7 @@ class Node {
59
76
  class Element2 extends Node {
60
77
  tagName;
61
78
  namespaceURI;
62
- _style = {};
79
+ _style = makeStyle();
63
80
  attrs = {};
64
81
  events = {};
65
82
  _classList;
@@ -195,7 +212,7 @@ class Element2 extends Node {
195
212
  set style(val) {
196
213
  if (val !== "")
197
214
  throw new Error("non-empty style string cannot be emulated");
198
- this._style = {};
215
+ this._style = makeStyle();
199
216
  changeCount++;
200
217
  }
201
218
  get style() {
@@ -685,5 +702,5 @@ export {
685
702
  AssertError
686
703
  };
687
704
 
688
- //# debugId=5CEC966923AD557764756E2164756E21
705
+ //# debugId=7761AADF40E4135564756E2164756E21
689
706
  //# sourceMappingURL=helpers.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../../tests/fakedom.ts", "../../tests/helpers.ts"],
4
4
  "sourcesContent": [
5
- "let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = {};\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = {};\n changeCount++;\n }\n \n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n",
5
+ "let newCount: number = 0, changeCount: number = 0;\nexport const resetCounts = function(): void { newCount = changeCount = 0; };\nexport const getCounts = function(): { new: number, changed: number } { \n return { new: newCount, changed: changeCount }; \n};\nexport const clearBody = function(): void {\n document.body.childNodes.length = 0;\n};\n\n// A minimal stand-in for CSSStyleDeclaration: a plain string bag (so `style[prop]` keeps working)\n// plus the setProperty/getPropertyValue/removeProperty methods needed for custom properties.\n// The methods are non-enumerable so they don't leak into `Object.keys()`/`for..in` iteration.\nfunction makeStyle(): Record<string, string> {\n const s: Record<string, string> = {};\n Object.defineProperties(s, {\n setProperty: { value(k: string, v: string) { s[k] = v; changeCount++; } },\n removeProperty: { value(k: string) { delete s[k]; changeCount++; } },\n getPropertyValue: { value(k: string) { return s[k] ?? \"\"; } },\n });\n return s;\n}\n\nclass Node {\n parentNode: Element | null = null;\n childNodes: Node[] = [];\n \n get nextSibling(): Node | undefined {\n return this.getSibling(+1);\n }\n \n get previousSibling(): Node | undefined {\n return this.getSibling(-1);\n }\n \n getSibling(delta: number): Node | undefined {\n if (!this.parentNode) return undefined;\n let siblings = this.parentNode.childNodes;\n let idx = siblings.indexOf(this);\n if (idx < 0) throw new Error(\"not part of siblings!?\");\n return siblings[idx + delta];\n }\n}\n\nclass Element extends Node {\n tagName: string;\n namespaceURI?: string;\n _style: Record<string, string> = makeStyle();\n attrs: Record<string, string> = {};\n events: Record<string, Set<Function>> = {};\n _classList?: {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n };\n \n constructor(tag: string, namespaceURI?: string) {\n super();\n this.tagName = tag;\n this.namespaceURI = namespaceURI;\n this.childNodes = [];\n newCount++;\n }\n \n appendChild(node: Node): void {\n this.insertBefore(node, null);\n }\n \n insertBefore(node: Node, ref: Node | null): void {\n if (node.parentNode) node.parentNode.removeChild(node);\n else changeCount++;\n node.parentNode = this;\n if (ref) {\n let idx = this.childNodes.indexOf(ref);\n if (idx < 0) throw new Error(\"non-existing ref node\");\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n \n removeChild(node: Node): void {\n let idx = this.childNodes.indexOf(node);\n if (idx < 0) throw new Error(\"no such child\");\n this.childNodes.splice(idx, 1);\n node.parentNode = null;\n changeCount++;\n }\n \n remove(): void {\n this.parentNode?.removeChild(this);\n }\n \n replaceChild(newNode: Node, oldNode: Node): void {\n this.insertBefore(newNode, oldNode);\n this.removeChild(oldNode);\n }\n \n setAttribute(k: string, v: any): void {\n if (v == null || v === '') delete this.attrs[k];\n else this.attrs[k] = '' + v;\n changeCount++;\n }\n \n getAttribute(k: string): string | undefined {\n return this.attrs[k];\n }\n \n removeAttribute(k: string): void {\n delete this.attrs[k];\n changeCount++;\n }\n \n get classList(): {\n add: (...names: string[]) => void;\n remove: (...names: string[]) => void;\n toggle: (name: string, force?: boolean) => void;\n contains: (name: string) => boolean;\n } {\n return this._classList || (this._classList = {\n add: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.add(name);\n this._setClassSet(set);\n },\n remove: (...names: string[]) => {\n let set = this._getClassSet();\n for(const name of names) set.delete(name);\n this._setClassSet(set);\n },\n toggle: (name: string, force?: boolean) => {\n if (force === true || (force !== false && !this._getClassSet().has(name))) this._classList!.add(name);\n else this._classList!.remove(name);\n },\n contains: (name: string) => this._getClassSet().has(name),\n });\n }\n \n get parentElement(): Element | undefined {\n if (this.parentNode instanceof Element) return this.parentNode;\n return undefined;\n }\n \n _getClassSet(): Set<string> {\n return new Set(this.attrs.class ? this.attrs.class.split(' ') : []);\n }\n \n _setClassSet(map: Set<string>): void {\n this.setAttribute('class', Array.from(map).sort().join(' ') || undefined);\n }\n \n get firstChild(): Node | undefined {\n return this.childNodes[0];\n }\n \n get lastChild(): Node | undefined {\n return this.childNodes[this.childNodes.length - 1];\n }\n \n set textContent(text: string) {\n this.childNodes = [new TextNode(text)];\n }\n \n get textContent() {\n let text = '';\n for(let child of this.childNodes) {\n if (child instanceof TextNode) {\n text += child.textContent;\n }\n }\n return text;\n }\n \n querySelectorAll(selector: string): Element[] {\n const results: Element[] = [];\n this._querySelectorAllRecursive(selector, results);\n return results;\n }\n \n private _querySelectorAllRecursive(selector: string, results: Element[]): void {\n for (const child of this.childNodes) {\n if (child instanceof Element) {\n if (child.tagName === selector) {\n results.push(child);\n }\n child._querySelectorAllRecursive(selector, results);\n }\n }\n }\n \n set innerHTML(html: string) {\n this.childNodes = [];\n if (html) {\n let n = new Element('fake-emulated-html');\n n.textContent = html;\n this.appendChild(n);\n }\n }\n \n set style(val: string) {\n if (val !== '') throw new Error(\"non-empty style string cannot be emulated\");\n this._style = makeStyle();\n changeCount++;\n }\n\n get style(): Record<string, string> {\n for(let k in this._style) {\n if (this._style[k] === '') delete this._style[k];\n }\n return this._style;\n }\n \n set className(v: string) {\n this.attrs.class = v;\n changeCount++;\n }\n \n get offsetHeight(): number {\n return 20;\n }\n \n get offsetWidth(): number {\n return 200;\n }\n \n get scrollTop(): number {\n return this._scrollTop || 0;\n }\n \n set scrollTop(value: number) {\n this._scrollTop = value;\n }\n \n get scrollLeft(): number {\n return this._scrollLeft || 0;\n }\n \n set scrollLeft(value: number) {\n this._scrollLeft = value;\n }\n \n public _scrollTop?: number;\n public _scrollLeft?: number;\n \n toString(): string {\n let arr: string[] = [];\n for(let [symbol, items, toKebab] of [['=', this.attrs, false], ['->', this, false], [':', this.style, true]] as [string, Record<string, any>, boolean][]) {\n for(let key of Object.keys(items).sort()) {\n const outputKey = toKebab ? key.replace(/[A-Z]/g, l => `-${l.toLowerCase()}`) : key;\n const prefix = outputKey + symbol;\n if (key[0] === '_' || IGNORE_OUTPUT.has(prefix)) continue;\n let value = '' + items[key];\n if (value.indexOf(\" \") >= 0 || value.indexOf(\"}\") >= 0 || !value.length) value = JSON.stringify(value);\n arr.push(prefix + value);\n }\n }\n for(let child of this.childNodes) arr.push(child.toString());\n \n const cls = this.attrs['class'] ? \".\" + this.attrs['class'].replace(/ /g, '.') : '';\n return this.tagName + cls + (arr.length ? `{${arr.join(' ')}}` : '');\n }\n \n addEventListener(name: string, func: Function): void {\n this.events[name] = this.events[name] || new Set();\n this.events[name].add(func);\n changeCount++;\n }\n \n removeEventListener(name: string, func: Function): void {\n if (this.events[name]) {\n if (this.events[name].delete(func)) {\n changeCount++;\n }\n }\n }\n \n event(info: string | { type: string; [key: string]: any }): void {\n if (typeof info === 'string') info = {type: info};\n let type = info.type;\n info.target = this;\n info.preventDefault = function() {};\n info.stopPropagation = function() { info.stopped = true; };\n let node: Element | null = this;\n while(node && !info.stopped) {\n let funcs = node.events[type];\n if (funcs) {\n for(let func of funcs) {\n func.call(node, info);\n }\n }\n node = node.parentNode;\n }\n }\n \n getElementById(id: string): Element | undefined {\n if (this.attrs.id === id) return this;\n for(let child of this.childNodes) {\n if (child instanceof Element) {\n let el = child.getElementById(id);\n if (el) return el;\n }\n }\n return undefined;\n }\n}\n\n\n\nconst document = {\n createElement: (tag: string) => new Element(tag, 'http://www.w3.org/1999/xhtml'),\n createElementNS: (namespaceURI: string, tag: string) => new Element(tag, namespaceURI),\n createTextNode: (text: string) => new TextNode(text),\n head: new Element('head', 'http://www.w3.org/1999/xhtml'),\n body: new Element('body', 'http://www.w3.org/1999/xhtml')\n};\n\n// Browser history and location simulation\nclass FakeLocation {\n private _href: string = 'http://localhost/';\n \n get href(): string { return this._href; }\n set href(value: string) { \n if (value.startsWith('/')) {\n // Relative path - convert to absolute URL\n const currentUrl = new URL(this._href);\n this._href = `${currentUrl.protocol}//${currentUrl.host}${value}`;\n } else {\n this._href = value;\n }\n }\n \n get host(): string {\n const url = new URL(this._href);\n return url.host;\n }\n \n get pathname(): string { \n const url = new URL(this._href);\n return url.pathname;\n }\n set pathname(value: string) {\n const url = new URL(this._href);\n url.pathname = value;\n this._href = url.href;\n }\n \n get search(): string {\n const url = new URL(this._href);\n return url.search;\n }\n set search(value: string) {\n const url = new URL(this._href);\n url.search = value;\n this._href = url.href;\n }\n \n get hash(): string {\n const url = new URL(this._href);\n return url.hash;\n }\n set hash(value: string) {\n const url = new URL(this._href);\n url.hash = value;\n this._href = url.href;\n }\n}\n\nclass FakeHistory {\n private _state: any = null;\n private _entries: Array<{url: string, state: any}> = [];\n private _index: number = 0;\n \n constructor() {\n // Initialize with current location\n this._entries = [{url: location.href, state: null}];\n }\n \n get state(): any {\n return this._state;\n }\n \n pushState(state: any, title: string, url: string): void {\n // Remove any entries after current index (like real browser behavior)\n this._entries = this._entries.slice(0, this._index + 1);\n \n // Add new entry\n this._entries.push({url, state});\n this._index = this._entries.length - 1;\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n replaceState(state: any, title: string, url: string): void {\n // state = JSON.parse(JSON.stringify(state)); // clone state\n this._entries[this._index] = {url, state};\n this._state = state;\n \n // Update location\n location.href = url;\n }\n \n go(delta: number): void {\n const newIndex = this._index + delta;\n if (newIndex >= 0 && newIndex < this._entries.length) {\n this._index = newIndex;\n const entry = this._entries[this._index];\n this._state = entry.state;\n location.href = entry.url;\n \n // Trigger popstate event asynchronously\n setTimeout(() => {\n const event = {\n type: 'popstate',\n state: this._state,\n target: window,\n preventDefault: () => {},\n stopPropagation: () => {}\n };\n window.dispatchEvent(event);\n }, 0);\n }\n }\n \n back(): void {\n this.go(-1);\n }\n \n forward(): void {\n this.go(1);\n }\n \n // Test helper methods\n _reset(): void {\n this._state = null;\n this._entries = [{url: location.href, state: null}];\n this._index = 0;\n }\n \n _getLength(): number {\n return this._entries.length;\n }\n}\n\nclass FakeWindow {\n private _listeners: Record<string, Set<Function>> = {};\n \n addEventListener(type: string, listener: Function): void {\n if (!this._listeners[type]) {\n this._listeners[type] = new Set();\n }\n this._listeners[type].add(listener);\n }\n \n removeEventListener(type: string, listener: Function): void {\n if (this._listeners[type]) {\n this._listeners[type].delete(listener);\n }\n }\n \n dispatchEvent(event: any): void {\n const listeners = this._listeners[event.type];\n if (listeners) {\n for (const listener of listeners) {\n listener.call(this, event);\n }\n }\n }\n \n matchMedia(query: string): MediaQueryList {\n if (!mediaQueries.has(query)) {\n mediaQueries.set(query, new MediaQueryList(query));\n }\n return mediaQueries.get(query)!;\n }\n \n // Test helper\n _reset(): void {\n this._listeners = {};\n }\n}\n\nconst location = new FakeLocation();\nconst history = new FakeHistory();\nconst window = new FakeWindow();\n\n// Reset function for tests\nexport const resetBrowserState = function(): void {\n location.href = 'http://localhost/';\n history._reset();\n // Don't reset window listeners as they're registered by the modules being tested\n};\n\ntype TimeoutItem = {\n func: () => void | Promise<void>;\n time: number;\n realId: ReturnType<typeof global.setTimeout>;\n};\n\nlet timeouts: TimeoutItem[] = [];\nlet currentTime: number = 0;\nlet deferredErrors: any[] = [];\n\nconst realSetTimeout = global.setTimeout;\nconst realClearTimeout = global.clearTimeout;\n\nfunction fireItem(item: TimeoutItem) {\n const idx = timeouts.indexOf(item);\n if (idx < 0) return; // Already fired by passTime or another path\n timeouts.splice(idx, 1);\n if (item.time > currentTime) currentTime = item.time;\n item.func();\n}\n\nconst setTimeout = function(func: () => void, time: number): void {\n const item: TimeoutItem = { func, time: time + currentTime, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, time);\n timeouts.push(item);\n};\n\nconst queueMicrotask = function(func: () => void): void {\n const item: TimeoutItem = { func, time: 0, realId: undefined! };\n item.realId = realSetTimeout(() => {\n try { fireItem(item); }\n catch (e) { deferredErrors.push(e); }\n }, 0);\n timeouts.push(item);\n};\n\n// Fast-forward fake time, firing all timeouts up to `ms` ms ahead (default 0).\n// Awaits async timer callbacks so microtasks and chained timers complete too.\n// Rethrows any errors from timeouts that fired via real timers in the background.\nexport const passTime = async function(ms: number = 0): Promise<void> {\n let targetTime = currentTime + ms;\n while(true) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n \n // Rethrow errors from background-fired timeouts\n if (deferredErrors.length) {\n const err = deferredErrors.shift();\n throw err;\n }\n \n if (!timeouts.length) {\n // Async I/O (e.g. database commits) may still be in flight, about to schedule\n // new timeouts. Retry a few real event-loop ticks before giving up.\n let settled = false;\n for (let r = 0; r < 5 && !settled; r++) {\n await new Promise(resolve => realSetTimeout(resolve, 0));\n settled = timeouts.length > 0;\n }\n if (!settled) break;\n }\n \n // Find the earliest timeout\n let smallestIdx = 0;\n for(let idx = 1; idx < timeouts.length; idx++) {\n if (timeouts[idx].time < timeouts[smallestIdx].time) smallestIdx = idx;\n }\n let item = timeouts[smallestIdx];\n \n if (item.time > targetTime) break;\n \n // Fire early, cancel real timer\n timeouts.splice(smallestIdx, 1);\n realClearTimeout(item.realId);\n if (item.time > currentTime) currentTime = item.time;\n await item.func();\n }\n currentTime = targetTime;\n};\n\nconst IGNORE_OUTPUT = new Set(\"tagName-> attrs-> events-> childNodes-> parentNode-> class= namespaceURI->\".split(\" \"));\n\nclass TextNode extends Node {\n textContent: string;\n \n constructor(textContent: string) {\n super();\n this.textContent = '' + textContent;\n newCount++;\n }\n \n toString(): string {\n return JSON.stringify(this.textContent);\n }\n \n remove() {\n this.parentNode?.removeChild(this);\n }\n}\n\nfunction getComputedStyle(el: Element): Record<string, string> {\n return el._style;\n}\n\n// MediaQueryList mock for testing\nclass MediaQueryList {\n matches: boolean;\n media: string;\n private listeners: Set<(event: any) => void> = new Set();\n \n constructor(query: string) {\n this.media = query;\n // Check if there's a preset value, otherwise default to light mode\n const preset = mediaQueryPresets.get(query);\n this.matches = preset !== undefined ? preset : (query.includes('dark') ? false : true);\n }\n \n addEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.add(listener);\n }\n }\n \n removeEventListener(type: string, listener: (event: any) => void) {\n if (type === 'change') {\n this.listeners.delete(listener);\n }\n }\n \n // Test helper to simulate media query changes\n _trigger(matches: boolean) {\n this.matches = matches;\n const event = { matches, media: this.media };\n for (const listener of this.listeners) {\n listener(event);\n }\n }\n}\n\nconst mediaQueries = new Map<string, MediaQueryList>();\nconst mediaQueryPresets = new Map<string, boolean>();\n\n// Set media query value and trigger change event if already initialized\nexport function setMediaQuery(query: string, matches: boolean) {\n mediaQueryPresets.set(query, matches);\n // If already created, update it and trigger change\n if (mediaQueries.has(query)) {\n mediaQueries.get(query)!._trigger(matches);\n }\n}\n\n// Bun lacks `Temporal`, so install a mock. Each type uses a private brand so that\n// calling a method on a proxied instance throws, matching the real behavior.\nconst Temporal: Record<string, new (...args: any[]) => object> = {};\nfor (const name of \"Duration Instant PlainDate PlainDateTime PlainMonthDay PlainTime PlainYearMonth ZonedDateTime\".split(\" \")) {\n Temporal[name] = class {\n #brand = true;\n toString() {\n this.#brand; // throws if `this` is a proxy rather than the real instance\n return `[Temporal.${name}]`;\n }\n };\n}\n\n\nconst globals = {Node, Element, TextNode, document, window, setTimeout, queueMicrotask, getComputedStyle, location, history, URLSearchParams, Temporal};\nObject.assign(global, globals);\nObject.assign(window, globals);\n",
6
6
  "import { expect } from 'bun:test';\nimport * as fakedom from './fakedom';\nexport * as fakedom from './fakedom';\n\n// Fakedom must be imported first, as it sets up the global environment.\nimport A from \"aberdeen\";\n\nfunction toDisplay(value: any) {\n\tif (value instanceof Map) {\n\t\tlet results: string[] = []\n\t\tvalue.forEach((value,key) => results.push(JSON.stringify(key)+\": \"+JSON.stringify(value)))\n\t\treturn \"map{\" + results.join(\", \") + \"}\"\n\t} else {\n\t\treturn JSON.stringify(value)\n\t}\n}\n\nexport class AssertError extends Error {\n\tconstructor(text: string, actual: any, expected: any, expectLiteral: boolean = false) {\n\t\ttext += `\n\t\tActual: ${toDisplay(actual)}\n\t\tExpected: ${expectLiteral ? expected : toDisplay(expected)}`\n\t\tsuper(text)\n\t}\n}\n\nexport function assert(bool: any, msg?: string): void {\n\tif (!bool) throw new AssertError(`assert failed${msg ? \": \"+msg : \"\"}`, bool, \"something trueish\", true)\n}\n\nexport function assertContains(actual: any, expected: {indexOf: (v: any)=>number}, msg?: string): void {\n\tactual = (''+actual)\n\tif (actual.indexOf(expected) < 0) throw new AssertError(`contains failed ${msg ? \": \"+msg : \"\"}`, actual, `something containing '${expected}'`, true)\n}\n\nexport function getBody(): string {\n\treturn document.body.toString().replace(/^body{(.*)}$/,'$1').replace(/^body\\b/,'')\n}\n\nexport function assertBody(expected: string): void {\n\tlet actual = getBody();\n\tif (actual !== expected) throw new Error(`assertBody failed\\nActual: ${actual}\\nExpected: ${expected}`)\n}\n\n/** Get the full CSS content from the :root style tag in head */\nexport function getCss(): string {\n\tlet css = '';\n\tfor(const el of document.head.childNodes) {\n\t\tif (el instanceof Element && el.tagName === 'style') {\n\t\t\tcss += el.textContent + \"\\n\";\n\t\t}\n\t}\n\treturn css;\n}\n\nexport function assertCss(...expected: string[]) {\n\tconst found = getCss().split(\"\\n\").map(s => s.trim()).filter(s => s);\n\texpect(found).toEqual(expected);\n}\n\n\nexport async function assertThrow(what: string, func: ()=>void): Promise<void>;\nexport async function assertThrow(func: ()=>void): Promise<void>;\n\nexport async function assertThrow(a: any, b?: any): Promise<void> {\n\tif (typeof a == 'function') {\n\t\tb = a\n\t\ta = undefined\n\t}\n\ttry {\n\t\tawait b()\n\t} catch(e) {\n const s = ''+e\n\t\tif (a && s.indexOf(a)<0) throw new AssertError(`wrong exception`, s, `something containing \"${a}\"`, true)\n\t\treturn\n\t}\n\tthrow new AssertError(`exception expected`, undefined, `something containing \"${a}\"`, true)\n}\n\nexport const passTime = fakedom.passTime\n\nexport function assertDomUpdates(expected: {new?: number, changed?: number}) {\n\tconst counts = fakedom.getCounts()\n\tif (expected.new!=null) expect(counts.new).toEqual(expected.new)\n\tif (expected.changed!=null) expect(counts.changed).toEqual(expected.changed)\n}\n\nexport async function reset() {\n\tA.copy(A.cssVars, {});\n\tA.unmountAll();\n\ttry {\n\t\tawait fakedom.passTime(2001); // wait for deletion transitions\n\t\tassertBody(``);\n\t} finally {\n\t\t// Force-clear DOM and state even if errors occurred\n\t\tfakedom.clearBody();\n\t}\n\tfakedom.resetCounts();\n\tA.setErrorHandler();\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "5CEC966923AD557764756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "7761AADF40E4135564756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,4 @@
1
- <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tutorial | Aberdeen - v1.18.1</title><link rel="icon" href="../assets/favicon.png" type="image/png"/><meta name="description" content="Documentation for Aberdeen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script defer src="../assets/custom.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">Aberdeen - v1.18.1</a><div id="tsd-toolbar-links"><a href="https://aberdeenjs.org/">What&#39;s this?</a><a href="https://aberdeenjs.org/Tutorial/">Tutorial</a><a href="https://github.com/vanviegen/aberdeen">GitHub</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">Tutorial</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="tutorial" class="tsd-anchor-link">Tutorial<a href="#tutorial" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><h2 id="creating-elements" class="tsd-anchor-link">Creating elements<a href="#creating-elements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This is a complete Aberdeen application:</p>
1
+ <!DOCTYPE html><html class="default" lang="en" data-base="../"><head><meta charset="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>Tutorial | Aberdeen - v1.18.2</title><link rel="icon" href="../assets/favicon.png" type="image/png"/><meta name="description" content="Documentation for Aberdeen"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="../assets/style.css"/><link rel="stylesheet" href="../assets/highlight.css"/><script defer src="../assets/main.js"></script><script defer src="../assets/custom.js"></script><script async src="../assets/icons.js" id="tsd-icons-script"></script><script async src="../assets/search.js" id="tsd-search-script"></script><script async src="../assets/navigation.js" id="tsd-nav-script"></script></head><body><script>document.documentElement.dataset.theme = localStorage.getItem("tsd-theme") || "os";document.body.style.display="none";setTimeout(() => window.app?app.showPage():document.body.style.removeProperty("display"),500)</script><header class="tsd-page-toolbar"><div class="tsd-toolbar-contents container"><a href="../index.html" class="title">Aberdeen - v1.18.2</a><div id="tsd-toolbar-links"><a href="https://aberdeenjs.org/">What&#39;s this?</a><a href="https://aberdeenjs.org/Tutorial/">Tutorial</a><a href="https://github.com/vanviegen/aberdeen">GitHub</a></div><button id="tsd-search-trigger" class="tsd-widget" aria-label="Search"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-search"></use></svg></button><dialog id="tsd-search" aria-label="Search"><input role="combobox" id="tsd-search-input" aria-controls="tsd-search-results" aria-autocomplete="list" aria-expanded="true" autocapitalize="off" autocomplete="off" placeholder="Search the docs" maxLength="100"/><ul role="listbox" id="tsd-search-results"></ul><div id="tsd-search-status" aria-live="polite" aria-atomic="true"><div>Preparing search index...</div></div></dialog><a href="#" class="tsd-widget menu" id="tsd-toolbar-menu-trigger" data-toggle="menu" aria-label="Menu"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-menu"></use></svg></a></div></header><div class="container container-main"><div class="col-content"><div class="tsd-page-title"><ul class="tsd-breadcrumb" aria-label="Breadcrumb"><li><a href="" aria-current="page">Tutorial</a></li></ul></div><div class="tsd-panel tsd-typography"><h1 id="tutorial" class="tsd-anchor-link">Tutorial<a href="#tutorial" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h1><h2 id="creating-elements" class="tsd-anchor-link">Creating elements<a href="#creating-elements" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2><p>This is a complete Aberdeen application:</p>
2
2
  <pre><code class="javascript"><span class="hl-0">import</span><span class="hl-1"> </span><span class="hl-2">A</span><span class="hl-1"> </span><span class="hl-0">from</span><span class="hl-1"> </span><span class="hl-3">&#39;aberdeen&#39;</span><span class="hl-1">;</span><br/><span class="hl-7">A</span><span class="hl-1">(</span><span class="hl-3">&#39;h3#Hello world&#39;</span><span class="hl-1">);</span>
3
3
  </code><button type="button">Copy</button></pre>
4
4
 
@@ -302,4 +302,4 @@
302
302
  <li><a href="https://aberdeenjs.org/modules.html">Reference documentation</a></li>
303
303
  <li><a href="https://aberdeenjs.org/#examples">Examples</a></li>
304
304
  </ul>
305
- </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#tutorial"><span>Tutorial</span></a><ul><li><a href="#creating-elements"><span>Creating elements</span></a></li><li><a href="#inline-styles"><span>Inline styles</span></a></li><li><ul><li><a href="#property-shortcuts"><span>Property shortcuts</span></a></li><li><a href="#css-variables"><span>CSS variables</span></a></li><li><a href="#spacing-variables"><span>Spacing variables</span></a></li></ul></li><li><a href="#nesting-content"><span>Nesting content</span></a></li><li><a href="#observable-objects"><span>Observable objects</span></a></li><li><a href="#conditional-rendering"><span>Conditional rendering</span></a></li><li><a href="#observable-primitive-values"><span>Observable primitive values</span></a></li><li><a href="#observable-arrays-and-sets"><span>Observable arrays and sets</span></a></li><li><a href="#typescript-and-classes"><span>Type<wbr/>Script and classes</span></a></li><li><a href="#efficient-list-rendering-with-aoneach"><span>Efficient list rendering with <wbr/>A.on<wbr/>Each</span></a></li><li><a href="#two-way-binding"><span>Two-<wbr/>way binding</span></a></li><li><a href="#css"><span>CSS</span></a></li><li><a href="#transitions"><span>Transitions</span></a></li><li><a href="#advanced-peeking-without-subscribing"><span>Advanced: <wbr/>Peeking without subscribing</span></a></li><li><a href="#derived-values"><span>Derived values</span></a></li><li><a href="#ui-components"><span>UI <wbr/>Components</span></a></li><li><a href="#debugging-with-adump"><span>Debugging with <wbr/>A.dump()</span></a></li><li><a href="#html-to-aberdeen"><span>html-<wbr/>to-<wbr/>aberdeen</span></a></li><li><a href="#routing"><span>Routing</span></a></li><li><a href="#prediction"><span>Prediction</span></a></li><li><a href="#full-example-multi-page-app"><span>Full <wbr/>Example: <wbr/>Multi-<wbr/>page <wbr/>App</span></a></li><li><a href="#further-reading"><span>Further reading</span></a></li></ul></div></details></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://aberdeenjs.org/" class="tsd-nav-link">What&#39;s this?</a><a href="https://aberdeenjs.org/Tutorial/" class="tsd-nav-link">Tutorial</a><a href="https://github.com/vanviegen/aberdeen" class="tsd-nav-link">GitHub</a></nav><nav class="tsd-navigation"><a href="../modules.html">Aberdeen - v1.18.1</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>
305
+ </div></div><div class="col-sidebar"><div class="page-menu"><div class="tsd-navigation settings"><details class="tsd-accordion"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>Settings</h3></summary><div class="tsd-accordion-details"><div class="tsd-filter-visibility"><span class="settings-label">Member Visibility</span><ul id="tsd-filter-options"><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-protected" name="protected"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Protected</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-inherited" name="inherited" checked/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>Inherited</span></label></li><li class="tsd-filter-item"><label class="tsd-filter-input"><input type="checkbox" id="tsd-filter-external" name="external"/><svg width="32" height="32" viewBox="0 0 32 32" aria-hidden="true"><rect class="tsd-checkbox-background" width="30" height="30" x="1" y="1" rx="6" fill="none"></rect><path class="tsd-checkbox-checkmark" d="M8.35422 16.8214L13.2143 21.75L24.6458 10.25" stroke="none" stroke-width="3.5" stroke-linejoin="round" fill="none"></path></svg><span>External</span></label></li></ul></div><div class="tsd-theme-toggle"><label class="settings-label" for="tsd-theme">Theme</label><select id="tsd-theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></div></div></details></div><details open class="tsd-accordion tsd-page-navigation"><summary class="tsd-accordion-summary"><svg width="20" height="20" viewBox="0 0 24 24" fill="none" aria-hidden="true"><use href="../assets/icons.svg#icon-chevronDown"></use></svg><h3>On This Page</h3></summary><div class="tsd-accordion-details"><a href="#tutorial"><span>Tutorial</span></a><ul><li><a href="#creating-elements"><span>Creating elements</span></a></li><li><a href="#inline-styles"><span>Inline styles</span></a></li><li><ul><li><a href="#property-shortcuts"><span>Property shortcuts</span></a></li><li><a href="#css-variables"><span>CSS variables</span></a></li><li><a href="#spacing-variables"><span>Spacing variables</span></a></li></ul></li><li><a href="#nesting-content"><span>Nesting content</span></a></li><li><a href="#observable-objects"><span>Observable objects</span></a></li><li><a href="#conditional-rendering"><span>Conditional rendering</span></a></li><li><a href="#observable-primitive-values"><span>Observable primitive values</span></a></li><li><a href="#observable-arrays-and-sets"><span>Observable arrays and sets</span></a></li><li><a href="#typescript-and-classes"><span>Type<wbr/>Script and classes</span></a></li><li><a href="#efficient-list-rendering-with-aoneach"><span>Efficient list rendering with <wbr/>A.on<wbr/>Each</span></a></li><li><a href="#two-way-binding"><span>Two-<wbr/>way binding</span></a></li><li><a href="#css"><span>CSS</span></a></li><li><a href="#transitions"><span>Transitions</span></a></li><li><a href="#advanced-peeking-without-subscribing"><span>Advanced: <wbr/>Peeking without subscribing</span></a></li><li><a href="#derived-values"><span>Derived values</span></a></li><li><a href="#ui-components"><span>UI <wbr/>Components</span></a></li><li><a href="#debugging-with-adump"><span>Debugging with <wbr/>A.dump()</span></a></li><li><a href="#html-to-aberdeen"><span>html-<wbr/>to-<wbr/>aberdeen</span></a></li><li><a href="#routing"><span>Routing</span></a></li><li><a href="#prediction"><span>Prediction</span></a></li><li><a href="#full-example-multi-page-app"><span>Full <wbr/>Example: <wbr/>Multi-<wbr/>page <wbr/>App</span></a></li><li><a href="#further-reading"><span>Further reading</span></a></li></ul></div></details></div><div class="site-menu"><nav id="tsd-sidebar-links" class="tsd-navigation"><a href="https://aberdeenjs.org/" class="tsd-nav-link">What&#39;s this?</a><a href="https://aberdeenjs.org/Tutorial/" class="tsd-nav-link">Tutorial</a><a href="https://github.com/vanviegen/aberdeen" class="tsd-nav-link">GitHub</a></nav><nav class="tsd-navigation"><a href="../modules.html">Aberdeen - v1.18.2</a><ul class="tsd-small-nested-navigation" id="tsd-nav-container"><li>Loading...</li></ul></nav></div></div></div><footer></footer><div class="overlay"></div></body></html>