@openlv/modal 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Header.d.ts +1 -1
- package/dist/components/ModalRoot.d.ts +1 -1
- package/dist/components/UnknownState.d.ts +1 -1
- package/dist/components/settings/connection/index.d.ts +1 -1
- package/dist/components/settings/index.d.ts +3 -3
- package/dist/context.d.ts +2 -2
- package/dist/element.d.ts +2 -2
- package/dist/flow/ConnectionFlow.d.ts +2 -2
- package/dist/flow/ErrorScreen.d.ts +1 -1
- package/dist/flow/disconnected/Disconnected.d.ts +1 -1
- package/dist/index.cjs.js +2 -2
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.es.js +1080 -1080
- package/dist/index.es.js.map +1 -1
- package/dist/theme/index.d.ts +2 -2
- package/dist/ui/Button.d.ts +1 -1
- package/dist/ui/InfoTooltip.d.ts +1 -1
- package/dist/ui/Input.d.ts +6 -6
- package/dist/ui/Select.d.ts +1 -1
- package/dist/ui/Toggle.d.ts +1 -1
- package/dist/ui/TransitionContainer.d.ts +1 -1
- package/dist/ui/menu/MenuGroup.d.ts +1 -1
- package/dist/ui/menu/MenuItem.d.ts +1 -1
- package/dist/ui/menu/MenuLink.d.ts +1 -1
- package/dist/utils/i18n.d.ts +1 -1
- package/package.json +9 -9
package/dist/index.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../node_modules/.pnpm/solid-js@1.9.14/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.14/node_modules/solid-js/web/dist/web.js","../../core/dist/url/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/dist/index.js","../../session/dist/index.js","../../provider/dist/index.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/theme/index.tsx","../src/styles/index.ts","../src/element.tsx","../src/utils/i18n.tsx","../src/context.tsx","../src/hooks/useSession.ts","../src/components/UnknownState.tsx","../../../node_modules/.pnpm/qr@0.6.0/node_modules/qr/index.js","../src/hooks/useClipboard.ts","../src/flow/HandshakeOpen.tsx","../src/flow/connecting.tsx","../src/flow/ErrorScreen.tsx","../src/flow/ConnectionFlow.tsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/defaultAttributes.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/Icon.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/chevron-left.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/chevron-right.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/circle-question-mark.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/plus.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/qr-code.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/settings.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/trash-2.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/x.jsx","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/lite.js","../src/ui/Button.tsx","../src/flow/disconnected/ConnectionGraphic.tsx","../src/flow/disconnected/Disconnected.tsx","../src/flow/InfoScreen.tsx","../src/hooks/usePunchTransition.ts","../src/hooks/useSettings.ts","../src/hooks/useTheme.ts","../src/assets/logo.ts","../src/components/footer/StatusIndicator.tsx","../src/components/footer/Footer.tsx","../src/components/Header.tsx","../src/hooks/useNavigationStack.ts","../src/ui/TransitionContainer.tsx","../src/ui/menu/MenuGroup.tsx","../src/ui/menu/MenuItem.tsx","../src/ui/Select.tsx","../src/components/settings/a11y/theme.tsx","../src/components/settings/a11y/index.tsx","../src/ui/InfoTooltip.tsx","../src/ui/menu/MenuLink.tsx","../src/ui/Toggle.tsx","../src/components/settings/connection/index.tsx","../src/ui/Input.tsx","../src/components/settings/connection/signaling.tsx","../src/components/settings/connection/transport.tsx","../src/components/settings/index.tsx","../src/components/ModalRoot.tsx","../src/utils/log.ts","../src/index.ts"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port1 = channel.port1,\n port = channel.port2;\n if (typeof port1.unref === \"function\") port1.unref();\n if (typeof port.unref === \"function\") port.unref();\n scheduleCallback = () => port.postMessage(null);\n port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (Owner) onCleanup(() => {\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n if (Transition && pr) Transition.promises.delete(pr);\n pr = null;\n });\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const observers = this.observers;\n if (!observers || observers[observers.length - 1] !== Listener) {\n const sSlot = observers ? observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n if (!Transition.sources.has(node)) node.value = nextValue;\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const sourceFn = c.fn;\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);\n onCleanup(() => ordinary.dispose());\n let inTransition;\n const triggerInTransition = () => startTransition(trigger).then(() => {\n if (inTransition) {\n inTransition.dispose();\n inTransition = undefined;\n }\n });\n c.fn = x => {\n track();\n if (Transition && Transition.running) {\n if (!inTransition) inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);\n return inTransition.track(x);\n }\n return ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n if (Array.isArray(result)) {\n if (result.length < 32768) results.push.apply(results, result);else for (let j = 0; j < result.length; j++) results.push(result[j]);\n } else {\n results.push(result);\n }\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n onCleanup(() => comp = undefined);\n }\n let Comp;\n return createMemo(() => (Comp = comp?.()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, sharedConfig, createRenderEffect, createRoot, untrack, splitProps, getOwner, createEffect, runWithOwner, createSignal, onCleanup, enableHydration } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.contains(container) && el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","export const OPENLV_PROTOCOL_VERSION = 1;\nexport const encodeConnectionURL = (payload) => {\n const params = new URLSearchParams();\n params.set(\"h\", payload.h);\n params.set(\"k\", payload.k);\n if (payload.p) {\n params.set(\"p\", payload.p);\n }\n if (payload.s) {\n params.set(\"s\", payload.s);\n }\n return `openlv://${payload.sessionId}@${OPENLV_PROTOCOL_VERSION}?${params.toString()}`;\n};\nexport const decodeConnectionURL = (url) => {\n if (typeof url !== \"string\")\n throw new TypeError(`Invalid URL type: expected string, got ${typeof url}`);\n if (!url || url.trim() === \"\")\n throw new Error(\"URL cannot be empty\");\n if (!url.startsWith(\"openlv://\"))\n throw new Error(`Invalid URL format: must start with 'openlv://', got: ${url}`);\n try {\n const urlObj = new URL(url);\n const sessionId = urlObj.username;\n const version = Number(urlObj.hostname || urlObj.pathname.replace(\"/\", \"\"));\n if (version !== OPENLV_PROTOCOL_VERSION) {\n throw new Error(`Invalid protocol version: expected ${OPENLV_PROTOCOL_VERSION}, got ${version}`);\n }\n const h = urlObj.searchParams.get(\"h\") || \"\";\n const k = urlObj.searchParams.get(\"k\") || \"\";\n const s = urlObj.searchParams.get(\"s\") || undefined;\n const p = urlObj.searchParams.get(\"p\") || \"mqtt\";\n if (!sessionId) {\n throw new Error(\"Session ID is required in URL\");\n }\n // Validate session ID format (16 characters, URL-safe alphabet)\n if (!/^[A-Za-z0-9_-]{16}$/.test(sessionId)) {\n throw new Error(\"Invalid session ID format: must be 16 URL-safe characters\");\n }\n if (!h) {\n throw new Error(\"Public key hash (h parameter) is required in URL\");\n }\n // Validate public key hash format (16 hex characters)\n if (!/^[0-9a-f]{16}$/.test(h)) {\n throw new Error(\"Invalid public key hash format: must be 16 hex characters\");\n }\n if (!k) {\n throw new Error(\"Shared key (k parameter) is required in URL\");\n }\n // Validate shared key format (32 hex characters)\n if (!/^[0-9a-f]{32}$/.test(k)) {\n throw new Error(\"Invalid shared key format: must be 32 lowercase hex characters\");\n }\n return {\n version,\n sessionId,\n h,\n k,\n s: s ?? \"\",\n p,\n };\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n // Strip query string so handshake secrets (k) are not exposed in error messages\n const safeUrl = url.includes(\"?\") ? url.slice(0, url.indexOf(\"?\")) + \"?[redacted]\" : url;\n throw new Error(`Failed to parse URL: ${safeUrl}. Original error: ${errorMessage}`);\n }\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&\"optional\"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return\"number\"==typeof t}function S(t){return\"string\"==typeof t}function j(t){return\"bigint\"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return\"boolean\"==typeof t})),_=a(p(function(t){return\"symbol\"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||\"object\"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\\`P.record\\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n=\"string\"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};\n//# sourceMappingURL=index.js.map\n","import { decodeConnectionURL, OPENLV_PROTOCOL_VERSION, } from \"@openlv/core\";\nimport { deriveSymmetricKey, generateHandshakeKey, generateSessionId, initEncryptionKeys, initHash, parseEncryptionKey, } from \"@openlv/core/encryption\";\nimport { SIGNAL_STATE, validatePeerInfo, } from \"@openlv/signaling\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { TRANSPORT_STATE, } from \"@openlv/transport\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { awaitCorrelatedResponse } from \"./messages/correlate.js\";\nimport { selectTransportId } from \"./transports.js\";\nimport { log } from \"./utils/log.js\";\nexport const SESSION_STATE = {\n CREATED: \"created\",\n SIGNALING: \"signaling\",\n READY: \"ready\",\n LINKING: \"linking\",\n CONNECTED: \"connected\",\n DISCONNECTED: \"disconnected\",\n};\n/**\n * OpenLV Session\n *\n * https://openlv.sh/api/session\n */\nexport const createSession = async (initParameters, signalLayer, transportLayers, onMessage, options) => {\n if (transportLayers.length === 0) {\n throw new Error(\"At least one transport is required\");\n }\n if (options?.info) {\n // A receiver silently drops out-of-bounds info with the whole packet,\n // which would surface only as a handshake timeout — fail loudly here.\n const problem = validatePeerInfo(options.info);\n if (problem)\n throw new Error(`Invalid session info: ${problem}`);\n }\n const emitter = new EventEmitter();\n const messages = new EventEmitter();\n const sessionId = \"sessionId\" in initParameters\n ? initParameters.sessionId\n : generateSessionId();\n const { encryptionKey, decryptionKey: { decrypt }, } = await initEncryptionKeys(initParameters);\n let relyingPublicKey;\n const handshakeKey = \"k\" in initParameters\n ? await deriveSymmetricKey(initParameters.k)\n : await generateHandshakeKey();\n const { hash, isHost } = await initHash(\"h\" in initParameters ? initParameters.h : undefined, encryptionKey);\n let status = SESSION_STATE.CREATED;\n let lastError;\n const protocol = initParameters.p;\n const server = initParameters.s;\n const capabilities = {\n transports: transportLayers.map(layer => layer.transportId),\n ...(options?.info ? { info: options.info } : {}),\n };\n let peerCaps;\n const updateStatus = (newStatus) => {\n log(\"updateStatus\", newStatus);\n status = newStatus;\n emitter.emit(\"state_change\", {\n status,\n signaling: signal.getState(),\n peerInfo: peerCaps?.info,\n error: lastError,\n });\n };\n const signaling = await signalLayer({\n topic: sessionId,\n url: server,\n });\n const signal = await signaling({\n h: hash,\n canEncrypt() {\n return relyingPublicKey !== undefined;\n },\n async encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return await relyingPublicKey.encrypt(message);\n },\n decrypt,\n publicKey: encryptionKey,\n k: handshakeKey,\n async rpDiscovered(rpKey) {\n const role = isHost ? \"host\" : \"client\";\n log(`rpKey discovered by ${role}`, rpKey);\n relyingPublicKey = await parseEncryptionKey(rpKey);\n },\n capabilities,\n peerCapabilities(received) {\n log(\"peer capabilities received\", received);\n peerCaps = received;\n // Re-emit the current status so observers see peerInfo the moment the\n // capabilities exchange completes, not at the next status transition.\n updateStatus(status);\n },\n isHost,\n });\n let transport;\n const createTransport = (layer) => layer.create({\n encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return relyingPublicKey?.encrypt(message);\n },\n decrypt,\n isHost,\n onmessage: async (message) => {\n log(\"Session: received message from transport\", message);\n if (message[\"type\"] === \"request\") {\n const messageId = message[\"messageId\"];\n try {\n // Immediately acknowledge receipt so the sender's ack-timeout does\n // not fire while the handler (which may await user interaction) runs.\n await transport?.send({ type: \"ack\", messageId });\n // Notify observers before processing (e.g. wallet UI can show a\n // pending indicator before the handler resolves).\n emitter.emit(\"request\", message[\"payload\"]);\n const data = await onMessage(message[\"payload\"])\n // A throwing handler must still answer, otherwise the peer waits\n // out its full response timeout.\n .catch(() => ({ error: { code: -32603, message: \"Internal error\" } }));\n await transport?.send({\n type: \"response\",\n messageId,\n payload: data,\n });\n }\n catch (error) {\n log(\"failed to respond to peer request\", error);\n }\n }\n if (message[\"type\"] === \"response\" || message[\"type\"] === \"ack\") {\n // Both acks and responses are forwarded to the send() correlator.\n messages.emit(\"message\", message);\n }\n },\n async subsend(message) {\n log(\"Session: sending trans msg to signal\", message);\n const sessionMessage = {\n type: \"request\",\n messageId: crypto.randomUUID(),\n payload: message,\n };\n await signal.send(sessionMessage);\n },\n });\n /**\n * Sessions resumed with a known peer key never exchange capabilities and\n * keep the first configured transport.\n */\n const selectTransportLayer = () => {\n if (!peerCaps)\n return transportLayers[0];\n const selected = selectTransportId(isHost, capabilities.transports, peerCaps.transports);\n return transportLayers.find(layer => layer.transportId === selected);\n };\n // Once both peers are present (signaling encrypted) the transport should\n // connect promptly; if it cannot (e.g. no ICE candidates on a restricted\n // network) fail loudly instead of sitting in \"linking\" forever.\n const TRANSPORT_LINK_TIMEOUT_MS = 45000;\n let linkDeadline;\n const clearLinkDeadline = () => {\n clearTimeout(linkDeadline);\n linkDeadline = undefined;\n };\n const onTransportStateChange = (state) => {\n log(\"transport state change\", state);\n if (state === TRANSPORT_STATE.CONNECTED) {\n clearLinkDeadline();\n lastError = undefined;\n updateStatus(SESSION_STATE.CONNECTED);\n }\n if (state === TRANSPORT_STATE.ERROR) {\n clearLinkDeadline();\n lastError ?? (lastError = \"Peer-to-peer transport failed\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }\n };\n const onTransportError = (reason) => {\n if (reason)\n lastError = reason;\n };\n const startTransport = () => {\n if (!transport) {\n const layer = selectTransportLayer();\n if (!layer) {\n log(\"no common transport with peer\", capabilities.transports, peerCaps?.transports);\n lastError ?? (lastError = \"No common transport with peer\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n return;\n }\n log(\"selected transport\", layer.transportId);\n transport = createTransport(layer);\n transport.emitter.on(\"state_change\", onTransportStateChange);\n transport.emitter.on(\"error\", onTransportError);\n }\n linkDeadline ?? (linkDeadline = setTimeout(() => {\n if (status === SESSION_STATE.CONNECTED)\n return;\n log(\"transport failed to connect in time\");\n lastError ?? (lastError = \"Timed out establishing the peer-to-peer connection\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }, TRANSPORT_LINK_TIMEOUT_MS));\n Promise.resolve(transport.setup()).catch((error) => {\n log(\"transport setup failed\", error);\n clearLinkDeadline();\n lastError ?? (lastError = error instanceof Error ? error.message : \"Transport setup failed\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n });\n };\n const onSignalMessage = async (message) => {\n log(\"Session: received message from signaling\", message);\n const sessionMsg = message;\n if (sessionMsg.type === \"response\") {\n messages.emit(\"message\", sessionMsg);\n }\n if (sessionMsg.type === \"request\") {\n if (!transport) {\n log(\"dropping negotiation message: transport not selected yet\");\n return;\n }\n try {\n await transport.handle(sessionMsg.payload);\n }\n catch (error) {\n // Negotiation payloads come from the (untrusted) relay; a malformed\n // one must not become an unhandled rejection.\n log(\"failed to handle negotiation message\", error);\n }\n }\n };\n const onSignalStateChange = (state) => {\n log(\"signal state change\", state);\n if (state === SIGNAL_STATE.READY) {\n updateStatus(SESSION_STATE.READY);\n }\n if ([\n SIGNAL_STATE.HANDSHAKE,\n SIGNAL_STATE.HANDSHAKE_PARTIAL,\n ].includes(state)) {\n updateStatus(SESSION_STATE.LINKING);\n }\n if (state === SIGNAL_STATE.ENCRYPTED) {\n startTransport();\n }\n if (state === SIGNAL_STATE.ERROR) {\n log(\"signaling error — marking session disconnected\");\n lastError ?? (lastError = \"Signaling failed or timed out\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }\n };\n return {\n connect: async () => {\n updateStatus(SESSION_STATE.SIGNALING);\n log(\"connecting to session, isHost:\", isHost);\n signal.on(\"message\", onSignalMessage);\n signal.on(\"state_change\", onSignalStateChange);\n await signal.setup();\n },\n async close() {\n log(\"session teardown\");\n clearLinkDeadline();\n signal.off(\"message\", onSignalMessage);\n signal.off(\"state_change\", onSignalStateChange);\n transport?.emitter.off(\"state_change\", onTransportStateChange);\n transport?.emitter.off(\"error\", onTransportError);\n await Promise.all([\n transport?.teardown(),\n signal.teardown(),\n ]);\n updateStatus(SESSION_STATE.DISCONNECTED);\n },\n getState() {\n return {\n status,\n signaling: signal.getState(),\n peerInfo: peerCaps?.info,\n error: lastError,\n };\n },\n getHandshakeParameters() {\n return {\n version: OPENLV_PROTOCOL_VERSION,\n sessionId,\n h: hash,\n k: handshakeKey.toString(),\n p: protocol,\n s: server,\n };\n },\n waitForLink: async () => new Promise((resolve, reject) => {\n const handler = (state) => {\n if (state?.status === SESSION_STATE.CONNECTED) {\n emitter.off(\"state_change\", handler);\n resolve();\n }\n else if (state?.status === SESSION_STATE.DISCONNECTED) {\n emitter.off(\"state_change\", handler);\n reject(new Error(lastError ?? \"Session failed to connect\"));\n }\n };\n // Subscribe before inspecting the current status so a transition\n // between the check and the subscription cannot be missed.\n emitter.on(\"state_change\", handler);\n handler({ status });\n }),\n async send(message, ackTimeout = 10000, responseTimeout = 60 * 60000) {\n if (!transport || signal.getState().state !== SIGNAL_STATE.ENCRYPTED) {\n throw new Error(\"Session not ready\");\n }\n const messageId = crypto.randomUUID();\n const sessionMessage = {\n type: \"request\",\n messageId,\n payload: message,\n };\n await transport.send(sessionMessage);\n return awaitCorrelatedResponse(messages, messageId, ackTimeout, responseTimeout);\n },\n _internal: {\n signal,\n get transport() {\n return transport;\n },\n },\n emitter,\n };\n};\n/**\n * Connect to a session from its openlv:// URL\n */\nexport const connectSession = async (connectionUrl, onMessage, transports, options) => {\n const initParameters = decodeConnectionURL(connectionUrl);\n const signaling = await dynamicSignalingLayer(initParameters.p);\n if (!signaling) {\n throw new Error(`Invalid signaling protocol: ${initParameters.p}`);\n }\n return createSession(initParameters, signaling, transports, onMessage, options);\n};\n//# sourceMappingURL=index.js.map","import { encodeConnectionURL } from \"@openlv/core\";\nimport { createSession, } from \"@openlv/session\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { webrtc } from \"@openlv/transport/webrtc\";\nimport { Provider as OxProvider } from \"ox\";\nimport { match } from \"ts-pattern\";\nimport { createProviderStorage, } from \"./storage/index.js\";\nimport { log } from \"./utils/log.js\";\n/** Unwrap `{ result }` / `{ error }` envelopes from wallet session handlers. */\nconst unwrapSessionResponse = (payload) => {\n if (typeof payload !== \"object\" || payload === null) {\n return payload;\n }\n if (\"error\" in payload && payload.error) {\n const rpcError = payload.error;\n throw Object.assign(new Error(rpcError.message), { code: rpcError.code });\n }\n if (\"result\" in payload) {\n return payload.result;\n }\n return payload;\n};\nexport const PROVIDER_STATUS = {\n STANDBY: \"standby\",\n CREATING: \"creating\",\n CONNECTING: \"connecting\",\n CONNECTED: \"connected\",\n ERROR: \"error\",\n};\n/**\n * Convert stored WebRTC settings to a transport config. Returns undefined\n * when nothing is configured so the transport falls back to its own\n * defaults — an empty iceServers array would silently disable STUN/TURN.\n */\nconst convertStoredWebRTCSettings = (transport) => {\n const stun = transport?.stun?.map(url => ({ urls: url })) || [];\n const turn = transport?.turn?.map(server => ({\n urls: server.urls,\n username: server.username,\n credential: server.credential,\n })) || [];\n const iceServers = [...stun, ...turn];\n return iceServers.length > 0 ? { iceServers } : undefined;\n};\n/**\n * OpenLV Provider\n *\n * https://openlv.sh/api/provider\n */\nexport const createProvider = (parameters) => {\n const oxEmitter = OxProvider.createEmitter();\n let session;\n let status = PROVIDER_STATUS.STANDBY;\n let lastError;\n let accounts = [];\n const storage = createProviderStorage({ storage: parameters.storage });\n const { openModal, config } = parameters;\n const updateStatus = (newStatus) => {\n status = newStatus;\n log(\"updateStatus\", status);\n oxEmitter.emit(\"status_change\", newStatus);\n };\n /**\n * Called when the remote peer (wallet) sends a request to the dApp.\n *\n * In the normal EIP-1193 flow the dApp is always the requester, so this\n * path is unusual. We emit a `request` event on the session (once the\n * session is available) so the modal or other UI consumers can react.\n * For any method we have no built-in handler for, we return a JSON-RPC\n * \"Method not found\" error so the wallet receives a proper response rather\n * than a no-op stub.\n */\n const onMessage = async (message) => {\n log(\"onMessage received from remote peer\", message);\n // Emit on the session emitter so observers (e.g. modal) can react.\n session?.emitter.emit(\"request\", message);\n return {\n error: {\n code: -32601,\n message: \"Method not found\",\n },\n };\n };\n const getAccounts = async () => {\n if (session) {\n return unwrapSessionResponse(await session.send({ method: \"eth_accounts\", params: [] }));\n }\n throw new Error(\"No session\");\n };\n /** Derive default link parameters from stored signaling settings. */\n const defaultLinkParameters = () => {\n const signaling = storage.getSettings().signaling ?? config?.signaling;\n const p = signaling?.p;\n const s = p ? signaling?.s?.[p] : undefined;\n return p && s ? { p, s } : undefined;\n };\n // Warm up the signaling module for the configured protocol. Backends are\n // loaded via dynamic import; in dev servers (Vite) the first import can\n // trigger a dependency re-optimization page reload — better at page load\n // than mid-handshake.\n const prefetchProtocol = (storage.getSettings().signaling ?? config?.signaling)?.p;\n if (prefetchProtocol) {\n void dynamicSignalingLayer(prefetchProtocol).catch(() => { });\n }\n const start = async (parameters) => {\n lastError = undefined;\n updateStatus(PROVIDER_STATUS.CREATING);\n const linkParameters = parameters ?? defaultLinkParameters();\n if (!linkParameters) {\n throw new Error(\"No link parameters provided and no signaling defaults configured\");\n }\n // Stored user settings win over constructor config; both fall back to\n // the transport's built-in defaults when absent.\n const transportOptions = convertStoredWebRTCSettings(storage.getSettings().transport?.s?.webrtc)\n ?? config?.transport?.s?.webrtc;\n try {\n session = await createSession(linkParameters, await dynamicSignalingLayer(linkParameters.p), [webrtc(transportOptions)], onMessage, { info: config?.info });\n updateStatus(PROVIDER_STATUS.CONNECTING);\n log(\"session created\");\n await session.connect();\n log(\"session connected\");\n const handshakeParameters = session.getHandshakeParameters();\n const url = encodeConnectionURL(handshakeParameters);\n log(\"session url\", url);\n oxEmitter.emit(\"session_started\", session);\n await session.waitForLink();\n log(\"session linked\");\n accounts = await getAccounts();\n const chainIdHex = unwrapSessionResponse(await session.send({ method: \"eth_chainId\", params: [] }));\n updateStatus(PROVIDER_STATUS.CONNECTED);\n oxEmitter.emit(\"connect\", { chainId: chainIdHex });\n oxEmitter.emit(\"accountsChanged\", accounts);\n return session;\n }\n catch (error) {\n // Surface the failure to UI consumers (e.g. the modal) instead of\n // leaving the provider stuck in \"connecting\".\n lastError\n = session?.getState().error\n ?? (error instanceof Error ? error.message : \"Connection failed\");\n updateStatus(PROVIDER_STATUS.ERROR);\n throw error;\n }\n };\n const closeSession = async () => {\n await session?.close();\n session = undefined;\n lastError = undefined;\n updateStatus(PROVIDER_STATUS.STANDBY);\n };\n const request = async (request) => {\n log(\"ox request\", request.method, request.params);\n return match(request)\n .with({ method: \"eth_chainId\" }, async () => {\n log(\"eth_chainId\");\n if (session) {\n log(\"sending eth_chainId to session\");\n const result = unwrapSessionResponse(await session.send(request));\n log(\"eth_chainId result from session\", result);\n return result;\n }\n return \"0x1\";\n })\n .with({ method: \"wallet_requestPermissions\" }, () => {\n throw new Error(\"Not implemented\");\n })\n .with({ method: \"wallet_revokePermissions\" }, async () => {\n await closeSession();\n return;\n })\n // TODO: if modal is enabled explicitly toggle the modal to show.\n .with({ method: \"eth_requestAccounts\" }, async () => {\n log(\"eth_requestAccounts\");\n let provider;\n if (oxProvider) {\n provider = oxProvider;\n }\n if (openModal && provider) {\n await openModal(provider);\n await new Promise((resolve) => {\n const onConnect = () => {\n cleanup();\n resolve();\n };\n const onDisconnect = () => {\n cleanup();\n resolve();\n };\n const cleanup = () => {\n provider?.off(\"connect\", onConnect);\n provider?.off(\"disconnect\", onDisconnect);\n };\n provider?.on(\"connect\", onConnect);\n provider?.on(\"disconnect\", onDisconnect);\n });\n return await getAccounts();\n }\n await start();\n return await getAccounts();\n })\n .with({ method: \"eth_accounts\" }, async () => {\n log(\"eth_accounts\");\n return await getAccounts();\n })\n .otherwise(async (v) => {\n if (session) {\n log(\"sending request to session\", request);\n const result = unwrapSessionResponse(await session.send(request));\n log(\"result from session\", result);\n return result;\n }\n throw new Error(`Method ${v.method} not supported`);\n });\n };\n const oxProvider = OxProvider.from({\n ...oxEmitter,\n storage,\n request,\n getSession: () => session,\n getAccounts,\n createSession: start,\n closeSession,\n getState: () => ({\n status,\n session: session?.getState() ?? undefined,\n error: lastError,\n }),\n });\n return oxProvider;\n};\n//# sourceMappingURL=index.js.map","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import type {\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nexport type {\n PredefinedThemeName,\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nconst importOrPassthrough = async (\n theme: ThemeConfig[\"theme\"],\n): Promise<ThemeTokensMap> => {\n if (typeof theme === \"string\") {\n if (theme === \"simple\") {\n return await import(\"./simple.js\").then(m => m.simpleTheme);\n }\n else if (theme === \"openlv\") {\n return await import(\"./openlv.js\").then(m => m.openlvTheme);\n }\n else {\n throw new Error(`Unknown theme: ${theme}`);\n }\n }\n\n return theme;\n};\n\ntype Primitive = string | number | boolean | null | undefined;\ntype Leaf = Primitive; // extend if you want to allow Date, bigint, etc.\n\ntype FlatCssVars = Record<`--${string}`, Leaf>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenToCssVars = <T extends Record<string, unknown>>(\n obj: T,\n prefix: readonly string[] = [],\n out: FlatCssVars = {},\n): FlatCssVars => {\n for (const [key, value] of Object.entries(obj)) {\n const path = [...prefix, key];\n\n if (isPlainObject(value)) {\n flattenToCssVars(value, path, out);\n }\n else {\n out[`--lv-${path.join(\"-\")}` as `--${string}`] = value as Leaf;\n }\n }\n\n return out;\n};\n\nexport const resolveMode = (\n appThemeMode: ThemeMode = \"auto\",\n userTheme: UserThemePreference = \"system\",\n): \"light\" | \"dark\" => {\n if (appThemeMode === \"light\" || appThemeMode === \"dark\") {\n return appThemeMode;\n }\n\n if (userTheme === \"system\") {\n return globalThis.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n return userTheme;\n};\n\nconst deepMerge = (\n base: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = { ...base };\n\n for (const key of Object.keys(overlay)) {\n const baseValue = base[key];\n const overlayValue = overlay[key];\n\n result[key]\n = isPlainObject(baseValue) && isPlainObject(overlayValue)\n ? deepMerge(baseValue, overlayValue)\n : overlayValue;\n }\n\n return result;\n};\n\n// Converts the theme into css variables\n// --lv-\nexport const buildTheme = async (\n config: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n const theme = await importOrPassthrough(config.theme);\n\n const resolvedMode = resolveMode(config.mode, userTheme);\n const variant = theme[resolvedMode];\n\n if (!variant) return \"\";\n\n const mergedVariant = theme.common\n ? deepMerge(theme.common, variant)\n : variant;\n\n const flattened = flattenToCssVars(mergedVariant);\n\n return Object.entries(flattened)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\"\\n\");\n};\n","import \"./index.css\";\n\nimport { buildTheme } from \"../theme/index.js\";\nimport type { ThemeConfig, UserThemePreference } from \"../theme/types.js\";\n// @ts-expect-error - Vite handles this import at build time\nimport cssContent from \"./index.css?inline\";\n\n/**\n * Ensures styles exist in the shadow root and updates them with the current theme.\n */\nexport const updateStyles = async (\n shadowRoot: ShadowRoot,\n theme?: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n let style = shadowRoot.querySelector(\n \"style[data-openlv-modal]\",\n ) as HTMLStyleElement | null;\n\n if (!style) {\n style = document.createElement(\"style\");\n style.dataset.openlvModal = \"true\";\n shadowRoot.append(style);\n }\n\n const themeConfig = {\n ...theme,\n theme: theme?.theme ?? \"simple\",\n };\n\n if (themeConfig) {\n const themeStr = await buildTheme(themeConfig, userTheme);\n\n style.textContent = `:root, :host {\\n${themeStr}\\n}\\n` + cssContent;\n }\n else {\n style.textContent = cssContent;\n }\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport { render } from \"solid-js/web\";\n\nimport { ModalProvider } from \"./context.js\";\nimport { updateStyles } from \"./styles/index.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\n\nexport type OpenLVModalElementProps = {\n provider: OpenLVProvider;\n onClose?: () => void;\n theme?: ThemeConfig;\n};\n\nexport class OpenLVModalElement\n extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private renderRequested = false;\n private readonly parameters: OpenLVModalElementProps;\n private themeCleanup?: () => void;\n private disposeRender?: () => void;\n\n constructor(parameters: OpenLVModalElementProps) {\n super();\n this.parameters = parameters;\n\n this.shadow = this.attachShadow({ mode: \"open\" });\n const initialUserTheme\n = parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, parameters.theme, initialUserTheme);\n }\n\n connectedCallback() {\n this.requestRender();\n this.themeCleanup?.();\n this.setupThemeListener();\n }\n\n disconnectedCallback() {\n this.disposeRender?.();\n this.disposeRender = undefined;\n this.themeCleanup?.();\n }\n\n private setupThemeListener() {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const update = () => {\n const userTheme\n = this.parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, this.parameters.theme, userTheme);\n };\n\n this.parameters.provider.storage.emitter.on(\"settings_change\", update);\n\n const mediaQuery = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\n\n mediaQuery.addEventListener(\"change\", update);\n\n this.themeCleanup = () => {\n this.parameters.provider.storage.emitter.off(\"settings_change\", update);\n mediaQuery.removeEventListener(\"change\", update);\n };\n }\n\n showModal() {\n this.style.display = \"block\";\n }\n\n hideModal() {\n this.style.display = \"none\";\n }\n\n private requestRender() {\n if (this.renderRequested) {\n return;\n }\n\n this.renderRequested = true;\n queueMicrotask(() => {\n this.renderRequested = false;\n this.performRender();\n });\n }\n\n private performRender() {\n this.disposeRender?.();\n this.disposeRender = render(\n () => <ModalProvider {...this.parameters} />,\n this.shadow,\n );\n }\n}\n\nexport default OpenLVModalElement;\n","import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n type ParentComponent,\n useContext,\n} from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport fallbackEnglish from \"../../lang/en.json\" with { type: \"json\" };\nimport { useModalContext } from \"../context.jsx\";\n\nexport type LanguageTag =\n | \"en\"\n | \"nl\"\n | \"fr\"\n | \"es\"\n | \"sv\"\n | \"zh-cn\"\n | \"ar\"\n | \"he\"\n | \"fa\";\n\nexport type LanguageInfo = {\n tag: LanguageTag;\n name: string;\n nativeName: string;\n rtl?: boolean;\n};\n\nexport const LANGUAGES: LanguageInfo[] = [\n { tag: \"en\", name: \"English\", nativeName: \"English\" },\n { tag: \"nl\", name: \"Dutch\", nativeName: \"Nederlands\" },\n { tag: \"es\", name: \"Spanish\", nativeName: \"Español\" },\n { tag: \"sv\", name: \"Swedish\", nativeName: \"Svenska\" },\n { tag: \"zh-cn\", name: \"Chinese (Simplified)\", nativeName: \"简体中文\" },\n { tag: \"fr\", name: \"French\", nativeName: \"Français\" },\n { tag: \"ar\", name: \"Arabic\", nativeName: \"العربية\", rtl: true },\n { tag: \"he\", name: \"Hebrew\", nativeName: \"עברית\", rtl: true },\n { tag: \"fa\", name: \"Persian\", nativeName: \"فارسی\", rtl: true },\n];\n\nexport const isRtlLanguage = (tag: LanguageTag): boolean => {\n const language = LANGUAGES.find(l => l.tag === tag);\n\n return language?.rtl ?? false;\n};\n\nconst SUPPORTED_LANGUAGE_TAGS = new Set(LANGUAGES.map(l => l.tag));\n\nexport const detectBrowserLanguage = (): LanguageTag => {\n if (typeof navigator === \"undefined\") return \"en\";\n\n const languages = navigator.languages || [navigator.language];\n\n for (const browserLang of languages) {\n const lang = browserLang.toLowerCase();\n\n // Exact match\n if (SUPPORTED_LANGUAGE_TAGS.has(lang as LanguageTag)) {\n return lang as LanguageTag;\n }\n\n // Check for zh-cn variants (zh, zh-hans, zh-cn)\n if (\n lang === \"zh\"\n || lang.startsWith(\"zh-hans\")\n || lang.startsWith(\"zh-cn\")\n ) {\n return \"zh-cn\";\n }\n\n // Base language match (e.g., \"en-US\" -> \"en\")\n const [baseLang] = lang.split(\"-\");\n\n if (SUPPORTED_LANGUAGE_TAGS.has(baseLang as LanguageTag)) {\n return baseLang as LanguageTag;\n }\n }\n\n return \"en\";\n};\n\nexport const getLanguageScore = (tag: string): number => {\n if (typeof navigator === \"undefined\") return 0;\n\n const languages = navigator.languages || [navigator.language];\n\n for (let i = 0; i < languages.length; i++) {\n const browserLang = languages[i].toLowerCase();\n\n // Exact match\n if (browserLang === tag) return languages.length - i + 1;\n\n // Prefix match (e.g., \"en-US\" matches \"en\")\n if (browserLang.startsWith(`${tag}-`) || tag.startsWith(`${browserLang}-`))\n return languages.length - i;\n\n // Base language match (e.g., \"zh\" matches \"zh-cn\")\n const [baseLang] = browserLang.split(\"-\");\n\n if (baseLang === tag || tag.startsWith(`${baseLang}-`))\n return languages.length - i - 0.5;\n }\n\n return 0;\n};\n\nexport type Translate = (\n key: string,\n params?: Readonly<Record<string, string | number>>,\n) => string | JSX.Element;\n\nexport type Translations = Record<string, unknown>;\n\nconst resolveNestedValue = (\n source: Translations | null | undefined,\n key: string,\n): unknown => {\n if (!source) return undefined;\n\n const segments = key.split(\".\").filter(Boolean);\n\n if (segments.length === 0) return undefined;\n\n let current: unknown = source;\n\n for (const segment of segments) {\n if (typeof current !== \"object\" || current === null) return undefined;\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n};\n\nconst interpolate = (\n template: string,\n params?: Readonly<Record<string, string | number>>,\n): string => {\n if (!params) return template;\n\n return template.replaceAll(\n /\\{(\\w+)\\}/g,\n (matchText: string, key: string): string => {\n const value = params[key];\n\n return value === undefined ? matchText : String(value);\n },\n );\n};\n\nexport const resolveTranslation = (parameters: {\n primary: Translations | undefined;\n fallback: Translations;\n key: string;\n params?: Readonly<Record<string, string | number>>;\n}): string => {\n const fromPrimary = resolveNestedValue(parameters.primary, parameters.key);\n\n if (typeof fromPrimary === \"string\") {\n return interpolate(fromPrimary, parameters.params);\n }\n\n const fromFallback = resolveNestedValue(parameters.fallback, parameters.key);\n\n if (typeof fromFallback === \"string\") {\n return interpolate(fromFallback, parameters.params);\n }\n\n return parameters.key;\n};\n\nexport type TranslationContextValue = {\n languageTag: Accessor<LanguageTag>;\n setLanguageTag: (languageTag: LanguageTag) => void;\n isLoadingLanguagePack: Accessor<boolean>;\n isRtl: Accessor<boolean>;\n t: Translate;\n};\n\nexport const TranslationContext = createContext<\n TranslationContextValue | undefined\n>(undefined);\n\nconst loadLanguagePack = async (\n languageTag: LanguageTag,\n): Promise<Translations | undefined> =>\n match(languageTag)\n .with(\"en\", () => Promise.resolve(undefined))\n .with(\"nl\", async () => import(\"../../lang/nl.json\").then(m => m.default))\n .with(\"es\", async () => import(\"../../lang/es.json\").then(m => m.default))\n .with(\"sv\", async () => import(\"../../lang/sv.json\").then(m => m.default))\n .with(\"fr\", async () => import(\"../../lang/fr.json\").then(m => m.default))\n .with(\"zh-cn\", async () =>\n import(\"../../lang/zh-cn.json\").then(m => m.default),\n )\n .with(\"ar\", async () => import(\"../../lang/ar.json\").then(m => m.default))\n .with(\"he\", async () => import(\"../../lang/he.json\").then(m => m.default))\n .with(\"fa\", async () => import(\"../../lang/fa.json\").then(m => m.default))\n .exhaustive();\n\nexport const TranslationProvider: ParentComponent = (props) => {\n const { provider } = useModalContext();\n const initialLanguageTag = provider.storage.getSettings().language as LanguageTag | undefined;\n const [languageTag, setLanguageTag] = createSignal<LanguageTag>(\n initialLanguageTag ?? \"en\",\n );\n const [languagePack, setLanguagePack] = createSignal<\n Translations | undefined\n >(undefined);\n const [isLoadingLanguagePack, setIsLoadingLanguagePack] = createSignal(false);\n\n createEffect(() => {\n let cancelled = false;\n\n const run = async () => {\n setIsLoadingLanguagePack(true);\n\n try {\n const nextPack = await loadLanguagePack(languageTag());\n\n if (cancelled) return;\n\n setLanguagePack(nextPack);\n }\n finally {\n if (!cancelled) setIsLoadingLanguagePack(false);\n }\n };\n\n void run();\n\n onCleanup(() => {\n cancelled = true;\n });\n });\n\n const t: Translate = (key, params) => {\n const translated = resolveTranslation({\n primary: languagePack(),\n fallback: fallbackEnglish as unknown as Translations,\n key,\n params,\n });\n const lines = translated.split(\"\\n\");\n\n if (lines.length <= 1) {\n return translated;\n }\n\n return (\n <>\n {lines.map((line, index) => (\n <>\n {line}\n {index < lines.length - 1 ? <br /> : null}\n </>\n ))}\n </>\n );\n };\n\n const isRtl = createMemo(() => isRtlLanguage(languageTag()));\n const updateLanguageTag = (nextLanguageTag: LanguageTag) => {\n setLanguageTag(nextLanguageTag);\n };\n\n const contextValue: TranslationContextValue = {\n languageTag,\n setLanguageTag: updateLanguageTag,\n isLoadingLanguagePack,\n isRtl,\n t,\n };\n\n return (\n <TranslationContext.Provider value={contextValue}>\n {props.children}\n </TranslationContext.Provider>\n );\n};\n\nexport const useTranslation = () => {\n const context = useContext(TranslationContext);\n\n if (!context) {\n throw new Error(\"TranslationProvider not found\");\n }\n\n return context;\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport {\n type Component,\n createContext,\n useContext,\n} from \"solid-js\";\n\nimport { ModalRoot } from \"./components/ModalRoot.js\";\nimport { type OpenLVModalElementProps } from \"./element.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\nimport {\n TranslationProvider,\n} from \"./utils/i18n.js\";\n\nexport type ModalContextValue = {\n provider: OpenLVProvider;\n themeConfig?: ThemeConfig;\n};\n\nexport const ModalContext = createContext<ModalContextValue | undefined>(\n undefined,\n);\n\nexport const ModalProvider: Component<OpenLVModalElementProps> = (props) => {\n const { provider, theme } = props;\n\n return (\n <ModalContext.Provider value={{ provider, themeConfig: theme }}>\n <TranslationProvider>\n <ModalRoot onClose={props.onClose} />\n </TranslationProvider>\n </ModalContext.Provider>\n );\n};\n\nexport const useModalContext = () => {\n const context = useContext(ModalContext);\n\n if (!context) throw new Error(\"Modal context not found\");\n\n return context;\n};\n","import { encodeConnectionURL } from \"@openlv/core\";\nimport type { SessionStateObject } from \"@openlv/session\";\nimport { createMemo, createSignal, onCleanup, onMount } from \"solid-js\";\n\nimport { useModalContext } from \"../context.js\";\n\nexport const useSession = () => {\n const { provider } = useModalContext();\n const session = createMemo(() => provider.getSession(), undefined, { name: \"session\" });\n const [status, setStatus] = createSignal<SessionStateObject | undefined>(session()?.getState());\n\n console.log(\"session status\", status());\n\n const handleStateChange = (state?: SessionStateObject) => {\n console.log(\"session state change\", state);\n setStatus(state);\n };\n\n onMount(() => {\n session()?.emitter.on(\"state_change\", handleStateChange);\n });\n\n onCleanup(() => {\n session()?.emitter.off(\"state_change\", handleStateChange);\n });\n\n const parameters = createMemo(() => session()?.getHandshakeParameters());\n const uri = createMemo(() => {\n const handshakeParameters = parameters();\n\n return handshakeParameters\n ? encodeConnectionURL(handshakeParameters)\n : undefined;\n });\n\n return {\n uri,\n status,\n };\n};\n\nexport const useSessionStart = () => {\n const { provider } = useModalContext();\n\n return {\n start: () => {\n const currentSettings = provider.storage.getSettings();\n const p = currentSettings?.signaling?.p;\n const s = p ? currentSettings?.signaling?.s?.[p] : undefined;\n\n if (!p || !s) {\n throw new Error(\"Invalid protocol or server\");\n }\n\n return provider.createSession({\n p,\n s,\n });\n },\n };\n};\n","import { useSession } from \"../hooks/useSession.js\";\n\nexport const UnknownState = (props: { state: unknown; }) => {\n const { uri, status } = useSession();\n\n // biome-ignore lint/suspicious/noConsole: debug\n console.error(\"Unknown state:\", {\n state: props.state,\n });\n\n return (\n <div class=\"rounded-md bg-(--lv-control-button-secondary-background) p-2 text-(--lv-text-muted)\">\n <div>\n Unknown state:\n {JSON.stringify(props.state)}\n </div>\n <div>\n URI:\n {uri()}\n </div>\n <div>\n Session Status:\n {JSON.stringify(status())}\n </div>\n </div>\n );\n};\n","/*!\nCopyright (c) 2023 Paul Miller (paulmillr.com)\nThe library paulmillr-qr is dual-licensed under the Apache 2.0 OR MIT license.\nYou can select a license of your choice.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n// We do not use newline escape code directly in strings because it's not parser-friendly\nconst chCodes = { newline: 10, reset: 27 };\nfunction assertNumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`integer expected: ${n}`);\n}\nfunction validateVersion(ver) {\n if (!Number.isSafeInteger(ver) || ver < 1 || ver > 40)\n throw new Error(`Invalid version=${ver}. Expected number [1..40]`);\n}\nfunction bin(dec, pad) {\n return dec.toString(2).padStart(pad, '0');\n}\nfunction mod(a, b) {\n const result = a % b;\n return result >= 0 ? result : b + result;\n}\nfunction fillArr(length, val) {\n // Current callers only pass primitive fill values; object fills would alias references.\n return new Array(length).fill(val);\n}\nfunction popcnt(n) {\n n = n - ((n >>> 1) & 0x55555555);\n n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);\n return (((n + (n >>> 4)) & 0x0f0f0f0f) * 0x01010101) >>> 24;\n}\n/**\n * Interleaves byte blocks.\n * @param blocks [[1, 2, 3], [4, 5, 6]]\n * @returns [1, 4, 2, 5, 3, 6]\n */\nfunction interleaveBytes(blocks) {\n let maxLen = 0;\n let totalLen = 0;\n for (const block of blocks) {\n maxLen = Math.max(maxLen, block.length);\n totalLen += block.length;\n }\n const result = new Uint8Array(totalLen);\n let idx = 0;\n // When block lengths differ, callers must pass the shorter blocks first so\n // the interleaving order matches ISO/IEC 18004 §7.6 c).\n for (let i = 0; i < maxLen; i++) {\n for (const block of blocks) {\n if (i < block.length)\n result[idx++] = block[i];\n }\n }\n return result;\n}\n// Optimize for minimal score/penalty\nfunction best() {\n let best;\n let bestScore = Infinity;\n return {\n add(score, value) {\n // Ties keep the first candidate so equal-score selections stay deterministic.\n if (score >= bestScore)\n return;\n best = value;\n bestScore = score;\n },\n get: () => best,\n score: () => bestScore,\n };\n}\n// Based on https://github.com/paulmillr/scure-base/blob/main/index.ts\nfunction alphabet(alphabet) {\n // Character order defines the numeric values used by the target QR mode.\n return Object.freeze({\n has: (char) => alphabet.includes(char),\n decode: (input) => {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('alphabet.decode input should be array of strings');\n return input.map((letter) => {\n if (typeof letter !== 'string')\n throw new Error(`alphabet.decode: not string element=${letter}`);\n const index = alphabet.indexOf(letter);\n if (index === -1)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n return index;\n });\n },\n encode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('alphabet.encode input should be an array of numbers');\n return digits.map((i) => {\n assertNumber(i);\n if (i < 0 || i >= alphabet.length)\n throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n return alphabet[i];\n });\n },\n });\n}\n// Transpose 32x32 bit matrix in-place\n// a[0..31] are 32 rows of 32 bits each; after transpose they become 32 columns.\nfunction transpose32(a) {\n if (a.length !== 32)\n throw new Error('expects 32 element matrix');\n const masks = [0x55555555, 0x33333333, 0x0f0f0f0f, 0x00ff00ff, 0x0000ffff];\n // Hello again, FFT\n for (let stage = 0; stage < 5; stage++) {\n const m = masks[stage] >>> 0;\n const s = 1 << stage; // 1,2,4,8,16\n const step = s << 1; // 2,4,8,16,32\n for (let i = 0; i < 32; i += step) {\n for (let k = 0; k < s; k++) {\n const i0 = i + k;\n const i1 = i0 + s;\n const x = a[i0] >>> 0;\n const y = a[i1] >>> 0;\n const t = ((x >>> s) ^ y) & m;\n a[i0] = (x ^ (t << s)) >>> 0;\n a[i1] = (y ^ t) >>> 0;\n }\n }\n }\n}\nconst bitMask = (x) => (1 << (x & 31)) >>> 0;\nconst rangeMask = (shift, len) => {\n // len in [0..32], shift in [0..31]\n if (len === 0)\n return 0;\n // Callers only request len=32 for word-aligned spans; JS shift counts wrap at 32,\n // so full-word masks must bypass the generic `(1 << len)` path.\n if (len === 32)\n return 0xffffffff;\n return (((1 << len) - 1) << shift) >>> 0;\n};\n/**\n * Mutable monochrome bitmap used as the internal QR representation.\n * @param size - Square edge length or explicit bitmap dimensions.\n * @param data - Optional row-major pixel matrix using `true`, `false`, or `undefined`.\n * @example\n * Create a bitmap, then scale it for display.\n * ```ts\n * import { Bitmap } from 'qr';\n * const bitmap = Bitmap.fromString('X \\n X');\n * bitmap.scale(2);\n * ```\n */\nexport class Bitmap {\n static size(size, limit) {\n if (typeof size === 'number')\n size = { height: size, width: size };\n if (!Number.isSafeInteger(size.height) && size.height !== Infinity)\n throw new Error(`Bitmap: invalid height=${size.height} (${typeof size.height})`);\n if (!Number.isSafeInteger(size.width) && size.width !== Infinity)\n throw new Error(`Bitmap: invalid width=${size.width} (${typeof size.width})`);\n if (limit !== undefined) {\n // Clamp length, so it won't overflow, also allows to use Infinity, so we draw until end\n size = {\n width: Math.min(size.width, limit.width),\n height: Math.min(size.height, limit.height),\n };\n }\n return size;\n }\n static fromString(s) {\n // Remove linebreaks on start and end, so we draw in `` section\n // Fixture strings use LF-delimited rows of X / space / ? characters; callers\n // must normalize CRLF input before handing it to this debug parser.\n s = s.replace(/^\\n+/g, '').replace(/\\n+$/g, '');\n const lines = s.split(String.fromCharCode(chCodes.newline));\n const height = lines.length;\n let width;\n const rows = [];\n for (const line of lines) {\n const row = line.split('').map((i) => {\n if (i === 'X')\n return true;\n if (i === ' ')\n return false;\n if (i === '?')\n return undefined;\n throw new Error(`Bitmap.fromString: unknown symbol=${i}`);\n });\n if (width !== undefined && row.length !== width)\n throw new Error(`Bitmap.fromString different row sizes: width=${width} cur=${row.length}`);\n width = row.length;\n rows.push(row);\n }\n if (width === undefined)\n width = 0;\n return new Bitmap({ height, width }, rows);\n }\n // Two bitsets:\n // defined=0 -> undefined\n // defined=1,value=0 -> false\n // defined=1,value=1 -> true\n defined;\n value;\n tailMask;\n words;\n fullWords;\n height;\n width;\n constructor(size, data) {\n const { height, width } = Bitmap.size(size);\n // Bitmap coordinates wrap through modulo for negative positions, so invalid\n // dimensions produce NaN, aliasing, or unsafe allocation sizes before later\n // drawing no-op guards can run. `Infinity` is only valid for rectangle sizes\n // that are clamped against an existing positive bitmap.\n if (!Number.isSafeInteger(height) || height <= 0)\n throw new Error(`Bitmap: invalid height=${height}, expected positive safe integer dimension`);\n if (!Number.isSafeInteger(width) || width <= 0)\n throw new Error(`Bitmap: invalid width=${width}, expected positive safe integer dimension`);\n this.height = height;\n this.width = width;\n this.tailMask = rangeMask(0, width & 31 || 32);\n this.words = Math.ceil(width / 32) | 0;\n this.fullWords = Math.floor(width / 32) | 0;\n this.value = new Uint32Array(this.words * height);\n this.defined = new Uint32Array(this.value.length);\n if (data) {\n // accept same semantics as old version\n if (data.length !== height)\n throw new Error(`Bitmap: data height mismatch: exp=${height} got=${data.length}`);\n for (let y = 0; y < height; y++) {\n const row = data[y];\n if (!row || row.length !== width)\n throw new Error(`Bitmap: data width mismatch at y=${y}: exp=${width} got=${row?.length}`);\n for (let x = 0; x < width; x++)\n this.set(x, y, row[x]);\n }\n }\n }\n point(p) {\n // The storage docs above say \"undefined is used as a marker whether cell\n // was written or not\"; `point()` is the detector's dark-module read and\n // intentionally treats both undefined and false as not-dark. Use\n // `isDefined()` when the written/undefined distinction matters.\n return this.get(p.x, p.y);\n }\n // Raw bounds check for scan loops; unlike `xy()`, this does not wrap or normalize coordinates.\n isInside(p) {\n return 0 <= p.x && p.x < this.width && 0 <= p.y && p.y < this.height;\n }\n size(offset) {\n if (!offset)\n return { height: this.height, width: this.width };\n const { x, y } = this.xy(offset);\n return { height: this.height - y, width: this.width - x };\n }\n xy(c) {\n if (typeof c === 'number')\n c = { x: c, y: c };\n if (!Number.isSafeInteger(c.x))\n throw new Error(`Bitmap: invalid x=${c.x}`);\n if (!Number.isSafeInteger(c.y))\n throw new Error(`Bitmap: invalid y=${c.y}`);\n // Bitmap's class docs say \"For most `draw` calls, structure is mutable\";\n // coordinate objects follow that hot-path policy too and are normalized in place.\n c.x = mod(c.x, this.width);\n c.y = mod(c.y, this.height);\n return c;\n }\n /**\n * Return pixel bit index\n */\n wordIndex(x, y) {\n return y * this.words + (x >>> 5);\n }\n bitIndex(x, y) {\n return { word: this.wordIndex(x, y), bit: x & 31 };\n }\n isDefined(x, y) {\n // `isInside()` is the raw bounds check; keep these bitset accessors\n // bounds-check-free for hot paths. Invalid tail coordinates may observe\n // backing-word bits, so callers that accept untrusted coordinates must\n // check `isInside()` first.\n const wi = this.wordIndex(x, y);\n const m = bitMask(x);\n return (this.defined[wi] & m) !== 0;\n }\n get(x, y) {\n const wi = this.wordIndex(x, y);\n const m = bitMask(x);\n return (this.value[wi] & m) !== 0;\n }\n maskWord(wi, mask, v) {\n const { defined, value } = this;\n defined[wi] |= mask;\n // `-v` expands the boolean to either all-zero or all-one bits before masking it into the selected lanes.\n value[wi] = (value[wi] & ~mask) | (-v & mask);\n }\n set(x, y, v) {\n // `undefined` means \"leave the current cell unchanged\", not \"clear it back to undefined\".\n if (v === undefined)\n return;\n // Like `get()` / `isDefined()`, this is a raw in-bounds bitset accessor;\n // check `isInside()` before passing untrusted coordinates.\n this.maskWord(this.wordIndex(x, y), bitMask(x), v);\n }\n // word-span fill for constant values (fast path)\n fillRectConst(x0, y0, w, h, v) {\n if (w <= 0 || h <= 0)\n return;\n if (v === undefined)\n return;\n const { value, defined, words } = this;\n const startWord = x0 >>> 5;\n const endWord = (x0 + w - 1) >>> 5;\n const startBit = x0 & 31;\n const endBit = (x0 + w - 1) & 31;\n for (let ry = 0; ry < h; ry++) {\n const rowBase = (y0 + ry) * words;\n if (startWord === endWord) {\n const mask = rangeMask(startBit, endBit - startBit + 1);\n this.maskWord(rowBase + startWord, mask, v);\n continue;\n }\n this.maskWord(rowBase + startWord, rangeMask(startBit, 32 - startBit), v);\n // Whole interior words can be written directly: every bit in the span becomes defined and equal to v.\n for (let i = startWord + 1; i < endWord; i++) {\n defined[rowBase + i] = 0xffffffff;\n value[rowBase + i] = v ? 0xffffffff : 0;\n }\n this.maskWord(rowBase + endWord, rangeMask(0, endBit + 1), v);\n }\n }\n rectWords(x, y, width, height, cb) {\n for (let yPos = 0; yPos < height; yPos++) {\n const Py = y + yPos;\n for (let xPos = 0; xPos < width;) {\n const bitX = x + xPos;\n const { bit, word } = this.bitIndex(bitX, Py);\n const bitsPerWord = Math.min(32 - bit, width - xPos);\n // bitX stays absolute for word-local masks; xPos/yPos stay rectangle-local for rect callbacks.\n cb(word, bitX, xPos, yPos, bitsPerWord);\n xPos += bitsPerWord;\n }\n }\n }\n // Basically every operation can be represented as rect\n rect(c, size, fn) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n if (typeof fn !== 'function') {\n this.fillRectConst(x, y, width, height, fn);\n return this;\n }\n const { defined, value } = this;\n this.rectWords(x, y, width, height, (wi, bitX, xPos, yPos, n) => {\n let defWord = 0;\n let valWord = value[wi];\n for (let b = 0; b < n; b++) {\n const mask = bitMask(bitX + b);\n // As with `point()`, callback `cur` is a dark/not-dark read; the\n // storage-level \"undefined is used as a marker whether cell was\n // written or not\" distinction is checked separately with `isDefined()`.\n const res = fn({ x: xPos + b, y: yPos }, (valWord & mask) !== 0);\n // Returning undefined from the callback keeps the existing cell unchanged.\n if (res === undefined)\n continue;\n defWord |= mask;\n valWord = (valWord & ~mask) | (-res & mask);\n }\n defined[wi] |= defWord;\n value[wi] = valWord;\n });\n return this;\n }\n // returns rectangular part of bitmap\n rectRead(c, size, fn) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n const { value } = this;\n this.rectWords(x, y, width, height, (wi, bitX, xPos, yPos, n) => {\n const valWord = value[wi];\n for (let b = 0; b < n; b++) {\n const mask = bitMask(bitX + b);\n // rectRead is non-mutating; callback coordinates are rectangle-local,\n // and `cur` is the same dark/not-dark read as `point()`.\n fn({ x: xPos + b, y: yPos }, (valWord & mask) !== 0);\n }\n });\n return this;\n }\n // Horizontal & vertical lines\n hLine(c, len, value) {\n return this.rect(c, { width: len, height: 1 }, value);\n }\n vLine(c, len, value) {\n return this.rect(c, { width: 1, height: len }, value);\n }\n // add border\n border(border = 2, value) {\n // `border` is used both as output-size delta and as embed coordinate; keep\n // it a positive safe integer before those paths allocate or normalize.\n if (!Number.isSafeInteger(border) || border <= 0)\n throw new Error(`Bitmap.border: invalid size=${border}`);\n const height = this.height + 2 * border;\n const width = this.width + 2 * border;\n const out = new Bitmap({ height, width });\n // fill everything with border value, then embed original\n out.rect(0, Infinity, value);\n out.embed({ x: border, y: border }, this);\n return out;\n }\n // Embed another bitmap on coordinates\n embed(c, src) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(src.size(), this.size({ x, y }));\n if (width <= 0 || height <= 0)\n return this;\n const { value, defined } = this;\n const { words: srcStride, value: srcValue } = src;\n // The Bitmap storage docs say \"undefined is used as a marker whether cell\n // was written or not\"; `embed()` is the packed blit path for materialized\n // source bitmaps, so it flattens the source rectangle to defined dark/light\n // bits instead of treating undefined cells as transparent.\n for (let yPos = 0; yPos < height; yPos++) {\n const srcRow = yPos * srcStride;\n for (let xPos = 0; xPos < width;) {\n const dstX = x + xPos;\n const { word: dstWord, bit: dstBit } = this.bitIndex(dstX, y + yPos);\n const { word: srcWord, bit: srcBit } = src.bitIndex(xPos, yPos);\n const len = Math.min(32 - dstBit, width - xPos);\n const w0 = srcValue[srcWord];\n const w1 = srcBit && srcWord + 1 < srcRow + srcStride ? srcValue[srcWord + 1] : 0;\n // Source and destination bit offsets may differ, so assemble the source span from up to two words.\n const sVal = srcBit ? ((w0 >>> srcBit) | (w1 << (32 - srcBit))) >>> 0 : w0;\n const dstMask = rangeMask(dstBit, len);\n const valBits = ((sVal & rangeMask(0, len)) << dstBit) >>> 0;\n defined[dstWord] |= dstMask;\n value[dstWord] = (value[dstWord] & ~dstMask) | valBits;\n xPos += len;\n }\n }\n return this;\n }\n // returns rectangular part of bitmap\n rectSlice(c, size = this.size()) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n const rect = new Bitmap({ height, width });\n this.rectRead({ x, y }, { height, width }, (p, cur) => {\n // rectRead reports undefined cells as false, so copy only when the source defined bit is set.\n if (this.isDefined(x + p.x, y + p.y)) {\n rect.set(p.x, p.y, cur);\n }\n });\n return rect;\n }\n // Change shape, replace rows with columns (data[y][x] -> data[x][y])\n transpose() {\n const { height, width, value, defined, words } = this;\n const dst = new Bitmap({ height: width, width: height });\n const { words: dstStride, value: dstValue, defined: dstDefined, tailMask: dstTail } = dst;\n const tmpV = new Uint32Array(32);\n const tmpD = new Uint32Array(32);\n // Process src in blocks: y in [by..by+31], x in 32-bit words\n for (let by = 0; by < height; by += 32) {\n for (let bx = 0; bx < words; bx++) {\n const rows = Math.min(32, height - by);\n for (let r = 0; r < rows; r++) {\n const wi = this.wordIndex(32 * bx, by + r);\n tmpV[r] = value[wi];\n tmpD[r] = defined[wi];\n }\n // zero-pad remainder\n tmpV.fill(0, rows);\n tmpD.fill(0, rows);\n transpose32(tmpV);\n transpose32(tmpD);\n for (let i = 0; i < 32; i++) {\n const dstY = bx * 32 + i;\n if (dstY >= width)\n break;\n const dstPos = dst.wordIndex(by, dstY);\n const curMask = by >>> 5 === dstStride - 1 ? dstTail : 0xffffffff;\n dstValue[dstPos] = tmpV[i] & curMask;\n dstDefined[dstPos] = tmpD[i] & curMask;\n }\n }\n }\n return dst;\n }\n // black <-> white (inplace)\n negate() {\n const n = this.defined.length;\n for (let i = 0; i < n; i++) {\n // ISO/IEC 18004:2024 §12 b)5 says to \"reverse the colouring of the light\n // and dark pixels\"; this dense scratch-bitmap operation materializes every\n // backing bit as defined and does not preserve sparse/undefined cells.\n this.value[i] = ~this.value[i];\n this.defined[i] = 0xffffffff;\n }\n return this;\n }\n // Each pixel size is multiplied by factor\n scale(factor) {\n if (!Number.isSafeInteger(factor) || factor > 1024)\n throw new Error(`invalid scale factor: ${factor}`);\n const { height, width } = this;\n // Bitmap storage docs say \"undefined is used as a marker whether cell was\n // written or not\"; `scale()` is an output materialization path and samples\n // with `get()`, so sparse cells become defined light cells. Positive output\n // dimensions stay validated by the Bitmap constructor instead of duplicating\n // dimension checks in every caller that computes a new bitmap size.\n const res = new Bitmap({ height: factor * height, width: factor * width });\n return res.rect({ x: 0, y: 0 }, Infinity, ({ x, y }) => this.get((x / factor) | 0, (y / factor) | 0));\n }\n clone() {\n const res = new Bitmap(this.size());\n res.defined.set(this.defined);\n res.value.set(this.value);\n return res;\n }\n // Ensure that there is no undefined values left\n assertDrawn() {\n const { height, width, defined, tailMask, fullWords, words } = this;\n if (!height || !width)\n return;\n for (let y = 0; y < height; y++) {\n const rowBase = y * words;\n for (let wi = 0; wi < fullWords; wi++) {\n if (defined[rowBase + wi] !== 0xffffffff)\n throw new Error(`Invalid color type=undefined`);\n }\n if (words !== fullWords && (defined[rowBase + fullWords] & tailMask) !== tailMask)\n throw new Error(`Invalid color type=undefined`);\n }\n }\n countPatternInRow(y, patternLen, ...patterns) {\n // Penalty scanning only passes Table 11 windows over bounded symbol rows;\n // validate this public helper before JS shifts / typed-array reads coerce bad inputs.\n if (!Number.isSafeInteger(patternLen) || patternLen <= 0 || patternLen >= 32)\n throw new Error('wrong patternLen');\n const mask = (1 << patternLen) - 1;\n const { height, width, value, words } = this;\n if (!Number.isSafeInteger(y) || y < 0 || y >= height)\n return 0;\n let count = 0;\n const rowBase = this.wordIndex(0, y);\n for (let i = 0, window = 0; i < words; i++) {\n const w = value[rowBase + i];\n const bitEnd = i === words - 1 ? width & 31 || 32 : 32;\n for (let b = 0; b < bitEnd; b++) {\n window = ((window << 1) | ((w >>> b) & 1)) & mask;\n if (i * 32 + b + 1 < patternLen)\n continue;\n for (const p of patterns) {\n if (window !== p)\n continue;\n count++;\n break;\n }\n }\n }\n return count;\n }\n getRuns(y, fn) {\n const { height, width, value, words } = this;\n if (width === 0)\n return;\n // ISO/IEC 18004:2024 §7.8.3.1 N1 scans adjacent modules in bounded rows\n // and columns; validate this public helper before missing typed-array rows\n // are coerced into all-light runs by bitwise operators.\n if (!Number.isSafeInteger(y) || y < 0 || y >= height)\n return;\n let runLen = 0;\n let runValue;\n const rowBase = this.wordIndex(0, y);\n for (let i = 0; i < words; i++) {\n const word = value[rowBase + i];\n const bitEnd = i === words - 1 ? width & 31 || 32 : 32;\n for (let b = 0; b < bitEnd; b++) {\n const bit = (word & (1 << b)) !== 0;\n if (bit === runValue) {\n runLen++;\n continue;\n }\n if (runValue !== undefined)\n fn(runLen, runValue);\n runValue = bit;\n runLen = 1;\n }\n }\n if (runValue !== undefined)\n fn(runLen, runValue);\n }\n popcnt() {\n const { height, width, words, fullWords, tailMask } = this;\n if (!height || !width)\n return 0;\n let count = 0;\n for (let y = 0; y < height; y++) {\n const rowBase = y * words;\n for (let wi = 0; wi < fullWords; wi++)\n count += popcnt(this.value[rowBase + wi]);\n if (words !== fullWords)\n count += popcnt(this.value[rowBase + fullWords] & tailMask);\n }\n return count;\n }\n countBoxes2x2(y) {\n const { height, width, words } = this;\n // ISO/IEC 18004:2024 §7.8.3.1 N2 counts 2 x 2 module blocks in bounded\n // rows; reject non-integer scan rows before bitwise coercions truncate them.\n if (width < 2 || !Number.isSafeInteger(y) || y < 0 || y + 1 >= height)\n return 0;\n const base0 = this.wordIndex(0, y);\n const base1 = this.wordIndex(0, y + 1);\n // valid \"left-edge\" positions x in [0 .. W-2]\n const tailBits = width & 31;\n const validLast = tailBits === 0 ? 0x7fffffff : rangeMask(0, (width - 1) & 31);\n let boxes = 0;\n for (let wi = 0; wi < words; wi++) {\n const a0 = this.value[base0 + wi];\n const a1 = this.value[base1 + wi];\n // Compare bit x with bit x+1 at same bit position.\n const eqV = ~(a0 ^ a1) >>> 0; // row0[x] == row1[x]\n const n0 = wi + 1 < words ? this.value[base0 + wi + 1] >>> 0 : 0;\n const eqH0 = ~(a0 ^ (((a0 >>> 1) | ((n0 & 1) << 31)) >>> 0)) >>> 0; // row0[x] == row0[x+1]\n const n1 = wi + 1 < words ? this.value[base1 + wi + 1] >>> 0 : 0;\n const eqH1 = ~(a1 ^ (((a1 >>> 1) | ((n1 & 1) << 31)) >>> 0)) >>> 0; // row1[x] == row1[x+1]\n let m = (eqV & eqH0 & eqH1) >>> 0;\n if (wi === words - 1)\n m &= validLast;\n boxes += popcnt(m);\n }\n return boxes;\n }\n // Export\n toString() {\n const nl = String.fromCharCode(chCodes.newline);\n let out = '';\n for (let y = 0; y < this.height; y++) {\n let line = '';\n for (let x = 0; x < this.width; x++) {\n const v = this.get(x, y);\n line += !this.isDefined(x, y) ? '?' : v ? 'X' : ' ';\n }\n out += line + (y + 1 === this.height ? '' : nl);\n }\n return out;\n }\n toRaw() {\n const out = Array.from({ length: this.height }, () => new Array(this.width));\n for (let y = 0; y < this.height; y++) {\n const row = out[y];\n // Bitmap storage docs say \"undefined is used as a marker whether cell was\n // written or not\"; `toRaw()` is the materialized dark/not-dark output path\n // used after `encodeQR()` asserts the QR symbol is fully drawn.\n for (let x = 0; x < this.width; x++)\n row[x] = this.get(x, y);\n }\n return out;\n }\n toASCII() {\n const { height, width } = this;\n let out = '';\n // Terminal character height is x2 of character width, so we process two rows of bitmap\n // to produce one row of ASCII\n for (let y = 0; y < height; y += 2) {\n for (let x = 0; x < width; x++) {\n const first = this.get(x, y);\n const second = y + 1 >= height ? true : this.get(x, y + 1); // if last row outside bitmap, make it black\n if (!first && !second)\n out += '█'; // both rows white (empty)\n else if (!first && second)\n out += '▀'; // top row white\n else if (first && !second)\n out += '▄'; // down row white\n else if (first && second)\n out += ' '; // both rows black\n }\n out += String.fromCharCode(chCodes.newline);\n }\n return out;\n }\n toTerm() {\n const cc = String.fromCharCode(chCodes.reset);\n const reset = cc + '[0m';\n const whiteBG = cc + '[1;47m ' + reset;\n const darkBG = cc + `[40m ` + reset;\n const nl = String.fromCharCode(chCodes.newline);\n let out = '';\n for (let y = 0; y < this.height; y++) {\n for (let x = 0; x < this.width; x++) {\n const v = this.get(x, y); // undefined -> white\n out += v ? darkBG : whiteBG;\n }\n out += nl;\n }\n return out;\n }\n toSVG(optimize = true) {\n let out = `<svg viewBox=\"0 0 ${this.width} ${this.height}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n // ISO/IEC 18004:2024 §5.1 c) / §5.3.8: this SVG draws only dark modules;\n // callers must render it on a light background for light modules and the quiet zone.\n // Construct optimized SVG path data.\n let pathData = '';\n let prevPoint;\n this.rectRead(0, Infinity, (point, val) => {\n if (!val)\n return;\n const { x, y } = point;\n if (!optimize) {\n out += `<rect x=\"${x}\" y=\"${y}\" width=\"1\" height=\"1\" />`;\n return;\n }\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/d#path_commands\n // Determine the shortest way to represent the initial cursor movement.\n // M - Move cursor (without drawing) to absolute coordinate pair.\n let m = `M${x} ${y}`;\n // Only allow using the relative cursor move command if previous points\n // were drawn.\n if (prevPoint) {\n // m - Move cursor (without drawing) to relative coordinate pair.\n const relM = `m${x - prevPoint.x} ${y - prevPoint.y}`;\n if (relM.length <= m.length)\n m = relM;\n }\n // Determine the shortest way to represent the cell's bottom line draw.\n // H - Draw line from cursor position to absolute x coordinate.\n // h - Draw line from cursor position to relative x coordinate.\n const bH = x < 10 ? `H${x}` : 'h-1';\n // v - Draw line from cursor position to relative y coordinate.\n // Z - Close path (draws line from cursor position to M coordinate).\n pathData += `${m}h1v1${bH}Z`;\n prevPoint = point;\n });\n if (optimize)\n out += `<path d=\"${pathData}\"/>`;\n out += `</svg>`;\n return out;\n }\n toGIF() {\n // NOTE: Small, but inefficient implementation.\n // Uses 1 byte per pixel.\n const u16le = (i) => [i & 0xff, (i >>> 8) & 0xff];\n const dims = [...u16le(this.width), ...u16le(this.height)];\n const data = [];\n // Palette index 0 is white/light and index 1 is black/dark; rectRead maps undefined cells to light.\n this.rectRead(0, Infinity, (_, cur) => data.push(+(cur === true)));\n // Each chunk starts with an LZW clear code; 126 raw pixels keep codes at 8 bits until the next clear.\n const N = 126; // Block size\n // prettier-ignore\n const bytes = [\n 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, ...dims, 0xf6, 0x00, 0x00, 0xff, 0xff, 0xff,\n ...fillArr(3 * 127, 0x00), 0x2c, 0x00, 0x00, 0x00, 0x00, ...dims, 0x00, 0x07\n ];\n const fullChunks = Math.floor(data.length / N);\n // Full blocks\n for (let i = 0; i < fullChunks; i++)\n bytes.push(N + 1, 0x80, ...data.slice(N * i, N * (i + 1)).map((i) => +i));\n // Remaining bytes\n bytes.push((data.length % N) + 1, 0x80, ...data.slice(fullChunks * N).map((i) => +i));\n bytes.push(0x01, 0x81, 0x00, 0x3b);\n return new Uint8Array(bytes);\n }\n toImage(isRGB = false) {\n const { height, width } = this.size();\n const data = new Uint8Array(height * width * (isRGB ? 3 : 4));\n let i = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const value = this.get(x, y) ? 0 : 255; // undefined -> white\n data[i++] = value;\n data[i++] = value;\n data[i++] = value;\n if (!isRGB)\n data[i++] = 255; // alpha channel\n }\n }\n return { height, width, data };\n }\n}\n// End of utils\n// Runtime type-checking\n/** Error correction mode. low: 7%, medium: 15%, quartile: 25%, high: 30%. */\nexport const ECMode = /* @__PURE__ */ Object.freeze(['low', 'medium', 'quartile', 'high']);\n/**\n * QR payload compaction mode names recognized by the type/validator.\n * `kanji` and `eci` are spec modes, but `encodeQR` currently rejects them until implemented.\n */\nexport const Encoding = \n/* @__PURE__ */ Object.freeze(['numeric', 'alphanumeric', 'byte', 'kanji', 'eci']);\n// Various constants & tables\n// ISO/IEC 18004:2024 Table 1: QR symbol codeword capacity by version (data plus error correction).\n// prettier-ignore\nconst BYTES = [\n // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n // 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706,\n];\n// ISO/IEC 18004:2024 Table 9: error correction codewords per block by version and level.\n// prettier-ignore\nconst WORDS_PER_BLOCK = {\n // Version 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n low: [7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n medium: [10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n quartile: [13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n high: [17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n};\n// ISO/IEC 18004:2024 Table 9: error correction block count by version and level.\n// prettier-ignore\nconst ECC_BLOCKS = {\n // Version 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n low: [1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n medium: [1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n quartile: [1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n high: [1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81],\n};\n// ISO/IEC 18004:2024 sections 5.3/7.4/7.5/7.9/7.10: QR layout, segment, format/version, and capacity helpers.\nconst info = /* @__PURE__ */ Object.freeze({\n size: /* @__PURE__ */ Object.freeze({\n encode: (ver) => 21 + 4 * (ver - 1), // ver1 = 21, ver40 = 177 modules per side\n decode: (size) => (size - 17) / 4,\n }),\n // ISO/IEC 18004:2024 Table 3: map version ranges 1-9, 10-26, and 27-40 to count-width indexes.\n sizeType: (ver) => Math.floor((ver + 7) / 17),\n // ISO/IEC 18004:2024 Annex E Table E.1: row/column coordinate list of alignment-pattern centres.\n // Based on https://codereview.stackexchange.com/questions/74925/algorithm-to-generate-this-alignment-pattern-locations-table-for-qr-codes\n alignmentPatterns(ver) {\n if (ver === 1)\n return [];\n const first = 6;\n const last = info.size.encode(ver) - first - 1;\n const distance = last - first;\n const count = Math.ceil(distance / 28);\n let interval = Math.floor(distance / count);\n if (interval % 2)\n interval += 1;\n else if ((distance % count) * 2 >= count)\n interval += 2;\n const res = [first];\n for (let m = 1; m < count; m++)\n res.push(last - (count - m) * interval);\n res.push(last);\n return res;\n },\n // ISO/IEC 18004:2024 §7.9.1 Table 12: error-correction-level indicators for the top two format-information data bits.\n ECCode: /* @__PURE__ */ Object.freeze({\n low: 0b01,\n medium: 0b00,\n quartile: 0b11,\n high: 0b10,\n }),\n // ISO/IEC 18004:2024 §7.9.1 final paragraph: XOR the 15-bit format information with mask pattern 101010000010010.\n formatMask: 0b101010000010010,\n // ISO/IEC 18004:2024 §7.9.1 / Annex C.2: append the 10-bit BCH remainder for the 5 data bits, then apply the fixed QR format mask.\n formatBits(ecc, maskIdx) {\n const data = (info.ECCode[ecc] << 3) | maskIdx;\n let d = data;\n for (let i = 0; i < 10; i++)\n d = (d << 1) ^ ((d >> 9) * 0b10100110111);\n return ((data << 10) | d) ^ info.formatMask;\n },\n // ISO/IEC 18004:2024 §7.10 / Annex D.2: append the 12-bit Golay remainder to the 6-bit version word; version information is not masked.\n versionBits(ver) {\n let d = ver;\n for (let i = 0; i < 12; i++)\n d = (d << 1) ^ ((d >> 11) * 0b1111100100101);\n return (ver << 12) | d;\n },\n // ISO/IEC 18004:2024 §7.3.3 / §7.3.4 / §7.4.5 Table 5: character-set membership and value codecs for numeric and alphanumeric QR modes.\n alphabet: /* @__PURE__ */ Object.freeze({\n // ISO/IEC 18004:2024 §7.3.3 / §7.4.4: numeric-mode digits map directly to values 0..9 before 3-digit grouping.\n numeric: alphabet('0123456789'),\n // ISO/IEC 18004:2024 §7.3.4 / §7.4.5 Table 5: 45-character alphanumeric-mode value order used for 11-bit pair packing. Keep the legacy `alphanumerc` key name in sync with existing callers.\n alphanumerc: alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'),\n }), // as Record<EncodingType, ReturnType<typeof alphabet>>,\n // ISO/IEC 18004:2024 Table 3 gives QR character-count widths for data modes; ECI headers instead carry only the mode indicator plus the designator from §7.4.3.\n lengthBits(ver, type) {\n const table = {\n numeric: [10, 12, 14],\n alphanumeric: [9, 11, 13],\n byte: [8, 16, 16],\n kanji: [8, 10, 12],\n eci: [0, 0, 0],\n };\n return table[type][info.sizeType(ver)];\n },\n // ISO/IEC 18004:2024 §7.4.2 Table 2: 4-bit QR mode indicators for the segment types this library models.\n modeBits: /* @__PURE__ */ Object.freeze({\n numeric: '0001',\n alphanumeric: '0010',\n byte: '0100',\n kanji: '1000',\n eci: '0111',\n }),\n // ISO/IEC 18004:2024 Table 1 / §7.5.1 Table 9: derive total data bits and short/long RS block layout from total codewords, ECC words per block, and block counts.\n capacity(ver, ecc) {\n const bytes = BYTES[ver - 1];\n const words = WORDS_PER_BLOCK[ecc][ver - 1];\n const numBlocks = ECC_BLOCKS[ecc][ver - 1];\n const blockLen = Math.floor(bytes / numBlocks) - words;\n const shortBlocks = numBlocks - (bytes % numBlocks);\n return {\n words,\n numBlocks,\n shortBlocks,\n blockLen,\n capacity: (bytes - words * numBlocks) * 8,\n total: (words + blockLen) * numBlocks + numBlocks - shortBlocks,\n };\n },\n});\n// ISO/IEC 18004:2024 Table 10: QR data-mask predicates 000..111, written here in (x column, y row) form.\nconst PATTERNS = /* @__PURE__ */ Object.freeze([\n (x, y) => (x + y) % 2 == 0,\n (_x, y) => y % 2 == 0,\n (x, _y) => x % 3 == 0,\n (x, y) => (x + y) % 3 == 0,\n (x, y) => (Math.floor(y / 2) + Math.floor(x / 3)) % 2 == 0,\n (x, y) => ((x * y) % 2) + ((x * y) % 3) == 0,\n (x, y) => (((x * y) % 2) + ((x * y) % 3)) % 2 == 0,\n (x, y) => (((x + y) % 2) + ((x * y) % 3)) % 2 == 0,\n]);\n// Galois field && reed-solomon encoding\n// ISO/IEC 18004:2024 §7.5.2 / Annex A / Annex B: GF(2^8) field and polynomial helpers shared by QR Reed-Solomon parity generation and decoding.\nconst GF = {\n tables: ((p_poly) => {\n const exp = fillArr(256, 0);\n const log = fillArr(256, 0);\n for (let i = 0, x = 1; i < 256; i++) {\n exp[i] = x;\n log[x] = i;\n x <<= 1;\n if (x & 0x100)\n x ^= p_poly;\n }\n // Keep α^255 = 1 in exp[255]; GF.log() folds the matching log[1] = 255\n // back to 0 with `% 255`, so later helpers can wrap exponents without a special case.\n return { exp, log };\n })(0x11d),\n // Raw α^i lookup from the precomputed field table; callers are expected\n // to reduce / validate exponents before indexing it.\n exp: (x) => GF.tables.exp[x],\n // log(0) is undefined in GF(2^8); `% 255` also folds the wrapped table\n // entry for α^255 = 1 back to exponent 0.\n log(x) {\n if (x === 0)\n throw new Error(`GF.log: invalid arg=${x}`);\n return GF.tables.log[x] % 255;\n },\n // Zero has no logarithm in GF(2^8), so it must short-circuit here; all\n // other products are α^(log(x) + log(y) mod 255) in the reviewed field.\n mul(x, y) {\n if (x === 0 || y === 0)\n return 0;\n return GF.tables.exp[(GF.tables.log[x] + GF.tables.log[y]) % 255];\n },\n // In characteristic 2 fields, addition and subtraction are the same\n // bitwise XOR operation used by the QR Reed-Solomon arithmetic.\n add: (x, y) => x ^ y,\n // Raw nonzero field power helper. Current QR use is GF.pow(2, i) for the\n // Annex A generator factors; x = 0 or negative exponents are not validated.\n pow: (x, e) => GF.tables.exp[(GF.tables.log[x] * e) % 255],\n // Multiplicative inverse for nonzero field elements. Current callers only\n // use it on values already known to be nonzero; 0 has no inverse in GF(2^8).\n inv(x) {\n if (x === 0)\n throw new Error(`GF.inverse: invalid arg=${x}`);\n return GF.tables.exp[255 - GF.tables.log[x]];\n },\n // Canonicalize coefficient arrays by trimming leading zero coefficients\n // while preserving `[0]` as the zero polynomial; already-normalized inputs\n // are returned by reference.\n polynomial(poly) {\n if (poly.length == 0)\n throw new Error('GF.polymomial: invalid length');\n if (poly[0] !== 0)\n return poly;\n // Strip leading zeros\n let i = 0;\n for (; i < poly.length - 1 && poly[i] == 0; i++)\n ;\n return poly.slice(i);\n },\n // Represent c*x^degree in the descending-power coefficient layout used\n // by the QR Reed-Solomon helpers; coefficient 0 canonicalizes to `[0]`.\n monomial(degree, coefficient) {\n if (degree < 0)\n throw new Error(`GF.monomial: invalid degree=${degree}`);\n if (coefficient == 0)\n return [0];\n let coefficients = fillArr(degree + 1, 0);\n coefficients[0] = coefficient;\n return GF.polynomial(coefficients);\n },\n // Canonical polynomials keep the highest-order coefficient first and use\n // `[0]` for zero, so degree is just `length - 1`.\n degree: (a) => a.length - 1,\n // Read the coefficient for x^degree from the descending-power array layout.\n // Canonical arrays make this a direct index; out-of-range degrees return `undefined`.\n coefficient: (a, degree) => a[GF.degree(a) - degree],\n // Multiply descending-power coefficient arrays by convolution over GF(2^8).\n // Zero short-circuits here before the log-based field multiply is consulted.\n mulPoly(a, b) {\n if (a[0] === 0 || b[0] === 0)\n return [0];\n const res = fillArr(a.length + b.length - 1, 0);\n for (let i = 0; i < a.length; i++) {\n for (let j = 0; j < b.length; j++) {\n res[i + j] = GF.add(res[i + j], GF.mul(a[i], b[j]));\n }\n }\n return GF.polynomial(res);\n },\n // Scale every coefficient by the same field element in descending-power order.\n // Scalar 0 canonicalizes to `[0]`, and scalar 1 reuses the original array.\n mulPolyScalar(a, scalar) {\n if (scalar == 0)\n return [0];\n if (scalar == 1)\n return a;\n const res = fillArr(a.length, 0);\n for (let i = 0; i < a.length; i++)\n res[i] = GF.mul(a[i], scalar);\n return GF.polynomial(res);\n },\n // Multiply a polynomial by c*x^degree in descending-power coefficient form.\n // This scales existing coefficients, then appends trailing zero coefficients.\n mulPolyMonomial(a, degree, coefficient) {\n if (degree < 0)\n throw new Error('GF.mulPolyMonomial: invalid degree');\n if (coefficient == 0)\n return [0];\n const res = fillArr(a.length + degree, 0);\n for (let i = 0; i < a.length; i++)\n res[i] = GF.mul(a[i], coefficient);\n return GF.polynomial(res);\n },\n // Add descending-power coefficient arrays with GF(2^8) XOR on the aligned\n // suffix; `[0]` short-circuits by returning the other array unchanged.\n addPoly(a, b) {\n if (a[0] === 0)\n return b;\n if (b[0] === 0)\n return a;\n let smaller = a;\n let larger = b;\n if (smaller.length > larger.length)\n [smaller, larger] = [larger, smaller];\n let sumDiff = fillArr(larger.length, 0);\n let lengthDiff = larger.length - smaller.length;\n let s = larger.slice(0, lengthDiff);\n for (let i = 0; i < s.length; i++)\n sumDiff[i] = s[i];\n for (let i = lengthDiff; i < larger.length; i++)\n sumDiff[i] = GF.add(smaller[i - lengthDiff], larger[i]);\n return GF.polynomial(sumDiff);\n },\n // Synthetic division for monic divisors in descending-power coefficient form.\n // Callers are expected to append `divisor.length - 1` zero coefficients first.\n remainderPoly(data, divisor) {\n const out = Array.from(data);\n for (let i = 0; i < data.length - divisor.length + 1; i++) {\n const elm = out[i];\n if (elm === 0)\n continue;\n for (let j = 1; j < divisor.length; j++) {\n if (divisor[j] !== 0)\n out[i + j] = GF.add(out[i + j], GF.mul(divisor[j], elm));\n }\n }\n return out.slice(data.length - divisor.length + 1, out.length);\n },\n // Build Annex A's monic generator polynomial g_n(x) = Π(x - 2^i).\n // degree=0 returns `[1]`; callers are expected to validate degree bounds.\n divisorPoly(degree) {\n let g = [1];\n for (let i = 0; i < degree; i++)\n g = GF.mulPoly(g, [1, GF.pow(2, i)]);\n return g;\n },\n // Evaluate a descending-power coefficient array at `a` with Horner's rule.\n // The `a == 0` fast-path returns the x^0 coefficient directly.\n evalPoly(poly, a) {\n if (a == 0)\n return GF.coefficient(poly, 0); // Just return the x^0 coefficient\n let res = poly[0];\n for (let i = 1; i < poly.length; i++)\n res = GF.add(GF.mul(a, res), poly[i]);\n return res;\n },\n // TODO: cleanup\n // Extended Euclidean RS step: derive the locator/evaluator pair from x^R\n // and the syndrome polynomial, then normalize sigma(0) to 1.\n euclidian(a, b, R) {\n // Force degree(a) >= degree(b)\n if (GF.degree(a) < GF.degree(b))\n [a, b] = [b, a];\n let rLast = a;\n let r = b;\n let tLast = [0];\n let t = [1];\n // while degree of Ri ≥ t/2\n while (2 * GF.degree(r) >= R) {\n let rLastLast = rLast;\n let tLastLast = tLast;\n rLast = r;\n tLast = t;\n if (rLast[0] === 0)\n throw new Error('rLast[0] === 0');\n r = rLastLast;\n let q = [0];\n const dltInverse = GF.inv(rLast[0]);\n while (GF.degree(r) >= GF.degree(rLast) && r[0] !== 0) {\n const degreeDiff = GF.degree(r) - GF.degree(rLast);\n const scale = GF.mul(r[0], dltInverse);\n q = GF.addPoly(q, GF.monomial(degreeDiff, scale));\n r = GF.addPoly(r, GF.mulPolyMonomial(rLast, degreeDiff, scale));\n }\n q = GF.mulPoly(q, tLast);\n t = GF.addPoly(q, tLastLast);\n if (GF.degree(r) >= GF.degree(rLast))\n throw new Error(`Division failed r: ${r}, rLast: ${rLast}`);\n }\n const sigmaTildeAtZero = GF.coefficient(t, 0);\n if (sigmaTildeAtZero == 0)\n throw new Error('sigmaTilde(0) was zero');\n const inverse = GF.inv(sigmaTildeAtZero);\n return [GF.mulPolyScalar(t, inverse), GF.mulPolyScalar(r, inverse)];\n },\n};\n// Per-block Reed-Solomon coder: encode emits only the parity bytes for one\n// data block, while decode expects data+parity bytes and returns the corrected full block.\nfunction RS(eccWords) {\n return {\n encode(from) {\n const d = GF.divisorPoly(eccWords);\n const pol = Array.from(from);\n pol.push(...d.slice(0, -1).fill(0));\n return Uint8Array.from(GF.remainderPoly(pol, d));\n },\n decode(to) {\n const res = to.slice();\n const poly = GF.polynomial(Array.from(to));\n // Find errors\n let syndrome = fillArr(eccWords, 0);\n let hasError = false;\n for (let i = 0; i < eccWords; i++) {\n const evl = GF.evalPoly(poly, GF.exp(i));\n syndrome[syndrome.length - 1 - i] = evl;\n if (evl !== 0)\n hasError = true;\n }\n if (!hasError)\n return res;\n syndrome = GF.polynomial(syndrome);\n const monomial = GF.monomial(eccWords, 1);\n const [errorLocator, errorEvaluator] = GF.euclidian(monomial, syndrome, eccWords);\n // Error locations\n const locations = fillArr(GF.degree(errorLocator), 0);\n let e = 0;\n for (let i = 1; i < 256 && e < locations.length; i++) {\n if (GF.evalPoly(errorLocator, i) === 0)\n locations[e++] = GF.inv(i);\n }\n if (e !== locations.length)\n throw new Error('RS.decode: invalid errors number');\n for (let i = 0; i < locations.length; i++) {\n const pos = res.length - 1 - GF.log(locations[i]);\n if (pos < 0)\n throw new Error('RS.decode: invalid error location');\n const xiInverse = GF.inv(locations[i]);\n let denominator = 1;\n for (let j = 0; j < locations.length; j++) {\n if (i === j)\n continue;\n denominator = GF.mul(denominator, GF.add(1, GF.mul(locations[j], xiInverse)));\n }\n res[pos] = GF.add(res[pos], GF.mul(GF.evalPoly(errorEvaluator, xiInverse), GF.inv(denominator)));\n }\n return res;\n },\n };\n}\n// Interleaves blocks\n// QR block interleaver / deinterleaver. Shorter data blocks stay first so\n// encode matches ISO/IEC 18004 §7.6 c) and decode can reverse it via §12 z)1.\nfunction interleave(ver, ecc) {\n const { words, shortBlocks, numBlocks, blockLen, total } = info.capacity(ver, ecc);\n const rs = RS(words);\n return {\n encode(bytes) {\n // Caller must pass exactly the data codewords for this version/ecc;\n // this helper only splits blocks and interleaves them with RS parity.\n // Add error correction to bytes\n const blocks = [];\n const eccBlocks = [];\n for (let i = 0; i < numBlocks; i++) {\n const isShort = i < shortBlocks;\n const len = blockLen + (isShort ? 0 : 1);\n blocks.push(bytes.subarray(0, len));\n eccBlocks.push(rs.encode(bytes.subarray(0, len)));\n bytes = bytes.subarray(len);\n }\n const resBlocks = interleaveBytes(blocks);\n const resECC = interleaveBytes(eccBlocks);\n const res = new Uint8Array(resBlocks.length + resECC.length);\n res.set(resBlocks);\n res.set(resECC, resBlocks.length);\n return res;\n },\n decode(data) {\n if (data.length !== total)\n throw new Error(`interleave.decode: len(data)=${data.length}, total=${total}`);\n const blocks = [];\n for (let i = 0; i < numBlocks; i++) {\n const isShort = i < shortBlocks;\n blocks.push(new Uint8Array(words + blockLen + (isShort ? 0 : 1)));\n }\n // Short blocks\n let pos = 0;\n for (let i = 0; i < blockLen; i++) {\n for (let j = 0; j < numBlocks; j++)\n blocks[j][i] = data[pos++];\n }\n // Long blocks\n for (let j = shortBlocks; j < numBlocks; j++)\n blocks[j][blockLen] = data[pos++];\n // ECC\n for (let i = blockLen; i < blockLen + words; i++) {\n for (let j = 0; j < numBlocks; j++) {\n const isShort = j < shortBlocks;\n blocks[j][i + (isShort ? 0 : 1)] = data[pos++];\n }\n }\n // Decode\n // Error-correct and copy data blocks together into a stream of bytes\n const res = [];\n for (const block of blocks)\n res.push(...Array.from(rs.decode(block)).slice(0, -words));\n return Uint8Array.from(res);\n },\n };\n}\n// Draw\n// Generic template per version+ecc+mask. Can be cached, to speedup calculations.\n// Function-pattern template plus reserved format/version areas; data modules\n// are filled later by zigzag placement in `drawQR`.\nfunction drawTemplate(ver, ecc, maskIdx, test = false) {\n const size = info.size.encode(ver);\n let b = new Bitmap(size + 2);\n // Finder patterns\n // We draw full pattern and later slice, since before addition of borders finder is truncated by one pixel on sides\n const finder = new Bitmap(3).rect(0, 3, true).border(1, false).border(1, true).border(1, false);\n b = b\n .embed(0, finder) // top left\n .embed({ x: -finder.width, y: 0 }, finder) // top right\n .embed({ x: 0, y: -finder.height }, finder); // bottom left\n b = b.rectSlice(1, size);\n // Alignment patterns\n const align = new Bitmap(1).rect(0, 1, true).border(1, false).border(1, true);\n const alignPos = info.alignmentPatterns(ver);\n for (const y of alignPos) {\n for (const x of alignPos) {\n if (b.isDefined(x, y))\n continue;\n b.embed({ x: x - 2, y: y - 2 }, align); // center of pattern should be at position\n }\n }\n // Timing patterns\n b = b\n .hLine({ x: 0, y: 6 }, Infinity, ({ x }) => (b.isDefined(x, 6) ? undefined : x % 2 == 0))\n .vLine({ x: 6, y: 0 }, Infinity, ({ y }) => (b.isDefined(6, y) ? undefined : y % 2 == 0));\n // Format information\n {\n const bits = info.formatBits(ecc, maskIdx);\n const getBit = (i) => !test && ((bits >> i) & 1) == 1;\n // vertical\n for (let i = 0; i < 6; i++)\n b.set(8, i, getBit(i)); // right of top-left finder\n // TODO: re-write as lines, like:\n // b.vLine({ x: 8, y: 0 }, 6, ({ x, y }) => getBit(y));\n for (let i = 6; i < 8; i++)\n b.set(8, i + 1, getBit(i)); // after timing pattern\n for (let i = 8; i < 15; i++)\n b.set(8, size - 15 + i, getBit(i)); // right of bottom-left finder\n // horizontal\n for (let i = 0; i < 8; i++)\n b.set(size - i - 1, 8, getBit(i)); // under top-right finder\n for (let i = 8; i < 9; i++)\n b.set(15 - i - 1 + 1, 8, getBit(i)); // VVV, after timing\n for (let i = 9; i < 15; i++)\n b.set(15 - i - 1, 8, getBit(i)); // under top-left finder\n b.set(8, size - 8, !test); // bottom-left finder, right\n }\n // Version information\n if (ver >= 7) {\n const bits = info.versionBits(ver);\n for (let i = 0; i < 18; i += 1) {\n const bit = !test && ((bits >> i) & 1) == 1;\n const x = Math.floor(i / 3);\n const y = (i % 3) + size - 8 - 3;\n // two copies\n b.set(y, x, bit);\n b.set(x, y, bit);\n }\n }\n return b;\n}\n// Walk undefined data modules in the QR two-column zigzag order from the\n// lower right, skipping function patterns and the vertical timing column.\nfunction zigzag(tpl, maskIdx, fn) {\n const bm = tpl;\n const size = bm.height;\n const pattern = PATTERNS[maskIdx];\n // zig-zag pattern\n let dir = -1;\n let y = size - 1;\n // two columns at time\n for (let xOffset = size - 1; xOffset > 0; xOffset -= 2) {\n if (xOffset == 6)\n xOffset = 5; // skip vertical timing pattern\n for (;; y += dir) {\n for (let j = 0; j < 2; j += 1) {\n const x = xOffset - j;\n if (bm.isDefined(x, y))\n continue; // skip already written elements\n fn(x, y, pattern(x, y));\n }\n if (y + dir < 0 || y + dir >= size)\n break;\n }\n dir = -dir; // change direction\n }\n}\n// NOTE: byte encoding is just representation, QR works with strings only. Most decoders will fail on raw byte array,\n// since they expect unicode or other text encoding inside bytes\n// Auto-pick among the currently supported single-segment modes only.\n// Empty strings stay numeric, and any non-alphanumeric character falls back to byte.\nfunction detectType(str) {\n let type = 'numeric';\n for (let x of str) {\n if (info.alphabet.numeric.has(x))\n continue;\n type = 'alphanumeric';\n if (!info.alphabet.alphanumerc.has(x))\n return 'byte';\n }\n return type;\n}\n/**\n * Encode a string as UTF-8 bytes.\n * @param str - Text to encode into UTF-8.\n * @returns UTF-8 bytes for the provided string.\n * @throws If the input is not a string. {@link Error}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * const bytes = utf8ToBytes('abc'); // new Uint8Array([97, 98, 99])\n * ```\n */\n// ISO/IEC 18004:2024 §7.3.2 says QR's default interpretation is\n// \"ECI 000003 representing the ISO/IEC 8859-1 character set\"; §7.4.2 says\n// non-default initial ECI data starts with an ECI header. Keep UTF-8 bytes\n// without that header for compatibility with existing emoji/qrcode fixtures.\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Build one QR mode/count/data segment, then append the terminator, zero padding,\n// and alternating pad codewords before RS interleaving.\nfunction encode(ver, ecc, data, type, encoder = utf8ToBytes) {\n let encoded = '';\n let dataLen = data.length;\n if (type === 'numeric') {\n const t = info.alphabet.numeric.decode(data.split(''));\n const n = t.length;\n for (let i = 0; i < n - 2; i += 3)\n encoded += bin(t[i] * 100 + t[i + 1] * 10 + t[i + 2], 10);\n if (n % 3 === 1) {\n encoded += bin(t[n - 1], 4);\n }\n else if (n % 3 === 2) {\n encoded += bin(t[n - 2] * 10 + t[n - 1], 7);\n }\n }\n else if (type === 'alphanumeric') {\n const t = info.alphabet.alphanumerc.decode(data.split(''));\n const n = t.length;\n for (let i = 0; i < n - 1; i += 2)\n encoded += bin(t[i] * 45 + t[i + 1], 11);\n if (n % 2 == 1)\n encoded += bin(t[n - 1], 6); // pad if odd number of chars\n }\n else if (type === 'byte') {\n // The default encoder is intentionally UTF-8-without-ECI; see utf8ToBytes().\n const utf8 = encoder(data);\n dataLen = utf8.length;\n encoded = Array.from(utf8)\n .map((i) => bin(i, 8))\n .join('');\n }\n else {\n throw new Error('encode: unsupported type');\n }\n const { capacity } = info.capacity(ver, ecc);\n const len = bin(dataLen, info.lengthBits(ver, type));\n let bits = info.modeBits[type] + len + encoded;\n if (bits.length > capacity)\n throw new Error('Capacity overflow');\n // Terminator\n bits += '0'.repeat(Math.min(4, Math.max(0, capacity - bits.length)));\n // Pad bits string untill full byte\n if (bits.length % 8)\n bits += '0'.repeat(8 - (bits.length % 8));\n // Add padding until capacity is full\n const padding = '1110110000010001';\n for (let idx = 0; bits.length !== capacity; idx++)\n bits += padding[idx % padding.length];\n // Convert a bitstring to array of bytes\n const bytes = Uint8Array.from(bits.match(/(.{8})/g).map((i) => Number(`0b${i}`)));\n return interleave(ver, ecc).encode(bytes);\n}\n// DRAW\n// Stream interleaved codeword bits MSB-first through zigzag; any leftover\n// cells after the final codeword become zero-valued remainder bits before masking.\nfunction drawQR(ver, ecc, data, maskIdx, test = false) {\n const b = drawTemplate(ver, ecc, maskIdx, test);\n let i = 0;\n const need = 8 * data.length;\n zigzag(b, maskIdx, (x, y, mask) => {\n let value = false;\n if (i < need) {\n value = ((data[i >>> 3] >> ((7 - i) & 7)) & 1) !== 0;\n i++;\n }\n b.set(x, y, value !== mask); // !== as xor\n });\n if (i !== need)\n throw new Error('QR: bytes left after draw');\n return b;\n}\n// Pack a left-to-right row pattern for `Bitmap.countPatternInRow()`; keep the\n// explicit width because leading light modules vanish from the numeric value.\nconst mkPattern = (pattern) => {\n const s = pattern.map((i) => (i ? '1' : '0')).join('');\n return { len: s.length, n: Number(`0b${s}`) };\n};\n// 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column, preceded or followed by light area 4 modules wide\nconst finderPattern = [true, false, true, true, true, false, true]; // dark:light:dark:light:dark\nconst lightPattern = [false, false, false, false]; // light area 4 modules wide\nconst P1 = /* @__PURE__ */ (() => mkPattern([...finderPattern, ...lightPattern]))();\nconst P2 = /* @__PURE__ */ (() => mkPattern([...lightPattern, ...finderPattern]))();\nfunction penalty(bm) {\n const b = bm;\n const { width, height } = b;\n const transposed = b.transpose();\n // Adjacent modules in row/column in same | No. of modules = (5 + i) color\n let adjacent = 0;\n for (let y = 0; y < height; y++) {\n b.getRuns(y, (len) => {\n if (len >= 5)\n adjacent += 3 + (len - 5);\n });\n }\n for (let y = 0; y < width; y++) {\n transposed.getRuns(y, (len) => {\n if (len >= 5)\n adjacent += 3 + (len - 5);\n });\n }\n // Block of modules in same color (Block size = 2x2)\n let box = 0;\n for (let y = 0; y < height - 1; y++)\n box += 3 * b.countBoxes2x2(y);\n let finder = 0;\n for (let y = 0; y < height; y++)\n finder += 40 * b.countPatternInRow(y, P1.len, P1.n, P2.n);\n for (let y = 0; y < width; y++)\n finder += 40 * transposed.countPatternInRow(y, P1.len, P1.n, P2.n);\n const total = height * width;\n const darkPixels = b.popcnt();\n // ISO/IEC 18004:2024 §7.8.3.1 NOTE 4 assigns \"0 points\" when the dark ratio\n // is \"between 45 % and 55 %\"; subtract that first 5% deviation band before\n // rating further 5% steps, so exact 45/55 and 40/60 boundaries stay in-band.\n const darkSteps = Math.ceil(Math.max(0, Math.abs(darkPixels * 100 - total * 50) - total * 5) / (total * 5));\n const dark = 10 * darkSteps;\n return adjacent + box + finder + dark;\n}\n// Selects best mask according to penalty, if no mask is provided\nfunction drawQRBest(ver, ecc, data, maskIdx) {\n if (maskIdx === undefined) {\n const bestMask = best();\n // ISO/IEC 18004:2024 §7.8.3.1 says mask penalty area is \"the complete symbol\",\n // but python-qrcode scores this placeholder form. Keep that output for compatibility\n // with common QR generators and to avoid fingerprinting this implementation.\n for (let mask = 0; mask < PATTERNS.length; mask++)\n bestMask.add(penalty(drawQR(ver, ecc, data, mask, true)), mask);\n maskIdx = bestMask.get();\n }\n if (maskIdx === undefined)\n throw new Error('Cannot find mask'); // Should never happen\n return drawQR(ver, ecc, data, maskIdx);\n}\nfunction validateECC(ec) {\n if (!ECMode.includes(ec))\n throw new Error(`Invalid error correction mode=${ec}. Expected: ${ECMode}`);\n}\nfunction validateEncoding(enc) {\n if (!Encoding.includes(enc))\n throw new Error(`Encoding: invalid mode=${enc}. Expected: ${Encoding}`);\n if (enc === 'kanji' || enc === 'eci')\n throw new Error(`Encoding: ${enc} is not supported (yet?).`);\n}\nfunction validateMask(mask) {\n if (![0, 1, 2, 3, 4, 5, 6, 7].includes(mask) || !PATTERNS[mask])\n throw new Error(`Invalid mask=${mask}. Expected number [0..7]`);\n}\nexport function encodeQR(text, output = 'raw', opts = {}) {\n const _opts = opts;\n const ecc = _opts.ecc !== undefined ? _opts.ecc : 'medium';\n validateECC(ecc);\n const encoding = _opts.encoding !== undefined ? _opts.encoding : detectType(text);\n validateEncoding(encoding);\n if (_opts.mask !== undefined)\n validateMask(_opts.mask);\n let ver = _opts.version;\n let data, err = new Error('Unknown error');\n if (ver !== undefined) {\n validateVersion(ver);\n data = encode(ver, ecc, text, encoding, _opts.textEncoder);\n }\n else {\n // If no version is provided, try to find smallest one which fits\n // Currently just scans all version, can be significantly speedup if needed\n for (let i = 1; i <= 40; i++) {\n try {\n data = encode(i, ecc, text, encoding, _opts.textEncoder);\n ver = i;\n break;\n }\n catch (e) {\n err = e;\n }\n }\n }\n if (!ver || !data)\n throw err;\n let res = drawQRBest(ver, ecc, data, _opts.mask);\n res.assertDrawn();\n // ISO/IEC 18004:2024 §5.3.8 says a QR quiet zone's \"width shall be 4X\",\n // and §9.1 requires 4X \"on all four sides\". Keep the compact historical\n // 2-module default to avoid changing encoder output; callers that need a\n // standards-conformant quiet zone must pass `border: 4` explicitly.\n const border = _opts.border === undefined ? 2 : _opts.border;\n if (!Number.isSafeInteger(border) || border <= 0)\n throw new Error(`invalid border=${border}`);\n res = res.border(border, false); // Add border\n if (_opts.scale !== undefined)\n res = res.scale(_opts.scale); // Scale image\n if (output === 'raw')\n return res.toRaw();\n else if (output === 'ascii')\n return res.toASCII();\n else if (output === 'svg')\n return res.toSVG(_opts.optimize);\n else if (output === 'gif')\n return res.toGIF();\n else if (output === 'term')\n return res.toTerm();\n else\n throw new Error(`Unknown output: ${output}`);\n}\n/**\n * Default export alias for {@link encodeQR}.\n * @param text - Text payload that should be encoded into the QR symbol.\n * @param output - Output format to generate: raw matrix, ASCII, terminal ANSI, GIF, or SVG.\n * @param opts - Encoding and rendering options. See {@link QrOpts} and {@link SvgQrOpts}.\n * @returns Encoded QR data in the format selected by `output`.\n * @throws If the payload, options, QR capacity, or output format are invalid. {@link Error}\n * @example\n * Encode text into the default export from the package root.\n * ```ts\n * import encodeQR from 'qr';\n * encodeQR('Hello world', 'ascii');\n * ```\n */\nexport default encodeQR;\n/**\n * Low-level helpers used by the encoder and test suite.\n * Exports the shared helper tables/functions through a frozen container.\n * @example\n * Read low-level QR metadata tables.\n * ```ts\n * import { utils } from 'qr';\n * const size = utils.info.size.encode(1); // 21\n * ```\n */\nexport const utils = /* @__PURE__ */ Object.freeze({\n best,\n bin,\n popcnt,\n drawTemplate,\n fillArr,\n info,\n interleave,\n validateVersion,\n zigzag,\n});\n// Unsafe API utils, exported only for tests\n// Exposes the shared internal helpers/tables through a frozen container.\nexport const _tests = /* @__PURE__ */ Object.freeze({\n Bitmap,\n info,\n detectType,\n encode,\n drawQR,\n penalty,\n PATTERNS,\n});\n// Type tests\n// const o1 = qr('test', 'ascii');\n// const o2 = qr('test', 'raw');\n// const o3 = qr('test', 'gif');\n// const o4 = qr('test', 'svg');\n// const o5 = qr('test', 'term');\n//# sourceMappingURL=index.js.map","export const copyToClipboard = async (text: string): Promise<boolean> => {\n if (!text) return false;\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n\n return true;\n }\n }\n catch (error) {\n console.error(\"Failed to copy to clipboard\", error);\n }\n\n try {\n const textArea = document.createElement(\"textarea\");\n\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.append(textArea);\n textArea.focus();\n textArea.select();\n const result = document.execCommand(\"copy\");\n\n textArea.remove();\n\n return result;\n }\n catch {\n return false;\n }\n};\n","import { encodeQR } from \"qr\";\nimport { Show } from \"solid-js\";\n\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\n\nconst generateQRCode = (uriValue: string) => encodeQR(uriValue, \"svg\", { optimize: true, encoding: \"byte\", border: 2 });\n\nexport const HandshakeOpen = () => {\n const { t } = useTranslation();\n const { uri } = useSession();\n\n const handleCopy = () => {\n const sessionUri = uri();\n\n if (sessionUri) {\n copyToClipboard(sessionUri);\n }\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 px-2\">\n <div class=\"w-full space-y-4 rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-card-background) p-4\">\n <Show when={uri()}>\n {sessionUri => (\n <div class=\"relative mx-auto flex w-fit items-center justify-center rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-qr-background) p-2\">\n <button\n type=\"button\"\n class=\"h-[200px] w-[200px] cursor-pointer rounded bg-(--lv-qr-background) text-(--lv-qr-color)\"\n onClick={handleCopy}\n title={String(t(\"handshake.clickToCopyUrl\"))}\n innerHTML={generateQRCode(sessionUri())}\n />\n </div>\n )}\n </Show>\n\n <div class=\"w-full\">\n <button\n type=\"button\"\n onClick={handleCopy}\n class=\"w-full cursor-pointer rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-4 py-2 text-sm text-(--lv-text-primary) transition hover:bg-(--lv-control-button-secondary-hoverBackground) active:bg-(--lv-control-button-secondary-activeBackground)\"\n >\n {t(\"handshake.copyConnectionUrl\")}\n </button>\n </div>\n </div>\n <div class=\"w-full text-sm text-(--lv-text-secondary)\">\n <span>{t(\"handshake.scanCodeInstruction\")}</span>\n </div>\n </div>\n );\n};\n","import { SESSION_STATE } from \"@openlv/session\";\nimport { Match, Switch } from \"solid-js\";\n\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\nimport { HandshakeOpen } from \"./HandshakeOpen.jsx\";\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const Connecting = () => {\n const { status } = useSession();\n const { t } = useTranslation();\n\n return (\n <div>\n <Switch>\n <Match when={([SESSION_STATE.CREATED, SESSION_STATE.SIGNALING] as string[]).includes(status()?.status ?? \"\")}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connecting\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.waitingForNetwork\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={status()?.status === SESSION_STATE.READY}>\n <HandshakeOpen />\n </Match>\n <Match when={status()?.status === SESSION_STATE.LINKING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.establishingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.mayTakeFewSeconds\")}\n </p>\n </div>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\n\n/**\n * Shown when a session fails to establish. Special-cases the \"no local ICE\n * candidates\" transport failure, since that one has a concrete user-side\n * remedy (WebRTC disabled/blocked by the browser, an extension, or a VPN).\n */\nexport const ErrorScreen = (props: { onClose: () => void; }) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const reason = createMemo(\n () => provider.getState().error ?? provider.getState().session?.error,\n );\n const isIceFailure = createMemo(() =>\n /ice candidates/i.test(reason() ?? \"\"));\n\n const message = createMemo(() => {\n if (isIceFailure()) return t(\"connectionFlow.errorNoIce\");\n\n return reason() ?? t(\"connectionFlow.errorGeneric\");\n });\n\n const retry = () => {\n // Back to the disconnected view so the user can generate a fresh QR.\n void provider.closeSession();\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">⚠️</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectionFailed\")}\n </h3>\n <p class=\"mb-2 text-(--lv-text-muted) text-sm\">{message()}</p>\n </div>\n <div class=\"flex w-full flex-col gap-2\">\n <button\n type=\"button\"\n onClick={retry}\n class=\"w-full rounded-lg bg-(--lv-control-button-primary-background) px-4 py-2 font-semibold text-(--lv-control-button-primary-color, var(--lv-text-primary)) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"connectionFlow.tryAgain\")}\n </button>\n <button\n type=\"button\"\n onClick={props.onClose}\n class=\"w-full rounded-lg bg-(--lv-control-button-secondary-background) px-4 py-2 font-semibold text-(--lv-text-primary) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"common.close\")}\n </button>\n </div>\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport {\n createSignal,\n Match,\n onCleanup,\n onMount,\n Show,\n Switch,\n} from \"solid-js\";\n\nimport { UnknownState } from \"../components/UnknownState.js\";\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Connecting } from \"./connecting.jsx\";\nimport { ErrorScreen } from \"./ErrorScreen.jsx\";\n\ninterface ConnectionFlowProps {\n onClose: () => void;\n onCopy: (uri: string) => void;\n}\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const ConnectionFlow = (props: ConnectionFlowProps) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n // Peer info is recorded during the handshake, so it is in the session\n // state by the time the status flips to CONNECTED and this re-evaluates.\n const peerInfo = () => provider.getSession()?.getState().peerInfo;\n // The wire only bounds the icon's size — vetting what goes into an\n // <img src> is this renderer's job.\n const renderableIcon = () => {\n const icon = peerInfo()?.icon;\n\n return icon && (icon.startsWith(\"data:image/\") || icon.startsWith(\"https://\"))\n ? icon\n : undefined;\n };\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n return (\n <div style={{ \"view-transition-name\": \"connection-flow\" }} class=\"w-full\">\n <Switch fallback={<UnknownState state={providerStatus()} />}>\n <Match when={providerStatus() === PROVIDER_STATUS.CREATING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.preparingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.generatingKeys\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTING}>\n <Connecting onClose={props.onClose} />\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTED}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <Show\n when={peerInfo()}\n fallback={<div class=\"mb-4 text-4xl\">✅</div>}\n >\n {info => (\n <div class=\"mb-4 flex flex-col items-center gap-2\">\n <Show\n when={renderableIcon()}\n fallback={<div class=\"text-4xl\">✅</div>}\n >\n {icon => (\n <img\n src={icon()}\n alt=\"\"\n class=\"h-12 w-12 rounded-xl\"\n />\n )}\n </Show>\n <span class=\"font-medium text-(--lv-text-primary) text-sm\">\n {info().name}\n </span>\n </div>\n )}\n </Show>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectedSuccessfully\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.walletConnectedReady\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.ERROR}>\n <ErrorScreen onClose={props.onClose} />\n </Match>\n </Switch>\n </div>\n );\n};\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/defaultAttributes.ts\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\nvar defaultAttributes_default = defaultAttributes;\nexport {\n defaultAttributes_default as default\n};\n//# sourceMappingURL=defaultAttributes.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/Icon.tsx\nimport { For, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport defaultAttributes from \"./defaultAttributes\";\n\n// ../shared/src/utils/hasA11yProp.ts\nvar hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\n// ../shared/src/utils/mergeClasses.ts\nvar mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\n// ../shared/src/utils/toCamelCase.ts\nvar toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\n// ../shared/src/utils/toKebabCase.ts\nvar toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\n// ../shared/src/utils/toPascalCase.ts\nvar toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\n// src/Icon.tsx\nvar Icon = (props) => {\n const [localProps, rest] = splitProps(props, [\n \"color\",\n \"size\",\n \"strokeWidth\",\n \"children\",\n \"class\",\n \"name\",\n \"iconNode\",\n \"absoluteStrokeWidth\"\n ]);\n return <svg\n {...defaultAttributes}\n width={localProps.size ?? defaultAttributes.width}\n height={localProps.size ?? defaultAttributes.height}\n stroke={localProps.color ?? defaultAttributes.stroke}\n stroke-width={localProps.absoluteStrokeWidth ? Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * 24 / Number(localProps.size) : Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"])}\n class={mergeClasses(\n \"lucide\",\n \"lucide-icon\",\n ...localProps.name != null ? [\n `lucide-${toKebabCase(toPascalCase(localProps.name))}`,\n `lucide-${toKebabCase(localProps.name)}`\n ] : [],\n localProps.class != null ? localProps.class : \"\"\n )}\n aria-hidden={!localProps.children && !hasA11yProp(rest) ? \"true\" : void 0}\n {...rest}\n >\n <For each={localProps.iconNode}>\n {([elementName, attrs]) => {\n return <Dynamic\n component={elementName}\n {...attrs}\n />;\n }}\n </For>\n </svg>;\n};\nvar Icon_default = Icon;\nexport {\n Icon_default as default\n};\n//# sourceMappingURL=Icon.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-left.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nvar ChevronLeft = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-left\" />;\nvar chevron_left_default = ChevronLeft;\nexport {\n chevron_left_default as default\n};\n//# sourceMappingURL=chevron-left.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-right.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nvar ChevronRight = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-right\" />;\nvar chevron_right_default = ChevronRight;\nexport {\n chevron_right_default as default\n};\n//# sourceMappingURL=chevron-right.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/circle-question-mark.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nvar CircleQuestionMark = (props) => <Icon {...props} iconNode={iconNode} name=\"circle-question-mark\" />;\nvar circle_question_mark_default = CircleQuestionMark;\nexport {\n circle_question_mark_default as default\n};\n//# sourceMappingURL=circle-question-mark.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/plus.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nvar Plus = (props) => <Icon {...props} iconNode={iconNode} name=\"plus\" />;\nvar plus_default = Plus;\nexport {\n plus_default as default\n};\n//# sourceMappingURL=plus.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/qr-code.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n];\nvar QrCode = (props) => <Icon {...props} iconNode={iconNode} name=\"qr-code\" />;\nvar qr_code_default = QrCode;\nexport {\n qr_code_default as default\n};\n//# sourceMappingURL=qr-code.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/settings.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nvar Settings = (props) => <Icon {...props} iconNode={iconNode} name=\"settings\" />;\nvar settings_default = Settings;\nexport {\n settings_default as default\n};\n//# sourceMappingURL=settings.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/trash-2.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nvar Trash2 = (props) => <Icon {...props} iconNode={iconNode} name=\"trash-2\" />;\nvar trash_2_default = Trash2;\nexport {\n trash_2_default as default\n};\n//# sourceMappingURL=trash-2.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/x.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nvar X = (props) => <Icon {...props} iconNode={iconNode} name=\"x\" />;\nvar x_default = X;\nexport {\n x_default as default\n};\n//# sourceMappingURL=x.jsx.map\n","// src/utils.js\nvar SPACE_REGEX = /\\s+/g;\nvar removeExtraSpaces = (str) => {\n if (typeof str !== \"string\" || !str) return str;\n return str.replace(SPACE_REGEX, \" \").trim();\n};\nvar cx = (...classnames) => {\n const classList = [];\n const buildClassString = (input) => {\n if (!input && input !== 0 && input !== 0n) return;\n if (Array.isArray(input)) {\n for (let i = 0, len = input.length; i < len; i++) buildClassString(input[i]);\n return;\n }\n const type = typeof input;\n if (type === \"string\" || type === \"number\" || type === \"bigint\") {\n if (type === \"number\" && input !== input) return;\n classList.push(String(input));\n } else if (type === \"object\") {\n const keys = Object.keys(input);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (input[key]) classList.push(key);\n }\n }\n };\n for (let i = 0, len = classnames.length; i < len; i++) {\n const c = classnames[i];\n if (c !== null && c !== void 0) buildClassString(c);\n }\n return classList.length > 0 ? removeExtraSpaces(classList.join(\" \")) : void 0;\n};\nvar falsyToString = (value) => value === false ? \"false\" : value === true ? \"true\" : value === 0 ? \"0\" : value;\nvar isEmptyObject = (obj) => {\n if (!obj || typeof obj !== \"object\") return true;\n for (const _ in obj) return false;\n return true;\n};\nvar isEqual = (obj1, obj2) => {\n if (obj1 === obj2) return true;\n if (!obj1 || !obj2) return false;\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n for (let i = 0; i < keys1.length; i++) {\n const key = keys1[i];\n if (!keys2.includes(key)) return false;\n if (obj1[key] !== obj2[key]) return false;\n }\n return true;\n};\nvar isBoolean = (value) => value === true || value === false;\nvar joinObjects = (obj1, obj2) => {\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const val2 = obj2[key];\n if (key in obj1) {\n obj1[key] = cx(obj1[key], val2);\n } else {\n obj1[key] = val2;\n }\n }\n }\n return obj1;\n};\nvar flat = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i];\n if (Array.isArray(el)) flat(el, target);\n else if (el) target.push(el);\n }\n};\nfunction flatArray(arr) {\n const flattened = [];\n flat(arr, flattened);\n return flattened;\n}\nvar flatMergeArrays = (...arrays) => {\n const result = [];\n flat(arrays, result);\n const filtered = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i]) filtered.push(result[i]);\n }\n return filtered;\n};\nvar mergeObjects = (obj1, obj2) => {\n const result = {};\n for (const key in obj1) {\n const val1 = obj1[key];\n if (key in obj2) {\n const val2 = obj2[key];\n if (Array.isArray(val1) || Array.isArray(val2)) {\n result[key] = flatMergeArrays(val2, val1);\n } else if (typeof val1 === \"object\" && typeof val2 === \"object\" && val1 && val2) {\n result[key] = mergeObjects(val1, val2);\n } else {\n result[key] = val2 + \" \" + val1;\n }\n } else {\n result[key] = val1;\n }\n }\n for (const key in obj2) {\n if (!(key in obj1)) {\n result[key] = obj2[key];\n }\n }\n return result;\n};\n\nexport { cx, falsyToString, flat, flatArray, flatMergeArrays, isBoolean, isEmptyObject, isEqual, joinObjects, mergeObjects, removeExtraSpaces };\n","import { cx, isEmptyObject, mergeObjects, isEqual, joinObjects, flatMergeArrays, falsyToString } from './chunk-LQJYWU4O.js';\n\n// src/config.js\nvar defaultConfig = {\n twMerge: true,\n twMergeConfig: {}\n};\n\n// src/state.js\nfunction createState() {\n let cachedTwMerge = null;\n let cachedTwMergeConfig = {};\n let didTwMergeConfigChange = false;\n return {\n get cachedTwMerge() {\n return cachedTwMerge;\n },\n set cachedTwMerge(value) {\n cachedTwMerge = value;\n },\n get cachedTwMergeConfig() {\n return cachedTwMergeConfig;\n },\n set cachedTwMergeConfig(value) {\n cachedTwMergeConfig = value;\n },\n get didTwMergeConfigChange() {\n return didTwMergeConfigChange;\n },\n set didTwMergeConfigChange(value) {\n didTwMergeConfigChange = value;\n },\n reset() {\n cachedTwMerge = null;\n cachedTwMergeConfig = {};\n didTwMergeConfigChange = false;\n }\n };\n}\nvar state = createState();\n\n// src/core.js\nvar getTailwindVariants = (cn) => {\n const tv = (options, configProp) => {\n const {\n extend = null,\n slots: slotProps = {},\n variants: variantsProps = {},\n compoundVariants: compoundVariantsProps = [],\n compoundSlots = [],\n defaultVariants: defaultVariantsProps = {}\n } = options;\n const config = { ...defaultConfig, ...configProp };\n const base = extend?.base ? cx(extend.base, options?.base) : options?.base;\n const variants = extend?.variants && !isEmptyObject(extend.variants) ? mergeObjects(variantsProps, extend.variants) : variantsProps;\n const defaultVariants = extend?.defaultVariants && !isEmptyObject(extend.defaultVariants) ? { ...extend.defaultVariants, ...defaultVariantsProps } : defaultVariantsProps;\n if (!isEmptyObject(config.twMergeConfig) && !isEqual(config.twMergeConfig, state.cachedTwMergeConfig)) {\n state.didTwMergeConfigChange = true;\n state.cachedTwMergeConfig = config.twMergeConfig;\n }\n const isExtendedSlotsEmpty = isEmptyObject(extend?.slots);\n const componentSlots = !isEmptyObject(slotProps) ? {\n // add \"base\" to the slots object\n base: cx(options?.base, isExtendedSlotsEmpty && extend?.base),\n ...slotProps\n } : {};\n const slots = isExtendedSlotsEmpty ? componentSlots : joinObjects(\n { ...extend?.slots },\n isEmptyObject(componentSlots) ? { base: options?.base } : componentSlots\n );\n const compoundVariants = isEmptyObject(extend?.compoundVariants) ? compoundVariantsProps : flatMergeArrays(extend?.compoundVariants, compoundVariantsProps);\n const component = (props) => {\n if (isEmptyObject(variants) && isEmptyObject(slotProps) && isExtendedSlotsEmpty) {\n return cn(base, props?.class, props?.className)(config);\n }\n if (compoundVariants && !Array.isArray(compoundVariants)) {\n throw new TypeError(\n `The \"compoundVariants\" prop must be an array. Received: ${typeof compoundVariants}`\n );\n }\n if (compoundSlots && !Array.isArray(compoundSlots)) {\n throw new TypeError(\n `The \"compoundSlots\" prop must be an array. Received: ${typeof compoundSlots}`\n );\n }\n const getVariantValue = (variant, vrs = variants, _slotKey = null, slotProps2 = null) => {\n const variantObj = vrs[variant];\n if (!variantObj || isEmptyObject(variantObj)) {\n return null;\n }\n const variantProp = slotProps2?.[variant] ?? props?.[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp);\n if (typeof variantKey === \"object\") {\n return null;\n }\n const defaultVariantProp = defaultVariants?.[variant];\n const key = variantKey != null ? variantKey : falsyToString(defaultVariantProp);\n const value = variantObj[key || \"false\"];\n return value;\n };\n const getVariantClassNames = () => {\n if (!variants) return null;\n const keys = Object.keys(variants);\n const result = [];\n for (let i = 0; i < keys.length; i++) {\n const value = getVariantValue(keys[i], variants);\n if (value) result.push(value);\n }\n return result;\n };\n const getVariantClassNamesBySlotKey = (slotKey, slotProps2) => {\n if (!variants || typeof variants !== \"object\") return null;\n const result = [];\n for (const variant in variants) {\n const variantValue = getVariantValue(variant, variants, slotKey, slotProps2);\n const value = slotKey === \"base\" && typeof variantValue === \"string\" ? variantValue : variantValue && variantValue[slotKey];\n if (value) result.push(value);\n }\n return result;\n };\n const propsWithoutUndefined = {};\n for (const prop in props) {\n const value = props[prop];\n if (value !== void 0) propsWithoutUndefined[prop] = value;\n }\n const getCompleteProps = (key, slotProps2) => {\n const initialProp = typeof props?.[key] === \"object\" ? {\n [key]: props[key]?.initial\n } : {};\n return {\n ...defaultVariants,\n ...propsWithoutUndefined,\n ...initialProp,\n ...slotProps2\n };\n };\n const getCompoundVariantsValue = (cv = [], slotProps2) => {\n const result = [];\n const cvLength = cv.length;\n for (let i = 0; i < cvLength; i++) {\n const { class: tvClass, className: tvClassName, ...compoundVariantOptions } = cv[i];\n let isValid = true;\n const completeProps = getCompleteProps(null, slotProps2);\n for (const key in compoundVariantOptions) {\n const value = compoundVariantOptions[key];\n const completePropsValue = completeProps[key];\n if (Array.isArray(value)) {\n if (!value.includes(completePropsValue)) {\n isValid = false;\n break;\n }\n } else {\n if ((value == null || value === false) && (completePropsValue == null || completePropsValue === false))\n continue;\n if (completePropsValue !== value) {\n isValid = false;\n break;\n }\n }\n }\n if (isValid) {\n if (tvClass) result.push(tvClass);\n if (tvClassName) result.push(tvClassName);\n }\n }\n return result;\n };\n const getCompoundVariantClassNamesBySlot = (slotProps2) => {\n const compoundClassNames = getCompoundVariantsValue(compoundVariants, slotProps2);\n if (!Array.isArray(compoundClassNames)) return compoundClassNames;\n const result = {};\n const cnFn = cn;\n for (let i = 0; i < compoundClassNames.length; i++) {\n const className = compoundClassNames[i];\n if (typeof className === \"string\") {\n result.base = cnFn(result.base, className)(config);\n } else if (typeof className === \"object\") {\n for (const slot in className) {\n result[slot] = cnFn(result[slot], className[slot])(config);\n }\n }\n }\n return result;\n };\n const getCompoundSlotClassNameBySlot = (slotProps2) => {\n if (compoundSlots.length < 1) return null;\n const result = {};\n const completeProps = getCompleteProps(null, slotProps2);\n for (let i = 0; i < compoundSlots.length; i++) {\n const {\n slots: slots2 = [],\n class: slotClass,\n className: slotClassName,\n ...slotVariants\n } = compoundSlots[i];\n if (!isEmptyObject(slotVariants)) {\n let isValid = true;\n for (const key in slotVariants) {\n const completePropsValue = completeProps[key];\n const slotVariantValue = slotVariants[key];\n if (completePropsValue === void 0 || (Array.isArray(slotVariantValue) ? !slotVariantValue.includes(completePropsValue) : slotVariantValue !== completePropsValue)) {\n isValid = false;\n break;\n }\n }\n if (!isValid) continue;\n }\n for (let j = 0; j < slots2.length; j++) {\n const slotName = slots2[j];\n if (!result[slotName]) result[slotName] = [];\n result[slotName].push([slotClass, slotClassName]);\n }\n }\n return result;\n };\n if (!isEmptyObject(slotProps) || !isExtendedSlotsEmpty) {\n const slotsFns = {};\n if (typeof slots === \"object\" && !isEmptyObject(slots)) {\n const cnFn = cn;\n for (const slotKey in slots) {\n slotsFns[slotKey] = (slotProps2) => {\n const compoundVariantClasses = getCompoundVariantClassNamesBySlot(slotProps2);\n const compoundSlotClasses = getCompoundSlotClassNameBySlot(slotProps2);\n return cnFn(\n slots[slotKey],\n getVariantClassNamesBySlotKey(slotKey, slotProps2),\n compoundVariantClasses ? compoundVariantClasses[slotKey] : void 0,\n compoundSlotClasses ? compoundSlotClasses[slotKey] : void 0,\n slotProps2?.class,\n slotProps2?.className\n )(config);\n };\n }\n }\n return slotsFns;\n }\n return cn(\n base,\n getVariantClassNames(),\n getCompoundVariantsValue(compoundVariants),\n props?.class,\n props?.className\n )(config);\n };\n const getVariantKeys = () => {\n if (!variants || typeof variants !== \"object\") return;\n return Object.keys(variants);\n };\n component.variantKeys = getVariantKeys();\n component.extend = extend;\n component.base = base;\n component.slots = slots;\n component.variants = variants;\n component.defaultVariants = defaultVariants;\n component.compoundSlots = compoundSlots;\n component.compoundVariants = compoundVariants;\n return component;\n };\n const createTV = (configProp) => {\n return (options, config) => tv(options, config ? mergeObjects(configProp, config) : configProp);\n };\n return {\n tv,\n createTV\n };\n};\n\nexport { defaultConfig, getTailwindVariants, state };\n","import { getTailwindVariants } from './chunk-RZF76H2U.js';\nexport { defaultConfig } from './chunk-RZF76H2U.js';\nimport { cx } from './chunk-LQJYWU4O.js';\nexport { cx } from './chunk-LQJYWU4O.js';\n\n// src/lite.js\nvar cnAdapter = (...classnames) => {\n return (_config) => {\n const base = cx(classnames);\n return base || void 0;\n };\n};\nvar { createTV, tv } = getTailwindVariants(cnAdapter);\n\nexport { cnAdapter as cn, cnAdapter, createTV, tv };\n","// Button implementation that also supports being an anchor tag\nimport classNames from \"classnames\";\nimport { type JSX, splitProps } from \"solid-js\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst styles = tv({\n base: \"flex items-center justify-center rounded-lg transition-all duration-100 cursor-pointer active:scale-95\",\n variants: {\n $variant: {\n primary:\n \"font-semibold text-sm bg-(--lv-control-button-primary-background) text-(--lv-control-button-primary-color) border-(--lv-control-button-primary-border) hover:bg-(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background)) active:bg-(--lv-control-button-primary-activeBackground,var(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background))) disabled:bg-(--lv-control-button-primary-disabledBackground,var(--lv-control-button-primary-background)) disabled:text-(--lv-control-button-primary-disabledColor,var(--lv-control-button-primary-color))\",\n secondary:\n \"border bg-(--lv-control-button-secondary-background) text-(--lv-control-button-secondary-color) border-(--lv-control-button-secondary-border,var(--lv-control-button-secondary-background)) hover:bg-(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background)) active:bg-(--lv-control-button-secondary-activeBackground,var(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background))) disabled:bg-(--lv-control-button-secondary-disabledBackground,var(--lv-control-button-secondary-background)) disabled:text-(--lv-control-button-secondary-disabledColor,var(--lv-control-button-secondary-color))\",\n tertiary:\n \"bg-transparent text-(--lv-text-muted) hover:bg-(--lv-control-button-tertiary-hoverBackground,transparent) active:bg-(--lv-control-button-tertiary-activeBackground,var(--lv-control-button-tertiary-hoverBackground,transparent)) disabled:text-(--lv-control-button-tertiary-disabledColor,var(--lv-text-muted))\",\n },\n $size: {\n sm: \"h-6\",\n md: \"h-8\",\n lg: \"h-11\",\n },\n $aspect: {\n square: \"aspect-square\",\n auto: \"\",\n },\n },\n defaultVariants: {\n $size: \"md\",\n $variant: \"primary\",\n $aspect: \"auto\",\n },\n});\n\nexport type ButtonButtonProps = {\n onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;\n} & JSX.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonLinkProps = {\n href: string;\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n} & JSX.AnchorHTMLAttributes<HTMLAnchorElement>;\nexport type ButtonProps = {\n children?: JSX.Element;\n class?: string;\n} & VariantProps<typeof styles> &\n(\n | ({\n href: string;\n } & ButtonLinkProps)\n | ({\n href?: undefined;\n } & ButtonButtonProps)\n );\n\nexport const Button = (rawProps: ButtonProps) => {\n const [local, props] = splitProps(rawProps, [\n \"children\",\n \"class\",\n \"$variant\",\n \"$size\",\n \"$aspect\",\n \"href\",\n \"onClick\",\n ]);\n\n if (local.href) {\n return (\n <a\n href={local.href}\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {local.children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(props as JSX.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {local.children}\n </button>\n );\n};\n","import { For } from \"solid-js\";\n\nconst dotCount = (isApple: boolean) => (isApple ? 1 : 3);\n\nconst TabletGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full justify-between\">\n <div class=\"grow py-1 ps-1\">\n <div class=\"h-full rounded-sm border border-gray-300 bg-gray-400\"></div>\n </div>\n <div class=\"flex h-full w-3 flex-col items-center justify-center gap-0.5 pr-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-500\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nconst PhoneGraphic = (props: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full flex-col justify-between\">\n <div class=\"grow px-1 pt-1\">\n <div class=\"h-full rounded-sm border border-gray-200 bg-gray-300\"></div>\n </div>\n <div class=\"flex h-3 w-full items-center justify-center gap-0.5 pb-0.5\">\n <For each={Array.from({ length: dotCount(props.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-400\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nexport const ConnectionGraphic = () => {\n // the only fingerprinting we ever do\n // is Apple device\n // const isApple =\n // navigator.userAgent.includes(\"iPhone\") ||\n // navigator.userAgent.includes(\"iPad\") ||\n // navigator.userAgent.includes(\"iPod\");\n const isApple = true;\n\n return (\n <div class=\"-space-x-4 flex items-end\">\n <div class=\"h-38 w-48 overflow-hidden rounded-lg bg-gray-300\">\n <TabletGraphic isApple={isApple} />\n </div>\n <div class=\"h-18 w-12 overflow-hidden rounded-lg bg-gray-200\">\n <PhoneGraphic isApple={isApple} />\n </div>\n </div>\n );\n};\n","import { LucideSettings } from \"lucide-solid\";\n\nimport { useSessionStart } from \"../../hooks/useSession.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\nimport { ConnectionGraphic } from \"./ConnectionGraphic.js\";\n\nexport const Disconnected = (props: { onSettings: () => void; }) => {\n const { t } = useTranslation();\n const { start } = useSessionStart();\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <ConnectionGraphic />\n <div class=\"text-center\">\n <p class=\"text-sm text-(--lv-text-secondary)\">\n {t(\"disconnected.prompt\")}\n </p>\n </div>\n <div class=\"flex items-center\">\n <Button\n type=\"button\"\n onClick={start}\n class=\"z-10 px-6 py-3\"\n $variant=\"primary\"\n $size=\"lg\"\n >\n {t(\"disconnected.generateQr\")}\n </Button>\n <Button\n type=\"button\"\n aria-label={String(t(\"disconnected.connectionSettings\"))}\n aria-pressed={false}\n onClick={props.onSettings}\n class=\"px-3 ltr:-ml-1 ltr:rounded-l-none rtl:-mr-1 rtl:rounded-r-none\"\n $aspect=\"square\"\n $size=\"lg\"\n $variant=\"secondary\"\n >\n <LucideSettings class=\"h-5 w-5 text-(--lv-text-muted)\" />\n </Button>\n </div>\n </div>\n );\n};\n","import { LucideQrCode } from \"lucide-solid\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\n\nexport const InfoScreen = () => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex flex-col space-y-2 px-4 text-start\">\n <div class=\"min-h-32 w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.scanQrCode\")}\n </div>\n <div class=\"flex justify-center items-center grow\">\n <LucideQrCode class=\"w-10 h-10\" />\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.approveOnDevice\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.youreConnected\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n </div>\n );\n};\n","import { type Accessor, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport interface PunchTransitionOptions {\n duration?: number;\n}\n\nexport const usePunchTransition = <T>(\n value: T | Accessor<T>,\n { duration = 200 }: PunchTransitionOptions = {},\n) => {\n const readValue: Accessor<T>\n = typeof value === \"function\" ? (value as Accessor<T>) : () => value;\n const initialValue = readValue();\n const [current, setCurrent] = createSignal<T>(initialValue);\n const [previous, setPrevious] = createSignal<T | undefined>(undefined);\n let timeoutRef: ReturnType<typeof setTimeout> | undefined;\n let lastValueRef = initialValue;\n\n createEffect(() => {\n const nextValue = readValue();\n\n if (Object.is(nextValue, lastValueRef)) return;\n\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n\n setPrevious(() => lastValueRef);\n setCurrent(() => nextValue);\n lastValueRef = nextValue;\n\n timeoutRef = globalThis.setTimeout(() => {\n setPrevious(() => undefined);\n timeoutRef = undefined;\n }, duration);\n\n onCleanup(() => {\n if (timeoutRef) {\n globalThis.clearTimeout(timeoutRef);\n }\n });\n });\n\n return {\n current,\n previous,\n isTransitioning: () => previous() !== undefined,\n };\n};\n","import type {\n ProviderStorage,\n UserThemePreference,\n} from \"@openlv/provider/storage\";\nimport { createSignal } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../provider/dist/storage/version.js\";\nimport { useModalContext } from \"../context.js\";\nimport type { LanguageTag } from \"../utils/i18n.jsx\";\n\nexport const useSettings = () => {\n const { provider } = useModalContext();\n const [settings, setLocalSettings] = createSignal<ProviderStorage>(provider.storage.getSettings());\n\n const setSettings = (newSettings: ProviderStorage) => {\n setLocalSettings(newSettings);\n provider.storage.setSettings(newSettings);\n };\n\n const setLanguage = (language: LanguageTag) => {\n setSettings({ ...settings(), language });\n };\n\n const setThemeMode = (themeMode: UserThemePreference) => {\n setSettings({ ...settings(), theme: themeMode });\n };\n\n const setSignalingProtocol = (p: SignalingProtocol) => {\n setSettings({ ...settings(), signaling: { p, s: settings()?.signaling?.s ?? {} } });\n };\n\n const setSignalingOptions = (options: { url: string; }) => {\n const p = settings()?.signaling?.p;\n\n if (!p) return;\n\n const s = settings()?.signaling?.s ?? {};\n\n setSettings({ ...settings(), signaling: { p, s: { ...s, [p]: options.url } } });\n };\n\n const setRetainSessionHistory = (retain: boolean) => {\n setSettings({ ...settings(), retainHistory: retain });\n };\n\n const setAutoReconnect = (autoReconnect: boolean) => {\n setSettings({ ...settings(), autoReconnect });\n };\n\n return {\n settings,\n setSettings,\n setLanguage,\n setThemeMode,\n setSignalingProtocol,\n setSignalingOptions,\n setRetainSessionHistory,\n setAutoReconnect,\n };\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"./useSettings.js\";\n\nexport const useTheme = () => {\n const { settings } = useSettings();\n\n const theme = createMemo(() => settings().theme);\n const mode = createMemo(() => \"light\");\n\n return {\n theme,\n mode,\n };\n};\n","/**\n * OpenLV icon - 128x128 pixels, optimized WebP format\n * Best for larger UI elements, headers, prominent display\n */\nexport const OPENLV_ICON_128\n = \"data:image/webp;base64,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\";\n","import { createMemo, Show } from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport { useSession } from \"../../hooks/useSession.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\n\nexport const FooterStatus = () => {\n const { t } = useTranslation();\n const { status: sessionStatus } = useSession();\n const status = createMemo(() => {\n const sessionState = sessionStatus()?.status;\n const signalState = sessionStatus()?.signaling?.state as string | undefined;\n\n return match({ sessionState, signalState })\n .with({ sessionState: \"connected\" }, () => ({\n icon: \"✅\",\n text: t(\"status.connectedSuccessfully\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"standby\" }, () => ({\n icon: \"🫥\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"connecting\" }, () => ({\n icon: \"↗️\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"ready\" }, () => ({\n icon: \"👋\",\n text: t(\"status.ready\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"handshake\" }, () => ({\n icon: \"🤝\",\n text: t(\"status.handshakeClosed\"),\n }))\n .with(\n { sessionState: \"signaling\", signalState: \"handshake-partial\" },\n () => ({\n icon: \"🤝\",\n text: t(\"status.handshakePartial\"),\n }),\n )\n .with({ sessionState: \"signaling\", signalState: \"encrypted\" }, () => ({\n icon: \"🔒\",\n text: t(\"status.encrypted\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"error\" }, () => ({\n icon: \"❌\",\n text: t(\"status.signalError\"),\n }))\n .otherwise(() => undefined);\n });\n\n return (\n <Show when={status()}>\n {resolved => (\n <div class=\"group flex items-center gap-2 rounded-md px-2 py-2 hover:bg-(--lv-control-button-secondary-background)\">\n <div class=\"pointer-events-none whitespace-nowrap rounded-md text-xs opacity-0 group-hover:opacity-100\">\n {resolved().text}\n </div>\n <div>{resolved().icon}</div>\n </div>\n )}\n </Show>\n );\n};\n","import { OPENLV_ICON_128 } from \"../../assets/logo.js\";\nimport { FooterStatus } from \"./StatusIndicator.js\";\n\nexport const Footer = () => (\n <>\n <div class=\"h-11 w-full\"></div>\n <div class=\"absolute inset-x-0 bottom-0 flex items-end justify-between gap-2 px-3 py-2 text-(--lv-text-muted)\">\n <a\n href=\"https://github.com/v3xlabs/open-lavatory\"\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"flex items-center gap-2 p-1 font-semibold text-sm text-(--lv-text-muted)\"\n >\n <img\n src={OPENLV_ICON_128}\n alt=\"Open Lavatory Logo\"\n width={20}\n height={20}\n class=\"rounded\"\n data-openlv-brand-logo\n />\n <span>openlv</span>\n </a>\n <div class=\"text-sm text-(--lv-text-muted)\">\n <FooterStatus />\n </div>\n </div>\n </>\n);\n","import { LucideChevronLeft, LucideCircleQuestionMark, LucideX } from \"lucide-solid\";\n\nimport { Button } from \"../ui/Button.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport type { ModalView } from \"./ModalRoot.js\";\n\nexport const Header = (props: {\n title: string;\n view: ModalView;\n onClose: () => void;\n onBack?: () => void;\n setView: (view: ModalView) => void;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex items-center justify-between px-2 py-2\">\n {props.onBack\n ? (\n <Button\n onClick={props.onBack}\n aria-label={String(\n props.view === \"settings\"\n ? t(\"modal.backToQr\")\n : t(\"modal.closeModal\"),\n )}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideChevronLeft class=\"h-6 w-6 text-(--lv-text-muted) rtl:rotate-180\" />\n </Button>\n )\n : (\n <Button\n type=\"button\"\n onClick={() => props.setView(\"info\")}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideCircleQuestionMark class=\"h-5 w-5\" />\n </Button>\n )}\n <h2 class=\"flex items-center justify-center gap-2 font-semibold text-(--lv-text-primary) text-lg\">\n {props.title}\n </h2>\n <Button\n type=\"button\"\n aria-label={String(t(\"common.close\"))}\n aria-pressed={false}\n onClick={props.onClose}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideX class=\"h-6 w-6 text-(--lv-text-muted)\" />\n </Button>\n </div>\n );\n};\n","import type { Accessor } from \"solid-js\";\nimport { createMemo, createSignal } from \"solid-js\";\n\nimport { usePunchTransition } from \"./usePunchTransition.js\";\n\nexport interface UseNavigationStackOptions {\n transitionDuration?: number;\n}\n\nexport interface UseNavigationStackReturn<T> {\n screen: Accessor<T>;\n previousScreen: Accessor<T | undefined>;\n isTransitioning: Accessor<boolean>;\n navigate: (screen: T) => void;\n goBack: () => void;\n isAtRoot: Accessor<boolean>;\n}\n\nexport const useNavigationStack = <T>(\n initialScreen: T,\n { transitionDuration = 200 }: UseNavigationStackOptions = {},\n): UseNavigationStackReturn<T> => {\n const [stack, setStack] = createSignal<T[]>([initialScreen]);\n const [index, setIndex] = createSignal(0);\n const screen = createMemo<T>(() => stack()[index()] ?? initialScreen);\n const { current, previous, isTransitioning } = usePunchTransition(screen, {\n duration: transitionDuration,\n });\n\n const navigate = (nextScreen: T) => {\n const activeIndex = index();\n const activeStack = stack();\n const currentScreen = activeStack[activeIndex];\n\n if (Object.is(currentScreen, nextScreen)) return;\n\n const nextStack = activeStack.slice(0, activeIndex + 1);\n\n nextStack.push(nextScreen);\n setStack(nextStack);\n setIndex(nextStack.length - 1);\n };\n\n const goBack = () => {\n setIndex(currentIndex => Math.max(0, currentIndex - 1));\n };\n\n return {\n screen: current,\n previousScreen: previous,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot: () => index() === 0,\n };\n};\n","import classNames from \"classnames\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type TransitionContainerProps<T> = {\n current: T;\n previous: T | undefined;\n isTransitioning: boolean;\n render: (value: T) => JSX.Element;\n class?: string;\n};\n\nexport const TransitionContainer = <T = unknown>(\n props: TransitionContainerProps<T>,\n) => (\n <div class={classNames(\"modal-transition__container\", props.class)}>\n <Show when={props.previous !== undefined}>\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {props.render(props.previous as T)}\n </div>\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n props.isTransitioning && \"modal-transition__layer--incoming\",\n )}\n >\n {props.render(props.current)}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuGroupProps = ParentProps<{\n title: JSX.Element;\n right?: JSX.Element;\n}>;\n\nexport const MenuGroup = (props: MenuGroupProps) => (\n <div>\n <div class=\"flex items-end justify-between py-1 pl-2\">\n <div class=\"font-medium text-(--lv-text-primary) text-sm\">\n {props.title}\n </div>\n <div>{props.right}</div>\n </div>\n <div class=\"flex flex-col gap-1 rounded-md bg-(--lv-card-background)\">\n {props.children}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuItemProps = ParentProps<{\n label: JSX.Element;\n}>;\n\nexport const MenuItem = (props: MenuItemProps) => (\n <div class=\"flex items-baseline justify-between gap-2 px-2 py-1 first:pt-2 last:pb-2\">\n <div class=\"text-sm text-(--lv-text-secondary) text-start\">\n {props.label}\n </div>\n <div>{props.children}</div>\n </div>\n);\n","import { For, Show } from \"solid-js\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst buttonGroupStyles = tv({\n slots: {\n root: \"flex overflow-hidden rounded-md border border-(--lv-control-button-secondary-border)\",\n box: \"px-4 py-2 font-semibold text-xs transition border-l first:border-l-0 border-(--lv-control-button-secondary-border)\",\n },\n variants: {\n active: {\n on: {\n box: \"bg-(--lv-control-button-secondary-background) text-(--lv-text-primary)\",\n },\n off: {\n box: \"bg-transparent text-(--lv-text-secondary) cursor-pointer\",\n },\n },\n },\n defaultVariants: {\n active: \"off\",\n },\n});\n\nconst dropdownStyles = tv({\n base: \"w-full rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-3 py-2 font-semibold text-xs text-(--lv-text-primary) cursor-pointer focus:outline-none focus:ring-2 focus:ring-(--lv-control-button-primary-background) appearance-none bg-[url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')] bg-[length:14px] bg-[right_8px_center] bg-no-repeat pr-8\",\n});\n\nexport type SelectProps = {\n options: string[][];\n value: string;\n onChange: (value: string) => void;\n dropdownThreshold?: number;\n};\n\nexport const Select = (props: SelectProps) => {\n const dropdown = dropdownStyles();\n const { root, box } = buttonGroupStyles({});\n\n return (\n <Show\n when={props.options.length > (props.dropdownThreshold ?? 3)}\n fallback={(\n <div class={root()}>\n <For each={props.options}>\n {([slug, label]) => (\n <button\n type=\"button\"\n onClick={() => props.onChange(slug)}\n aria-pressed={slug === props.value}\n class={box({ active: slug === props.value ? \"on\" : \"off\" })}\n >\n {label}\n </button>\n )}\n </For>\n </div>\n )}\n >\n <select\n class={dropdown}\n value={props.value}\n onChange={event => props.onChange(event.currentTarget.value)}\n >\n <For each={props.options}>\n {([slug, label]) => <option value={slug}>{label}</option>}\n </For>\n </select>\n </Show>\n );\n};\n","import type { UserThemePreference } from \"@openlv/provider/storage\";\nimport { Show } from \"solid-js\";\n\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nexport const ThemeSettings = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const isUserConfigurable = () => theme.mode() === \"auto\";\n const userThemeMode = () => (theme.mode() === \"auto\" ? \"system\" : theme.mode());\n const updateThemePreference = (value: string) => {\n // theme.setMode(value as ThemeMode);\n };\n\n return (\n <Show when={isUserConfigurable()}>\n <MenuItem label={t(\"settings.theme.mode\") as string}>\n <Select\n options={[\n [\"light\", t(\"settings.theme.light\") as string],\n [\"dark\", t(\"settings.theme.dark\") as string],\n [\"system\", t(\"settings.theme.system\") as string],\n ]}\n value={userThemeMode()}\n onChange={value =>\n updateThemePreference(value as UserThemePreference)}\n />\n </MenuItem>\n </Show>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport {\n getLanguageScore,\n LANGUAGES,\n type LanguageTag,\n useTranslation,\n} from \"../../../utils/i18n.js\";\nimport { ThemeSettings } from \"./theme.js\";\n\nexport const LanguageSettings = () => {\n const { t, languageTag, setLanguageTag } = useTranslation();\n const { settings, setLanguage } = useSettings();\n\n const sortedLanguages = createMemo(() =>\n [...LANGUAGES].sort((a, b) => {\n const scoreA = getLanguageScore(a.tag);\n const scoreB = getLanguageScore(b.tag);\n\n return scoreB - scoreA;\n }),\n );\n\n const handleLanguageChange = (value: string) => {\n const newLang = value as LanguageTag;\n\n setLanguageTag(newLang);\n setLanguage(newLang);\n };\n\n return (\n <MenuGroup title={t(\"settings.appearance\")}>\n <MenuItem label={t(\"settings.language\")}>\n <Select\n options={sortedLanguages().map(lang => [lang.tag, lang.nativeName])}\n value={\n (settings()?.language as LanguageTag | undefined) || languageTag()\n }\n onChange={handleLanguageChange}\n />\n </MenuItem>\n <ThemeSettings />\n </MenuGroup>\n );\n};\n","import { LucideCircleQuestionMark } from \"lucide-solid\";\nimport { mergeProps, type ParentProps } from \"solid-js\";\nimport type { VariantProps } from \"tailwind-variants/lite\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { match } from \"ts-pattern\";\n\nconst styles = tv({\n slots: {\n root: \"group relative\",\n box: \"cursor-pointer rounded-md transition-colors flex items-center justify-center hover:[background-color:var(--lv-control-button-tertiary-hoverBackground)] text-(--lv-text-muted)\",\n popover:\n \"-translate-x-1/2 absolute top-full left-1/2 z-10 hidden rounded-md shadow-sm group-hover:block border border-(--lv-control-button-secondary-border) bg-(--lv-body-background) px-2 py-1.5 text-(--lv-text-primary) text-sm\",\n icon: \"\",\n },\n variants: {\n size: {\n sm: {\n box: \"h-5 w-5 p-1\",\n icon: \"h-3 w-3\",\n },\n md: {\n box: \"h-6 w-6 p-1\",\n icon: \"h-4 w-4\",\n },\n lg: {\n box: \"h-8 w-8 p-1.5\",\n icon: \"h-4 w-4\",\n },\n },\n variant: {\n icon: \"\",\n text: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\nexport type InfoTooltipProps = VariantProps<typeof styles>;\n\nexport const InfoTooltip = (rawProps: ParentProps<InfoTooltipProps>) => {\n const props = mergeProps(\n { variant: \"icon\" as const, size: \"lg\" as const },\n rawProps,\n );\n const { root, box, popover, icon } = styles({\n size: props.size,\n variant: props.variant,\n });\n\n return (\n <div class={root()}>\n <div class={box()}>\n {match(props.variant)\n .with(\"icon\", () => <LucideCircleQuestionMark class={icon()} />)\n .with(\"text\", () => <div>Text</div>)\n .exhaustive()}\n </div>\n <div class={popover()}>{props.children}</div>\n </div>\n );\n};\n","import { LucideChevronRight } from \"lucide-solid\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type MenuLinkProps = {\n label: JSX.Element;\n value?: JSX.Element;\n onClick: () => void;\n};\n\nexport const MenuLink = (props: MenuLinkProps) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-between gap-2 first:rounded-t-sm last:rounded-b-sm px-2 py-1 first:pt-1.5 last:pb-2 hover:bg-(--lv-control-button-tertiary-hoverBackground)\"\n >\n <div class=\"text-sm text-(--lv-text-secondary) flex items-center gap-1\">\n {props.label}\n </div>\n <div class=\"flex items-center gap-1\">\n <Show when={props.value}>\n <span class=\"text-sm text-(--lv-text-muted)\">{props.value}</span>\n </Show>\n <LucideChevronRight class=\"h-4 w-4 text-(--lv-text-muted) rtl:rotate-180\" />\n </div>\n </button>\n);\n","import type { JSX } from \"solid-js\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Select } from \"./Select.js\";\n\nexport type ToggleProps = {\n label: JSX.Element;\n value: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport const Toggle = (props: ToggleProps) => {\n const { t } = useTranslation();\n\n return (\n <Select\n options={[\n [\"true\", String(t(\"common.yes\"))],\n [\"false\", String(t(\"common.no\"))],\n ]}\n value={props.value ? \"true\" : \"false\"}\n onChange={value => props.onChange(value === \"true\")}\n />\n );\n};\n","import { For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { InfoTooltip } from \"../../../ui/InfoTooltip.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { MenuLink } from \"../../../ui/menu/MenuLink.js\";\nimport { Toggle } from \"../../../ui/Toggle.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\nimport type { SettingsScreen } from \"../index.js\";\n\nexport const ConnectionPreferences = (props: {\n onNavigate: (screen: SettingsScreen) => void;\n}) => {\n const { t } = useTranslation();\n const { settings, setRetainSessionHistory, setAutoReconnect } = useSettings();\n\n return (\n <MenuGroup title={t(\"settings.connectionPreferences.title\")}>\n <MenuLink\n label={(\n <>\n {t(\"settings.signaling.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.signaling.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"signaling\")}\n value={settings()?.signaling?.p}\n />\n <MenuLink\n label={(\n <>\n {t(\"settings.transport.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.transport.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => props.onNavigate(\"transport\")}\n value=\"WebRTC\"\n />\n <For\n each={\n [\n [\n t(\"settings.connectionPreferences.retainSessionHistory\"),\n settings()?.retainHistory ?? false,\n setRetainSessionHistory,\n ],\n [\n t(\"settings.connectionPreferences.autoReconnect\"),\n settings()?.autoReconnect ?? false,\n setAutoReconnect,\n ],\n ] as const\n }\n >\n {([label, value, onChange]) => (\n <MenuItem label={label}>\n <Toggle label={label} value={value} onChange={onChange} />\n </MenuItem>\n )}\n </For>\n </MenuGroup>\n );\n};\n","import { Index, mergeProps, splitProps } from \"solid-js\";\n\nconst labelClasses = \"font-semibold text-xs uppercase tracking-wide\";\nconst inputClasses\n = \"h-9 w-full rounded-lg border bg-white px-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 text-(--lv-text-primary) bg-(--lv-body-background) border-(--lv-control-input-border)\";\n\ntype LabelProps = {\n htmlFor?: string;\n children: string;\n};\n\nexport const Label = (props: LabelProps) => (\n <label\n class={`${labelClasses} text-(--lv-text-secondary)`}\n for={props.htmlFor}\n >\n {props.children}\n </label>\n);\n\ntype InputProps = {\n // eslint-disable-next-line no-restricted-syntax\n id?: string;\n value: string;\n placeholder?: string;\n ariaLabel?: string;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport const Input = (props: InputProps) => {\n const merged = mergeProps({ readOnly: true }, props);\n const [local] = splitProps(merged, [\n \"id\",\n \"value\",\n \"placeholder\",\n \"ariaLabel\",\n \"readOnly\",\n \"onChange\",\n ]);\n\n return (\n <input\n // eslint-disable-next-line no-restricted-syntax\n id={local.id}\n class={inputClasses}\n value={local.value}\n placeholder={local.placeholder}\n aria-label={local.ariaLabel}\n readOnly={local.readOnly}\n onInput={(e) => {\n local.onChange?.(e.currentTarget.value);\n }}\n />\n );\n};\n\ntype InputGroupProps = {\n label: string;\n values: readonly string[];\n placeholder?: string;\n inputIdPrefix?: string;\n};\n\nexport const InputGroup = (props: InputGroupProps) => (\n <div class=\"grid gap-2\">\n <Label>{props.label}</Label>\n <Index each={props.values}>\n {(value, index) => {\n // eslint-disable-next-line no-restricted-syntax\n const id = props.inputIdPrefix\n ? `${props.inputIdPrefix}-${index}`\n : undefined;\n const suffix = props.values.length > 1 ? ` ${index + 1}` : \"\";\n\n return (\n <Input\n // eslint-disable-next-line no-restricted-syntax\n id={id}\n value={value()}\n placeholder={props.placeholder}\n ariaLabel={`${props.label}${suffix}`}\n />\n );\n }}\n </Index>\n </div>\n);\n","import { createMemo } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../../../provider/dist/storage/version.js\";\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst AVAILABLE_PROTOCOLS = [\"mqtt\", \"ntfy\", \"gun\"];\n\nexport const SignalingSettings = () => {\n const { t } = useTranslation();\n const { settings, setSignalingProtocol, setSignalingOptions }\n = useSettings();\n const signalingProtocol = createMemo(() => settings()?.signaling?.p);\n const signalingServer = createMemo(() => {\n const activeProtocol = signalingProtocol();\n\n if (!activeProtocol) return \"\";\n\n return settings()?.signaling?.s?.[activeProtocol] ?? \"\";\n });\n\n return (\n <div>\n <MenuGroup title={t(\"settings.signaling.title\")}>\n <MenuItem label={t(\"common.protocol\")}>\n <Select\n options={AVAILABLE_PROTOCOLS.map(option => [\n option.toLowerCase(),\n option.toUpperCase(),\n ])}\n value={signalingProtocol() ?? \"\"}\n onChange={value => setSignalingProtocol(value as SignalingProtocol)}\n />\n </MenuItem>\n <MenuItem label={t(\"settings.signaling.server\")}>\n <Input\n id=\"server\"\n value={signalingServer()}\n onChange={value => setSignalingOptions({ url: value })}\n placeholder={String(t(\"settings.signaling.serverUrl\"))}\n ariaLabel={String(t(\"settings.signaling.serverUrl\"))}\n readOnly={false}\n />\n </MenuItem>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.signaling.description\")}\n </div>\n </div>\n );\n};\n","import type { TurnServer } from \"@openlv/provider/storage\";\nimport { LucidePlus, LucideTrash2 } from \"lucide-solid\";\nimport type { JSX } from \"solid-js\";\nimport { createSignal, For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst ServerListItem = (props: {\n children: JSX.Element;\n onRemove: () => void;\n}) => (\n <div class=\"flex items-center gap-2\">\n <div class=\"flex-1\">{props.children}</div>\n <Button\n onClick={props.onRemove}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"sm\"\n >\n <LucideTrash2 class=\"h-4 w-4 text-(--lv-text-muted)\" />\n </Button>\n </div>\n);\n\nconst AddServerButton = (props: {\n label: JSX.Element;\n onClick: () => void;\n}) => (\n <button\n type=\"button\"\n onClick={props.onClick}\n class=\"flex w-full cursor-pointer items-center justify-center gap-1 rounded-md border border-dashed border-(--lv-control-input-border) py-2 text-sm text-(--lv-text-muted) hover:bg-(--lv-card-background)\"\n >\n <LucidePlus class=\"h-4 w-4\" />\n {props.label}\n </button>\n);\n\nexport const TransportSettings = () => {\n const { t } = useTranslation();\n const {\n settings,\n setSettings,\n } = useSettings();\n\n const [turnServers, setTurnServers] = createSignal<TurnServer[]>([]);\n const [stunServers, setStunServers] = createSignal<string[]>([]);\n\n const handleAddStun = () => {\n setStunServers([...stunServers(), \"\"]);\n };\n\n const handleRemoveStun = (index: number) => {\n setStunServers(stunServers().filter((_, i) => i !== index));\n };\n\n const handleStunChange = (index: number, value: string) => {\n setStunServers(stunServers().map((server, i) => (i === index ? value : server)));\n };\n\n const handleAddTurn = () => {\n setTurnServers([...turnServers(), { urls: \"\" }]);\n };\n\n const handleRemoveTurn = (index: number) => {\n setTurnServers(turnServers().filter((_, i) => i !== index));\n };\n\n const handleTurnChange = (index: number, field: keyof TurnServer, value: string) => {\n setTurnServers(turnServers().map((server, i) => (i === index ? { ...server, [field]: value } : server)));\n };\n\n // createEffect(() => {\n // setSettings({\n // ...settings(), transport: {\n // p: \"webrtc\",\n // s: {\n // webrtc: {\n // stun: stunServers(),\n // turn: turnServers(),\n // },\n // },\n // },\n // });\n // });\n\n return (\n <>\n <MenuGroup title={t(\"settings.transport.iceServers.stun\")}>\n <div class=\"flex flex-col gap-2 p-2\">\n <For each={stunServers()}>\n {(server, index) => (\n <ServerListItem onRemove={() => handleRemoveStun(index())}>\n <Input\n value={server}\n onChange={value => handleStunChange(index(), value)}\n placeholder=\"stun:stun.l.google.com:19302\"\n readOnly={false}\n />\n </ServerListItem>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addStun\")}\n onClick={handleAddStun}\n />\n </div>\n </MenuGroup>\n\n <MenuGroup title={t(\"settings.transport.iceServers.turn\")}>\n <div class=\"flex flex-col gap-3 p-2\">\n <For each={turnServers()}>\n {(server, index) => (\n <div class=\"flex flex-col gap-2 rounded-md border border-(--lv-control-input-border) p-2\">\n <ServerListItem onRemove={() => handleRemoveTurn(index())}>\n <Input\n value={server.urls}\n onChange={value =>\n handleTurnChange(index(), \"urls\", value)}\n placeholder=\"turn:relay.example.com:443\"\n readOnly={false}\n />\n </ServerListItem>\n <div class=\"grid grid-cols-2 gap-2\">\n <Input\n value={server.username ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"username\", value)}\n placeholder=\"Username\"\n readOnly={false}\n />\n <Input\n value={server.credential ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"credential\", value)}\n placeholder=\"Password\"\n readOnly={false}\n />\n </div>\n </div>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addTurn\")}\n onClick={handleAddTurn}\n />\n </div>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.transport.description\")}\n </div>\n </>\n );\n};\n","import { createEffect } from \"solid-js\";\n\nimport { useNavigationStack } from \"../../hooks/useNavigationStack.js\";\nimport { TransitionContainer } from \"../../ui/TransitionContainer.js\";\nimport { LanguageSettings } from \"./a11y/index.js\";\nimport { ConnectionPreferences } from \"./connection/index.js\";\nimport { SignalingSettings } from \"./connection/signaling.js\";\nimport { TransportSettings } from \"./connection/transport.js\";\n\nexport type SettingsScreen = \"main\" | \"signaling\" | \"transport\";\n\nexport interface SettingsNavigationRef {\n goBack: () => void;\n isAtRoot: boolean;\n}\n\nexport interface ModalSettingsProps {\n onTitleChange?: (titleKey: string) => void;\n navigationRef?: { current: SettingsNavigationRef | null; };\n}\n\nconst getSettingsTitleKey = (screen: SettingsScreen): string => {\n switch (screen) {\n case \"main\": {\n return \"settings.title\";\n }\n case \"signaling\": {\n return \"settings.signaling.title\";\n }\n case \"transport\": {\n return \"settings.transport.title\";\n }\n }\n};\n\nexport const ModalSettings = (props: ModalSettingsProps) => {\n const {\n screen,\n previousScreen,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot,\n } = useNavigationStack<SettingsScreen>(\"main\");\n\n const internalRef: SettingsNavigationRef = {\n goBack,\n get isAtRoot() {\n return isAtRoot();\n },\n };\n\n createEffect(() => {\n if (props.navigationRef) {\n props.navigationRef.current = internalRef;\n }\n });\n\n createEffect(() => {\n props.onTitleChange?.(getSettingsTitleKey(screen()));\n });\n\n const renderScreen = (s: SettingsScreen) => {\n switch (s) {\n case \"main\": {\n return (\n <>\n <ConnectionPreferences onNavigate={navigate} />\n <LanguageSettings />\n </>\n );\n }\n case \"signaling\": {\n return <SignalingSettings />;\n }\n case \"transport\": {\n return <TransportSettings />;\n }\n }\n };\n\n return (\n <div class=\"px-4 pb-2\">\n <TransitionContainer\n current={screen()}\n previous={previousScreen()}\n isTransitioning={isTransitioning()}\n render={renderScreen}\n />\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport classNames from \"classnames\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n onMount,\n Show,\n} from \"solid-js\";\nimport { match, P } from \"ts-pattern\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { ConnectionFlow } from \"../flow/ConnectionFlow.js\";\nimport { Disconnected } from \"../flow/disconnected/Disconnected.js\";\nimport { InfoScreen } from \"../flow/InfoScreen.js\";\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { usePunchTransition } from \"../hooks/usePunchTransition.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTheme } from \"../hooks/useTheme.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Footer } from \"./footer/Footer.js\";\nimport { Header } from \"./Header.js\";\nimport { ModalSettings, type SettingsNavigationRef } from \"./settings/index.js\";\nimport { UnknownState } from \"./UnknownState.js\";\n\nexport interface ModalRootProps {\n onClose?: () => void;\n onStartConnection?: () => void;\n onCopy?: (uri: string) => void;\n}\n\nexport type ModalView = \"start\" | \"settings\" | \"info\";\n\nconst useModalState = () => {\n const [view, setView] = createSignal<ModalView>(\"start\");\n const [copied, setCopied] = createSignal(false);\n\n createEffect(() => {\n if (!copied()) return;\n\n const timeout = globalThis.setTimeout(() => setCopied(false), 2000);\n\n onCleanup(() => globalThis.clearTimeout(timeout));\n });\n\n return {\n view,\n setView,\n copied,\n setCopied,\n };\n};\n\nconst useEscapeToClose = (handler: () => void) => {\n createEffect(() => {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const keyHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") handler();\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n onCleanup(() => document.removeEventListener(\"keydown\", keyHandler));\n });\n};\n\nconst useDynamicDialogHeight = () => {\n const [contentNode, setContentNode] = createSignal<HTMLDivElement>();\n const [height, setHeight] = createSignal(0);\n\n const measureHeight = (\n targetElement?: HTMLElement | null,\n useScrollHeight = false,\n ) => {\n const node = targetElement || contentNode();\n\n if (!node || !node.getBoundingClientRect) return;\n\n const nextHeight = useScrollHeight\n ? node.scrollHeight\n : node.getBoundingClientRect().height;\n\n if (nextHeight > 0) {\n setHeight(previousHeight =>\n (typeof previousHeight === \"number\"\n && Math.abs(previousHeight - nextHeight) < 0.5\n ? previousHeight\n : nextHeight),\n );\n }\n };\n\n createEffect(() => {\n const node = contentNode();\n\n if (!node || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(() => {\n measureHeight();\n });\n\n observer.observe(node);\n\n onCleanup(() => observer.disconnect());\n });\n\n const handleResize = () => measureHeight();\n\n createEffect(() => {\n if (globalThis.window === undefined) return;\n\n window.addEventListener(\"resize\", handleResize);\n\n onCleanup(() => window.removeEventListener(\"resize\", handleResize));\n });\n\n return {\n setContentRef: setContentNode,\n contentNode,\n height,\n measureHeight,\n };\n};\n\nexport const ModalRoot = (props: { onClose: () => void; }) => {\n const { view: modalView, setView, copied, setCopied } = useModalState();\n const { uri, status } = useSession();\n const { provider } = useModalContext();\n const { setContentRef, contentNode, height, measureHeight }\n = useDynamicDialogHeight();\n const {\n current: displayedModalView,\n previous: previousModalView,\n isTransitioning: isModalViewTransitioning,\n } = usePunchTransition(modalView);\n const {\n current: displayedStatus,\n previous: previousStatus,\n isTransitioning: isStatusTransitioning,\n } = usePunchTransition(status);\n const openSettings = () => setView(\"settings\");\n const { t, isRtl, languageTag } = useTranslation();\n const theme = useTheme();\n\n const settingsNavRef: { current: SettingsNavigationRef | null; } = {\n current: null,\n };\n const [settingsTitleKey, setSettingsTitleKey]\n = createSignal(\"settings.title\");\n\n const title = createMemo(() =>\n match(modalView())\n .with(\"start\", () => t(\"start.title\"))\n .with(\"settings\", () => t(settingsTitleKey()))\n .with(\"info\", () => t(\"info.title\"))\n .exhaustive(),\n );\n\n useEscapeToClose(props.onClose);\n\n createEffect(() => {\n if (status()?.status === PROVIDER_STATUS.CONNECTED) {\n props.onClose();\n }\n });\n\n const handleCopy = async () => {\n const sessionUri = uri();\n const success = sessionUri && (await copyToClipboard(sessionUri));\n\n if (success) setCopied(true);\n };\n\n let isInitialMount = true;\n let initialMeasureTimeout: ReturnType<typeof setTimeout> | undefined;\n let previousHeight: number | undefined;\n let overflowTimeout: ReturnType<typeof setTimeout> | undefined;\n const [shouldHideOverflow, setShouldHideOverflow] = createSignal(false);\n\n createEffect(() => {\n displayedStatus();\n displayedModalView();\n const node = contentNode();\n\n if (!node) return;\n\n if (isInitialMount) {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n\n initialMeasureTimeout = globalThis.setTimeout(() => {\n if (contentNode()) {\n measureHeight(undefined, true);\n isInitialMount = false;\n }\n }, 0);\n }\n else {\n measureHeight();\n }\n\n onCleanup(() => {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n });\n });\n\n createEffect(() => {\n const currentHeight = height();\n const isHeightChanging\n = previousHeight !== undefined\n && currentHeight !== previousHeight\n && currentHeight > 0\n && previousHeight > 0\n && Math.abs(currentHeight - previousHeight) > 0.5;\n\n if (isHeightChanging) {\n setShouldHideOverflow(true);\n\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n\n overflowTimeout = globalThis.setTimeout(() => {\n setShouldHideOverflow(false);\n overflowTimeout = undefined;\n }, 200);\n }\n\n previousHeight = currentHeight;\n\n onCleanup(() => {\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n });\n });\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n const shouldShowBack = createMemo(\n () => !(modalView() === \"start\" && providerStatus() === PROVIDER_STATUS.STANDBY),\n );\n\n const onBack = () => {\n match({ view: modalView(), status: providerStatus() })\n .with({ view: \"start\", status: PROVIDER_STATUS.STANDBY }, () => undefined)\n .with({ view: \"start\" }, () => {\n provider.closeSession();\n })\n .with({ view: \"settings\" }, () => {\n if (settingsNavRef.current && !settingsNavRef.current.isAtRoot) {\n settingsNavRef.current.goBack();\n }\n else {\n setView(\"start\");\n }\n })\n .with({ view: \"info\" }, () => {\n setView(\"start\");\n })\n .otherwise(() => {\n provider.closeSession();\n props.onClose();\n });\n };\n\n const renderDisconnectedView = (targetView: ModalView): JSX.Element =>\n match(targetView)\n .with(\"start\", () => <Disconnected onSettings={openSettings} />)\n .with(\"settings\", () => (\n <ModalSettings\n onTitleChange={setSettingsTitleKey}\n navigationRef={settingsNavRef}\n />\n ))\n .with(\"info\", () => <InfoScreen />)\n .otherwise(() => <UnknownState state={targetView} />);\n\n const renderDisconnectedSection = () => (\n <div class=\"modal-transition__container\">\n <Show when={previousModalView()}>\n {previousView => (\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {renderDisconnectedView(previousView())}\n </div>\n )}\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n isModalViewTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n {renderDisconnectedView(displayedModalView())}\n </div>\n </div>\n );\n\n const renderStatusSection = (\n targetStatus: ProviderStatus,\n ): JSX.Element =>\n match(targetStatus)\n .with(PROVIDER_STATUS.STANDBY, () => renderDisconnectedSection())\n .with(\n P.union(\n PROVIDER_STATUS.CREATING,\n PROVIDER_STATUS.CONNECTING,\n PROVIDER_STATUS.CONNECTED,\n PROVIDER_STATUS.ERROR,\n ),\n () => (\n <ConnectionFlow onClose={props.onClose} onCopy={handleCopy} />\n ),\n )\n .otherwise(state => <UnknownState state={state || \"unknown status\"} />);\n\n // todo remove this styling approach\n const overlayStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-overlay-background, rgba(0,0,0,0.3))\",\n \"backdrop-filter\": \"var(--lv-overlay-backdrop-filter, blur(4px))\",\n };\n\n // todo remove this styling approach\n const cardStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-body-background)\",\n \"color\": \"var(--lv-body-color, var(--lv-text-primary))\",\n \"border-radius\": \"var(--lv-border-radius, 16px)\",\n \"box-shadow\": \"var(--lv-modal-shadow, 0px 12px 32px rgba(0,0,0,0.25))\",\n };\n\n return (\n <div\n class=\"fixed inset-0 z-10000 flex animate-[bg-in_0.15s_ease-in-out] items-end justify-center md:items-center lg:p-4\"\n onMouseUp={(e) => {\n if (e.target === e.currentTarget) props.onClose();\n }}\n role=\"presentation\"\n data-openlv-modal-root\n data-openlv-theme-mode={theme.mode()}\n lang={languageTag()}\n dir={isRtl() ? \"rtl\" : \"ltr\"}\n style={overlayStyle}\n >\n <div\n class={classNames(\n \"relative w-full max-w-[400px] animate-[fade-in_0.15s_ease-in-out] transition-[height] duration-200 ease-out\",\n shouldHideOverflow() || previousStatus()\n ? \"overflow-hidden\"\n : undefined,\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={String(title())}\n onClick={event => event.stopPropagation()}\n style={{\n ...(typeof height() === \"number\" && height() > 0\n ? { height: `${height()}px` }\n : {}),\n ...cardStyle,\n }}\n >\n <div ref={setContentRef}>\n <Header\n title={String(title())}\n view={modalView()}\n onClose={props.onClose}\n onBack={shouldShowBack() ? onBack : undefined}\n setView={setView}\n />\n <div class=\"modal-transition__container\">\n <div\n class={classNames(\n \"modal-transition__layer\",\n isStatusTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n <div class=\"flex flex-col text-center\">\n {renderStatusSection(providerStatus())}\n </div>\n </div>\n </div>\n <Footer />\n </div>\n\n <div\n class={classNames(\n \"absolute top-5 rounded-lg bg-blue-500 px-4 py-3 font-medium text-sm text-white transition-all ltr:right-5 rtl:left-5\",\n copied()\n ? \"translate-x-0 opacity-100\"\n : \"opacity-0 ltr:translate-x-full rtl:-translate-x-full\",\n )}\n >\n {t(\"modal.urlCopied\")}\n </div>\n </div>\n </div>\n );\n};\n","export const log = (...x: Parameters<typeof console.log>) =>\n console.log(\n \"%c[modal]%c\",\n \"color: yellow; font-weight: bold\",\n \"color: inherit; font-weight: normal\",\n ...x,\n );\n","\n/** biome-ignore-all lint/performance/noBarrelFile: package entrypoint */\n/** biome-ignore-all lint/performance/noReExportAll: package entrypoint */\n/** biome-ignore-all lint/suspicious/noConsole: temp */\n\nexport { ModalRoot } from \"./components/ModalRoot.js\";\nexport { default, OpenLVModalElement, type OpenLVModalElementProps } from \"./element.js\";\nexport type { ThemeConfig } from \"./theme/index.js\";\n\nimport OpenLVModalElementDefault, {\n type OpenLVModalElementProps,\n} from \"./element.js\";\nimport { log } from \"./utils/log.js\";\nexport { OPENLV_ICON_128 } from \"./assets/logo.js\";\n\nexport const registerOpenLVModal = (tagName = \"openlv-modal\") => {\n if (globalThis.window === undefined) {\n return tagName;\n }\n\n const registry = globalThis.customElements;\n\n if (!registry) {\n console.warn(\n \"OpenLV modal: custom elements are not supported in this environment.\",\n );\n\n return tagName;\n }\n\n if (!registry.get(tagName)) {\n registry.define(\n tagName,\n OpenLVModalElementDefault as unknown as CustomElementConstructor,\n );\n }\n\n return tagName;\n};\n\nexport const triggerOpenModal = (props: OpenLVModalElementProps) => {\n const modal = document.querySelector(\"openlv-modal\");\n\n if (modal) modal.remove();\n\n if (!modal) {\n registerOpenLVModal();\n const x = new OpenLVModalElementDefault({\n onClose() {\n log(\"modal closed\");\n x.remove();\n props.onClose?.();\n },\n provider: props.provider,\n theme: props.theme,\n });\n\n document.body.append(x);\n // x.showModal();\n }\n};\n\nexport type TriggerOpenModal = typeof triggerOpenModal;\n"],"names":["IS_DEV","equalFn","a","b","$PROXY","SUPPORTS_PROXY","$TRACK","signalOptions","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createRoot","fn","detachedOwner","listener","owner","unowned","current","root","updateFn","untrack","cleanNode","runUpdates","createSignal","value","options","s","setter","writeSignal","readSignal","createRenderEffect","c","createComputation","updateComputation","createEffect","runUserEffects","createMemo","onMount","onCleanup","createContext","defaultValue","id","createProvider","useContext","context","children","memo","resolveChildren","updates","lookUpstream","observers","sSlot","node","isComp","i","o","TransitionRunning","markDownstream","time","runComputation","nextValue","err","handleError","init","pure","state","runTop","ancestors","wait","res","completeUpdates","queue","userLength","e","ignore","source","index","obs","n","castError","results","result","j","props","FALLBACK","dispose","d","mapArray","list","mapFn","items","mapped","disposers","len","indexes","newItems","newLen","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","createComponent","Comp","trueFn","propTraps","_","property","receiver","resolveSource","resolveSources","length","v","mergeProps","sources","proxy","keys","sourcesMap","defined","sourceKeys","key","desc","target","definedKeys","splitProps","blocked","k","objects","propName","keyIndex","narrowedError","name","For","fallback","Show","keyed","conditionValue","condition","child","Switch","chs","switchFunc","ch","mps","func","mp","prevFunc","sel","Match","booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","DelegatedEvents","SVGElements","SVGNamespace","reconcileArrays","parentNode","bLength","aEnd","bEnd","aStart","bStart","after","map","sequence","t","$$EVENTS","render","code","element","insert","template","html","isImportNode","isSVG","isMathML","create","delegateEvents","eventNames","document","l","eventHandler","setAttribute","setAttributeNS","namespace","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","toggleClassKey","classValue","style","nodeStyle","spread","skipChildren","prevProps","insertExpression","use","assign","arg","parent","accessor","marker","initial","skipRef","assignProp","toPropertyName","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","ns","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","is","createDynamic","component","cached","isSvg","Dynamic","others","OPENLV_PROTOCOL_VERSION","encodeConnectionURL","payload","params","has","prefix","Events","EE","once","addListener","emitter","event","evt","clearEvent","EventEmitter","names","events","handlers","ee","listeners","a1","a2","a3","a4","a5","args","module","r","u","y","f","g","m","p","S","K","O","E","x","A","N","P","T","B","W","$","z","I","L","M","R","F","SESSION_STATE","PROVIDER_STATUS","hasOwn","classes","appendClass","parseValue","newClass","importOrPassthrough","theme","then","simpleTheme","openlvTheme","Error","isPlainObject","Array","isArray","flattenToCssVars","obj","out","Object","entries","join","resolveMode","appThemeMode","userTheme","globalThis","matchMedia","matches","deepMerge","base","overlay","baseValue","overlayValue","buildTheme","config","resolvedMode","mode","variant","mergedVariant","common","flattened","updateStyles","shadowRoot","themeConfig","themeStr","cssContent","OpenLVModalElement","HTMLElement","constructor","parameters","shadow","renderRequested","themeCleanup","disposeRender","attachShadow","initialUserTheme","provider","storage","getSettings","connectedCallback","requestRender","setupThemeListener","disconnectedCallback","undefined","update","on","mediaQuery","off","removeEventListener","showModal","display","hideModal","queueMicrotask","performRender","_self$","_$createComponent","ModalProvider","_$mergeProps","LANGUAGES","tag","nativeName","rtl","isRtlLanguage","find","Set","getLanguageScore","navigator","languages","language","browserLang","toLowerCase","startsWith","baseLang","split","resolveNestedValue","segments","filter","Boolean","segment","interpolate","replaceAll","matchText","String","resolveTranslation","fromPrimary","primary","fromFallback","TranslationContext","loadLanguagePack","languageTag","match","with","Promise","resolve","default","exhaustive","TranslationProvider","useModalContext","initialLanguageTag","setLanguageTag","languagePack","setLanguagePack","isLoadingLanguagePack","setIsLoadingLanguagePack","cancelled","nextPack","run","translated","fallbackEnglish","lines","_$memo","line","_tmpl$","isRtl","contextValue","nextLanguageTag","Provider","useTranslation","ModalContext","ModalRoot","onClose","useSession","session","status","setStatus","handleStateChange","handshakeParameters","useSessionStart","currentSettings","UnknownState","uri","console","error","_el$","_el$2","firstChild","_el$4","nextSibling","_el$6","_$insert","JSON","stringify","chCodes","assertNumber","validateVersion","ver","bin","dec","pad","mod","fillArr","val","popcnt","interleaveBytes","blocks","maxLen","totalLen","block","idx","best","bestScore","score","alphabet","char","input","letter","digits","transpose32","masks","stage","step","i0","i1","bitMask","rangeMask","shift","Bitmap","size","__publicField","height","width","row","limit","rows","offset","wi","mask","x0","y0","words","startWord","endWord","startBit","endBit","ry","rowBase","cb","yPos","Py","xPos","bitX","bit","word","bitsPerWord","defWord","valWord","border","src","srcStride","srcValue","srcRow","dstX","dstWord","dstBit","srcWord","srcBit","w0","w1","sVal","dstMask","valBits","rect","cur","dst","dstStride","dstValue","dstDefined","dstTail","tmpV","tmpD","by","bx","dstY","dstPos","curMask","factor","tailMask","fullWords","patternLen","patterns","count","window","bitEnd","runLen","runValue","base0","base1","validLast","boxes","a0","eqV","n0","eqH0","n1","eqH1","nl","first","second","cc","reset","whiteBG","darkBG","optimize","pathData","prevPoint","point","relM","bH","u16le","dims","bytes","fullChunks","isRGB","ECMode","Encoding","BYTES","WORDS_PER_BLOCK","ECC_BLOCKS","info","last","distance","interval","ecc","maskIdx","type","numBlocks","blockLen","shortBlocks","PATTERNS","_x","_y","GF","p_poly","exp","log","poly","degree","coefficient","coefficients","scalar","smaller","larger","sumDiff","lengthDiff","divisor","elm","rLast","tLast","rLastLast","tLastLast","q","dltInverse","degreeDiff","scale","sigmaTildeAtZero","inverse","RS","eccWords","from","pol","to","syndrome","hasError","evl","monomial","errorLocator","errorEvaluator","locations","pos","xiInverse","denominator","interleave","total","rs","eccBlocks","isShort","resBlocks","resECC","drawTemplate","test","finder","align","alignPos","bits","getBit","zigzag","tpl","bm","pattern","dir","xOffset","detectType","str","utf8ToBytes","encode","encoder","encoded","dataLen","utf8","capacity","padding","drawQR","need","mkPattern","finderPattern","lightPattern","P1","P2","penalty","transposed","adjacent","box","darkPixels","dark","drawQRBest","bestMask","validateECC","ec","validateEncoding","enc","validateMask","encodeQR","text","output","opts","_opts","encoding","copyToClipboard","textArea","generateQRCode","uriValue","HandshakeOpen","handleCopy","sessionUri","_el$3","_el$5","when","_el$7","_tmpl$2","_el$8","$$click","_$effect","_p$","_v$","_v$2","_$setAttribute","innerHTML","_$delegateEvents","LoadingSpinner","Connecting","_tmpl$3","CREATED","SIGNALING","includes","READY","LINKING","_el$9","_el$0","ErrorScreen","reason","getState","isIceFailure","message","retry","closeSession","_$addEventListener","ConnectionFlow","providerStatus","setProviderStatus","peerInfo","getSession","renderableIcon","icon","CREATING","CONNECTING","CONNECTED","_tmpl$4","_el$10","_tmpl$5","_el$11","_tmpl$6","_el$13","_tmpl$7","ERROR","defaultAttributes","xmlns","viewBox","fill","stroke","defaultAttributes_default","Icon","localProps","rest","_$spread","color","absoluteStrokeWidth","Number","strokeWidth","mergeClasses","toKebabCase","toPascalCase","class","hasA11yProp","each","iconNode","elementName","attrs","Icon_default","ChevronLeft","chevron_left_default","ChevronRight","chevron_right_default","cx","cy","CircleQuestionMark","circle_question_mark_default","Plus","plus_default","rx","QrCode","qr_code_default","Settings","settings_default","Trash2","trash_2_default","X","x_default","SPACE_REGEX","removeExtraSpaces","classnames","buildClassString","falsyToString","isEmptyObject","isEqual","obj1","obj2","keys1","keys2","joinObjects","val2","flat","arr","flatMergeArrays","arrays","filtered","mergeObjects","val1","defaultConfig","createState","cachedTwMerge","cachedTwMergeConfig","didTwMergeConfigChange","getTailwindVariants","cn","tv","configProp","extend","slotProps","variantsProps","compoundVariantsProps","compoundSlots","defaultVariantsProps","variants","defaultVariants","isExtendedSlotsEmpty","componentSlots","slots","compoundVariants","getVariantValue","vrs","_slotKey","slotProps2","variantObj","variantProp","variantKey","defaultVariantProp","getVariantClassNames","getVariantClassNamesBySlotKey","slotKey","variantValue","propsWithoutUndefined","getCompleteProps","initialProp","getCompoundVariantsValue","cv","cvLength","tvClass","tvClassName","compoundVariantOptions","isValid","completeProps","completePropsValue","getCompoundVariantClassNamesBySlot","compoundClassNames","cnFn","slot","getCompoundSlotClassNameBySlot","slots2","slotClass","slotClassName","slotVariants","slotVariantValue","slotName","slotsFns","compoundVariantClasses","compoundSlotClasses","getVariantKeys","cnAdapter","_config","styles","$variant","secondary","tertiary","$size","sm","md","lg","$aspect","square","auto","Button","rawProps","local","href","onClick","dotCount","isApple","TabletGraphic","PhoneGraphic","ConnectionGraphic","_el$1","Disconnected","onSettings","LucideSettings","InfoScreen","LucideQrCode","usePunchTransition","duration","readValue","initialValue","setCurrent","previous","setPrevious","timeoutRef","lastValueRef","useSettings","settings","setLocalSettings","setSettings","newSettings","themeMode","retain","autoReconnect","useTheme","OPENLV_ICON_128","FooterStatus","sessionStatus","sessionState","signalState","signaling","otherwise","resolved","Footer","Header","_c$","onBack","view","LucideChevronLeft","setView","LucideCircleQuestionMark","title","LucideX","useNavigationStack","initialScreen","transitionDuration","stack","setStack","setIndex","screen","isTransitioning","nextScreen","activeIndex","activeStack","currentScreen","nextStack","currentIndex","TransitionContainer","_$className","MenuGroup","right","MenuItem","label","buttonGroupStyles","active","dropdownStyles","Select","dropdown","dropdownThreshold","slug","onChange","currentTarget","ThemeSettings","isUserConfigurable","userThemeMode","updateThemePreference","LanguageSettings","setLanguage","sortedLanguages","sort","scoreA","handleLanguageChange","newLang","lang","popover","InfoTooltip","_v$3","MenuLink","LucideChevronRight","Toggle","ConnectionPreferences","setRetainSessionHistory","setAutoReconnect","onNavigate","retainHistory","Input","merged","readOnly","$$input","placeholder","ariaLabel","_v$4","AVAILABLE_PROTOCOLS","SignalingSettings","setSignalingProtocol","setSignalingOptions","signalingProtocol","signalingServer","activeProtocol","option","toUpperCase","url","ServerListItem","onRemove","LucideTrash2","AddServerButton","LucidePlus","TransportSettings","turnServers","setTurnServers","stunServers","setStunServers","handleAddStun","handleRemoveStun","handleStunChange","server","handleAddTurn","urls","handleRemoveTurn","handleTurnChange","field","username","credential","getSettingsTitleKey","ModalSettings","previousScreen","navigate","goBack","isAtRoot","internalRef","navigationRef","onTitleChange","renderScreen","useModalState","copied","setCopied","timeout","setTimeout","clearTimeout","useEscapeToClose","keyHandler","useDynamicDialogHeight","contentNode","setContentNode","setHeight","measureHeight","targetElement","useScrollHeight","getBoundingClientRect","nextHeight","scrollHeight","previousHeight","Math","abs","ResizeObserver","observer","observe","disconnect","handleResize","setContentRef","modalView","displayedModalView","previousModalView","isModalViewTransitioning","displayedStatus","previousStatus","isStatusTransitioning","openSettings","settingsNavRef","settingsTitleKey","setSettingsTitleKey","isInitialMount","initialMeasureTimeout","overflowTimeout","shouldHideOverflow","setShouldHideOverflow","currentHeight","shouldShowBack","STANDBY","renderDisconnectedView","targetView","renderDisconnectedSection","previousView","renderStatusSection","targetStatus","union","onCopy","overlayStyle","cardStyle","$$mouseup","_$style","stopPropagation","_$use","_v$5","_v$6","_v$7","_v$8","registerOpenLVModal","registry","OpenLVModalElementDefault","triggerOpenModal","modal"],"mappings":"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","x_google_ignoreList":[0,1,3,4,7,15,21,22,23,24,25,26,27,28,29,30,31,32,33]}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../node_modules/.pnpm/solid-js@1.9.14/node_modules/solid-js/dist/solid.js","../../../node_modules/.pnpm/solid-js@1.9.14/node_modules/solid-js/web/dist/web.js","../../core/dist/url/index.js","../../../node_modules/.pnpm/eventemitter3@5.0.4/node_modules/eventemitter3/index.js","../../../node_modules/.pnpm/ts-pattern@5.9.0/node_modules/ts-pattern/dist/index.js","../../session/dist/index.js","../../provider/dist/index.js","../../../node_modules/.pnpm/classnames@2.5.1/node_modules/classnames/index.js","../src/theme/index.tsx","../src/styles/index.ts","../src/element.tsx","../src/utils/i18n.tsx","../src/context.tsx","../src/hooks/useSession.ts","../src/components/UnknownState.tsx","../../../node_modules/.pnpm/qr@0.6.0/node_modules/qr/index.js","../src/hooks/useClipboard.ts","../src/flow/HandshakeOpen.tsx","../src/flow/connecting.tsx","../src/flow/ErrorScreen.tsx","../src/flow/ConnectionFlow.tsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/defaultAttributes.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/Icon.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/chevron-left.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/chevron-right.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/circle-question-mark.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/plus.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/qr-code.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/settings.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/trash-2.jsx","../../../node_modules/.pnpm/lucide-solid@0.574.0_solid-js@1.9.14/node_modules/lucide-solid/dist/source/icons/x.jsx","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/chunk-LQJYWU4O.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/chunk-RZF76H2U.js","../../../node_modules/.pnpm/tailwind-variants@3.2.2_tailwind-merge@3.5.0_tailwindcss@4.3.3/node_modules/tailwind-variants/dist/lite.js","../src/ui/Button.tsx","../src/flow/disconnected/ConnectionGraphic.tsx","../src/flow/disconnected/Disconnected.tsx","../src/flow/InfoScreen.tsx","../src/hooks/usePunchTransition.ts","../src/hooks/useSettings.ts","../src/hooks/useTheme.ts","../src/assets/logo.ts","../src/components/footer/StatusIndicator.tsx","../src/components/footer/Footer.tsx","../src/components/Header.tsx","../src/hooks/useNavigationStack.ts","../src/ui/TransitionContainer.tsx","../src/ui/menu/MenuGroup.tsx","../src/ui/menu/MenuItem.tsx","../src/ui/Select.tsx","../src/components/settings/a11y/theme.tsx","../src/components/settings/a11y/index.tsx","../src/ui/InfoTooltip.tsx","../src/ui/menu/MenuLink.tsx","../src/ui/Toggle.tsx","../src/components/settings/connection/index.tsx","../src/ui/Input.tsx","../src/components/settings/connection/signaling.tsx","../src/components/settings/connection/transport.tsx","../src/components/settings/index.tsx","../src/components/ModalRoot.tsx","../src/utils/log.ts","../src/index.ts"],"sourcesContent":["let taskIdCounter = 1,\n isCallbackScheduled = false,\n isPerformingWork = false,\n taskQueue = [],\n currentTask = null,\n shouldYieldToHost = null,\n yieldInterval = 5,\n deadline = 0,\n maxYieldInterval = 300,\n maxDeadline = 0,\n scheduleCallback = null,\n scheduledCallback = null;\nconst maxSigned31BitInt = 1073741823;\nfunction setupScheduler() {\n const channel = new MessageChannel(),\n port1 = channel.port1,\n port = channel.port2;\n if (typeof port1.unref === \"function\") port1.unref();\n if (typeof port.unref === \"function\") port.unref();\n scheduleCallback = () => port.postMessage(null);\n port1.onmessage = () => {\n if (scheduledCallback !== null) {\n const currentTime = performance.now();\n deadline = currentTime + yieldInterval;\n maxDeadline = currentTime + maxYieldInterval;\n try {\n const hasMoreWork = scheduledCallback(currentTime);\n if (!hasMoreWork) {\n scheduledCallback = null;\n } else port.postMessage(null);\n } catch (error) {\n port.postMessage(null);\n throw error;\n }\n }\n };\n if (navigator && navigator.scheduling && navigator.scheduling.isInputPending) {\n const scheduling = navigator.scheduling;\n shouldYieldToHost = () => {\n const currentTime = performance.now();\n if (currentTime >= deadline) {\n if (scheduling.isInputPending()) {\n return true;\n }\n return currentTime >= maxDeadline;\n } else {\n return false;\n }\n };\n } else {\n shouldYieldToHost = () => performance.now() >= deadline;\n }\n}\nfunction enqueue(taskQueue, task) {\n function findIndex() {\n let m = 0;\n let n = taskQueue.length - 1;\n while (m <= n) {\n const k = n + m >> 1;\n const cmp = task.expirationTime - taskQueue[k].expirationTime;\n if (cmp > 0) m = k + 1;else if (cmp < 0) n = k - 1;else return k;\n }\n return m;\n }\n taskQueue.splice(findIndex(), 0, task);\n}\nfunction requestCallback(fn, options) {\n if (!scheduleCallback) setupScheduler();\n let startTime = performance.now(),\n timeout = maxSigned31BitInt;\n if (options && options.timeout) timeout = options.timeout;\n const newTask = {\n id: taskIdCounter++,\n fn,\n startTime,\n expirationTime: startTime + timeout\n };\n enqueue(taskQueue, newTask);\n if (!isCallbackScheduled && !isPerformingWork) {\n isCallbackScheduled = true;\n scheduledCallback = flushWork;\n scheduleCallback();\n }\n return newTask;\n}\nfunction cancelCallback(task) {\n task.fn = null;\n}\nfunction flushWork(initialTime) {\n isCallbackScheduled = false;\n isPerformingWork = true;\n try {\n return workLoop(initialTime);\n } finally {\n currentTask = null;\n isPerformingWork = false;\n }\n}\nfunction workLoop(initialTime) {\n let currentTime = initialTime;\n currentTask = taskQueue[0] || null;\n while (currentTask !== null) {\n if (currentTask.expirationTime > currentTime && shouldYieldToHost()) {\n break;\n }\n const callback = currentTask.fn;\n if (callback !== null) {\n currentTask.fn = null;\n const didUserCallbackTimeout = currentTask.expirationTime <= currentTime;\n callback(didUserCallbackTimeout);\n currentTime = performance.now();\n if (currentTask === taskQueue[0]) {\n taskQueue.shift();\n }\n } else taskQueue.shift();\n currentTask = taskQueue[0] || null;\n }\n return currentTask !== null;\n}\n\nconst sharedConfig = {\n context: undefined,\n registry: undefined,\n effects: undefined,\n done: false,\n getContextId() {\n return getContextId(this.context.count);\n },\n getNextContextId() {\n return getContextId(this.context.count++);\n }\n};\nfunction getContextId(count) {\n const num = String(count),\n len = num.length - 1;\n return sharedConfig.context.id + (len ? String.fromCharCode(96 + len) : \"\") + num;\n}\nfunction setHydrateContext(context) {\n sharedConfig.context = context;\n}\nfunction nextHydrateContext() {\n return {\n ...sharedConfig.context,\n id: sharedConfig.getNextContextId(),\n count: 0\n };\n}\n\nconst IS_DEV = false;\nconst equalFn = (a, b) => a === b;\nconst $PROXY = Symbol(\"solid-proxy\");\nconst SUPPORTS_PROXY = typeof Proxy === \"function\";\nconst $TRACK = Symbol(\"solid-track\");\nconst $DEVCOMP = Symbol(\"solid-dev-component\");\nconst signalOptions = {\n equals: equalFn\n};\nlet ERROR = null;\nlet runEffects = runQueue;\nconst STALE = 1;\nconst PENDING = 2;\nconst UNOWNED = {\n owned: null,\n cleanups: null,\n context: null,\n owner: null\n};\nconst NO_INIT = {};\nvar Owner = null;\nlet Transition = null;\nlet Scheduler = null;\nlet ExternalSourceConfig = null;\nlet Listener = null;\nlet Updates = null;\nlet Effects = null;\nlet ExecCount = 0;\nfunction createRoot(fn, detachedOwner) {\n const listener = Listener,\n owner = Owner,\n unowned = fn.length === 0,\n current = detachedOwner === undefined ? owner : detachedOwner,\n root = unowned ? UNOWNED : {\n owned: null,\n cleanups: null,\n context: current ? current.context : null,\n owner: current\n },\n updateFn = unowned ? fn : () => fn(() => untrack(() => cleanNode(root)));\n Owner = root;\n Listener = null;\n try {\n return runUpdates(updateFn, true);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n}\nfunction createSignal(value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const s = {\n value,\n observers: null,\n observerSlots: null,\n comparator: options.equals || undefined\n };\n const setter = value => {\n if (typeof value === \"function\") {\n if (Transition && Transition.running && Transition.sources.has(s)) value = value(s.tValue);else value = value(s.value);\n }\n return writeSignal(s, value);\n };\n return [readSignal.bind(s), setter];\n}\nfunction createComputed(fn, value, options) {\n const c = createComputation(fn, value, true, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createRenderEffect(fn, value, options) {\n const c = createComputation(fn, value, false, STALE);\n if (Scheduler && Transition && Transition.running) Updates.push(c);else updateComputation(c);\n}\nfunction createEffect(fn, value, options) {\n runEffects = runUserEffects;\n const c = createComputation(fn, value, false, STALE),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n if (!options || !options.render) c.user = true;\n Effects ? Effects.push(c) : updateComputation(c);\n}\nfunction createReaction(onInvalidate, options) {\n let fn;\n const c = createComputation(() => {\n fn ? fn() : untrack(onInvalidate);\n fn = undefined;\n }, undefined, false, 0),\n s = SuspenseContext && useContext(SuspenseContext);\n if (s) c.suspense = s;\n c.user = true;\n return tracking => {\n fn = tracking;\n updateComputation(c);\n };\n}\nfunction createMemo(fn, value, options) {\n options = options ? Object.assign({}, signalOptions, options) : signalOptions;\n const c = createComputation(fn, value, true, 0);\n c.observers = null;\n c.observerSlots = null;\n c.comparator = options.equals || undefined;\n if (Scheduler && Transition && Transition.running) {\n c.tState = STALE;\n Updates.push(c);\n } else updateComputation(c);\n return readSignal.bind(c);\n}\nfunction isPromise(v) {\n return v && typeof v === \"object\" && \"then\" in v;\n}\nfunction createResource(pSource, pFetcher, pOptions) {\n let source;\n let fetcher;\n let options;\n if (typeof pFetcher === \"function\") {\n source = pSource;\n fetcher = pFetcher;\n options = pOptions || {};\n } else {\n source = true;\n fetcher = pSource;\n options = pFetcher || {};\n }\n let pr = null,\n initP = NO_INIT,\n id = null,\n loadedUnderTransition = false,\n scheduled = false,\n resolved = \"initialValue\" in options,\n dynamic = typeof source === \"function\" && createMemo(source);\n const contexts = new Set(),\n [value, setValue] = (options.storage || createSignal)(options.initialValue),\n [error, setError] = createSignal(undefined),\n [track, trigger] = createSignal(undefined, {\n equals: false\n }),\n [state, setState] = createSignal(resolved ? \"ready\" : \"unresolved\");\n if (Owner) onCleanup(() => {\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n if (Transition && pr) Transition.promises.delete(pr);\n pr = null;\n });\n if (sharedConfig.context) {\n id = sharedConfig.getNextContextId();\n if (options.ssrLoadFrom === \"initial\") initP = options.initialValue;else if (sharedConfig.load && sharedConfig.has(id)) initP = sharedConfig.load(id);\n }\n function loadEnd(p, v, error, key) {\n if (pr === p) {\n pr = null;\n key !== undefined && (resolved = true);\n if ((p === initP || v === initP) && options.onHydrated) queueMicrotask(() => options.onHydrated(key, {\n value: v\n }));\n initP = NO_INIT;\n if (Transition && p && loadedUnderTransition) {\n Transition.promises.delete(p);\n loadedUnderTransition = false;\n runUpdates(() => {\n Transition.running = true;\n completeLoad(v, error);\n }, false);\n } else completeLoad(v, error);\n }\n return v;\n }\n function completeLoad(v, err) {\n runUpdates(() => {\n if (err === undefined) setValue(() => v);\n setState(err !== undefined ? \"errored\" : resolved ? \"ready\" : \"unresolved\");\n setError(err);\n for (const c of contexts.keys()) c.decrement();\n contexts.clear();\n }, false);\n }\n function read() {\n const c = SuspenseContext && useContext(SuspenseContext),\n v = value(),\n err = error();\n if (err !== undefined && !pr) throw err;\n if (Listener && !Listener.user && c) {\n createComputed(() => {\n track();\n if (pr) {\n if (c.resolved && Transition && loadedUnderTransition) Transition.promises.add(pr);else if (!contexts.has(c)) {\n c.increment();\n contexts.add(c);\n }\n }\n });\n }\n return v;\n }\n function load(refetching = true) {\n if (refetching !== false && scheduled) return;\n scheduled = false;\n const lookup = dynamic ? dynamic() : source;\n loadedUnderTransition = Transition && Transition.running;\n if (lookup == null || lookup === false) {\n loadEnd(pr, untrack(value));\n return;\n }\n if (Transition && pr) Transition.promises.delete(pr);\n let error;\n const p = initP !== NO_INIT ? initP : untrack(() => {\n try {\n return fetcher(lookup, {\n value: value(),\n refetching\n });\n } catch (fetcherError) {\n error = fetcherError;\n }\n });\n if (error !== undefined) {\n loadEnd(pr, undefined, castError(error), lookup);\n return;\n } else if (!isPromise(p)) {\n loadEnd(pr, p, undefined, lookup);\n return p;\n }\n pr = p;\n if (\"v\" in p) {\n if (p.s === 1) loadEnd(pr, p.v, undefined, lookup);else loadEnd(pr, undefined, castError(p.v), lookup);\n return p;\n }\n scheduled = true;\n queueMicrotask(() => scheduled = false);\n runUpdates(() => {\n setState(resolved ? \"refreshing\" : \"pending\");\n trigger();\n }, false);\n return p.then(v => loadEnd(p, v, undefined, lookup), e => loadEnd(p, undefined, castError(e), lookup));\n }\n Object.defineProperties(read, {\n state: {\n get: () => state()\n },\n error: {\n get: () => error()\n },\n loading: {\n get() {\n const s = state();\n return s === \"pending\" || s === \"refreshing\";\n }\n },\n latest: {\n get() {\n if (!resolved) return read();\n const err = error();\n if (err && !pr) throw err;\n return value();\n }\n }\n });\n let owner = Owner;\n if (dynamic) createComputed(() => (owner = Owner, load(false)));else load(false);\n return [read, {\n refetch: info => runWithOwner(owner, () => load(info)),\n mutate: setValue\n }];\n}\nfunction createDeferred(source, options) {\n let t,\n timeout = options ? options.timeoutMs : undefined;\n const node = createComputation(() => {\n if (!t || !t.fn) t = requestCallback(() => setDeferred(() => node.value), timeout !== undefined ? {\n timeout\n } : undefined);\n return source();\n }, undefined, true);\n const [deferred, setDeferred] = createSignal(Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, options);\n updateComputation(node);\n setDeferred(() => Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n return deferred;\n}\nfunction createSelector(source, fn = equalFn, options) {\n const subs = new Map();\n const node = createComputation(p => {\n const v = source();\n for (const [key, val] of subs.entries()) if (fn(key, v) !== fn(key, p)) {\n for (const c of val.values()) {\n c.state = STALE;\n if (c.pure) Updates.push(c);else Effects.push(c);\n }\n }\n return v;\n }, undefined, true, STALE);\n updateComputation(node);\n return key => {\n const listener = Listener;\n if (listener) {\n let l;\n if (l = subs.get(key)) l.add(listener);else subs.set(key, l = new Set([listener]));\n onCleanup(() => {\n l.delete(listener);\n !l.size && subs.delete(key);\n });\n }\n return fn(key, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value);\n };\n}\nfunction batch(fn) {\n return runUpdates(fn, false);\n}\nfunction untrack(fn) {\n if (!ExternalSourceConfig && Listener === null) return fn();\n const listener = Listener;\n Listener = null;\n try {\n if (ExternalSourceConfig) return ExternalSourceConfig.untrack(fn);\n return fn();\n } finally {\n Listener = listener;\n }\n}\nfunction on(deps, fn, options) {\n const isArray = Array.isArray(deps);\n let prevInput;\n let defer = options && options.defer;\n return prevValue => {\n let input;\n if (isArray) {\n input = Array(deps.length);\n for (let i = 0; i < deps.length; i++) input[i] = deps[i]();\n } else input = deps();\n if (defer) {\n defer = false;\n return prevValue;\n }\n const result = untrack(() => fn(input, prevInput, prevValue));\n prevInput = input;\n return result;\n };\n}\nfunction onMount(fn) {\n createEffect(() => untrack(fn));\n}\nfunction onCleanup(fn) {\n if (Owner === null) ;else if (Owner.cleanups === null) Owner.cleanups = [fn];else Owner.cleanups.push(fn);\n return fn;\n}\nfunction catchError(fn, handler) {\n ERROR || (ERROR = Symbol(\"error\"));\n Owner = createComputation(undefined, undefined, true);\n Owner.context = {\n ...Owner.context,\n [ERROR]: [handler]\n };\n if (Transition && Transition.running) Transition.sources.add(Owner);\n try {\n return fn();\n } catch (err) {\n handleError(err);\n } finally {\n Owner = Owner.owner;\n }\n}\nfunction getListener() {\n return Listener;\n}\nfunction getOwner() {\n return Owner;\n}\nfunction runWithOwner(o, fn) {\n const prev = Owner;\n const prevListener = Listener;\n Owner = o;\n Listener = null;\n try {\n return runUpdates(fn, true);\n } catch (err) {\n handleError(err);\n } finally {\n Owner = prev;\n Listener = prevListener;\n }\n}\nfunction enableScheduling(scheduler = requestCallback) {\n Scheduler = scheduler;\n}\nfunction startTransition(fn) {\n if (Transition && Transition.running) {\n fn();\n return Transition.done;\n }\n const l = Listener;\n const o = Owner;\n return Promise.resolve().then(() => {\n Listener = l;\n Owner = o;\n let t;\n if (Scheduler || SuspenseContext) {\n t = Transition || (Transition = {\n sources: new Set(),\n effects: [],\n promises: new Set(),\n disposed: new Set(),\n queue: new Set(),\n running: true\n });\n t.done || (t.done = new Promise(res => t.resolve = res));\n t.running = true;\n }\n runUpdates(fn, false);\n Listener = Owner = null;\n return t ? t.done : undefined;\n });\n}\nconst [transPending, setTransPending] = /*@__PURE__*/createSignal(false);\nfunction useTransition() {\n return [transPending, startTransition];\n}\nfunction resumeEffects(e) {\n Effects.push.apply(Effects, e);\n e.length = 0;\n}\nfunction createContext(defaultValue, options) {\n const id = Symbol(\"context\");\n return {\n id,\n Provider: createProvider(id),\n defaultValue\n };\n}\nfunction useContext(context) {\n let value;\n return Owner && Owner.context && (value = Owner.context[context.id]) !== undefined ? value : context.defaultValue;\n}\nfunction children(fn) {\n const children = createMemo(fn);\n const memo = createMemo(() => resolveChildren(children()));\n memo.toArray = () => {\n const c = memo();\n return Array.isArray(c) ? c : c != null ? [c] : [];\n };\n return memo;\n}\nlet SuspenseContext;\nfunction getSuspenseContext() {\n return SuspenseContext || (SuspenseContext = createContext());\n}\nfunction enableExternalSource(factory, untrack = fn => fn()) {\n if (ExternalSourceConfig) {\n const {\n factory: oldFactory,\n untrack: oldUntrack\n } = ExternalSourceConfig;\n ExternalSourceConfig = {\n factory: (fn, trigger) => {\n const oldSource = oldFactory(fn, trigger);\n const source = factory(x => oldSource.track(x), trigger);\n return {\n track: x => source.track(x),\n dispose() {\n source.dispose();\n oldSource.dispose();\n }\n };\n },\n untrack: fn => oldUntrack(() => untrack(fn))\n };\n } else {\n ExternalSourceConfig = {\n factory,\n untrack\n };\n }\n}\nfunction readSignal() {\n const runningTransition = Transition && Transition.running;\n if (this.sources && (runningTransition ? this.tState : this.state)) {\n if ((runningTransition ? this.tState : this.state) === STALE) updateComputation(this);else {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(this), false);\n Updates = updates;\n }\n }\n if (Listener) {\n const observers = this.observers;\n if (!observers || observers[observers.length - 1] !== Listener) {\n const sSlot = observers ? observers.length : 0;\n if (!Listener.sources) {\n Listener.sources = [this];\n Listener.sourceSlots = [sSlot];\n } else {\n Listener.sources.push(this);\n Listener.sourceSlots.push(sSlot);\n }\n if (!observers) {\n this.observers = [Listener];\n this.observerSlots = [Listener.sources.length - 1];\n } else {\n observers.push(Listener);\n this.observerSlots.push(Listener.sources.length - 1);\n }\n }\n }\n if (runningTransition && Transition.sources.has(this)) return this.tValue;\n return this.value;\n}\nfunction writeSignal(node, value, isComp) {\n let current = Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value;\n if (!node.comparator || !node.comparator(current, value)) {\n if (Transition) {\n const TransitionRunning = Transition.running;\n if (TransitionRunning || !isComp && Transition.sources.has(node)) {\n Transition.sources.add(node);\n node.tValue = value;\n }\n if (!TransitionRunning) node.value = value;\n } else node.value = value;\n if (node.observers && node.observers.length) {\n runUpdates(() => {\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n const TransitionRunning = Transition && Transition.running;\n if (TransitionRunning && Transition.disposed.has(o)) continue;\n if (TransitionRunning ? !o.tState : !o.state) {\n if (o.pure) Updates.push(o);else Effects.push(o);\n if (o.observers) markDownstream(o);\n }\n if (!TransitionRunning) o.state = STALE;else o.tState = STALE;\n }\n if (Updates.length > 10e5) {\n Updates = [];\n if (IS_DEV) ;\n throw new Error();\n }\n }, false);\n }\n }\n return value;\n}\nfunction updateComputation(node) {\n if (!node.fn) return;\n cleanNode(node);\n const time = ExecCount;\n runComputation(node, Transition && Transition.running && Transition.sources.has(node) ? node.tValue : node.value, time);\n if (Transition && !Transition.running && Transition.sources.has(node)) {\n queueMicrotask(() => {\n runUpdates(() => {\n Transition && (Transition.running = true);\n Listener = Owner = node;\n runComputation(node, node.tValue, time);\n Listener = Owner = null;\n }, false);\n });\n }\n}\nfunction runComputation(node, value, time) {\n let nextValue;\n const owner = Owner,\n listener = Listener;\n Listener = Owner = node;\n try {\n nextValue = node.fn(value);\n } catch (err) {\n if (node.pure) {\n if (Transition && Transition.running) {\n node.tState = STALE;\n node.tOwned && node.tOwned.forEach(cleanNode);\n node.tOwned = undefined;\n } else {\n node.state = STALE;\n node.owned && node.owned.forEach(cleanNode);\n node.owned = null;\n }\n }\n node.updatedAt = time + 1;\n return handleError(err);\n } finally {\n Listener = listener;\n Owner = owner;\n }\n if (!node.updatedAt || node.updatedAt <= time) {\n if (node.updatedAt != null && \"observers\" in node) {\n writeSignal(node, nextValue, true);\n } else if (Transition && Transition.running && node.pure) {\n if (!Transition.sources.has(node)) node.value = nextValue;\n Transition.sources.add(node);\n node.tValue = nextValue;\n } else node.value = nextValue;\n node.updatedAt = time;\n }\n}\nfunction createComputation(fn, init, pure, state = STALE, options) {\n const c = {\n fn,\n state: state,\n updatedAt: null,\n owned: null,\n sources: null,\n sourceSlots: null,\n cleanups: null,\n value: init,\n owner: Owner,\n context: Owner ? Owner.context : null,\n pure\n };\n if (Transition && Transition.running) {\n c.state = 0;\n c.tState = state;\n }\n if (Owner === null) ;else if (Owner !== UNOWNED) {\n if (Transition && Transition.running && Owner.pure) {\n if (!Owner.tOwned) Owner.tOwned = [c];else Owner.tOwned.push(c);\n } else {\n if (!Owner.owned) Owner.owned = [c];else Owner.owned.push(c);\n }\n }\n if (ExternalSourceConfig && c.fn) {\n const sourceFn = c.fn;\n const [track, trigger] = createSignal(undefined, {\n equals: false\n });\n const ordinary = ExternalSourceConfig.factory(sourceFn, trigger);\n onCleanup(() => ordinary.dispose());\n let inTransition;\n const triggerInTransition = () => startTransition(trigger).then(() => {\n if (inTransition) {\n inTransition.dispose();\n inTransition = undefined;\n }\n });\n c.fn = x => {\n track();\n if (Transition && Transition.running) {\n if (!inTransition) inTransition = ExternalSourceConfig.factory(sourceFn, triggerInTransition);\n return inTransition.track(x);\n }\n return ordinary.track(x);\n };\n }\n return c;\n}\nfunction runTop(node) {\n const runningTransition = Transition && Transition.running;\n if ((runningTransition ? node.tState : node.state) === 0) return;\n if ((runningTransition ? node.tState : node.state) === PENDING) return lookUpstream(node);\n if (node.suspense && untrack(node.suspense.inFallback)) return node.suspense.effects.push(node);\n const ancestors = [node];\n while ((node = node.owner) && (!node.updatedAt || node.updatedAt < ExecCount)) {\n if (runningTransition && Transition.disposed.has(node)) return;\n if (runningTransition ? node.tState : node.state) ancestors.push(node);\n }\n for (let i = ancestors.length - 1; i >= 0; i--) {\n node = ancestors[i];\n if (runningTransition) {\n let top = node,\n prev = ancestors[i + 1];\n while ((top = top.owner) && top !== prev) {\n if (Transition.disposed.has(top)) return;\n }\n }\n if ((runningTransition ? node.tState : node.state) === STALE) {\n updateComputation(node);\n } else if ((runningTransition ? node.tState : node.state) === PENDING) {\n const updates = Updates;\n Updates = null;\n runUpdates(() => lookUpstream(node, ancestors[0]), false);\n Updates = updates;\n }\n }\n}\nfunction runUpdates(fn, init) {\n if (Updates) return fn();\n let wait = false;\n if (!init) Updates = [];\n if (Effects) wait = true;else Effects = [];\n ExecCount++;\n try {\n const res = fn();\n completeUpdates(wait);\n return res;\n } catch (err) {\n if (!wait) Effects = null;\n Updates = null;\n handleError(err);\n }\n}\nfunction completeUpdates(wait) {\n if (Updates) {\n if (Scheduler && Transition && Transition.running) scheduleQueue(Updates);else runQueue(Updates);\n Updates = null;\n }\n if (wait) return;\n let res;\n if (Transition) {\n if (!Transition.promises.size && !Transition.queue.size) {\n const sources = Transition.sources;\n const disposed = Transition.disposed;\n Effects.push.apply(Effects, Transition.effects);\n res = Transition.resolve;\n for (const e of Effects) {\n \"tState\" in e && (e.state = e.tState);\n delete e.tState;\n }\n Transition = null;\n runUpdates(() => {\n for (const d of disposed) cleanNode(d);\n for (const v of sources) {\n v.value = v.tValue;\n if (v.owned) {\n for (let i = 0, len = v.owned.length; i < len; i++) cleanNode(v.owned[i]);\n }\n if (v.tOwned) v.owned = v.tOwned;\n delete v.tValue;\n delete v.tOwned;\n v.tState = 0;\n }\n setTransPending(false);\n }, false);\n } else if (Transition.running) {\n Transition.running = false;\n Transition.effects.push.apply(Transition.effects, Effects);\n Effects = null;\n setTransPending(true);\n return;\n }\n }\n const e = Effects;\n Effects = null;\n if (e.length) runUpdates(() => runEffects(e), false);\n if (res) res();\n}\nfunction runQueue(queue) {\n for (let i = 0; i < queue.length; i++) runTop(queue[i]);\n}\nfunction scheduleQueue(queue) {\n for (let i = 0; i < queue.length; i++) {\n const item = queue[i];\n const tasks = Transition.queue;\n if (!tasks.has(item)) {\n tasks.add(item);\n Scheduler(() => {\n tasks.delete(item);\n runUpdates(() => {\n Transition.running = true;\n runTop(item);\n }, false);\n Transition && (Transition.running = false);\n });\n }\n }\n}\nfunction runUserEffects(queue) {\n let i,\n userLength = 0;\n for (i = 0; i < queue.length; i++) {\n const e = queue[i];\n if (!e.user) runTop(e);else queue[userLength++] = e;\n }\n if (sharedConfig.context) {\n if (sharedConfig.count) {\n sharedConfig.effects || (sharedConfig.effects = []);\n sharedConfig.effects.push(...queue.slice(0, userLength));\n return;\n }\n setHydrateContext();\n }\n if (sharedConfig.effects && (sharedConfig.done || !sharedConfig.count)) {\n queue = [...sharedConfig.effects, ...queue];\n userLength += sharedConfig.effects.length;\n delete sharedConfig.effects;\n }\n for (i = 0; i < userLength; i++) runTop(queue[i]);\n}\nfunction lookUpstream(node, ignore) {\n const runningTransition = Transition && Transition.running;\n if (runningTransition) node.tState = 0;else node.state = 0;\n for (let i = 0; i < node.sources.length; i += 1) {\n const source = node.sources[i];\n if (source.sources) {\n const state = runningTransition ? source.tState : source.state;\n if (state === STALE) {\n if (source !== ignore && (!source.updatedAt || source.updatedAt < ExecCount)) runTop(source);\n } else if (state === PENDING) lookUpstream(source, ignore);\n }\n }\n}\nfunction markDownstream(node) {\n const runningTransition = Transition && Transition.running;\n for (let i = 0; i < node.observers.length; i += 1) {\n const o = node.observers[i];\n if (runningTransition ? !o.tState : !o.state) {\n if (runningTransition) o.tState = PENDING;else o.state = PENDING;\n if (o.pure) Updates.push(o);else Effects.push(o);\n o.observers && markDownstream(o);\n }\n }\n}\nfunction cleanNode(node) {\n let i;\n if (node.sources) {\n while (node.sources.length) {\n const source = node.sources.pop(),\n index = node.sourceSlots.pop(),\n obs = source.observers;\n if (obs && obs.length) {\n const n = obs.pop(),\n s = source.observerSlots.pop();\n if (index < obs.length) {\n n.sourceSlots[s] = index;\n obs[index] = n;\n source.observerSlots[index] = s;\n }\n }\n }\n }\n if (node.tOwned) {\n for (i = node.tOwned.length - 1; i >= 0; i--) cleanNode(node.tOwned[i]);\n delete node.tOwned;\n }\n if (Transition && Transition.running && node.pure) {\n reset(node, true);\n } else if (node.owned) {\n for (i = node.owned.length - 1; i >= 0; i--) cleanNode(node.owned[i]);\n node.owned = null;\n }\n if (node.cleanups) {\n for (i = node.cleanups.length - 1; i >= 0; i--) node.cleanups[i]();\n node.cleanups = null;\n }\n if (Transition && Transition.running) node.tState = 0;else node.state = 0;\n}\nfunction reset(node, top) {\n if (!top) {\n node.tState = 0;\n Transition.disposed.add(node);\n }\n if (node.owned) {\n for (let i = 0; i < node.owned.length; i++) reset(node.owned[i]);\n }\n}\nfunction castError(err) {\n if (err instanceof Error) return err;\n return new Error(typeof err === \"string\" ? err : \"Unknown error\", {\n cause: err\n });\n}\nfunction runErrors(err, fns, owner) {\n try {\n for (const f of fns) f(err);\n } catch (e) {\n handleError(e, owner && owner.owner || null);\n }\n}\nfunction handleError(err, owner = Owner) {\n const fns = ERROR && owner && owner.context && owner.context[ERROR];\n const error = castError(err);\n if (!fns) throw error;\n if (Effects) Effects.push({\n fn() {\n runErrors(error, fns, owner);\n },\n state: STALE\n });else runErrors(error, fns, owner);\n}\nfunction resolveChildren(children) {\n if (typeof children === \"function\" && !children.length) return resolveChildren(children());\n if (Array.isArray(children)) {\n const results = [];\n for (let i = 0; i < children.length; i++) {\n const result = resolveChildren(children[i]);\n if (Array.isArray(result)) {\n if (result.length < 32768) results.push.apply(results, result);else for (let j = 0; j < result.length; j++) results.push(result[j]);\n } else {\n results.push(result);\n }\n }\n return results;\n }\n return children;\n}\nfunction createProvider(id, options) {\n return function provider(props) {\n let res;\n createRenderEffect(() => res = untrack(() => {\n Owner.context = {\n ...Owner.context,\n [id]: props.value\n };\n return children(() => props.children);\n }), undefined);\n return res;\n };\n}\nfunction onError(fn) {\n ERROR || (ERROR = Symbol(\"error\"));\n if (Owner === null) ;else if (Owner.context === null || !Owner.context[ERROR]) {\n Owner.context = {\n ...Owner.context,\n [ERROR]: [fn]\n };\n mutateContext(Owner, ERROR, [fn]);\n } else Owner.context[ERROR].push(fn);\n}\nfunction mutateContext(o, key, value) {\n if (o.owned) {\n for (let i = 0; i < o.owned.length; i++) {\n if (o.owned[i].context === o.context) mutateContext(o.owned[i], key, value);\n if (!o.owned[i].context) {\n o.owned[i].context = o.context;\n mutateContext(o.owned[i], key, value);\n } else if (!o.owned[i].context[key]) {\n o.owned[i].context[key] = value;\n mutateContext(o.owned[i], key, value);\n }\n }\n }\n}\n\nfunction observable(input) {\n return {\n subscribe(observer) {\n if (!(observer instanceof Object) || observer == null) {\n throw new TypeError(\"Expected the observer to be an object.\");\n }\n const handler = typeof observer === \"function\" ? observer : observer.next && observer.next.bind(observer);\n if (!handler) {\n return {\n unsubscribe() {}\n };\n }\n const dispose = createRoot(disposer => {\n createEffect(() => {\n const v = input();\n untrack(() => handler(v));\n });\n return disposer;\n });\n if (getOwner()) onCleanup(dispose);\n return {\n unsubscribe() {\n dispose();\n }\n };\n },\n [Symbol.observable || \"@@observable\"]() {\n return this;\n }\n };\n}\nfunction from(producer, initalValue = undefined) {\n const [s, set] = createSignal(initalValue, {\n equals: false\n });\n if (\"subscribe\" in producer) {\n const unsub = producer.subscribe(v => set(() => v));\n onCleanup(() => \"unsubscribe\" in unsub ? unsub.unsubscribe() : unsub());\n } else {\n const clean = producer(set);\n onCleanup(clean);\n }\n return s;\n}\n\nconst FALLBACK = Symbol(\"fallback\");\nfunction dispose(d) {\n for (let i = 0; i < d.length; i++) d[i]();\n}\nfunction mapArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n len = 0,\n indexes = mapFn.length > 1 ? [] : null;\n onCleanup(() => dispose(disposers));\n return () => {\n let newItems = list() || [],\n newLen = newItems.length,\n i,\n j;\n newItems[$TRACK];\n return untrack(() => {\n let newIndices, newIndicesNext, temp, tempdisposers, tempIndexes, start, end, newEnd, item;\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n indexes && (indexes = []);\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n }\n else if (len === 0) {\n mapped = new Array(newLen);\n for (j = 0; j < newLen; j++) {\n items[j] = newItems[j];\n mapped[j] = createRoot(mapper);\n }\n len = newLen;\n } else {\n temp = new Array(newLen);\n tempdisposers = new Array(newLen);\n indexes && (tempIndexes = new Array(newLen));\n for (start = 0, end = Math.min(len, newLen); start < end && items[start] === newItems[start]; start++);\n for (end = len - 1, newEnd = newLen - 1; end >= start && newEnd >= start && items[end] === newItems[newEnd]; end--, newEnd--) {\n temp[newEnd] = mapped[end];\n tempdisposers[newEnd] = disposers[end];\n indexes && (tempIndexes[newEnd] = indexes[end]);\n }\n newIndices = new Map();\n newIndicesNext = new Array(newEnd + 1);\n for (j = newEnd; j >= start; j--) {\n item = newItems[j];\n i = newIndices.get(item);\n newIndicesNext[j] = i === undefined ? -1 : i;\n newIndices.set(item, j);\n }\n for (i = start; i <= end; i++) {\n item = items[i];\n j = newIndices.get(item);\n if (j !== undefined && j !== -1) {\n temp[j] = mapped[i];\n tempdisposers[j] = disposers[i];\n indexes && (tempIndexes[j] = indexes[i]);\n j = newIndicesNext[j];\n newIndices.set(item, j);\n } else disposers[i]();\n }\n for (j = start; j < newLen; j++) {\n if (j in temp) {\n mapped[j] = temp[j];\n disposers[j] = tempdisposers[j];\n if (indexes) {\n indexes[j] = tempIndexes[j];\n indexes[j](j);\n }\n } else mapped[j] = createRoot(mapper);\n }\n mapped = mapped.slice(0, len = newLen);\n items = newItems.slice(0);\n }\n return mapped;\n });\n function mapper(disposer) {\n disposers[j] = disposer;\n if (indexes) {\n const [s, set] = createSignal(j);\n indexes[j] = set;\n return mapFn(newItems[j], s);\n }\n return mapFn(newItems[j]);\n }\n };\n}\nfunction indexArray(list, mapFn, options = {}) {\n let items = [],\n mapped = [],\n disposers = [],\n signals = [],\n len = 0,\n i;\n onCleanup(() => dispose(disposers));\n return () => {\n const newItems = list() || [],\n newLen = newItems.length;\n newItems[$TRACK];\n return untrack(() => {\n if (newLen === 0) {\n if (len !== 0) {\n dispose(disposers);\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n signals = [];\n }\n if (options.fallback) {\n items = [FALLBACK];\n mapped[0] = createRoot(disposer => {\n disposers[0] = disposer;\n return options.fallback();\n });\n len = 1;\n }\n return mapped;\n }\n if (items[0] === FALLBACK) {\n disposers[0]();\n disposers = [];\n items = [];\n mapped = [];\n len = 0;\n }\n for (i = 0; i < newLen; i++) {\n if (i < items.length && items[i] !== newItems[i]) {\n signals[i](() => newItems[i]);\n } else if (i >= items.length) {\n mapped[i] = createRoot(mapper);\n }\n }\n for (; i < items.length; i++) {\n disposers[i]();\n }\n len = signals.length = disposers.length = newLen;\n items = newItems.slice(0);\n return mapped = mapped.slice(0, len);\n });\n function mapper(disposer) {\n disposers[i] = disposer;\n const [s, set] = createSignal(newItems[i]);\n signals[i] = set;\n return mapFn(s, i);\n }\n };\n}\n\nlet hydrationEnabled = false;\nfunction enableHydration() {\n hydrationEnabled = true;\n}\nfunction createComponent(Comp, props) {\n if (hydrationEnabled) {\n if (sharedConfig.context) {\n const c = sharedConfig.context;\n setHydrateContext(nextHydrateContext());\n const r = untrack(() => Comp(props || {}));\n setHydrateContext(c);\n return r;\n }\n }\n return untrack(() => Comp(props || {}));\n}\nfunction trueFn() {\n return true;\n}\nconst propTraps = {\n get(_, property, receiver) {\n if (property === $PROXY) return receiver;\n return _.get(property);\n },\n has(_, property) {\n if (property === $PROXY) return true;\n return _.has(property);\n },\n set: trueFn,\n deleteProperty: trueFn,\n getOwnPropertyDescriptor(_, property) {\n return {\n configurable: true,\n enumerable: true,\n get() {\n return _.get(property);\n },\n set: trueFn,\n deleteProperty: trueFn\n };\n },\n ownKeys(_) {\n return _.keys();\n }\n};\nfunction resolveSource(s) {\n return !(s = typeof s === \"function\" ? s() : s) ? {} : s;\n}\nfunction resolveSources() {\n for (let i = 0, length = this.length; i < length; ++i) {\n const v = this[i]();\n if (v !== undefined) return v;\n }\n}\nfunction mergeProps(...sources) {\n let proxy = false;\n for (let i = 0; i < sources.length; i++) {\n const s = sources[i];\n proxy = proxy || !!s && $PROXY in s;\n sources[i] = typeof s === \"function\" ? (proxy = true, createMemo(s)) : s;\n }\n if (SUPPORTS_PROXY && proxy) {\n return new Proxy({\n get(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n const v = resolveSource(sources[i])[property];\n if (v !== undefined) return v;\n }\n },\n has(property) {\n for (let i = sources.length - 1; i >= 0; i--) {\n if (property in resolveSource(sources[i])) return true;\n }\n return false;\n },\n keys() {\n const keys = [];\n for (let i = 0; i < sources.length; i++) keys.push(...Object.keys(resolveSource(sources[i])));\n return [...new Set(keys)];\n }\n }, propTraps);\n }\n const sourcesMap = {};\n const defined = Object.create(null);\n for (let i = sources.length - 1; i >= 0; i--) {\n const source = sources[i];\n if (!source) continue;\n const sourceKeys = Object.getOwnPropertyNames(source);\n for (let i = sourceKeys.length - 1; i >= 0; i--) {\n const key = sourceKeys[i];\n if (key === \"__proto__\" || key === \"constructor\") continue;\n const desc = Object.getOwnPropertyDescriptor(source, key);\n if (!defined[key]) {\n defined[key] = desc.get ? {\n enumerable: true,\n configurable: true,\n get: resolveSources.bind(sourcesMap[key] = [desc.get.bind(source)])\n } : desc.value !== undefined ? desc : undefined;\n } else {\n const sources = sourcesMap[key];\n if (sources) {\n if (desc.get) sources.push(desc.get.bind(source));else if (desc.value !== undefined) sources.push(() => desc.value);\n }\n }\n }\n }\n const target = {};\n const definedKeys = Object.keys(defined);\n for (let i = definedKeys.length - 1; i >= 0; i--) {\n const key = definedKeys[i],\n desc = defined[key];\n if (desc && desc.get) Object.defineProperty(target, key, desc);else target[key] = desc ? desc.value : undefined;\n }\n return target;\n}\nfunction splitProps(props, ...keys) {\n const len = keys.length;\n if (SUPPORTS_PROXY && $PROXY in props) {\n const blocked = len > 1 ? keys.flat() : keys[0];\n const res = keys.map(k => {\n return new Proxy({\n get(property) {\n return k.includes(property) ? props[property] : undefined;\n },\n has(property) {\n return k.includes(property) && property in props;\n },\n keys() {\n return k.filter(property => property in props);\n }\n }, propTraps);\n });\n res.push(new Proxy({\n get(property) {\n return blocked.includes(property) ? undefined : props[property];\n },\n has(property) {\n return blocked.includes(property) ? false : property in props;\n },\n keys() {\n return Object.keys(props).filter(k => !blocked.includes(k));\n }\n }, propTraps));\n return res;\n }\n const objects = [];\n for (let i = 0; i <= len; i++) {\n objects[i] = {};\n }\n for (const propName of Object.getOwnPropertyNames(props)) {\n let keyIndex = len;\n for (let i = 0; i < keys.length; i++) {\n if (keys[i].includes(propName)) {\n keyIndex = i;\n break;\n }\n }\n const desc = Object.getOwnPropertyDescriptor(props, propName);\n const isDefaultDesc = !desc.get && !desc.set && desc.enumerable && desc.writable && desc.configurable;\n isDefaultDesc ? objects[keyIndex][propName] = desc.value : Object.defineProperty(objects[keyIndex], propName, desc);\n }\n return objects;\n}\nfunction lazy(fn) {\n let comp;\n let p;\n const wrap = props => {\n const ctx = sharedConfig.context;\n if (ctx) {\n const [s, set] = createSignal();\n sharedConfig.count || (sharedConfig.count = 0);\n sharedConfig.count++;\n (p || (p = fn())).then(mod => {\n !sharedConfig.done && setHydrateContext(ctx);\n sharedConfig.count--;\n set(() => mod.default);\n setHydrateContext();\n });\n comp = s;\n } else if (!comp) {\n const [s] = createResource(() => (p || (p = fn())).then(mod => mod.default));\n comp = s;\n onCleanup(() => comp = undefined);\n }\n let Comp;\n return createMemo(() => (Comp = comp?.()) ? untrack(() => {\n if (IS_DEV) ;\n if (!ctx || sharedConfig.done) return Comp(props);\n const c = sharedConfig.context;\n setHydrateContext(ctx);\n const r = Comp(props);\n setHydrateContext(c);\n return r;\n }) : \"\");\n };\n wrap.preload = () => p || ((p = fn()).then(mod => comp = () => mod.default), p);\n return wrap;\n}\nlet counter = 0;\nfunction createUniqueId() {\n const ctx = sharedConfig.context;\n return ctx ? sharedConfig.getNextContextId() : `cl-${counter++}`;\n}\n\nconst narrowedError = name => `Stale read from <${name}>.`;\nfunction For(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(mapArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Index(props) {\n const fallback = \"fallback\" in props && {\n fallback: () => props.fallback\n };\n return createMemo(indexArray(() => props.each, props.children, fallback || undefined));\n}\nfunction Show(props) {\n const keyed = props.keyed;\n const conditionValue = createMemo(() => props.when, undefined, undefined);\n const condition = keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n return createMemo(() => {\n const c = condition();\n if (c) {\n const child = props.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(keyed ? c : () => {\n if (!untrack(condition)) throw narrowedError(\"Show\");\n return conditionValue();\n })) : child;\n }\n return props.fallback;\n }, undefined, undefined);\n}\nfunction Switch(props) {\n const chs = children(() => props.children);\n const switchFunc = createMemo(() => {\n const ch = chs();\n const mps = Array.isArray(ch) ? ch : [ch];\n let func = () => undefined;\n for (let i = 0; i < mps.length; i++) {\n const index = i;\n const mp = mps[i];\n const prevFunc = func;\n const conditionValue = createMemo(() => prevFunc() ? undefined : mp.when, undefined, undefined);\n const condition = mp.keyed ? conditionValue : createMemo(conditionValue, undefined, {\n equals: (a, b) => !a === !b\n });\n func = () => prevFunc() || (condition() ? [index, conditionValue, mp] : undefined);\n }\n return func;\n });\n return createMemo(() => {\n const sel = switchFunc()();\n if (!sel) return props.fallback;\n const [index, conditionValue, mp] = sel;\n const child = mp.children;\n const fn = typeof child === \"function\" && child.length > 0;\n return fn ? untrack(() => child(mp.keyed ? conditionValue() : () => {\n if (untrack(switchFunc)()?.[0] !== index) throw narrowedError(\"Match\");\n return conditionValue();\n })) : child;\n }, undefined, undefined);\n}\nfunction Match(props) {\n return props;\n}\nlet Errors;\nfunction resetErrorBoundaries() {\n Errors && [...Errors].forEach(fn => fn());\n}\nfunction ErrorBoundary(props) {\n let err;\n if (sharedConfig.context && sharedConfig.load) err = sharedConfig.load(sharedConfig.getContextId());\n const [errored, setErrored] = createSignal(err, undefined);\n Errors || (Errors = new Set());\n Errors.add(setErrored);\n onCleanup(() => Errors.delete(setErrored));\n return createMemo(() => {\n let e;\n if (e = errored()) {\n const f = props.fallback;\n return typeof f === \"function\" && f.length ? untrack(() => f(e, () => setErrored())) : f;\n }\n return catchError(() => props.children, setErrored);\n }, undefined, undefined);\n}\n\nconst suspenseListEquals = (a, b) => a.showContent === b.showContent && a.showFallback === b.showFallback;\nconst SuspenseListContext = /* #__PURE__ */createContext();\nfunction SuspenseList(props) {\n let [wrapper, setWrapper] = createSignal(() => ({\n inFallback: false\n })),\n show;\n const listContext = useContext(SuspenseListContext);\n const [registry, setRegistry] = createSignal([]);\n if (listContext) {\n show = listContext.register(createMemo(() => wrapper()().inFallback));\n }\n const resolved = createMemo(prev => {\n const reveal = props.revealOrder,\n tail = props.tail,\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {},\n reg = registry(),\n reverse = reveal === \"backwards\";\n if (reveal === \"together\") {\n const all = reg.every(inFallback => !inFallback());\n const res = reg.map(() => ({\n showContent: all && showContent,\n showFallback\n }));\n res.inFallback = !all;\n return res;\n }\n let stop = false;\n let inFallback = prev.inFallback;\n const res = [];\n for (let i = 0, len = reg.length; i < len; i++) {\n const n = reverse ? len - i - 1 : i,\n s = reg[n]();\n if (!stop && !s) {\n res[n] = {\n showContent,\n showFallback\n };\n } else {\n const next = !stop;\n if (next) inFallback = true;\n res[n] = {\n showContent: next,\n showFallback: !tail || next && tail === \"collapsed\" ? showFallback : false\n };\n stop = true;\n }\n }\n if (!stop) inFallback = false;\n res.inFallback = inFallback;\n return res;\n }, {\n inFallback: false\n });\n setWrapper(() => resolved);\n return createComponent(SuspenseListContext.Provider, {\n value: {\n register: inFallback => {\n let index;\n setRegistry(registry => {\n index = registry.length;\n return [...registry, inFallback];\n });\n return createMemo(() => resolved()[index], undefined, {\n equals: suspenseListEquals\n });\n }\n },\n get children() {\n return props.children;\n }\n });\n}\nfunction Suspense(props) {\n let counter = 0,\n show,\n ctx,\n p,\n flicker,\n error;\n const [inFallback, setFallback] = createSignal(false),\n SuspenseContext = getSuspenseContext(),\n store = {\n increment: () => {\n if (++counter === 1) setFallback(true);\n },\n decrement: () => {\n if (--counter === 0) setFallback(false);\n },\n inFallback,\n effects: [],\n resolved: false\n },\n owner = getOwner();\n if (sharedConfig.context && sharedConfig.load) {\n const key = sharedConfig.getContextId();\n let ref = sharedConfig.load(key);\n if (ref) {\n if (typeof ref !== \"object\" || ref.s !== 1) p = ref;else sharedConfig.gather(key);\n }\n if (p && p !== \"$$f\") {\n const [s, set] = createSignal(undefined, {\n equals: false\n });\n flicker = s;\n p.then(() => {\n if (sharedConfig.done) return set();\n sharedConfig.gather(key);\n setHydrateContext(ctx);\n set();\n setHydrateContext();\n }, err => {\n error = err;\n set();\n });\n }\n }\n const listContext = useContext(SuspenseListContext);\n if (listContext) show = listContext.register(store.inFallback);\n let dispose;\n onCleanup(() => dispose && dispose());\n return createComponent(SuspenseContext.Provider, {\n value: store,\n get children() {\n return createMemo(() => {\n if (error) throw error;\n ctx = sharedConfig.context;\n if (flicker) {\n flicker();\n return flicker = undefined;\n }\n if (ctx && p === \"$$f\") setHydrateContext();\n const rendered = createMemo(() => props.children);\n return createMemo(prev => {\n const inFallback = store.inFallback(),\n {\n showContent = true,\n showFallback = true\n } = show ? show() : {};\n if ((!inFallback || p && p !== \"$$f\") && showContent) {\n store.resolved = true;\n dispose && dispose();\n dispose = ctx = p = undefined;\n resumeEffects(store.effects);\n return rendered();\n }\n if (!showFallback) return;\n if (dispose) return prev;\n return createRoot(disposer => {\n dispose = disposer;\n if (ctx) {\n setHydrateContext({\n id: ctx.id + \"F\",\n count: 0\n });\n ctx = undefined;\n }\n return props.fallback;\n }, owner);\n });\n });\n }\n });\n}\n\nconst DEV = undefined;\n\nexport { $DEVCOMP, $PROXY, $TRACK, DEV, ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, batch, cancelCallback, catchError, children, createComponent, createComputed, createContext, createDeferred, createEffect, createMemo, createReaction, createRenderEffect, createResource, createRoot, createSelector, createSignal, createUniqueId, enableExternalSource, enableHydration, enableScheduling, equalFn, from, getListener, getOwner, indexArray, lazy, mapArray, mergeProps, observable, on, onCleanup, onError, onMount, requestCallback, resetErrorBoundaries, runWithOwner, sharedConfig, splitProps, startTransition, untrack, useContext, useTransition };\n","import { createMemo, sharedConfig, createRenderEffect, createRoot, untrack, splitProps, getOwner, createEffect, runWithOwner, createSignal, onCleanup, enableHydration } from 'solid-js';\nexport { ErrorBoundary, For, Index, Match, Show, Suspense, SuspenseList, Switch, createComponent, createRenderEffect as effect, getOwner, mergeProps, untrack } from 'solid-js';\n\nconst booleans = [\"allowfullscreen\", \"async\", \"alpha\",\n\"autofocus\",\n\"autoplay\", \"checked\", \"controls\", \"default\", \"disabled\", \"formnovalidate\", \"hidden\",\n\"indeterminate\", \"inert\",\n\"ismap\", \"loop\", \"multiple\", \"muted\", \"nomodule\", \"novalidate\", \"open\", \"playsinline\", \"readonly\", \"required\", \"reversed\", \"seamless\",\n\"selected\", \"adauctionheaders\",\n\"browsingtopics\",\n\"credentialless\",\n\"defaultchecked\", \"defaultmuted\", \"defaultselected\", \"defer\", \"disablepictureinpicture\", \"disableremoteplayback\", \"preservespitch\",\n\"shadowrootclonable\", \"shadowrootcustomelementregistry\",\n\"shadowrootdelegatesfocus\", \"shadowrootserializable\",\n\"sharedstoragewritable\"\n];\nconst Properties = /*#__PURE__*/new Set([\n\"className\", \"value\",\n\"readOnly\", \"noValidate\", \"formNoValidate\", \"isMap\", \"noModule\", \"playsInline\", \"adAuctionHeaders\",\n\"allowFullscreen\", \"browsingTopics\",\n\"defaultChecked\", \"defaultMuted\", \"defaultSelected\", \"disablePictureInPicture\", \"disableRemotePlayback\", \"preservesPitch\", \"shadowRootClonable\", \"shadowRootCustomElementRegistry\",\n\"shadowRootDelegatesFocus\", \"shadowRootSerializable\",\n\"sharedStorageWritable\",\n...booleans]);\nconst ChildProperties = /*#__PURE__*/new Set([\"innerHTML\", \"textContent\", \"innerText\", \"children\"]);\nconst Aliases = /*#__PURE__*/Object.assign(Object.create(null), {\n className: \"class\",\n htmlFor: \"for\"\n});\nconst PropAliases = /*#__PURE__*/Object.assign(Object.create(null), {\n class: \"className\",\n novalidate: {\n $: \"noValidate\",\n FORM: 1\n },\n formnovalidate: {\n $: \"formNoValidate\",\n BUTTON: 1,\n INPUT: 1\n },\n ismap: {\n $: \"isMap\",\n IMG: 1\n },\n nomodule: {\n $: \"noModule\",\n SCRIPT: 1\n },\n playsinline: {\n $: \"playsInline\",\n VIDEO: 1\n },\n readonly: {\n $: \"readOnly\",\n INPUT: 1,\n TEXTAREA: 1\n },\n adauctionheaders: {\n $: \"adAuctionHeaders\",\n IFRAME: 1\n },\n allowfullscreen: {\n $: \"allowFullscreen\",\n IFRAME: 1\n },\n browsingtopics: {\n $: \"browsingTopics\",\n IMG: 1\n },\n defaultchecked: {\n $: \"defaultChecked\",\n INPUT: 1\n },\n defaultmuted: {\n $: \"defaultMuted\",\n AUDIO: 1,\n VIDEO: 1\n },\n defaultselected: {\n $: \"defaultSelected\",\n OPTION: 1\n },\n disablepictureinpicture: {\n $: \"disablePictureInPicture\",\n VIDEO: 1\n },\n disableremoteplayback: {\n $: \"disableRemotePlayback\",\n AUDIO: 1,\n VIDEO: 1\n },\n preservespitch: {\n $: \"preservesPitch\",\n AUDIO: 1,\n VIDEO: 1\n },\n shadowrootclonable: {\n $: \"shadowRootClonable\",\n TEMPLATE: 1\n },\n shadowrootdelegatesfocus: {\n $: \"shadowRootDelegatesFocus\",\n TEMPLATE: 1\n },\n shadowrootserializable: {\n $: \"shadowRootSerializable\",\n TEMPLATE: 1\n },\n sharedstoragewritable: {\n $: \"sharedStorageWritable\",\n IFRAME: 1,\n IMG: 1\n }\n});\nfunction getPropAlias(prop, tagName) {\n const a = PropAliases[prop];\n return typeof a === \"object\" ? a[tagName] ? a[\"$\"] : undefined : a;\n}\nconst DelegatedEvents = /*#__PURE__*/new Set([\"beforeinput\", \"click\", \"dblclick\", \"contextmenu\", \"focusin\", \"focusout\", \"input\", \"keydown\", \"keyup\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"pointerdown\", \"pointermove\", \"pointerout\", \"pointerover\", \"pointerup\", \"touchend\", \"touchmove\", \"touchstart\"]);\nconst SVGElements = /*#__PURE__*/new Set([\n\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animate\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"circle\", \"clipPath\", \"color-profile\", \"cursor\", \"defs\", \"desc\", \"ellipse\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"filter\", \"font\", \"font-face\", \"font-face-format\", \"font-face-name\", \"font-face-src\", \"font-face-uri\", \"foreignObject\", \"g\", \"glyph\", \"glyphRef\", \"hkern\", \"image\", \"line\", \"linearGradient\", \"marker\", \"mask\", \"metadata\", \"missing-glyph\", \"mpath\", \"path\", \"pattern\", \"polygon\", \"polyline\", \"radialGradient\", \"rect\",\n\"set\", \"stop\",\n\"svg\", \"switch\", \"symbol\", \"text\", \"textPath\",\n\"tref\", \"tspan\", \"use\", \"view\", \"vkern\"]);\nconst SVGNamespace = {\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\"\n};\nconst DOMElements = /*#__PURE__*/new Set([\"html\", \"base\", \"head\", \"link\", \"meta\", \"style\", \"title\", \"body\", \"address\", \"article\", \"aside\", \"footer\", \"header\", \"main\", \"nav\", \"section\", \"body\", \"blockquote\", \"dd\", \"div\", \"dl\", \"dt\", \"figcaption\", \"figure\", \"hr\", \"li\", \"ol\", \"p\", \"pre\", \"ul\", \"a\", \"abbr\", \"b\", \"bdi\", \"bdo\", \"br\", \"cite\", \"code\", \"data\", \"dfn\", \"em\", \"i\", \"kbd\", \"mark\", \"q\", \"rp\", \"rt\", \"ruby\", \"s\", \"samp\", \"small\", \"span\", \"strong\", \"sub\", \"sup\", \"time\", \"u\", \"var\", \"wbr\", \"area\", \"audio\", \"img\", \"map\", \"track\", \"video\", \"embed\", \"iframe\", \"object\", \"param\", \"picture\", \"portal\", \"source\", \"svg\", \"math\", \"canvas\", \"noscript\", \"script\", \"del\", \"ins\", \"caption\", \"col\", \"colgroup\", \"table\", \"tbody\", \"td\", \"tfoot\", \"th\", \"thead\", \"tr\", \"button\", \"datalist\", \"fieldset\", \"form\", \"input\", \"label\", \"legend\", \"meter\", \"optgroup\", \"option\", \"output\", \"progress\", \"select\", \"textarea\", \"details\", \"dialog\", \"menu\", \"summary\", \"details\", \"slot\", \"template\", \"acronym\", \"applet\", \"basefont\", \"bgsound\", \"big\", \"blink\", \"center\", \"content\", \"dir\", \"font\", \"frame\", \"frameset\", \"hgroup\", \"image\", \"keygen\", \"marquee\", \"menuitem\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"rb\", \"rtc\", \"shadow\", \"spacer\", \"strike\", \"tt\", \"xmp\", \"a\", \"abbr\", \"acronym\", \"address\", \"applet\", \"area\", \"article\", \"aside\", \"audio\", \"b\", \"base\", \"basefont\", \"bdi\", \"bdo\", \"bgsound\", \"big\", \"blink\", \"blockquote\", \"body\", \"br\", \"button\", \"canvas\", \"caption\", \"center\", \"cite\", \"code\", \"col\", \"colgroup\", \"content\", \"data\", \"datalist\", \"dd\", \"del\", \"details\", \"dfn\", \"dialog\", \"dir\", \"div\", \"dl\", \"dt\", \"em\", \"embed\", \"fieldset\", \"figcaption\", \"figure\", \"font\", \"footer\", \"form\", \"frame\", \"frameset\", \"head\", \"header\", \"hgroup\", \"hr\", \"html\", \"i\", \"iframe\", \"image\", \"img\", \"input\", \"ins\", \"kbd\", \"keygen\", \"label\", \"legend\", \"li\", \"link\", \"main\", \"map\", \"mark\", \"marquee\", \"menu\", \"menuitem\", \"meta\", \"meter\", \"nav\", \"nobr\", \"noembed\", \"noframes\", \"noscript\", \"object\", \"ol\", \"optgroup\", \"option\", \"output\", \"p\", \"param\", \"picture\", \"plaintext\", \"portal\", \"pre\", \"progress\", \"q\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"script\", \"section\", \"select\", \"shadow\", \"slot\", \"small\", \"source\", \"spacer\", \"span\", \"strike\", \"strong\", \"style\", \"sub\", \"summary\", \"sup\", \"table\", \"tbody\", \"td\", \"template\", \"textarea\", \"tfoot\", \"th\", \"thead\", \"time\", \"title\", \"tr\", \"track\", \"tt\", \"u\", \"ul\", \"var\", \"video\", \"wbr\", \"xmp\", \"input\", \"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\",\n\"webview\",\n\"isindex\", \"listing\", \"multicol\", \"nextid\", \"noindex\", \"search\"]);\n\nconst memo = fn => createMemo(() => fn());\n\nfunction reconcileArrays(parentNode, a, b) {\n let bLength = b.length,\n aEnd = a.length,\n bEnd = bLength,\n aStart = 0,\n bStart = 0,\n after = a[aEnd - 1].nextSibling,\n map = null;\n while (aStart < aEnd || bStart < bEnd) {\n if (a[aStart] === b[bStart]) {\n aStart++;\n bStart++;\n continue;\n }\n while (a[aEnd - 1] === b[bEnd - 1]) {\n aEnd--;\n bEnd--;\n }\n if (aEnd === aStart) {\n const node = bEnd < bLength ? bStart ? b[bStart - 1].nextSibling : b[bEnd - bStart] : after;\n while (bStart < bEnd) parentNode.insertBefore(b[bStart++], node);\n } else if (bEnd === bStart) {\n while (aStart < aEnd) {\n if (!map || !map.has(a[aStart])) a[aStart].remove();\n aStart++;\n }\n } else if (a[aStart] === b[bEnd - 1] && b[bStart] === a[aEnd - 1]) {\n const node = a[--aEnd].nextSibling;\n parentNode.insertBefore(b[bStart++], a[aStart++].nextSibling);\n parentNode.insertBefore(b[--bEnd], node);\n a[aEnd] = b[bEnd];\n } else {\n if (!map) {\n map = new Map();\n let i = bStart;\n while (i < bEnd) map.set(b[i], i++);\n }\n const index = map.get(a[aStart]);\n if (index != null) {\n if (bStart < index && index < bEnd) {\n let i = aStart,\n sequence = 1,\n t;\n while (++i < aEnd && i < bEnd) {\n if ((t = map.get(a[i])) == null || t !== index + sequence) break;\n sequence++;\n }\n if (sequence > index - bStart) {\n const node = a[aStart];\n while (bStart < index) parentNode.insertBefore(b[bStart++], node);\n } else parentNode.replaceChild(b[bStart++], a[aStart++]);\n } else aStart++;\n } else a[aStart++].remove();\n }\n }\n}\n\nconst $$EVENTS = \"_$DX_DELEGATE\";\nfunction render(code, element, init, options = {}) {\n let disposer;\n createRoot(dispose => {\n disposer = dispose;\n element === document ? code() : insert(element, code(), element.firstChild ? null : undefined, init);\n }, options.owner);\n return () => {\n disposer();\n element.textContent = \"\";\n };\n}\nfunction template(html, isImportNode, isSVG, isMathML) {\n let node;\n const create = () => {\n const t = isMathML ? document.createElementNS(\"http://www.w3.org/1998/Math/MathML\", \"template\") : document.createElement(\"template\");\n t.innerHTML = html;\n return isSVG ? t.content.firstChild.firstChild : isMathML ? t.firstChild : t.content.firstChild;\n };\n const fn = isImportNode ? () => untrack(() => document.importNode(node || (node = create()), true)) : () => (node || (node = create())).cloneNode(true);\n fn.cloneNode = fn;\n return fn;\n}\nfunction delegateEvents(eventNames, document = window.document) {\n const e = document[$$EVENTS] || (document[$$EVENTS] = new Set());\n for (let i = 0, l = eventNames.length; i < l; i++) {\n const name = eventNames[i];\n if (!e.has(name)) {\n e.add(name);\n document.addEventListener(name, eventHandler);\n }\n }\n}\nfunction clearDelegatedEvents(document = window.document) {\n if (document[$$EVENTS]) {\n for (let name of document[$$EVENTS].keys()) document.removeEventListener(name, eventHandler);\n delete document[$$EVENTS];\n }\n}\nfunction setProperty(node, name, value) {\n if (isHydrating(node)) return;\n node[name] = value;\n}\nfunction setAttribute(node, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(name);else node.setAttribute(name, value);\n}\nfunction setAttributeNS(node, namespace, name, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttributeNS(namespace, name);else node.setAttributeNS(namespace, name, value);\n}\nfunction setBoolAttribute(node, name, value) {\n if (isHydrating(node)) return;\n value ? node.setAttribute(name, \"\") : node.removeAttribute(name);\n}\nfunction className(node, value) {\n if (isHydrating(node)) return;\n if (value == null) node.removeAttribute(\"class\");else node.className = value;\n}\nfunction addEventListener(node, name, handler, delegate) {\n if (delegate) {\n if (Array.isArray(handler)) {\n node[`$$${name}`] = handler[0];\n node[`$$${name}Data`] = handler[1];\n } else node[`$$${name}`] = handler;\n } else if (Array.isArray(handler)) {\n const handlerFn = handler[0];\n node.addEventListener(name, handler[0] = e => handlerFn.call(node, handler[1], e));\n } else node.addEventListener(name, handler, typeof handler !== \"function\" && handler);\n}\nfunction classList(node, value, prev = {}) {\n const classKeys = Object.keys(value || {}),\n prevKeys = Object.keys(prev);\n let i, len;\n for (i = 0, len = prevKeys.length; i < len; i++) {\n const key = prevKeys[i];\n if (!key || key === \"undefined\" || value[key]) continue;\n toggleClassKey(node, key, false);\n delete prev[key];\n }\n for (i = 0, len = classKeys.length; i < len; i++) {\n const key = classKeys[i],\n classValue = !!value[key];\n if (!key || key === \"undefined\" || prev[key] === classValue || !classValue) continue;\n toggleClassKey(node, key, true);\n prev[key] = classValue;\n }\n return prev;\n}\nfunction style(node, value, prev) {\n if (!value) return prev ? setAttribute(node, \"style\") : value;\n const nodeStyle = node.style;\n if (typeof value === \"string\") return nodeStyle.cssText = value;\n typeof prev === \"string\" && (nodeStyle.cssText = prev = undefined);\n prev || (prev = {});\n value || (value = {});\n let v, s;\n for (s in prev) {\n value[s] == null && nodeStyle.removeProperty(s);\n delete prev[s];\n }\n for (s in value) {\n v = value[s];\n if (v !== prev[s]) {\n nodeStyle.setProperty(s, v);\n prev[s] = v;\n }\n }\n return prev;\n}\nfunction setStyleProperty(node, name, value) {\n value != null ? node.style.setProperty(name, value) : node.style.removeProperty(name);\n}\nfunction spread(node, props = {}, isSVG, skipChildren) {\n const prevProps = {};\n if (!skipChildren) {\n createRenderEffect(() => prevProps.children = insertExpression(node, props.children, prevProps.children));\n }\n createRenderEffect(() => typeof props.ref === \"function\" && use(props.ref, node));\n createRenderEffect(() => assign(node, props, isSVG, true, prevProps, true));\n return prevProps;\n}\nfunction dynamicProperty(props, key) {\n const src = props[key];\n Object.defineProperty(props, key, {\n get() {\n return src();\n },\n enumerable: true\n });\n return props;\n}\nfunction use(fn, element, arg) {\n return untrack(() => fn(element, arg));\n}\nfunction insert(parent, accessor, marker, initial) {\n if (marker !== undefined && !initial) initial = [];\n if (typeof accessor !== \"function\") return insertExpression(parent, accessor, initial, marker);\n createRenderEffect(current => insertExpression(parent, accessor(), current, marker), initial);\n}\nfunction assign(node, props, isSVG, skipChildren, prevProps = {}, skipRef = false) {\n props || (props = {});\n for (const prop in prevProps) {\n if (!(prop in props)) {\n if (prop === \"children\") continue;\n prevProps[prop] = assignProp(node, prop, null, prevProps[prop], isSVG, skipRef, props);\n }\n }\n for (const prop in props) {\n if (prop === \"children\") {\n if (!skipChildren) insertExpression(node, props.children);\n continue;\n }\n const value = props[prop];\n prevProps[prop] = assignProp(node, prop, value, prevProps[prop], isSVG, skipRef, props);\n }\n}\nfunction hydrate$1(code, element, options = {}) {\n if (globalThis._$HY.done) return render(code, element, [...element.childNodes], options);\n sharedConfig.completed = globalThis._$HY.completed;\n sharedConfig.events = globalThis._$HY.events;\n sharedConfig.load = id => globalThis._$HY.r[id];\n sharedConfig.has = id => id in globalThis._$HY.r;\n sharedConfig.gather = root => gatherHydratable(element, root);\n sharedConfig.registry = new Map();\n sharedConfig.context = {\n id: options.renderId || \"\",\n count: 0\n };\n try {\n gatherHydratable(element, options.renderId);\n return render(code, element, [...element.childNodes], options);\n } finally {\n sharedConfig.context = null;\n }\n}\nfunction getNextElement(template) {\n let node,\n key,\n hydrating = isHydrating();\n if (!hydrating || !(node = sharedConfig.registry.get(key = getHydrationKey()))) {\n return template();\n }\n if (sharedConfig.completed) sharedConfig.completed.add(node);\n sharedConfig.registry.delete(key);\n return node;\n}\nfunction getNextMatch(el, nodeName) {\n while (el && el.localName !== nodeName) el = el.nextSibling;\n return el;\n}\nfunction getNextMarker(start) {\n let end = start,\n count = 0,\n current = [];\n if (isHydrating(start)) {\n while (end) {\n if (end.nodeType === 8) {\n const v = end.nodeValue;\n if (v === \"$\") count++;else if (v === \"/\") {\n if (count === 0) return [end, current];\n count--;\n }\n }\n current.push(end);\n end = end.nextSibling;\n }\n }\n return [end, current];\n}\nfunction runHydrationEvents() {\n if (sharedConfig.events && !sharedConfig.events.queued) {\n queueMicrotask(() => {\n const {\n completed,\n events\n } = sharedConfig;\n if (!events) return;\n events.queued = false;\n while (events.length) {\n const [el, e] = events[0];\n if (!completed.has(el)) return;\n events.shift();\n eventHandler(e);\n }\n if (sharedConfig.done) {\n sharedConfig.events = _$HY.events = null;\n sharedConfig.completed = _$HY.completed = null;\n }\n });\n sharedConfig.events.queued = true;\n }\n}\nfunction isHydrating(node) {\n return !!sharedConfig.context && !sharedConfig.done && (!node || node.isConnected);\n}\nfunction toPropertyName(name) {\n return name.toLowerCase().replace(/-([a-z])/g, (_, w) => w.toUpperCase());\n}\nfunction toggleClassKey(node, key, value) {\n const classNames = key.trim().split(/\\s+/);\n for (let i = 0, nameLen = classNames.length; i < nameLen; i++) node.classList.toggle(classNames[i], value);\n}\nfunction assignProp(node, prop, value, prev, isSVG, skipRef, props) {\n let isCE, isProp, isChildProp, propAlias, forceProp;\n if (prop === \"style\") return style(node, value, prev);\n if (prop === \"classList\") return classList(node, value, prev);\n if (value === prev) return prev;\n if (prop === \"ref\") {\n if (!skipRef) value(node);\n } else if (prop.slice(0, 3) === \"on:\") {\n const e = prop.slice(3);\n prev && node.removeEventListener(e, prev, typeof prev !== \"function\" && prev);\n value && node.addEventListener(e, value, typeof value !== \"function\" && value);\n } else if (prop.slice(0, 10) === \"oncapture:\") {\n const e = prop.slice(10);\n prev && node.removeEventListener(e, prev, true);\n value && node.addEventListener(e, value, true);\n } else if (prop.slice(0, 2) === \"on\") {\n const name = prop.slice(2).toLowerCase();\n const delegate = DelegatedEvents.has(name);\n if (!delegate && prev) {\n const h = Array.isArray(prev) ? prev[0] : prev;\n node.removeEventListener(name, h);\n }\n if (delegate || value) {\n addEventListener(node, name, value, delegate);\n delegate && delegateEvents([name]);\n }\n } else if (prop.slice(0, 5) === \"attr:\") {\n setAttribute(node, prop.slice(5), value);\n } else if (prop.slice(0, 5) === \"bool:\") {\n setBoolAttribute(node, prop.slice(5), value);\n } else if ((forceProp = prop.slice(0, 5) === \"prop:\") || (isChildProp = ChildProperties.has(prop)) || !isSVG && ((propAlias = getPropAlias(prop, node.tagName)) || (isProp = Properties.has(prop))) || (isCE = node.nodeName.includes(\"-\") || \"is\" in props)) {\n if (forceProp) {\n prop = prop.slice(5);\n isProp = true;\n } else if (isHydrating(node)) return value;\n if (prop === \"class\" || prop === \"className\") className(node, value);else if (isCE && !isProp && !isChildProp) node[toPropertyName(prop)] = value;else node[propAlias || prop] = value;\n } else {\n const ns = isSVG && prop.indexOf(\":\") > -1 && SVGNamespace[prop.split(\":\")[0]];\n if (ns) setAttributeNS(node, ns, prop, value);else setAttribute(node, Aliases[prop] || prop, value);\n }\n return value;\n}\nfunction eventHandler(e) {\n if (sharedConfig.registry && sharedConfig.events) {\n if (sharedConfig.events.find(([el, ev]) => ev === e)) return;\n }\n let node = e.target;\n const key = `$$${e.type}`;\n const oriTarget = e.target;\n const oriCurrentTarget = e.currentTarget;\n const retarget = value => Object.defineProperty(e, \"target\", {\n configurable: true,\n value\n });\n const handleNode = () => {\n const handler = node[key];\n if (handler && !node.disabled) {\n const data = node[`${key}Data`];\n data !== undefined ? handler.call(node, data, e) : handler.call(node, e);\n if (e.cancelBubble) return;\n }\n node.host && typeof node.host !== \"string\" && !node.host._$host && node.contains(e.target) && retarget(node.host);\n return true;\n };\n const walkUpTree = () => {\n while (handleNode() && (node = node._$host || node.parentNode || node.host));\n };\n Object.defineProperty(e, \"currentTarget\", {\n configurable: true,\n get() {\n return node || document;\n }\n });\n if (sharedConfig.registry && !sharedConfig.done) sharedConfig.done = _$HY.done = true;\n if (e.composedPath) {\n const path = e.composedPath();\n retarget(path[0]);\n for (let i = 0; i < path.length - 2; i++) {\n node = path[i];\n if (!handleNode()) break;\n if (node._$host) {\n node = node._$host;\n walkUpTree();\n break;\n }\n if (node.parentNode === oriCurrentTarget) {\n break;\n }\n }\n }\n else walkUpTree();\n retarget(oriTarget);\n}\nfunction insertExpression(parent, value, current, marker, unwrapArray) {\n const hydrating = isHydrating(parent);\n if (hydrating) {\n !current && (current = [...parent.childNodes]);\n let cleaned = [];\n for (let i = 0; i < current.length; i++) {\n const node = current[i];\n if (node.nodeType === 8 && node.data.slice(0, 2) === \"!$\") node.remove();else cleaned.push(node);\n }\n current = cleaned;\n }\n while (typeof current === \"function\") current = current();\n if (value === current) return current;\n const t = typeof value,\n multi = marker !== undefined;\n parent = multi && current[0] && current[0].parentNode || parent;\n if (t === \"string\" || t === \"number\") {\n if (hydrating) return current;\n if (t === \"number\") {\n value = value.toString();\n if (value === current) return current;\n }\n if (multi) {\n let node = current[0];\n if (node && node.nodeType === 3) {\n node.data !== value && (node.data = value);\n } else node = document.createTextNode(value);\n current = cleanChildren(parent, current, marker, node);\n } else {\n if (current !== \"\" && typeof current === \"string\") {\n current = parent.firstChild.data = value;\n } else current = parent.textContent = value;\n }\n } else if (value == null || t === \"boolean\") {\n if (hydrating) return current;\n current = cleanChildren(parent, current, marker);\n } else if (t === \"function\") {\n createRenderEffect(() => {\n let v = value();\n while (typeof v === \"function\") v = v();\n current = insertExpression(parent, v, current, marker);\n });\n return () => current;\n } else if (Array.isArray(value)) {\n const array = [];\n const currentArray = current && Array.isArray(current);\n if (normalizeIncomingArray(array, value, current, unwrapArray)) {\n createRenderEffect(() => current = insertExpression(parent, array, current, marker, true));\n return () => current;\n }\n if (hydrating) {\n if (!array.length) return current;\n if (marker === undefined) return current = [...parent.childNodes];\n let node = array[0];\n if (node.parentNode !== parent) return current;\n const nodes = [node];\n while ((node = node.nextSibling) !== marker) nodes.push(node);\n return current = nodes;\n }\n if (array.length === 0) {\n current = cleanChildren(parent, current, marker);\n if (multi) return current;\n } else if (currentArray) {\n if (current.length === 0) {\n appendNodes(parent, array, marker);\n } else reconcileArrays(parent, current, array);\n } else {\n current && cleanChildren(parent);\n appendNodes(parent, array);\n }\n current = array;\n } else if (value.nodeType) {\n if (hydrating && value.parentNode) return current = multi ? [value] : value;\n if (Array.isArray(current)) {\n if (multi) return current = cleanChildren(parent, current, marker, value);\n cleanChildren(parent, current, null, value);\n } else if (current == null || current === \"\" || !parent.firstChild) {\n parent.appendChild(value);\n } else parent.replaceChild(value, parent.firstChild);\n current = value;\n } else ;\n return current;\n}\nfunction normalizeIncomingArray(normalized, array, current, unwrap) {\n let dynamic = false;\n for (let i = 0, len = array.length; i < len; i++) {\n let item = array[i],\n prev = current && current[normalized.length],\n t;\n if (item == null || item === true || item === false) ; else if ((t = typeof item) === \"object\" && item.nodeType) {\n normalized.push(item);\n } else if (Array.isArray(item)) {\n dynamic = normalizeIncomingArray(normalized, item, prev) || dynamic;\n } else if (t === \"function\") {\n if (unwrap) {\n while (typeof item === \"function\") item = item();\n dynamic = normalizeIncomingArray(normalized, Array.isArray(item) ? item : [item], Array.isArray(prev) ? prev : [prev]) || dynamic;\n } else {\n normalized.push(item);\n dynamic = true;\n }\n } else {\n const value = String(item);\n if (prev && prev.nodeType === 3 && prev.data === value) normalized.push(prev);else normalized.push(document.createTextNode(value));\n }\n }\n return dynamic;\n}\nfunction appendNodes(parent, array, marker = null) {\n for (let i = 0, len = array.length; i < len; i++) parent.insertBefore(array[i], marker);\n}\nfunction cleanChildren(parent, current, marker, replacement) {\n if (marker === undefined) return parent.textContent = \"\";\n const node = replacement || document.createTextNode(\"\");\n if (current.length) {\n let inserted = false;\n for (let i = current.length - 1; i >= 0; i--) {\n const el = current[i];\n if (node !== el) {\n const isParent = el.parentNode === parent;\n if (!inserted && !i) isParent ? parent.replaceChild(node, el) : parent.insertBefore(node, marker);else isParent && el.remove();\n } else inserted = true;\n }\n } else parent.insertBefore(node, marker);\n return [node];\n}\nfunction gatherHydratable(element, root) {\n const templates = element.querySelectorAll(`*[data-hk]`);\n for (let i = 0; i < templates.length; i++) {\n const node = templates[i];\n const key = node.getAttribute(\"data-hk\");\n if ((!root || key.startsWith(root)) && !sharedConfig.registry.has(key)) sharedConfig.registry.set(key, node);\n }\n}\nfunction getHydrationKey() {\n return sharedConfig.getNextContextId();\n}\nfunction NoHydration(props) {\n return sharedConfig.context ? undefined : props.children;\n}\nfunction Hydration(props) {\n return props.children;\n}\nconst voidFn = () => undefined;\nconst RequestContext = Symbol();\nfunction innerHTML(parent, content) {\n !sharedConfig.context && (parent.innerHTML = content);\n}\n\nfunction throwInBrowser(func) {\n const err = new Error(`${func.name} is not supported in the browser, returning undefined`);\n console.error(err);\n}\nfunction renderToString(fn, options) {\n throwInBrowser(renderToString);\n}\nfunction renderToStringAsync(fn, options) {\n throwInBrowser(renderToStringAsync);\n}\nfunction renderToStream(fn, options) {\n throwInBrowser(renderToStream);\n}\nfunction ssr(template, ...nodes) {}\nfunction ssrElement(name, props, children, needsId) {}\nfunction ssrClassList(value) {}\nfunction ssrStyle(value) {}\nfunction ssrAttribute(key, value) {}\nfunction ssrHydrationKey() {}\nfunction resolveSSRNode(node) {}\nfunction escape(html) {}\nfunction ssrSpread(props, isSVG, skipChildren) {}\n\nconst isServer = false;\nconst isDev = false;\nconst SVG_NAMESPACE = \"http://www.w3.org/2000/svg\";\nfunction createElement(tagName, isSVG = false, is = undefined) {\n return isSVG ? document.createElementNS(SVG_NAMESPACE, tagName) : document.createElement(tagName, {\n is\n });\n}\nconst hydrate = (...args) => {\n enableHydration();\n return hydrate$1(...args);\n};\nfunction Portal(props) {\n const {\n useShadow\n } = props,\n marker = document.createTextNode(\"\"),\n mount = () => props.mount || document.body,\n owner = getOwner();\n let content;\n let hydrating = !!sharedConfig.context;\n createEffect(() => {\n if (hydrating) getOwner().user = hydrating = false;\n content || (content = runWithOwner(owner, () => createMemo(() => props.children)));\n const el = mount();\n if (el instanceof HTMLHeadElement) {\n const [clean, setClean] = createSignal(false);\n const cleanup = () => setClean(true);\n createRoot(dispose => insert(el, () => !clean() ? content() : dispose(), null));\n onCleanup(cleanup);\n } else {\n const container = createElement(props.isSVG ? \"g\" : \"div\", props.isSVG),\n renderRoot = useShadow && container.attachShadow ? container.attachShadow({\n mode: \"open\"\n }) : container;\n Object.defineProperty(container, \"_$host\", {\n get() {\n return marker.parentNode;\n },\n configurable: true\n });\n insert(renderRoot, content);\n el.appendChild(container);\n props.ref && props.ref(container);\n onCleanup(() => el.contains(container) && el.removeChild(container));\n }\n }, undefined, {\n render: !hydrating\n });\n return marker;\n}\nfunction createDynamic(component, props) {\n const cached = createMemo(component);\n return createMemo(() => {\n const component = cached();\n switch (typeof component) {\n case \"function\":\n return untrack(() => component(props));\n case \"string\":\n const isSvg = SVGElements.has(component);\n const el = sharedConfig.context ? getNextElement() : createElement(component, isSvg, untrack(() => props.is));\n spread(el, props, isSvg);\n return el;\n }\n });\n}\nfunction Dynamic(props) {\n const [, others] = splitProps(props, [\"component\"]);\n return createDynamic(() => props.component, others);\n}\n\nexport { Aliases, voidFn as Assets, ChildProperties, DOMElements, DelegatedEvents, Dynamic, Hydration, voidFn as HydrationScript, NoHydration, Portal, Properties, RequestContext, SVGElements, SVGNamespace, addEventListener, assign, classList, className, clearDelegatedEvents, createDynamic, delegateEvents, dynamicProperty, escape, voidFn as generateHydrationScript, voidFn as getAssets, getHydrationKey, getNextElement, getNextMarker, getNextMatch, getPropAlias, voidFn as getRequestEvent, hydrate, innerHTML, insert, isDev, isServer, memo, render, renderToStream, renderToString, renderToStringAsync, resolveSSRNode, runHydrationEvents, setAttribute, setAttributeNS, setBoolAttribute, setProperty, setStyleProperty, spread, ssr, ssrAttribute, ssrClassList, ssrElement, ssrHydrationKey, ssrSpread, ssrStyle, style, template, use, voidFn as useAssets };\n","export const OPENLV_PROTOCOL_VERSION = 1;\nexport const encodeConnectionURL = (payload) => {\n const parameters = new URLSearchParams();\n parameters.set(\"h\", payload.h);\n parameters.set(\"k\", payload.k);\n if (payload.p) {\n parameters.set(\"p\", payload.p);\n }\n if (payload.s) {\n parameters.set(\"s\", payload.s);\n }\n return `openlv://${payload.sessionId}@${OPENLV_PROTOCOL_VERSION}?${parameters.toString()}`;\n};\nexport const decodeConnectionURL = (url) => {\n if (typeof url !== \"string\")\n throw new TypeError(`Invalid URL type: expected string, got ${typeof url}`);\n if (!url || url.trim() === \"\")\n throw new Error(\"URL cannot be empty\");\n if (!url.startsWith(\"openlv://\"))\n throw new Error(`Invalid URL format: must start with 'openlv://', got: ${url}`);\n try {\n const urlObject = new URL(url);\n const sessionId = urlObject.username;\n const version = Number(urlObject.hostname || urlObject.pathname.replace(\"/\", \"\"));\n if (version !== OPENLV_PROTOCOL_VERSION) {\n throw new Error(`Invalid protocol version: expected ${OPENLV_PROTOCOL_VERSION}, got ${version}`);\n }\n const h = urlObject.searchParams.get(\"h\") || \"\";\n const k = urlObject.searchParams.get(\"k\") || \"\";\n const s = urlObject.searchParams.get(\"s\") || undefined;\n const p = urlObject.searchParams.get(\"p\") || \"mqtt\";\n if (!sessionId) {\n throw new Error(\"Session ID is required in URL\");\n }\n // Validate session ID format (16 characters, URL-safe alphabet)\n if (!/^[A-Za-z0-9_-]{16}$/.test(sessionId)) {\n throw new Error(\"Invalid session ID format: must be 16 URL-safe characters\");\n }\n if (!h) {\n throw new Error(\"Public key hash (h parameter) is required in URL\");\n }\n // Validate public key hash format (16 hex characters)\n if (!/^[0-9a-f]{16}$/.test(h)) {\n throw new Error(\"Invalid public key hash format: must be 16 hex characters\");\n }\n if (!k) {\n throw new Error(\"Shared key (k parameter) is required in URL\");\n }\n // Validate shared key format (32 hex characters)\n if (!/^[0-9a-f]{32}$/.test(k)) {\n throw new Error(\"Invalid shared key format: must be 32 lowercase hex characters\");\n }\n return {\n version,\n sessionId,\n h,\n k,\n s: s ?? \"\",\n p,\n };\n }\n catch (error) {\n const errorMessage = error instanceof Error ? error.message : \"Unknown error\";\n // Strip query string so handshake secrets (k) are not exposed in error messages\n const safeUrl = url.includes(\"?\") ? url.slice(0, url.indexOf(\"?\")) + \"?[redacted]\" : url;\n throw new Error(`Failed to parse URL: ${safeUrl}. Original error: ${errorMessage}`);\n }\n};\n//# sourceMappingURL=index.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","const t=Symbol.for(\"@ts-pattern/matcher\"),e=Symbol.for(\"@ts-pattern/isVariadic\"),n=\"@ts-pattern/anonymous-select-key\",r=t=>Boolean(t&&\"object\"==typeof t),i=e=>e&&!!e[t],o=(n,s,c)=>{if(i(n)){const e=n[t](),{matched:r,selections:i}=e.match(s);return r&&i&&Object.keys(i).forEach(t=>c(t,i[t])),r}if(r(n)){if(!r(s))return!1;if(Array.isArray(n)){if(!Array.isArray(s))return!1;let t=[],r=[],u=[];for(const o of n.keys()){const s=n[o];i(s)&&s[e]?u.push(s):u.length?r.push(s):t.push(s)}if(u.length){if(u.length>1)throw new Error(\"Pattern error: Using `...P.array(...)` several times in a single pattern is not allowed.\");if(s.length<t.length+r.length)return!1;const e=s.slice(0,t.length),n=0===r.length?[]:s.slice(-r.length),i=s.slice(t.length,0===r.length?Infinity:-r.length);return t.every((t,n)=>o(t,e[n],c))&&r.every((t,e)=>o(t,n[e],c))&&(0===u.length||o(u[0],i,c))}return n.length===s.length&&n.every((t,e)=>o(t,s[e],c))}return Reflect.ownKeys(n).every(e=>{const r=n[e];return(e in s||i(u=r)&&\"optional\"===u[t]().matcherType)&&o(r,s[e],c);var u})}return Object.is(s,n)},s=e=>{var n,o,u;return r(e)?i(e)?null!=(n=null==(o=(u=e[t]()).getSelectionKeys)?void 0:o.call(u))?n:[]:Array.isArray(e)?c(e,s):c(Object.values(e),s):[]},c=(t,e)=>t.reduce((t,n)=>t.concat(e(n)),[]);function u(...t){if(1===t.length){const[e]=t;return t=>o(e,t,()=>{})}if(2===t.length){const[e,n]=t;return o(e,n,()=>{})}throw new Error(`isMatching wasn't given the right number of arguments: expected 1 or 2, received ${t.length}.`)}function a(t){return Object.assign(t,{optional:()=>h(t),and:e=>d(t,e),or:e=>y(t,e),select:e=>void 0===e?v(t):v(e,t)})}function l(t){return Object.assign((t=>Object.assign(t,{[Symbol.iterator](){let n=0;const r=[{value:Object.assign(t,{[e]:!0}),done:!1},{done:!0,value:void 0}];return{next:()=>{var t;return null!=(t=r[n++])?t:r.at(-1)}}}}))(t),{optional:()=>l(h(t)),select:e=>l(void 0===e?v(t):v(e,t))})}function h(e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return void 0===t?(s(e).forEach(t=>r(t,void 0)),{matched:!0,selections:n}):{matched:o(e,t,r),selections:n}},getSelectionKeys:()=>s(e),matcherType:\"optional\"})})}const f=(t,e)=>{for(const n of t)if(!e(n))return!1;return!0},g=(t,e)=>{for(const[n,r]of t.entries())if(!e(r,n))return!1;return!0},m=(t,e)=>{const n=Reflect.ownKeys(t);for(const r of n)if(!e(r,t[r]))return!1;return!0};function d(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return{matched:e.every(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"and\"})})}function y(...e){return a({[t]:()=>({match:t=>{let n={};const r=(t,e)=>{n[t]=e};return c(e,s).forEach(t=>r(t,void 0)),{matched:e.some(e=>o(e,t,r)),selections:n}},getSelectionKeys:()=>c(e,s),matcherType:\"or\"})})}function p(e){return{[t]:()=>({match:t=>({matched:Boolean(e(t))})})}}function v(...e){const r=\"string\"==typeof e[0]?e[0]:void 0,i=2===e.length?e[1]:\"string\"==typeof e[0]?void 0:e[0];return a({[t]:()=>({match:t=>{let e={[null!=r?r:n]:t};return{matched:void 0===i||o(i,t,(t,n)=>{e[t]=n}),selections:e}},getSelectionKeys:()=>[null!=r?r:n].concat(void 0===i?[]:s(i))})})}function b(t){return!0}function w(t){return\"number\"==typeof t}function S(t){return\"string\"==typeof t}function j(t){return\"bigint\"==typeof t}const K=a(p(b)),O=a(p(b)),E=K,x=t=>Object.assign(a(t),{startsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.startsWith(n)))));var n},endsWith:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.endsWith(n)))));var n},minLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length>=t))(e))),length:e=>x(d(t,(t=>p(e=>S(e)&&e.length===t))(e))),maxLength:e=>x(d(t,(t=>p(e=>S(e)&&e.length<=t))(e))),includes:e=>{return x(d(t,(n=e,p(t=>S(t)&&t.includes(n)))));var n},regex:e=>{return x(d(t,(n=e,p(t=>S(t)&&Boolean(t.match(n))))));var n}}),A=x(p(S)),N=t=>Object.assign(a(t),{between:(e,n)=>N(d(t,((t,e)=>p(n=>w(n)&&t<=n&&e>=n))(e,n))),lt:e=>N(d(t,(t=>p(e=>w(e)&&e<t))(e))),gt:e=>N(d(t,(t=>p(e=>w(e)&&e>t))(e))),lte:e=>N(d(t,(t=>p(e=>w(e)&&e<=t))(e))),gte:e=>N(d(t,(t=>p(e=>w(e)&&e>=t))(e))),int:()=>N(d(t,p(t=>w(t)&&Number.isInteger(t)))),finite:()=>N(d(t,p(t=>w(t)&&Number.isFinite(t)))),positive:()=>N(d(t,p(t=>w(t)&&t>0))),negative:()=>N(d(t,p(t=>w(t)&&t<0)))}),P=N(p(w)),k=t=>Object.assign(a(t),{between:(e,n)=>k(d(t,((t,e)=>p(n=>j(n)&&t<=n&&e>=n))(e,n))),lt:e=>k(d(t,(t=>p(e=>j(e)&&e<t))(e))),gt:e=>k(d(t,(t=>p(e=>j(e)&&e>t))(e))),lte:e=>k(d(t,(t=>p(e=>j(e)&&e<=t))(e))),gte:e=>k(d(t,(t=>p(e=>j(e)&&e>=t))(e))),positive:()=>k(d(t,p(t=>j(t)&&t>0))),negative:()=>k(d(t,p(t=>j(t)&&t<0)))}),T=k(p(j)),B=a(p(function(t){return\"boolean\"==typeof t})),_=a(p(function(t){return\"symbol\"==typeof t})),W=a(p(function(t){return null==t})),$=a(p(function(t){return null!=t}));var z={__proto__:null,matcher:t,optional:h,array:function(...e){return l({[t]:()=>({match:t=>{if(!Array.isArray(t))return{matched:!1};if(0===e.length)return{matched:!0};const n=e[0];let r={};if(0===t.length)return s(n).forEach(t=>{r[t]=[]}),{matched:!0,selections:r};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])};return{matched:t.every(t=>o(n,t,i)),selections:r}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},set:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Set))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};if(0===e.length)return{matched:!0};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])},i=e[0];return{matched:f(t,t=>o(i,t,r)),selections:n}},getSelectionKeys:()=>0===e.length?[]:s(e[0])})})},map:function(...e){return a({[t]:()=>({match:t=>{if(!(t instanceof Map))return{matched:!1};let n={};if(0===t.size)return{matched:!0,selections:n};const r=(t,e)=>{n[t]=(n[t]||[]).concat([e])};if(0===e.length)return{matched:!0};var i;if(1===e.length)throw new Error(`\\`P.map\\` wasn't given enough arguments. Expected (key, value), received ${null==(i=e[0])?void 0:i.toString()}`);const[s,c]=e;return{matched:g(t,(t,e)=>{const n=o(s,e,r),i=o(c,t,r);return n&&i}),selections:n}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},record:function(...e){return a({[t]:()=>({match:t=>{if(null===t||\"object\"!=typeof t||Array.isArray(t))return{matched:!1};var n;if(0===e.length)throw new Error(`\\`P.record\\` wasn't given enough arguments. Expected (value) or (key, value), received ${null==(n=e[0])?void 0:n.toString()}`);let r={};const i=(t,e)=>{r[t]=(r[t]||[]).concat([e])},[s,c]=1===e.length?[A,e[0]]:e;return{matched:m(t,(t,e)=>{const n=\"string\"!=typeof t||Number.isNaN(Number(t))?null:Number(t),r=null!==n&&o(s,n,i),u=o(s,t,i),a=o(c,e,i);return(u||r)&&a}),selections:r}},getSelectionKeys:()=>0===e.length?[]:[...s(e[0]),...s(e[1])]})})},intersection:d,union:y,not:function(e){return a({[t]:()=>({match:t=>({matched:!o(e,t,()=>{})}),getSelectionKeys:()=>[],matcherType:\"not\"})})},when:p,select:v,any:K,unknown:O,_:E,string:A,number:P,bigint:T,boolean:B,symbol:_,nullish:W,nonNullable:$,instanceOf:function(t){return a(p(function(t){return e=>e instanceof t}(t)))},shape:function(t){return a(p(u(t)))}};class I extends Error{constructor(t){let e;try{e=JSON.stringify(t)}catch(n){e=t}super(`Pattern matching error: no pattern matches value ${e}`),this.input=void 0,this.input=t}}const L={matched:!1,value:void 0};function M(t){return new R(t,L)}class R{constructor(t,e){this.input=void 0,this.state=void 0,this.input=t,this.state=e}with(...t){if(this.state.matched)return this;const e=t[t.length-1],r=[t[0]];let i;3===t.length&&\"function\"==typeof t[1]?i=t[1]:t.length>2&&r.push(...t.slice(1,t.length-1));let s=!1,c={};const u=(t,e)=>{s=!0,c[t]=e},a=!r.some(t=>o(t,this.input,u))||i&&!Boolean(i(this.input))?L:{matched:!0,value:e(s?n in c?c[n]:c:this.input,this.input)};return new R(this.input,a)}when(t,e){if(this.state.matched)return this;const n=Boolean(t(this.input));return new R(this.input,n?{matched:!0,value:e(this.input,this.input)}:L)}otherwise(t){return this.state.matched?this.state.value:t(this.input)}exhaustive(t=F){return this.state.matched?this.state.value:t(this.input)}run(){return this.exhaustive()}returnType(){return this}narrow(){return this}}function F(t){throw new I(t)}export{I as NonExhaustiveError,z as P,z as Pattern,u as isMatching,M as match};\n//# sourceMappingURL=index.js.map\n","import { decodeConnectionURL, OPENLV_PROTOCOL_VERSION, } from \"@openlv/core\";\nimport { deriveSymmetricKey, generateHandshakeKey, generateSessionId, initEncryptionKeys, initHash, parseEncryptionKey, } from \"@openlv/core/encryption\";\nimport { SIGNAL_STATE, validatePeerInfo, } from \"@openlv/signaling\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { TRANSPORT_STATE, } from \"@openlv/transport\";\nimport { EventEmitter } from \"eventemitter3\";\nimport { awaitCorrelatedResponse } from \"./messages/correlate.js\";\nimport { selectTransportId } from \"./transports.js\";\nimport { log } from \"./utils/log.js\";\nexport const SESSION_STATE = {\n CREATED: \"created\",\n SIGNALING: \"signaling\",\n READY: \"ready\",\n LINKING: \"linking\",\n CONNECTED: \"connected\",\n DISCONNECTED: \"disconnected\",\n};\n/**\n * OpenLV Session\n *\n * https://openlv.sh/api/session\n */\nexport const createSession = async (initParameters, signalLayer, transportLayers, onMessage, options) => {\n if (transportLayers.length === 0) {\n throw new Error(\"At least one transport is required\");\n }\n if (options?.info) {\n // A receiver silently drops out-of-bounds info with the whole packet,\n // which would surface only as a handshake timeout — fail loudly here.\n const problem = validatePeerInfo(options.info);\n if (problem)\n throw new Error(`Invalid session info: ${problem}`);\n }\n const emitter = new EventEmitter();\n const messages = new EventEmitter();\n const sessionId = \"sessionId\" in initParameters\n ? initParameters.sessionId\n : generateSessionId();\n const { encryptionKey, decryptionKey: { decrypt }, } = await initEncryptionKeys(initParameters);\n let relyingPublicKey;\n const handshakeKey = \"k\" in initParameters\n ? await deriveSymmetricKey(initParameters.k)\n : await generateHandshakeKey();\n const { hash, isHost } = await initHash(\"h\" in initParameters ? initParameters.h : undefined, encryptionKey);\n let status = SESSION_STATE.CREATED;\n let lastError;\n const protocol = initParameters.p;\n const server = initParameters.s;\n const capabilities = {\n transports: transportLayers.map(layer => layer.transportId),\n ...(options?.info && { info: options.info }),\n };\n let peerCaps;\n const updateStatus = (newStatus) => {\n log(\"updateStatus\", newStatus);\n status = newStatus;\n emitter.emit(\"state_change\", {\n status,\n signaling: signal.getState(),\n peerInfo: peerCaps?.info,\n error: lastError,\n });\n };\n const signaling = await signalLayer({\n topic: sessionId,\n url: server,\n });\n const signal = await signaling({\n h: hash,\n canEncrypt() {\n return relyingPublicKey !== undefined;\n },\n async encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return await relyingPublicKey.encrypt(message);\n },\n decrypt,\n publicKey: encryptionKey,\n k: handshakeKey,\n async rpDiscovered(rpKey) {\n const role = isHost ? \"host\" : \"client\";\n log(`rpKey discovered by ${role}`, rpKey);\n relyingPublicKey = await parseEncryptionKey(rpKey);\n },\n capabilities,\n peerCapabilities(received) {\n log(\"peer capabilities received\", received);\n peerCaps = received;\n // Re-emit the current status so observers see peerInfo the moment the\n // capabilities exchange completes, not at the next status transition.\n updateStatus(status);\n },\n isHost,\n });\n let transport;\n const createTransport = (layer) => layer.create({\n encrypt(message) {\n if (!relyingPublicKey) {\n throw new Error(\"Relying party public key not found\");\n }\n return relyingPublicKey?.encrypt(message);\n },\n decrypt,\n isHost,\n onmessage: async (message) => {\n log(\"Session: received message from transport\", message);\n if (message[\"type\"] === \"request\") {\n const messageId = message[\"messageId\"];\n try {\n // Immediately acknowledge receipt so the sender's ack-timeout does\n // not fire while the handler (which may await user interaction) runs.\n await transport?.send({ type: \"ack\", messageId });\n // Notify observers before processing (e.g. wallet UI can show a\n // pending indicator before the handler resolves).\n emitter.emit(\"request\", message[\"payload\"]);\n const data = await onMessage(message[\"payload\"])\n // A throwing handler must still answer, otherwise the peer waits\n // out its full response timeout.\n .catch(() => ({ error: { code: -32603, message: \"Internal error\" } }));\n await transport?.send({\n type: \"response\",\n messageId,\n payload: data,\n });\n }\n catch (error) {\n log(\"failed to respond to peer request\", error);\n }\n }\n if (message[\"type\"] === \"response\" || message[\"type\"] === \"ack\") {\n // Both acks and responses are forwarded to the send() correlator.\n messages.emit(\"message\", message);\n }\n },\n async subsend(message) {\n log(\"Session: sending trans msg to signal\", message);\n const sessionMessage = {\n type: \"request\",\n messageId: crypto.randomUUID(),\n payload: message,\n };\n await signal.send(sessionMessage);\n },\n });\n /**\n * Sessions resumed with a known peer key never exchange capabilities and\n * keep the first configured transport.\n */\n const selectTransportLayer = () => {\n if (!peerCaps)\n return transportLayers[0];\n const selected = selectTransportId(isHost, capabilities.transports, peerCaps.transports);\n return transportLayers.find(layer => layer.transportId === selected);\n };\n // Once both peers are present (signaling encrypted) the transport should\n // connect promptly; if it cannot (e.g. no ICE candidates on a restricted\n // network) fail loudly instead of sitting in \"linking\" forever.\n const TRANSPORT_LINK_TIMEOUT_MS = 45000;\n let linkDeadline;\n const clearLinkDeadline = () => {\n clearTimeout(linkDeadline);\n linkDeadline = undefined;\n };\n const onTransportStateChange = (state) => {\n log(\"transport state change\", state);\n if (state === TRANSPORT_STATE.CONNECTED) {\n clearLinkDeadline();\n lastError = undefined;\n updateStatus(SESSION_STATE.CONNECTED);\n }\n if (state === TRANSPORT_STATE.ERROR) {\n clearLinkDeadline();\n lastError ?? (lastError = \"Peer-to-peer transport failed\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }\n };\n const onTransportError = (reason) => {\n if (reason)\n lastError = reason;\n };\n const startTransport = () => {\n if (!transport) {\n const layer = selectTransportLayer();\n if (!layer) {\n log(\"no common transport with peer\", capabilities.transports, peerCaps?.transports);\n lastError ?? (lastError = \"No common transport with peer\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n return;\n }\n log(\"selected transport\", layer.transportId);\n transport = createTransport(layer);\n transport.emitter.on(\"state_change\", onTransportStateChange);\n transport.emitter.on(\"error\", onTransportError);\n }\n linkDeadline ?? (linkDeadline = setTimeout(() => {\n if (status === SESSION_STATE.CONNECTED)\n return;\n log(\"transport failed to connect in time\");\n lastError ?? (lastError = \"Timed out establishing the peer-to-peer connection\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }, TRANSPORT_LINK_TIMEOUT_MS));\n Promise.resolve(transport.setup()).catch((error) => {\n log(\"transport setup failed\", error);\n clearLinkDeadline();\n lastError ?? (lastError = error instanceof Error ? error.message : \"Transport setup failed\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n });\n };\n const onSignalMessage = async (message) => {\n log(\"Session: received message from signaling\", message);\n const sessionMessage = message;\n if (sessionMessage.type === \"response\") {\n messages.emit(\"message\", sessionMessage);\n }\n if (sessionMessage.type === \"request\") {\n if (!transport) {\n log(\"dropping negotiation message: transport not selected yet\");\n return;\n }\n try {\n await transport.handle(sessionMessage.payload);\n }\n catch (error) {\n // Negotiation payloads come from the (untrusted) relay; a malformed\n // one must not become an unhandled rejection.\n log(\"failed to handle negotiation message\", error);\n }\n }\n };\n const onSignalStateChange = (state) => {\n log(\"signal state change\", state);\n if (state === SIGNAL_STATE.READY) {\n updateStatus(SESSION_STATE.READY);\n }\n if ([\n SIGNAL_STATE.HANDSHAKE,\n SIGNAL_STATE.HANDSHAKE_PARTIAL,\n ].includes(state)) {\n updateStatus(SESSION_STATE.LINKING);\n }\n if (state === SIGNAL_STATE.ENCRYPTED) {\n startTransport();\n }\n if (state === SIGNAL_STATE.ERROR) {\n log(\"signaling error — marking session disconnected\");\n lastError ?? (lastError = \"Signaling failed or timed out\");\n updateStatus(SESSION_STATE.DISCONNECTED);\n }\n };\n return {\n connect: async () => {\n updateStatus(SESSION_STATE.SIGNALING);\n log(\"connecting to session, isHost:\", isHost);\n signal.on(\"message\", onSignalMessage);\n signal.on(\"state_change\", onSignalStateChange);\n await signal.setup();\n },\n async close() {\n log(\"session teardown\");\n clearLinkDeadline();\n signal.off(\"message\", onSignalMessage);\n signal.off(\"state_change\", onSignalStateChange);\n transport?.emitter.off(\"state_change\", onTransportStateChange);\n transport?.emitter.off(\"error\", onTransportError);\n await Promise.all([\n transport?.teardown(),\n signal.teardown(),\n ]);\n updateStatus(SESSION_STATE.DISCONNECTED);\n },\n getState() {\n return {\n status,\n signaling: signal.getState(),\n peerInfo: peerCaps?.info,\n error: lastError,\n };\n },\n getHandshakeParameters() {\n return {\n version: OPENLV_PROTOCOL_VERSION,\n sessionId,\n h: hash,\n k: handshakeKey.toString(),\n p: protocol,\n s: server,\n };\n },\n waitForLink: async () => new Promise((resolve, reject) => {\n const handler = (state) => {\n if (state?.status === SESSION_STATE.CONNECTED) {\n emitter.off(\"state_change\", handler);\n resolve();\n }\n else if (state?.status === SESSION_STATE.DISCONNECTED) {\n emitter.off(\"state_change\", handler);\n reject(new Error(lastError ?? \"Session failed to connect\"));\n }\n };\n // Subscribe before inspecting the current status so a transition\n // between the check and the subscription cannot be missed.\n emitter.on(\"state_change\", handler);\n handler({ status });\n }),\n async send(message, ackTimeout = 10000, responseTimeout = 60 * 60000) {\n if (!transport || signal.getState().state !== SIGNAL_STATE.ENCRYPTED) {\n throw new Error(\"Session not ready\");\n }\n const messageId = crypto.randomUUID();\n const sessionMessage = {\n type: \"request\",\n messageId,\n payload: message,\n };\n await transport.send(sessionMessage);\n return awaitCorrelatedResponse(messages, messageId, ackTimeout, responseTimeout);\n },\n _internal: {\n signal,\n get transport() {\n return transport;\n },\n },\n emitter,\n };\n};\n/**\n * Connect to a session from its openlv:// URL\n */\nexport const connectSession = async (connectionUrl, onMessage, transports, options) => {\n const initParameters = decodeConnectionURL(connectionUrl);\n const signaling = await dynamicSignalingLayer(initParameters.p);\n if (!signaling) {\n throw new Error(`Invalid signaling protocol: ${initParameters.p}`);\n }\n return createSession(initParameters, signaling, transports, onMessage, options);\n};\n//# sourceMappingURL=index.js.map","import { encodeConnectionURL } from \"@openlv/core\";\nimport { createSession, } from \"@openlv/session\";\nimport { dynamicSignalingLayer } from \"@openlv/signaling/dynamic\";\nimport { webrtc } from \"@openlv/transport/webrtc\";\nimport { Provider as OxProvider } from \"ox\";\nimport { match } from \"ts-pattern\";\nimport { createProviderStorage, } from \"./storage/index.js\";\nimport { log } from \"./utils/log.js\";\n/** Unwrap `{ result }` / `{ error }` envelopes from wallet session handlers. */\nconst unwrapSessionResponse = (payload) => {\n if (typeof payload !== \"object\" || payload === null) {\n return payload;\n }\n if (\"error\" in payload && payload.error) {\n const rpcError = payload.error;\n throw Object.assign(new Error(rpcError.message), { code: rpcError.code });\n }\n if (\"result\" in payload) {\n return payload.result;\n }\n return payload;\n};\nexport const PROVIDER_STATUS = {\n STANDBY: \"standby\",\n CREATING: \"creating\",\n CONNECTING: \"connecting\",\n CONNECTED: \"connected\",\n ERROR: \"error\",\n};\n/**\n * Convert stored WebRTC settings to a transport config. Returns undefined\n * when nothing is configured so the transport falls back to its own\n * defaults — an empty iceServers array would silently disable STUN/TURN.\n */\nconst convertStoredWebRTCSettings = (transport) => {\n const stun = transport?.stun?.map(url => ({ urls: url })) || [];\n const turn = transport?.turn?.map(server => ({\n urls: server.urls,\n username: server.username,\n credential: server.credential,\n })) || [];\n const iceServers = [...stun, ...turn];\n return iceServers.length > 0 ? { iceServers } : undefined;\n};\n/**\n * OpenLV Provider\n *\n * https://openlv.sh/api/provider\n */\nexport const createProvider = (parameters) => {\n const oxEmitter = OxProvider.createEmitter();\n let session;\n let status = PROVIDER_STATUS.STANDBY;\n let lastError;\n let accounts = [];\n const storage = createProviderStorage({ storage: parameters.storage });\n const { openModal, config } = parameters;\n const updateStatus = (newStatus) => {\n status = newStatus;\n log(\"updateStatus\", status);\n oxEmitter.emit(\"status_change\", newStatus);\n };\n /**\n * Called when the remote peer (wallet) sends a request to the dApp.\n *\n * In the normal EIP-1193 flow the dApp is always the requester, so this\n * path is unusual. We emit a `request` event on the session (once the\n * session is available) so the modal or other UI consumers can react.\n * For any method we have no built-in handler for, we return a JSON-RPC\n * \"Method not found\" error so the wallet receives a proper response rather\n * than a no-op stub.\n */\n const onMessage = async (message) => {\n log(\"onMessage received from remote peer\", message);\n // Emit on the session emitter so observers (e.g. modal) can react.\n session?.emitter.emit(\"request\", message);\n return {\n error: {\n code: -32601,\n message: \"Method not found\",\n },\n };\n };\n const getAccounts = async () => {\n if (session) {\n return unwrapSessionResponse(await session.send({ method: \"eth_accounts\", params: [] }));\n }\n throw new Error(\"No session\");\n };\n /** Derive default link parameters from stored signaling settings. */\n const defaultLinkParameters = () => {\n const signaling = storage.getSettings().signaling ?? config?.signaling;\n const p = signaling?.p;\n const s = p ? signaling?.s?.[p] : undefined;\n return p && s ? { p, s } : undefined;\n };\n // Warm up the signaling module for the configured protocol. Backends are\n // loaded via dynamic import; in dev servers (Vite) the first import can\n // trigger a dependency re-optimization page reload — better at page load\n // than mid-handshake.\n const prefetchProtocol = (storage.getSettings().signaling ?? config?.signaling)?.p;\n if (prefetchProtocol) {\n void dynamicSignalingLayer(prefetchProtocol).catch(() => { });\n }\n const start = async (parameters) => {\n lastError = undefined;\n updateStatus(PROVIDER_STATUS.CREATING);\n const linkParameters = parameters ?? defaultLinkParameters();\n if (!linkParameters) {\n throw new Error(\"No link parameters provided and no signaling defaults configured\");\n }\n // Stored user settings win over constructor config; both fall back to\n // the transport's built-in defaults when absent.\n const transportOptions = convertStoredWebRTCSettings(storage.getSettings().transport?.s?.webrtc)\n ?? config?.transport?.s?.webrtc;\n try {\n session = await createSession(linkParameters, await dynamicSignalingLayer(linkParameters.p), [webrtc(transportOptions)], onMessage, { info: config?.info });\n updateStatus(PROVIDER_STATUS.CONNECTING);\n log(\"session created\");\n await session.connect();\n log(\"session connected\");\n const handshakeParameters = session.getHandshakeParameters();\n const url = encodeConnectionURL(handshakeParameters);\n log(\"session url\", url);\n oxEmitter.emit(\"session_started\", session);\n await session.waitForLink();\n log(\"session linked\");\n accounts = await getAccounts();\n const chainIdHex = unwrapSessionResponse(await session.send({ method: \"eth_chainId\", params: [] }));\n updateStatus(PROVIDER_STATUS.CONNECTED);\n oxEmitter.emit(\"connect\", { chainId: chainIdHex });\n oxEmitter.emit(\"accountsChanged\", accounts);\n return session;\n }\n catch (error) {\n // Surface the failure to UI consumers (e.g. the modal) instead of\n // leaving the provider stuck in \"connecting\".\n lastError\n = session?.getState().error\n ?? (error instanceof Error ? error.message : \"Connection failed\");\n updateStatus(PROVIDER_STATUS.ERROR);\n throw error;\n }\n };\n const closeSession = async () => {\n await session?.close();\n session = undefined;\n lastError = undefined;\n updateStatus(PROVIDER_STATUS.STANDBY);\n };\n const request = async (request) => {\n log(\"ox request\", request.method, request.params);\n return match(request)\n .with({ method: \"eth_chainId\" }, async () => {\n log(\"eth_chainId\");\n if (session) {\n log(\"sending eth_chainId to session\");\n const result = unwrapSessionResponse(await session.send(request));\n log(\"eth_chainId result from session\", result);\n return result;\n }\n return \"0x1\";\n })\n .with({ method: \"wallet_requestPermissions\" }, () => {\n throw new Error(\"Not implemented\");\n })\n .with({ method: \"wallet_revokePermissions\" }, async () => {\n await closeSession();\n return;\n })\n // TODO: if modal is enabled explicitly toggle the modal to show.\n .with({ method: \"eth_requestAccounts\" }, async () => {\n log(\"eth_requestAccounts\");\n let provider;\n if (oxProvider) {\n provider = oxProvider;\n }\n if (openModal && provider) {\n await openModal(provider);\n await new Promise((resolve) => {\n const onConnect = () => {\n cleanup();\n resolve();\n };\n const onDisconnect = () => {\n cleanup();\n resolve();\n };\n const cleanup = () => {\n provider?.off(\"connect\", onConnect);\n provider?.off(\"disconnect\", onDisconnect);\n };\n provider?.on(\"connect\", onConnect);\n provider?.on(\"disconnect\", onDisconnect);\n });\n return await getAccounts();\n }\n await start();\n return await getAccounts();\n })\n .with({ method: \"eth_accounts\" }, async () => {\n log(\"eth_accounts\");\n return await getAccounts();\n })\n .otherwise(async (v) => {\n if (session) {\n log(\"sending request to session\", request);\n const result = unwrapSessionResponse(await session.send(request));\n log(\"result from session\", result);\n return result;\n }\n throw new Error(`Method ${v.method} not supported`);\n });\n };\n const oxProvider = OxProvider.from({\n ...oxEmitter,\n storage,\n request,\n getSession: () => session,\n getAccounts,\n createSession: start,\n closeSession,\n getState: () => ({\n status,\n session: session?.getState() ?? undefined,\n error: lastError,\n }),\n });\n return oxProvider;\n};\n//# sourceMappingURL=index.js.map","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import type {\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nexport type {\n PredefinedThemeName,\n ThemeConfig,\n ThemeMode,\n ThemeTokensMap,\n UserThemePreference,\n} from \"./types.js\";\n\nconst importOrPassthrough = async (\n theme: ThemeConfig[\"theme\"],\n): Promise<ThemeTokensMap> => {\n if (typeof theme === \"string\") {\n if (theme === \"simple\") {\n return await import(\"./simple.js\").then(m => m.simpleTheme);\n }\n\n if (theme === \"openlv\") {\n return await import(\"./openlv.js\").then(m => m.openlvTheme);\n }\n\n throw new Error(`Unknown theme: ${theme}`);\n }\n\n return theme;\n};\n\ntype Primitive = string | number | boolean | null | undefined;\ntype Leaf = Primitive; // extend if you want to allow Date, bigint, etc.\n\ntype FlatCssVariables = Record<`--${string}`, Leaf>;\n\nconst isPlainObject = (value: unknown): value is Record<string, unknown> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nexport const flattenToCssVars = <T extends Record<string, unknown>>(\n object: T,\n prefix: readonly string[] = [],\n out: FlatCssVariables = {},\n): FlatCssVariables => {\n for (const [key, value] of Object.entries(object)) {\n const path = [...prefix, key];\n\n if (isPlainObject(value)) {\n flattenToCssVars(value, path, out);\n }\n else {\n out[`--lv-${path.join(\"-\")}` as `--${string}`] = value as Leaf;\n }\n }\n\n return out;\n};\n\nexport const resolveMode = (\n appThemeMode: ThemeMode = \"auto\",\n userTheme: UserThemePreference = \"system\",\n): \"light\" | \"dark\" => {\n if (appThemeMode === \"light\" || appThemeMode === \"dark\") {\n return appThemeMode;\n }\n\n if (userTheme === \"system\") {\n return globalThis.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n return userTheme;\n};\n\nconst deepMerge = (\n base: Record<string, unknown>,\n overlay: Record<string, unknown>,\n): Record<string, unknown> => {\n const result: Record<string, unknown> = { ...base };\n\n for (const key of Object.keys(overlay)) {\n const baseValue = base[key];\n const overlayValue = overlay[key];\n\n result[key]\n = isPlainObject(baseValue) && isPlainObject(overlayValue)\n ? deepMerge(baseValue, overlayValue)\n : overlayValue;\n }\n\n return result;\n};\n\n// Converts the theme into css variables\n// --lv-\nexport const buildTheme = async (\n config: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n const theme = await importOrPassthrough(config.theme);\n\n const resolvedMode = resolveMode(config.mode, userTheme);\n const variant = theme[resolvedMode];\n\n if (!variant) return \"\";\n\n const mergedVariant = theme.common\n ? deepMerge(theme.common, variant)\n : variant;\n\n const flattened = flattenToCssVars(mergedVariant);\n\n return Object.entries(flattened)\n .map(([key, value]) => `${key}: ${value};`)\n .join(\"\\n\");\n};\n","import \"./index.css\";\n\nimport { buildTheme } from \"../theme/index.js\";\nimport type { ThemeConfig, UserThemePreference } from \"../theme/types.js\";\n// @ts-expect-error - Vite handles this import at build time\nimport cssContent from \"./index.css?inline\";\n\n/**\n * Ensures styles exist in the shadow root and updates them with the current theme.\n */\nexport const updateStyles = async (\n shadowRoot: ShadowRoot,\n theme?: ThemeConfig,\n userTheme: UserThemePreference = \"system\",\n) => {\n let style = shadowRoot.querySelector(\n \"style[data-openlv-modal]\",\n ) as HTMLStyleElement | null;\n\n if (!style) {\n style = document.createElement(\"style\");\n style.dataset.openlvModal = \"true\";\n shadowRoot.append(style);\n }\n\n const themeConfig = {\n ...theme,\n theme: theme?.theme ?? \"simple\",\n };\n\n if (themeConfig) {\n const themeString = await buildTheme(themeConfig, userTheme);\n\n style.textContent = `:root, :host {\\n${themeString}\\n}\\n` + cssContent;\n }\n else {\n style.textContent = cssContent;\n }\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport { render } from \"solid-js/web\";\n\nimport { ModalProvider } from \"./context.js\";\nimport { updateStyles } from \"./styles/index.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\n\nexport type OpenLVModalElementProperties = {\n provider: OpenLVProvider;\n onClose?: () => void;\n theme?: ThemeConfig;\n};\n\nexport class OpenLVModalElement\n extends HTMLElement {\n private readonly shadow: ShadowRoot;\n private renderRequested = false;\n private readonly parameters: OpenLVModalElementProperties;\n private themeCleanup?: () => void;\n private disposeRender?: () => void;\n\n constructor(parameters: OpenLVModalElementProperties) {\n super();\n this.parameters = parameters;\n\n this.shadow = this.attachShadow({ mode: \"open\" });\n const initialUserTheme\n = parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, parameters.theme, initialUserTheme);\n }\n\n connectedCallback() {\n this.requestRender();\n this.themeCleanup?.();\n this.setupThemeListener();\n }\n\n disconnectedCallback() {\n this.disposeRender?.();\n this.disposeRender = undefined;\n this.themeCleanup?.();\n }\n\n private setupThemeListener() {\n const update = () => {\n const userTheme\n = this.parameters.provider.storage.getSettings()?.theme ?? \"system\";\n\n void updateStyles(this.shadow, this.parameters.theme, userTheme);\n };\n\n this.parameters.provider.storage.emitter.on(\"settings_change\", update);\n\n const mediaQuery = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\n\n mediaQuery.addEventListener(\"change\", update);\n\n this.themeCleanup = () => {\n this.parameters.provider.storage.emitter.off(\"settings_change\", update);\n mediaQuery.removeEventListener(\"change\", update);\n };\n }\n\n showModal() {\n this.style.display = \"block\";\n }\n\n hideModal() {\n this.style.display = \"none\";\n }\n\n private requestRender() {\n if (this.renderRequested) {\n return;\n }\n\n this.renderRequested = true;\n queueMicrotask(() => {\n this.renderRequested = false;\n this.performRender();\n });\n }\n\n private performRender() {\n this.disposeRender?.();\n this.disposeRender = render(\n () => <ModalProvider {...this.parameters} />,\n this.shadow,\n );\n }\n}\n\nexport default OpenLVModalElement;\n","import {\n type Accessor,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n type ParentComponent,\n useContext,\n} from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport fallbackEnglish from \"../../lang/en.json\" with { type: \"json\" };\nimport { useModalContext } from \"../context.jsx\";\n\nexport type LanguageTag\n = | \"en\"\n | \"nl\"\n | \"fr\"\n | \"es\"\n | \"sv\"\n | \"zh-cn\"\n | \"ar\"\n | \"he\"\n | \"fa\";\n\nexport type LanguageInfo = {\n tag: LanguageTag;\n name: string;\n nativeName: string;\n rtl?: boolean;\n};\n\nexport const LANGUAGES: LanguageInfo[] = [\n { tag: \"en\", name: \"English\", nativeName: \"English\" },\n { tag: \"nl\", name: \"Dutch\", nativeName: \"Nederlands\" },\n { tag: \"es\", name: \"Spanish\", nativeName: \"Español\" },\n { tag: \"sv\", name: \"Swedish\", nativeName: \"Svenska\" },\n { tag: \"zh-cn\", name: \"Chinese (Simplified)\", nativeName: \"简体中文\" },\n { tag: \"fr\", name: \"French\", nativeName: \"Français\" },\n { tag: \"ar\", name: \"Arabic\", nativeName: \"العربية\", rtl: true },\n { tag: \"he\", name: \"Hebrew\", nativeName: \"עברית\", rtl: true },\n { tag: \"fa\", name: \"Persian\", nativeName: \"فارسی\", rtl: true },\n];\n\nexport const isRtlLanguage = (tag: LanguageTag): boolean => {\n const language = LANGUAGES.find(l => l.tag === tag);\n\n return language?.rtl ?? false;\n};\n\nconst SUPPORTED_LANGUAGE_TAGS = new Set(LANGUAGES.map(l => l.tag));\n\nexport const detectBrowserLanguage = (): LanguageTag => {\n if (typeof navigator === \"undefined\") return \"en\";\n\n const languages = navigator.languages || [navigator.language];\n\n for (const browserLang of languages) {\n const lang = browserLang.toLowerCase();\n\n // Exact match\n if (SUPPORTED_LANGUAGE_TAGS.has(lang as LanguageTag)) {\n return lang as LanguageTag;\n }\n\n // Check for zh-cn variants (zh, zh-hans, zh-cn)\n if (\n lang === \"zh\"\n || lang.startsWith(\"zh-hans\")\n || lang.startsWith(\"zh-cn\")\n ) {\n return \"zh-cn\";\n }\n\n // Base language match (e.g., \"en-US\" -> \"en\")\n const [baseLang] = lang.split(\"-\", 1);\n\n if (SUPPORTED_LANGUAGE_TAGS.has(baseLang as LanguageTag)) {\n return baseLang as LanguageTag;\n }\n }\n\n return \"en\";\n};\n\nexport const getLanguageScore = (tag: string): number => {\n if (typeof navigator === \"undefined\") return 0;\n\n const languages = navigator.languages || [navigator.language];\n\n for (let index = 0; index < languages.length; index++) {\n const browserLang = languages[index].toLowerCase();\n\n // Exact match\n if (browserLang === tag) return languages.length - index + 1;\n\n // Prefix match (e.g., \"en-US\" matches \"en\")\n if (browserLang.startsWith(`${tag}-`) || tag.startsWith(`${browserLang}-`))\n return languages.length - index;\n\n // Base language match (e.g., \"zh\" matches \"zh-cn\")\n const [baseLang] = browserLang.split(\"-\", 1);\n\n if (baseLang === tag || tag.startsWith(`${baseLang}-`))\n return languages.length - index - 0.5;\n }\n\n return 0;\n};\n\nexport type Translate = (\n key: string,\n parameters?: Readonly<Record<string, string | number>>,\n) => string | JSX.Element;\n\nexport type Translations = Record<string, unknown>;\n\nconst resolveNestedValue = (\n source: Translations | null | undefined,\n key: string,\n): unknown => {\n if (!source) return undefined;\n\n const segments = key.split(\".\").filter(Boolean);\n\n if (segments.length === 0) return undefined;\n\n let current: unknown = source;\n\n for (const segment of segments) {\n if (typeof current !== \"object\" || current === null) return undefined;\n\n current = (current as Record<string, unknown>)[segment];\n }\n\n return current;\n};\n\nconst interpolate = (\n template: string,\n parameters?: Readonly<Record<string, string | number>>,\n): string => {\n if (!parameters) return template;\n\n return template.replaceAll(\n /\\{(\\w+)\\}/g,\n (matchText: string, key: string): string => {\n const value = parameters[key];\n\n return value === undefined ? matchText : String(value);\n },\n );\n};\n\nexport const resolveTranslation = (parameters: {\n primary: Translations | undefined;\n fallback: Translations;\n key: string;\n params?: Readonly<Record<string, string | number>>;\n}): string => {\n const fromPrimary = resolveNestedValue(parameters.primary, parameters.key);\n\n if (typeof fromPrimary === \"string\") {\n return interpolate(fromPrimary, parameters.params);\n }\n\n const fromFallback = resolveNestedValue(parameters.fallback, parameters.key);\n\n if (typeof fromFallback === \"string\") {\n return interpolate(fromFallback, parameters.params);\n }\n\n return parameters.key;\n};\n\nexport type TranslationContextValue = {\n languageTag: Accessor<LanguageTag>;\n setLanguageTag: (languageTag: LanguageTag) => void;\n isLoadingLanguagePack: Accessor<boolean>;\n isRtl: Accessor<boolean>;\n t: Translate;\n};\n\nexport const TranslationContext = createContext<\n TranslationContextValue | undefined\n>(undefined);\n\nconst loadLanguagePack = async (\n languageTag: LanguageTag,\n): Promise<Translations | undefined> =>\n match(languageTag)\n .with(\"en\", () => Promise.resolve(undefined))\n .with(\"nl\", async () => import(\"../../lang/nl.json\").then(m => m.default))\n .with(\"es\", async () => import(\"../../lang/es.json\").then(m => m.default))\n .with(\"sv\", async () => import(\"../../lang/sv.json\").then(m => m.default))\n .with(\"fr\", async () => import(\"../../lang/fr.json\").then(m => m.default))\n .with(\"zh-cn\", async () =>\n import(\"../../lang/zh-cn.json\").then(m => m.default),\n )\n .with(\"ar\", async () => import(\"../../lang/ar.json\").then(m => m.default))\n .with(\"he\", async () => import(\"../../lang/he.json\").then(m => m.default))\n .with(\"fa\", async () => import(\"../../lang/fa.json\").then(m => m.default))\n .exhaustive();\n\nexport const TranslationProvider: ParentComponent = (properties) => {\n const { provider } = useModalContext();\n const initialLanguageTag = provider.storage.getSettings().language as LanguageTag | undefined;\n const [languageTag, setLanguageTag] = createSignal<LanguageTag>(\n initialLanguageTag ?? \"en\",\n );\n const [languagePack, setLanguagePack] = createSignal<\n Translations | undefined\n >(undefined);\n const [isLoadingLanguagePack, setIsLoadingLanguagePack] = createSignal(false);\n\n createEffect(() => {\n let isCancelled = false;\n\n const run = async () => {\n setIsLoadingLanguagePack(true);\n\n try {\n const nextPack = await loadLanguagePack(languageTag());\n\n if (isCancelled) return;\n\n setLanguagePack(nextPack);\n }\n finally {\n if (!isCancelled) setIsLoadingLanguagePack(false);\n }\n };\n\n void run();\n\n onCleanup(() => {\n isCancelled = true;\n });\n });\n\n const t: Translate = (key, parameters) => {\n const translated = resolveTranslation({\n primary: languagePack(),\n fallback: fallbackEnglish as unknown as Translations,\n key,\n params: parameters,\n });\n const lines = translated.split(\"\\n\");\n\n if (lines.length <= 1) {\n return translated;\n }\n\n return (\n <>\n {lines.map((line, index) => (\n <>\n {line}\n {index < lines.length - 1 ? <br /> : null}\n </>\n ))}\n </>\n );\n };\n\n const isRtl = createMemo(() => isRtlLanguage(languageTag()));\n const updateLanguageTag = (nextLanguageTag: LanguageTag) => {\n setLanguageTag(nextLanguageTag);\n };\n\n const contextValue: TranslationContextValue = {\n languageTag,\n setLanguageTag: updateLanguageTag,\n isLoadingLanguagePack,\n isRtl,\n t,\n };\n\n return (\n <TranslationContext.Provider value={contextValue}>\n {properties.children}\n </TranslationContext.Provider>\n );\n};\n\nexport const useTranslation = () => {\n const context = useContext(TranslationContext);\n\n if (!context) {\n throw new Error(\"TranslationProvider not found\");\n }\n\n return context;\n};\n","import type { OpenLVProvider } from \"@openlv/provider\";\nimport {\n type Component,\n createContext,\n useContext,\n} from \"solid-js\";\n\nimport { ModalRoot } from \"./components/ModalRoot.js\";\nimport { type OpenLVModalElementProperties } from \"./element.js\";\nimport type { ThemeConfig } from \"./theme/types.js\";\nimport {\n TranslationProvider,\n} from \"./utils/i18n.js\";\n\nexport type ModalContextValue = {\n provider: OpenLVProvider;\n themeConfig?: ThemeConfig;\n};\n\nexport const ModalContext = createContext<ModalContextValue | undefined>(\n undefined,\n);\n\nexport const ModalProvider: Component<OpenLVModalElementProperties> = (properties) => {\n const { provider, theme } = properties;\n\n return (\n <ModalContext.Provider value={{ provider, themeConfig: theme }}>\n <TranslationProvider>\n <ModalRoot onClose={properties.onClose} />\n </TranslationProvider>\n </ModalContext.Provider>\n );\n};\n\nexport const useModalContext = () => {\n const context = useContext(ModalContext);\n\n if (!context) throw new Error(\"Modal context not found\");\n\n return context;\n};\n","import { encodeConnectionURL } from \"@openlv/core\";\nimport type { SessionStateObject } from \"@openlv/session\";\nimport { createMemo, createSignal, onCleanup, onMount } from \"solid-js\";\n\nimport { useModalContext } from \"../context.js\";\n\nexport const useSession = () => {\n const { provider } = useModalContext();\n const session = createMemo(() => provider.getSession(), undefined, { name: \"session\" });\n const [status, setStatus] = createSignal<SessionStateObject | undefined>(session()?.getState());\n\n console.log(\"session status\", status());\n\n const handleStateChange = (state?: SessionStateObject) => {\n console.log(\"session state change\", state);\n setStatus(state);\n };\n\n onMount(() => {\n session()?.emitter.on(\"state_change\", handleStateChange);\n });\n\n onCleanup(() => {\n session()?.emitter.off(\"state_change\", handleStateChange);\n });\n\n const parameters = createMemo(() => session()?.getHandshakeParameters());\n const uri = createMemo(() => {\n const handshakeParameters = parameters();\n\n return handshakeParameters\n ? encodeConnectionURL(handshakeParameters)\n : undefined;\n });\n\n return {\n uri,\n status,\n };\n};\n\nexport const useSessionStart = () => {\n const { provider } = useModalContext();\n\n return {\n start: () => {\n const currentSettings = provider.storage.getSettings();\n const p = currentSettings?.signaling?.p;\n const s = p ? currentSettings?.signaling?.s?.[p] : undefined;\n\n if (!p || !s) {\n throw new Error(\"Invalid protocol or server\");\n }\n\n return provider.createSession({\n p,\n s,\n });\n },\n };\n};\n","import { useSession } from \"../hooks/useSession.js\";\n\nexport const UnknownState = (properties: { state: unknown; }) => {\n const { uri, status } = useSession();\n\n // biome-ignore lint/suspicious/noConsole: debug\n console.error(\"Unknown state:\", {\n state: properties.state,\n });\n\n return (\n <div class=\"rounded-md bg-(--lv-control-button-secondary-background) p-2 text-(--lv-text-muted)\">\n <div>\n Unknown state:\n {JSON.stringify(properties.state)}\n </div>\n <div>\n URI:\n {uri()}\n </div>\n <div>\n Session Status:\n {JSON.stringify(status())}\n </div>\n </div>\n );\n};\n","/*!\nCopyright (c) 2023 Paul Miller (paulmillr.com)\nThe library paulmillr-qr is dual-licensed under the Apache 2.0 OR MIT license.\nYou can select a license of your choice.\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n*/\n// We do not use newline escape code directly in strings because it's not parser-friendly\nconst chCodes = { newline: 10, reset: 27 };\nfunction assertNumber(n) {\n if (!Number.isSafeInteger(n))\n throw new Error(`integer expected: ${n}`);\n}\nfunction validateVersion(ver) {\n if (!Number.isSafeInteger(ver) || ver < 1 || ver > 40)\n throw new Error(`Invalid version=${ver}. Expected number [1..40]`);\n}\nfunction bin(dec, pad) {\n return dec.toString(2).padStart(pad, '0');\n}\nfunction mod(a, b) {\n const result = a % b;\n return result >= 0 ? result : b + result;\n}\nfunction fillArr(length, val) {\n // Current callers only pass primitive fill values; object fills would alias references.\n return new Array(length).fill(val);\n}\nfunction popcnt(n) {\n n = n - ((n >>> 1) & 0x55555555);\n n = (n & 0x33333333) + ((n >>> 2) & 0x33333333);\n return (((n + (n >>> 4)) & 0x0f0f0f0f) * 0x01010101) >>> 24;\n}\n/**\n * Interleaves byte blocks.\n * @param blocks [[1, 2, 3], [4, 5, 6]]\n * @returns [1, 4, 2, 5, 3, 6]\n */\nfunction interleaveBytes(blocks) {\n let maxLen = 0;\n let totalLen = 0;\n for (const block of blocks) {\n maxLen = Math.max(maxLen, block.length);\n totalLen += block.length;\n }\n const result = new Uint8Array(totalLen);\n let idx = 0;\n // When block lengths differ, callers must pass the shorter blocks first so\n // the interleaving order matches ISO/IEC 18004 §7.6 c).\n for (let i = 0; i < maxLen; i++) {\n for (const block of blocks) {\n if (i < block.length)\n result[idx++] = block[i];\n }\n }\n return result;\n}\n// Optimize for minimal score/penalty\nfunction best() {\n let best;\n let bestScore = Infinity;\n return {\n add(score, value) {\n // Ties keep the first candidate so equal-score selections stay deterministic.\n if (score >= bestScore)\n return;\n best = value;\n bestScore = score;\n },\n get: () => best,\n score: () => bestScore,\n };\n}\n// Based on https://github.com/paulmillr/scure-base/blob/main/index.ts\nfunction alphabet(alphabet) {\n // Character order defines the numeric values used by the target QR mode.\n return Object.freeze({\n has: (char) => alphabet.includes(char),\n decode: (input) => {\n if (!Array.isArray(input) || (input.length && typeof input[0] !== 'string'))\n throw new Error('alphabet.decode input should be array of strings');\n return input.map((letter) => {\n if (typeof letter !== 'string')\n throw new Error(`alphabet.decode: not string element=${letter}`);\n const index = alphabet.indexOf(letter);\n if (index === -1)\n throw new Error(`Unknown letter: \"${letter}\". Allowed: ${alphabet}`);\n return index;\n });\n },\n encode: (digits) => {\n if (!Array.isArray(digits) || (digits.length && typeof digits[0] !== 'number'))\n throw new Error('alphabet.encode input should be an array of numbers');\n return digits.map((i) => {\n assertNumber(i);\n if (i < 0 || i >= alphabet.length)\n throw new Error(`Digit index outside alphabet: ${i} (alphabet: ${alphabet.length})`);\n return alphabet[i];\n });\n },\n });\n}\n// Transpose 32x32 bit matrix in-place\n// a[0..31] are 32 rows of 32 bits each; after transpose they become 32 columns.\nfunction transpose32(a) {\n if (a.length !== 32)\n throw new Error('expects 32 element matrix');\n const masks = [0x55555555, 0x33333333, 0x0f0f0f0f, 0x00ff00ff, 0x0000ffff];\n // Hello again, FFT\n for (let stage = 0; stage < 5; stage++) {\n const m = masks[stage] >>> 0;\n const s = 1 << stage; // 1,2,4,8,16\n const step = s << 1; // 2,4,8,16,32\n for (let i = 0; i < 32; i += step) {\n for (let k = 0; k < s; k++) {\n const i0 = i + k;\n const i1 = i0 + s;\n const x = a[i0] >>> 0;\n const y = a[i1] >>> 0;\n const t = ((x >>> s) ^ y) & m;\n a[i0] = (x ^ (t << s)) >>> 0;\n a[i1] = (y ^ t) >>> 0;\n }\n }\n }\n}\nconst bitMask = (x) => (1 << (x & 31)) >>> 0;\nconst rangeMask = (shift, len) => {\n // len in [0..32], shift in [0..31]\n if (len === 0)\n return 0;\n // Callers only request len=32 for word-aligned spans; JS shift counts wrap at 32,\n // so full-word masks must bypass the generic `(1 << len)` path.\n if (len === 32)\n return 0xffffffff;\n return (((1 << len) - 1) << shift) >>> 0;\n};\n/**\n * Mutable monochrome bitmap used as the internal QR representation.\n * @param size - Square edge length or explicit bitmap dimensions.\n * @param data - Optional row-major pixel matrix using `true`, `false`, or `undefined`.\n * @example\n * Create a bitmap, then scale it for display.\n * ```ts\n * import { Bitmap } from 'qr';\n * const bitmap = Bitmap.fromString('X \\n X');\n * bitmap.scale(2);\n * ```\n */\nexport class Bitmap {\n static size(size, limit) {\n if (typeof size === 'number')\n size = { height: size, width: size };\n if (!Number.isSafeInteger(size.height) && size.height !== Infinity)\n throw new Error(`Bitmap: invalid height=${size.height} (${typeof size.height})`);\n if (!Number.isSafeInteger(size.width) && size.width !== Infinity)\n throw new Error(`Bitmap: invalid width=${size.width} (${typeof size.width})`);\n if (limit !== undefined) {\n // Clamp length, so it won't overflow, also allows to use Infinity, so we draw until end\n size = {\n width: Math.min(size.width, limit.width),\n height: Math.min(size.height, limit.height),\n };\n }\n return size;\n }\n static fromString(s) {\n // Remove linebreaks on start and end, so we draw in `` section\n // Fixture strings use LF-delimited rows of X / space / ? characters; callers\n // must normalize CRLF input before handing it to this debug parser.\n s = s.replace(/^\\n+/g, '').replace(/\\n+$/g, '');\n const lines = s.split(String.fromCharCode(chCodes.newline));\n const height = lines.length;\n let width;\n const rows = [];\n for (const line of lines) {\n const row = line.split('').map((i) => {\n if (i === 'X')\n return true;\n if (i === ' ')\n return false;\n if (i === '?')\n return undefined;\n throw new Error(`Bitmap.fromString: unknown symbol=${i}`);\n });\n if (width !== undefined && row.length !== width)\n throw new Error(`Bitmap.fromString different row sizes: width=${width} cur=${row.length}`);\n width = row.length;\n rows.push(row);\n }\n if (width === undefined)\n width = 0;\n return new Bitmap({ height, width }, rows);\n }\n // Two bitsets:\n // defined=0 -> undefined\n // defined=1,value=0 -> false\n // defined=1,value=1 -> true\n defined;\n value;\n tailMask;\n words;\n fullWords;\n height;\n width;\n constructor(size, data) {\n const { height, width } = Bitmap.size(size);\n // Bitmap coordinates wrap through modulo for negative positions, so invalid\n // dimensions produce NaN, aliasing, or unsafe allocation sizes before later\n // drawing no-op guards can run. `Infinity` is only valid for rectangle sizes\n // that are clamped against an existing positive bitmap.\n if (!Number.isSafeInteger(height) || height <= 0)\n throw new Error(`Bitmap: invalid height=${height}, expected positive safe integer dimension`);\n if (!Number.isSafeInteger(width) || width <= 0)\n throw new Error(`Bitmap: invalid width=${width}, expected positive safe integer dimension`);\n this.height = height;\n this.width = width;\n this.tailMask = rangeMask(0, width & 31 || 32);\n this.words = Math.ceil(width / 32) | 0;\n this.fullWords = Math.floor(width / 32) | 0;\n this.value = new Uint32Array(this.words * height);\n this.defined = new Uint32Array(this.value.length);\n if (data) {\n // accept same semantics as old version\n if (data.length !== height)\n throw new Error(`Bitmap: data height mismatch: exp=${height} got=${data.length}`);\n for (let y = 0; y < height; y++) {\n const row = data[y];\n if (!row || row.length !== width)\n throw new Error(`Bitmap: data width mismatch at y=${y}: exp=${width} got=${row?.length}`);\n for (let x = 0; x < width; x++)\n this.set(x, y, row[x]);\n }\n }\n }\n point(p) {\n // The storage docs above say \"undefined is used as a marker whether cell\n // was written or not\"; `point()` is the detector's dark-module read and\n // intentionally treats both undefined and false as not-dark. Use\n // `isDefined()` when the written/undefined distinction matters.\n return this.get(p.x, p.y);\n }\n // Raw bounds check for scan loops; unlike `xy()`, this does not wrap or normalize coordinates.\n isInside(p) {\n return 0 <= p.x && p.x < this.width && 0 <= p.y && p.y < this.height;\n }\n size(offset) {\n if (!offset)\n return { height: this.height, width: this.width };\n const { x, y } = this.xy(offset);\n return { height: this.height - y, width: this.width - x };\n }\n xy(c) {\n if (typeof c === 'number')\n c = { x: c, y: c };\n if (!Number.isSafeInteger(c.x))\n throw new Error(`Bitmap: invalid x=${c.x}`);\n if (!Number.isSafeInteger(c.y))\n throw new Error(`Bitmap: invalid y=${c.y}`);\n // Bitmap's class docs say \"For most `draw` calls, structure is mutable\";\n // coordinate objects follow that hot-path policy too and are normalized in place.\n c.x = mod(c.x, this.width);\n c.y = mod(c.y, this.height);\n return c;\n }\n /**\n * Return pixel bit index\n */\n wordIndex(x, y) {\n return y * this.words + (x >>> 5);\n }\n bitIndex(x, y) {\n return { word: this.wordIndex(x, y), bit: x & 31 };\n }\n isDefined(x, y) {\n // `isInside()` is the raw bounds check; keep these bitset accessors\n // bounds-check-free for hot paths. Invalid tail coordinates may observe\n // backing-word bits, so callers that accept untrusted coordinates must\n // check `isInside()` first.\n const wi = this.wordIndex(x, y);\n const m = bitMask(x);\n return (this.defined[wi] & m) !== 0;\n }\n get(x, y) {\n const wi = this.wordIndex(x, y);\n const m = bitMask(x);\n return (this.value[wi] & m) !== 0;\n }\n maskWord(wi, mask, v) {\n const { defined, value } = this;\n defined[wi] |= mask;\n // `-v` expands the boolean to either all-zero or all-one bits before masking it into the selected lanes.\n value[wi] = (value[wi] & ~mask) | (-v & mask);\n }\n set(x, y, v) {\n // `undefined` means \"leave the current cell unchanged\", not \"clear it back to undefined\".\n if (v === undefined)\n return;\n // Like `get()` / `isDefined()`, this is a raw in-bounds bitset accessor;\n // check `isInside()` before passing untrusted coordinates.\n this.maskWord(this.wordIndex(x, y), bitMask(x), v);\n }\n // word-span fill for constant values (fast path)\n fillRectConst(x0, y0, w, h, v) {\n if (w <= 0 || h <= 0)\n return;\n if (v === undefined)\n return;\n const { value, defined, words } = this;\n const startWord = x0 >>> 5;\n const endWord = (x0 + w - 1) >>> 5;\n const startBit = x0 & 31;\n const endBit = (x0 + w - 1) & 31;\n for (let ry = 0; ry < h; ry++) {\n const rowBase = (y0 + ry) * words;\n if (startWord === endWord) {\n const mask = rangeMask(startBit, endBit - startBit + 1);\n this.maskWord(rowBase + startWord, mask, v);\n continue;\n }\n this.maskWord(rowBase + startWord, rangeMask(startBit, 32 - startBit), v);\n // Whole interior words can be written directly: every bit in the span becomes defined and equal to v.\n for (let i = startWord + 1; i < endWord; i++) {\n defined[rowBase + i] = 0xffffffff;\n value[rowBase + i] = v ? 0xffffffff : 0;\n }\n this.maskWord(rowBase + endWord, rangeMask(0, endBit + 1), v);\n }\n }\n rectWords(x, y, width, height, cb) {\n for (let yPos = 0; yPos < height; yPos++) {\n const Py = y + yPos;\n for (let xPos = 0; xPos < width;) {\n const bitX = x + xPos;\n const { bit, word } = this.bitIndex(bitX, Py);\n const bitsPerWord = Math.min(32 - bit, width - xPos);\n // bitX stays absolute for word-local masks; xPos/yPos stay rectangle-local for rect callbacks.\n cb(word, bitX, xPos, yPos, bitsPerWord);\n xPos += bitsPerWord;\n }\n }\n }\n // Basically every operation can be represented as rect\n rect(c, size, fn) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n if (typeof fn !== 'function') {\n this.fillRectConst(x, y, width, height, fn);\n return this;\n }\n const { defined, value } = this;\n this.rectWords(x, y, width, height, (wi, bitX, xPos, yPos, n) => {\n let defWord = 0;\n let valWord = value[wi];\n for (let b = 0; b < n; b++) {\n const mask = bitMask(bitX + b);\n // As with `point()`, callback `cur` is a dark/not-dark read; the\n // storage-level \"undefined is used as a marker whether cell was\n // written or not\" distinction is checked separately with `isDefined()`.\n const res = fn({ x: xPos + b, y: yPos }, (valWord & mask) !== 0);\n // Returning undefined from the callback keeps the existing cell unchanged.\n if (res === undefined)\n continue;\n defWord |= mask;\n valWord = (valWord & ~mask) | (-res & mask);\n }\n defined[wi] |= defWord;\n value[wi] = valWord;\n });\n return this;\n }\n // returns rectangular part of bitmap\n rectRead(c, size, fn) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n const { value } = this;\n this.rectWords(x, y, width, height, (wi, bitX, xPos, yPos, n) => {\n const valWord = value[wi];\n for (let b = 0; b < n; b++) {\n const mask = bitMask(bitX + b);\n // rectRead is non-mutating; callback coordinates are rectangle-local,\n // and `cur` is the same dark/not-dark read as `point()`.\n fn({ x: xPos + b, y: yPos }, (valWord & mask) !== 0);\n }\n });\n return this;\n }\n // Horizontal & vertical lines\n hLine(c, len, value) {\n return this.rect(c, { width: len, height: 1 }, value);\n }\n vLine(c, len, value) {\n return this.rect(c, { width: 1, height: len }, value);\n }\n // add border\n border(border = 2, value) {\n // `border` is used both as output-size delta and as embed coordinate; keep\n // it a positive safe integer before those paths allocate or normalize.\n if (!Number.isSafeInteger(border) || border <= 0)\n throw new Error(`Bitmap.border: invalid size=${border}`);\n const height = this.height + 2 * border;\n const width = this.width + 2 * border;\n const out = new Bitmap({ height, width });\n // fill everything with border value, then embed original\n out.rect(0, Infinity, value);\n out.embed({ x: border, y: border }, this);\n return out;\n }\n // Embed another bitmap on coordinates\n embed(c, src) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(src.size(), this.size({ x, y }));\n if (width <= 0 || height <= 0)\n return this;\n const { value, defined } = this;\n const { words: srcStride, value: srcValue } = src;\n // The Bitmap storage docs say \"undefined is used as a marker whether cell\n // was written or not\"; `embed()` is the packed blit path for materialized\n // source bitmaps, so it flattens the source rectangle to defined dark/light\n // bits instead of treating undefined cells as transparent.\n for (let yPos = 0; yPos < height; yPos++) {\n const srcRow = yPos * srcStride;\n for (let xPos = 0; xPos < width;) {\n const dstX = x + xPos;\n const { word: dstWord, bit: dstBit } = this.bitIndex(dstX, y + yPos);\n const { word: srcWord, bit: srcBit } = src.bitIndex(xPos, yPos);\n const len = Math.min(32 - dstBit, width - xPos);\n const w0 = srcValue[srcWord];\n const w1 = srcBit && srcWord + 1 < srcRow + srcStride ? srcValue[srcWord + 1] : 0;\n // Source and destination bit offsets may differ, so assemble the source span from up to two words.\n const sVal = srcBit ? ((w0 >>> srcBit) | (w1 << (32 - srcBit))) >>> 0 : w0;\n const dstMask = rangeMask(dstBit, len);\n const valBits = ((sVal & rangeMask(0, len)) << dstBit) >>> 0;\n defined[dstWord] |= dstMask;\n value[dstWord] = (value[dstWord] & ~dstMask) | valBits;\n xPos += len;\n }\n }\n return this;\n }\n // returns rectangular part of bitmap\n rectSlice(c, size = this.size()) {\n const { x, y } = this.xy(c);\n const { height, width } = Bitmap.size(size, this.size({ x, y }));\n const rect = new Bitmap({ height, width });\n this.rectRead({ x, y }, { height, width }, (p, cur) => {\n // rectRead reports undefined cells as false, so copy only when the source defined bit is set.\n if (this.isDefined(x + p.x, y + p.y)) {\n rect.set(p.x, p.y, cur);\n }\n });\n return rect;\n }\n // Change shape, replace rows with columns (data[y][x] -> data[x][y])\n transpose() {\n const { height, width, value, defined, words } = this;\n const dst = new Bitmap({ height: width, width: height });\n const { words: dstStride, value: dstValue, defined: dstDefined, tailMask: dstTail } = dst;\n const tmpV = new Uint32Array(32);\n const tmpD = new Uint32Array(32);\n // Process src in blocks: y in [by..by+31], x in 32-bit words\n for (let by = 0; by < height; by += 32) {\n for (let bx = 0; bx < words; bx++) {\n const rows = Math.min(32, height - by);\n for (let r = 0; r < rows; r++) {\n const wi = this.wordIndex(32 * bx, by + r);\n tmpV[r] = value[wi];\n tmpD[r] = defined[wi];\n }\n // zero-pad remainder\n tmpV.fill(0, rows);\n tmpD.fill(0, rows);\n transpose32(tmpV);\n transpose32(tmpD);\n for (let i = 0; i < 32; i++) {\n const dstY = bx * 32 + i;\n if (dstY >= width)\n break;\n const dstPos = dst.wordIndex(by, dstY);\n const curMask = by >>> 5 === dstStride - 1 ? dstTail : 0xffffffff;\n dstValue[dstPos] = tmpV[i] & curMask;\n dstDefined[dstPos] = tmpD[i] & curMask;\n }\n }\n }\n return dst;\n }\n // black <-> white (inplace)\n negate() {\n const n = this.defined.length;\n for (let i = 0; i < n; i++) {\n // ISO/IEC 18004:2024 §12 b)5 says to \"reverse the colouring of the light\n // and dark pixels\"; this dense scratch-bitmap operation materializes every\n // backing bit as defined and does not preserve sparse/undefined cells.\n this.value[i] = ~this.value[i];\n this.defined[i] = 0xffffffff;\n }\n return this;\n }\n // Each pixel size is multiplied by factor\n scale(factor) {\n if (!Number.isSafeInteger(factor) || factor > 1024)\n throw new Error(`invalid scale factor: ${factor}`);\n const { height, width } = this;\n // Bitmap storage docs say \"undefined is used as a marker whether cell was\n // written or not\"; `scale()` is an output materialization path and samples\n // with `get()`, so sparse cells become defined light cells. Positive output\n // dimensions stay validated by the Bitmap constructor instead of duplicating\n // dimension checks in every caller that computes a new bitmap size.\n const res = new Bitmap({ height: factor * height, width: factor * width });\n return res.rect({ x: 0, y: 0 }, Infinity, ({ x, y }) => this.get((x / factor) | 0, (y / factor) | 0));\n }\n clone() {\n const res = new Bitmap(this.size());\n res.defined.set(this.defined);\n res.value.set(this.value);\n return res;\n }\n // Ensure that there is no undefined values left\n assertDrawn() {\n const { height, width, defined, tailMask, fullWords, words } = this;\n if (!height || !width)\n return;\n for (let y = 0; y < height; y++) {\n const rowBase = y * words;\n for (let wi = 0; wi < fullWords; wi++) {\n if (defined[rowBase + wi] !== 0xffffffff)\n throw new Error(`Invalid color type=undefined`);\n }\n if (words !== fullWords && (defined[rowBase + fullWords] & tailMask) !== tailMask)\n throw new Error(`Invalid color type=undefined`);\n }\n }\n countPatternInRow(y, patternLen, ...patterns) {\n // Penalty scanning only passes Table 11 windows over bounded symbol rows;\n // validate this public helper before JS shifts / typed-array reads coerce bad inputs.\n if (!Number.isSafeInteger(patternLen) || patternLen <= 0 || patternLen >= 32)\n throw new Error('wrong patternLen');\n const mask = (1 << patternLen) - 1;\n const { height, width, value, words } = this;\n if (!Number.isSafeInteger(y) || y < 0 || y >= height)\n return 0;\n let count = 0;\n const rowBase = this.wordIndex(0, y);\n for (let i = 0, window = 0; i < words; i++) {\n const w = value[rowBase + i];\n const bitEnd = i === words - 1 ? width & 31 || 32 : 32;\n for (let b = 0; b < bitEnd; b++) {\n window = ((window << 1) | ((w >>> b) & 1)) & mask;\n if (i * 32 + b + 1 < patternLen)\n continue;\n for (const p of patterns) {\n if (window !== p)\n continue;\n count++;\n break;\n }\n }\n }\n return count;\n }\n getRuns(y, fn) {\n const { height, width, value, words } = this;\n if (width === 0)\n return;\n // ISO/IEC 18004:2024 §7.8.3.1 N1 scans adjacent modules in bounded rows\n // and columns; validate this public helper before missing typed-array rows\n // are coerced into all-light runs by bitwise operators.\n if (!Number.isSafeInteger(y) || y < 0 || y >= height)\n return;\n let runLen = 0;\n let runValue;\n const rowBase = this.wordIndex(0, y);\n for (let i = 0; i < words; i++) {\n const word = value[rowBase + i];\n const bitEnd = i === words - 1 ? width & 31 || 32 : 32;\n for (let b = 0; b < bitEnd; b++) {\n const bit = (word & (1 << b)) !== 0;\n if (bit === runValue) {\n runLen++;\n continue;\n }\n if (runValue !== undefined)\n fn(runLen, runValue);\n runValue = bit;\n runLen = 1;\n }\n }\n if (runValue !== undefined)\n fn(runLen, runValue);\n }\n popcnt() {\n const { height, width, words, fullWords, tailMask } = this;\n if (!height || !width)\n return 0;\n let count = 0;\n for (let y = 0; y < height; y++) {\n const rowBase = y * words;\n for (let wi = 0; wi < fullWords; wi++)\n count += popcnt(this.value[rowBase + wi]);\n if (words !== fullWords)\n count += popcnt(this.value[rowBase + fullWords] & tailMask);\n }\n return count;\n }\n countBoxes2x2(y) {\n const { height, width, words } = this;\n // ISO/IEC 18004:2024 §7.8.3.1 N2 counts 2 x 2 module blocks in bounded\n // rows; reject non-integer scan rows before bitwise coercions truncate them.\n if (width < 2 || !Number.isSafeInteger(y) || y < 0 || y + 1 >= height)\n return 0;\n const base0 = this.wordIndex(0, y);\n const base1 = this.wordIndex(0, y + 1);\n // valid \"left-edge\" positions x in [0 .. W-2]\n const tailBits = width & 31;\n const validLast = tailBits === 0 ? 0x7fffffff : rangeMask(0, (width - 1) & 31);\n let boxes = 0;\n for (let wi = 0; wi < words; wi++) {\n const a0 = this.value[base0 + wi];\n const a1 = this.value[base1 + wi];\n // Compare bit x with bit x+1 at same bit position.\n const eqV = ~(a0 ^ a1) >>> 0; // row0[x] == row1[x]\n const n0 = wi + 1 < words ? this.value[base0 + wi + 1] >>> 0 : 0;\n const eqH0 = ~(a0 ^ (((a0 >>> 1) | ((n0 & 1) << 31)) >>> 0)) >>> 0; // row0[x] == row0[x+1]\n const n1 = wi + 1 < words ? this.value[base1 + wi + 1] >>> 0 : 0;\n const eqH1 = ~(a1 ^ (((a1 >>> 1) | ((n1 & 1) << 31)) >>> 0)) >>> 0; // row1[x] == row1[x+1]\n let m = (eqV & eqH0 & eqH1) >>> 0;\n if (wi === words - 1)\n m &= validLast;\n boxes += popcnt(m);\n }\n return boxes;\n }\n // Export\n toString() {\n const nl = String.fromCharCode(chCodes.newline);\n let out = '';\n for (let y = 0; y < this.height; y++) {\n let line = '';\n for (let x = 0; x < this.width; x++) {\n const v = this.get(x, y);\n line += !this.isDefined(x, y) ? '?' : v ? 'X' : ' ';\n }\n out += line + (y + 1 === this.height ? '' : nl);\n }\n return out;\n }\n toRaw() {\n const out = Array.from({ length: this.height }, () => new Array(this.width));\n for (let y = 0; y < this.height; y++) {\n const row = out[y];\n // Bitmap storage docs say \"undefined is used as a marker whether cell was\n // written or not\"; `toRaw()` is the materialized dark/not-dark output path\n // used after `encodeQR()` asserts the QR symbol is fully drawn.\n for (let x = 0; x < this.width; x++)\n row[x] = this.get(x, y);\n }\n return out;\n }\n toASCII() {\n const { height, width } = this;\n let out = '';\n // Terminal character height is x2 of character width, so we process two rows of bitmap\n // to produce one row of ASCII\n for (let y = 0; y < height; y += 2) {\n for (let x = 0; x < width; x++) {\n const first = this.get(x, y);\n const second = y + 1 >= height ? true : this.get(x, y + 1); // if last row outside bitmap, make it black\n if (!first && !second)\n out += '█'; // both rows white (empty)\n else if (!first && second)\n out += '▀'; // top row white\n else if (first && !second)\n out += '▄'; // down row white\n else if (first && second)\n out += ' '; // both rows black\n }\n out += String.fromCharCode(chCodes.newline);\n }\n return out;\n }\n toTerm() {\n const cc = String.fromCharCode(chCodes.reset);\n const reset = cc + '[0m';\n const whiteBG = cc + '[1;47m ' + reset;\n const darkBG = cc + `[40m ` + reset;\n const nl = String.fromCharCode(chCodes.newline);\n let out = '';\n for (let y = 0; y < this.height; y++) {\n for (let x = 0; x < this.width; x++) {\n const v = this.get(x, y); // undefined -> white\n out += v ? darkBG : whiteBG;\n }\n out += nl;\n }\n return out;\n }\n toSVG(optimize = true) {\n let out = `<svg viewBox=\"0 0 ${this.width} ${this.height}\" xmlns=\"http://www.w3.org/2000/svg\">`;\n // ISO/IEC 18004:2024 §5.1 c) / §5.3.8: this SVG draws only dark modules;\n // callers must render it on a light background for light modules and the quiet zone.\n // Construct optimized SVG path data.\n let pathData = '';\n let prevPoint;\n this.rectRead(0, Infinity, (point, val) => {\n if (!val)\n return;\n const { x, y } = point;\n if (!optimize) {\n out += `<rect x=\"${x}\" y=\"${y}\" width=\"1\" height=\"1\" />`;\n return;\n }\n // https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Attribute/d#path_commands\n // Determine the shortest way to represent the initial cursor movement.\n // M - Move cursor (without drawing) to absolute coordinate pair.\n let m = `M${x} ${y}`;\n // Only allow using the relative cursor move command if previous points\n // were drawn.\n if (prevPoint) {\n // m - Move cursor (without drawing) to relative coordinate pair.\n const relM = `m${x - prevPoint.x} ${y - prevPoint.y}`;\n if (relM.length <= m.length)\n m = relM;\n }\n // Determine the shortest way to represent the cell's bottom line draw.\n // H - Draw line from cursor position to absolute x coordinate.\n // h - Draw line from cursor position to relative x coordinate.\n const bH = x < 10 ? `H${x}` : 'h-1';\n // v - Draw line from cursor position to relative y coordinate.\n // Z - Close path (draws line from cursor position to M coordinate).\n pathData += `${m}h1v1${bH}Z`;\n prevPoint = point;\n });\n if (optimize)\n out += `<path d=\"${pathData}\"/>`;\n out += `</svg>`;\n return out;\n }\n toGIF() {\n // NOTE: Small, but inefficient implementation.\n // Uses 1 byte per pixel.\n const u16le = (i) => [i & 0xff, (i >>> 8) & 0xff];\n const dims = [...u16le(this.width), ...u16le(this.height)];\n const data = [];\n // Palette index 0 is white/light and index 1 is black/dark; rectRead maps undefined cells to light.\n this.rectRead(0, Infinity, (_, cur) => data.push(+(cur === true)));\n // Each chunk starts with an LZW clear code; 126 raw pixels keep codes at 8 bits until the next clear.\n const N = 126; // Block size\n // prettier-ignore\n const bytes = [\n 0x47, 0x49, 0x46, 0x38, 0x37, 0x61, ...dims, 0xf6, 0x00, 0x00, 0xff, 0xff, 0xff,\n ...fillArr(3 * 127, 0x00), 0x2c, 0x00, 0x00, 0x00, 0x00, ...dims, 0x00, 0x07\n ];\n const fullChunks = Math.floor(data.length / N);\n // Full blocks\n for (let i = 0; i < fullChunks; i++)\n bytes.push(N + 1, 0x80, ...data.slice(N * i, N * (i + 1)).map((i) => +i));\n // Remaining bytes\n bytes.push((data.length % N) + 1, 0x80, ...data.slice(fullChunks * N).map((i) => +i));\n bytes.push(0x01, 0x81, 0x00, 0x3b);\n return new Uint8Array(bytes);\n }\n toImage(isRGB = false) {\n const { height, width } = this.size();\n const data = new Uint8Array(height * width * (isRGB ? 3 : 4));\n let i = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const value = this.get(x, y) ? 0 : 255; // undefined -> white\n data[i++] = value;\n data[i++] = value;\n data[i++] = value;\n if (!isRGB)\n data[i++] = 255; // alpha channel\n }\n }\n return { height, width, data };\n }\n}\n// End of utils\n// Runtime type-checking\n/** Error correction mode. low: 7%, medium: 15%, quartile: 25%, high: 30%. */\nexport const ECMode = /* @__PURE__ */ Object.freeze(['low', 'medium', 'quartile', 'high']);\n/**\n * QR payload compaction mode names recognized by the type/validator.\n * `kanji` and `eci` are spec modes, but `encodeQR` currently rejects them until implemented.\n */\nexport const Encoding = \n/* @__PURE__ */ Object.freeze(['numeric', 'alphanumeric', 'byte', 'kanji', 'eci']);\n// Various constants & tables\n// ISO/IEC 18004:2024 Table 1: QR symbol codeword capacity by version (data plus error correction).\n// prettier-ignore\nconst BYTES = [\n // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,\n 26, 44, 70, 100, 134, 172, 196, 242, 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085,\n // 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n 1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706,\n];\n// ISO/IEC 18004:2024 Table 9: error correction codewords per block by version and level.\n// prettier-ignore\nconst WORDS_PER_BLOCK = {\n // Version 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n low: [7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n medium: [10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28],\n quartile: [13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n high: [17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30],\n};\n// ISO/IEC 18004:2024 Table 9: error correction block count by version and level.\n// prettier-ignore\nconst ECC_BLOCKS = {\n // Version 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40\n low: [1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25],\n medium: [1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49],\n quartile: [1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68],\n high: [1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81],\n};\n// ISO/IEC 18004:2024 sections 5.3/7.4/7.5/7.9/7.10: QR layout, segment, format/version, and capacity helpers.\nconst info = /* @__PURE__ */ Object.freeze({\n size: /* @__PURE__ */ Object.freeze({\n encode: (ver) => 21 + 4 * (ver - 1), // ver1 = 21, ver40 = 177 modules per side\n decode: (size) => (size - 17) / 4,\n }),\n // ISO/IEC 18004:2024 Table 3: map version ranges 1-9, 10-26, and 27-40 to count-width indexes.\n sizeType: (ver) => Math.floor((ver + 7) / 17),\n // ISO/IEC 18004:2024 Annex E Table E.1: row/column coordinate list of alignment-pattern centres.\n // Based on https://codereview.stackexchange.com/questions/74925/algorithm-to-generate-this-alignment-pattern-locations-table-for-qr-codes\n alignmentPatterns(ver) {\n if (ver === 1)\n return [];\n const first = 6;\n const last = info.size.encode(ver) - first - 1;\n const distance = last - first;\n const count = Math.ceil(distance / 28);\n let interval = Math.floor(distance / count);\n if (interval % 2)\n interval += 1;\n else if ((distance % count) * 2 >= count)\n interval += 2;\n const res = [first];\n for (let m = 1; m < count; m++)\n res.push(last - (count - m) * interval);\n res.push(last);\n return res;\n },\n // ISO/IEC 18004:2024 §7.9.1 Table 12: error-correction-level indicators for the top two format-information data bits.\n ECCode: /* @__PURE__ */ Object.freeze({\n low: 0b01,\n medium: 0b00,\n quartile: 0b11,\n high: 0b10,\n }),\n // ISO/IEC 18004:2024 §7.9.1 final paragraph: XOR the 15-bit format information with mask pattern 101010000010010.\n formatMask: 0b101010000010010,\n // ISO/IEC 18004:2024 §7.9.1 / Annex C.2: append the 10-bit BCH remainder for the 5 data bits, then apply the fixed QR format mask.\n formatBits(ecc, maskIdx) {\n const data = (info.ECCode[ecc] << 3) | maskIdx;\n let d = data;\n for (let i = 0; i < 10; i++)\n d = (d << 1) ^ ((d >> 9) * 0b10100110111);\n return ((data << 10) | d) ^ info.formatMask;\n },\n // ISO/IEC 18004:2024 §7.10 / Annex D.2: append the 12-bit Golay remainder to the 6-bit version word; version information is not masked.\n versionBits(ver) {\n let d = ver;\n for (let i = 0; i < 12; i++)\n d = (d << 1) ^ ((d >> 11) * 0b1111100100101);\n return (ver << 12) | d;\n },\n // ISO/IEC 18004:2024 §7.3.3 / §7.3.4 / §7.4.5 Table 5: character-set membership and value codecs for numeric and alphanumeric QR modes.\n alphabet: /* @__PURE__ */ Object.freeze({\n // ISO/IEC 18004:2024 §7.3.3 / §7.4.4: numeric-mode digits map directly to values 0..9 before 3-digit grouping.\n numeric: alphabet('0123456789'),\n // ISO/IEC 18004:2024 §7.3.4 / §7.4.5 Table 5: 45-character alphanumeric-mode value order used for 11-bit pair packing. Keep the legacy `alphanumerc` key name in sync with existing callers.\n alphanumerc: alphabet('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:'),\n }), // as Record<EncodingType, ReturnType<typeof alphabet>>,\n // ISO/IEC 18004:2024 Table 3 gives QR character-count widths for data modes; ECI headers instead carry only the mode indicator plus the designator from §7.4.3.\n lengthBits(ver, type) {\n const table = {\n numeric: [10, 12, 14],\n alphanumeric: [9, 11, 13],\n byte: [8, 16, 16],\n kanji: [8, 10, 12],\n eci: [0, 0, 0],\n };\n return table[type][info.sizeType(ver)];\n },\n // ISO/IEC 18004:2024 §7.4.2 Table 2: 4-bit QR mode indicators for the segment types this library models.\n modeBits: /* @__PURE__ */ Object.freeze({\n numeric: '0001',\n alphanumeric: '0010',\n byte: '0100',\n kanji: '1000',\n eci: '0111',\n }),\n // ISO/IEC 18004:2024 Table 1 / §7.5.1 Table 9: derive total data bits and short/long RS block layout from total codewords, ECC words per block, and block counts.\n capacity(ver, ecc) {\n const bytes = BYTES[ver - 1];\n const words = WORDS_PER_BLOCK[ecc][ver - 1];\n const numBlocks = ECC_BLOCKS[ecc][ver - 1];\n const blockLen = Math.floor(bytes / numBlocks) - words;\n const shortBlocks = numBlocks - (bytes % numBlocks);\n return {\n words,\n numBlocks,\n shortBlocks,\n blockLen,\n capacity: (bytes - words * numBlocks) * 8,\n total: (words + blockLen) * numBlocks + numBlocks - shortBlocks,\n };\n },\n});\n// ISO/IEC 18004:2024 Table 10: QR data-mask predicates 000..111, written here in (x column, y row) form.\nconst PATTERNS = /* @__PURE__ */ Object.freeze([\n (x, y) => (x + y) % 2 == 0,\n (_x, y) => y % 2 == 0,\n (x, _y) => x % 3 == 0,\n (x, y) => (x + y) % 3 == 0,\n (x, y) => (Math.floor(y / 2) + Math.floor(x / 3)) % 2 == 0,\n (x, y) => ((x * y) % 2) + ((x * y) % 3) == 0,\n (x, y) => (((x * y) % 2) + ((x * y) % 3)) % 2 == 0,\n (x, y) => (((x + y) % 2) + ((x * y) % 3)) % 2 == 0,\n]);\n// Galois field && reed-solomon encoding\n// ISO/IEC 18004:2024 §7.5.2 / Annex A / Annex B: GF(2^8) field and polynomial helpers shared by QR Reed-Solomon parity generation and decoding.\nconst GF = {\n tables: ((p_poly) => {\n const exp = fillArr(256, 0);\n const log = fillArr(256, 0);\n for (let i = 0, x = 1; i < 256; i++) {\n exp[i] = x;\n log[x] = i;\n x <<= 1;\n if (x & 0x100)\n x ^= p_poly;\n }\n // Keep α^255 = 1 in exp[255]; GF.log() folds the matching log[1] = 255\n // back to 0 with `% 255`, so later helpers can wrap exponents without a special case.\n return { exp, log };\n })(0x11d),\n // Raw α^i lookup from the precomputed field table; callers are expected\n // to reduce / validate exponents before indexing it.\n exp: (x) => GF.tables.exp[x],\n // log(0) is undefined in GF(2^8); `% 255` also folds the wrapped table\n // entry for α^255 = 1 back to exponent 0.\n log(x) {\n if (x === 0)\n throw new Error(`GF.log: invalid arg=${x}`);\n return GF.tables.log[x] % 255;\n },\n // Zero has no logarithm in GF(2^8), so it must short-circuit here; all\n // other products are α^(log(x) + log(y) mod 255) in the reviewed field.\n mul(x, y) {\n if (x === 0 || y === 0)\n return 0;\n return GF.tables.exp[(GF.tables.log[x] + GF.tables.log[y]) % 255];\n },\n // In characteristic 2 fields, addition and subtraction are the same\n // bitwise XOR operation used by the QR Reed-Solomon arithmetic.\n add: (x, y) => x ^ y,\n // Raw nonzero field power helper. Current QR use is GF.pow(2, i) for the\n // Annex A generator factors; x = 0 or negative exponents are not validated.\n pow: (x, e) => GF.tables.exp[(GF.tables.log[x] * e) % 255],\n // Multiplicative inverse for nonzero field elements. Current callers only\n // use it on values already known to be nonzero; 0 has no inverse in GF(2^8).\n inv(x) {\n if (x === 0)\n throw new Error(`GF.inverse: invalid arg=${x}`);\n return GF.tables.exp[255 - GF.tables.log[x]];\n },\n // Canonicalize coefficient arrays by trimming leading zero coefficients\n // while preserving `[0]` as the zero polynomial; already-normalized inputs\n // are returned by reference.\n polynomial(poly) {\n if (poly.length == 0)\n throw new Error('GF.polymomial: invalid length');\n if (poly[0] !== 0)\n return poly;\n // Strip leading zeros\n let i = 0;\n for (; i < poly.length - 1 && poly[i] == 0; i++)\n ;\n return poly.slice(i);\n },\n // Represent c*x^degree in the descending-power coefficient layout used\n // by the QR Reed-Solomon helpers; coefficient 0 canonicalizes to `[0]`.\n monomial(degree, coefficient) {\n if (degree < 0)\n throw new Error(`GF.monomial: invalid degree=${degree}`);\n if (coefficient == 0)\n return [0];\n let coefficients = fillArr(degree + 1, 0);\n coefficients[0] = coefficient;\n return GF.polynomial(coefficients);\n },\n // Canonical polynomials keep the highest-order coefficient first and use\n // `[0]` for zero, so degree is just `length - 1`.\n degree: (a) => a.length - 1,\n // Read the coefficient for x^degree from the descending-power array layout.\n // Canonical arrays make this a direct index; out-of-range degrees return `undefined`.\n coefficient: (a, degree) => a[GF.degree(a) - degree],\n // Multiply descending-power coefficient arrays by convolution over GF(2^8).\n // Zero short-circuits here before the log-based field multiply is consulted.\n mulPoly(a, b) {\n if (a[0] === 0 || b[0] === 0)\n return [0];\n const res = fillArr(a.length + b.length - 1, 0);\n for (let i = 0; i < a.length; i++) {\n for (let j = 0; j < b.length; j++) {\n res[i + j] = GF.add(res[i + j], GF.mul(a[i], b[j]));\n }\n }\n return GF.polynomial(res);\n },\n // Scale every coefficient by the same field element in descending-power order.\n // Scalar 0 canonicalizes to `[0]`, and scalar 1 reuses the original array.\n mulPolyScalar(a, scalar) {\n if (scalar == 0)\n return [0];\n if (scalar == 1)\n return a;\n const res = fillArr(a.length, 0);\n for (let i = 0; i < a.length; i++)\n res[i] = GF.mul(a[i], scalar);\n return GF.polynomial(res);\n },\n // Multiply a polynomial by c*x^degree in descending-power coefficient form.\n // This scales existing coefficients, then appends trailing zero coefficients.\n mulPolyMonomial(a, degree, coefficient) {\n if (degree < 0)\n throw new Error('GF.mulPolyMonomial: invalid degree');\n if (coefficient == 0)\n return [0];\n const res = fillArr(a.length + degree, 0);\n for (let i = 0; i < a.length; i++)\n res[i] = GF.mul(a[i], coefficient);\n return GF.polynomial(res);\n },\n // Add descending-power coefficient arrays with GF(2^8) XOR on the aligned\n // suffix; `[0]` short-circuits by returning the other array unchanged.\n addPoly(a, b) {\n if (a[0] === 0)\n return b;\n if (b[0] === 0)\n return a;\n let smaller = a;\n let larger = b;\n if (smaller.length > larger.length)\n [smaller, larger] = [larger, smaller];\n let sumDiff = fillArr(larger.length, 0);\n let lengthDiff = larger.length - smaller.length;\n let s = larger.slice(0, lengthDiff);\n for (let i = 0; i < s.length; i++)\n sumDiff[i] = s[i];\n for (let i = lengthDiff; i < larger.length; i++)\n sumDiff[i] = GF.add(smaller[i - lengthDiff], larger[i]);\n return GF.polynomial(sumDiff);\n },\n // Synthetic division for monic divisors in descending-power coefficient form.\n // Callers are expected to append `divisor.length - 1` zero coefficients first.\n remainderPoly(data, divisor) {\n const out = Array.from(data);\n for (let i = 0; i < data.length - divisor.length + 1; i++) {\n const elm = out[i];\n if (elm === 0)\n continue;\n for (let j = 1; j < divisor.length; j++) {\n if (divisor[j] !== 0)\n out[i + j] = GF.add(out[i + j], GF.mul(divisor[j], elm));\n }\n }\n return out.slice(data.length - divisor.length + 1, out.length);\n },\n // Build Annex A's monic generator polynomial g_n(x) = Π(x - 2^i).\n // degree=0 returns `[1]`; callers are expected to validate degree bounds.\n divisorPoly(degree) {\n let g = [1];\n for (let i = 0; i < degree; i++)\n g = GF.mulPoly(g, [1, GF.pow(2, i)]);\n return g;\n },\n // Evaluate a descending-power coefficient array at `a` with Horner's rule.\n // The `a == 0` fast-path returns the x^0 coefficient directly.\n evalPoly(poly, a) {\n if (a == 0)\n return GF.coefficient(poly, 0); // Just return the x^0 coefficient\n let res = poly[0];\n for (let i = 1; i < poly.length; i++)\n res = GF.add(GF.mul(a, res), poly[i]);\n return res;\n },\n // TODO: cleanup\n // Extended Euclidean RS step: derive the locator/evaluator pair from x^R\n // and the syndrome polynomial, then normalize sigma(0) to 1.\n euclidian(a, b, R) {\n // Force degree(a) >= degree(b)\n if (GF.degree(a) < GF.degree(b))\n [a, b] = [b, a];\n let rLast = a;\n let r = b;\n let tLast = [0];\n let t = [1];\n // while degree of Ri ≥ t/2\n while (2 * GF.degree(r) >= R) {\n let rLastLast = rLast;\n let tLastLast = tLast;\n rLast = r;\n tLast = t;\n if (rLast[0] === 0)\n throw new Error('rLast[0] === 0');\n r = rLastLast;\n let q = [0];\n const dltInverse = GF.inv(rLast[0]);\n while (GF.degree(r) >= GF.degree(rLast) && r[0] !== 0) {\n const degreeDiff = GF.degree(r) - GF.degree(rLast);\n const scale = GF.mul(r[0], dltInverse);\n q = GF.addPoly(q, GF.monomial(degreeDiff, scale));\n r = GF.addPoly(r, GF.mulPolyMonomial(rLast, degreeDiff, scale));\n }\n q = GF.mulPoly(q, tLast);\n t = GF.addPoly(q, tLastLast);\n if (GF.degree(r) >= GF.degree(rLast))\n throw new Error(`Division failed r: ${r}, rLast: ${rLast}`);\n }\n const sigmaTildeAtZero = GF.coefficient(t, 0);\n if (sigmaTildeAtZero == 0)\n throw new Error('sigmaTilde(0) was zero');\n const inverse = GF.inv(sigmaTildeAtZero);\n return [GF.mulPolyScalar(t, inverse), GF.mulPolyScalar(r, inverse)];\n },\n};\n// Per-block Reed-Solomon coder: encode emits only the parity bytes for one\n// data block, while decode expects data+parity bytes and returns the corrected full block.\nfunction RS(eccWords) {\n return {\n encode(from) {\n const d = GF.divisorPoly(eccWords);\n const pol = Array.from(from);\n pol.push(...d.slice(0, -1).fill(0));\n return Uint8Array.from(GF.remainderPoly(pol, d));\n },\n decode(to) {\n const res = to.slice();\n const poly = GF.polynomial(Array.from(to));\n // Find errors\n let syndrome = fillArr(eccWords, 0);\n let hasError = false;\n for (let i = 0; i < eccWords; i++) {\n const evl = GF.evalPoly(poly, GF.exp(i));\n syndrome[syndrome.length - 1 - i] = evl;\n if (evl !== 0)\n hasError = true;\n }\n if (!hasError)\n return res;\n syndrome = GF.polynomial(syndrome);\n const monomial = GF.monomial(eccWords, 1);\n const [errorLocator, errorEvaluator] = GF.euclidian(monomial, syndrome, eccWords);\n // Error locations\n const locations = fillArr(GF.degree(errorLocator), 0);\n let e = 0;\n for (let i = 1; i < 256 && e < locations.length; i++) {\n if (GF.evalPoly(errorLocator, i) === 0)\n locations[e++] = GF.inv(i);\n }\n if (e !== locations.length)\n throw new Error('RS.decode: invalid errors number');\n for (let i = 0; i < locations.length; i++) {\n const pos = res.length - 1 - GF.log(locations[i]);\n if (pos < 0)\n throw new Error('RS.decode: invalid error location');\n const xiInverse = GF.inv(locations[i]);\n let denominator = 1;\n for (let j = 0; j < locations.length; j++) {\n if (i === j)\n continue;\n denominator = GF.mul(denominator, GF.add(1, GF.mul(locations[j], xiInverse)));\n }\n res[pos] = GF.add(res[pos], GF.mul(GF.evalPoly(errorEvaluator, xiInverse), GF.inv(denominator)));\n }\n return res;\n },\n };\n}\n// Interleaves blocks\n// QR block interleaver / deinterleaver. Shorter data blocks stay first so\n// encode matches ISO/IEC 18004 §7.6 c) and decode can reverse it via §12 z)1.\nfunction interleave(ver, ecc) {\n const { words, shortBlocks, numBlocks, blockLen, total } = info.capacity(ver, ecc);\n const rs = RS(words);\n return {\n encode(bytes) {\n // Caller must pass exactly the data codewords for this version/ecc;\n // this helper only splits blocks and interleaves them with RS parity.\n // Add error correction to bytes\n const blocks = [];\n const eccBlocks = [];\n for (let i = 0; i < numBlocks; i++) {\n const isShort = i < shortBlocks;\n const len = blockLen + (isShort ? 0 : 1);\n blocks.push(bytes.subarray(0, len));\n eccBlocks.push(rs.encode(bytes.subarray(0, len)));\n bytes = bytes.subarray(len);\n }\n const resBlocks = interleaveBytes(blocks);\n const resECC = interleaveBytes(eccBlocks);\n const res = new Uint8Array(resBlocks.length + resECC.length);\n res.set(resBlocks);\n res.set(resECC, resBlocks.length);\n return res;\n },\n decode(data) {\n if (data.length !== total)\n throw new Error(`interleave.decode: len(data)=${data.length}, total=${total}`);\n const blocks = [];\n for (let i = 0; i < numBlocks; i++) {\n const isShort = i < shortBlocks;\n blocks.push(new Uint8Array(words + blockLen + (isShort ? 0 : 1)));\n }\n // Short blocks\n let pos = 0;\n for (let i = 0; i < blockLen; i++) {\n for (let j = 0; j < numBlocks; j++)\n blocks[j][i] = data[pos++];\n }\n // Long blocks\n for (let j = shortBlocks; j < numBlocks; j++)\n blocks[j][blockLen] = data[pos++];\n // ECC\n for (let i = blockLen; i < blockLen + words; i++) {\n for (let j = 0; j < numBlocks; j++) {\n const isShort = j < shortBlocks;\n blocks[j][i + (isShort ? 0 : 1)] = data[pos++];\n }\n }\n // Decode\n // Error-correct and copy data blocks together into a stream of bytes\n const res = [];\n for (const block of blocks)\n res.push(...Array.from(rs.decode(block)).slice(0, -words));\n return Uint8Array.from(res);\n },\n };\n}\n// Draw\n// Generic template per version+ecc+mask. Can be cached, to speedup calculations.\n// Function-pattern template plus reserved format/version areas; data modules\n// are filled later by zigzag placement in `drawQR`.\nfunction drawTemplate(ver, ecc, maskIdx, test = false) {\n const size = info.size.encode(ver);\n let b = new Bitmap(size + 2);\n // Finder patterns\n // We draw full pattern and later slice, since before addition of borders finder is truncated by one pixel on sides\n const finder = new Bitmap(3).rect(0, 3, true).border(1, false).border(1, true).border(1, false);\n b = b\n .embed(0, finder) // top left\n .embed({ x: -finder.width, y: 0 }, finder) // top right\n .embed({ x: 0, y: -finder.height }, finder); // bottom left\n b = b.rectSlice(1, size);\n // Alignment patterns\n const align = new Bitmap(1).rect(0, 1, true).border(1, false).border(1, true);\n const alignPos = info.alignmentPatterns(ver);\n for (const y of alignPos) {\n for (const x of alignPos) {\n if (b.isDefined(x, y))\n continue;\n b.embed({ x: x - 2, y: y - 2 }, align); // center of pattern should be at position\n }\n }\n // Timing patterns\n b = b\n .hLine({ x: 0, y: 6 }, Infinity, ({ x }) => (b.isDefined(x, 6) ? undefined : x % 2 == 0))\n .vLine({ x: 6, y: 0 }, Infinity, ({ y }) => (b.isDefined(6, y) ? undefined : y % 2 == 0));\n // Format information\n {\n const bits = info.formatBits(ecc, maskIdx);\n const getBit = (i) => !test && ((bits >> i) & 1) == 1;\n // vertical\n for (let i = 0; i < 6; i++)\n b.set(8, i, getBit(i)); // right of top-left finder\n // TODO: re-write as lines, like:\n // b.vLine({ x: 8, y: 0 }, 6, ({ x, y }) => getBit(y));\n for (let i = 6; i < 8; i++)\n b.set(8, i + 1, getBit(i)); // after timing pattern\n for (let i = 8; i < 15; i++)\n b.set(8, size - 15 + i, getBit(i)); // right of bottom-left finder\n // horizontal\n for (let i = 0; i < 8; i++)\n b.set(size - i - 1, 8, getBit(i)); // under top-right finder\n for (let i = 8; i < 9; i++)\n b.set(15 - i - 1 + 1, 8, getBit(i)); // VVV, after timing\n for (let i = 9; i < 15; i++)\n b.set(15 - i - 1, 8, getBit(i)); // under top-left finder\n b.set(8, size - 8, !test); // bottom-left finder, right\n }\n // Version information\n if (ver >= 7) {\n const bits = info.versionBits(ver);\n for (let i = 0; i < 18; i += 1) {\n const bit = !test && ((bits >> i) & 1) == 1;\n const x = Math.floor(i / 3);\n const y = (i % 3) + size - 8 - 3;\n // two copies\n b.set(y, x, bit);\n b.set(x, y, bit);\n }\n }\n return b;\n}\n// Walk undefined data modules in the QR two-column zigzag order from the\n// lower right, skipping function patterns and the vertical timing column.\nfunction zigzag(tpl, maskIdx, fn) {\n const bm = tpl;\n const size = bm.height;\n const pattern = PATTERNS[maskIdx];\n // zig-zag pattern\n let dir = -1;\n let y = size - 1;\n // two columns at time\n for (let xOffset = size - 1; xOffset > 0; xOffset -= 2) {\n if (xOffset == 6)\n xOffset = 5; // skip vertical timing pattern\n for (;; y += dir) {\n for (let j = 0; j < 2; j += 1) {\n const x = xOffset - j;\n if (bm.isDefined(x, y))\n continue; // skip already written elements\n fn(x, y, pattern(x, y));\n }\n if (y + dir < 0 || y + dir >= size)\n break;\n }\n dir = -dir; // change direction\n }\n}\n// NOTE: byte encoding is just representation, QR works with strings only. Most decoders will fail on raw byte array,\n// since they expect unicode or other text encoding inside bytes\n// Auto-pick among the currently supported single-segment modes only.\n// Empty strings stay numeric, and any non-alphanumeric character falls back to byte.\nfunction detectType(str) {\n let type = 'numeric';\n for (let x of str) {\n if (info.alphabet.numeric.has(x))\n continue;\n type = 'alphanumeric';\n if (!info.alphabet.alphanumerc.has(x))\n return 'byte';\n }\n return type;\n}\n/**\n * Encode a string as UTF-8 bytes.\n * @param str - Text to encode into UTF-8.\n * @returns UTF-8 bytes for the provided string.\n * @throws If the input is not a string. {@link Error}\n * @example\n * Encode a string as UTF-8 bytes.\n * ```ts\n * const bytes = utf8ToBytes('abc'); // new Uint8Array([97, 98, 99])\n * ```\n */\n// ISO/IEC 18004:2024 §7.3.2 says QR's default interpretation is\n// \"ECI 000003 representing the ISO/IEC 8859-1 character set\"; §7.4.2 says\n// non-default initial ECI data starts with an ECI header. Keep UTF-8 bytes\n// without that header for compatibility with existing emoji/qrcode fixtures.\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error(`utf8ToBytes expected string, got ${typeof str}`);\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n// Build one QR mode/count/data segment, then append the terminator, zero padding,\n// and alternating pad codewords before RS interleaving.\nfunction encode(ver, ecc, data, type, encoder = utf8ToBytes) {\n let encoded = '';\n let dataLen = data.length;\n if (type === 'numeric') {\n const t = info.alphabet.numeric.decode(data.split(''));\n const n = t.length;\n for (let i = 0; i < n - 2; i += 3)\n encoded += bin(t[i] * 100 + t[i + 1] * 10 + t[i + 2], 10);\n if (n % 3 === 1) {\n encoded += bin(t[n - 1], 4);\n }\n else if (n % 3 === 2) {\n encoded += bin(t[n - 2] * 10 + t[n - 1], 7);\n }\n }\n else if (type === 'alphanumeric') {\n const t = info.alphabet.alphanumerc.decode(data.split(''));\n const n = t.length;\n for (let i = 0; i < n - 1; i += 2)\n encoded += bin(t[i] * 45 + t[i + 1], 11);\n if (n % 2 == 1)\n encoded += bin(t[n - 1], 6); // pad if odd number of chars\n }\n else if (type === 'byte') {\n // The default encoder is intentionally UTF-8-without-ECI; see utf8ToBytes().\n const utf8 = encoder(data);\n dataLen = utf8.length;\n encoded = Array.from(utf8)\n .map((i) => bin(i, 8))\n .join('');\n }\n else {\n throw new Error('encode: unsupported type');\n }\n const { capacity } = info.capacity(ver, ecc);\n const len = bin(dataLen, info.lengthBits(ver, type));\n let bits = info.modeBits[type] + len + encoded;\n if (bits.length > capacity)\n throw new Error('Capacity overflow');\n // Terminator\n bits += '0'.repeat(Math.min(4, Math.max(0, capacity - bits.length)));\n // Pad bits string untill full byte\n if (bits.length % 8)\n bits += '0'.repeat(8 - (bits.length % 8));\n // Add padding until capacity is full\n const padding = '1110110000010001';\n for (let idx = 0; bits.length !== capacity; idx++)\n bits += padding[idx % padding.length];\n // Convert a bitstring to array of bytes\n const bytes = Uint8Array.from(bits.match(/(.{8})/g).map((i) => Number(`0b${i}`)));\n return interleave(ver, ecc).encode(bytes);\n}\n// DRAW\n// Stream interleaved codeword bits MSB-first through zigzag; any leftover\n// cells after the final codeword become zero-valued remainder bits before masking.\nfunction drawQR(ver, ecc, data, maskIdx, test = false) {\n const b = drawTemplate(ver, ecc, maskIdx, test);\n let i = 0;\n const need = 8 * data.length;\n zigzag(b, maskIdx, (x, y, mask) => {\n let value = false;\n if (i < need) {\n value = ((data[i >>> 3] >> ((7 - i) & 7)) & 1) !== 0;\n i++;\n }\n b.set(x, y, value !== mask); // !== as xor\n });\n if (i !== need)\n throw new Error('QR: bytes left after draw');\n return b;\n}\n// Pack a left-to-right row pattern for `Bitmap.countPatternInRow()`; keep the\n// explicit width because leading light modules vanish from the numeric value.\nconst mkPattern = (pattern) => {\n const s = pattern.map((i) => (i ? '1' : '0')).join('');\n return { len: s.length, n: Number(`0b${s}`) };\n};\n// 1:1:3:1:1 ratio (dark:light:dark:light:dark) pattern in row/column, preceded or followed by light area 4 modules wide\nconst finderPattern = [true, false, true, true, true, false, true]; // dark:light:dark:light:dark\nconst lightPattern = [false, false, false, false]; // light area 4 modules wide\nconst P1 = /* @__PURE__ */ (() => mkPattern([...finderPattern, ...lightPattern]))();\nconst P2 = /* @__PURE__ */ (() => mkPattern([...lightPattern, ...finderPattern]))();\nfunction penalty(bm) {\n const b = bm;\n const { width, height } = b;\n const transposed = b.transpose();\n // Adjacent modules in row/column in same | No. of modules = (5 + i) color\n let adjacent = 0;\n for (let y = 0; y < height; y++) {\n b.getRuns(y, (len) => {\n if (len >= 5)\n adjacent += 3 + (len - 5);\n });\n }\n for (let y = 0; y < width; y++) {\n transposed.getRuns(y, (len) => {\n if (len >= 5)\n adjacent += 3 + (len - 5);\n });\n }\n // Block of modules in same color (Block size = 2x2)\n let box = 0;\n for (let y = 0; y < height - 1; y++)\n box += 3 * b.countBoxes2x2(y);\n let finder = 0;\n for (let y = 0; y < height; y++)\n finder += 40 * b.countPatternInRow(y, P1.len, P1.n, P2.n);\n for (let y = 0; y < width; y++)\n finder += 40 * transposed.countPatternInRow(y, P1.len, P1.n, P2.n);\n const total = height * width;\n const darkPixels = b.popcnt();\n // ISO/IEC 18004:2024 §7.8.3.1 NOTE 4 assigns \"0 points\" when the dark ratio\n // is \"between 45 % and 55 %\"; subtract that first 5% deviation band before\n // rating further 5% steps, so exact 45/55 and 40/60 boundaries stay in-band.\n const darkSteps = Math.ceil(Math.max(0, Math.abs(darkPixels * 100 - total * 50) - total * 5) / (total * 5));\n const dark = 10 * darkSteps;\n return adjacent + box + finder + dark;\n}\n// Selects best mask according to penalty, if no mask is provided\nfunction drawQRBest(ver, ecc, data, maskIdx) {\n if (maskIdx === undefined) {\n const bestMask = best();\n // ISO/IEC 18004:2024 §7.8.3.1 says mask penalty area is \"the complete symbol\",\n // but python-qrcode scores this placeholder form. Keep that output for compatibility\n // with common QR generators and to avoid fingerprinting this implementation.\n for (let mask = 0; mask < PATTERNS.length; mask++)\n bestMask.add(penalty(drawQR(ver, ecc, data, mask, true)), mask);\n maskIdx = bestMask.get();\n }\n if (maskIdx === undefined)\n throw new Error('Cannot find mask'); // Should never happen\n return drawQR(ver, ecc, data, maskIdx);\n}\nfunction validateECC(ec) {\n if (!ECMode.includes(ec))\n throw new Error(`Invalid error correction mode=${ec}. Expected: ${ECMode}`);\n}\nfunction validateEncoding(enc) {\n if (!Encoding.includes(enc))\n throw new Error(`Encoding: invalid mode=${enc}. Expected: ${Encoding}`);\n if (enc === 'kanji' || enc === 'eci')\n throw new Error(`Encoding: ${enc} is not supported (yet?).`);\n}\nfunction validateMask(mask) {\n if (![0, 1, 2, 3, 4, 5, 6, 7].includes(mask) || !PATTERNS[mask])\n throw new Error(`Invalid mask=${mask}. Expected number [0..7]`);\n}\nexport function encodeQR(text, output = 'raw', opts = {}) {\n const _opts = opts;\n const ecc = _opts.ecc !== undefined ? _opts.ecc : 'medium';\n validateECC(ecc);\n const encoding = _opts.encoding !== undefined ? _opts.encoding : detectType(text);\n validateEncoding(encoding);\n if (_opts.mask !== undefined)\n validateMask(_opts.mask);\n let ver = _opts.version;\n let data, err = new Error('Unknown error');\n if (ver !== undefined) {\n validateVersion(ver);\n data = encode(ver, ecc, text, encoding, _opts.textEncoder);\n }\n else {\n // If no version is provided, try to find smallest one which fits\n // Currently just scans all version, can be significantly speedup if needed\n for (let i = 1; i <= 40; i++) {\n try {\n data = encode(i, ecc, text, encoding, _opts.textEncoder);\n ver = i;\n break;\n }\n catch (e) {\n err = e;\n }\n }\n }\n if (!ver || !data)\n throw err;\n let res = drawQRBest(ver, ecc, data, _opts.mask);\n res.assertDrawn();\n // ISO/IEC 18004:2024 §5.3.8 says a QR quiet zone's \"width shall be 4X\",\n // and §9.1 requires 4X \"on all four sides\". Keep the compact historical\n // 2-module default to avoid changing encoder output; callers that need a\n // standards-conformant quiet zone must pass `border: 4` explicitly.\n const border = _opts.border === undefined ? 2 : _opts.border;\n if (!Number.isSafeInteger(border) || border <= 0)\n throw new Error(`invalid border=${border}`);\n res = res.border(border, false); // Add border\n if (_opts.scale !== undefined)\n res = res.scale(_opts.scale); // Scale image\n if (output === 'raw')\n return res.toRaw();\n else if (output === 'ascii')\n return res.toASCII();\n else if (output === 'svg')\n return res.toSVG(_opts.optimize);\n else if (output === 'gif')\n return res.toGIF();\n else if (output === 'term')\n return res.toTerm();\n else\n throw new Error(`Unknown output: ${output}`);\n}\n/**\n * Default export alias for {@link encodeQR}.\n * @param text - Text payload that should be encoded into the QR symbol.\n * @param output - Output format to generate: raw matrix, ASCII, terminal ANSI, GIF, or SVG.\n * @param opts - Encoding and rendering options. See {@link QrOpts} and {@link SvgQrOpts}.\n * @returns Encoded QR data in the format selected by `output`.\n * @throws If the payload, options, QR capacity, or output format are invalid. {@link Error}\n * @example\n * Encode text into the default export from the package root.\n * ```ts\n * import encodeQR from 'qr';\n * encodeQR('Hello world', 'ascii');\n * ```\n */\nexport default encodeQR;\n/**\n * Low-level helpers used by the encoder and test suite.\n * Exports the shared helper tables/functions through a frozen container.\n * @example\n * Read low-level QR metadata tables.\n * ```ts\n * import { utils } from 'qr';\n * const size = utils.info.size.encode(1); // 21\n * ```\n */\nexport const utils = /* @__PURE__ */ Object.freeze({\n best,\n bin,\n popcnt,\n drawTemplate,\n fillArr,\n info,\n interleave,\n validateVersion,\n zigzag,\n});\n// Unsafe API utils, exported only for tests\n// Exposes the shared internal helpers/tables through a frozen container.\nexport const _tests = /* @__PURE__ */ Object.freeze({\n Bitmap,\n info,\n detectType,\n encode,\n drawQR,\n penalty,\n PATTERNS,\n});\n// Type tests\n// const o1 = qr('test', 'ascii');\n// const o2 = qr('test', 'raw');\n// const o3 = qr('test', 'gif');\n// const o4 = qr('test', 'svg');\n// const o5 = qr('test', 'term');\n//# sourceMappingURL=index.js.map","export const copyToClipboard = async (text: string): Promise<boolean> => {\n if (!text) return false;\n\n try {\n if (navigator?.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n\n return true;\n }\n }\n catch (error) {\n console.error(\"Failed to copy to clipboard\", error);\n }\n\n try {\n const textArea = document.createElement(\"textarea\");\n\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.left = \"-999999px\";\n textArea.style.top = \"-999999px\";\n document.body.append(textArea);\n textArea.focus();\n textArea.select();\n const result = document.execCommand(\"copy\");\n\n textArea.remove();\n\n return result;\n }\n catch {\n return false;\n }\n};\n","import { encodeQR } from \"qr\";\nimport { Show } from \"solid-js\";\n\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\n\nconst generateQRCode = (uriValue: string) => encodeQR(uriValue, \"svg\", { optimize: true, encoding: \"byte\", border: 2 });\n\nexport const HandshakeOpen = () => {\n const { t } = useTranslation();\n const { uri } = useSession();\n\n const handleCopy = () => {\n const sessionUri = uri();\n\n if (sessionUri) {\n copyToClipboard(sessionUri);\n }\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 px-2\">\n <div class=\"w-full space-y-4 rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-card-background) p-4\">\n <Show when={uri()}>\n {sessionUri => (\n <div class=\"relative mx-auto flex w-fit items-center justify-center rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-qr-background) p-2\">\n <button\n type=\"button\"\n class=\"h-[200px] w-[200px] cursor-pointer rounded bg-(--lv-qr-background) text-(--lv-qr-color)\"\n onClick={handleCopy}\n title={String(t(\"handshake.clickToCopyUrl\"))}\n innerHTML={generateQRCode(sessionUri())}\n />\n </div>\n )}\n </Show>\n\n <div class=\"w-full\">\n <button\n type=\"button\"\n onClick={handleCopy}\n class=\"w-full cursor-pointer rounded-lg border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-4 py-2 text-sm text-(--lv-text-primary) transition hover:bg-(--lv-control-button-secondary-hoverBackground) active:bg-(--lv-control-button-secondary-activeBackground)\"\n >\n {t(\"handshake.copyConnectionUrl\")}\n </button>\n </div>\n </div>\n <div class=\"w-full text-sm text-(--lv-text-secondary)\">\n <span>{t(\"handshake.scanCodeInstruction\")}</span>\n </div>\n </div>\n );\n};\n","import { SESSION_STATE } from \"@openlv/session\";\nimport { Match, Switch } from \"solid-js\";\n\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\nimport { HandshakeOpen } from \"./HandshakeOpen.jsx\";\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const Connecting = () => {\n const { status } = useSession();\n const { t } = useTranslation();\n\n return (\n <div>\n <Switch>\n <Match when={([SESSION_STATE.CREATED, SESSION_STATE.SIGNALING] as string[]).includes(status()?.status ?? \"\")}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connecting\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.waitingForNetwork\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={status()?.status === SESSION_STATE.READY}>\n <HandshakeOpen />\n </Match>\n <Match when={status()?.status === SESSION_STATE.LINKING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.establishingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.mayTakeFewSeconds\")}\n </p>\n </div>\n </div>\n </Match>\n </Switch>\n </div>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.jsx\";\n\n/**\n * Shown when a session fails to establish. Special-cases the \"no local ICE\n * candidates\" transport failure, since that one has a concrete user-side\n * remedy (WebRTC disabled/blocked by the browser, an extension, or a VPN).\n */\nexport const ErrorScreen = (properties: { onClose: () => void; }) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const reason = createMemo(\n () => provider.getState().error ?? provider.getState().session?.error,\n );\n const isIceFailure = createMemo(() =>\n /ice candidates/i.test(reason() ?? \"\"));\n\n const message = createMemo(() => {\n if (isIceFailure()) return t(\"connectionFlow.errorNoIce\");\n\n return reason() ?? t(\"connectionFlow.errorGeneric\");\n });\n\n const retry = () => {\n // Back to the disconnected view so the user can generate a fresh QR.\n void provider.closeSession();\n };\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <div class=\"mb-4 text-4xl\">⚠️</div>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectionFailed\")}\n </h3>\n <p class=\"mb-2 text-(--lv-text-muted) text-sm\">{message()}</p>\n </div>\n <div class=\"flex w-full flex-col gap-2\">\n <button\n type=\"button\"\n onClick={retry}\n class=\"w-full rounded-lg bg-(--lv-control-button-primary-background) px-4 py-2 font-semibold text-(--lv-control-button-primary-color, var(--lv-text-primary)) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"connectionFlow.tryAgain\")}\n </button>\n <button\n type=\"button\"\n onClick={properties.onClose}\n class=\"w-full rounded-lg bg-(--lv-control-button-secondary-background) px-4 py-2 font-semibold text-(--lv-text-primary) text-sm transition hover:bg-(--lv-control-button-primary-background-hover)\"\n >\n {t(\"common.close\")}\n </button>\n </div>\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport {\n createSignal,\n Match,\n onCleanup,\n onMount,\n Show,\n Switch,\n} from \"solid-js\";\n\nimport { UnknownState } from \"../components/UnknownState.js\";\nimport { useModalContext } from \"../context.jsx\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Connecting } from \"./connecting.jsx\";\nimport { ErrorScreen } from \"./ErrorScreen.jsx\";\n\ninterface ConnectionFlowProperties {\n onClose: () => void;\n onCopy: (uri: string) => void;\n}\n\nconst LoadingSpinner = () => (\n <div class=\"flex items-center justify-center\">\n <div class=\"h-8 w-8 animate-spin rounded-full border-4 border-blue-500 border-t-transparent\" />\n </div>\n);\n\nexport const ConnectionFlow = (properties: ConnectionFlowProperties) => {\n const { t } = useTranslation();\n const { provider } = useModalContext();\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n // Peer info is recorded during the handshake, so it is in the session\n // state by the time the status flips to CONNECTED and this re-evaluates.\n const peerInfo = () => provider.getSession()?.getState().peerInfo;\n // The wire only bounds the icon's size — vetting what goes into an\n // <img src> is this renderer's job.\n const renderableIcon = () => {\n const icon = peerInfo()?.icon;\n\n return icon && (icon.startsWith(\"data:image/\") || icon.startsWith(\"https://\"))\n ? icon\n : undefined;\n };\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n return (\n <div style={{ \"view-transition-name\": \"connection-flow\" }} class=\"w-full\">\n <Switch fallback={<UnknownState state={providerStatus()} />}>\n <Match when={providerStatus() === PROVIDER_STATUS.CREATING}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <LoadingSpinner />\n <div class=\"text-center\">\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.preparingConnection\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.generatingKeys\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTING}>\n <Connecting onClose={properties.onClose} />\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.CONNECTED}>\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <div class=\"text-center\">\n <Show\n when={peerInfo()}\n fallback={<div class=\"mb-4 text-4xl\">✅</div>}\n >\n {info => (\n <div class=\"mb-4 flex flex-col items-center gap-2\">\n <Show\n when={renderableIcon()}\n fallback={<div class=\"text-4xl\">✅</div>}\n >\n {icon => (\n <img\n src={icon()}\n alt=\"\"\n class=\"h-12 w-12 rounded-xl\"\n />\n )}\n </Show>\n <span class=\"font-medium text-(--lv-text-primary) text-sm\">\n {info().name}\n </span>\n </div>\n )}\n </Show>\n <h3 class=\"mb-2 font-semibold text-(--lv-text-primary) text-lg\">\n {t(\"connectionFlow.connectedSuccessfully\")}\n </h3>\n <p class=\"text-(--lv-text-muted) text-sm\">\n {t(\"connectionFlow.walletConnectedReady\")}\n </p>\n </div>\n </div>\n </Match>\n <Match when={providerStatus() === PROVIDER_STATUS.ERROR}>\n <ErrorScreen onClose={properties.onClose} />\n </Match>\n </Switch>\n </div>\n );\n};\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/defaultAttributes.ts\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\nvar defaultAttributes_default = defaultAttributes;\nexport {\n defaultAttributes_default as default\n};\n//# sourceMappingURL=defaultAttributes.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/Icon.tsx\nimport { For, splitProps } from \"solid-js\";\nimport { Dynamic } from \"solid-js/web\";\nimport defaultAttributes from \"./defaultAttributes\";\n\n// ../shared/src/utils/hasA11yProp.ts\nvar hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n\n// ../shared/src/utils/mergeClasses.ts\nvar mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\n// ../shared/src/utils/toCamelCase.ts\nvar toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\n\n// ../shared/src/utils/toKebabCase.ts\nvar toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n\n// ../shared/src/utils/toPascalCase.ts\nvar toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n\n// src/Icon.tsx\nvar Icon = (props) => {\n const [localProps, rest] = splitProps(props, [\n \"color\",\n \"size\",\n \"strokeWidth\",\n \"children\",\n \"class\",\n \"name\",\n \"iconNode\",\n \"absoluteStrokeWidth\"\n ]);\n return <svg\n {...defaultAttributes}\n width={localProps.size ?? defaultAttributes.width}\n height={localProps.size ?? defaultAttributes.height}\n stroke={localProps.color ?? defaultAttributes.stroke}\n stroke-width={localProps.absoluteStrokeWidth ? Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"]) * 24 / Number(localProps.size) : Number(localProps.strokeWidth ?? defaultAttributes[\"stroke-width\"])}\n class={mergeClasses(\n \"lucide\",\n \"lucide-icon\",\n ...localProps.name != null ? [\n `lucide-${toKebabCase(toPascalCase(localProps.name))}`,\n `lucide-${toKebabCase(localProps.name)}`\n ] : [],\n localProps.class != null ? localProps.class : \"\"\n )}\n aria-hidden={!localProps.children && !hasA11yProp(rest) ? \"true\" : void 0}\n {...rest}\n >\n <For each={localProps.iconNode}>\n {([elementName, attrs]) => {\n return <Dynamic\n component={elementName}\n {...attrs}\n />;\n }}\n </For>\n </svg>;\n};\nvar Icon_default = Icon;\nexport {\n Icon_default as default\n};\n//# sourceMappingURL=Icon.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-left.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m15 18-6-6 6-6\", key: \"1wnfg3\" }]];\nvar ChevronLeft = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-left\" />;\nvar chevron_left_default = ChevronLeft;\nexport {\n chevron_left_default as default\n};\n//# sourceMappingURL=chevron-left.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/chevron-right.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [[\"path\", { d: \"m9 18 6-6-6-6\", key: \"mthhwq\" }]];\nvar ChevronRight = (props) => <Icon {...props} iconNode={iconNode} name=\"chevron-right\" />;\nvar chevron_right_default = ChevronRight;\nexport {\n chevron_right_default as default\n};\n//# sourceMappingURL=chevron-right.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/circle-question-mark.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nvar CircleQuestionMark = (props) => <Icon {...props} iconNode={iconNode} name=\"circle-question-mark\" />;\nvar circle_question_mark_default = CircleQuestionMark;\nexport {\n circle_question_mark_default as default\n};\n//# sourceMappingURL=circle-question-mark.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/plus.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n];\nvar Plus = (props) => <Icon {...props} iconNode={iconNode} name=\"plus\" />;\nvar plus_default = Plus;\nexport {\n plus_default as default\n};\n//# sourceMappingURL=plus.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/qr-code.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"3\", rx: \"1\", key: \"1tu5fj\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"16\", y: \"3\", rx: \"1\", key: \"1v8r4q\" }],\n [\"rect\", { width: \"5\", height: \"5\", x: \"3\", y: \"16\", rx: \"1\", key: \"1x03jg\" }],\n [\"path\", { d: \"M21 16h-3a2 2 0 0 0-2 2v3\", key: \"177gqh\" }],\n [\"path\", { d: \"M21 21v.01\", key: \"ents32\" }],\n [\"path\", { d: \"M12 7v3a2 2 0 0 1-2 2H7\", key: \"8crl2c\" }],\n [\"path\", { d: \"M3 12h.01\", key: \"nlz23k\" }],\n [\"path\", { d: \"M12 3h.01\", key: \"n36tog\" }],\n [\"path\", { d: \"M12 16v.01\", key: \"133mhm\" }],\n [\"path\", { d: \"M16 12h1\", key: \"1slzba\" }],\n [\"path\", { d: \"M21 12v.01\", key: \"1lwtk9\" }],\n [\"path\", { d: \"M12 21v-1\", key: \"1880an\" }]\n];\nvar QrCode = (props) => <Icon {...props} iconNode={iconNode} name=\"qr-code\" />;\nvar qr_code_default = QrCode;\nexport {\n qr_code_default as default\n};\n//# sourceMappingURL=qr-code.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/settings.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n];\nvar Settings = (props) => <Icon {...props} iconNode={iconNode} name=\"settings\" />;\nvar settings_default = Settings;\nexport {\n settings_default as default\n};\n//# sourceMappingURL=settings.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/trash-2.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M10 11v6\", key: \"nco0om\" }],\n [\"path\", { d: \"M14 11v6\", key: \"outv1u\" }],\n [\"path\", { d: \"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\", key: \"miytrc\" }],\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\", key: \"e791ji\" }]\n];\nvar Trash2 = (props) => <Icon {...props} iconNode={iconNode} name=\"trash-2\" />;\nvar trash_2_default = Trash2;\nexport {\n trash_2_default as default\n};\n//# sourceMappingURL=trash-2.jsx.map\n","/**\n* @license lucide-solid v0.574.0 - ISC\n*\n* This source code is licensed under the ISC license.\n* See the LICENSE file in the root directory of this source tree.\n*/\n\n// src/icons/x.tsx\nimport Icon from \"../Icon\";\nvar iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nvar X = (props) => <Icon {...props} iconNode={iconNode} name=\"x\" />;\nvar x_default = X;\nexport {\n x_default as default\n};\n//# sourceMappingURL=x.jsx.map\n","// src/utils.js\nvar SPACE_REGEX = /\\s+/g;\nvar removeExtraSpaces = (str) => {\n if (typeof str !== \"string\" || !str) return str;\n return str.replace(SPACE_REGEX, \" \").trim();\n};\nvar cx = (...classnames) => {\n const classList = [];\n const buildClassString = (input) => {\n if (!input && input !== 0 && input !== 0n) return;\n if (Array.isArray(input)) {\n for (let i = 0, len = input.length; i < len; i++) buildClassString(input[i]);\n return;\n }\n const type = typeof input;\n if (type === \"string\" || type === \"number\" || type === \"bigint\") {\n if (type === \"number\" && input !== input) return;\n classList.push(String(input));\n } else if (type === \"object\") {\n const keys = Object.keys(input);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (input[key]) classList.push(key);\n }\n }\n };\n for (let i = 0, len = classnames.length; i < len; i++) {\n const c = classnames[i];\n if (c !== null && c !== void 0) buildClassString(c);\n }\n return classList.length > 0 ? removeExtraSpaces(classList.join(\" \")) : void 0;\n};\nvar falsyToString = (value) => value === false ? \"false\" : value === true ? \"true\" : value === 0 ? \"0\" : value;\nvar isEmptyObject = (obj) => {\n if (!obj || typeof obj !== \"object\") return true;\n for (const _ in obj) return false;\n return true;\n};\nvar isEqual = (obj1, obj2) => {\n if (obj1 === obj2) return true;\n if (!obj1 || !obj2) return false;\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n for (let i = 0; i < keys1.length; i++) {\n const key = keys1[i];\n if (!keys2.includes(key)) return false;\n if (obj1[key] !== obj2[key]) return false;\n }\n return true;\n};\nvar isBoolean = (value) => value === true || value === false;\nvar joinObjects = (obj1, obj2) => {\n for (const key in obj2) {\n if (Object.prototype.hasOwnProperty.call(obj2, key)) {\n const val2 = obj2[key];\n if (key in obj1) {\n obj1[key] = cx(obj1[key], val2);\n } else {\n obj1[key] = val2;\n }\n }\n }\n return obj1;\n};\nvar flat = (arr, target) => {\n for (let i = 0; i < arr.length; i++) {\n const el = arr[i];\n if (Array.isArray(el)) flat(el, target);\n else if (el) target.push(el);\n }\n};\nfunction flatArray(arr) {\n const flattened = [];\n flat(arr, flattened);\n return flattened;\n}\nvar flatMergeArrays = (...arrays) => {\n const result = [];\n flat(arrays, result);\n const filtered = [];\n for (let i = 0; i < result.length; i++) {\n if (result[i]) filtered.push(result[i]);\n }\n return filtered;\n};\nvar mergeObjects = (obj1, obj2) => {\n const result = {};\n for (const key in obj1) {\n const val1 = obj1[key];\n if (key in obj2) {\n const val2 = obj2[key];\n if (Array.isArray(val1) || Array.isArray(val2)) {\n result[key] = flatMergeArrays(val2, val1);\n } else if (typeof val1 === \"object\" && typeof val2 === \"object\" && val1 && val2) {\n result[key] = mergeObjects(val1, val2);\n } else {\n result[key] = val2 + \" \" + val1;\n }\n } else {\n result[key] = val1;\n }\n }\n for (const key in obj2) {\n if (!(key in obj1)) {\n result[key] = obj2[key];\n }\n }\n return result;\n};\n\nexport { cx, falsyToString, flat, flatArray, flatMergeArrays, isBoolean, isEmptyObject, isEqual, joinObjects, mergeObjects, removeExtraSpaces };\n","import { cx, isEmptyObject, mergeObjects, isEqual, joinObjects, flatMergeArrays, falsyToString } from './chunk-LQJYWU4O.js';\n\n// src/config.js\nvar defaultConfig = {\n twMerge: true,\n twMergeConfig: {}\n};\n\n// src/state.js\nfunction createState() {\n let cachedTwMerge = null;\n let cachedTwMergeConfig = {};\n let didTwMergeConfigChange = false;\n return {\n get cachedTwMerge() {\n return cachedTwMerge;\n },\n set cachedTwMerge(value) {\n cachedTwMerge = value;\n },\n get cachedTwMergeConfig() {\n return cachedTwMergeConfig;\n },\n set cachedTwMergeConfig(value) {\n cachedTwMergeConfig = value;\n },\n get didTwMergeConfigChange() {\n return didTwMergeConfigChange;\n },\n set didTwMergeConfigChange(value) {\n didTwMergeConfigChange = value;\n },\n reset() {\n cachedTwMerge = null;\n cachedTwMergeConfig = {};\n didTwMergeConfigChange = false;\n }\n };\n}\nvar state = createState();\n\n// src/core.js\nvar getTailwindVariants = (cn) => {\n const tv = (options, configProp) => {\n const {\n extend = null,\n slots: slotProps = {},\n variants: variantsProps = {},\n compoundVariants: compoundVariantsProps = [],\n compoundSlots = [],\n defaultVariants: defaultVariantsProps = {}\n } = options;\n const config = { ...defaultConfig, ...configProp };\n const base = extend?.base ? cx(extend.base, options?.base) : options?.base;\n const variants = extend?.variants && !isEmptyObject(extend.variants) ? mergeObjects(variantsProps, extend.variants) : variantsProps;\n const defaultVariants = extend?.defaultVariants && !isEmptyObject(extend.defaultVariants) ? { ...extend.defaultVariants, ...defaultVariantsProps } : defaultVariantsProps;\n if (!isEmptyObject(config.twMergeConfig) && !isEqual(config.twMergeConfig, state.cachedTwMergeConfig)) {\n state.didTwMergeConfigChange = true;\n state.cachedTwMergeConfig = config.twMergeConfig;\n }\n const isExtendedSlotsEmpty = isEmptyObject(extend?.slots);\n const componentSlots = !isEmptyObject(slotProps) ? {\n // add \"base\" to the slots object\n base: cx(options?.base, isExtendedSlotsEmpty && extend?.base),\n ...slotProps\n } : {};\n const slots = isExtendedSlotsEmpty ? componentSlots : joinObjects(\n { ...extend?.slots },\n isEmptyObject(componentSlots) ? { base: options?.base } : componentSlots\n );\n const compoundVariants = isEmptyObject(extend?.compoundVariants) ? compoundVariantsProps : flatMergeArrays(extend?.compoundVariants, compoundVariantsProps);\n const component = (props) => {\n if (isEmptyObject(variants) && isEmptyObject(slotProps) && isExtendedSlotsEmpty) {\n return cn(base, props?.class, props?.className)(config);\n }\n if (compoundVariants && !Array.isArray(compoundVariants)) {\n throw new TypeError(\n `The \"compoundVariants\" prop must be an array. Received: ${typeof compoundVariants}`\n );\n }\n if (compoundSlots && !Array.isArray(compoundSlots)) {\n throw new TypeError(\n `The \"compoundSlots\" prop must be an array. Received: ${typeof compoundSlots}`\n );\n }\n const getVariantValue = (variant, vrs = variants, _slotKey = null, slotProps2 = null) => {\n const variantObj = vrs[variant];\n if (!variantObj || isEmptyObject(variantObj)) {\n return null;\n }\n const variantProp = slotProps2?.[variant] ?? props?.[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp);\n if (typeof variantKey === \"object\") {\n return null;\n }\n const defaultVariantProp = defaultVariants?.[variant];\n const key = variantKey != null ? variantKey : falsyToString(defaultVariantProp);\n const value = variantObj[key || \"false\"];\n return value;\n };\n const getVariantClassNames = () => {\n if (!variants) return null;\n const keys = Object.keys(variants);\n const result = [];\n for (let i = 0; i < keys.length; i++) {\n const value = getVariantValue(keys[i], variants);\n if (value) result.push(value);\n }\n return result;\n };\n const getVariantClassNamesBySlotKey = (slotKey, slotProps2) => {\n if (!variants || typeof variants !== \"object\") return null;\n const result = [];\n for (const variant in variants) {\n const variantValue = getVariantValue(variant, variants, slotKey, slotProps2);\n const value = slotKey === \"base\" && typeof variantValue === \"string\" ? variantValue : variantValue && variantValue[slotKey];\n if (value) result.push(value);\n }\n return result;\n };\n const propsWithoutUndefined = {};\n for (const prop in props) {\n const value = props[prop];\n if (value !== void 0) propsWithoutUndefined[prop] = value;\n }\n const getCompleteProps = (key, slotProps2) => {\n const initialProp = typeof props?.[key] === \"object\" ? {\n [key]: props[key]?.initial\n } : {};\n return {\n ...defaultVariants,\n ...propsWithoutUndefined,\n ...initialProp,\n ...slotProps2\n };\n };\n const getCompoundVariantsValue = (cv = [], slotProps2) => {\n const result = [];\n const cvLength = cv.length;\n for (let i = 0; i < cvLength; i++) {\n const { class: tvClass, className: tvClassName, ...compoundVariantOptions } = cv[i];\n let isValid = true;\n const completeProps = getCompleteProps(null, slotProps2);\n for (const key in compoundVariantOptions) {\n const value = compoundVariantOptions[key];\n const completePropsValue = completeProps[key];\n if (Array.isArray(value)) {\n if (!value.includes(completePropsValue)) {\n isValid = false;\n break;\n }\n } else {\n if ((value == null || value === false) && (completePropsValue == null || completePropsValue === false))\n continue;\n if (completePropsValue !== value) {\n isValid = false;\n break;\n }\n }\n }\n if (isValid) {\n if (tvClass) result.push(tvClass);\n if (tvClassName) result.push(tvClassName);\n }\n }\n return result;\n };\n const getCompoundVariantClassNamesBySlot = (slotProps2) => {\n const compoundClassNames = getCompoundVariantsValue(compoundVariants, slotProps2);\n if (!Array.isArray(compoundClassNames)) return compoundClassNames;\n const result = {};\n const cnFn = cn;\n for (let i = 0; i < compoundClassNames.length; i++) {\n const className = compoundClassNames[i];\n if (typeof className === \"string\") {\n result.base = cnFn(result.base, className)(config);\n } else if (typeof className === \"object\") {\n for (const slot in className) {\n result[slot] = cnFn(result[slot], className[slot])(config);\n }\n }\n }\n return result;\n };\n const getCompoundSlotClassNameBySlot = (slotProps2) => {\n if (compoundSlots.length < 1) return null;\n const result = {};\n const completeProps = getCompleteProps(null, slotProps2);\n for (let i = 0; i < compoundSlots.length; i++) {\n const {\n slots: slots2 = [],\n class: slotClass,\n className: slotClassName,\n ...slotVariants\n } = compoundSlots[i];\n if (!isEmptyObject(slotVariants)) {\n let isValid = true;\n for (const key in slotVariants) {\n const completePropsValue = completeProps[key];\n const slotVariantValue = slotVariants[key];\n if (completePropsValue === void 0 || (Array.isArray(slotVariantValue) ? !slotVariantValue.includes(completePropsValue) : slotVariantValue !== completePropsValue)) {\n isValid = false;\n break;\n }\n }\n if (!isValid) continue;\n }\n for (let j = 0; j < slots2.length; j++) {\n const slotName = slots2[j];\n if (!result[slotName]) result[slotName] = [];\n result[slotName].push([slotClass, slotClassName]);\n }\n }\n return result;\n };\n if (!isEmptyObject(slotProps) || !isExtendedSlotsEmpty) {\n const slotsFns = {};\n if (typeof slots === \"object\" && !isEmptyObject(slots)) {\n const cnFn = cn;\n for (const slotKey in slots) {\n slotsFns[slotKey] = (slotProps2) => {\n const compoundVariantClasses = getCompoundVariantClassNamesBySlot(slotProps2);\n const compoundSlotClasses = getCompoundSlotClassNameBySlot(slotProps2);\n return cnFn(\n slots[slotKey],\n getVariantClassNamesBySlotKey(slotKey, slotProps2),\n compoundVariantClasses ? compoundVariantClasses[slotKey] : void 0,\n compoundSlotClasses ? compoundSlotClasses[slotKey] : void 0,\n slotProps2?.class,\n slotProps2?.className\n )(config);\n };\n }\n }\n return slotsFns;\n }\n return cn(\n base,\n getVariantClassNames(),\n getCompoundVariantsValue(compoundVariants),\n props?.class,\n props?.className\n )(config);\n };\n const getVariantKeys = () => {\n if (!variants || typeof variants !== \"object\") return;\n return Object.keys(variants);\n };\n component.variantKeys = getVariantKeys();\n component.extend = extend;\n component.base = base;\n component.slots = slots;\n component.variants = variants;\n component.defaultVariants = defaultVariants;\n component.compoundSlots = compoundSlots;\n component.compoundVariants = compoundVariants;\n return component;\n };\n const createTV = (configProp) => {\n return (options, config) => tv(options, config ? mergeObjects(configProp, config) : configProp);\n };\n return {\n tv,\n createTV\n };\n};\n\nexport { defaultConfig, getTailwindVariants, state };\n","import { getTailwindVariants } from './chunk-RZF76H2U.js';\nexport { defaultConfig } from './chunk-RZF76H2U.js';\nimport { cx } from './chunk-LQJYWU4O.js';\nexport { cx } from './chunk-LQJYWU4O.js';\n\n// src/lite.js\nvar cnAdapter = (...classnames) => {\n return (_config) => {\n const base = cx(classnames);\n return base || void 0;\n };\n};\nvar { createTV, tv } = getTailwindVariants(cnAdapter);\n\nexport { cnAdapter as cn, cnAdapter, createTV, tv };\n","// Button implementation that also supports being an anchor tag\nimport classNames from \"classnames\";\nimport { type JSX, splitProps } from \"solid-js\";\nimport { tv, type VariantProps } from \"tailwind-variants/lite\";\n\nconst styles = tv({\n base: \"flex items-center justify-center rounded-lg transition-all duration-100 cursor-pointer active:scale-95\",\n variants: {\n $variant: {\n primary:\n \"font-semibold text-sm bg-(--lv-control-button-primary-background) text-(--lv-control-button-primary-color) border-(--lv-control-button-primary-border) hover:bg-(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background)) active:bg-(--lv-control-button-primary-activeBackground,var(--lv-control-button-primary-hoverBackground,var(--lv-control-button-primary-background))) disabled:bg-(--lv-control-button-primary-disabledBackground,var(--lv-control-button-primary-background)) disabled:text-(--lv-control-button-primary-disabledColor,var(--lv-control-button-primary-color))\",\n secondary:\n \"border bg-(--lv-control-button-secondary-background) text-(--lv-control-button-secondary-color) border-(--lv-control-button-secondary-border,var(--lv-control-button-secondary-background)) hover:bg-(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background)) active:bg-(--lv-control-button-secondary-activeBackground,var(--lv-control-button-secondary-hoverBackground,var(--lv-control-button-secondary-background))) disabled:bg-(--lv-control-button-secondary-disabledBackground,var(--lv-control-button-secondary-background)) disabled:text-(--lv-control-button-secondary-disabledColor,var(--lv-control-button-secondary-color))\",\n tertiary:\n \"bg-transparent text-(--lv-text-muted) hover:bg-(--lv-control-button-tertiary-hoverBackground,transparent) active:bg-(--lv-control-button-tertiary-activeBackground,var(--lv-control-button-tertiary-hoverBackground,transparent)) disabled:text-(--lv-control-button-tertiary-disabledColor,var(--lv-text-muted))\",\n },\n $size: {\n sm: \"h-6\",\n md: \"h-8\",\n lg: \"h-11\",\n },\n $aspect: {\n square: \"aspect-square\",\n auto: \"\",\n },\n },\n defaultVariants: {\n $size: \"md\",\n $variant: \"primary\",\n $aspect: \"auto\",\n },\n});\n\nexport type ButtonButtonProps = {\n onClick?: JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>;\n} & JSX.ButtonHTMLAttributes<HTMLButtonElement>;\nexport type ButtonLinkProps = {\n href: string;\n onClick?: JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>;\n} & JSX.AnchorHTMLAttributes<HTMLAnchorElement>;\nexport type ButtonProps = {\n children?: JSX.Element;\n class?: string;\n} & VariantProps<typeof styles>\n& (\n | ({\n href: string;\n } & ButtonLinkProps)\n | ({\n href?: undefined;\n } & ButtonButtonProps)\n );\n\nexport const Button = (rawProperties: ButtonProps) => {\n const [local, properties] = splitProps(rawProperties, [\n \"children\",\n \"class\",\n \"$variant\",\n \"$size\",\n \"$aspect\",\n \"href\",\n \"onClick\",\n ]);\n\n if (local.href) {\n return (\n <a\n href={local.href}\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLAnchorElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(properties as JSX.AnchorHTMLAttributes<HTMLAnchorElement>)}\n >\n {local.children}\n </a>\n );\n }\n\n return (\n <button\n type=\"button\"\n onClick={\n local.onClick as JSX.EventHandlerUnion<HTMLButtonElement, MouseEvent>\n }\n class={classNames(\n styles({\n $variant: local.$variant,\n $size: local.$size,\n $aspect: local.$aspect,\n }),\n local.class,\n )}\n {...(properties as JSX.ButtonHTMLAttributes<HTMLButtonElement>)}\n >\n {local.children}\n </button>\n );\n};\n","import { For } from \"solid-js\";\n\nconst dotCount = (isApple: boolean) => (isApple ? 1 : 3);\n\nconst TabletGraphic = (properties: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full justify-between\">\n <div class=\"grow py-1 ps-1\">\n <div class=\"h-full rounded-sm border border-gray-300 bg-gray-400\"></div>\n </div>\n <div class=\"flex h-full w-3 flex-col items-center justify-center gap-0.5 pr-0.5\">\n <For each={Array.from({ length: dotCount(properties.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-500\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nconst PhoneGraphic = (properties: { isApple: boolean; }) => (\n <div class=\"flex h-full w-full flex-col justify-between\">\n <div class=\"grow px-1 pt-1\">\n <div class=\"h-full rounded-sm border border-gray-200 bg-gray-300\"></div>\n </div>\n <div class=\"flex h-3 w-full items-center justify-center gap-0.5 pb-0.5\">\n <For each={Array.from({ length: dotCount(properties.isApple) })}>\n {() => (\n <div class=\"h-1.5 w-1.5 rounded-full border border-gray-400\"></div>\n )}\n </For>\n </div>\n </div>\n);\n\nexport const ConnectionGraphic = () => {\n // the only fingerprinting we ever do\n // is Apple device\n // const isApple =\n // navigator.userAgent.includes(\"iPhone\") ||\n // navigator.userAgent.includes(\"iPad\") ||\n // navigator.userAgent.includes(\"iPod\");\n const isApple = true;\n\n return (\n <div class=\"-space-x-4 flex items-end\">\n <div class=\"h-38 w-48 overflow-hidden rounded-lg bg-gray-300\">\n <TabletGraphic isApple={isApple} />\n </div>\n <div class=\"h-18 w-12 overflow-hidden rounded-lg bg-gray-200\">\n <PhoneGraphic isApple={isApple} />\n </div>\n </div>\n );\n};\n","import { LucideSettings } from \"lucide-solid\";\n\nimport { useSessionStart } from \"../../hooks/useSession.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\nimport { ConnectionGraphic } from \"./ConnectionGraphic.js\";\n\nexport const Disconnected = (properties: { onSettings: () => void; }) => {\n const { t } = useTranslation();\n const { start } = useSessionStart();\n\n return (\n <div class=\"flex flex-col items-center gap-4 p-6\">\n <ConnectionGraphic />\n <div class=\"text-center\">\n <p class=\"text-sm text-(--lv-text-secondary)\">\n {t(\"disconnected.prompt\")}\n </p>\n </div>\n <div class=\"flex items-center\">\n <Button\n type=\"button\"\n onClick={start}\n class=\"z-10 px-6 py-3\"\n $variant=\"primary\"\n $size=\"lg\"\n >\n {t(\"disconnected.generateQr\")}\n </Button>\n <Button\n type=\"button\"\n aria-label={String(t(\"disconnected.connectionSettings\"))}\n aria-pressed={false}\n onClick={properties.onSettings}\n class=\"px-3 ltr:-ml-1 ltr:rounded-l-none rtl:-mr-1 rtl:rounded-r-none\"\n $aspect=\"square\"\n $size=\"lg\"\n $variant=\"secondary\"\n >\n <LucideSettings class=\"h-5 w-5 text-(--lv-text-muted)\" />\n </Button>\n </div>\n </div>\n );\n};\n","import { LucideQrCode } from \"lucide-solid\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\n\nexport const InfoScreen = () => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex flex-col space-y-2 px-4 text-start\">\n <div class=\"min-h-32 w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.scanQrCode\")}\n </div>\n <div class=\"flex justify-center items-center grow\">\n <LucideQrCode class=\"w-10 h-10\" />\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.approveOnDevice\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n <div class=\"w-full rounded-md border border-(--lv-control-button-secondary-border) md:flex justify-start divide-y md:divide-y-0 md:divide-x divide-(--lv-control-button-secondary-border)\">\n <div class=\"p-2 w-full md:w-3/5\">\n {t(\"info.youreConnected\")}\n </div>\n <div class=\"\">\n\n </div>\n </div>\n </div>\n );\n};\n","import { type Accessor, createEffect, createSignal, onCleanup } from \"solid-js\";\n\nexport interface PunchTransitionOptions {\n duration?: number;\n}\n\nexport const usePunchTransition = <T>(\n value: T | Accessor<T>,\n { duration = 200 }: PunchTransitionOptions = {},\n) => {\n const readValue: Accessor<T>\n = typeof value === \"function\" ? (value as Accessor<T>) : () => value;\n const initialValue = readValue();\n const [current, setCurrent] = createSignal<T>(initialValue);\n const [previous, setPrevious] = createSignal<T | undefined>(undefined);\n let timeoutReference: ReturnType<typeof setTimeout> | undefined;\n let lastValueReference = initialValue;\n\n createEffect(() => {\n const nextValue = readValue();\n\n if (Object.is(nextValue, lastValueReference)) return;\n\n if (timeoutReference) {\n globalThis.clearTimeout(timeoutReference);\n }\n\n setPrevious(() => lastValueReference);\n setCurrent(() => nextValue);\n lastValueReference = nextValue;\n\n timeoutReference = globalThis.setTimeout(() => {\n setPrevious(() => undefined);\n timeoutReference = undefined;\n }, duration);\n\n onCleanup(() => {\n if (timeoutReference) {\n globalThis.clearTimeout(timeoutReference);\n }\n });\n });\n\n return {\n current,\n previous,\n isTransitioning: () => previous() !== undefined,\n };\n};\n","import type {\n ProviderStorage,\n UserThemePreference,\n} from \"@openlv/provider/storage\";\nimport { createSignal } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../provider/dist/storage/version.js\";\nimport { useModalContext } from \"../context.js\";\nimport type { LanguageTag } from \"../utils/i18n.jsx\";\n\nexport const useSettings = () => {\n const { provider } = useModalContext();\n const [settings, setLocalSettings] = createSignal<ProviderStorage>(provider.storage.getSettings());\n\n const setSettings = (newSettings: ProviderStorage) => {\n setLocalSettings(newSettings);\n provider.storage.setSettings(newSettings);\n };\n\n const setLanguage = (language: LanguageTag) => {\n setSettings({ ...settings(), language });\n };\n\n const setThemeMode = (themeMode: UserThemePreference) => {\n setSettings({ ...settings(), theme: themeMode });\n };\n\n const setSignalingProtocol = (p: SignalingProtocol) => {\n setSettings({ ...settings(), signaling: { p, s: settings()?.signaling?.s ?? {} } });\n };\n\n const setSignalingOptions = (options: { url: string; }) => {\n const p = settings()?.signaling?.p;\n\n if (!p) return;\n\n const s = settings()?.signaling?.s ?? {};\n\n setSettings({ ...settings(), signaling: { p, s: { ...s, [p]: options.url } } });\n };\n\n const setRetainSessionHistory = (retain: boolean) => {\n setSettings({ ...settings(), retainHistory: retain });\n };\n\n const setAutoReconnect = (autoReconnect: boolean) => {\n setSettings({ ...settings(), autoReconnect });\n };\n\n return {\n settings,\n setSettings,\n setLanguage,\n setThemeMode,\n setSignalingProtocol,\n setSignalingOptions,\n setRetainSessionHistory,\n setAutoReconnect,\n };\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"./useSettings.js\";\n\nexport const useTheme = () => {\n const { settings } = useSettings();\n\n const theme = createMemo(() => settings().theme);\n const mode = createMemo(() => \"light\");\n\n return {\n theme,\n mode,\n };\n};\n","/**\n * OpenLV icon - 128x128 pixels, optimized WebP format\n * Best for larger UI elements, headers, prominent display\n */\nexport const OPENLV_ICON_128\n = \"data:image/webp;base64,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\";\n","import { createMemo, Show } from \"solid-js\";\nimport { match } from \"ts-pattern\";\n\nimport { useSession } from \"../../hooks/useSession.js\";\nimport { useTranslation } from \"../../utils/i18n.js\";\n\nexport const FooterStatus = () => {\n const { t } = useTranslation();\n const { status: sessionStatus } = useSession();\n const status = createMemo(() => {\n const sessionState = sessionStatus()?.status;\n const signalState = sessionStatus()?.signaling?.state as string | undefined;\n\n return match({ sessionState, signalState })\n .with({ sessionState: \"connected\" }, () => ({\n icon: \"✅\",\n text: t(\"status.connectedSuccessfully\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"standby\" }, () => ({\n icon: \"🫥\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"connecting\" }, () => ({\n icon: \"↗️\",\n text: t(\"status.connecting\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"ready\" }, () => ({\n icon: \"👋\",\n text: t(\"status.ready\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"handshake\" }, () => ({\n icon: \"🤝\",\n text: t(\"status.handshakeClosed\"),\n }))\n .with(\n { sessionState: \"signaling\", signalState: \"handshake-partial\" },\n () => ({\n icon: \"🤝\",\n text: t(\"status.handshakePartial\"),\n }),\n )\n .with({ sessionState: \"signaling\", signalState: \"encrypted\" }, () => ({\n icon: \"🔒\",\n text: t(\"status.encrypted\"),\n }))\n .with({ sessionState: \"signaling\", signalState: \"error\" }, () => ({\n icon: \"❌\",\n text: t(\"status.signalError\"),\n }))\n .otherwise(() => undefined);\n });\n\n return (\n <Show when={status()}>\n {resolved => (\n <div class=\"group flex items-center gap-2 rounded-md px-2 py-2 hover:bg-(--lv-control-button-secondary-background)\">\n <div class=\"pointer-events-none whitespace-nowrap rounded-md text-xs opacity-0 group-hover:opacity-100\">\n {resolved().text}\n </div>\n <div>{resolved().icon}</div>\n </div>\n )}\n </Show>\n );\n};\n","import { OPENLV_ICON_128 } from \"../../assets/logo.js\";\nimport { FooterStatus } from \"./StatusIndicator.js\";\n\nexport const Footer = () => (\n <>\n <div class=\"h-11 w-full\"></div>\n <div class=\"absolute inset-x-0 bottom-0 flex items-end justify-between gap-2 px-3 py-2 text-(--lv-text-muted)\">\n <a\n href=\"https://github.com/open-lavatory/open-lavatory\"\n target=\"_blank\"\n rel=\"noreferrer\"\n class=\"flex items-center gap-2 p-1 font-semibold text-sm text-(--lv-text-muted)\"\n >\n <img\n src={OPENLV_ICON_128}\n alt=\"Open Lavatory Logo\"\n width={20}\n height={20}\n class=\"rounded\"\n data-openlv-brand-logo\n />\n <span>openlv</span>\n </a>\n <div class=\"text-sm text-(--lv-text-muted)\">\n <FooterStatus />\n </div>\n </div>\n </>\n);\n","import { LucideChevronLeft, LucideCircleQuestionMark, LucideX } from \"lucide-solid\";\n\nimport { Button } from \"../ui/Button.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport type { ModalView } from \"./ModalRoot.js\";\n\nexport const Header = (properties: {\n title: string;\n view: ModalView;\n onClose: () => void;\n onBack?: () => void;\n setView: (view: ModalView) => void;\n}) => {\n const { t } = useTranslation();\n\n return (\n <div class=\"flex items-center justify-between px-2 py-2\">\n {properties.onBack\n ? (\n <Button\n onClick={properties.onBack}\n aria-label={String(\n properties.view === \"settings\"\n ? t(\"modal.backToQr\")\n : t(\"modal.closeModal\"),\n )}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideChevronLeft class=\"h-6 w-6 text-(--lv-text-muted) rtl:rotate-180\" />\n </Button>\n )\n : (\n <Button\n type=\"button\"\n onClick={() => properties.setView(\"info\")}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideCircleQuestionMark class=\"h-5 w-5\" />\n </Button>\n )}\n <h2 class=\"flex items-center justify-center gap-2 font-semibold text-(--lv-text-primary) text-lg\">\n {properties.title}\n </h2>\n <Button\n type=\"button\"\n aria-label={String(t(\"common.close\"))}\n aria-pressed={false}\n onClick={properties.onClose}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"md\"\n >\n <LucideX class=\"h-6 w-6 text-(--lv-text-muted)\" />\n </Button>\n </div>\n );\n};\n","import type { Accessor } from \"solid-js\";\nimport { createMemo, createSignal } from \"solid-js\";\n\nimport { usePunchTransition } from \"./usePunchTransition.js\";\n\nexport interface UseNavigationStackOptions {\n transitionDuration?: number;\n}\n\nexport interface UseNavigationStackReturn<T> {\n screen: Accessor<T>;\n previousScreen: Accessor<T | undefined>;\n isTransitioning: Accessor<boolean>;\n navigate: (screen: T) => void;\n goBack: () => void;\n isAtRoot: Accessor<boolean>;\n}\n\nexport const useNavigationStack = <T>(\n initialScreen: T,\n { transitionDuration = 200 }: UseNavigationStackOptions = {},\n): UseNavigationStackReturn<T> => {\n const [stack, setStack] = createSignal<T[]>([initialScreen]);\n const [index, setIndex] = createSignal(0);\n const screen = createMemo<T>(() => stack()[index()] ?? initialScreen);\n const { current, previous, isTransitioning } = usePunchTransition(screen, {\n duration: transitionDuration,\n });\n\n const navigate = (nextScreen: T) => {\n const activeIndex = index();\n const activeStack = stack();\n const currentScreen = activeStack[activeIndex];\n\n if (Object.is(currentScreen, nextScreen)) return;\n\n const nextStack = activeStack.slice(0, activeIndex + 1);\n\n nextStack.push(nextScreen);\n setStack(nextStack);\n setIndex(nextStack.length - 1);\n };\n\n const goBack = () => {\n setIndex(currentIndex => Math.max(0, currentIndex - 1));\n };\n\n return {\n screen: current,\n previousScreen: previous,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot: () => index() === 0,\n };\n};\n","import classNames from \"classnames\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type TransitionContainerProps<T> = {\n current: T;\n previous: T | undefined;\n isTransitioning: boolean;\n render: (value: T) => JSX.Element;\n class?: string;\n};\n\nexport const TransitionContainer = <T = unknown>(\n properties: TransitionContainerProps<T>,\n) => (\n <div class={classNames(\"modal-transition__container\", properties.class)}>\n <Show when={properties.previous !== undefined}>\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {properties.render(properties.previous as T)}\n </div>\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n properties.isTransitioning && \"modal-transition__layer--incoming\",\n )}\n >\n {properties.render(properties.current)}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuGroupProps = ParentProps<{\n title: JSX.Element;\n right?: JSX.Element;\n}>;\n\nexport const MenuGroup = (properties: MenuGroupProps) => (\n <div>\n <div class=\"flex items-end justify-between py-1 pl-2\">\n <div class=\"font-medium text-(--lv-text-primary) text-sm\">\n {properties.title}\n </div>\n <div>{properties.right}</div>\n </div>\n <div class=\"flex flex-col gap-1 rounded-md bg-(--lv-card-background)\">\n {properties.children}\n </div>\n </div>\n);\n","import type { JSX, ParentProps } from \"solid-js\";\n\nexport type MenuItemProps = ParentProps<{\n label: JSX.Element;\n}>;\n\nexport const MenuItem = (properties: MenuItemProps) => (\n <div class=\"flex items-baseline justify-between gap-2 px-2 py-1 first:pt-2 last:pb-2\">\n <div class=\"text-sm text-(--lv-text-secondary) text-start\">\n {properties.label}\n </div>\n <div>{properties.children}</div>\n </div>\n);\n","import { For, Show } from \"solid-js\";\nimport { tv } from \"tailwind-variants/lite\";\n\nconst buttonGroupStyles = tv({\n slots: {\n root: \"flex overflow-hidden rounded-md border border-(--lv-control-button-secondary-border)\",\n box: \"px-4 py-2 font-semibold text-xs transition border-l first:border-l-0 border-(--lv-control-button-secondary-border)\",\n },\n variants: {\n active: {\n on: {\n box: \"bg-(--lv-control-button-secondary-background) text-(--lv-text-primary)\",\n },\n off: {\n box: \"bg-transparent text-(--lv-text-secondary) cursor-pointer\",\n },\n },\n },\n defaultVariants: {\n active: \"off\",\n },\n});\n\nconst dropdownStyles = tv({\n base: \"w-full rounded-md border border-(--lv-control-button-secondary-border) bg-(--lv-control-button-secondary-background) px-3 py-2 font-semibold text-xs text-(--lv-text-primary) cursor-pointer focus:outline-none focus:ring-2 focus:ring-(--lv-control-button-primary-background) appearance-none bg-[url('data:image/svg+xml;charset=US-ASCII,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23888%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E')] bg-[length:14px] bg-[right_8px_center] bg-no-repeat pr-8\",\n});\n\nexport type SelectProps = {\n options: string[][];\n value: string;\n onChange: (value: string) => void;\n dropdownThreshold?: number;\n};\n\nexport const Select = (properties: SelectProps) => {\n const dropdown = dropdownStyles();\n const { root, box } = buttonGroupStyles({});\n\n return (\n <Show\n when={properties.options.length > (properties.dropdownThreshold ?? 3)}\n fallback={(\n <div class={root()}>\n <For each={properties.options}>\n {([slug, label]) => (\n <button\n type=\"button\"\n onClick={() => properties.onChange(slug)}\n aria-pressed={slug === properties.value}\n class={box({ active: slug === properties.value ? \"on\" : \"off\" })}\n >\n {label}\n </button>\n )}\n </For>\n </div>\n )}\n >\n <select\n class={dropdown}\n value={properties.value}\n onChange={event => properties.onChange(event.currentTarget.value)}\n >\n <For each={properties.options}>\n {([slug, label]) => <option value={slug}>{label}</option>}\n </For>\n </select>\n </Show>\n );\n};\n","import type { UserThemePreference } from \"@openlv/provider/storage\";\nimport { Show } from \"solid-js\";\n\nimport { useTheme } from \"../../../hooks/useTheme.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nexport const ThemeSettings = () => {\n const { t } = useTranslation();\n const theme = useTheme();\n\n const isUserConfigurable = () => theme.mode() === \"auto\";\n const userThemeMode = () => (theme.mode() === \"auto\" ? \"system\" : theme.mode());\n const updateThemePreference = (value: string) => {\n // theme.setMode(value as ThemeMode);\n };\n\n return (\n <Show when={isUserConfigurable()}>\n <MenuItem label={t(\"settings.theme.mode\") as string}>\n <Select\n options={[\n [\"light\", t(\"settings.theme.light\") as string],\n [\"dark\", t(\"settings.theme.dark\") as string],\n [\"system\", t(\"settings.theme.system\") as string],\n ]}\n value={userThemeMode()}\n onChange={value =>\n updateThemePreference(value as UserThemePreference)}\n />\n </MenuItem>\n </Show>\n );\n};\n","import { createMemo } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport {\n getLanguageScore,\n LANGUAGES,\n type LanguageTag,\n useTranslation,\n} from \"../../../utils/i18n.js\";\nimport { ThemeSettings } from \"./theme.js\";\n\nexport const LanguageSettings = () => {\n const { t, languageTag, setLanguageTag } = useTranslation();\n const { settings, setLanguage } = useSettings();\n\n const sortedLanguages = createMemo(() =>\n [...LANGUAGES].sort((a, b) => {\n const scoreA = getLanguageScore(a.tag);\n const scoreB = getLanguageScore(b.tag);\n\n return scoreB - scoreA;\n }),\n );\n\n const handleLanguageChange = (value: string) => {\n const newLang = value as LanguageTag;\n\n setLanguageTag(newLang);\n setLanguage(newLang);\n };\n\n return (\n <MenuGroup title={t(\"settings.appearance\")}>\n <MenuItem label={t(\"settings.language\")}>\n <Select\n options={sortedLanguages().map(lang => [lang.tag, lang.nativeName])}\n value={\n (settings()?.language as LanguageTag | undefined) || languageTag()\n }\n onChange={handleLanguageChange}\n />\n </MenuItem>\n <ThemeSettings />\n </MenuGroup>\n );\n};\n","import { LucideCircleQuestionMark } from \"lucide-solid\";\nimport { mergeProps, type ParentProps } from \"solid-js\";\nimport type { VariantProps } from \"tailwind-variants/lite\";\nimport { tv } from \"tailwind-variants/lite\";\nimport { match } from \"ts-pattern\";\n\nconst styles = tv({\n slots: {\n root: \"group relative\",\n box: \"cursor-pointer rounded-md transition-colors flex items-center justify-center hover:[background-color:var(--lv-control-button-tertiary-hoverBackground)] text-(--lv-text-muted)\",\n popover:\n \"-translate-x-1/2 absolute top-full left-1/2 z-10 hidden rounded-md shadow-sm group-hover:block border border-(--lv-control-button-secondary-border) bg-(--lv-body-background) px-2 py-1.5 text-(--lv-text-primary) text-sm\",\n icon: \"\",\n },\n variants: {\n size: {\n sm: {\n box: \"h-5 w-5 p-1\",\n icon: \"h-3 w-3\",\n },\n md: {\n box: \"h-6 w-6 p-1\",\n icon: \"h-4 w-4\",\n },\n lg: {\n box: \"h-8 w-8 p-1.5\",\n icon: \"h-4 w-4\",\n },\n },\n variant: {\n icon: \"\",\n text: \"\",\n },\n },\n defaultVariants: {\n size: \"lg\",\n },\n});\n\nexport type InfoTooltipProps = VariantProps<typeof styles>;\n\nexport const InfoTooltip = (rawProperties: ParentProps<InfoTooltipProps>) => {\n const properties = mergeProps(\n { variant: \"icon\" as const, size: \"lg\" as const },\n rawProperties,\n );\n const { root, box, popover, icon } = styles({\n size: properties.size,\n variant: properties.variant,\n });\n\n return (\n <div class={root()}>\n <div class={box()}>\n {match(properties.variant)\n .with(\"icon\", () => <LucideCircleQuestionMark class={icon()} />)\n .with(\"text\", () => <div>Text</div>)\n .exhaustive()}\n </div>\n <div class={popover()}>{properties.children}</div>\n </div>\n );\n};\n","import { LucideChevronRight } from \"lucide-solid\";\nimport { type JSX, Show } from \"solid-js\";\n\nexport type MenuLinkProps = {\n label: JSX.Element;\n value?: JSX.Element;\n onClick: () => void;\n};\n\nexport const MenuLink = (properties: MenuLinkProps) => (\n <button\n type=\"button\"\n onClick={properties.onClick}\n class=\"flex w-full cursor-pointer items-center justify-between gap-2 first:rounded-t-sm last:rounded-b-sm px-2 py-1 first:pt-1.5 last:pb-2 hover:bg-(--lv-control-button-tertiary-hoverBackground)\"\n >\n <div class=\"text-sm text-(--lv-text-secondary) flex items-center gap-1\">\n {properties.label}\n </div>\n <div class=\"flex items-center gap-1\">\n <Show when={properties.value}>\n <span class=\"text-sm text-(--lv-text-muted)\">{properties.value}</span>\n </Show>\n <LucideChevronRight class=\"h-4 w-4 text-(--lv-text-muted) rtl:rotate-180\" />\n </div>\n </button>\n);\n","import type { JSX } from \"solid-js\";\n\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Select } from \"./Select.js\";\n\nexport type ToggleProps = {\n label: JSX.Element;\n value: boolean;\n onChange: (value: boolean) => void;\n};\n\nexport const Toggle = (properties: ToggleProps) => {\n const { t } = useTranslation();\n\n return (\n <Select\n options={[\n [\"true\", String(t(\"common.yes\"))],\n [\"false\", String(t(\"common.no\"))],\n ]}\n value={properties.value ? \"true\" : \"false\"}\n onChange={value => properties.onChange(value === \"true\")}\n />\n );\n};\n","import { For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { InfoTooltip } from \"../../../ui/InfoTooltip.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { MenuLink } from \"../../../ui/menu/MenuLink.js\";\nimport { Toggle } from \"../../../ui/Toggle.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\nimport type { SettingsScreen } from \"../index.js\";\n\nexport const ConnectionPreferences = (properties: {\n onNavigate: (screen: SettingsScreen) => void;\n}) => {\n const { t } = useTranslation();\n const { settings, setRetainSessionHistory, setAutoReconnect } = useSettings();\n\n return (\n <MenuGroup title={t(\"settings.connectionPreferences.title\")}>\n <MenuLink\n label={(\n <>\n {t(\"settings.signaling.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.signaling.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => properties.onNavigate(\"signaling\")}\n value={settings()?.signaling?.p}\n />\n <MenuLink\n label={(\n <>\n {t(\"settings.transport.title\")}\n <InfoTooltip variant=\"icon\">\n {t(\"settings.transport.description\")}\n </InfoTooltip>\n </>\n )}\n onClick={() => properties.onNavigate(\"transport\")}\n value=\"WebRTC\"\n />\n <For\n each={\n [\n [\n t(\"settings.connectionPreferences.retainSessionHistory\"),\n settings()?.retainHistory ?? false,\n setRetainSessionHistory,\n ],\n [\n t(\"settings.connectionPreferences.autoReconnect\"),\n settings()?.autoReconnect ?? false,\n setAutoReconnect,\n ],\n ] as const\n }\n >\n {([label, value, onChange]) => (\n <MenuItem label={label}>\n <Toggle label={label} value={value} onChange={onChange} />\n </MenuItem>\n )}\n </For>\n </MenuGroup>\n );\n};\n","import { Index, mergeProps, splitProps } from \"solid-js\";\n\nconst labelClasses = \"font-semibold text-xs uppercase tracking-wide\";\nconst inputClasses\n = \"h-9 w-full rounded-lg border bg-white px-3 text-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-200 text-(--lv-text-primary) bg-(--lv-body-background) border-(--lv-control-input-border)\";\n\ntype LabelProperties = {\n htmlFor?: string;\n children: string;\n};\n\nexport const Label = (properties: LabelProperties) => (\n <label\n class={`${labelClasses} text-(--lv-text-secondary)`}\n for={properties.htmlFor}\n >\n {properties.children}\n </label>\n);\n\ntype InputProperties = {\n // eslint-disable-next-line no-restricted-syntax\n id?: string;\n value: string;\n placeholder?: string;\n ariaLabel?: string;\n readOnly?: boolean;\n onChange?: (value: string) => void;\n};\n\nexport const Input = (properties: InputProperties) => {\n const merged = mergeProps({ readOnly: true }, properties);\n const [local] = splitProps(merged, [\n \"id\",\n \"value\",\n \"placeholder\",\n \"ariaLabel\",\n \"readOnly\",\n \"onChange\",\n ]);\n\n return (\n <input\n // eslint-disable-next-line no-restricted-syntax\n id={local.id}\n class={inputClasses}\n value={local.value}\n placeholder={local.placeholder}\n aria-label={local.ariaLabel}\n readOnly={local.readOnly}\n onInput={(e) => {\n local.onChange?.(e.currentTarget.value);\n }}\n />\n );\n};\n\ntype InputGroupProperties = {\n label: string;\n values: readonly string[];\n placeholder?: string;\n inputIdPrefix?: string;\n};\n\nexport const InputGroup = (properties: InputGroupProperties) => (\n <div class=\"grid gap-2\">\n <Label>{properties.label}</Label>\n <Index each={properties.values}>\n {(value, index) => {\n // eslint-disable-next-line no-restricted-syntax\n const id = properties.inputIdPrefix\n ? `${properties.inputIdPrefix}-${index}`\n : undefined;\n const suffix = properties.values.length > 1 ? ` ${index + 1}` : \"\";\n\n return (\n <Input\n // eslint-disable-next-line no-restricted-syntax\n id={id}\n value={value()}\n placeholder={properties.placeholder}\n ariaLabel={`${properties.label}${suffix}`}\n />\n );\n }}\n </Index>\n </div>\n);\n","import { createMemo } from \"solid-js\";\n\nimport type { SignalingProtocol } from \"../../../../../provider/dist/storage/version.js\";\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { MenuItem } from \"../../../ui/menu/MenuItem.js\";\nimport { Select } from \"../../../ui/Select.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst AVAILABLE_PROTOCOLS = [\"mqtt\", \"ntfy\", \"gun\"];\n\nexport const SignalingSettings = () => {\n const { t } = useTranslation();\n const { settings, setSignalingProtocol, setSignalingOptions }\n = useSettings();\n const signalingProtocol = createMemo(() => settings()?.signaling?.p);\n const signalingServer = createMemo(() => {\n const activeProtocol = signalingProtocol();\n\n if (!activeProtocol) return \"\";\n\n return settings()?.signaling?.s?.[activeProtocol] ?? \"\";\n });\n\n return (\n <div>\n <MenuGroup title={t(\"settings.signaling.title\")}>\n <MenuItem label={t(\"common.protocol\")}>\n <Select\n options={AVAILABLE_PROTOCOLS.map(option => [\n option.toLowerCase(),\n option.toUpperCase(),\n ])}\n value={signalingProtocol() ?? \"\"}\n onChange={value => setSignalingProtocol(value as SignalingProtocol)}\n />\n </MenuItem>\n <MenuItem label={t(\"settings.signaling.server\")}>\n <Input\n id=\"server\"\n value={signalingServer()}\n onChange={value => setSignalingOptions({ url: value })}\n placeholder={String(t(\"settings.signaling.serverUrl\"))}\n ariaLabel={String(t(\"settings.signaling.serverUrl\"))}\n readOnly={false}\n />\n </MenuItem>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.signaling.description\")}\n </div>\n </div>\n );\n};\n","import type { TurnServer } from \"@openlv/provider/storage\";\nimport { LucidePlus, LucideTrash2 } from \"lucide-solid\";\nimport type { JSX } from \"solid-js\";\nimport { createSignal, For } from \"solid-js\";\n\nimport { useSettings } from \"../../../hooks/useSettings.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { MenuGroup } from \"../../../ui/menu/MenuGroup.js\";\nimport { useTranslation } from \"../../../utils/i18n.js\";\n\nconst ServerListItem = (properties: {\n children: JSX.Element;\n onRemove: () => void;\n}) => (\n <div class=\"flex items-center gap-2\">\n <div class=\"flex-1\">{properties.children}</div>\n <Button\n onClick={properties.onRemove}\n $variant=\"tertiary\"\n $aspect=\"square\"\n $size=\"sm\"\n >\n <LucideTrash2 class=\"h-4 w-4 text-(--lv-text-muted)\" />\n </Button>\n </div>\n);\n\nconst AddServerButton = (properties: {\n label: JSX.Element;\n onClick: () => void;\n}) => (\n <button\n type=\"button\"\n onClick={properties.onClick}\n class=\"flex w-full cursor-pointer items-center justify-center gap-1 rounded-md border border-dashed border-(--lv-control-input-border) py-2 text-sm text-(--lv-text-muted) hover:bg-(--lv-card-background)\"\n >\n <LucidePlus class=\"h-4 w-4\" />\n {properties.label}\n </button>\n);\n\nexport const TransportSettings = () => {\n const { t } = useTranslation();\n const {\n settings,\n setSettings,\n } = useSettings();\n\n const [turnServers, setTurnServers] = createSignal<TurnServer[]>([]);\n const [stunServers, setStunServers] = createSignal<string[]>([]);\n\n const handleAddStun = () => {\n setStunServers([...stunServers(), \"\"]);\n };\n\n const handleRemoveStun = (index: number) => {\n setStunServers(stunServers().filter((_, index_) => index_ !== index));\n };\n\n const handleStunChange = (index: number, value: string) => {\n setStunServers(stunServers().map((server, index_) => (index_ === index ? value : server)));\n };\n\n const handleAddTurn = () => {\n setTurnServers([...turnServers(), { urls: \"\" }]);\n };\n\n const handleRemoveTurn = (index: number) => {\n setTurnServers(turnServers().filter((_, index_) => index_ !== index));\n };\n\n const handleTurnChange = (index: number, field: keyof TurnServer, value: string) => {\n setTurnServers(turnServers().map((server, index_) => (index_ === index ? { ...server, [field]: value } : server)));\n };\n\n // createEffect(() => {\n // setSettings({\n // ...settings(), transport: {\n // p: \"webrtc\",\n // s: {\n // webrtc: {\n // stun: stunServers(),\n // turn: turnServers(),\n // },\n // },\n // },\n // });\n // });\n\n return (\n <>\n <MenuGroup title={t(\"settings.transport.iceServers.stun\")}>\n <div class=\"flex flex-col gap-2 p-2\">\n <For each={stunServers()}>\n {(server, index) => (\n <ServerListItem onRemove={() => handleRemoveStun(index())}>\n <Input\n value={server}\n onChange={value => handleStunChange(index(), value)}\n placeholder=\"stun:stun.l.google.com:19302\"\n readOnly={false}\n />\n </ServerListItem>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addStun\")}\n onClick={handleAddStun}\n />\n </div>\n </MenuGroup>\n\n <MenuGroup title={t(\"settings.transport.iceServers.turn\")}>\n <div class=\"flex flex-col gap-3 p-2\">\n <For each={turnServers()}>\n {(server, index) => (\n <div class=\"flex flex-col gap-2 rounded-md border border-(--lv-control-input-border) p-2\">\n <ServerListItem onRemove={() => handleRemoveTurn(index())}>\n <Input\n value={server.urls}\n onChange={value =>\n handleTurnChange(index(), \"urls\", value)}\n placeholder=\"turn:relay.example.com:443\"\n readOnly={false}\n />\n </ServerListItem>\n <div class=\"grid grid-cols-2 gap-2\">\n <Input\n value={server.username ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"username\", value)}\n placeholder=\"Username\"\n readOnly={false}\n />\n <Input\n value={server.credential ?? \"\"}\n onChange={value =>\n handleTurnChange(index(), \"credential\", value)}\n placeholder=\"Password\"\n readOnly={false}\n />\n </div>\n </div>\n )}\n </For>\n <AddServerButton\n label={t(\"settings.transport.iceServers.addTurn\")}\n onClick={handleAddTurn}\n />\n </div>\n </MenuGroup>\n <div class=\"p-2 text-sm text-(--lv-text-secondary) text-start\">\n {t(\"settings.transport.description\")}\n </div>\n </>\n );\n};\n","import { createEffect } from \"solid-js\";\n\nimport { useNavigationStack } from \"../../hooks/useNavigationStack.js\";\nimport { TransitionContainer } from \"../../ui/TransitionContainer.js\";\nimport { LanguageSettings } from \"./a11y/index.js\";\nimport { ConnectionPreferences } from \"./connection/index.js\";\nimport { SignalingSettings } from \"./connection/signaling.js\";\nimport { TransportSettings } from \"./connection/transport.js\";\n\nexport type SettingsScreen = \"main\" | \"signaling\" | \"transport\";\n\nexport interface SettingsNavigationReference {\n goBack: () => void;\n isAtRoot: boolean;\n}\n\nexport interface ModalSettingsProps {\n onTitleChange?: (titleKey: string) => void;\n navigationRef?: { current: SettingsNavigationReference | null; };\n}\n\nconst getSettingsTitleKey = (screen: SettingsScreen): string => {\n switch (screen) {\n case \"main\": {\n return \"settings.title\";\n }\n case \"signaling\": {\n return \"settings.signaling.title\";\n }\n case \"transport\": {\n return \"settings.transport.title\";\n }\n }\n};\n\nexport const ModalSettings = (properties: ModalSettingsProps) => {\n const {\n screen,\n previousScreen,\n isTransitioning,\n navigate,\n goBack,\n isAtRoot,\n } = useNavigationStack<SettingsScreen>(\"main\");\n\n const internalReference: SettingsNavigationReference = {\n goBack,\n get isAtRoot() {\n return isAtRoot();\n },\n };\n\n createEffect(() => {\n if (properties.navigationRef) {\n properties.navigationRef.current = internalReference;\n }\n });\n\n createEffect(() => {\n properties.onTitleChange?.(getSettingsTitleKey(screen()));\n });\n\n const renderScreen = (s: SettingsScreen) => {\n switch (s) {\n case \"main\": {\n return (\n <>\n <ConnectionPreferences onNavigate={navigate} />\n <LanguageSettings />\n </>\n );\n }\n case \"signaling\": {\n return <SignalingSettings />;\n }\n case \"transport\": {\n return <TransportSettings />;\n }\n }\n };\n\n return (\n <div class=\"px-4 pb-2\">\n <TransitionContainer\n current={screen()}\n previous={previousScreen()}\n isTransitioning={isTransitioning()}\n render={renderScreen}\n />\n </div>\n );\n};\n","import { PROVIDER_STATUS, type ProviderStatus } from \"@openlv/provider\";\nimport classNames from \"classnames\";\nimport {\n createEffect,\n createMemo,\n createSignal,\n type JSX,\n onCleanup,\n onMount,\n Show,\n} from \"solid-js\";\nimport { match, P } from \"ts-pattern\";\n\nimport { useModalContext } from \"../context.jsx\";\nimport { ConnectionFlow } from \"../flow/ConnectionFlow.js\";\nimport { Disconnected } from \"../flow/disconnected/Disconnected.js\";\nimport { InfoScreen } from \"../flow/InfoScreen.js\";\nimport { copyToClipboard } from \"../hooks/useClipboard.js\";\nimport { usePunchTransition } from \"../hooks/usePunchTransition.js\";\nimport { useSession } from \"../hooks/useSession.js\";\nimport { useTheme } from \"../hooks/useTheme.js\";\nimport { useTranslation } from \"../utils/i18n.js\";\nimport { Footer } from \"./footer/Footer.js\";\nimport { Header } from \"./Header.js\";\nimport { ModalSettings, type SettingsNavigationReference } from \"./settings/index.js\";\nimport { UnknownState } from \"./UnknownState.js\";\n\nexport interface ModalRootProps {\n onClose?: () => void;\n onStartConnection?: () => void;\n onCopy?: (uri: string) => void;\n}\n\nexport type ModalView = \"start\" | \"settings\" | \"info\";\n\nconst useModalState = () => {\n const [view, setView] = createSignal<ModalView>(\"start\");\n const [copied, setCopied] = createSignal(false);\n\n createEffect(() => {\n if (!copied()) return;\n\n const timeout = globalThis.setTimeout(() => setCopied(false), 2000);\n\n onCleanup(() => globalThis.clearTimeout(timeout));\n });\n\n return {\n view,\n setView,\n copied,\n setCopied,\n };\n};\n\nconst useEscapeToClose = (handler: () => void) => {\n createEffect(() => {\n // eslint-disable-next-line unicorn/consistent-function-scoping\n const keyHandler = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") handler();\n };\n\n document.addEventListener(\"keydown\", keyHandler);\n\n onCleanup(() => document.removeEventListener(\"keydown\", keyHandler));\n });\n};\n\nconst useDynamicDialogHeight = () => {\n const [contentNode, setContentNode] = createSignal<HTMLDivElement>();\n const [height, setHeight] = createSignal(0);\n\n const measureHeight = (\n targetElement?: HTMLElement | null,\n useScrollHeight = false,\n ) => {\n const node = targetElement || contentNode();\n\n if (!node || !node.getBoundingClientRect) return;\n\n const nextHeight = useScrollHeight\n ? node.scrollHeight\n : node.getBoundingClientRect().height;\n\n if (nextHeight > 0) {\n setHeight(previousHeight =>\n (typeof previousHeight === \"number\"\n && Math.abs(previousHeight - nextHeight) < 0.5\n ? previousHeight\n : nextHeight),\n );\n }\n };\n\n createEffect(() => {\n const node = contentNode();\n\n if (!node || typeof ResizeObserver === \"undefined\") return;\n\n const observer = new ResizeObserver(() => {\n measureHeight();\n });\n\n observer.observe(node);\n\n onCleanup(() => observer.disconnect());\n });\n\n const handleResize = () => measureHeight();\n\n createEffect(() => {\n if (globalThis.window === undefined) return;\n\n window.addEventListener(\"resize\", handleResize);\n\n onCleanup(() => window.removeEventListener(\"resize\", handleResize));\n });\n\n return {\n setContentRef: setContentNode,\n contentNode,\n height,\n measureHeight,\n };\n};\n\nexport const ModalRoot = (properties: { onClose: () => void; }) => {\n const { view: modalView, setView, copied, setCopied } = useModalState();\n const { uri, status } = useSession();\n const { provider } = useModalContext();\n const { setContentRef, contentNode, height, measureHeight }\n = useDynamicDialogHeight();\n const {\n current: displayedModalView,\n previous: previousModalView,\n isTransitioning: isModalViewTransitioning,\n } = usePunchTransition(modalView);\n const {\n current: displayedStatus,\n previous: previousStatus,\n isTransitioning: isStatusTransitioning,\n } = usePunchTransition(status);\n const openSettings = () => setView(\"settings\");\n const { t, isRtl, languageTag } = useTranslation();\n const theme = useTheme();\n\n const settingsNavReference: { current: SettingsNavigationReference | null; } = {\n current: null,\n };\n const [settingsTitleKey, setSettingsTitleKey]\n = createSignal(\"settings.title\");\n\n const title = createMemo(() =>\n match(modalView())\n .with(\"start\", () => t(\"start.title\"))\n .with(\"settings\", () => t(settingsTitleKey()))\n .with(\"info\", () => t(\"info.title\"))\n .exhaustive(),\n );\n\n useEscapeToClose(properties.onClose);\n\n createEffect(() => {\n if (status()?.status === PROVIDER_STATUS.CONNECTED) {\n properties.onClose();\n }\n });\n\n const handleCopy = async () => {\n const sessionUri = uri();\n const success = sessionUri && (await copyToClipboard(sessionUri));\n\n if (success) setCopied(true);\n };\n\n let isInitialMount = true;\n let initialMeasureTimeout: ReturnType<typeof setTimeout> | undefined;\n let previousHeight: number | undefined;\n let overflowTimeout: ReturnType<typeof setTimeout> | undefined;\n const [shouldHideOverflow, setShouldHideOverflow] = createSignal(false);\n\n createEffect(() => {\n displayedStatus();\n displayedModalView();\n const node = contentNode();\n\n if (!node) return;\n\n if (isInitialMount) {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n\n initialMeasureTimeout = globalThis.setTimeout(() => {\n if (!contentNode()) {\n return;\n }\n\n measureHeight(undefined, true);\n isInitialMount = false;\n }, 0);\n }\n else {\n measureHeight();\n }\n\n onCleanup(() => {\n if (initialMeasureTimeout) {\n globalThis.clearTimeout(initialMeasureTimeout);\n }\n });\n });\n\n createEffect(() => {\n const currentHeight = height();\n const isHeightChanging\n = previousHeight !== undefined\n && currentHeight !== previousHeight\n && currentHeight > 0\n && previousHeight > 0\n && Math.abs(currentHeight - previousHeight) > 0.5;\n\n if (isHeightChanging) {\n setShouldHideOverflow(true);\n\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n\n overflowTimeout = globalThis.setTimeout(() => {\n setShouldHideOverflow(false);\n overflowTimeout = undefined;\n }, 200);\n }\n\n previousHeight = currentHeight;\n\n onCleanup(() => {\n if (overflowTimeout) {\n globalThis.clearTimeout(overflowTimeout);\n }\n });\n });\n\n const [providerStatus, setProviderStatus] = createSignal<ProviderStatus>(provider.getState().status);\n\n onMount(() => {\n provider.on(\"status_change\", setProviderStatus);\n });\n\n onCleanup(() => {\n provider.off(\"status_change\", setProviderStatus);\n });\n\n const shouldShowBack = createMemo(\n () => !(modalView() === \"start\" && providerStatus() === PROVIDER_STATUS.STANDBY),\n );\n\n const onBack = () => {\n match({ view: modalView(), status: providerStatus() })\n .with({ view: \"start\", status: PROVIDER_STATUS.STANDBY }, () => undefined)\n .with({ view: \"start\" }, () => {\n provider.closeSession();\n })\n .with({ view: \"settings\" }, () => {\n if (settingsNavReference.current && !settingsNavReference.current.isAtRoot) {\n settingsNavReference.current.goBack();\n }\n else {\n setView(\"start\");\n }\n })\n .with({ view: \"info\" }, () => {\n setView(\"start\");\n })\n .otherwise(() => {\n provider.closeSession();\n properties.onClose();\n });\n };\n\n const renderDisconnectedView = (targetView: ModalView): JSX.Element =>\n match(targetView)\n .with(\"start\", () => <Disconnected onSettings={openSettings} />)\n .with(\"settings\", () => (\n <ModalSettings\n onTitleChange={setSettingsTitleKey}\n navigationRef={settingsNavReference}\n />\n ))\n .with(\"info\", () => <InfoScreen />)\n .otherwise(() => <UnknownState state={targetView} />);\n\n const renderDisconnectedSection = () => (\n <div class=\"modal-transition__container\">\n <Show when={previousModalView()}>\n {previousView => (\n <div class=\"modal-transition__layer modal-transition__layer--outgoing\">\n {renderDisconnectedView(previousView())}\n </div>\n )}\n </Show>\n <div\n class={classNames(\n \"modal-transition__layer\",\n isModalViewTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n {renderDisconnectedView(displayedModalView())}\n </div>\n </div>\n );\n\n const renderStatusSection = (\n targetStatus: ProviderStatus,\n ): JSX.Element =>\n match(targetStatus)\n .with(PROVIDER_STATUS.STANDBY, () => renderDisconnectedSection())\n .with(\n P.union(\n PROVIDER_STATUS.CREATING,\n PROVIDER_STATUS.CONNECTING,\n PROVIDER_STATUS.CONNECTED,\n PROVIDER_STATUS.ERROR,\n ),\n () => (\n <ConnectionFlow onClose={properties.onClose} onCopy={handleCopy} />\n ),\n )\n .otherwise(state => <UnknownState state={state || \"unknown status\"} />);\n\n // todo remove this styling approach\n const overlayStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-overlay-background, rgba(0,0,0,0.3))\",\n \"backdrop-filter\": \"var(--lv-overlay-backdrop-filter, blur(4px))\",\n };\n\n // todo remove this styling approach\n const cardStyle: JSX.CSSProperties = {\n \"background\": \"var(--lv-body-background)\",\n \"color\": \"var(--lv-body-color, var(--lv-text-primary))\",\n \"border-radius\": \"var(--lv-border-radius, 16px)\",\n \"box-shadow\": \"var(--lv-modal-shadow, 0px 12px 32px rgba(0,0,0,0.25))\",\n };\n\n return (\n <div\n class=\"fixed inset-0 z-10000 flex animate-[bg-in_0.15s_ease-in-out] items-end justify-center md:items-center lg:p-4\"\n onMouseUp={(e) => {\n if (e.target === e.currentTarget) properties.onClose();\n }}\n role=\"presentation\"\n data-openlv-modal-root\n data-openlv-theme-mode={theme.mode()}\n lang={languageTag()}\n dir={isRtl() ? \"rtl\" : \"ltr\"}\n style={overlayStyle}\n >\n <div\n class={classNames(\n \"relative w-full max-w-[400px] animate-[fade-in_0.15s_ease-in-out] transition-[height] duration-200 ease-out\",\n shouldHideOverflow() || previousStatus()\n ? \"overflow-hidden\"\n : undefined,\n )}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={String(title())}\n onClick={event => event.stopPropagation()}\n style={{\n ...(typeof height() === \"number\" && height() > 0 && { height: `${height()}px` }),\n ...cardStyle,\n }}\n >\n <div ref={setContentRef}>\n <Header\n title={String(title())}\n view={modalView()}\n onClose={properties.onClose}\n onBack={shouldShowBack() ? onBack : undefined}\n setView={setView}\n />\n <div class=\"modal-transition__container\">\n <div\n class={classNames(\n \"modal-transition__layer\",\n isStatusTransitioning() && \"modal-transition__layer--incoming\",\n )}\n >\n <div class=\"flex flex-col text-center\">\n {renderStatusSection(providerStatus())}\n </div>\n </div>\n </div>\n <Footer />\n </div>\n\n <div\n class={classNames(\n \"absolute top-5 rounded-lg bg-blue-500 px-4 py-3 font-medium text-sm text-white transition-all ltr:right-5 rtl:left-5\",\n copied()\n ? \"translate-x-0 opacity-100\"\n : \"opacity-0 ltr:translate-x-full rtl:-translate-x-full\",\n )}\n >\n {t(\"modal.urlCopied\")}\n </div>\n </div>\n </div>\n );\n};\n","export const log = (...x: Parameters<typeof console.log>) =>\n console.log(\n \"%c[modal]%c\",\n \"color: yellow; font-weight: bold\",\n \"color: inherit; font-weight: normal\",\n ...x,\n );\n","\n/** biome-ignore-all lint/performance/noBarrelFile: package entrypoint */\n/** biome-ignore-all lint/performance/noReExportAll: package entrypoint */\n/** biome-ignore-all lint/suspicious/noConsole: temp */\n\nexport { ModalRoot } from \"./components/ModalRoot.js\";\nexport { default, OpenLVModalElement, type OpenLVModalElementProperties } from \"./element.js\";\nexport type { ThemeConfig } from \"./theme/index.js\";\n\nimport OpenLVModalElementDefault, {\n type OpenLVModalElementProperties,\n} from \"./element.js\";\nimport { log } from \"./utils/log.js\";\nexport { OPENLV_ICON_128 } from \"./assets/logo.js\";\n\nexport const registerOpenLVModal = (tagName = \"openlv-modal\") => {\n if (globalThis.window === undefined) {\n return tagName;\n }\n\n const registry = globalThis.customElements;\n\n if (!registry) {\n console.warn(\n \"OpenLV modal: custom elements are not supported in this environment.\",\n );\n\n return tagName;\n }\n\n if (!registry.get(tagName)) {\n registry.define(\n tagName,\n OpenLVModalElementDefault as unknown as CustomElementConstructor,\n );\n }\n\n return tagName;\n};\n\nexport const triggerOpenModal = (properties: OpenLVModalElementProperties) => {\n const modal = document.querySelector(\"openlv-modal\");\n\n if (modal) modal.remove();\n\n if (!modal) {\n registerOpenLVModal();\n const x = new OpenLVModalElementDefault({\n onClose() {\n log(\"modal closed\");\n x.remove();\n properties.onClose?.();\n },\n provider: properties.provider,\n theme: properties.theme,\n });\n\n document.body.append(x);\n // x.showModal();\n }\n};\n\nexport type TriggerOpenModal = typeof triggerOpenModal;\n"],"names":["IS_DEV","equalFn","a","b","$PROXY","SUPPORTS_PROXY","$TRACK","signalOptions","runEffects","runQueue","STALE","PENDING","UNOWNED","Owner","Transition","ExternalSourceConfig","Listener","Updates","Effects","ExecCount","createRoot","fn","detachedOwner","listener","owner","unowned","current","root","updateFn","untrack","cleanNode","runUpdates","createSignal","value","options","s","setter","writeSignal","readSignal","createRenderEffect","c","createComputation","updateComputation","createEffect","runUserEffects","createMemo","onMount","onCleanup","createContext","defaultValue","id","createProvider","useContext","context","children","memo","resolveChildren","updates","lookUpstream","observers","sSlot","node","isComp","i","o","TransitionRunning","markDownstream","time","runComputation","nextValue","err","handleError","init","pure","state","runTop","ancestors","wait","res","completeUpdates","queue","userLength","e","ignore","source","index","obs","n","castError","results","result","j","props","FALLBACK","dispose","d","mapArray","list","mapFn","items","mapped","disposers","len","indexes","newItems","newLen","newIndices","newIndicesNext","temp","tempdisposers","tempIndexes","start","end","newEnd","item","disposer","mapper","set","createComponent","Comp","trueFn","propTraps","_","property","receiver","resolveSource","resolveSources","length","v","mergeProps","sources","proxy","keys","sourcesMap","defined","sourceKeys","key","desc","target","definedKeys","splitProps","blocked","k","objects","propName","keyIndex","narrowedError","name","For","fallback","Show","keyed","conditionValue","condition","child","Switch","chs","switchFunc","ch","mps","func","mp","prevFunc","sel","Match","booleans","Properties","ChildProperties","Aliases","PropAliases","getPropAlias","prop","tagName","DelegatedEvents","SVGElements","SVGNamespace","reconcileArrays","parentNode","bLength","aEnd","bEnd","aStart","bStart","after","map","sequence","t","$$EVENTS","render","code","element","insert","template","html","isImportNode","isSVG","isMathML","create","delegateEvents","eventNames","document","l","eventHandler","setAttribute","setAttributeNS","namespace","setBoolAttribute","className","addEventListener","handler","delegate","handlerFn","classList","prev","classKeys","prevKeys","toggleClassKey","classValue","style","nodeStyle","spread","skipChildren","prevProps","insertExpression","use","assign","arg","parent","accessor","marker","initial","skipRef","assignProp","toPropertyName","w","classNames","nameLen","isCE","isProp","isChildProp","propAlias","forceProp","h","ns","oriTarget","oriCurrentTarget","retarget","handleNode","data","walkUpTree","path","unwrapArray","multi","cleanChildren","array","currentArray","normalizeIncomingArray","appendNodes","normalized","unwrap","dynamic","replacement","inserted","el","isParent","SVG_NAMESPACE","createElement","is","createDynamic","component","cached","isSvg","Dynamic","others","OPENLV_PROTOCOL_VERSION","encodeConnectionURL","payload","parameters","has","prefix","Events","EE","once","addListener","emitter","event","evt","clearEvent","EventEmitter","names","events","handlers","ee","listeners","a1","a2","a3","a4","a5","args","module","r","u","y","f","g","m","p","S","K","O","E","x","A","N","P","T","B","W","$","z","I","L","M","R","F","SESSION_STATE","PROVIDER_STATUS","hasOwn","classes","appendClass","parseValue","newClass","importOrPassthrough","theme","then","simpleTheme","openlvTheme","Error","isPlainObject","Array","isArray","flattenToCssVars","object","out","Object","entries","join","resolveMode","appThemeMode","userTheme","globalThis","matchMedia","matches","deepMerge","base","overlay","baseValue","overlayValue","buildTheme","config","resolvedMode","mode","variant","mergedVariant","common","flattened","updateStyles","shadowRoot","themeConfig","themeString","cssContent","OpenLVModalElement","HTMLElement","constructor","shadow","renderRequested","themeCleanup","disposeRender","attachShadow","initialUserTheme","provider","storage","getSettings","connectedCallback","requestRender","setupThemeListener","disconnectedCallback","undefined","update","on","mediaQuery","off","removeEventListener","showModal","display","hideModal","queueMicrotask","performRender","_self$","_$createComponent","ModalProvider","_$mergeProps","LANGUAGES","tag","nativeName","rtl","isRtlLanguage","find","Set","getLanguageScore","navigator","languages","language","browserLang","toLowerCase","startsWith","baseLang","split","resolveNestedValue","segments","filter","Boolean","segment","interpolate","replaceAll","matchText","String","resolveTranslation","fromPrimary","primary","params","fromFallback","TranslationContext","loadLanguagePack","languageTag","match","with","Promise","resolve","default","exhaustive","TranslationProvider","properties","useModalContext","initialLanguageTag","setLanguageTag","languagePack","setLanguagePack","isLoadingLanguagePack","setIsLoadingLanguagePack","isCancelled","nextPack","run","translated","fallbackEnglish","lines","_$memo","line","_tmpl$","isRtl","contextValue","nextLanguageTag","Provider","useTranslation","ModalContext","ModalRoot","onClose","useSession","session","status","setStatus","handleStateChange","handshakeParameters","useSessionStart","currentSettings","UnknownState","uri","console","error","_el$","_el$2","firstChild","_el$4","nextSibling","_el$6","_$insert","JSON","stringify","chCodes","assertNumber","validateVersion","ver","bin","dec","pad","mod","fillArr","val","popcnt","interleaveBytes","blocks","maxLen","totalLen","block","idx","best","bestScore","score","alphabet","char","input","letter","digits","transpose32","masks","stage","step","i0","i1","bitMask","rangeMask","shift","Bitmap","size","__publicField","height","width","row","limit","rows","offset","wi","mask","x0","y0","words","startWord","endWord","startBit","endBit","ry","rowBase","cb","yPos","Py","xPos","bitX","bit","word","bitsPerWord","defWord","valWord","border","src","srcStride","srcValue","srcRow","dstX","dstWord","dstBit","srcWord","srcBit","w0","w1","sVal","dstMask","valBits","rect","cur","dst","dstStride","dstValue","dstDefined","dstTail","tmpV","tmpD","by","bx","dstY","dstPos","curMask","factor","tailMask","fullWords","patternLen","patterns","count","window","bitEnd","runLen","runValue","base0","base1","validLast","boxes","a0","eqV","n0","eqH0","n1","eqH1","nl","first","second","cc","reset","whiteBG","darkBG","optimize","pathData","prevPoint","point","relM","bH","u16le","dims","bytes","fullChunks","isRGB","ECMode","Encoding","BYTES","WORDS_PER_BLOCK","ECC_BLOCKS","info","last","distance","interval","ecc","maskIdx","type","numBlocks","blockLen","shortBlocks","PATTERNS","_x","_y","GF","p_poly","exp","log","poly","degree","coefficient","coefficients","scalar","smaller","larger","sumDiff","lengthDiff","divisor","elm","rLast","tLast","rLastLast","tLastLast","q","dltInverse","degreeDiff","scale","sigmaTildeAtZero","inverse","RS","eccWords","from","pol","to","syndrome","hasError","evl","monomial","errorLocator","errorEvaluator","locations","pos","xiInverse","denominator","interleave","total","rs","eccBlocks","isShort","resBlocks","resECC","drawTemplate","test","finder","align","alignPos","bits","getBit","zigzag","tpl","bm","pattern","dir","xOffset","detectType","str","utf8ToBytes","encode","encoder","encoded","dataLen","utf8","capacity","padding","drawQR","need","mkPattern","finderPattern","lightPattern","P1","P2","penalty","transposed","adjacent","box","darkPixels","dark","drawQRBest","bestMask","validateECC","ec","validateEncoding","enc","validateMask","encodeQR","text","output","opts","_opts","encoding","copyToClipboard","textArea","generateQRCode","uriValue","HandshakeOpen","handleCopy","sessionUri","_el$3","_el$5","when","_el$7","_tmpl$2","_el$8","$$click","_$effect","_p$","_v$","_v$2","_$setAttribute","innerHTML","_$delegateEvents","LoadingSpinner","Connecting","_tmpl$3","CREATED","SIGNALING","includes","READY","LINKING","_el$9","_el$0","ErrorScreen","reason","getState","isIceFailure","message","retry","closeSession","_$addEventListener","ConnectionFlow","providerStatus","setProviderStatus","peerInfo","getSession","renderableIcon","icon","CREATING","CONNECTING","CONNECTED","_tmpl$4","_el$10","_tmpl$5","_el$11","_tmpl$6","_el$13","_tmpl$7","ERROR","defaultAttributes","xmlns","viewBox","fill","stroke","defaultAttributes_default","Icon","localProps","rest","_$spread","color","absoluteStrokeWidth","Number","strokeWidth","mergeClasses","toKebabCase","toPascalCase","class","hasA11yProp","each","iconNode","elementName","attrs","Icon_default","ChevronLeft","chevron_left_default","ChevronRight","chevron_right_default","cx","cy","CircleQuestionMark","circle_question_mark_default","Plus","plus_default","rx","QrCode","qr_code_default","Settings","settings_default","Trash2","trash_2_default","X","x_default","SPACE_REGEX","removeExtraSpaces","classnames","buildClassString","falsyToString","isEmptyObject","obj","isEqual","obj1","obj2","keys1","keys2","joinObjects","val2","flat","arr","flatMergeArrays","arrays","filtered","mergeObjects","val1","defaultConfig","createState","cachedTwMerge","cachedTwMergeConfig","didTwMergeConfigChange","getTailwindVariants","cn","tv","configProp","extend","slotProps","variantsProps","compoundVariantsProps","compoundSlots","defaultVariantsProps","variants","defaultVariants","isExtendedSlotsEmpty","componentSlots","slots","compoundVariants","getVariantValue","vrs","_slotKey","slotProps2","variantObj","variantProp","variantKey","defaultVariantProp","getVariantClassNames","getVariantClassNamesBySlotKey","slotKey","variantValue","propsWithoutUndefined","getCompleteProps","initialProp","getCompoundVariantsValue","cv","cvLength","tvClass","tvClassName","compoundVariantOptions","isValid","completeProps","completePropsValue","getCompoundVariantClassNamesBySlot","compoundClassNames","cnFn","slot","getCompoundSlotClassNameBySlot","slots2","slotClass","slotClassName","slotVariants","slotVariantValue","slotName","slotsFns","compoundVariantClasses","compoundSlotClasses","getVariantKeys","cnAdapter","_config","styles","$variant","secondary","tertiary","$size","sm","md","lg","$aspect","square","auto","Button","rawProperties","local","href","onClick","dotCount","isApple","TabletGraphic","PhoneGraphic","ConnectionGraphic","_el$1","Disconnected","onSettings","LucideSettings","InfoScreen","LucideQrCode","usePunchTransition","duration","readValue","initialValue","setCurrent","previous","setPrevious","timeoutReference","lastValueReference","useSettings","settings","setLocalSettings","setSettings","newSettings","themeMode","retain","autoReconnect","useTheme","OPENLV_ICON_128","FooterStatus","sessionStatus","sessionState","signalState","signaling","otherwise","resolved","Footer","Header","_c$","onBack","view","LucideChevronLeft","setView","LucideCircleQuestionMark","title","LucideX","useNavigationStack","initialScreen","transitionDuration","stack","setStack","setIndex","screen","isTransitioning","nextScreen","activeIndex","activeStack","currentScreen","nextStack","currentIndex","TransitionContainer","_$className","MenuGroup","right","MenuItem","label","buttonGroupStyles","active","dropdownStyles","Select","dropdown","dropdownThreshold","slug","onChange","currentTarget","ThemeSettings","isUserConfigurable","userThemeMode","updateThemePreference","LanguageSettings","setLanguage","sortedLanguages","sort","scoreA","handleLanguageChange","newLang","lang","popover","InfoTooltip","_v$3","MenuLink","LucideChevronRight","Toggle","ConnectionPreferences","setRetainSessionHistory","setAutoReconnect","onNavigate","retainHistory","Input","merged","readOnly","$$input","placeholder","ariaLabel","_v$4","AVAILABLE_PROTOCOLS","SignalingSettings","setSignalingProtocol","setSignalingOptions","signalingProtocol","signalingServer","activeProtocol","option","toUpperCase","url","ServerListItem","onRemove","LucideTrash2","AddServerButton","LucidePlus","TransportSettings","turnServers","setTurnServers","stunServers","setStunServers","handleAddStun","handleRemoveStun","index_","handleStunChange","server","handleAddTurn","urls","handleRemoveTurn","handleTurnChange","field","username","credential","getSettingsTitleKey","ModalSettings","previousScreen","navigate","goBack","isAtRoot","internalReference","navigationRef","onTitleChange","renderScreen","useModalState","copied","setCopied","timeout","setTimeout","clearTimeout","useEscapeToClose","keyHandler","useDynamicDialogHeight","contentNode","setContentNode","setHeight","measureHeight","targetElement","useScrollHeight","getBoundingClientRect","nextHeight","scrollHeight","previousHeight","Math","abs","ResizeObserver","observer","observe","disconnect","handleResize","setContentRef","modalView","displayedModalView","previousModalView","isModalViewTransitioning","displayedStatus","previousStatus","isStatusTransitioning","openSettings","settingsNavReference","settingsTitleKey","setSettingsTitleKey","isInitialMount","initialMeasureTimeout","overflowTimeout","shouldHideOverflow","setShouldHideOverflow","currentHeight","shouldShowBack","STANDBY","renderDisconnectedView","targetView","renderDisconnectedSection","previousView","renderStatusSection","targetStatus","union","onCopy","overlayStyle","cardStyle","$$mouseup","_$style","stopPropagation","_$use","_v$5","_v$6","_v$7","_v$8","registerOpenLVModal","registry","OpenLVModalElementDefault","triggerOpenModal","modal"],"mappings":"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","x_google_ignoreList":[0,1,3,4,7,15,21,22,23,24,25,26,27,28,29,30,31,32,33]}
|