@getforma/core
Advanced tools
| import { createComputed, createSignal } from './chunk-OZCHIVAZ.js'; | ||
| import { effect, effectScope, startBatch, endBatch, setActiveSub } from 'alien-signals'; | ||
| export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals'; | ||
| var currentRoot = null; | ||
| var rootStack = []; | ||
| function createRoot(fn) { | ||
| const scope = { disposers: [], scopeDispose: null }; | ||
| rootStack.push(currentRoot); | ||
| currentRoot = scope; | ||
| const dispose = () => { | ||
| if (scope.scopeDispose) { | ||
| try { | ||
| scope.scopeDispose(); | ||
| } catch { | ||
| } | ||
| scope.scopeDispose = null; | ||
| } | ||
| for (const d of scope.disposers) { | ||
| try { | ||
| d(); | ||
| } catch { | ||
| } | ||
| } | ||
| scope.disposers.length = 0; | ||
| }; | ||
| let result; | ||
| try { | ||
| scope.scopeDispose = effectScope(() => { | ||
| result = fn(dispose); | ||
| }); | ||
| } finally { | ||
| currentRoot = rootStack.pop() ?? null; | ||
| } | ||
| return result; | ||
| } | ||
| function registerDisposer(dispose) { | ||
| if (currentRoot) { | ||
| currentRoot.disposers.push(dispose); | ||
| } | ||
| } | ||
| function hasActiveRoot() { | ||
| return currentRoot !== null; | ||
| } | ||
| // src/reactive/cleanup.ts | ||
| var currentCleanupCollector = null; | ||
| function onCleanup(fn) { | ||
| currentCleanupCollector?.(fn); | ||
| } | ||
| function setCleanupCollector(collector) { | ||
| const prev = currentCleanupCollector; | ||
| currentCleanupCollector = collector; | ||
| return prev; | ||
| } | ||
| // src/reactive/dev.ts | ||
| var __DEV__ = typeof process !== "undefined" ? process.env?.NODE_ENV !== "production" : true; | ||
| var _errorHandler = null; | ||
| function onError(handler) { | ||
| _errorHandler = handler; | ||
| } | ||
| function reportError(error, source) { | ||
| if (_errorHandler) { | ||
| try { | ||
| _errorHandler(error, source ? { source } : {}); | ||
| } catch { | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| console.error(`[forma] ${source ?? "Unknown"} error:`, error); | ||
| } | ||
| } | ||
| var POOL_SIZE = 32; | ||
| var MAX_REENTRANT_RUNS = 100; | ||
| var pool = []; | ||
| for (let i = 0; i < POOL_SIZE; i++) pool.push([]); | ||
| var poolIdx = POOL_SIZE; | ||
| function acquireArray() { | ||
| if (poolIdx > 0) { | ||
| const arr = pool[--poolIdx]; | ||
| arr.length = 0; | ||
| return arr; | ||
| } | ||
| return []; | ||
| } | ||
| function releaseArray(arr) { | ||
| arr.length = 0; | ||
| if (poolIdx < POOL_SIZE) { | ||
| pool[poolIdx++] = arr; | ||
| } | ||
| } | ||
| function runCleanup(fn) { | ||
| if (fn === void 0) return; | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| function runCleanups(bag) { | ||
| if (bag === void 0) return; | ||
| for (let i = 0; i < bag.length; i++) { | ||
| try { | ||
| bag[i](); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| } | ||
| function internalEffect(fn) { | ||
| const dispose = effect(fn); | ||
| if (hasActiveRoot()) { | ||
| registerDisposer(dispose); | ||
| } | ||
| return dispose; | ||
| } | ||
| function createEffect(fn) { | ||
| const shouldRegister = hasActiveRoot(); | ||
| let cleanup2; | ||
| let cleanupBag; | ||
| let nextCleanup; | ||
| let nextCleanupBag; | ||
| const addCleanup = (cb) => { | ||
| if (nextCleanupBag !== void 0) { | ||
| nextCleanupBag.push(cb); | ||
| return; | ||
| } | ||
| if (nextCleanup !== void 0) { | ||
| const bag = acquireArray(); | ||
| bag.push(nextCleanup, cb); | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = bag; | ||
| return; | ||
| } | ||
| nextCleanup = cb; | ||
| }; | ||
| let skipCleanupInfra = false; | ||
| let firstRun = true; | ||
| let running = false; | ||
| let rerunRequested = false; | ||
| const runOnce = () => { | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| if (skipCleanupInfra) { | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| } | ||
| return; | ||
| } | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = void 0; | ||
| const prevCollector = setCleanupCollector(addCleanup); | ||
| try { | ||
| const result = fn(); | ||
| if (typeof result === "function") { | ||
| addCleanup(result); | ||
| } | ||
| if (nextCleanup === void 0 && nextCleanupBag === void 0) { | ||
| if (firstRun) skipCleanupInfra = true; | ||
| return; | ||
| } | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } finally { | ||
| setCleanupCollector(prevCollector); | ||
| firstRun = false; | ||
| } | ||
| }; | ||
| const safeFn = () => { | ||
| if (running) { | ||
| rerunRequested = true; | ||
| return; | ||
| } | ||
| running = true; | ||
| try { | ||
| let reentrantRuns = 0; | ||
| do { | ||
| rerunRequested = false; | ||
| runOnce(); | ||
| if (rerunRequested) { | ||
| reentrantRuns++; | ||
| if (reentrantRuns >= MAX_REENTRANT_RUNS) { | ||
| reportError( | ||
| new Error(`createEffect exceeded ${MAX_REENTRANT_RUNS} re-entrant runs`), | ||
| "effect" | ||
| ); | ||
| rerunRequested = false; | ||
| } | ||
| } | ||
| } while (rerunRequested); | ||
| } finally { | ||
| running = false; | ||
| } | ||
| }; | ||
| const dispose = effect(safeFn); | ||
| let disposed = false; | ||
| const wrappedDispose = () => { | ||
| if (disposed) return; | ||
| disposed = true; | ||
| dispose(); | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| }; | ||
| if (shouldRegister) { | ||
| registerDisposer(wrappedDispose); | ||
| } | ||
| return wrappedDispose; | ||
| } | ||
| // src/reactive/memo.ts | ||
| var createMemo = createComputed; | ||
| function batch(fn) { | ||
| startBatch(); | ||
| try { | ||
| fn(); | ||
| } finally { | ||
| endBatch(); | ||
| } | ||
| } | ||
| function untrack(fn) { | ||
| const prev = setActiveSub(void 0); | ||
| try { | ||
| return fn(); | ||
| } finally { | ||
| setActiveSub(prev); | ||
| } | ||
| } | ||
| // src/reactive/on.ts | ||
| function on(deps, fn, options) { | ||
| let prev; | ||
| let isFirst = true; | ||
| return () => { | ||
| const value2 = deps(); | ||
| if (options?.defer && isFirst) { | ||
| isFirst = false; | ||
| prev = value2; | ||
| return void 0; | ||
| } | ||
| const result = untrack(() => fn(value2, prev)); | ||
| prev = value2; | ||
| return result; | ||
| }; | ||
| } | ||
| // src/reactive/ref.ts | ||
| function createRef(initialValue) { | ||
| return { current: initialValue }; | ||
| } | ||
| // src/reactive/reducer.ts | ||
| function createReducer(reducer, initialState) { | ||
| const [state, setState] = createSignal(initialState); | ||
| const dispatch = (action) => { | ||
| setState((prev) => reducer(prev, action)); | ||
| }; | ||
| return [state, dispatch]; | ||
| } | ||
| // src/reactive/suspense-context.ts | ||
| var currentSuspenseContext = null; | ||
| var suspenseStack = []; | ||
| function pushSuspenseContext(ctx) { | ||
| suspenseStack.push(currentSuspenseContext); | ||
| currentSuspenseContext = ctx; | ||
| } | ||
| function popSuspenseContext() { | ||
| currentSuspenseContext = suspenseStack.pop() ?? null; | ||
| } | ||
| function getSuspenseContext() { | ||
| return currentSuspenseContext; | ||
| } | ||
| // src/reactive/resource.ts | ||
| function createResource(source, fetcher, options) { | ||
| const [data, setData] = createSignal(options?.initialValue); | ||
| const [loading, setLoading] = createSignal(false); | ||
| const [error, setError] = createSignal(void 0); | ||
| const suspenseCtx = getSuspenseContext(); | ||
| let abortController = null; | ||
| let fetchVersion = 0; | ||
| const doFetch = () => { | ||
| const sourceValue = untrack(source); | ||
| if (abortController) { | ||
| abortController.abort(); | ||
| } | ||
| const controller = new AbortController(); | ||
| abortController = controller; | ||
| const version = ++fetchVersion; | ||
| const isLatest = () => version === fetchVersion; | ||
| let suspensePending = false; | ||
| if (suspenseCtx) { | ||
| suspenseCtx.increment(); | ||
| suspensePending = true; | ||
| } | ||
| setLoading(true); | ||
| setError(void 0); | ||
| Promise.resolve(fetcher(sourceValue)).then((result) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| setData(() => result); | ||
| } | ||
| }).catch((err) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| if (err?.name !== "AbortError") { | ||
| setError(err); | ||
| } | ||
| } | ||
| }).finally(() => { | ||
| if (suspensePending) suspenseCtx?.decrement(); | ||
| if (isLatest()) { | ||
| setLoading(false); | ||
| if (abortController === controller) { | ||
| abortController = null; | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| internalEffect(() => { | ||
| source(); | ||
| doFetch(); | ||
| }); | ||
| const resource = (() => data()); | ||
| resource.loading = loading; | ||
| resource.error = error; | ||
| resource.refetch = doFetch; | ||
| resource.mutate = (value2) => setData(() => value2); | ||
| return resource; | ||
| } | ||
| // src/dom/element.ts | ||
| var Fragment = /* @__PURE__ */ Symbol.for("forma.fragment"); | ||
| var SVG_NS = "http://www.w3.org/2000/svg"; | ||
| var XLINK_NS = "http://www.w3.org/1999/xlink"; | ||
| var SVG_TAGS = /* @__PURE__ */ new Set([ | ||
| "svg", | ||
| "path", | ||
| "circle", | ||
| "rect", | ||
| "line", | ||
| "polyline", | ||
| "polygon", | ||
| "ellipse", | ||
| "g", | ||
| "text", | ||
| "tspan", | ||
| "textPath", | ||
| "defs", | ||
| "use", | ||
| "symbol", | ||
| "clipPath", | ||
| "mask", | ||
| "pattern", | ||
| "marker", | ||
| "linearGradient", | ||
| "radialGradient", | ||
| "stop", | ||
| "filter", | ||
| "feGaussianBlur", | ||
| "feColorMatrix", | ||
| "feOffset", | ||
| "feBlend", | ||
| "feMerge", | ||
| "feMergeNode", | ||
| "feComposite", | ||
| "feFlood", | ||
| "feMorphology", | ||
| "feTurbulence", | ||
| "feDisplacementMap", | ||
| "feImage", | ||
| "foreignObject", | ||
| "animate", | ||
| "animateTransform", | ||
| "animateMotion", | ||
| "set", | ||
| "image", | ||
| "switch", | ||
| "desc", | ||
| "title", | ||
| "metadata" | ||
| ]); | ||
| var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([ | ||
| "disabled", | ||
| "checked", | ||
| "readonly", | ||
| "required", | ||
| "autofocus", | ||
| "autoplay", | ||
| "controls", | ||
| "default", | ||
| "defer", | ||
| "formnovalidate", | ||
| "hidden", | ||
| "ismap", | ||
| "loop", | ||
| "multiple", | ||
| "muted", | ||
| "nomodule", | ||
| "novalidate", | ||
| "open", | ||
| "playsinline", | ||
| "reversed", | ||
| "selected", | ||
| "async" | ||
| ]); | ||
| var ELEMENT_PROTOS = null; | ||
| function getProto(tag) { | ||
| if (!ELEMENT_PROTOS) { | ||
| ELEMENT_PROTOS = /* @__PURE__ */ Object.create(null); | ||
| for (const t of [ | ||
| "div", | ||
| "span", | ||
| "p", | ||
| "a", | ||
| "li", | ||
| "ul", | ||
| "ol", | ||
| "button", | ||
| "input", | ||
| "label", | ||
| "h1", | ||
| "h2", | ||
| "h3", | ||
| "h4", | ||
| "h5", | ||
| "h6", | ||
| "section", | ||
| "header", | ||
| "footer", | ||
| "main", | ||
| "nav", | ||
| "table", | ||
| "tr", | ||
| "td", | ||
| "th", | ||
| "tbody", | ||
| "img", | ||
| "form", | ||
| "select", | ||
| "option", | ||
| "textarea", | ||
| "i", | ||
| "b", | ||
| "strong", | ||
| "em", | ||
| "small", | ||
| "article", | ||
| "aside", | ||
| "details", | ||
| "summary" | ||
| ]) { | ||
| ELEMENT_PROTOS[t] = document.createElement(t); | ||
| } | ||
| } | ||
| return ELEMENT_PROTOS[tag] ?? (ELEMENT_PROTOS[tag] = document.createElement(tag)); | ||
| } | ||
| var EVENT_NAMES = /* @__PURE__ */ Object.create(null); | ||
| function eventName(key) { | ||
| return EVENT_NAMES[key] ?? (EVENT_NAMES[key] = key.slice(2).toLowerCase()); | ||
| } | ||
| var ABORT_SYM = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| function getAbortController(el) { | ||
| let controller = el[ABORT_SYM]; | ||
| if (!controller) { | ||
| controller = new AbortController(); | ||
| el[ABORT_SYM] = controller; | ||
| } | ||
| return controller; | ||
| } | ||
| function cleanup(el) { | ||
| const controller = el[ABORT_SYM]; | ||
| if (controller) { | ||
| controller.abort(); | ||
| delete el[ABORT_SYM]; | ||
| } | ||
| } | ||
| var CACHE_SYM = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function getCache(el) { | ||
| return el[CACHE_SYM] ?? (el[CACHE_SYM] = /* @__PURE__ */ Object.create(null)); | ||
| } | ||
| function handleClass(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache["class"] === v) return; | ||
| cache["class"] = v; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = v; | ||
| } else { | ||
| el.setAttribute("class", v); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache["class"] === value2) return; | ||
| cache["class"] = value2; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = value2; | ||
| } else { | ||
| el.setAttribute("class", value2); | ||
| } | ||
| } | ||
| } | ||
| function handleStyle(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| let prevKeys = []; | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (typeof v === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === v) return; | ||
| cache["style"] = v; | ||
| prevKeys = []; | ||
| el.style.cssText = v; | ||
| } else if (v && typeof v === "object") { | ||
| const style = el.style; | ||
| const nextKeys = Object.keys(v); | ||
| for (const k of prevKeys) { | ||
| if (!(k in v)) { | ||
| style.removeProperty(k.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase())); | ||
| } | ||
| } | ||
| Object.assign(style, v); | ||
| prevKeys = nextKeys; | ||
| } | ||
| }); | ||
| } else if (typeof value2 === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === value2) return; | ||
| cache["style"] = value2; | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| } | ||
| function handleEvent(el, key, value2) { | ||
| const controller = getAbortController(el); | ||
| el.addEventListener( | ||
| eventName(key), | ||
| value2, | ||
| { signal: controller.signal } | ||
| ); | ||
| } | ||
| function handleInnerHTML(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const resolved = value2(); | ||
| if (resolved == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof resolved !== "object" || !("__html" in resolved)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof resolved | ||
| ); | ||
| } | ||
| const html = resolved.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| const cache = getCache(el); | ||
| if (cache["innerHTML"] === html) return; | ||
| cache["innerHTML"] = html; | ||
| el.innerHTML = html; | ||
| }); | ||
| } else { | ||
| if (value2 == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| } | ||
| } | ||
| function handleXLink(el, key, value2) { | ||
| const localName = key.slice(6); | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(v)); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| } | ||
| } | ||
| } | ||
| function handleBooleanAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache[key] === v) return; | ||
| cache[key] = v; | ||
| if (v) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache[key] === value2) return; | ||
| cache[key] = value2; | ||
| if (value2) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| } | ||
| } | ||
| function handleGenericAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(v); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(value2); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| } | ||
| } | ||
| var PROP_HANDLERS = /* @__PURE__ */ new Map(); | ||
| PROP_HANDLERS.set("class", handleClass); | ||
| PROP_HANDLERS.set("className", handleClass); | ||
| PROP_HANDLERS.set("style", handleStyle); | ||
| PROP_HANDLERS.set("ref", () => { | ||
| }); | ||
| PROP_HANDLERS.set("dangerouslySetInnerHTML", handleInnerHTML); | ||
| for (const attr of BOOLEAN_ATTRS) { | ||
| PROP_HANDLERS.set(attr, handleBooleanAttr); | ||
| } | ||
| function applyProp(el, key, value2) { | ||
| if (key === "class") { | ||
| handleClass(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| return; | ||
| } | ||
| const handler = PROP_HANDLERS.get(key); | ||
| if (handler) { | ||
| handler(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| handleXLink(el, key, value2); | ||
| return; | ||
| } | ||
| handleGenericAttr(el, key, value2); | ||
| } | ||
| function applyStaticProp(el, key, value2) { | ||
| if (value2 == null || value2 === false) return; | ||
| if (key === "class" || key === "className") { | ||
| el.className = value2; | ||
| return; | ||
| } | ||
| if (key === "style") { | ||
| if (typeof value2 === "string") { | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| return; | ||
| } | ||
| if (key === "dangerouslySetInnerHTML") { | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| return; | ||
| } | ||
| if (BOOLEAN_ATTRS.has(key)) { | ||
| if (value2) el.setAttribute(key, ""); | ||
| return; | ||
| } | ||
| if (value2 === true) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.setAttribute(key, String(value2)); | ||
| } | ||
| } | ||
| function appendChild(parent, child) { | ||
| if (child instanceof Node) { | ||
| parent.appendChild(child); | ||
| return; | ||
| } | ||
| if (typeof child === "string") { | ||
| parent.appendChild(new Text(child)); | ||
| return; | ||
| } | ||
| if (child == null || child === false || child === true) { | ||
| return; | ||
| } | ||
| if (typeof child === "number") { | ||
| parent.appendChild(new Text(String(child))); | ||
| return; | ||
| } | ||
| if (typeof child === "function") { | ||
| if (parent instanceof Element) { | ||
| parent[DYNAMIC_CHILD_SYM] = true; | ||
| } | ||
| let currentNode = null; | ||
| internalEffect(() => { | ||
| const v = child(); | ||
| if (v instanceof Node) { | ||
| if (currentNode) { | ||
| parent.replaceChild(v, currentNode); | ||
| } else { | ||
| parent.appendChild(v); | ||
| } | ||
| currentNode = v; | ||
| } else { | ||
| const text = typeof v === "symbol" ? String(v) : String(v ?? ""); | ||
| if (!currentNode) { | ||
| currentNode = new Text(text); | ||
| parent.appendChild(currentNode); | ||
| } else if (currentNode.nodeType === 3) { | ||
| currentNode.data = text; | ||
| } else { | ||
| const tn = new Text(text); | ||
| parent.replaceChild(tn, currentNode); | ||
| currentNode = tn; | ||
| } | ||
| } | ||
| }); | ||
| return; | ||
| } | ||
| if (Array.isArray(child)) { | ||
| for (const item of child) { | ||
| appendChild(parent, item); | ||
| } | ||
| return; | ||
| } | ||
| } | ||
| function h(tag, props, ...children) { | ||
| if (typeof tag === "function" && tag !== Fragment) { | ||
| const mergedProps = { ...props ?? {}, children }; | ||
| return tag(mergedProps); | ||
| } | ||
| if (tag === Fragment) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| const tagName = tag; | ||
| if (hydrating) { | ||
| return { type: "element", tag: tagName, props: props ?? null, children }; | ||
| } | ||
| let el; | ||
| if (ELEMENT_PROTOS && ELEMENT_PROTOS[tagName]) { | ||
| el = ELEMENT_PROTOS[tagName].cloneNode(false); | ||
| } else if (SVG_TAGS.has(tagName)) { | ||
| el = document.createElementNS(SVG_NS, tagName); | ||
| } else { | ||
| el = getProto(tagName).cloneNode(false); | ||
| } | ||
| if (props) { | ||
| let hasDynamic = false; | ||
| for (const key in props) { | ||
| if (key === "ref") continue; | ||
| const value2 = props[key]; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| continue; | ||
| } | ||
| if (typeof value2 === "function") { | ||
| if (!hasDynamic) { | ||
| el[CACHE_SYM] = /* @__PURE__ */ Object.create(null); | ||
| hasDynamic = true; | ||
| } | ||
| applyProp(el, key, value2); | ||
| continue; | ||
| } | ||
| applyStaticProp(el, key, value2); | ||
| } | ||
| } | ||
| const childLen = children.length; | ||
| if (childLen === 1) { | ||
| const only = children[0]; | ||
| if (typeof only === "string") { | ||
| el.textContent = only; | ||
| } else if (typeof only === "number") { | ||
| el.textContent = String(only); | ||
| } else { | ||
| appendChild(el, only); | ||
| } | ||
| } else if (childLen > 1) { | ||
| for (const child of children) { | ||
| appendChild(el, child); | ||
| } | ||
| } | ||
| if (props && typeof props["ref"] === "function") { | ||
| props["ref"](el); | ||
| } | ||
| return el; | ||
| } | ||
| function fragment(...children) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| // src/dom/show.ts | ||
| function createShow(when, thenFn, elseFn) { | ||
| if (hydrating) { | ||
| const branch = when() ? thenFn() : elseFn?.() ?? null; | ||
| return { | ||
| type: "show", | ||
| condition: when, | ||
| whenTrue: thenFn, | ||
| whenFalse: elseFn, | ||
| initialBranch: branch | ||
| }; | ||
| } | ||
| const startMarker = document.createComment("forma-show"); | ||
| const endMarker = document.createComment("/forma-show"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let currentNode = null; | ||
| let lastTruthy = null; | ||
| let currentDispose = null; | ||
| const showDispose = internalEffect(() => { | ||
| const truthy = !!when(); | ||
| const DEBUG = typeof globalThis.__FORMA_DEBUG__ !== "undefined"; | ||
| const DEBUG_LABEL = DEBUG ? thenFn.toString().slice(0, 60) : ""; | ||
| if (truthy === lastTruthy) { | ||
| if (DEBUG) console.log("[forma:show] skip (same)", truthy, DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show]", lastTruthy, "\u2192", truthy, DEBUG_LABEL); | ||
| lastTruthy = truthy; | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| if (DEBUG) console.warn("[forma:show] parentNode is null! skipping.", DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show] parent:", parent.nodeName, "inDoc:", document.contains(parent)); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| if (currentNode) { | ||
| if (currentNode.parentNode === parent) { | ||
| parent.removeChild(currentNode); | ||
| } else { | ||
| while (startMarker.nextSibling && startMarker.nextSibling !== endMarker) { | ||
| parent.removeChild(startMarker.nextSibling); | ||
| } | ||
| } | ||
| } | ||
| const branchFn = truthy ? thenFn : elseFn; | ||
| if (branchFn) { | ||
| let branchDispose; | ||
| currentNode = createRoot((dispose) => { | ||
| branchDispose = dispose; | ||
| return untrack(() => branchFn()); | ||
| }); | ||
| currentDispose = branchDispose; | ||
| } else { | ||
| currentNode = null; | ||
| } | ||
| if (currentNode) { | ||
| parent.insertBefore(currentNode, endMarker); | ||
| } | ||
| }); | ||
| fragment2.__showDispose = () => { | ||
| showDispose(); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| }; | ||
| return fragment2; | ||
| } | ||
| // src/dom/hydrate.ts | ||
| var ABORT_SYM2 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var hydrating = false; | ||
| function setHydrating(value2) { | ||
| hydrating = value2; | ||
| } | ||
| function isDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "element"; | ||
| } | ||
| function isShowDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "show"; | ||
| } | ||
| function isListDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "list"; | ||
| } | ||
| function applyDynamicProps(el, props) { | ||
| if (!props) return; | ||
| for (const key in props) { | ||
| const value2 = props[key]; | ||
| if (typeof value2 !== "function") continue; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| let ac = el[ABORT_SYM2]; | ||
| if (!ac) { | ||
| ac = new AbortController(); | ||
| el[ABORT_SYM2] = ac; | ||
| } | ||
| el.addEventListener(key.slice(2).toLowerCase(), value2, { signal: ac.signal }); | ||
| continue; | ||
| } | ||
| const fn = value2; | ||
| const attrKey = key; | ||
| internalEffect(() => { | ||
| const v = fn(); | ||
| if (v === false || v == null) { | ||
| el.removeAttribute(attrKey); | ||
| } else if (v === true) { | ||
| el.setAttribute(attrKey, ""); | ||
| } else { | ||
| el.setAttribute(attrKey, String(v)); | ||
| } | ||
| }); | ||
| } | ||
| } | ||
| function ensureNode(value2) { | ||
| if (value2 instanceof Node) return value2; | ||
| if (value2 == null || value2 === false || value2 === true) return null; | ||
| if (typeof value2 === "string") return new Text(value2); | ||
| if (typeof value2 === "number") return new Text(String(value2)); | ||
| if (isDescriptor(value2)) return descriptorToElement(value2); | ||
| if (isShowDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createShow( | ||
| value2.condition, | ||
| () => ensureNode(value2.whenTrue()) ?? document.createComment("empty"), | ||
| value2.whenFalse ? () => ensureNode(value2.whenFalse()) ?? document.createComment("empty") : void 0 | ||
| ); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| if (isListDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createList(value2.items, value2.keyFn, value2.renderFn, value2.options); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| function descriptorToElement(desc) { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const children = desc.children.map((child) => { | ||
| if (isDescriptor(child)) return descriptorToElement(child); | ||
| if (isShowDescriptor(child)) return ensureNode(child); | ||
| if (isListDescriptor(child)) return ensureNode(child); | ||
| return child; | ||
| }); | ||
| return h(desc.tag, desc.props, ...children); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| function isIslandStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 105; | ||
| } | ||
| function isShowStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 115; | ||
| } | ||
| function isTextStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 116; | ||
| } | ||
| function isListStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 108; | ||
| } | ||
| function findClosingMarker(start) { | ||
| const closing = "/" + start.data; | ||
| let node = start.nextSibling; | ||
| while (node) { | ||
| if (node.nodeType === 8 && node.data === closing) { | ||
| return node; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function findTextBetween(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 3) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function nextElementBetweenMarkers(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return void 0; | ||
| } | ||
| function extractContentBetweenMarkers(start, end) { | ||
| const frag = document.createDocumentFragment(); | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| const next = node.nextSibling; | ||
| frag.appendChild(node); | ||
| node = next; | ||
| } | ||
| return frag; | ||
| } | ||
| function setupShowEffect(desc, marker) { | ||
| let currentCondition = !!desc.condition(); | ||
| let thenFragment = null; | ||
| let elseFragment = null; | ||
| const hasSSRContent = marker.start.nextSibling !== marker.end; | ||
| if (!hasSSRContent && currentCondition) { | ||
| if (__DEV__) console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true"); | ||
| const trueBranch = desc.whenTrue(); | ||
| if (trueBranch instanceof Node) { | ||
| marker.start.parentNode.insertBefore(trueBranch, marker.end); | ||
| } | ||
| } | ||
| internalEffect(() => { | ||
| const next = !!desc.condition(); | ||
| if (next === currentCondition) return; | ||
| currentCondition = next; | ||
| const parent = marker.start.parentNode; | ||
| if (!parent) return; | ||
| const current = extractContentBetweenMarkers(marker.start, marker.end); | ||
| if (!next) { | ||
| thenFragment = current; | ||
| } else { | ||
| elseFragment = current; | ||
| } | ||
| let branch = next ? thenFragment ?? desc.whenTrue() : desc.whenFalse ? elseFragment ?? desc.whenFalse() : null; | ||
| if (next && thenFragment) thenFragment = null; | ||
| if (!next && elseFragment) elseFragment = null; | ||
| if (branch != null && !(branch instanceof Node)) { | ||
| branch = ensureNode(branch); | ||
| } | ||
| if (branch instanceof Node) { | ||
| parent.insertBefore(branch, marker.end); | ||
| } | ||
| }); | ||
| } | ||
| function adoptBranchContent(desc, regionStart, regionEnd) { | ||
| if (isDescriptor(desc)) { | ||
| const el = nextElementBetweenMarkers(regionStart, regionEnd); | ||
| if (el) adoptNode(desc, el); | ||
| } else if (isShowDescriptor(desc)) { | ||
| let node = regionStart.nextSibling; | ||
| while (node && node !== regionEnd) { | ||
| if (node.nodeType === 8 && isShowStart(node.data)) { | ||
| const innerStart = node; | ||
| const innerEnd = findClosingMarker(innerStart); | ||
| if (innerEnd) { | ||
| if (desc.initialBranch) { | ||
| adoptBranchContent(desc.initialBranch, innerStart, innerEnd); | ||
| } | ||
| setupShowEffect(desc, { start: innerStart, end: innerEnd}); | ||
| } | ||
| break; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| function adoptNode(desc, ssrEl) { | ||
| if (!ssrEl || ssrEl.tagName !== desc.tag.toUpperCase()) { | ||
| if (__DEV__) console.warn(`Hydration mismatch: expected <${desc.tag}>, got <${ssrEl?.tagName?.toLowerCase() ?? "nothing"}>`); | ||
| const fresh = descriptorToElement(desc); | ||
| if (ssrEl) ssrEl.replaceWith(fresh); | ||
| return; | ||
| } | ||
| applyDynamicProps(ssrEl, desc.props); | ||
| let cursor = ssrEl.firstChild; | ||
| for (const child of desc.children) { | ||
| if (child === false || child == null) continue; | ||
| if (isDescriptor(child)) { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| while (cursor && cursor.nodeType === 1 && cursor.hasAttribute("data-forma-island")) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (!cursor) { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| continue; | ||
| } | ||
| if (cursor.nodeType === 1) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(child, el); | ||
| } else if (cursor.nodeType === 8 && isIslandStart(cursor.data)) { | ||
| const end = findClosingMarker(cursor); | ||
| const fresh = descriptorToElement(child); | ||
| if (end) { | ||
| end.parentNode.insertBefore(fresh, end); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| ssrEl.appendChild(fresh); | ||
| cursor = null; | ||
| } | ||
| } else { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| } | ||
| } else if (isShowDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isShowStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| if (child.initialBranch) { | ||
| adoptBranchContent(child.initialBranch, start, end); | ||
| } | ||
| setupShowEffect(child, { start, end}); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (isListDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isListStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| const ssrKeyMap = /* @__PURE__ */ new Map(); | ||
| const ssrElements = []; | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) { | ||
| const el = node; | ||
| ssrElements.push(el); | ||
| const key = el.getAttribute("data-forma-key"); | ||
| if (key != null) { | ||
| ssrKeyMap.set(key, el); | ||
| } | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| const currentItems = untrack(() => child.items()); | ||
| const listKeyFn = child.keyFn; | ||
| const listRenderFn = child.renderFn; | ||
| const useIndexFallback = ssrKeyMap.size === 0 && ssrElements.length > 0; | ||
| const adoptedNodes = []; | ||
| const adoptedItems = []; | ||
| const usedIndices = /* @__PURE__ */ new Set(); | ||
| for (let i = 0; i < currentItems.length; i++) { | ||
| const item = currentItems[i]; | ||
| const key = listKeyFn(item); | ||
| let ssrNode; | ||
| if (useIndexFallback) { | ||
| if (i < ssrElements.length) { | ||
| ssrNode = ssrElements[i]; | ||
| usedIndices.add(i); | ||
| } | ||
| } else { | ||
| ssrNode = ssrKeyMap.get(String(key)); | ||
| if (ssrNode) ssrKeyMap.delete(String(key)); | ||
| } | ||
| if (ssrNode) { | ||
| adoptedNodes.push(ssrNode); | ||
| adoptedItems.push(item); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: list item key "${key}" not found in SSR \u2014 rendering fresh`); | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const [getIndex] = createSignal(i); | ||
| const fresh = listRenderFn(item, getIndex); | ||
| end.parentNode.insertBefore(fresh, end); | ||
| adoptedNodes.push(fresh); | ||
| adoptedItems.push(item); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| } | ||
| if (useIndexFallback) { | ||
| for (let i = 0; i < ssrElements.length; i++) { | ||
| if (!usedIndices.has(i) && ssrElements[i].parentNode) { | ||
| ssrElements[i].parentNode.removeChild(ssrElements[i]); | ||
| } | ||
| } | ||
| } else { | ||
| for (const [unusedKey, unusedNode] of ssrKeyMap) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${unusedKey}"`); | ||
| if (unusedNode.parentNode) { | ||
| unusedNode.parentNode.removeChild(unusedNode); | ||
| } | ||
| } | ||
| } | ||
| const parent = start.parentNode; | ||
| for (const adoptedNode of adoptedNodes) { | ||
| parent.insertBefore(adoptedNode, end); | ||
| } | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < adoptedItems.length; i++) { | ||
| const item = adoptedItems[i]; | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = createSignal(i); | ||
| cache.set(key, { | ||
| element: adoptedNodes[i], | ||
| item, | ||
| getIndex, | ||
| setIndex | ||
| }); | ||
| } | ||
| let reconcileNodes = adoptedNodes.slice(); | ||
| let reconcileItems = adoptedItems.slice(); | ||
| internalEffect(() => { | ||
| const newItems = child.items(); | ||
| const parent2 = start.parentNode; | ||
| if (!parent2) return; | ||
| const result = reconcileList( | ||
| parent2, | ||
| reconcileItems, | ||
| newItems, | ||
| reconcileNodes, | ||
| listKeyFn, | ||
| (item) => { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = createSignal(0); | ||
| const element = untrack(() => listRenderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| }, | ||
| (_node, item) => { | ||
| const key = listKeyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }, | ||
| end | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| const key = listKeyFn(newItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| reconcileNodes = result.nodes; | ||
| reconcileItems = result.items; | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (typeof child === "function") { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor && cursor.nodeType === 1) { | ||
| const initial = child(); | ||
| if (isDescriptor(initial)) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(initial, el); | ||
| continue; | ||
| } | ||
| } | ||
| if (cursor && cursor.nodeType === 8) { | ||
| const data = cursor.data; | ||
| if (isTextStart(data)) { | ||
| const endMarker = findClosingMarker(cursor); | ||
| let textNode = cursor.nextSibling; | ||
| if (!textNode || textNode.nodeType !== 3) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for marker ${data} \u2014 SSR walker should emit content between markers`); | ||
| const created = document.createTextNode(""); | ||
| cursor.parentNode.insertBefore(created, endMarker || cursor.nextSibling); | ||
| textNode = created; | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = endMarker ? endMarker.nextSibling : textNode.nextSibling; | ||
| } else if (isShowStart(data)) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| let textNode = findTextBetween(start, end); | ||
| if (!textNode) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for show marker ${start.data} \u2014 SSR walker should emit content between markers`); | ||
| textNode = document.createTextNode(""); | ||
| start.parentNode.insertBefore(textNode, end); | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else if (cursor && cursor.nodeType === 3) { | ||
| const textNode = cursor; | ||
| cursor = cursor.nextSibling; | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node in empty <${ssrEl.tagName.toLowerCase()}> \u2014 IR may not cover this component`); | ||
| const textNode = document.createTextNode(""); | ||
| ssrEl.appendChild(textNode); | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } | ||
| } else if (typeof child === "string" || typeof child === "number") { | ||
| if (cursor && cursor.nodeType === 3) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function hydrateIsland(component, target) { | ||
| const hasSSRContent = target.childElementCount > 0 || target.childNodes.length > 0 && Array.from(target.childNodes).some((n) => n.nodeType === 1 || n.nodeType === 3 && n.data.trim()); | ||
| if (!hasSSRContent) { | ||
| if (__DEV__) { | ||
| const name = target.getAttribute("data-forma-component") || "unknown"; | ||
| console.warn( | ||
| `[forma] Island "${name}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.` | ||
| ); | ||
| } | ||
| const result = component(); | ||
| if (result instanceof Element) { | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (attr.name.startsWith("data-forma-")) { | ||
| result.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| target.replaceWith(result); | ||
| return result; | ||
| } else if (result instanceof Node) { | ||
| target.appendChild(result); | ||
| } | ||
| return target; | ||
| } | ||
| setHydrating(true); | ||
| let descriptor; | ||
| try { | ||
| descriptor = component(); | ||
| } finally { | ||
| setHydrating(false); | ||
| } | ||
| if (!descriptor || !isDescriptor(descriptor)) { | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| if (target.hasAttribute("data-forma-island")) { | ||
| adoptNode(descriptor, target); | ||
| } else { | ||
| adoptNode(descriptor, target.children[0]); | ||
| } | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| // src/dom/list.ts | ||
| function longestIncreasingSubsequence(arr) { | ||
| const n = arr.length; | ||
| if (n === 0) return []; | ||
| const tails = new Int32Array(n); | ||
| const tailIndices = new Int32Array(n); | ||
| const predecessor = new Int32Array(n).fill(-1); | ||
| let tailsLen = 0; | ||
| for (let i = 0; i < n; i++) { | ||
| const val = arr[i]; | ||
| let lo = 0, hi = tailsLen; | ||
| while (lo < hi) { | ||
| const mid = lo + hi >> 1; | ||
| if (tails[mid] < val) lo = mid + 1; | ||
| else hi = mid; | ||
| } | ||
| tails[lo] = val; | ||
| tailIndices[lo] = i; | ||
| if (lo > 0) predecessor[i] = tailIndices[lo - 1]; | ||
| if (lo >= tailsLen) tailsLen++; | ||
| } | ||
| const result = new Array(tailsLen); | ||
| let idx = tailIndices[tailsLen - 1]; | ||
| for (let i = tailsLen - 1; i >= 0; i--) { | ||
| result[i] = idx; | ||
| idx = predecessor[idx]; | ||
| } | ||
| return result; | ||
| } | ||
| var SMALL_LIST_THRESHOLD = 32; | ||
| var ABORT_SYM3 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var CACHE_SYM2 = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM2 = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function canPatchStaticElement(target, source) { | ||
| return target instanceof HTMLElement && source instanceof HTMLElement && target.tagName === source.tagName && !target[ABORT_SYM3] && !target[CACHE_SYM2] && !target[DYNAMIC_CHILD_SYM2] && !source[ABORT_SYM3] && !source[CACHE_SYM2] && !source[DYNAMIC_CHILD_SYM2]; | ||
| } | ||
| function patchStaticElement(target, source) { | ||
| const sourceAttrNames = /* @__PURE__ */ new Set(); | ||
| for (const attr of Array.from(source.attributes)) { | ||
| sourceAttrNames.add(attr.name); | ||
| if (target.getAttribute(attr.name) !== attr.value) { | ||
| target.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (!sourceAttrNames.has(attr.name)) { | ||
| target.removeAttribute(attr.name); | ||
| } | ||
| } | ||
| target.replaceChildren(...Array.from(source.childNodes)); | ||
| } | ||
| function reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| const oldKeys = new Array(oldLen); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeys[i] = keyFn(oldItems[i]); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| let found = -1; | ||
| for (let j = 0; j < oldLen; j++) { | ||
| if (!oldUsed[j] && oldKeys[j] === key) { | ||
| found = j; | ||
| oldUsed[j] = 1; | ||
| break; | ||
| } | ||
| } | ||
| oldIndices[i] = found; | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function reconcileList(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| if (newLen === 0) { | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| return { nodes: [], items: [] }; | ||
| } | ||
| if (oldLen === 0) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = createFn(newItems[i]); | ||
| if (beforeNode) { | ||
| parent.insertBefore(node, beforeNode); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| hooks?.onInsert?.(node); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| if (oldLen < SMALL_LIST_THRESHOLD) { | ||
| return reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks); | ||
| } | ||
| const oldKeyMap = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeyMap.set(keyFn(oldItems[i]), i); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| const oldIdx = oldKeyMap.get(key); | ||
| if (oldIdx !== void 0) { | ||
| oldIndices[i] = oldIdx; | ||
| oldUsed[oldIdx] = 1; | ||
| } else { | ||
| oldIndices[i] = -1; | ||
| } | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function createList(items, keyFn, renderFn, options) { | ||
| if (hydrating) { | ||
| return { type: "list", items, keyFn, renderFn, options }; | ||
| } | ||
| const startMarker = document.createComment("forma-list-start"); | ||
| const endMarker = document.createComment("forma-list-end"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| let currentNodes = []; | ||
| let currentItems = []; | ||
| const updateOnItemChange = options?.updateOnItemChange ?? "none"; | ||
| internalEffect(() => { | ||
| const newItems = items(); | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| return; | ||
| } | ||
| if (!Array.isArray(newItems)) { | ||
| if (__DEV__) { | ||
| console.warn("[forma] createList: value is not an array, treating as empty"); | ||
| } | ||
| for (const node of currentNodes) { | ||
| if (node.parentNode === parent) parent.removeChild(node); | ||
| } | ||
| cache = /* @__PURE__ */ new Map(); | ||
| currentNodes = []; | ||
| currentItems = []; | ||
| return; | ||
| } | ||
| let cleanItems = newItems; | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| if (newItems[i] == null) { | ||
| cleanItems = newItems.filter((item) => item != null); | ||
| break; | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| const seen = /* @__PURE__ */ new Set(); | ||
| for (const item of cleanItems) { | ||
| const key = keyFn(item); | ||
| if (seen.has(key)) { | ||
| console.warn("[forma] createList: duplicate key detected:", key); | ||
| } | ||
| seen.add(key); | ||
| } | ||
| } | ||
| const updateRow = updateOnItemChange === "rerender" ? (node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (!cached) return; | ||
| if (cached.item === item) return; | ||
| cached.item = item; | ||
| if (!(node instanceof HTMLElement)) return; | ||
| if (node[ABORT_SYM3] || node[CACHE_SYM2] || node[DYNAMIC_CHILD_SYM2]) { | ||
| return; | ||
| } | ||
| const next = untrack(() => renderFn(item, cached.getIndex)); | ||
| if (canPatchStaticElement(node, next)) { | ||
| patchStaticElement(node, next); | ||
| cached.element = node; | ||
| } | ||
| } : (_node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }; | ||
| const result = reconcileList( | ||
| parent, | ||
| currentItems, | ||
| cleanItems, | ||
| currentNodes, | ||
| keyFn, | ||
| // createFn: create element + cache entry | ||
| (item) => { | ||
| const key = keyFn(item); | ||
| const [getIndex, setIndex] = createSignal(0); | ||
| const element = untrack(() => renderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| }, | ||
| updateRow, | ||
| // beforeNode: insert items before the end marker | ||
| endMarker | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < cleanItems.length; i++) { | ||
| const key = keyFn(cleanItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| currentNodes = result.nodes; | ||
| currentItems = result.items; | ||
| }); | ||
| return fragment2; | ||
| } | ||
| export { Fragment, __DEV__, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, h, hydrateIsland, internalEffect, on, onCleanup, onError, popSuspenseContext, pushSuspenseContext, reconcileList, reportError, untrack }; | ||
| //# sourceMappingURL=chunk-CN56FSDT.js.map | ||
| //# sourceMappingURL=chunk-CN56FSDT.js.map |
Sorry, the diff of this file is too big to display
| 'use strict'; | ||
| var chunk3U57L2TY_cjs = require('./chunk-3U57L2TY.cjs'); | ||
| var alienSignals = require('alien-signals'); | ||
| var currentRoot = null; | ||
| var rootStack = []; | ||
| function createRoot(fn) { | ||
| const scope = { disposers: [], scopeDispose: null }; | ||
| rootStack.push(currentRoot); | ||
| currentRoot = scope; | ||
| const dispose = () => { | ||
| if (scope.scopeDispose) { | ||
| try { | ||
| scope.scopeDispose(); | ||
| } catch { | ||
| } | ||
| scope.scopeDispose = null; | ||
| } | ||
| for (const d of scope.disposers) { | ||
| try { | ||
| d(); | ||
| } catch { | ||
| } | ||
| } | ||
| scope.disposers.length = 0; | ||
| }; | ||
| let result; | ||
| try { | ||
| scope.scopeDispose = alienSignals.effectScope(() => { | ||
| result = fn(dispose); | ||
| }); | ||
| } finally { | ||
| currentRoot = rootStack.pop() ?? null; | ||
| } | ||
| return result; | ||
| } | ||
| function registerDisposer(dispose) { | ||
| if (currentRoot) { | ||
| currentRoot.disposers.push(dispose); | ||
| } | ||
| } | ||
| function hasActiveRoot() { | ||
| return currentRoot !== null; | ||
| } | ||
| // src/reactive/cleanup.ts | ||
| var currentCleanupCollector = null; | ||
| function onCleanup(fn) { | ||
| currentCleanupCollector?.(fn); | ||
| } | ||
| function setCleanupCollector(collector) { | ||
| const prev = currentCleanupCollector; | ||
| currentCleanupCollector = collector; | ||
| return prev; | ||
| } | ||
| // src/reactive/dev.ts | ||
| var __DEV__ = typeof process !== "undefined" ? process.env?.NODE_ENV !== "production" : true; | ||
| var _errorHandler = null; | ||
| function onError(handler) { | ||
| _errorHandler = handler; | ||
| } | ||
| function reportError(error, source) { | ||
| if (_errorHandler) { | ||
| try { | ||
| _errorHandler(error, source ? { source } : {}); | ||
| } catch { | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| console.error(`[forma] ${source ?? "Unknown"} error:`, error); | ||
| } | ||
| } | ||
| var POOL_SIZE = 32; | ||
| var MAX_REENTRANT_RUNS = 100; | ||
| var pool = []; | ||
| for (let i = 0; i < POOL_SIZE; i++) pool.push([]); | ||
| var poolIdx = POOL_SIZE; | ||
| function acquireArray() { | ||
| if (poolIdx > 0) { | ||
| const arr = pool[--poolIdx]; | ||
| arr.length = 0; | ||
| return arr; | ||
| } | ||
| return []; | ||
| } | ||
| function releaseArray(arr) { | ||
| arr.length = 0; | ||
| if (poolIdx < POOL_SIZE) { | ||
| pool[poolIdx++] = arr; | ||
| } | ||
| } | ||
| function runCleanup(fn) { | ||
| if (fn === void 0) return; | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| function runCleanups(bag) { | ||
| if (bag === void 0) return; | ||
| for (let i = 0; i < bag.length; i++) { | ||
| try { | ||
| bag[i](); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| } | ||
| function internalEffect(fn) { | ||
| const dispose = alienSignals.effect(fn); | ||
| if (hasActiveRoot()) { | ||
| registerDisposer(dispose); | ||
| } | ||
| return dispose; | ||
| } | ||
| function createEffect(fn) { | ||
| const shouldRegister = hasActiveRoot(); | ||
| let cleanup2; | ||
| let cleanupBag; | ||
| let nextCleanup; | ||
| let nextCleanupBag; | ||
| const addCleanup = (cb) => { | ||
| if (nextCleanupBag !== void 0) { | ||
| nextCleanupBag.push(cb); | ||
| return; | ||
| } | ||
| if (nextCleanup !== void 0) { | ||
| const bag = acquireArray(); | ||
| bag.push(nextCleanup, cb); | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = bag; | ||
| return; | ||
| } | ||
| nextCleanup = cb; | ||
| }; | ||
| let skipCleanupInfra = false; | ||
| let firstRun = true; | ||
| let running = false; | ||
| let rerunRequested = false; | ||
| const runOnce = () => { | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| if (skipCleanupInfra) { | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| } | ||
| return; | ||
| } | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = void 0; | ||
| const prevCollector = setCleanupCollector(addCleanup); | ||
| try { | ||
| const result = fn(); | ||
| if (typeof result === "function") { | ||
| addCleanup(result); | ||
| } | ||
| if (nextCleanup === void 0 && nextCleanupBag === void 0) { | ||
| if (firstRun) skipCleanupInfra = true; | ||
| return; | ||
| } | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } finally { | ||
| setCleanupCollector(prevCollector); | ||
| firstRun = false; | ||
| } | ||
| }; | ||
| const safeFn = () => { | ||
| if (running) { | ||
| rerunRequested = true; | ||
| return; | ||
| } | ||
| running = true; | ||
| try { | ||
| let reentrantRuns = 0; | ||
| do { | ||
| rerunRequested = false; | ||
| runOnce(); | ||
| if (rerunRequested) { | ||
| reentrantRuns++; | ||
| if (reentrantRuns >= MAX_REENTRANT_RUNS) { | ||
| reportError( | ||
| new Error(`createEffect exceeded ${MAX_REENTRANT_RUNS} re-entrant runs`), | ||
| "effect" | ||
| ); | ||
| rerunRequested = false; | ||
| } | ||
| } | ||
| } while (rerunRequested); | ||
| } finally { | ||
| running = false; | ||
| } | ||
| }; | ||
| const dispose = alienSignals.effect(safeFn); | ||
| let disposed = false; | ||
| const wrappedDispose = () => { | ||
| if (disposed) return; | ||
| disposed = true; | ||
| dispose(); | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| }; | ||
| if (shouldRegister) { | ||
| registerDisposer(wrappedDispose); | ||
| } | ||
| return wrappedDispose; | ||
| } | ||
| // src/reactive/memo.ts | ||
| var createMemo = chunk3U57L2TY_cjs.createComputed; | ||
| function batch(fn) { | ||
| alienSignals.startBatch(); | ||
| try { | ||
| fn(); | ||
| } finally { | ||
| alienSignals.endBatch(); | ||
| } | ||
| } | ||
| function untrack(fn) { | ||
| const prev = alienSignals.setActiveSub(void 0); | ||
| try { | ||
| return fn(); | ||
| } finally { | ||
| alienSignals.setActiveSub(prev); | ||
| } | ||
| } | ||
| // src/reactive/on.ts | ||
| function on(deps, fn, options) { | ||
| let prev; | ||
| let isFirst = true; | ||
| return () => { | ||
| const value2 = deps(); | ||
| if (options?.defer && isFirst) { | ||
| isFirst = false; | ||
| prev = value2; | ||
| return void 0; | ||
| } | ||
| const result = untrack(() => fn(value2, prev)); | ||
| prev = value2; | ||
| return result; | ||
| }; | ||
| } | ||
| // src/reactive/ref.ts | ||
| function createRef(initialValue) { | ||
| return { current: initialValue }; | ||
| } | ||
| // src/reactive/reducer.ts | ||
| function createReducer(reducer, initialState) { | ||
| const [state, setState] = chunk3U57L2TY_cjs.createSignal(initialState); | ||
| const dispatch = (action) => { | ||
| setState((prev) => reducer(prev, action)); | ||
| }; | ||
| return [state, dispatch]; | ||
| } | ||
| // src/reactive/suspense-context.ts | ||
| var currentSuspenseContext = null; | ||
| var suspenseStack = []; | ||
| function pushSuspenseContext(ctx) { | ||
| suspenseStack.push(currentSuspenseContext); | ||
| currentSuspenseContext = ctx; | ||
| } | ||
| function popSuspenseContext() { | ||
| currentSuspenseContext = suspenseStack.pop() ?? null; | ||
| } | ||
| function getSuspenseContext() { | ||
| return currentSuspenseContext; | ||
| } | ||
| // src/reactive/resource.ts | ||
| function createResource(source, fetcher, options) { | ||
| const [data, setData] = chunk3U57L2TY_cjs.createSignal(options?.initialValue); | ||
| const [loading, setLoading] = chunk3U57L2TY_cjs.createSignal(false); | ||
| const [error, setError] = chunk3U57L2TY_cjs.createSignal(void 0); | ||
| const suspenseCtx = getSuspenseContext(); | ||
| let abortController = null; | ||
| let fetchVersion = 0; | ||
| const doFetch = () => { | ||
| const sourceValue = untrack(source); | ||
| if (abortController) { | ||
| abortController.abort(); | ||
| } | ||
| const controller = new AbortController(); | ||
| abortController = controller; | ||
| const version = ++fetchVersion; | ||
| const isLatest = () => version === fetchVersion; | ||
| let suspensePending = false; | ||
| if (suspenseCtx) { | ||
| suspenseCtx.increment(); | ||
| suspensePending = true; | ||
| } | ||
| setLoading(true); | ||
| setError(void 0); | ||
| Promise.resolve(fetcher(sourceValue)).then((result) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| setData(() => result); | ||
| } | ||
| }).catch((err) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| if (err?.name !== "AbortError") { | ||
| setError(err); | ||
| } | ||
| } | ||
| }).finally(() => { | ||
| if (suspensePending) suspenseCtx?.decrement(); | ||
| if (isLatest()) { | ||
| setLoading(false); | ||
| if (abortController === controller) { | ||
| abortController = null; | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| internalEffect(() => { | ||
| source(); | ||
| doFetch(); | ||
| }); | ||
| const resource = (() => data()); | ||
| resource.loading = loading; | ||
| resource.error = error; | ||
| resource.refetch = doFetch; | ||
| resource.mutate = (value2) => setData(() => value2); | ||
| return resource; | ||
| } | ||
| // src/dom/element.ts | ||
| var Fragment = /* @__PURE__ */ Symbol.for("forma.fragment"); | ||
| var SVG_NS = "http://www.w3.org/2000/svg"; | ||
| var XLINK_NS = "http://www.w3.org/1999/xlink"; | ||
| var SVG_TAGS = /* @__PURE__ */ new Set([ | ||
| "svg", | ||
| "path", | ||
| "circle", | ||
| "rect", | ||
| "line", | ||
| "polyline", | ||
| "polygon", | ||
| "ellipse", | ||
| "g", | ||
| "text", | ||
| "tspan", | ||
| "textPath", | ||
| "defs", | ||
| "use", | ||
| "symbol", | ||
| "clipPath", | ||
| "mask", | ||
| "pattern", | ||
| "marker", | ||
| "linearGradient", | ||
| "radialGradient", | ||
| "stop", | ||
| "filter", | ||
| "feGaussianBlur", | ||
| "feColorMatrix", | ||
| "feOffset", | ||
| "feBlend", | ||
| "feMerge", | ||
| "feMergeNode", | ||
| "feComposite", | ||
| "feFlood", | ||
| "feMorphology", | ||
| "feTurbulence", | ||
| "feDisplacementMap", | ||
| "feImage", | ||
| "foreignObject", | ||
| "animate", | ||
| "animateTransform", | ||
| "animateMotion", | ||
| "set", | ||
| "image", | ||
| "switch", | ||
| "desc", | ||
| "title", | ||
| "metadata" | ||
| ]); | ||
| var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([ | ||
| "disabled", | ||
| "checked", | ||
| "readonly", | ||
| "required", | ||
| "autofocus", | ||
| "autoplay", | ||
| "controls", | ||
| "default", | ||
| "defer", | ||
| "formnovalidate", | ||
| "hidden", | ||
| "ismap", | ||
| "loop", | ||
| "multiple", | ||
| "muted", | ||
| "nomodule", | ||
| "novalidate", | ||
| "open", | ||
| "playsinline", | ||
| "reversed", | ||
| "selected", | ||
| "async" | ||
| ]); | ||
| var ELEMENT_PROTOS = null; | ||
| function getProto(tag) { | ||
| if (!ELEMENT_PROTOS) { | ||
| ELEMENT_PROTOS = /* @__PURE__ */ Object.create(null); | ||
| for (const t of [ | ||
| "div", | ||
| "span", | ||
| "p", | ||
| "a", | ||
| "li", | ||
| "ul", | ||
| "ol", | ||
| "button", | ||
| "input", | ||
| "label", | ||
| "h1", | ||
| "h2", | ||
| "h3", | ||
| "h4", | ||
| "h5", | ||
| "h6", | ||
| "section", | ||
| "header", | ||
| "footer", | ||
| "main", | ||
| "nav", | ||
| "table", | ||
| "tr", | ||
| "td", | ||
| "th", | ||
| "tbody", | ||
| "img", | ||
| "form", | ||
| "select", | ||
| "option", | ||
| "textarea", | ||
| "i", | ||
| "b", | ||
| "strong", | ||
| "em", | ||
| "small", | ||
| "article", | ||
| "aside", | ||
| "details", | ||
| "summary" | ||
| ]) { | ||
| ELEMENT_PROTOS[t] = document.createElement(t); | ||
| } | ||
| } | ||
| return ELEMENT_PROTOS[tag] ?? (ELEMENT_PROTOS[tag] = document.createElement(tag)); | ||
| } | ||
| var EVENT_NAMES = /* @__PURE__ */ Object.create(null); | ||
| function eventName(key) { | ||
| return EVENT_NAMES[key] ?? (EVENT_NAMES[key] = key.slice(2).toLowerCase()); | ||
| } | ||
| var ABORT_SYM = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| function getAbortController(el) { | ||
| let controller = el[ABORT_SYM]; | ||
| if (!controller) { | ||
| controller = new AbortController(); | ||
| el[ABORT_SYM] = controller; | ||
| } | ||
| return controller; | ||
| } | ||
| function cleanup(el) { | ||
| const controller = el[ABORT_SYM]; | ||
| if (controller) { | ||
| controller.abort(); | ||
| delete el[ABORT_SYM]; | ||
| } | ||
| } | ||
| var CACHE_SYM = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function getCache(el) { | ||
| return el[CACHE_SYM] ?? (el[CACHE_SYM] = /* @__PURE__ */ Object.create(null)); | ||
| } | ||
| function handleClass(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache["class"] === v) return; | ||
| cache["class"] = v; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = v; | ||
| } else { | ||
| el.setAttribute("class", v); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache["class"] === value2) return; | ||
| cache["class"] = value2; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = value2; | ||
| } else { | ||
| el.setAttribute("class", value2); | ||
| } | ||
| } | ||
| } | ||
| function handleStyle(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| let prevKeys = []; | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (typeof v === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === v) return; | ||
| cache["style"] = v; | ||
| prevKeys = []; | ||
| el.style.cssText = v; | ||
| } else if (v && typeof v === "object") { | ||
| const style = el.style; | ||
| const nextKeys = Object.keys(v); | ||
| for (const k of prevKeys) { | ||
| if (!(k in v)) { | ||
| style.removeProperty(k.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase())); | ||
| } | ||
| } | ||
| Object.assign(style, v); | ||
| prevKeys = nextKeys; | ||
| } | ||
| }); | ||
| } else if (typeof value2 === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === value2) return; | ||
| cache["style"] = value2; | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| } | ||
| function handleEvent(el, key, value2) { | ||
| const controller = getAbortController(el); | ||
| el.addEventListener( | ||
| eventName(key), | ||
| value2, | ||
| { signal: controller.signal } | ||
| ); | ||
| } | ||
| function handleInnerHTML(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const resolved = value2(); | ||
| if (resolved == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof resolved !== "object" || !("__html" in resolved)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof resolved | ||
| ); | ||
| } | ||
| const html = resolved.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| const cache = getCache(el); | ||
| if (cache["innerHTML"] === html) return; | ||
| cache["innerHTML"] = html; | ||
| el.innerHTML = html; | ||
| }); | ||
| } else { | ||
| if (value2 == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| } | ||
| } | ||
| function handleXLink(el, key, value2) { | ||
| const localName = key.slice(6); | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(v)); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| } | ||
| } | ||
| } | ||
| function handleBooleanAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache[key] === v) return; | ||
| cache[key] = v; | ||
| if (v) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache[key] === value2) return; | ||
| cache[key] = value2; | ||
| if (value2) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| } | ||
| } | ||
| function handleGenericAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(v); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(value2); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| } | ||
| } | ||
| var PROP_HANDLERS = /* @__PURE__ */ new Map(); | ||
| PROP_HANDLERS.set("class", handleClass); | ||
| PROP_HANDLERS.set("className", handleClass); | ||
| PROP_HANDLERS.set("style", handleStyle); | ||
| PROP_HANDLERS.set("ref", () => { | ||
| }); | ||
| PROP_HANDLERS.set("dangerouslySetInnerHTML", handleInnerHTML); | ||
| for (const attr of BOOLEAN_ATTRS) { | ||
| PROP_HANDLERS.set(attr, handleBooleanAttr); | ||
| } | ||
| function applyProp(el, key, value2) { | ||
| if (key === "class") { | ||
| handleClass(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| return; | ||
| } | ||
| const handler = PROP_HANDLERS.get(key); | ||
| if (handler) { | ||
| handler(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| handleXLink(el, key, value2); | ||
| return; | ||
| } | ||
| handleGenericAttr(el, key, value2); | ||
| } | ||
| function applyStaticProp(el, key, value2) { | ||
| if (value2 == null || value2 === false) return; | ||
| if (key === "class" || key === "className") { | ||
| el.className = value2; | ||
| return; | ||
| } | ||
| if (key === "style") { | ||
| if (typeof value2 === "string") { | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| return; | ||
| } | ||
| if (key === "dangerouslySetInnerHTML") { | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| return; | ||
| } | ||
| if (BOOLEAN_ATTRS.has(key)) { | ||
| if (value2) el.setAttribute(key, ""); | ||
| return; | ||
| } | ||
| if (value2 === true) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.setAttribute(key, String(value2)); | ||
| } | ||
| } | ||
| function appendChild(parent, child) { | ||
| if (child instanceof Node) { | ||
| parent.appendChild(child); | ||
| return; | ||
| } | ||
| if (typeof child === "string") { | ||
| parent.appendChild(new Text(child)); | ||
| return; | ||
| } | ||
| if (child == null || child === false || child === true) { | ||
| return; | ||
| } | ||
| if (typeof child === "number") { | ||
| parent.appendChild(new Text(String(child))); | ||
| return; | ||
| } | ||
| if (typeof child === "function") { | ||
| if (parent instanceof Element) { | ||
| parent[DYNAMIC_CHILD_SYM] = true; | ||
| } | ||
| let currentNode = null; | ||
| internalEffect(() => { | ||
| const v = child(); | ||
| if (v instanceof Node) { | ||
| if (currentNode) { | ||
| parent.replaceChild(v, currentNode); | ||
| } else { | ||
| parent.appendChild(v); | ||
| } | ||
| currentNode = v; | ||
| } else { | ||
| const text = typeof v === "symbol" ? String(v) : String(v ?? ""); | ||
| if (!currentNode) { | ||
| currentNode = new Text(text); | ||
| parent.appendChild(currentNode); | ||
| } else if (currentNode.nodeType === 3) { | ||
| currentNode.data = text; | ||
| } else { | ||
| const tn = new Text(text); | ||
| parent.replaceChild(tn, currentNode); | ||
| currentNode = tn; | ||
| } | ||
| } | ||
| }); | ||
| return; | ||
| } | ||
| if (Array.isArray(child)) { | ||
| for (const item of child) { | ||
| appendChild(parent, item); | ||
| } | ||
| return; | ||
| } | ||
| } | ||
| function h(tag, props, ...children) { | ||
| if (typeof tag === "function" && tag !== Fragment) { | ||
| const mergedProps = { ...props ?? {}, children }; | ||
| return tag(mergedProps); | ||
| } | ||
| if (tag === Fragment) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| const tagName = tag; | ||
| if (hydrating) { | ||
| return { type: "element", tag: tagName, props: props ?? null, children }; | ||
| } | ||
| let el; | ||
| if (ELEMENT_PROTOS && ELEMENT_PROTOS[tagName]) { | ||
| el = ELEMENT_PROTOS[tagName].cloneNode(false); | ||
| } else if (SVG_TAGS.has(tagName)) { | ||
| el = document.createElementNS(SVG_NS, tagName); | ||
| } else { | ||
| el = getProto(tagName).cloneNode(false); | ||
| } | ||
| if (props) { | ||
| let hasDynamic = false; | ||
| for (const key in props) { | ||
| if (key === "ref") continue; | ||
| const value2 = props[key]; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| continue; | ||
| } | ||
| if (typeof value2 === "function") { | ||
| if (!hasDynamic) { | ||
| el[CACHE_SYM] = /* @__PURE__ */ Object.create(null); | ||
| hasDynamic = true; | ||
| } | ||
| applyProp(el, key, value2); | ||
| continue; | ||
| } | ||
| applyStaticProp(el, key, value2); | ||
| } | ||
| } | ||
| const childLen = children.length; | ||
| if (childLen === 1) { | ||
| const only = children[0]; | ||
| if (typeof only === "string") { | ||
| el.textContent = only; | ||
| } else if (typeof only === "number") { | ||
| el.textContent = String(only); | ||
| } else { | ||
| appendChild(el, only); | ||
| } | ||
| } else if (childLen > 1) { | ||
| for (const child of children) { | ||
| appendChild(el, child); | ||
| } | ||
| } | ||
| if (props && typeof props["ref"] === "function") { | ||
| props["ref"](el); | ||
| } | ||
| return el; | ||
| } | ||
| function fragment(...children) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| // src/dom/show.ts | ||
| function createShow(when, thenFn, elseFn) { | ||
| if (hydrating) { | ||
| const branch = when() ? thenFn() : elseFn?.() ?? null; | ||
| return { | ||
| type: "show", | ||
| condition: when, | ||
| whenTrue: thenFn, | ||
| whenFalse: elseFn, | ||
| initialBranch: branch | ||
| }; | ||
| } | ||
| const startMarker = document.createComment("forma-show"); | ||
| const endMarker = document.createComment("/forma-show"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let currentNode = null; | ||
| let lastTruthy = null; | ||
| let currentDispose = null; | ||
| const showDispose = internalEffect(() => { | ||
| const truthy = !!when(); | ||
| const DEBUG = typeof globalThis.__FORMA_DEBUG__ !== "undefined"; | ||
| const DEBUG_LABEL = DEBUG ? thenFn.toString().slice(0, 60) : ""; | ||
| if (truthy === lastTruthy) { | ||
| if (DEBUG) console.log("[forma:show] skip (same)", truthy, DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show]", lastTruthy, "\u2192", truthy, DEBUG_LABEL); | ||
| lastTruthy = truthy; | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| if (DEBUG) console.warn("[forma:show] parentNode is null! skipping.", DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show] parent:", parent.nodeName, "inDoc:", document.contains(parent)); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| if (currentNode) { | ||
| if (currentNode.parentNode === parent) { | ||
| parent.removeChild(currentNode); | ||
| } else { | ||
| while (startMarker.nextSibling && startMarker.nextSibling !== endMarker) { | ||
| parent.removeChild(startMarker.nextSibling); | ||
| } | ||
| } | ||
| } | ||
| const branchFn = truthy ? thenFn : elseFn; | ||
| if (branchFn) { | ||
| let branchDispose; | ||
| currentNode = createRoot((dispose) => { | ||
| branchDispose = dispose; | ||
| return untrack(() => branchFn()); | ||
| }); | ||
| currentDispose = branchDispose; | ||
| } else { | ||
| currentNode = null; | ||
| } | ||
| if (currentNode) { | ||
| parent.insertBefore(currentNode, endMarker); | ||
| } | ||
| }); | ||
| fragment2.__showDispose = () => { | ||
| showDispose(); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| }; | ||
| return fragment2; | ||
| } | ||
| // src/dom/hydrate.ts | ||
| var ABORT_SYM2 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var hydrating = false; | ||
| function setHydrating(value2) { | ||
| hydrating = value2; | ||
| } | ||
| function isDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "element"; | ||
| } | ||
| function isShowDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "show"; | ||
| } | ||
| function isListDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "list"; | ||
| } | ||
| function applyDynamicProps(el, props) { | ||
| if (!props) return; | ||
| for (const key in props) { | ||
| const value2 = props[key]; | ||
| if (typeof value2 !== "function") continue; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| let ac = el[ABORT_SYM2]; | ||
| if (!ac) { | ||
| ac = new AbortController(); | ||
| el[ABORT_SYM2] = ac; | ||
| } | ||
| el.addEventListener(key.slice(2).toLowerCase(), value2, { signal: ac.signal }); | ||
| continue; | ||
| } | ||
| const fn = value2; | ||
| const attrKey = key; | ||
| internalEffect(() => { | ||
| const v = fn(); | ||
| if (v === false || v == null) { | ||
| el.removeAttribute(attrKey); | ||
| } else if (v === true) { | ||
| el.setAttribute(attrKey, ""); | ||
| } else { | ||
| el.setAttribute(attrKey, String(v)); | ||
| } | ||
| }); | ||
| } | ||
| } | ||
| function ensureNode(value2) { | ||
| if (value2 instanceof Node) return value2; | ||
| if (value2 == null || value2 === false || value2 === true) return null; | ||
| if (typeof value2 === "string") return new Text(value2); | ||
| if (typeof value2 === "number") return new Text(String(value2)); | ||
| if (isDescriptor(value2)) return descriptorToElement(value2); | ||
| if (isShowDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createShow( | ||
| value2.condition, | ||
| () => ensureNode(value2.whenTrue()) ?? document.createComment("empty"), | ||
| value2.whenFalse ? () => ensureNode(value2.whenFalse()) ?? document.createComment("empty") : void 0 | ||
| ); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| if (isListDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createList(value2.items, value2.keyFn, value2.renderFn, value2.options); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| function descriptorToElement(desc) { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const children = desc.children.map((child) => { | ||
| if (isDescriptor(child)) return descriptorToElement(child); | ||
| if (isShowDescriptor(child)) return ensureNode(child); | ||
| if (isListDescriptor(child)) return ensureNode(child); | ||
| return child; | ||
| }); | ||
| return h(desc.tag, desc.props, ...children); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| function isIslandStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 105; | ||
| } | ||
| function isShowStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 115; | ||
| } | ||
| function isTextStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 116; | ||
| } | ||
| function isListStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 108; | ||
| } | ||
| function findClosingMarker(start) { | ||
| const closing = "/" + start.data; | ||
| let node = start.nextSibling; | ||
| while (node) { | ||
| if (node.nodeType === 8 && node.data === closing) { | ||
| return node; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function findTextBetween(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 3) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function nextElementBetweenMarkers(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return void 0; | ||
| } | ||
| function extractContentBetweenMarkers(start, end) { | ||
| const frag = document.createDocumentFragment(); | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| const next = node.nextSibling; | ||
| frag.appendChild(node); | ||
| node = next; | ||
| } | ||
| return frag; | ||
| } | ||
| function setupShowEffect(desc, marker) { | ||
| let currentCondition = !!desc.condition(); | ||
| let thenFragment = null; | ||
| let elseFragment = null; | ||
| const hasSSRContent = marker.start.nextSibling !== marker.end; | ||
| if (!hasSSRContent && currentCondition) { | ||
| if (__DEV__) console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true"); | ||
| const trueBranch = desc.whenTrue(); | ||
| if (trueBranch instanceof Node) { | ||
| marker.start.parentNode.insertBefore(trueBranch, marker.end); | ||
| } | ||
| } | ||
| internalEffect(() => { | ||
| const next = !!desc.condition(); | ||
| if (next === currentCondition) return; | ||
| currentCondition = next; | ||
| const parent = marker.start.parentNode; | ||
| if (!parent) return; | ||
| const current = extractContentBetweenMarkers(marker.start, marker.end); | ||
| if (!next) { | ||
| thenFragment = current; | ||
| } else { | ||
| elseFragment = current; | ||
| } | ||
| let branch = next ? thenFragment ?? desc.whenTrue() : desc.whenFalse ? elseFragment ?? desc.whenFalse() : null; | ||
| if (next && thenFragment) thenFragment = null; | ||
| if (!next && elseFragment) elseFragment = null; | ||
| if (branch != null && !(branch instanceof Node)) { | ||
| branch = ensureNode(branch); | ||
| } | ||
| if (branch instanceof Node) { | ||
| parent.insertBefore(branch, marker.end); | ||
| } | ||
| }); | ||
| } | ||
| function adoptBranchContent(desc, regionStart, regionEnd) { | ||
| if (isDescriptor(desc)) { | ||
| const el = nextElementBetweenMarkers(regionStart, regionEnd); | ||
| if (el) adoptNode(desc, el); | ||
| } else if (isShowDescriptor(desc)) { | ||
| let node = regionStart.nextSibling; | ||
| while (node && node !== regionEnd) { | ||
| if (node.nodeType === 8 && isShowStart(node.data)) { | ||
| const innerStart = node; | ||
| const innerEnd = findClosingMarker(innerStart); | ||
| if (innerEnd) { | ||
| if (desc.initialBranch) { | ||
| adoptBranchContent(desc.initialBranch, innerStart, innerEnd); | ||
| } | ||
| setupShowEffect(desc, { start: innerStart, end: innerEnd}); | ||
| } | ||
| break; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| function adoptNode(desc, ssrEl) { | ||
| if (!ssrEl || ssrEl.tagName !== desc.tag.toUpperCase()) { | ||
| if (__DEV__) console.warn(`Hydration mismatch: expected <${desc.tag}>, got <${ssrEl?.tagName?.toLowerCase() ?? "nothing"}>`); | ||
| const fresh = descriptorToElement(desc); | ||
| if (ssrEl) ssrEl.replaceWith(fresh); | ||
| return; | ||
| } | ||
| applyDynamicProps(ssrEl, desc.props); | ||
| let cursor = ssrEl.firstChild; | ||
| for (const child of desc.children) { | ||
| if (child === false || child == null) continue; | ||
| if (isDescriptor(child)) { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| while (cursor && cursor.nodeType === 1 && cursor.hasAttribute("data-forma-island")) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (!cursor) { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| continue; | ||
| } | ||
| if (cursor.nodeType === 1) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(child, el); | ||
| } else if (cursor.nodeType === 8 && isIslandStart(cursor.data)) { | ||
| const end = findClosingMarker(cursor); | ||
| const fresh = descriptorToElement(child); | ||
| if (end) { | ||
| end.parentNode.insertBefore(fresh, end); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| ssrEl.appendChild(fresh); | ||
| cursor = null; | ||
| } | ||
| } else { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| } | ||
| } else if (isShowDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isShowStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| if (child.initialBranch) { | ||
| adoptBranchContent(child.initialBranch, start, end); | ||
| } | ||
| setupShowEffect(child, { start, end}); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (isListDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isListStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| const ssrKeyMap = /* @__PURE__ */ new Map(); | ||
| const ssrElements = []; | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) { | ||
| const el = node; | ||
| ssrElements.push(el); | ||
| const key = el.getAttribute("data-forma-key"); | ||
| if (key != null) { | ||
| ssrKeyMap.set(key, el); | ||
| } | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| const currentItems = untrack(() => child.items()); | ||
| const listKeyFn = child.keyFn; | ||
| const listRenderFn = child.renderFn; | ||
| const useIndexFallback = ssrKeyMap.size === 0 && ssrElements.length > 0; | ||
| const adoptedNodes = []; | ||
| const adoptedItems = []; | ||
| const usedIndices = /* @__PURE__ */ new Set(); | ||
| for (let i = 0; i < currentItems.length; i++) { | ||
| const item = currentItems[i]; | ||
| const key = listKeyFn(item); | ||
| let ssrNode; | ||
| if (useIndexFallback) { | ||
| if (i < ssrElements.length) { | ||
| ssrNode = ssrElements[i]; | ||
| usedIndices.add(i); | ||
| } | ||
| } else { | ||
| ssrNode = ssrKeyMap.get(String(key)); | ||
| if (ssrNode) ssrKeyMap.delete(String(key)); | ||
| } | ||
| if (ssrNode) { | ||
| adoptedNodes.push(ssrNode); | ||
| adoptedItems.push(item); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: list item key "${key}" not found in SSR \u2014 rendering fresh`); | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const [getIndex] = chunk3U57L2TY_cjs.createSignal(i); | ||
| const fresh = listRenderFn(item, getIndex); | ||
| end.parentNode.insertBefore(fresh, end); | ||
| adoptedNodes.push(fresh); | ||
| adoptedItems.push(item); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| } | ||
| if (useIndexFallback) { | ||
| for (let i = 0; i < ssrElements.length; i++) { | ||
| if (!usedIndices.has(i) && ssrElements[i].parentNode) { | ||
| ssrElements[i].parentNode.removeChild(ssrElements[i]); | ||
| } | ||
| } | ||
| } else { | ||
| for (const [unusedKey, unusedNode] of ssrKeyMap) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${unusedKey}"`); | ||
| if (unusedNode.parentNode) { | ||
| unusedNode.parentNode.removeChild(unusedNode); | ||
| } | ||
| } | ||
| } | ||
| const parent = start.parentNode; | ||
| for (const adoptedNode of adoptedNodes) { | ||
| parent.insertBefore(adoptedNode, end); | ||
| } | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < adoptedItems.length; i++) { | ||
| const item = adoptedItems[i]; | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(i); | ||
| cache.set(key, { | ||
| element: adoptedNodes[i], | ||
| item, | ||
| getIndex, | ||
| setIndex | ||
| }); | ||
| } | ||
| let reconcileNodes = adoptedNodes.slice(); | ||
| let reconcileItems = adoptedItems.slice(); | ||
| internalEffect(() => { | ||
| const newItems = child.items(); | ||
| const parent2 = start.parentNode; | ||
| if (!parent2) return; | ||
| const result = reconcileList( | ||
| parent2, | ||
| reconcileItems, | ||
| newItems, | ||
| reconcileNodes, | ||
| listKeyFn, | ||
| (item) => { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(0); | ||
| const element = untrack(() => listRenderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| }, | ||
| (_node, item) => { | ||
| const key = listKeyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }, | ||
| end | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| const key = listKeyFn(newItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| reconcileNodes = result.nodes; | ||
| reconcileItems = result.items; | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (typeof child === "function") { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor && cursor.nodeType === 1) { | ||
| const initial = child(); | ||
| if (isDescriptor(initial)) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(initial, el); | ||
| continue; | ||
| } | ||
| } | ||
| if (cursor && cursor.nodeType === 8) { | ||
| const data = cursor.data; | ||
| if (isTextStart(data)) { | ||
| const endMarker = findClosingMarker(cursor); | ||
| let textNode = cursor.nextSibling; | ||
| if (!textNode || textNode.nodeType !== 3) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for marker ${data} \u2014 SSR walker should emit content between markers`); | ||
| const created = document.createTextNode(""); | ||
| cursor.parentNode.insertBefore(created, endMarker || cursor.nextSibling); | ||
| textNode = created; | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = endMarker ? endMarker.nextSibling : textNode.nextSibling; | ||
| } else if (isShowStart(data)) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| let textNode = findTextBetween(start, end); | ||
| if (!textNode) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for show marker ${start.data} \u2014 SSR walker should emit content between markers`); | ||
| textNode = document.createTextNode(""); | ||
| start.parentNode.insertBefore(textNode, end); | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else if (cursor && cursor.nodeType === 3) { | ||
| const textNode = cursor; | ||
| cursor = cursor.nextSibling; | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node in empty <${ssrEl.tagName.toLowerCase()}> \u2014 IR may not cover this component`); | ||
| const textNode = document.createTextNode(""); | ||
| ssrEl.appendChild(textNode); | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } | ||
| } else if (typeof child === "string" || typeof child === "number") { | ||
| if (cursor && cursor.nodeType === 3) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function hydrateIsland(component, target) { | ||
| const hasSSRContent = target.childElementCount > 0 || target.childNodes.length > 0 && Array.from(target.childNodes).some((n) => n.nodeType === 1 || n.nodeType === 3 && n.data.trim()); | ||
| if (!hasSSRContent) { | ||
| if (__DEV__) { | ||
| const name = target.getAttribute("data-forma-component") || "unknown"; | ||
| console.warn( | ||
| `[forma] Island "${name}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.` | ||
| ); | ||
| } | ||
| const result = component(); | ||
| if (result instanceof Element) { | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (attr.name.startsWith("data-forma-")) { | ||
| result.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| target.replaceWith(result); | ||
| return result; | ||
| } else if (result instanceof Node) { | ||
| target.appendChild(result); | ||
| } | ||
| return target; | ||
| } | ||
| setHydrating(true); | ||
| let descriptor; | ||
| try { | ||
| descriptor = component(); | ||
| } finally { | ||
| setHydrating(false); | ||
| } | ||
| if (!descriptor || !isDescriptor(descriptor)) { | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| if (target.hasAttribute("data-forma-island")) { | ||
| adoptNode(descriptor, target); | ||
| } else { | ||
| adoptNode(descriptor, target.children[0]); | ||
| } | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| // src/dom/list.ts | ||
| function longestIncreasingSubsequence(arr) { | ||
| const n = arr.length; | ||
| if (n === 0) return []; | ||
| const tails = new Int32Array(n); | ||
| const tailIndices = new Int32Array(n); | ||
| const predecessor = new Int32Array(n).fill(-1); | ||
| let tailsLen = 0; | ||
| for (let i = 0; i < n; i++) { | ||
| const val = arr[i]; | ||
| let lo = 0, hi = tailsLen; | ||
| while (lo < hi) { | ||
| const mid = lo + hi >> 1; | ||
| if (tails[mid] < val) lo = mid + 1; | ||
| else hi = mid; | ||
| } | ||
| tails[lo] = val; | ||
| tailIndices[lo] = i; | ||
| if (lo > 0) predecessor[i] = tailIndices[lo - 1]; | ||
| if (lo >= tailsLen) tailsLen++; | ||
| } | ||
| const result = new Array(tailsLen); | ||
| let idx = tailIndices[tailsLen - 1]; | ||
| for (let i = tailsLen - 1; i >= 0; i--) { | ||
| result[i] = idx; | ||
| idx = predecessor[idx]; | ||
| } | ||
| return result; | ||
| } | ||
| var SMALL_LIST_THRESHOLD = 32; | ||
| var ABORT_SYM3 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var CACHE_SYM2 = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM2 = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function canPatchStaticElement(target, source) { | ||
| return target instanceof HTMLElement && source instanceof HTMLElement && target.tagName === source.tagName && !target[ABORT_SYM3] && !target[CACHE_SYM2] && !target[DYNAMIC_CHILD_SYM2] && !source[ABORT_SYM3] && !source[CACHE_SYM2] && !source[DYNAMIC_CHILD_SYM2]; | ||
| } | ||
| function patchStaticElement(target, source) { | ||
| const sourceAttrNames = /* @__PURE__ */ new Set(); | ||
| for (const attr of Array.from(source.attributes)) { | ||
| sourceAttrNames.add(attr.name); | ||
| if (target.getAttribute(attr.name) !== attr.value) { | ||
| target.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (!sourceAttrNames.has(attr.name)) { | ||
| target.removeAttribute(attr.name); | ||
| } | ||
| } | ||
| target.replaceChildren(...Array.from(source.childNodes)); | ||
| } | ||
| function reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| const oldKeys = new Array(oldLen); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeys[i] = keyFn(oldItems[i]); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| let found = -1; | ||
| for (let j = 0; j < oldLen; j++) { | ||
| if (!oldUsed[j] && oldKeys[j] === key) { | ||
| found = j; | ||
| oldUsed[j] = 1; | ||
| break; | ||
| } | ||
| } | ||
| oldIndices[i] = found; | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function reconcileList(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| if (newLen === 0) { | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| return { nodes: [], items: [] }; | ||
| } | ||
| if (oldLen === 0) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = createFn(newItems[i]); | ||
| if (beforeNode) { | ||
| parent.insertBefore(node, beforeNode); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| hooks?.onInsert?.(node); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| if (oldLen < SMALL_LIST_THRESHOLD) { | ||
| return reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks); | ||
| } | ||
| const oldKeyMap = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeyMap.set(keyFn(oldItems[i]), i); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| const oldIdx = oldKeyMap.get(key); | ||
| if (oldIdx !== void 0) { | ||
| oldIndices[i] = oldIdx; | ||
| oldUsed[oldIdx] = 1; | ||
| } else { | ||
| oldIndices[i] = -1; | ||
| } | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function createList(items, keyFn, renderFn, options) { | ||
| if (hydrating) { | ||
| return { type: "list", items, keyFn, renderFn, options }; | ||
| } | ||
| const startMarker = document.createComment("forma-list-start"); | ||
| const endMarker = document.createComment("forma-list-end"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| let currentNodes = []; | ||
| let currentItems = []; | ||
| const updateOnItemChange = options?.updateOnItemChange ?? "none"; | ||
| internalEffect(() => { | ||
| const newItems = items(); | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| return; | ||
| } | ||
| if (!Array.isArray(newItems)) { | ||
| if (__DEV__) { | ||
| console.warn("[forma] createList: value is not an array, treating as empty"); | ||
| } | ||
| for (const node of currentNodes) { | ||
| if (node.parentNode === parent) parent.removeChild(node); | ||
| } | ||
| cache = /* @__PURE__ */ new Map(); | ||
| currentNodes = []; | ||
| currentItems = []; | ||
| return; | ||
| } | ||
| let cleanItems = newItems; | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| if (newItems[i] == null) { | ||
| cleanItems = newItems.filter((item) => item != null); | ||
| break; | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| const seen = /* @__PURE__ */ new Set(); | ||
| for (const item of cleanItems) { | ||
| const key = keyFn(item); | ||
| if (seen.has(key)) { | ||
| console.warn("[forma] createList: duplicate key detected:", key); | ||
| } | ||
| seen.add(key); | ||
| } | ||
| } | ||
| const updateRow = updateOnItemChange === "rerender" ? (node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (!cached) return; | ||
| if (cached.item === item) return; | ||
| cached.item = item; | ||
| if (!(node instanceof HTMLElement)) return; | ||
| if (node[ABORT_SYM3] || node[CACHE_SYM2] || node[DYNAMIC_CHILD_SYM2]) { | ||
| return; | ||
| } | ||
| const next = untrack(() => renderFn(item, cached.getIndex)); | ||
| if (canPatchStaticElement(node, next)) { | ||
| patchStaticElement(node, next); | ||
| cached.element = node; | ||
| } | ||
| } : (_node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }; | ||
| const result = reconcileList( | ||
| parent, | ||
| currentItems, | ||
| cleanItems, | ||
| currentNodes, | ||
| keyFn, | ||
| // createFn: create element + cache entry | ||
| (item) => { | ||
| const key = keyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(0); | ||
| const element = untrack(() => renderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| }, | ||
| updateRow, | ||
| // beforeNode: insert items before the end marker | ||
| endMarker | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < cleanItems.length; i++) { | ||
| const key = keyFn(cleanItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| currentNodes = result.nodes; | ||
| currentItems = result.items; | ||
| }); | ||
| return fragment2; | ||
| } | ||
| Object.defineProperty(exports, "getBatchDepth", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.getBatchDepth; } | ||
| }); | ||
| Object.defineProperty(exports, "isComputed", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isComputed; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffect", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isEffect; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffectScope", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isEffectScope; } | ||
| }); | ||
| Object.defineProperty(exports, "isSignal", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isSignal; } | ||
| }); | ||
| Object.defineProperty(exports, "trigger", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.trigger; } | ||
| }); | ||
| exports.Fragment = Fragment; | ||
| exports.__DEV__ = __DEV__; | ||
| exports.batch = batch; | ||
| exports.cleanup = cleanup; | ||
| exports.createEffect = createEffect; | ||
| exports.createList = createList; | ||
| exports.createMemo = createMemo; | ||
| exports.createReducer = createReducer; | ||
| exports.createRef = createRef; | ||
| exports.createResource = createResource; | ||
| exports.createRoot = createRoot; | ||
| exports.createShow = createShow; | ||
| exports.fragment = fragment; | ||
| exports.h = h; | ||
| exports.hydrateIsland = hydrateIsland; | ||
| exports.internalEffect = internalEffect; | ||
| exports.on = on; | ||
| exports.onCleanup = onCleanup; | ||
| exports.onError = onError; | ||
| exports.popSuspenseContext = popSuspenseContext; | ||
| exports.pushSuspenseContext = pushSuspenseContext; | ||
| exports.reconcileList = reconcileList; | ||
| exports.reportError = reportError; | ||
| exports.untrack = untrack; | ||
| //# sourceMappingURL=chunk-GDULJFJO.cjs.map | ||
| //# sourceMappingURL=chunk-GDULJFJO.cjs.map |
Sorry, the diff of this file is too big to display
| /** | ||
| * Forma Reactive - Signal | ||
| * | ||
| * Fine-grained reactive primitive backed by alien-signals. | ||
| * API: createSignal returns [getter, setter] tuple following SolidJS conventions. | ||
| * | ||
| * TC39 Signals equivalent: Signal.State | ||
| */ | ||
| type SignalGetter<T> = () => T; | ||
| type SignalSetter<T> = (v: T | ((prev: T) => T)) => void; | ||
| interface SignalOptions<T> { | ||
| /** Debug name — attached to getter in dev mode for devtools inspection. */ | ||
| name?: string; | ||
| /** | ||
| * Custom equality check. When provided, the setter will read the current | ||
| * value and only update the signal if `equals(prev, next)` returns `false`. | ||
| * | ||
| * Default: none (alien-signals uses strict inequality `!==` internally). | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * | ||
| * setPos({ x: 0, y: 0 }); // skipped — equals returns true | ||
| * setPos({ x: 1, y: 0 }); // applied — equals returns false | ||
| * ``` | ||
| */ | ||
| equals?: (prev: T, next: T) => boolean; | ||
| } | ||
| /** | ||
| * Create a reactive signal. | ||
| * | ||
| * ```ts | ||
| * const [count, setCount] = createSignal(0); | ||
| * console.log(count()); // 0 | ||
| * setCount(1); | ||
| * setCount(prev => prev + 1); | ||
| * ``` | ||
| * | ||
| * With custom equality: | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * ``` | ||
| */ | ||
| declare function createSignal<T>(initialValue: T, options?: SignalOptions<T>): [get: SignalGetter<T>, set: SignalSetter<T>]; | ||
| export { type SignalGetter as S, type SignalOptions as a, type SignalSetter as b, createSignal as c }; |
| /** | ||
| * Forma Reactive - Signal | ||
| * | ||
| * Fine-grained reactive primitive backed by alien-signals. | ||
| * API: createSignal returns [getter, setter] tuple following SolidJS conventions. | ||
| * | ||
| * TC39 Signals equivalent: Signal.State | ||
| */ | ||
| type SignalGetter<T> = () => T; | ||
| type SignalSetter<T> = (v: T | ((prev: T) => T)) => void; | ||
| interface SignalOptions<T> { | ||
| /** Debug name — attached to getter in dev mode for devtools inspection. */ | ||
| name?: string; | ||
| /** | ||
| * Custom equality check. When provided, the setter will read the current | ||
| * value and only update the signal if `equals(prev, next)` returns `false`. | ||
| * | ||
| * Default: none (alien-signals uses strict inequality `!==` internally). | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * | ||
| * setPos({ x: 0, y: 0 }); // skipped — equals returns true | ||
| * setPos({ x: 1, y: 0 }); // applied — equals returns false | ||
| * ``` | ||
| */ | ||
| equals?: (prev: T, next: T) => boolean; | ||
| } | ||
| /** | ||
| * Create a reactive signal. | ||
| * | ||
| * ```ts | ||
| * const [count, setCount] = createSignal(0); | ||
| * console.log(count()); // 0 | ||
| * setCount(1); | ||
| * setCount(prev => prev + 1); | ||
| * ``` | ||
| * | ||
| * With custom equality: | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * ``` | ||
| */ | ||
| declare function createSignal<T>(initialValue: T, options?: SignalOptions<T>): [get: SignalGetter<T>, set: SignalSetter<T>]; | ||
| export { type SignalGetter as S, type SignalOptions as a, type SignalSetter as b, createSignal as c }; |
@@ -1,2 +0,2 @@ | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Ft=Object.prototype.hasOwnProperty;var Pt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ht(t))!Ft.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Ut=e=>Bt(xe({},"__esModule",{value:!0}),e);var Lr={};Pt(Lr,{applyContainmentHints:()=>wt,clearDiagnostics:()=>Mr,destroyRuntime:()=>vr,getDiagnostics:()=>Rr,getScopes:()=>xr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>Er,reconcile:()=>Dr,resetScope:()=>kr,setDebug:()=>Sr,setDiagnostics:()=>_r,setDirectiveMap:()=>cr,setScopeValue:()=>Cr,setUnsafeEval:()=>Ar,setUnsafeEvalMode:()=>Tr,unmount:()=>yr,yieldToMain:()=>At});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:c};function r(s,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===s)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===s){u.version=p,l.depsTail=u;return}let h=s.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=s.subsTail={version:p,dep:s,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:s.subs=E}function i(s,l=s.sub){let p=s.dep,m=s.prevDep,u=s.nextDep,h=s.nextSub,E=s.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(s){let l=s.nextSub,p;e:do{let m=s.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(s,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(s=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((s=l)!==void 0){l=s.nextSub;continue}for(;p!==void 0;)if(s=p.value,p=p.prev,s!==void 0){l=s.nextSub;continue e}break}while(!0)}function o(s,l){let p,m=0,u=!1;e:do{let h=s.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(s.nextSub!==void 0||s.prevSub!==void 0)&&(p={value:s,prev:p}),s=h.deps,l=h,++m;continue}if(!u){let S=s.nextDep;if(S!==void 0){s=S;continue}}for(;m--;){let S=l.subs,w=S.nextSub!==void 0;if(w?(s=p.value,p=p.prev):s=S,u){if(e(l)){w&&c(S),l=s.sub;continue}u=!1}else l.flags&=-33;l=s.sub;let y=s.nextDep;if(y!==void 0){s=y;continue e}}return u}while(!0)}function c(s){do{let l=s.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((s=s.nextSub)!==void 0)}function f(s,l){let p=l.depsTail;for(;p!==void 0;){if(p===s)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Wt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?st(e):ot(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function q(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return Gt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Vt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=q(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return jt.bind(t)}function st(e){++Ee,e.depsTail=void 0,e.flags=5;let t=q(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function ot(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=q(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Vt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(st(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=q(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function Gt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Wt(t),Ce||at())}}else{if(this.flags&16&&ot(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function jt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function zt(e,t,n){if(typeof t!="function"){if(n){let o=q(void 0),c=e();if(q(o),n(c,t))return}e(t);return}let r=q(void 0),i=e();q(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,o=>zt(n,o,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Jt=32;var Kt=[];for(let e=0;e<Jt;e++)Kt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function $(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let s=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<s?l=m+1:p=m}n[l]=s,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let o=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)o[f]=c,c=i[c];return o}var Xt=32;function Yt(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length,p=new Array(s);for(let d=0;d<s;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<s;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length;if(l===0){for(let d=0;d<s;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(s===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(s<Xt)return Yt(e,t,n,r,i,a,o,c,f);let p=new Map;for(let d=0;d<s;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Zt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function Qt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function en(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function tn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",o=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(o);return en(c,f)?"PRESERVE":"RESET"}var Se=null;function nn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Zt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,o=e.attributes;for(let f=0;f<o.length;f++)if(o[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let s=c[f];if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.getAttribute(s.name)!==s.value&&e.setAttribute(s.name,s.value)}for(let f=o.length-1;f>=0;f--){let s=o[f];if(!t.hasAttribute(s.name)){if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.removeAttribute(s.name)}}}function rn(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let o of Array.from(e.childNodes))o.nodeType===Node.TEXT_NODE&&n.push(o);for(let o=0;o<t.childNodes.length;o++){let c=t.childNodes[o];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:o})}if(n.length===r.length){for(let o=0;o<n.length;o++)n[o].textContent!==r[o].node.textContent&&(n[o].textContent=r[o].node.textContent);return}let i=new Set,a=0;for(let{node:o,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==o.textContent&&(f.textContent=o.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(o.textContent??""),f)}for(let o of n)!i.has(o)&&o.parentNode===e&&e.removeChild(o)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}}return null}function Ie(e,t,n){if(Qt(e))return;rn(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,o=[];for(let s of r){if(s.hasAttribute("data-forma-leaving"))continue;let l=s.getAttribute("data-forma-id");l?a.set(l,s):o.push(s)}let c=0,f=new Set;for(let s of i){let l=s.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<o.length;){let m=o[c];if(c++,m.tagName===s.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&s.hasAttribute("data-forma-state"))switch(tn(p,s)){case"PRESERVE":Oe(p,s),Ie(p,s,n);break;case"RESET":n.unmountScope(p),Oe(p,s),on(p,s),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=s.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,s),Ie(p,s,n);an(e,p,s,i)}else{let m=s.cloneNode(!0),u=ln(e,s,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let s of r)if(!f.has(s)){if(s.parentElement!==e||s.hasAttribute("data-forma-leaving"))continue;s.hasAttribute("data-forma-state")&&n.unmountScope(s);let l=s.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(s)}}function on(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function an(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let s=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(s&&s.parentElement===e){e.insertBefore(t,s);return}}}e.appendChild(t)}}function ln(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let o=nn(a),c=document.createElement("div");c.appendChild(o);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let s=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){s=!0;break}}if(f.size>0&&!s){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function $e(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,H="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function cn(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let o=Te(t.getAttribute("data-forma-auto-containment"));o!==void 0&&(e.autoContainment=o)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let o={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:o}))}}catch{}}var pt=We("locked-off");pt&&(H=pt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0),H==="mutable"&&(F=!0));var ee=cn(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&(H=gt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0));H==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var un=ee.autoContainment===!0;function fn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function At(){let e=fn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let o=r[a];if(!o?.style)continue;let c=o.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=o.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",s=o.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=o.style.getPropertyValue("contain"),u=o.style.getPropertyValue("content-visibility"),h=o.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(o.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(o.style.setProperty("content-visibility",f),p=!0),s!=="off"&&(!l||!h)&&(o.style.setProperty("contain-intrinsic-size",s),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var _t=/^'[^']*'$/,Rt=/^"[^"]*"$/,Mt=/^-?\d+(\.\d+)?$/,xt=/^[a-zA-Z_$]\w*$/,dn=/^(\w+)\.(\w+)$/;var mn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,pn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,gn=/^(.+?)\s*\?\?\s*(.+)$/,hn=/^(.+?)\s*&&\s*(.+)$/,bn=/^(.+?)\s*\|\|\s*(.+)$/,vn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,En=/^(.+?)\s*([*/%])\s*(.+)$/,yn=/^(.+?)\s*([+-])\s*(.+)$/,Sn=/^`([^`]*)`$/,Tn=/\$\{([^}]+)\}/g;var An=/^\((.+)\)\.(\w+)\((.*)\)$/,qe=/^\{|\}$/g;var wn=/^\d+$/,_n=/^(\w+)(\+\+|--)$/,Rn=/^(\+\+|--)(\w+)$/,Mn=/^(\w+)\s*=\s*!(\w+)$/,xn=/^(\w+)\s*=\s*(.+)$/,Cn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,kn=/^if\b/,Nn=/^(\w+)\s*=\s*(.+)$/,Dn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Ln=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,On=/^\{item\.?|\}$/g,In=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Hn=2048,ue=new Map;function ce(e,t){if(ue.size>=Hn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Fn=2048;function Pn(e,t){if(fe.size>=Fn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Bn=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function Ct(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Bn)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Un(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(o=>o.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Un(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Wn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,o=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(o,c).trim()),o=c+1)}return t.push(e.slice(o).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,o=!1,c=!1,f=!1;for(let s=t;s<e.length;s++){let l=e[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,s),end:s}}return null}function Vn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,o=!1,c=!1,f=!1,s=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(s){s=!1;continue}if(u==="\\"&&(o||c||f)){s=!0;continue}if(o){u==="'"&&(o=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){o=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let s=ie(t,0,"{","}");if(!s)return null;let l=s.inner.trim(),p=t.slice(s.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,o=!1,c=!1,f=!1;for(let s=0;s<t.length;s++){let l=t[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,s).trim(),rest:t.slice(s+1).trim()}}return{body:t,rest:""}}function Gn(e,t){let n=e.trim();if(!kn.test(n)||In.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let o=n.slice(i.end+1).trim(),c=bt(o);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;o=c.rest.trim();let s=null;if(o.startsWith("else")){o=o.slice(4).trim();let l=bt(o);if(!l||!l.body||(s=Me(l.body,t),!s))return null;o=l.rest.trim()}return o.length>0?null:l=>{$(()=>{a()?f(l):s?.(l)})}}function jn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function kt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,o;for(;(o=a.exec(e))!==null;)n.push(e.slice(i,o.index)),r.push(o[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Pn(e,c),c}var Nt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function zn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let o=kt(a);Nt.set(i,o),i.textContent=Ke(o,t)}}return tr(n,t),n}function Jn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Nt.get(r);i&&(r.textContent=Ke(i,t))}}var Kn=new WeakMap,Xn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Yn(e){for(let t of Xn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,o=t[i%t.length]??0;a+o>r&&(r=a+o)}return r}function Zn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function we(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),o=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),s=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??s??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??s??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(o),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function _e(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,o=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),o!=null&&cancelAnimationFrame(o),c!=null&&cancelAnimationFrame(c),_e(e,r),n())};return Pe(e,t.base),Pe(e,t.from),_e(e,t.to),o=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;_e(e,t.from),Pe(e,t.to);let s=Zn(e,t.durationMs);if(s<=0){f();return}a=window.setTimeout(f,s+25)})}),f}function Qn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function er(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&_e(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let o=G(e);o.token===a&&(e.style.display="none",o.cancel=null)})}function tr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Yn(a.name)&&a.value.includes("{item")){let o=kt(a.value);i.push({attr:a.name,compiled:o}),r.setAttribute(a.name,Ke(o,t))}i.length>0&&Kn.set(r,i)}}function nr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let s=f[0];if(n+=s.length,re.has(s))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:s,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:s,optional:c})}if(n!==e.length||a.length===0)return null;let o=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=o();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let s=c[f.name];if(typeof s!="function")return;let l=f.argFns.map(p=>p());c=s.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=rr(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(xt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(_t.test(e)||Rt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(Mt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(dn);if(i){let a=i[1],o=i[2];ce(e,c=>()=>c.getters[a]?.()?.[o])}}return r}function rr(e,t){e=e.trim();let n=jn(e);if(n!==e)return x(n,t);if(_t.test(e)||Rt.test(e)){let u=e.slice(1,-1);return()=>u}if(Mt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(xt.test(e))return()=>t.getters[e]?.();{let u=nr(e,t);if(u)return u}let r=e.match(An);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let w=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;w.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=w.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(mn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=Ve(h),S=[],w=!0;for(let y of E){let v=x(y.trim(),t);if(!v){w=!1;break}S.push(v)}if(w)return()=>S.map(y=>y())}}let a=e.match(pn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let o=e.match(gn);if(o){let u=x(o[1].trim(),t),h=x(o[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(bn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(hn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let s=e.match(vn);if(s){let u=x(s[1].trim(),t),h=x(s[3].trim(),t);if(u&&h){let E=s[2];return()=>{let S=u(),w=h();switch(E){case"===":return S===w;case"!==":return S!==w;case"==":return S==w;case"!=":return S!=w;case">":return S>w;case"<":return S<w;case">=":return S>=w;case"<=":return S<=w}}}}let l=e.match(yn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),w=h();return E==="+"?S+w:S-w}}}let p=e.match(En);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),w=h();switch(E){case"*":return S*w;case"/":return S/w;case"%":return S%w}}}}let m=e.match(Sn);if(m){let u=m[1],h=[],E=[],S=0,w=new RegExp(Tn.source,"g"),y;for(;(y=w.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=w.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Dt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Lt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(qe,"").trim(),r=Dt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Lt(n));let c=()=>{};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),s=()=>c(f);return r.set(n,s),s}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Gn(n,t);if(r)return r;let i=Vn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{$(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,o=a.match(_n);if(o){let m=o[1],u=o[2];return()=>{$(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Rn);if(c){let m=c[1],u=c[2];return()=>{$(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(Mn);if(f&&f[1]===f[2]){let m=f[1];return()=>{$(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let s=a.match(xn);if(s){let m=s[1],u=x(s[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{$(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(Cn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{$(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function ir(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Dt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Lt(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{$(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function Ot(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function or(e){let t=e.getAttribute("data-forma-state")??"{}",n=Ot(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[o,c]of Object.entries(n)){let[f,s]=te(c);i[o]=f,a[o]=s}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function ar(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:ar(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=$e(t,r);let i=fr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Nn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let o=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(o){let y=X(o,t),v=B(()=>{qn(e,Wn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),er(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>we(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(we(e),e.removeAttribute("data-forma-leaving"),T&&v?Qn(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>we(e))}let s=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(s){let y=s.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||dr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=ir(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let _=C;if(Array.isArray(_.__formaDisposers)){for(let A of _.__formaDisposers)try{A()}catch{}delete _.__formaDisposers}},j=function(C,_){let A=zn(d,C),L=$e(t,{item:C,index:_}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},se=function(C,_,A){D(C),Jn(C,_);let L=$e(t,{item:_,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,w=se;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(On,"").trim():null,T=Fe(e),k=[],R=[],oe=T?{onInsert:C=>{let _=C;if(!_.setAttribute)return;let A=G(_);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(_,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(_);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,_)=>{let A=C;if(!A.setAttribute){_();return}D(C),Et(A,T,()=>{_()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))we(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let _=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);se(M,P,I)},void 0,oe),L=new Set(A.nodes);for(let M of _)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>se(I,ve.__item,ve.__idx),void 0,oe),P=new Set(M.nodes);for(let I of _)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Dn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Ln);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let _ of g.split("|").filter(Boolean)){let[A,L]=_.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[se,oe]=te(null);if(t.getters[d]=se,t.setters[d]=oe,R){let[_,A]=te(!1);t.getters[R]=_,t.setters[R]=A}if(D){let[_,A]=te(null);t.getters[D]=_,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(_=>_.json()).then(_=>{oe(_),R&&t.setters[R](!1)}).catch(_=>{D&&t.setters[D](_.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let _=setInterval(ae,j);n.push(()=>clearInterval(_))}}}}var gi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function lr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var V=null;function cr(e){if(!e||Object.keys(e).length===0){V=null;return}V=new Map;for(let t in e)V.set(t,new Set(e[t]))}function ur(){if(!V||V.size===0||V.size>200)return null;let e=[];for(let t of V.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function fr(e){if(!V)return null;let t=e.getAttribute("data-forma-id");return t?V.get(t)??null:null}function dr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=or(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let s=i[f],l=s.getAttribute("data-ref");l&&r.set(l,s)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,s){return r.get(s)??void 0},has(f,s){return r.has(s)}}),Y(e,t,n);let o=0,c=ur();if(c){let f=e.querySelectorAll(c);for(let s=0;s<f.length;s++)Y(f[s],t,n),o++}else{let f=e.querySelectorAll("*");for(let s=0;s<f.length;s++){let l=f[s];lr(l)&&(Y(l,t,n),o++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",o,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,mr=40,me=[],he=!1;function pr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let o=i[a];o.closest("[data-forma-leaving]")||Z(o)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function It(){try{for(;me.length>0;){let e=me.splice(0,mr);for(let t=0;t<e.length;t++)pr(e[t]);me.length>0&&await At()}}finally{he=!1,me.length>0&&!he&&(he=!0,It())}}function gr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,It())}function hr(){if(U)return;U=new MutationObserver(gr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function br(){U&&(U.disconnect(),U=null)}function Ge(){un&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);hr(),O&&N("initRuntime: MutationObserver started")}function vr(){br();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function Er(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function yr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Sr(e){O=e}function Tr(e){H!==e&&(H=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function Ar(e){if(H!=="mutable"){N(`setUnsafeEval ignored (mode=${H}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return H}function _r(e){je=e}function Rr(){return Array.from(pe.values()).map(e=>({...e}))}function Mr(){pe.clear()}function xr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let o of Object.keys(r.getters)){let c=r.getters[o]();a[o]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function Cr(e,t,n){let r=e.__formaScope;r?.setters[t]&&$(()=>{r.setters[t](n)})}function kr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Ot(n);$(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Nr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:$})),Be}function Dr(e,t){Nr()(e,t)}return Ut(Lr);})(); | ||
| var FormaRuntime=(function(exports){'use strict';function Je({update:e,notify:t,unwatched:n}){return {link:r,unlink:i,propagate:a,checkDirty:s,shallowPropagate:c};function r(o,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===o)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===o){u.version=p,l.depsTail=u;return}let h=o.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=o.subsTail={version:p,dep:o,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:o.subs=E;}function i(o,l=o.sub){let p=o.dep,m=o.prevDep,u=o.nextDep,h=o.nextSub,E=o.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(o){let l=o.nextSub,p;e:do{let m=o.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(o,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(o=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((o=l)!==void 0){l=o.nextSub;continue}for(;p!==void 0;)if(o=p.value,p=p.prev,o!==void 0){l=o.nextSub;continue e}break}while(true)}function s(o,l){let p,m=0,u=false;e:do{let h=o.dep,E=h.flags;if(l.flags&16)u=true;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=true;}}else if((E&33)===33){(o.nextSub!==void 0||o.prevSub!==void 0)&&(p={value:o,prev:p}),o=h.deps,l=h,++m;continue}if(!u){let S=o.nextDep;if(S!==void 0){o=S;continue}}for(;m--;){let S=l.subs,_=S.nextSub!==void 0;if(_?(o=p.value,p=p.prev):o=S,u){if(e(l)){_&&c(S),l=o.sub;continue}u=false;}else l.flags&=-33;l=o.sub;let y=o.nextDep;if(y!==void 0){o=y;continue e}}return u}while(true)}function c(o){do{let l=o.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l));}while((o=o.nextSub)!==void 0)}function f(o,l){let p=l.depsTail;for(;p!==void 0;){if(p===o)return true;p=p.prevDep;}return false}}var Ee=0,xe=0,K=0,le=0,z,W=[],{link:Ce,unlink:Ke,propagate:Ot,checkDirty:Xe,shallowPropagate:Ye}=Je({update(e){return e.depsTail!==void 0?rt(e):it(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(true);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r;}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):st.call(e);}});function V(e){let t=z;return z=e,t}function Ze(){++xe;}function Qe(){--xe||ot();}function et(e){return $t.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function tt(e){return Ht.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function nt(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=V(t);n!==void 0&&Ce(t,n,0);try{t.fn();}finally{z=n,t.flags&=-5;}return Ft.bind(t)}function rt(e){++Ee,e.depsTail=void 0,e.flags=5;let t=V(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e);}}function it(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function It(e){let t=e.flags;if(t&16||t&32&&Xe(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=V(e);try{e.fn();}finally{z=n,e.flags&=-5,ye(e);}}else e.flags=2;}function ot(){try{for(;K<le;){let e=W[K];W[K++]=void 0,It(e);}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10;}K=0,le=0;}}function Ht(){let e=this.flags;if(e&16||e&32&&(Xe(this.deps,this)||(this.flags=e&-33,false))){if(rt(this)){let n=this.subs;n!==void 0&&Ye(n);}}else if(!e){this.flags=5;let n=V(this);try{this.value=this.getter();}finally{z=n,this.flags&=-5;}}let t=z;return t!==void 0&&Ce(this,t,Ee),this.value}function $t(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Ot(t),xe||ot());}}else {if(this.flags&16&&it(this)){let n=this.subs;n!==void 0&&Ye(n);}let t=z;for(;t!==void 0;){if(t.flags&3){Ce(this,t,Ee);break}t=t.subs?.sub;}return this.currentValue}}function Ft(){st.call(this);}function st(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ke(e);}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ke(n,e);}function Pt(e,t,n){if(typeof t!="function"){e(t);return}let r=V(void 0),i=e();V(r);let a=t(i);e(a);}function te(e,t){let n=et(e),r=n;return [r,s=>Pt(n,s)]}function B(e){let t=nt(e);return t}function Ne(e){return tt(e)}function H(e){Ze();try{e();}finally{Qe();}}function ct(e){let t=e.length;if(t===0)return [];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let o=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<o?l=m+1:p=m;}n[l]=o,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++;}let s=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)s[f]=c,c=i[c];return s}var Wt=32;function Vt(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length,p=new Array(o);for(let d=0;d<o;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<o;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b;}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);if(o===l){let d=true;for(let g=0;g<l;g++)if(m[g]!==g){d=false;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T;}return {nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ct(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=null;for(let d=l-1;d>=0;d--){let g,b=false;if(m[d]===-1)g=a(n[d]),b=true;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g;}return {nodes:y,items:n}}function De(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length;if(l===0){for(let d=0;d<o;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);return {nodes:[],items:[]}}if(o===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);e.appendChild(b),f?.onInsert?.(b),d[g]=b;}return {nodes:d,items:n}}if(o<Wt)return Vt(e,t,n,r,i,a,s,c,f);let p=new Map;for(let d=0;d<o;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1;}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);if(o===l){let d=true;for(let g=0;g<l;g++)if(m[g]!==g){d=false;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T;}return {nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ct(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=null;for(let d=l-1;d>=0;d--){let g,b=false;if(m[d]===-1)g=a(n[d]),b=true;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g;}return {nodes:y,items:n}}function qt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10));}return t}function Gt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function ut(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return []}}function jt(e,t){if(e.length!==t.length)return false;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return false;return true}function zt(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return "REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",s=t.getAttribute("data-forma-state")??"{}",c=ut(a),f=ut(s);return jt(c,f)?"PRESERVE":"RESET"}var Se=null;function Jt(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Le(e,t){let n=qt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=false,s=e.attributes;for(let f=0;f<s.length;f++)if(s[f].name.startsWith("data-class:")){a=true;break}let c=t.attributes;for(let f=0;f<c.length;f++){let o=c[f];if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value);}for(let f=s.length-1;f>=0;f--){let o=s[f];if(!t.hasAttribute(o.name)){if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.removeAttribute(o.name);}}}function Kt(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let s of Array.from(e.childNodes))s.nodeType===Node.TEXT_NODE&&n.push(s);for(let s=0;s<t.childNodes.length;s++){let c=t.childNodes[s];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:s});}if(n.length===r.length){for(let s=0;s<n.length;s++)n[s].textContent!==r[s].node.textContent&&(n[s].textContent=r[s].node.textContent);return}let i=new Set,a=0;for(let{node:s,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==s.textContent&&(f.textContent=s.textContent);}else {let f=Xt(e,t,c);e.insertBefore(document.createTextNode(s.textContent??""),f);}for(let s of n)!i.has(s)&&s.parentNode===e&&e.removeChild(s);}function Xt(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}}return null}function Oe(e,t,n){if(Gt(e))return;Kt(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,s=[];for(let o of r){if(o.hasAttribute("data-forma-leaving"))continue;let l=o.getAttribute("data-forma-id");l?a.set(l,o):s.push(o);}let c=0,f=new Set;for(let o of i){let l=o.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<s.length;){let m=s[c];if(c++,m.tagName===o.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&o.hasAttribute("data-forma-state"))switch(zt(p,o)){case "PRESERVE":Le(p,o),Oe(p,o,n);break;case "RESET":n.unmountScope(p),Le(p,o),Yt(p,o),n.mountScope(p);break;case "REPLACE":{n.unmountScope(p);let u=o.cloneNode(true);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Le(p,o),Oe(p,o,n);Zt(e,p,o,i);}else {let m=o.cloneNode(true),u=Qt(e,o,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E);}}for(let o of r)if(!f.has(o)){if(o.parentElement!==e||o.hasAttribute("data-forma-leaving"))continue;o.hasAttribute("data-forma-state")&&n.unmountScope(o);let l=o.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(o);}}function Yt(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(true));}function Zt(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let o=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(o&&o.parentElement===e){e.insertBefore(t,o);return}}}e.appendChild(t);}}function Qt(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}return null}function ft(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p);});return}let s=Jt(a),c=document.createElement("div");c.appendChild(s);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p);}let o=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){o=!0;break}}if(f.size>0&&!o){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m);});return}e.batch(()=>{Oe(r,c,e);});}finally{e.reconnectObserver();}}}}var Be=new Map;function St(e){let t=Be.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`);}function Ie(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return {getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=false,$="mutable",F=false,qe=true;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e);}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return true;if(t==="0"||t==="false"||t==="off"||t==="no")return false}function Ue(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return "mutable";if(t==="locked-off"||t==="off"||t==="disabled")return "locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return "locked-on"}function en(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=Ue(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n);}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment);}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=Ue(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let s=Te(t.getAttribute("data-forma-auto-containment"));s!==void 0&&(e.autoContainment=s);}}return e}function ne(e,t,n){if(!qe)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let s={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:s}));}}catch{}}var dt=Ue("locked-off");dt&&($=dt,$==="locked-off"&&(F=false),$==="locked-on"&&(F=true),$==="mutable"&&(F=true));var ee=en(),mt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;mt&&($=mt,$==="locked-off"&&(F=false),$==="locked-on"&&(F=true));$==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(qe=ee.diagnostics);var tn=ee.autoContainment===true;function nn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function rn(){let e=nn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0));}function on(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let s=r[a];if(!s?.style)continue;let c=s.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=s.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",o=s.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===true,p=false,m=s.style.getPropertyValue("contain"),u=s.style.getPropertyValue("content-visibility"),h=s.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(s.style.setProperty("contain",c),p=true),f!=="off"&&(!l||!u)&&(s.style.setProperty("content-visibility",f),p=true),o!=="off"&&(!l||!h)&&(s.style.setProperty("contain-intrinsic-size",o),p=true),p&&i++;}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var At=/^'[^']*'$/,_t=/^"[^"]*"$/,wt=/^-?\d+(\.\d+)?$/,Rt=/^[a-zA-Z_$]\w*$/,sn=/^(\w+)\.(\w+)$/;var an=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,ln=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,cn=/^(.+?)\s*\?\?\s*(.+)$/,un=/^(.+?)\s*&&\s*(.+)$/,fn=/^(.+?)\s*\|\|\s*(.+)$/,dn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,mn=/^(.+?)\s*([*/%])\s*(.+)$/,pn=/^(.+?)\s*([+-])\s*(.+)$/,gn=/^`([^`]*)`$/,hn=/\$\{([^}]+)\}/g;var bn=/^\((.+)\)\.(\w+)\((.*)\)$/,We=/^\{|\}$/g;var vn=/^\d+$/,En=/^(\w+)(\+\+|--)$/,yn=/^(\+\+|--)(\w+)$/,Sn=/^(\w+)\s*=\s*!(\w+)$/,Tn=/^(\w+)\s*=\s*(.+)$/,An=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,_n=/^if\b/,wn=/^(\w+)\s*=\s*(.+)$/,Rn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Mn=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,xn=/^\{item\.?|\}$/g,Cn=/\bevent\s*[.([]|\$event\b/,kn=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Nn=2048,ue=new Map;function ce(e,t){if(ue.size>=Nn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n);}ue.set(e,t);}var Ge=new WeakMap,je=new WeakMap,fe=new Map,Dn=2048;function Ln(e,t){if(fe.size>=Dn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n);}fe.set(e,t);}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]);(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")});}return e})();var pt=Symbol.for("forma-text-binding-cache");function Hn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function $n(e,t){let n=e[pt];if(n||(n={initialized:false,last:"",node:null},e[pt]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else {e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=true;return}r.data=t,n.last=t,n.initialized=true;}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=false,i=false,a=false,s=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=false;continue}if(f==="\\"){a=true;continue}if(r){f==="'"&&(r=false);continue}if(i){f==='"'&&(i=false);continue}if(f==="'"){r=true;continue}if(f==='"'){i=true;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(s,c).trim()),s=c+1);}return t.push(e.slice(s).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=false,s=false,c=false,f=false;for(let o=t;o<e.length;o++){let l=e[o];if(f){f=false;continue}if(l==="\\"&&(a||s||c)){f=true;continue}if(a){l==="'"&&(a=false);continue}if(s){l==='"'&&(s=false);continue}if(c){l==="`"&&(c=false);continue}if(l==="'"){a=true;continue}if(l==='"'){s=true;continue}if(l==="`"){c=true;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return {inner:e.slice(t+1,o),end:o}}return null}function Fn(e){let t=e.trim();if(!t)return [];let n=[],r=0,i=0,a=0,s=false,c=false,f=false,o=false,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(o){o=false;continue}if(u==="\\"&&(s||c||f)){o=true;continue}if(s){u==="'"&&(s=false);continue}if(c){u==='"'&&(c=false);continue}if(f){u==="`"&&(f=false);continue}if(u==="'"){s=true;continue}if(u==='"'){c=true;continue}if(u==="`"){f=true;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1;}}let p=t.slice(l).trim();return p&&n.push(p),n}function gt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let o=ie(t,0,"{","}");if(!o)return null;let l=o.inner.trim(),p=t.slice(o.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=false,s=false,c=false,f=false;for(let o=0;o<t.length;o++){let l=t[o];if(f){f=false;continue}if(l==="\\"&&(a||s||c)){f=true;continue}if(a){l==="'"&&(a=false);continue}if(s){l==='"'&&(s=false);continue}if(c){l==="`"&&(c=false);continue}if(l==="'"){a=true;continue}if(l==='"'){s=true;continue}if(l==="`"){c=true;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return {body:t.slice(0,o).trim(),rest:t.slice(o+1).trim()}}return {body:t,rest:""}}function Pn(e,t){let n=e.trim();if(!_n.test(n)||Cn.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let s=n.slice(i.end+1).trim(),c=gt(s);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;s=c.rest.trim();let o=null;if(s.startsWith("else")){s=s.slice(4).trim();let l=gt(s);if(!l||!l.body||(o=Me(l.body,t),!o))return null;s=l.rest.trim();}return s.length>0?null:l=>{H(()=>{a()?f(l):o?.(l);});}}function Bn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r;}return t}function xt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,s;for(;(s=a.exec(e))!==null;)n.push(e.slice(i,s.index)),r.push(s[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Ln(e,c),c}var Ct=new WeakMap;function ze(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??"";}return n}function Un(e,t){let n=e.cloneNode(true),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let s=xt(a);Ct.set(i,s),i.textContent=ze(s,t);}}return Kn(n,t),n}function Wn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Ct.get(r);i&&(r.textContent=ze(i,t));}}var Vn=new WeakMap,qn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Gn(e){for(let t of qn)if(e===t||e.startsWith(t))return true;return false}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r);}return {classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function ht(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,s=t[i%t.length]??0;a+s>r&&(r=a+s);}return r}function jn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=ht(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=ht(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function _e(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re];}function $e(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),s=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),o=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??o??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??o??void 0;return {enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(s),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function we(e,t){for(let n of t)e.classList.remove(n);}function Fe(e,t){for(let n of t)e.classList.add(n);}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=false,a=null,s=null,c=null,f=()=>{i||(i=true,a!=null&&window.clearTimeout(a),s!=null&&cancelAnimationFrame(s),c!=null&&cancelAnimationFrame(c),we(e,r),n());};return Fe(e,t.base),Fe(e,t.from),we(e,t.to),s=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;we(e,t.from),Fe(e,t.to);let o=jn(e,t.durationMs);if(o<=0){f();return}a=window.setTimeout(f,o+25);});}),f}function zn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null);});}function bt(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n();});}function Jn(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&we(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null);});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let s=G(e);s.token===a&&(e.style.display="none",s.cancel=null);});}function Kn(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Gn(a.name)&&a.value.includes("{item")){let s=xt(a.value);i.push({attr:a.name,compiled:s}),r.setAttribute(a.name,ze(s,t));}i.length>0&&Vn.set(r,i);}}function Xn(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=false;if(e[n]==="?"&&e[n+1]===".")c=true,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let o=f[0];if(n+=o.length,re.has(o))return ()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h);}a.push({type:"call",name:o,optional:c,argFns:m}),n=l.end+1;}else a.push({type:"prop",name:o,optional:c});}if(n!==e.length||a.length===0)return null;let s=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return ()=>{let c=s();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else {let o=c[f.name];if(typeof o!="function")return;let l=f.argFns.map(p=>p());c=o.apply(c,l);}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=Yn(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?true:e==="false"?false:e==="null"?null:void 0;ce(e,()=>()=>i);}else if(Rt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(At.test(e)||_t.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i);}else if(wt.test(e)){let i=Number(e);ce(e,()=>()=>i);}else {let i=e.match(sn);if(i){let a=i[1],s=i[2];ce(e,c=>()=>c.getters[a]?.()?.[s]);}}return r}function Yn(e,t){e=e.trim();let n=Bn(e);if(n!==e)return x(n,t);if(At.test(e)||_t.test(e)){let u=e.slice(1,-1);return ()=>u}if(wt.test(e)){let u=Number(e);return ()=>u}if(e==="true")return ()=>true;if(e==="false")return ()=>false;if(e==="null")return ()=>null;if(e==="undefined")return ()=>{};if(Rt.test(e))return ()=>t.getters[e]?.();{let u=Xn(e,t);if(u)return u}let r=e.match(bn);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return ()=>{};let S=x(u,t);if(!S)return null;let _=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;_.push(v);}return ()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=_.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return ()=>!u()}let i=e.match(an);if(i){let u=x(i[1],t),h,E=i[2];if(vn.test(E)?h=Number(E):h=E.slice(1,-1),u)return ()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return ()=>[];let E=Ve(h),S=[],_=true;for(let y of E){let v=x(y.trim(),t);if(!v){_=false;break}S.push(v);}if(_)return ()=>S.map(y=>y())}}let a=e.match(ln);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return ()=>u()?h():E()}let s=e.match(cn);if(s){let u=x(s[1].trim(),t),h=x(s[2].trim(),t);if(u&&h)return ()=>u()??h()}let c=e.match(fn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return ()=>u()||h()}let f=e.match(un);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return ()=>u()&&h()}let o=e.match(dn);if(o){let u=x(o[1].trim(),t),h=x(o[3].trim(),t);if(u&&h){let E=o[2];return ()=>{let S=u(),_=h();switch(E){case "===":return S===_;case "!==":return S!==_;case "==":return S==_;case "!=":return S!=_;case ">":return S>_;case "<":return S<_;case ">=":return S>=_;case "<=":return S<=_}}}}let l=e.match(pn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return ()=>{let S=u(),_=h();return E==="+"?S+_:S-_}}}let p=e.match(mn);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return ()=>{let S=u(),_=h();switch(E){case "*":return S*_;case "/":return S/_;case "%":return S%_}}}}let m=e.match(gn);if(m){let u=m[1],h=[],E=[],S=0,_=new RegExp(hn.source,"g"),y;for(;(y=_.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=_.lastIndex;}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function kt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Nt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(We,"").trim(),r=kt(Ge,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;{N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Nt(n));let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Pn(n,t);if(r)return r;let i=Fn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{H(()=>{for(let h of m)h(u);});}:null}let a=i[0]??n,s=a.match(En);if(s){let m=s[1],u=s[2];return ()=>{H(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1);});}}let c=a.match(yn);if(c){let m=c[1],u=c[2];return ()=>{H(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1);});}}let f=a.match(Sn);if(f&&f[1]===f[2]){let m=f[1];return ()=>{H(()=>{t.setters[m]?.(!t.getters[m]?.());});}}let o=a.match(Tn);if(o){let m=o[1],u=x(o[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{H(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h);});}}let l=a.match(An);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return ()=>{H(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case "+=":t.setters[m]?.(E+S);break;case "-=":t.setters[m]?.(E-S);break;case "*=":t.setters[m]?.(E*S);break;case "/=":t.setters[m]?.(E/S);break}});}}let p=a.match(kn);if(p){let m=p[1];return ()=>St(m)}return null}function Zn(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim());}let r=kt(je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:true};return r.set(n,c),c}{N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Nt(n));let c={handler:()=>{},supported:false};return r.set(n,c),c}}var Qn=new Set(["__proto__","constructor","prototype"]);function Dt(e){let t;try{t=JSON.parse(e);}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of Qn)n in t&&delete t[n];return t}function er(e){let t=e.getAttribute("data-forma-state")??"{}",n=Dt(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[s,c]of Object.entries(n)){let[f,o]=te(c);i[s]=f,a[s]=o;}return i.$refetch=()=>St,{getters:i,setters:a}}var vt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function tr(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!vt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!vt.has(n)?false:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:tr(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:true,composed:true,detail:v}));}};t=Ie(t,r);let i=ir(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(wn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=Ne(R);t.getters[b]=D,k||delete t.setters[b];}}}let s=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(s){let y=X(s,t),v=B(()=>{$n(e,Hn(y()));});n.push(v);}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=$e(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`);}let d=false,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),Jn(e,b,v,!d),d=true;});n.push(g),v&&n.push(()=>_e(e));}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=$e(e),d=document.createComment("forma-if"),g=e.parentNode,b=true,T=false,k=B(()=>{let R=!!y();R&&!b?(_e(e),e.removeAttribute("data-forma-leaving"),T&&v?zn(e,g,d,v):g?.insertBefore(e,d),b=true):!R&&b&&(T&&v?bt(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove());}):(g?.insertBefore(d,e),e.remove()),b=false),T=true;});n.push(k),v&&n.push(()=>_e(e));}let o=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(o){let y=o.replace(We,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"");});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value);};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k);});}}let l=!i||or(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=Zn(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`);}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D);};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R);});}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T);});}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b());});n.push(T);}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===false?e.removeAttribute(g):e.setAttribute(g,String(k));});n.push(T);}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(We,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T));}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()));}catch{}});n.push(b);}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let w=C;if(Array.isArray(w.__formaDisposers)){for(let A of w.__formaDisposers)try{A();}catch{}delete w.__formaDisposers;}},j=function(C,w){let A=Un(d,C),L=Ie(t,{item:C,index:w}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},oe=function(C,w,A){D(C),Wn(C,w);let L=Ie(t,{item:w,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M;};let d=v.cloneNode(true);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(xn,"").trim():null,T=$e(e),k=[],R=[],se=T?{onInsert:C=>{let w=C;if(!w.setAttribute)return;let A=G(w);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(w,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(w);M.token===L&&(M.cancel=null);});},onBeforeRemove:(C,w)=>{let A=C;if(!A.setAttribute){w();return}D(C),bt(A,T,()=>{w();});}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))_e(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L);}let w=new Set(R);if(b){let A=De(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);oe(M,P,I);},void 0,se),L=new Set(A.nodes);for(let M of w)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M);}k=A.items,R=A.nodes;}else {let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=De(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>oe(I,ve.__item,ve.__idx),void 0,se),P=new Set(M.nodes);for(let I of w)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I);}k=M.items,R=M.nodes;}});n.push(ae);}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Rn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Mn);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let w of g.split("|").filter(Boolean)){let[A,L]=w.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10));}let[oe,se]=te(null);if(t.getters[d]=oe,t.setters[d]=se,R){let[w,A]=te(false);t.getters[R]=w,t.setters[R]=A;}if(D){let[w,A]=te(null);t.getters[D]=w,t.setters[D]=A;}let ae=()=>{R&&t.setters[R](true),fetch(T,{method:b}).then(w=>w.json()).then(w=>{se(w),R&&t.setters[R](false);}).catch(w=>{D&&t.setters[D](w.message),R&&t.setters[R](false);});},C=e.getAttribute("data-fetch-id");if(C&&(Be.set(C,ae),n.push(()=>Be.delete(C))),ae(),j&&j>0){let w=setInterval(ae,j);n.push(()=>clearInterval(w));}}}}function nr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return true}return false}var q=null;function zr(e){if(!e||Object.keys(e).length===0){q=null;return}q=new Map;for(let t in e)q.set(t,new Set(e[t]));}function rr(){if(!q||q.size===0||q.size>200)return null;let e=[];for(let t of q.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function ir(e){if(!q)return null;let t=e.getAttribute("data-forma-id");return t?q.get(t)??null:null}function or(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return true;return false}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=er(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let o=i[f],l=o.getAttribute("data-ref");l&&r.set(l,o);}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,o){return r.get(o)??void 0},has(f,o){return r.has(o)}}),Y(e,t,n);let s=0,c=rr();if(c){let f=e.querySelectorAll(c);for(let o=0;o<f.length;o++)Y(f[o],t,n),s++;}else {let f=e.querySelectorAll("*");for(let o=0;o<f.length;o++){let l=f[o];nr(l)&&(Y(l,t,n),s++);}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",s,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)");}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n();}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState;}}var U=null,Et=1,sr=40,me=[],he=false;function ar(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==Et)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a]);}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==Et)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let s=i[a];s.closest("[data-forma-leaving]")||Z(s);}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t);}}async function Lt(){try{for(;me.length>0;){let e=me.splice(0,sr);for(let t=0;t<e.length;t++)ar(e[t]);me.length>0&&await rn();}}finally{he=false,me.length>0&&!he&&(he=true,Lt());}}function lr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=true,Lt());}function cr(){if(U)return;U=new MutationObserver(lr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:true,subtree:true,attributes:true,attributeFilter:["data-forma-state"]});}function ur(){U&&(U.disconnect(),U=null);}function yt(){tn&&on(document,{skipIfAlreadySet:true});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);cr(),O&&N("initRuntime: MutationObserver started");}function Jr(){ur();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t);}function Kr(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n);}function Xr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n);}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",yt):yt());function Yr(e){O=e;}function Zr(e){$!==e&&($=e,e==="locked-off"&&(F=false),e==="locked-on"&&(F=true),e==="mutable"&&(F=true),Ge=new WeakMap,je=new WeakMap);}function Qr(e){if($!=="mutable"){N(`setUnsafeEval ignored (mode=${$}); unsafe fallback is locked`);return}F!==e&&(F=e,Ge=new WeakMap,je=new WeakMap);}function ei(){return $}function ti(e){qe=e;}function ni(){return Array.from(pe.values()).map(e=>({...e}))}function ri(){pe.clear();}function ii(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let s of Object.keys(r.getters)){let c=r.getters[s]();a[s]={value:c,type:typeof c};}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"});}return t}function oi(e,t,n){let r=e.__formaScope;r?.setters[t]&&H(()=>{r.setters[t](n);});}function si(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Dt(n);H(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a);});}var Pe=null;function fr(){return Pe||(Pe=ft({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect();},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:true,subtree:true,attributes:true,attributeFilter:["data-forma-state"]});}},batch:H})),Pe}function ai(e,t){fr()(e,t);}exports.applyContainmentHints=on;exports.clearDiagnostics=ri;exports.destroyRuntime=Jr;exports.getDiagnostics=ni;exports.getScopes=ii;exports.getUnsafeEvalMode=ei;exports.initRuntime=yt;exports.mount=Kr;exports.reconcile=ai;exports.resetScope=si;exports.setDebug=Yr;exports.setDiagnostics=ti;exports.setDirectiveMap=zr;exports.setScopeValue=oi;exports.setUnsafeEval=Qr;exports.setUnsafeEvalMode=Zr;exports.unmount=Xr;exports.yieldToMain=rn;return exports;})({});//# sourceMappingURL=formajs-runtime-hardened.global.js.map | ||
| //# sourceMappingURL=formajs-runtime-hardened.global.js.map |
@@ -1,2 +0,2 @@ | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Ft=Object.prototype.hasOwnProperty;var Pt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ht(t))!Ft.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Ut=e=>Bt(xe({},"__esModule",{value:!0}),e);var Lr={};Pt(Lr,{applyContainmentHints:()=>wt,clearDiagnostics:()=>Mr,destroyRuntime:()=>vr,getDiagnostics:()=>Rr,getScopes:()=>xr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>Er,reconcile:()=>Dr,resetScope:()=>kr,setDebug:()=>Sr,setDiagnostics:()=>_r,setDirectiveMap:()=>cr,setScopeValue:()=>Cr,setUnsafeEval:()=>Ar,setUnsafeEvalMode:()=>Tr,unmount:()=>yr,yieldToMain:()=>At});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:c};function r(s,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===s)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===s){u.version=p,l.depsTail=u;return}let h=s.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=s.subsTail={version:p,dep:s,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:s.subs=E}function i(s,l=s.sub){let p=s.dep,m=s.prevDep,u=s.nextDep,h=s.nextSub,E=s.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(s){let l=s.nextSub,p;e:do{let m=s.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(s,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(s=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((s=l)!==void 0){l=s.nextSub;continue}for(;p!==void 0;)if(s=p.value,p=p.prev,s!==void 0){l=s.nextSub;continue e}break}while(!0)}function o(s,l){let p,m=0,u=!1;e:do{let h=s.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(s.nextSub!==void 0||s.prevSub!==void 0)&&(p={value:s,prev:p}),s=h.deps,l=h,++m;continue}if(!u){let S=s.nextDep;if(S!==void 0){s=S;continue}}for(;m--;){let S=l.subs,w=S.nextSub!==void 0;if(w?(s=p.value,p=p.prev):s=S,u){if(e(l)){w&&c(S),l=s.sub;continue}u=!1}else l.flags&=-33;l=s.sub;let y=s.nextDep;if(y!==void 0){s=y;continue e}}return u}while(!0)}function c(s){do{let l=s.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((s=s.nextSub)!==void 0)}function f(s,l){let p=l.depsTail;for(;p!==void 0;){if(p===s)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Wt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?st(e):ot(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function q(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return Gt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Vt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=q(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return jt.bind(t)}function st(e){++Ee,e.depsTail=void 0,e.flags=5;let t=q(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function ot(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=q(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Vt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(st(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=q(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function Gt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Wt(t),Ce||at())}}else{if(this.flags&16&&ot(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function jt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function zt(e,t,n){if(typeof t!="function"){if(n){let o=q(void 0),c=e();if(q(o),n(c,t))return}e(t);return}let r=q(void 0),i=e();q(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,o=>zt(n,o,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Jt=32;var Kt=[];for(let e=0;e<Jt;e++)Kt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function $(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let s=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<s?l=m+1:p=m}n[l]=s,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let o=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)o[f]=c,c=i[c];return o}var Xt=32;function Yt(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length,p=new Array(s);for(let d=0;d<s;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<s;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length;if(l===0){for(let d=0;d<s;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(s===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(s<Xt)return Yt(e,t,n,r,i,a,o,c,f);let p=new Map;for(let d=0;d<s;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Zt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function Qt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function en(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function tn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",o=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(o);return en(c,f)?"PRESERVE":"RESET"}var Se=null;function nn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Zt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,o=e.attributes;for(let f=0;f<o.length;f++)if(o[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let s=c[f];if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.getAttribute(s.name)!==s.value&&e.setAttribute(s.name,s.value)}for(let f=o.length-1;f>=0;f--){let s=o[f];if(!t.hasAttribute(s.name)){if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.removeAttribute(s.name)}}}function rn(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let o of Array.from(e.childNodes))o.nodeType===Node.TEXT_NODE&&n.push(o);for(let o=0;o<t.childNodes.length;o++){let c=t.childNodes[o];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:o})}if(n.length===r.length){for(let o=0;o<n.length;o++)n[o].textContent!==r[o].node.textContent&&(n[o].textContent=r[o].node.textContent);return}let i=new Set,a=0;for(let{node:o,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==o.textContent&&(f.textContent=o.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(o.textContent??""),f)}for(let o of n)!i.has(o)&&o.parentNode===e&&e.removeChild(o)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}}return null}function Ie(e,t,n){if(Qt(e))return;rn(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,o=[];for(let s of r){if(s.hasAttribute("data-forma-leaving"))continue;let l=s.getAttribute("data-forma-id");l?a.set(l,s):o.push(s)}let c=0,f=new Set;for(let s of i){let l=s.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<o.length;){let m=o[c];if(c++,m.tagName===s.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&s.hasAttribute("data-forma-state"))switch(tn(p,s)){case"PRESERVE":Oe(p,s),Ie(p,s,n);break;case"RESET":n.unmountScope(p),Oe(p,s),on(p,s),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=s.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,s),Ie(p,s,n);an(e,p,s,i)}else{let m=s.cloneNode(!0),u=ln(e,s,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let s of r)if(!f.has(s)){if(s.parentElement!==e||s.hasAttribute("data-forma-leaving"))continue;s.hasAttribute("data-forma-state")&&n.unmountScope(s);let l=s.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(s)}}function on(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function an(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let s=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(s&&s.parentElement===e){e.insertBefore(t,s);return}}}e.appendChild(t)}}function ln(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let o=nn(a),c=document.createElement("div");c.appendChild(o);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let s=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){s=!0;break}}if(f.size>0&&!s){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function $e(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,H="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function cn(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let o=Te(t.getAttribute("data-forma-auto-containment"));o!==void 0&&(e.autoContainment=o)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let o={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:o}))}}catch{}}var pt=We("mutable");pt&&(H=pt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0),H==="mutable"&&(F=!0));var ee=cn(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&(H=gt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0));H==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var un=ee.autoContainment===!0;function fn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function At(){let e=fn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let o=r[a];if(!o?.style)continue;let c=o.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=o.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",s=o.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=o.style.getPropertyValue("contain"),u=o.style.getPropertyValue("content-visibility"),h=o.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(o.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(o.style.setProperty("content-visibility",f),p=!0),s!=="off"&&(!l||!h)&&(o.style.setProperty("contain-intrinsic-size",s),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var _t=/^'[^']*'$/,Rt=/^"[^"]*"$/,Mt=/^-?\d+(\.\d+)?$/,xt=/^[a-zA-Z_$]\w*$/,dn=/^(\w+)\.(\w+)$/;var mn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,pn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,gn=/^(.+?)\s*\?\?\s*(.+)$/,hn=/^(.+?)\s*&&\s*(.+)$/,bn=/^(.+?)\s*\|\|\s*(.+)$/,vn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,En=/^(.+?)\s*([*/%])\s*(.+)$/,yn=/^(.+?)\s*([+-])\s*(.+)$/,Sn=/^`([^`]*)`$/,Tn=/\$\{([^}]+)\}/g;var An=/^\((.+)\)\.(\w+)\((.*)\)$/,qe=/^\{|\}$/g;var wn=/^\d+$/,_n=/^(\w+)(\+\+|--)$/,Rn=/^(\+\+|--)(\w+)$/,Mn=/^(\w+)\s*=\s*!(\w+)$/,xn=/^(\w+)\s*=\s*(.+)$/,Cn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,kn=/^if\b/,Nn=/^(\w+)\s*=\s*(.+)$/,Dn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Ln=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,On=/^\{item\.?|\}$/g,In=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Hn=2048,ue=new Map;function ce(e,t){if(ue.size>=Hn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Fn=2048;function Pn(e,t){if(fe.size>=Fn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Bn=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function Ct(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Bn)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Un(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(o=>o.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Un(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Wn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,o=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(o,c).trim()),o=c+1)}return t.push(e.slice(o).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,o=!1,c=!1,f=!1;for(let s=t;s<e.length;s++){let l=e[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,s),end:s}}return null}function Vn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,o=!1,c=!1,f=!1,s=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(s){s=!1;continue}if(u==="\\"&&(o||c||f)){s=!0;continue}if(o){u==="'"&&(o=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){o=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let s=ie(t,0,"{","}");if(!s)return null;let l=s.inner.trim(),p=t.slice(s.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,o=!1,c=!1,f=!1;for(let s=0;s<t.length;s++){let l=t[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,s).trim(),rest:t.slice(s+1).trim()}}return{body:t,rest:""}}function Gn(e,t){let n=e.trim();if(!kn.test(n)||In.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let o=n.slice(i.end+1).trim(),c=bt(o);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;o=c.rest.trim();let s=null;if(o.startsWith("else")){o=o.slice(4).trim();let l=bt(o);if(!l||!l.body||(s=Me(l.body,t),!s))return null;o=l.rest.trim()}return o.length>0?null:l=>{$(()=>{a()?f(l):s?.(l)})}}function jn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function kt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,o;for(;(o=a.exec(e))!==null;)n.push(e.slice(i,o.index)),r.push(o[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Pn(e,c),c}var Nt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function zn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let o=kt(a);Nt.set(i,o),i.textContent=Ke(o,t)}}return tr(n,t),n}function Jn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Nt.get(r);i&&(r.textContent=Ke(i,t))}}var Kn=new WeakMap,Xn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Yn(e){for(let t of Xn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,o=t[i%t.length]??0;a+o>r&&(r=a+o)}return r}function Zn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function we(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),o=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),s=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??s??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??s??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(o),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function _e(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,o=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),o!=null&&cancelAnimationFrame(o),c!=null&&cancelAnimationFrame(c),_e(e,r),n())};return Pe(e,t.base),Pe(e,t.from),_e(e,t.to),o=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;_e(e,t.from),Pe(e,t.to);let s=Zn(e,t.durationMs);if(s<=0){f();return}a=window.setTimeout(f,s+25)})}),f}function Qn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function er(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&_e(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let o=G(e);o.token===a&&(e.style.display="none",o.cancel=null)})}function tr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Yn(a.name)&&a.value.includes("{item")){let o=kt(a.value);i.push({attr:a.name,compiled:o}),r.setAttribute(a.name,Ke(o,t))}i.length>0&&Kn.set(r,i)}}function nr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let s=f[0];if(n+=s.length,re.has(s))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:s,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:s,optional:c})}if(n!==e.length||a.length===0)return null;let o=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=o();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let s=c[f.name];if(typeof s!="function")return;let l=f.argFns.map(p=>p());c=s.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=rr(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(xt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(_t.test(e)||Rt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(Mt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(dn);if(i){let a=i[1],o=i[2];ce(e,c=>()=>c.getters[a]?.()?.[o])}}return r}function rr(e,t){e=e.trim();let n=jn(e);if(n!==e)return x(n,t);if(_t.test(e)||Rt.test(e)){let u=e.slice(1,-1);return()=>u}if(Mt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(xt.test(e))return()=>t.getters[e]?.();{let u=nr(e,t);if(u)return u}let r=e.match(An);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let w=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;w.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=w.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(mn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=Ve(h),S=[],w=!0;for(let y of E){let v=x(y.trim(),t);if(!v){w=!1;break}S.push(v)}if(w)return()=>S.map(y=>y())}}let a=e.match(pn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let o=e.match(gn);if(o){let u=x(o[1].trim(),t),h=x(o[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(bn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(hn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let s=e.match(vn);if(s){let u=x(s[1].trim(),t),h=x(s[3].trim(),t);if(u&&h){let E=s[2];return()=>{let S=u(),w=h();switch(E){case"===":return S===w;case"!==":return S!==w;case"==":return S==w;case"!=":return S!=w;case">":return S>w;case"<":return S<w;case">=":return S>=w;case"<=":return S<=w}}}}let l=e.match(yn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),w=h();return E==="+"?S+w:S-w}}}let p=e.match(En);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),w=h();switch(E){case"*":return S*w;case"/":return S/w;case"%":return S%w}}}}let m=e.match(Sn);if(m){let u=m[1],h=[],E=[],S=0,w=new RegExp(Tn.source,"g"),y;for(;(y=w.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=w.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Dt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Lt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(qe,"").trim(),r=Dt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Lt(n));let c=()=>{};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),s=()=>c(f);return r.set(n,s),s}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Gn(n,t);if(r)return r;let i=Vn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{$(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,o=a.match(_n);if(o){let m=o[1],u=o[2];return()=>{$(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Rn);if(c){let m=c[1],u=c[2];return()=>{$(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(Mn);if(f&&f[1]===f[2]){let m=f[1];return()=>{$(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let s=a.match(xn);if(s){let m=s[1],u=x(s[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{$(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(Cn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{$(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function ir(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Dt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Lt(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{$(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function Ot(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function or(e){let t=e.getAttribute("data-forma-state")??"{}",n=Ot(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[o,c]of Object.entries(n)){let[f,s]=te(c);i[o]=f,a[o]=s}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function ar(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:ar(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=$e(t,r);let i=fr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Nn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let o=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(o){let y=X(o,t),v=B(()=>{qn(e,Wn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),er(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>we(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(we(e),e.removeAttribute("data-forma-leaving"),T&&v?Qn(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>we(e))}let s=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(s){let y=s.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||dr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=ir(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let _=C;if(Array.isArray(_.__formaDisposers)){for(let A of _.__formaDisposers)try{A()}catch{}delete _.__formaDisposers}},j=function(C,_){let A=zn(d,C),L=$e(t,{item:C,index:_}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},se=function(C,_,A){D(C),Jn(C,_);let L=$e(t,{item:_,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,w=se;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(On,"").trim():null,T=Fe(e),k=[],R=[],oe=T?{onInsert:C=>{let _=C;if(!_.setAttribute)return;let A=G(_);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(_,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(_);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,_)=>{let A=C;if(!A.setAttribute){_();return}D(C),Et(A,T,()=>{_()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))we(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let _=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);se(M,P,I)},void 0,oe),L=new Set(A.nodes);for(let M of _)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>se(I,ve.__item,ve.__idx),void 0,oe),P=new Set(M.nodes);for(let I of _)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Dn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Ln);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let _ of g.split("|").filter(Boolean)){let[A,L]=_.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[se,oe]=te(null);if(t.getters[d]=se,t.setters[d]=oe,R){let[_,A]=te(!1);t.getters[R]=_,t.setters[R]=A}if(D){let[_,A]=te(null);t.getters[D]=_,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(_=>_.json()).then(_=>{oe(_),R&&t.setters[R](!1)}).catch(_=>{D&&t.setters[D](_.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let _=setInterval(ae,j);n.push(()=>clearInterval(_))}}}}var gi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function lr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var V=null;function cr(e){if(!e||Object.keys(e).length===0){V=null;return}V=new Map;for(let t in e)V.set(t,new Set(e[t]))}function ur(){if(!V||V.size===0||V.size>200)return null;let e=[];for(let t of V.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function fr(e){if(!V)return null;let t=e.getAttribute("data-forma-id");return t?V.get(t)??null:null}function dr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=or(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let s=i[f],l=s.getAttribute("data-ref");l&&r.set(l,s)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,s){return r.get(s)??void 0},has(f,s){return r.has(s)}}),Y(e,t,n);let o=0,c=ur();if(c){let f=e.querySelectorAll(c);for(let s=0;s<f.length;s++)Y(f[s],t,n),o++}else{let f=e.querySelectorAll("*");for(let s=0;s<f.length;s++){let l=f[s];lr(l)&&(Y(l,t,n),o++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",o,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,mr=40,me=[],he=!1;function pr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let o=i[a];o.closest("[data-forma-leaving]")||Z(o)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function It(){try{for(;me.length>0;){let e=me.splice(0,mr);for(let t=0;t<e.length;t++)pr(e[t]);me.length>0&&await At()}}finally{he=!1,me.length>0&&!he&&(he=!0,It())}}function gr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,It())}function hr(){if(U)return;U=new MutationObserver(gr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function br(){U&&(U.disconnect(),U=null)}function Ge(){un&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);hr(),O&&N("initRuntime: MutationObserver started")}function vr(){br();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function Er(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function yr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Sr(e){O=e}function Tr(e){H!==e&&(H=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function Ar(e){if(H!=="mutable"){N(`setUnsafeEval ignored (mode=${H}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return H}function _r(e){je=e}function Rr(){return Array.from(pe.values()).map(e=>({...e}))}function Mr(){pe.clear()}function xr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let o of Object.keys(r.getters)){let c=r.getters[o]();a[o]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function Cr(e,t,n){let r=e.__formaScope;r?.setters[t]&&$(()=>{r.setters[t](n)})}function kr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Ot(n);$(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Nr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:$})),Be}function Dr(e,t){Nr()(e,t)}return Ut(Lr);})(); | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ft=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var Bt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Ut=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ft(t))!Pt.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Wt=e=>Ut(xe({},"__esModule",{value:!0}),e);var Or={};Bt(Or,{applyContainmentHints:()=>wt,clearDiagnostics:()=>xr,destroyRuntime:()=>Er,getDiagnostics:()=>Mr,getScopes:()=>Cr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>yr,reconcile:()=>Lr,resetScope:()=>Nr,setDebug:()=>Tr,setDiagnostics:()=>Rr,setDirectiveMap:()=>ur,setScopeValue:()=>kr,setUnsafeEval:()=>_r,setUnsafeEvalMode:()=>Ar,unmount:()=>Sr,yieldToMain:()=>_t});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:s,shallowPropagate:c};function r(o,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===o)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===o){u.version=p,l.depsTail=u;return}let h=o.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=o.subsTail={version:p,dep:o,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:o.subs=E}function i(o,l=o.sub){let p=o.dep,m=o.prevDep,u=o.nextDep,h=o.nextSub,E=o.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(o){let l=o.nextSub,p;e:do{let m=o.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(o,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(o=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((o=l)!==void 0){l=o.nextSub;continue}for(;p!==void 0;)if(o=p.value,p=p.prev,o!==void 0){l=o.nextSub;continue e}break}while(!0)}function s(o,l){let p,m=0,u=!1;e:do{let h=o.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(o.nextSub!==void 0||o.prevSub!==void 0)&&(p={value:o,prev:p}),o=h.deps,l=h,++m;continue}if(!u){let S=o.nextDep;if(S!==void 0){o=S;continue}}for(;m--;){let S=l.subs,_=S.nextSub!==void 0;if(_?(o=p.value,p=p.prev):o=S,u){if(e(l)){_&&c(S),l=o.sub;continue}u=!1}else l.flags&=-33;l=o.sub;let y=o.nextDep;if(y!==void 0){o=y;continue e}}return u}while(!0)}function c(o){do{let l=o.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((o=o.nextSub)!==void 0)}function f(o,l){let p=l.depsTail;for(;p!==void 0;){if(p===o)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Vt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?ot(e):st(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function V(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return jt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Gt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=V(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return zt.bind(t)}function ot(e){++Ee,e.depsTail=void 0,e.flags=5;let t=V(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function st(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=V(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Gt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(ot(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=V(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function jt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Vt(t),Ce||at())}}else{if(this.flags&16&&st(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function zt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function Jt(e,t,n){if(typeof t!="function"){if(n){let s=V(void 0),c=e();if(V(s),n(c,t))return}e(t);return}let r=V(void 0),i=e();V(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,s=>Jt(n,s,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Kt=32;var Xt=[];for(let e=0;e<Kt;e++)Xt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function H(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let o=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<o?l=m+1:p=m}n[l]=o,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let s=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)s[f]=c,c=i[c];return s}var Yt=32;function Zt(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length,p=new Array(o);for(let d=0;d<o;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<o;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(o===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length;if(l===0){for(let d=0;d<o;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(o===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(o<Yt)return Zt(e,t,n,r,i,a,s,c,f);let p=new Map;for(let d=0;d<o;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(o===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Qt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function en(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function tn(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function nn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",s=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(s);return tn(c,f)?"PRESERVE":"RESET"}var Se=null;function rn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Qt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,s=e.attributes;for(let f=0;f<s.length;f++)if(s[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let o=c[f];if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value)}for(let f=s.length-1;f>=0;f--){let o=s[f];if(!t.hasAttribute(o.name)){if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.removeAttribute(o.name)}}}function on(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let s of Array.from(e.childNodes))s.nodeType===Node.TEXT_NODE&&n.push(s);for(let s=0;s<t.childNodes.length;s++){let c=t.childNodes[s];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:s})}if(n.length===r.length){for(let s=0;s<n.length;s++)n[s].textContent!==r[s].node.textContent&&(n[s].textContent=r[s].node.textContent);return}let i=new Set,a=0;for(let{node:s,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==s.textContent&&(f.textContent=s.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(s.textContent??""),f)}for(let s of n)!i.has(s)&&s.parentNode===e&&e.removeChild(s)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}}return null}function Ie(e,t,n){if(en(e))return;on(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,s=[];for(let o of r){if(o.hasAttribute("data-forma-leaving"))continue;let l=o.getAttribute("data-forma-id");l?a.set(l,o):s.push(o)}let c=0,f=new Set;for(let o of i){let l=o.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<s.length;){let m=s[c];if(c++,m.tagName===o.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&o.hasAttribute("data-forma-state"))switch(nn(p,o)){case"PRESERVE":Oe(p,o),Ie(p,o,n);break;case"RESET":n.unmountScope(p),Oe(p,o),an(p,o),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=o.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,o),Ie(p,o,n);ln(e,p,o,i)}else{let m=o.cloneNode(!0),u=cn(e,o,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let o of r)if(!f.has(o)){if(o.parentElement!==e||o.hasAttribute("data-forma-leaving"))continue;o.hasAttribute("data-forma-state")&&n.unmountScope(o);let l=o.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(o)}}function an(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function ln(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let o=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(o&&o.parentElement===e){e.insertBefore(t,o);return}}}e.appendChild(t)}}function cn(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let s=rn(a),c=document.createElement("div");c.appendChild(s);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let o=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){o=!0;break}}if(f.size>0&&!o){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function He(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,$="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function un(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let s=Te(t.getAttribute("data-forma-auto-containment"));s!==void 0&&(e.autoContainment=s)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let s={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:s}))}}catch{}}var At=!0,pt=We("mutable");pt&&($=pt,$==="locked-off"&&(F=!1),$==="locked-on"&&(F=!0),$==="mutable"&&(F=!0));var ee=un(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&($=gt,$==="locked-off"&&(F=!1),$==="locked-on"&&(F=!0));$==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var fn=ee.autoContainment===!0;function dn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function _t(){let e=dn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let s=r[a];if(!s?.style)continue;let c=s.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=s.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",o=s.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=s.style.getPropertyValue("contain"),u=s.style.getPropertyValue("content-visibility"),h=s.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(s.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(s.style.setProperty("content-visibility",f),p=!0),o!=="off"&&(!l||!h)&&(s.style.setProperty("contain-intrinsic-size",o),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var Rt=/^'[^']*'$/,Mt=/^"[^"]*"$/,xt=/^-?\d+(\.\d+)?$/,Ct=/^[a-zA-Z_$]\w*$/,mn=/^(\w+)\.(\w+)$/;var pn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,gn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,hn=/^(.+?)\s*\?\?\s*(.+)$/,bn=/^(.+?)\s*&&\s*(.+)$/,vn=/^(.+?)\s*\|\|\s*(.+)$/,En=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,yn=/^(.+?)\s*([*/%])\s*(.+)$/,Sn=/^(.+?)\s*([+-])\s*(.+)$/,Tn=/^`([^`]*)`$/,An=/\$\{([^}]+)\}/g;var _n=/^\((.+)\)\.(\w+)\((.*)\)$/,Ve=/^\{|\}$/g;var wn=/^\d+$/,Rn=/^(\w+)(\+\+|--)$/,Mn=/^(\+\+|--)(\w+)$/,xn=/^(\w+)\s*=\s*!(\w+)$/,Cn=/^(\w+)\s*=\s*(.+)$/,kn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,Nn=/^if\b/,Dn=/^(\w+)\s*=\s*(.+)$/,Ln=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,On=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,In=/^\{item\.?|\}$/g,Hn=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Fn=2048,ue=new Map;function ce(e,t){if(ue.size>=Fn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Pn=2048;function Bn(e,t){if(fe.size>=Pn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Un=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function kt(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Un)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Wn(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(s=>s.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Wn(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Vn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function qe(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,s=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(s,c).trim()),s=c+1)}return t.push(e.slice(s).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,s=!1,c=!1,f=!1;for(let o=t;o<e.length;o++){let l=e[o];if(f){f=!1;continue}if(l==="\\"&&(a||s||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(s){l==='"'&&(s=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){s=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,o),end:o}}return null}function Gn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,s=!1,c=!1,f=!1,o=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(o){o=!1;continue}if(u==="\\"&&(s||c||f)){o=!0;continue}if(s){u==="'"&&(s=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){s=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let o=ie(t,0,"{","}");if(!o)return null;let l=o.inner.trim(),p=t.slice(o.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,s=!1,c=!1,f=!1;for(let o=0;o<t.length;o++){let l=t[o];if(f){f=!1;continue}if(l==="\\"&&(a||s||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(s){l==='"'&&(s=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){s=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,o).trim(),rest:t.slice(o+1).trim()}}return{body:t,rest:""}}function jn(e,t){let n=e.trim();if(!Nn.test(n)||Hn.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let s=n.slice(i.end+1).trim(),c=bt(s);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;s=c.rest.trim();let o=null;if(s.startsWith("else")){s=s.slice(4).trim();let l=bt(s);if(!l||!l.body||(o=Me(l.body,t),!o))return null;s=l.rest.trim()}return s.length>0?null:l=>{H(()=>{a()?f(l):o?.(l)})}}function zn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function Nt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,s;for(;(s=a.exec(e))!==null;)n.push(e.slice(i,s.index)),r.push(s[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Bn(e,c),c}var Dt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function Jn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let s=Nt(a);Dt.set(i,s),i.textContent=Ke(s,t)}}return nr(n,t),n}function Kn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Dt.get(r);i&&(r.textContent=Ke(i,t))}}var Xn=new WeakMap,Yn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Zn(e){for(let t of Yn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function $e(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,s=t[i%t.length]??0;a+s>r&&(r=a+s)}return r}function Qn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function _e(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=$e(e.getAttribute("data-transition")).classes,r=$e(e.getAttribute("data-transition:enter")),i=$e(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),s=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),o=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??o??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??o??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(s),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function we(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,s=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),s!=null&&cancelAnimationFrame(s),c!=null&&cancelAnimationFrame(c),we(e,r),n())};return Pe(e,t.base),Pe(e,t.from),we(e,t.to),s=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;we(e,t.from),Pe(e,t.to);let o=Qn(e,t.durationMs);if(o<=0){f();return}a=window.setTimeout(f,o+25)})}),f}function er(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function tr(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&we(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let s=G(e);s.token===a&&(e.style.display="none",s.cancel=null)})}function nr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Zn(a.name)&&a.value.includes("{item")){let s=Nt(a.value);i.push({attr:a.name,compiled:s}),r.setAttribute(a.name,Ke(s,t))}i.length>0&&Xn.set(r,i)}}function rr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let o=f[0];if(n+=o.length,re.has(o))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of qe(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:o,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:o,optional:c})}if(n!==e.length||a.length===0)return null;let s=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=s();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let o=c[f.name];if(typeof o!="function")return;let l=f.argFns.map(p=>p());c=o.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=ir(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(Ct.test(e))ce(e,i=>()=>i.getters[e]?.());else if(Rt.test(e)||Mt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(xt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(mn);if(i){let a=i[1],s=i[2];ce(e,c=>()=>c.getters[a]?.()?.[s])}}return r}function ir(e,t){e=e.trim();let n=zn(e);if(n!==e)return x(n,t);if(Rt.test(e)||Mt.test(e)){let u=e.slice(1,-1);return()=>u}if(xt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(Ct.test(e))return()=>t.getters[e]?.();{let u=rr(e,t);if(u)return u}let r=e.match(_n);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let _=[];for(let y of qe(E)){let v=x(y,t);if(!v)return null;_.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=_.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(pn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=qe(h),S=[],_=!0;for(let y of E){let v=x(y.trim(),t);if(!v){_=!1;break}S.push(v)}if(_)return()=>S.map(y=>y())}}let a=e.match(gn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let s=e.match(hn);if(s){let u=x(s[1].trim(),t),h=x(s[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(vn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(bn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let o=e.match(En);if(o){let u=x(o[1].trim(),t),h=x(o[3].trim(),t);if(u&&h){let E=o[2];return()=>{let S=u(),_=h();switch(E){case"===":return S===_;case"!==":return S!==_;case"==":return S==_;case"!=":return S!=_;case">":return S>_;case"<":return S<_;case">=":return S>=_;case"<=":return S<=_}}}}let l=e.match(Sn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),_=h();return E==="+"?S+_:S-_}}}let p=e.match(yn);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),_=h();switch(E){case"*":return S*_;case"/":return S/_;case"%":return S%_}}}}let m=e.match(Tn);if(m){let u=m[1],h=[],E=[],S=0,_=new RegExp(An.source,"g"),y;for(;(y=_.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=_.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Lt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Ot(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(Ve,"").trim(),r=Lt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!At||!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Ot(n));let c=()=>{};return r.set(n,c),c}let s=kt(n);if(s){let c=`Blocked unsafe method "${s}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),o=()=>c(f);return r.set(n,o),o}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=jn(n,t);if(r)return r;let i=Gn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{H(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,s=a.match(Rn);if(s){let m=s[1],u=s[2];return()=>{H(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Mn);if(c){let m=c[1],u=c[2];return()=>{H(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(xn);if(f&&f[1]===f[2]){let m=f[1];return()=>{H(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let o=a.match(Cn);if(o){let m=o[1],u=x(o[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{H(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(kn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{H(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function or(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Lt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!At||!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Ot(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let s=kt(n);if(s){let c=`Blocked unsafe method "${s}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{H(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function It(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function ar(e){let t=e.getAttribute("data-forma-state")??"{}",n=It(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[s,c]of Object.entries(n)){let[f,o]=te(c);i[s]=f,a[s]=o}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function lr(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:lr(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=He(t,r);let i=dr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Dn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let s=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(s){let y=X(s,t),v=B(()=>{qn(e,Vn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),tr(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>_e(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(_e(e),e.removeAttribute("data-forma-leaving"),T&&v?er(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>_e(e))}let o=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(o){let y=o.replace(Ve,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||mr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=or(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(Ve,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let w=C;if(Array.isArray(w.__formaDisposers)){for(let A of w.__formaDisposers)try{A()}catch{}delete w.__formaDisposers}},j=function(C,w){let A=Jn(d,C),L=He(t,{item:C,index:w}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},oe=function(C,w,A){D(C),Kn(C,w);let L=He(t,{item:w,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,_=oe;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(In,"").trim():null,T=Fe(e),k=[],R=[],se=T?{onInsert:C=>{let w=C;if(!w.setAttribute)return;let A=G(w);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(w,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(w);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,w)=>{let A=C;if(!A.setAttribute){w();return}D(C),Et(A,T,()=>{w()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))_e(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let w=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);oe(M,P,I)},void 0,se),L=new Set(A.nodes);for(let M of w)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>oe(I,ve.__item,ve.__idx),void 0,se),P=new Set(M.nodes);for(let I of w)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Ln);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(On);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let w of g.split("|").filter(Boolean)){let[A,L]=w.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[oe,se]=te(null);if(t.getters[d]=oe,t.setters[d]=se,R){let[w,A]=te(!1);t.getters[R]=w,t.setters[R]=A}if(D){let[w,A]=te(null);t.getters[D]=w,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(w=>w.json()).then(w=>{se(w),R&&t.setters[R](!1)}).catch(w=>{D&&t.setters[D](w.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let w=setInterval(ae,j);n.push(()=>clearInterval(w))}}}}var hi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function cr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var q=null;function ur(e){if(!e||Object.keys(e).length===0){q=null;return}q=new Map;for(let t in e)q.set(t,new Set(e[t]))}function fr(){if(!q||q.size===0||q.size>200)return null;let e=[];for(let t of q.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function dr(e){if(!q)return null;let t=e.getAttribute("data-forma-id");return t?q.get(t)??null:null}function mr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=ar(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let o=i[f],l=o.getAttribute("data-ref");l&&r.set(l,o)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,o){return r.get(o)??void 0},has(f,o){return r.has(o)}}),Y(e,t,n);let s=0,c=fr();if(c){let f=e.querySelectorAll(c);for(let o=0;o<f.length;o++)Y(f[o],t,n),s++}else{let f=e.querySelectorAll("*");for(let o=0;o<f.length;o++){let l=f[o];cr(l)&&(Y(l,t,n),s++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",s,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,pr=40,me=[],he=!1;function gr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let s=i[a];s.closest("[data-forma-leaving]")||Z(s)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function Ht(){try{for(;me.length>0;){let e=me.splice(0,pr);for(let t=0;t<e.length;t++)gr(e[t]);me.length>0&&await _t()}}finally{he=!1,me.length>0&&!he&&(he=!0,Ht())}}function hr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,Ht())}function br(){if(U)return;U=new MutationObserver(hr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function vr(){U&&(U.disconnect(),U=null)}function Ge(){fn&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);br(),O&&N("initRuntime: MutationObserver started")}function Er(){vr();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function yr(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function Sr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Tr(e){O=e}function Ar(e){$!==e&&($=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function _r(e){if($!=="mutable"){N(`setUnsafeEval ignored (mode=${$}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return $}function Rr(e){je=e}function Mr(){return Array.from(pe.values()).map(e=>({...e}))}function xr(){pe.clear()}function Cr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let s of Object.keys(r.getters)){let c=r.getters[s]();a[s]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function kr(e,t,n){let r=e.__formaScope;r?.setters[t]&&H(()=>{r.setters[t](n)})}function Nr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=It(n);H(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Dr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:H})),Be}function Lr(e,t){Dr()(e,t)}return Wt(Or);})(); | ||
| //# sourceMappingURL=formajs-runtime.global.js.map |
@@ -1,2 +0,2 @@ | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Ft=Object.prototype.hasOwnProperty;var Pt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ht(t))!Ft.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Ut=e=>Bt(xe({},"__esModule",{value:!0}),e);var Lr={};Pt(Lr,{applyContainmentHints:()=>wt,clearDiagnostics:()=>Mr,destroyRuntime:()=>vr,getDiagnostics:()=>Rr,getScopes:()=>xr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>Er,reconcile:()=>Dr,resetScope:()=>kr,setDebug:()=>Sr,setDiagnostics:()=>_r,setDirectiveMap:()=>cr,setScopeValue:()=>Cr,setUnsafeEval:()=>Ar,setUnsafeEvalMode:()=>Tr,unmount:()=>yr,yieldToMain:()=>At});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:c};function r(s,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===s)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===s){u.version=p,l.depsTail=u;return}let h=s.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=s.subsTail={version:p,dep:s,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:s.subs=E}function i(s,l=s.sub){let p=s.dep,m=s.prevDep,u=s.nextDep,h=s.nextSub,E=s.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(s){let l=s.nextSub,p;e:do{let m=s.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(s,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(s=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((s=l)!==void 0){l=s.nextSub;continue}for(;p!==void 0;)if(s=p.value,p=p.prev,s!==void 0){l=s.nextSub;continue e}break}while(!0)}function o(s,l){let p,m=0,u=!1;e:do{let h=s.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(s.nextSub!==void 0||s.prevSub!==void 0)&&(p={value:s,prev:p}),s=h.deps,l=h,++m;continue}if(!u){let S=s.nextDep;if(S!==void 0){s=S;continue}}for(;m--;){let S=l.subs,w=S.nextSub!==void 0;if(w?(s=p.value,p=p.prev):s=S,u){if(e(l)){w&&c(S),l=s.sub;continue}u=!1}else l.flags&=-33;l=s.sub;let y=s.nextDep;if(y!==void 0){s=y;continue e}}return u}while(!0)}function c(s){do{let l=s.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((s=s.nextSub)!==void 0)}function f(s,l){let p=l.depsTail;for(;p!==void 0;){if(p===s)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Wt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?st(e):ot(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function q(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return Gt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Vt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=q(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return jt.bind(t)}function st(e){++Ee,e.depsTail=void 0,e.flags=5;let t=q(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function ot(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=q(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Vt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(st(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=q(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function Gt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Wt(t),Ce||at())}}else{if(this.flags&16&&ot(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function jt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function zt(e,t,n){if(typeof t!="function"){if(n){let o=q(void 0),c=e();if(q(o),n(c,t))return}e(t);return}let r=q(void 0),i=e();q(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,o=>zt(n,o,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Jt=32;var Kt=[];for(let e=0;e<Jt;e++)Kt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function $(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let s=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<s?l=m+1:p=m}n[l]=s,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let o=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)o[f]=c,c=i[c];return o}var Xt=32;function Yt(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length,p=new Array(s);for(let d=0;d<s;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<s;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length;if(l===0){for(let d=0;d<s;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(s===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(s<Xt)return Yt(e,t,n,r,i,a,o,c,f);let p=new Map;for(let d=0;d<s;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Zt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function Qt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function en(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function tn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",o=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(o);return en(c,f)?"PRESERVE":"RESET"}var Se=null;function nn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Zt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,o=e.attributes;for(let f=0;f<o.length;f++)if(o[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let s=c[f];if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.getAttribute(s.name)!==s.value&&e.setAttribute(s.name,s.value)}for(let f=o.length-1;f>=0;f--){let s=o[f];if(!t.hasAttribute(s.name)){if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.removeAttribute(s.name)}}}function rn(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let o of Array.from(e.childNodes))o.nodeType===Node.TEXT_NODE&&n.push(o);for(let o=0;o<t.childNodes.length;o++){let c=t.childNodes[o];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:o})}if(n.length===r.length){for(let o=0;o<n.length;o++)n[o].textContent!==r[o].node.textContent&&(n[o].textContent=r[o].node.textContent);return}let i=new Set,a=0;for(let{node:o,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==o.textContent&&(f.textContent=o.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(o.textContent??""),f)}for(let o of n)!i.has(o)&&o.parentNode===e&&e.removeChild(o)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}}return null}function Ie(e,t,n){if(Qt(e))return;rn(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,o=[];for(let s of r){if(s.hasAttribute("data-forma-leaving"))continue;let l=s.getAttribute("data-forma-id");l?a.set(l,s):o.push(s)}let c=0,f=new Set;for(let s of i){let l=s.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<o.length;){let m=o[c];if(c++,m.tagName===s.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&s.hasAttribute("data-forma-state"))switch(tn(p,s)){case"PRESERVE":Oe(p,s),Ie(p,s,n);break;case"RESET":n.unmountScope(p),Oe(p,s),on(p,s),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=s.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,s),Ie(p,s,n);an(e,p,s,i)}else{let m=s.cloneNode(!0),u=ln(e,s,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let s of r)if(!f.has(s)){if(s.parentElement!==e||s.hasAttribute("data-forma-leaving"))continue;s.hasAttribute("data-forma-state")&&n.unmountScope(s);let l=s.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(s)}}function on(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function an(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let s=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(s&&s.parentElement===e){e.insertBefore(t,s);return}}}e.appendChild(t)}}function ln(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let o=nn(a),c=document.createElement("div");c.appendChild(o);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let s=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){s=!0;break}}if(f.size>0&&!s){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function $e(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,H="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function cn(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let o=Te(t.getAttribute("data-forma-auto-containment"));o!==void 0&&(e.autoContainment=o)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let o={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:o}))}}catch{}}var pt=We("locked-off");pt&&(H=pt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0),H==="mutable"&&(F=!0));var ee=cn(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&(H=gt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0));H==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var un=ee.autoContainment===!0;function fn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function At(){let e=fn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let o=r[a];if(!o?.style)continue;let c=o.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=o.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",s=o.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=o.style.getPropertyValue("contain"),u=o.style.getPropertyValue("content-visibility"),h=o.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(o.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(o.style.setProperty("content-visibility",f),p=!0),s!=="off"&&(!l||!h)&&(o.style.setProperty("contain-intrinsic-size",s),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var _t=/^'[^']*'$/,Rt=/^"[^"]*"$/,Mt=/^-?\d+(\.\d+)?$/,xt=/^[a-zA-Z_$]\w*$/,dn=/^(\w+)\.(\w+)$/;var mn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,pn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,gn=/^(.+?)\s*\?\?\s*(.+)$/,hn=/^(.+?)\s*&&\s*(.+)$/,bn=/^(.+?)\s*\|\|\s*(.+)$/,vn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,En=/^(.+?)\s*([*/%])\s*(.+)$/,yn=/^(.+?)\s*([+-])\s*(.+)$/,Sn=/^`([^`]*)`$/,Tn=/\$\{([^}]+)\}/g;var An=/^\((.+)\)\.(\w+)\((.*)\)$/,qe=/^\{|\}$/g;var wn=/^\d+$/,_n=/^(\w+)(\+\+|--)$/,Rn=/^(\+\+|--)(\w+)$/,Mn=/^(\w+)\s*=\s*!(\w+)$/,xn=/^(\w+)\s*=\s*(.+)$/,Cn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,kn=/^if\b/,Nn=/^(\w+)\s*=\s*(.+)$/,Dn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Ln=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,On=/^\{item\.?|\}$/g,In=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Hn=2048,ue=new Map;function ce(e,t){if(ue.size>=Hn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Fn=2048;function Pn(e,t){if(fe.size>=Fn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Bn=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function Ct(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Bn)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Un(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(o=>o.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Un(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Wn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,o=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(o,c).trim()),o=c+1)}return t.push(e.slice(o).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,o=!1,c=!1,f=!1;for(let s=t;s<e.length;s++){let l=e[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,s),end:s}}return null}function Vn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,o=!1,c=!1,f=!1,s=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(s){s=!1;continue}if(u==="\\"&&(o||c||f)){s=!0;continue}if(o){u==="'"&&(o=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){o=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let s=ie(t,0,"{","}");if(!s)return null;let l=s.inner.trim(),p=t.slice(s.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,o=!1,c=!1,f=!1;for(let s=0;s<t.length;s++){let l=t[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,s).trim(),rest:t.slice(s+1).trim()}}return{body:t,rest:""}}function Gn(e,t){let n=e.trim();if(!kn.test(n)||In.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let o=n.slice(i.end+1).trim(),c=bt(o);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;o=c.rest.trim();let s=null;if(o.startsWith("else")){o=o.slice(4).trim();let l=bt(o);if(!l||!l.body||(s=Me(l.body,t),!s))return null;o=l.rest.trim()}return o.length>0?null:l=>{$(()=>{a()?f(l):s?.(l)})}}function jn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function kt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,o;for(;(o=a.exec(e))!==null;)n.push(e.slice(i,o.index)),r.push(o[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Pn(e,c),c}var Nt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function zn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let o=kt(a);Nt.set(i,o),i.textContent=Ke(o,t)}}return tr(n,t),n}function Jn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Nt.get(r);i&&(r.textContent=Ke(i,t))}}var Kn=new WeakMap,Xn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Yn(e){for(let t of Xn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,o=t[i%t.length]??0;a+o>r&&(r=a+o)}return r}function Zn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function we(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),o=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),s=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??s??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??s??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(o),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function _e(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,o=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),o!=null&&cancelAnimationFrame(o),c!=null&&cancelAnimationFrame(c),_e(e,r),n())};return Pe(e,t.base),Pe(e,t.from),_e(e,t.to),o=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;_e(e,t.from),Pe(e,t.to);let s=Zn(e,t.durationMs);if(s<=0){f();return}a=window.setTimeout(f,s+25)})}),f}function Qn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function er(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&_e(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let o=G(e);o.token===a&&(e.style.display="none",o.cancel=null)})}function tr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Yn(a.name)&&a.value.includes("{item")){let o=kt(a.value);i.push({attr:a.name,compiled:o}),r.setAttribute(a.name,Ke(o,t))}i.length>0&&Kn.set(r,i)}}function nr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let s=f[0];if(n+=s.length,re.has(s))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:s,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:s,optional:c})}if(n!==e.length||a.length===0)return null;let o=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=o();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let s=c[f.name];if(typeof s!="function")return;let l=f.argFns.map(p=>p());c=s.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=rr(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(xt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(_t.test(e)||Rt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(Mt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(dn);if(i){let a=i[1],o=i[2];ce(e,c=>()=>c.getters[a]?.()?.[o])}}return r}function rr(e,t){e=e.trim();let n=jn(e);if(n!==e)return x(n,t);if(_t.test(e)||Rt.test(e)){let u=e.slice(1,-1);return()=>u}if(Mt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(xt.test(e))return()=>t.getters[e]?.();{let u=nr(e,t);if(u)return u}let r=e.match(An);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let w=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;w.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=w.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(mn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=Ve(h),S=[],w=!0;for(let y of E){let v=x(y.trim(),t);if(!v){w=!1;break}S.push(v)}if(w)return()=>S.map(y=>y())}}let a=e.match(pn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let o=e.match(gn);if(o){let u=x(o[1].trim(),t),h=x(o[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(bn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(hn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let s=e.match(vn);if(s){let u=x(s[1].trim(),t),h=x(s[3].trim(),t);if(u&&h){let E=s[2];return()=>{let S=u(),w=h();switch(E){case"===":return S===w;case"!==":return S!==w;case"==":return S==w;case"!=":return S!=w;case">":return S>w;case"<":return S<w;case">=":return S>=w;case"<=":return S<=w}}}}let l=e.match(yn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),w=h();return E==="+"?S+w:S-w}}}let p=e.match(En);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),w=h();switch(E){case"*":return S*w;case"/":return S/w;case"%":return S%w}}}}let m=e.match(Sn);if(m){let u=m[1],h=[],E=[],S=0,w=new RegExp(Tn.source,"g"),y;for(;(y=w.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=w.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Dt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Lt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(qe,"").trim(),r=Dt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Lt(n));let c=()=>{};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),s=()=>c(f);return r.set(n,s),s}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Gn(n,t);if(r)return r;let i=Vn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{$(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,o=a.match(_n);if(o){let m=o[1],u=o[2];return()=>{$(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Rn);if(c){let m=c[1],u=c[2];return()=>{$(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(Mn);if(f&&f[1]===f[2]){let m=f[1];return()=>{$(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let s=a.match(xn);if(s){let m=s[1],u=x(s[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{$(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(Cn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{$(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function ir(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Dt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Lt(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{$(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function Ot(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function or(e){let t=e.getAttribute("data-forma-state")??"{}",n=Ot(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[o,c]of Object.entries(n)){let[f,s]=te(c);i[o]=f,a[o]=s}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function ar(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:ar(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=$e(t,r);let i=fr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Nn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let o=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(o){let y=X(o,t),v=B(()=>{qn(e,Wn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),er(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>we(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(we(e),e.removeAttribute("data-forma-leaving"),T&&v?Qn(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>we(e))}let s=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(s){let y=s.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||dr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=ir(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let _=C;if(Array.isArray(_.__formaDisposers)){for(let A of _.__formaDisposers)try{A()}catch{}delete _.__formaDisposers}},j=function(C,_){let A=zn(d,C),L=$e(t,{item:C,index:_}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},se=function(C,_,A){D(C),Jn(C,_);let L=$e(t,{item:_,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,w=se;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(On,"").trim():null,T=Fe(e),k=[],R=[],oe=T?{onInsert:C=>{let _=C;if(!_.setAttribute)return;let A=G(_);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(_,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(_);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,_)=>{let A=C;if(!A.setAttribute){_();return}D(C),Et(A,T,()=>{_()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))we(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let _=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);se(M,P,I)},void 0,oe),L=new Set(A.nodes);for(let M of _)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>se(I,ve.__item,ve.__idx),void 0,oe),P=new Set(M.nodes);for(let I of _)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Dn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Ln);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let _ of g.split("|").filter(Boolean)){let[A,L]=_.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[se,oe]=te(null);if(t.getters[d]=se,t.setters[d]=oe,R){let[_,A]=te(!1);t.getters[R]=_,t.setters[R]=A}if(D){let[_,A]=te(null);t.getters[D]=_,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(_=>_.json()).then(_=>{oe(_),R&&t.setters[R](!1)}).catch(_=>{D&&t.setters[D](_.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let _=setInterval(ae,j);n.push(()=>clearInterval(_))}}}}var gi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function lr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var V=null;function cr(e){if(!e||Object.keys(e).length===0){V=null;return}V=new Map;for(let t in e)V.set(t,new Set(e[t]))}function ur(){if(!V||V.size===0||V.size>200)return null;let e=[];for(let t of V.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function fr(e){if(!V)return null;let t=e.getAttribute("data-forma-id");return t?V.get(t)??null:null}function dr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=or(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let s=i[f],l=s.getAttribute("data-ref");l&&r.set(l,s)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,s){return r.get(s)??void 0},has(f,s){return r.has(s)}}),Y(e,t,n);let o=0,c=ur();if(c){let f=e.querySelectorAll(c);for(let s=0;s<f.length;s++)Y(f[s],t,n),o++}else{let f=e.querySelectorAll("*");for(let s=0;s<f.length;s++){let l=f[s];lr(l)&&(Y(l,t,n),o++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",o,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,mr=40,me=[],he=!1;function pr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let o=i[a];o.closest("[data-forma-leaving]")||Z(o)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function It(){try{for(;me.length>0;){let e=me.splice(0,mr);for(let t=0;t<e.length;t++)pr(e[t]);me.length>0&&await At()}}finally{he=!1,me.length>0&&!he&&(he=!0,It())}}function gr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,It())}function hr(){if(U)return;U=new MutationObserver(gr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function br(){U&&(U.disconnect(),U=null)}function Ge(){un&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);hr(),O&&N("initRuntime: MutationObserver started")}function vr(){br();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function Er(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function yr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Sr(e){O=e}function Tr(e){H!==e&&(H=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function Ar(e){if(H!=="mutable"){N(`setUnsafeEval ignored (mode=${H}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return H}function _r(e){je=e}function Rr(){return Array.from(pe.values()).map(e=>({...e}))}function Mr(){pe.clear()}function xr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let o of Object.keys(r.getters)){let c=r.getters[o]();a[o]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function Cr(e,t,n){let r=e.__formaScope;r?.setters[t]&&$(()=>{r.setters[t](n)})}function kr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Ot(n);$(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Nr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:$})),Be}function Dr(e,t){Nr()(e,t)}return Ut(Lr);})(); | ||
| var FormaRuntime=(function(exports){'use strict';function Je({update:e,notify:t,unwatched:n}){return {link:r,unlink:i,propagate:a,checkDirty:s,shallowPropagate:c};function r(o,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===o)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===o){u.version=p,l.depsTail=u;return}let h=o.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=o.subsTail={version:p,dep:o,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:o.subs=E;}function i(o,l=o.sub){let p=o.dep,m=o.prevDep,u=o.nextDep,h=o.nextSub,E=o.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(o){let l=o.nextSub,p;e:do{let m=o.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(o,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(o=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((o=l)!==void 0){l=o.nextSub;continue}for(;p!==void 0;)if(o=p.value,p=p.prev,o!==void 0){l=o.nextSub;continue e}break}while(true)}function s(o,l){let p,m=0,u=false;e:do{let h=o.dep,E=h.flags;if(l.flags&16)u=true;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=true;}}else if((E&33)===33){(o.nextSub!==void 0||o.prevSub!==void 0)&&(p={value:o,prev:p}),o=h.deps,l=h,++m;continue}if(!u){let S=o.nextDep;if(S!==void 0){o=S;continue}}for(;m--;){let S=l.subs,_=S.nextSub!==void 0;if(_?(o=p.value,p=p.prev):o=S,u){if(e(l)){_&&c(S),l=o.sub;continue}u=false;}else l.flags&=-33;l=o.sub;let y=o.nextDep;if(y!==void 0){o=y;continue e}}return u}while(true)}function c(o){do{let l=o.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l));}while((o=o.nextSub)!==void 0)}function f(o,l){let p=l.depsTail;for(;p!==void 0;){if(p===o)return true;p=p.prevDep;}return false}}var Ee=0,xe=0,K=0,le=0,z,W=[],{link:Ce,unlink:Ke,propagate:Ot,checkDirty:Xe,shallowPropagate:Ye}=Je({update(e){return e.depsTail!==void 0?rt(e):it(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(true);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r;}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):st.call(e);}});function V(e){let t=z;return z=e,t}function Ze(){++xe;}function Qe(){--xe||ot();}function et(e){return $t.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function tt(e){return Ht.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function nt(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=V(t);n!==void 0&&Ce(t,n,0);try{t.fn();}finally{z=n,t.flags&=-5;}return Ft.bind(t)}function rt(e){++Ee,e.depsTail=void 0,e.flags=5;let t=V(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e);}}function it(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function It(e){let t=e.flags;if(t&16||t&32&&Xe(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=V(e);try{e.fn();}finally{z=n,e.flags&=-5,ye(e);}}else e.flags=2;}function ot(){try{for(;K<le;){let e=W[K];W[K++]=void 0,It(e);}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10;}K=0,le=0;}}function Ht(){let e=this.flags;if(e&16||e&32&&(Xe(this.deps,this)||(this.flags=e&-33,false))){if(rt(this)){let n=this.subs;n!==void 0&&Ye(n);}}else if(!e){this.flags=5;let n=V(this);try{this.value=this.getter();}finally{z=n,this.flags&=-5;}}let t=z;return t!==void 0&&Ce(this,t,Ee),this.value}function $t(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Ot(t),xe||ot());}}else {if(this.flags&16&&it(this)){let n=this.subs;n!==void 0&&Ye(n);}let t=z;for(;t!==void 0;){if(t.flags&3){Ce(this,t,Ee);break}t=t.subs?.sub;}return this.currentValue}}function Ft(){st.call(this);}function st(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ke(e);}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ke(n,e);}function Pt(e,t,n){if(typeof t!="function"){e(t);return}let r=V(void 0),i=e();V(r);let a=t(i);e(a);}function te(e,t){let n=et(e),r=n;return [r,s=>Pt(n,s)]}function B(e){let t=nt(e);return t}function Ne(e){return tt(e)}function H(e){Ze();try{e();}finally{Qe();}}function ct(e){let t=e.length;if(t===0)return [];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let o=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<o?l=m+1:p=m;}n[l]=o,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++;}let s=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)s[f]=c,c=i[c];return s}var Wt=32;function Vt(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length,p=new Array(o);for(let d=0;d<o;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<o;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b;}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);if(o===l){let d=true;for(let g=0;g<l;g++)if(m[g]!==g){d=false;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T;}return {nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ct(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=null;for(let d=l-1;d>=0;d--){let g,b=false;if(m[d]===-1)g=a(n[d]),b=true;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g;}return {nodes:y,items:n}}function De(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length;if(l===0){for(let d=0;d<o;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);return {nodes:[],items:[]}}if(o===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);e.appendChild(b),f?.onInsert?.(b),d[g]=b;}return {nodes:d,items:n}}if(o<Wt)return Vt(e,t,n,r,i,a,s,c,f);let p=new Map;for(let d=0;d<o;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1;}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g);});}else e.removeChild(r[d]);if(o===l){let d=true;for(let g=0;g<l;g++)if(m[g]!==g){d=false;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T;}return {nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ct(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=null;for(let d=l-1;d>=0;d--){let g,b=false;if(m[d]===-1)g=a(n[d]),b=true;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g;}return {nodes:y,items:n}}function qt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10));}return t}function Gt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function ut(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return []}}function jt(e,t){if(e.length!==t.length)return false;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return false;return true}function zt(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return "REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",s=t.getAttribute("data-forma-state")??"{}",c=ut(a),f=ut(s);return jt(c,f)?"PRESERVE":"RESET"}var Se=null;function Jt(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Le(e,t){let n=qt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=false,s=e.attributes;for(let f=0;f<s.length;f++)if(s[f].name.startsWith("data-class:")){a=true;break}let c=t.attributes;for(let f=0;f<c.length;f++){let o=c[f];if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value);}for(let f=s.length-1;f>=0;f--){let o=s[f];if(!t.hasAttribute(o.name)){if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.removeAttribute(o.name);}}}function Kt(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let s of Array.from(e.childNodes))s.nodeType===Node.TEXT_NODE&&n.push(s);for(let s=0;s<t.childNodes.length;s++){let c=t.childNodes[s];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:s});}if(n.length===r.length){for(let s=0;s<n.length;s++)n[s].textContent!==r[s].node.textContent&&(n[s].textContent=r[s].node.textContent);return}let i=new Set,a=0;for(let{node:s,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==s.textContent&&(f.textContent=s.textContent);}else {let f=Xt(e,t,c);e.insertBefore(document.createTextNode(s.textContent??""),f);}for(let s of n)!i.has(s)&&s.parentNode===e&&e.removeChild(s);}function Xt(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}}return null}function Oe(e,t,n){if(Gt(e))return;Kt(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,s=[];for(let o of r){if(o.hasAttribute("data-forma-leaving"))continue;let l=o.getAttribute("data-forma-id");l?a.set(l,o):s.push(o);}let c=0,f=new Set;for(let o of i){let l=o.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<s.length;){let m=s[c];if(c++,m.tagName===o.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&o.hasAttribute("data-forma-state"))switch(zt(p,o)){case "PRESERVE":Le(p,o),Oe(p,o,n);break;case "RESET":n.unmountScope(p),Le(p,o),Yt(p,o),n.mountScope(p);break;case "REPLACE":{n.unmountScope(p);let u=o.cloneNode(true);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Le(p,o),Oe(p,o,n);Zt(e,p,o,i);}else {let m=o.cloneNode(true),u=Qt(e,o,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E);}}for(let o of r)if(!f.has(o)){if(o.parentElement!==e||o.hasAttribute("data-forma-leaving"))continue;o.hasAttribute("data-forma-state")&&n.unmountScope(o);let l=o.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(o);}}function Yt(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(true));}function Zt(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let o=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(o&&o.parentElement===e){e.insertBefore(t,o);return}}}e.appendChild(t);}}function Qt(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}return null}function ft(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p);});return}let s=Jt(a),c=document.createElement("div");c.appendChild(s);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p);}let o=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){o=!0;break}}if(f.size>0&&!o){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m);});return}e.batch(()=>{Oe(r,c,e);});}finally{e.reconnectObserver();}}}}var Be=new Map;function St(e){let t=Be.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`);}function Ie(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return {getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=false,$="mutable",F=false,qe=true;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e);}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return true;if(t==="0"||t==="false"||t==="off"||t==="no")return false}function Ue(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return "mutable";if(t==="locked-off"||t==="off"||t==="disabled")return "locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return "locked-on"}function en(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=Ue(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n);}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment);}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=Ue(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let s=Te(t.getAttribute("data-forma-auto-containment"));s!==void 0&&(e.autoContainment=s);}}return e}function ne(e,t,n){if(!qe)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let s={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:s}));}}catch{}}var dt=Ue("locked-off");dt&&($=dt,$==="locked-off"&&(F=false),$==="locked-on"&&(F=true),$==="mutable"&&(F=true));var ee=en(),mt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;mt&&($=mt,$==="locked-off"&&(F=false),$==="locked-on"&&(F=true));$==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(qe=ee.diagnostics);var tn=ee.autoContainment===true;function nn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function rn(){let e=nn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0));}function on(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let s=r[a];if(!s?.style)continue;let c=s.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=s.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",o=s.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===true,p=false,m=s.style.getPropertyValue("contain"),u=s.style.getPropertyValue("content-visibility"),h=s.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(s.style.setProperty("contain",c),p=true),f!=="off"&&(!l||!u)&&(s.style.setProperty("content-visibility",f),p=true),o!=="off"&&(!l||!h)&&(s.style.setProperty("contain-intrinsic-size",o),p=true),p&&i++;}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var At=/^'[^']*'$/,_t=/^"[^"]*"$/,wt=/^-?\d+(\.\d+)?$/,Rt=/^[a-zA-Z_$]\w*$/,sn=/^(\w+)\.(\w+)$/;var an=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,ln=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,cn=/^(.+?)\s*\?\?\s*(.+)$/,un=/^(.+?)\s*&&\s*(.+)$/,fn=/^(.+?)\s*\|\|\s*(.+)$/,dn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,mn=/^(.+?)\s*([*/%])\s*(.+)$/,pn=/^(.+?)\s*([+-])\s*(.+)$/,gn=/^`([^`]*)`$/,hn=/\$\{([^}]+)\}/g;var bn=/^\((.+)\)\.(\w+)\((.*)\)$/,We=/^\{|\}$/g;var vn=/^\d+$/,En=/^(\w+)(\+\+|--)$/,yn=/^(\+\+|--)(\w+)$/,Sn=/^(\w+)\s*=\s*!(\w+)$/,Tn=/^(\w+)\s*=\s*(.+)$/,An=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,_n=/^if\b/,wn=/^(\w+)\s*=\s*(.+)$/,Rn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Mn=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,xn=/^\{item\.?|\}$/g,Cn=/\bevent\s*[.([]|\$event\b/,kn=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Nn=2048,ue=new Map;function ce(e,t){if(ue.size>=Nn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n);}ue.set(e,t);}var Ge=new WeakMap,je=new WeakMap,fe=new Map,Dn=2048;function Ln(e,t){if(fe.size>=Dn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n);}fe.set(e,t);}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]);(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")});}return e})();var pt=Symbol.for("forma-text-binding-cache");function Hn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function $n(e,t){let n=e[pt];if(n||(n={initialized:false,last:"",node:null},e[pt]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else {e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=true;return}r.data=t,n.last=t,n.initialized=true;}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=false,i=false,a=false,s=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=false;continue}if(f==="\\"){a=true;continue}if(r){f==="'"&&(r=false);continue}if(i){f==='"'&&(i=false);continue}if(f==="'"){r=true;continue}if(f==='"'){i=true;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(s,c).trim()),s=c+1);}return t.push(e.slice(s).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=false,s=false,c=false,f=false;for(let o=t;o<e.length;o++){let l=e[o];if(f){f=false;continue}if(l==="\\"&&(a||s||c)){f=true;continue}if(a){l==="'"&&(a=false);continue}if(s){l==='"'&&(s=false);continue}if(c){l==="`"&&(c=false);continue}if(l==="'"){a=true;continue}if(l==='"'){s=true;continue}if(l==="`"){c=true;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return {inner:e.slice(t+1,o),end:o}}return null}function Fn(e){let t=e.trim();if(!t)return [];let n=[],r=0,i=0,a=0,s=false,c=false,f=false,o=false,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(o){o=false;continue}if(u==="\\"&&(s||c||f)){o=true;continue}if(s){u==="'"&&(s=false);continue}if(c){u==='"'&&(c=false);continue}if(f){u==="`"&&(f=false);continue}if(u==="'"){s=true;continue}if(u==='"'){c=true;continue}if(u==="`"){f=true;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1;}}let p=t.slice(l).trim();return p&&n.push(p),n}function gt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let o=ie(t,0,"{","}");if(!o)return null;let l=o.inner.trim(),p=t.slice(o.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=false,s=false,c=false,f=false;for(let o=0;o<t.length;o++){let l=t[o];if(f){f=false;continue}if(l==="\\"&&(a||s||c)){f=true;continue}if(a){l==="'"&&(a=false);continue}if(s){l==='"'&&(s=false);continue}if(c){l==="`"&&(c=false);continue}if(l==="'"){a=true;continue}if(l==='"'){s=true;continue}if(l==="`"){c=true;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return {body:t.slice(0,o).trim(),rest:t.slice(o+1).trim()}}return {body:t,rest:""}}function Pn(e,t){let n=e.trim();if(!_n.test(n)||Cn.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let s=n.slice(i.end+1).trim(),c=gt(s);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;s=c.rest.trim();let o=null;if(s.startsWith("else")){s=s.slice(4).trim();let l=gt(s);if(!l||!l.body||(o=Me(l.body,t),!o))return null;s=l.rest.trim();}return s.length>0?null:l=>{H(()=>{a()?f(l):o?.(l);});}}function Bn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r;}return t}function xt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,s;for(;(s=a.exec(e))!==null;)n.push(e.slice(i,s.index)),r.push(s[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Ln(e,c),c}var Ct=new WeakMap;function ze(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??"";}return n}function Un(e,t){let n=e.cloneNode(true),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let s=xt(a);Ct.set(i,s),i.textContent=ze(s,t);}}return Kn(n,t),n}function Wn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Ct.get(r);i&&(r.textContent=ze(i,t));}}var Vn=new WeakMap,qn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Gn(e){for(let t of qn)if(e===t||e.startsWith(t))return true;return false}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r);}return {classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function ht(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,s=t[i%t.length]??0;a+s>r&&(r=a+s);}return r}function jn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=ht(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=ht(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function _e(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re];}function $e(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),s=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),o=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??o??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??o??void 0;return {enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(s),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function we(e,t){for(let n of t)e.classList.remove(n);}function Fe(e,t){for(let n of t)e.classList.add(n);}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=false,a=null,s=null,c=null,f=()=>{i||(i=true,a!=null&&window.clearTimeout(a),s!=null&&cancelAnimationFrame(s),c!=null&&cancelAnimationFrame(c),we(e,r),n());};return Fe(e,t.base),Fe(e,t.from),we(e,t.to),s=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;we(e,t.from),Fe(e,t.to);let o=jn(e,t.durationMs);if(o<=0){f();return}a=window.setTimeout(f,o+25);});}),f}function zn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null);});}function bt(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n();});}function Jn(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&we(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null);});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let s=G(e);s.token===a&&(e.style.display="none",s.cancel=null);});}function Kn(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Gn(a.name)&&a.value.includes("{item")){let s=xt(a.value);i.push({attr:a.name,compiled:s}),r.setAttribute(a.name,ze(s,t));}i.length>0&&Vn.set(r,i);}}function Xn(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=false;if(e[n]==="?"&&e[n+1]===".")c=true,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let o=f[0];if(n+=o.length,re.has(o))return ()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h);}a.push({type:"call",name:o,optional:c,argFns:m}),n=l.end+1;}else a.push({type:"prop",name:o,optional:c});}if(n!==e.length||a.length===0)return null;let s=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return ()=>{let c=s();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else {let o=c[f.name];if(typeof o!="function")return;let l=f.argFns.map(p=>p());c=o.apply(c,l);}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=Yn(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?true:e==="false"?false:e==="null"?null:void 0;ce(e,()=>()=>i);}else if(Rt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(At.test(e)||_t.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i);}else if(wt.test(e)){let i=Number(e);ce(e,()=>()=>i);}else {let i=e.match(sn);if(i){let a=i[1],s=i[2];ce(e,c=>()=>c.getters[a]?.()?.[s]);}}return r}function Yn(e,t){e=e.trim();let n=Bn(e);if(n!==e)return x(n,t);if(At.test(e)||_t.test(e)){let u=e.slice(1,-1);return ()=>u}if(wt.test(e)){let u=Number(e);return ()=>u}if(e==="true")return ()=>true;if(e==="false")return ()=>false;if(e==="null")return ()=>null;if(e==="undefined")return ()=>{};if(Rt.test(e))return ()=>t.getters[e]?.();{let u=Xn(e,t);if(u)return u}let r=e.match(bn);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return ()=>{};let S=x(u,t);if(!S)return null;let _=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;_.push(v);}return ()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=_.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return ()=>!u()}let i=e.match(an);if(i){let u=x(i[1],t),h,E=i[2];if(vn.test(E)?h=Number(E):h=E.slice(1,-1),u)return ()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return ()=>[];let E=Ve(h),S=[],_=true;for(let y of E){let v=x(y.trim(),t);if(!v){_=false;break}S.push(v);}if(_)return ()=>S.map(y=>y())}}let a=e.match(ln);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return ()=>u()?h():E()}let s=e.match(cn);if(s){let u=x(s[1].trim(),t),h=x(s[2].trim(),t);if(u&&h)return ()=>u()??h()}let c=e.match(fn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return ()=>u()||h()}let f=e.match(un);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return ()=>u()&&h()}let o=e.match(dn);if(o){let u=x(o[1].trim(),t),h=x(o[3].trim(),t);if(u&&h){let E=o[2];return ()=>{let S=u(),_=h();switch(E){case "===":return S===_;case "!==":return S!==_;case "==":return S==_;case "!=":return S!=_;case ">":return S>_;case "<":return S<_;case ">=":return S>=_;case "<=":return S<=_}}}}let l=e.match(pn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return ()=>{let S=u(),_=h();return E==="+"?S+_:S-_}}}let p=e.match(mn);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return ()=>{let S=u(),_=h();switch(E){case "*":return S*_;case "/":return S/_;case "%":return S%_}}}}let m=e.match(gn);if(m){let u=m[1],h=[],E=[],S=0,_=new RegExp(hn.source,"g"),y;for(;(y=_.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=_.lastIndex;}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function kt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Nt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(We,"").trim(),r=kt(Ge,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;{N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Nt(n));let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Pn(n,t);if(r)return r;let i=Fn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{H(()=>{for(let h of m)h(u);});}:null}let a=i[0]??n,s=a.match(En);if(s){let m=s[1],u=s[2];return ()=>{H(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1);});}}let c=a.match(yn);if(c){let m=c[1],u=c[2];return ()=>{H(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1);});}}let f=a.match(Sn);if(f&&f[1]===f[2]){let m=f[1];return ()=>{H(()=>{t.setters[m]?.(!t.getters[m]?.());});}}let o=a.match(Tn);if(o){let m=o[1],u=x(o[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{H(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h);});}}let l=a.match(An);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return ()=>{H(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case "+=":t.setters[m]?.(E+S);break;case "-=":t.setters[m]?.(E-S);break;case "*=":t.setters[m]?.(E*S);break;case "/=":t.setters[m]?.(E/S);break}});}}let p=a.match(kn);if(p){let m=p[1];return ()=>St(m)}return null}function Zn(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim());}let r=kt(je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:true};return r.set(n,c),c}{N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Nt(n));let c={handler:()=>{},supported:false};return r.set(n,c),c}}var Qn=new Set(["__proto__","constructor","prototype"]);function Dt(e){let t;try{t=JSON.parse(e);}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of Qn)n in t&&delete t[n];return t}function er(e){let t=e.getAttribute("data-forma-state")??"{}",n=Dt(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[s,c]of Object.entries(n)){let[f,o]=te(c);i[s]=f,a[s]=o;}return i.$refetch=()=>St,{getters:i,setters:a}}var vt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function tr(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!vt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!vt.has(n)?false:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:tr(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:true,composed:true,detail:v}));}};t=Ie(t,r);let i=ir(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(wn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=Ne(R);t.getters[b]=D,k||delete t.setters[b];}}}let s=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(s){let y=X(s,t),v=B(()=>{$n(e,Hn(y()));});n.push(v);}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=$e(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`);}let d=false,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),Jn(e,b,v,!d),d=true;});n.push(g),v&&n.push(()=>_e(e));}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=$e(e),d=document.createComment("forma-if"),g=e.parentNode,b=true,T=false,k=B(()=>{let R=!!y();R&&!b?(_e(e),e.removeAttribute("data-forma-leaving"),T&&v?zn(e,g,d,v):g?.insertBefore(e,d),b=true):!R&&b&&(T&&v?bt(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove());}):(g?.insertBefore(d,e),e.remove()),b=false),T=true;});n.push(k),v&&n.push(()=>_e(e));}let o=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(o){let y=o.replace(We,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"");});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value);};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k);});}}let l=!i||or(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=Zn(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`);}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D);};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R);});}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T);});}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b());});n.push(T);}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===false?e.removeAttribute(g):e.setAttribute(g,String(k));});n.push(T);}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(We,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T));}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()));}catch{}});n.push(b);}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let w=C;if(Array.isArray(w.__formaDisposers)){for(let A of w.__formaDisposers)try{A();}catch{}delete w.__formaDisposers;}},j=function(C,w){let A=Un(d,C),L=Ie(t,{item:C,index:w}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},oe=function(C,w,A){D(C),Wn(C,w);let L=Ie(t,{item:w,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M;};let d=v.cloneNode(true);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(xn,"").trim():null,T=$e(e),k=[],R=[],se=T?{onInsert:C=>{let w=C;if(!w.setAttribute)return;let A=G(w);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(w,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(w);M.token===L&&(M.cancel=null);});},onBeforeRemove:(C,w)=>{let A=C;if(!A.setAttribute){w();return}D(C),bt(A,T,()=>{w();});}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))_e(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L);}let w=new Set(R);if(b){let A=De(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);oe(M,P,I);},void 0,se),L=new Set(A.nodes);for(let M of w)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M);}k=A.items,R=A.nodes;}else {let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=De(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>oe(I,ve.__item,ve.__idx),void 0,se),P=new Set(M.nodes);for(let I of w)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I);}k=M.items,R=M.nodes;}});n.push(ae);}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Rn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Mn);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let w of g.split("|").filter(Boolean)){let[A,L]=w.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10));}let[oe,se]=te(null);if(t.getters[d]=oe,t.setters[d]=se,R){let[w,A]=te(false);t.getters[R]=w,t.setters[R]=A;}if(D){let[w,A]=te(null);t.getters[D]=w,t.setters[D]=A;}let ae=()=>{R&&t.setters[R](true),fetch(T,{method:b}).then(w=>w.json()).then(w=>{se(w),R&&t.setters[R](false);}).catch(w=>{D&&t.setters[D](w.message),R&&t.setters[R](false);});},C=e.getAttribute("data-fetch-id");if(C&&(Be.set(C,ae),n.push(()=>Be.delete(C))),ae(),j&&j>0){let w=setInterval(ae,j);n.push(()=>clearInterval(w));}}}}function nr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return true}return false}var q=null;function zr(e){if(!e||Object.keys(e).length===0){q=null;return}q=new Map;for(let t in e)q.set(t,new Set(e[t]));}function rr(){if(!q||q.size===0||q.size>200)return null;let e=[];for(let t of q.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function ir(e){if(!q)return null;let t=e.getAttribute("data-forma-id");return t?q.get(t)??null:null}function or(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return true;return false}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=er(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let o=i[f],l=o.getAttribute("data-ref");l&&r.set(l,o);}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,o){return r.get(o)??void 0},has(f,o){return r.has(o)}}),Y(e,t,n);let s=0,c=rr();if(c){let f=e.querySelectorAll(c);for(let o=0;o<f.length;o++)Y(f[o],t,n),s++;}else {let f=e.querySelectorAll("*");for(let o=0;o<f.length;o++){let l=f[o];nr(l)&&(Y(l,t,n),s++);}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",s,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)");}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n();}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState;}}var U=null,Et=1,sr=40,me=[],he=false;function ar(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==Et)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a]);}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==Et)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let s=i[a];s.closest("[data-forma-leaving]")||Z(s);}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t);}}async function Lt(){try{for(;me.length>0;){let e=me.splice(0,sr);for(let t=0;t<e.length;t++)ar(e[t]);me.length>0&&await rn();}}finally{he=false,me.length>0&&!he&&(he=true,Lt());}}function lr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=true,Lt());}function cr(){if(U)return;U=new MutationObserver(lr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:true,subtree:true,attributes:true,attributeFilter:["data-forma-state"]});}function ur(){U&&(U.disconnect(),U=null);}function yt(){tn&&on(document,{skipIfAlreadySet:true});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);cr(),O&&N("initRuntime: MutationObserver started");}function Jr(){ur();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t);}function Kr(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n);}function Xr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n);}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",yt):yt());function Yr(e){O=e;}function Zr(e){$!==e&&($=e,e==="locked-off"&&(F=false),e==="locked-on"&&(F=true),e==="mutable"&&(F=true),Ge=new WeakMap,je=new WeakMap);}function Qr(e){if($!=="mutable"){N(`setUnsafeEval ignored (mode=${$}); unsafe fallback is locked`);return}F!==e&&(F=e,Ge=new WeakMap,je=new WeakMap);}function ei(){return $}function ti(e){qe=e;}function ni(){return Array.from(pe.values()).map(e=>({...e}))}function ri(){pe.clear();}function ii(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let s of Object.keys(r.getters)){let c=r.getters[s]();a[s]={value:c,type:typeof c};}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"});}return t}function oi(e,t,n){let r=e.__formaScope;r?.setters[t]&&H(()=>{r.setters[t](n);});}function si(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Dt(n);H(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a);});}var Pe=null;function fr(){return Pe||(Pe=ft({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect();},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:true,subtree:true,attributes:true,attributeFilter:["data-forma-state"]});}},batch:H})),Pe}function ai(e,t){fr()(e,t);}exports.applyContainmentHints=on;exports.clearDiagnostics=ri;exports.destroyRuntime=Jr;exports.getDiagnostics=ni;exports.getScopes=ii;exports.getUnsafeEvalMode=ei;exports.initRuntime=yt;exports.mount=Kr;exports.reconcile=ai;exports.resetScope=si;exports.setDebug=Yr;exports.setDiagnostics=ti;exports.setDirectiveMap=zr;exports.setScopeValue=oi;exports.setUnsafeEval=Qr;exports.setUnsafeEvalMode=Zr;exports.unmount=Xr;exports.yieldToMain=rn;return exports;})({});//# sourceMappingURL=formajs-runtime-hardened.global.js.map | ||
| //# sourceMappingURL=formajs-runtime-hardened.global.js.map |
@@ -1,2 +0,2 @@ | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var Ft=Object.prototype.hasOwnProperty;var Pt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ht(t))!Ft.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Ut=e=>Bt(xe({},"__esModule",{value:!0}),e);var Lr={};Pt(Lr,{applyContainmentHints:()=>wt,clearDiagnostics:()=>Mr,destroyRuntime:()=>vr,getDiagnostics:()=>Rr,getScopes:()=>xr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>Er,reconcile:()=>Dr,resetScope:()=>kr,setDebug:()=>Sr,setDiagnostics:()=>_r,setDirectiveMap:()=>cr,setScopeValue:()=>Cr,setUnsafeEval:()=>Ar,setUnsafeEvalMode:()=>Tr,unmount:()=>yr,yieldToMain:()=>At});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:c};function r(s,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===s)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===s){u.version=p,l.depsTail=u;return}let h=s.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=s.subsTail={version:p,dep:s,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:s.subs=E}function i(s,l=s.sub){let p=s.dep,m=s.prevDep,u=s.nextDep,h=s.nextSub,E=s.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(s){let l=s.nextSub,p;e:do{let m=s.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(s,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(s=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((s=l)!==void 0){l=s.nextSub;continue}for(;p!==void 0;)if(s=p.value,p=p.prev,s!==void 0){l=s.nextSub;continue e}break}while(!0)}function o(s,l){let p,m=0,u=!1;e:do{let h=s.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(s.nextSub!==void 0||s.prevSub!==void 0)&&(p={value:s,prev:p}),s=h.deps,l=h,++m;continue}if(!u){let S=s.nextDep;if(S!==void 0){s=S;continue}}for(;m--;){let S=l.subs,w=S.nextSub!==void 0;if(w?(s=p.value,p=p.prev):s=S,u){if(e(l)){w&&c(S),l=s.sub;continue}u=!1}else l.flags&=-33;l=s.sub;let y=s.nextDep;if(y!==void 0){s=y;continue e}}return u}while(!0)}function c(s){do{let l=s.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((s=s.nextSub)!==void 0)}function f(s,l){let p=l.depsTail;for(;p!==void 0;){if(p===s)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Wt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?st(e):ot(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function q(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return Gt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Vt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=q(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return jt.bind(t)}function st(e){++Ee,e.depsTail=void 0,e.flags=5;let t=q(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function ot(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=q(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Vt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(st(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=q(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function Gt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Wt(t),Ce||at())}}else{if(this.flags&16&&ot(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function jt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function zt(e,t,n){if(typeof t!="function"){if(n){let o=q(void 0),c=e();if(q(o),n(c,t))return}e(t);return}let r=q(void 0),i=e();q(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,o=>zt(n,o,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Jt=32;var Kt=[];for(let e=0;e<Jt;e++)Kt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function $(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let s=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<s?l=m+1:p=m}n[l]=s,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let o=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)o[f]=c,c=i[c];return o}var Xt=32;function Yt(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length,p=new Array(s);for(let d=0;d<s;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<s;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,o,c,f){let s=t.length,l=n.length;if(l===0){for(let d=0;d<s;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(s===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(s<Xt)return Yt(e,t,n,r,i,a,o,c,f);let p=new Map;for(let d=0;d<s;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(s);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<s;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(s===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];o(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),w=new Uint8Array(l);for(let d of S)w[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],o(g,n[d]),w[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Zt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function Qt(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function en(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function tn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",o=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(o);return en(c,f)?"PRESERVE":"RESET"}var Se=null;function nn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Zt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,o=e.attributes;for(let f=0;f<o.length;f++)if(o[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let s=c[f];if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.getAttribute(s.name)!==s.value&&e.setAttribute(s.name,s.value)}for(let f=o.length-1;f>=0;f--){let s=o[f];if(!t.hasAttribute(s.name)){if(s.name==="style"&&r||s.name==="class"&&a||(s.name==="value"||s.name==="checked")&&i||n.has(s.name))continue;e.removeAttribute(s.name)}}}function rn(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let o of Array.from(e.childNodes))o.nodeType===Node.TEXT_NODE&&n.push(o);for(let o=0;o<t.childNodes.length;o++){let c=t.childNodes[o];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:o})}if(n.length===r.length){for(let o=0;o<n.length;o++)n[o].textContent!==r[o].node.textContent&&(n[o].textContent=r[o].node.textContent);return}let i=new Set,a=0;for(let{node:o,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==o.textContent&&(f.textContent=o.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(o.textContent??""),f)}for(let o of n)!i.has(o)&&o.parentNode===e&&e.removeChild(o)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}}return null}function Ie(e,t,n){if(Qt(e))return;rn(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,o=[];for(let s of r){if(s.hasAttribute("data-forma-leaving"))continue;let l=s.getAttribute("data-forma-id");l?a.set(l,s):o.push(s)}let c=0,f=new Set;for(let s of i){let l=s.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<o.length;){let m=o[c];if(c++,m.tagName===s.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&s.hasAttribute("data-forma-state"))switch(tn(p,s)){case"PRESERVE":Oe(p,s),Ie(p,s,n);break;case"RESET":n.unmountScope(p),Oe(p,s),on(p,s),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=s.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,s),Ie(p,s,n);an(e,p,s,i)}else{let m=s.cloneNode(!0),u=ln(e,s,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let s of r)if(!f.has(s)){if(s.parentElement!==e||s.hasAttribute("data-forma-leaving"))continue;s.hasAttribute("data-forma-state")&&n.unmountScope(s);let l=s.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(s)}}function on(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function an(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let s=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(s&&s.parentElement===e){e.insertBefore(t,s);return}}}e.appendChild(t)}}function ln(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let o=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(o&&o.parentElement===e)return o}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let o=nn(a),c=document.createElement("div");c.appendChild(o);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let s=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){s=!0;break}}if(f.size>0&&!s){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function $e(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,H="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function cn(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let o=Te(t.getAttribute("data-forma-auto-containment"));o!==void 0&&(e.autoContainment=o)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let o={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:o}))}}catch{}}var pt=We("mutable");pt&&(H=pt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0),H==="mutable"&&(F=!0));var ee=cn(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&(H=gt,H==="locked-off"&&(F=!1),H==="locked-on"&&(F=!0));H==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var un=ee.autoContainment===!0;function fn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function At(){let e=fn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let o=r[a];if(!o?.style)continue;let c=o.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=o.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",s=o.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=o.style.getPropertyValue("contain"),u=o.style.getPropertyValue("content-visibility"),h=o.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(o.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(o.style.setProperty("content-visibility",f),p=!0),s!=="off"&&(!l||!h)&&(o.style.setProperty("contain-intrinsic-size",s),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var _t=/^'[^']*'$/,Rt=/^"[^"]*"$/,Mt=/^-?\d+(\.\d+)?$/,xt=/^[a-zA-Z_$]\w*$/,dn=/^(\w+)\.(\w+)$/;var mn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,pn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,gn=/^(.+?)\s*\?\?\s*(.+)$/,hn=/^(.+?)\s*&&\s*(.+)$/,bn=/^(.+?)\s*\|\|\s*(.+)$/,vn=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,En=/^(.+?)\s*([*/%])\s*(.+)$/,yn=/^(.+?)\s*([+-])\s*(.+)$/,Sn=/^`([^`]*)`$/,Tn=/\$\{([^}]+)\}/g;var An=/^\((.+)\)\.(\w+)\((.*)\)$/,qe=/^\{|\}$/g;var wn=/^\d+$/,_n=/^(\w+)(\+\+|--)$/,Rn=/^(\+\+|--)(\w+)$/,Mn=/^(\w+)\s*=\s*!(\w+)$/,xn=/^(\w+)\s*=\s*(.+)$/,Cn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,kn=/^if\b/,Nn=/^(\w+)\s*=\s*(.+)$/,Dn=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,Ln=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,On=/^\{item\.?|\}$/g,In=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Hn=2048,ue=new Map;function ce(e,t){if(ue.size>=Hn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Fn=2048;function Pn(e,t){if(fe.size>=Fn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Bn=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function Ct(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Bn)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Un(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(o=>o.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Un(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Wn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function Ve(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,o=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(o,c).trim()),o=c+1)}return t.push(e.slice(o).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,o=!1,c=!1,f=!1;for(let s=t;s<e.length;s++){let l=e[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,s),end:s}}return null}function Vn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,o=!1,c=!1,f=!1,s=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(s){s=!1;continue}if(u==="\\"&&(o||c||f)){s=!0;continue}if(o){u==="'"&&(o=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){o=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let s=ie(t,0,"{","}");if(!s)return null;let l=s.inner.trim(),p=t.slice(s.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,o=!1,c=!1,f=!1;for(let s=0;s<t.length;s++){let l=t[s];if(f){f=!1;continue}if(l==="\\"&&(a||o||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(o){l==='"'&&(o=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){o=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,s).trim(),rest:t.slice(s+1).trim()}}return{body:t,rest:""}}function Gn(e,t){let n=e.trim();if(!kn.test(n)||In.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let o=n.slice(i.end+1).trim(),c=bt(o);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;o=c.rest.trim();let s=null;if(o.startsWith("else")){o=o.slice(4).trim();let l=bt(o);if(!l||!l.body||(s=Me(l.body,t),!s))return null;o=l.rest.trim()}return o.length>0?null:l=>{$(()=>{a()?f(l):s?.(l)})}}function jn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function kt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,o;for(;(o=a.exec(e))!==null;)n.push(e.slice(i,o.index)),r.push(o[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Pn(e,c),c}var Nt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function zn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let o=kt(a);Nt.set(i,o),i.textContent=Ke(o,t)}}return tr(n,t),n}function Jn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Nt.get(r);i&&(r.textContent=Ke(i,t))}}var Kn=new WeakMap,Xn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Yn(e){for(let t of Xn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function He(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,o=t[i%t.length]??0;a+o>r&&(r=a+o)}return r}function Zn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function we(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=He(e.getAttribute("data-transition")).classes,r=He(e.getAttribute("data-transition:enter")),i=He(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),o=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),s=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??s??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??s??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(o),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function _e(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,o=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),o!=null&&cancelAnimationFrame(o),c!=null&&cancelAnimationFrame(c),_e(e,r),n())};return Pe(e,t.base),Pe(e,t.from),_e(e,t.to),o=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;_e(e,t.from),Pe(e,t.to);let s=Zn(e,t.durationMs);if(s<=0){f();return}a=window.setTimeout(f,s+25)})}),f}function Qn(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function er(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&_e(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let o=G(e);o.token===a&&(o.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let o=G(e);o.token===a&&(e.style.display="none",o.cancel=null)})}function tr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Yn(a.name)&&a.value.includes("{item")){let o=kt(a.value);i.push({attr:a.name,compiled:o}),r.setAttribute(a.name,Ke(o,t))}i.length>0&&Kn.set(r,i)}}function nr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let s=f[0];if(n+=s.length,re.has(s))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of Ve(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:s,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:s,optional:c})}if(n!==e.length||a.length===0)return null;let o=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=o();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let s=c[f.name];if(typeof s!="function")return;let l=f.argFns.map(p=>p());c=s.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=rr(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(xt.test(e))ce(e,i=>()=>i.getters[e]?.());else if(_t.test(e)||Rt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(Mt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(dn);if(i){let a=i[1],o=i[2];ce(e,c=>()=>c.getters[a]?.()?.[o])}}return r}function rr(e,t){e=e.trim();let n=jn(e);if(n!==e)return x(n,t);if(_t.test(e)||Rt.test(e)){let u=e.slice(1,-1);return()=>u}if(Mt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(xt.test(e))return()=>t.getters[e]?.();{let u=nr(e,t);if(u)return u}let r=e.match(An);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let w=[];for(let y of Ve(E)){let v=x(y,t);if(!v)return null;w.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=w.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(mn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=Ve(h),S=[],w=!0;for(let y of E){let v=x(y.trim(),t);if(!v){w=!1;break}S.push(v)}if(w)return()=>S.map(y=>y())}}let a=e.match(pn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let o=e.match(gn);if(o){let u=x(o[1].trim(),t),h=x(o[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(bn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(hn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let s=e.match(vn);if(s){let u=x(s[1].trim(),t),h=x(s[3].trim(),t);if(u&&h){let E=s[2];return()=>{let S=u(),w=h();switch(E){case"===":return S===w;case"!==":return S!==w;case"==":return S==w;case"!=":return S!=w;case">":return S>w;case"<":return S<w;case">=":return S>=w;case"<=":return S<=w}}}}let l=e.match(yn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),w=h();return E==="+"?S+w:S-w}}}let p=e.match(En);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),w=h();switch(E){case"*":return S*w;case"/":return S/w;case"%":return S%w}}}}let m=e.match(Sn);if(m){let u=m[1],h=[],E=[],S=0,w=new RegExp(Tn.source,"g"),y;for(;(y=w.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=w.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Dt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Lt(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(qe,"").trim(),r=Dt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Lt(n));let c=()=>{};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),s=()=>c(f);return r.set(n,s),s}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=Gn(n,t);if(r)return r;let i=Vn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{$(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,o=a.match(_n);if(o){let m=o[1],u=o[2];return()=>{$(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Rn);if(c){let m=c[1],u=c[2];return()=>{$(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(Mn);if(f&&f[1]===f[2]){let m=f[1];return()=>{$(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let s=a.match(xn);if(s){let m=s[1],u=x(s[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{$(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(Cn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{$(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function ir(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Dt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Lt(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let o=Ct(n);if(o){let c=`Blocked unsafe method "${o}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{$(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function Ot(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function or(e){let t=e.getAttribute("data-forma-state")??"{}",n=Ot(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[o,c]of Object.entries(n)){let[f,s]=te(c);i[o]=f,a[o]=s}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function ar(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:ar(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=$e(t,r);let i=fr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Nn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let o=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(o){let y=X(o,t),v=B(()=>{qn(e,Wn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),er(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>we(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(we(e),e.removeAttribute("data-forma-leaving"),T&&v?Qn(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>we(e))}let s=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(s){let y=s.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||dr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=ir(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(qe,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let _=C;if(Array.isArray(_.__formaDisposers)){for(let A of _.__formaDisposers)try{A()}catch{}delete _.__formaDisposers}},j=function(C,_){let A=zn(d,C),L=$e(t,{item:C,index:_}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},se=function(C,_,A){D(C),Jn(C,_);let L=$e(t,{item:_,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,w=se;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(On,"").trim():null,T=Fe(e),k=[],R=[],oe=T?{onInsert:C=>{let _=C;if(!_.setAttribute)return;let A=G(_);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(_,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(_);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,_)=>{let A=C;if(!A.setAttribute){_();return}D(C),Et(A,T,()=>{_()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))we(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let _=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);se(M,P,I)},void 0,oe),L=new Set(A.nodes);for(let M of _)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>se(I,ve.__item,ve.__idx),void 0,oe),P=new Set(M.nodes);for(let I of _)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Dn);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(Ln);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let _ of g.split("|").filter(Boolean)){let[A,L]=_.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[se,oe]=te(null);if(t.getters[d]=se,t.setters[d]=oe,R){let[_,A]=te(!1);t.getters[R]=_,t.setters[R]=A}if(D){let[_,A]=te(null);t.getters[D]=_,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(_=>_.json()).then(_=>{oe(_),R&&t.setters[R](!1)}).catch(_=>{D&&t.setters[D](_.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let _=setInterval(ae,j);n.push(()=>clearInterval(_))}}}}var gi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function lr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var V=null;function cr(e){if(!e||Object.keys(e).length===0){V=null;return}V=new Map;for(let t in e)V.set(t,new Set(e[t]))}function ur(){if(!V||V.size===0||V.size>200)return null;let e=[];for(let t of V.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function fr(e){if(!V)return null;let t=e.getAttribute("data-forma-id");return t?V.get(t)??null:null}function dr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=or(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let s=i[f],l=s.getAttribute("data-ref");l&&r.set(l,s)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,s){return r.get(s)??void 0},has(f,s){return r.has(s)}}),Y(e,t,n);let o=0,c=ur();if(c){let f=e.querySelectorAll(c);for(let s=0;s<f.length;s++)Y(f[s],t,n),o++}else{let f=e.querySelectorAll("*");for(let s=0;s<f.length;s++){let l=f[s];lr(l)&&(Y(l,t,n),o++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",o,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,mr=40,me=[],he=!1;function pr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let o=i[a];o.closest("[data-forma-leaving]")||Z(o)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function It(){try{for(;me.length>0;){let e=me.splice(0,mr);for(let t=0;t<e.length;t++)pr(e[t]);me.length>0&&await At()}}finally{he=!1,me.length>0&&!he&&(he=!0,It())}}function gr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,It())}function hr(){if(U)return;U=new MutationObserver(gr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function br(){U&&(U.disconnect(),U=null)}function Ge(){un&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);hr(),O&&N("initRuntime: MutationObserver started")}function vr(){br();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function Er(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function yr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Sr(e){O=e}function Tr(e){H!==e&&(H=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function Ar(e){if(H!=="mutable"){N(`setUnsafeEval ignored (mode=${H}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return H}function _r(e){je=e}function Rr(){return Array.from(pe.values()).map(e=>({...e}))}function Mr(){pe.clear()}function xr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let o of Object.keys(r.getters)){let c=r.getters[o]();a[o]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function Cr(e,t,n){let r=e.__formaScope;r?.setters[t]&&$(()=>{r.setters[t](n)})}function kr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=Ot(n);$(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Nr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:$})),Be}function Dr(e,t){Nr()(e,t)}return Ut(Lr);})(); | ||
| "use strict";var FormaRuntime=(()=>{var xe=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ft=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var Bt=(e,t)=>{for(var n in t)xe(e,n,{get:t[n],enumerable:!0})},Ut=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Ft(t))!Pt.call(e,i)&&i!==n&&xe(e,i,{get:()=>t[i],enumerable:!(r=$t(t,i))||r.enumerable});return e};var Wt=e=>Ut(xe({},"__esModule",{value:!0}),e);var Or={};Bt(Or,{applyContainmentHints:()=>wt,clearDiagnostics:()=>xr,destroyRuntime:()=>Er,getDiagnostics:()=>Mr,getScopes:()=>Cr,getUnsafeEvalMode:()=>wr,initRuntime:()=>Ge,mount:()=>yr,reconcile:()=>Lr,resetScope:()=>Nr,setDebug:()=>Tr,setDiagnostics:()=>Rr,setDirectiveMap:()=>ur,setScopeValue:()=>kr,setUnsafeEval:()=>_r,setUnsafeEvalMode:()=>Ar,unmount:()=>Sr,yieldToMain:()=>_t});function Xe({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:s,shallowPropagate:c};function r(o,l,p){let m=l.depsTail;if(m!==void 0&&m.dep===o)return;let u=m!==void 0?m.nextDep:l.deps;if(u!==void 0&&u.dep===o){u.version=p,l.depsTail=u;return}let h=o.subsTail;if(h!==void 0&&h.version===p&&h.sub===l)return;let E=l.depsTail=o.subsTail={version:p,dep:o,sub:l,prevDep:m,nextDep:u,prevSub:h,nextSub:void 0};u!==void 0&&(u.prevDep=E),m!==void 0?m.nextDep=E:l.deps=E,h!==void 0?h.nextSub=E:o.subs=E}function i(o,l=o.sub){let p=o.dep,m=o.prevDep,u=o.nextDep,h=o.nextSub,E=o.prevSub;return u!==void 0?u.prevDep=m:l.depsTail=m,m!==void 0?m.nextDep=u:l.deps=u,h!==void 0?h.prevSub=E:p.subsTail=E,E!==void 0?E.nextSub=h:(p.subs=h)===void 0&&n(p),u}function a(o){let l=o.nextSub,p;e:do{let m=o.sub,u=m.flags;if(u&60?u&12?u&4?!(u&48)&&f(o,m)?(m.flags=u|40,u&=1):u=0:m.flags=u&-9|32:u=0:m.flags=u|32,u&2&&t(m),u&1){let h=m.subs;if(h!==void 0){let E=(o=h).nextSub;E!==void 0&&(p={value:l,prev:p},l=E);continue}}if((o=l)!==void 0){l=o.nextSub;continue}for(;p!==void 0;)if(o=p.value,p=p.prev,o!==void 0){l=o.nextSub;continue e}break}while(!0)}function s(o,l){let p,m=0,u=!1;e:do{let h=o.dep,E=h.flags;if(l.flags&16)u=!0;else if((E&17)===17){if(e(h)){let S=h.subs;S.nextSub!==void 0&&c(S),u=!0}}else if((E&33)===33){(o.nextSub!==void 0||o.prevSub!==void 0)&&(p={value:o,prev:p}),o=h.deps,l=h,++m;continue}if(!u){let S=o.nextDep;if(S!==void 0){o=S;continue}}for(;m--;){let S=l.subs,_=S.nextSub!==void 0;if(_?(o=p.value,p=p.prev):o=S,u){if(e(l)){_&&c(S),l=o.sub;continue}u=!1}else l.flags&=-33;l=o.sub;let y=o.nextDep;if(y!==void 0){o=y;continue e}}return u}while(!0)}function c(o){do{let l=o.sub,p=l.flags;(p&48)===32&&(l.flags=p|16,(p&6)===2&&t(l))}while((o=o.nextSub)!==void 0)}function f(o,l){let p=l.depsTail;for(;p!==void 0;){if(p===o)return!0;p=p.prevDep}return!1}}var Ee=0,Ce=0,K=0,le=0,z,W=[],{link:ke,unlink:Ye,propagate:Vt,checkDirty:Ze,shallowPropagate:Qe}=Xe({update(e){return e.depsTail!==void 0?ot(e):st(e)},notify(e){let t=le,n=t;do if(W[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(le=t;n<--t;){let r=W[n];W[n++]=W[t],W[t]=r}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ye(e)):lt.call(e)}});function V(e){let t=z;return z=e,t}function et(){++Ce}function tt(){--Ce||at()}function nt(e){return jt.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function rt(e){return Gt.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function it(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=V(t);n!==void 0&&ke(t,n,0);try{t.fn()}finally{z=n,t.flags&=-5}return zt.bind(t)}function ot(e){++Ee,e.depsTail=void 0,e.flags=5;let t=V(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{z=t,e.flags&=-5,ye(e)}}function st(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function qt(e){let t=e.flags;if(t&16||t&32&&Ze(e.deps,e)){++Ee,e.depsTail=void 0,e.flags=6;let n=V(e);try{e.fn()}finally{z=n,e.flags&=-5,ye(e)}}else e.flags=2}function at(){try{for(;K<le;){let e=W[K];W[K++]=void 0,qt(e)}}finally{for(;K<le;){let e=W[K];W[K++]=void 0,e.flags|=10}K=0,le=0}}function Gt(){let e=this.flags;if(e&16||e&32&&(Ze(this.deps,this)||(this.flags=e&-33,!1))){if(ot(this)){let n=this.subs;n!==void 0&&Qe(n)}}else if(!e){this.flags=5;let n=V(this);try{this.value=this.getter()}finally{z=n,this.flags&=-5}}let t=z;return t!==void 0&&ke(this,t,Ee),this.value}function jt(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Vt(t),Ce||at())}}else{if(this.flags&16&&st(this)){let n=this.subs;n!==void 0&&Qe(n)}let t=z;for(;t!==void 0;){if(t.flags&3){ke(this,t,Ee);break}t=t.subs?.sub}return this.currentValue}}function zt(){lt.call(this)}function lt(){this.depsTail=void 0,this.flags=0,ye(this);let e=this.subs;e!==void 0&&Ye(e)}function ye(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Ye(n,e)}function Jt(e,t,n){if(typeof t!="function"){if(n){let s=V(void 0),c=e();if(V(s),n(c,t))return}e(t);return}let r=V(void 0),i=e();V(r);let a=t(i);n&&n(i,a)||e(a)}function te(e,t){let n=nt(e),r=n,i=t?.equals;return[r,s=>Jt(n,s,i)]}var Ne=null;function ct(e){Ne&&Ne.disposers.push(e)}function ut(){return Ne!==null}var Kt=32;var Xt=[];for(let e=0;e<Kt;e++)Xt.push([]);function B(e){let t=it(e);return ut()&&ct(t),t}function De(e){return rt(e)}function H(e){et();try{e()}finally{tt()}}function ft(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),r=new Int32Array(t),i=new Int32Array(t).fill(-1),a=0;for(let f=0;f<t;f++){let o=e[f],l=0,p=a;for(;l<p;){let m=l+p>>1;n[m]<o?l=m+1:p=m}n[l]=o,r[l]=f,l>0&&(i[f]=r[l-1]),l>=a&&a++}let s=new Array(a),c=r[a-1];for(let f=a-1;f>=0;f--)s[f]=c,c=i[c];return s}var Yt=32;function Zt(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length,p=new Array(o);for(let d=0;d<o;d++)p[d]=i(t[d]);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=-1;for(let T=0;T<o;T++)if(!u[T]&&p[T]===g){b=T,u[T]=1;break}m[d]=b}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(o===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Le(e,t,n,r,i,a,s,c,f){let o=t.length,l=n.length;if(l===0){for(let d=0;d<o;d++)if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);return{nodes:[],items:[]}}if(o===0){let d=new Array(l);for(let g=0;g<l;g++){let b=a(n[g]);c?e.insertBefore(b,c):e.appendChild(b),f?.onInsert?.(b),d[g]=b}return{nodes:d,items:n}}if(o<Yt)return Zt(e,t,n,r,i,a,s,c,f);let p=new Map;for(let d=0;d<o;d++)p.set(i(t[d]),d);let m=new Array(l),u=new Uint8Array(o);for(let d=0;d<l;d++){let g=i(n[d]),b=p.get(g);b!==void 0?(m[d]=b,u[b]=1):m[d]=-1}for(let d=0;d<o;d++)if(!u[d])if(f?.onBeforeRemove){let g=r[d];f.onBeforeRemove(g,()=>{g.parentNode&&g.parentNode.removeChild(g)})}else e.removeChild(r[d]);if(o===l){let d=!0;for(let g=0;g<l;g++)if(m[g]!==g){d=!1;break}if(d){let g=new Array(l);for(let b=0;b<l;b++){let T=r[b];s(T,n[b]),g[b]=T}return{nodes:g,items:n}}}let h=[],E=[];for(let d=0;d<l;d++)m[d]!==-1&&(h.push(m[d]),E.push(d));let S=ft(h),_=new Uint8Array(l);for(let d of S)_[E[d]]=1;let y=new Array(l),v=c??null;for(let d=l-1;d>=0;d--){let g,b=!1;if(m[d]===-1)g=a(n[d]),b=!0;else if(g=r[m[d]],s(g,n[d]),_[d]){y[d]=g,v=g;continue}v?e.insertBefore(g,v):e.appendChild(g),b&&f?.onInsert?.(g),y[d]=g,v=g}return{nodes:y,items:n}}function Qt(e){let t=new Set,n=e.attributes;for(let r=0;r<n.length;r++){let i=n[r].name;i.startsWith("data-bind:")&&t.add(i.slice(10))}return t}function en(e){return e.hasAttribute("data-list")||e.hasAttribute("data-if")}function dt(e){try{let t=JSON.parse(e);return Object.keys(t).sort()}catch{return[]}}function tn(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function nn(e,t){let n=e.getAttribute("data-module"),r=t.getAttribute("data-module");if(n!==r)return"REPLACE";let a=e.__formaInitialState??e.getAttribute("data-forma-state")??"{}",s=t.getAttribute("data-forma-state")??"{}",c=dt(a),f=dt(s);return tn(c,f)?"PRESERVE":"RESET"}var Se=null;function rn(e){return Se||(Se=document.createElement("template")),Se.innerHTML=e,Se.content}function Oe(e,t){let n=Qt(e),r=e.hasAttribute("data-show"),i=e.hasAttribute("data-model"),a=!1,s=e.attributes;for(let f=0;f<s.length;f++)if(s[f].name.startsWith("data-class:")){a=!0;break}let c=t.attributes;for(let f=0;f<c.length;f++){let o=c[f];if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value)}for(let f=s.length-1;f>=0;f--){let o=s[f];if(!t.hasAttribute(o.name)){if(o.name==="style"&&r||o.name==="class"&&a||(o.name==="value"||o.name==="checked")&&i||n.has(o.name))continue;e.removeAttribute(o.name)}}}function on(e,t){if(e.hasAttribute("data-text"))return;let n=[],r=[];for(let s of Array.from(e.childNodes))s.nodeType===Node.TEXT_NODE&&n.push(s);for(let s=0;s<t.childNodes.length;s++){let c=t.childNodes[s];c.nodeType===Node.TEXT_NODE&&r.push({node:c,index:s})}if(n.length===r.length){for(let s=0;s<n.length;s++)n[s].textContent!==r[s].node.textContent&&(n[s].textContent=r[s].node.textContent);return}let i=new Set,a=0;for(let{node:s,index:c}of r)if(a<n.length){let f=n[a];a++,i.add(f),f.textContent!==s.textContent&&(f.textContent=s.textContent)}else{let f=sn(e,t,c);e.insertBefore(document.createTextNode(s.textContent??""),f)}for(let s of n)!i.has(s)&&s.parentNode===e&&e.removeChild(s)}function sn(e,t,n){for(let r=n+1;r<t.childNodes.length;r++){let i=t.childNodes[r];if(i.nodeType===Node.ELEMENT_NODE){let a=i.getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}}return null}function Ie(e,t,n){if(en(e))return;on(e,t);let r=Array.from(e.children),i=Array.from(t.children),a=new Map,s=[];for(let o of r){if(o.hasAttribute("data-forma-leaving"))continue;let l=o.getAttribute("data-forma-id");l?a.set(l,o):s.push(o)}let c=0,f=new Set;for(let o of i){let l=o.getAttribute("data-forma-id"),p;if(l)p=a.get(l);else for(;c<s.length;){let m=s[c];if(c++,m.tagName===o.tagName&&!f.has(m)){p=m;break}}if(p){if(f.add(p),p.hasAttribute("data-forma-state")&&o.hasAttribute("data-forma-state"))switch(nn(p,o)){case"PRESERVE":Oe(p,o),Ie(p,o,n);break;case"RESET":n.unmountScope(p),Oe(p,o),an(p,o),n.mountScope(p);break;case"REPLACE":{n.unmountScope(p);let u=o.cloneNode(!0);e.replaceChild(u,p),n.mountScope(u),f.delete(p),p=u,f.add(u);break}}else Oe(p,o),Ie(p,o,n);ln(e,p,o,i)}else{let m=o.cloneNode(!0),u=cn(e,o,i);e.insertBefore(m,u),f.add(m),m.hasAttribute("data-forma-state")&&n.mountScope(m);let h=m.querySelectorAll("[data-forma-state]");for(let E of Array.from(h))n.mountScope(E)}}for(let o of r)if(!f.has(o)){if(o.parentElement!==e||o.hasAttribute("data-forma-leaving"))continue;o.hasAttribute("data-forma-state")&&n.unmountScope(o);let l=o.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))n.unmountScope(p);e.removeChild(o)}}function an(e,t){for(;e.firstChild;)e.removeChild(e.firstChild);for(let n of Array.from(t.childNodes))e.appendChild(n.cloneNode(!0))}function ln(e,t,n,r){let i=r.indexOf(n);if(Array.from(e.children).indexOf(t)!==i){let c=r[i+1];if(c){let f=c.getAttribute("data-forma-id");if(f){let o=e.querySelector(`[data-forma-id="${CSS.escape(f)}"]`);if(o&&o.parentElement===e){e.insertBefore(t,o);return}}}e.appendChild(t)}}function cn(e,t,n){let r=n.indexOf(t);for(let i=r+1;i<n.length;i++){let a=n[i].getAttribute("data-forma-id");if(a){let s=e.querySelector(`[data-forma-id="${CSS.escape(a)}"]`);if(s&&s.parentElement===e)return s}}return null}function mt(e){let t="";return function(r,i){let a=i.trim();if(a&&!(a===t&&r.hasChildNodes())){t=a,e.disconnectObserver();try{if(!r.hasChildNodes()||r.children.length===0){r.innerHTML=a,e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let p of Array.from(l))e.mountScope(p)});return}let s=rn(a),c=document.createElement("div");c.appendChild(s);let f=new Set;for(let l of Array.from(r.children)){if(l.hasAttribute("data-forma-leaving"))continue;let p=l.getAttribute("data-forma-id");p&&f.add(p)}let o=!1;if(f.size>0)for(let l of Array.from(c.children)){let p=l.getAttribute("data-forma-id");if(p&&f.has(p)){o=!0;break}}if(f.size>0&&!o){e.batch(()=>{let l=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(l))e.unmountScope(m);r.innerHTML=a;let p=r.querySelectorAll("[data-forma-state]");for(let m of Array.from(p))e.mountScope(m)});return}e.batch(()=>{Ie(r,c,e)})}finally{e.reconnectObserver()}}}}var Ue=new Map;function Tt(e){let t=Ue.get(e);t?t():O&&N(`$refetch: no data-fetch with id "${e}" found`)}function He(e,t){let n=Object.create(null);for(let r of Object.keys(t))n[r]=()=>t[r];return{getters:new Proxy(e.getters,{get(r,i){return i in n?n[i]:r[i]},has(r,i){return i in n||i in r}}),setters:e.setters}}var O=!1,$="mutable",F=!1,je=!0;function N(...e){(O||typeof window<"u"&&window.__FORMA_DEBUG)&&console.log("[FormaJS]",...e)}var pe=new Map;function Te(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="1"||t==="true"||t==="on"||t==="yes")return!0;if(t==="0"||t==="false"||t==="off"||t==="no")return!1}function We(e){if(e==null)return;let t=e.trim().toLowerCase();if(t==="mutable")return"mutable";if(t==="locked-off"||t==="off"||t==="disabled")return"locked-off";if(t==="locked-on"||t==="on"||t==="enabled")return"locked-on"}function un(){let e={};if(typeof window<"u"){let t=window.__FORMA_RUNTIME_CONFIG;if(t){if(typeof t.allowUnsafeEval=="boolean"&&(e.allowUnsafeEval=t.allowUnsafeEval),typeof t.unsafeEvalMode=="string"){let n=We(t.unsafeEvalMode);n&&(e.unsafeEvalMode=n)}typeof t.lockUnsafeEval=="boolean"&&(e.lockUnsafeEval=t.lockUnsafeEval),typeof t.diagnostics=="boolean"&&(e.diagnostics=t.diagnostics),typeof t.autoContainment=="boolean"&&(e.autoContainment=t.autoContainment)}}if(typeof document<"u"){let t=document.currentScript;if(t){let n=Te(t.getAttribute("data-forma-unsafe-eval"));n!==void 0&&(e.allowUnsafeEval=n);let r=We(t.getAttribute("data-forma-unsafe-eval-mode"));r!==void 0&&(e.unsafeEvalMode=r);let i=Te(t.getAttribute("data-forma-lock-unsafe-eval"));i!==void 0&&(e.lockUnsafeEval=i);let a=Te(t.getAttribute("data-forma-diagnostics"));a!==void 0&&(e.diagnostics=a);let s=Te(t.getAttribute("data-forma-auto-containment"));s!==void 0&&(e.autoContainment=s)}}return e}function ne(e,t,n){if(!je)return;let r=`${e}|${n}|${t}`,i=Date.now(),a=pe.get(r);a?(a.count+=1,a.lastSeenAt=i):(pe.set(r,{kind:e,expr:t,reason:n,count:1,firstSeenAt:i,lastSeenAt:i}),console.warn(`[FormaJS] ${n}: ${t}`));try{if(typeof window<"u"){let s={kind:e,expr:t,reason:n,count:pe.get(r)?.count??1};window.dispatchEvent(new CustomEvent("formajs:diagnostic",{detail:s}))}}catch{}}var At=!0,pt=We("mutable");pt&&($=pt,$==="locked-off"&&(F=!1),$==="locked-on"&&(F=!0),$==="mutable"&&(F=!0));var ee=un(),gt=ee.lockUnsafeEval?"locked-off":ee.unsafeEvalMode;gt&&($=gt,$==="locked-off"&&(F=!1),$==="locked-on"&&(F=!0));$==="mutable"&&typeof ee.allowUnsafeEval=="boolean"&&(F=ee.allowUnsafeEval);typeof ee.diagnostics=="boolean"&&(je=ee.diagnostics);var fn=ee.autoContainment===!0;function dn(){let e=globalThis?.scheduler;if(e&&(typeof e.yield=="function"||typeof e.postTask=="function"))return e}async function _t(){let e=dn();if(e?.yield){await e.yield();return}if(e?.postTask){await e.postTask(()=>{},{priority:"background"});return}await new Promise(t=>setTimeout(t,0))}function wt(e=document,t={}){let n=t.selector??"[data-forma-contain]";if(!n||typeof e.querySelectorAll!="function")return 0;let r=e.querySelectorAll(n),i=0;for(let a=0;a<r.length;a++){let s=r[a];if(!s?.style)continue;let c=s.getAttribute("data-forma-contain")??t.contain??"layout style paint",f=s.getAttribute("data-forma-content-visibility")??t.contentVisibility??"auto",o=s.getAttribute("data-forma-contain-intrinsic-size")??t.containIntrinsicSize??"auto 800px",l=t.skipIfAlreadySet===!0,p=!1,m=s.style.getPropertyValue("contain"),u=s.style.getPropertyValue("content-visibility"),h=s.style.getPropertyValue("contain-intrinsic-size");c!=="off"&&(!l||!m)&&(s.style.setProperty("contain",c),p=!0),f!=="off"&&(!l||!u)&&(s.style.setProperty("content-visibility",f),p=!0),o!=="off"&&(!l||!h)&&(s.style.setProperty("contain-intrinsic-size",o),p=!0),p&&i++}return O&&i>0&&N("applyContainmentHints: applied to",i,"element(s)"),i}var Rt=/^'[^']*'$/,Mt=/^"[^"]*"$/,xt=/^-?\d+(\.\d+)?$/,Ct=/^[a-zA-Z_$]\w*$/,mn=/^(\w+)\.(\w+)$/;var pn=/^(\w+)\[(\d+|'[^']*'|"[^"]*")\]$/,gn=/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/,hn=/^(.+?)\s*\?\?\s*(.+)$/,bn=/^(.+?)\s*&&\s*(.+)$/,vn=/^(.+?)\s*\|\|\s*(.+)$/,En=/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/,yn=/^(.+?)\s*([*/%])\s*(.+)$/,Sn=/^(.+?)\s*([+-])\s*(.+)$/,Tn=/^`([^`]*)`$/,An=/\$\{([^}]+)\}/g;var _n=/^\((.+)\)\.(\w+)\((.*)\)$/,Ve=/^\{|\}$/g;var wn=/^\d+$/,Rn=/^(\w+)(\+\+|--)$/,Mn=/^(\+\+|--)(\w+)$/,xn=/^(\w+)\s*=\s*!(\w+)$/,Cn=/^(\w+)\s*=\s*(.+)$/,kn=/^(\w+)\s*(\+=|-=|\*=|\/=)\s*(.+)$/,Nn=/^if\b/,Dn=/^(\w+)\s*=\s*(.+)$/,Ln=/^(.+?)(?:→|->)\s*(\S+)(.*)$/,On=/^(GET|POST|PUT|PATCH|DELETE)\s+(.+)$/i,In=/^\{item\.?|\}$/g,Hn=/\bevent\s*[.([]|\$event\b/,$n=/^\$refetch\(\s*['"]([^'"]+)['"]\s*\)$/,Re=Symbol.for("forma-transition-state"),Fn=2048,ue=new Map;function ce(e,t){if(ue.size>=Fn){let n=ue.keys().next().value;n!==void 0&&ue.delete(n)}ue.set(e,t)}var ze=new WeakMap,Je=new WeakMap,fe=new Map,Pn=2048;function Bn(e,t){if(fe.size>=Pn){let n=fe.keys().next().value;n!==void 0&&fe.delete(n)}fe.set(e,t)}var re=new Set(["constructor","__proto__","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__","eval","Function"]),Un=(()=>{let e=[];for(let t of re){let n=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");e.push({name:t,dotRe:new RegExp(`(?:^|\\.)${n}(?:\\s*\\(|\\s*$|[^\\w$])`,"m"),bracketRe:new RegExp(`\\[\\s*(?:'${n}'|"${n}"|\``+n+"`)\\s*\\]")})}return e})();function kt(e){let t=e.replace(/\/\*[\s\S]*?\*\//g,"");t=t.replace(/\/\/[^\n]*/g,""),t=t.replace(/\s*\.\s*/g,".");for(let{name:n,dotRe:r,bracketRe:i}of Un)if(r.test(t)||i.test(t))return n;if(t.includes("[")){let n=Wn(t);for(let r of n){if(!r.includes("+"))continue;let i=r.match(/['"`]([^'"`]*?)['"`]/g);if(!i)continue;let a=i.map(s=>s.slice(1,-1)).join("");if(re.has(a))return a}}return null}function Wn(e){let t=[],n=0,r=-1;for(let i=0;i<e.length;i++)e[i]==="["?(n===0&&(r=i+1),n++):e[i]==="]"&&(n--,n===0&&r>=0&&(t.push(e.slice(r,i)),r=-1));return t}var ht=Symbol.for("forma-text-binding-cache");function Vn(e){return e==null?"":typeof e=="string"?e:typeof e=="symbol"?e.toString():String(e)}function qn(e,t){let n=e[ht];if(n||(n={initialized:!1,last:"",node:null},e[ht]=n),n.initialized&&n.last===t)return;let r=n.node;if(!r||r.parentNode!==e||e.childNodes.length!==1||e.firstChild!==r)if(e.childNodes.length===1&&e.firstChild?.nodeType===Node.TEXT_NODE)r=e.firstChild,n.node=r;else{e.textContent=t;let i=e.firstChild;n.node=i&&i.nodeType===Node.TEXT_NODE&&e.childNodes.length===1?i:null,n.last=t,n.initialized=!0;return}r.data=t,n.last=t,n.initialized=!0}function qe(e){let t=[];if(e.trim()==="")return t;let n=0,r=!1,i=!1,a=!1,s=0;for(let c=0;c<e.length;c++){let f=e[c];if(a){a=!1;continue}if(f==="\\"){a=!0;continue}if(r){f==="'"&&(r=!1);continue}if(i){f==='"'&&(i=!1);continue}if(f==="'"){r=!0;continue}if(f==='"'){i=!0;continue}if(f==="("){n++;continue}if(f===")"){n>0&&n--;continue}f===","&&n===0&&(t.push(e.slice(s,c).trim()),s=c+1)}return t.push(e.slice(s).trim()),t.filter(Boolean)}function ie(e,t,n,r){if(e[t]!==n)return null;let i=0,a=!1,s=!1,c=!1,f=!1;for(let o=t;o<e.length;o++){let l=e[o];if(f){f=!1;continue}if(l==="\\"&&(a||s||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(s){l==='"'&&(s=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){s=!0;continue}if(l==="`"){c=!0;continue}if(l===n){i++;continue}if(l===r&&(i--,i===0))return{inner:e.slice(t+1,o),end:o}}return null}function Gn(e){let t=e.trim();if(!t)return[];let n=[],r=0,i=0,a=0,s=!1,c=!1,f=!1,o=!1,l=0;for(let m=0;m<t.length;m++){let u=t[m];if(o){o=!1;continue}if(u==="\\"&&(s||c||f)){o=!0;continue}if(s){u==="'"&&(s=!1);continue}if(c){u==='"'&&(c=!1);continue}if(f){u==="`"&&(f=!1);continue}if(u==="'"){s=!0;continue}if(u==='"'){c=!0;continue}if(u==="`"){f=!0;continue}if(u==="("?r++:u===")"&&r>0?r--:u==="{"?i++:u==="}"&&i>0?i--:u==="["?a++:u==="]"&&a>0&&a--,u===";"&&r===0&&i===0&&a===0){let h=t.slice(l,m).trim();h&&n.push(h),l=m+1}}let p=t.slice(l).trim();return p&&n.push(p),n}function bt(e){let t=e.trim();if(!t)return null;if(t.startsWith("{")){let o=ie(t,0,"{","}");if(!o)return null;let l=o.inner.trim(),p=t.slice(o.end+1).trim();return p.startsWith(";")&&(p=p.slice(1).trim()),{body:l,rest:p}}let n=0,r=0,i=0,a=!1,s=!1,c=!1,f=!1;for(let o=0;o<t.length;o++){let l=t[o];if(f){f=!1;continue}if(l==="\\"&&(a||s||c)){f=!0;continue}if(a){l==="'"&&(a=!1);continue}if(s){l==='"'&&(s=!1);continue}if(c){l==="`"&&(c=!1);continue}if(l==="'"){a=!0;continue}if(l==='"'){s=!0;continue}if(l==="`"){c=!0;continue}if(l==="("?n++:l===")"&&n>0?n--:l==="{"?r++:l==="}"&&r>0?r--:l==="["?i++:l==="]"&&i>0&&i--,l===";"&&n===0&&r===0&&i===0)return{body:t.slice(0,o).trim(),rest:t.slice(o+1).trim()}}return{body:t,rest:""}}function jn(e,t){let n=e.trim();if(!Nn.test(n)||Hn.test(n))return null;let r=2;for(;r<n.length&&/\s/.test(n[r]);)r++;if(n[r]!=="(")return null;let i=ie(n,r,"(",")");if(!i)return null;let a=x(i.inner.trim(),t);if(!a)return null;let s=n.slice(i.end+1).trim(),c=bt(s);if(!c||!c.body)return null;let f=Me(c.body,t);if(!f)return null;s=c.rest.trim();let o=null;if(s.startsWith("else")){s=s.slice(4).trim();let l=bt(s);if(!l||!l.body||(o=Me(l.body,t),!o))return null;s=l.rest.trim()}return s.length>0?null:l=>{H(()=>{a()?f(l):o?.(l)})}}function zn(e){let t=e.trim();for(;t.startsWith("(");){let n=ie(t,0,"(",")");if(!n||n.end!==t.length-1)break;let r=n.inner.trim();if(!r)break;t=r}return t}function Nt(e){let t=fe.get(e);if(t)return t;let n=[],r=[],i=0,a=/\{item\.?(\w*)\}/g,s;for(;(s=a.exec(e))!==null;)n.push(e.slice(i,s.index)),r.push(s[1]),i=a.lastIndex;n.push(e.slice(i));let c={statics:n,dynamics:r,hasItemRef:r.length>0};return Bn(e,c),c}var Dt=new WeakMap;function Ke(e,t){if(!e.hasItemRef)return e.statics[0];let n=e.statics[0];for(let r=0;r<e.dynamics.length;r++){let i=e.dynamics[r];i?n+=String(t?.[i]??""):n+=typeof t=="object"?JSON.stringify(t):String(t??""),n+=e.statics[r+1]??""}return n}function Jn(e,t){let n=e.cloneNode(!0),r=document.createTreeWalker(n,NodeFilter.SHOW_TEXT);for(;r.nextNode();){let i=r.currentNode,a=i.textContent??"";if(a.includes("{item")){let s=Nt(a);Dt.set(i,s),i.textContent=Ke(s,t)}}return nr(n,t),n}function Kn(e,t){let n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT);for(;n.nextNode();){let r=n.currentNode,i=Dt.get(r);i&&(r.textContent=Ke(i,t))}}var Xn=new WeakMap,Yn=["data-list","data-show","data-text","data-if","data-model","data-on:","data-class:","data-bind:","data-computed","data-persist","data-fetch","data-transition","data-transition:"];function Zn(e){for(let t of Yn)if(e===t||e.startsWith(t))return!0;return!1}function de(e){return e?e.trim().split(/\s+/).map(t=>t.trim()).filter(Boolean):[]}function ge(e){let t=e.trim().toLowerCase();if(t.endsWith("ms")){let n=Number(t.slice(0,-2));return Number.isFinite(n)&&n>=0?n:null}if(t.endsWith("s")){let n=Number(t.slice(0,-1));return Number.isFinite(n)&&n>=0?n*1e3:null}return null}function $e(e){let t=[],n;for(let r of de(e)){let i=ge(r);i!=null?n=i:t.push(r)}return{classes:t,durationMs:n}}function J(e){return Array.from(new Set(e.filter(Boolean)))}function Ae(e){return e?e.split(",").map(t=>ge(t.trim())).filter(t=>t!=null):[]}function vt(e,t){if(e.length===0&&t.length===0)return 0;if(e.length===0)return Math.max(...t,0);if(t.length===0)return Math.max(...e,0);let n=Math.max(e.length,t.length),r=0;for(let i=0;i<n;i++){let a=e[i%e.length]??0,s=t[i%t.length]??0;a+s>r&&(r=a+s)}return r}function Qn(e,t){if(typeof t=="number")return t;let n=window.getComputedStyle(e),r=vt(Ae(n.transitionDuration),Ae(n.transitionDelay)),i=vt(Ae(n.animationDuration),Ae(n.animationDelay));return Math.max(r,i)}function G(e){let t=e[Re];if(t)return t;let n={token:0,cancel:null};return e[Re]=n,n}function _e(e){let t=e[Re];t?.cancel&&t.cancel(),delete e[Re]}function Fe(e){if(!(e.hasAttribute("data-transition")||Array.from(e.attributes).some(m=>m.name.startsWith("data-transition:"))))return null;let n=$e(e.getAttribute("data-transition")).classes,r=$e(e.getAttribute("data-transition:enter")),i=$e(e.getAttribute("data-transition:leave")),a=de(e.getAttribute("data-transition:enter-from")??e.getAttribute("data-transition:enter-start")),s=de(e.getAttribute("data-transition:enter-to")??e.getAttribute("data-transition:enter-end")),c=de(e.getAttribute("data-transition:leave-from")??e.getAttribute("data-transition:leave-start")),f=de(e.getAttribute("data-transition:leave-to")??e.getAttribute("data-transition:leave-end")),o=ge(e.getAttribute("data-transition:duration")??""),l=ge(e.getAttribute("data-transition:duration-enter")??"")??r.durationMs??o??void 0,p=ge(e.getAttribute("data-transition:duration-leave")??"")??i.durationMs??o??void 0;return{enter:J([...n,...r.classes]),enterFrom:J(a),enterTo:J(s),leave:J([...n,...i.classes]),leaveFrom:J(c),leaveTo:J(f),enterDurationMs:l,leaveDurationMs:p}}function we(e,t){for(let n of t)e.classList.remove(n)}function Pe(e,t){for(let n of t)e.classList.add(n)}function be(e,t,n){let r=J([...t.base,...t.from,...t.to]),i=!1,a=null,s=null,c=null,f=()=>{i||(i=!0,a!=null&&window.clearTimeout(a),s!=null&&cancelAnimationFrame(s),c!=null&&cancelAnimationFrame(c),we(e,r),n())};return Pe(e,t.base),Pe(e,t.from),we(e,t.to),s=requestAnimationFrame(()=>{c=requestAnimationFrame(()=>{if(i)return;we(e,t.from),Pe(e,t.to);let o=Qn(e,t.durationMs);if(o<=0){f();return}a=window.setTimeout(f,o+25)})}),f}function er(e,t,n,r){if(t.insertBefore(e,n),!r)return;let i=G(e);i.token+=1;let a=i.token;i.cancel&&i.cancel(),i.cancel=be(e,{base:r.enter,from:r.enterFrom,to:r.enterTo,durationMs:r.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null)})}function Et(e,t,n){if(e.hasAttribute("data-forma-leaving")){n();return}if(!t){n();return}e.setAttribute("data-forma-leaving","");let r=G(e);r.token+=1;let i=r.token;r.cancel&&r.cancel(),r.cancel=be(e,{base:t.leave,from:t.leaveFrom,to:t.leaveTo,durationMs:t.leaveDurationMs},()=>{let a=G(e);a.token===i&&(a.cancel=null),e.removeAttribute("data-forma-leaving"),n()})}function tr(e,t,n,r){if(!n||r){e.style.display=t?"":"none",n&&we(e,J([...n.enter,...n.enterFrom,...n.enterTo,...n.leave,...n.leaveFrom,...n.leaveTo]));return}let i=G(e);i.token+=1;let a=i.token;if(i.cancel&&i.cancel(),i.cancel=null,t){e.style.display="",i.cancel=be(e,{base:n.enter,from:n.enterFrom,to:n.enterTo,durationMs:n.enterDurationMs},()=>{let s=G(e);s.token===a&&(s.cancel=null)});return}i.cancel=be(e,{base:n.leave,from:n.leaveFrom,to:n.leaveTo,durationMs:n.leaveDurationMs},()=>{let s=G(e);s.token===a&&(e.style.display="none",s.cancel=null)})}function nr(e,t){let n=[e,...Array.from(e.querySelectorAll("*"))];for(let r of n){let i=[];for(let a of Array.from(r.attributes))if(!Zn(a.name)&&a.value.includes("{item")){let s=Nt(a.value);i.push({attr:a.name,compiled:s}),r.setAttribute(a.name,Ke(s,t))}i.length>0&&Xn.set(r,i)}}function rr(e,t){let n=0,r=e.match(/^[a-zA-Z_$]\w*/);if(!r)return null;let i=r[0];if(n=i.length,n>=e.length||e[n]!=="."&&!(e[n]==="?"&&e[n+1]==="."))return null;let a=[];for(;n<e.length;){let c=!1;if(e[n]==="?"&&e[n+1]===".")c=!0,n+=2;else if(e[n]===".")n+=1;else return null;let f=e.slice(n).match(/^\w+/);if(!f)return null;let o=f[0];if(n+=o.length,re.has(o))return()=>{};if(n<e.length&&e[n]==="("){let l=ie(e,n,"(",")");if(!l)return null;let p=l.inner.trim(),m=[];for(let u of qe(p)){let h=x(u,t);if(!h)return null;m.push(h)}a.push({type:"call",name:o,optional:c,argFns:m}),n=l.end+1}else a.push({type:"prop",name:o,optional:c})}if(n!==e.length||a.length===0)return null;let s=i==="Math"?(()=>Math):(()=>t.getters[i]?.());return()=>{let c=s();for(let f of a){if(c==null)return f.optional,void 0;if(f.type==="prop")c=c[f.name];else{let o=c[f.name];if(typeof o!="function")return;let l=f.argFns.map(p=>p());c=o.apply(c,l)}}return c}}function x(e,t){let n=ue.get(e);if(n)return n(t);let r=ir(e,t);if(r!==null)if(e==="true"||e==="false"||e==="null"||e==="undefined"){let i=e==="true"?!0:e==="false"?!1:e==="null"?null:void 0;ce(e,()=>()=>i)}else if(Ct.test(e))ce(e,i=>()=>i.getters[e]?.());else if(Rt.test(e)||Mt.test(e)){let i=e.slice(1,-1);ce(e,()=>()=>i)}else if(xt.test(e)){let i=Number(e);ce(e,()=>()=>i)}else{let i=e.match(mn);if(i){let a=i[1],s=i[2];ce(e,c=>()=>c.getters[a]?.()?.[s])}}return r}function ir(e,t){e=e.trim();let n=zn(e);if(n!==e)return x(n,t);if(Rt.test(e)||Mt.test(e)){let u=e.slice(1,-1);return()=>u}if(xt.test(e)){let u=Number(e);return()=>u}if(e==="true")return()=>!0;if(e==="false")return()=>!1;if(e==="null")return()=>null;if(e==="undefined")return()=>{};if(Ct.test(e))return()=>t.getters[e]?.();{let u=rr(e,t);if(u)return u}let r=e.match(_n);if(r){let u=r[1].trim(),h=r[2],E=r[3].trim();if(re.has(h))return()=>{};let S=x(u,t);if(!S)return null;let _=[];for(let y of qe(E)){let v=x(y,t);if(!v)return null;_.push(v)}return()=>{let y=S(),v=y?.[h];if(typeof v!="function")return;let d=_.map(g=>g());return v.apply(y,d)}}if(e.startsWith("!")){let u=x(e.slice(1).trim(),t);if(u)return()=>!u()}let i=e.match(pn);if(i){let u=x(i[1],t),h,E=i[2];if(wn.test(E)?h=Number(E):h=E.slice(1,-1),u)return()=>u()?.[h]}if(e.startsWith("[")){let u=ie(e,0,"[","]");if(u&&u.end===e.length-1){let h=u.inner.trim();if(h==="")return()=>[];let E=qe(h),S=[],_=!0;for(let y of E){let v=x(y.trim(),t);if(!v){_=!1;break}S.push(v)}if(_)return()=>S.map(y=>y())}}let a=e.match(gn);if(a){let u=x(a[1].trim(),t),h=x(a[2].trim(),t),E=x(a[3].trim(),t);if(u&&h&&E)return()=>u()?h():E()}let s=e.match(hn);if(s){let u=x(s[1].trim(),t),h=x(s[2].trim(),t);if(u&&h)return()=>u()??h()}let c=e.match(vn);if(c){let u=x(c[1].trim(),t),h=x(c[2].trim(),t);if(u&&h)return()=>u()||h()}let f=e.match(bn);if(f){let u=x(f[1].trim(),t),h=x(f[2].trim(),t);if(u&&h)return()=>u()&&h()}let o=e.match(En);if(o){let u=x(o[1].trim(),t),h=x(o[3].trim(),t);if(u&&h){let E=o[2];return()=>{let S=u(),_=h();switch(E){case"===":return S===_;case"!==":return S!==_;case"==":return S==_;case"!=":return S!=_;case">":return S>_;case"<":return S<_;case">=":return S>=_;case"<=":return S<=_}}}}let l=e.match(Sn);if(l){let u=x(l[1].trim(),t),h=x(l[3].trim(),t);if(u&&h){let E=l[2];return()=>{let S=u(),_=h();return E==="+"?S+_:S-_}}}let p=e.match(yn);if(p){let u=x(p[1].trim(),t),h=x(p[3].trim(),t);if(u&&h){let E=p[2];return()=>{let S=u(),_=h();switch(E){case"*":return S*_;case"/":return S/_;case"%":return S%_}}}}let m=e.match(Tn);if(m){let u=m[1],h=[],E=[],S=0,_=new RegExp(An.source,"g"),y;for(;(y=_.exec(u))!==null;){h.push(u.slice(S,y.index));let v=x(y[1].trim(),t);if(!v)return null;E.push(v),S=_.lastIndex}return h.push(u.slice(S)),()=>{let v=h[0];for(let d=0;d<E.length;d++)v+=String(E[d]()??""),v+=h[d+1]??"";return v}}return null}function Lt(e,t){let n=e.get(t);return n||(n=new Map,e.set(t,n)),n}function Ot(e){return e.includes("...")?"Unsupported expression in CSP-safe mode: spread syntax detected. Use .concat() instead, or enable unsafe-eval via setUnsafeEval(true).":e.includes("=>")?"Unsupported expression in CSP-safe mode: arrow function detected. Extract logic to a data-computed attribute, or enable unsafe-eval via setUnsafeEval(true).":"Unsupported expression in CSP-safe mode. Simplify the expression or enable unsafe-eval via setUnsafeEval(true)."}function X(e,t){let n=e.replace(Ve,"").trim(),r=Lt(ze,t),i=r.get(n);if(i)return i;let a=x(n,t);if(a)return r.set(n,a),a;if(!At||!F){N("buildEvaluator: blocked unsafe eval fallback for expression:",n),ne("expression-unsupported",n,Ot(n));let c=()=>{};return r.set(n,c),c}let s=kt(n);if(s){let c=`Blocked unsafe method "${s}" in expression`;throw ne("expression-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope",`with(__scope) { return (${n}); }`),f=new Proxy(Object.create(null),{has(l,p){return p in t.getters},get(l,p){if(re.has(p))return;let m=t.getters[p];return m?m():void 0}}),o=()=>c(f);return r.set(n,o),o}catch{ne("expression-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c=()=>{};return r.set(n,c),c}}function Me(e,t){let n=e.trim().replace(/;+$/g,"").trim();if(!n)return null;let r=jn(n,t);if(r)return r;let i=Gn(n);if(i.length>1){let m=i.map(u=>Me(u,t));return m.every(u=>u!==null)?u=>{H(()=>{for(let h of m)h(u)})}:null}let a=i[0]??n,s=a.match(Rn);if(s){let m=s[1],u=s[2];return()=>{H(()=>{let h=t.getters[m]?.()??0;t.setters[m]?.(u==="++"?h+1:h-1)})}}let c=a.match(Mn);if(c){let m=c[1],u=c[2];return()=>{H(()=>{let h=t.getters[u]?.()??0;t.setters[u]?.(m==="++"?h+1:h-1)})}}let f=a.match(xn);if(f&&f[1]===f[2]){let m=f[1];return()=>{H(()=>{t.setters[m]?.(!t.getters[m]?.())})}}let o=a.match(Cn);if(o){let m=o[1],u=x(o[2].trim(),t);if(u)return O&&N(`parseHandler: assignment "${m} = ..." \u2014 setter exists:`,!!t.setters[m],", getter exists:",!!t.getters[m]),()=>{H(()=>{let h=u();O&&N(`SETTER: ${m} = ${h} (was: ${t.getters[m]?.()})`),t.setters[m]?.(h)})}}let l=a.match(kn);if(l){let m=l[1],u=l[2],h=x(l[3].trim(),t);if(h)return()=>{H(()=>{let E=t.getters[m]?.()??0,S=h();switch(u){case"+=":t.setters[m]?.(E+S);break;case"-=":t.setters[m]?.(E-S);break;case"*=":t.setters[m]?.(E*S);break;case"/=":t.setters[m]?.(E/S);break}})}}let p=a.match($n);if(p){let m=p[1];return()=>Tt(m)}return null}function or(e,t){let n=e.trim();if(n.startsWith("{")){let c=ie(n,0,"{","}");c&&c.end===n.length-1&&(n=c.inner.trim())}let r=Lt(Je,t),i=r.get(n);if(i)return i;let a=Me(n,t);if(a){let c={handler:a,supported:!0};return r.set(n,c),c}if(!At||!F){N("buildHandler: blocked unsafe eval fallback for expression:",n),ne("handler-unsupported",n,Ot(n));let c={handler:()=>{},supported:!1};return r.set(n,c),c}let s=kt(n);if(s){let c=`Blocked unsafe method "${s}" in handler`;throw ne("handler-unsupported",n,c),new Error(`[FormaJS] ${c}: ${n}`)}try{let c=new Function("__scope","$event","event",`with(__scope) { ${n} }`),f=new Proxy(Object.create(null),{has(p,m){return m==="$event"||m==="event"?!1:m in t.getters||m in t.setters},get(p,m){if(re.has(m))return;let u=t.getters[m];return u?u():void 0},set(p,m,u){let h=t.setters[m];return h&&h(u),!0}}),l={handler:p=>{H(()=>c(f,p,p))},supported:!0};return r.set(n,l),l}catch{ne("handler-unsupported",n,"Expression too complex for CSP-safe mode. Enable unsafe-eval via FormaRuntime.unsafeEval = true, or use the standard (non-hardened) build.");let c={handler:()=>{},supported:!1};return r.set(n,c),c}}var sr=new Set(["__proto__","constructor","prototype"]);function It(e){let t;try{t=JSON.parse(e)}catch{return O&&N("parseState: Invalid JSON in data-forma-state \u2014 use valid JSON with quoted keys. Got:",e.slice(0,200)),{}}for(let n of sr)n in t&&delete t[n];return t}function ar(e){let t=e.getAttribute("data-forma-state")??"{}",n=It(t),r=Object.keys(n);O&&(N("initScope: parsed",r.length,"keys:",r.join(", ")),r.length===0&&N("initScope: WARNING \u2014 empty state! Raw attribute:",t.slice(0,200)));let i={},a={};for(let[s,c]of Object.entries(n)){let[f,o]=te(c);i[s]=f,a[s]=o}return i.$refetch=()=>Tt,{getters:i,setters:a}}var yt=new Set(["id","className","tagName","nodeName","getAttribute","setAttribute","removeAttribute","hasAttribute","toggleAttribute","dataset","classList","textContent","innerText","value","checked","disabled","selected","type","name","placeholder","readOnly","required","min","max","step","pattern","getBoundingClientRect","offsetWidth","offsetHeight","offsetTop","offsetLeft","clientWidth","clientHeight","scrollWidth","scrollHeight","scrollTop","scrollLeft","style","hidden","focus","blur","click","scrollIntoView","scrollTo","closest","matches","querySelector","querySelectorAll","children","childElementCount","firstElementChild","lastElementChild","nextElementSibling","previousElementSibling"]);function lr(e){return new Proxy(e,{get(t,n){if(typeof n=="symbol")return Reflect.get(t,n);if(!yt.has(n))return;let r=Reflect.get(t,n);return typeof r=="function"?r.bind(t):r},set(t,n,r){return typeof n=="symbol"||!yt.has(n)?!1:Reflect.set(t,n,r)}})}function Y(e,t,n){let r={$el:lr(e),$dispatch:(y,v)=>{e.dispatchEvent(new CustomEvent(y,{bubbles:!0,composed:!0,detail:v}))}};t=He(t,r);let i=dr(e),a=!i||i.has("data-computed")?e.getAttribute("data-computed"):null;if(a){let y=a.split(/;\s*(?=\w+\s*=[^=])/);for(let v of y){let d=v.trim();if(!d)continue;let g=d.match(Dn);if(g){let b=g[1],T=g[2],k=t.getters[b];delete t.getters[b];let R=X(`{${T}}`,t),D=De(R);t.getters[b]=D,k||delete t.setters[b]}}}let s=!i||i.has("data-text")?e.getAttribute("data-text"):null;if(s){let y=X(s,t),v=B(()=>{qn(e,Vn(y()))});n.push(v)}let c=!i||i.has("data-show")?e.getAttribute("data-show"):null;if(c){let y=X(c,t),v=Fe(e);if(O){let b=e.tagName.toLowerCase(),T=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-show="${c}" on <${b}${T}>`)}let d=!1,g=B(()=>{let b=!!y();O&&N(`data-show effect: "${c}" \u2192 ${b}`),tr(e,b,v,!d),d=!0});n.push(g),v&&n.push(()=>_e(e))}let f=!i||i.has("data-if")?e.getAttribute("data-if"):null;if(f){let y=X(f,t),v=Fe(e),d=document.createComment("forma-if"),g=e.parentNode,b=!0,T=!1,k=B(()=>{let R=!!y();R&&!b?(_e(e),e.removeAttribute("data-forma-leaving"),T&&v?er(e,g,d,v):g?.insertBefore(e,d),b=!0):!R&&b&&(T&&v?Et(e,v,()=>{e.parentNode&&(g?.insertBefore(d,e),e.remove())}):(g?.insertBefore(d,e),e.remove()),b=!1),T=!0});n.push(k),v&&n.push(()=>_e(e))}let o=!i||i.has("data-model")?e.getAttribute("data-model"):null;if(o){let y=o.replace(Ve,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g=e,b=B(()=>{let R=v();g.type==="checkbox"?g.checked=!!R:g.value=String(R??"")});n.push(b);let T=g.type==="checkbox"?"change":"input",k=()=>{g.type==="checkbox"?d(g.checked):g.type==="number"||g.type==="range"?d(Number(g.value)):d(g.value)};g.addEventListener(T,k),n.push(()=>{g.removeEventListener(T,k)})}}let l=!i||mr(i,"data-on:","data-class:","data-bind:"),p=e.attributes;if(l)for(let y=0;y<p.length;y++){let v=p[y],d=v.name;if(d.startsWith("data-on:")){let g=d.slice(8),b=or(v.value,t),T=b.handler;if(O){let k=e.tagName.toLowerCase(),R=e.id?`#${e.id}`:"",D=e.className?`.${String(e.className).split(" ")[0]}`:"";N(`bindElement: data-on:${g}="${v.value}" on <${k}${R}${D}>`)}if(b.supported?e.hasAttribute("data-forma-handler-error")&&e.removeAttribute("data-forma-handler-error"):e.setAttribute("data-forma-handler-error","unsupported"),O){let k=v.value,R=D=>{N(`HANDLER FIRED: data-on:${g}="${k}"`,"isTrusted:",D.isTrusted),T(D)};e.addEventListener(g,R),n.push(()=>{e.removeEventListener(g,R)})}else e.addEventListener(g,T),n.push(()=>{e.removeEventListener(g,T)})}else if(d.startsWith("data-class:")){let g=d.slice(11),b=X(v.value,t),T=B(()=>{e.classList.toggle(g,!!b())});n.push(T)}else if(d.startsWith("data-bind:")){let g=d.slice(10),b=X(v.value,t),T=B(()=>{let k=b();k==null||k===!1?e.removeAttribute(g):e.setAttribute(g,String(k))});n.push(T)}}let m=!i||i.has("data-persist")?e.getAttribute("data-persist"):null;if(m){let y=m.replace(Ve,"").trim(),v=t.getters[y],d=t.setters[y];if(v&&d){let g="forma:"+y;try{let T=localStorage.getItem(g);T!==null&&d(JSON.parse(T))}catch{}let b=B(()=>{try{localStorage.setItem(g,JSON.stringify(v()))}catch{}});n.push(b)}}let u=!i||i.has("data-list")?e.getAttribute("data-list"):null;if(u){let y=X(u,t),v=e.children[0];if(v){let D=function(C){let w=C;if(Array.isArray(w.__formaDisposers)){for(let A of w.__formaDisposers)try{A()}catch{}delete w.__formaDisposers}},j=function(C,w){let A=Jn(d,C),L=He(t,{item:C,index:w}),M=[];Y(A,L,M);for(let P of Array.from(A.querySelectorAll("*")))Y(P,L,M);return A.__formaDisposers=M,A},oe=function(C,w,A){D(C),Kn(C,w);let L=He(t,{item:w,index:A}),M=[];Y(C,L,M);for(let P of Array.from(C.querySelectorAll("*")))Y(P,L,M);C.__formaDisposers=M};var E=D,S=j,_=oe;let d=v.cloneNode(!0);e.removeChild(v);let g=d.getAttribute("data-key"),b=g?g.replace(In,"").trim():null,T=Fe(e),k=[],R=[],se=T?{onInsert:C=>{let w=C;if(!w.setAttribute)return;let A=G(w);A.token+=1;let L=A.token;A.cancel&&A.cancel(),A.cancel=be(w,{base:T.enter,from:T.enterFrom,to:T.enterTo,durationMs:T.enterDurationMs},()=>{let M=G(w);M.token===L&&(M.cancel=null)})},onBeforeRemove:(C,w)=>{let A=C;if(!A.setAttribute){w();return}D(C),Et(A,T,()=>{w()})}}:void 0,ae=B(()=>{let C=y();if(!Array.isArray(C)){for(let A of R)D(A),e.removeChild(A);k=[],R=[];return}if(T){let A=e.querySelectorAll("[data-forma-leaving]");for(let L of Array.from(A))_e(L),L.removeAttribute("data-forma-leaving"),L.parentNode&&L.parentNode.removeChild(L)}let w=new Set(R);if(b){let A=Le(e,k,C,R,M=>String(M?.[b]??""),M=>{let P=C.indexOf(M);return j(M,P)},(M,P)=>{let I=C.indexOf(P);oe(M,P,I)},void 0,se),L=new Set(A.nodes);for(let M of w)if(!L.has(M)){if(M.hasAttribute?.("data-forma-leaving"))continue;D(M)}k=A.items,R=A.nodes}else{let A=C.map((I,ve)=>({__idx:ve,__item:I})),M=Le(e,k,A,R,I=>I.__idx,I=>j(I.__item,I.__idx),(I,ve)=>oe(I,ve.__item,ve.__idx),void 0,se),P=new Set(M.nodes);for(let I of w)if(!P.has(I)){if(I.hasAttribute?.("data-forma-leaving"))continue;D(I)}k=M.items,R=M.nodes}});n.push(ae)}}let h=!i||i.has("data-fetch")?e.getAttribute("data-fetch"):null;if(h){let y=h.match(Ln);if(y){let v=y[1].trim(),d=y[2].trim(),g=y[3]?.trim()??"",b="GET",T=v,k=v.match(On);k&&(b=k[1].toUpperCase(),T=k[2].trim());let R,D,j;for(let w of g.split("|").filter(Boolean)){let[A,L]=w.split(":").map(M=>M.trim());A==="loading"?R=L:A==="error"?D=L:A==="poll"&&(j=parseInt(L??"0",10))}let[oe,se]=te(null);if(t.getters[d]=oe,t.setters[d]=se,R){let[w,A]=te(!1);t.getters[R]=w,t.setters[R]=A}if(D){let[w,A]=te(null);t.getters[D]=w,t.setters[D]=A}let ae=()=>{R&&t.setters[R](!0),fetch(T,{method:b}).then(w=>w.json()).then(w=>{se(w),R&&t.setters[R](!1)}).catch(w=>{D&&t.setters[D](w.message),R&&t.setters[R](!1)})},C=e.getAttribute("data-fetch-id");if(C&&(Ue.set(C,ae),n.push(()=>Ue.delete(C))),ae(),j&&j>0){let w=setInterval(ae,j);n.push(()=>clearInterval(w))}}}}var hi=["[data-text]","[data-show]","[data-if]","[data-model]","[data-computed]","[data-persist]","[data-list]","[data-fetch]","[data-bind\\:*]","[data-class\\:*]","[data-on\\:*]","[data-transition]"].join(",");function cr(e){let t=e.attributes;for(let n=0;n<t.length;n++){let r=t[n].name;if(r.startsWith("data-text")||r.startsWith("data-show")||r.startsWith("data-if")||r.startsWith("data-model")||r.startsWith("data-computed")||r.startsWith("data-persist")||r.startsWith("data-list")||r.startsWith("data-fetch")||r.startsWith("data-on:")||r.startsWith("data-class:")||r.startsWith("data-bind:")||r.startsWith("data-transition"))return!0}return!1}var q=null;function ur(e){if(!e||Object.keys(e).length===0){q=null;return}q=new Map;for(let t in e)q.set(t,new Set(e[t]))}function fr(){if(!q||q.size===0||q.size>200)return null;let e=[];for(let t of q.keys())e.push(`[data-forma-id="${t}"]`);return e.join(",")}function dr(e){if(!q)return null;let t=e.getAttribute("data-forma-id");return t?q.get(t)??null:null}function mr(e,...t){for(let n of e)for(let r of t)if(n.startsWith(r))return!0;return!1}function Z(e){if(e.__formaDisposers){O&&N("mountScope: SKIPPED (already mounted)");return}let t=ar(e),n=[],r=new Map,i=e.querySelectorAll("[data-ref]");for(let f=0;f<i.length;f++){let o=i[f],l=o.getAttribute("data-ref");l&&r.set(l,o)}let a=e.getAttribute("data-ref");a&&r.set(a,e),t.getters.$refs=()=>new Proxy({},{get(f,o){return r.get(o)??void 0},has(f,o){return r.has(o)}}),Y(e,t,n);let s=0,c=fr();if(c){let f=e.querySelectorAll(c);for(let o=0;o<f.length;o++)Y(f[o],t,n),s++}else{let f=e.querySelectorAll("*");for(let o=0;o<f.length;o++){let l=f[o];cr(l)&&(Y(l,t,n),s++)}}e.__formaDisposers=n,e.__formaScope=t,e.__formaInitialState=e.getAttribute("data-forma-state")??"{}",O&&N("mountScope: DONE \u2014",s,"elements bound,",n.length,"disposers",c?"(targeted)":"(full scan)")}function Q(e){let t=e.__formaDisposers;if(t){for(let n of t)try{n()}catch{}delete e.__formaDisposers,delete e.__formaScope,delete e.__formaInitialState}}var U=null,St=1,pr=40,me=[],he=!1;function gr(e){for(let t=0;t<e.removedNodes.length;t++){let n=e.removedNodes[t];if(n.nodeType!==St)continue;let r=n;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: REMOVED scope"),Q(r));let i=r.querySelectorAll("[data-forma-state]");for(let a=0;a<i.length;a++)Q(i[a])}for(let t=0;t<e.addedNodes.length;t++){let n=e.addedNodes[t];if(n.nodeType!==St)continue;let r=n;if(r.closest("[data-forma-leaving]"))continue;r.hasAttribute("data-forma-state")&&(O&&N("MutationObserver: ADDED scope via mutation"),Z(r));let i=r.querySelectorAll("[data-forma-state]");O&&i.length>0&&N("MutationObserver: found",i.length,"nested scope(s) in added subtree");for(let a=0;a<i.length;a++){let s=i[a];s.closest("[data-forma-leaving]")||Z(s)}}if(e.type==="attributes"&&e.attributeName==="data-forma-state"){let t=e.target;Q(t),t.hasAttribute("data-forma-state")&&Z(t)}}async function Ht(){try{for(;me.length>0;){let e=me.splice(0,pr);for(let t=0;t<e.length;t++)gr(e[t]);me.length>0&&await _t()}}finally{he=!1,me.length>0&&!he&&(he=!0,Ht())}}function hr(e){O&&N("MutationObserver: queued",e.length,"mutation(s)"),me.push(...e),!he&&(he=!0,Ht())}function br(){if(U)return;U=new MutationObserver(hr);let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}function vr(){U&&(U.disconnect(),U=null)}function Ge(){fn&&wt(document,{skipIfAlreadySet:!0});let e=document.querySelectorAll("[data-forma-state]");O&&N("initRuntime: found",e.length,"scope(s)");for(let t of Array.from(e))Z(t);br(),O&&N("initRuntime: MutationObserver started")}function Er(){vr();let e=document.querySelectorAll("[data-forma-state]");for(let t of Array.from(e))Q(t)}function yr(e){e.hasAttribute("data-forma-state")&&Z(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Z(n)}function Sr(e){e.hasAttribute("data-forma-state")&&Q(e);let t=e.querySelectorAll("[data-forma-state]");for(let n of Array.from(t))Q(n)}typeof document<"u"&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",Ge):Ge());function Tr(e){O=e}function Ar(e){$!==e&&($=e,e==="locked-off"&&(F=!1),e==="locked-on"&&(F=!0),e==="mutable"&&(F=!0),ze=new WeakMap,Je=new WeakMap)}function _r(e){if($!=="mutable"){N(`setUnsafeEval ignored (mode=${$}); unsafe fallback is locked`);return}F!==e&&(F=e,ze=new WeakMap,Je=new WeakMap)}function wr(){return $}function Rr(e){je=e}function Mr(){return Array.from(pe.values()).map(e=>({...e}))}function xr(){pe.clear()}function Cr(){let e=document.querySelectorAll("[data-forma-state]"),t=[];for(let n of Array.from(e)){if(n.closest("[data-forma-leaving]"))continue;let r=n.__formaScope,i=n.__formaInitialState;if(!r)continue;let a={};for(let s of Object.keys(r.getters)){let c=r.getters[s]();a[s]={value:c,type:typeof c}}t.push({element:n,id:n.getAttribute("data-forma-id")||n.id||n.tagName.toLowerCase(),values:a,initialJSON:i??"{}"})}return t}function kr(e,t,n){let r=e.__formaScope;r?.setters[t]&&H(()=>{r.setters[t](n)})}function Nr(e){let t=e.__formaScope,n=e.__formaInitialState;if(!t||!n)return;let r=It(n);H(()=>{for(let[i,a]of Object.entries(r))t.setters[i]?.(a)})}var Be=null;function Dr(){return Be||(Be=mt({mountScope:Z,unmountScope:Q,disconnectObserver(){U&&U.disconnect()},reconnectObserver(){if(U){let e=document.body||document.documentElement;e&&U.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-forma-state"]})}},batch:H})),Be}function Lr(e,t){Dr()(e,t)}return Wt(Or);})(); | ||
| //# sourceMappingURL=formajs-runtime.global.js.map |
@@ -1,2 +0,2 @@ | ||
| "use strict";var FormaJS=(()=>{var ke=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var Xn=Object.getOwnPropertyNames;var Zn=Object.prototype.hasOwnProperty;var Qn=(e,t)=>{for(var n in t)ke(e,n,{get:t[n],enumerable:!0})},eo=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Xn(t))!Zn.call(e,r)&&r!==n&&ke(e,r,{get:()=>t[r],enumerable:!(o=Yn(t,r))||o.enumerable});return e};var to=e=>eo(ke({},"__esModule",{value:!0}),e);var Ko={};Qn(Ko,{$:()=>Dt,$$:()=>Ht,$$serverFunction:()=>dn,Fragment:()=>ce,activateIslands:()=>mt,addClass:()=>_t,applyRevalidation:()=>we,batch:()=>_,children:()=>Vt,cleanup:()=>st,closest:()=>$t,createAction:()=>sn,createBus:()=>Lt,createComputed:()=>ee,createContext:()=>bt,createEffect:()=>Q,createErrorBoundary:()=>dt,createFetch:()=>tn,createHistory:()=>kt,createIndexedDB:()=>en,createList:()=>te,createLocalStorage:()=>Xt,createMemo:()=>ze,createPortal:()=>ft,createRPCMiddleware:()=>hn,createReducer:()=>Ye,createRef:()=>Je,createResource:()=>Xe,createRoot:()=>H,createSSE:()=>on,createSessionStorage:()=>Zt,createShow:()=>ne,createSignal:()=>w,createStore:()=>Rt,createSuspense:()=>pt,createSwitch:()=>ut,createText:()=>ct,createWebSocket:()=>rn,deactivateAllIslands:()=>gt,deactivateIsland:()=>be,defineComponent:()=>Tt,delegate:()=>At,disposeComponent:()=>St,enableAutoRevalidation:()=>un,fetchJSON:()=>nn,fragment:()=>at,getBatchDepth:()=>Ae,getRegisteredEndpoints:()=>gn,getServerFunction:()=>mn,h:()=>se,handleRPC:()=>Ee,hydrateIsland:()=>V,inject:()=>wt,isComputed:()=>De,isEffect:()=>He,isEffectScope:()=>_e,isSignal:()=>Ne,mount:()=>lt,nextSibling:()=>Gt,on:()=>qe,onCleanup:()=>je,onError:()=>Ue,onIntersect:()=>Jt,onKey:()=>Nt,onMount:()=>ht,onMutation:()=>Yt,onResize:()=>qt,onUnmount:()=>yt,parent:()=>Wt,persist:()=>Mt,prevSibling:()=>zt,provide:()=>vt,reconcileList:()=>G,registerResource:()=>cn,registerServerFunction:()=>pn,removeClass:()=>It,setAttr:()=>Ft,setHTML:()=>Kt,setHTMLUnsafe:()=>jt,setStyle:()=>Ot,setText:()=>Bt,siblings:()=>Ut,toggleClass:()=>Pt,trackDisposer:()=>xt,trigger:()=>Pe,unprovide:()=>Ct,unregisterResource:()=>ln,untrack:()=>L,withRevalidation:()=>fn});function yn({update:e,notify:t,unwatched:n}){return{link:o,unlink:r,propagate:s,checkDirty:i,shallowPropagate:c};function o(u,a,d){let g=a.depsTail;if(g!==void 0&&g.dep===u)return;let p=g!==void 0?g.nextDep:a.deps;if(p!==void 0&&p.dep===u){p.version=d,a.depsTail=p;return}let h=u.subsTail;if(h!==void 0&&h.version===d&&h.sub===a)return;let T=a.depsTail=u.subsTail={version:d,dep:u,sub:a,prevDep:g,nextDep:p,prevSub:h,nextSub:void 0};p!==void 0&&(p.prevDep=T),g!==void 0?g.nextDep=T:a.deps=T,h!==void 0?h.nextSub=T:u.subs=T}function r(u,a=u.sub){let d=u.dep,g=u.prevDep,p=u.nextDep,h=u.nextSub,T=u.prevSub;return p!==void 0?p.prevDep=g:a.depsTail=g,g!==void 0?g.nextDep=p:a.deps=p,h!==void 0?h.prevSub=T:d.subsTail=T,T!==void 0?T.nextSub=h:(d.subs=h)===void 0&&n(d),p}function s(u){let a=u.nextSub,d;e:do{let g=u.sub,p=g.flags;if(p&60?p&12?p&4?!(p&48)&&f(u,g)?(g.flags=p|40,p&=1):p=0:g.flags=p&-9|32:p=0:g.flags=p|32,p&2&&t(g),p&1){let h=g.subs;if(h!==void 0){let T=(u=h).nextSub;T!==void 0&&(d={value:a,prev:d},a=T);continue}}if((u=a)!==void 0){a=u.nextSub;continue}for(;d!==void 0;)if(u=d.value,d=d.prev,u!==void 0){a=u.nextSub;continue e}break}while(!0)}function i(u,a){let d,g=0,p=!1;e:do{let h=u.dep,T=h.flags;if(a.flags&16)p=!0;else if((T&17)===17){if(e(h)){let b=h.subs;b.nextSub!==void 0&&c(b),p=!0}}else if((T&33)===33){(u.nextSub!==void 0||u.prevSub!==void 0)&&(d={value:u,prev:d}),u=h.deps,a=h,++g;continue}if(!p){let b=u.nextDep;if(b!==void 0){u=b;continue}}for(;g--;){let b=a.subs,y=b.nextSub!==void 0;if(y?(u=d.value,d=d.prev):u=b,p){if(e(a)){y&&c(b),a=u.sub;continue}p=!1}else a.flags&=-33;a=u.sub;let v=u.nextDep;if(v!==void 0){u=v;continue e}}return p}while(!0)}function c(u){do{let a=u.sub,d=a.flags;(d&48)===32&&(a.flags=d|16,(d&6)===2&&t(a))}while((u=u.nextSub)!==void 0)}function f(u,a){let d=a.depsTail;for(;d!==void 0;){if(d===u)return!0;d=d.prevDep}return!1}}var de=0,Z=0,$=0,X=0,O,B=[],{link:pe,unlink:Me,propagate:Tn,checkDirty:Sn,shallowPropagate:Le}=yn({update(e){return e.depsTail!==void 0?En(e):Rn(e)},notify(e){let t=X,n=t;do if(B[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(X=t;n<--t;){let o=B[n];B[n++]=B[t],B[t]=o}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ge(e)):me.call(e)}});function D(e){let t=O;return O=e,t}function Ae(){return Z}function xn(){++Z}function bn(){--Z||Oe()}function Ne(e){return e.name==="bound "+Mn.name}function De(e){return e.name==="bound "+kn.name}function He(e){return e.name==="bound "+Ln.name}function _e(e){return e.name==="bound "+me.name}function vn(e){return Mn.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function wn(e){return kn.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function Ie(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=D(t);n!==void 0&&pe(t,n,0);try{t.fn()}finally{O=n,t.flags&=-5}return Ln.bind(t)}function Cn(e){let t={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:0},n=D(t);n!==void 0&&pe(t,n,0);try{e()}finally{O=n}return me.bind(t)}function Pe(e){let t={deps:void 0,depsTail:void 0,flags:2},n=D(t);try{e()}finally{O=n;let o=t.deps;for(;o!==void 0;){let r=o.dep;o=Me(o,t);let s=r.subs;s!==void 0&&(t.flags=0,Tn(s),Le(s))}Z||Oe()}}function En(e){++de,e.depsTail=void 0,e.flags=5;let t=D(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{O=t,e.flags&=-5,ge(e)}}function Rn(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function no(e){let t=e.flags;if(t&16||t&32&&Sn(e.deps,e)){++de,e.depsTail=void 0,e.flags=6;let n=D(e);try{e.fn()}finally{O=n,e.flags&=-5,ge(e)}}else e.flags=2}function Oe(){try{for(;$<X;){let e=B[$];B[$++]=void 0,no(e)}}finally{for(;$<X;){let e=B[$];B[$++]=void 0,e.flags|=10}$=0,X=0}}function kn(){let e=this.flags;if(e&16||e&32&&(Sn(this.deps,this)||(this.flags=e&-33,!1))){if(En(this)){let n=this.subs;n!==void 0&&Le(n)}}else if(!e){this.flags=5;let n=D(this);try{this.value=this.getter()}finally{O=n,this.flags&=-5}}let t=O;return t!==void 0&&pe(this,t,de),this.value}function Mn(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Tn(t),Z||Oe())}}else{if(this.flags&16&&Rn(this)){let n=this.subs;n!==void 0&&Le(n)}let t=O;for(;t!==void 0;){if(t.flags&3){pe(this,t,de);break}t=t.subs?.sub}return this.currentValue}}function Ln(){me.call(this)}function me(){this.depsTail=void 0,this.flags=0,ge(this);let e=this.subs;e!==void 0&&Me(e)}function ge(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Me(n,e)}function oo(e,t,n){if(typeof t!="function"){if(n){let i=D(void 0),c=e();if(D(i),n(c,t))return}e(t);return}let o=D(void 0),r=e();D(o);let s=t(r);n&&n(r,s)||e(s)}function w(e,t){let n=vn(e),o=n,r=t?.equals;return[o,i=>oo(n,i,r)]}var W=null,An=[];function H(e){let t={disposers:[],scopeDispose:null};An.push(W),W=t;let n=()=>{if(t.scopeDispose){try{t.scopeDispose()}catch{}t.scopeDispose=null}for(let r of t.disposers)try{r()}catch{}t.disposers.length=0},o;try{t.scopeDispose=Cn(()=>{o=e(n)})}finally{W=An.pop()??null}return o}function Fe(e){W&&W.disposers.push(e)}function Be(){return W!==null}var Ke=null;function je(e){Ke?.(e)}function $e(e){let t=Ke;return Ke=e,t}var A=typeof process<"u"?process.env?.NODE_ENV!=="production":!0,Ve=null;function Ue(e){Ve=e}function F(e,t){if(Ve)try{Ve(e,t?{source:t}:{})}catch{}A&&console.error(`[forma] ${t??"Unknown"} error:`,e)}var We=32,Nn=100,Ge=[];for(let e=0;e<We;e++)Ge.push([]);var he=We;function ro(){if(he>0){let e=Ge[--he];return e.length=0,e}return[]}function Dn(e){e.length=0,he<We&&(Ge[he++]=e)}function Hn(e){if(e!==void 0)try{e()}catch(t){F(t,"effect cleanup")}}function _n(e){if(e!==void 0)for(let t=0;t<e.length;t++)try{e[t]()}catch(n){F(n,"effect cleanup")}}function C(e){let t=Ie(e);return Be()&&Fe(t),t}function Q(e){let t=Be(),n,o,r,s,i=b=>{if(s!==void 0){s.push(b);return}if(r!==void 0){let y=ro();y.push(r,b),r=void 0,s=y;return}r=b},c=!1,f=!0,u=!1,a=!1,d=()=>{if(n!==void 0&&(Hn(n),n=void 0),o!==void 0&&(_n(o),Dn(o),o=void 0),c){try{e()}catch(y){F(y,"effect")}return}r=void 0,s=void 0;let b=$e(i);try{let y=e();if(typeof y=="function"&&i(y),r===void 0&&s===void 0){f&&(c=!0);return}s!==void 0?o=s:n=r}catch(y){F(y,"effect"),s!==void 0?o=s:n=r}finally{$e(b),f=!1}},p=Ie(()=>{if(u){a=!0;return}u=!0;try{let b=0;do a=!1,d(),a&&(b++,b>=Nn&&(F(new Error(`createEffect exceeded ${Nn} re-entrant runs`),"effect"),a=!1));while(a)}finally{u=!1}}),h=!1,T=()=>{h||(h=!0,p(),n!==void 0&&(Hn(n),n=void 0),o!==void 0&&(_n(o),Dn(o),o=void 0))};return t&&Fe(T),T}function ee(e){return wn(e)}var ze=ee;function _(e){xn();try{e()}finally{bn()}}function L(e){let t=D(void 0);try{return e()}finally{D(t)}}function qe(e,t,n){let o,r=!0;return()=>{let s=e();if(n?.defer&&r){r=!1,o=s;return}let i=L(()=>t(s,o));return o=s,i}}function Je(e){return{current:e}}function Ye(e,t){let[n,o]=w(t);return[n,s=>{o(i=>e(i,s))}]}var ye=null,In=[];function Pn(e){In.push(ye),ye=e}function On(){ye=In.pop()??null}function Fn(){return ye}function Xe(e,t,n){let[o,r]=w(n?.initialValue),[s,i]=w(!1),[c,f]=w(void 0),u=Fn(),a=null,d=0,g=()=>{let h=L(e);a&&a.abort();let T=new AbortController;a=T;let b=++d,y=()=>b===d,v=!1;u&&(u.increment(),v=!0),i(!0),f(void 0),Promise.resolve(t(h)).then(S=>{y()&&!T.signal.aborted&&r(()=>S)}).catch(S=>{y()&&!T.signal.aborted&&S?.name!=="AbortError"&&f(S)}).finally(()=>{v&&u?.decrement(),y()&&(i(!1),a===T&&(a=null))})};C(()=>{e(),g()});let p=(()=>o());return p.loading=s,p.error=c,p.refetch=g,p.mutate=h=>r(()=>h),p}function tt(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),o=new Int32Array(t),r=new Int32Array(t).fill(-1),s=0;for(let f=0;f<t;f++){let u=e[f],a=0,d=s;for(;a<d;){let g=a+d>>1;n[g]<u?a=g+1:d=g}n[a]=u,o[a]=f,a>0&&(r[f]=o[a-1]),a>=s&&s++}let i=new Array(s),c=o[s-1];for(let f=s-1;f>=0;f--)i[f]=c,c=r[c];return i}var so=32,Ze=Symbol.for("forma-abort"),Qe=Symbol.for("forma-attr-cache"),et=Symbol.for("forma-dynamic-child");function io(e,t){return e instanceof HTMLElement&&t instanceof HTMLElement&&e.tagName===t.tagName&&!e[Ze]&&!e[Qe]&&!e[et]&&!t[Ze]&&!t[Qe]&&!t[et]}function ao(e,t){let n=new Set;for(let o of Array.from(t.attributes))n.add(o.name),e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value);for(let o of Array.from(e.attributes))n.has(o.name)||e.removeAttribute(o.name);e.replaceChildren(...Array.from(t.childNodes))}function co(e,t,n,o,r,s,i,c,f){let u=t.length,a=n.length,d=new Array(u);for(let l=0;l<u;l++)d[l]=r(t[l]);let g=new Array(a),p=new Uint8Array(u);for(let l=0;l<a;l++){let m=r(n[l]),x=-1;for(let E=0;E<u;E++)if(!p[E]&&d[E]===m){x=E,p[E]=1;break}g[l]=x}for(let l=0;l<u;l++)if(!p[l])if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);if(u===a){let l=!0;for(let m=0;m<a;m++)if(g[m]!==m){l=!1;break}if(l){let m=new Array(a);for(let x=0;x<a;x++){let E=o[x];i(E,n[x]),m[x]=E}return{nodes:m,items:n}}}let h=[],T=[];for(let l=0;l<a;l++)g[l]!==-1&&(h.push(g[l]),T.push(l));let b=tt(h),y=new Uint8Array(a);for(let l of b)y[T[l]]=1;let v=new Array(a),S=c??null;for(let l=a-1;l>=0;l--){let m,x=!1;if(g[l]===-1)m=s(n[l]),x=!0;else if(m=o[g[l]],i(m,n[l]),y[l]){v[l]=m,S=m;continue}S?e.insertBefore(m,S):e.appendChild(m),x&&f?.onInsert?.(m),v[l]=m,S=m}return{nodes:v,items:n}}function G(e,t,n,o,r,s,i,c,f){let u=t.length,a=n.length;if(a===0){for(let l=0;l<u;l++)if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);return{nodes:[],items:[]}}if(u===0){let l=new Array(a);for(let m=0;m<a;m++){let x=s(n[m]);c?e.insertBefore(x,c):e.appendChild(x),f?.onInsert?.(x),l[m]=x}return{nodes:l,items:n}}if(u<so)return co(e,t,n,o,r,s,i,c,f);let d=new Map;for(let l=0;l<u;l++)d.set(r(t[l]),l);let g=new Array(a),p=new Uint8Array(u);for(let l=0;l<a;l++){let m=r(n[l]),x=d.get(m);x!==void 0?(g[l]=x,p[x]=1):g[l]=-1}for(let l=0;l<u;l++)if(!p[l])if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);if(u===a){let l=!0;for(let m=0;m<a;m++)if(g[m]!==m){l=!1;break}if(l){let m=new Array(a);for(let x=0;x<a;x++){let E=o[x];i(E,n[x]),m[x]=E}return{nodes:m,items:n}}}let h=[],T=[];for(let l=0;l<a;l++)g[l]!==-1&&(h.push(g[l]),T.push(l));let b=tt(h),y=new Uint8Array(a);for(let l of b)y[T[l]]=1;let v=new Array(a),S=c??null;for(let l=a-1;l>=0;l--){let m,x=!1;if(g[l]===-1)m=s(n[l]),x=!0;else if(m=o[g[l]],i(m,n[l]),y[l]){v[l]=m,S=m;continue}S?e.insertBefore(m,S):e.appendChild(m),x&&f?.onInsert?.(m),v[l]=m,S=m}return{nodes:v,items:n}}function te(e,t,n,o){if(k)return{type:"list",items:e,keyFn:t,renderFn:n,options:o};let r=document.createComment("forma-list-start"),s=document.createComment("forma-list-end"),i=document.createDocumentFragment();i.appendChild(r),i.appendChild(s);let c=new Map,f=[],u=[],a=o?.updateOnItemChange??"none";return C(()=>{let d=e(),g=r.parentNode;if(!g)return;if(!Array.isArray(d)){A&&console.warn("[forma] createList: value is not an array, treating as empty");for(let y of f)y.parentNode===g&&g.removeChild(y);c=new Map,f=[],u=[];return}let p=d;for(let y=0;y<d.length;y++)if(d[y]==null){p=d.filter(v=>v!=null);break}if(A){let y=new Set;for(let v of p){let S=t(v);y.has(S)&&console.warn("[forma] createList: duplicate key detected:",S),y.add(S)}}let T=G(g,u,p,f,t,y=>{let v=t(y),[S,l]=w(0),m=L(()=>n(y,S));return c.set(v,{element:m,item:y,getIndex:S,setIndex:l}),m},a==="rerender"?(y,v)=>{let S=t(v),l=c.get(S);if(!l||l.item===v||(l.item=v,!(y instanceof HTMLElement))||y[Ze]||y[Qe]||y[et])return;let m=L(()=>n(v,l.getIndex));io(y,m)&&(ao(y,m),l.element=y)}:(y,v)=>{let S=t(v),l=c.get(S);l&&(l.item=v)},s),b=new Map;for(let y=0;y<p.length;y++){let v=t(p[y]),S=c.get(v);S&&(S.setIndex(y),b.set(v,S))}c=b,f=T.nodes,u=T.items}),i}function ne(e,t,n){if(k){let a=e()?t():n?.()??null;return{type:"show",condition:e,whenTrue:t,whenFalse:n,initialBranch:a}}let o=document.createComment("forma-show"),r=document.createComment("/forma-show"),s=document.createDocumentFragment();s.appendChild(o),s.appendChild(r);let i=null,c=null,f=null,u=C(()=>{let a=!!e(),d=typeof globalThis.__FORMA_DEBUG__<"u",g=d?t.toString().slice(0,60):"";if(a===c){d&&console.log("[forma:show] skip (same)",a,g);return}d&&console.log("[forma:show]",c,"\u2192",a,g),c=a;let p=o.parentNode;if(!p){d&&console.warn("[forma:show] parentNode is null! skipping.",g);return}if(d&&console.log("[forma:show] parent:",p.nodeName,"inDoc:",document.contains(p)),f&&(f(),f=null),i)if(i.parentNode===p)p.removeChild(i);else for(;o.nextSibling&&o.nextSibling!==r;)p.removeChild(o.nextSibling);let h=a?t:n;if(h){let T;i=H(b=>(T=b,L(()=>h()))),f=T}else i=null;i&&p.insertBefore(i,r)});return s.__showDispose=()=>{u(),f&&(f(),f=null)},s}var Bn=Symbol.for("forma-abort"),k=!1;function Kn(e){k=e}function J(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="element"}function Te(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="show"}function ot(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="list"}function lo(e,t){if(t)for(let n in t){let o=t[n];if(typeof o!="function")continue;if(n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.length>2){let i=e[Bn];i||(i=new AbortController,e[Bn]=i),e.addEventListener(n.slice(2).toLowerCase(),o,{signal:i.signal});continue}let r=o,s=n;C(()=>{let i=r();i===!1||i==null?e.removeAttribute(s):i===!0?e.setAttribute(s,""):e.setAttribute(s,String(i))})}}function oe(e){if(e instanceof Node)return e;if(e==null||e===!1||e===!0)return null;if(typeof e=="string")return new Text(e);if(typeof e=="number")return new Text(String(e));if(J(e))return q(e);if(Te(e)){let t=k;k=!1;try{return ne(e.condition,()=>oe(e.whenTrue())??document.createComment("empty"),e.whenFalse?()=>oe(e.whenFalse())??document.createComment("empty"):void 0)}finally{k=t}}if(ot(e)){let t=k;k=!1;try{return te(e.items,e.keyFn,e.renderFn,e.options)}finally{k=t}}return null}function q(e){let t=k;k=!1;try{let n=e.children.map(o=>J(o)?q(o):Te(o)||ot(o)?oe(o):o);return se(e.tag,e.props,...n)}finally{k=t}}function uo(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===105}function nt(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===115}function fo(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===116}function po(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===108}function z(e){let t="/"+e.data,n=e.nextSibling;for(;n;){if(n.nodeType===8&&n.data===t)return n;n=n.nextSibling}return null}function mo(e,t){let n=e.nextSibling;for(;n&&n!==t;){if(n.nodeType===3)return n;n=n.nextSibling}return null}function go(e,t){let n=e.nextSibling;for(;n&&n!==t;){if(n.nodeType===1)return n;n=n.nextSibling}}function ho(e,t){let n=document.createDocumentFragment(),o=e.nextSibling;for(;o&&o!==t;){let r=o.nextSibling;n.appendChild(o),o=r}return n}function jn(e,t){let n=!!e.condition(),o=null,r=null;if(!(t.start.nextSibling!==t.end)&&n){A&&console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true");let i=e.whenTrue();i instanceof Node&&t.start.parentNode.insertBefore(i,t.end)}C(()=>{let i=!!e.condition();if(i===n)return;n=i;let c=t.start.parentNode;if(!c)return;let f=ho(t.start,t.end);i?r=f:o=f;let u=i?o??e.whenTrue():e.whenFalse?r??e.whenFalse():null;i&&o&&(o=null),!i&&r&&(r=null),u!=null&&!(u instanceof Node)&&(u=oe(u)),u instanceof Node&&c.insertBefore(u,t.end)})}function $n(e,t,n){if(J(e)){let o=go(t,n);o&&re(e,o)}else if(Te(e)){let o=t.nextSibling;for(;o&&o!==n;){if(o.nodeType===8&&nt(o.data)){let r=o,s=z(r);s&&(e.initialBranch&&$n(e.initialBranch,r,s),jn(e,{start:r,end:s,cachedContent:null}));break}o=o.nextSibling}}}function re(e,t){if(!t||t.tagName!==e.tag.toUpperCase()){A&&console.warn(`Hydration mismatch: expected <${e.tag}>, got <${t?.tagName?.toLowerCase()??"nothing"}>`);let o=q(e);t&&t.replaceWith(o);return}lo(t,e.props);let n=t.firstChild;for(let o of e.children)if(!(o===!1||o==null))if(J(o)){for(;n&&n.nodeType===3&&!n.data.trim();)n=n.nextSibling;for(;n&&n.nodeType===1&&n.hasAttribute("data-forma-island");)n=n.nextSibling;if(!n){t.appendChild(q(o));continue}if(n.nodeType===1){let r=n;n=n.nextSibling,re(o,r)}else if(n.nodeType===8&&uo(n.data)){let r=z(n),s=q(o);r?(r.parentNode.insertBefore(s,r),n=r.nextSibling):(t.appendChild(s),n=null)}else t.appendChild(q(o))}else if(Te(o)){for(;n&&!(n.nodeType===8&&nt(n.data));)n=n.nextSibling;if(n){let r=n,s=z(r);s&&(o.initialBranch&&$n(o.initialBranch,r,s),jn(o,{start:r,end:s,cachedContent:null}),n=s.nextSibling)}}else if(ot(o)){for(;n&&!(n.nodeType===8&&po(n.data));)n=n.nextSibling;if(n){let r=n,s=z(r);if(s){let i=new Map,c=[],f=r.nextSibling;for(;f&&f!==s;){if(f.nodeType===1){let l=f;c.push(l);let m=l.getAttribute("data-forma-key");m!=null&&i.set(m,l)}f=f.nextSibling}let u=L(()=>o.items()),a=o.keyFn,d=o.renderFn,g=i.size===0&&c.length>0,p=[],h=[],T=new Set;for(let l=0;l<u.length;l++){let m=u[l],x=a(m),E;if(g?l<c.length&&(E=c[l],T.add(l)):(E=i.get(String(x)),E&&i.delete(String(x))),E)p.push(E),h.push(m);else{A&&console.warn(`[FormaJS] Hydration: list item key "${x}" not found in SSR \u2014 rendering fresh`);let R=k;k=!1;try{let[M]=w(l),N=d(m,M);s.parentNode.insertBefore(N,s),p.push(N),h.push(m)}finally{k=R}}}if(g)for(let l=0;l<c.length;l++)!T.has(l)&&c[l].parentNode&&c[l].parentNode.removeChild(c[l]);else for(let[l,m]of i)A&&console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${l}"`),m.parentNode&&m.parentNode.removeChild(m);let b=r.parentNode;for(let l of p)b.insertBefore(l,s);let y=new Map;for(let l=0;l<h.length;l++){let m=h[l],x=a(m),[E,R]=w(l);y.set(x,{element:p[l],item:m,getIndex:E,setIndex:R})}let v=p.slice(),S=h.slice();C(()=>{let l=o.items(),m=r.parentNode;if(!m)return;let x=G(m,S,l,v,a,R=>{let M=k;k=!1;try{let N=a(R),[I,Re]=w(0),fe=L(()=>d(R,I));return y.set(N,{element:fe,item:R,getIndex:I,setIndex:Re}),fe}finally{k=M}},(R,M)=>{let N=a(M),I=y.get(N);I&&(I.item=M)},s),E=new Map;for(let R=0;R<l.length;R++){let M=a(l[R]),N=y.get(M);N&&(N.setIndex(R),E.set(M,N))}y=E,v=x.nodes,S=x.items}),n=s.nextSibling}}}else if(typeof o=="function"){for(;n&&n.nodeType===3&&!n.data.trim();)n=n.nextSibling;if(n&&n.nodeType===1){let r=o();if(J(r)){let s=n;n=n.nextSibling,re(r,s);continue}}if(n&&n.nodeType===8){let r=n.data;if(fo(r)){let s=z(n),i=n.nextSibling;if(!i||i.nodeType!==3){A&&console.warn(`[FormaJS] Hydration: created text node for marker ${r} \u2014 SSR walker should emit content between markers`);let c=document.createTextNode("");n.parentNode.insertBefore(c,s||n.nextSibling),i=c}C(()=>{i.data=String(o())}),n=s?s.nextSibling:i.nextSibling}else if(nt(r)){let s=n,i=z(s);if(i){let c=mo(s,i);c||(A&&console.warn(`[FormaJS] Hydration: created text node for show marker ${s.data} \u2014 SSR walker should emit content between markers`),c=document.createTextNode(""),s.parentNode.insertBefore(c,i)),C(()=>{c.data=String(o())}),n=i.nextSibling}else n=n.nextSibling}else n=n.nextSibling}else if(n&&n.nodeType===3){let r=n;n=n.nextSibling,C(()=>{r.data=String(o())})}else{A&&console.warn(`[FormaJS] Hydration: created text node in empty <${t.tagName.toLowerCase()}> \u2014 IR may not cover this component`);let r=document.createTextNode("");t.appendChild(r),C(()=>{r.data=String(o())})}}else(typeof o=="string"||typeof o=="number")&&n&&n.nodeType===3&&(n=n.nextSibling)}function V(e,t){if(!(t.childElementCount>0||t.childNodes.length>0&&Array.from(t.childNodes).some(r=>r.nodeType===1||r.nodeType===3&&r.data.trim()))){if(A){let s=t.getAttribute("data-forma-component")||"unknown";console.warn(`[forma] Island "${s}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.`)}let r=e();if(r instanceof Element){for(let s of Array.from(t.attributes))s.name.startsWith("data-forma-")&&r.setAttribute(s.name,s.value);return t.replaceWith(r),r}else r instanceof Node&&t.appendChild(r);return t}Kn(!0);let o;try{o=e()}finally{Kn(!1)}return!o||!J(o)?(t.removeAttribute("data-forma-ssr"),t):(t.hasAttribute("data-forma-island")?re(o,t):re(o,t.children[0]),t.removeAttribute("data-forma-ssr"),t)}var ce=Symbol.for("forma.fragment"),yo="http://www.w3.org/2000/svg",ie="http://www.w3.org/1999/xlink",To=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","text","tspan","textPath","defs","use","symbol","clipPath","mask","pattern","marker","linearGradient","radialGradient","stop","filter","feGaussianBlur","feColorMatrix","feOffset","feBlend","feMerge","feMergeNode","feComposite","feFlood","feMorphology","feTurbulence","feDisplacementMap","feImage","foreignObject","animate","animateTransform","animateMotion","set","image","switch","desc","title","metadata"]),Un=new Set(["disabled","checked","readonly","required","autofocus","autoplay","controls","default","defer","formnovalidate","hidden","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","reversed","selected","async"]),j=null;function So(e){if(!j){j=Object.create(null);for(let t of["div","span","p","a","li","ul","ol","button","input","label","h1","h2","h3","h4","h5","h6","section","header","footer","main","nav","table","tr","td","th","tbody","img","form","select","option","textarea","i","b","strong","em","small","article","aside","details","summary"])j[t]=document.createElement(t)}return j[e]??(j[e]=document.createElement(e))}var Vn=Object.create(null);function xo(e){return Vn[e]??(Vn[e]=e.slice(2).toLowerCase())}var Se=Symbol.for("forma-abort");function bo(e){let t=e[Se];return t||(t=new AbortController,e[Se]=t),t}function st(e){let t=e[Se];t&&(t.abort(),delete e[Se])}var rt=Symbol.for("forma-attr-cache"),vo=Symbol.for("forma-dynamic-child");function P(e){return e[rt]??(e[rt]=Object.create(null))}function it(e,t,n){if(typeof n=="function")C(()=>{let o=n(),r=P(e);r.class!==o&&(r.class=o,e instanceof HTMLElement?e.className=o:e.setAttribute("class",o))});else{let o=P(e);if(o.class===n)return;o.class=n,e instanceof HTMLElement?e.className=n:e.setAttribute("class",n)}}function wo(e,t,n){if(typeof n=="function"){let o=[];C(()=>{let r=n();if(typeof r=="string"){let s=P(e);if(s.style===r)return;s.style=r,o=[],e.style.cssText=r}else if(r&&typeof r=="object"){let s=e.style,i=Object.keys(r);for(let c of o)c in r||s.removeProperty(c.replace(/[A-Z]/g,f=>"-"+f.toLowerCase()));Object.assign(s,r),o=i}})}else if(typeof n=="string"){let o=P(e);if(o.style===n)return;o.style=n,e.style.cssText=n}else n&&typeof n=="object"&&Object.assign(e.style,n)}function Wn(e,t,n){let o=bo(e);e.addEventListener(xo(t),n,{signal:o.signal})}function Co(e,t,n){if(typeof n=="function")C(()=>{let o=n();if(o==null){e.innerHTML="";return}if(typeof o!="object"||!("__html"in o))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof o);let r=o.__html;if(typeof r!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof r);let s=P(e);s.innerHTML!==r&&(s.innerHTML=r,e.innerHTML=r)});else{if(n==null){e.innerHTML="";return}if(typeof n!="object"||!("__html"in n))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof n);let o=n.__html;if(typeof o!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof o);e.innerHTML=o}}function Eo(e,t,n){let o=t.slice(6);typeof n=="function"?C(()=>{let r=n();r==null||r===!1?e.removeAttributeNS(ie,o):e.setAttributeNS(ie,t,String(r))}):n==null||n===!1?e.removeAttributeNS(ie,o):e.setAttributeNS(ie,t,String(n))}function Ro(e,t,n){if(typeof n=="function")C(()=>{let o=n(),r=P(e);r[t]!==o&&(r[t]=o,o?e.setAttribute(t,""):e.removeAttribute(t))});else{let o=P(e);if(o[t]===n)return;o[t]=n,n?e.setAttribute(t,""):e.removeAttribute(t)}}function ko(e,t,n){if(typeof n=="function")C(()=>{let o=n();if(o==null||o===!1){let r=P(e);if(r[t]===null)return;r[t]=null,e.removeAttribute(t)}else{let r=String(o),s=P(e);if(s[t]===r)return;s[t]=r,e.setAttribute(t,r)}});else if(n==null||n===!1){let o=P(e);if(o[t]===null)return;o[t]=null,e.removeAttribute(t)}else{let o=String(n),r=P(e);if(r[t]===o)return;r[t]=o,e.setAttribute(t,o)}}var U=new Map;U.set("class",it);U.set("className",it);U.set("style",wo);U.set("ref",()=>{});U.set("dangerouslySetInnerHTML",Co);for(let e of Un)U.set(e,Ro);function Mo(e,t,n){if(t==="class"){it(e,t,n);return}if(t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.length>2){Wn(e,t,n);return}let o=U.get(t);if(o){o(e,t,n);return}if(t.charCodeAt(0)===120&&t.startsWith("xlink:")){Eo(e,t,n);return}ko(e,t,n)}function Lo(e,t,n){if(!(n==null||n===!1)){if(t==="class"||t==="className"){e.className=n;return}if(t==="style"){typeof n=="string"?e.style.cssText=n:n&&typeof n=="object"&&Object.assign(e.style,n);return}if(t==="dangerouslySetInnerHTML"){if(typeof n!="object"||!("__html"in n))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof n);let o=n.__html;if(typeof o!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof o);e.innerHTML=o;return}if(t.charCodeAt(0)===120&&t.startsWith("xlink:")){e.setAttributeNS(ie,t,String(n));return}if(Un.has(t)){n&&e.setAttribute(t,"");return}n===!0?e.setAttribute(t,""):e.setAttribute(t,String(n))}}function ae(e,t){if(t instanceof Node){e.appendChild(t);return}if(typeof t=="string"){e.appendChild(new Text(t));return}if(!(t==null||t===!1||t===!0)){if(typeof t=="number"){e.appendChild(new Text(String(t)));return}if(typeof t=="function"){e instanceof Element&&(e[vo]=!0);let n=null;C(()=>{let o=t();if(o instanceof Node)n?e.replaceChild(o,n):e.appendChild(o),n=o;else{let r=String(typeof o=="symbol"?o:o??"");if(!n)n=new Text(r),e.appendChild(n);else if(n.nodeType===3)n.data=r;else{let s=new Text(r);e.replaceChild(s,n),n=s}}});return}if(Array.isArray(t)){for(let n of t)ae(e,n);return}}}function se(e,t,...n){if(typeof e=="function"&&e!==ce){let i={...t??{},children:n};return e(i)}if(e===ce){let i=document.createDocumentFragment();for(let c of n)ae(i,c);return i}let o=e;if(k)return{type:"element",tag:o,props:t??null,children:n};let r;if(j&&j[o]?r=j[o].cloneNode(!1):To.has(o)?r=document.createElementNS(yo,o):r=So(o).cloneNode(!1),t){let i=!1;for(let c in t){if(c==="ref")continue;let f=t[c];if(c.charCodeAt(0)===111&&c.charCodeAt(1)===110&&c.length>2){Wn(r,c,f);continue}if(typeof f=="function"){i||(r[rt]=Object.create(null),i=!0),Mo(r,c,f);continue}Lo(r,c,f)}}let s=n.length;if(s===1){let i=n[0];typeof i=="string"?r.textContent=i:typeof i=="number"?r.textContent=String(i):ae(r,i)}else if(s>1)for(let i of n)ae(r,i);return t&&typeof t.ref=="function"&&t.ref(r),r}function at(...e){let t=document.createDocumentFragment();for(let n of e)ae(t,n);return t}function ct(e){if(typeof e=="function"){let t=new Text("");return C(()=>{t.data=e()}),t}return new Text(e)}function lt(e,t){let n=typeof t=="string"?document.querySelector(t):t;if(!n)throw new Error(`mount: container not found \u2014 "${t}"`);let o;if(n.hasAttribute("data-forma-ssr"))H(s=>{o=s,V(e,n)});else{let s=H(i=>(o=i,e()));n.innerHTML="",n.appendChild(s)}let r=!1;return()=>{r||(r=!0,o(),n.innerHTML="")}}function ut(e,t,n){let o=document.createComment("forma-switch"),r=document.createComment("/forma-switch"),s=document.createDocumentFragment();s.appendChild(o),s.appendChild(r);let i=new Map,c=null,f=Ao,u=C(()=>{let a=e();if(a===f)return;let d=typeof globalThis.__FORMA_DEBUG__<"u";d&&console.log("[forma:switch] transition",String(f),"\u2192",String(a)),f=a;let g=o.parentNode;if(!g){d&&console.warn("[forma:switch] markers not in DOM yet, skipping");return}if(c)if(c.parentNode===g)d&&console.log("[forma:switch] removing single node"),g.removeChild(c);else if(c.nodeType===11){d&&console.log("[forma:switch] scooping nodes back into fragment");let h=0;for(;o.nextSibling&&o.nextSibling!==r;)c.appendChild(o.nextSibling),h++;d&&console.log("[forma:switch] scooped",h,"nodes back into fragment")}else for(d&&console.log("[forma:switch] clearing detached node between markers");o.nextSibling&&o.nextSibling!==r;)g.removeChild(o.nextSibling);let p=t.find(h=>h.match===a);if(p){let h=i.get(a);if(h)d&&console.log("[forma:switch] reusing cached branch for",String(a),"\u2192",h.node.nodeName,"type",h.node.nodeType,"childNodes",h.node.childNodes?.length);else{let T,b=H(y=>(T=y,L(()=>p.render())));h={node:b,dispose:T},i.set(a,h),d&&console.log("[forma:switch] rendered new branch for",String(a),"\u2192",b.nodeName,"type",b.nodeType)}c=h.node}else c=n?.()??null,d&&console.log("[forma:switch] no match, using fallback");c&&(g.insertBefore(c,r),d&&console.log("[forma:switch] inserted",c.nodeName,"before end marker"))});return s.__switchDispose=()=>{u();for(let a of i.values())a.dispose();i.clear()},s}var Ao=Symbol("unset");function ft(e,t){let n=document.createComment("forma-portal"),o=typeof t=="string"?document.querySelector(t):t??document.body;if(!o)throw new Error(`createPortal: target not found: ${t}`);let r=null,s=()=>{r&&r.parentNode===o&&o.removeChild(r),r=null};return Q(()=>{let i=e();return s(),r=i,o.appendChild(i),()=>{s()}}),n}function dt(e,t){let n=document.createComment("forma-error-boundary"),o=document.createComment("/forma-error-boundary"),r=document.createDocumentFragment();r.appendChild(n),r.appendChild(o);let[s,i]=w(0),c=null;return C(()=>{s();let f=n.parentNode;if(f){c&&c.parentNode===f&&f.removeChild(c);try{c=e()}catch(u){let a=u instanceof Error?u:new Error(String(u));c=t(a,()=>i(g=>g+1))}c&&f.insertBefore(c,o)}}),r}function pt(e,t){let n=document.createComment("forma-suspense"),o=document.createComment("/forma-suspense"),r=document.createDocumentFragment();r.appendChild(n),r.appendChild(o);let[s,i]=w(0),c=null,f=null,u=null;Pn({increment(){i(d=>d+1)},decrement(){i(d=>Math.max(0,d-1))}});try{f=t()}finally{On()}return C(()=>{let d=n.parentNode;if(!d)return;let p=s()>0?u??=e():f;p!==c&&(c&&c.parentNode===d&&d.removeChild(c),p&&d.insertBefore(p,o),c=p)}),r}var No=new Set(["__proto__","constructor","prototype"]);function Gn(e){for(let t of No)t in e&&delete e[t];return e}function Do(e,t,n){let o=e.getAttribute("data-forma-props");return o?Gn(JSON.parse(o)):n&&String(t)in n?Gn(n[String(t)]):null}function mt(e){let t=document.getElementById("__forma_islands"),n=t?JSON.parse(t.textContent):null,o=document.querySelectorAll("[data-forma-island]");for(let r of o){let s=parseInt(r.getAttribute("data-forma-island"),10),i=r.getAttribute("data-forma-component"),c=e[i];if(!c){A&&console.warn(`[forma] No hydrate function for island "${i}" (id=${s})`),r.setAttribute("data-forma-status","error");continue}let f=r.getAttribute("data-forma-hydrate")||"load";if(f==="visible"){let u=new IntersectionObserver(a=>{for(let d of a)d.isIntersecting&&(u.disconnect(),xe(r,s,i,c,n))},{rootMargin:"200px"});u.observe(r)}else if(f==="idle"){let u=()=>xe(r,s,i,c,n);typeof requestIdleCallback=="function"?requestIdleCallback(u):setTimeout(u,200)}else if(f==="interaction"){let u=()=>{r.removeEventListener("pointerdown",u,!0),r.removeEventListener("focusin",u,!0),xe(r,s,i,c,n)};r.addEventListener("pointerdown",u,{capture:!0,once:!0}),r.addEventListener("focusin",u,{capture:!0,once:!0})}else xe(r,s,i,c,n)}}function be(e){let t=e.__formaDispose;typeof t=="function"&&(t(),delete e.__formaDispose,e.setAttribute("data-forma-status","disposed"))}function gt(e=document){let t=e.querySelectorAll('[data-forma-status="active"]');for(let n of t)be(n)}function xe(e,t,n,o,r){try{let s=Do(e,t,r);e.setAttribute("data-forma-status","hydrating");let i=e;H(c=>{i=V(()=>o(e,s),e),i.__formaDispose=c}),i.setAttribute("data-forma-status","active")}catch(s){A&&console.error(`[forma] Island "${n}" (id=${t}) failed:`,s),e.setAttribute("data-forma-status","error")}}var K=null,zn=[];function Ho(e){zn.push(K),K=e}function _o(){K=zn.pop()??null}function ht(e){if(K===null)throw new Error("onMount() must be called inside a component setup function");K.mountCallbacks.push(e)}function yt(e){if(K===null)throw new Error("onUnmount() must be called inside a component setup function");K.unmountCallbacks.push(e)}var ve=Symbol("forma:component:dispose");function Tt(e){let t=typeof e=="function"?e:e.setup,n=typeof e=="function"?void 0:e.name;return function(){let r={disposers:[],mountCallbacks:[],unmountCallbacks:[]};Ho(r);let s;try{s=t()}finally{_o()}let i=()=>{for(let c of r.unmountCallbacks)try{c()}catch(f){F(f,"onUnmount")}for(let c of r.disposers)try{c()}catch(f){F(f,"component disposer")}r.disposers.length=0,r.mountCallbacks.length=0,r.unmountCallbacks.length=0};s[ve]=i;for(let c of r.mountCallbacks)try{let f=c();typeof f=="function"&&r.unmountCallbacks.push(f)}catch(f){F(f,"onMount")}return s}}function St(e){let t=e;typeof t[ve]=="function"&&(t[ve](),delete t[ve])}function xt(e){K!==null&&K.disposers.push(e)}var le=new Map;function bt(e){return{id:Symbol("forma:context"),defaultValue:e}}function vt(e,t){let n=le.get(e.id);n===void 0&&(n=[],le.set(e.id,n)),n.push(t)}function wt(e){let t=le.get(e.id);return t===void 0||t.length===0?e.defaultValue:t[t.length-1]}function Ct(e){let t=le.get(e.id);t!==void 0&&t.length>0&&(t.pop(),t.length===0&&le.delete(e.id))}var ue=Symbol("forma-raw"),Jn=Symbol("forma-proxy"),Io=new Set(["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"]);function qn(e){return!(e==null||typeof e!="object"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof WeakMap||e instanceof WeakSet||e instanceof Error||e instanceof Promise||e[Jn])}function Et(e,t){if(e===null||typeof e!="object"||(t||(t=new WeakSet),t.has(e)))return e;if(t.add(e),Array.isArray(e))return e.map(o=>Et(o,t));let n={};for(let o of Object.keys(e))n[o]=Et(e[o],t);return n}function Rt(e){let t=new Map,n=new Map;function o(d){let g=d.lastIndexOf(".");if(g===-1)return;let p=d.substring(0,g),h=n.get(p);h||(h=new Set,n.set(p,h)),h.add(d)}function r(d,g){let p=t.get(d);return p||(p=w(g),t.set(d,p),o(d)),p}let s=new WeakMap;function i(d){let g=n.get(d);if(g){for(let p of g)i(p),t.delete(p),n.delete(p);g.clear()}}function c(d,g){if(!qn(d))return d;let p=s.get(d);if(p)return p;let h=Array.isArray(d),T=g?g+".":"",b="",y,v=new Proxy(d,{get(S,l,m){if(l===ue)return S;if(l===Jn)return!0;if(typeof l=="symbol")return Reflect.get(S,l,m);let x=String(l),E=T+x;if(h&&Io.has(x))return(...N)=>{let I;return _(()=>{let Re=N.map(Y=>Y!=null&&typeof Y=="object"&&Y[ue]?Y[ue]:Y);I=S[x].apply(S,Re),i(g);let[,fe]=r(T+"length",S.length);fe(S.length)}),I};if(h&&x==="length"){let[N]=r(E,S.length);return N(),S.length}let R=Reflect.get(S,l),M;return x===b&&y?M=y:(M=r(E,R),b=x,y=M),M[0](),qn(R)?c(R,E):R},set(S,l,m){if(typeof l=="symbol")return Reflect.set(S,l,m);let x=String(l),E=T+x,R=m!=null&&typeof m=="object"&&m[ue]?m[ue]:m;if(Reflect.set(S,l,R),R!=null&&typeof R=="object"&&i(E),h&&x!=="length"){let N=T+"length",I=t.get(N);I&&I[1](S.length)}let[,M]=r(E,R);return M(R),!0},has(S,l){if(typeof l=="symbol")return Reflect.has(S,l);let m=String(l),x=T+m,[E]=r(x,Reflect.get(S,l));return E(),Reflect.has(S,l)},ownKeys(S){return Reflect.ownKeys(S)},getOwnPropertyDescriptor(S,l){return Object.getOwnPropertyDescriptor(S,l)},deleteProperty(S,l){if(typeof l=="symbol")return Reflect.deleteProperty(S,l);let m=String(l),x=T+m,E=Reflect.deleteProperty(S,l);i(x),t.delete(x);let R=g;if(R!==void 0){let M=n.get(R);M&&(M.delete(x),M.size===0&&n.delete(R))}return n.delete(x),E}});return s.set(d,v),v}let f=c(e,"");function u(){return L(()=>Et(e))}return[f,d=>{let g=typeof d=="function"?d(u()):d;_(()=>{for(let p of Object.keys(g))f[p]=g[p]})}]}function kt(e,t){let[n,o]=e,r=t?.maxLength??100,s=[n()],i=0,[c,f]=w([...s]),[u,a]=w(i),[d,g]=w(s.length);function p(){_(()=>{f([...s]),a(i),g(s.length)})}let h=!1,T=!0;return C(()=>{let m=n();if(T){T=!1;return}if(h){h=!1;return}s=s.slice(0,i+1),s.push(m),s.length>r&&s.splice(0,s.length-r),i=s.length-1,p()}),{undo:()=>{i<=0||(i--,h=!0,o(s[i]),p())},redo:()=>{i>=s.length-1||(i++,h=!0,o(s[i]),p())},canUndo:()=>u()>0,canRedo:()=>u()<d()-1,history:()=>c(),cursor:()=>u(),clear:()=>{s=[n()],i=0,p()}}}function Mt(e,t,n){let[o,r]=e,s=n?.storage??globalThis.localStorage,i=n?.serialize??JSON.stringify,c=n?.deserialize??JSON.parse,f=n?.validate;try{let u=s.getItem(t);if(u!==null){let a=c(u);(!f||f(a))&&r(a)}}catch{}C(()=>{let u=o();try{let a=i(u);s.setItem(t,a)}catch{}})}function Lt(){let e=new Map;function t(c){let f=e.get(c);return f||(f=new Set,e.set(c,f)),f}function n(c,f){let u=t(c);return u.add(f),()=>{u.delete(f)}}function o(c,f){let u=a=>{s(c,u),f(a)};return n(c,u)}function r(c,f){let u=e.get(c);if(u)for(let a of[...u])try{a(f)}catch(d){console.error(`[forma] Bus handler error on "${String(c)}":`,d)}}function s(c,f){let u=e.get(c);u&&u.delete(f)}function i(){e.clear()}return{on:n,once:o,emit:r,off:s,clear:i}}function At(e,t,n,o,r){let s=i=>{let c=i.target;if(!(c instanceof HTMLElement))return;let f=e instanceof Document?e.documentElement:e,u=c.closest(t);u instanceof HTMLElement&&f.contains(u)&&o(i,u)};return e.addEventListener(n,s,r),()=>{e.removeEventListener(n,s,r)}}function Po(e){let t=e.toLowerCase().split("+").map(o=>o.trim()),n={ctrl:!1,shift:!1,alt:!1,meta:!1,key:""};for(let o of t)switch(o){case"ctrl":case"control":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"alt":n.alt=!0;break;case"meta":case"cmd":case"command":n.meta=!0;break;default:n.key=o}return n}function Oo(e,t){return e.ctrlKey!==t.ctrl||e.shiftKey!==t.shift||e.altKey!==t.alt||e.metaKey!==t.meta?!1:e.key.toLowerCase()===t.key}function Nt(e,t,n){let o=n?.target??document,r=n?.preventDefault??!0,s=Po(e),i=c=>{c instanceof KeyboardEvent&&Oo(c,s)&&(r&&c.preventDefault(),t(c))};return o.addEventListener("keydown",i),()=>{o.removeEventListener("keydown",i)}}function Dt(e,t){return(t??document).querySelector(e)}function Ht(e,t){return Array.from((t??document).querySelectorAll(e))}function _t(e,...t){e.classList.add(...t)}function It(e,...t){e.classList.remove(...t)}function Pt(e,t,n){return e.classList.toggle(t,n)}function Ot(e,t){for(let[n,o]of Object.entries(t))o!==void 0&&(e.style[n]=o)}function Ft(e,t){for(let[n,o]of Object.entries(t))o===!1||o===null?e.removeAttribute(n):o===!0?e.setAttribute(n,""):e.setAttribute(n,o)}function Bt(e,t){e.textContent=t}function Kt(e,t){e.innerHTML=t}function jt(e,t){e.innerHTML=t}function $t(e,t){return e.closest(t)}function Vt(e,t){let n=Array.from(e.children);return t?n.filter(o=>o.matches(t)):n}function Ut(e,t){let n=e.parentElement;if(!n)return[];let r=Array.from(n.children).filter(s=>s!==e);return t?r.filter(s=>s.matches(t)):r}function Wt(e){return e.parentElement}function Gt(e,t){let n=e.nextElementSibling;for(;n;){if(n instanceof HTMLElement&&(!t||n.matches(t)))return n;n=n.nextElementSibling}return null}function zt(e,t){let n=e.previousElementSibling;for(;n;){if(n instanceof HTMLElement&&(!t||n.matches(t)))return n;n=n.previousElementSibling}return null}function qt(e,t){let n=new ResizeObserver(o=>{for(let r of o)t(r)});return n.observe(e),()=>{n.disconnect()}}function Jt(e,t,n){let o=new IntersectionObserver(r=>{for(let s of r)t(s)},n);return o.observe(e),()=>{o.disconnect()}}function Yt(e,t,n){let o=new MutationObserver(r=>{t(r)});return o.observe(e,n??{childList:!0,subtree:!0}),()=>{o.disconnect()}}function Xt(e,t){let n=t?.serialize??JSON.stringify,o=t?.deserialize??JSON.parse,r=t?.validate;return{key:e,get(){try{let s=localStorage.getItem(e);if(s===null)return null;let i=o(s);return r&&!r(i)?null:i}catch{return null}},set(s){try{let i=n(s);localStorage.setItem(e,i)}catch{}},remove(){localStorage.removeItem(e)}}}function Zt(e,t){let n=t?.serialize??JSON.stringify,o=t?.deserialize??JSON.parse,r=t?.validate;return{key:e,get(){try{let s=sessionStorage.getItem(e);if(s===null)return null;let i=o(s);return r&&!r(i)?null:i}catch{return null}},set(s){try{let i=n(s);sessionStorage.setItem(e,i)}catch{}},remove(){sessionStorage.removeItem(e)}}}var Qt=new Map;function Fo(e,t){let n=`${e}::${t}`,o=Qt.get(n);if(o)return o;let r=new Promise((s,i)=>{let c=indexedDB.open(e);c.onerror=()=>i(c.error),c.onsuccess=()=>{let f=c.result;if(f.objectStoreNames.contains(t)){s(f);return}let u=f.version+1;f.close();let a=indexedDB.open(e,u);a.onerror=()=>i(a.error),a.onupgradeneeded=()=>{let d=a.result;d.objectStoreNames.contains(t)||d.createObjectStore(t)},a.onsuccess=()=>s(a.result)},c.onupgradeneeded=()=>{let f=c.result;f.objectStoreNames.contains(t)||f.createObjectStore(t)}});return Qt.set(n,r),r.catch(()=>{Qt.delete(n)}),r}function en(e,t="default"){function n(o,r){return Fo(e,t).then(s=>new Promise((i,c)=>{let u=s.transaction(t,o).objectStore(t),a=r(u);a.onsuccess=()=>i(a.result),a.onerror=()=>c(a.error)}))}return{get(o){return n("readonly",r=>r.get(o))},set(o,r){return n("readwrite",s=>s.put(r,o)).then(()=>{})},delete(o){return n("readwrite",r=>r.delete(o)).then(()=>{})},getAll(){return n("readonly",o=>o.getAll())},keys(){return n("readonly",o=>o.getAllKeys()).then(o=>o.map(String))},clear(){return n("readwrite",o=>o.clear()).then(()=>{})}}}function tn(e,t){let[n,o]=w(null),[r,s]=w(null),[i,c]=w(!1),f=null;function u(){let d=typeof e=="function"?e():e,g=t?.base??"",p=new URL(d,g||void 0);if(t?.params)for(let[h,T]of Object.entries(t.params))p.searchParams.set(h,T);return p.toString()}async function a(){f&&f.abort(),f=new AbortController;let d=f,g=t?.timeout??3e4,p=setTimeout(()=>d.abort(),g);c(!0),s(null);try{let h=u(),{base:T,params:b,timeout:y,transform:v,...S}=t??{},l=await fetch(h,{...S,signal:d.signal});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);let m=await l.json(),x=v?v(m):m;o(x)}catch(h){if(h instanceof Error&&h.name==="AbortError")return;s(h instanceof Error?h:new Error(String(h)))}finally{clearTimeout(p),f===d&&(f=null,c(!1))}}return typeof e=="function"?C(()=>{e(),a()}):a(),{data:n,error:r,loading:i,refetch:a,abort(){f&&f.abort()}}}async function nn(e,t){let n=await fetch(e,t);if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);return await n.json()}function on(e,t){let[n,o]=w(null),[r,s]=w(null),[i,c]=w(!1),f=new EventSource(e,{withCredentials:t?.withCredentials??!1});f.onopen=()=>{c(!0),s(null)};let u=t?.parse??(a=>{try{return JSON.parse(a)}catch{return a}});return f.onmessage=a=>{o(u(a.data))},f.onerror=a=>{s(a),c(!1)},{data:n,error:r,connected:i,close(){f.close(),c(!1)},on(a,d){let g=t?.parse??(h=>{try{return JSON.parse(h)}catch{return h}}),p=h=>{d(g(h.data))};return f.addEventListener(a,p),()=>{f.removeEventListener(a,p)}}}}function rn(e,t){let n=t?.reconnect??!0,o=t?.reconnectInterval??1e3,r=t?.maxReconnects??5,[s,i]=w(null),[c,f]=w("connecting"),u=new Set,a=null,d=0,g=null,p=!1;function h(){if(p)return;f("connecting"),a=new WebSocket(e,t?.protocols),a.onopen=()=>{f("open"),d=0};let T=t?.parse??(b=>{try{return JSON.parse(b)}catch{return b}});a.onmessage=b=>{let y=T(b.data);i(y);for(let v of u)v(y)},a.onerror=()=>{f("error")},a.onclose=()=>{if(p){f("closed");return}if(f("closed"),n&&d<r){let b=o*Math.pow(2,d);d++,g=setTimeout(h,b)}}}return h(),{data:s,status:c,send(T){a&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify(T))},close(){p=!0,g!==null&&(clearTimeout(g),g=null),a&&(a.close(),a=null),f("closed")},on(T){return u.add(T),()=>{u.delete(T)}}}}function sn(e,t){let[n,o]=w(!1),[r,s]=w(void 0),c=async(...f)=>{if(o(!0),s(void 0),t?.optimistic)try{_(()=>t.optimistic(...f))}catch{}try{let u=await e(...f);if(t?.onSuccess&&_(()=>t.onSuccess(u,...f)),t?.invalidates)for(let a of t.invalidates)a.refetch();return o(!1),u}catch(u){if(t?.onError)try{_(()=>t.onError(u,...f))}catch{}throw s(u),o(!1),u}};return c.pending=n,c.error=r,c.clearError=()=>s(void 0),c}var an=new Map;function cn(e,t){an.set(e,t)}function ln(e){an.delete(e)}function we(e){for(let[t,n]of Object.entries(e)){let o=an.get(t);o&&o.mutate(n)}}function un(){if(typeof window>"u")return()=>{};let e=t=>{let n=t.detail;n&&typeof n=="object"&&we(n)};return window.addEventListener("forma:revalidate",e),()=>window.removeEventListener("forma:revalidate",e)}function fn(e,t){return{data:e,__revalidate:t}}function dn(e){return async(...n)=>{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Forma-RPC":"1"},body:JSON.stringify({args:n})});if(!o.ok){let s=await o.text();throw new Error(`Server function failed (${o.status}): ${s}`)}let r=await o.json();return r&&typeof r=="object"&&"__revalidate"in r?(typeof window<"u"&&window.dispatchEvent(new CustomEvent("forma:revalidate",{detail:r.__revalidate})),r.data):r}}var Ce=new Map;function pn(e,t){Ce.set(e,t)}function mn(e){return Ce.get(e)}function gn(){return[...Ce.keys()]}var Bo=new Set(["__proto__","constructor","prototype"]);async function Ee(e,t,n){let o=e.split("/").pop()??"";if(Bo.has(o))return{error:"Forbidden endpoint name"};let r=Ce.get(e);if(!r)return{error:`Unknown server function: ${e}`};try{let s=await r(...t.args);return n?{data:s,__revalidate:n}:{data:s}}catch(s){return{error:typeof process<"u"&&process.env?.NODE_ENV==="development"&&s instanceof Error?s.message:"Internal server error"}}}function hn(){return async(e,t)=>{if(e.method!=="POST"){t.status(405).json({error:"Method not allowed"});return}let n=e.body;if(!n||!Array.isArray(n.args)){t.status(400).json({error:"Invalid RPC request: missing args array"});return}let o=await Ee(e.url,n);o.error?t.status(500).json(o):t.json(o)}}return to(Ko);})(); | ||
| "use strict";var FormaJS=(()=>{var ke=Object.defineProperty;var Yn=Object.getOwnPropertyDescriptor;var Xn=Object.getOwnPropertyNames;var Zn=Object.prototype.hasOwnProperty;var Qn=(e,t)=>{for(var n in t)ke(e,n,{get:t[n],enumerable:!0})},eo=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Xn(t))!Zn.call(e,r)&&r!==n&&ke(e,r,{get:()=>t[r],enumerable:!(o=Yn(t,r))||o.enumerable});return e};var to=e=>eo(ke({},"__esModule",{value:!0}),e);var Ko={};Qn(Ko,{$:()=>Dt,$$:()=>Ht,$$serverFunction:()=>dn,Fragment:()=>ce,activateIslands:()=>mt,addClass:()=>_t,applyRevalidation:()=>we,batch:()=>_,children:()=>Vt,cleanup:()=>st,closest:()=>$t,createAction:()=>sn,createBus:()=>Lt,createComputed:()=>ee,createContext:()=>bt,createEffect:()=>Q,createErrorBoundary:()=>dt,createFetch:()=>tn,createHistory:()=>kt,createIndexedDB:()=>en,createList:()=>te,createLocalStorage:()=>Xt,createMemo:()=>ze,createPortal:()=>ft,createRPCMiddleware:()=>hn,createReducer:()=>Ye,createRef:()=>Je,createResource:()=>Xe,createRoot:()=>H,createSSE:()=>on,createSessionStorage:()=>Zt,createShow:()=>ne,createSignal:()=>w,createStore:()=>Rt,createSuspense:()=>pt,createSwitch:()=>ut,createText:()=>ct,createWebSocket:()=>rn,deactivateAllIslands:()=>gt,deactivateIsland:()=>be,defineComponent:()=>Tt,delegate:()=>At,disposeComponent:()=>St,enableAutoRevalidation:()=>un,fetchJSON:()=>nn,fragment:()=>at,getBatchDepth:()=>Ae,getRegisteredEndpoints:()=>gn,getServerFunction:()=>mn,h:()=>se,handleRPC:()=>Ee,hydrateIsland:()=>V,inject:()=>wt,isComputed:()=>De,isEffect:()=>He,isEffectScope:()=>_e,isSignal:()=>Ne,mount:()=>lt,nextSibling:()=>Gt,on:()=>qe,onCleanup:()=>je,onError:()=>Ue,onIntersect:()=>Jt,onKey:()=>Nt,onMount:()=>ht,onMutation:()=>Yt,onResize:()=>qt,onUnmount:()=>yt,parent:()=>Wt,persist:()=>Mt,prevSibling:()=>zt,provide:()=>vt,reconcileList:()=>G,registerResource:()=>cn,registerServerFunction:()=>pn,removeClass:()=>Ot,setAttr:()=>Ft,setHTML:()=>Kt,setHTMLUnsafe:()=>jt,setStyle:()=>It,setText:()=>Bt,siblings:()=>Ut,toggleClass:()=>Pt,trackDisposer:()=>xt,trigger:()=>Pe,unprovide:()=>Ct,unregisterResource:()=>ln,untrack:()=>L,withRevalidation:()=>fn});function yn({update:e,notify:t,unwatched:n}){return{link:o,unlink:r,propagate:s,checkDirty:i,shallowPropagate:c};function o(u,a,d){let g=a.depsTail;if(g!==void 0&&g.dep===u)return;let p=g!==void 0?g.nextDep:a.deps;if(p!==void 0&&p.dep===u){p.version=d,a.depsTail=p;return}let h=u.subsTail;if(h!==void 0&&h.version===d&&h.sub===a)return;let T=a.depsTail=u.subsTail={version:d,dep:u,sub:a,prevDep:g,nextDep:p,prevSub:h,nextSub:void 0};p!==void 0&&(p.prevDep=T),g!==void 0?g.nextDep=T:a.deps=T,h!==void 0?h.nextSub=T:u.subs=T}function r(u,a=u.sub){let d=u.dep,g=u.prevDep,p=u.nextDep,h=u.nextSub,T=u.prevSub;return p!==void 0?p.prevDep=g:a.depsTail=g,g!==void 0?g.nextDep=p:a.deps=p,h!==void 0?h.prevSub=T:d.subsTail=T,T!==void 0?T.nextSub=h:(d.subs=h)===void 0&&n(d),p}function s(u){let a=u.nextSub,d;e:do{let g=u.sub,p=g.flags;if(p&60?p&12?p&4?!(p&48)&&f(u,g)?(g.flags=p|40,p&=1):p=0:g.flags=p&-9|32:p=0:g.flags=p|32,p&2&&t(g),p&1){let h=g.subs;if(h!==void 0){let T=(u=h).nextSub;T!==void 0&&(d={value:a,prev:d},a=T);continue}}if((u=a)!==void 0){a=u.nextSub;continue}for(;d!==void 0;)if(u=d.value,d=d.prev,u!==void 0){a=u.nextSub;continue e}break}while(!0)}function i(u,a){let d,g=0,p=!1;e:do{let h=u.dep,T=h.flags;if(a.flags&16)p=!0;else if((T&17)===17){if(e(h)){let b=h.subs;b.nextSub!==void 0&&c(b),p=!0}}else if((T&33)===33){(u.nextSub!==void 0||u.prevSub!==void 0)&&(d={value:u,prev:d}),u=h.deps,a=h,++g;continue}if(!p){let b=u.nextDep;if(b!==void 0){u=b;continue}}for(;g--;){let b=a.subs,y=b.nextSub!==void 0;if(y?(u=d.value,d=d.prev):u=b,p){if(e(a)){y&&c(b),a=u.sub;continue}p=!1}else a.flags&=-33;a=u.sub;let v=u.nextDep;if(v!==void 0){u=v;continue e}}return p}while(!0)}function c(u){do{let a=u.sub,d=a.flags;(d&48)===32&&(a.flags=d|16,(d&6)===2&&t(a))}while((u=u.nextSub)!==void 0)}function f(u,a){let d=a.depsTail;for(;d!==void 0;){if(d===u)return!0;d=d.prevDep}return!1}}var de=0,Z=0,$=0,X=0,I,B=[],{link:pe,unlink:Me,propagate:Tn,checkDirty:Sn,shallowPropagate:Le}=yn({update(e){return e.depsTail!==void 0?En(e):Rn(e)},notify(e){let t=X,n=t;do if(B[t++]=e,e.flags&=-3,e=e.subs?.sub,e===void 0||!(e.flags&2))break;while(!0);for(X=t;n<--t;){let o=B[n];B[n++]=B[t],B[t]=o}},unwatched(e){e.flags&1?e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=17,ge(e)):me.call(e)}});function D(e){let t=I;return I=e,t}function Ae(){return Z}function xn(){++Z}function bn(){--Z||Ie()}function Ne(e){return e.name==="bound "+Mn.name}function De(e){return e.name==="bound "+kn.name}function He(e){return e.name==="bound "+Ln.name}function _e(e){return e.name==="bound "+me.name}function vn(e){return Mn.bind({currentValue:e,pendingValue:e,subs:void 0,subsTail:void 0,flags:1})}function wn(e){return kn.bind({value:void 0,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:0,getter:e})}function Oe(e){let t={fn:e,subs:void 0,subsTail:void 0,deps:void 0,depsTail:void 0,flags:6},n=D(t);n!==void 0&&pe(t,n,0);try{t.fn()}finally{I=n,t.flags&=-5}return Ln.bind(t)}function Cn(e){let t={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:0},n=D(t);n!==void 0&&pe(t,n,0);try{e()}finally{I=n}return me.bind(t)}function Pe(e){let t={deps:void 0,depsTail:void 0,flags:2},n=D(t);try{e()}finally{I=n;let o=t.deps;for(;o!==void 0;){let r=o.dep;o=Me(o,t);let s=r.subs;s!==void 0&&(t.flags=0,Tn(s),Le(s))}Z||Ie()}}function En(e){++de,e.depsTail=void 0,e.flags=5;let t=D(e);try{let n=e.value;return n!==(e.value=e.getter(n))}finally{I=t,e.flags&=-5,ge(e)}}function Rn(e){return e.flags=1,e.currentValue!==(e.currentValue=e.pendingValue)}function no(e){let t=e.flags;if(t&16||t&32&&Sn(e.deps,e)){++de,e.depsTail=void 0,e.flags=6;let n=D(e);try{e.fn()}finally{I=n,e.flags&=-5,ge(e)}}else e.flags=2}function Ie(){try{for(;$<X;){let e=B[$];B[$++]=void 0,no(e)}}finally{for(;$<X;){let e=B[$];B[$++]=void 0,e.flags|=10}$=0,X=0}}function kn(){let e=this.flags;if(e&16||e&32&&(Sn(this.deps,this)||(this.flags=e&-33,!1))){if(En(this)){let n=this.subs;n!==void 0&&Le(n)}}else if(!e){this.flags=5;let n=D(this);try{this.value=this.getter()}finally{I=n,this.flags&=-5}}let t=I;return t!==void 0&&pe(this,t,de),this.value}function Mn(...e){if(e.length){if(this.pendingValue!==(this.pendingValue=e[0])){this.flags=17;let t=this.subs;t!==void 0&&(Tn(t),Z||Ie())}}else{if(this.flags&16&&Rn(this)){let n=this.subs;n!==void 0&&Le(n)}let t=I;for(;t!==void 0;){if(t.flags&3){pe(this,t,de);break}t=t.subs?.sub}return this.currentValue}}function Ln(){me.call(this)}function me(){this.depsTail=void 0,this.flags=0,ge(this);let e=this.subs;e!==void 0&&Me(e)}function ge(e){let t=e.depsTail,n=t!==void 0?t.nextDep:e.deps;for(;n!==void 0;)n=Me(n,e)}function oo(e,t,n){if(typeof t!="function"){if(n){let i=D(void 0),c=e();if(D(i),n(c,t))return}e(t);return}let o=D(void 0),r=e();D(o);let s=t(r);n&&n(r,s)||e(s)}function w(e,t){let n=vn(e),o=n,r=t?.equals;return[o,i=>oo(n,i,r)]}var W=null,An=[];function H(e){let t={disposers:[],scopeDispose:null};An.push(W),W=t;let n=()=>{if(t.scopeDispose){try{t.scopeDispose()}catch{}t.scopeDispose=null}for(let r of t.disposers)try{r()}catch{}t.disposers.length=0},o;try{t.scopeDispose=Cn(()=>{o=e(n)})}finally{W=An.pop()??null}return o}function Fe(e){W&&W.disposers.push(e)}function Be(){return W!==null}var Ke=null;function je(e){Ke?.(e)}function $e(e){let t=Ke;return Ke=e,t}var A=typeof process<"u"?process.env?.NODE_ENV!=="production":!0,Ve=null;function Ue(e){Ve=e}function F(e,t){if(Ve)try{Ve(e,t?{source:t}:{})}catch{}A&&console.error(`[forma] ${t??"Unknown"} error:`,e)}var We=32,Nn=100,Ge=[];for(let e=0;e<We;e++)Ge.push([]);var he=We;function ro(){if(he>0){let e=Ge[--he];return e.length=0,e}return[]}function Dn(e){e.length=0,he<We&&(Ge[he++]=e)}function Hn(e){if(e!==void 0)try{e()}catch(t){F(t,"effect cleanup")}}function _n(e){if(e!==void 0)for(let t=0;t<e.length;t++)try{e[t]()}catch(n){F(n,"effect cleanup")}}function C(e){let t=Oe(e);return Be()&&Fe(t),t}function Q(e){let t=Be(),n,o,r,s,i=b=>{if(s!==void 0){s.push(b);return}if(r!==void 0){let y=ro();y.push(r,b),r=void 0,s=y;return}r=b},c=!1,f=!0,u=!1,a=!1,d=()=>{if(n!==void 0&&(Hn(n),n=void 0),o!==void 0&&(_n(o),Dn(o),o=void 0),c){try{e()}catch(y){F(y,"effect")}return}r=void 0,s=void 0;let b=$e(i);try{let y=e();if(typeof y=="function"&&i(y),r===void 0&&s===void 0){f&&(c=!0);return}s!==void 0?o=s:n=r}catch(y){F(y,"effect"),s!==void 0?o=s:n=r}finally{$e(b),f=!1}},p=Oe(()=>{if(u){a=!0;return}u=!0;try{let b=0;do a=!1,d(),a&&(b++,b>=Nn&&(F(new Error(`createEffect exceeded ${Nn} re-entrant runs`),"effect"),a=!1));while(a)}finally{u=!1}}),h=!1,T=()=>{h||(h=!0,p(),n!==void 0&&(Hn(n),n=void 0),o!==void 0&&(_n(o),Dn(o),o=void 0))};return t&&Fe(T),T}function ee(e){return wn(e)}var ze=ee;function _(e){xn();try{e()}finally{bn()}}function L(e){let t=D(void 0);try{return e()}finally{D(t)}}function qe(e,t,n){let o,r=!0;return()=>{let s=e();if(n?.defer&&r){r=!1,o=s;return}let i=L(()=>t(s,o));return o=s,i}}function Je(e){return{current:e}}function Ye(e,t){let[n,o]=w(t);return[n,s=>{o(i=>e(i,s))}]}var ye=null,On=[];function Pn(e){On.push(ye),ye=e}function In(){ye=On.pop()??null}function Fn(){return ye}function Xe(e,t,n){let[o,r]=w(n?.initialValue),[s,i]=w(!1),[c,f]=w(void 0),u=Fn(),a=null,d=0,g=()=>{let h=L(e);a&&a.abort();let T=new AbortController;a=T;let b=++d,y=()=>b===d,v=!1;u&&(u.increment(),v=!0),i(!0),f(void 0),Promise.resolve(t(h)).then(S=>{y()&&!T.signal.aborted&&r(()=>S)}).catch(S=>{y()&&!T.signal.aborted&&S?.name!=="AbortError"&&f(S)}).finally(()=>{v&&u?.decrement(),y()&&(i(!1),a===T&&(a=null))})};C(()=>{e(),g()});let p=(()=>o());return p.loading=s,p.error=c,p.refetch=g,p.mutate=h=>r(()=>h),p}function tt(e){let t=e.length;if(t===0)return[];let n=new Int32Array(t),o=new Int32Array(t),r=new Int32Array(t).fill(-1),s=0;for(let f=0;f<t;f++){let u=e[f],a=0,d=s;for(;a<d;){let g=a+d>>1;n[g]<u?a=g+1:d=g}n[a]=u,o[a]=f,a>0&&(r[f]=o[a-1]),a>=s&&s++}let i=new Array(s),c=o[s-1];for(let f=s-1;f>=0;f--)i[f]=c,c=r[c];return i}var so=32,Ze=Symbol.for("forma-abort"),Qe=Symbol.for("forma-attr-cache"),et=Symbol.for("forma-dynamic-child");function io(e,t){return e instanceof HTMLElement&&t instanceof HTMLElement&&e.tagName===t.tagName&&!e[Ze]&&!e[Qe]&&!e[et]&&!t[Ze]&&!t[Qe]&&!t[et]}function ao(e,t){let n=new Set;for(let o of Array.from(t.attributes))n.add(o.name),e.getAttribute(o.name)!==o.value&&e.setAttribute(o.name,o.value);for(let o of Array.from(e.attributes))n.has(o.name)||e.removeAttribute(o.name);e.replaceChildren(...Array.from(t.childNodes))}function co(e,t,n,o,r,s,i,c,f){let u=t.length,a=n.length,d=new Array(u);for(let l=0;l<u;l++)d[l]=r(t[l]);let g=new Array(a),p=new Uint8Array(u);for(let l=0;l<a;l++){let m=r(n[l]),x=-1;for(let E=0;E<u;E++)if(!p[E]&&d[E]===m){x=E,p[E]=1;break}g[l]=x}for(let l=0;l<u;l++)if(!p[l])if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);if(u===a){let l=!0;for(let m=0;m<a;m++)if(g[m]!==m){l=!1;break}if(l){let m=new Array(a);for(let x=0;x<a;x++){let E=o[x];i(E,n[x]),m[x]=E}return{nodes:m,items:n}}}let h=[],T=[];for(let l=0;l<a;l++)g[l]!==-1&&(h.push(g[l]),T.push(l));let b=tt(h),y=new Uint8Array(a);for(let l of b)y[T[l]]=1;let v=new Array(a),S=c??null;for(let l=a-1;l>=0;l--){let m,x=!1;if(g[l]===-1)m=s(n[l]),x=!0;else if(m=o[g[l]],i(m,n[l]),y[l]){v[l]=m,S=m;continue}S?e.insertBefore(m,S):e.appendChild(m),x&&f?.onInsert?.(m),v[l]=m,S=m}return{nodes:v,items:n}}function G(e,t,n,o,r,s,i,c,f){let u=t.length,a=n.length;if(a===0){for(let l=0;l<u;l++)if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);return{nodes:[],items:[]}}if(u===0){let l=new Array(a);for(let m=0;m<a;m++){let x=s(n[m]);c?e.insertBefore(x,c):e.appendChild(x),f?.onInsert?.(x),l[m]=x}return{nodes:l,items:n}}if(u<so)return co(e,t,n,o,r,s,i,c,f);let d=new Map;for(let l=0;l<u;l++)d.set(r(t[l]),l);let g=new Array(a),p=new Uint8Array(u);for(let l=0;l<a;l++){let m=r(n[l]),x=d.get(m);x!==void 0?(g[l]=x,p[x]=1):g[l]=-1}for(let l=0;l<u;l++)if(!p[l])if(f?.onBeforeRemove){let m=o[l];f.onBeforeRemove(m,()=>{m.parentNode&&m.parentNode.removeChild(m)})}else e.removeChild(o[l]);if(u===a){let l=!0;for(let m=0;m<a;m++)if(g[m]!==m){l=!1;break}if(l){let m=new Array(a);for(let x=0;x<a;x++){let E=o[x];i(E,n[x]),m[x]=E}return{nodes:m,items:n}}}let h=[],T=[];for(let l=0;l<a;l++)g[l]!==-1&&(h.push(g[l]),T.push(l));let b=tt(h),y=new Uint8Array(a);for(let l of b)y[T[l]]=1;let v=new Array(a),S=c??null;for(let l=a-1;l>=0;l--){let m,x=!1;if(g[l]===-1)m=s(n[l]),x=!0;else if(m=o[g[l]],i(m,n[l]),y[l]){v[l]=m,S=m;continue}S?e.insertBefore(m,S):e.appendChild(m),x&&f?.onInsert?.(m),v[l]=m,S=m}return{nodes:v,items:n}}function te(e,t,n,o){if(k)return{type:"list",items:e,keyFn:t,renderFn:n,options:o};let r=document.createComment("forma-list-start"),s=document.createComment("forma-list-end"),i=document.createDocumentFragment();i.appendChild(r),i.appendChild(s);let c=new Map,f=[],u=[],a=o?.updateOnItemChange??"none";return C(()=>{let d=e(),g=r.parentNode;if(!g)return;if(!Array.isArray(d)){A&&console.warn("[forma] createList: value is not an array, treating as empty");for(let y of f)y.parentNode===g&&g.removeChild(y);c=new Map,f=[],u=[];return}let p=d;for(let y=0;y<d.length;y++)if(d[y]==null){p=d.filter(v=>v!=null);break}if(A){let y=new Set;for(let v of p){let S=t(v);y.has(S)&&console.warn("[forma] createList: duplicate key detected:",S),y.add(S)}}let T=G(g,u,p,f,t,y=>{let v=t(y),[S,l]=w(0),m=L(()=>n(y,S));return c.set(v,{element:m,item:y,getIndex:S,setIndex:l}),m},a==="rerender"?(y,v)=>{let S=t(v),l=c.get(S);if(!l||l.item===v||(l.item=v,!(y instanceof HTMLElement))||y[Ze]||y[Qe]||y[et])return;let m=L(()=>n(v,l.getIndex));io(y,m)&&(ao(y,m),l.element=y)}:(y,v)=>{let S=t(v),l=c.get(S);l&&(l.item=v)},s),b=new Map;for(let y=0;y<p.length;y++){let v=t(p[y]),S=c.get(v);S&&(S.setIndex(y),b.set(v,S))}c=b,f=T.nodes,u=T.items}),i}function ne(e,t,n){if(k){let a=e()?t():n?.()??null;return{type:"show",condition:e,whenTrue:t,whenFalse:n,initialBranch:a}}let o=document.createComment("forma-show"),r=document.createComment("/forma-show"),s=document.createDocumentFragment();s.appendChild(o),s.appendChild(r);let i=null,c=null,f=null,u=C(()=>{let a=!!e(),d=typeof globalThis.__FORMA_DEBUG__<"u",g=d?t.toString().slice(0,60):"";if(a===c){d&&console.log("[forma:show] skip (same)",a,g);return}d&&console.log("[forma:show]",c,"\u2192",a,g),c=a;let p=o.parentNode;if(!p){d&&console.warn("[forma:show] parentNode is null! skipping.",g);return}if(d&&console.log("[forma:show] parent:",p.nodeName,"inDoc:",document.contains(p)),f&&(f(),f=null),i)if(i.parentNode===p)p.removeChild(i);else for(;o.nextSibling&&o.nextSibling!==r;)p.removeChild(o.nextSibling);let h=a?t:n;if(h){let T;i=H(b=>(T=b,L(()=>h()))),f=T}else i=null;i&&p.insertBefore(i,r)});return s.__showDispose=()=>{u(),f&&(f(),f=null)},s}var Bn=Symbol.for("forma-abort"),k=!1;function Kn(e){k=e}function J(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="element"}function Te(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="show"}function ot(e){return e!=null&&typeof e=="object"&&"type"in e&&e.type==="list"}function lo(e,t){if(t)for(let n in t){let o=t[n];if(typeof o!="function")continue;if(n.charCodeAt(0)===111&&n.charCodeAt(1)===110&&n.length>2){let i=e[Bn];i||(i=new AbortController,e[Bn]=i),e.addEventListener(n.slice(2).toLowerCase(),o,{signal:i.signal});continue}let r=o,s=n;C(()=>{let i=r();i===!1||i==null?e.removeAttribute(s):i===!0?e.setAttribute(s,""):e.setAttribute(s,String(i))})}}function oe(e){if(e instanceof Node)return e;if(e==null||e===!1||e===!0)return null;if(typeof e=="string")return new Text(e);if(typeof e=="number")return new Text(String(e));if(J(e))return q(e);if(Te(e)){let t=k;k=!1;try{return ne(e.condition,()=>oe(e.whenTrue())??document.createComment("empty"),e.whenFalse?()=>oe(e.whenFalse())??document.createComment("empty"):void 0)}finally{k=t}}if(ot(e)){let t=k;k=!1;try{return te(e.items,e.keyFn,e.renderFn,e.options)}finally{k=t}}return null}function q(e){let t=k;k=!1;try{let n=e.children.map(o=>J(o)?q(o):Te(o)||ot(o)?oe(o):o);return se(e.tag,e.props,...n)}finally{k=t}}function uo(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===105}function nt(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===115}function fo(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===116}function po(e){return e.length>=4&&e.charCodeAt(0)===102&&e.charCodeAt(1)===58&&e.charCodeAt(2)===108}function z(e){let t="/"+e.data,n=e.nextSibling;for(;n;){if(n.nodeType===8&&n.data===t)return n;n=n.nextSibling}return null}function mo(e,t){let n=e.nextSibling;for(;n&&n!==t;){if(n.nodeType===3)return n;n=n.nextSibling}return null}function go(e,t){let n=e.nextSibling;for(;n&&n!==t;){if(n.nodeType===1)return n;n=n.nextSibling}}function ho(e,t){let n=document.createDocumentFragment(),o=e.nextSibling;for(;o&&o!==t;){let r=o.nextSibling;n.appendChild(o),o=r}return n}function jn(e,t){let n=!!e.condition(),o=null,r=null;if(!(t.start.nextSibling!==t.end)&&n){A&&console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true");let i=e.whenTrue();i instanceof Node&&t.start.parentNode.insertBefore(i,t.end)}C(()=>{let i=!!e.condition();if(i===n)return;n=i;let c=t.start.parentNode;if(!c)return;let f=ho(t.start,t.end);i?r=f:o=f;let u=i?o??e.whenTrue():e.whenFalse?r??e.whenFalse():null;i&&o&&(o=null),!i&&r&&(r=null),u!=null&&!(u instanceof Node)&&(u=oe(u)),u instanceof Node&&c.insertBefore(u,t.end)})}function $n(e,t,n){if(J(e)){let o=go(t,n);o&&re(e,o)}else if(Te(e)){let o=t.nextSibling;for(;o&&o!==n;){if(o.nodeType===8&&nt(o.data)){let r=o,s=z(r);s&&(e.initialBranch&&$n(e.initialBranch,r,s),jn(e,{start:r,end:s,cachedContent:null}));break}o=o.nextSibling}}}function re(e,t){if(!t||t.tagName!==e.tag.toUpperCase()){A&&console.warn(`Hydration mismatch: expected <${e.tag}>, got <${t?.tagName?.toLowerCase()??"nothing"}>`);let o=q(e);t&&t.replaceWith(o);return}lo(t,e.props);let n=t.firstChild;for(let o of e.children)if(!(o===!1||o==null))if(J(o)){for(;n&&n.nodeType===3&&!n.data.trim();)n=n.nextSibling;for(;n&&n.nodeType===1&&n.hasAttribute("data-forma-island");)n=n.nextSibling;if(!n){t.appendChild(q(o));continue}if(n.nodeType===1){let r=n;n=n.nextSibling,re(o,r)}else if(n.nodeType===8&&uo(n.data)){let r=z(n),s=q(o);r?(r.parentNode.insertBefore(s,r),n=r.nextSibling):(t.appendChild(s),n=null)}else t.appendChild(q(o))}else if(Te(o)){for(;n&&!(n.nodeType===8&&nt(n.data));)n=n.nextSibling;if(n){let r=n,s=z(r);s&&(o.initialBranch&&$n(o.initialBranch,r,s),jn(o,{start:r,end:s,cachedContent:null}),n=s.nextSibling)}}else if(ot(o)){for(;n&&!(n.nodeType===8&&po(n.data));)n=n.nextSibling;if(n){let r=n,s=z(r);if(s){let i=new Map,c=[],f=r.nextSibling;for(;f&&f!==s;){if(f.nodeType===1){let l=f;c.push(l);let m=l.getAttribute("data-forma-key");m!=null&&i.set(m,l)}f=f.nextSibling}let u=L(()=>o.items()),a=o.keyFn,d=o.renderFn,g=i.size===0&&c.length>0,p=[],h=[],T=new Set;for(let l=0;l<u.length;l++){let m=u[l],x=a(m),E;if(g?l<c.length&&(E=c[l],T.add(l)):(E=i.get(String(x)),E&&i.delete(String(x))),E)p.push(E),h.push(m);else{A&&console.warn(`[FormaJS] Hydration: list item key "${x}" not found in SSR \u2014 rendering fresh`);let R=k;k=!1;try{let[M]=w(l),N=d(m,M);s.parentNode.insertBefore(N,s),p.push(N),h.push(m)}finally{k=R}}}if(g)for(let l=0;l<c.length;l++)!T.has(l)&&c[l].parentNode&&c[l].parentNode.removeChild(c[l]);else for(let[l,m]of i)A&&console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${l}"`),m.parentNode&&m.parentNode.removeChild(m);let b=r.parentNode;for(let l of p)b.insertBefore(l,s);let y=new Map;for(let l=0;l<h.length;l++){let m=h[l],x=a(m),[E,R]=w(l);y.set(x,{element:p[l],item:m,getIndex:E,setIndex:R})}let v=p.slice(),S=h.slice();C(()=>{let l=o.items(),m=r.parentNode;if(!m)return;let x=G(m,S,l,v,a,R=>{let M=k;k=!1;try{let N=a(R),[O,Re]=w(0),fe=L(()=>d(R,O));return y.set(N,{element:fe,item:R,getIndex:O,setIndex:Re}),fe}finally{k=M}},(R,M)=>{let N=a(M),O=y.get(N);O&&(O.item=M)},s),E=new Map;for(let R=0;R<l.length;R++){let M=a(l[R]),N=y.get(M);N&&(N.setIndex(R),E.set(M,N))}y=E,v=x.nodes,S=x.items}),n=s.nextSibling}}}else if(typeof o=="function"){for(;n&&n.nodeType===3&&!n.data.trim();)n=n.nextSibling;if(n&&n.nodeType===1){let r=o();if(J(r)){let s=n;n=n.nextSibling,re(r,s);continue}}if(n&&n.nodeType===8){let r=n.data;if(fo(r)){let s=z(n),i=n.nextSibling;if(!i||i.nodeType!==3){A&&console.warn(`[FormaJS] Hydration: created text node for marker ${r} \u2014 SSR walker should emit content between markers`);let c=document.createTextNode("");n.parentNode.insertBefore(c,s||n.nextSibling),i=c}C(()=>{i.data=String(o())}),n=s?s.nextSibling:i.nextSibling}else if(nt(r)){let s=n,i=z(s);if(i){let c=mo(s,i);c||(A&&console.warn(`[FormaJS] Hydration: created text node for show marker ${s.data} \u2014 SSR walker should emit content between markers`),c=document.createTextNode(""),s.parentNode.insertBefore(c,i)),C(()=>{c.data=String(o())}),n=i.nextSibling}else n=n.nextSibling}else n=n.nextSibling}else if(n&&n.nodeType===3){let r=n;n=n.nextSibling,C(()=>{r.data=String(o())})}else{A&&console.warn(`[FormaJS] Hydration: created text node in empty <${t.tagName.toLowerCase()}> \u2014 IR may not cover this component`);let r=document.createTextNode("");t.appendChild(r),C(()=>{r.data=String(o())})}}else(typeof o=="string"||typeof o=="number")&&n&&n.nodeType===3&&(n=n.nextSibling)}function V(e,t){if(!(t.childElementCount>0||t.childNodes.length>0&&Array.from(t.childNodes).some(r=>r.nodeType===1||r.nodeType===3&&r.data.trim()))){if(A){let s=t.getAttribute("data-forma-component")||"unknown";console.warn(`[forma] Island "${s}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.`)}let r=e();if(r instanceof Element){for(let s of Array.from(t.attributes))s.name.startsWith("data-forma-")&&r.setAttribute(s.name,s.value);return t.replaceWith(r),r}else r instanceof Node&&t.appendChild(r);return t}Kn(!0);let o;try{o=e()}finally{Kn(!1)}return!o||!J(o)?(t.removeAttribute("data-forma-ssr"),t):(t.hasAttribute("data-forma-island")?re(o,t):re(o,t.children[0]),t.removeAttribute("data-forma-ssr"),t)}var ce=Symbol.for("forma.fragment"),yo="http://www.w3.org/2000/svg",ie="http://www.w3.org/1999/xlink",To=new Set(["svg","path","circle","rect","line","polyline","polygon","ellipse","g","text","tspan","textPath","defs","use","symbol","clipPath","mask","pattern","marker","linearGradient","radialGradient","stop","filter","feGaussianBlur","feColorMatrix","feOffset","feBlend","feMerge","feMergeNode","feComposite","feFlood","feMorphology","feTurbulence","feDisplacementMap","feImage","foreignObject","animate","animateTransform","animateMotion","set","image","switch","desc","title","metadata"]),Un=new Set(["disabled","checked","readonly","required","autofocus","autoplay","controls","default","defer","formnovalidate","hidden","ismap","loop","multiple","muted","nomodule","novalidate","open","playsinline","reversed","selected","async"]),j=null;function So(e){if(!j){j=Object.create(null);for(let t of["div","span","p","a","li","ul","ol","button","input","label","h1","h2","h3","h4","h5","h6","section","header","footer","main","nav","table","tr","td","th","tbody","img","form","select","option","textarea","i","b","strong","em","small","article","aside","details","summary"])j[t]=document.createElement(t)}return j[e]??(j[e]=document.createElement(e))}var Vn=Object.create(null);function xo(e){return Vn[e]??(Vn[e]=e.slice(2).toLowerCase())}var Se=Symbol.for("forma-abort");function bo(e){let t=e[Se];return t||(t=new AbortController,e[Se]=t),t}function st(e){let t=e[Se];t&&(t.abort(),delete e[Se])}var rt=Symbol.for("forma-attr-cache"),vo=Symbol.for("forma-dynamic-child");function P(e){return e[rt]??(e[rt]=Object.create(null))}function it(e,t,n){if(typeof n=="function")C(()=>{let o=n(),r=P(e);r.class!==o&&(r.class=o,e instanceof HTMLElement?e.className=o:e.setAttribute("class",o))});else{let o=P(e);if(o.class===n)return;o.class=n,e instanceof HTMLElement?e.className=n:e.setAttribute("class",n)}}function wo(e,t,n){if(typeof n=="function"){let o=[];C(()=>{let r=n();if(typeof r=="string"){let s=P(e);if(s.style===r)return;s.style=r,o=[],e.style.cssText=r}else if(r&&typeof r=="object"){let s=e.style,i=Object.keys(r);for(let c of o)c in r||s.removeProperty(c.replace(/[A-Z]/g,f=>"-"+f.toLowerCase()));Object.assign(s,r),o=i}})}else if(typeof n=="string"){let o=P(e);if(o.style===n)return;o.style=n,e.style.cssText=n}else n&&typeof n=="object"&&Object.assign(e.style,n)}function Wn(e,t,n){let o=bo(e);e.addEventListener(xo(t),n,{signal:o.signal})}function Co(e,t,n){if(typeof n=="function")C(()=>{let o=n();if(o==null){e.innerHTML="";return}if(typeof o!="object"||!("__html"in o))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof o);let r=o.__html;if(typeof r!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof r);let s=P(e);s.innerHTML!==r&&(s.innerHTML=r,e.innerHTML=r)});else{if(n==null){e.innerHTML="";return}if(typeof n!="object"||!("__html"in n))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof n);let o=n.__html;if(typeof o!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof o);e.innerHTML=o}}function Eo(e,t,n){let o=t.slice(6);typeof n=="function"?C(()=>{let r=n();r==null||r===!1?e.removeAttributeNS(ie,o):e.setAttributeNS(ie,t,String(r))}):n==null||n===!1?e.removeAttributeNS(ie,o):e.setAttributeNS(ie,t,String(n))}function Ro(e,t,n){if(typeof n=="function")C(()=>{let o=n(),r=P(e);r[t]!==o&&(r[t]=o,o?e.setAttribute(t,""):e.removeAttribute(t))});else{let o=P(e);if(o[t]===n)return;o[t]=n,n?e.setAttribute(t,""):e.removeAttribute(t)}}function ko(e,t,n){if(typeof n=="function")C(()=>{let o=n();if(o==null||o===!1){let r=P(e);if(r[t]===null)return;r[t]=null,e.removeAttribute(t)}else{let r=String(o),s=P(e);if(s[t]===r)return;s[t]=r,e.setAttribute(t,r)}});else if(n==null||n===!1){let o=P(e);if(o[t]===null)return;o[t]=null,e.removeAttribute(t)}else{let o=String(n),r=P(e);if(r[t]===o)return;r[t]=o,e.setAttribute(t,o)}}var U=new Map;U.set("class",it);U.set("className",it);U.set("style",wo);U.set("ref",()=>{});U.set("dangerouslySetInnerHTML",Co);for(let e of Un)U.set(e,Ro);function Mo(e,t,n){if(t==="class"){it(e,t,n);return}if(t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&t.length>2){Wn(e,t,n);return}let o=U.get(t);if(o){o(e,t,n);return}if(t.charCodeAt(0)===120&&t.startsWith("xlink:")){Eo(e,t,n);return}ko(e,t,n)}function Lo(e,t,n){if(!(n==null||n===!1)){if(t==="class"||t==="className"){e.className=n;return}if(t==="style"){typeof n=="string"?e.style.cssText=n:n&&typeof n=="object"&&Object.assign(e.style,n);return}if(t==="dangerouslySetInnerHTML"){if(typeof n!="object"||!("__html"in n))throw new TypeError("dangerouslySetInnerHTML: expected { __html: string }, got "+typeof n);let o=n.__html;if(typeof o!="string")throw new TypeError("dangerouslySetInnerHTML: __html must be a string, got "+typeof o);e.innerHTML=o;return}if(t.charCodeAt(0)===120&&t.startsWith("xlink:")){e.setAttributeNS(ie,t,String(n));return}if(Un.has(t)){n&&e.setAttribute(t,"");return}n===!0?e.setAttribute(t,""):e.setAttribute(t,String(n))}}function ae(e,t){if(t instanceof Node){e.appendChild(t);return}if(typeof t=="string"){e.appendChild(new Text(t));return}if(!(t==null||t===!1||t===!0)){if(typeof t=="number"){e.appendChild(new Text(String(t)));return}if(typeof t=="function"){e instanceof Element&&(e[vo]=!0);let n=null;C(()=>{let o=t();if(o instanceof Node)n?e.replaceChild(o,n):e.appendChild(o),n=o;else{let r=String(typeof o=="symbol"?o:o??"");if(!n)n=new Text(r),e.appendChild(n);else if(n.nodeType===3)n.data=r;else{let s=new Text(r);e.replaceChild(s,n),n=s}}});return}if(Array.isArray(t)){for(let n of t)ae(e,n);return}}}function se(e,t,...n){if(typeof e=="function"&&e!==ce){let i={...t??{},children:n};return e(i)}if(e===ce){let i=document.createDocumentFragment();for(let c of n)ae(i,c);return i}let o=e;if(k)return{type:"element",tag:o,props:t??null,children:n};let r;if(j&&j[o]?r=j[o].cloneNode(!1):To.has(o)?r=document.createElementNS(yo,o):r=So(o).cloneNode(!1),t){let i=!1;for(let c in t){if(c==="ref")continue;let f=t[c];if(c.charCodeAt(0)===111&&c.charCodeAt(1)===110&&c.length>2){Wn(r,c,f);continue}if(typeof f=="function"){i||(r[rt]=Object.create(null),i=!0),Mo(r,c,f);continue}Lo(r,c,f)}}let s=n.length;if(s===1){let i=n[0];typeof i=="string"?r.textContent=i:typeof i=="number"?r.textContent=String(i):ae(r,i)}else if(s>1)for(let i of n)ae(r,i);return t&&typeof t.ref=="function"&&t.ref(r),r}function at(...e){let t=document.createDocumentFragment();for(let n of e)ae(t,n);return t}function ct(e){if(typeof e=="function"){let t=new Text("");return C(()=>{t.data=e()}),t}return new Text(e)}function lt(e,t){let n=typeof t=="string"?document.querySelector(t):t;if(!n)throw new Error(`mount: container not found \u2014 "${t}"`);let o;if(n.hasAttribute("data-forma-ssr"))H(s=>{o=s,V(e,n)});else{let s=H(i=>(o=i,e()));n.innerHTML="",n.appendChild(s)}let r=!1;return()=>{r||(r=!0,o(),n.innerHTML="")}}function ut(e,t,n){let o=document.createComment("forma-switch"),r=document.createComment("/forma-switch"),s=document.createDocumentFragment();s.appendChild(o),s.appendChild(r);let i=new Map,c=null,f=Ao,u=C(()=>{let a=e();if(a===f)return;let d=typeof globalThis.__FORMA_DEBUG__<"u";d&&console.log("[forma:switch] transition",String(f),"\u2192",String(a)),f=a;let g=o.parentNode;if(!g){d&&console.warn("[forma:switch] markers not in DOM yet, skipping");return}if(c)if(c.parentNode===g)d&&console.log("[forma:switch] removing single node"),g.removeChild(c);else if(c.nodeType===11){d&&console.log("[forma:switch] scooping nodes back into fragment");let h=0;for(;o.nextSibling&&o.nextSibling!==r;)c.appendChild(o.nextSibling),h++;d&&console.log("[forma:switch] scooped",h,"nodes back into fragment")}else for(d&&console.log("[forma:switch] clearing detached node between markers");o.nextSibling&&o.nextSibling!==r;)g.removeChild(o.nextSibling);let p=t.find(h=>h.match===a);if(p){let h=i.get(a);if(h)d&&console.log("[forma:switch] reusing cached branch for",String(a),"\u2192",h.node.nodeName,"type",h.node.nodeType,"childNodes",h.node.childNodes?.length);else{let T,b=H(y=>(T=y,L(()=>p.render())));h={node:b,dispose:T},i.set(a,h),d&&console.log("[forma:switch] rendered new branch for",String(a),"\u2192",b.nodeName,"type",b.nodeType)}c=h.node}else c=n?.()??null,d&&console.log("[forma:switch] no match, using fallback");c&&(g.insertBefore(c,r),d&&console.log("[forma:switch] inserted",c.nodeName,"before end marker"))});return s.__switchDispose=()=>{u();for(let a of i.values())a.dispose();i.clear()},s}var Ao=Symbol("unset");function ft(e,t){let n=document.createComment("forma-portal"),o=typeof t=="string"?document.querySelector(t):t??document.body;if(!o)throw new Error(`createPortal: target not found: ${t}`);let r=null,s=()=>{r&&r.parentNode===o&&o.removeChild(r),r=null};return Q(()=>{let i=e();return s(),r=i,o.appendChild(i),()=>{s()}}),n}function dt(e,t){let n=document.createComment("forma-error-boundary"),o=document.createComment("/forma-error-boundary"),r=document.createDocumentFragment();r.appendChild(n),r.appendChild(o);let[s,i]=w(0),c=null;return C(()=>{s();let f=n.parentNode;if(f){c&&c.parentNode===f&&f.removeChild(c);try{c=e()}catch(u){let a=u instanceof Error?u:new Error(String(u));c=t(a,()=>i(g=>g+1))}c&&f.insertBefore(c,o)}}),r}function pt(e,t){let n=document.createComment("forma-suspense"),o=document.createComment("/forma-suspense"),r=document.createDocumentFragment();r.appendChild(n),r.appendChild(o);let[s,i]=w(0),c=null,f=null,u=null;Pn({increment(){i(d=>d+1)},decrement(){i(d=>Math.max(0,d-1))}});try{f=t()}finally{In()}return C(()=>{let d=n.parentNode;if(!d)return;let p=s()>0?u??=e():f;p!==c&&(c&&c.parentNode===d&&d.removeChild(c),p&&d.insertBefore(p,o),c=p)}),r}var No=new Set(["__proto__","constructor","prototype"]);function Gn(e){for(let t of No)t in e&&delete e[t];return e}function Do(e,t,n){let o=e.getAttribute("data-forma-props");return o?Gn(JSON.parse(o)):n&&String(t)in n?Gn(n[String(t)]):null}function mt(e){let t=document.getElementById("__forma_islands"),n=t?JSON.parse(t.textContent):null,o=document.querySelectorAll("[data-forma-island]");for(let r of o){let s=parseInt(r.getAttribute("data-forma-island"),10),i=r.getAttribute("data-forma-component"),c=e[i];if(!c){A&&console.warn(`[forma] No hydrate function for island "${i}" (id=${s})`),r.setAttribute("data-forma-status","error");continue}let f=r.getAttribute("data-forma-hydrate")||"load";if(f==="visible"){let u=new IntersectionObserver(a=>{for(let d of a)d.isIntersecting&&(u.disconnect(),xe(r,s,i,c,n))},{rootMargin:"200px"});u.observe(r)}else if(f==="idle"){let u=()=>xe(r,s,i,c,n);typeof requestIdleCallback=="function"?requestIdleCallback(u):setTimeout(u,200)}else if(f==="interaction"){let u=()=>{r.removeEventListener("pointerdown",u,!0),r.removeEventListener("focusin",u,!0),xe(r,s,i,c,n)};r.addEventListener("pointerdown",u,{capture:!0,once:!0}),r.addEventListener("focusin",u,{capture:!0,once:!0})}else xe(r,s,i,c,n)}}function be(e){let t=e.__formaDispose;typeof t=="function"&&(t(),delete e.__formaDispose,e.setAttribute("data-forma-status","disposed"))}function gt(e=document){let t=e.querySelectorAll('[data-forma-status="active"]');for(let n of t)be(n)}function xe(e,t,n,o,r){try{let s=Do(e,t,r);e.setAttribute("data-forma-status","hydrating");let i=e;H(c=>{i=V(()=>o(e,s),e),i.__formaDispose=c}),i.setAttribute("data-forma-status","active")}catch(s){A&&console.error(`[forma] Island "${n}" (id=${t}) failed:`,s),e.setAttribute("data-forma-status","error")}}var K=null,zn=[];function Ho(e){zn.push(K),K=e}function _o(){K=zn.pop()??null}function ht(e){if(K===null)throw new Error("onMount() must be called inside a component setup function");K.mountCallbacks.push(e)}function yt(e){if(K===null)throw new Error("onUnmount() must be called inside a component setup function");K.unmountCallbacks.push(e)}var ve=Symbol("forma:component:dispose");function Tt(e){let t=typeof e=="function"?e:e.setup,n=typeof e=="function"?void 0:e.name;return function(){let r={disposers:[],mountCallbacks:[],unmountCallbacks:[]};Ho(r);let s;try{s=t()}finally{_o()}let i=()=>{for(let c of r.unmountCallbacks)try{c()}catch(f){F(f,"onUnmount")}for(let c of r.disposers)try{c()}catch(f){F(f,"component disposer")}r.disposers.length=0,r.mountCallbacks.length=0,r.unmountCallbacks.length=0};s[ve]=i;for(let c of r.mountCallbacks)try{let f=c();typeof f=="function"&&r.unmountCallbacks.push(f)}catch(f){F(f,"onMount")}return s}}function St(e){let t=e;typeof t[ve]=="function"&&(t[ve](),delete t[ve])}function xt(e){K!==null&&K.disposers.push(e)}var le=new Map;function bt(e){return{id:Symbol("forma:context"),defaultValue:e}}function vt(e,t){let n=le.get(e.id);n===void 0&&(n=[],le.set(e.id,n)),n.push(t)}function wt(e){let t=le.get(e.id);return t===void 0||t.length===0?e.defaultValue:t[t.length-1]}function Ct(e){let t=le.get(e.id);t!==void 0&&t.length>0&&(t.pop(),t.length===0&&le.delete(e.id))}var ue=Symbol("forma-raw"),Jn=Symbol("forma-proxy"),Oo=new Set(["push","pop","shift","unshift","splice","sort","reverse","fill","copyWithin"]);function qn(e){return!(e==null||typeof e!="object"||e instanceof Date||e instanceof RegExp||e instanceof Map||e instanceof Set||e instanceof WeakMap||e instanceof WeakSet||e instanceof Error||e instanceof Promise||e[Jn])}function Et(e,t){if(e===null||typeof e!="object"||(t||(t=new WeakSet),t.has(e)))return e;if(t.add(e),Array.isArray(e))return e.map(o=>Et(o,t));let n={};for(let o of Object.keys(e))n[o]=Et(e[o],t);return n}function Rt(e){let t=new Map,n=new Map;function o(d){let g=d.lastIndexOf(".");if(g===-1)return;let p=d.substring(0,g),h=n.get(p);h||(h=new Set,n.set(p,h)),h.add(d)}function r(d,g){let p=t.get(d);return p||(p=w(g),t.set(d,p),o(d)),p}let s=new WeakMap;function i(d){let g=n.get(d);if(g){for(let p of g)i(p),t.delete(p),n.delete(p);g.clear()}}function c(d,g){if(!qn(d))return d;let p=s.get(d);if(p)return p;let h=Array.isArray(d),T=g?g+".":"",b="",y,v=new Proxy(d,{get(S,l,m){if(l===ue)return S;if(l===Jn)return!0;if(typeof l=="symbol")return Reflect.get(S,l,m);let x=String(l),E=T+x;if(h&&Oo.has(x))return(...N)=>{let O;return _(()=>{let Re=N.map(Y=>Y!=null&&typeof Y=="object"&&Y[ue]?Y[ue]:Y);O=S[x].apply(S,Re),i(g);let[,fe]=r(T+"length",S.length);fe(S.length)}),O};if(h&&x==="length"){let[N]=r(E,S.length);return N(),S.length}let R=Reflect.get(S,l),M;return x===b&&y?M=y:(M=r(E,R),b=x,y=M),M[0](),qn(R)?c(R,E):R},set(S,l,m){if(typeof l=="symbol")return Reflect.set(S,l,m);let x=String(l),E=T+x,R=m!=null&&typeof m=="object"&&m[ue]?m[ue]:m;if(Reflect.set(S,l,R),R!=null&&typeof R=="object"&&i(E),h&&x!=="length"){let N=T+"length",O=t.get(N);O&&O[1](S.length)}let[,M]=r(E,R);return M(R),!0},has(S,l){if(typeof l=="symbol")return Reflect.has(S,l);let m=String(l),x=T+m,[E]=r(x,Reflect.get(S,l));return E(),Reflect.has(S,l)},ownKeys(S){return Reflect.ownKeys(S)},getOwnPropertyDescriptor(S,l){return Object.getOwnPropertyDescriptor(S,l)},deleteProperty(S,l){if(typeof l=="symbol")return Reflect.deleteProperty(S,l);let m=String(l),x=T+m,E=Reflect.deleteProperty(S,l);i(x),t.delete(x);let R=g;if(R!==void 0){let M=n.get(R);M&&(M.delete(x),M.size===0&&n.delete(R))}return n.delete(x),E}});return s.set(d,v),v}let f=c(e,"");function u(){return L(()=>Et(e))}return[f,d=>{let g=typeof d=="function"?d(u()):d;_(()=>{for(let p of Object.keys(g))f[p]=g[p]})}]}function kt(e,t){let[n,o]=e,r=t?.maxLength??100,s=[n()],i=0,[c,f]=w([...s]),[u,a]=w(i),[d,g]=w(s.length);function p(){_(()=>{f([...s]),a(i),g(s.length)})}let h=!1,T=!0;return C(()=>{let m=n();if(T){T=!1;return}if(h){h=!1;return}s=s.slice(0,i+1),s.push(m),s.length>r&&s.splice(0,s.length-r),i=s.length-1,p()}),{undo:()=>{i<=0||(i--,h=!0,o(s[i]),p())},redo:()=>{i>=s.length-1||(i++,h=!0,o(s[i]),p())},canUndo:()=>u()>0,canRedo:()=>u()<d()-1,history:()=>c(),cursor:()=>u(),clear:()=>{s=[n()],i=0,p()}}}function Mt(e,t,n){let[o,r]=e,s=n?.storage??globalThis.localStorage,i=n?.serialize??JSON.stringify,c=n?.deserialize??JSON.parse,f=n?.validate;try{let u=s.getItem(t);if(u!==null){let a=c(u);(!f||f(a))&&r(a)}}catch{}C(()=>{let u=o();try{let a=i(u);s.setItem(t,a)}catch{}})}function Lt(){let e=new Map;function t(c){let f=e.get(c);return f||(f=new Set,e.set(c,f)),f}function n(c,f){let u=t(c);return u.add(f),()=>{u.delete(f)}}function o(c,f){let u=a=>{s(c,u),f(a)};return n(c,u)}function r(c,f){let u=e.get(c);if(u)for(let a of[...u])try{a(f)}catch(d){console.error(`[forma] Bus handler error on "${String(c)}":`,d)}}function s(c,f){let u=e.get(c);u&&u.delete(f)}function i(){e.clear()}return{on:n,once:o,emit:r,off:s,clear:i}}function At(e,t,n,o,r){let s=i=>{let c=i.target;if(!(c instanceof HTMLElement))return;let f=e instanceof Document?e.documentElement:e,u=c.closest(t);u instanceof HTMLElement&&f.contains(u)&&o(i,u)};return e.addEventListener(n,s,r),()=>{e.removeEventListener(n,s,r)}}function Po(e){let t=e.toLowerCase().split("+").map(o=>o.trim()),n={ctrl:!1,shift:!1,alt:!1,meta:!1,key:""};for(let o of t)switch(o){case"ctrl":case"control":n.ctrl=!0;break;case"shift":n.shift=!0;break;case"alt":n.alt=!0;break;case"meta":case"cmd":case"command":n.meta=!0;break;default:n.key=o}return n}function Io(e,t){return e.ctrlKey!==t.ctrl||e.shiftKey!==t.shift||e.altKey!==t.alt||e.metaKey!==t.meta?!1:e.key.toLowerCase()===t.key}function Nt(e,t,n){let o=n?.target??document,r=n?.preventDefault??!0,s=Po(e),i=c=>{c instanceof KeyboardEvent&&Io(c,s)&&(r&&c.preventDefault(),t(c))};return o.addEventListener("keydown",i),()=>{o.removeEventListener("keydown",i)}}function Dt(e,t){return(t??document).querySelector(e)}function Ht(e,t){return Array.from((t??document).querySelectorAll(e))}function _t(e,...t){e.classList.add(...t)}function Ot(e,...t){e.classList.remove(...t)}function Pt(e,t,n){return e.classList.toggle(t,n)}function It(e,t){for(let[n,o]of Object.entries(t))o!==void 0&&(e.style[n]=o)}function Ft(e,t){for(let[n,o]of Object.entries(t))o===!1||o===null?e.removeAttribute(n):o===!0?e.setAttribute(n,""):e.setAttribute(n,o)}function Bt(e,t){e.textContent=t}function Kt(e,t){e.innerHTML=t}function jt(e,t){e.innerHTML=t}function $t(e,t){return e.closest(t)}function Vt(e,t){let n=Array.from(e.children);return t?n.filter(o=>o.matches(t)):n}function Ut(e,t){let n=e.parentElement;if(!n)return[];let r=Array.from(n.children).filter(s=>s!==e);return t?r.filter(s=>s.matches(t)):r}function Wt(e){return e.parentElement}function Gt(e,t){let n=e.nextElementSibling;for(;n;){if(n instanceof HTMLElement&&(!t||n.matches(t)))return n;n=n.nextElementSibling}return null}function zt(e,t){let n=e.previousElementSibling;for(;n;){if(n instanceof HTMLElement&&(!t||n.matches(t)))return n;n=n.previousElementSibling}return null}function qt(e,t){let n=new ResizeObserver(o=>{for(let r of o)t(r)});return n.observe(e),()=>{n.disconnect()}}function Jt(e,t,n){let o=new IntersectionObserver(r=>{for(let s of r)t(s)},n);return o.observe(e),()=>{o.disconnect()}}function Yt(e,t,n){let o=new MutationObserver(r=>{t(r)});return o.observe(e,n??{childList:!0,subtree:!0}),()=>{o.disconnect()}}function Xt(e,t){let n=t?.serialize??JSON.stringify,o=t?.deserialize??JSON.parse,r=t?.validate;return{key:e,get(){try{let s=localStorage.getItem(e);if(s===null)return null;let i=o(s);return r&&!r(i)?null:i}catch{return null}},set(s){try{let i=n(s);localStorage.setItem(e,i)}catch{}},remove(){localStorage.removeItem(e)}}}function Zt(e,t){let n=t?.serialize??JSON.stringify,o=t?.deserialize??JSON.parse,r=t?.validate;return{key:e,get(){try{let s=sessionStorage.getItem(e);if(s===null)return null;let i=o(s);return r&&!r(i)?null:i}catch{return null}},set(s){try{let i=n(s);sessionStorage.setItem(e,i)}catch{}},remove(){sessionStorage.removeItem(e)}}}var Qt=new Map;function Fo(e,t){let n=`${e}::${t}`,o=Qt.get(n);if(o)return o;let r=new Promise((s,i)=>{let c=indexedDB.open(e);c.onerror=()=>i(c.error),c.onsuccess=()=>{let f=c.result;if(f.objectStoreNames.contains(t)){s(f);return}let u=f.version+1;f.close();let a=indexedDB.open(e,u);a.onerror=()=>i(a.error),a.onupgradeneeded=()=>{let d=a.result;d.objectStoreNames.contains(t)||d.createObjectStore(t)},a.onsuccess=()=>s(a.result)},c.onupgradeneeded=()=>{let f=c.result;f.objectStoreNames.contains(t)||f.createObjectStore(t)}});return Qt.set(n,r),r.catch(()=>{Qt.delete(n)}),r}function en(e,t="default"){function n(o,r){return Fo(e,t).then(s=>new Promise((i,c)=>{let u=s.transaction(t,o).objectStore(t),a=r(u);a.onsuccess=()=>i(a.result),a.onerror=()=>c(a.error)}))}return{get(o){return n("readonly",r=>r.get(o))},set(o,r){return n("readwrite",s=>s.put(r,o)).then(()=>{})},delete(o){return n("readwrite",r=>r.delete(o)).then(()=>{})},getAll(){return n("readonly",o=>o.getAll())},keys(){return n("readonly",o=>o.getAllKeys()).then(o=>o.map(String))},clear(){return n("readwrite",o=>o.clear()).then(()=>{})}}}function tn(e,t){let[n,o]=w(null),[r,s]=w(null),[i,c]=w(!1),f=null;function u(){let d=typeof e=="function"?e():e,g=t?.base??"",p=new URL(d,g||void 0);if(t?.params)for(let[h,T]of Object.entries(t.params))p.searchParams.set(h,T);return p.toString()}async function a(){f&&f.abort(),f=new AbortController;let d=f,g=t?.timeout??3e4,p=setTimeout(()=>d.abort(),g);c(!0),s(null);try{let h=u(),{base:T,params:b,timeout:y,transform:v,...S}=t??{},l=await fetch(h,{...S,signal:d.signal});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);let m=await l.json(),x=v?v(m):m;o(x)}catch(h){if(h instanceof Error&&h.name==="AbortError")return;s(h instanceof Error?h:new Error(String(h)))}finally{clearTimeout(p),f===d&&(f=null,c(!1))}}return typeof e=="function"?C(()=>{e(),a()}):a(),{data:n,error:r,loading:i,refetch:a,abort(){f&&f.abort()}}}async function nn(e,t){let n=await fetch(e,t);if(!n.ok)throw new Error(`HTTP ${n.status}: ${n.statusText}`);return await n.json()}function on(e,t){let[n,o]=w(null),[r,s]=w(null),[i,c]=w(!1),f=new EventSource(e,{withCredentials:t?.withCredentials??!1});f.onopen=()=>{c(!0),s(null)};let u=t?.parse??(a=>{try{return JSON.parse(a)}catch{return a}});return f.onmessage=a=>{o(u(a.data))},f.onerror=a=>{s(a),c(!1)},{data:n,error:r,connected:i,close(){f.close(),c(!1)},on(a,d){let g=t?.parse??(h=>{try{return JSON.parse(h)}catch{return h}}),p=h=>{d(g(h.data))};return f.addEventListener(a,p),()=>{f.removeEventListener(a,p)}}}}function rn(e,t){let n=t?.reconnect??!0,o=t?.reconnectInterval??1e3,r=t?.maxReconnects??5,[s,i]=w(null),[c,f]=w("connecting"),u=new Set,a=null,d=0,g=null,p=!1;function h(){if(p)return;f("connecting"),a=new WebSocket(e,t?.protocols),a.onopen=()=>{f("open"),d=0};let T=t?.parse??(b=>{try{return JSON.parse(b)}catch{return b}});a.onmessage=b=>{let y=T(b.data);i(y);for(let v of u)v(y)},a.onerror=()=>{f("error")},a.onclose=()=>{if(p){f("closed");return}if(f("closed"),n&&d<r){let b=o*Math.pow(2,d);d++,g=setTimeout(h,b)}}}return h(),{data:s,status:c,send(T){a&&a.readyState===WebSocket.OPEN&&a.send(JSON.stringify(T))},close(){p=!0,g!==null&&(clearTimeout(g),g=null),a&&(a.close(),a=null),f("closed")},on(T){return u.add(T),()=>{u.delete(T)}}}}function sn(e,t){let[n,o]=w(!1),[r,s]=w(void 0),c=async(...f)=>{if(o(!0),s(void 0),t?.optimistic)try{_(()=>t.optimistic(...f))}catch{}try{let u=await e(...f);if(t?.onSuccess&&_(()=>t.onSuccess(u,...f)),t?.invalidates)for(let a of t.invalidates)a.refetch();return o(!1),u}catch(u){if(t?.onError)try{_(()=>t.onError(u,...f))}catch{}throw s(u),o(!1),u}};return c.pending=n,c.error=r,c.clearError=()=>s(void 0),c}var an=new Map;function cn(e,t){an.set(e,t)}function ln(e){an.delete(e)}function we(e){for(let[t,n]of Object.entries(e)){let o=an.get(t);o&&o.mutate(n)}}function un(){if(typeof window>"u")return()=>{};let e=t=>{let n=t.detail;n&&typeof n=="object"&&we(n)};return window.addEventListener("forma:revalidate",e),()=>window.removeEventListener("forma:revalidate",e)}function fn(e,t){return{data:e,__revalidate:t}}function dn(e){return async(...n)=>{let o=await fetch(e,{method:"POST",headers:{"Content-Type":"application/json","X-Forma-RPC":"1"},body:JSON.stringify({args:n})});if(!o.ok){let s=await o.text();throw new Error(`Server function failed (${o.status}): ${s}`)}let r=await o.json();return r&&typeof r=="object"&&"__revalidate"in r?(typeof window<"u"&&window.dispatchEvent(new CustomEvent("forma:revalidate",{detail:r.__revalidate})),r.data):r}}var Ce=new Map;function pn(e,t){Ce.set(e,t)}function mn(e){return Ce.get(e)}function gn(){return[...Ce.keys()]}var Bo=new Set(["__proto__","constructor","prototype"]);async function Ee(e,t,n){let o=e.split("/").pop()??"";if(Bo.has(o))return{error:"Forbidden endpoint name"};let r=Ce.get(e);if(!r)return{error:`Unknown server function: ${e}`};try{let s=await r(...t.args);return n?{data:s,__revalidate:n}:{data:s}}catch(s){return{error:typeof process<"u"&&process.env?.NODE_ENV==="development"&&s instanceof Error?s.message:"Internal server error"}}}function hn(){return async(e,t)=>{if(e.method!=="POST"){t.status(405).json({error:"Method not allowed"});return}let n=e.body;if(!n||!Array.isArray(n.args)){t.status(400).json({error:"Invalid RPC request: missing args array"});return}let o=await Ee(e.url,n);o.error?t.status(500).json(o):t.json(o)}}return to(Ko);})(); | ||
| //# sourceMappingURL=formajs.global.js.map |
+55
-55
| 'use strict'; | ||
| var chunkYMIMKO4W_cjs = require('./chunk-YMIMKO4W.cjs'); | ||
| var chunkGDULJFJO_cjs = require('./chunk-GDULJFJO.cjs'); | ||
| var chunk3U57L2TY_cjs = require('./chunk-3U57L2TY.cjs'); | ||
@@ -10,3 +10,3 @@ | ||
| const node = new Text(""); | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| node.data = value(); | ||
@@ -27,8 +27,8 @@ }); | ||
| if (target.hasAttribute("data-forma-ssr")) { | ||
| chunkYMIMKO4W_cjs.createRoot((dispose) => { | ||
| chunkGDULJFJO_cjs.createRoot((dispose) => { | ||
| disposeRoot = dispose; | ||
| chunkYMIMKO4W_cjs.hydrateIsland(component, target); | ||
| chunkGDULJFJO_cjs.hydrateIsland(component, target); | ||
| }); | ||
| } else { | ||
| const dom = chunkYMIMKO4W_cjs.createRoot((dispose) => { | ||
| const dom = chunkGDULJFJO_cjs.createRoot((dispose) => { | ||
| disposeRoot = dispose; | ||
@@ -59,3 +59,3 @@ return component(); | ||
| let currentMatch = UNSET; | ||
| const switchDispose = chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| const switchDispose = chunkGDULJFJO_cjs.internalEffect(() => { | ||
| const val = value(); | ||
@@ -95,5 +95,5 @@ if (val === currentMatch) return; | ||
| let branchDispose; | ||
| const node = chunkYMIMKO4W_cjs.createRoot((dispose) => { | ||
| const node = chunkGDULJFJO_cjs.createRoot((dispose) => { | ||
| branchDispose = dispose; | ||
| return chunkYMIMKO4W_cjs.untrack(() => matchedCase.render()); | ||
| return chunkGDULJFJO_cjs.untrack(() => matchedCase.render()); | ||
| }); | ||
@@ -141,3 +141,3 @@ entry = { node, dispose: branchDispose }; | ||
| }; | ||
| chunkYMIMKO4W_cjs.createEffect(() => { | ||
| chunkGDULJFJO_cjs.createEffect(() => { | ||
| const node = children2(); | ||
@@ -163,3 +163,3 @@ removeMountedNode(); | ||
| let currentNode = null; | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| retryCount(); | ||
@@ -204,9 +204,9 @@ const parent2 = startMarker.parentNode; | ||
| }; | ||
| chunkYMIMKO4W_cjs.pushSuspenseContext(ctx); | ||
| chunkGDULJFJO_cjs.pushSuspenseContext(ctx); | ||
| try { | ||
| resolvedNode = children2(); | ||
| } finally { | ||
| chunkYMIMKO4W_cjs.popSuspenseContext(); | ||
| chunkGDULJFJO_cjs.popSuspenseContext(); | ||
| } | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| const parent2 = startMarker.parentNode; | ||
@@ -255,3 +255,3 @@ if (!parent2) return; | ||
| if (!hydrateFn) { | ||
| if (chunkYMIMKO4W_cjs.__DEV__) console.warn(`[forma] No hydrate function for island "${componentName}" (id=${id})`); | ||
| if (chunkGDULJFJO_cjs.__DEV__) console.warn(`[forma] No hydrate function for island "${componentName}" (id=${id})`); | ||
| root.setAttribute("data-forma-status", "error"); | ||
@@ -312,4 +312,4 @@ continue; | ||
| let activeRoot = root; | ||
| chunkYMIMKO4W_cjs.createRoot((dispose) => { | ||
| activeRoot = chunkYMIMKO4W_cjs.hydrateIsland(() => hydrateFn(root, props), root); | ||
| chunkGDULJFJO_cjs.createRoot((dispose) => { | ||
| activeRoot = chunkGDULJFJO_cjs.hydrateIsland(() => hydrateFn(root, props), root); | ||
| activeRoot.__formaDispose = dispose; | ||
@@ -319,3 +319,3 @@ }); | ||
| } catch (err) { | ||
| if (chunkYMIMKO4W_cjs.__DEV__) console.error(`[forma] Island "${componentName}" (id=${id}) failed:`, err); | ||
| if (chunkGDULJFJO_cjs.__DEV__) console.error(`[forma] Island "${componentName}" (id=${id}) failed:`, err); | ||
| root.setAttribute("data-forma-status", "error"); | ||
@@ -369,3 +369,3 @@ } | ||
| } catch (e) { | ||
| chunkYMIMKO4W_cjs.reportError(e, "onUnmount"); | ||
| chunkGDULJFJO_cjs.reportError(e, "onUnmount"); | ||
| } | ||
@@ -377,3 +377,3 @@ } | ||
| } catch (e) { | ||
| chunkYMIMKO4W_cjs.reportError(e, "component disposer"); | ||
| chunkGDULJFJO_cjs.reportError(e, "component disposer"); | ||
| } | ||
@@ -393,3 +393,3 @@ } | ||
| } catch (e) { | ||
| chunkYMIMKO4W_cjs.reportError(e, "onMount"); | ||
| chunkGDULJFJO_cjs.reportError(e, "onMount"); | ||
| } | ||
@@ -537,3 +537,3 @@ } | ||
| let result; | ||
| chunkYMIMKO4W_cjs.batch(() => { | ||
| chunkGDULJFJO_cjs.batch(() => { | ||
| const rawArgs = args.map( | ||
@@ -652,7 +652,7 @@ (a) => a != null && typeof a === "object" && a[RAW] ? a[RAW] : a | ||
| function getCurrentSnapshot() { | ||
| return chunkYMIMKO4W_cjs.untrack(() => deepClone(initial)); | ||
| return chunkGDULJFJO_cjs.untrack(() => deepClone(initial)); | ||
| } | ||
| const setter = (partial) => { | ||
| const updates = typeof partial === "function" ? partial(getCurrentSnapshot()) : partial; | ||
| chunkYMIMKO4W_cjs.batch(() => { | ||
| chunkGDULJFJO_cjs.batch(() => { | ||
| for (const key of Object.keys(updates)) { | ||
@@ -676,3 +676,3 @@ rootProxy[key] = updates[key]; | ||
| function syncSignals() { | ||
| chunkYMIMKO4W_cjs.batch(() => { | ||
| chunkGDULJFJO_cjs.batch(() => { | ||
| setStackSignal([..._stack]); | ||
@@ -685,3 +685,3 @@ setCursorSignal(_cursor); | ||
| let isFirstRun = true; | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| const value = sourceGet(); | ||
@@ -754,3 +754,3 @@ if (isFirstRun) { | ||
| } | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| const value = sourceGet(); | ||
@@ -1212,3 +1212,3 @@ try { | ||
| if (typeof url === "function") { | ||
| chunkYMIMKO4W_cjs.internalEffect(() => { | ||
| chunkGDULJFJO_cjs.internalEffect(() => { | ||
| url(); | ||
@@ -1382,3 +1382,3 @@ execute(); | ||
| try { | ||
| chunkYMIMKO4W_cjs.batch(() => options.optimistic(...args)); | ||
| chunkGDULJFJO_cjs.batch(() => options.optimistic(...args)); | ||
| } catch { | ||
@@ -1390,3 +1390,3 @@ } | ||
| if (options?.onSuccess) { | ||
| chunkYMIMKO4W_cjs.batch(() => options.onSuccess(result, ...args)); | ||
| chunkGDULJFJO_cjs.batch(() => options.onSuccess(result, ...args)); | ||
| } | ||
@@ -1403,3 +1403,3 @@ if (options?.invalidates) { | ||
| try { | ||
| chunkYMIMKO4W_cjs.batch(() => options.onError(err, ...args)); | ||
| chunkGDULJFJO_cjs.batch(() => options.onError(err, ...args)); | ||
| } catch { | ||
@@ -1538,99 +1538,99 @@ } | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.Fragment; } | ||
| get: function () { return chunkGDULJFJO_cjs.Fragment; } | ||
| }); | ||
| Object.defineProperty(exports, "batch", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.batch; } | ||
| get: function () { return chunkGDULJFJO_cjs.batch; } | ||
| }); | ||
| Object.defineProperty(exports, "cleanup", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.cleanup; } | ||
| get: function () { return chunkGDULJFJO_cjs.cleanup; } | ||
| }); | ||
| Object.defineProperty(exports, "createEffect", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createEffect; } | ||
| get: function () { return chunkGDULJFJO_cjs.createEffect; } | ||
| }); | ||
| Object.defineProperty(exports, "createList", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createList; } | ||
| get: function () { return chunkGDULJFJO_cjs.createList; } | ||
| }); | ||
| Object.defineProperty(exports, "createMemo", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createMemo; } | ||
| get: function () { return chunkGDULJFJO_cjs.createMemo; } | ||
| }); | ||
| Object.defineProperty(exports, "createReducer", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createReducer; } | ||
| get: function () { return chunkGDULJFJO_cjs.createReducer; } | ||
| }); | ||
| Object.defineProperty(exports, "createRef", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createRef; } | ||
| get: function () { return chunkGDULJFJO_cjs.createRef; } | ||
| }); | ||
| Object.defineProperty(exports, "createResource", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createResource; } | ||
| get: function () { return chunkGDULJFJO_cjs.createResource; } | ||
| }); | ||
| Object.defineProperty(exports, "createRoot", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createRoot; } | ||
| get: function () { return chunkGDULJFJO_cjs.createRoot; } | ||
| }); | ||
| Object.defineProperty(exports, "createShow", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.createShow; } | ||
| get: function () { return chunkGDULJFJO_cjs.createShow; } | ||
| }); | ||
| Object.defineProperty(exports, "fragment", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.fragment; } | ||
| get: function () { return chunkGDULJFJO_cjs.fragment; } | ||
| }); | ||
| Object.defineProperty(exports, "getBatchDepth", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.getBatchDepth; } | ||
| get: function () { return chunkGDULJFJO_cjs.getBatchDepth; } | ||
| }); | ||
| Object.defineProperty(exports, "h", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.h; } | ||
| get: function () { return chunkGDULJFJO_cjs.h; } | ||
| }); | ||
| Object.defineProperty(exports, "hydrateIsland", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.hydrateIsland; } | ||
| get: function () { return chunkGDULJFJO_cjs.hydrateIsland; } | ||
| }); | ||
| Object.defineProperty(exports, "isComputed", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.isComputed; } | ||
| get: function () { return chunkGDULJFJO_cjs.isComputed; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffect", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.isEffect; } | ||
| get: function () { return chunkGDULJFJO_cjs.isEffect; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffectScope", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.isEffectScope; } | ||
| get: function () { return chunkGDULJFJO_cjs.isEffectScope; } | ||
| }); | ||
| Object.defineProperty(exports, "isSignal", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.isSignal; } | ||
| get: function () { return chunkGDULJFJO_cjs.isSignal; } | ||
| }); | ||
| Object.defineProperty(exports, "on", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.on; } | ||
| get: function () { return chunkGDULJFJO_cjs.on; } | ||
| }); | ||
| Object.defineProperty(exports, "onCleanup", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.onCleanup; } | ||
| get: function () { return chunkGDULJFJO_cjs.onCleanup; } | ||
| }); | ||
| Object.defineProperty(exports, "onError", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.onError; } | ||
| get: function () { return chunkGDULJFJO_cjs.onError; } | ||
| }); | ||
| Object.defineProperty(exports, "reconcileList", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.reconcileList; } | ||
| get: function () { return chunkGDULJFJO_cjs.reconcileList; } | ||
| }); | ||
| Object.defineProperty(exports, "trigger", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.trigger; } | ||
| get: function () { return chunkGDULJFJO_cjs.trigger; } | ||
| }); | ||
| Object.defineProperty(exports, "untrack", { | ||
| enumerable: true, | ||
| get: function () { return chunkYMIMKO4W_cjs.untrack; } | ||
| get: function () { return chunkGDULJFJO_cjs.untrack; } | ||
| }); | ||
@@ -1637,0 +1637,0 @@ Object.defineProperty(exports, "createComputed", { |
+3
-3
| /// <reference path="./jsx.d.ts" /> | ||
| import { S as SignalGetter } from './signal-B4_wQJHs.cjs'; | ||
| export { c as createSignal } from './signal-B4_wQJHs.cjs'; | ||
| import { S as SignalGetter } from './signal-YlS1kgfh.cjs'; | ||
| export { a as SignalOptions, b as SignalSetter, c as createSignal } from './signal-YlS1kgfh.cjs'; | ||
| export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals'; | ||
@@ -1451,2 +1451,2 @@ | ||
| export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation }; | ||
| export { $, $$, $$serverFunction, type Action, type ActionOptions, type CleanupFn, type ComponentDef, type Context, type CreateListOptions, type Dispatch, type ErrorHandler, type EventBus, type FetchOptions, type FetchResult, Fragment, type HistoryControls, type IDBStore, type IslandHydrateFn, type KeyOptions, type ListTransitionHooks, type MutationResponse, type PersistOptions, type RPCRequest, type RPCResponse, type ReconcileResult, type Ref, type Resource, type ResourceOptions, type SSEConnection, type SSEOptions, type ServerFunction, type SetupFn, SignalGetter, type StorageOptions, type StoreSetter, type SwitchCase, type TypedStorage, type WSConnection, type WSOptions, type WSStatus, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation }; |
+3
-3
| /// <reference path="./jsx.d.ts" /> | ||
| import { S as SignalGetter } from './signal-B4_wQJHs.js'; | ||
| export { c as createSignal } from './signal-B4_wQJHs.js'; | ||
| import { S as SignalGetter } from './signal-YlS1kgfh.js'; | ||
| export { a as SignalOptions, b as SignalSetter, c as createSignal } from './signal-YlS1kgfh.js'; | ||
| export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals'; | ||
@@ -1451,2 +1451,2 @@ | ||
| export { $, $$, $$serverFunction, type Action, type ActionOptions, Fragment, type IslandHydrateFn, type MutationResponse, type RPCRequest, type RPCResponse, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation }; | ||
| export { $, $$, $$serverFunction, type Action, type ActionOptions, type CleanupFn, type ComponentDef, type Context, type CreateListOptions, type Dispatch, type ErrorHandler, type EventBus, type FetchOptions, type FetchResult, Fragment, type HistoryControls, type IDBStore, type IslandHydrateFn, type KeyOptions, type ListTransitionHooks, type MutationResponse, type PersistOptions, type RPCRequest, type RPCResponse, type ReconcileResult, type Ref, type Resource, type ResourceOptions, type SSEConnection, type SSEOptions, type ServerFunction, type SetupFn, SignalGetter, type StorageOptions, type StoreSetter, type SwitchCase, type TypedStorage, type WSConnection, type WSOptions, type WSStatus, activateIslands, addClass, applyRevalidation, batch, children, cleanup, closest, createAction, createBus, createComputed, createContext, createEffect, createErrorBoundary, createFetch, createHistory, createIndexedDB, createList, createLocalStorage, createMemo, createPortal, createRPCMiddleware, createReducer, createRef, createResource, createRoot, createSSE, createSessionStorage, createShow, createStore, createSuspense, createSwitch, createText, createWebSocket, deactivateAllIslands, deactivateIsland, defineComponent, delegate, disposeComponent, enableAutoRevalidation, fetchJSON, fragment, getRegisteredEndpoints, getServerFunction, h, handleRPC, hydrateIsland, inject, mount, nextSibling, on, onCleanup, onError, onIntersect, onKey, onMount, onMutation, onResize, onUnmount, parent, persist, prevSibling, provide, reconcileList, registerResource, registerServerFunction, removeClass, setAttr, setHTML, setHTMLUnsafe, setStyle, setText, siblings, toggleClass, trackDisposer, unprovide, unregisterResource, untrack, withRevalidation }; |
+2
-2
@@ -1,3 +0,3 @@ | ||
| import { internalEffect, createRoot, hydrateIsland, untrack, createEffect, pushSuspenseContext, popSuspenseContext, __DEV__, reportError, batch } from './chunk-N522P3G6.js'; | ||
| export { Fragment, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, getBatchDepth, h, hydrateIsland, isComputed, isEffect, isEffectScope, isSignal, on, onCleanup, onError, reconcileList, trigger, untrack } from './chunk-N522P3G6.js'; | ||
| import { internalEffect, createRoot, hydrateIsland, untrack, createEffect, pushSuspenseContext, popSuspenseContext, __DEV__, reportError, batch } from './chunk-CN56FSDT.js'; | ||
| export { Fragment, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, getBatchDepth, h, hydrateIsland, isComputed, isEffect, isEffectScope, isSignal, on, onCleanup, onError, reconcileList, trigger, untrack } from './chunk-CN56FSDT.js'; | ||
| import { createSignal } from './chunk-OZCHIVAZ.js'; | ||
@@ -4,0 +4,0 @@ export { createComputed, createSignal } from './chunk-OZCHIVAZ.js'; |
@@ -1,2 +0,2 @@ | ||
| import { a as SignalOptions } from './signal-B4_wQJHs.cjs'; | ||
| import { a as SignalOptions } from './signal-YlS1kgfh.cjs'; | ||
@@ -3,0 +3,0 @@ /** |
@@ -1,2 +0,2 @@ | ||
| import { a as SignalOptions } from './signal-B4_wQJHs.js'; | ||
| import { a as SignalOptions } from './signal-YlS1kgfh.js'; | ||
@@ -3,0 +3,0 @@ /** |
+1
-1
| { | ||
| "name": "@getforma/core", | ||
| "author": "Forma <victor@getforma.dev>", | ||
| "version": "0.9.0", | ||
| "version": "0.9.1", | ||
| "description": "Real DOM reactive library — fine-grained signals, islands architecture, SSR hydration. No virtual DOM, no diffing. ~15KB gzipped.", | ||
@@ -6,0 +6,0 @@ "type": "module", |
| import { createComputed, createSignal } from './chunk-OZCHIVAZ.js'; | ||
| import { effect, effectScope, startBatch, endBatch, setActiveSub } from 'alien-signals'; | ||
| export { getBatchDepth, isComputed, isEffect, isEffectScope, isSignal, trigger } from 'alien-signals'; | ||
| var currentRoot = null; | ||
| var rootStack = []; | ||
| function createRoot(fn) { | ||
| const scope = { disposers: [], scopeDispose: null }; | ||
| rootStack.push(currentRoot); | ||
| currentRoot = scope; | ||
| const dispose = () => { | ||
| if (scope.scopeDispose) { | ||
| try { | ||
| scope.scopeDispose(); | ||
| } catch { | ||
| } | ||
| scope.scopeDispose = null; | ||
| } | ||
| for (const d of scope.disposers) { | ||
| try { | ||
| d(); | ||
| } catch { | ||
| } | ||
| } | ||
| scope.disposers.length = 0; | ||
| }; | ||
| let result; | ||
| try { | ||
| scope.scopeDispose = effectScope(() => { | ||
| result = fn(dispose); | ||
| }); | ||
| } finally { | ||
| currentRoot = rootStack.pop() ?? null; | ||
| } | ||
| return result; | ||
| } | ||
| function registerDisposer(dispose) { | ||
| if (currentRoot) { | ||
| currentRoot.disposers.push(dispose); | ||
| } | ||
| } | ||
| function hasActiveRoot() { | ||
| return currentRoot !== null; | ||
| } | ||
| // src/reactive/cleanup.ts | ||
| var currentCleanupCollector = null; | ||
| function onCleanup(fn) { | ||
| currentCleanupCollector?.(fn); | ||
| } | ||
| function setCleanupCollector(collector) { | ||
| const prev = currentCleanupCollector; | ||
| currentCleanupCollector = collector; | ||
| return prev; | ||
| } | ||
| // src/reactive/dev.ts | ||
| var __DEV__ = typeof process !== "undefined" ? process.env?.NODE_ENV !== "production" : true; | ||
| var _errorHandler = null; | ||
| function onError(handler) { | ||
| _errorHandler = handler; | ||
| } | ||
| function reportError(error, source) { | ||
| if (_errorHandler) { | ||
| try { | ||
| _errorHandler(error, source ? { source } : {}); | ||
| } catch { | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| console.error(`[forma] ${source ?? "Unknown"} error:`, error); | ||
| } | ||
| } | ||
| var POOL_SIZE = 32; | ||
| var MAX_REENTRANT_RUNS = 100; | ||
| var pool = []; | ||
| for (let i = 0; i < POOL_SIZE; i++) pool.push([]); | ||
| var poolIdx = POOL_SIZE; | ||
| function acquireArray() { | ||
| if (poolIdx > 0) { | ||
| const arr = pool[--poolIdx]; | ||
| arr.length = 0; | ||
| return arr; | ||
| } | ||
| return []; | ||
| } | ||
| function releaseArray(arr) { | ||
| arr.length = 0; | ||
| if (poolIdx < POOL_SIZE) { | ||
| pool[poolIdx++] = arr; | ||
| } | ||
| } | ||
| function runCleanup(fn) { | ||
| if (fn === void 0) return; | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| function runCleanups(bag) { | ||
| if (bag === void 0) return; | ||
| for (let i = 0; i < bag.length; i++) { | ||
| try { | ||
| bag[i](); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| } | ||
| function internalEffect(fn) { | ||
| const dispose = effect(fn); | ||
| if (hasActiveRoot()) { | ||
| registerDisposer(dispose); | ||
| } | ||
| return dispose; | ||
| } | ||
| function createEffect(fn) { | ||
| const shouldRegister = hasActiveRoot(); | ||
| let cleanup2; | ||
| let cleanupBag; | ||
| let nextCleanup; | ||
| let nextCleanupBag; | ||
| const addCleanup = (cb) => { | ||
| if (nextCleanupBag !== void 0) { | ||
| nextCleanupBag.push(cb); | ||
| return; | ||
| } | ||
| if (nextCleanup !== void 0) { | ||
| const bag = acquireArray(); | ||
| bag.push(nextCleanup, cb); | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = bag; | ||
| return; | ||
| } | ||
| nextCleanup = cb; | ||
| }; | ||
| let skipCleanupInfra = false; | ||
| let firstRun = true; | ||
| let running = false; | ||
| let rerunRequested = false; | ||
| const runOnce = () => { | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| if (skipCleanupInfra) { | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| } | ||
| return; | ||
| } | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = void 0; | ||
| const prevCollector = setCleanupCollector(addCleanup); | ||
| try { | ||
| const result = fn(); | ||
| if (typeof result === "function") { | ||
| addCleanup(result); | ||
| } | ||
| if (nextCleanup === void 0 && nextCleanupBag === void 0) { | ||
| if (firstRun) skipCleanupInfra = true; | ||
| return; | ||
| } | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } finally { | ||
| setCleanupCollector(prevCollector); | ||
| firstRun = false; | ||
| } | ||
| }; | ||
| const safeFn = () => { | ||
| if (running) { | ||
| rerunRequested = true; | ||
| return; | ||
| } | ||
| running = true; | ||
| try { | ||
| let reentrantRuns = 0; | ||
| do { | ||
| rerunRequested = false; | ||
| runOnce(); | ||
| if (rerunRequested) { | ||
| reentrantRuns++; | ||
| if (reentrantRuns >= MAX_REENTRANT_RUNS) { | ||
| reportError( | ||
| new Error(`createEffect exceeded ${MAX_REENTRANT_RUNS} re-entrant runs`), | ||
| "effect" | ||
| ); | ||
| rerunRequested = false; | ||
| } | ||
| } | ||
| } while (rerunRequested); | ||
| } finally { | ||
| running = false; | ||
| } | ||
| }; | ||
| const dispose = effect(safeFn); | ||
| let disposed = false; | ||
| const wrappedDispose = () => { | ||
| if (disposed) return; | ||
| disposed = true; | ||
| dispose(); | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| }; | ||
| if (shouldRegister) { | ||
| registerDisposer(wrappedDispose); | ||
| } | ||
| return wrappedDispose; | ||
| } | ||
| // src/reactive/memo.ts | ||
| var createMemo = createComputed; | ||
| function batch(fn) { | ||
| startBatch(); | ||
| try { | ||
| fn(); | ||
| } finally { | ||
| endBatch(); | ||
| } | ||
| } | ||
| function untrack(fn) { | ||
| const prev = setActiveSub(void 0); | ||
| try { | ||
| return fn(); | ||
| } finally { | ||
| setActiveSub(prev); | ||
| } | ||
| } | ||
| // src/reactive/on.ts | ||
| function on(deps, fn, options) { | ||
| let prev; | ||
| let isFirst = true; | ||
| return () => { | ||
| const value2 = deps(); | ||
| if (options?.defer && isFirst) { | ||
| isFirst = false; | ||
| prev = value2; | ||
| return void 0; | ||
| } | ||
| const result = untrack(() => fn(value2, prev)); | ||
| prev = value2; | ||
| return result; | ||
| }; | ||
| } | ||
| // src/reactive/ref.ts | ||
| function createRef(initialValue) { | ||
| return { current: initialValue }; | ||
| } | ||
| // src/reactive/reducer.ts | ||
| function createReducer(reducer, initialState) { | ||
| const [state, setState] = createSignal(initialState); | ||
| const dispatch = (action) => { | ||
| setState((prev) => reducer(prev, action)); | ||
| }; | ||
| return [state, dispatch]; | ||
| } | ||
| // src/reactive/suspense-context.ts | ||
| var currentSuspenseContext = null; | ||
| var suspenseStack = []; | ||
| function pushSuspenseContext(ctx) { | ||
| suspenseStack.push(currentSuspenseContext); | ||
| currentSuspenseContext = ctx; | ||
| } | ||
| function popSuspenseContext() { | ||
| currentSuspenseContext = suspenseStack.pop() ?? null; | ||
| } | ||
| function getSuspenseContext() { | ||
| return currentSuspenseContext; | ||
| } | ||
| // src/reactive/resource.ts | ||
| function createResource(source, fetcher, options) { | ||
| const [data, setData] = createSignal(options?.initialValue); | ||
| const [loading, setLoading] = createSignal(false); | ||
| const [error, setError] = createSignal(void 0); | ||
| const suspenseCtx = getSuspenseContext(); | ||
| let abortController = null; | ||
| let fetchVersion = 0; | ||
| const doFetch = () => { | ||
| const sourceValue = untrack(source); | ||
| if (abortController) { | ||
| abortController.abort(); | ||
| } | ||
| const controller = new AbortController(); | ||
| abortController = controller; | ||
| const version = ++fetchVersion; | ||
| const isLatest = () => version === fetchVersion; | ||
| let suspensePending = false; | ||
| if (suspenseCtx) { | ||
| suspenseCtx.increment(); | ||
| suspensePending = true; | ||
| } | ||
| setLoading(true); | ||
| setError(void 0); | ||
| Promise.resolve(fetcher(sourceValue)).then((result) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| setData(() => result); | ||
| } | ||
| }).catch((err) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| if (err?.name !== "AbortError") { | ||
| setError(err); | ||
| } | ||
| } | ||
| }).finally(() => { | ||
| if (suspensePending) suspenseCtx?.decrement(); | ||
| if (isLatest()) { | ||
| setLoading(false); | ||
| if (abortController === controller) { | ||
| abortController = null; | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| internalEffect(() => { | ||
| source(); | ||
| doFetch(); | ||
| }); | ||
| const resource = (() => data()); | ||
| resource.loading = loading; | ||
| resource.error = error; | ||
| resource.refetch = doFetch; | ||
| resource.mutate = (value2) => setData(() => value2); | ||
| return resource; | ||
| } | ||
| // src/dom/element.ts | ||
| var Fragment = /* @__PURE__ */ Symbol.for("forma.fragment"); | ||
| var SVG_NS = "http://www.w3.org/2000/svg"; | ||
| var XLINK_NS = "http://www.w3.org/1999/xlink"; | ||
| var SVG_TAGS = /* @__PURE__ */ new Set([ | ||
| "svg", | ||
| "path", | ||
| "circle", | ||
| "rect", | ||
| "line", | ||
| "polyline", | ||
| "polygon", | ||
| "ellipse", | ||
| "g", | ||
| "text", | ||
| "tspan", | ||
| "textPath", | ||
| "defs", | ||
| "use", | ||
| "symbol", | ||
| "clipPath", | ||
| "mask", | ||
| "pattern", | ||
| "marker", | ||
| "linearGradient", | ||
| "radialGradient", | ||
| "stop", | ||
| "filter", | ||
| "feGaussianBlur", | ||
| "feColorMatrix", | ||
| "feOffset", | ||
| "feBlend", | ||
| "feMerge", | ||
| "feMergeNode", | ||
| "feComposite", | ||
| "feFlood", | ||
| "feMorphology", | ||
| "feTurbulence", | ||
| "feDisplacementMap", | ||
| "feImage", | ||
| "foreignObject", | ||
| "animate", | ||
| "animateTransform", | ||
| "animateMotion", | ||
| "set", | ||
| "image", | ||
| "switch", | ||
| "desc", | ||
| "title", | ||
| "metadata" | ||
| ]); | ||
| var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([ | ||
| "disabled", | ||
| "checked", | ||
| "readonly", | ||
| "required", | ||
| "autofocus", | ||
| "autoplay", | ||
| "controls", | ||
| "default", | ||
| "defer", | ||
| "formnovalidate", | ||
| "hidden", | ||
| "ismap", | ||
| "loop", | ||
| "multiple", | ||
| "muted", | ||
| "nomodule", | ||
| "novalidate", | ||
| "open", | ||
| "playsinline", | ||
| "reversed", | ||
| "selected", | ||
| "async" | ||
| ]); | ||
| var ELEMENT_PROTOS = null; | ||
| function getProto(tag) { | ||
| if (!ELEMENT_PROTOS) { | ||
| ELEMENT_PROTOS = /* @__PURE__ */ Object.create(null); | ||
| for (const t of [ | ||
| "div", | ||
| "span", | ||
| "p", | ||
| "a", | ||
| "li", | ||
| "ul", | ||
| "ol", | ||
| "button", | ||
| "input", | ||
| "label", | ||
| "h1", | ||
| "h2", | ||
| "h3", | ||
| "h4", | ||
| "h5", | ||
| "h6", | ||
| "section", | ||
| "header", | ||
| "footer", | ||
| "main", | ||
| "nav", | ||
| "table", | ||
| "tr", | ||
| "td", | ||
| "th", | ||
| "tbody", | ||
| "img", | ||
| "form", | ||
| "select", | ||
| "option", | ||
| "textarea", | ||
| "i", | ||
| "b", | ||
| "strong", | ||
| "em", | ||
| "small", | ||
| "article", | ||
| "aside", | ||
| "details", | ||
| "summary" | ||
| ]) { | ||
| ELEMENT_PROTOS[t] = document.createElement(t); | ||
| } | ||
| } | ||
| return ELEMENT_PROTOS[tag] ?? (ELEMENT_PROTOS[tag] = document.createElement(tag)); | ||
| } | ||
| var EVENT_NAMES = /* @__PURE__ */ Object.create(null); | ||
| function eventName(key) { | ||
| return EVENT_NAMES[key] ?? (EVENT_NAMES[key] = key.slice(2).toLowerCase()); | ||
| } | ||
| var ABORT_SYM = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| function getAbortController(el) { | ||
| let controller = el[ABORT_SYM]; | ||
| if (!controller) { | ||
| controller = new AbortController(); | ||
| el[ABORT_SYM] = controller; | ||
| } | ||
| return controller; | ||
| } | ||
| function cleanup(el) { | ||
| const controller = el[ABORT_SYM]; | ||
| if (controller) { | ||
| controller.abort(); | ||
| delete el[ABORT_SYM]; | ||
| } | ||
| } | ||
| var CACHE_SYM = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function getCache(el) { | ||
| return el[CACHE_SYM] ?? (el[CACHE_SYM] = /* @__PURE__ */ Object.create(null)); | ||
| } | ||
| function handleClass(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache["class"] === v) return; | ||
| cache["class"] = v; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = v; | ||
| } else { | ||
| el.setAttribute("class", v); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache["class"] === value2) return; | ||
| cache["class"] = value2; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = value2; | ||
| } else { | ||
| el.setAttribute("class", value2); | ||
| } | ||
| } | ||
| } | ||
| function handleStyle(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| let prevKeys = []; | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (typeof v === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === v) return; | ||
| cache["style"] = v; | ||
| prevKeys = []; | ||
| el.style.cssText = v; | ||
| } else if (v && typeof v === "object") { | ||
| const style = el.style; | ||
| const nextKeys = Object.keys(v); | ||
| for (const k of prevKeys) { | ||
| if (!(k in v)) { | ||
| style.removeProperty(k.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase())); | ||
| } | ||
| } | ||
| Object.assign(style, v); | ||
| prevKeys = nextKeys; | ||
| } | ||
| }); | ||
| } else if (typeof value2 === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === value2) return; | ||
| cache["style"] = value2; | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| } | ||
| function handleEvent(el, key, value2) { | ||
| const controller = getAbortController(el); | ||
| el.addEventListener( | ||
| eventName(key), | ||
| value2, | ||
| { signal: controller.signal } | ||
| ); | ||
| } | ||
| function handleInnerHTML(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const resolved = value2(); | ||
| if (resolved == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof resolved !== "object" || !("__html" in resolved)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof resolved | ||
| ); | ||
| } | ||
| const html = resolved.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| const cache = getCache(el); | ||
| if (cache["innerHTML"] === html) return; | ||
| cache["innerHTML"] = html; | ||
| el.innerHTML = html; | ||
| }); | ||
| } else { | ||
| if (value2 == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| } | ||
| } | ||
| function handleXLink(el, key, value2) { | ||
| const localName = key.slice(6); | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(v)); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| } | ||
| } | ||
| } | ||
| function handleBooleanAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache[key] === v) return; | ||
| cache[key] = v; | ||
| if (v) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache[key] === value2) return; | ||
| cache[key] = value2; | ||
| if (value2) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| } | ||
| } | ||
| function handleGenericAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(v); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(value2); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| } | ||
| } | ||
| var PROP_HANDLERS = /* @__PURE__ */ new Map(); | ||
| PROP_HANDLERS.set("class", handleClass); | ||
| PROP_HANDLERS.set("className", handleClass); | ||
| PROP_HANDLERS.set("style", handleStyle); | ||
| PROP_HANDLERS.set("ref", () => { | ||
| }); | ||
| PROP_HANDLERS.set("dangerouslySetInnerHTML", handleInnerHTML); | ||
| for (const attr of BOOLEAN_ATTRS) { | ||
| PROP_HANDLERS.set(attr, handleBooleanAttr); | ||
| } | ||
| function applyProp(el, key, value2) { | ||
| if (key === "class") { | ||
| handleClass(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| return; | ||
| } | ||
| const handler = PROP_HANDLERS.get(key); | ||
| if (handler) { | ||
| handler(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| handleXLink(el, key, value2); | ||
| return; | ||
| } | ||
| handleGenericAttr(el, key, value2); | ||
| } | ||
| function applyStaticProp(el, key, value2) { | ||
| if (value2 == null || value2 === false) return; | ||
| if (key === "class" || key === "className") { | ||
| el.className = value2; | ||
| return; | ||
| } | ||
| if (key === "style") { | ||
| if (typeof value2 === "string") { | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| return; | ||
| } | ||
| if (key === "dangerouslySetInnerHTML") { | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| return; | ||
| } | ||
| if (BOOLEAN_ATTRS.has(key)) { | ||
| if (value2) el.setAttribute(key, ""); | ||
| return; | ||
| } | ||
| if (value2 === true) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.setAttribute(key, String(value2)); | ||
| } | ||
| } | ||
| function appendChild(parent, child) { | ||
| if (child instanceof Node) { | ||
| parent.appendChild(child); | ||
| return; | ||
| } | ||
| if (typeof child === "string") { | ||
| parent.appendChild(new Text(child)); | ||
| return; | ||
| } | ||
| if (child == null || child === false || child === true) { | ||
| return; | ||
| } | ||
| if (typeof child === "number") { | ||
| parent.appendChild(new Text(String(child))); | ||
| return; | ||
| } | ||
| if (typeof child === "function") { | ||
| if (parent instanceof Element) { | ||
| parent[DYNAMIC_CHILD_SYM] = true; | ||
| } | ||
| let currentNode = null; | ||
| internalEffect(() => { | ||
| const v = child(); | ||
| if (v instanceof Node) { | ||
| if (currentNode) { | ||
| parent.replaceChild(v, currentNode); | ||
| } else { | ||
| parent.appendChild(v); | ||
| } | ||
| currentNode = v; | ||
| } else { | ||
| const text = typeof v === "symbol" ? String(v) : String(v ?? ""); | ||
| if (!currentNode) { | ||
| currentNode = new Text(text); | ||
| parent.appendChild(currentNode); | ||
| } else if (currentNode.nodeType === 3) { | ||
| currentNode.data = text; | ||
| } else { | ||
| const tn = new Text(text); | ||
| parent.replaceChild(tn, currentNode); | ||
| currentNode = tn; | ||
| } | ||
| } | ||
| }); | ||
| return; | ||
| } | ||
| if (Array.isArray(child)) { | ||
| for (const item of child) { | ||
| appendChild(parent, item); | ||
| } | ||
| return; | ||
| } | ||
| } | ||
| function h(tag, props, ...children) { | ||
| if (typeof tag === "function" && tag !== Fragment) { | ||
| const mergedProps = { ...props ?? {}, children }; | ||
| return tag(mergedProps); | ||
| } | ||
| if (tag === Fragment) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| const tagName = tag; | ||
| if (hydrating) { | ||
| return { type: "element", tag: tagName, props: props ?? null, children }; | ||
| } | ||
| let el; | ||
| if (ELEMENT_PROTOS && ELEMENT_PROTOS[tagName]) { | ||
| el = ELEMENT_PROTOS[tagName].cloneNode(false); | ||
| } else if (SVG_TAGS.has(tagName)) { | ||
| el = document.createElementNS(SVG_NS, tagName); | ||
| } else { | ||
| el = getProto(tagName).cloneNode(false); | ||
| } | ||
| if (props) { | ||
| let hasDynamic = false; | ||
| for (const key in props) { | ||
| if (key === "ref") continue; | ||
| const value2 = props[key]; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| continue; | ||
| } | ||
| if (typeof value2 === "function") { | ||
| if (!hasDynamic) { | ||
| el[CACHE_SYM] = /* @__PURE__ */ Object.create(null); | ||
| hasDynamic = true; | ||
| } | ||
| applyProp(el, key, value2); | ||
| continue; | ||
| } | ||
| applyStaticProp(el, key, value2); | ||
| } | ||
| } | ||
| const childLen = children.length; | ||
| if (childLen === 1) { | ||
| const only = children[0]; | ||
| if (typeof only === "string") { | ||
| el.textContent = only; | ||
| } else if (typeof only === "number") { | ||
| el.textContent = String(only); | ||
| } else { | ||
| appendChild(el, only); | ||
| } | ||
| } else if (childLen > 1) { | ||
| for (const child of children) { | ||
| appendChild(el, child); | ||
| } | ||
| } | ||
| if (props && typeof props["ref"] === "function") { | ||
| props["ref"](el); | ||
| } | ||
| return el; | ||
| } | ||
| function fragment(...children) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| // src/dom/show.ts | ||
| function createShow(when, thenFn, elseFn) { | ||
| if (hydrating) { | ||
| const branch = when() ? thenFn() : elseFn?.() ?? null; | ||
| return { | ||
| type: "show", | ||
| condition: when, | ||
| whenTrue: thenFn, | ||
| whenFalse: elseFn, | ||
| initialBranch: branch | ||
| }; | ||
| } | ||
| const startMarker = document.createComment("forma-show"); | ||
| const endMarker = document.createComment("/forma-show"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let currentNode = null; | ||
| let lastTruthy = null; | ||
| let currentDispose = null; | ||
| const showDispose = internalEffect(() => { | ||
| const truthy = !!when(); | ||
| const DEBUG = typeof globalThis.__FORMA_DEBUG__ !== "undefined"; | ||
| const DEBUG_LABEL = DEBUG ? thenFn.toString().slice(0, 60) : ""; | ||
| if (truthy === lastTruthy) { | ||
| if (DEBUG) console.log("[forma:show] skip (same)", truthy, DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show]", lastTruthy, "\u2192", truthy, DEBUG_LABEL); | ||
| lastTruthy = truthy; | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| if (DEBUG) console.warn("[forma:show] parentNode is null! skipping.", DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show] parent:", parent.nodeName, "inDoc:", document.contains(parent)); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| if (currentNode) { | ||
| if (currentNode.parentNode === parent) { | ||
| parent.removeChild(currentNode); | ||
| } else { | ||
| while (startMarker.nextSibling && startMarker.nextSibling !== endMarker) { | ||
| parent.removeChild(startMarker.nextSibling); | ||
| } | ||
| } | ||
| } | ||
| const branchFn = truthy ? thenFn : elseFn; | ||
| if (branchFn) { | ||
| let branchDispose; | ||
| currentNode = createRoot((dispose) => { | ||
| branchDispose = dispose; | ||
| return untrack(() => branchFn()); | ||
| }); | ||
| currentDispose = branchDispose; | ||
| } else { | ||
| currentNode = null; | ||
| } | ||
| if (currentNode) { | ||
| parent.insertBefore(currentNode, endMarker); | ||
| } | ||
| }); | ||
| fragment2.__showDispose = () => { | ||
| showDispose(); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| }; | ||
| return fragment2; | ||
| } | ||
| // src/dom/hydrate.ts | ||
| var ABORT_SYM2 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var hydrating = false; | ||
| function setHydrating(value2) { | ||
| hydrating = value2; | ||
| } | ||
| function isDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "element"; | ||
| } | ||
| function isShowDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "show"; | ||
| } | ||
| function isListDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "list"; | ||
| } | ||
| function applyDynamicProps(el, props) { | ||
| if (!props) return; | ||
| for (const key in props) { | ||
| const value2 = props[key]; | ||
| if (typeof value2 !== "function") continue; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| let ac = el[ABORT_SYM2]; | ||
| if (!ac) { | ||
| ac = new AbortController(); | ||
| el[ABORT_SYM2] = ac; | ||
| } | ||
| el.addEventListener(key.slice(2).toLowerCase(), value2, { signal: ac.signal }); | ||
| continue; | ||
| } | ||
| const fn = value2; | ||
| const attrKey = key; | ||
| internalEffect(() => { | ||
| const v = fn(); | ||
| if (v === false || v == null) { | ||
| el.removeAttribute(attrKey); | ||
| } else if (v === true) { | ||
| el.setAttribute(attrKey, ""); | ||
| } else { | ||
| el.setAttribute(attrKey, String(v)); | ||
| } | ||
| }); | ||
| } | ||
| } | ||
| function ensureNode(value2) { | ||
| if (value2 instanceof Node) return value2; | ||
| if (value2 == null || value2 === false || value2 === true) return null; | ||
| if (typeof value2 === "string") return new Text(value2); | ||
| if (typeof value2 === "number") return new Text(String(value2)); | ||
| if (isDescriptor(value2)) return descriptorToElement(value2); | ||
| if (isShowDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createShow( | ||
| value2.condition, | ||
| () => ensureNode(value2.whenTrue()) ?? document.createComment("empty"), | ||
| value2.whenFalse ? () => ensureNode(value2.whenFalse()) ?? document.createComment("empty") : void 0 | ||
| ); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| if (isListDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createList(value2.items, value2.keyFn, value2.renderFn, value2.options); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| function descriptorToElement(desc) { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const children = desc.children.map((child) => { | ||
| if (isDescriptor(child)) return descriptorToElement(child); | ||
| if (isShowDescriptor(child)) return ensureNode(child); | ||
| if (isListDescriptor(child)) return ensureNode(child); | ||
| return child; | ||
| }); | ||
| return h(desc.tag, desc.props, ...children); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| function isIslandStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 105; | ||
| } | ||
| function isShowStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 115; | ||
| } | ||
| function isTextStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 116; | ||
| } | ||
| function isListStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 108; | ||
| } | ||
| function findClosingMarker(start) { | ||
| const closing = "/" + start.data; | ||
| let node = start.nextSibling; | ||
| while (node) { | ||
| if (node.nodeType === 8 && node.data === closing) { | ||
| return node; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function findTextBetween(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 3) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function nextElementBetweenMarkers(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return void 0; | ||
| } | ||
| function extractContentBetweenMarkers(start, end) { | ||
| const frag = document.createDocumentFragment(); | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| const next = node.nextSibling; | ||
| frag.appendChild(node); | ||
| node = next; | ||
| } | ||
| return frag; | ||
| } | ||
| function setupShowEffect(desc, marker) { | ||
| let currentCondition = !!desc.condition(); | ||
| let thenFragment = null; | ||
| let elseFragment = null; | ||
| const hasSSRContent = marker.start.nextSibling !== marker.end; | ||
| if (!hasSSRContent && currentCondition) { | ||
| if (__DEV__) console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true"); | ||
| const trueBranch = desc.whenTrue(); | ||
| if (trueBranch instanceof Node) { | ||
| marker.start.parentNode.insertBefore(trueBranch, marker.end); | ||
| } | ||
| } | ||
| internalEffect(() => { | ||
| const next = !!desc.condition(); | ||
| if (next === currentCondition) return; | ||
| currentCondition = next; | ||
| const parent = marker.start.parentNode; | ||
| if (!parent) return; | ||
| const current = extractContentBetweenMarkers(marker.start, marker.end); | ||
| if (!next) { | ||
| thenFragment = current; | ||
| } else { | ||
| elseFragment = current; | ||
| } | ||
| let branch = next ? thenFragment ?? desc.whenTrue() : desc.whenFalse ? elseFragment ?? desc.whenFalse() : null; | ||
| if (next && thenFragment) thenFragment = null; | ||
| if (!next && elseFragment) elseFragment = null; | ||
| if (branch != null && !(branch instanceof Node)) { | ||
| branch = ensureNode(branch); | ||
| } | ||
| if (branch instanceof Node) { | ||
| parent.insertBefore(branch, marker.end); | ||
| } | ||
| }); | ||
| } | ||
| function adoptBranchContent(desc, regionStart, regionEnd) { | ||
| if (isDescriptor(desc)) { | ||
| const el = nextElementBetweenMarkers(regionStart, regionEnd); | ||
| if (el) adoptNode(desc, el); | ||
| } else if (isShowDescriptor(desc)) { | ||
| let node = regionStart.nextSibling; | ||
| while (node && node !== regionEnd) { | ||
| if (node.nodeType === 8 && isShowStart(node.data)) { | ||
| const innerStart = node; | ||
| const innerEnd = findClosingMarker(innerStart); | ||
| if (innerEnd) { | ||
| if (desc.initialBranch) { | ||
| adoptBranchContent(desc.initialBranch, innerStart, innerEnd); | ||
| } | ||
| setupShowEffect(desc, { start: innerStart, end: innerEnd}); | ||
| } | ||
| break; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| function adoptNode(desc, ssrEl) { | ||
| if (!ssrEl || ssrEl.tagName !== desc.tag.toUpperCase()) { | ||
| if (__DEV__) console.warn(`Hydration mismatch: expected <${desc.tag}>, got <${ssrEl?.tagName?.toLowerCase() ?? "nothing"}>`); | ||
| const fresh = descriptorToElement(desc); | ||
| if (ssrEl) ssrEl.replaceWith(fresh); | ||
| return; | ||
| } | ||
| applyDynamicProps(ssrEl, desc.props); | ||
| let cursor = ssrEl.firstChild; | ||
| for (const child of desc.children) { | ||
| if (child === false || child == null) continue; | ||
| if (isDescriptor(child)) { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| while (cursor && cursor.nodeType === 1 && cursor.hasAttribute("data-forma-island")) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (!cursor) { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| continue; | ||
| } | ||
| if (cursor.nodeType === 1) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(child, el); | ||
| } else if (cursor.nodeType === 8 && isIslandStart(cursor.data)) { | ||
| const end = findClosingMarker(cursor); | ||
| const fresh = descriptorToElement(child); | ||
| if (end) { | ||
| end.parentNode.insertBefore(fresh, end); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| ssrEl.appendChild(fresh); | ||
| cursor = null; | ||
| } | ||
| } else { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| } | ||
| } else if (isShowDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isShowStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| if (child.initialBranch) { | ||
| adoptBranchContent(child.initialBranch, start, end); | ||
| } | ||
| setupShowEffect(child, { start, end}); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (isListDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isListStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| const ssrKeyMap = /* @__PURE__ */ new Map(); | ||
| const ssrElements = []; | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) { | ||
| const el = node; | ||
| ssrElements.push(el); | ||
| const key = el.getAttribute("data-forma-key"); | ||
| if (key != null) { | ||
| ssrKeyMap.set(key, el); | ||
| } | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| const currentItems = untrack(() => child.items()); | ||
| const listKeyFn = child.keyFn; | ||
| const listRenderFn = child.renderFn; | ||
| const useIndexFallback = ssrKeyMap.size === 0 && ssrElements.length > 0; | ||
| const adoptedNodes = []; | ||
| const adoptedItems = []; | ||
| const usedIndices = /* @__PURE__ */ new Set(); | ||
| for (let i = 0; i < currentItems.length; i++) { | ||
| const item = currentItems[i]; | ||
| const key = listKeyFn(item); | ||
| let ssrNode; | ||
| if (useIndexFallback) { | ||
| if (i < ssrElements.length) { | ||
| ssrNode = ssrElements[i]; | ||
| usedIndices.add(i); | ||
| } | ||
| } else { | ||
| ssrNode = ssrKeyMap.get(String(key)); | ||
| if (ssrNode) ssrKeyMap.delete(String(key)); | ||
| } | ||
| if (ssrNode) { | ||
| adoptedNodes.push(ssrNode); | ||
| adoptedItems.push(item); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: list item key "${key}" not found in SSR \u2014 rendering fresh`); | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const [getIndex] = createSignal(i); | ||
| const fresh = listRenderFn(item, getIndex); | ||
| end.parentNode.insertBefore(fresh, end); | ||
| adoptedNodes.push(fresh); | ||
| adoptedItems.push(item); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| } | ||
| if (useIndexFallback) { | ||
| for (let i = 0; i < ssrElements.length; i++) { | ||
| if (!usedIndices.has(i) && ssrElements[i].parentNode) { | ||
| ssrElements[i].parentNode.removeChild(ssrElements[i]); | ||
| } | ||
| } | ||
| } else { | ||
| for (const [unusedKey, unusedNode] of ssrKeyMap) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${unusedKey}"`); | ||
| if (unusedNode.parentNode) { | ||
| unusedNode.parentNode.removeChild(unusedNode); | ||
| } | ||
| } | ||
| } | ||
| const parent = start.parentNode; | ||
| for (const adoptedNode of adoptedNodes) { | ||
| parent.insertBefore(adoptedNode, end); | ||
| } | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < adoptedItems.length; i++) { | ||
| const item = adoptedItems[i]; | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = createSignal(i); | ||
| cache.set(key, { | ||
| element: adoptedNodes[i], | ||
| item, | ||
| getIndex, | ||
| setIndex | ||
| }); | ||
| } | ||
| let reconcileNodes = adoptedNodes.slice(); | ||
| let reconcileItems = adoptedItems.slice(); | ||
| internalEffect(() => { | ||
| const newItems = child.items(); | ||
| const parent2 = start.parentNode; | ||
| if (!parent2) return; | ||
| const result = reconcileList( | ||
| parent2, | ||
| reconcileItems, | ||
| newItems, | ||
| reconcileNodes, | ||
| listKeyFn, | ||
| (item) => { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = createSignal(0); | ||
| const element = untrack(() => listRenderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| }, | ||
| (_node, item) => { | ||
| const key = listKeyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }, | ||
| end | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| const key = listKeyFn(newItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| reconcileNodes = result.nodes; | ||
| reconcileItems = result.items; | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (typeof child === "function") { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor && cursor.nodeType === 1) { | ||
| const initial = child(); | ||
| if (isDescriptor(initial)) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(initial, el); | ||
| continue; | ||
| } | ||
| } | ||
| if (cursor && cursor.nodeType === 8) { | ||
| const data = cursor.data; | ||
| if (isTextStart(data)) { | ||
| const endMarker = findClosingMarker(cursor); | ||
| let textNode = cursor.nextSibling; | ||
| if (!textNode || textNode.nodeType !== 3) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for marker ${data} \u2014 SSR walker should emit content between markers`); | ||
| const created = document.createTextNode(""); | ||
| cursor.parentNode.insertBefore(created, endMarker || cursor.nextSibling); | ||
| textNode = created; | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = endMarker ? endMarker.nextSibling : textNode.nextSibling; | ||
| } else if (isShowStart(data)) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| let textNode = findTextBetween(start, end); | ||
| if (!textNode) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for show marker ${start.data} \u2014 SSR walker should emit content between markers`); | ||
| textNode = document.createTextNode(""); | ||
| start.parentNode.insertBefore(textNode, end); | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else if (cursor && cursor.nodeType === 3) { | ||
| const textNode = cursor; | ||
| cursor = cursor.nextSibling; | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node in empty <${ssrEl.tagName.toLowerCase()}> \u2014 IR may not cover this component`); | ||
| const textNode = document.createTextNode(""); | ||
| ssrEl.appendChild(textNode); | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } | ||
| } else if (typeof child === "string" || typeof child === "number") { | ||
| if (cursor && cursor.nodeType === 3) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function hydrateIsland(component, target) { | ||
| const hasSSRContent = target.childElementCount > 0 || target.childNodes.length > 0 && Array.from(target.childNodes).some((n) => n.nodeType === 1 || n.nodeType === 3 && n.data.trim()); | ||
| if (!hasSSRContent) { | ||
| if (__DEV__) { | ||
| const name = target.getAttribute("data-forma-component") || "unknown"; | ||
| console.warn( | ||
| `[forma] Island "${name}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.` | ||
| ); | ||
| } | ||
| const result = component(); | ||
| if (result instanceof Element) { | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (attr.name.startsWith("data-forma-")) { | ||
| result.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| target.replaceWith(result); | ||
| return result; | ||
| } else if (result instanceof Node) { | ||
| target.appendChild(result); | ||
| } | ||
| return target; | ||
| } | ||
| setHydrating(true); | ||
| let descriptor; | ||
| try { | ||
| descriptor = component(); | ||
| } finally { | ||
| setHydrating(false); | ||
| } | ||
| if (!descriptor || !isDescriptor(descriptor)) { | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| if (target.hasAttribute("data-forma-island")) { | ||
| adoptNode(descriptor, target); | ||
| } else { | ||
| adoptNode(descriptor, target.children[0]); | ||
| } | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| // src/dom/list.ts | ||
| function longestIncreasingSubsequence(arr) { | ||
| const n = arr.length; | ||
| if (n === 0) return []; | ||
| const tails = new Int32Array(n); | ||
| const tailIndices = new Int32Array(n); | ||
| const predecessor = new Int32Array(n).fill(-1); | ||
| let tailsLen = 0; | ||
| for (let i = 0; i < n; i++) { | ||
| const val = arr[i]; | ||
| let lo = 0, hi = tailsLen; | ||
| while (lo < hi) { | ||
| const mid = lo + hi >> 1; | ||
| if (tails[mid] < val) lo = mid + 1; | ||
| else hi = mid; | ||
| } | ||
| tails[lo] = val; | ||
| tailIndices[lo] = i; | ||
| if (lo > 0) predecessor[i] = tailIndices[lo - 1]; | ||
| if (lo >= tailsLen) tailsLen++; | ||
| } | ||
| const result = new Array(tailsLen); | ||
| let idx = tailIndices[tailsLen - 1]; | ||
| for (let i = tailsLen - 1; i >= 0; i--) { | ||
| result[i] = idx; | ||
| idx = predecessor[idx]; | ||
| } | ||
| return result; | ||
| } | ||
| var SMALL_LIST_THRESHOLD = 32; | ||
| var ABORT_SYM3 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var CACHE_SYM2 = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM2 = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function canPatchStaticElement(target, source) { | ||
| return target instanceof HTMLElement && source instanceof HTMLElement && target.tagName === source.tagName && !target[ABORT_SYM3] && !target[CACHE_SYM2] && !target[DYNAMIC_CHILD_SYM2] && !source[ABORT_SYM3] && !source[CACHE_SYM2] && !source[DYNAMIC_CHILD_SYM2]; | ||
| } | ||
| function patchStaticElement(target, source) { | ||
| const sourceAttrNames = /* @__PURE__ */ new Set(); | ||
| for (const attr of Array.from(source.attributes)) { | ||
| sourceAttrNames.add(attr.name); | ||
| if (target.getAttribute(attr.name) !== attr.value) { | ||
| target.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (!sourceAttrNames.has(attr.name)) { | ||
| target.removeAttribute(attr.name); | ||
| } | ||
| } | ||
| target.replaceChildren(...Array.from(source.childNodes)); | ||
| } | ||
| function reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| const oldKeys = new Array(oldLen); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeys[i] = keyFn(oldItems[i]); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| let found = -1; | ||
| for (let j = 0; j < oldLen; j++) { | ||
| if (!oldUsed[j] && oldKeys[j] === key) { | ||
| found = j; | ||
| oldUsed[j] = 1; | ||
| break; | ||
| } | ||
| } | ||
| oldIndices[i] = found; | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function reconcileList(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| if (newLen === 0) { | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| return { nodes: [], items: [] }; | ||
| } | ||
| if (oldLen === 0) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = createFn(newItems[i]); | ||
| if (beforeNode) { | ||
| parent.insertBefore(node, beforeNode); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| hooks?.onInsert?.(node); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| if (oldLen < SMALL_LIST_THRESHOLD) { | ||
| return reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks); | ||
| } | ||
| const oldKeyMap = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeyMap.set(keyFn(oldItems[i]), i); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| const oldIdx = oldKeyMap.get(key); | ||
| if (oldIdx !== void 0) { | ||
| oldIndices[i] = oldIdx; | ||
| oldUsed[oldIdx] = 1; | ||
| } else { | ||
| oldIndices[i] = -1; | ||
| } | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function createList(items, keyFn, renderFn, options) { | ||
| if (hydrating) { | ||
| return { type: "list", items, keyFn, renderFn, options }; | ||
| } | ||
| const startMarker = document.createComment("forma-list-start"); | ||
| const endMarker = document.createComment("forma-list-end"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| let currentNodes = []; | ||
| let currentItems = []; | ||
| const updateOnItemChange = options?.updateOnItemChange ?? "none"; | ||
| internalEffect(() => { | ||
| const newItems = items(); | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| return; | ||
| } | ||
| if (!Array.isArray(newItems)) { | ||
| if (__DEV__) { | ||
| console.warn("[forma] createList: value is not an array, treating as empty"); | ||
| } | ||
| for (const node of currentNodes) { | ||
| if (node.parentNode === parent) parent.removeChild(node); | ||
| } | ||
| cache = /* @__PURE__ */ new Map(); | ||
| currentNodes = []; | ||
| currentItems = []; | ||
| return; | ||
| } | ||
| let cleanItems = newItems; | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| if (newItems[i] == null) { | ||
| cleanItems = newItems.filter((item) => item != null); | ||
| break; | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| const seen = /* @__PURE__ */ new Set(); | ||
| for (const item of cleanItems) { | ||
| const key = keyFn(item); | ||
| if (seen.has(key)) { | ||
| console.warn("[forma] createList: duplicate key detected:", key); | ||
| } | ||
| seen.add(key); | ||
| } | ||
| } | ||
| const updateRow = updateOnItemChange === "rerender" ? (node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (!cached) return; | ||
| if (cached.item === item) return; | ||
| cached.item = item; | ||
| if (!(node instanceof HTMLElement)) return; | ||
| if (node[ABORT_SYM3] || node[CACHE_SYM2] || node[DYNAMIC_CHILD_SYM2]) { | ||
| return; | ||
| } | ||
| const next = untrack(() => renderFn(item, cached.getIndex)); | ||
| if (canPatchStaticElement(node, next)) { | ||
| patchStaticElement(node, next); | ||
| cached.element = node; | ||
| } | ||
| } : (_node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }; | ||
| const result = reconcileList( | ||
| parent, | ||
| currentItems, | ||
| cleanItems, | ||
| currentNodes, | ||
| keyFn, | ||
| // createFn: create element + cache entry | ||
| (item) => { | ||
| const key = keyFn(item); | ||
| const [getIndex, setIndex] = createSignal(0); | ||
| const element = untrack(() => renderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| }, | ||
| updateRow, | ||
| // beforeNode: insert items before the end marker | ||
| endMarker | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < cleanItems.length; i++) { | ||
| const key = keyFn(cleanItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| currentNodes = result.nodes; | ||
| currentItems = result.items; | ||
| }); | ||
| return fragment2; | ||
| } | ||
| export { Fragment, __DEV__, batch, cleanup, createEffect, createList, createMemo, createReducer, createRef, createResource, createRoot, createShow, fragment, h, hydrateIsland, internalEffect, on, onCleanup, onError, popSuspenseContext, pushSuspenseContext, reconcileList, reportError, untrack }; | ||
| //# sourceMappingURL=chunk-N522P3G6.js.map | ||
| //# sourceMappingURL=chunk-N522P3G6.js.map |
Sorry, the diff of this file is too big to display
| 'use strict'; | ||
| var chunk3U57L2TY_cjs = require('./chunk-3U57L2TY.cjs'); | ||
| var alienSignals = require('alien-signals'); | ||
| var currentRoot = null; | ||
| var rootStack = []; | ||
| function createRoot(fn) { | ||
| const scope = { disposers: [], scopeDispose: null }; | ||
| rootStack.push(currentRoot); | ||
| currentRoot = scope; | ||
| const dispose = () => { | ||
| if (scope.scopeDispose) { | ||
| try { | ||
| scope.scopeDispose(); | ||
| } catch { | ||
| } | ||
| scope.scopeDispose = null; | ||
| } | ||
| for (const d of scope.disposers) { | ||
| try { | ||
| d(); | ||
| } catch { | ||
| } | ||
| } | ||
| scope.disposers.length = 0; | ||
| }; | ||
| let result; | ||
| try { | ||
| scope.scopeDispose = alienSignals.effectScope(() => { | ||
| result = fn(dispose); | ||
| }); | ||
| } finally { | ||
| currentRoot = rootStack.pop() ?? null; | ||
| } | ||
| return result; | ||
| } | ||
| function registerDisposer(dispose) { | ||
| if (currentRoot) { | ||
| currentRoot.disposers.push(dispose); | ||
| } | ||
| } | ||
| function hasActiveRoot() { | ||
| return currentRoot !== null; | ||
| } | ||
| // src/reactive/cleanup.ts | ||
| var currentCleanupCollector = null; | ||
| function onCleanup(fn) { | ||
| currentCleanupCollector?.(fn); | ||
| } | ||
| function setCleanupCollector(collector) { | ||
| const prev = currentCleanupCollector; | ||
| currentCleanupCollector = collector; | ||
| return prev; | ||
| } | ||
| // src/reactive/dev.ts | ||
| var __DEV__ = typeof process !== "undefined" ? process.env?.NODE_ENV !== "production" : true; | ||
| var _errorHandler = null; | ||
| function onError(handler) { | ||
| _errorHandler = handler; | ||
| } | ||
| function reportError(error, source) { | ||
| if (_errorHandler) { | ||
| try { | ||
| _errorHandler(error, source ? { source } : {}); | ||
| } catch { | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| console.error(`[forma] ${source ?? "Unknown"} error:`, error); | ||
| } | ||
| } | ||
| var POOL_SIZE = 32; | ||
| var MAX_REENTRANT_RUNS = 100; | ||
| var pool = []; | ||
| for (let i = 0; i < POOL_SIZE; i++) pool.push([]); | ||
| var poolIdx = POOL_SIZE; | ||
| function acquireArray() { | ||
| if (poolIdx > 0) { | ||
| const arr = pool[--poolIdx]; | ||
| arr.length = 0; | ||
| return arr; | ||
| } | ||
| return []; | ||
| } | ||
| function releaseArray(arr) { | ||
| arr.length = 0; | ||
| if (poolIdx < POOL_SIZE) { | ||
| pool[poolIdx++] = arr; | ||
| } | ||
| } | ||
| function runCleanup(fn) { | ||
| if (fn === void 0) return; | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| function runCleanups(bag) { | ||
| if (bag === void 0) return; | ||
| for (let i = 0; i < bag.length; i++) { | ||
| try { | ||
| bag[i](); | ||
| } catch (e) { | ||
| reportError(e, "effect cleanup"); | ||
| } | ||
| } | ||
| } | ||
| function internalEffect(fn) { | ||
| const dispose = alienSignals.effect(fn); | ||
| if (hasActiveRoot()) { | ||
| registerDisposer(dispose); | ||
| } | ||
| return dispose; | ||
| } | ||
| function createEffect(fn) { | ||
| const shouldRegister = hasActiveRoot(); | ||
| let cleanup2; | ||
| let cleanupBag; | ||
| let nextCleanup; | ||
| let nextCleanupBag; | ||
| const addCleanup = (cb) => { | ||
| if (nextCleanupBag !== void 0) { | ||
| nextCleanupBag.push(cb); | ||
| return; | ||
| } | ||
| if (nextCleanup !== void 0) { | ||
| const bag = acquireArray(); | ||
| bag.push(nextCleanup, cb); | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = bag; | ||
| return; | ||
| } | ||
| nextCleanup = cb; | ||
| }; | ||
| let skipCleanupInfra = false; | ||
| let firstRun = true; | ||
| let running = false; | ||
| let rerunRequested = false; | ||
| const runOnce = () => { | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| if (skipCleanupInfra) { | ||
| try { | ||
| fn(); | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| } | ||
| return; | ||
| } | ||
| nextCleanup = void 0; | ||
| nextCleanupBag = void 0; | ||
| const prevCollector = setCleanupCollector(addCleanup); | ||
| try { | ||
| const result = fn(); | ||
| if (typeof result === "function") { | ||
| addCleanup(result); | ||
| } | ||
| if (nextCleanup === void 0 && nextCleanupBag === void 0) { | ||
| if (firstRun) skipCleanupInfra = true; | ||
| return; | ||
| } | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } catch (e) { | ||
| reportError(e, "effect"); | ||
| if (nextCleanupBag !== void 0) { | ||
| cleanupBag = nextCleanupBag; | ||
| } else { | ||
| cleanup2 = nextCleanup; | ||
| } | ||
| } finally { | ||
| setCleanupCollector(prevCollector); | ||
| firstRun = false; | ||
| } | ||
| }; | ||
| const safeFn = () => { | ||
| if (running) { | ||
| rerunRequested = true; | ||
| return; | ||
| } | ||
| running = true; | ||
| try { | ||
| let reentrantRuns = 0; | ||
| do { | ||
| rerunRequested = false; | ||
| runOnce(); | ||
| if (rerunRequested) { | ||
| reentrantRuns++; | ||
| if (reentrantRuns >= MAX_REENTRANT_RUNS) { | ||
| reportError( | ||
| new Error(`createEffect exceeded ${MAX_REENTRANT_RUNS} re-entrant runs`), | ||
| "effect" | ||
| ); | ||
| rerunRequested = false; | ||
| } | ||
| } | ||
| } while (rerunRequested); | ||
| } finally { | ||
| running = false; | ||
| } | ||
| }; | ||
| const dispose = alienSignals.effect(safeFn); | ||
| let disposed = false; | ||
| const wrappedDispose = () => { | ||
| if (disposed) return; | ||
| disposed = true; | ||
| dispose(); | ||
| if (cleanup2 !== void 0) { | ||
| runCleanup(cleanup2); | ||
| cleanup2 = void 0; | ||
| } | ||
| if (cleanupBag !== void 0) { | ||
| runCleanups(cleanupBag); | ||
| releaseArray(cleanupBag); | ||
| cleanupBag = void 0; | ||
| } | ||
| }; | ||
| if (shouldRegister) { | ||
| registerDisposer(wrappedDispose); | ||
| } | ||
| return wrappedDispose; | ||
| } | ||
| // src/reactive/memo.ts | ||
| var createMemo = chunk3U57L2TY_cjs.createComputed; | ||
| function batch(fn) { | ||
| alienSignals.startBatch(); | ||
| try { | ||
| fn(); | ||
| } finally { | ||
| alienSignals.endBatch(); | ||
| } | ||
| } | ||
| function untrack(fn) { | ||
| const prev = alienSignals.setActiveSub(void 0); | ||
| try { | ||
| return fn(); | ||
| } finally { | ||
| alienSignals.setActiveSub(prev); | ||
| } | ||
| } | ||
| // src/reactive/on.ts | ||
| function on(deps, fn, options) { | ||
| let prev; | ||
| let isFirst = true; | ||
| return () => { | ||
| const value2 = deps(); | ||
| if (options?.defer && isFirst) { | ||
| isFirst = false; | ||
| prev = value2; | ||
| return void 0; | ||
| } | ||
| const result = untrack(() => fn(value2, prev)); | ||
| prev = value2; | ||
| return result; | ||
| }; | ||
| } | ||
| // src/reactive/ref.ts | ||
| function createRef(initialValue) { | ||
| return { current: initialValue }; | ||
| } | ||
| // src/reactive/reducer.ts | ||
| function createReducer(reducer, initialState) { | ||
| const [state, setState] = chunk3U57L2TY_cjs.createSignal(initialState); | ||
| const dispatch = (action) => { | ||
| setState((prev) => reducer(prev, action)); | ||
| }; | ||
| return [state, dispatch]; | ||
| } | ||
| // src/reactive/suspense-context.ts | ||
| var currentSuspenseContext = null; | ||
| var suspenseStack = []; | ||
| function pushSuspenseContext(ctx) { | ||
| suspenseStack.push(currentSuspenseContext); | ||
| currentSuspenseContext = ctx; | ||
| } | ||
| function popSuspenseContext() { | ||
| currentSuspenseContext = suspenseStack.pop() ?? null; | ||
| } | ||
| function getSuspenseContext() { | ||
| return currentSuspenseContext; | ||
| } | ||
| // src/reactive/resource.ts | ||
| function createResource(source, fetcher, options) { | ||
| const [data, setData] = chunk3U57L2TY_cjs.createSignal(options?.initialValue); | ||
| const [loading, setLoading] = chunk3U57L2TY_cjs.createSignal(false); | ||
| const [error, setError] = chunk3U57L2TY_cjs.createSignal(void 0); | ||
| const suspenseCtx = getSuspenseContext(); | ||
| let abortController = null; | ||
| let fetchVersion = 0; | ||
| const doFetch = () => { | ||
| const sourceValue = untrack(source); | ||
| if (abortController) { | ||
| abortController.abort(); | ||
| } | ||
| const controller = new AbortController(); | ||
| abortController = controller; | ||
| const version = ++fetchVersion; | ||
| const isLatest = () => version === fetchVersion; | ||
| let suspensePending = false; | ||
| if (suspenseCtx) { | ||
| suspenseCtx.increment(); | ||
| suspensePending = true; | ||
| } | ||
| setLoading(true); | ||
| setError(void 0); | ||
| Promise.resolve(fetcher(sourceValue)).then((result) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| setData(() => result); | ||
| } | ||
| }).catch((err) => { | ||
| if (isLatest() && !controller.signal.aborted) { | ||
| if (err?.name !== "AbortError") { | ||
| setError(err); | ||
| } | ||
| } | ||
| }).finally(() => { | ||
| if (suspensePending) suspenseCtx?.decrement(); | ||
| if (isLatest()) { | ||
| setLoading(false); | ||
| if (abortController === controller) { | ||
| abortController = null; | ||
| } | ||
| } | ||
| }); | ||
| }; | ||
| internalEffect(() => { | ||
| source(); | ||
| doFetch(); | ||
| }); | ||
| const resource = (() => data()); | ||
| resource.loading = loading; | ||
| resource.error = error; | ||
| resource.refetch = doFetch; | ||
| resource.mutate = (value2) => setData(() => value2); | ||
| return resource; | ||
| } | ||
| // src/dom/element.ts | ||
| var Fragment = /* @__PURE__ */ Symbol.for("forma.fragment"); | ||
| var SVG_NS = "http://www.w3.org/2000/svg"; | ||
| var XLINK_NS = "http://www.w3.org/1999/xlink"; | ||
| var SVG_TAGS = /* @__PURE__ */ new Set([ | ||
| "svg", | ||
| "path", | ||
| "circle", | ||
| "rect", | ||
| "line", | ||
| "polyline", | ||
| "polygon", | ||
| "ellipse", | ||
| "g", | ||
| "text", | ||
| "tspan", | ||
| "textPath", | ||
| "defs", | ||
| "use", | ||
| "symbol", | ||
| "clipPath", | ||
| "mask", | ||
| "pattern", | ||
| "marker", | ||
| "linearGradient", | ||
| "radialGradient", | ||
| "stop", | ||
| "filter", | ||
| "feGaussianBlur", | ||
| "feColorMatrix", | ||
| "feOffset", | ||
| "feBlend", | ||
| "feMerge", | ||
| "feMergeNode", | ||
| "feComposite", | ||
| "feFlood", | ||
| "feMorphology", | ||
| "feTurbulence", | ||
| "feDisplacementMap", | ||
| "feImage", | ||
| "foreignObject", | ||
| "animate", | ||
| "animateTransform", | ||
| "animateMotion", | ||
| "set", | ||
| "image", | ||
| "switch", | ||
| "desc", | ||
| "title", | ||
| "metadata" | ||
| ]); | ||
| var BOOLEAN_ATTRS = /* @__PURE__ */ new Set([ | ||
| "disabled", | ||
| "checked", | ||
| "readonly", | ||
| "required", | ||
| "autofocus", | ||
| "autoplay", | ||
| "controls", | ||
| "default", | ||
| "defer", | ||
| "formnovalidate", | ||
| "hidden", | ||
| "ismap", | ||
| "loop", | ||
| "multiple", | ||
| "muted", | ||
| "nomodule", | ||
| "novalidate", | ||
| "open", | ||
| "playsinline", | ||
| "reversed", | ||
| "selected", | ||
| "async" | ||
| ]); | ||
| var ELEMENT_PROTOS = null; | ||
| function getProto(tag) { | ||
| if (!ELEMENT_PROTOS) { | ||
| ELEMENT_PROTOS = /* @__PURE__ */ Object.create(null); | ||
| for (const t of [ | ||
| "div", | ||
| "span", | ||
| "p", | ||
| "a", | ||
| "li", | ||
| "ul", | ||
| "ol", | ||
| "button", | ||
| "input", | ||
| "label", | ||
| "h1", | ||
| "h2", | ||
| "h3", | ||
| "h4", | ||
| "h5", | ||
| "h6", | ||
| "section", | ||
| "header", | ||
| "footer", | ||
| "main", | ||
| "nav", | ||
| "table", | ||
| "tr", | ||
| "td", | ||
| "th", | ||
| "tbody", | ||
| "img", | ||
| "form", | ||
| "select", | ||
| "option", | ||
| "textarea", | ||
| "i", | ||
| "b", | ||
| "strong", | ||
| "em", | ||
| "small", | ||
| "article", | ||
| "aside", | ||
| "details", | ||
| "summary" | ||
| ]) { | ||
| ELEMENT_PROTOS[t] = document.createElement(t); | ||
| } | ||
| } | ||
| return ELEMENT_PROTOS[tag] ?? (ELEMENT_PROTOS[tag] = document.createElement(tag)); | ||
| } | ||
| var EVENT_NAMES = /* @__PURE__ */ Object.create(null); | ||
| function eventName(key) { | ||
| return EVENT_NAMES[key] ?? (EVENT_NAMES[key] = key.slice(2).toLowerCase()); | ||
| } | ||
| var ABORT_SYM = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| function getAbortController(el) { | ||
| let controller = el[ABORT_SYM]; | ||
| if (!controller) { | ||
| controller = new AbortController(); | ||
| el[ABORT_SYM] = controller; | ||
| } | ||
| return controller; | ||
| } | ||
| function cleanup(el) { | ||
| const controller = el[ABORT_SYM]; | ||
| if (controller) { | ||
| controller.abort(); | ||
| delete el[ABORT_SYM]; | ||
| } | ||
| } | ||
| var CACHE_SYM = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function getCache(el) { | ||
| return el[CACHE_SYM] ?? (el[CACHE_SYM] = /* @__PURE__ */ Object.create(null)); | ||
| } | ||
| function handleClass(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache["class"] === v) return; | ||
| cache["class"] = v; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = v; | ||
| } else { | ||
| el.setAttribute("class", v); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache["class"] === value2) return; | ||
| cache["class"] = value2; | ||
| if (el instanceof HTMLElement) { | ||
| el.className = value2; | ||
| } else { | ||
| el.setAttribute("class", value2); | ||
| } | ||
| } | ||
| } | ||
| function handleStyle(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| let prevKeys = []; | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (typeof v === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === v) return; | ||
| cache["style"] = v; | ||
| prevKeys = []; | ||
| el.style.cssText = v; | ||
| } else if (v && typeof v === "object") { | ||
| const style = el.style; | ||
| const nextKeys = Object.keys(v); | ||
| for (const k of prevKeys) { | ||
| if (!(k in v)) { | ||
| style.removeProperty(k.replace(/[A-Z]/g, (c) => "-" + c.toLowerCase())); | ||
| } | ||
| } | ||
| Object.assign(style, v); | ||
| prevKeys = nextKeys; | ||
| } | ||
| }); | ||
| } else if (typeof value2 === "string") { | ||
| const cache = getCache(el); | ||
| if (cache["style"] === value2) return; | ||
| cache["style"] = value2; | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| } | ||
| function handleEvent(el, key, value2) { | ||
| const controller = getAbortController(el); | ||
| el.addEventListener( | ||
| eventName(key), | ||
| value2, | ||
| { signal: controller.signal } | ||
| ); | ||
| } | ||
| function handleInnerHTML(el, _key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const resolved = value2(); | ||
| if (resolved == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof resolved !== "object" || !("__html" in resolved)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof resolved | ||
| ); | ||
| } | ||
| const html = resolved.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| const cache = getCache(el); | ||
| if (cache["innerHTML"] === html) return; | ||
| cache["innerHTML"] = html; | ||
| el.innerHTML = html; | ||
| }); | ||
| } else { | ||
| if (value2 == null) { | ||
| el.innerHTML = ""; | ||
| return; | ||
| } | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| } | ||
| } | ||
| function handleXLink(el, key, value2) { | ||
| const localName = key.slice(6); | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(v)); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| el.removeAttributeNS(XLINK_NS, localName); | ||
| } else { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| } | ||
| } | ||
| } | ||
| function handleBooleanAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| const cache = getCache(el); | ||
| if (cache[key] === v) return; | ||
| cache[key] = v; | ||
| if (v) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| }); | ||
| } else { | ||
| const cache = getCache(el); | ||
| if (cache[key] === value2) return; | ||
| cache[key] = value2; | ||
| if (value2) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.removeAttribute(key); | ||
| } | ||
| } | ||
| } | ||
| function handleGenericAttr(el, key, value2) { | ||
| if (typeof value2 === "function") { | ||
| internalEffect(() => { | ||
| const v = value2(); | ||
| if (v == null || v === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(v); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| }); | ||
| } else { | ||
| if (value2 == null || value2 === false) { | ||
| const cache = getCache(el); | ||
| if (cache[key] === null) return; | ||
| cache[key] = null; | ||
| el.removeAttribute(key); | ||
| } else { | ||
| const strVal = String(value2); | ||
| const cache = getCache(el); | ||
| if (cache[key] === strVal) return; | ||
| cache[key] = strVal; | ||
| el.setAttribute(key, strVal); | ||
| } | ||
| } | ||
| } | ||
| var PROP_HANDLERS = /* @__PURE__ */ new Map(); | ||
| PROP_HANDLERS.set("class", handleClass); | ||
| PROP_HANDLERS.set("className", handleClass); | ||
| PROP_HANDLERS.set("style", handleStyle); | ||
| PROP_HANDLERS.set("ref", () => { | ||
| }); | ||
| PROP_HANDLERS.set("dangerouslySetInnerHTML", handleInnerHTML); | ||
| for (const attr of BOOLEAN_ATTRS) { | ||
| PROP_HANDLERS.set(attr, handleBooleanAttr); | ||
| } | ||
| function applyProp(el, key, value2) { | ||
| if (key === "class") { | ||
| handleClass(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| return; | ||
| } | ||
| const handler = PROP_HANDLERS.get(key); | ||
| if (handler) { | ||
| handler(el, key, value2); | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| handleXLink(el, key, value2); | ||
| return; | ||
| } | ||
| handleGenericAttr(el, key, value2); | ||
| } | ||
| function applyStaticProp(el, key, value2) { | ||
| if (value2 == null || value2 === false) return; | ||
| if (key === "class" || key === "className") { | ||
| el.className = value2; | ||
| return; | ||
| } | ||
| if (key === "style") { | ||
| if (typeof value2 === "string") { | ||
| el.style.cssText = value2; | ||
| } else if (value2 && typeof value2 === "object") { | ||
| Object.assign(el.style, value2); | ||
| } | ||
| return; | ||
| } | ||
| if (key === "dangerouslySetInnerHTML") { | ||
| if (typeof value2 !== "object" || !("__html" in value2)) { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: expected { __html: string }, got " + typeof value2 | ||
| ); | ||
| } | ||
| const html = value2.__html; | ||
| if (typeof html !== "string") { | ||
| throw new TypeError( | ||
| "dangerouslySetInnerHTML: __html must be a string, got " + typeof html | ||
| ); | ||
| } | ||
| el.innerHTML = html; | ||
| return; | ||
| } | ||
| if (key.charCodeAt(0) === 120 && key.startsWith("xlink:")) { | ||
| el.setAttributeNS(XLINK_NS, key, String(value2)); | ||
| return; | ||
| } | ||
| if (BOOLEAN_ATTRS.has(key)) { | ||
| if (value2) el.setAttribute(key, ""); | ||
| return; | ||
| } | ||
| if (value2 === true) { | ||
| el.setAttribute(key, ""); | ||
| } else { | ||
| el.setAttribute(key, String(value2)); | ||
| } | ||
| } | ||
| function appendChild(parent, child) { | ||
| if (child instanceof Node) { | ||
| parent.appendChild(child); | ||
| return; | ||
| } | ||
| if (typeof child === "string") { | ||
| parent.appendChild(new Text(child)); | ||
| return; | ||
| } | ||
| if (child == null || child === false || child === true) { | ||
| return; | ||
| } | ||
| if (typeof child === "number") { | ||
| parent.appendChild(new Text(String(child))); | ||
| return; | ||
| } | ||
| if (typeof child === "function") { | ||
| if (parent instanceof Element) { | ||
| parent[DYNAMIC_CHILD_SYM] = true; | ||
| } | ||
| let currentNode = null; | ||
| internalEffect(() => { | ||
| const v = child(); | ||
| if (v instanceof Node) { | ||
| if (currentNode) { | ||
| parent.replaceChild(v, currentNode); | ||
| } else { | ||
| parent.appendChild(v); | ||
| } | ||
| currentNode = v; | ||
| } else { | ||
| const text = typeof v === "symbol" ? String(v) : String(v ?? ""); | ||
| if (!currentNode) { | ||
| currentNode = new Text(text); | ||
| parent.appendChild(currentNode); | ||
| } else if (currentNode.nodeType === 3) { | ||
| currentNode.data = text; | ||
| } else { | ||
| const tn = new Text(text); | ||
| parent.replaceChild(tn, currentNode); | ||
| currentNode = tn; | ||
| } | ||
| } | ||
| }); | ||
| return; | ||
| } | ||
| if (Array.isArray(child)) { | ||
| for (const item of child) { | ||
| appendChild(parent, item); | ||
| } | ||
| return; | ||
| } | ||
| } | ||
| function h(tag, props, ...children) { | ||
| if (typeof tag === "function" && tag !== Fragment) { | ||
| const mergedProps = { ...props ?? {}, children }; | ||
| return tag(mergedProps); | ||
| } | ||
| if (tag === Fragment) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| const tagName = tag; | ||
| if (hydrating) { | ||
| return { type: "element", tag: tagName, props: props ?? null, children }; | ||
| } | ||
| let el; | ||
| if (ELEMENT_PROTOS && ELEMENT_PROTOS[tagName]) { | ||
| el = ELEMENT_PROTOS[tagName].cloneNode(false); | ||
| } else if (SVG_TAGS.has(tagName)) { | ||
| el = document.createElementNS(SVG_NS, tagName); | ||
| } else { | ||
| el = getProto(tagName).cloneNode(false); | ||
| } | ||
| if (props) { | ||
| let hasDynamic = false; | ||
| for (const key in props) { | ||
| if (key === "ref") continue; | ||
| const value2 = props[key]; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| handleEvent(el, key, value2); | ||
| continue; | ||
| } | ||
| if (typeof value2 === "function") { | ||
| if (!hasDynamic) { | ||
| el[CACHE_SYM] = /* @__PURE__ */ Object.create(null); | ||
| hasDynamic = true; | ||
| } | ||
| applyProp(el, key, value2); | ||
| continue; | ||
| } | ||
| applyStaticProp(el, key, value2); | ||
| } | ||
| } | ||
| const childLen = children.length; | ||
| if (childLen === 1) { | ||
| const only = children[0]; | ||
| if (typeof only === "string") { | ||
| el.textContent = only; | ||
| } else if (typeof only === "number") { | ||
| el.textContent = String(only); | ||
| } else { | ||
| appendChild(el, only); | ||
| } | ||
| } else if (childLen > 1) { | ||
| for (const child of children) { | ||
| appendChild(el, child); | ||
| } | ||
| } | ||
| if (props && typeof props["ref"] === "function") { | ||
| props["ref"](el); | ||
| } | ||
| return el; | ||
| } | ||
| function fragment(...children) { | ||
| const frag = document.createDocumentFragment(); | ||
| for (const child of children) { | ||
| appendChild(frag, child); | ||
| } | ||
| return frag; | ||
| } | ||
| // src/dom/show.ts | ||
| function createShow(when, thenFn, elseFn) { | ||
| if (hydrating) { | ||
| const branch = when() ? thenFn() : elseFn?.() ?? null; | ||
| return { | ||
| type: "show", | ||
| condition: when, | ||
| whenTrue: thenFn, | ||
| whenFalse: elseFn, | ||
| initialBranch: branch | ||
| }; | ||
| } | ||
| const startMarker = document.createComment("forma-show"); | ||
| const endMarker = document.createComment("/forma-show"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let currentNode = null; | ||
| let lastTruthy = null; | ||
| let currentDispose = null; | ||
| const showDispose = internalEffect(() => { | ||
| const truthy = !!when(); | ||
| const DEBUG = typeof globalThis.__FORMA_DEBUG__ !== "undefined"; | ||
| const DEBUG_LABEL = DEBUG ? thenFn.toString().slice(0, 60) : ""; | ||
| if (truthy === lastTruthy) { | ||
| if (DEBUG) console.log("[forma:show] skip (same)", truthy, DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show]", lastTruthy, "\u2192", truthy, DEBUG_LABEL); | ||
| lastTruthy = truthy; | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| if (DEBUG) console.warn("[forma:show] parentNode is null! skipping.", DEBUG_LABEL); | ||
| return; | ||
| } | ||
| if (DEBUG) console.log("[forma:show] parent:", parent.nodeName, "inDoc:", document.contains(parent)); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| if (currentNode) { | ||
| if (currentNode.parentNode === parent) { | ||
| parent.removeChild(currentNode); | ||
| } else { | ||
| while (startMarker.nextSibling && startMarker.nextSibling !== endMarker) { | ||
| parent.removeChild(startMarker.nextSibling); | ||
| } | ||
| } | ||
| } | ||
| const branchFn = truthy ? thenFn : elseFn; | ||
| if (branchFn) { | ||
| let branchDispose; | ||
| currentNode = createRoot((dispose) => { | ||
| branchDispose = dispose; | ||
| return untrack(() => branchFn()); | ||
| }); | ||
| currentDispose = branchDispose; | ||
| } else { | ||
| currentNode = null; | ||
| } | ||
| if (currentNode) { | ||
| parent.insertBefore(currentNode, endMarker); | ||
| } | ||
| }); | ||
| fragment2.__showDispose = () => { | ||
| showDispose(); | ||
| if (currentDispose) { | ||
| currentDispose(); | ||
| currentDispose = null; | ||
| } | ||
| }; | ||
| return fragment2; | ||
| } | ||
| // src/dom/hydrate.ts | ||
| var ABORT_SYM2 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var hydrating = false; | ||
| function setHydrating(value2) { | ||
| hydrating = value2; | ||
| } | ||
| function isDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "element"; | ||
| } | ||
| function isShowDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "show"; | ||
| } | ||
| function isListDescriptor(v) { | ||
| return v != null && typeof v === "object" && "type" in v && v.type === "list"; | ||
| } | ||
| function applyDynamicProps(el, props) { | ||
| if (!props) return; | ||
| for (const key in props) { | ||
| const value2 = props[key]; | ||
| if (typeof value2 !== "function") continue; | ||
| if (key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && key.length > 2) { | ||
| let ac = el[ABORT_SYM2]; | ||
| if (!ac) { | ||
| ac = new AbortController(); | ||
| el[ABORT_SYM2] = ac; | ||
| } | ||
| el.addEventListener(key.slice(2).toLowerCase(), value2, { signal: ac.signal }); | ||
| continue; | ||
| } | ||
| const fn = value2; | ||
| const attrKey = key; | ||
| internalEffect(() => { | ||
| const v = fn(); | ||
| if (v === false || v == null) { | ||
| el.removeAttribute(attrKey); | ||
| } else if (v === true) { | ||
| el.setAttribute(attrKey, ""); | ||
| } else { | ||
| el.setAttribute(attrKey, String(v)); | ||
| } | ||
| }); | ||
| } | ||
| } | ||
| function ensureNode(value2) { | ||
| if (value2 instanceof Node) return value2; | ||
| if (value2 == null || value2 === false || value2 === true) return null; | ||
| if (typeof value2 === "string") return new Text(value2); | ||
| if (typeof value2 === "number") return new Text(String(value2)); | ||
| if (isDescriptor(value2)) return descriptorToElement(value2); | ||
| if (isShowDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createShow( | ||
| value2.condition, | ||
| () => ensureNode(value2.whenTrue()) ?? document.createComment("empty"), | ||
| value2.whenFalse ? () => ensureNode(value2.whenFalse()) ?? document.createComment("empty") : void 0 | ||
| ); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| if (isListDescriptor(value2)) { | ||
| const prevH = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| return createList(value2.items, value2.keyFn, value2.renderFn, value2.options); | ||
| } finally { | ||
| hydrating = prevH; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| function descriptorToElement(desc) { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const children = desc.children.map((child) => { | ||
| if (isDescriptor(child)) return descriptorToElement(child); | ||
| if (isShowDescriptor(child)) return ensureNode(child); | ||
| if (isListDescriptor(child)) return ensureNode(child); | ||
| return child; | ||
| }); | ||
| return h(desc.tag, desc.props, ...children); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| function isIslandStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 105; | ||
| } | ||
| function isShowStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 115; | ||
| } | ||
| function isTextStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 116; | ||
| } | ||
| function isListStart(data) { | ||
| return data.length >= 4 && data.charCodeAt(0) === 102 && data.charCodeAt(1) === 58 && data.charCodeAt(2) === 108; | ||
| } | ||
| function findClosingMarker(start) { | ||
| const closing = "/" + start.data; | ||
| let node = start.nextSibling; | ||
| while (node) { | ||
| if (node.nodeType === 8 && node.data === closing) { | ||
| return node; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function findTextBetween(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 3) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return null; | ||
| } | ||
| function nextElementBetweenMarkers(start, end) { | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) return node; | ||
| node = node.nextSibling; | ||
| } | ||
| return void 0; | ||
| } | ||
| function extractContentBetweenMarkers(start, end) { | ||
| const frag = document.createDocumentFragment(); | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| const next = node.nextSibling; | ||
| frag.appendChild(node); | ||
| node = next; | ||
| } | ||
| return frag; | ||
| } | ||
| function setupShowEffect(desc, marker) { | ||
| let currentCondition = !!desc.condition(); | ||
| let thenFragment = null; | ||
| let elseFragment = null; | ||
| const hasSSRContent = marker.start.nextSibling !== marker.end; | ||
| if (!hasSSRContent && currentCondition) { | ||
| if (__DEV__) console.warn("[forma] Hydration: show condition mismatch \u2014 SSR empty but client condition is true"); | ||
| const trueBranch = desc.whenTrue(); | ||
| if (trueBranch instanceof Node) { | ||
| marker.start.parentNode.insertBefore(trueBranch, marker.end); | ||
| } | ||
| } | ||
| internalEffect(() => { | ||
| const next = !!desc.condition(); | ||
| if (next === currentCondition) return; | ||
| currentCondition = next; | ||
| const parent = marker.start.parentNode; | ||
| if (!parent) return; | ||
| const current = extractContentBetweenMarkers(marker.start, marker.end); | ||
| if (!next) { | ||
| thenFragment = current; | ||
| } else { | ||
| elseFragment = current; | ||
| } | ||
| let branch = next ? thenFragment ?? desc.whenTrue() : desc.whenFalse ? elseFragment ?? desc.whenFalse() : null; | ||
| if (next && thenFragment) thenFragment = null; | ||
| if (!next && elseFragment) elseFragment = null; | ||
| if (branch != null && !(branch instanceof Node)) { | ||
| branch = ensureNode(branch); | ||
| } | ||
| if (branch instanceof Node) { | ||
| parent.insertBefore(branch, marker.end); | ||
| } | ||
| }); | ||
| } | ||
| function adoptBranchContent(desc, regionStart, regionEnd) { | ||
| if (isDescriptor(desc)) { | ||
| const el = nextElementBetweenMarkers(regionStart, regionEnd); | ||
| if (el) adoptNode(desc, el); | ||
| } else if (isShowDescriptor(desc)) { | ||
| let node = regionStart.nextSibling; | ||
| while (node && node !== regionEnd) { | ||
| if (node.nodeType === 8 && isShowStart(node.data)) { | ||
| const innerStart = node; | ||
| const innerEnd = findClosingMarker(innerStart); | ||
| if (innerEnd) { | ||
| if (desc.initialBranch) { | ||
| adoptBranchContent(desc.initialBranch, innerStart, innerEnd); | ||
| } | ||
| setupShowEffect(desc, { start: innerStart, end: innerEnd}); | ||
| } | ||
| break; | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| function adoptNode(desc, ssrEl) { | ||
| if (!ssrEl || ssrEl.tagName !== desc.tag.toUpperCase()) { | ||
| if (__DEV__) console.warn(`Hydration mismatch: expected <${desc.tag}>, got <${ssrEl?.tagName?.toLowerCase() ?? "nothing"}>`); | ||
| const fresh = descriptorToElement(desc); | ||
| if (ssrEl) ssrEl.replaceWith(fresh); | ||
| return; | ||
| } | ||
| applyDynamicProps(ssrEl, desc.props); | ||
| let cursor = ssrEl.firstChild; | ||
| for (const child of desc.children) { | ||
| if (child === false || child == null) continue; | ||
| if (isDescriptor(child)) { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| while (cursor && cursor.nodeType === 1 && cursor.hasAttribute("data-forma-island")) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (!cursor) { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| continue; | ||
| } | ||
| if (cursor.nodeType === 1) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(child, el); | ||
| } else if (cursor.nodeType === 8 && isIslandStart(cursor.data)) { | ||
| const end = findClosingMarker(cursor); | ||
| const fresh = descriptorToElement(child); | ||
| if (end) { | ||
| end.parentNode.insertBefore(fresh, end); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| ssrEl.appendChild(fresh); | ||
| cursor = null; | ||
| } | ||
| } else { | ||
| ssrEl.appendChild(descriptorToElement(child)); | ||
| } | ||
| } else if (isShowDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isShowStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| if (child.initialBranch) { | ||
| adoptBranchContent(child.initialBranch, start, end); | ||
| } | ||
| setupShowEffect(child, { start, end}); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (isListDescriptor(child)) { | ||
| while (cursor && !(cursor.nodeType === 8 && isListStart(cursor.data))) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| const ssrKeyMap = /* @__PURE__ */ new Map(); | ||
| const ssrElements = []; | ||
| let node = start.nextSibling; | ||
| while (node && node !== end) { | ||
| if (node.nodeType === 1) { | ||
| const el = node; | ||
| ssrElements.push(el); | ||
| const key = el.getAttribute("data-forma-key"); | ||
| if (key != null) { | ||
| ssrKeyMap.set(key, el); | ||
| } | ||
| } | ||
| node = node.nextSibling; | ||
| } | ||
| const currentItems = untrack(() => child.items()); | ||
| const listKeyFn = child.keyFn; | ||
| const listRenderFn = child.renderFn; | ||
| const useIndexFallback = ssrKeyMap.size === 0 && ssrElements.length > 0; | ||
| const adoptedNodes = []; | ||
| const adoptedItems = []; | ||
| const usedIndices = /* @__PURE__ */ new Set(); | ||
| for (let i = 0; i < currentItems.length; i++) { | ||
| const item = currentItems[i]; | ||
| const key = listKeyFn(item); | ||
| let ssrNode; | ||
| if (useIndexFallback) { | ||
| if (i < ssrElements.length) { | ||
| ssrNode = ssrElements[i]; | ||
| usedIndices.add(i); | ||
| } | ||
| } else { | ||
| ssrNode = ssrKeyMap.get(String(key)); | ||
| if (ssrNode) ssrKeyMap.delete(String(key)); | ||
| } | ||
| if (ssrNode) { | ||
| adoptedNodes.push(ssrNode); | ||
| adoptedItems.push(item); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: list item key "${key}" not found in SSR \u2014 rendering fresh`); | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const [getIndex] = chunk3U57L2TY_cjs.createSignal(i); | ||
| const fresh = listRenderFn(item, getIndex); | ||
| end.parentNode.insertBefore(fresh, end); | ||
| adoptedNodes.push(fresh); | ||
| adoptedItems.push(item); | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| } | ||
| } | ||
| if (useIndexFallback) { | ||
| for (let i = 0; i < ssrElements.length; i++) { | ||
| if (!usedIndices.has(i) && ssrElements[i].parentNode) { | ||
| ssrElements[i].parentNode.removeChild(ssrElements[i]); | ||
| } | ||
| } | ||
| } else { | ||
| for (const [unusedKey, unusedNode] of ssrKeyMap) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: removing extra SSR list item with key "${unusedKey}"`); | ||
| if (unusedNode.parentNode) { | ||
| unusedNode.parentNode.removeChild(unusedNode); | ||
| } | ||
| } | ||
| } | ||
| const parent = start.parentNode; | ||
| for (const adoptedNode of adoptedNodes) { | ||
| parent.insertBefore(adoptedNode, end); | ||
| } | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < adoptedItems.length; i++) { | ||
| const item = adoptedItems[i]; | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(i); | ||
| cache.set(key, { | ||
| element: adoptedNodes[i], | ||
| item, | ||
| getIndex, | ||
| setIndex | ||
| }); | ||
| } | ||
| let reconcileNodes = adoptedNodes.slice(); | ||
| let reconcileItems = adoptedItems.slice(); | ||
| internalEffect(() => { | ||
| const newItems = child.items(); | ||
| const parent2 = start.parentNode; | ||
| if (!parent2) return; | ||
| const result = reconcileList( | ||
| parent2, | ||
| reconcileItems, | ||
| newItems, | ||
| reconcileNodes, | ||
| listKeyFn, | ||
| (item) => { | ||
| const prevHydrating = hydrating; | ||
| hydrating = false; | ||
| try { | ||
| const key = listKeyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(0); | ||
| const element = untrack(() => listRenderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| } finally { | ||
| hydrating = prevHydrating; | ||
| } | ||
| }, | ||
| (_node, item) => { | ||
| const key = listKeyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }, | ||
| end | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| const key = listKeyFn(newItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| reconcileNodes = result.nodes; | ||
| reconcileItems = result.items; | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } | ||
| } | ||
| } else if (typeof child === "function") { | ||
| while (cursor && cursor.nodeType === 3 && !cursor.data.trim()) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| if (cursor && cursor.nodeType === 1) { | ||
| const initial = child(); | ||
| if (isDescriptor(initial)) { | ||
| const el = cursor; | ||
| cursor = cursor.nextSibling; | ||
| adoptNode(initial, el); | ||
| continue; | ||
| } | ||
| } | ||
| if (cursor && cursor.nodeType === 8) { | ||
| const data = cursor.data; | ||
| if (isTextStart(data)) { | ||
| const endMarker = findClosingMarker(cursor); | ||
| let textNode = cursor.nextSibling; | ||
| if (!textNode || textNode.nodeType !== 3) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for marker ${data} \u2014 SSR walker should emit content between markers`); | ||
| const created = document.createTextNode(""); | ||
| cursor.parentNode.insertBefore(created, endMarker || cursor.nextSibling); | ||
| textNode = created; | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = endMarker ? endMarker.nextSibling : textNode.nextSibling; | ||
| } else if (isShowStart(data)) { | ||
| const start = cursor; | ||
| const end = findClosingMarker(start); | ||
| if (end) { | ||
| let textNode = findTextBetween(start, end); | ||
| if (!textNode) { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node for show marker ${start.data} \u2014 SSR walker should emit content between markers`); | ||
| textNode = document.createTextNode(""); | ||
| start.parentNode.insertBefore(textNode, end); | ||
| } | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| cursor = end.nextSibling; | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } else if (cursor && cursor.nodeType === 3) { | ||
| const textNode = cursor; | ||
| cursor = cursor.nextSibling; | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } else { | ||
| if (__DEV__) console.warn(`[FormaJS] Hydration: created text node in empty <${ssrEl.tagName.toLowerCase()}> \u2014 IR may not cover this component`); | ||
| const textNode = document.createTextNode(""); | ||
| ssrEl.appendChild(textNode); | ||
| internalEffect(() => { | ||
| textNode.data = String(child()); | ||
| }); | ||
| } | ||
| } else if (typeof child === "string" || typeof child === "number") { | ||
| if (cursor && cursor.nodeType === 3) { | ||
| cursor = cursor.nextSibling; | ||
| } | ||
| } | ||
| } | ||
| } | ||
| function hydrateIsland(component, target) { | ||
| const hasSSRContent = target.childElementCount > 0 || target.childNodes.length > 0 && Array.from(target.childNodes).some((n) => n.nodeType === 1 || n.nodeType === 3 && n.data.trim()); | ||
| if (!hasSSRContent) { | ||
| if (__DEV__) { | ||
| const name = target.getAttribute("data-forma-component") || "unknown"; | ||
| console.warn( | ||
| `[forma] Island "${name}" has no SSR content \u2014 falling back to CSR. This means the IR walker did not render content between ISLAND_START and ISLAND_END.` | ||
| ); | ||
| } | ||
| const result = component(); | ||
| if (result instanceof Element) { | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (attr.name.startsWith("data-forma-")) { | ||
| result.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| target.replaceWith(result); | ||
| return result; | ||
| } else if (result instanceof Node) { | ||
| target.appendChild(result); | ||
| } | ||
| return target; | ||
| } | ||
| setHydrating(true); | ||
| let descriptor; | ||
| try { | ||
| descriptor = component(); | ||
| } finally { | ||
| setHydrating(false); | ||
| } | ||
| if (!descriptor || !isDescriptor(descriptor)) { | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| if (target.hasAttribute("data-forma-island")) { | ||
| adoptNode(descriptor, target); | ||
| } else { | ||
| adoptNode(descriptor, target.children[0]); | ||
| } | ||
| target.removeAttribute("data-forma-ssr"); | ||
| return target; | ||
| } | ||
| // src/dom/list.ts | ||
| function longestIncreasingSubsequence(arr) { | ||
| const n = arr.length; | ||
| if (n === 0) return []; | ||
| const tails = new Int32Array(n); | ||
| const tailIndices = new Int32Array(n); | ||
| const predecessor = new Int32Array(n).fill(-1); | ||
| let tailsLen = 0; | ||
| for (let i = 0; i < n; i++) { | ||
| const val = arr[i]; | ||
| let lo = 0, hi = tailsLen; | ||
| while (lo < hi) { | ||
| const mid = lo + hi >> 1; | ||
| if (tails[mid] < val) lo = mid + 1; | ||
| else hi = mid; | ||
| } | ||
| tails[lo] = val; | ||
| tailIndices[lo] = i; | ||
| if (lo > 0) predecessor[i] = tailIndices[lo - 1]; | ||
| if (lo >= tailsLen) tailsLen++; | ||
| } | ||
| const result = new Array(tailsLen); | ||
| let idx = tailIndices[tailsLen - 1]; | ||
| for (let i = tailsLen - 1; i >= 0; i--) { | ||
| result[i] = idx; | ||
| idx = predecessor[idx]; | ||
| } | ||
| return result; | ||
| } | ||
| var SMALL_LIST_THRESHOLD = 32; | ||
| var ABORT_SYM3 = /* @__PURE__ */ Symbol.for("forma-abort"); | ||
| var CACHE_SYM2 = /* @__PURE__ */ Symbol.for("forma-attr-cache"); | ||
| var DYNAMIC_CHILD_SYM2 = /* @__PURE__ */ Symbol.for("forma-dynamic-child"); | ||
| function canPatchStaticElement(target, source) { | ||
| return target instanceof HTMLElement && source instanceof HTMLElement && target.tagName === source.tagName && !target[ABORT_SYM3] && !target[CACHE_SYM2] && !target[DYNAMIC_CHILD_SYM2] && !source[ABORT_SYM3] && !source[CACHE_SYM2] && !source[DYNAMIC_CHILD_SYM2]; | ||
| } | ||
| function patchStaticElement(target, source) { | ||
| const sourceAttrNames = /* @__PURE__ */ new Set(); | ||
| for (const attr of Array.from(source.attributes)) { | ||
| sourceAttrNames.add(attr.name); | ||
| if (target.getAttribute(attr.name) !== attr.value) { | ||
| target.setAttribute(attr.name, attr.value); | ||
| } | ||
| } | ||
| for (const attr of Array.from(target.attributes)) { | ||
| if (!sourceAttrNames.has(attr.name)) { | ||
| target.removeAttribute(attr.name); | ||
| } | ||
| } | ||
| target.replaceChildren(...Array.from(source.childNodes)); | ||
| } | ||
| function reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| const oldKeys = new Array(oldLen); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeys[i] = keyFn(oldItems[i]); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| let found = -1; | ||
| for (let j = 0; j < oldLen; j++) { | ||
| if (!oldUsed[j] && oldKeys[j] === key) { | ||
| found = j; | ||
| oldUsed[j] = 1; | ||
| break; | ||
| } | ||
| } | ||
| oldIndices[i] = found; | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function reconcileList(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks) { | ||
| const oldLen = oldItems.length; | ||
| const newLen = newItems.length; | ||
| if (newLen === 0) { | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| return { nodes: [], items: [] }; | ||
| } | ||
| if (oldLen === 0) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = createFn(newItems[i]); | ||
| if (beforeNode) { | ||
| parent.insertBefore(node, beforeNode); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| hooks?.onInsert?.(node); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| if (oldLen < SMALL_LIST_THRESHOLD) { | ||
| return reconcileSmall(parent, oldItems, newItems, oldNodes, keyFn, createFn, updateFn, beforeNode, hooks); | ||
| } | ||
| const oldKeyMap = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < oldLen; i++) { | ||
| oldKeyMap.set(keyFn(oldItems[i]), i); | ||
| } | ||
| const oldIndices = new Array(newLen); | ||
| const oldUsed = new Uint8Array(oldLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const key = keyFn(newItems[i]); | ||
| const oldIdx = oldKeyMap.get(key); | ||
| if (oldIdx !== void 0) { | ||
| oldIndices[i] = oldIdx; | ||
| oldUsed[oldIdx] = 1; | ||
| } else { | ||
| oldIndices[i] = -1; | ||
| } | ||
| } | ||
| for (let i = 0; i < oldLen; i++) { | ||
| if (!oldUsed[i]) { | ||
| if (hooks?.onBeforeRemove) { | ||
| const node = oldNodes[i]; | ||
| hooks.onBeforeRemove(node, () => { | ||
| if (node.parentNode) node.parentNode.removeChild(node); | ||
| }); | ||
| } else { | ||
| parent.removeChild(oldNodes[i]); | ||
| } | ||
| } | ||
| } | ||
| if (oldLen === newLen) { | ||
| let allSameOrder = true; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== i) { | ||
| allSameOrder = false; | ||
| break; | ||
| } | ||
| } | ||
| if (allSameOrder) { | ||
| const nodes = new Array(newLen); | ||
| for (let i = 0; i < newLen; i++) { | ||
| const node = oldNodes[i]; | ||
| updateFn(node, newItems[i]); | ||
| nodes[i] = node; | ||
| } | ||
| return { nodes, items: newItems }; | ||
| } | ||
| } | ||
| const reusedIndices = []; | ||
| const reusedPositions = []; | ||
| for (let i = 0; i < newLen; i++) { | ||
| if (oldIndices[i] !== -1) { | ||
| reusedIndices.push(oldIndices[i]); | ||
| reusedPositions.push(i); | ||
| } | ||
| } | ||
| const lisOfReused = longestIncreasingSubsequence(reusedIndices); | ||
| const lisFlags = new Uint8Array(newLen); | ||
| for (const li of lisOfReused) { | ||
| lisFlags[reusedPositions[li]] = 1; | ||
| } | ||
| const newNodes = new Array(newLen); | ||
| let nextSibling = beforeNode ?? null; | ||
| for (let i = newLen - 1; i >= 0; i--) { | ||
| let node; | ||
| let isNew = false; | ||
| if (oldIndices[i] === -1) { | ||
| node = createFn(newItems[i]); | ||
| isNew = true; | ||
| } else { | ||
| node = oldNodes[oldIndices[i]]; | ||
| updateFn(node, newItems[i]); | ||
| if (lisFlags[i]) { | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| continue; | ||
| } | ||
| } | ||
| if (nextSibling) { | ||
| parent.insertBefore(node, nextSibling); | ||
| } else { | ||
| parent.appendChild(node); | ||
| } | ||
| if (isNew) hooks?.onInsert?.(node); | ||
| newNodes[i] = node; | ||
| nextSibling = node; | ||
| } | ||
| return { nodes: newNodes, items: newItems }; | ||
| } | ||
| function createList(items, keyFn, renderFn, options) { | ||
| if (hydrating) { | ||
| return { type: "list", items, keyFn, renderFn, options }; | ||
| } | ||
| const startMarker = document.createComment("forma-list-start"); | ||
| const endMarker = document.createComment("forma-list-end"); | ||
| const fragment2 = document.createDocumentFragment(); | ||
| fragment2.appendChild(startMarker); | ||
| fragment2.appendChild(endMarker); | ||
| let cache = /* @__PURE__ */ new Map(); | ||
| let currentNodes = []; | ||
| let currentItems = []; | ||
| const updateOnItemChange = options?.updateOnItemChange ?? "none"; | ||
| internalEffect(() => { | ||
| const newItems = items(); | ||
| const parent = startMarker.parentNode; | ||
| if (!parent) { | ||
| return; | ||
| } | ||
| if (!Array.isArray(newItems)) { | ||
| if (__DEV__) { | ||
| console.warn("[forma] createList: value is not an array, treating as empty"); | ||
| } | ||
| for (const node of currentNodes) { | ||
| if (node.parentNode === parent) parent.removeChild(node); | ||
| } | ||
| cache = /* @__PURE__ */ new Map(); | ||
| currentNodes = []; | ||
| currentItems = []; | ||
| return; | ||
| } | ||
| let cleanItems = newItems; | ||
| for (let i = 0; i < newItems.length; i++) { | ||
| if (newItems[i] == null) { | ||
| cleanItems = newItems.filter((item) => item != null); | ||
| break; | ||
| } | ||
| } | ||
| if (__DEV__) { | ||
| const seen = /* @__PURE__ */ new Set(); | ||
| for (const item of cleanItems) { | ||
| const key = keyFn(item); | ||
| if (seen.has(key)) { | ||
| console.warn("[forma] createList: duplicate key detected:", key); | ||
| } | ||
| seen.add(key); | ||
| } | ||
| } | ||
| const updateRow = updateOnItemChange === "rerender" ? (node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (!cached) return; | ||
| if (cached.item === item) return; | ||
| cached.item = item; | ||
| if (!(node instanceof HTMLElement)) return; | ||
| if (node[ABORT_SYM3] || node[CACHE_SYM2] || node[DYNAMIC_CHILD_SYM2]) { | ||
| return; | ||
| } | ||
| const next = untrack(() => renderFn(item, cached.getIndex)); | ||
| if (canPatchStaticElement(node, next)) { | ||
| patchStaticElement(node, next); | ||
| cached.element = node; | ||
| } | ||
| } : (_node, item) => { | ||
| const key = keyFn(item); | ||
| const cached = cache.get(key); | ||
| if (cached) cached.item = item; | ||
| }; | ||
| const result = reconcileList( | ||
| parent, | ||
| currentItems, | ||
| cleanItems, | ||
| currentNodes, | ||
| keyFn, | ||
| // createFn: create element + cache entry | ||
| (item) => { | ||
| const key = keyFn(item); | ||
| const [getIndex, setIndex] = chunk3U57L2TY_cjs.createSignal(0); | ||
| const element = untrack(() => renderFn(item, getIndex)); | ||
| cache.set(key, { element, item, getIndex, setIndex }); | ||
| return element; | ||
| }, | ||
| updateRow, | ||
| // beforeNode: insert items before the end marker | ||
| endMarker | ||
| ); | ||
| const newCache = /* @__PURE__ */ new Map(); | ||
| for (let i = 0; i < cleanItems.length; i++) { | ||
| const key = keyFn(cleanItems[i]); | ||
| const cached = cache.get(key); | ||
| if (cached) { | ||
| cached.setIndex(i); | ||
| newCache.set(key, cached); | ||
| } | ||
| } | ||
| cache = newCache; | ||
| currentNodes = result.nodes; | ||
| currentItems = result.items; | ||
| }); | ||
| return fragment2; | ||
| } | ||
| Object.defineProperty(exports, "getBatchDepth", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.getBatchDepth; } | ||
| }); | ||
| Object.defineProperty(exports, "isComputed", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isComputed; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffect", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isEffect; } | ||
| }); | ||
| Object.defineProperty(exports, "isEffectScope", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isEffectScope; } | ||
| }); | ||
| Object.defineProperty(exports, "isSignal", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.isSignal; } | ||
| }); | ||
| Object.defineProperty(exports, "trigger", { | ||
| enumerable: true, | ||
| get: function () { return alienSignals.trigger; } | ||
| }); | ||
| exports.Fragment = Fragment; | ||
| exports.__DEV__ = __DEV__; | ||
| exports.batch = batch; | ||
| exports.cleanup = cleanup; | ||
| exports.createEffect = createEffect; | ||
| exports.createList = createList; | ||
| exports.createMemo = createMemo; | ||
| exports.createReducer = createReducer; | ||
| exports.createRef = createRef; | ||
| exports.createResource = createResource; | ||
| exports.createRoot = createRoot; | ||
| exports.createShow = createShow; | ||
| exports.fragment = fragment; | ||
| exports.h = h; | ||
| exports.hydrateIsland = hydrateIsland; | ||
| exports.internalEffect = internalEffect; | ||
| exports.on = on; | ||
| exports.onCleanup = onCleanup; | ||
| exports.onError = onError; | ||
| exports.popSuspenseContext = popSuspenseContext; | ||
| exports.pushSuspenseContext = pushSuspenseContext; | ||
| exports.reconcileList = reconcileList; | ||
| exports.reportError = reportError; | ||
| exports.untrack = untrack; | ||
| //# sourceMappingURL=chunk-YMIMKO4W.cjs.map | ||
| //# sourceMappingURL=chunk-YMIMKO4W.cjs.map |
Sorry, the diff of this file is too big to display
| /** | ||
| * Forma Reactive - Signal | ||
| * | ||
| * Fine-grained reactive primitive backed by alien-signals. | ||
| * API: createSignal returns [getter, setter] tuple following SolidJS conventions. | ||
| * | ||
| * TC39 Signals equivalent: Signal.State | ||
| */ | ||
| type SignalGetter<T> = () => T; | ||
| type SignalSetter<T> = (v: T | ((prev: T) => T)) => void; | ||
| interface SignalOptions<T> { | ||
| /** Debug name — attached to getter in dev mode for devtools inspection. */ | ||
| name?: string; | ||
| /** | ||
| * Custom equality check. When provided, the setter will read the current | ||
| * value and only update the signal if `equals(prev, next)` returns `false`. | ||
| * | ||
| * Default: none (alien-signals uses strict inequality `!==` internally). | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * | ||
| * setPos({ x: 0, y: 0 }); // skipped — equals returns true | ||
| * setPos({ x: 1, y: 0 }); // applied — equals returns false | ||
| * ``` | ||
| */ | ||
| equals?: (prev: T, next: T) => boolean; | ||
| } | ||
| /** | ||
| * Create a reactive signal. | ||
| * | ||
| * ```ts | ||
| * const [count, setCount] = createSignal(0); | ||
| * console.log(count()); // 0 | ||
| * setCount(1); | ||
| * setCount(prev => prev + 1); | ||
| * ``` | ||
| * | ||
| * With custom equality: | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * ``` | ||
| */ | ||
| declare function createSignal<T>(initialValue: T, options?: SignalOptions<T>): [get: SignalGetter<T>, set: SignalSetter<T>]; | ||
| export { type SignalGetter as S, type SignalOptions as a, createSignal as c }; |
| /** | ||
| * Forma Reactive - Signal | ||
| * | ||
| * Fine-grained reactive primitive backed by alien-signals. | ||
| * API: createSignal returns [getter, setter] tuple following SolidJS conventions. | ||
| * | ||
| * TC39 Signals equivalent: Signal.State | ||
| */ | ||
| type SignalGetter<T> = () => T; | ||
| type SignalSetter<T> = (v: T | ((prev: T) => T)) => void; | ||
| interface SignalOptions<T> { | ||
| /** Debug name — attached to getter in dev mode for devtools inspection. */ | ||
| name?: string; | ||
| /** | ||
| * Custom equality check. When provided, the setter will read the current | ||
| * value and only update the signal if `equals(prev, next)` returns `false`. | ||
| * | ||
| * Default: none (alien-signals uses strict inequality `!==` internally). | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * | ||
| * setPos({ x: 0, y: 0 }); // skipped — equals returns true | ||
| * setPos({ x: 1, y: 0 }); // applied — equals returns false | ||
| * ``` | ||
| */ | ||
| equals?: (prev: T, next: T) => boolean; | ||
| } | ||
| /** | ||
| * Create a reactive signal. | ||
| * | ||
| * ```ts | ||
| * const [count, setCount] = createSignal(0); | ||
| * console.log(count()); // 0 | ||
| * setCount(1); | ||
| * setCount(prev => prev + 1); | ||
| * ``` | ||
| * | ||
| * With custom equality: | ||
| * | ||
| * ```ts | ||
| * const [pos, setPos] = createSignal( | ||
| * { x: 0, y: 0 }, | ||
| * { equals: (a, b) => a.x === b.x && a.y === b.y }, | ||
| * ); | ||
| * ``` | ||
| */ | ||
| declare function createSignal<T>(initialValue: T, options?: SignalOptions<T>): [get: SignalGetter<T>, set: SignalSetter<T>]; | ||
| export { type SignalGetter as S, type SignalOptions as a, createSignal as c }; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
3617007
0.17%95
-9.52%22251
-1.02%79
11.27%