olova 2.0.62 → 2.0.64

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core.js CHANGED
@@ -171,7 +171,7 @@ function requireSetupContext(apiName) {
171
171
  return currentSetupContext;
172
172
  }
173
173
  function toText(value) {
174
- if (value === null || value === void 0) {
174
+ if (value === null || value === void 0 || value === false || value === true) {
175
175
  return "";
176
176
  }
177
177
  if (Array.isArray(value)) {
@@ -233,7 +233,7 @@ function sanitizeHtml(html) {
233
233
  return template.innerHTML;
234
234
  }
235
235
  function toHtml(value) {
236
- if (value === null || value === void 0) {
236
+ if (value === null || value === void 0 || value === false || value === true) {
237
237
  return "";
238
238
  }
239
239
  if (Array.isArray(value)) {
@@ -307,6 +307,7 @@ function bindJsxEventsInRange(range) {
307
307
  };
308
308
  }
309
309
  const listeners = [];
310
+ const handlerIds = /* @__PURE__ */ new Set();
310
311
  const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);
311
312
  let current = walker.currentNode;
312
313
  while (current) {
@@ -324,6 +325,7 @@ function bindJsxEventsInRange(range) {
324
325
  }
325
326
  const eventName = attr.name.slice("data-o-jsx-".length);
326
327
  const handlerId = attr.value;
328
+ handlerIds.add(handlerId);
327
329
  const listener = (event) => {
328
330
  const handler = handlers.get(handlerId);
329
331
  if (typeof handler === "function") {
@@ -341,6 +343,9 @@ function bindJsxEventsInRange(range) {
341
343
  for (const cleanup of listeners) {
342
344
  cleanup();
343
345
  }
346
+ for (const handlerId of handlerIds) {
347
+ handlers.delete(handlerId);
348
+ }
344
349
  };
345
350
  }
346
351
  function replaceTokenWithTextNode(root, token) {
package/dist/core.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect","preactComputed"],"mappings":"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","file":"core.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n type Signal,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\r\n if (value === null || value === undefined) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toText).join(\"\");\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim().toLowerCase();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n attrValue.startsWith(\"javascript:\")\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\r\n if (value === null || value === undefined) {\r\n return \"\";\r\n }\r\n if (Array.isArray(value)) {\r\n return value.map(toHtml).join(\"\");\r\n }\r\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\r\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\r\n if (!handlers) {\r\n return () => {};\r\n }\r\n\r\n const listeners: Array<() => void> = [];\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.currentNode as Element | null;\r\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\r\n const handlerId = attr.value;\r\n const listener: EventListener = (event) => {\r\n const handler = handlers.get(handlerId);\r\n if (typeof handler === \"function\") {\r\n handler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\r\n for (const cleanup of listeners) {\r\n cleanup();\r\n }\r\n };\r\n}\r\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = effect(() => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = effect(() => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = effect(() => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = effect(() => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = slotFactory();\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: OlovaProps | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = effect(() => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = { ...nextProps };\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = effect(() => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = binding.trueBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = binding.falseBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n currentSetupContext = context;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n try {\r\n const descriptor = instance.component.setup(instance.props, instance.slots);\r\n instance.disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n renderMountedInstance(instance);\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
1
+ {"version":3,"sources":["../core/signals-core.ts","../runtime/component.ts","../runtime/global.ts"],"names":["preactSignal","preactEffect","preactComputed"],"mappings":";;;AA2BA,IAAM,UAAA,uBAAiB,OAAA,EAAwB;AAC/C,IAAM,UAAA,uBAAiB,OAAA,EAAwB;AAC/C,IAAM,UAAA,uBAAiB,OAAA,EAAiC;AACxD,IAAM,kBAAqC,EAAC;AAE5C,SAAS,SAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,YAAe,KAAA,EAAa;AACnC,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAQ,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA,IAAK,KAAA;AACnC;AAaO,IAAM,SAAN,MAAgB;AAAA,EACJ,MAAA;AAAA,EACA,OAAA;AAAA,EACT,KAAA,GAAkB,IAAA;AAAA,EAE1B,WAAA,CACE,OAAA,EACA,MAAA,EACA,OAAA,EACA;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA,IAAWA,MAAA,CAAa,OAAO,CAAA;AAC7C,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA,IAAWA,MAAA,CAAa,CAAC,CAAA;AAAA,EAC1C;AAAA,EAEA,IAAI,KAAA,GAAW;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA;AACb,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,KAAK,CAAA;AAAA,EAChD;AAAA,EAEA,IAAI,MAAM,IAAA,EAAS;AACjB,IAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AACrC,IAAA,IAAI,OAAO,EAAA,CAAG,IAAA,CAAK,OAAO,IAAA,EAAK,EAAG,YAAY,CAAA,EAAG;AAC/C,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,OAAO,KAAA,GAAQ,YAAA;AAAA,EACtB;AAAA,EAEA,IAAA,GAAU;AACR,IAAA,OAAO,IAAA,CAAK,OAAO,IAAA,EAAK;AAAA,EAC1B;AAAA,EAEA,MAAA,GAAe;AACb,IAAA,IAAA,CAAK,OAAA,CAAQ,KAAA,GAAQ,IAAA,CAAK,OAAA,CAAQ,MAAK,GAAI,CAAA;AAAA,EAC7C;AAAA,EAEA,UAAU,EAAA,EAAoC;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,SAAA,CAAU,EAAE,CAAA;AAAA,EACjC;AAAA,EAEA,OAAA,GAAa;AACX,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEA,QAAA,GAAmB;AACjB,IAAA,OAAO,MAAA,CAAO,KAAK,KAAK,CAAA;AAAA,EAC1B;AAAA,EAEA,MAAA,GAAY;AACV,IAAA,OAAO,KAAK,IAAA,EAAK;AAAA,EACnB;AAAA,EAEQ,iBAAiB,KAAA,EAAa;AACpC,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG;AACpB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAK,KAAA,IAAS,UAAA,CAAW,IAAI,IAAA,CAAK,KAAe,MAAM,KAAA,EAAO;AAChE,MAAA,OAAO,IAAA,CAAK,KAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,OAAO,IAAA,CAAK,KAAA;AAAA,EACd;AAAA,EAEQ,WAAW,KAAA,EAAuB;AACxC,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AACrC,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,OAAO,QAAA;AAAA,IACT;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM,KAAA,EAAsB;AAAA,MAC5C,GAAA,EAAK,CAAC,MAAA,EAAQ,GAAA,EAAK,QAAA,KAAa;AAC9B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAChD,QAAA,OAAO,SAAS,MAAM,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,GAAI,MAAA;AAAA,MACtD,CAAA;AAAA,MACA,GAAA,EAAK,CAAC,MAAA,EAAQ,GAAA,EAAK,MAAM,QAAA,KAAa;AACpC,QAAA,MAAM,YAAA,GAAe,YAAY,IAAI,CAAA;AACrC,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,KAAK,QAAQ,CAAA;AAClD,QAAA,MAAM,UAAU,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAA,EAAK,cAAc,QAAQ,CAAA;AAE/D,QAAA,IAAI,WAAW,CAAC,MAAA,CAAO,EAAA,CAAG,QAAA,EAAU,YAAY,CAAA,EAAG;AACjD,UAAA,IAAA,CAAK,MAAA,EAAO;AAAA,QACd;AAEA,QAAA,OAAO,OAAA;AAAA,MACT,CAAA;AAAA,MACA,cAAA,EAAgB,CAAC,MAAA,EAAQ,GAAA,KAAQ;AAC/B,QAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,GAAG,CAAA;AACtC,QAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,cAAA,CAAe,MAAA,EAAQ,GAAG,CAAA;AAElD,QAAA,IAAI,UAAU,OAAA,EAAS;AACrB,UAAA,IAAA,CAAK,MAAA,EAAO;AAAA,QACd;AAEA,QAAA,OAAO,OAAA;AAAA,MACT;AAAA,KACD,CAAA;AAED,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAC3B,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,KAAK,CAAA;AAC3B,IAAA,UAAA,CAAW,GAAA,CAAI,OAAO,IAAuB,CAAA;AAC7C,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEQ,WAAW,KAAA,EAAuB;AACxC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,KAAK,CAAA;AAClC,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAO,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,EAC9B;AACF;AAIO,SAAS,KAAA,CAAS,SAAY,MAAA,EAA4B;AAC/D,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,eAAA,CAAgB,MAAA,GAAS,CAAC,CAAA;AACxD,EAAA,IAAI,WAAA,GAAc,OAAA;AAElB,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,IAAI,MAAA,IAAU,KAAA,CAAM,aAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAG;AAC9C,MAAA,WAAA,GAAc,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,MAAM,CAAA;AAAA,IAC9C,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,gBAAgB,MAAA,EAAQ;AACtD,MAAA,WAAA,GAAc,KAAA,CAAM,eAAA,CAAgB,KAAA,CAAM,MAAM,CAAA;AAAA,IAClD;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,WAAW,CAAA;AAErC,EAAA,IAAI,KAAA,EAAO;AACT,IAAA,KAAA,CAAM,QAAQ,IAAA,CAAK,EAAE,GAAA,EAAK,MAAA,EAAQ,QAAmC,CAAA;AACrE,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAM,aAAA,EAAe,GAAA,CAAI,MAAM,CAAA,EAAG;AAChD,MAAA,KAAA,CAAM,MAAA,IAAU,CAAA;AAAA,IAClB;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,MAAA,CACd,IACA,OAAA,EACY;AACZ,EAAA,MAAM,IAAA,GAAOC,QAAA,CAAa,MAAM,EAAA,EAAI,CAAA;AACpC,EAAA,OAAO,MAAM,IAAA,EAAK;AACpB;AAEO,SAAS,SAAY,MAAA,EAA4B;AACtD,EAAA,MAAM,OAAA,GAAUD,OAAa,CAAC,CAAA;AAC9B,EAAA,MAAM,MAAA,GAASE,UAAA,CAAe,MAAM,MAAA,EAAQ,CAAA;AAC5C,EAAAD,QAAA,CAAa,MAAM;AACjB,IAAA,MAAA,EAAO;AACP,IAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,EAAK,GAAI,CAAA;AAAA,EACnC,CAAC,CAAA;AACD,EAAA,OAAO,IAAI,OAAO,SAAA,CAAU,MAAM,OAAO,KAAK,CAAA,EAAG,QAAQ,OAAO,CAAA;AAClE;AAEO,IAAM,OAAA,GAAU;AAEhB,SAAS,qBAAqB,cAAA,EAA2C;AAC9E,EAAA,MAAM,aAAA,uBAAoB,GAAA,EAAqB;AAC/C,EAAA,MAAM,kBAA6B,EAAC;AAEpC,EAAA,KAAA,MAAW,KAAA,IAAS,cAAA,IAAkB,EAAC,EAAG;AACxC,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,aAAA,CAAc,GAAA,CAAI,KAAA,CAAM,GAAA,EAAK,KAAA,CAAM,KAAK,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,eAAA,CAAgB,IAAA,CAAK,MAAM,KAAK,CAAA;AAAA,EAClC;AAEA,EAAA,eAAA,CAAgB,IAAA,CAAK;AAAA,IACnB,SAAS,EAAC;AAAA,IACV,cAAA;AAAA,IACA,aAAA;AAAA,IACA,eAAA;AAAA,IACA,MAAA,EAAQ;AAAA,GACT,CAAA;AACH;AAEO,SAAS,kBAAA,GAAuE;AACrF,EAAA,MAAM,KAAA,GAAQ,gBAAgB,GAAA,EAAI;AAClC,EAAA,OAAO,KAAA,EAAO,WAAW,EAAC;AAC5B;;;AClKA,IAAM,WAAA,GAA0B,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAChD,IAAI,mBAAA,GAAyC,IAAA;AAc7C,SAAS,oBAAoB,OAAA,EAA6B;AACxD,EAAA,IAAI,CAAC,mBAAA,EAAqB;AACxB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,WAAW,OAAO,CAAA,2CAAA;AAAA,KACpB;AAAA,EACF;AAEA,EAAA,OAAO,mBAAA;AACT;AAEA,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,UAAa,KAAA,KAAU,KAAA,IAAS,UAAU,IAAA,EAAM;AAC9E,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAClC;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,oBAAoB,KAAA,EAA+B;AAC1D,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC5D,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,MAAM,KAAA,GAAQ,KAAA,CACX,GAAA,CAAI,CAAC,SAAS,mBAAA,CAAoB,IAAI,CAAC,CAAA,CACvC,MAAA,CAAO,CAAC,IAAA,KAAyB,CAAC,CAAC,IAAI,CAAA;AAC1C,IAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAAA,EAC9C;AAEA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,KAAA,GAAQ,OAAO,OAAA,CAAQ,KAAgC,EAC1D,MAAA,CAAO,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,OAAO,CAAA,CACjC,GAAA,CAAI,CAAC,CAAC,IAAI,MAAM,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM,MAAA,GAAS,CAAA,GAAI,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,GAAI,IAAA;AAAA,EAC9C;AAEA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEA,SAAS,OAAO,KAAA,EAA+B;AAC7C,EAAA,IAAI,KAAA,KAAU,KAAA,IAAS,KAAA,KAAU,IAAA,IAAQ,UAAU,MAAA,EAAW;AAC5D,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAU,IAAA,EAAM;AAClB,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAWA,SAAS,gBAAgB,KAAA,EAAwC;AAC/D,EAAA,OAAO,CAAC,EACN,KAAA,IACA,OAAO,UAAU,QAAA,IACjB,iBAAA,IAAqB,KAAA,IACpB,KAAA,CAAwB,eAAA,KAAoB,IAAA,CAAA;AAEjD;AAEA,SAAS,aAAa,IAAA,EAAsB;AAC1C,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,EAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AAErB,EAAA,MAAM,eAAA,uBAAsB,GAAA,CAAI,CAAC,UAAU,QAAA,EAAU,QAAA,EAAU,OAAO,CAAC,CAAA;AACvE,EAAA,MAAM,SAAS,QAAA,CAAS,gBAAA,CAAiB,QAAA,CAAS,OAAA,EAAS,WAAW,YAAY,CAAA;AAClF,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,OAAA,GAAU,OAAA;AAChB,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAE1B,IAAA,IAAI,gBAAgB,GAAA,CAAI,OAAA,CAAQ,OAAA,CAAQ,WAAA,EAAa,CAAA,EAAG;AACtD,MAAA,OAAA,CAAQ,MAAA,EAAO;AACf,MAAA;AAAA,IACF;AAEA,IAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACjD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,WAAA,EAAY;AACvC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,KAAA,CAAM,IAAA,GAAO,WAAA,EAAY;AAChD,MAAA,IAAI,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,EAAG;AAC7B,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AACjC,QAAA;AAAA,MACF;AAEA,MAAA,IAAA,CACG,QAAA,KAAa,UAAU,QAAA,KAAa,KAAA,IAAS,aAAa,YAAA,KAC3D,SAAA,CAAU,UAAA,CAAW,aAAa,CAAA,EAClC;AACA,QAAA,OAAA,CAAQ,eAAA,CAAgB,KAAK,IAAI,CAAA;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,QAAA,CAAS,SAAA;AAClB;AAEA,SAAS,OAAO,KAAA,EAAwB;AACtC,EAAA,IAAI,UAAU,IAAA,IAAQ,KAAA,KAAU,UAAa,KAAA,KAAU,KAAA,IAAS,UAAU,IAAA,EAAM;AAC9E,IAAA,OAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACxB,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,MAAM,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,eAAA,CAAgB,KAAK,CAAA,EAAG;AAC1B,IAAA,OAAO,KAAA,CAAM,KAAA;AAAA,EACf;AACA,EAAA,OAAO,YAAA,CAAa,MAAA,CAAO,KAAK,CAAC,CAAA;AACnC;AAEA,SAAS,YAAA,CAAa,GAAgB,CAAA,EAAyB;AAC7D,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CAAkB,GAAgB,CAAA,EAAyB;AAClE,EAAA,IAAI,MAAM,CAAA,EAAG;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,CAAC,CAAA,IAAK,CAAC,CAAA,EAAG;AACZ,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA;AAE3B,EAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACjC,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,KAAA,MAAW,OAAO,KAAA,EAAO;AACvB,IAAA,IAAI,CAAC,OAAO,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA,EAAG,CAAA,CAAE,GAAG,CAAC,CAAA,EAAG;AAC9B,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,uBAAA,CACP,OACA,QAAA,EACM;AACN,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AAC5C,EAAA,KAAA,CAAM,cAAA,EAAe;AAErB,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,CAAM,WAAW,QAAQ,CAAA;AACzB,EAAA,MAAM,KAAA,GAAQ,MAAM,CAAC,CAAA;AACrB,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AACnC,EAAA,KAAA,CAAM,eAAe,KAAK,CAAA;AAC1B,EAAA,KAAA,CAAM,YAAY,IAAI,CAAA;AACxB;AAEA,SAAS,qBAAqB,KAAA,EAA0B;AACtD,EAAA,MAAM,IAAA,GACJ,MAAM,uBAAA,CAAwB,QAAA,KAAa,KAAK,YAAA,GAC5C,KAAA,CAAM,uBAAA,GACN,KAAA,CAAM,uBAAA,CAAwB,UAAA;AAEpC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,SAAA,GAAY,UAAA;AAGlB,EAAA,MAAM,WAAW,SAAA,CAAU,kBAAA;AAC3B,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,OAAO,MAAM;AAAA,IAAC,CAAA;AAAA,EAChB;AAEA,EAAA,MAAM,YAA+B,EAAC;AACtC,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AACnC,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,YAAY,CAAA;AACtE,EAAA,IAAI,UAAU,MAAA,CAAO,WAAA;AAErB,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,KAAA,CAAM,eAAe,OAAO,CAAA;AAAA,IAC3C,CAAA,CAAA,MAAQ;AACN,MAAA,UAAA,GAAa,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,MAAM,OAAA,GAAU,OAAA;AAChB,MAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA,EAAG;AACjD,QAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,aAAa,CAAA,EAAG;AACxC,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,cAAc,MAAM,CAAA;AACtD,QAAA,MAAM,YAAY,IAAA,CAAK,KAAA;AACvB,QAAA,UAAA,CAAW,IAAI,SAAS,CAAA;AACxB,QAAA,MAAM,QAAA,GAA0B,CAAC,KAAA,KAAU;AACzC,UAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,SAAS,CAAA;AACtC,UAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AACjC,YAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,UACf;AAAA,QACF,CAAA;AAEA,QAAA,OAAA,CAAQ,gBAAA,CAAiB,WAAW,QAAQ,CAAA;AAC5C,QAAA,OAAA,CAAQ,eAAA,CAAgB,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA;AACxC,QAAA,SAAA,CAAU,KAAK,MAAM,OAAA,CAAQ,mBAAA,CAAoB,SAAA,EAAW,QAAQ,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,WAAW,SAAA,EAAW;AAC/B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,KAAA,MAAW,aAAa,UAAA,EAAY;AAClC,MAAA,QAAA,CAAS,OAAO,SAAS,CAAA;AAAA,IAC3B;AAAA,EACF,CAAA;AACF;AAEA,SAAS,wBAAA,CAAyB,MAAY,KAAA,EAA4B;AACxE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,SAAA,GAAY,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AAC1C,MAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAC9C,MAAA,MAAM,SAAS,SAAA,CAAU,UAAA;AACzB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,MAAM,OAAA,GAAU,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAC1C,MAAA,MAAA,CAAO,YAAA,CAAa,SAAS,KAAK,CAAA;AAClC,MAAA,MAAA,CAAO,YAAY,SAAS,CAAA;AAC5B,MAAA,OAAO,OAAA;AAAA,IACT;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,kBAAA,CAAmB,MAAY,KAAA,EAA6B;AACnE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,SAAS,CAAA,EAAG;AACd,MAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AACvC,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAE3C,MAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,MAAA,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3B,MAAA,KAAA,CAAM,aAAa,MAAM,CAAA;AAEzB,MAAA,MAAA,CAAO,UAAA,EAAY,YAAY,MAAM,CAAA;AAErC,MAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC3B,QAAA,KAAA,CAAM,UAAA,EAAY,YAAY,KAAK,CAAA;AAAA,MACrC;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAEA,IAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAAA,EAC5B;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,6BAAA,CACP,WACA,KAAA,EACc;AACd,EAAA,MAAM,OAAO,SAAA,CAAU,uBAAA;AACvB,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,gBAAA,CAAiB,IAAA,EAAM,WAAW,SAAS,CAAA;AACnE,EAAA,IAAI,OAAA,GAAU,OAAO,QAAA,EAAS;AAE9B,EAAA,OAAO,OAAA,EAAS;AACd,IAAA,MAAM,QAAA,GAAW,OAAA;AACjB,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AAEzC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,IAAI;AACF,MAAA,UAAA,GAAa,SAAA,CAAU,eAAe,QAAQ,CAAA;AAAA,IAChD,CAAA,CAAA,MAAQ;AACN,MAAA,UAAA,GAAa,KAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAA,GAAU,OAAO,QAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,SAAA,CAAU,KAAK,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,SAAA,CAAU,KAAA,CAAM,MAAM,CAAA;AAE3C,IAAA,MAAM,KAAA,GAAQ,SAAS,WAAA,EAAY;AACnC,IAAA,KAAA,CAAM,eAAe,MAAM,CAAA;AAC3B,IAAA,KAAA,CAAM,aAAa,MAAM,CAAA;AAEzB,IAAA,MAAA,CAAO,UAAA,EAAY,YAAY,MAAM,CAAA;AAErC,IAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG;AAC3B,MAAA,KAAA,CAAM,UAAA,EAAY,YAAY,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,iBAAA,CACP,QACA,KAAA,EACc;AACd,EAAA,OAAO,MAAA,YAAkB,cACrB,kBAAA,CAAmB,MAAA,EAAQ,KAAK,CAAA,GAChC,6BAAA,CAA8B,QAAQ,KAAK,CAAA;AACjD;AAEA,SAAS,eAAA,CACP,UAAA,EACA,MAAA,EACA,KAAA,EACA,OAAA,EACY;AACZ,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,KAAA,GAAqC,IAAA;AAEzC,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,MAAM,WAAA,GAAc,WAAW,KAAA,EAAM;AACrC,IAAA,QAAA,GAAW,WAAA,CAAY,QAAA;AACvB,IAAA,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,IAAA,QAAA,CAAS,YAAY,UAAA,CAAW,QAAA,GAAW,UAAA,CAAW,QAAA,CAAS,MAAK,GAAI,EAAA;AACxE,IAAA,QAAA,GAAW,QAAA,CAAS,OAAA;AAAA,EACtB;AAEA,EAAA,MAAM,WAA8B,EAAC;AAErC,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,MAAM,QAAA,GACJ,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACpB,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACjB,wBAAA,CAAyB,QAAA,EAAU,KAAK,CAAA;AAC9C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,QAAA,CAAS,IAAA,GAAO,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAAA,IACtC,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,EACpB;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,MAAM,WACJ,KAAA,IAAS,KAAA,CAAM,QAAQ,EAAE,CAAA,GACrB,CAAC,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAgB,IACjC,KAAA,CAAM,IAAA,CAAK,SAAS,gBAAA,CAA8B,GAAG,CAAC,CAAA,CAAE,MAAA;AAAA,MACtD,CAAC,OAAA,KAAY,OAAA,CAAQ,YAAA,CAAa,OAAA,CAAQ,IAAI,CAAA,KAAM;AAAA,KACtD;AAEN,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,QAAA,MAAM,IAAA,GACJ,OAAA,CAAQ,IAAA,KAAS,OAAA,GACb,mBAAA,CAAoB,OAAA,CAAQ,GAAA,EAAK,CAAA,GACjC,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AAC1B,QAAA,IAAI,SAAS,IAAA,EAAM;AACjB,UAAA,OAAA,CAAQ,eAAA,CAAgB,QAAQ,IAAI,CAAA;AACpC,UAAA;AAAA,QACF;AAEA,QAAA,OAAA,CAAQ,YAAA,CAAa,OAAA,CAAQ,IAAA,EAAM,IAAI,CAAA;AAAA,MACzC,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,aAAA,EAAe;AAC9C,IAAA,MAAM,WAAW,CAAA,WAAA,EAAc,OAAA,CAAQ,KAAK,CAAA,EAAA,EAAK,QAAQ,EAAE,CAAA,EAAA,CAAA;AAC3D,IAAA,MAAM,OAAA,GACJ,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACpB,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,GACjB,QAAA,CAAS,aAAA,CAA2B,QAAQ,CAAA;AAClD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO,OAAA,CAAQ,gBAAgB,CAAA,UAAA,EAAa,OAAA,CAAQ,KAAK,CAAA,CAAE,CAAA;AAEhE,IAAA,IAAI,cAAA;AACJ,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,cAAA,GAAiB,QAAQ,GAAA,EAAI;AAAA,IAC/B,CAAC,CAAA;AAED,IAAA,MAAM,QAAA,GAA0B,CAAC,KAAA,KAAU;AACzC,MAAA,IAAI,OAAO,mBAAmB,UAAA,EAAY;AACxC,QAAA,cAAA,CAAe,KAAK,CAAA;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,OAAA,CAAQ,gBAAA,CAAiB,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAEhD,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,IAAA,EAAK;AACL,MAAA,OAAA,CAAQ,mBAAA,CAAoB,OAAA,CAAQ,KAAA,EAAO,QAAQ,CAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,IAAA,MAAA,CAAO,gBAAgB,QAAQ,CAAA;AAAA,EACjC,CAAA,MAAO;AACL,IAAA,uBAAA,CAAwB,QAAQ,QAAQ,CAAA;AAAA,EAC1C;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,QAAA,GAAW,gBAAA;AACf,IAAA,IAAI,mBAAmB,MAAM;AAAA,IAAC,CAAA;AAC9B,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA;AACrC,MAAA,IAAI,aAAa,QAAA,EAAU;AACzB,QAAA;AAAA,MACF;AAEA,MAAA,QAAA,GAAW,QAAA;AACX,MAAA,gBAAA,EAAiB;AACjB,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AACtD,MAAA,YAAA,CAAa,SAAA,GAAY,QAAA;AACzB,MAAA,uBAAA,CAAwB,KAAA,EAAO,aAAa,OAAO,CAAA;AACnD,MAAA,gBAAA,GAAmB,qBAAqB,KAAK,CAAA;AAAA,IAC/C,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,gBAAA,EAAiB;AACjB,MAAA,IAAA,EAAK;AAAA,IACP,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,YAAA,EAAc;AAC7C,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AACtC,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,iBAAiB,WAAA,EAAY;AACnC,IAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,cAAA,EAAgB,KAAA,EAAO,OAAO,OAAO,CAAA;AACzE,IAAA,QAAA,CAAS,KAAK,WAAW,CAAA;AAAA,EAC3B;AAEA,EAAA,KAAA,MAAW,OAAA,IAAW,WAAW,iBAAA,EAAmB;AAClD,IAAA,MAAM,KAAA,GAAQ,CAAA,SAAA,EAAY,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AACpC,IAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,IAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,MAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,MAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,MAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,MAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,IAC7D,CAAA,MAAO;AACL,MAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,eAAe,MAAM;AAAA,IAAC,CAAA;AAC1B,IAAA,IAAI,aAAA,GAAuC,IAAA;AAC3C,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,SAAA;AAEJ,IAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,MAAA,MAAM,aAAA,GAAgB,QAAQ,YAAA,EAAa;AAC3C,MAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,EAAS;AACnC,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,QAAA,GAAW,OAAA,CAAQ,UAAS,GAAI,WAAA;AAE1D,MAAA,IACE,aAAA,KAAkB,iBAClB,YAAA,CAAa,SAAA,EAAW,SAAS,CAAA,IACjC,iBAAA,CAAkB,SAAA,EAAW,SAAS,CAAA,EACtC;AACA,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,EAAa;AACb,MAAA,YAAA,GAAe,KAAA,CAAM,aAAA,EAAe,KAAA,EAAO,SAAA,EAAW,WAAW,OAAO,CAAA;AACxE,MAAA,aAAA,GAAgB,aAAA;AAChB,MAAA,SAAA,GAAY,EAAE,GAAG,SAAA,EAAU;AAC3B,MAAA,SAAA,GAAY,SAAA;AAAA,IACd,CAAC,CAAA;AAED,IAAA,QAAA,CAAS,KAAK,MAAM;AAClB,MAAA,IAAA,EAAK;AACL,MAAA,YAAA,EAAa;AAAA,IACf,CAAC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,KAAA,MAAW,OAAA,IAAW,WAAW,UAAA,EAAY;AAC3C,MAAA,MAAM,KAAA,GAAQ,CAAA,OAAA,EAAU,OAAA,CAAQ,EAAE,CAAA,EAAA,CAAA;AAClC,MAAA,IAAI,KAAA,GAAsB,IAAA;AAC1B,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,EAAG;AAC9B,QAAA,KAAA,GAAQ,SAAS,WAAA,EAAY;AAC7B,QAAA,KAAA,CAAM,cAAA,CAAe,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACtC,QAAA,KAAA,CAAM,YAAA,CAAa,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AACpC,QAAA,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAA,CAAE,UAAA,EAAY,YAAY,KAAA,CAAM,OAAA,CAAQ,EAAE,CAAC,CAAA;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,KAAA,GAAQ,iBAAA,CAAkB,QAAQ,KAAK,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,gBAAgB,MAAM;AAAA,MAAC,CAAA;AAC3B,MAAA,IAAI,aAAA,GAAqC,MAAA;AAEzC,MAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,QAAA,MAAM,SAAA,GAAY,CAAC,CAAC,OAAA,CAAQ,GAAA,EAAI;AAChC,QAAA,IAAI,cAAc,aAAA,EAAe;AAC/B,UAAA;AAAA,QACF;AAEA,QAAA,aAAA,EAAc;AAEd,QAAA,IAAI,SAAA,EAAW;AACb,UAAA,MAAM,gBAAA,GAAmB,QAAQ,UAAA,EAAW;AAC5C,UAAA,aAAA,GAAgB,eAAA,CAAgB,gBAAA,EAAkB,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,QACzE,CAAA,MAAA,IAAW,QAAQ,WAAA,EAAa;AAC9B,UAAA,MAAM,gBAAA,GAAmB,QAAQ,WAAA,EAAY;AAC7C,UAAA,aAAA,GAAgB,eAAA,CAAgB,gBAAA,EAAkB,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AAAA,QACzE,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,cAAA,EAAe;AACrB,UAAA,aAAA,GAAgB,MAAM;AAAA,UAAC,CAAA;AAAA,QACzB;AAEA,QAAA,aAAA,GAAgB,SAAA;AAAA,MAClB,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,KAAK,MAAM;AAClB,QAAA,IAAA,EAAK;AACL,QAAA,aAAA,EAAc;AAAA,MAChB,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,OAAA,EAAQ;AAAA,IACV;AAEA,IAAA,IAAI,kBAAkB,WAAA,EAAa;AACjC,MAAA,MAAA,CAAO,eAAA,EAAgB;AACvB,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,cAAA,EAAe;AAAA,EACxB,CAAA;AACF;AAEA,SAAS,wBAAwB,QAAA,EAAiC;AAChE,EAAA,MAAM,SAAA,GACJ,SAAS,SAAA,CAAU,cAAA,KAAmB,SAAS,SAAA,CAAU,cAAA,uBAAqB,GAAA,EAAI,CAAA;AACpF,EAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACxB;AAEA,SAAS,0BAA0B,QAAA,EAAiC;AAClE,EAAA,QAAA,CAAS,SAAA,CAAU,cAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA;AACpD;AAEA,SAAS,qBAAA,CACP,UACA,cAAA,EACM;AACN,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,QAAA,CAAS,aAAA,IAAiB,EAAE,CAAA;AACpD,EAAA,MAAM,eAAA,GAAkB,mBAAA;AACxB,EAAA,mBAAA,GAAsB,OAAA;AACtB,EAAA,oBAAA,CAAqB,cAAc,CAAA;AAEnC,EAAA,IAAI;AACF,IAAA,MAAM,aAAa,QAAA,CAAS,SAAA,CAAU,MAAM,QAAA,CAAS,KAAA,EAAO,SAAS,KAAK,CAAA;AAC1E,IAAA,QAAA,CAAS,iBAAA,GAAoB,eAAA;AAAA,MAC3B,UAAA;AAAA,MACA,QAAA,CAAS,MAAA;AAAA,MACT,QAAA,CAAS,KAAA;AAAA,MACT;AAAA,KACF;AACA,IAAA,QAAA,CAAS,aAAa,kBAAA,EAAmB;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAA,kBAAA,EAAmB;AACnB,IAAA,MAAM,KAAA;AAAA,EACR,CAAA,SAAE;AACA,IAAA,mBAAA,GAAsB,eAAA;AAAA,EACxB;AACF;AAEA,SAAS,uBACP,QAAA,EACyC;AACzC,EAAA,OAAO,SAAS,UAAA,CAAW,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,QAAO,MAAO;AAAA,IACnD,GAAA;AAAA,IACA,KAAA,EAAO,OAAO,IAAA;AAAK,GACrB,CAAE,CAAA;AACJ;AAEO,SAAS,gBAAA,CACd,SACA,IAAA,EACM;AACN,EAAA,MAAM,YAAY,OAAA,CAAQ,cAAA;AAE1B,EAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,CAAA,EAAG;AACtC,IAAA,OAAA,CAAQ,QAAQ,IAAA,CAAK,KAAA;AACrB,IAAA,IAAA,CAAK,cAAA,GAAiB,SAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,MAAA;AACzB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,SAAA,EAAW,CAAC,QAAA,MAAc;AAAA,IACrD,QAAA;AAAA,IACA,cAAA,EAAgB,uBAAuB,QAAQ;AAAA,GACjD,CAAE,CAAA;AAEF,EAAA,IAAA,CAAK,cAAA,GAAiB,SAAA;AACtB,EAAA,OAAA,CAAQ,cAAA,GAAiB,MAAA;AAEzB,EAAA,IAAI;AACF,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,cAAA,EAAe,IAAK,SAAA,EAAW;AACpD,MAAA,QAAA,CAAS,SAAA,GAAY,IAAA;AACrB,MAAA,QAAA,CAAS,iBAAA,EAAkB;AAC3B,MAAA,qBAAA,CAAsB,UAAU,cAAc,CAAA;AAAA,IAChD;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA;AACtB,IAAA,OAAA,CAAQ,cAAA,GAAiB,SAAA;AAEzB,IAAA,KAAA,MAAW,EAAE,QAAA,EAAU,cAAA,EAAe,IAAK,SAAA,EAAW;AACpD,MAAA,QAAA,CAAS,SAAA,GAAY,OAAA;AACrB,MAAA,QAAA,CAAS,iBAAA,EAAkB;AAC3B,MAAA,qBAAA,CAAsB,UAAU,cAAc,CAAA;AAAA,IAChD;AAEA,IAAA,OAAA,CAAQ,KAAA,CAAM,2DAA2D,KAAK,CAAA;AAC9E,IAAA;AAAA,EACF;AACF;AAEO,SAAS,eAAA,CAAgB,OAAgB,KAAA,EAAgC;AAC9E,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAM;AACjC;AAEO,SAAS,mBAAmB,KAAA,EAA+B;AAChE,EAAA,OAAO;AAAA,IACL,eAAA,EAAiB,IAAA;AAAA,IACjB,KAAA,EAAO,OAAO,KAAK;AAAA,GACrB;AACF;AAEO,SAAS,UAAA,CAAc,KAAc,KAAA,EAAa;AACvD,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAK,KAAK,CAAA;AACtB,EAAA,OAAO,KAAA;AACT;AAEO,SAAS,WAAc,GAAA,EAAiB;AAC7C,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AACxB;AAEO,SAAS,WAAW,GAAA,EAAuB;AAChD,EAAA,MAAM,OAAA,GAAU,oBAAoB,YAAY,CAAA;AAChD,EAAA,OAAO,OAAA,CAAQ,IAAI,GAAG,CAAA;AACxB;AAEO,SAAS,KAAA,CACd,WACA,MAAA,EACA,KAAA,GAAoB,EAAC,EACrB,KAAA,GAAoB,aACpB,aAAA,EACY;AACZ,EAAA,MAAM,QAAA,GAA4B;AAAA,IAChC,SAAA;AAAA,IACA,MAAA;AAAA,IACA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA,mBAAmB,MAAM;AAAA,IAAC,CAAA;AAAA,IAC1B,YAAY;AAAC,GACf;AAEA,EAAA,uBAAA,CAAwB,QAAQ,CAAA;AAChC,EAAA,qBAAA,CAAsB,QAAQ,CAAA;AAE9B,EAAA,OAAO,MAAM;AACX,IAAA,yBAAA,CAA0B,QAAQ,CAAA;AAClC,IAAA,QAAA,CAAS,iBAAA,EAAkB;AAAA,EAC7B,CAAA;AACF;AAEO,SAAS,UAAU,IAAA,EAExB;AACA,EAAA,OAAO;AAAA,IACL,MAAM,MAAA,EAAQ;AACZ,MAAA,MAAM,UACJ,OAAO,MAAA,KAAW,WACb,QAAA,CAAS,aAAA,CAAc,MAAM,CAAA,GAC9B,MAAA;AAEN,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,MACvD;AAEA,MAAA,OAAO,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC5B;AAAA,GACF;AACF;;;AC53BA,IAAM,YAAA,uBAAmB,GAAA,EAAsB;AAC/C,IAAM,eAAA,uBAAsB,GAAA,EAAwB;AACpD,IAAM,cAAA,uBAAqB,GAAA,EAA2B;AAEtD,SAAS,WAAW,IAAA,EAAsB;AACxC,EAAA,OAAO,gBAAgB,IAAI,CAAA,CAAA;AAC7B;AAEA,SAAS,WAAW,MAAA,EAAuC;AACzD,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACjC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAW,cAAA,EAAgB;AAC7B,IAAA,OAAO,MAAA,CAAO,YAAA;AAAA,EAChB;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAA,CAAc,MAAc,MAAA,EAAgC;AACnE,EAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAC,CAAA;AAC5C,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,OAAO,KAAA,CAAA;AAAA,IACT;AACA,IAAA,OAAO,IAAA,CAAK,MAAM,GAAG,CAAA;AAAA,EACvB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,SAAS,gBAAA,CAAiB,IAAA,EAAc,QAAA,EAAoB,MAAA,EAAuB;AACjF,EAAA,MAAM,aAAA,GAAgB,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA;AAC7C,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAU,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA,EAAG;AACzD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,eAAA,GAAkB,eAAA,CAAgB,GAAA,CAAI,IAAI,CAAA;AAChD,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,eAAA,EAAgB;AAAA,EAClB;AAEA,EAAA,cAAA,CAAe,GAAA,CAAI,MAAM,MAAM,CAAA;AAE/B,EAAA,MAAM,IAAA,GAAO,OAAO,MAAM;AACxB,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM,CAAA;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA;AAAA,IACF;AAEA,IAAA,IAAI;AACF,MAAA,OAAA,CAAQ,OAAA,CAAQ,WAAW,IAAI,CAAA,EAAG,KAAK,SAAA,CAAU,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,IAClE,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF,CAAC,CAAA;AAED,EAAA,eAAA,CAAgB,GAAA,CAAI,MAAM,IAAI,CAAA;AAChC;AAEA,SAAS,WAAA,CACP,IAAA,EACA,OAAA,EACA,OAAA,EACU;AACV,EAAA,MAAM,QAAA,GAAW,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACtC,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAI,QAAA,CAAS,KAAA,KAAU,MAAA,IAAa,OAAA,KAAY,MAAA,EAAW;AACzD,MAAA,QAAA,CAAS,KAAA,GAAQ,OAAA;AAAA,IACnB;AAEA,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,IAAI,QAAA,CAAS,UAAU,MAAA,EAAW;AAChC,QAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA;AACrD,QAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,UAAA,QAAA,CAAS,KAAA,GAAQ,SAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA,gBAAA,CAAiB,IAAA,EAAM,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,IAClD;AAEA,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,IAAI,eAAA,GAAkB,OAAA;AACtB,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,IAAA,EAAM,OAAA,CAAQ,OAAO,CAAA;AACrD,IAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,MAAA,eAAA,GAAkB,SAAA;AAAA,IACpB;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,MAAM,eAAe,CAAA;AACrC,EAAA,YAAA,CAAa,GAAA,CAAI,MAAM,OAAO,CAAA;AAE9B,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,gBAAA,CAAiB,IAAA,EAAM,OAAA,EAAS,OAAA,CAAQ,OAAO,CAAA;AAAA,EACjD;AAEA,EAAA,OAAO,OAAA;AACT;AAEO,IAAM,MAAA,GAAS;AAAA,EACpB,KAAA,CAAM,IAAA,EAAc,OAAA,EAAmB,OAAA,EAA8B;AACnE,IAAA,OAAO,WAAA,CAAY,IAAA,EAAM,OAAA,EAAS,OAAO,CAAA;AAAA,EAC3C,CAAA;AAAA,EACA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAO,YAAY,IAAI,CAAA;AAAA,EACzB,CAAA;AAAA,EACA,IAAI,IAAA,EAAc;AAChB,IAAA,OAAO,YAAA,CAAa,IAAI,IAAI,CAAA;AAAA,EAC9B;AACF","file":"core.js","sourcesContent":["import {\n batch,\n computed as preactComputed,\n effect as preactEffect,\n Signal as PreactSignal,\n signal as preactSignal,\n untracked,\n} from \"@preact/signals-core\";\n\nexport type EffectMode = \"queued\" | \"sync\";\nexport type EffectCleanup = void | (() => void);\nexport type EffectCallback = () => EffectCleanup;\n\ntype ObjectValue = Record<PropertyKey, unknown>;\ntype PreactSignalLike<T> = PreactSignal<T> & { _notify?: () => void };\ntype HmrStateSnapshot = {\n key?: string;\n value: unknown;\n};\ntype HmrCaptureFrame = {\n created: Array<{ key?: string; signal: Signal<unknown> }>;\n restoredValues?: HmrStateSnapshot[];\n restoredByKey?: Map<string, unknown>;\n restoredUnkeyed: unknown[];\n cursor: number;\n};\n\nconst rawToProxy = new WeakMap<object, object>();\nconst proxyToRaw = new WeakMap<object, object>();\nconst proxyOwner = new WeakMap<object, Signal<unknown>>();\nconst hmrCaptureStack: HmrCaptureFrame[] = [];\n\nfunction isObject(value: unknown): value is object {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction unwrapValue<T>(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n return (proxyToRaw.get(value) ?? value) as T;\n}\n\nfunction notifyPreactSignal<T>(source: PreactSignalLike<T>): void {\n if (typeof source._notify === \"function\") {\n source._notify();\n return;\n }\n\n batch(() => {\n source.value = source.value;\n });\n}\n\nexport class Signal<T> {\n private readonly source: PreactSignalLike<T>;\n private readonly version: PreactSignal<number>;\n private proxy: T | null = null;\n\n constructor(\n initial: T,\n source?: PreactSignalLike<T>,\n version?: PreactSignal<number>,\n ) {\n this.source = source ?? (preactSignal(initial) as PreactSignalLike<T>);\n this.version = version ?? preactSignal(0);\n }\n\n get value(): T {\n this.version.value;\n return this.getReactiveValue(this.source.value);\n }\n\n set value(next: T) {\n const resolvedNext = unwrapValue(next);\n if (Object.is(this.source.peek(), resolvedNext)) {\n return;\n }\n\n this.proxy = null;\n this.source.value = resolvedNext;\n }\n\n peek(): T {\n return this.source.peek();\n }\n\n notify(): void {\n this.version.value = this.version.peek() + 1;\n }\n\n subscribe(fn: (value: T) => void): () => void {\n return this.source.subscribe(fn);\n }\n\n valueOf(): T {\n return this.value;\n }\n\n toString(): string {\n return String(this.value);\n }\n\n toJSON(): T {\n return this.peek();\n }\n\n private getReactiveValue(value: T): T {\n if (!isObject(value)) {\n return value;\n }\n\n if (this.proxy && proxyToRaw.get(this.proxy as object) === value) {\n return this.proxy;\n }\n\n this.proxy = this.wrapObject(value) as T;\n return this.proxy;\n }\n\n private wrapObject(value: object): object {\n const existing = rawToProxy.get(value);\n if (existing) {\n return existing;\n }\n\n const proxy = new Proxy(value as ObjectValue, {\n get: (target, key, receiver) => {\n const result = Reflect.get(target, key, receiver);\n return isObject(result) ? this.wrapNested(result) : result;\n },\n set: (target, key, next, receiver) => {\n const resolvedNext = unwrapValue(next);\n const previous = Reflect.get(target, key, receiver);\n const changed = Reflect.set(target, key, resolvedNext, receiver);\n\n if (changed && !Object.is(previous, resolvedNext)) {\n this.notify();\n }\n\n return changed;\n },\n deleteProperty: (target, key) => {\n const hadKey = Reflect.has(target, key);\n const changed = Reflect.deleteProperty(target, key);\n\n if (hadKey && changed) {\n this.notify();\n }\n\n return changed;\n },\n });\n\n rawToProxy.set(value, proxy);\n proxyToRaw.set(proxy, value);\n proxyOwner.set(proxy, this as Signal<unknown>);\n return proxy;\n }\n\n private wrapNested(value: object): object {\n const owner = proxyOwner.get(value);\n if (owner === this) {\n return value;\n }\n\n return this.wrapObject(value);\n }\n}\n\nexport type SignalState<T> = Signal<T>;\n\nexport function state<T>(initial: T, hmrKey?: string): Signal<T> {\n const frame = hmrCaptureStack[hmrCaptureStack.length - 1];\n let nextInitial = initial;\n\n if (frame) {\n if (hmrKey && frame.restoredByKey?.has(hmrKey)) {\n nextInitial = frame.restoredByKey.get(hmrKey) as T;\n } else if (frame.cursor < frame.restoredUnkeyed.length) {\n nextInitial = frame.restoredUnkeyed[frame.cursor] as T;\n }\n }\n\n const signal = new Signal(nextInitial);\n\n if (frame) {\n frame.created.push({ key: hmrKey, signal: signal as Signal<unknown> });\n if (!hmrKey || !frame.restoredByKey?.has(hmrKey)) {\n frame.cursor += 1;\n }\n }\n\n return signal;\n}\n\nexport function effect(\n fn: EffectCallback,\n options?: { mode?: EffectMode },\n): () => void {\n const stop = preactEffect(() => fn());\n return () => stop();\n}\n\nexport function computed<T>(getter: () => T): Signal<T> {\n const version = preactSignal(0);\n const source = preactComputed(() => getter()) as PreactSignalLike<T>;\n preactEffect(() => {\n getter();\n version.value = version.peek() + 1;\n });\n return new Signal(untracked(() => source.value), source, version);\n}\n\nexport const derived = computed;\n\nexport function beginHmrStateCapture(restoredValues?: HmrStateSnapshot[]): void {\n const restoredByKey = new Map<string, unknown>();\n const restoredUnkeyed: unknown[] = [];\n\n for (const entry of restoredValues ?? []) {\n if (entry.key) {\n restoredByKey.set(entry.key, entry.value);\n continue;\n }\n\n restoredUnkeyed.push(entry.value);\n }\n\n hmrCaptureStack.push({\n created: [],\n restoredValues,\n restoredByKey,\n restoredUnkeyed,\n cursor: 0,\n });\n}\n\nexport function endHmrStateCapture(): Array<{ key?: string; signal: Signal<unknown> }> {\n const frame = hmrCaptureStack.pop();\n return frame?.created ?? [];\n}\n","import {\r\n beginHmrStateCapture,\r\n effect,\r\n endHmrStateCapture,\r\n type Signal,\r\n} from \"../core/signals-core\";\r\n\r\nexport type OlovaProps = Record<string, unknown>;\r\ntype ContextMap = Map<unknown, unknown>;\r\nexport type DangerousHtml = {\r\n __dangerousHtml: true;\r\n value: string;\r\n};\r\n\r\nexport type OlovaSlots = Record<string, () => CompiledDescriptor>;\r\n\r\ntype TextBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype HtmlBinding = {\r\n id: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype AttrBinding = {\r\n id: string;\r\n attr: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype EventBinding = {\r\n id: string;\r\n event: string;\r\n get: () => unknown;\r\n};\r\n\r\ntype SlotBinding = {\r\n id: string;\r\n name: string;\r\n};\r\n\r\ntype ComponentBinding = {\r\n id: string;\r\n getComponent: () => OlovaComponent;\r\n getProps: () => OlovaProps;\r\n getSlots?: () => OlovaSlots;\r\n};\r\n\r\ntype IfBinding = {\r\n id: string;\r\n get: () => unknown;\r\n trueBranch: () => CompiledDescriptor;\r\n falseBranch?: () => CompiledDescriptor;\r\n};\r\n\r\nexport type CompiledDescriptor = {\r\n template?: string;\r\n textBindings: TextBinding[];\r\n htmlBindings: HtmlBinding[];\r\n attrBindings: AttrBinding[];\r\n eventBindings: EventBinding[];\r\n slotBindings: SlotBinding[];\r\n componentBindings: ComponentBinding[];\r\n ifBindings?: IfBinding[];\r\n build?: () => { fragment: DocumentFragment; nodes: Record<string, Node> };\r\n};\r\n\r\nexport type SetupFn = (\r\n props: OlovaProps,\r\n slots: OlovaSlots,\r\n) => CompiledDescriptor;\r\n\r\nexport interface OlovaComponent {\r\n setup: SetupFn;\r\n __hmrId?: string;\r\n __hmrInstances?: Set<MountedInstance>;\r\n}\r\n\r\nconst EMPTY_SLOTS: OlovaSlots = Object.freeze({}) as OlovaSlots;\r\nlet currentSetupContext: ContextMap | null = null;\r\n\r\ntype MountTarget = HTMLElement | Range;\r\n\r\ntype MountedInstance = {\r\n component: OlovaComponent;\r\n target: MountTarget;\r\n props: OlovaProps;\r\n slots: OlovaSlots;\r\n parentContext?: ContextMap;\r\n disposeDescriptor: () => void;\r\n hmrSignals: Array<{ key?: string; signal: Signal<unknown> }>;\r\n};\r\n\r\nfunction requireSetupContext(apiName: string): ContextMap {\r\n if (!currentSetupContext) {\r\n throw new Error(\r\n `[olova] ${apiName}() can only be used during component setup.`,\r\n );\r\n }\r\n\r\n return currentSetupContext;\r\n}\r\n\r\nfunction toText(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toText).join(\"\");\n }\n return String(value);\r\n}\r\n\r\nfunction normalizeClassValue(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n const parts = value\r\n .map((item) => normalizeClassValue(item))\r\n .filter((item): item is string => !!item);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n if (typeof value === \"object\") {\r\n const parts = Object.entries(value as Record<string, unknown>)\r\n .filter(([, enabled]) => !!enabled)\r\n .map(([name]) => name);\r\n return parts.length > 0 ? parts.join(\" \") : null;\r\n }\r\n\r\n return String(value);\r\n}\r\n\r\nfunction toAttr(value: unknown): string | null {\r\n if (value === false || value === null || value === undefined) {\r\n return null;\r\n }\r\n if (value === true) {\r\n return \"true\";\r\n }\r\n return String(value);\r\n}\r\n\r\nfunction escapeHtml(value: string): string {\r\n return value\r\n .replace(/&/g, \"&amp;\")\r\n .replace(/</g, \"&lt;\")\r\n .replace(/>/g, \"&gt;\")\r\n .replace(/\"/g, \"&quot;\")\r\n .replace(/'/g, \"&#39;\");\r\n}\r\n\r\nfunction isDangerousHtml(value: unknown): value is DangerousHtml {\r\n return !!(\r\n value &&\r\n typeof value === \"object\" &&\r\n \"__dangerousHtml\" in value &&\r\n (value as DangerousHtml).__dangerousHtml === true\r\n );\r\n}\r\n\r\nfunction sanitizeHtml(html: string): string {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = html;\r\n\r\n const blockedElements = new Set([\"script\", \"iframe\", \"object\", \"embed\"]);\r\n const walker = document.createTreeWalker(template.content, NodeFilter.SHOW_ELEMENT);\r\n let current = walker.nextNode() as Element | null;\r\n\r\n while (current) {\r\n const element = current;\r\n current = walker.nextNode() as Element | null;\r\n\r\n if (blockedElements.has(element.tagName.toLowerCase())) {\r\n element.remove();\r\n continue;\r\n }\r\n\r\n for (const attr of Array.from(element.attributes)) {\r\n const attrName = attr.name.toLowerCase();\r\n const attrValue = attr.value.trim().toLowerCase();\r\n if (attrName.startsWith(\"on\")) {\r\n element.removeAttribute(attr.name);\r\n continue;\r\n }\r\n\r\n if (\r\n (attrName === \"href\" || attrName === \"src\" || attrName === \"xlink:href\") &&\r\n attrValue.startsWith(\"javascript:\")\r\n ) {\r\n element.removeAttribute(attr.name);\r\n }\r\n }\r\n }\r\n\r\n return template.innerHTML;\r\n}\r\n\r\nfunction toHtml(value: unknown): string {\n if (value === null || value === undefined || value === false || value === true) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.map(toHtml).join(\"\");\n }\n if (isDangerousHtml(value)) {\r\n return value.value;\r\n }\r\n return sanitizeHtml(String(value));\r\n}\r\n\r\nfunction shallowEqual(a?: OlovaProps, b?: OlovaProps): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction shallowEqualSlots(a?: OlovaSlots, b?: OlovaSlots): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (!a || !b) {\r\n return false;\r\n }\r\n\r\n const aKeys = Object.keys(a);\r\n const bKeys = Object.keys(b);\r\n\r\n if (aKeys.length !== bKeys.length) {\r\n return false;\r\n }\r\n\r\n for (const key of aKeys) {\r\n if (!Object.is(a[key], b[key])) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}\r\n\r\nfunction insertFragmentIntoRange(\r\n range: Range,\r\n fragment: DocumentFragment,\r\n): void {\r\n const nodes = Array.from(fragment.childNodes);\r\n range.deleteContents();\r\n\r\n if (nodes.length === 0) {\r\n return;\r\n }\r\n\r\n range.insertNode(fragment);\r\n const first = nodes[0];\r\n const last = nodes[nodes.length - 1];\r\n range.setStartBefore(first);\r\n range.setEndAfter(last);\r\n}\r\n\r\nfunction bindJsxEventsInRange(range: Range): () => void {\n const root =\r\n range.commonAncestorContainer.nodeType === Node.ELEMENT_NODE\r\n ? range.commonAncestorContainer\r\n : range.commonAncestorContainer.parentNode;\r\n\r\n if (!root) {\r\n return () => {};\r\n }\r\n\r\n const globalObj = globalThis as typeof globalThis & {\r\n __olovaJsxHandlers?: Map<string, unknown>;\r\n };\r\n const handlers = globalObj.__olovaJsxHandlers;\n if (!handlers) {\n return () => {};\n }\n\n const listeners: Array<() => void> = [];\n const handlerIds = new Set<string>();\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT);\n let current = walker.currentNode as Element | null;\n\r\n while (current) {\r\n let intersects = false;\r\n try {\r\n intersects = range.intersectsNode(current);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (intersects) {\r\n const element = current;\r\n for (const attr of Array.from(current.attributes)) {\r\n if (!attr.name.startsWith(\"data-o-jsx-\")) {\r\n continue;\r\n }\r\n\r\n const eventName = attr.name.slice(\"data-o-jsx-\".length);\n const handlerId = attr.value;\n handlerIds.add(handlerId);\n const listener: EventListener = (event) => {\n const handler = handlers.get(handlerId);\n if (typeof handler === \"function\") {\n handler(event);\n }\n };\r\n\r\n element.addEventListener(eventName, listener);\r\n element.removeAttribute(`on${eventName}`);\r\n listeners.push(() => element.removeEventListener(eventName, listener));\r\n }\r\n }\r\n\r\n current = walker.nextNode() as Element | null;\r\n }\r\n\r\n return () => {\n for (const cleanup of listeners) {\n cleanup();\n }\n\n for (const handlerId of handlerIds) {\n handlers.delete(handlerId);\n }\n };\n}\n\r\nfunction replaceTokenWithTextNode(root: Node, token: string): Text | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const remainder = textNode.splitText(index);\r\n const after = remainder.splitText(token.length);\r\n const parent = remainder.parentNode;\r\n if (!parent) {\r\n return null;\r\n }\r\n\r\n const dynamic = document.createTextNode(\"\");\r\n parent.insertBefore(dynamic, after);\r\n parent.removeChild(remainder);\r\n return dynamic;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtToken(root: Node, token: string): Range | null {\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index >= 0) {\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n current = walker.nextNode();\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction createRangeAtTokenWithinRange(\r\n hostRange: Range,\r\n token: string,\r\n): Range | null {\r\n const root = hostRange.commonAncestorContainer;\r\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);\r\n let current = walker.nextNode();\r\n\r\n while (current) {\r\n const textNode = current as Text;\r\n const index = textNode.data.indexOf(token);\r\n\r\n if (index < 0) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n let intersects = false;\r\n try {\r\n intersects = hostRange.intersectsNode(textNode);\r\n } catch {\r\n intersects = false;\r\n }\r\n\r\n if (!intersects) {\r\n current = walker.nextNode();\r\n continue;\r\n }\r\n\r\n const marker = textNode.splitText(index);\r\n const after = marker.splitText(token.length);\r\n\r\n const range = document.createRange();\r\n range.setStartBefore(marker);\r\n range.setEndBefore(marker);\r\n\r\n marker.parentNode?.removeChild(marker);\r\n\r\n if (after.data.length === 0) {\r\n after.parentNode?.removeChild(after);\r\n }\r\n\r\n return range;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction resolveTokenRange(\r\n target: HTMLElement | Range,\r\n token: string,\r\n): Range | null {\r\n return target instanceof HTMLElement\r\n ? createRangeAtToken(target, token)\r\n : createRangeAtTokenWithinRange(target, token);\r\n}\r\n\r\nfunction mountDescriptor(\r\n descriptor: CompiledDescriptor,\r\n target: HTMLElement | Range,\r\n slots: OlovaSlots,\r\n context: ContextMap,\r\n): () => void {\r\n let fragment: DocumentFragment;\r\n let nodes: Record<string, Node> | null = null;\r\n\r\n if (descriptor.build) {\r\n const buildResult = descriptor.build();\r\n fragment = buildResult.fragment;\r\n nodes = buildResult.nodes;\r\n } else {\r\n const template = document.createElement(\"template\");\r\n template.innerHTML = descriptor.template ? descriptor.template.trim() : \"\";\r\n fragment = template.content;\r\n }\r\n\r\n const cleanups: Array<() => void> = [];\r\n\r\n for (const binding of descriptor.textBindings) {\r\n const token = `__O_TEXT_${binding.id}__`;\r\n const textNode =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as Text)\r\n : replaceTokenWithTextNode(fragment, token);\r\n if (!textNode) {\r\n continue;\r\n }\r\n\r\n const stop = effect(() => {\r\n textNode.data = toText(binding.get());\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n\r\n for (const binding of descriptor.attrBindings) {\r\n const token = `__O_ATTR_${binding.id}__`;\r\n const elements =\r\n nodes && nodes[binding.id]\r\n ? [nodes[binding.id] as HTMLElement]\r\n : Array.from(fragment.querySelectorAll<HTMLElement>(\"*\")).filter(\r\n (element) => element.getAttribute(binding.attr) === token,\r\n );\r\n\r\n for (const element of elements) {\r\n const stop = effect(() => {\r\n const next =\r\n binding.attr === \"class\"\r\n ? normalizeClassValue(binding.get())\r\n : toAttr(binding.get());\r\n if (next === null) {\r\n element.removeAttribute(binding.attr);\r\n return;\r\n }\r\n\r\n element.setAttribute(binding.attr, next);\r\n });\r\n\r\n cleanups.push(stop);\r\n }\r\n }\r\n\r\n for (const binding of descriptor.eventBindings) {\r\n const selector = `[data-o-on-${binding.event}=\"${binding.id}\"]`;\r\n const element =\r\n nodes && nodes[binding.id]\r\n ? (nodes[binding.id] as HTMLElement)\r\n : fragment.querySelector<HTMLElement>(selector);\r\n if (!element) {\r\n continue;\r\n }\r\n\r\n if (!nodes) element.removeAttribute(`data-o-on-${binding.event}`);\r\n\r\n let currentHandler: unknown;\r\n const stop = effect(() => {\r\n currentHandler = binding.get();\r\n });\r\n\r\n const listener: EventListener = (event) => {\r\n if (typeof currentHandler === \"function\") {\r\n currentHandler(event);\r\n }\r\n };\r\n\r\n element.addEventListener(binding.event, listener);\r\n\r\n cleanups.push(() => {\r\n stop();\r\n element.removeEventListener(binding.event, listener);\r\n });\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren(fragment);\r\n } else {\r\n insertFragmentIntoRange(target, fragment);\r\n }\r\n\r\n for (const binding of descriptor.htmlBindings) {\r\n const token = `__O_HTML_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let lastHtml = \"__OLOVA_INIT__\";\r\n let cleanupJsxEvents = () => {};\r\n const stop = effect(() => {\r\n const nextHtml = toHtml(binding.get());\r\n if (nextHtml === lastHtml) {\r\n return;\r\n }\r\n\r\n lastHtml = nextHtml;\r\n cleanupJsxEvents();\r\n const htmlTemplate = document.createElement(\"template\");\r\n htmlTemplate.innerHTML = nextHtml;\r\n insertFragmentIntoRange(range, htmlTemplate.content);\r\n cleanupJsxEvents = bindJsxEventsInRange(range);\r\n });\r\n\r\n cleanups.push(() => {\r\n cleanupJsxEvents();\r\n stop();\r\n });\r\n }\r\n\r\n for (const binding of descriptor.slotBindings) {\r\n const token = `__O_SLOT_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n const slotFactory = slots[binding.name];\r\n if (!slotFactory) {\r\n range.deleteContents();\r\n continue;\r\n }\r\n\r\n const slotDescriptor = slotFactory();\r\n const disposeSlot = mountDescriptor(slotDescriptor, range, slots, context);\r\n cleanups.push(disposeSlot);\r\n }\r\n\r\n for (const binding of descriptor.componentBindings) {\r\n const token = `__O_COMP_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeChild = () => {};\r\n let lastComponent: OlovaComponent | null = null;\r\n let lastProps: OlovaProps | undefined;\r\n let lastSlots: OlovaSlots | undefined;\r\n\r\n const stop = effect(() => {\r\n const nextComponent = binding.getComponent();\r\n const nextProps = binding.getProps();\r\n const nextSlots = binding.getSlots ? binding.getSlots() : EMPTY_SLOTS;\r\n\r\n if (\r\n lastComponent === nextComponent &&\r\n shallowEqual(lastProps, nextProps) &&\r\n shallowEqualSlots(lastSlots, nextSlots)\r\n ) {\r\n return;\r\n }\r\n\r\n disposeChild();\r\n disposeChild = mount(nextComponent, range, nextProps, nextSlots, context);\r\n lastComponent = nextComponent;\r\n lastProps = { ...nextProps };\r\n lastSlots = nextSlots;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeChild();\r\n });\r\n }\r\n\r\n if (descriptor.ifBindings) {\r\n for (const binding of descriptor.ifBindings) {\r\n const token = `__O_IF_${binding.id}__`;\r\n let range: Range | null = null;\r\n if (nodes && nodes[binding.id]) {\r\n range = document.createRange();\r\n range.setStartBefore(nodes[binding.id]);\r\n range.setEndBefore(nodes[binding.id]);\r\n nodes[binding.id].parentNode?.removeChild(nodes[binding.id]);\r\n } else {\r\n range = resolveTokenRange(target, token);\r\n }\r\n\r\n if (!range) {\r\n continue;\r\n }\r\n\r\n let disposeBranch = () => {};\r\n let lastCondition: boolean | undefined = undefined;\r\n\r\n const stop = effect(() => {\r\n const condition = !!binding.get();\r\n if (condition === lastCondition) {\r\n return;\r\n }\r\n\r\n disposeBranch();\r\n \r\n if (condition) {\r\n const branchDescriptor = binding.trueBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else if (binding.falseBranch) {\r\n const branchDescriptor = binding.falseBranch();\r\n disposeBranch = mountDescriptor(branchDescriptor, range, slots, context);\r\n } else {\r\n range.deleteContents();\r\n disposeBranch = () => {};\r\n }\r\n\r\n lastCondition = condition;\r\n });\r\n\r\n cleanups.push(() => {\r\n stop();\r\n disposeBranch();\r\n });\r\n }\r\n }\r\n\r\n return () => {\r\n for (const cleanup of cleanups) {\r\n cleanup();\r\n }\r\n\r\n if (target instanceof HTMLElement) {\r\n target.replaceChildren();\r\n return;\r\n }\r\n\r\n target.deleteContents();\r\n };\r\n}\r\n\r\nfunction registerMountedInstance(instance: MountedInstance): void {\r\n const instances =\r\n instance.component.__hmrInstances ?? (instance.component.__hmrInstances = new Set());\r\n instances.add(instance);\r\n}\r\n\r\nfunction unregisterMountedInstance(instance: MountedInstance): void {\r\n instance.component.__hmrInstances?.delete(instance);\r\n}\r\n\r\nfunction renderMountedInstance(\r\n instance: MountedInstance,\r\n restoredValues?: Array<{ key?: string; value: unknown }>,\r\n): void {\r\n const context = new Map(instance.parentContext ?? []);\r\n const previousContext = currentSetupContext;\r\n currentSetupContext = context;\r\n beginHmrStateCapture(restoredValues);\r\n\r\n try {\r\n const descriptor = instance.component.setup(instance.props, instance.slots);\r\n instance.disposeDescriptor = mountDescriptor(\r\n descriptor,\r\n instance.target,\r\n instance.slots,\r\n context,\r\n );\r\n instance.hmrSignals = endHmrStateCapture();\r\n } catch (error) {\r\n endHmrStateCapture();\r\n throw error;\r\n } finally {\r\n currentSetupContext = previousContext;\r\n }\r\n}\r\n\r\nfunction collectHmrSignalValues(\r\n instance: MountedInstance,\r\n): Array<{ key?: string; value: unknown }> {\r\n return instance.hmrSignals.map(({ key, signal }) => ({\r\n key,\r\n value: signal.peek(),\r\n }));\r\n}\r\n\r\nexport function replaceComponent(\r\n current: OlovaComponent,\r\n next: OlovaComponent,\r\n): void {\r\n const instances = current.__hmrInstances;\r\n\r\n if (!instances || instances.size === 0) {\r\n current.setup = next.setup;\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n return;\r\n }\r\n\r\n const snapshots = Array.from(instances, (instance) => ({\r\n instance,\r\n restoredValues: collectHmrSignalValues(instance),\r\n }));\r\n\r\n next.__hmrInstances = instances;\r\n current.__hmrInstances = undefined;\r\n\r\n try {\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = next;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n } catch (error) {\r\n next.__hmrInstances = undefined;\r\n current.__hmrInstances = instances;\r\n\r\n for (const { instance, restoredValues } of snapshots) {\r\n instance.component = current;\r\n instance.disposeDescriptor();\r\n renderMountedInstance(instance, restoredValues);\r\n }\r\n\r\n console.error(\"[olova] HMR update failed. Restored previous component.\", error);\r\n return;\r\n }\r\n}\r\n\r\nexport function defineComponent(setup: SetupFn, hmrId?: string): OlovaComponent {\r\n return { setup, __hmrId: hmrId };\r\n}\r\n\r\nexport function dangerouslySetHtml(value: unknown): DangerousHtml {\r\n return {\r\n __dangerousHtml: true,\r\n value: toText(value),\r\n };\r\n}\r\n\r\nexport function setContext<T>(key: unknown, value: T): T {\r\n const context = requireSetupContext(\"setContext\");\r\n context.set(key, value);\r\n return value;\r\n}\r\n\r\nexport function getContext<T>(key: unknown): T {\r\n const context = requireSetupContext(\"getContext\");\r\n return context.get(key) as T;\r\n}\r\n\r\nexport function hasContext(key: unknown): boolean {\r\n const context = requireSetupContext(\"hasContext\");\r\n return context.has(key);\r\n}\r\n\r\nexport function mount(\r\n component: OlovaComponent,\r\n target: HTMLElement | Range,\r\n props: OlovaProps = {},\r\n slots: OlovaSlots = EMPTY_SLOTS,\r\n parentContext?: ContextMap,\r\n): () => void {\r\n const instance: MountedInstance = {\r\n component,\r\n target,\r\n props,\r\n slots,\r\n parentContext,\r\n disposeDescriptor: () => {},\r\n hmrSignals: [],\r\n };\r\n\r\n registerMountedInstance(instance);\r\n renderMountedInstance(instance);\r\n\r\n return () => {\r\n unregisterMountedInstance(instance);\r\n instance.disposeDescriptor();\r\n };\r\n}\r\n\r\nexport function createApp(root: OlovaComponent): {\r\n mount(target: string | HTMLElement): () => void;\r\n} {\r\n return {\r\n mount(target) {\r\n const element =\r\n typeof target === \"string\"\r\n ? (document.querySelector(target) as HTMLElement | null)\r\n : target;\r\n\r\n if (!element) {\r\n throw new Error(`Target not found: ${String(target)}`);\r\n }\r\n\r\n return mount(root, element);\r\n },\r\n };\r\n}\r\n","import { effect, state } from \"../core/signals-core\";\r\nimport type { SignalState } from \"../core/signals-core\";\r\n\r\ntype AnyState = SignalState<unknown>;\r\ntype PersistTarget = \"localStorage\";\r\ntype GlobalStateOptions = {\r\n persist?: PersistTarget;\r\n};\r\n\r\nconst globalStates = new Map<string, AnyState>();\r\nconst persistCleanups = new Map<string, () => void>();\r\nconst persistTargets = new Map<string, PersistTarget>();\r\n\r\nfunction storageKey(name: string): string {\r\n return `olova:global:${name}`;\r\n}\r\n\r\nfunction getStorage(target: PersistTarget): Storage | null {\r\n if (typeof window === \"undefined\") {\r\n return null;\r\n }\r\n\r\n if (target === \"localStorage\") {\r\n return window.localStorage;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nfunction readPersisted(name: string, target: PersistTarget): unknown {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n const raw = storage.getItem(storageKey(name));\r\n if (raw == null) {\r\n return undefined;\r\n }\r\n return JSON.parse(raw);\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nfunction setupPersistence(name: string, stateRef: AnyState, target: PersistTarget) {\r\n const currentTarget = persistTargets.get(name);\r\n if (currentTarget === target && persistCleanups.has(name)) {\r\n return;\r\n }\r\n\r\n const previousCleanup = persistCleanups.get(name);\r\n if (previousCleanup) {\r\n previousCleanup();\r\n }\r\n\r\n persistTargets.set(name, target);\r\n\r\n const stop = effect(() => {\r\n const storage = getStorage(target);\r\n if (!storage) {\r\n return;\r\n }\r\n\r\n try {\r\n storage.setItem(storageKey(name), JSON.stringify(stateRef.value));\r\n } catch {\r\n // Ignore storage quota/serialization errors.\r\n }\r\n });\r\n\r\n persistCleanups.set(name, stop);\r\n}\r\n\r\nfunction ensureState(\r\n name: string,\r\n initial?: unknown,\r\n options?: GlobalStateOptions,\r\n): AnyState {\r\n const existing = globalStates.get(name);\r\n if (existing) {\r\n if (existing.value === undefined && initial !== undefined) {\r\n existing.value = initial;\r\n }\r\n\r\n if (options?.persist) {\r\n if (existing.value === undefined) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n existing.value = persisted;\r\n }\r\n }\r\n setupPersistence(name, existing, options.persist);\r\n }\r\n\r\n return existing;\r\n }\r\n\r\n let resolvedInitial = initial;\r\n if (options?.persist) {\r\n const persisted = readPersisted(name, options.persist);\r\n if (persisted !== undefined) {\r\n resolvedInitial = persisted;\r\n }\r\n }\r\n\r\n const created = state(resolvedInitial) as AnyState;\r\n globalStates.set(name, created);\r\n\r\n if (options?.persist) {\r\n setupPersistence(name, created, options.persist);\r\n }\r\n\r\n return created;\r\n}\r\n\r\nexport const global = {\r\n state(name: string, initial?: unknown, options?: GlobalStateOptions) {\r\n return ensureState(name, initial, options);\r\n },\r\n get(name: string) {\r\n return ensureState(name);\r\n },\r\n has(name: string) {\r\n return globalStates.has(name);\r\n },\r\n};\r\n"]}
package/dist/index.js CHANGED
@@ -1926,7 +1926,12 @@ ${exportHead}
1926
1926
  __olovaJsxHandlers.set(id, handler);
1927
1927
  return ' data-o-jsx-' + eventName + '="' + id + '" on' + eventName + '="window.__olovaDispatchJsxEvent(event, this)"';
1928
1928
  };
1929
- const __olovaToString = (value) => Array.isArray(value) ? value.map(__olovaToString).join('') : value == null ? '' : String(value);
1929
+ const __olovaToString = (value) =>
1930
+ Array.isArray(value)
1931
+ ? value.map(__olovaToString).join('')
1932
+ : value == null || value === false || value === true
1933
+ ? ''
1934
+ : String(value);
1930
1935
  const __olovaDangerouslySetHtml = (value) => ({ __dangerousHtml: true, value: __olovaToString(value) });
1931
1936
  const __olovaNormalizeClassValue = (value) => {
1932
1937
  if (value == null || value === false) {
@@ -2143,11 +2148,48 @@ var RUNTIME_MODULE_ID = "\0olova:runtime";
2143
2148
  var CORE_MODULE_ID = "\0olova:core";
2144
2149
  var GLOBAL_MODULE_ID = "\0olova:global";
2145
2150
  var STYLE_QUERY = "?olova&type=style";
2151
+ function findPackageRoot(startDir) {
2152
+ let currentDir = startDir;
2153
+ while (true) {
2154
+ const packageJsonPath = path.join(currentDir, "package.json");
2155
+ if (fs.existsSync(packageJsonPath)) {
2156
+ return currentDir;
2157
+ }
2158
+ const parentDir = path.dirname(currentDir);
2159
+ if (parentDir === currentDir) {
2160
+ return null;
2161
+ }
2162
+ currentDir = parentDir;
2163
+ }
2164
+ }
2165
+ function readPackageJson(packageRoot) {
2166
+ if (!packageRoot) {
2167
+ return null;
2168
+ }
2169
+ const packageJsonPath = path.join(packageRoot, "package.json");
2170
+ if (!fs.existsSync(packageJsonPath)) {
2171
+ return null;
2172
+ }
2173
+ return JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
2174
+ }
2175
+ function normalizeFilename(id) {
2176
+ return normalizePath(id.split("?", 1)[0]);
2177
+ }
2146
2178
  function olovaPlugin() {
2147
2179
  let config;
2148
2180
  const cssCache = /* @__PURE__ */ new Map();
2149
2181
  const pluginDir = path.dirname(fileURLToPath(import.meta.url));
2150
- const resolvePackageEntry = (relativePath) => {
2182
+ const packageRoot = findPackageRoot(pluginDir);
2183
+ const packageJson = readPackageJson(packageRoot);
2184
+ const resolvePackageEntry = (exportKey, relativePath) => {
2185
+ const exportEntry = packageJson?.exports?.[exportKey];
2186
+ const publishedPath = typeof exportEntry === "string" ? exportEntry : exportEntry?.import ?? exportEntry?.default;
2187
+ if (packageRoot && publishedPath) {
2188
+ const publishedCandidate = path.resolve(packageRoot, publishedPath);
2189
+ if (fs.existsSync(publishedCandidate)) {
2190
+ return normalizePath(publishedCandidate);
2191
+ }
2192
+ }
2151
2193
  const candidates = [
2152
2194
  path.resolve(pluginDir, relativePath),
2153
2195
  path.resolve(pluginDir, relativePath.replace(/\.ts$/, ".js"))
@@ -2159,14 +2201,15 @@ function olovaPlugin() {
2159
2201
  }
2160
2202
  return normalizePath(candidates[0]);
2161
2203
  };
2162
- const runtimeEntry = resolvePackageEntry("../runtime/index.ts");
2163
- const coreEntry = resolvePackageEntry("../core/index.ts");
2164
- const globalEntry = resolvePackageEntry("../runtime/global.ts");
2204
+ const runtimeEntry = resolvePackageEntry("./runtime", "../runtime/index.ts");
2205
+ const coreEntry = resolvePackageEntry("./core", "../core/index.ts");
2206
+ const globalEntry = resolvePackageEntry("./global", "../runtime/global.ts");
2165
2207
  const shouldRewriteRuntimeScript = (id, code) => {
2166
- if (id.includes("/node_modules/") || id.endsWith(".d.ts")) {
2208
+ const normalizedId = normalizeFilename(id);
2209
+ if (normalizedId.includes("/node_modules/") || normalizedId.endsWith(".d.ts")) {
2167
2210
  return false;
2168
2211
  }
2169
- if (!/\.(?:[cm]?[jt]sx?)$/.test(id)) {
2212
+ if (!/\.(?:[cm]?[jt]sx?)$/.test(normalizedId)) {
2170
2213
  return false;
2171
2214
  }
2172
2215
  return /from\s+['"]olova\/(?:core|global|state)['"]|import\s+['"]olova\/(?:core|global|state)['"]/.test(code);
@@ -2189,17 +2232,18 @@ function olovaPlugin() {
2189
2232
  if (id === CORE_MODULE_ID) return `export * from ${JSON.stringify(coreEntry)};`;
2190
2233
  if (id === GLOBAL_MODULE_ID) return `export * from ${JSON.stringify(globalEntry)};`;
2191
2234
  if (id.includes(`.css${STYLE_QUERY}`)) {
2192
- const filename = id.split("?")[0].replace(/\.css$/, "");
2235
+ const filename = normalizeFilename(id).replace(/\.css$/, "");
2193
2236
  return cssCache.get(filename) || "";
2194
2237
  }
2195
2238
  return null;
2196
2239
  },
2197
2240
  transform(code, id) {
2198
2241
  const [filename, query] = id.split("?", 2);
2199
- if (!filename.endsWith(".olova")) {
2200
- if (!query && shouldRewriteRuntimeScript(filename, code)) {
2242
+ const normalizedFilename = normalizePath(filename);
2243
+ if (!normalizedFilename.endsWith(".olova")) {
2244
+ if (!query && shouldRewriteRuntimeScript(normalizedFilename, code)) {
2201
2245
  const result = compileOlovaScriptModule(code, {
2202
- filename,
2246
+ filename: normalizedFilename,
2203
2247
  dev: !config.isProduction
2204
2248
  });
2205
2249
  return {
@@ -2212,14 +2256,14 @@ function olovaPlugin() {
2212
2256
  if (query && !query.includes("olova")) return null;
2213
2257
  if (query && query.includes("type=style")) return null;
2214
2258
  try {
2215
- const result = compileOlova(code, { filename, dev: !config.isProduction });
2259
+ const result = compileOlova(code, { filename: normalizedFilename, dev: !config.isProduction });
2216
2260
  let jsCode = result.code;
2217
2261
  if (result.css && result.css.trim()) {
2218
- cssCache.set(filename, result.css);
2219
- jsCode = `import ${JSON.stringify(filename + ".css" + STYLE_QUERY)};
2262
+ cssCache.set(normalizedFilename, result.css);
2263
+ jsCode = `import ${JSON.stringify(normalizedFilename + ".css" + STYLE_QUERY)};
2220
2264
  ` + jsCode;
2221
2265
  } else {
2222
- cssCache.delete(filename);
2266
+ cssCache.delete(normalizedFilename);
2223
2267
  }
2224
2268
  return {
2225
2269
  code: jsCode,