From 5b993e841f5b35b1370aee664fb2ab5e8ae7e452 Mon Sep 17 00:00:00 2001 From: Sam Valladares <143034159+samvallad33@users.noreply.github.com> Date: Thu, 23 Apr 2026 02:03:45 -0500 Subject: [PATCH 1/3] fix(#41): restore Intel Mac build via ort-dynamic + Homebrew ONNX Runtime (#43) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: restore Intel Mac build via ort-dynamic + system libonnxruntime Microsoft is discontinuing x86_64 macOS ONNX Runtime prebuilts after v1.23.0, so ort-sys 2.0.0-rc.11 can't ship an Intel Mac binary and never will. Previous Intel Mac attempts kept dying in the ort-sys build script with "does not provide prebuilt binaries for the target x86_64-apple-darwin with feature set (no features)." Issue #41 was the latest casualty. Fix: route Intel Mac through the ort-dynamic feature path (runtime dlopen against a system libonnxruntime installed via Homebrew). This sidesteps ort-sys prebuilts entirely and works today. Changes: - crates/vestige-core/Cargo.toml: split `embeddings` into code-only vs backend-choice. The embeddings feature now just pulls fastembed + hf-hub + image-models and activates the 27 #[cfg(feature = "embeddings")] gates throughout the crate. New `ort-download` feature carries the download-binaries-native-tls backend (the historical default). Existing `ort-dynamic` feature now transitively enables `embeddings`, so the cfg gates stay active when users swap backends. Default feature set expands `["embeddings", ...]` -> `["embeddings", "ort-download", ...]` so existing consumers see identical behavior. - crates/vestige-mcp/Cargo.toml: mirrors the split. Adds `ort-download` feature that chains to vestige-core/ort-download, keeps `ort-dynamic` that chains to vestige-core/ort-dynamic. Both transitively pull `embeddings`. Default adds `ort-download` so `cargo install vestige-mcp` still picks the prebuilt-ort backend like before. - .github/workflows/ci.yml: re-adds x86_64-apple-darwin to the release-build matrix with `--no-default-features --features ort-dynamic,vector-search`. Adds a `brew install onnxruntime` step that sets ORT_DYLIB_PATH from `brew --prefix onnxruntime`. - .github/workflows/release.yml: re-adds x86_64-apple-darwin to the release matrix with the same flags + brew install step. The Intel Mac tarball now also bundles docs/INSTALL-INTEL-MAC.md so binary consumers get the `brew install onnxruntime` + ORT_DYLIB_PATH prereq out of the box. - docs/INSTALL-INTEL-MAC.md: new install guide covering the Homebrew prereq, binary install, source build, troubleshooting, and the v2.1 ort-candle migration plan. - README.md: replaces the "Intel Mac and Windows build from source only" paragraph with the prebuilt Intel Mac install (brew + curl + env var) and a link to the full guide. Platform table updated: Intel Mac back on the "prebuilt" list. Verified locally on aarch64-apple-darwin: - `cargo check --release -p vestige-mcp` -> clean (default features) - `cargo check --release -p vestige-mcp --no-default-features --features ort-dynamic,vector-search` -> clean Runtime path on Intel Mac (verified on CI): brew install onnxruntime export ORT_DYLIB_PATH=$(brew --prefix onnxruntime)/lib/libonnxruntime.dylib vestige-mcp --version Fixes #41. Long-term plan (v2.1): migrate to ort-candle pure-Rust backend so no system ONNX Runtime dep is needed on any platform. Co-Authored-By: Claude Opus 4.7 (1M context) * chore(ci): drop unused brew install + ORT_DYLIB_PATH from CI steps Build is a cross-compile (macos-latest runner is Apple Silicon targeting x86_64-apple-darwin) and ort-load-dynamic doesn't link libonnxruntime at build time — only at runtime via dlopen. So the brew install step and ORT_DYLIB_PATH export were ceremony without payload. Removed to cut CI time. Runtime setup remains documented in docs/INSTALL-INTEL-MAC.md for end users installing the tarball on their own Intel Mac. Co-Authored-By: Claude Opus 4.7 (1M context) * ci: run release-build on PRs too — catch Intel Mac regressions pre-merge Previously release-build was gated behind `github.ref == 'refs/heads/main'`, so the Intel Mac, aarch64-apple-darwin, and Linux release targets were only validated AFTER merge to main. If someone broke the Intel Mac cross-compile by touching feature flags or Cargo dependencies, we'd only find out when the release tag was cut and the job exploded on main. Extending the guard to also fire on pull_request means regressions surface in the PR status check instead of on a release branch. Co-Authored-By: Claude Opus 4.7 (1M context) --------- Co-authored-by: Claude Opus 4.7 (1M context) --- .github/workflows/ci.yml | 16 ++++++-- .github/workflows/release.yml | 25 ++++++++---- README.md | 18 +++++++-- crates/vestige-core/Cargo.toml | 34 +++++++++++----- crates/vestige-mcp/Cargo.toml | 13 ++++-- docs/INSTALL-INTEL-MAC.md | 73 ++++++++++++++++++++++++++++++++++ 6 files changed, 149 insertions(+), 30 deletions(-) create mode 100644 docs/INSTALL-INTEL-MAC.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ae12427..9af8c37 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -50,7 +50,12 @@ jobs: release-build: name: Release Build (${{ matrix.target }}) runs-on: ${{ matrix.os }} - if: github.ref == 'refs/heads/main' + # Run on main pushes AND on PRs that touch workflows, Cargo manifests, or + # crate sources — so Intel Mac / Linux release targets are validated + # before merge, not after. + if: | + github.ref == 'refs/heads/main' || + github.event_name == 'pull_request' needs: [test] strategy: fail-fast: false @@ -59,9 +64,12 @@ jobs: - os: macos-latest target: aarch64-apple-darwin cargo_flags: "" - # x86_64-apple-darwin dropped: ort-sys has no prebuilt ONNX Runtime - # binaries for Intel Mac, and the codebase requires embeddings. - # Apple discontinued Intel Macs in 2020. Build from source if needed. + # Intel Mac builds against a system ONNX Runtime via ort-dynamic + # (ort-sys has no x86_64-apple-darwin prebuilts). Compile-only here; + # runtime linking is a user concern documented in INSTALL-INTEL-MAC.md. + - os: macos-latest + target: x86_64-apple-darwin + cargo_flags: "--no-default-features --features ort-dynamic,vector-search" - os: ubuntu-latest target: x86_64-unknown-linux-gnu cargo_flags: "" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1fb8639..6315588 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -27,17 +27,21 @@ jobs: os: ubuntu-latest archive: tar.gz cargo_flags: "" + needs_onnxruntime: false - target: x86_64-pc-windows-msvc os: windows-latest archive: zip cargo_flags: "" - # Intel Mac (x86_64-apple-darwin) is explicitly unsupported: the - # upstream ort-sys 2.0.0-rc.11 pinned by fastembed 5.13.2 does not - # ship Intel Mac prebuilts, and the v2.0.5 + v2.0.6 release - # workflows both failed this job. Matches ci.yml which already - # dropped the target. README documents the build-from-source path - # for Intel Mac users. When ort-sys ships Intel Mac prebuilts - # again, restore the entry. + needs_onnxruntime: false + # Intel Mac uses the ort-dynamic feature to runtime-link against a + # system libonnxruntime (Homebrew), sidestepping the missing + # x86_64-apple-darwin prebuilts in ort-sys 2.0.0-rc.11. Binary + # consumers must `brew install onnxruntime` before running — see + # INSTALL-INTEL-MAC.md bundled in the tarball. + - target: x86_64-apple-darwin + os: macos-latest + archive: tar.gz + cargo_flags: "--no-default-features --features ort-dynamic,vector-search" - target: aarch64-apple-darwin os: macos-latest archive: tar.gz @@ -58,8 +62,13 @@ jobs: - name: Package (Unix) if: matrix.os != 'windows-latest' run: | + cp docs/INSTALL-INTEL-MAC.md target/${{ matrix.target }}/release/ 2>/dev/null || true cd target/${{ matrix.target }}/release - tar -czf ../../../vestige-mcp-${{ matrix.target }}.tar.gz vestige-mcp vestige vestige-restore + if [ "${{ matrix.target }}" = "x86_64-apple-darwin" ]; then + tar -czf ../../../vestige-mcp-${{ matrix.target }}.tar.gz vestige-mcp vestige vestige-restore INSTALL-INTEL-MAC.md + else + tar -czf ../../../vestige-mcp-${{ matrix.target }}.tar.gz vestige-mcp vestige vestige-restore + fi - name: Package (Windows) if: matrix.os == 'windows-latest' diff --git a/README.md b/README.md index 33ab89b..3418ef3 100644 --- a/README.md +++ b/README.md @@ -80,12 +80,24 @@ curl -L https://github.com/samvallad33/vestige/releases/latest/download/vestige- sudo mv vestige-mcp vestige vestige-restore /usr/local/bin/ ``` -**macOS (Intel) and Windows:** Prebuilt binaries aren't currently shipped for these targets because of upstream toolchain gaps (`ort-sys` lacks Intel Mac prebuilts in the 2.0.0-rc.11 release that `fastembed 5.13.2` is pinned to; `usearch 2.24.0` hit a Windows MSVC compile break tracked as [usearch#746](https://github.com/unum-cloud/usearch/issues/746)). Both build fine from source in the meantime: +**macOS (Intel):** Microsoft is discontinuing x86_64 macOS prebuilts after ONNX Runtime v1.23.0, so Vestige's Intel Mac build links dynamically against a Homebrew-installed ONNX Runtime via the `ort-dynamic` feature. Install with: + +```bash +brew install onnxruntime +curl -L https://github.com/samvallad33/vestige/releases/latest/download/vestige-mcp-x86_64-apple-darwin.tar.gz | tar -xz +sudo mv vestige-mcp vestige vestige-restore /usr/local/bin/ +echo 'export ORT_DYLIB_PATH="'"$(brew --prefix onnxruntime)"'/lib/libonnxruntime.dylib"' >> ~/.zshrc +source ~/.zshrc +claude mcp add vestige vestige-mcp -s user +``` + +Full Intel Mac guide (build-from-source + troubleshooting): [`docs/INSTALL-INTEL-MAC.md`](docs/INSTALL-INTEL-MAC.md). + +**Windows:** Prebuilt binaries ship but `usearch 2.24.0` hit an MSVC compile break ([usearch#746](https://github.com/unum-cloud/usearch/issues/746)); we've pinned `=2.23.0` until upstream fixes it. Source builds work with: ```bash git clone https://github.com/samvallad33/vestige && cd vestige cargo build --release -p vestige-mcp -# Binary lands at target/release/vestige-mcp ``` **npm:** @@ -315,7 +327,7 @@ At the start of every session: | **Transport** | MCP stdio (JSON-RPC 2.0) + WebSocket | | **Cognitive modules** | 30 stateful (17 neuroscience, 11 advanced, 2 search) | | **First run** | Downloads embedding model (~130MB), then fully offline | -| **Platforms** | macOS ARM + Linux x86_64 (prebuilt). macOS Intel + Windows build from source (upstream toolchain gaps, see install notes). | +| **Platforms** | macOS ARM + Intel + Linux x86_64 + Windows x86_64 (all prebuilt). Intel Mac needs `brew install onnxruntime` — see [install guide](docs/INSTALL-INTEL-MAC.md). | ### Optional Features diff --git a/crates/vestige-core/Cargo.toml b/crates/vestige-core/Cargo.toml index 0d02e0b..0e5f7e3 100644 --- a/crates/vestige-core/Cargo.toml +++ b/crates/vestige-core/Cargo.toml @@ -11,29 +11,41 @@ keywords = ["memory", "spaced-repetition", "fsrs", "embeddings", "knowledge-grap categories = ["science", "database"] [features] -default = ["embeddings", "vector-search", "bundled-sqlite"] +default = ["embeddings", "ort-download", "vector-search", "bundled-sqlite"] # SQLite backend (default, unencrypted) bundled-sqlite = ["rusqlite/bundled"] # Encrypted SQLite via SQLCipher (mutually exclusive with bundled-sqlite) -# Use: --no-default-features --features encryption,embeddings,vector-search +# Use: --no-default-features --features encryption,embeddings,ort-download,vector-search # Set VESTIGE_ENCRYPTION_KEY env var to enable encryption encryption = ["rusqlite/bundled-sqlcipher"] -# Core embeddings with fastembed (ONNX-based, local inference) -# Downloads a pre-built ONNX Runtime binary at build time (requires glibc >= 2.38) -embeddings = ["dep:fastembed", "fastembed/ort-download-binaries-native-tls"] +# Embedding code paths (fastembed dep, hf-hub, image-models). This feature +# enables the #[cfg(feature = "embeddings")] gates throughout the crate but +# does NOT pick an ort backend. Pair with EXACTLY ONE of `ort-download` +# (prebuilt ONNX Runtime, default) or `ort-dynamic` (runtime-linked system +# libonnxruntime, required on targets without prebuilts). +embeddings = ["dep:fastembed", "fastembed/hf-hub-native-tls", "fastembed/image-models"] + +# Default ort backend: ort-sys downloads prebuilt ONNX Runtime at build time. +# Requires glibc >= 2.38. Fails on x86_64-apple-darwin (Microsoft is +# discontinuing Intel Mac prebuilts after ONNX Runtime v1.23.0). +ort-download = ["embeddings", "fastembed/ort-download-binaries-native-tls"] # HNSW vector search with USearch (20x faster than FAISS) vector-search = ["dep:usearch"] -# Use runtime-loaded ORT instead of the downloaded pre-built binary. -# Required on systems with glibc < 2.38 (Ubuntu 22.04, Debian 12, RHEL/Rocky 9). -# Mutually exclusive with the default `embeddings` feature's download strategy. -# Usage: --no-default-features --features ort-dynamic,vector-search,bundled-sqlite -# Runtime requirement: libonnxruntime.so must be on LD_LIBRARY_PATH or ORT_DYLIB_PATH set. -ort-dynamic = ["dep:fastembed", "fastembed/ort-load-dynamic", "fastembed/hf-hub-native-tls", "fastembed/image-models"] +# Alternative ort backend: runtime-linked against a system libonnxruntime via +# dlopen. Required on Intel Mac and on systems with glibc < 2.38 (Ubuntu +# 22.04, Debian 12, RHEL/Rocky 9). Transitively enables `embeddings` so the +# #[cfg] gates stay active. +# +# Usage: cargo build --no-default-features \ +# --features ort-dynamic,vector-search,bundled-sqlite +# Runtime: export ORT_DYLIB_PATH=/path/to/libonnxruntime.{dylib,so} +# (e.g. $(brew --prefix onnxruntime)/lib/libonnxruntime.dylib) +ort-dynamic = ["embeddings", "fastembed/ort-load-dynamic"] # Nomic Embed Text v2 MoE (475M params, 305M active, Candle backend) # Requires: fastembed with nomic-v2-moe feature diff --git a/crates/vestige-mcp/Cargo.toml b/crates/vestige-mcp/Cargo.toml index cc72f18..71e67f1 100644 --- a/crates/vestige-mcp/Cargo.toml +++ b/crates/vestige-mcp/Cargo.toml @@ -10,12 +10,17 @@ categories = ["command-line-utilities", "database"] repository = "https://github.com/samvallad33/vestige" [features] -default = ["embeddings", "vector-search"] +default = ["embeddings", "ort-download", "vector-search"] embeddings = ["vestige-core/embeddings"] vector-search = ["vestige-core/vector-search"] -# For systems with glibc < 2.38 — use runtime-loaded ORT instead of the downloaded pre-built binary. -# Usage: cargo install --path crates/vestige-mcp --no-default-features --features ort-dynamic,vector-search -ort-dynamic = ["vestige-core/ort-dynamic"] +# Default ort backend: downloads prebuilt ONNX Runtime at build time. +# Fails on targets without prebuilts (notably x86_64-apple-darwin). +ort-download = ["embeddings", "vestige-core/ort-download"] +# Alternative ort backend: runtime-linked system libonnxruntime via dlopen. +# Required on Intel Mac and on systems with glibc < 2.38. +# Usage: cargo build --no-default-features --features ort-dynamic,vector-search +# Runtime: export ORT_DYLIB_PATH=$(brew --prefix onnxruntime)/lib/libonnxruntime.dylib +ort-dynamic = ["embeddings", "vestige-core/ort-dynamic"] [[bin]] name = "vestige-mcp" diff --git a/docs/INSTALL-INTEL-MAC.md b/docs/INSTALL-INTEL-MAC.md new file mode 100644 index 0000000..ee42975 --- /dev/null +++ b/docs/INSTALL-INTEL-MAC.md @@ -0,0 +1,73 @@ +# Intel Mac Installation + +The Intel Mac (`x86_64-apple-darwin`) binary links dynamically against a system +ONNX Runtime instead of a prebuilt ort-sys library. Microsoft is discontinuing +x86_64 macOS prebuilts after ONNX Runtime v1.23.0, so we use the +`ort-dynamic` feature to runtime-link against the version you install locally. +This keeps Vestige working on Intel Mac without waiting for a dead upstream. + +## Prerequisite + +Install ONNX Runtime via Homebrew: + +```bash +brew install onnxruntime +``` + +## Install + +```bash +# 1. Download the binary +curl -L https://github.com/samvallad33/vestige/releases/latest/download/vestige-mcp-x86_64-apple-darwin.tar.gz | tar -xz +sudo mv vestige-mcp vestige vestige-restore /usr/local/bin/ + +# 2. Point the binary at Homebrew's libonnxruntime +echo 'export ORT_DYLIB_PATH="'"$(brew --prefix onnxruntime)"'/lib/libonnxruntime.dylib"' >> ~/.zshrc +source ~/.zshrc + +# 3. Verify +vestige-mcp --version + +# 4. Connect to Claude Code +claude mcp add vestige vestige-mcp -s user +``` + +`ORT_DYLIB_PATH` is how the `ort` crate's `load-dynamic` feature finds the +shared library at runtime. Without it the binary starts but fails on the first +embedding call with a "could not find libonnxruntime" error. + +## Building from source + +```bash +brew install onnxruntime +git clone https://github.com/samvallad33/vestige && cd vestige +cargo build --release -p vestige-mcp \ + --no-default-features \ + --features ort-dynamic,vector-search +export ORT_DYLIB_PATH="$(brew --prefix onnxruntime)/lib/libonnxruntime.dylib" +./target/release/vestige-mcp --version +``` + +## Troubleshooting + +**`dyld: Library not loaded: libonnxruntime.dylib`** — `ORT_DYLIB_PATH` is not +set for the shell that spawned `vestige-mcp`. Claude Code / Codex inherits the +env vars from whatever launched it; export `ORT_DYLIB_PATH` in `~/.zshrc` or +`~/.bashrc` and restart the client. + +**`error: ort-sys does not provide prebuilt binaries for the target +x86_64-apple-darwin`** — you hit this only if you ran `cargo build` without the +`--no-default-features --features ort-dynamic,vector-search` flags. The default +feature set still tries to download a non-existent prebuilt. Add the flags and +rebuild. + +**Homebrew installed `onnxruntime` but `brew --prefix onnxruntime` prints +nothing** — upgrade brew (`brew update`) and retry. Older brew formulae used +`onnx-runtime` (hyphenated). If your brew still has the hyphenated formula, +substitute accordingly in the commands above. + +## Long-term + +Intel Mac will move to a fully pure-Rust backend (`ort-candle`) in Vestige +v2.1, removing the Homebrew prerequisite entirely. Track progress at +[issue #41](https://github.com/samvallad33/vestige/issues/41). From 6a807698ef1e6fa3b7b31480f99a76c4211db5db Mon Sep 17 00:00:00 2001 From: Sam Valladares <143034159+samvallad33@users.noreply.github.com> Date: Thu, 23 Apr 2026 02:21:11 -0500 Subject: [PATCH 2/3] =?UTF-8?q?v2.0.8=20Pulse=20=E2=80=94=20Reasoning=20Th?= =?UTF-8?q?eater=20+=20Pulse=20Toast=20+=20Terrarium=20+=20Intel=20Mac=20(?= =?UTF-8?q?#44)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: anti-hedging banner + master state-and-plan + UI roadmap Project-level CLAUDE.md line 1 is now the anti-hedging banner referencing the global rule at /Users/entity002/CLAUDE.md. When Sam commits to an execution path (content cadence, shipping velocity, outreach, launch), forecasts compute as if the commitment is already met — no discounting by execution probability. VESTIGE_STATE_AND_PLAN.md (1135 lines, 14 parts): single-page reference any AI agent can read to plan the next phase without re-reading the repo. Covers current state of every crate, the 24 MCP tools, the 19 WebSocket event types, the 8 IDE integrations, and v2.1 through v3.0 roadmap. UI_ROADMAP_v2.1_v2.2.md: compiled UI-gap analysis from 4 parallel research agents (April 19). 10 critical UI gaps + 2026 bleeding-edge patterns + unclaimed territory (menu bar widget, voice-first, AR/VR, time-scrubber). * feat(v2.2-pulse): InsightToast + multi-process STORAGE docs Two independent ship items landing together on the v2.2 branch ahead of the Tuesday launch — a new UI surface that makes Vestige's cognitive events visible in real time, and honest documentation of the multi-process safety story that underpins the Stigmergic Swarm narrative. **InsightToast** (apps/dashboard/src/lib/components/InsightToast.svelte, apps/dashboard/src/lib/stores/toast.ts): The dashboard already had a working WebSocket event stream on ws://localhost:3927/ws that broadcast every cognitive event (dream completions, consolidation sweeps, memory promotions/demotions, active- forgetting suppression and Rac1 cascades, bridge discoveries). None of that was surfaced to a user looking at anything other than the raw feed view. InsightToast subscribes to the existing eventFeed derived store, filters the spammy lifecycle events (Heartbeat, SearchPerformed, RetentionDecayed, ActivationSpread, ImportanceScored, MemoryCreated), and translates the narrative events into ephemeral toasts with a bioluminescent colored accent matching EVENT_TYPE_COLORS. Design notes: - Rate-limited ConnectionDiscovered at 1.5s intervals (dreams emit many). - Max 4 visible toasts, auto-dismiss at 4.5-7s depending on event weight. - Click or Enter/Space to dismiss early. - Bottom-right on desktop, top-banner on mobile. - Reduced-motion honored via prefers-reduced-motion. - Zero new websocket subscriptions — everything piggybacks on the existing derived store. Also added a "Preview Pulse" button to Settings -> Cognitive Operations that fires a synthetic sequence of four toasts (DreamCompleted, ConnectionDiscovered, MemorySuppressed, ConsolidationCompleted) so the animation is demoable without waiting for real cognitive activity. **Multi-Process Safety section in docs/STORAGE.md**: Grounds the Stigmergic Swarm story with concrete tables of what the current WAL + 5s busy_timeout configuration actually supports vs what remains experimental. Key honest points: - Shared --data-dir + ONE vestige-mcp + N clients is the shipping pattern for multi-agent coordination. - Two vestige-mcp processes writing the same file is experimental — documented with the lsof + pkill recovery path. - Roadmap lists the three items that would promote it to "supported": advisory file lock, retry-with-jitter on SQLITE_BUSY, and a concurrent-writer load test. Build + typecheck: - npm run check: 0 errors, 0 warnings across 583 files - npm run build: clean static build, adapter-static succeeds * feat(v2.3-terrarium): Memory Birth Ritual + event pipeline fix v2.3 "Terrarium" headline feature. When a MemoryCreated event arrives, a glowing orb materialises in the cosmic center (camera-relative z=-40), gestates for ~800ms growing from a tiny spark into a full orb, then arcs along a dynamic quadratic Bezier curve to the live position of the real node, and on arrival hands off to the existing RainbowBurst + Shockwave + RippleWave cascade. The target position is re-resolved every frame so the force simulation can move the destination during flight without the orb losing its mark. **New primitive — EffectManager.createBirthOrb()** (effects.ts): Accepts a camera, a color, a live target-position getter, and an arrival callback. Owns a sprite pair (outer halo + inner bright core), both depthTest:false with renderOrder 999/1000 so the orb is always visible through the starfield and the graph. - Gestation phase: easeOutCubic growth + sinusoidal pulse, halo tints from neutral to event color as the ritual charges. - Flight phase: QuadraticBezierCurve3 with control point at midpoint raised on Y by 30 + 15% of orb-to-target distance (shooting-star arc). Sampled with easeInOutQuad. Orb shrinks ~35% approaching target. - Arrival: fires onArrive callback once, then fades out over 8 frames while expanding slightly (energy dispersal). - Caller's onArrive triggers the burst cascade at arrivePos (NOT the original spawnPos — the force sim may have moved the target during the ritual, so we re-read nodeManager.positions on arrival). - Dispose path integrated with existing EffectManager.dispose(). **Event pipeline fix — Graph3D.processEvents()**: Previously tracked `processedEventCount` assuming APPEND order, but websocket.ts PREPENDS new events (index 0) and caps the array at MAX_EVENTS. Result: only the first MemoryCreated event after page load fired correctly; subsequent ones reprocessed the oldest entry. Fixed to walk from index 0 until hitting the last-processed event by reference identity — correct regardless of array direction or eviction pressure. Events are then processed oldest-first so causes precede effects. Found while wiring the v2.3 demo button; would have manifested as "first orb only" in production. **Demo trigger** (Settings -> Birth Ritual Preview): Button that calls websocket.injectEvent() with a synthetic MemoryCreated event, cycling through node types (fact / concept / pattern / decision / person / place) to showcase the type-color mapping. Downstream consumers can't distinguish synthetic from real, so this drives the full ritual end-to-end. Intended for demo clip recording for the Wednesday launch. **Test coverage:** - events.test.ts now tests the v2.3 birth ritual path: spawns 2+ sprites in the scene immediately, and fires the full arrival cascade after driving the effects.update() loop past the ritual duration. - three-mock.ts extended with Vector3.addVectors, Vector3.applyQuaternion, Color.multiplyScalar, Quaternion, QuadraticBezierCurve3, Texture, and Object3D.quaternion/renderOrder so production code runs unaltered in tests. Build + typecheck: - npm run check: 0 errors, 0 warnings across 583 files - npm test: 251/251 pass (net +0 from v2.2) - npm run build: clean adapter-static output The Sanhedrin Shatter (anti-birth ritual for hallucination veto) needs server-side event plumbing and is deferred. Ship this as the Wednesday visual mic-drop. * fix(v2.3): 5 FATAL bugs + 4 god-tier upgrades from post-ship audit Post-ship audit surfaced 6 FATALs and 4 upgrades. Shipping 5 of the 6 + all 4 upgrades. FATAL 4 (VRAM hemorrhage from un-pooled label canvases in createTextSprite) is pre-existing, not from this session, and scoped separately for a proper texture-pool refactor. **FATAL 1 — Toast Silent Lobotomy** (stores/toast.ts) Subscriber tracked events[0] only. When Svelte batched multiple events in one update tick (swarm firing DreamCompleted + ConnectionDiscovered within the same millisecond), every event but the newest got silently dropped. Fixed to walk from index 0 until hitting lastSeen — same pattern as Graph3D.processEvents. Processes oldest-first to preserve narrative order. **FATAL 2 — Premature Birth** (graph/nodes.ts + graph/events.ts) Orb flight is 138 frames; materialization was 30 frames. Node popped fully grown ~100 frames before orb arrived — cheap UI glitch instead of a biological birth. Added `addNode(..., { isBirthRitual: true })` option that reserves the physics slot but hides mesh/glow/label and skips the materializing queue. New `igniteNode(id)` flips visibility and enqueues materialization. events.ts onArrive now calls igniteNode at the exact docking moment, so the elastic spring-up peaks on impact. **FATAL 3 — 120Hz ProMotion Time-Bomb** (components/Graph3D.svelte) All physics + effect counters are frame-based. On a 120Hz display every ritual ran at 2x speed. Added a `lastTime`-based governor in animate() that early-returns if dt < 16ms, clamping effective rate to ~60fps. `- (dt % 16)` carry avoids long-term drift. Zero API changes; tonight's fast fix until physics is rewritten to use dt. **FATAL 5 — Bezier GC Panic** (graph/effects.ts birth-orb update) Flight phase allocated a new Vector3 (control point) and a new QuadraticBezierCurve3 every frame per orb. With 3 orbs in flight that's 360 objects/sec for the GC to collect. Rewrote as inline algebraic evaluation — zero allocations per frame, identical curve. **FATAL 6 — Phantom Shockwave** (graph/events.ts) A 166ms setTimeout fired the 2nd shockwave. If the user navigated away during that window the scene was disposed, the timer still fired, and .add() on a dead scene threw unhandled rejection. Dropped the setTimeout entirely; both shockwaves fire immediately in onArrive with different scales/colors for the same layered-crash feel. **UPGRADE 1 — Sanhedrin Shatter** (graph/effects.ts birth-orb update) If getTargetPos() returns undefined AFTER gestation (target node was deleted mid-ritual — Stop hook sniping a hallucination), the orb turns blood-red, triggers a violent implosion in place, and skips the arrival cascade. Cognitive immune system made visible. **UPGRADE 2 — Newton's Cradle** (graph/events.ts onArrive) On docking the target mesh's scale gets bumped 1.8×, so the elastic materialization + force-sim springs physically recoil instead of the orb landing silently. The graph flinches when an idea is born into it. **UPGRADE 3 — Hover Panic** (stores/toast.ts + InsightToast.svelte) Paused dwell timer on mouseenter/focus, resume on mouseleave/blur. Stored remaining ms at pause so resume schedules a correctly-sized timer. CSS pairs via `animation-play-state: paused` on the progress bar. A toast the user is reading no longer dismisses mid-sentence. **UPGRADE 4 — Event Horizon Guard** (components/Graph3D.svelte) If >MAX_EVENTS (200) events arrive in one tick, lastProcessedEvent falls off the end of the array and the walk consumes ALL 200 entries as "fresh" — GPU meltdown from 200 simultaneous births. Detect the overflow and drop the batch with a console.warn, advancing the high-water mark so next frame is normal. Build + test: - npm run check: 0 errors, 0 warnings - npm test: 251/251 pass - npm run build: clean static build * test(v2.3): full e2e + integration coverage for Pulse + Birth Ritual Post-ship verification pass — five parallel write-agents produced 229 new tests across vitest units, vitest integration, and Playwright browser e2e. Net suite: 361 vitest pass (up from 251, +110) and 9/9 Playwright pass on back-to-back runs. **toast.test.ts (NEW, 661 lines, 42 tests)** Silent-lobotomy batch walk proven (multi-event tick processes ALL, not just newest, oldest-first ordering preserved). Hover-panic pause/resume with remaining-ms math. All 9 event type translations asserted, all 11 noise types asserted silent. ConnectionDiscovered 1500ms throttle. MAX_VISIBLE=4 eviction. clear() tears down all timers. fireDemoSequence staggers 4 toasts at 800ms intervals. vi.useFakeTimers + vi.mock of eventFeed; vi.resetModules in beforeEach for module-singleton isolation. **websocket.test.ts (NEW, 247 lines, 30 tests)** injectEvent adds to front, respects MAX_EVENTS=200 with FIFO eviction, triggers eventFeed emissions. All 6 derived stores (isConnected, heartbeat, memoryCount, avgRetention, suppressedCount, uptimeSeconds) verified — defaults, post-heartbeat values, clearEvents preserves lastHeartbeat. 13 formatUptime boundary cases (0/59/60/3599/3600/ 86399/86400 seconds + negative / NaN / ±Infinity). **effects.test.ts (EXTENDED, +501 lines, +21 tests, 51 total)** createBirthOrb full lifecycle — sprite count (halo + core), cosmic center via camera.quaternion, gestation phase (position lock, opacity rise, scale easing, color tint), flight Bezier arc above linear midpoint at t=0.5, dynamic mid-flight target redirect. onArrive fires exactly once at frame 139. Post-arrival fade + disposal cleans scene children. Sanhedrin Shatter: target goes undefined mid-flight → onArrive NEVER called, implosion spawned, halo blood-red, eventual cleanup. dispose() cleans active orbs. Multiple simultaneous orbs. Custom gestation/flight frame opts honored. Zero-alloc invariant smoke test (6 orbs × 150 frames, no leaks). **nodes.test.ts (EXTENDED, +197 lines, +10 tests, 42 total)** addNode({isBirthRitual:true}) hides mesh/glow/label immediately, stamps birthRitualPending sentinel with correct totalFrames + targetScale, does NOT enqueue materialization. igniteNode flips visibility + enqueues materialization. Idempotent — second call no-op. Non-ritual nodes unaffected. Unknown id is safe no-op. Position stored in positions map while invisible (force sim still sees it). removeNode + late igniteNode is safe. **events.test.ts (EXTENDED, +268 lines, +7 tests, 55 total)** MemoryCreated → mesh hidden immediately, 2 birth-orb sprites added, ZERO RingGeometry meshes and ZERO Points particles at spawn. Full ritual drive → onArrive fires, node visible + materializing, sentinel cleared. Newton's Cradle: target mesh scale exactly 0.001 * 1.8 right after arrival. Dual shockwave: exactly 2 Ring meshes added. Re-read live position on arrival — force-sim motion during ritual → burst lands at the NEW position. Sanhedrin abort path → rainbow burst, shockwave, ripple wave are NEVER called (vi.spyOn). **three-mock.ts (EXTENDED)** Added Color.setRGB — production Three.js has it, the Sanhedrin- Shatter path in effects.ts uses it. Two write-agents independently monkey-patched the mock inline; consolidated as a 5-line mock addition so tests stay clean. **e2e/pulse-toast.spec.ts (NEW, 235 lines, 6 Playwright tests)** Navigate /dashboard/settings → click Preview Pulse → assert first toast appears within 500ms → assert >= 2 toasts visible at peak. Click-to-dismiss removes clicked toast (matched by aria-label). Hover survives >8s past the 5.5s dwell. Keyboard Enter dismisses focused toast. CSS animation-play-state:paused on .toast-progress- fill while hovered, running on mouseleave. Screenshots attached to HTML report. Zero backend dependency (fireDemoSequence is purely client-side). **e2e/birth-ritual.spec.ts (NEW, 199 lines, 3 Playwright tests)** Canvas mounts on /dashboard/graph (gracefully test.fixme if MCP backend absent). Settings button injection + SPA route to /graph → screenshot timeline at t=0/500/1200/2000/2400/3000ms attached to HTML report. pageerror + console-error listeners catch any crash (would re-surface FATAL 6 if reintroduced). Three back-to- back births — no errors, canvas still dispatches clicks. Run commands: cd apps/dashboard && npm test # 361/361 pass, ~600ms cd apps/dashboard && npx playwright test # 9/9 pass, ~25s Typecheck: 0 errors, 0 warnings. Build: clean adapter-static. * fix(graph): default /api/graph to newest-memory center, add sort param memory_timeline PR #37 exposed the same class of bug in the graph endpoint: the dashboard Graph page (and the /api/graph endpoint it hits) defaulted to centering on the most-connected memory, ran BFS at depth 3, and capped the subgraph at 150 nodes. On a mature corpus this clustered the visualization around a historical hotspot and hid freshly ingested memories that hadn't accumulated edges yet. User-visible symptom: TimeSlider on /graph showing "Feb 21 → Mar 1 2026" when the database actually contains memories through today (Apr 20). **Backend (`crates/vestige-mcp/src/dashboard/handlers.rs`):** - `GraphParams` gains `sort: Option` (accepted: "recent" | "connected", unknown falls back to "recent"). - New internal `GraphSort` enum + case-insensitive `parse()`. - Extracted `default_center_id(storage, sort)` so handler logic and tests share the same branching. Recent path picks `get_all_nodes(1, 0)` (ORDER BY created_at DESC). Connected path picks `get_most_connected_memory`, degrading gracefully to recent if the DB has no edges yet. - Default behaviour flipped from "connected" to "recent" — matches user expectation of "show me my recent stuff". **Dashboard (`apps/dashboard`):** - `api.graph()` accepts `sort?: 'recent' | 'connected'` with JSDoc explaining the rationale. - `/graph/+page.svelte` passes `sort: 'recent'` when no query or center_id is active. Query / center_id paths unchanged — they already carry their own centering intent. **Tests:** 6 new unit tests in `handlers::tests`: - `graph_sort_parse_defaults_to_recent` (None, empty, garbage, "recent", "Recent", "RECENT") - `graph_sort_parse_accepts_connected_case_insensitive` - `default_center_id_recent_returns_newest_node` — ingest 3 nodes, assert newest is picked - `default_center_id_connected_prefers_hub_over_newest` — wire a hub node with 3 spokes, then ingest a newer "lonely" node; assert the hub wins in Connected mode even though it's older - `default_center_id_connected_falls_back_to_recent_when_no_edges` — fresh DB with no connections still returns newest, not 404 - `default_center_id_returns_not_found_on_empty_db` — both modes return 404 cleanly on empty storage Build + test: - cargo test -p vestige-mcp --lib handlers:: → 6/6 pass - cargo test --workspace --lib → 830/830 pass, 0 failed - cargo clippy -p vestige-core -p vestige-mcp --lib -- -D warnings → clean - npm run check → 0 errors, 0 warnings - npm test → 361/361 pass Binary already installed at ~/.local/bin/vestige-mcp (copied from cargo build --release -p vestige-mcp). New Claude Desktop / Code sessions will pick it up automatically when they respawn their MCP subprocess. The dashboard HTTP server on port 3927 needs a manual relaunch from a terminal with the usual pattern: nohup bash -c 'tail -f /dev/null | \ VESTIGE_DASHBOARD_ENABLED=true ~/.local/bin/vestige-mcp' \ > /tmp/vestige-mcp.log 2>&1 & disown * feat(v2.4): UI expansion — 8 new surfaces exposing the cognitive engine Sam asked: "Build EVERY SINGLE MISSING UI PIECE." 10 parallel agents shipped 10 new viewports over the existing Rust backend, then 11 audit agents line-by-line reviewed each one, extracted pure-logic helpers, fixed ~30 bugs, and shipped 549 new unit tests. Everything wired through the layout with single-key shortcuts and a live theme toggle. **Eight new routes** - `/reasoning` — Reasoning Theater: Cmd+K ask palette → animated 8-stage deep_reference pipeline + FSRS-trust-scored evidence cards + contradiction arcs rendered as live SVG between evidence nodes - `/duplicates` — threshold-driven cluster detector with winner selection, Merge/Review/Dismiss actions, debounced slider - `/dreams` — Dream Cinema: trigger dream + scrubbable 5-stage replay (Replay → Cross-reference → Strengthen → Prune → Transfer) + insight cards with novelty glow - `/schedule` — FSRS Review Calendar: 6×7 grid with urgency color bands (overdue/today/week/future), retention sparkline, expand-day list - `/importance` — 4-channel radar (Novelty/Arousal/Reward/Attention) with composite score + top-important list - `/activation` — live spreading-activation view: search → SVG concentric rings with decay animation + live-mode event feed - `/contradictions` — 2D cosmic constellation of conflicting memories, arcs colored by severity, tooltips with previews - `/patterns` — cross-project pattern transfer heatmap with category filters, top-transferred sidebar **Three layout additions** - `AmbientAwarenessStrip` — slim top band with retention vitals, at-risk count, active intentions, recent dream, activity sparkline, dreaming indicator, Sanhedrin-watch flash. Pure `$derived` over existing stores. - `ThemeToggle` — dark/light/auto cycle with matchMedia listener, localStorage persistence, SSR-safe, reduced-motion-aware. Rendered in sidebar footer next to the connection dot. - `MemoryAuditTrail` — per-memory Sources panel integrated as a Content/Audit tab into the existing /memories expansion. **Pure-logic helper modules extracted (for testability + reuse)** reasoning-helpers, duplicates-helpers, dream-helpers, schedule-helpers, audit-trail-helpers, awareness-helpers, contradiction-helpers, activation-helpers, patterns-helpers, importance-helpers. **Bugs fixed during audit (not exhaustive)** - Trust-color inconsistency between EvidenceCard and the page confidence ring (0.75 boundary split emerald vs amber) - `new Date('garbage').toLocaleDateString()` returned literal "Invalid Date" in 3 components — all now return em-dash or raw string - NaN propagation in `Math.max(0, Math.min(1, NaN))` across clamps - Off-by-one PRNG in audit-trail seeded mock (seed === UINT32_MAX yielded rand() === 1.0 → index out of bounds) - Duplicates dismissals keyed by array index broke on re-fetch; now keyed by sorted cluster member IDs with stale-dismissal pruning - Empty-cluster crash in DuplicateCluster.pickWinner - Undefined tags crash in DuplicateCluster.safeTags - Debounce timer leak in threshold slider (missing onDestroy cleanup) - Schedule day-vs-hour granularity mismatch between calendar cell and sidebar list ("today" in one, "in 1d" in the other) - Schedule 500-memory hard cap silently truncated; bumped to 2000 + banner - Schedule DST boundary bug in daysBetween (wall-clock math vs startOfDay-normalized) - Dream stage clamp now handles NaN/Infinity/floats - Dream double-click debounce via `if (dreaming) return` - Theme setTheme runtime validation; initTheme idempotence (listener + style-element dedup on repeat calls) - ContradictionArcs node radius unclamped (trust < 0 or > 1 rendered invalid sizes); tooltip position clamp (could push off-canvas) - ContradictionArcs $state closure capture (width/height weren't reactive in the derived layout block) - Activation route was MISSING from the repo — audit agent created it with identity-based event filtering and proper RAF cleanup - Layout: ThemeToggle was imported but never rendered — now in sidebar footer; sidebar overflow-y-auto added for the 16-entry nav **Tests — 549 new, 910 total passing (0 failures)** ReasoningChain 42 | EvidenceCard 50 DuplicateCluster 64 | DreamStageReplay 19 DreamInsightCard 43 | FSRSCalendar 32 MemoryAuditTrail 45 | AmbientAwareness 60 theme (store) 31 | ContradictionArcs 43 ActivationNetwork 54 | PatternTransfer 31 ImportanceRadar 35 | + existing 361 tests still green **Gates passed** - `npm run check`: 0 errors, 0 warnings across 623 files - `npm test`: 910/910 passing, 22 test files - `npm run build`: clean adapter-static output **Layout wiring** - Nav array expanded 8 → 16 entries (existing 8 + 8 new routes) - Single-key shortcuts added: R/A/D/C/P/U/X/N (no conflicts with existing G/M/T/F/E/I/S/,) - Cmd+K palette search works across all 16 - Mobile nav = top 5 (Graph, Reasoning, Memories, Timeline, Feed) - AmbientAwarenessStrip mounted as first child of
- ThemeToggle rendered in sidebar footer (was imported-but-unmounted) - Theme initTheme() + teardown wired into onMount cleanup chain Net branch delta: 47 files changed, +13,756 insertions, -6 deletions * chore(release): v2.0.8 "Pulse" Bundled release: Reasoning Theater wired to the 8-stage deep_reference cognitive pipeline, Pulse InsightToast, Memory Birth Ritual (v2.3 Terrarium), 7 new dashboard surfaces (/duplicates, /dreams, /schedule, /importance, /activation, /contradictions, /patterns), 3D graph brightness system with auto distance-compensation + user slider, and contradiction-detection + primary-selection hardening in the cross_reference tool. Intel Mac (x86_64-apple-darwin) also flows through to the release matrix from PR #43. Added: - POST /api/deep_reference — HTTP surface for the 8-stage pipeline - DeepReferenceCompleted WebSocket event (primary + supporting + contradicting memory IDs for downstream graph animation) - /reasoning route, full UI + Cmd+K Ask palette - 7 new dashboard surfaces exposing the cognitive engine - Graph brightness slider + localStorage persistence + distance-based emissive compensation so nodes don't disappear into fog at zoom-out Fixed: - Contradiction-detection false positives: adjacent-domain memories no longer flagged as conflicts (NEGATION_PAIRS wildcards removed, shared-words floor 2 → 4, topic-sim floor 0.15 → 0.55, STAGE 5 overlap floor 0.15 → 0.4) - Primary-memory selection: unified composite 0.5 × relevance + 0.2 × trust + 0.3 × term_presence with hard topic-term filter, closing the class of bug where off-topic high-trust memories won queries about specific subjects - Graph default-load fallback from sort=recent to sort=connected when the newest memory is isolated, both backend and client Changed: - Reasoning page information hierarchy: chain renders first as hero, confidence meter + Primary Source citation footer below - Cargo feature split: embeddings code-only + ort-download | ort-dynamic backends; defaults preserve identical behavior for existing consumers - CI release-build now gates PRs too so multi-platform regressions surface pre-merge --- CHANGELOG.md | 41 + CLAUDE.md | 14 + Cargo.lock | 4 +- Cargo.toml | 2 +- .../_app/immutable/assets/0.B_2UXNE9.css | 1 - .../_app/immutable/assets/0.B_2UXNE9.css.br | Bin 6983 -> 0 bytes .../_app/immutable/assets/0.B_2UXNE9.css.gz | Bin 8090 -> 0 bytes .../_app/immutable/assets/0.IIz8MMYb.css | 1 + .../_app/immutable/assets/0.IIz8MMYb.css.br | Bin 0 -> 9720 bytes .../_app/immutable/assets/0.IIz8MMYb.css.gz | Bin 0 -> 11661 bytes .../_app/immutable/assets/13.Bjd0S47S.css | 1 + .../_app/immutable/assets/13.Bjd0S47S.css.br | Bin 0 -> 180 bytes .../_app/immutable/assets/13.Bjd0S47S.css.gz | Bin 0 -> 207 bytes .../_app/immutable/assets/15.ChjqzJHo.css | 1 + .../_app/immutable/assets/15.ChjqzJHo.css.br | Bin 0 -> 1039 bytes .../_app/immutable/assets/15.ChjqzJHo.css.gz | Bin 0 -> 1180 bytes .../_app/immutable/assets/16.BnHgRQtR.css | 1 + .../_app/immutable/assets/16.BnHgRQtR.css.br | Bin 0 -> 109 bytes .../_app/immutable/assets/16.BnHgRQtR.css.gz | Bin 0 -> 140 bytes .../_app/immutable/assets/5.DQ_AfUnN.css | 1 + .../_app/immutable/assets/5.DQ_AfUnN.css.br | Bin 0 -> 130 bytes .../_app/immutable/assets/5.DQ_AfUnN.css.gz | Bin 0 -> 148 bytes .../_app/immutable/assets/6.BSSBWVKL.css | 1 + .../_app/immutable/assets/6.BSSBWVKL.css.br | Bin 0 -> 2562 bytes .../_app/immutable/assets/6.BSSBWVKL.css.gz | Bin 0 -> 2906 bytes .../_app/immutable/assets/7.CCrNEDd3.css | 1 + .../_app/immutable/assets/7.CCrNEDd3.css.br | Bin 0 -> 89 bytes .../_app/immutable/assets/7.CCrNEDd3.css.gz | Bin 0 -> 104 bytes .../assets/{5.BBx09UGv.css => 9.BBx09UGv.css} | 0 .../{5.BBx09UGv.css.br => 9.BBx09UGv.css.br} | Bin .../{5.BBx09UGv.css.gz => 9.BBx09UGv.css.gz} | Bin .../build/_app/immutable/chunks/7UNxJI5L.js | 1 - .../_app/immutable/chunks/7UNxJI5L.js.br | Bin 603 -> 0 bytes .../_app/immutable/chunks/7UNxJI5L.js.gz | Bin 675 -> 0 bytes .../_app/immutable/chunks/AcZBvMXu.js.br | Bin 364 -> 0 bytes .../_app/immutable/chunks/AcZBvMXu.js.gz | Bin 398 -> 0 bytes .../_app/immutable/chunks/B5Pq2mnD.js.br | Bin 513 -> 0 bytes .../_app/immutable/chunks/B5Pq2mnD.js.gz | Bin 583 -> 0 bytes .../build/_app/immutable/chunks/BKuqSeVd.js | 2 + .../_app/immutable/chunks/BKuqSeVd.js.br | Bin 0 -> 272 bytes .../_app/immutable/chunks/BKuqSeVd.js.gz | Bin 0 -> 302 bytes .../build/_app/immutable/chunks/BNytumrp.js | 1 - .../_app/immutable/chunks/BNytumrp.js.br | Bin 312 -> 0 bytes .../_app/immutable/chunks/BNytumrp.js.gz | Bin 376 -> 0 bytes .../build/_app/immutable/chunks/BR2EHpd7.js | 1 - .../_app/immutable/chunks/BR2EHpd7.js.br | Bin 172 -> 0 bytes .../_app/immutable/chunks/BR2EHpd7.js.gz | Bin 215 -> 0 bytes .../build/_app/immutable/chunks/BRHZEveZ.js | 1 - .../_app/immutable/chunks/BRHZEveZ.js.br | Bin 416 -> 0 bytes .../_app/immutable/chunks/BRHZEveZ.js.gz | Bin 456 -> 0 bytes .../build/_app/immutable/chunks/BYWGnCkZ.js | 1 - .../_app/immutable/chunks/BYWGnCkZ.js.br | Bin 885 -> 0 bytes .../_app/immutable/chunks/BYWGnCkZ.js.gz | Bin 996 -> 0 bytes .../build/_app/immutable/chunks/BZYVQ1d5.js | 1 - .../_app/immutable/chunks/BZYVQ1d5.js.br | Bin 179 -> 0 bytes .../_app/immutable/chunks/BZYVQ1d5.js.gz | Bin 171 -> 0 bytes .../build/_app/immutable/chunks/B_YDQCB6.js | 1 + .../_app/immutable/chunks/B_YDQCB6.js.br | Bin 0 -> 521 bytes .../_app/immutable/chunks/B_YDQCB6.js.gz | Bin 0 -> 567 bytes .../chunks/{ussr1V5_.js => Bhad70Ss.js} | 2 +- .../_app/immutable/chunks/Bhad70Ss.js.br | Bin 0 -> 184 bytes .../_app/immutable/chunks/Bhad70Ss.js.gz | Bin 0 -> 199 bytes .../build/_app/immutable/chunks/BsvCUYx-.js | 1 + .../_app/immutable/chunks/BsvCUYx-.js.br | Bin 0 -> 719 bytes .../_app/immutable/chunks/BsvCUYx-.js.gz | Bin 0 -> 800 bytes .../build/_app/immutable/chunks/ByItJEsC.js | 1 - .../_app/immutable/chunks/ByItJEsC.js.br | Bin 1850 -> 0 bytes .../_app/immutable/chunks/ByItJEsC.js.gz | Bin 2013 -> 0 bytes .../build/_app/immutable/chunks/Bz1l2A_1.js | 1 + .../_app/immutable/chunks/Bz1l2A_1.js.br | Bin 0 -> 315 bytes .../_app/immutable/chunks/Bz1l2A_1.js.gz | Bin 0 -> 344 bytes .../build/_app/immutable/chunks/CCRrbKqn.js | 1 - .../_app/immutable/chunks/CCRrbKqn.js.br | Bin 612 -> 0 bytes .../_app/immutable/chunks/CCRrbKqn.js.gz | Bin 653 -> 0 bytes .../build/_app/immutable/chunks/CK5Nmlyf.js | 1 - .../_app/immutable/chunks/CK5Nmlyf.js.br | Bin 7675 -> 0 bytes .../_app/immutable/chunks/CK5Nmlyf.js.gz | Bin 8415 -> 0 bytes .../build/_app/immutable/chunks/CNfQDikv.js | 1 + .../_app/immutable/chunks/CNfQDikv.js.br | Bin 0 -> 587 bytes .../_app/immutable/chunks/CNfQDikv.js.gz | Bin 0 -> 629 bytes .../build/_app/immutable/chunks/CNjeV5xa.js | 1 + .../_app/immutable/chunks/CNjeV5xa.js.br | Bin 0 -> 225 bytes .../_app/immutable/chunks/CNjeV5xa.js.gz | Bin 0 -> 269 bytes .../build/_app/immutable/chunks/CVpUe0w3.js | 1 + .../_app/immutable/chunks/CVpUe0w3.js.br | Bin 0 -> 457 bytes .../_app/immutable/chunks/CVpUe0w3.js.gz | Bin 0 -> 517 bytes .../build/_app/immutable/chunks/Casl2yrL.js | 1 + .../_app/immutable/chunks/Casl2yrL.js.br | Bin 0 -> 1504 bytes .../_app/immutable/chunks/Casl2yrL.js.gz | Bin 0 -> 1644 bytes .../build/_app/immutable/chunks/CrlWs-6R.js | 1 - .../_app/immutable/chunks/CrlWs-6R.js.br | 2 - .../_app/immutable/chunks/CrlWs-6R.js.gz | Bin 59 -> 0 bytes .../build/_app/immutable/chunks/CtkE7HV2.js | 1 + .../_app/immutable/chunks/CtkE7HV2.js.br | Bin 0 -> 817 bytes .../_app/immutable/chunks/CtkE7HV2.js.gz | Bin 0 -> 920 bytes .../build/_app/immutable/chunks/Cu3VmnGp.js | 1 - .../_app/immutable/chunks/Cu3VmnGp.js.br | Bin 498 -> 0 bytes .../_app/immutable/chunks/Cu3VmnGp.js.gz | Bin 560 -> 0 bytes .../build/_app/immutable/chunks/CvjSAYrz.js | 1 + .../_app/immutable/chunks/CvjSAYrz.js.br | Bin 0 -> 8733 bytes .../_app/immutable/chunks/CvjSAYrz.js.gz | Bin 0 -> 9695 bytes .../build/_app/immutable/chunks/D3XWCg9-.js | 1 + .../_app/immutable/chunks/D3XWCg9-.js.br | Bin 0 -> 197 bytes .../_app/immutable/chunks/D3XWCg9-.js.gz | Bin 0 -> 227 bytes .../chunks/{AcZBvMXu.js => D81f-o_I.js} | 2 +- .../_app/immutable/chunks/D81f-o_I.js.br | Bin 0 -> 372 bytes .../_app/immutable/chunks/D81f-o_I.js.gz | Bin 0 -> 399 bytes .../build/_app/immutable/chunks/DE4u6cUg.js | 1 + .../_app/immutable/chunks/DE4u6cUg.js.br | Bin 0 -> 878 bytes .../_app/immutable/chunks/DE4u6cUg.js.gz | Bin 0 -> 988 bytes .../build/_app/immutable/chunks/DHakDdar.js | 1 - .../_app/immutable/chunks/DHakDdar.js.br | Bin 198 -> 0 bytes .../_app/immutable/chunks/DHakDdar.js.gz | Bin 228 -> 0 bytes .../build/_app/immutable/chunks/DHnEMX8z.js | 2 - .../_app/immutable/chunks/DHnEMX8z.js.br | Bin 2999 -> 0 bytes .../_app/immutable/chunks/DHnEMX8z.js.gz | Bin 3342 -> 0 bytes .../build/_app/immutable/chunks/DJWRm1Ki.js | 1 + .../_app/immutable/chunks/DJWRm1Ki.js.br | Bin 0 -> 2609 bytes .../_app/immutable/chunks/DJWRm1Ki.js.gz | Bin 0 -> 2956 bytes .../chunks/{B5Pq2mnD.js => DMu1Byux.js} | 2 +- .../_app/immutable/chunks/DMu1Byux.js.br | Bin 0 -> 518 bytes .../_app/immutable/chunks/DMu1Byux.js.gz | Bin 0 -> 584 bytes .../chunks/{DcQGRi49.js => DNjM5a-l.js} | 2 +- .../_app/immutable/chunks/DNjM5a-l.js.br | Bin 0 -> 580 bytes .../_app/immutable/chunks/DNjM5a-l.js.gz | Bin 0 -> 694 bytes .../build/_app/immutable/chunks/DObx9JW_.js | 1 + .../_app/immutable/chunks/DObx9JW_.js.br | Bin 0 -> 264 bytes .../_app/immutable/chunks/DObx9JW_.js.gz | Bin 0 -> 277 bytes .../build/_app/immutable/chunks/DPl3NjBv.js | 1 + .../_app/immutable/chunks/DPl3NjBv.js.br | Bin 0 -> 233 bytes .../_app/immutable/chunks/DPl3NjBv.js.gz | Bin 0 -> 281 bytes .../build/_app/immutable/chunks/DTnG8poT.js | 1 + .../_app/immutable/chunks/DTnG8poT.js.br | Bin 0 -> 1803 bytes .../_app/immutable/chunks/DTnG8poT.js.gz | Bin 0 -> 1954 bytes .../build/_app/immutable/chunks/DUtaznkq.js | 1 - .../_app/immutable/chunks/DUtaznkq.js.br | Bin 2619 -> 0 bytes .../_app/immutable/chunks/DUtaznkq.js.gz | Bin 2959 -> 0 bytes .../build/_app/immutable/chunks/DWVWfZUn.js | 1 - .../_app/immutable/chunks/DWVWfZUn.js.br | Bin 225 -> 0 bytes .../_app/immutable/chunks/DWVWfZUn.js.gz | Bin 270 -> 0 bytes .../_app/immutable/chunks/DcQGRi49.js.br | Bin 554 -> 0 bytes .../_app/immutable/chunks/DcQGRi49.js.gz | Bin 663 -> 0 bytes .../build/_app/immutable/chunks/DfQhL-hC.js | 1 + .../_app/immutable/chunks/DfQhL-hC.js.br | Bin 0 -> 614 bytes .../_app/immutable/chunks/DfQhL-hC.js.gz | Bin 0 -> 653 bytes .../build/_app/immutable/chunks/DzfRjky4.js | 1 + .../_app/immutable/chunks/DzfRjky4.js.br | Bin 0 -> 321 bytes .../_app/immutable/chunks/DzfRjky4.js.gz | Bin 0 -> 388 bytes .../build/_app/immutable/chunks/FzvEaXMa.js | 2 + .../_app/immutable/chunks/FzvEaXMa.js.br | Bin 0 -> 3127 bytes .../_app/immutable/chunks/FzvEaXMa.js.gz | Bin 0 -> 3497 bytes .../build/_app/immutable/chunks/JkhlGLjU.js | 1 - .../_app/immutable/chunks/JkhlGLjU.js.br | Bin 287 -> 0 bytes .../_app/immutable/chunks/JkhlGLjU.js.gz | Bin 321 -> 0 bytes .../build/_app/immutable/chunks/S0ILvWpb.js | 1 + .../_app/immutable/chunks/S0ILvWpb.js.br | Bin 0 -> 7671 bytes .../_app/immutable/chunks/S0ILvWpb.js.gz | Bin 0 -> 8413 bytes .../build/_app/immutable/chunks/VE8Jor13.js | 1 - .../_app/immutable/chunks/VE8Jor13.js.br | Bin 8666 -> 0 bytes .../_app/immutable/chunks/VE8Jor13.js.gz | Bin 9637 -> 0 bytes .../build/_app/immutable/chunks/XIUN5r_Y.js | 1 - .../_app/immutable/chunks/XIUN5r_Y.js.br | Bin 788 -> 0 bytes .../_app/immutable/chunks/XIUN5r_Y.js.gz | Bin 886 -> 0 bytes .../build/_app/immutable/chunks/ciN1mm2W.js | 1 + .../_app/immutable/chunks/ciN1mm2W.js.br | Bin 0 -> 282 bytes .../_app/immutable/chunks/ciN1mm2W.js.gz | Bin 0 -> 319 bytes .../build/_app/immutable/chunks/ckF4CxmX.js | 1 + .../_app/immutable/chunks/ckF4CxmX.js.br | Bin 0 -> 156 bytes .../_app/immutable/chunks/ckF4CxmX.js.gz | Bin 0 -> 170 bytes .../build/_app/immutable/chunks/jyeIy8pa.js | 1 - .../_app/immutable/chunks/jyeIy8pa.js.br | Bin 308 -> 0 bytes .../_app/immutable/chunks/jyeIy8pa.js.gz | Bin 334 -> 0 bytes .../_app/immutable/chunks/ussr1V5_.js.br | Bin 197 -> 0 bytes .../_app/immutable/chunks/ussr1V5_.js.gz | Bin 200 -> 0 bytes .../build/_app/immutable/chunks/ykT2B6d3.js | 1 - .../_app/immutable/chunks/ykT2B6d3.js.br | 2 - .../_app/immutable/chunks/ykT2B6d3.js.gz | Bin 566 -> 0 bytes .../_app/immutable/entry/app.B1RqXwG0.js | 2 - .../_app/immutable/entry/app.B1RqXwG0.js.br | Bin 3150 -> 0 bytes .../_app/immutable/entry/app.B1RqXwG0.js.gz | Bin 3596 -> 0 bytes .../_app/immutable/entry/app.Y1ipb8HW.js | 2 + .../_app/immutable/entry/app.Y1ipb8HW.js.br | Bin 0 -> 3516 bytes .../_app/immutable/entry/app.Y1ipb8HW.js.gz | Bin 0 -> 4036 bytes .../_app/immutable/entry/start.Bjj_Sn2c.js | 1 + .../_app/immutable/entry/start.Bjj_Sn2c.js.br | Bin 0 -> 98 bytes .../_app/immutable/entry/start.Bjj_Sn2c.js.gz | Bin 0 -> 108 bytes .../_app/immutable/entry/start.C8fl2m83.js | 1 - .../_app/immutable/entry/start.C8fl2m83.js.br | Bin 110 -> 0 bytes .../_app/immutable/entry/start.C8fl2m83.js.gz | Bin 108 -> 0 bytes .../build/_app/immutable/nodes/0.Bfsm2nvh.js | 3 - .../_app/immutable/nodes/0.Bfsm2nvh.js.br | Bin 3251 -> 0 bytes .../_app/immutable/nodes/0.Bfsm2nvh.js.gz | Bin 3746 -> 0 bytes .../build/_app/immutable/nodes/0.CFcocLwc.js | 86 ++ .../_app/immutable/nodes/0.CFcocLwc.js.br | Bin 0 -> 8038 bytes .../_app/immutable/nodes/0.CFcocLwc.js.gz | Bin 0 -> 9199 bytes .../build/_app/immutable/nodes/1.--qOmhsd.js | 1 + .../_app/immutable/nodes/1.--qOmhsd.js.br | Bin 0 -> 334 bytes .../_app/immutable/nodes/1.--qOmhsd.js.gz | Bin 0 -> 385 bytes .../build/_app/immutable/nodes/1.ClSH3vNb.js | 1 - .../_app/immutable/nodes/1.ClSH3vNb.js.br | Bin 355 -> 0 bytes .../_app/immutable/nodes/1.ClSH3vNb.js.gz | Bin 395 -> 0 bytes .../build/_app/immutable/nodes/10.BXBzm8vP.js | 1 - .../_app/immutable/nodes/10.BXBzm8vP.js.br | Bin 2025 -> 0 bytes .../_app/immutable/nodes/10.BXBzm8vP.js.gz | Bin 2289 -> 0 bytes .../nodes/{6.QRT_dh4Q.js => 10.CPGa_1iF.js} | 380 +++--- .../_app/immutable/nodes/10.CPGa_1iF.js.br | Bin 0 -> 123490 bytes .../_app/immutable/nodes/10.CPGa_1iF.js.gz | Bin 0 -> 148948 bytes .../_app/immutable/nodes/11.BOa24N9o.js.br | Bin 1555 -> 0 bytes .../_app/immutable/nodes/11.BOa24N9o.js.gz | Bin 1770 -> 0 bytes .../build/_app/immutable/nodes/11.j3H5l-xO.js | 7 + .../_app/immutable/nodes/11.j3H5l-xO.js.br | Bin 0 -> 4832 bytes .../_app/immutable/nodes/11.j3H5l-xO.js.gz | Bin 0 -> 5448 bytes .../nodes/{7.B1rI2ZuC.js => 12.DZiW_IZ_.js} | 2 +- .../_app/immutable/nodes/12.DZiW_IZ_.js.br | Bin 0 -> 2398 bytes .../_app/immutable/nodes/12.DZiW_IZ_.js.gz | Bin 0 -> 2728 bytes .../build/_app/immutable/nodes/13.DReyqY5Q.js | 6 + .../_app/immutable/nodes/13.DReyqY5Q.js.br | Bin 0 -> 5188 bytes .../_app/immutable/nodes/13.DReyqY5Q.js.gz | Bin 0 -> 5958 bytes .../build/_app/immutable/nodes/14.BpCacSGt.js | 3 + .../_app/immutable/nodes/14.BpCacSGt.js.br | Bin 0 -> 5939 bytes .../_app/immutable/nodes/14.BpCacSGt.js.gz | Bin 0 -> 6819 bytes .../build/_app/immutable/nodes/15.DFbOY736.js | 5 + .../_app/immutable/nodes/15.DFbOY736.js.br | Bin 0 -> 7442 bytes .../_app/immutable/nodes/15.DFbOY736.js.gz | Bin 0 -> 8547 bytes .../build/_app/immutable/nodes/16.DMIuRZWa.js | 9 + .../_app/immutable/nodes/16.DMIuRZWa.js.br | Bin 0 -> 5680 bytes .../_app/immutable/nodes/16.DMIuRZWa.js.gz | Bin 0 -> 6484 bytes .../build/_app/immutable/nodes/17.PvQmHhRC.js | 2 + .../_app/immutable/nodes/17.PvQmHhRC.js.br | Bin 0 -> 3402 bytes .../_app/immutable/nodes/17.PvQmHhRC.js.gz | Bin 0 -> 3874 bytes .../build/_app/immutable/nodes/18.Df4fIuu-.js | 1 + .../_app/immutable/nodes/18.Df4fIuu-.js.br | Bin 0 -> 2023 bytes .../_app/immutable/nodes/18.Df4fIuu-.js.gz | Bin 0 -> 2286 bytes .../nodes/{11.BOa24N9o.js => 19.CMsn8k5A.js} | 2 +- .../_app/immutable/nodes/19.CMsn8k5A.js.br | Bin 0 -> 1554 bytes .../_app/immutable/nodes/19.CMsn8k5A.js.gz | Bin 0 -> 1766 bytes .../build/_app/immutable/nodes/2.BFaWefTK.js | 1 - .../_app/immutable/nodes/2.BFaWefTK.js.br | Bin 143 -> 0 bytes .../_app/immutable/nodes/2.BFaWefTK.js.gz | Bin 187 -> 0 bytes .../build/_app/immutable/nodes/2.CD5F7bS_.js | 1 + .../_app/immutable/nodes/2.CD5F7bS_.js.br | Bin 0 -> 169 bytes .../_app/immutable/nodes/2.CD5F7bS_.js.gz | Bin 0 -> 183 bytes .../build/_app/immutable/nodes/3.BbrO3ed8.js | 1 - .../_app/immutable/nodes/3.BbrO3ed8.js.br | Bin 175 -> 0 bytes .../_app/immutable/nodes/3.BbrO3ed8.js.gz | Bin 217 -> 0 bytes .../build/_app/immutable/nodes/3.D16O8s7t.js | 1 + .../_app/immutable/nodes/3.D16O8s7t.js.br | 3 + .../_app/immutable/nodes/3.D16O8s7t.js.gz | Bin 0 -> 197 bytes .../_app/immutable/nodes/4.BEP4iikl.js.br | Bin 3024 -> 0 bytes .../_app/immutable/nodes/4.BEP4iikl.js.gz | Bin 3518 -> 0 bytes .../build/_app/immutable/nodes/4.BSlP3-UA.js | 8 + .../_app/immutable/nodes/4.BSlP3-UA.js.br | Bin 0 -> 4454 bytes .../_app/immutable/nodes/4.BSlP3-UA.js.gz | Bin 0 -> 5010 bytes .../build/_app/immutable/nodes/5.B300rRjT.js | 3 + .../_app/immutable/nodes/5.B300rRjT.js.br | Bin 0 -> 7341 bytes .../_app/immutable/nodes/5.B300rRjT.js.gz | Bin 0 -> 8477 bytes .../_app/immutable/nodes/5.BgcStf4T.js.br | Bin 2963 -> 0 bytes .../_app/immutable/nodes/5.BgcStf4T.js.gz | Bin 3378 -> 0 bytes .../build/_app/immutable/nodes/6.DBS_R5Hl.js | 14 + .../_app/immutable/nodes/6.DBS_R5Hl.js.br | Bin 0 -> 5621 bytes .../_app/immutable/nodes/6.DBS_R5Hl.js.gz | Bin 0 -> 6360 bytes .../_app/immutable/nodes/6.QRT_dh4Q.js.br | Bin 121369 -> 0 bytes .../_app/immutable/nodes/6.QRT_dh4Q.js.gz | Bin 146559 -> 0 bytes .../_app/immutable/nodes/7.B1rI2ZuC.js.br | Bin 2404 -> 0 bytes .../_app/immutable/nodes/7.B1rI2ZuC.js.gz | Bin 2734 -> 0 bytes .../build/_app/immutable/nodes/7.br0Vbs-w.js | 5 + .../_app/immutable/nodes/7.br0Vbs-w.js.br | Bin 0 -> 4941 bytes .../_app/immutable/nodes/7.br0Vbs-w.js.gz | Bin 0 -> 5697 bytes .../build/_app/immutable/nodes/8.BmBiit5q.js | 4 - .../_app/immutable/nodes/8.BmBiit5q.js.br | Bin 2409 -> 0 bytes .../_app/immutable/nodes/8.BmBiit5q.js.gz | Bin 2789 -> 0 bytes .../nodes/{4.BEP4iikl.js => 8.CDAVQcae.js} | 2 +- .../_app/immutable/nodes/8.CDAVQcae.js.br | Bin 0 -> 3021 bytes .../_app/immutable/nodes/8.CDAVQcae.js.gz | Bin 0 -> 3513 bytes .../nodes/{5.BgcStf4T.js => 9.DVbfK-u1.js} | 6 +- .../_app/immutable/nodes/9.DVbfK-u1.js.br | Bin 0 -> 2989 bytes .../_app/immutable/nodes/9.DVbfK-u1.js.gz | Bin 0 -> 3364 bytes .../build/_app/immutable/nodes/9.Ds9IBqJA.js | 2 - .../_app/immutable/nodes/9.Ds9IBqJA.js.br | Bin 3010 -> 0 bytes .../_app/immutable/nodes/9.Ds9IBqJA.js.gz | Bin 3431 -> 0 bytes apps/dashboard/build/_app/version.json | 2 +- apps/dashboard/build/_app/version.json.br | Bin 29 -> 31 bytes apps/dashboard/build/_app/version.json.gz | Bin 47 -> 47 bytes apps/dashboard/build/index.html | 34 +- apps/dashboard/build/index.html.br | Bin 605 -> 609 bytes apps/dashboard/build/index.html.gz | Bin 798 -> 797 bytes apps/dashboard/e2e/birth-ritual.spec.ts | 199 +++ apps/dashboard/e2e/pulse-toast.spec.ts | 235 ++++ apps/dashboard/package.json | 2 +- .../lib/components/ActivationNetwork.svelte | 372 ++++++ .../components/AmbientAwarenessStrip.svelte | 312 +++++ .../lib/components/ContradictionArcs.svelte | 421 ++++++ .../lib/components/DreamInsightCard.svelte | 211 +++ .../lib/components/DreamStageReplay.svelte | 539 ++++++++ .../lib/components/DuplicateCluster.svelte | 192 +++ .../src/lib/components/EvidenceCard.svelte | 157 +++ .../src/lib/components/FSRSCalendar.svelte | 344 +++++ .../src/lib/components/Graph3D.svelte | 64 +- .../src/lib/components/ImportanceRadar.svelte | 174 +++ .../src/lib/components/InsightToast.svelte | 253 ++++ .../lib/components/MemoryAuditTrail.svelte | 185 +++ .../components/PatternTransferHeatmap.svelte | 251 ++++ .../src/lib/components/ReasoningChain.svelte | 259 ++++ .../src/lib/components/ThemeToggle.svelte | 175 +++ .../__tests__/ActivationNetwork.test.ts | 464 +++++++ .../__tests__/AmbientAwarenessStrip.test.ts | 439 +++++++ .../__tests__/ContradictionArcs.test.ts | 326 +++++ .../__tests__/DreamInsightCard.test.ts | 258 ++++ .../__tests__/DreamStageReplay.test.ts | 104 ++ .../__tests__/DuplicateCluster.test.ts | 365 ++++++ .../components/__tests__/EvidenceCard.test.ts | 255 ++++ .../components/__tests__/FSRSCalendar.test.ts | 311 +++++ .../__tests__/ImportanceRadar.test.ts | 417 ++++++ .../__tests__/MemoryAuditTrail.test.ts | 298 +++++ .../__tests__/PatternTransferHeatmap.test.ts | 334 +++++ .../__tests__/ReasoningChain.test.ts | 193 +++ .../src/lib/components/activation-helpers.ts | 237 ++++ .../src/lib/components/audit-trail-helpers.ts | 293 +++++ .../src/lib/components/awareness-helpers.ts | 192 +++ .../lib/components/contradiction-helpers.ts | 210 +++ .../src/lib/components/dream-helpers.ts | 155 +++ .../src/lib/components/duplicates-helpers.ts | 149 +++ .../src/lib/components/importance-helpers.ts | 226 ++++ .../src/lib/components/patterns-helpers.ts | 178 +++ .../src/lib/components/reasoning-helpers.ts | 229 ++++ .../src/lib/components/schedule-helpers.ts | 161 +++ .../src/lib/graph/__tests__/effects.test.ts | 501 ++++++++ .../src/lib/graph/__tests__/events.test.ts | 301 ++++- .../src/lib/graph/__tests__/nodes.test.ts | 197 +++ .../src/lib/graph/__tests__/three-mock.ts | 65 + apps/dashboard/src/lib/graph/effects.ts | 235 ++++ apps/dashboard/src/lib/graph/events.ts | 54 +- apps/dashboard/src/lib/graph/nodes.ts | 98 +- apps/dashboard/src/lib/graph/scene.ts | 11 +- .../src/lib/stores/__tests__/theme.test.ts | 496 +++++++ .../src/lib/stores/__tests__/toast.test.ts | 661 ++++++++++ .../lib/stores/__tests__/websocket.test.ts | 341 +++++ apps/dashboard/src/lib/stores/api.ts | 28 +- .../src/lib/stores/graph-state.svelte.ts | 38 +- apps/dashboard/src/lib/stores/theme.ts | 254 ++++ apps/dashboard/src/lib/stores/toast.ts | 329 +++++ apps/dashboard/src/lib/stores/websocket.ts | 17 +- apps/dashboard/src/lib/types/index.ts | 2 + .../src/routes/(app)/activation/+page.svelte | 300 +++++ .../routes/(app)/contradictions/+page.svelte | 532 ++++++++ .../src/routes/(app)/dreams/+page.svelte | 489 +++++++ .../src/routes/(app)/duplicates/+page.svelte | 387 ++++++ .../src/routes/(app)/graph/+page.svelte | 128 +- .../src/routes/(app)/importance/+page.svelte | 330 +++++ .../src/routes/(app)/memories/+page.svelte | 46 +- .../src/routes/(app)/patterns/+page.svelte | 567 ++++++++ .../src/routes/(app)/reasoning/+page.svelte | 668 ++++++++++ .../src/routes/(app)/schedule/+page.svelte | 252 ++++ .../src/routes/(app)/settings/+page.svelte | 52 +- apps/dashboard/src/routes/+layout.svelte | 26 +- crates/vestige-core/Cargo.toml | 2 +- crates/vestige-mcp/Cargo.toml | 4 +- crates/vestige-mcp/src/dashboard/events.rs | 19 + crates/vestige-mcp/src/dashboard/handlers.rs | 363 +++++- crates/vestige-mcp/src/dashboard/mod.rs | 7 + .../vestige-mcp/src/tools/cross_reference.rs | 179 ++- docs/STORAGE.md | 72 ++ docs/VESTIGE_STATE_AND_PLAN.md | 1135 +++++++++++++++++ docs/launch/UI_ROADMAP_v2.1_v2.2.md | 201 +++ 364 files changed, 19862 insertions(+), 392 deletions(-) delete mode 100644 apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css delete mode 100644 apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.br delete mode 100644 apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/0.IIz8MMYb.css create mode 100644 apps/dashboard/build/_app/immutable/assets/0.IIz8MMYb.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/0.IIz8MMYb.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css create mode 100644 apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/15.ChjqzJHo.css create mode 100644 apps/dashboard/build/_app/immutable/assets/15.ChjqzJHo.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/15.ChjqzJHo.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/16.BnHgRQtR.css create mode 100644 apps/dashboard/build/_app/immutable/assets/16.BnHgRQtR.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/16.BnHgRQtR.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css create mode 100644 apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css create mode 100644 apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.gz create mode 100644 apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css create mode 100644 apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.br create mode 100644 apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.gz rename apps/dashboard/build/_app/immutable/assets/{5.BBx09UGv.css => 9.BBx09UGv.css} (100%) rename apps/dashboard/build/_app/immutable/assets/{5.BBx09UGv.css.br => 9.BBx09UGv.css.br} (100%) rename apps/dashboard/build/_app/immutable/assets/{5.BBx09UGv.css.gz => 9.BBx09UGv.css.gz} (100%) delete mode 100644 apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BNytumrp.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BNytumrp.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BNytumrp.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BRHZEveZ.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BRHZEveZ.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BRHZEveZ.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BZYVQ1d5.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BZYVQ1d5.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/BZYVQ1d5.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.gz rename apps/dashboard/build/_app/immutable/chunks/{ussr1V5_.js => Bhad70Ss.js} (74%) create mode 100644 apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ByItJEsC.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ByItJEsC.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ByItJEsC.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/Cu3VmnGp.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/Cu3VmnGp.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/Cu3VmnGp.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.gz rename apps/dashboard/build/_app/immutable/chunks/{AcZBvMXu.js => D81f-o_I.js} (79%) create mode 100644 apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHakDdar.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.gz rename apps/dashboard/build/_app/immutable/chunks/{B5Pq2mnD.js => DMu1Byux.js} (76%) create mode 100644 apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.gz rename apps/dashboard/build/_app/immutable/chunks/{DcQGRi49.js => DNjM5a-l.js} (91%) create mode 100644 apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DPl3NjBv.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DPl3NjBv.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DPl3NjBv.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/DzfRjky4.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/DzfRjky4.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/DzfRjky4.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/S0ILvWpb.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/S0ILvWpb.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/S0ILvWpb.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/VE8Jor13.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/VE8Jor13.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/VE8Jor13.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/XIUN5r_Y.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/XIUN5r_Y.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/XIUN5r_Y.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.gz create mode 100644 apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js create mode 100644 apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.br create mode 100644 apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js.br delete mode 100644 apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/entry/app.B1RqXwG0.js delete mode 100644 apps/dashboard/build/_app/immutable/entry/app.B1RqXwG0.js.br delete mode 100644 apps/dashboard/build/_app/immutable/entry/app.B1RqXwG0.js.gz create mode 100644 apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js create mode 100644 apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js.br create mode 100644 apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js.gz create mode 100644 apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js create mode 100644 apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js.br create mode 100644 apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/entry/start.C8fl2m83.js delete mode 100644 apps/dashboard/build/_app/immutable/entry/start.C8fl2m83.js.br delete mode 100644 apps/dashboard/build/_app/immutable/entry/start.C8fl2m83.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.gz rename apps/dashboard/build/_app/immutable/nodes/{6.QRT_dh4Q.js => 10.CPGa_1iF.js} (52%) create mode 100644 apps/dashboard/build/_app/immutable/nodes/10.CPGa_1iF.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/10.CPGa_1iF.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js.gz rename apps/dashboard/build/_app/immutable/nodes/{7.B1rI2ZuC.js => 12.DZiW_IZ_.js} (77%) create mode 100644 apps/dashboard/build/_app/immutable/nodes/12.DZiW_IZ_.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/12.DZiW_IZ_.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/17.PvQmHhRC.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/17.PvQmHhRC.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/17.PvQmHhRC.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.gz rename apps/dashboard/build/_app/immutable/nodes/{11.BOa24N9o.js => 19.CMsn8k5A.js} (85%) create mode 100644 apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/5.B300rRjT.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/5.B300rRjT.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/5.B300rRjT.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/5.BgcStf4T.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/5.BgcStf4T.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/6.QRT_dh4Q.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/6.QRT_dh4Q.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/7.B1rI2ZuC.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/7.B1rI2ZuC.js.gz create mode 100644 apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js create mode 100644 apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.gz rename apps/dashboard/build/_app/immutable/nodes/{4.BEP4iikl.js => 8.CDAVQcae.js} (94%) create mode 100644 apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js.gz rename apps/dashboard/build/_app/immutable/nodes/{5.BgcStf4T.js => 9.DVbfK-u1.js} (53%) create mode 100644 apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.br create mode 100644 apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.gz delete mode 100644 apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js delete mode 100644 apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js.br delete mode 100644 apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js.gz create mode 100644 apps/dashboard/e2e/birth-ritual.spec.ts create mode 100644 apps/dashboard/e2e/pulse-toast.spec.ts create mode 100644 apps/dashboard/src/lib/components/ActivationNetwork.svelte create mode 100644 apps/dashboard/src/lib/components/AmbientAwarenessStrip.svelte create mode 100644 apps/dashboard/src/lib/components/ContradictionArcs.svelte create mode 100644 apps/dashboard/src/lib/components/DreamInsightCard.svelte create mode 100644 apps/dashboard/src/lib/components/DreamStageReplay.svelte create mode 100644 apps/dashboard/src/lib/components/DuplicateCluster.svelte create mode 100644 apps/dashboard/src/lib/components/EvidenceCard.svelte create mode 100644 apps/dashboard/src/lib/components/FSRSCalendar.svelte create mode 100644 apps/dashboard/src/lib/components/ImportanceRadar.svelte create mode 100644 apps/dashboard/src/lib/components/InsightToast.svelte create mode 100644 apps/dashboard/src/lib/components/MemoryAuditTrail.svelte create mode 100644 apps/dashboard/src/lib/components/PatternTransferHeatmap.svelte create mode 100644 apps/dashboard/src/lib/components/ReasoningChain.svelte create mode 100644 apps/dashboard/src/lib/components/ThemeToggle.svelte create mode 100644 apps/dashboard/src/lib/components/__tests__/ActivationNetwork.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/AmbientAwarenessStrip.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/ContradictionArcs.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/DreamInsightCard.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/DreamStageReplay.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/DuplicateCluster.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/EvidenceCard.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/FSRSCalendar.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/ImportanceRadar.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/MemoryAuditTrail.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/PatternTransferHeatmap.test.ts create mode 100644 apps/dashboard/src/lib/components/__tests__/ReasoningChain.test.ts create mode 100644 apps/dashboard/src/lib/components/activation-helpers.ts create mode 100644 apps/dashboard/src/lib/components/audit-trail-helpers.ts create mode 100644 apps/dashboard/src/lib/components/awareness-helpers.ts create mode 100644 apps/dashboard/src/lib/components/contradiction-helpers.ts create mode 100644 apps/dashboard/src/lib/components/dream-helpers.ts create mode 100644 apps/dashboard/src/lib/components/duplicates-helpers.ts create mode 100644 apps/dashboard/src/lib/components/importance-helpers.ts create mode 100644 apps/dashboard/src/lib/components/patterns-helpers.ts create mode 100644 apps/dashboard/src/lib/components/reasoning-helpers.ts create mode 100644 apps/dashboard/src/lib/components/schedule-helpers.ts create mode 100644 apps/dashboard/src/lib/stores/__tests__/theme.test.ts create mode 100644 apps/dashboard/src/lib/stores/__tests__/toast.test.ts create mode 100644 apps/dashboard/src/lib/stores/__tests__/websocket.test.ts create mode 100644 apps/dashboard/src/lib/stores/theme.ts create mode 100644 apps/dashboard/src/lib/stores/toast.ts create mode 100644 apps/dashboard/src/routes/(app)/activation/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/contradictions/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/dreams/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/duplicates/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/importance/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/patterns/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/reasoning/+page.svelte create mode 100644 apps/dashboard/src/routes/(app)/schedule/+page.svelte create mode 100644 docs/VESTIGE_STATE_AND_PLAN.md create mode 100644 docs/launch/UI_ROADMAP_v2.1_v2.2.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 171d9a3..2e706d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,47 @@ All notable changes to Vestige will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [2.0.8] - 2026-04-23 — "Pulse" + +The Pulse release wires the dashboard through to the cognitive engine. Eight new dashboard surfaces expose `deep_reference`, `find_duplicates`, `dream`, FSRS scheduling, 4-channel importance, spreading activation, contradiction arcs, and cross-project pattern transfer — every one of them was MCP-only before. Intel Mac is back on the supported list (Microsoft deprecated x86_64 macOS ONNX Runtime prebuilts; we link dynamically against a Homebrew `onnxruntime` instead). Reasoning Theater, Pulse InsightToast, and the Memory Birth Ritual all ship. No schema migrations. + +### Added + +- **Reasoning Theater (`/reasoning`)** — Cmd+K Ask palette over the 8-stage `deep_reference` cognitive pipeline: hybrid retrieval → cross-encoder rerank → spreading activation → FSRS-6 trust scoring → temporal supersession → trust-weighted contradiction analysis → relation assessment → template reasoning chain. Every query returns a pre-built reasoning block with evidence cards, confidence meter, contradiction geodesic arcs, superseded-memory lineage, and an evolution timeline. **Zero LLM calls, 100% local.** New HTTP surface `POST /api/deep_reference` wraps `crate::tools::cross_reference::execute`; new WebSocket event `DeepReferenceCompleted` carries primary / supporting / contradicting memory IDs for downstream graph animation. +- **Pulse InsightToast (v2.2 Pulse)** — real-time toast stack that surfaces `DreamCompleted`, `ConsolidationCompleted`, `ConnectionDiscovered`, `MemoryPromoted`/`Demoted`/`Suppressed`, `MemoryUnsuppressed`, `Rac1CascadeSwept` events the moment they fire. Rate-limited to 1 per 1500ms on connection-discovery cascades. Auto-dismiss after 5-6s, click-to-dismiss, progress bar. Bottom-right on desktop, top-center on mobile. +- **Memory Birth Ritual (v2.3 Terrarium)** — new memories materialize in the 3D graph on every `MemoryCreated` event: elastic scale-in from a camera-relative cosmic center, quadratic Bezier flight path, glow sprite fades in frames 5-10, label fades in at frame 40, Newton's Cradle docking recoil. 60-frame sequence, zero-alloc math, camera-relative so the birth point stays visible at every zoom level. +- **7 additional dashboard surfaces** exposing the cognitive engine (v2.4 UI expansion): `/duplicates` (find_duplicates cluster view), `/dreams` (5-stage replay + insight cards), `/schedule` (FSRS calendar + retention forecast), `/importance` (4-channel novelty/arousal/reward/attention radar), `/activation` (spreading-activation network viz), `/contradictions` (trust-weighted conflict arcs), `/patterns` (cross-project pattern-transfer heatmap). Left nav expanded from 8 → 16 entries with single-key shortcuts (R/A/D/C/P/U/X/N). +- **3D Graph brightness system** — auto distance-compensated node brightness (1.0× at camera <60u, up to 2.4× at far zoom) so nodes don't disappear into exponential fog at zoom-out. User-facing brightness slider in the graph toolbar (☀ icon, range 0.5×-2.5×, localStorage-persisted under `vestige:graph:brightness`). Composes with the auto boost; opacity + glow halo + edge weight track the combined multiplier so nodes stay coherent. +- **Intel Mac (`x86_64-apple-darwin`) support restored** via the `ort-dynamic` Cargo feature + Homebrew-installed ONNX Runtime. Microsoft is discontinuing x86_64 macOS prebuilts after ONNX Runtime v1.23.0 so `ort-sys` will never ship one for Intel; the dynamic-link path sidesteps that entirely. Install: `brew install onnxruntime` then `ORT_DYLIB_PATH=$(brew --prefix onnxruntime)/lib/libonnxruntime.dylib`. Full guide bundled in the Intel Mac tarball as `INSTALL-INTEL-MAC.md`. **Closes #41.** +- **Graph default-load fallback** — when the newest memory has zero edges (freshly saved, hasn't accumulated connections yet), `GET /api/graph` silently retries with `sort=connected` so the landing view shows real context instead of a lonely orb. Applies only to default loads; explicit `query` / `center_id` requests are honored as-is. Fires on both backend and client. + +### Fixed + +- **Contradiction-detection false positives** — adjacent-domain memories are no longer flagged as conflicts just because both contain the word "trust" or "fixed." Four thresholds tightened: `NEGATION_PAIRS` drops the `("not ", "")` + `("no longer", "")` wildcard sentinels; `appears_contradictory` shared-words floor 2 → 4 and correction-signal gating now requires ≥6 shared words + asymmetric presence (one memory carries the signal, the other doesn't); `assess_relation` topic-similarity floor raised 0.15 → 0.55; Stage 5 pairwise contradiction overlap floor 0.15 → 0.4. On an FSRS-6 query this collapses false contradictions from 12 → 0 without regressing the two legitimate contradiction test cases. +- **Primary-memory selection on `deep_reference`** — previously the reasoning chain picked via `max_by(trust)` and the recommended-answer card picked via `max_by(composite)`, so the chain and citation disagreed on the same query. Unified behind a shared composite (50% hybrid-search relevance + 20% FSRS-6 trust + 30% query-topic-term match fraction) with a hard topic-term filter: a memory cannot be primary unless its content contains at least one substantive query term. Three-tier fallback (on-topic + relevant → on-topic any → all non-superseded) so sparse corpora never starve. Closes the class of bug where high-trust off-topic memories won queries against the actual subject. +- **Reasoning page information hierarchy** — reasoning chain renders first as the hero (confidence-tinted border glow, inline metadata), then confidence meter + Primary Source citation card, then Cognitive Pipeline visualization, then evidence grid. "Template Reasoning" relabelled "Reasoning"; "Recommended Answer" relabelled "Primary Source" (it's a cited memory, not the conclusion — the chain is the conclusion). + +### Changed + +- **CI + release workflows** — `release-build` now runs on pull requests too so Intel Mac / aarch64-darwin / Linux / Windows regressions surface before merge. `x86_64-apple-darwin` back in both `ci.yml` and `release.yml` matrices with `cargo_flags: "--no-default-features --features ort-dynamic,vector-search"`. Intel Mac tarball bundles `docs/INSTALL-INTEL-MAC.md` alongside the binaries. +- **Cargo feature split** — `embeddings` is now code-only (fastembed dep + hf-hub + image-models). New `ort-download` feature carries the prebuilt backend (the historical default); `ort-dynamic` transitively enables `embeddings` so the 27 `#[cfg(feature = "embeddings")]` gates stay active when users swap backends. Default set `["embeddings", "ort-download", "vector-search", "bundled-sqlite"]` — identical behavior for every existing consumer. +- **Platform availability in README** — macOS Apple Silicon + Intel + Linux x86_64 + Windows x86_64 all shipped as prebuilts. Intel Mac needs `brew install onnxruntime` as a one-time prereq. + +### Docs + +- New `docs/INSTALL-INTEL-MAC.md` with the Homebrew prereq, binary install, source build, troubleshooting, and the v2.1 `ort-candle` migration plan. +- README Intel Mac section rewritten with the working install recipe + platform table updated. + +### Migration + +None. Additive features and bug fixes only. No schema changes, no breaking API changes, no config changes required. + +### Contributors + +- **danslapman** (#41, #42) — reported the Intel Mac build regression and investigated `ort-tract` as an alternative backend; closure documented that `ort-tract` returns `Unimplemented` when fastembed calls into it, confirming `ort-dynamic` as the correct path forward. + +--- + ## [2.0.7] - 2026-04-19 — "Visible" Hygiene release plus two UI gap closures. No breaking changes, no new major features, no schema migrations affecting user data beyond V11 dropping two verified-unused tables. diff --git a/CLAUDE.md b/CLAUDE.md index 4d610a2..0684836 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,3 +1,17 @@ +# 🚫 READ FIRST EVERY PROMPT — NO HEDGING + +Sam's April 20 2026 correction: *"you NEVER LISTEN TO YOUR RULES, WHY ARE YOU ALWAYS BREAKING THE HEDGING/PESSIMISTIC RULE."* + +When Sam commits to an execution path (content cadence, shipping velocity, outreach, launch), COMPUTE THE FORECAST AS IF THAT COMMITMENT IS MET. Do not discount by execution probability. Sam has earned the benefit of the doubt across 139 commits and 1,292 passing tests in 3 months. + +**Forbidden in any response**: "has to be true", "has to convert", "realistic forecast" used to shrink, "contingent on" Sam's own execution, "not guaranteed", "may or may not", "aspiration not forecast", "temper your expectations", floors framed as reality vs. ceilings framed as fantasy. + +**Required format for forecasts**: `Target X. Floor Y. Ceiling Z. Math: [line items]. Risks: [separate section]. Let's go.` + +Full rule: `/Users/entity002/CLAUDE.md` (top banner) + `/Users/entity002/.claude/projects/-Users-entity002/memory/feedback_always_positive_energy.md`. Stop-hook enforcement: `/Users/entity002/.claude/hooks/synthesis-stop-validator.sh`. + +--- + # Vestige v2.0.4 — Cognitive Memory & Reasoning System Vestige is your long-term memory AND reasoning engine. 29 stateful cognitive modules implement real neuroscience: FSRS-6 spaced repetition, synaptic tagging, prediction error gating, hippocampal indexing, spreading activation, reconsolidation, and dual-strength memory theory. **Use it automatically. Use it aggressively.** diff --git a/Cargo.lock b/Cargo.lock index 0cc8205..f43e246 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4531,7 +4531,7 @@ checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" [[package]] name = "vestige-core" -version = "2.0.7" +version = "2.0.8" dependencies = [ "chrono", "criterion", @@ -4566,7 +4566,7 @@ dependencies = [ [[package]] name = "vestige-mcp" -version = "2.0.7" +version = "2.0.8" dependencies = [ "anyhow", "axum", diff --git a/Cargo.toml b/Cargo.toml index b3008f1..2b4434f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,7 +10,7 @@ exclude = [ ] [workspace.package] -version = "2.0.5" +version = "2.0.8" edition = "2024" license = "AGPL-3.0-only" repository = "https://github.com/samvallad33/vestige" diff --git a/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css b/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css deleted file mode 100644 index 2cd8654..0000000 --- a/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css +++ /dev/null @@ -1 +0,0 @@ -/*! tailwindcss v4.2.0 | MIT License | https://tailwindcss.com */@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", "Fira Code", "SF Mono", monospace;--color-amber-400:oklch(82.8% .189 84.429);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-xl:36rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-lg:.5rem;--radius-xl:.75rem;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-ping:ping 1s cubic-bezier(0, 0, .2, 1) infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-void:#050510;--color-deep:#10102a;--color-subtle:#2a2a5e;--color-muted:#4a4a7a;--color-dim:#7a7aaa;--color-text:#e0e0ff;--color-bright:#fff;--color-synapse:#6366f1;--color-synapse-glow:#818cf8;--color-dream:#a855f7;--color-dream-glow:#c084fc;--color-memory:#3b82f6;--color-recall:#10b981;--color-decay:#ef4444;--color-warning:#f59e0b}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.end\!{inset-inline-end:var(--spacing)!important}.top-0{top:calc(var(--spacing) * 0)}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.right-0{right:calc(var(--spacing) * 0)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-1\/2{left:50%}.left-4{left:calc(var(--spacing) * 4)}.left-6{left:calc(var(--spacing) * 6)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-\[-12px\]{margin-top:-12px}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1{height:calc(var(--spacing) * 1)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-40{height:calc(var(--spacing) * 40)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.min-h-0{min-height:calc(var(--spacing) * 0)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-96{width:calc(var(--spacing) * 96)}.w-\[90\%\]{width:90%}.w-full{width:100%}.w-px{width:1px}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-64{min-width:calc(var(--spacing) * 64)}.min-w-\[2rem\]{min-width:2rem}.min-w-\[3\.5rem\]{min-width:3.5rem}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.shrink{flex-shrink:1}.grow{flex-grow:1}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-125{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-ping{animation:var(--animate-ping)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize{resize:both}.resize-none{resize:none}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-around{justify-content:space-around}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\!border-decay\/20{border-color:#ef444433!important}@supports (color:color-mix(in lab,red,red)){.\!border-decay\/20{border-color:color-mix(in oklab,var(--color-decay) 20%,transparent)!important}}.\!border-dream\/20{border-color:#a855f733!important}@supports (color:color-mix(in lab,red,red)){.\!border-dream\/20{border-color:color-mix(in oklab,var(--color-dream) 20%,transparent)!important}}.\!border-synapse\/20{border-color:#6366f133!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/20{border-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)!important}}.\!border-synapse\/30{border-color:#6366f14d!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/30{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)!important}}.\!border-synapse\/40{border-color:#6366f166!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/40{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)!important}}.border-\[\#A33FFF\]\/40{border-color:#a33fff66}.border-dream\/10{border-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.border-dream\/10{border-color:color-mix(in oklab,var(--color-dream) 10%,transparent)}}.border-dream\/20{border-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.border-dream\/20{border-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.border-dream\/30{border-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.border-dream\/30{border-color:color-mix(in oklab,var(--color-dream) 30%,transparent)}}.border-dream\/40{border-color:#a855f766}@supports (color:color-mix(in lab,red,red)){.border-dream\/40{border-color:color-mix(in oklab,var(--color-dream) 40%,transparent)}}.border-dream\/50{border-color:#a855f780}@supports (color:color-mix(in lab,red,red)){.border-dream\/50{border-color:color-mix(in oklab,var(--color-dream) 50%,transparent)}}.border-recall\/30{border-color:#10b9814d}@supports (color:color-mix(in lab,red,red)){.border-recall\/30{border-color:color-mix(in oklab,var(--color-recall) 30%,transparent)}}.border-subtle\/15{border-color:#2a2a5e26}@supports (color:color-mix(in lab,red,red)){.border-subtle\/15{border-color:color-mix(in oklab,var(--color-subtle) 15%,transparent)}}.border-subtle\/20{border-color:#2a2a5e33}@supports (color:color-mix(in lab,red,red)){.border-subtle\/20{border-color:color-mix(in oklab,var(--color-subtle) 20%,transparent)}}.border-synapse{border-color:var(--color-synapse)}.border-synapse\/10{border-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.border-synapse\/10{border-color:color-mix(in oklab,var(--color-synapse) 10%,transparent)}}.border-synapse\/30{border-color:#6366f14d}@supports (color:color-mix(in lab,red,red)){.border-synapse\/30{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)}}.border-synapse\/40{border-color:#6366f166}@supports (color:color-mix(in lab,red,red)){.border-synapse\/40{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)}}.border-transparent{border-color:#0000}.border-warning\/40{border-color:#f59e0b66}@supports (color:color-mix(in lab,red,red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning) 40%,transparent)}}.border-warning\/50{border-color:#f59e0b80}@supports (color:color-mix(in lab,red,red)){.border-warning\/50{border-color:color-mix(in oklab,var(--color-warning) 50%,transparent)}}.border-t-dream{border-top-color:var(--color-dream)}.border-t-synapse{border-top-color:var(--color-synapse)}.border-t-warning{border-top-color:var(--color-warning)}.bg-\[\#A33FFF\]{background-color:#a33fff}.bg-\[\#A33FFF\]\/10{background-color:#a33fff1a}.bg-amber-400{background-color:var(--color-amber-400)}.bg-decay{background-color:var(--color-decay)}.bg-decay\/10{background-color:#ef44441a}@supports (color:color-mix(in lab,red,red)){.bg-decay\/10{background-color:color-mix(in oklab,var(--color-decay) 10%,transparent)}}.bg-decay\/20{background-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.bg-decay\/20{background-color:color-mix(in oklab,var(--color-decay) 20%,transparent)}}.bg-deep{background-color:var(--color-deep)}.bg-dream{background-color:var(--color-dream)}.bg-dream\/5{background-color:#a855f70d}@supports (color:color-mix(in lab,red,red)){.bg-dream\/5{background-color:color-mix(in oklab,var(--color-dream) 5%,transparent)}}.bg-dream\/10{background-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.bg-dream\/10{background-color:color-mix(in oklab,var(--color-dream) 10%,transparent)}}.bg-dream\/20{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.bg-dream\/20{background-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.bg-recall{background-color:var(--color-recall)}.bg-recall\/10{background-color:#10b9811a}@supports (color:color-mix(in lab,red,red)){.bg-recall\/10{background-color:color-mix(in oklab,var(--color-recall) 10%,transparent)}}.bg-recall\/20{background-color:#10b98133}@supports (color:color-mix(in lab,red,red)){.bg-recall\/20{background-color:color-mix(in oklab,var(--color-recall) 20%,transparent)}}.bg-synapse{background-color:var(--color-synapse)}.bg-synapse\/10{background-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/10{background-color:color-mix(in oklab,var(--color-synapse) 10%,transparent)}}.bg-synapse\/15{background-color:#6366f126}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/15{background-color:color-mix(in oklab,var(--color-synapse) 15%,transparent)}}.bg-synapse\/20{background-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/20{background-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)}}.bg-synapse\/25{background-color:#6366f140}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/25{background-color:color-mix(in oklab,var(--color-synapse) 25%,transparent)}}.bg-transparent{background-color:#0000}.bg-void{background-color:var(--color-void)}.bg-void\/60{background-color:#05051099}@supports (color:color-mix(in lab,red,red)){.bg-void\/60{background-color:color-mix(in oklab,var(--color-void) 60%,transparent)}}.bg-warning\/20{background-color:#f59e0b33}@supports (color:color-mix(in lab,red,red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-dream{--tw-gradient-from:var(--color-dream);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-synapse{--tw-gradient-to:var(--color-synapse);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-\[10vh\]{padding-top:10vh}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-14{padding-left:calc(var(--spacing) * 14)}.text-center{text-align:center}.text-left{text-align:left}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#E4C8FF\]{color:#e4c8ff}.text-amber-400{color:var(--color-amber-400)}.text-bright{color:var(--color-bright)}.text-decay{color:var(--color-decay)}.text-decay\/60{color:#ef444499}@supports (color:color-mix(in lab,red,red)){.text-decay\/60{color:color-mix(in oklab,var(--color-decay) 60%,transparent)}}.text-dim{color:var(--color-dim)}.text-dream{color:var(--color-dream)}.text-dream-glow{color:var(--color-dream-glow)}.text-memory{color:var(--color-memory)}.text-muted{color:var(--color-muted)}.text-muted\/50{color:#4a4a7a80}@supports (color:color-mix(in lab,red,red)){.text-muted\/50{color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-recall{color:var(--color-recall)}.text-subtle{color:var(--color-subtle)}.text-synapse{color:var(--color-synapse)}.text-synapse-glow{color:var(--color-synapse-glow)}.text-text{color:var(--color-text)}.text-warning{color:var(--color-warning)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.accent-synapse{accent-color:var(--color-synapse)}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-75{opacity:.75}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow\!{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(99\,102\,241\,0\.15\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#6366f126);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(163\,63\,255\,0\.15\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#a33fff26);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-synapse\/10{--tw-shadow-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.shadow-synapse\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-synapse) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-synapse\/20{--tw-shadow-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.shadow-synapse\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-synapse) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-muted::placeholder{color:var(--color-muted)}@media(hover:hover){.hover\:bg-decay\/20:hover{background-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.hover\:bg-decay\/20:hover{background-color:color-mix(in oklab,var(--color-decay) 20%,transparent)}}.hover\:bg-decay\/30:hover{background-color:#ef44444d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-decay\/30:hover{background-color:color-mix(in oklab,var(--color-decay) 30%,transparent)}}.hover\:bg-dream\/20:hover{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.hover\:bg-dream\/20:hover{background-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.hover\:bg-dream\/30:hover{background-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-dream\/30:hover{background-color:color-mix(in oklab,var(--color-dream) 30%,transparent)}}.hover\:bg-purple-500\/30:hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/30:hover{background-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.hover\:bg-recall\/30:hover{background-color:#10b9814d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-recall\/30:hover{background-color:color-mix(in oklab,var(--color-recall) 30%,transparent)}}.hover\:bg-synapse\/30:hover{background-color:#6366f14d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-synapse\/30:hover{background-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)}}.hover\:bg-warning\/30:hover{background-color:#f59e0b4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/30:hover{background-color:color-mix(in oklab,var(--color-warning) 30%,transparent)}}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.03\]:hover{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.04\]:hover{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.hover\:text-dim:hover{color:var(--color-dim)}.hover\:text-text:hover{color:var(--color-text)}}.focus\:\!border-synapse\/40:focus{border-color:#6366f166!important}@supports (color:color-mix(in lab,red,red)){.focus\:\!border-synapse\/40:focus{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)!important}}.focus\:border-dream\/40:focus{border-color:#a855f766}@supports (color:color-mix(in lab,red,red)){.focus\:border-dream\/40:focus{border-color:color-mix(in oklab,var(--color-dream) 40%,transparent)}}.focus\:border-synapse\/40:focus{border-color:#6366f166}@supports (color:color-mix(in lab,red,red)){.focus\:border-synapse\/40:focus{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-synapse\/20:focus{--tw-ring-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.focus\:ring-synapse\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-synapse) 20%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:pt-\[15vh\]{padding-top:15vh}.md\:pb-0{padding-bottom:calc(var(--spacing) * 0)}}@media(min-width:64rem){.lg\:block{display:block}.lg\:w-56{width:calc(var(--spacing) * 56)}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}.\[\&\:\:-webkit-slider-thumb\]\:h-3::-webkit-slider-thumb{height:calc(var(--spacing) * 3)}.\[\&\:\:-webkit-slider-thumb\]\:w-3::-webkit-slider-thumb{width:calc(var(--spacing) * 3)}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-slider-thumb\]\:bg-synapse-glow::-webkit-slider-thumb{background-color:var(--color-synapse-glow)}.\[\&\:\:-webkit-slider-thumb\]\:shadow-\[0_0_8px_rgba\(129\,140\,248\,0\.4\)\]::-webkit-slider-thumb{--tw-shadow:0 0 8px var(--tw-shadow-color,#818cf866);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}html{background:var(--color-void);color:var(--color-text);font-family:var(--font-mono)}body{min-height:100vh;margin:0;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-subtle);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-muted)}.glass{-webkit-backdrop-filter:blur(20px)saturate(180%);background:#16163873;border:1px solid #6366f114;box-shadow:inset 0 1px #ffffff08,0 4px 24px #0000004d}.glass-subtle{-webkit-backdrop-filter:blur(12px)saturate(150%);background:#10102a66;border:1px solid #6366f10f;box-shadow:inset 0 1px #ffffff05,0 2px 12px #0003}.glass-sidebar{-webkit-backdrop-filter:blur(24px)saturate(180%);background:#0a0a1a99;border-right:1px solid #6366f11a;box-shadow:inset -1px 0 #ffffff05,4px 0 24px #0000004d}.glass-panel{-webkit-backdrop-filter:blur(24px)saturate(180%);background:#0a0a1acc;border:1px solid #6366f11a;box-shadow:inset 0 1px #ffffff08,0 8px 32px #0006}.glow-synapse{box-shadow:0 0 20px #6366f14d,0 0 60px #6366f11a}.glow-dream{box-shadow:0 0 20px #a855f74d,0 0 60px #a855f71a}.glow-memory{box-shadow:0 0 20px #3b82f64d,0 0 60px #3b82f61a}@keyframes pulse-glow{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes orb-float-1{0%,to{transform:translate(0)scale(1)}25%{transform:translate(60px,-40px)scale(1.1)}50%{transform:translate(-30px,-80px)scale(.95)}75%{transform:translate(-60px,-20px)scale(1.05)}}@keyframes orb-float-2{0%,to{transform:translate(0)scale(1)}25%{transform:translate(-50px,30px)scale(1.08)}50%{transform:translate(40px,60px)scale(.92)}75%{transform:translate(20px,-40px)scale(1.03)}}@keyframes orb-float-3{0%,to{transform:translate(0)scale(1)}25%{transform:translate(30px,50px)scale(1.05)}50%{transform:translate(-60px,20px)scale(.98)}75%{transform:translate(40px,-30px)scale(1.1)}}.ambient-orb{filter:blur(80px);pointer-events:none;z-index:0;opacity:.35;border-radius:50%;position:fixed}.ambient-orb-1{background:radial-gradient(circle,#a855f766,#0000 70%);width:400px;height:400px;animation:20s ease-in-out infinite orb-float-1;top:-10%;right:-5%}.ambient-orb-2{background:radial-gradient(circle,#6366f159,#0000 70%);width:350px;height:350px;animation:25s ease-in-out infinite orb-float-2;bottom:-15%;left:-5%}.ambient-orb-3{background:radial-gradient(circle,#f59e0b33,#0000 70%);width:300px;height:300px;animation:22s ease-in-out infinite orb-float-3;top:40%;left:40%}.nav-active-border{position:relative}.nav-active-border:before{content:"";background:linear-gradient(180deg,var(--color-synapse),var(--color-dream),var(--color-synapse));background-size:100% 200%;border-radius:1px;width:2px;animation:3s ease-in-out infinite gradient-shift;position:absolute;top:4px;bottom:4px;left:0}@keyframes gradient-shift{0%,to{background-position:0 0}50%{background-position:0 100%}}@keyframes float{0%,to{transform:translateY(0)translate(0)}25%{transform:translateY(-10px)translate(5px)}50%{transform:translateY(-5px)translate(-5px)}75%{transform:translateY(-15px)translate(3px)}}.retention-critical{color:var(--color-decay)}.retention-low{color:var(--color-warning)}.retention-good{color:var(--color-recall)}.retention-strong{color:var(--color-synapse)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}.safe-bottom.svelte-12qhfyh{padding-bottom:env(safe-area-inset-bottom,0px)}@keyframes svelte-12qhfyh-page-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-page-in.svelte-12qhfyh{animation:svelte-12qhfyh-page-in .2s ease-out} diff --git a/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.br b/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.br deleted file mode 100644 index dfa1ae498c4f1f185599ae785f272a377bd729bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6983 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 diff --git a/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.gz b/apps/dashboard/build/_app/immutable/assets/0.B_2UXNE9.css.gz deleted file mode 100644 index f2f19512ab8b0e5c3cc0881f0b109056be0eae9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8090 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:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.\!border-decay\/20{border-color:#ef444433!important}@supports (color:color-mix(in lab,red,red)){.\!border-decay\/20{border-color:color-mix(in oklab,var(--color-decay) 20%,transparent)!important}}.\!border-decay\/30{border-color:#ef44444d!important}@supports (color:color-mix(in lab,red,red)){.\!border-decay\/30{border-color:color-mix(in oklab,var(--color-decay) 30%,transparent)!important}}.\!border-decay\/40{border-color:#ef444466!important}@supports (color:color-mix(in lab,red,red)){.\!border-decay\/40{border-color:color-mix(in oklab,var(--color-decay) 40%,transparent)!important}}.\!border-dream\/20{border-color:#a855f733!important}@supports (color:color-mix(in lab,red,red)){.\!border-dream\/20{border-color:color-mix(in oklab,var(--color-dream) 20%,transparent)!important}}.\!border-synapse\/15{border-color:#6366f126!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/15{border-color:color-mix(in oklab,var(--color-synapse) 15%,transparent)!important}}.\!border-synapse\/20{border-color:#6366f133!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/20{border-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)!important}}.\!border-synapse\/25{border-color:#6366f140!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/25{border-color:color-mix(in oklab,var(--color-synapse) 25%,transparent)!important}}.\!border-synapse\/30{border-color:#6366f14d!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/30{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)!important}}.\!border-synapse\/40{border-color:#6366f166!important}@supports (color:color-mix(in lab,red,red)){.\!border-synapse\/40{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)!important}}.border-\[\#A33FFF\]\/40{border-color:#a33fff66}.border-decay\/20{border-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.border-decay\/20{border-color:color-mix(in oklab,var(--color-decay) 20%,transparent)}}.border-dream-glow\/40{border-color:#c084fc66}@supports (color:color-mix(in lab,red,red)){.border-dream-glow\/40{border-color:color-mix(in oklab,var(--color-dream-glow) 40%,transparent)}}.border-dream\/10{border-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.border-dream\/10{border-color:color-mix(in oklab,var(--color-dream) 10%,transparent)}}.border-dream\/20{border-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.border-dream\/20{border-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.border-dream\/30{border-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.border-dream\/30{border-color:color-mix(in oklab,var(--color-dream) 30%,transparent)}}.border-dream\/40{border-color:#a855f766}@supports (color:color-mix(in lab,red,red)){.border-dream\/40{border-color:color-mix(in oklab,var(--color-dream) 40%,transparent)}}.border-dream\/50{border-color:#a855f780}@supports (color:color-mix(in lab,red,red)){.border-dream\/50{border-color:color-mix(in oklab,var(--color-dream) 50%,transparent)}}.border-recall\/30{border-color:#10b9814d}@supports (color:color-mix(in lab,red,red)){.border-recall\/30{border-color:color-mix(in oklab,var(--color-recall) 30%,transparent)}}.border-recall\/40{border-color:#10b98166}@supports (color:color-mix(in lab,red,red)){.border-recall\/40{border-color:color-mix(in oklab,var(--color-recall) 40%,transparent)}}.border-subtle\/15{border-color:#2a2a5e26}@supports (color:color-mix(in lab,red,red)){.border-subtle\/15{border-color:color-mix(in oklab,var(--color-subtle) 15%,transparent)}}.border-subtle\/20{border-color:#2a2a5e33}@supports (color:color-mix(in lab,red,red)){.border-subtle\/20{border-color:color-mix(in oklab,var(--color-subtle) 20%,transparent)}}.border-subtle\/30{border-color:#2a2a5e4d}@supports (color:color-mix(in lab,red,red)){.border-subtle\/30{border-color:color-mix(in oklab,var(--color-subtle) 30%,transparent)}}.border-synapse{border-color:var(--color-synapse)}.border-synapse\/5{border-color:#6366f10d}@supports (color:color-mix(in lab,red,red)){.border-synapse\/5{border-color:color-mix(in oklab,var(--color-synapse) 5%,transparent)}}.border-synapse\/10{border-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.border-synapse\/10{border-color:color-mix(in oklab,var(--color-synapse) 10%,transparent)}}.border-synapse\/15{border-color:#6366f126}@supports (color:color-mix(in lab,red,red)){.border-synapse\/15{border-color:color-mix(in oklab,var(--color-synapse) 15%,transparent)}}.border-synapse\/20{border-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.border-synapse\/20{border-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)}}.border-synapse\/30{border-color:#6366f14d}@supports (color:color-mix(in lab,red,red)){.border-synapse\/30{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)}}.border-synapse\/40{border-color:#6366f166}@supports (color:color-mix(in lab,red,red)){.border-synapse\/40{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)}}.border-transparent{border-color:#0000}.border-warning\/30{border-color:#f59e0b4d}@supports (color:color-mix(in lab,red,red)){.border-warning\/30{border-color:color-mix(in oklab,var(--color-warning) 30%,transparent)}}.border-warning\/40{border-color:#f59e0b66}@supports (color:color-mix(in lab,red,red)){.border-warning\/40{border-color:color-mix(in oklab,var(--color-warning) 40%,transparent)}}.border-warning\/50{border-color:#f59e0b80}@supports (color:color-mix(in lab,red,red)){.border-warning\/50{border-color:color-mix(in oklab,var(--color-warning) 50%,transparent)}}.border-white\/5{border-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.border-white\/5{border-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.border-t-dream{border-top-color:var(--color-dream)}.border-t-synapse{border-top-color:var(--color-synapse)}.border-t-warning{border-top-color:var(--color-warning)}.bg-\[\#A33FFF\]{background-color:#a33fff}.bg-\[\#A33FFF\]\/10{background-color:#a33fff1a}.bg-amber-400{background-color:var(--color-amber-400)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-decay{background-color:var(--color-decay)}.bg-decay\/10{background-color:#ef44441a}@supports (color:color-mix(in lab,red,red)){.bg-decay\/10{background-color:color-mix(in oklab,var(--color-decay) 10%,transparent)}}.bg-decay\/20{background-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.bg-decay\/20{background-color:color-mix(in oklab,var(--color-decay) 20%,transparent)}}.bg-decay\/\[0\.05\]{background-color:#ef44440d}@supports (color:color-mix(in lab,red,red)){.bg-decay\/\[0\.05\]{background-color:color-mix(in oklab,var(--color-decay) 5%,transparent)}}.bg-deep{background-color:var(--color-deep)}.bg-deep\/40{background-color:#10102a66}@supports (color:color-mix(in lab,red,red)){.bg-deep\/40{background-color:color-mix(in oklab,var(--color-deep) 40%,transparent)}}.bg-deep\/60{background-color:#10102a99}@supports (color:color-mix(in lab,red,red)){.bg-deep\/60{background-color:color-mix(in oklab,var(--color-deep) 60%,transparent)}}.bg-dream{background-color:var(--color-dream)}.bg-dream\/5{background-color:#a855f70d}@supports (color:color-mix(in lab,red,red)){.bg-dream\/5{background-color:color-mix(in oklab,var(--color-dream) 5%,transparent)}}.bg-dream\/10{background-color:#a855f71a}@supports (color:color-mix(in lab,red,red)){.bg-dream\/10{background-color:color-mix(in oklab,var(--color-dream) 10%,transparent)}}.bg-dream\/15{background-color:#a855f726}@supports (color:color-mix(in lab,red,red)){.bg-dream\/15{background-color:color-mix(in oklab,var(--color-dream) 15%,transparent)}}.bg-dream\/20{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.bg-dream\/20{background-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-node-pattern{background-color:var(--color-node-pattern)}.bg-purple-500\/20{background-color:#ac4bff33}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/20{background-color:color-mix(in oklab,var(--color-purple-500) 20%,transparent)}}.bg-recall{background-color:var(--color-recall)}.bg-recall\/10{background-color:#10b9811a}@supports (color:color-mix(in lab,red,red)){.bg-recall\/10{background-color:color-mix(in oklab,var(--color-recall) 10%,transparent)}}.bg-recall\/15{background-color:#10b98126}@supports (color:color-mix(in lab,red,red)){.bg-recall\/15{background-color:color-mix(in oklab,var(--color-recall) 15%,transparent)}}.bg-recall\/20{background-color:#10b98133}@supports (color:color-mix(in lab,red,red)){.bg-recall\/20{background-color:color-mix(in oklab,var(--color-recall) 20%,transparent)}}.bg-synapse{background-color:var(--color-synapse)}.bg-synapse-glow{background-color:var(--color-synapse-glow)}.bg-synapse\/10{background-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/10{background-color:color-mix(in oklab,var(--color-synapse) 10%,transparent)}}.bg-synapse\/15{background-color:#6366f126}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/15{background-color:color-mix(in oklab,var(--color-synapse) 15%,transparent)}}.bg-synapse\/20{background-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/20{background-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)}}.bg-synapse\/25{background-color:#6366f140}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/25{background-color:color-mix(in oklab,var(--color-synapse) 25%,transparent)}}.bg-synapse\/70{background-color:#6366f1b3}@supports (color:color-mix(in lab,red,red)){.bg-synapse\/70{background-color:color-mix(in oklab,var(--color-synapse) 70%,transparent)}}.bg-transparent{background-color:#0000}.bg-void{background-color:var(--color-void)}.bg-void\/60{background-color:#05051099}@supports (color:color-mix(in lab,red,red)){.bg-void\/60{background-color:color-mix(in oklab,var(--color-void) 60%,transparent)}}.bg-warning{background-color:var(--color-warning)}.bg-warning\/5{background-color:#f59e0b0d}@supports (color:color-mix(in lab,red,red)){.bg-warning\/5{background-color:color-mix(in oklab,var(--color-warning) 5%,transparent)}}.bg-warning\/20{background-color:#f59e0b33}@supports (color:color-mix(in lab,red,red)){.bg-warning\/20{background-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.bg-white\/\[0\.02\]{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.02\]{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.bg-white\/\[0\.03\]{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.bg-white\/\[0\.04\]{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.04\]{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.bg-white\/\[0\.06\]{background-color:#ffffff0f}@supports (color:color-mix(in lab,red,red)){.bg-white\/\[0\.06\]{background-color:color-mix(in oklab,var(--color-white) 6%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-dream{--tw-gradient-from:var(--color-dream);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-synapse{--tw-gradient-to:var(--color-synapse);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-10{padding:calc(var(--spacing) * 10)}.p-12{padding:calc(var(--spacing) * 12)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-6{padding-top:calc(var(--spacing) * 6)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-\[10vh\]{padding-top:10vh}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-14{padding-left:calc(var(--spacing) * 14)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-bottom{vertical-align:bottom}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}.text-6xl{font-size:var(--text-6xl);line-height:var(--tw-leading,var(--text-6xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.15em\]{--tw-tracking:.15em;letter-spacing:.15em}.tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#E4C8FF\]{color:#e4c8ff}.text-amber-400{color:var(--color-amber-400)}.text-bright{color:var(--color-bright)}.text-decay{color:var(--color-decay)}.text-decay\/60{color:#ef444499}@supports (color:color-mix(in lab,red,red)){.text-decay\/60{color:color-mix(in oklab,var(--color-decay) 60%,transparent)}}.text-dim{color:var(--color-dim)}.text-dream{color:var(--color-dream)}.text-dream-glow{color:var(--color-dream-glow)}.text-dream\/40{color:#a855f766}@supports (color:color-mix(in lab,red,red)){.text-dream\/40{color:color-mix(in oklab,var(--color-dream) 40%,transparent)}}.text-dream\/80{color:#a855f7cc}@supports (color:color-mix(in lab,red,red)){.text-dream\/80{color:color-mix(in oklab,var(--color-dream) 80%,transparent)}}.text-memory{color:var(--color-memory)}.text-muted{color:var(--color-muted)}.text-muted\/50{color:#4a4a7a80}@supports (color:color-mix(in lab,red,red)){.text-muted\/50{color:color-mix(in oklab,var(--color-muted) 50%,transparent)}}.text-muted\/60{color:#4a4a7a99}@supports (color:color-mix(in lab,red,red)){.text-muted\/60{color:color-mix(in oklab,var(--color-muted) 60%,transparent)}}.text-node-pattern{color:var(--color-node-pattern)}.text-purple-400{color:var(--color-purple-400)}.text-recall{color:var(--color-recall)}.text-subtle{color:var(--color-subtle)}.text-synapse{color:var(--color-synapse)}.text-synapse-glow{color:var(--color-synapse-glow)}.text-text{color:var(--color-text)}.text-text\/80{color:#e0e0ffcc}@supports (color:color-mix(in lab,red,red)){.text-text\/80{color:color-mix(in oklab,var(--color-text) 80%,transparent)}}.text-warning{color:var(--color-warning)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.accent-synapse{accent-color:var(--color-synapse)}.accent-synapse-glow{accent-color:var(--color-synapse-glow)}.opacity-20{opacity:.2}.opacity-30{opacity:.3}.opacity-35{opacity:.35}.opacity-40{opacity:.4}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow\!{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a)!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_rgba\(239\,68\,68\,0\.7\)\]{--tw-shadow:0 0 10px var(--tw-shadow-color,#ef4444b3);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(99\,102\,241\,0\.15\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#6366f126);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(99\,102\,241\,0\.18\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#6366f12e);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_12px_rgba\(163\,63\,255\,0\.15\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,#a33fff26);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_rgba\(99\,102\,241\,0\.3\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,#6366f14d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_16px_rgba\(168\,85\,247\,0\.3\)\]{--tw-shadow:0 0 16px var(--tw-shadow-color,#a855f74d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-synapse\/10{--tw-shadow-color:#6366f11a}@supports (color:color-mix(in lab,red,red)){.shadow-synapse\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-synapse) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-synapse\/20{--tw-shadow-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.shadow-synapse\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-synapse) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-dream-glow{--tw-ring-color:var(--color-dream-glow)}.ring-dream\/60{--tw-ring-color:#a855f799}@supports (color:color-mix(in lab,red,red)){.ring-dream\/60{--tw-ring-color:color-mix(in oklab, var(--color-dream) 60%, transparent)}}.ring-recall\/30{--tw-ring-color:#10b9814d}@supports (color:color-mix(in lab,red,red)){.ring-recall\/30{--tw-ring-color:color-mix(in oklab, var(--color-recall) 30%, transparent)}}.ring-synapse\/60{--tw-ring-color:#6366f199}@supports (color:color-mix(in lab,red,red)){.ring-synapse\/60{--tw-ring-color:color-mix(in oklab, var(--color-synapse) 60%, transparent)}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.duration-700{--tw-duration:.7s;transition-duration:.7s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-muted::placeholder{color:var(--color-muted)}@media(hover:hover){.hover\:z-10:hover{z-index:10}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-\[1\.03\]:hover{scale:1.03}.hover\:\!border-synapse\/30:hover{border-color:#6366f14d!important}@supports (color:color-mix(in lab,red,red)){.hover\:\!border-synapse\/30:hover{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)!important}}.hover\:border-synapse\/20:hover{border-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.hover\:border-synapse\/20:hover{border-color:color-mix(in oklab,var(--color-synapse) 20%,transparent)}}.hover\:border-synapse\/30:hover{border-color:#6366f14d}@supports (color:color-mix(in lab,red,red)){.hover\:border-synapse\/30:hover{border-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)}}.hover\:border-synapse\/50:hover{border-color:#6366f180}@supports (color:color-mix(in lab,red,red)){.hover\:border-synapse\/50:hover{border-color:color-mix(in oklab,var(--color-synapse) 50%,transparent)}}.hover\:bg-decay\/20:hover{background-color:#ef444433}@supports (color:color-mix(in lab,red,red)){.hover\:bg-decay\/20:hover{background-color:color-mix(in oklab,var(--color-decay) 20%,transparent)}}.hover\:bg-decay\/30:hover{background-color:#ef44444d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-decay\/30:hover{background-color:color-mix(in oklab,var(--color-decay) 30%,transparent)}}.hover\:bg-dream\/20:hover{background-color:#a855f733}@supports (color:color-mix(in lab,red,red)){.hover\:bg-dream\/20:hover{background-color:color-mix(in oklab,var(--color-dream) 20%,transparent)}}.hover\:bg-dream\/30:hover{background-color:#a855f74d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-dream\/30:hover{background-color:color-mix(in oklab,var(--color-dream) 30%,transparent)}}.hover\:bg-purple-500\/30:hover{background-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-purple-500\/30:hover{background-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.hover\:bg-recall\/30:hover{background-color:#10b9814d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-recall\/30:hover{background-color:color-mix(in oklab,var(--color-recall) 30%,transparent)}}.hover\:bg-synapse\/30:hover{background-color:#6366f14d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-synapse\/30:hover{background-color:color-mix(in oklab,var(--color-synapse) 30%,transparent)}}.hover\:bg-warning\/30:hover{background-color:#f59e0b4d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/30:hover{background-color:color-mix(in oklab,var(--color-warning) 30%,transparent)}}.hover\:bg-white\/\[0\.02\]:hover{background-color:#ffffff05}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.02\]:hover{background-color:color-mix(in oklab,var(--color-white) 2%,transparent)}}.hover\:bg-white\/\[0\.03\]:hover{background-color:#ffffff08}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.03\]:hover{background-color:color-mix(in oklab,var(--color-white) 3%,transparent)}}.hover\:bg-white\/\[0\.04\]:hover{background-color:#ffffff0a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.04\]:hover{background-color:color-mix(in oklab,var(--color-white) 4%,transparent)}}.hover\:bg-white\/\[0\.08\]:hover{background-color:#ffffff14}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/\[0\.08\]:hover{background-color:color-mix(in oklab,var(--color-white) 8%,transparent)}}.hover\:text-bright:hover{color:var(--color-bright)}.hover\:text-dim:hover{color:var(--color-dim)}.hover\:text-synapse-glow:hover{color:var(--color-synapse-glow)}.hover\:text-text:hover{color:var(--color-text)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:\!border-synapse\/40:focus{border-color:#6366f166!important}@supports (color:color-mix(in lab,red,red)){.focus\:\!border-synapse\/40:focus{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)!important}}.focus\:border-dream\/40:focus{border-color:#a855f766}@supports (color:color-mix(in lab,red,red)){.focus\:border-dream\/40:focus{border-color:color-mix(in oklab,var(--color-dream) 40%,transparent)}}.focus\:border-synapse\/40:focus{border-color:#6366f166}@supports (color:color-mix(in lab,red,red)){.focus\:border-synapse\/40:focus{border-color:color-mix(in oklab,var(--color-synapse) 40%,transparent)}}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-synapse-glow:focus{--tw-ring-color:var(--color-synapse-glow)}.focus\:ring-synapse\/20:focus{--tw-ring-color:#6366f133}@supports (color:color-mix(in lab,red,red)){.focus\:ring-synapse\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-synapse) 20%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-dream-glow\/60:focus-visible{--tw-ring-color:#c084fc99}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-dream-glow\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-dream-glow) 60%, transparent)}}.focus-visible\:ring-recall\/60:focus-visible{--tw-ring-color:#10b98199}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-recall\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-recall) 60%, transparent)}}.focus-visible\:ring-synapse\/60:focus-visible{--tw-ring-color:#6366f199}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-synapse\/60:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-synapse) 60%, transparent)}}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:inline-flex{display:inline-flex}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}}@media(min-width:48rem){.md\:block{display:block}.md\:flex{display:flex}.md\:hidden{display:none}.md\:inline-flex{display:inline-flex}.md\:min-w-\[340px\]{min-width:340px}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.md\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.md\:grid-cols-\[1fr_auto\]{grid-template-columns:1fr auto}.md\:grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.md\:flex-row{flex-direction:row}.md\:pt-\[15vh\]{padding-top:15vh}.md\:pb-0{padding-bottom:calc(var(--spacing) * 0)}}@media(min-width:64rem){.lg\:block{display:block}.lg\:w-56{width:calc(var(--spacing) * 56)}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.lg\:grid-cols-\[1fr_280px\]{grid-template-columns:1fr 280px}.lg\:grid-cols-\[1fr_340px\]{grid-template-columns:1fr 340px}.lg\:grid-cols-\[1fr_360px\]{grid-template-columns:1fr 360px}.lg\:grid-cols-\[minmax\(0\,1fr\)_340px\]{grid-template-columns:minmax(0,1fr) 340px}}.\[\&\:\:-webkit-slider-thumb\]\:h-3::-webkit-slider-thumb{height:calc(var(--spacing) * 3)}.\[\&\:\:-webkit-slider-thumb\]\:w-3::-webkit-slider-thumb{width:calc(var(--spacing) * 3)}.\[\&\:\:-webkit-slider-thumb\]\:appearance-none::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none}.\[\&\:\:-webkit-slider-thumb\]\:rounded-full::-webkit-slider-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-slider-thumb\]\:bg-synapse-glow::-webkit-slider-thumb{background-color:var(--color-synapse-glow)}.\[\&\:\:-webkit-slider-thumb\]\:shadow-\[0_0_8px_rgba\(129\,140\,248\,0\.4\)\]::-webkit-slider-thumb{--tw-shadow:0 0 8px var(--tw-shadow-color,#818cf866);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}}html{background:var(--color-void);color:var(--color-text);font-family:var(--font-mono)}body{min-height:100vh;margin:0;overflow:hidden}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-subtle);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--color-muted)}.glass{-webkit-backdrop-filter:blur(20px)saturate(180%);background:#16163873;border:1px solid #6366f114;box-shadow:inset 0 1px #ffffff08,0 4px 24px #0000004d}.glass-subtle{-webkit-backdrop-filter:blur(12px)saturate(150%);background:#10102a66;border:1px solid #6366f10f;box-shadow:inset 0 1px #ffffff05,0 2px 12px #0003}.glass-sidebar{-webkit-backdrop-filter:blur(24px)saturate(180%);background:#0a0a1a99;border-right:1px solid #6366f11a;box-shadow:inset -1px 0 #ffffff05,4px 0 24px #0000004d}.glass-panel{-webkit-backdrop-filter:blur(24px)saturate(180%);background:#0a0a1acc;border:1px solid #6366f11a;box-shadow:inset 0 1px #ffffff08,0 8px 32px #0006}.glow-synapse{box-shadow:0 0 20px #6366f14d,0 0 60px #6366f11a}.glow-dream{box-shadow:0 0 20px #a855f74d,0 0 60px #a855f71a}.glow-memory{box-shadow:0 0 20px #3b82f64d,0 0 60px #3b82f61a}@keyframes pulse-glow{0%,to{opacity:1}50%{opacity:.5}}.animate-pulse-glow{animation:2s ease-in-out infinite pulse-glow}@keyframes orb-float-1{0%,to{transform:translate(0)scale(1)}25%{transform:translate(60px,-40px)scale(1.1)}50%{transform:translate(-30px,-80px)scale(.95)}75%{transform:translate(-60px,-20px)scale(1.05)}}@keyframes orb-float-2{0%,to{transform:translate(0)scale(1)}25%{transform:translate(-50px,30px)scale(1.08)}50%{transform:translate(40px,60px)scale(.92)}75%{transform:translate(20px,-40px)scale(1.03)}}@keyframes orb-float-3{0%,to{transform:translate(0)scale(1)}25%{transform:translate(30px,50px)scale(1.05)}50%{transform:translate(-60px,20px)scale(.98)}75%{transform:translate(40px,-30px)scale(1.1)}}.ambient-orb{filter:blur(80px);pointer-events:none;z-index:0;opacity:.35;border-radius:50%;position:fixed}.ambient-orb-1{background:radial-gradient(circle,#a855f766,#0000 70%);width:400px;height:400px;animation:20s ease-in-out infinite orb-float-1;top:-10%;right:-5%}.ambient-orb-2{background:radial-gradient(circle,#6366f159,#0000 70%);width:350px;height:350px;animation:25s ease-in-out infinite orb-float-2;bottom:-15%;left:-5%}.ambient-orb-3{background:radial-gradient(circle,#f59e0b33,#0000 70%);width:300px;height:300px;animation:22s ease-in-out infinite orb-float-3;top:40%;left:40%}.nav-active-border{position:relative}.nav-active-border:before{content:"";background:linear-gradient(180deg,var(--color-synapse),var(--color-dream),var(--color-synapse));background-size:100% 200%;border-radius:1px;width:2px;animation:3s ease-in-out infinite gradient-shift;position:absolute;top:4px;bottom:4px;left:0}@keyframes gradient-shift{0%,to{background-position:0 0}50%{background-position:0 100%}}@keyframes float{0%,to{transform:translateY(0)translate(0)}25%{transform:translateY(-10px)translate(5px)}50%{transform:translateY(-5px)translate(-5px)}75%{transform:translateY(-15px)translate(3px)}}.retention-critical{color:var(--color-decay)}.retention-low{color:var(--color-warning)}.retention-good{color:var(--color-recall)}.retention-strong{color:var(--color-synapse)}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}}.toast-layer.svelte-pry2ep{position:fixed;z-index:60;pointer-events:none;display:flex;flex-direction:column;gap:.5rem;right:1.25rem;bottom:1.25rem;max-width:22rem;width:calc(100vw - 2.5rem)}@media(max-width:768px){.toast-layer.svelte-pry2ep{right:.75rem;left:.75rem;bottom:auto;top:.75rem;max-width:none;width:auto;align-items:stretch}}.toast-item.svelte-pry2ep{pointer-events:auto;position:relative;display:flex;gap:.75rem;align-items:stretch;text-align:left;font:inherit;color:inherit;background:#0c0e16b8;backdrop-filter:blur(14px) saturate(160%);-webkit-backdrop-filter:blur(14px) saturate(160%);border:1px solid rgba(255,255,255,.06);border-radius:.75rem;padding:.75rem .9rem .75rem .5rem;overflow:hidden;box-shadow:0 10px 40px -12px #000c,0 0 22px -6px var(--toast-color);cursor:pointer;animation:svelte-pry2ep-toast-in .32s cubic-bezier(.16,1,.3,1);transform-origin:right center;transition:transform .15s ease,box-shadow .15s ease}.toast-item.svelte-pry2ep:hover{transform:translateY(-1px) scale(1.015);box-shadow:0 14px 48px -12px #000000d9,0 0 32px -4px var(--toast-color)}.toast-item.svelte-pry2ep:focus-visible{outline:1px solid var(--toast-color);outline-offset:2px}.toast-accent.svelte-pry2ep{width:3px;border-radius:2px;background:var(--toast-color);box-shadow:0 0 10px var(--toast-color);flex-shrink:0}.toast-body.svelte-pry2ep{display:flex;flex-direction:column;gap:.15rem;flex:1;min-width:0}.toast-head.svelte-pry2ep{display:flex;align-items:center;gap:.5rem}.toast-icon.svelte-pry2ep{color:var(--toast-color);font-size:.95rem;text-shadow:0 0 8px var(--toast-color);line-height:1;width:1rem;display:inline-flex;justify-content:center}.toast-title.svelte-pry2ep{color:#f5f5fa;font-size:.82rem;font-weight:600;letter-spacing:.01em}.toast-sub.svelte-pry2ep{color:#b0b6c4;font-size:.74rem;line-height:1.35;padding-left:1.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toast-progress.svelte-pry2ep{position:absolute;left:0;bottom:0;height:2px;width:100%;background:#ffffff0a}.toast-progress-fill.svelte-pry2ep{height:100%;background:var(--toast-color);opacity:.55;transform-origin:left center;animation:svelte-pry2ep-toast-progress var(--toast-dwell) linear forwards}.toast-item.svelte-pry2ep:hover .toast-progress-fill:where(.svelte-pry2ep),.toast-item.svelte-pry2ep:focus-visible .toast-progress-fill:where(.svelte-pry2ep){animation-play-state:paused}@keyframes svelte-pry2ep-toast-in{0%{opacity:0;transform:translate(24px) scale(.98)}to{opacity:1;transform:translate(0) scale(1)}}@media(max-width:768px){.toast-item.svelte-pry2ep{transform-origin:top center;animation:svelte-pry2ep-toast-in-mobile .3s cubic-bezier(.16,1,.3,1)}}@keyframes svelte-pry2ep-toast-in-mobile{0%{opacity:0;transform:translateY(-12px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes svelte-pry2ep-toast-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}@media(prefers-reduced-motion:reduce){.toast-item.svelte-pry2ep{animation:none}.toast-progress-fill.svelte-pry2ep{animation:none;transform:scaleX(.5)}}.strip-item.svelte-1kk3799{display:inline-flex;align-items:center;gap:.4rem;padding:0 .75rem;white-space:nowrap;flex-shrink:0}.strip-divider.svelte-1kk3799{width:1px;height:14px;background:#6366f11f;flex-shrink:0}.ambient-strip.ambient-flash.svelte-1kk3799{background:linear-gradient(90deg,#ef444414,#ef444400 70%),#0006;border-bottom-color:#ef444459;transition:background .3s ease,border-color .3s ease}@keyframes svelte-1kk3799-ping-slow{0%{transform:scale(1);opacity:.8}80%,to{transform:scale(2);opacity:0}}.animate-ping-slow{animation:svelte-1kk3799-ping-slow 2.2s cubic-bezier(0,0,.2,1) infinite}@media(prefers-reduced-motion:reduce){.ambient-strip.svelte-1kk3799 .animate-ping,.ambient-strip.svelte-1kk3799 .animate-ping-slow,.ambient-strip.svelte-1kk3799 .animate-pulse{animation:none!important}}.theme-toggle.svelte-1cmi4dh{width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;padding:0;border-radius:8px;background:#6366f10f;border:1px solid rgba(99,102,241,.14);color:var(--color-text);cursor:pointer;transition:background .2s ease,border-color .2s ease,color .2s ease,transform .12s ease;-webkit-tap-highlight-color:transparent}.theme-toggle.svelte-1cmi4dh:hover{background:#6366f124;border-color:#6366f14d;color:var(--color-bright)}.theme-toggle.svelte-1cmi4dh:active{transform:scale(.94)}.theme-toggle.svelte-1cmi4dh:focus-visible{outline:1px solid var(--color-synapse);outline-offset:2px}.icon-wrap.svelte-1cmi4dh{position:relative;width:18px;height:18px;display:inline-block}.icon.svelte-1cmi4dh{position:absolute;top:0;right:0;bottom:0;left:0;width:18px;height:18px;opacity:0;transform:scale(.7) rotate(-30deg);transition:opacity .2s ease,transform .2s cubic-bezier(.16,1,.3,1);pointer-events:none}.icon.active.svelte-1cmi4dh{opacity:1;transform:scale(1) rotate(0)}.theme-toggle[data-mode=dark].svelte-1cmi4dh{color:var(--color-synapse-glow, #818cf8)}.theme-toggle[data-mode=light].svelte-1cmi4dh{color:var(--color-warning, #f59e0b)}.theme-toggle[data-mode=auto].svelte-1cmi4dh{color:var(--color-dream-glow, #c084fc)}@media(prefers-reduced-motion:reduce){.theme-toggle.svelte-1cmi4dh,.icon.svelte-1cmi4dh{transition:none}}.safe-bottom.svelte-12qhfyh{padding-bottom:env(safe-area-inset-bottom,0px)}@keyframes svelte-12qhfyh-page-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.animate-page-in.svelte-12qhfyh{animation:svelte-12qhfyh-page-in .2s ease-out} diff --git a/apps/dashboard/build/_app/immutable/assets/0.IIz8MMYb.css.br b/apps/dashboard/build/_app/immutable/assets/0.IIz8MMYb.css.br new file mode 100644 index 0000000000000000000000000000000000000000..8739b098544269cba2a72cb06f40263c9fe45be2 GIT binary patch literal 9720 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 Xv@1li{animation:svelte-kf1sc6-event-rise .4s cubic-bezier(.22,.8,.3,1) backwards}@keyframes svelte-kf1sc6-event-rise{0%{opacity:0;transform:translate(6px)}to{opacity:1;transform:translate(0)}}.audit-trail .marker{transition:transform .2s ease}.audit-trail li:hover .marker{transform:scale(1.15)} diff --git a/apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.br b/apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.br new file mode 100644 index 0000000000000000000000000000000000000000..b0484eb81c4f7378bc59aaee30ffffaadc65466a GIT binary patch literal 180 zcmV;l089THLID62A<69V^S-Yn`Nl7#`Y=FG4**h2Y6WdAKgj9Lug?!BK4D?#$wHBx z{X0#N0gW^rET=c1pTc4Ytvqsja%Jn{TckUx(h~W-J~Py6BG%?^LeR5h#3`|GxTRsI zg6ElVH^DbujctXzQh)yQaMkdtXY0+~k@nhEO)u*=@1g0LZAO&t}eJ2?PLI1L0ljJ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.gz b/apps/dashboard/build/_app/immutable/assets/13.Bjd0S47S.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..6ec156c94b033f349ce3ba5237e9c9cda25b0e98 GIT binary patch literal 207 zcmV;=05Ja_iwFP!000026LpW#YQr!LMc?-oei~wa;53e4>y#P=I?s4cUl>1uO_)^`XdrJ zNeSBeeQUpJ$(z{gL?Y3w^>4eghnXkayV|qPIkkETj8B;lZo9^}!;_`MvAi z2g_i*jTg7x+`ccu-c2(-SJZxe5j@8)so6dBrrSIm|7_gONF-8@q>;lz`Z{8~^d%n! z`sY4tN<(I=*z5ys4kNHz7s&!3_aUjjG#j?r$?^I{Ss^{sX$9$a59e|AT`?w`&M=DC z>$l?bE9c(u)ezBWK|iExN}n6?p>1;Ztdz)*D8`XAd@*(k4TZlJvnYblN~mlF2UG$k z!&4YDgjoGbv^gZv&xNt?yfUTpj0kzkUJKz%3ADGV{%c2K1eU;Ao%xC|rh;V*GSugY z7DA#^A|+magOl8O=(Bc!K)Ug^6Qx?A@-U=OA%iwQ zFL2x!KthMsk9UX750{D~r9vDZ&8*SD93&Z1Sej}}g1+-Q2M!Cdu~w{25ZPOAF**5? zlF}Iq2VhLN<{10bHB@n%GU`tN;}MbBf`&zb$Y*_TLovL|9RzNq`jx01r!$tZ^uewB zoI?o-V5L|*bMR6)QQ8B9;I4QzAxSsQE#t;oDVll|yx8}GM;@}!87hXOaQd~}=Rntz zeeFC%DZZ(6DOH&i>p3J)td6MVu=xu0{#epMfb_YdHqY=27feY1M(y*wg@B|FRoR*I@+P*ZQW91o~MH@>Z4%sa0P{crbuI?N8|W! z+M(xyQB=S`4Aj;SL(fk=f9D0RQxN)oC92eUEj4RhDd5Dg3*?1VB`8ECmn!>_?2@Dk zf~fI3?@|>rG*?!dV-}|MEkA-iyL;~4C{nVs&SJdD?V$%H&!WuiD&gp0e?gcnWr}ie zh;ep!W53>yG)QTcM%e2i;L`1VW`8zi+nXWnc$SMxE zoN#s!h#5HPjDj$r@?U3dSoMLZ6b6JDmY;=KlUb?)9k{%{s_`IQedc-|%KNFL(2}1G z!LyDx>`$5t; zuHM4LT_tq~h)PASjvs3Whz2CjX39gIg<#_F$inFYm|c&cVEg!=`+ruWx8$MXjJ|_% zLO<#;Gtt6kqGEy>X#RSKk4ljfXlE6|C*FL@nowpwGMpPlgs!AIW$hCu2DT`zZ|-9C zW85SY^I*2A3q!nbjGXLQIs&_E-DRD_P;HjL=u=a|Ve2PuK9VZr4e28(wmzQ(gI{<;j0CAlEQPn$6JH6#@~Fp(Kqk8lwtF2=+5)muhSOW`c3%S0=NgoT66Vnuvciw!S8cMRynq@l_l>V42UIi8 z=Um5YY{;A{@0rs#T2$2wQ%xAV-_X|?!OX6#?tk|IR3~5<4WKHZgpzzIMoIEg!hP@j zPLy3boKNB+x{LCdv?*?Uqt4o(>RITuqUsFv6`*#4*Q)BdIm`?6%iHwl*3M?GGqm*7 z{qlCS-Od>rd9w~;Lde4Ch9|t4l+QgcqlZJA#F9 zwd3#qYv^X4)*{yjDt2e1&cfWV8p<(vK2a3a#2jDbX}5QC>1#Z5ZIpZmR1$rZRi(jX zc%A#;{gL~`1yPE8WY~!?e&qJFCvu{mT`A3X$VtV! PATOCKn8zy-cCR~8 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/16.BnHgRQtR.css.gz b/apps/dashboard/build/_app/immutable/assets/16.BnHgRQtR.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..ad885221976289adfdc6675e1923372c1c68623e GIT binary patch literal 140 zcmV;70CWEziwFP!000026LZK;txPLQ%uOv;C@xFQDM{5WDmJV#Pt+|)%uCJD&CIJd zP_51{NKDQwskAb%E-6aPD^ANV%C!QsauQ2YBQfOY-6B46&;-(5$W1OU%p6 uO)N=;o3DprZ8bzXGe6G?yK@xu3@wTkQWJ|)b@NM0YPkUAw9o0l00001<2m5~ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css b/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css new file mode 100644 index 0000000..253943b --- /dev/null +++ b/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css @@ -0,0 +1 @@ +@keyframes svelte-1jku20k-arc-drift{0%{stroke-dashoffset:0}to{stroke-dashoffset:-32}}.arc-particle{animation-name:svelte-1jku20k-arc-drift;animation-timing-function:linear;animation-iteration-count:infinite} diff --git a/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.br b/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.br new file mode 100644 index 0000000000000000000000000000000000000000..119e6b74f4ce5e27c2f0f5ee0b5dd35b4dbd0745 GIT binary patch literal 130 zcmV-|0Db=(&j0|7(`EM4SaGEQG;G_t=A<9KMTJ>!+`v9u%fj{j}65@7WI;XOUm_$!9c k4}1g$(HmYhx@_G-9|i}QnIk|CS=h`X94+uL*f1FK14sx!yZ`_I literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.gz b/apps/dashboard/build/_app/immutable/assets/5.DQ_AfUnN.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..f973c722032c178086952eb7ff27a38b126a8a77 GIT binary patch literal 148 zcmV;F0BipriwFP!000026LpO-4gxU@1bbdVLunL_E;M|_$~jF*Y*qhSeW69H%k%>-LUn z95QtjE@)f@1Pl3pH>ZzhTv#p;7YQr-%tEMN0vqW&g}R7&mdL_JWAg$dTPf4f0000J C^*Y%A literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css b/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css new file mode 100644 index 0000000..65c46b1 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css @@ -0,0 +1 @@ +.replay-stage.svelte-1cq1ntk{border:1px solid rgba(168,85,247,.18);box-shadow:inset 0 1px #ffffff08,0 8px 36px -8px #0000008c,0 0 48px -16px #a855f740}.stage-canvas.svelte-1cq1ntk{position:relative;height:360px;overflow:hidden;background:radial-gradient(at 50% 50%,color-mix(in srgb,var(--stage-color) 10%,transparent),transparent 60%),radial-gradient(at 20% 80%,rgba(99,102,241,.08),transparent 50%),#08081a}.edges-layer.svelte-1cq1ntk{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none}.edge-line.svelte-1cq1ntk{transition:stroke-opacity .52s ease,stroke-width .52s ease,x1 .6s cubic-bezier(.34,1.56,.64,1),y1 .6s cubic-bezier(.34,1.56,.64,1),x2 .6s cubic-bezier(.34,1.56,.64,1),y2 .6s cubic-bezier(.34,1.56,.64,1)}.memory-card.svelte-1cq1ntk{position:absolute;width:44px;height:32px;transform:translate(-50%,-50%) scale(var(--card-scale, 1));transition:left .6s cubic-bezier(.34,1.56,.64,1),top .6s cubic-bezier(.34,1.56,.64,1),transform .5s cubic-bezier(.34,1.56,.64,1),opacity .5s ease;transition-delay:var(--card-delay, 0ms);animation:svelte-1cq1ntk-card-float 6s ease-in-out infinite;animation-delay:var(--card-delay, 0ms);will-change:transform}.card-inner.svelte-1cq1ntk{width:100%;height:100%;border-radius:6px;background:linear-gradient(135deg,color-mix(in srgb,var(--stage-color) 30%,transparent),color-mix(in srgb,var(--stage-color) 10%,transparent));border:1px solid color-mix(in srgb,var(--stage-color) 50%,transparent);box-shadow:inset 0 1px #ffffff14,0 0 8px color-mix(in srgb,var(--stage-color) 30%,transparent);filter:hue-rotate(var(--card-hue, 0deg));padding:5px 6px;display:flex;flex-direction:column;justify-content:center;gap:3px;position:relative;overflow:hidden}.card-dot.svelte-1cq1ntk{width:4px;height:4px;border-radius:50%;background:color-mix(in srgb,var(--stage-color) 90%,white);box-shadow:0 0 6px var(--stage-color);position:absolute;top:4px;right:4px}.card-bar.svelte-1cq1ntk{height:3px;border-radius:1.5px;background:color-mix(in srgb,var(--stage-color) 70%,transparent);width:80%}.card-bar.short.svelte-1cq1ntk{width:50%;opacity:.6}.memory-card.is-pulsing.svelte-1cq1ntk{animation:svelte-1cq1ntk-card-float 6s ease-in-out infinite,svelte-1cq1ntk-card-pulse 1.4s ease-in-out infinite}.memory-card.is-pulsing.svelte-1cq1ntk .card-inner:where(.svelte-1cq1ntk){border-color:var(--color-dream-glow);background:linear-gradient(135deg,color-mix(in srgb,var(--color-dream-glow) 40%,transparent),color-mix(in srgb,var(--color-dream) 25%,transparent));box-shadow:inset 0 1px #ffffff1f,0 0 22px color-mix(in srgb,var(--color-dream-glow) 60%,transparent),0 0 44px color-mix(in srgb,var(--color-dream) 35%,transparent)}.memory-card.is-pruning.svelte-1cq1ntk .card-inner:where(.svelte-1cq1ntk){animation:svelte-1cq1ntk-dissolve 1.2s ease-out forwards}.memory-card.is-transferring.svelte-1cq1ntk .card-inner:where(.svelte-1cq1ntk){border-color:#10b981;background:linear-gradient(135deg,#10b98159,#10b9811f);box-shadow:inset 0 1px #ffffff14,0 0 14px #10b98180}.memory-card.is-transferring.semantic-side.svelte-1cq1ntk .card-inner:where(.svelte-1cq1ntk){border-color:#c084fc;background:linear-gradient(135deg,#c084fc59,#a855f726);box-shadow:inset 0 1px #ffffff14,0 0 14px #c084fc80}.replay-pulse.svelte-1cq1ntk{position:absolute;top:50%;left:50%;width:60%;aspect-ratio:1 / 1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,color-mix(in srgb,var(--stage-color) 25%,transparent),transparent 60%);filter:blur(30px);animation:svelte-1cq1ntk-pulse-in 3s ease-in-out infinite;pointer-events:none}.transfer-label.svelte-1cq1ntk{position:absolute;top:12px;display:flex;flex-direction:column;align-items:center;gap:2px;z-index:2}.transfer-label.episodic.svelte-1cq1ntk{left:6%}.transfer-label.semantic.svelte-1cq1ntk{right:6%}.label-tag.svelte-1cq1ntk{font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;padding:2px 8px;border-radius:999px;border:1px solid rgba(255,255,255,.15);background:#00000059;color:#e0e0ff}.transfer-label.episodic.svelte-1cq1ntk .label-tag:where(.svelte-1cq1ntk){border-color:#10b98180;color:#10b981}.transfer-label.semantic.svelte-1cq1ntk .label-tag:where(.svelte-1cq1ntk){border-color:#c084fc80;color:#c084fc}.label-sub.svelte-1cq1ntk{font-size:9px;color:var(--color-dim);letter-spacing:.1em}.divider-line.svelte-1cq1ntk{position:absolute;top:15%;bottom:15%;left:50%;width:1px;background:linear-gradient(180deg,transparent,rgba(168,85,247,.35),transparent);transform:translate(-.5px)}@keyframes svelte-1cq1ntk-card-float{0%,to{translate:0 0}25%{translate:2px -3px}50%{translate:-2px 2px}75%{translate:3px 1px}}@keyframes svelte-1cq1ntk-card-pulse{0%,to{filter:brightness(1) hue-rotate(var(--card-hue, 0deg))}50%{filter:brightness(1.3) hue-rotate(var(--card-hue, 0deg))}}@keyframes svelte-1cq1ntk-dissolve{0%{opacity:1;transform:scale(1);filter:blur(0)}60%{opacity:.3;filter:blur(2px)}to{opacity:0;transform:scale(.5);filter:blur(6px)}}@keyframes svelte-1cq1ntk-pulse-in{0%,to{opacity:.3;transform:translate(-50%,-50%) scale(1)}50%{opacity:.7;transform:translate(-50%,-50%) scale(1.15)}}@media(prefers-reduced-motion:reduce){.memory-card.svelte-1cq1ntk,.replay-pulse.svelte-1cq1ntk,.memory-card.is-pulsing.svelte-1cq1ntk{animation:none}}.insight-card.svelte-1y17hsl{position:relative;border:1px solid color-mix(in srgb,var(--insight-color) 20%,transparent);transition:transform .4s cubic-bezier(.34,1.56,.64,1),border-color .22s ease,box-shadow .22s ease;animation:svelte-1y17hsl-card-in .42s cubic-bezier(.34,1.56,.64,1) both;animation-delay:var(--enter-delay, 0ms)}.insight-card.svelte-1y17hsl:hover{transform:translateY(-2px) scale(1.01);border-color:color-mix(in srgb,var(--insight-color) 45%,transparent)}.insight-card.high-novelty.svelte-1y17hsl{border-color:#f59e0b66;box-shadow:0 0 0 1px #f59e0b40,0 0 24px -4px #f59e0b73,0 0 60px -12px #f59e0b40,inset 0 1px #ffffff0d;background:radial-gradient(at top right,rgba(245,158,11,.08),transparent 50%),#0a0a1acc}.insight-card.low-novelty.svelte-1y17hsl{opacity:.6;filter:saturate(.7)}.insight-card.low-novelty.svelte-1y17hsl:hover{opacity:.9;filter:saturate(1)}.novelty-track.svelte-1y17hsl{height:4px;background:#ffffff0d;border-radius:2px;overflow:hidden}.novelty-fill.svelte-1y17hsl{height:100%;border-radius:2px;transition:width .6s cubic-bezier(.34,1.56,.64,1);box-shadow:0 0 8px color-mix(in srgb,var(--insight-color) 60%,transparent)}.source-chip.svelte-1y17hsl{background:#6366f11f;border:1px solid rgba(99,102,241,.25);color:var(--color-synapse-glow);text-decoration:none;transition:all .18s ease}.source-chip.svelte-1y17hsl:hover{background:#6366f140;border-color:#818cf880;transform:translateY(-1px)}.sparkle.svelte-1y17hsl{display:inline-block;animation:svelte-1y17hsl-sparkle-spin 3s linear infinite}@keyframes svelte-1y17hsl-sparkle-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes svelte-1y17hsl-card-in{0%{opacity:0;transform:translateY(8px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}@media(prefers-reduced-motion:reduce){.insight-card.svelte-1y17hsl,.sparkle.svelte-1y17hsl{animation:none}}.header-glyph.svelte-1fv2vo0{display:inline-block;color:var(--color-dream-glow);text-shadow:0 0 12px var(--color-dream),0 0 24px color-mix(in srgb,var(--color-dream) 50%,transparent);animation:svelte-1fv2vo0-twinkle 4s ease-in-out infinite}@keyframes svelte-1fv2vo0-twinkle{0%,to{opacity:1;transform:rotate(0)}50%{opacity:.75;transform:rotate(10deg)}}.dream-button.svelte-1fv2vo0{display:inline-flex;align-items:center;gap:.6rem;padding:.7rem 1.4rem;border-radius:999px;font-size:.9rem;font-weight:600;letter-spacing:.02em;color:#fff;background:linear-gradient(135deg,var(--color-dream),var(--color-synapse));border:1px solid color-mix(in srgb,var(--color-dream-glow) 60%,transparent);box-shadow:inset 0 1px #ffffff2e,0 8px 24px -6px #a855f78c,0 0 48px -10px #a855f773;cursor:pointer;transition:transform .4s cubic-bezier(.34,1.56,.64,1),box-shadow .22s ease,filter .22s ease}.dream-button.svelte-1fv2vo0:hover:not(:disabled){transform:translateY(-2px) scale(1.03);box-shadow:inset 0 1px #ffffff38,0 12px 32px -6px #a855f7b3,0 0 64px -10px #a855f78c}.dream-button.svelte-1fv2vo0:disabled{cursor:not-allowed;filter:saturate(.85)}.dream-button.is-dreaming.svelte-1fv2vo0{background:linear-gradient(135deg,var(--color-synapse),var(--color-dream));animation:svelte-1fv2vo0-button-breathe 2s ease-in-out infinite}@keyframes svelte-1fv2vo0-button-breathe{0%,to{box-shadow:0 8px 24px -6px #a855f780,0 0 48px -10px #a855f766}50%{box-shadow:0 12px 36px -6px #a855f7cc,0 0 80px -10px #a855f799}}.dream-icon.svelte-1fv2vo0{display:inline-block;animation:svelte-1fv2vo0-twinkle 3s ease-in-out infinite}.spinner.svelte-1fv2vo0{width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.25);border-top-color:#fff;animation:svelte-1fv2vo0-spin .8s linear infinite}@keyframes svelte-1fv2vo0-spin{to{transform:rotate(360deg)}}.empty-state.svelte-1fv2vo0{border:1px dashed rgba(168,85,247,.25)}.empty-glyph.svelte-1fv2vo0{font-size:3rem;color:var(--color-dream-glow);opacity:.5;text-shadow:0 0 20px var(--color-dream);animation:svelte-1fv2vo0-twinkle 4s ease-in-out infinite}.scrubber-wrap.svelte-1fv2vo0{position:relative;padding:4px 0 8px}.scrubber.svelte-1fv2vo0{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:100%;height:6px;border-radius:999px;background:linear-gradient(90deg,var(--color-synapse-glow) 0%,var(--color-dream) 50%,var(--color-recall) 100%);opacity:.35;outline:none;cursor:pointer;transition:opacity .22s ease}.scrubber.svelte-1fv2vo0:hover:not(:disabled){opacity:.55}.scrubber.svelte-1fv2vo0::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;border-radius:50%;background:var(--color-dream-glow);border:2px solid white;box-shadow:0 0 0 3px #c084fc40,0 0 20px var(--color-dream),0 4px 12px #0006;cursor:grab;transition:transform .4s cubic-bezier(.34,1.56,.64,1)}.scrubber.svelte-1fv2vo0::-webkit-slider-thumb:hover{transform:scale(1.2)}.scrubber.svelte-1fv2vo0::-moz-range-thumb{width:20px;height:20px;border-radius:50%;background:var(--color-dream-glow);border:2px solid white;box-shadow:0 0 0 3px #c084fc40,0 0 20px var(--color-dream);cursor:grab}.scrubber.svelte-1fv2vo0:disabled{cursor:not-allowed;opacity:.25}.scrubber-ticks.svelte-1fv2vo0{display:flex;justify-content:space-between;margin-top:10px;gap:4px}.tick.svelte-1fv2vo0{display:flex;flex-direction:column;align-items:center;gap:4px;background:transparent;border:none;cursor:pointer;padding:2px 4px;color:var(--color-dim);font-size:10px;letter-spacing:.04em;transition:color .22s ease,transform .22s cubic-bezier(.34,1.56,.64,1)}.tick.svelte-1fv2vo0:disabled{cursor:not-allowed}.tick.svelte-1fv2vo0:hover:not(:disabled){color:var(--color-dream-glow);transform:translateY(-1px)}.tick-dot.svelte-1fv2vo0{width:8px;height:8px;border-radius:50%;background:#ffffff1a;border:1px solid rgba(255,255,255,.15);transition:all .28s ease}.tick.passed.svelte-1fv2vo0 .tick-dot:where(.svelte-1fv2vo0){background:var(--color-synapse-glow);border-color:var(--color-synapse-glow);opacity:.7}.tick.active.svelte-1fv2vo0 .tick-dot:where(.svelte-1fv2vo0){background:var(--color-dream-glow);border-color:#fff;box-shadow:0 0 0 3px #c084fc4d,0 0 14px var(--color-dream);transform:scale(1.3)}.tick.active.svelte-1fv2vo0{color:var(--color-dream-glow);font-weight:600}.tick-label.svelte-1fv2vo0{white-space:nowrap}.step-btn.svelte-1fv2vo0{width:28px;height:28px;border-radius:6px;background:#6366f11a;border:1px solid rgba(99,102,241,.2);color:var(--color-synapse-glow);cursor:pointer;transition:all .18s ease;font-size:11px}.step-btn.svelte-1fv2vo0:hover:not(:disabled){background:#6366f133;transform:translateY(-1px)}.step-btn.svelte-1fv2vo0:disabled{opacity:.35;cursor:not-allowed}.insights-scroll.svelte-1fv2vo0{max-height:520px;overflow-y:auto;padding-right:4px}.stat-cell.svelte-1fv2vo0{padding:.5rem .75rem;border-left:2px solid rgba(168,85,247,.3)}.stat-value.svelte-1fv2vo0{font-family:var(--font-mono);font-size:1.25rem;font-weight:700;color:var(--color-bright);font-variant-numeric:tabular-nums;line-height:1.1}.stat-label.svelte-1fv2vo0{font-size:10px;color:var(--color-dim);text-transform:uppercase;letter-spacing:.1em;margin-top:2px} diff --git a/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.br b/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.br new file mode 100644 index 0000000000000000000000000000000000000000..1e5f381611bdd7a6041c97b126708402cdb5fb3d GIT binary patch literal 2562 zcmV+d3jOsP5ikIZ($wLMO?u$?61Jby-l~=) zdl-qA>ljznmIIl!Q7|9|{=cuE_DWCg=kJa^rXCYy&$;xJMp*d&Tb|~mQ(CS2cHion zzKhaoV-1?|OkfBPB7wY7tDE)~_%`O(cw3tah7evF|J-r`e3#872>8o;-AU?#r{(qO z>GX4!8F^8GBmTa4p2%Ye8(7N#6uJ3w7|IW%+pN+Jrcyji&U=humc{AfO?M22sMBNF zUV%yD_6+iy-3P2Cut zeJmX>j|5vhOt;zWZSn3Ww`m-Sfj!Q*iH;@f#_WpEWE{`zaFmR*Kn8A7>p;jI>R?>S z0(;;c1_n(B2=|!^kx`jo^xU0Kr4qL9oH!fXFgg>PWRIdyGPme!Hg5(HhJuC_9lC(b zsJB9j9!h&}l!*Rd; zJUnmb@vH;JZ-FuEgX+ugLNFsAdn0sdn=__Sn&6Yt{>Gq5j^J2yCexQw&W)YW zOU{P9&|d0}fvDN@?J?1NbS(kd!_r!HuY;L;u0(<$Le^+M% z-O!U9=1)do=8$@-W>c+#I;zMyx#F5DDSjR6Rd{E~cpl%S--=<2Un){@EWpsmJgS}UVh(AEZs|tdV1g)8E8S+97U!vcsvV% z1L;2)6?G(yc_}|E)R^W<;i2A#7y^B%gS1hDDJA_Vw%T4T_TM}W;wkYO?c*;!mQ?l@ zS5oS0OWH~9;7%*$hFUubVw z$h?2@*cYk-7IIYx0sJO0Ko;4+@CCi}o%}3RC4OkO4?^ilR_P_guc`#vi=kL$=y2iGwQmt5tD&Cjk7(fnHkq}$_sl0%2gpmz_> zcWwb?JUNv1x>~F4QlHKi{`gEFQ!DH(pJO#@^Cj6HH|(8rBZdLBA=fhl+d4Pn>px@| z;^S>y=(ZE6!vjw(?fe{Zvz<4~SyzbcRL#5fi~2cs=1jMf!O48cr|1SogL<-ypFC46 zLqGx+fw^}ldwjc>WBBRusWGLBvzk7)oXht~FFV-I)}n--Hj1BdHQZE;H+|M_#ri@< z9tsG4cnPS5WAF#dqB>Dd4g}I<6@S7YcQK8&9RSa#obA^L^vP47Kxq4N%!ijb9AuAz z`{dkHd76w>wt(F{e}DN+Xn=2Kqdc}h&QKByMbRBmE&#Gu{87O3GY_7v2wV>E2h5^X zkJtW-nlyI$`G7i4fppUi2i#^A1?8Zh=?|5gJ;ea)ai>Go{L+(UbVi0$wnrmmyTky8 zzJ#$OHdsoWT2{djdjkfP4+*oqQz9y;YNMxgZc>tA+F4}I_&4E#5SLdX<%ZvNFnJGZ z8c7hbE)k(`>qq)Db@46xTitMW_r1w}IAPTmz^jg|C>9pAyl zy%TjP(!>7G#g@sB}RtTL>kpW_{Bc;--RjZNqQ$n8J>c zPhfl|)M5)Xpi(1`s=5}1n+)5HTvzB?l;>$|T+*?wpF{uo{PX#--_nC!B$;w>A(ZL` zC^ocXcn^k_@DSO>n4q82Boq6y7rQiBSaz2MAySR0DYjol0#!mII63ZNG5X0V9`UW< z-?zQ)P`yeSNSK+&Ja=ss_7OUhkl zi&`ag22PENmFWUOf5^F8o=Tst67%!7X4kxgH{F-OvDha3G&9Q{ zU7tWK6bCZPGYgUS3X?w!W8~Swa*bz2?QAmh6U{X6ch+Pjsa1NTEW}!SWcL6MCPlyj%SAH z`x?3YsUA#qJUyO@Xu|4e4$~CTHa(z8;FN44NOsW0Vr?cEQJtt}xLBko0^j^PLdZlz zD}BlpH))<-iD_<)&Mfx#5A_3xU09w7WA;2vu5~!Te})r3BH5m>G(!6l?&;q(i0Ga0 z7F;*>O1@48>p_#Cup4u2$bFp2$KCY*#p#H#dc*v-LN35ta)D`}jZ}l7nXFC;!Rd?@ zCR~oqlVpKoU_s*)3aH$?u0KVk#yX^_$}i^dk5fPmH9euFopg&mQz^@8P*KYE6JfrQ ztnv3874id=L!G6C5tuHTvSXSUBe85(gpBclm@;d65M?oQ+iCu-M%$^0Xf>xr`;2A7 zHcjuu@s`wGh40C9(H!2*Zv%%kzZ{scaNP$|0}(SxY=uLHRJWFDqvWIdh;WBP=q#a$ z+Aw+ebC3$(vzU$W4Sj9S6x5@8+dcWNEtA0x>qSV>A<-=V05zKMxJAZgd;}XWA`{5O z4vtuzrI=c-GXLt058(P?#&fhU#F6IUD--1h+UobvW)|0$Qr<@xdqzl%IJX)(}={Yc!_9j5a{{EG>Q YQd{aHC6cCU(q<}{>G4RnLK?Vu11wAhsQ>@~ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.gz b/apps/dashboard/build/_app/immutable/assets/6.BSSBWVKL.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..31323c7b9b16251d665e25d75628da0bf23b3ede GIT binary patch literal 2906 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 E09@Cu0RR91 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css b/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css new file mode 100644 index 0000000..985879a --- /dev/null +++ b/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css @@ -0,0 +1 @@ +@keyframes svelte-1uyjqky-fadeSlide{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}} diff --git a/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.br b/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.br new file mode 100644 index 0000000000000000000000000000000000000000..f233cae882b39edf8586301b5f3bbcf2c27c0c47 GIT binary patch literal 89 zcmV-f0H*&NaRBIzlT`IJZg5_zgAO&Y)JF)}N2lNh2Ou%Tfdpyb>F&b@oP{th)4-p& vFW>mz4)&`Yj#9JEw_E#HtJ0#}q57NjpL^OhJ@av2f=z_IJd$StSTvCU#)>Ui literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.gz b/apps/dashboard/build/_app/immutable/assets/7.CCrNEDd3.css.gz new file mode 100644 index 0000000000000000000000000000000000000000..c8d6d4360e29673f6cfbc68dfed7ad88860a37fe GIT binary patch literal 104 zcmb2|=3oE;CgI`}ertWSz0UaRhH2<|pVjodYO1sLjMkZTSA4yFJbBNZ^zmG47O?i5 zzK72_ot0aRHt1=3ozeC?t$%7O)8--}?;vGU9WE`CZ0}DGPw{NjHomZC?NcU(<7Qt});function b(t){return(i==null?void 0:i.createHTML(t))??t}function w(t){var r=h("template");return r.innerHTML=b(t.replaceAll("","")),r.content}function a(t,r){var e=_;e.nodes===null&&(e.nodes={start:t,end:r,a:null,t:null})}function H(t,r){var e=(r&E)!==0,c=(r&g)!==0,n,m=!t.startsWith("");return()=>{if(u)return a(s,null),s;n===void 0&&(n=w(m?t:""+t),e||(n=l(n)));var o=c||p?document.importNode(n,!0):n.cloneNode(!0);if(e){var T=l(o),v=o.lastChild;a(T,v)}else a(o,o);return o}}function O(t=""){if(!u){var r=d(t+"");return a(r,r),r}var e=s;return e.nodeType!==N?(e.before(e=d()),x(e)):A(e),a(e,e),e}function P(){if(u)return a(s,null),s;var t=document.createDocumentFragment(),r=document.createComment(""),e=d();return t.append(r,e),a(r,e),t}function R(t,r){if(u){var e=_;((e.f&y)===0||e.nodes.end===null)&&(e.nodes.end=s),M();return}t!==null&&t.before(r)}export{R as a,a as b,P as c,H as f,O as t}; diff --git a/apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.br b/apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.br deleted file mode 100644 index 6d60191764adcdf011ee4f0f55300793fe5778bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 603 zcmV-h0;K&L$pk=*lM)_TG(Y)_jn7%X0oM1QnD2@_uS9n?cNY( z~P{AJ*sa1+D( zz?i;gu)>)TX7~U*Jck#2gjcL!i%*Vzg7Bl#r@uEBkItXzSx_a_e~ik?*$^931{g7< z)V-e^%u*?JeZW$?C{Z*i#$XNSNHftPH49D$%=0FL2SwA2`2)pusIZnrl-5dWJq@0V z4jYQ2Jw@bBOjy!2GK463YhVh?(p0y!fQZ=b#)KOR?~3OMD9-3gq=x;&VzNAh_!yQm z{lx;*W!6y?Qrb<#%ZTJPL;FSm<08K)2>+GxrXE~@VT|NCWXT5sxmH9HTNj>8q1Xm0 zvXrn#tNTmf^Bc^V+f=1Y<5o*c&Z5>q>RxILtQ=Bz0J(FRj$nmICJY1`s0}HUmYE56 zEziO72A17ebnvSgk>q#;%L}lGcF5Wj;}ZYgVHVRf}|R`$f2wt0%c zf9abS;E>krw3^XII#wF^o;xr(`>Fv)juT5RQ32i(tQ4Z*$yWRm>TF|EFVSlC}Eic><@nlZn2LH->ae-N$#k+vX+MIQvofRG@`(3`yj(vBKws(5ahv&@NGZ^p5c zfaGhj?zRX@A%VdGt49Cs0Dn?Uq+hu3lL4tu#LNIhkMbR+xqUot(^_mTbULn>{A@sa p88nh&CYoBLOwnVKt$mU{mtd%6U`X%FKt=b<;}N|z-d;u^l_y0IDTM$4 diff --git a/apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.gz b/apps/dashboard/build/_app/immutable/chunks/7UNxJI5L.js.gz deleted file mode 100644 index 5d1b6b61c3138822fb05fa13df21db9ac87dc266..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675 zcmV;U0$lwciwFP!000026Lpl!ZreH#hWF)~bj-RqixyTHBj`y_dPy1-M!PI% zX%wrVNrN2Q32eQ4LCKe-MOU9RoI8K8S+0DLow*vAI9QNbBvxd6q9yY_aYfsNA7uVd zydra*cu%v0HJP7@k<5q0M>4MyZ^(R1yd_g6K9Kp8c-hv$FLU+s+tr(oKD_!@{fv3B zF=0>_rFT&VjRvUoz4dcrXNx9k?bg;#H@>L`BWYKqe90^cg?3xoy4>$q)5@3YB|A|~r{h~+F*wS`IB}}9-f?Hi##l5p zaNqq*TkuF5?UglA-Ypti6$WOs!Io|0fdNncbPv8g@8AoF&T~vdWb5PYRUj|&^Sv1e z6p%vOZz>+`{l1grGOcf?z-rF54-Bj;K%@s?#K|Qvk^v@0;&b6Uz`t%T)e(K#L@&Aj z4!`e%xlaV7@Vn1DzwD0k9I0#K*s3VATCuAjP}fa|C(`=bOQCD%BrpJ0_3#n3*5m#D zpf1I(I!F%Bn(M3)>E=|jmFy@?IqoH3%Mab_^ff&jhD^eo?h;Dso}ik(BuHEQ^9!C} JdR)o`004-rNY?-W diff --git a/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.br b/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.br deleted file mode 100644 index 38d780b21a44b959854a9f5ff373470f5c4eb2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 364 zcmV-y0h9h4egYt5HD~|(yxJYvl8-2n50DGqI4uvNOk9)yfuHPMDncU{r4t+Oh6A2O zA$-1V7dZqA2}*D+p>XgoYaKmzA1 zdwU5yVV(w9EvAANYd$7tkDFQ^oR!RllKo{3_%i~bfOl=V7pe+W3|CqdphH^C6{pfb z=H@D$@AW}YrDz)+P1XPyIuW*xKGv9~2>|l06%v<+yFyUD@}H)+bqj<#WaWcH{je{} zUm<~vmA~xJVNqvaLgpuZa0~LtY#1(dnU5`yxTo9~n_=6jx1*-!9 diff --git a/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.gz b/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js.gz deleted file mode 100644 index 4925fdb8c150210aec8130d4ae2995dc50e62a71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 398 zcmV;90df8xiwFP!000026ID`8i`y^|z4uqhdk7jB+_-xwHd-H+URu~g3%!IKWM`aJ zk)>20p+V@s7um_~=JXKr=FOX@QS-^VkUW!~jd(1e^W^OOP=9`Y{^^Dve@*?zKXhs( z%59-oluf}2<(GoP+Ihm)0tb|j1&=qO-`~D|x2}0ygfs=_Mb)4Zzb^A&HHU7BW(>+2 zcHx8u9i-73A6OJ_XZC&13y9={b<~=uHF_J}NbSJSRvp+DFd82RKRPu~J7wt9#ACfQ zR6@{ZQ*p(VVGdxae4ul{D^pP4FX|*jL5TG_r#_2y4&HT&sUz(vouy+zRNL;pI&wlO zo>J&P=*afKZ%>qv0fVTT>?lNM7;QGI&0ceY_Vh-D{Fc$oZ}E^w`8_+sAz98rJf+Dx zUQD^7ML;{Zzu&k!azcfPOq|KdK~q~bc$PX+TWvFBxH{Sqn*ICi7f!IOYlQEDyQHh{ st<8 diff --git a/apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js.br b/apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js.br deleted file mode 100644 index be20c60c22e27f34726e72e9400a32e3970b3fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 513 zcmV+c0{;CQ<^y14HJAT=UTq$gEqOVD$^+zF;eZ1N+j6zGx^ppoui}DxI!FxhBc%~4 zUCeiDkBCszHDYVOH@lQZj0X?@ZUbckL&LS2k}6gq*-#Zas0L$Hk9zc2q6IxwYwg9o z6teJi*gTu+Qbi7oh=o4?hKw}j9G38}pF<{{MVCl3!%f9Lf&xXm0~*^T7z4&0Sy#a{ z4>D<3hDzG*vHp7+-99LMB}4M8C)k)+TbAi4X=M*Awe!ELd0~<>jkj7h{rC@VMOp-3PQLKWp9iYjM4 zOH3R)^<`<4?!P1NrfDfp$77u{7oV}-?VXRu?}ZFSVA~9i$!W%h$u}9-Ouo&yWAa_b z4f~OyW7ioDee2z>ZJMnUc{dv?|ps|1# zmi`o9Qvf70{)s+n6Uon)<&dph^~jpBjOR*+##u{E1ni%5xjh-;$6n>o>rax~D~c@U`2!Fu zn~k);sANf83_K&!qFg>qzbfbDyxCB*B~`M)xF^n9v0U+;-19~n1H^9=`NP#9b^e1f zV3297$pjj5EAfm21{aIxcjai}+`0%$rGs1>QY$R6wn9~v28DeK7FjnLx2mcnmr6m0 zJu)}GOD>m$hrxalLMYdy9ofib6Lm+IhH`|bnGcIamzk1pWB~K9n7wWx8<|){7ON_W z^O6ig``=0;){var r=l+i;(l===0||e.includes(n[l-1]))&&(r===n.length||e.includes(n[r]))?n=(l===0?"":n.substring(0,l))+n.substring(r+1):l=r}}return n===""?null:n}function c(t,f){return t==null?null:String(t)}export{c as a,o as t}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.br b/apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.br new file mode 100644 index 0000000000000000000000000000000000000000..262d659ac377853302c31e978235ce4d8492a4b7 GIT binary patch literal 272 zcmV+r0q_1BsR1C2#5fjmav%+gA*(jk!KjCR^w|H|pb}$%w0d)-Rd3QRMqr?(ZtCBI z(%RYB=iOsdqaq71khB1oZu78??vSZzl2-&hUvzT0suk)SQa!6VH|zh+y}6BsT5A+^ zyXcy((_6&;5?lefF;|YG9VfY(-8xzaK_rk$5=S}7TCYh$I2A6cTPshZCMPJM+(c(xB=ZLh_J6yO&DWfzILoPpnOHMQxY>n+1oa{gf)O^3IFV?t{nzMdO z6a>*3fSDzjK2uc*R1i1UvO%V_wn>;L=cG@XasK_X?M47NP9-;HEx$0rg(y_KF(5B~ W^_6~)Wz0VdHM^);+RYHS_!$e5#DPKp literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.gz b/apps/dashboard/build/_app/immutable/chunks/BKuqSeVd.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..ac3f7e94c0d91ae6c022dc1e9416d17696cc7322 GIT binary patch literal 302 zcmV+}0nz>+iwFP!000026J3x^PQx$|h1c{HmKTvn30AsIG-O4$U9fB-wN33}u*S$g zRZ*L}a28I6Oj|&#Mtb_*o0&H{3Xv&XNh#OtZr1x=e}43bJ}n*>i}ldzL}N6Lm=m$m zRf5xD;~8N@q-1T!dBb@bTcd?83PDI6m7MWXHySdoofp{>nA2>zeNkhSuj)OB1YopC zt1!T?D>R{1HYjGaAZZot<1^eM42G*zS*%-Ok))xWIxe*cl?8afy1g9e(Uv9?i1qob zq@mHKoeF|h_I^G96ov4Jc-!%h@dH3dc=6{SNrtoy(Hq)}I5>#-QpY#v<7s4@z&4f3BTnt?3&7(q*{T5m0BOFC A761SM literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/BNytumrp.js b/apps/dashboard/build/_app/immutable/chunks/BNytumrp.js deleted file mode 100644 index 9457808..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/BNytumrp.js +++ /dev/null @@ -1 +0,0 @@ -const e={fact:"#00A8FF",concept:"#9D00FF",event:"#FFB800",person:"#00FFD1",place:"#00D4FF",note:"#8B95A5",pattern:"#FF3CAC",decision:"#FF4757"},F={MemoryCreated:"#00FFD1",MemoryUpdated:"#00A8FF",MemoryDeleted:"#FF4757",MemoryPromoted:"#00FF88",MemoryDemoted:"#FF6B35",MemorySuppressed:"#A33FFF",MemoryUnsuppressed:"#14E8C6",Rac1CascadeSwept:"#6E3FFF",SearchPerformed:"#818CF8",DreamStarted:"#9D00FF",DreamProgress:"#B44AFF",DreamCompleted:"#C084FC",ConsolidationStarted:"#FFB800",ConsolidationCompleted:"#FF9500",RetentionDecayed:"#FF4757",ConnectionDiscovered:"#00D4FF",ActivationSpread:"#14E8C6",ImportanceScored:"#FF3CAC",Heartbeat:"#8B95A5"};export{F as E,e as N}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BNytumrp.js.br b/apps/dashboard/build/_app/immutable/chunks/BNytumrp.js.br deleted file mode 100644 index bda5d36c7897a30a651d2a36c01cc1e4c059186d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmV-80muFuoC1K1!nW-(iCUb`E5ZpwI=9pf2?ywnaDD0e{LlNol2pMYM(Fg1+ctmD zk3Utzq1c%EDejkdBMZ}Q!2*`9R;(6_6;IXa*kIzLpV-n2(#UyN`J zPtw-);&{24-iyuv6BHn@lPXM}WtdgPMWbyu%0y|@6Pk#4%eQqeVEY)JW$D>%@wnoX z_Z~N_&ffxzya{xoF{d5#`5jZ&@|gB(KS3CAIylZv$yxM?Y?`7-1dr%aZOm2` zg^(UOkQ*h&G)p1<0W6MnQzn6w8zmgeE~ zgah%HW`u~{m4D{1zWe6+s+l)$TFy#4T=F@&*IuU2NB z@#?~Lb6M_`UJLmGcBvs)=&=2lLtF2%u0>$`zDIr|9!8N`Ds7aI4I>O~1kQJuQXcW1 z>2I2HCvLW7S$}g)gP&fh3so8|q$U^W(034fa8i5aRr6obT~7oj;ic WgvCx``aGZSfBgp`(Q3b)0ssKmbhcjr diff --git a/apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js b/apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js deleted file mode 100644 index 86a004d..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js +++ /dev/null @@ -1 +0,0 @@ -import{t as l}from"./ByItJEsC.js";import{T as e}from"./VE8Jor13.js";function u(s,c,r,f,p,i){var a=s.__className;if(e||a!==r||a===void 0){var t=l(r);(!e||t!==s.getAttribute("class"))&&(t==null?s.removeAttribute("class"):s.className=t),s.__className=r}return i}export{u as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js.br b/apps/dashboard/build/_app/immutable/chunks/BR2EHpd7.js.br deleted file mode 100644 index d86d151da61ea365026f31e9981532f2dfcffd41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172 zcmV;d08{@P5&>YuinaAG$rXGt%M8`+4zYEo|KTWi``UuiOIr&PXkDWOBWz34lZE(v zjv3X23c4?gQxXq<%dhMQjd!01ZEE^El1mgC@=}c2`N8=XB~jshH_4s5H+SV;+-+fp zDaap>L%)``D|7k#O(oz4fX?+CvS-G@yjdkv;vjGI;EW{u@v>#jh^|{_t=C^V=2A@pi(>lj46DoyDJumnoOfB zEJZ2+c3&tf5egq!P}g%zZOme!1z^ZAF4+{var a=r?e.defaultValue:e.value;if(a=t(e)?o(a):a,u(a),v!==null&&f.add(v),await _(),a!==(a=l())){var d=e.selectionStart,s=e.selectionEnd,n=e.value.length;if(e.value=a??"",s!==null){var c=e.value.length;d===s&&s===n&&c>n?(e.selectionStart=c,e.selectionEnd=c):(e.selectionStart=d,e.selectionEnd=Math.min(s,c))}}}),(y&&e.defaultValue!==e.value||b(l)==null&&e.value)&&(u(t(e)?o(e.value):e.value),v!==null&&f.add(v)),i(()=>{var r=l();if(e===document.activeElement){var a=h??v;if(f.has(a))return}t(e)&&r===o(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function t(e){var l=e.type;return l==="number"||l==="range"}function o(e){return e===""?null:+e}export{E as b}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BRHZEveZ.js.br b/apps/dashboard/build/_app/immutable/chunks/BRHZEveZ.js.br deleted file mode 100644 index dfcb7540f8589531d86fce2b32d6498ba03cbcd6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 416 zcmV;R0bl+bGXo$T2f3-~zC}NwnA57Nf1fMXL69i3UK@Ls^&i60}62fV>;&S_PwoO3#?e``2w%GHSiM&Nd#lM^W63;iRN&0{#t3hD*Qg- z$OWAAaOGbZ{e#Yb^RktnX0!c&`B_$bn_F!XTaz#7*mEnM-cDX{{pQT$Kdwm%bZo#` zhSPFXbx`e6sjS=JqJAF7avRY9Os+YqH0a2ds1z%=sKi|)5?b#8@{ML0cEp<5-yMy)Uq#&CVn!=6mL=$YJj4N%LI0U$jD zi-t)g^bz>fq+_?cjUU4nY5 zeAf!|VYmJKrSl&@nWtWCs_2T)bS~Q}1`83bejUhX6*_*&elb1YbJ(`50^Yh}q1XSi%3Ib~3bkn)r+O%~o~B8II!gIAu@#;>8ppk|`W(Fz?GI}v$GV*Q>c{yqPZ?ffgI&AUH0c~a{%0{{S@72vA? diff --git a/apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js b/apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js deleted file mode 100644 index bf8740b..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js +++ /dev/null @@ -1 +0,0 @@ -var D=Object.defineProperty;var g=a=>{throw TypeError(a)};var F=(a,e,s)=>e in a?D(a,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):a[e]=s;var w=(a,e,s)=>F(a,typeof e!="symbol"?e+"":e,s),y=(a,e,s)=>e.has(a)||g("Cannot "+s);var t=(a,e,s)=>(y(a,e,"read from private field"),s?s.call(a):e.get(a)),l=(a,e,s)=>e.has(a)?g("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(a):e.set(a,s),M=(a,e,s,i)=>(y(a,e,"write to private field"),i?i.call(a,s):e.set(a,s),s);import{U as x,ae as j,af as k,ag as C,ah as A,ai as B,T as S,aj as T,ak as U,al as q}from"./VE8Jor13.js";var r,n,h,u,p,_,v;class G{constructor(e,s=!0){w(this,"anchor");l(this,r,new Map);l(this,n,new Map);l(this,h,new Map);l(this,u,new Set);l(this,p,!0);l(this,_,()=>{var e=x;if(t(this,r).has(e)){var s=t(this,r).get(e),i=t(this,n).get(s);if(i)j(i),t(this,u).delete(s);else{var c=t(this,h).get(s);c&&(t(this,n).set(s,c.effect),t(this,h).delete(s),c.fragment.lastChild.remove(),this.anchor.before(c.fragment),i=c.effect)}for(const[f,o]of t(this,r)){if(t(this,r).delete(f),f===e)break;const d=t(this,h).get(o);d&&(k(d.effect),t(this,h).delete(o))}for(const[f,o]of t(this,n)){if(f===s||t(this,u).has(f))continue;const d=()=>{if(Array.from(t(this,r).values()).includes(f)){var b=document.createDocumentFragment();U(o,b),b.append(A()),t(this,h).set(f,{effect:o,fragment:b})}else k(o);t(this,u).delete(f),t(this,n).delete(f)};t(this,p)||!i?(t(this,u).add(f),C(o,d,!1)):d()}}});l(this,v,e=>{t(this,r).delete(e);const s=Array.from(t(this,r).values());for(const[i,c]of t(this,h))s.includes(i)||(k(c.effect),t(this,h).delete(i))});this.anchor=e,M(this,p,s)}ensure(e,s){var i=x,c=q();if(s&&!t(this,n).has(e)&&!t(this,h).has(e))if(c){var f=document.createDocumentFragment(),o=A();f.append(o),t(this,h).set(e,{effect:B(()=>s(o)),fragment:f})}else t(this,n).set(e,B(()=>s(this.anchor)));if(t(this,r).set(i,e),c){for(const[d,m]of t(this,n))d===e?i.unskip_effect(m):i.skip_effect(m);for(const[d,m]of t(this,h))d===e?i.unskip_effect(m.effect):i.skip_effect(m.effect);i.oncommit(t(this,_)),i.ondiscard(t(this,v))}else S&&(this.anchor=T),t(this,_).call(this)}}r=new WeakMap,n=new WeakMap,h=new WeakMap,u=new WeakMap,p=new WeakMap,_=new WeakMap,v=new WeakMap;export{G as B}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js.br b/apps/dashboard/build/_app/immutable/chunks/BYWGnCkZ.js.br deleted file mode 100644 index 7a408dfac21610f1ceece01dfd5dd567bad34d02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 885 zcmV-*1B(0`#0UT!h3U4qZL%R3xkw+`vQlSNtN7`5vY}R*dxVPE6d(ogZ7pu`^zHdN{qJ%qFsXrRSq%W)<^Xjo2lSAxH^NZU z3FzIxU2SmGy~NrlvN`1Z!FLveA!BT+uzNOsp1E~0+ZwwNAFRC|QF5dcC zOT9mjB>v7sX5_+wHCLDKgCz^n4vyFBrH4Xs57E#<-Ctrj}V3B;v%eWZ)WZRgSlJ!>P9}H@5*N`6Lq^LS6#vKFz2PbEb?fp#M6PUm~%}o0w1Bm z63G7{WfLV`vo0VM7j3Ob28Rka8nl$*u0Z_8fU>Ogj)XTBXW8ZZn|KChEx-oRA%p-O zT?vQ5N(%x+wGUAdEpZw#CwhoW=JI=5LRm^HLG(@n0$eyODKL+L2|*|w)CDNG0L`J- zQS`ek`}-B)=n=68EXM|VZSh8|6BXIPq!)q1!;0yofbS{+>c(6WpidcfPMH};uZNEV zNK6Rz8$*N6 zK34;L#IoMJEW?hlQfVA3_V;~W))M5V`3?eV2w|qlFy?EwAL0oaqK(=`J7{ao>U6`C L@)xgMDi+)h)9(6 zcy_t-g*DI7!?va`)*8z=wB6s^jBzA%kX=%wbj0U39k3(aRAl+Gq}k*Gh0#*2n!$gz z%J<(JUN$syEzI~g`kuKi?(-P;mT~mknv9HSlErRYElnBE=|ddP!V27;)Q}Y1F%J9v zipAGlYvZH%gM%)nAJ?&M_ZeH_c_gi=qS~qr_Y_G*WgY{%xl05uOU7YF$%;JV09d|F zH6JtaJdb=qk>eE&0V}GOWTVPhihRL!WVE0dW`Qo}xfY?Z|B0{f$`Ri|EKmD0JxwvE7qQ(LntZ{*xRFvGg=<7}x z?YwP-Hkm#>SAA2f(7H=je{t1ESv`#T%sQkbCk2Qsd-ea2CiQ zyWE8eDSJtkWd4{9Izb7b`{}X~59$-3>LGoA0;7^Ccw!3h_^W{=r;f25s98!@NNXck^q(2#z$l?AP?9qZ$gui5dlf z8@W@k-?KIQ#ds=!7SfX$%n0xL)90Wi?HWtr#2-{p*$ay72kTCdn@%SqF^5AqLd9?{ zm1N?uUH)D~G}#q{RQ4L0*9y|0;Aa+w$%XM8wUoV<=ZBQAUwzUn0GwYWVWmO>6tEj9 z&apZl_&l7dxk?)C)~a3{%3&4ERB{fa?*%E|4bp4%I#!RTDluA^s#3l$d;x#~&6N|} z<~_WDBNO-G$~uwwVW4yYhc_oU(6%-US8#aK?s$#*%qz~k=FF?lyv3QfIrUO{>0Yw0 S-3!&GfBXaF2b2mk{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{E as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BZYVQ1d5.js.br b/apps/dashboard/build/_app/immutable/chunks/BZYVQ1d5.js.br deleted file mode 100644 index 58f537d36b40be9ea18c9d4158c1e4fa6cf671d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179 zcmV;k08IZIxd4Ey3T$vq&%NofW*Lpe4i7Qh#FlTD+foJpp8?r4G{{9|t09GII|-Ro zg_65VTU@=($K&q???Rj&tRdz_Jx@$+a6=}ym-=vaVYio0%2c<)Y8K`%s@wI1$Jc!k z?T99J4p|LBkdRU~e0n#5S&jC?3oy6 ZADkx(c&&(c=!1,n=o?h(s):s),n),u;if(v){var A=G in r||J in r;u=((O=T(r,a))==null?void 0:O.set)??(A&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=K(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&m(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(c=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&D)===0)return i;if(u){var E=r.$$legacy;return(function(e,S){return arguments.length>0?((!f||!S||E||I)&&u(S?i():e),e):i()})}var l=!1,d=((t&q)!==0?w:z)(()=>(l=!1,i()));v&&P(d);var L=N;return(function(e,S){if(arguments.length>0){const R=S?P(d):f&&v?b(e):e;return B(d,R),l=!0,n!==void 0&&(n=R),e}return M&&l||(L.f&U)!==0?d.v:P(d)})}export{W as p}; diff --git a/apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.br b/apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.br new file mode 100644 index 0000000000000000000000000000000000000000..6abdd863c2d65264b6f757ab481ee9f9cc1fb5eb GIT binary patch literal 521 zcmV+k0`~nIz5^hP!nWD-5|_(b%aA0=hzLGypCYnJ77djBxAY_XidsrM0a74@rJ$4vzc1{=ax4Xl! z_bK0XE_Qs7-*yus@iS&hjQ&lXm5t|#7-8=zZ9cd-57oJvgFl$L@IM7Na&&9>gm00& z5C++^ShvH^Tn)iMea>GH_?fGt+h{Qzl_PZFP3fBcBrP3}hNKU>sncP{^bD}_9!gTO zb4lsS^{iH_gL84!E$9UK7@TT!^Y#Ao=u4?NwfydRF)>%4e&2+eN8ct;)uigx=s8{u z+h`?-vx#l+YP=-HYe^PFJJR{0N?b*P9%3y8$OfRILt!znq2H<&k`~ahBWjh=*zCG4 znT4-1y>P)4=x+37o4021XdaI>1KWpOE^qj4WI>1`yRt66(R|6a=zMAbj{T?H?mr#; zrxOM7a@SJQLV+qN>Eg9bHCN|vxF}0owu6eru9~-9QgW3Gvd%weGt9k2G)1~58n6Do z@Sho5@7l}7VnO`=CaQ4n=;oiTP|2O3^OxTWT>a!Ci29$x{J`P>H~ByK1ueU@F5ekp LK8;_?2(Fm{GI9$j literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.gz b/apps/dashboard/build/_app/immutable/chunks/B_YDQCB6.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e0afeaeadbfa7fab88cd88646b5b5866889de0e7 GIT binary patch literal 567 zcmV-70?7RziwFP!000026LphYPuoBch2Q%tY!t0#q^TR;DqDjUE<)iJnm{Q+$TH5_ zF>-9`8!+fuHz!tDSyyx_SktB8kP^WqMS=%f3HIqs za8Bof3%U?o(@bzn6TynU2wrF|7}1sBJ6#K&>8s$CZUhIk5FFDt!AT#N#d^p2bkII7 zCb#9Q^H}Y8>EO?JIDP9l{Ja}~EP|=&h?_jB(;~NSprnv$s&LbWr8V>98?*h=bx^Aj z+RS5W8ESPq)P>XsL!EO)5!+)*7?AfMQVJrrcPZz>UqOX#g_I*TUK&F?+%Vx|E6uI4 z>rM>4h5=@LB|Z?D^Crvuwn&%O*qu3*uF>~lqEu+Qea(C2U3kyh9eS`A(SW9G?|Q9& z7tr*cPeJTRAG!exDPZPdLaECBT|>YLAT>%stkhac2oTZakc#ivPtD&M_u8m=rLLPY zxAZSjKLK>XWTCNl|3C5m>U>)wy%Wk^-BYX-)anqKd5qgpW2PBGJmS(BjWV5t(T}Y( zysZ>8EpW3P3d^Kf>%6Xl-+qqI%*TI<+tLwq*(rH~0?XlM{<~f+>^VEAEegek=MB%>! F006Uc9mW6v literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js b/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js similarity index 74% rename from apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js rename to apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js index 5a3c575..9cdeb4b 100644 --- a/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js +++ b/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js @@ -1 +1 @@ -import{a as y}from"./ByItJEsC.js";import{T as r}from"./VE8Jor13.js";function a(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{a as s}; +import{a as y}from"./BKuqSeVd.js";import{m as r}from"./CvjSAYrz.js";function a(t,e,f,i){var l=t.__style;if(r||l!==e){var s=y(e);(!r||s!==t.getAttribute("style"))&&(s==null?t.removeAttribute("style"):t.style.cssText=s),t.__style=e}return i}export{a as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.br b/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ee058da2fd1a8017b59a4ef50c86771315effebb GIT binary patch literal 184 zcmV;p07w5D{r~`+1$Jzi-n1PeRuAKDESj2^>T}R_I4Z65Shvc)>0Ci mxYaP~GF#WoHpoj|*#^-ur*5pgtMbK*VE97uqdr<>$`c~Qi literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.gz b/apps/dashboard/build/_app/immutable/chunks/Bhad70Ss.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8c2b9ba7a4aebbca6045276e424b165e5c91758c GIT binary patch literal 199 zcmV;&06702iwFP!000026J^ga3&KDQ1>oIZaqS>?P|n>FL>(O!!AYv7a^>1;k}Fo* z|1MV4!7cE<$0M%1)Fh8gWvtphr@D;oWU&g@HEvI~;5c<}QN9Fy#Ih;Y^Bvs>k%#Ii zuC7$3CBY<5oOv`EDGy@zdzRK?>T*q8=OX}ohYYPolj?}Njw1lEXOy`JxkC`t@lcD6 z8ILssRKfe1Si-Vy@Lx^E4wpSLZ}29-Ci!jy_Jk6sQm)6_?_KWG(GxrsQZ4@g0006u BTyOvY literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js b/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js new file mode 100644 index 0000000..7857d5a --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js @@ -0,0 +1 @@ +import{aH as N,k as v,x as u,aI as w,M as p,aJ as T,aK as x,m as d,w as i,aL as y,ab as b,aM as A,v as L,aN as C}from"./CvjSAYrz.js";var h;const m=((h=globalThis==null?void 0:globalThis.window)==null?void 0:h.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function D(e){return(m==null?void 0:m.createHTML(e))??e}function g(e){var a=N("template");return a.innerHTML=D(e.replaceAll("","")),a.content}function n(e,a){var r=p;r.nodes===null&&(r.nodes={start:e,end:a,a:null,t:null})}function P(e,a){var r=(a&T)!==0,f=(a&x)!==0,s,c=!e.startsWith("");return()=>{if(d)return n(i,null),i;s===void 0&&(s=g(c?e:""+e),r||(s=u(s)));var t=f||w?document.importNode(s,!0):s.cloneNode(!0);if(r){var _=u(t),o=t.lastChild;n(_,o)}else n(t,t);return t}}function H(e,a,r="svg"){var f=!e.startsWith(""),s=(a&T)!==0,c=`<${r}>${f?e:""+e}`,t;return()=>{if(d)return n(i,null),i;if(!t){var _=g(c),o=u(_);if(s)for(t=document.createDocumentFragment();u(o);)t.appendChild(u(o));else t=u(o)}var l=t.cloneNode(!0);if(s){var E=u(l),M=l.lastChild;n(E,M)}else n(l,l);return l}}function R(e,a){return H(e,a,"svg")}function F(e=""){if(!d){var a=v(e+"");return n(a,a),a}var r=i;return r.nodeType!==A?(r.before(r=v()),L(r)):C(r),n(r,r),r}function I(){if(d)return n(i,null),i;var e=document.createDocumentFragment(),a=document.createComment(""),r=v();return e.append(a,r),n(a,r),e}function $(e,a){if(d){var r=p;((r.f&y)===0||r.nodes.end===null)&&(r.nodes.end=i),b();return}e!==null&&e.before(a)}export{$ as a,R as b,I as c,n as d,P as f,F as t}; diff --git a/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.br b/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.br new file mode 100644 index 0000000000000000000000000000000000000000..85a4fbbd67a8ce3d2ca3bcf8dd64ae4bf9d81c49 GIT binary patch literal 719 zcmV;=0xG6n!-GoAl_Uc_C}RdsnMh;)qkYE2?$2=##N`@b~(nYTcxqOoWK7_%*t zO)cG8(S8SfAf*G)E#f&VWpojd_{Q2?H;ivQ(x?^AXpxwbxyglddLaLBt9$R^F0i0+ z8YpR=>jn_G*DZ7CkPbWqPH2|t?hnDE<1B{nPoHKM z(C2Wn_kD6O^Q0j^1vqG?Fq1~a3N+*FYZ5x7B*60?_x3E!_a==o{QJa>DL<1c$YE(X z6oQbVbE)%q%KoK zCN<-vuz3*CO_k@j!0f$a!rY|pKDB7}RB$4?H~9OgVQBeieFDhs^`HwSMl(^vfV@f| z4YJT7>X>oJa}SDKQYY#U1j%hSfYKB^q89Q6?pEG;F3ZTr?AMm}zNe&#snY9wEod&w9$m_1#z>l1Ec- z!GEotwTtbIg>J-xv2_Hv`i}yRSbb>;kr4KvNKD}ufiLB;J8=-sFY~%Nap_F2@&RVH z$mAG<24E*AX0dk!K46F*ovAork@A8IQmH?1CA**pSw)p{1+N;J;c<%9j5%`YW2H(q z+EnQ?JOc<0tQmS*4H+a8dD1d~A!oC~-I_3;;{kqtY2FSmQRu~r#VYg1f`Gy!UxwZln8>M5P?w=!w!OQo)Kj^0H?cqOH6ZfvuV;= z>QcC^SRy1lK BSw#Q< literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.gz b/apps/dashboard/build/_app/immutable/chunks/BsvCUYx-.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..582084cde81d29b76f633962946e4cfb5e59abe4 GIT binary patch literal 800 zcmV+*1K<1~iwFP!000026OB|+Z{s!$e&4T1j3OX$j4#h|m7qwk=xuFL+yV^u)KhFa z@lBQkNlx1({_lgNByR6EY)_v|iR8!6B&&Mc7`KmJeSCAfyuX{Wm~n?$+3MU?jUHSBW)G^UR`b zqY+rKhJ4P`;QoP;%;5l5v|tf2w2Bku;qW{!n!K%9yR-^D{LmB(mWC6Y+B8><=3p64 zFsn*1k^Pfs!67xmrAk`2*i@>>G(1s*9V^QN4UXLTKe(>f;MQwEMkIE(PGYq3A1fyN zMxtDNyS&(&Zg#OR`=YwbkHPqj-2c(1Dq-kO1*{?W1+?%K3bR-?2Anvn5!>$i_<3XG z+9P1rLW3E)RBpGdi%>dv8)l($C;Ug}lPKYSR?tQQpF|4^>0YRJ3Vx#dvx17$SwZzi z!7s6kjyF-ysAm7>23RBsdMSp*X-0OyACi7LG)R(2vWxv#o$Rrz{a_D;xSE4WS6nuR z!H69o(j6GY=>iOr215qP^oc(M{;U2z5C6BqB!7IfXzFm4BuIh8i7Fre0!RvM0=!ue z7g4G}=sd;%CM`#=D1?|C4#yczSr^B_#(uJcwL)5*Q+8gIIR1RnMPkP{if(s){if(s.pending.delete(E),s.done.add(E),s.pending.size===0){var o=e.outrogroups;U(V(s.done)),o.delete(s),o.size===0&&(e.outrogroups=null)}}else u-=1},!1)}if(u===0){var i=t.length===0&&l!==null;if(i){var v=l,r=v.parentNode;we(r),r.append(v),e.items.clear()}U(n,!i)}else s={pending:new Set(n),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(s)}function U(e,n=!0){for(var l=0;l{var f=l();return _e(f)?f:f==null?[]:V(f)}),o,d=!0;function A(){a.fallback=r,xe(a,o,u,n,t),r!==null&&(o.length===0?(r.f&T)===0?ne(r):(r.f^=T,M(r,null,u)):re(r,()=>{r=null}))}var I=fe(()=>{o=W(E);var f=o.length;let N=!1;if(D){var x=ue(u)===se;x!==(f===0)&&(u=Z(),q(u),L(!1),N=!0)}for(var _=new Set,w=ve,b=ce(),p=0;ps(u)):(r=y(()=>s(ee??(ee=F()))),r.f|=T)),f>_.size&&de(),D&&f>0&&q(Z()),!d)if(b){for(const[k,O]of c)_.has(k)||w.skip_effect(O.e);w.oncommit(A),w.ondiscard(()=>{})}else A();N&&L(!0),W(E)}),a={effect:I,items:c,outrogroups:null,fallback:r};d=!1,D&&(u=z)}function H(e){for(;e!==null&&(e.f&Ce)===0;)e=e.next;return e}function xe(e,n,l,t,g){var h,k,O,Y,X,G,J,K,P;var s=(t&Ae)!==0,u=n.length,c=e.items,i=H(e.effect.first),v,r=null,E,o=[],d=[],A,I,a,f;if(s)for(f=0;f0){var R=(t&ae)!==0&&u===0?l:null;if(s){for(f=0;f{var m,Q;if(E!==void 0)for(a of E)(Q=(m=a.nodes)==null?void 0:m.a)==null||Q.apply()})}function be(e,n,l,t,g,s,u,c){var i=(u&he)!==0?(u&ge)===0?Ee(l,!1,!1):j(l):null,v=(u&me)!==0?j(g):null;return{v:i,i:v,e:y(()=>(s(n,i??l,v??g,c),()=>{e.delete(t)}))}}function M(e,n,l){if(e.nodes)for(var t=e.nodes.start,g=e.nodes.end,s=n&&(n.f&T)===0?n.nodes.start:l;t!==null;){var u=Ie(t);if(s.before(t),t===g)return;t=u}}function C(e,n,l){n===null?e.effect.first=l:n.next=l,l===null?e.effect.last=n:l.prev=n}function Me(e,n,l){var t=e==null?"":""+e;return t===""?null:t}function ke(e,n){return e==null?null:String(e)}export{ke as a,He as e,De as i,Me as t}; diff --git a/apps/dashboard/build/_app/immutable/chunks/ByItJEsC.js.br b/apps/dashboard/build/_app/immutable/chunks/ByItJEsC.js.br deleted file mode 100644 index adbb90b188dd09d9f5e5d922435eb5727d0ffd56..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1850 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.s);if(t){let n=0,s={};const _=h(()=>{let l=!1;const r=a.s;for(const o in r)r[o]!==s[o]&&(s[o]=r[o],l=!0);return l&&n++,n});f=()=>p(_)}e.b.length&&d(()=>{u(a,f),i(e.b)}),c(()=>{const n=m(()=>e.m.map(b));return()=>{for(const s of n)typeof s=="function"&&s()}}),e.a.length&&c(()=>{u(a,f),i(e.a)})}function u(t,a){if(t.l.s)for(const e of t.l.s)p(e);a()}k();export{x as i}; diff --git a/apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.br b/apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.br new file mode 100644 index 0000000000000000000000000000000000000000..34ab9ac1b519e8d390df757f918eb8378e4a4d75 GIT binary patch literal 315 zcmV-B0mS|r76Jf_!g2587Oh2m3_86o-QdB7pG2WzQz?S2 zj3f(mY?E7Vc(LRCM&WN5C(XU@)_eDV{5?WPWaseIAcKDr{WL*0!a9pJUT#-}E1Veb zbTvtop_Mly_FbDzcxY{!imNv_O%Zj=u{>U@1{vlK&261r2J5p%B9Ow?!XOC}s^+FA7o$5huCvaB zB7EQhy{=PRli^x!Ts3^|?QXI7;9v&f7zF4S1Z?XwtU>_awxd{MM>S*tP_C&I9JoGk Na6feT{w#H7?gGncmTLe2 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.gz b/apps/dashboard/build/_app/immutable/chunks/Bz1l2A_1.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e9036b3c3f2a8416e9b319cf73e5be30c55c4407 GIT binary patch literal 344 zcmV-e0jK^SiwFP!000026J?UYPQx$^hVMK@xd6U^7-)HXdkkKPQWS;Oj zOTgAp%ah8#a8yG8RLljI0G{mY^gKlbB81N%-1ZWih%Bz2Jh6L$%$AgT> qFy@u1Rt5MonQWTFUK-FWA$>^D<~)6a^YqL~Uws2o0cIl?0ssKesia5% literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js b/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js deleted file mode 100644 index dcf5ab0..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js +++ /dev/null @@ -1 +0,0 @@ -import{a1 as a,m as w,am as q,J as x}from"./VE8Jor13.js";function _(e,t,n){if(e==null)return t(void 0),n&&n(void 0),a;const r=w(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const f=[];function z(e,t){return{subscribe:A(e,t).subscribe}}function A(e,t=a){let n=null;const r=new Set;function i(u){if(q(e,u)&&(e=u,n)){const o=!f.length;for(const s of r)s[1](),f.push(s,e);if(o){for(let s=0;s{r.delete(s),r.size===0&&n&&(n(),n=null)}}return{set:i,update:b,subscribe:l}}function B(e,t,n){const r=!Array.isArray(e),i=r?[e]:e;if(!i.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const b=t.length<2;return z(n,(l,u)=>{let o=!1;const s=[];let d=0,p=a;const y=()=>{if(d)return;p();const c=t(r?s[0]:s,l,u);b?l(c):p=typeof c=="function"?c:a},h=i.map((c,g)=>_(c,m=>{s[g]=m,d&=~(1<{d|=1<t=n)(),t}export{B as d,E as g,_ as s,A as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.br b/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.br deleted file mode 100644 index a22881c1d12ddf1034edaa96fcd49ab0899c477f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 612 zcmV-q0-OCCW&{9?!nWD-#0y!=B}R;7yJpM&o9?3!<-Uq~YrcpLw;UERD|K15_W{k` z{DwQpJFW@^NDhG<^xyoSOaB|-z$l`x%PMVW!@~m{=tY!*dV|k`DKrxxE?D5mpc}B? z!ykk>lz7o=pP}Z}t^I?WT=RLqy>fHA!pB)FgytN|&1gM78w>iTJcPW+(Kq(_Ms&3Q zLK?KM2v!huLz~bh4Z`+em#yj%c4$^UouJq}%@L(WbYEoUqsIC|pNxLXI8GIdlV$I< zI|HTme&IqDAVbj?(U<|6idZRwBJ;~y6Q621tLzNq+WP3si->8lum{hL7Jvrj&I3Y@ zQD8u~=#kBH26H#u-l913e*E^x_I8&NK~*?%-~578O^yx_S@M1;7?%SWhkFE+*u^{o z{YtCZ(aXg*I2Zp$=%oWcL_yAv|G}T`IvF!Sr&AuQI?DqNf^aUEu7LptB$PutG^Q(-4yi9mH yKVh8%C@trY@IjGdv~VF+Jg_i-1hq2@9h5cNZ!E$cOt9o}$nbRv7w$(Xp(rE7#4msV diff --git a/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.gz b/apps/dashboard/build/_app/immutable/chunks/CCRrbKqn.js.gz deleted file mode 100644 index 53b1169fe90f4eb5841005fcdf1645f76fd1c946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@KyiwFP!000026IE2fZrex_96&@EK&9> zC$jS|OPvG1reWtE}-sIerB| zzL(VZJ6}1y6NpHdUGiPpo9ojyhW_ON+_>=!)o@GBg?5m1XdUDP>Sk~h7i`0Nh-a4s*S3X!LK5nx%T^~s8ZBV6Z%GRIMOWF3a z#LK*Q94_kKeVbK!2SdtHTXaR9gV z`Ks7>im=&k+d_q#j>D-F+o+0pIV-f>R-1C91MBoyb^sOak?)_Oq9flAKHnF7q&nf> zu)e$7BiST50gmU9)gK(aN9Nyr7)B#d#Y#cvr&lAY`Cc>N_@7?fy nV1s}ZMtPh5AdgYpnx3NB({nVQ9;V;Pn0@&J8$-zzX9NHM@RvtE diff --git a/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js b/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js deleted file mode 100644 index 8dcfa39..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js +++ /dev/null @@ -1 +0,0 @@ -import{R as J,b8 as ee}from"./VE8Jor13.js";import{w as ae}from"./CCRrbKqn.js";import{c as ne,H as N,N as B,r as gt,i as _t,b as L,s as C,p as x,n as ft,f as $t,g as ut,a as X,d as it,S as Nt,P as re,e as oe,h as se,o as Dt,j as q,k as ie,l as qt,m as ce,q as le,t as Kt,u as Pt,v as fe}from"./DUtaznkq.js";class wt{constructor(a,e){this.status=a,typeof e=="string"?this.body={message:e}:e?this.body=e:this.body={message:`Error: ${a}`}}toString(){return JSON.stringify(this.body)}}class vt{constructor(a,e){this.status=a,this.location=e}}class yt extends Error{constructor(a,e,r){super(r),this.status=a,this.text=e}}const ue=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function he(t){const a=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${pe(t).map(r=>{const n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(n)return a.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const o=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(o)return a.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const s=r.split(/\[(.+?)\](?!\])/);return"/"+s.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return ct(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return ct(String.fromCharCode(...c.slice(2).split("-").map(_=>parseInt(_,16))));const h=ue.exec(c),[,u,w,f,d]=h;return a.push({name:f,matcher:d,optional:!!u,rest:!!w,chained:w?l===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return ct(c)}).join("")}).join("")}/?$`),params:a}}function de(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function pe(t){return t.slice(1).split("/").filter(de)}function me(t,a,e){const r={},n=t.slice(1),o=n.filter(i=>i!==void 0);let s=0;for(let i=0;ih).join("/"),s=0),l===void 0)if(c.rest)l="";else continue;if(!c.matcher||e[c.matcher](l)){r[c.name]=l;const h=a[i+1],u=n[i+1];h&&!h.rest&&h.optional&&u&&c.chained&&(s=0),!h&&!u&&Object.keys(r).length===o.length&&(s=0);continue}if(c.optional&&c.chained){s++;continue}return}if(!s)return r}function ct(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function ge({nodes:t,server_loads:a,dictionary:e,matchers:r}){const n=new Set(a);return Object.entries(e).map(([i,[c,l,h]])=>{const{pattern:u,params:w}=he(i),f={id:i,exec:d=>{const _=u.exec(d);if(_)return me(_,w,r)},errors:[1,...h||[]].map(d=>t[d]),layouts:[0,...l||[]].map(s),leaf:o(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function o(i){const c=i<0;return c&&(i=~i),[c,t[i]]}function s(i){return i===void 0?i:[n.has(i),t[i]]}}function Ft(t,a=JSON.parse){try{return a(sessionStorage[t])}catch{}}function It(t,a,e=JSON.stringify){const r=e(a);try{sessionStorage[t]=r}catch{}}function _e(t){return t.filter(a=>a!=null)}function Et(t){return t instanceof wt||t instanceof yt?t.status:500}function we(t){return t instanceof yt?t.text:"Internal Error"}const ve=new Set(["icon","shortcut icon","apple-touch-icon"]),I=Ft(Kt)??{},M=Ft(qt)??{},P={url:Pt({}),page:Pt({}),navigating:ae(null),updated:ne()};function bt(t){I[t]=C()}function ye(t,a){let e=t+1;for(;I[e];)delete I[e],e+=1;for(e=a+1;M[e];)delete M[e],e+=1}function V(t,a=!1){return a?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function Bt(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(L||"/");t&&await t.update()}}function Tt(){}let kt,ht,Q,U,dt,b;const Z=[],tt=[];let v=null;function pt(){var t;(t=v==null?void 0:v.fork)==null||t.then(a=>a==null?void 0:a.discard()),v=null}const G=new Map,Mt=new Set,Ee=new Set,F=new Set;let g={branch:[],error:null,url:null},Vt=!1,et=!1,Ot=!0,H=!1,K=!1,Ht=!1,St=!1,Yt,E,R,O;const at=new Set,Ct=new Map;async function Fe(t,a,e){var o,s,i,c,l;(o=globalThis.__sveltekit_1mw0ef2)!=null&&o.data&&globalThis.__sveltekit_1mw0ef2.data,document.URL!==location.href&&(location.href=location.href),b=t,await((i=(s=t.hooks).init)==null?void 0:i.call(s)),kt=ge(t),U=document.documentElement,dt=a,ht=t.nodes[0],Q=t.nodes[1],ht(),Q(),E=(c=history.state)==null?void 0:c[N],R=(l=history.state)==null?void 0:l[B],E||(E=R=Date.now(),history.replaceState({...history.state,[N]:E,[B]:R},""));const r=I[E];function n(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}e?(n(),await Ce(dt,e)):(await D({type:"enter",url:gt(b.hash?Ne(new URL(location.href)):location.href),replace_state:!0}),n()),Oe()}function be(){Z.length=0,St=!1}function zt(t){tt.some(a=>a==null?void 0:a.snapshot)&&(M[t]=tt.map(a=>{var e;return(e=a==null?void 0:a.snapshot)==null?void 0:e.capture()}))}function Wt(t){var a;(a=M[t])==null||a.forEach((e,r)=>{var n,o;(o=(n=tt[r])==null?void 0:n.snapshot)==null||o.restore(e)})}function jt(){bt(E),It(Kt,I),zt(R),It(qt,M)}async function Gt(t,a,e,r){let n;a.invalidateAll&&pt(),await D({type:"goto",url:gt(t),keepfocus:a.keepFocus,noscroll:a.noScroll,replace_state:a.replaceState,state:a.state,redirect_count:e,nav_token:r,accept:()=>{a.invalidateAll&&(St=!0,n=[...Ct.keys()]),a.invalidate&&a.invalidate.forEach(Te)}}),a.invalidateAll&&J().then(J).then(()=>{Ct.forEach(({resource:o},s)=>{var i;n!=null&&n.includes(s)&&((i=o.refresh)==null||i.call(o))})})}async function ke(t){if(t.id!==(v==null?void 0:v.id)){pt();const a={};at.add(a),v={id:t.id,token:a,promise:Xt({...t,preload:a}).then(e=>(at.delete(a),e.type==="loaded"&&e.state.error&&pt(),e)),fork:null}}return v.promise}async function lt(t){var e;const a=(e=await ot(t,!1))==null?void 0:e.route;a&&await Promise.all([...a.layouts,a.leaf].filter(Boolean).map(r=>r[1]()))}async function Jt(t,a,e){var n;g=t.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(x,t.props.page),Yt=new b.root({target:a,props:{...t.props,stores:P,components:tt},hydrate:e,sync:!1}),await Promise.resolve(),Wt(R),e){const o={from:null,to:{params:g.params,route:{id:((n=g.route)==null?void 0:n.id)??null},url:new URL(location.href),scroll:I[E]??C()},willUnload:!1,type:"enter",complete:Promise.resolve()};F.forEach(s=>s(o))}et=!0}function nt({url:t,params:a,branch:e,status:r,error:n,route:o,form:s}){let i="never";if(L&&(t.pathname===L||t.pathname===L+"/"))i="always";else for(const f of e)(f==null?void 0:f.slash)!==void 0&&(i=f.slash);t.pathname=se(t.pathname,i),t.search=t.search;const c={type:"loaded",state:{url:t,params:a,branch:e,error:n,route:o},props:{constructors:_e(e).map(f=>f.node.component),page:At(x)}};s!==void 0&&(c.props.form=s);let l={},h=!x,u=0;for(let f=0;fi(new URL(s))))return!0;return!1}function xt(t,a){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?a??null:null}function xe(t,a){if(!t)return new Set(a.searchParams.keys());const e=new Set([...t.searchParams.keys(),...a.searchParams.keys()]);for(const r of e){const n=t.searchParams.getAll(r),o=a.searchParams.getAll(r);n.every(s=>o.includes(s))&&o.every(s=>n.includes(s))&&e.delete(r)}return e}function Le({error:t,url:a,route:e,params:r}){return{type:"loaded",state:{error:t,url:a,route:e,params:r,branch:[]},props:{page:At(x),constructors:[]}}}async function Xt({id:t,invalidating:a,url:e,params:r,route:n,preload:o}){if((v==null?void 0:v.id)===t)return at.delete(v.token),v.promise;const{errors:s,layouts:i,leaf:c}=n,l=[...i,c];s.forEach(m=>m==null?void 0:m().catch(()=>{})),l.forEach(m=>m==null?void 0:m[1]().catch(()=>{}));const h=g.url?t!==rt(g.url):!1,u=g.route?n.id!==g.route.id:!1,w=xe(g.url,e);let f=!1;const d=l.map(async(m,p)=>{var A;if(!m)return;const y=g.branch[p];return m[1]===(y==null?void 0:y.loader)&&!Re(f,u,h,w,(A=y.universal)==null?void 0:A.uses,r)?y:(f=!0,Rt({loader:m[1],url:e,params:r,route:n,parent:async()=>{var z;const T={};for(let j=0;j{});const _=[];for(let m=0;mPromise.resolve({}),server_data_node:xt(o)}),i={node:await Q(),loader:Q,universal:null,server:null,data:null};return nt({url:e,params:n,branch:[s,i],status:t,error:a,route:null})}catch(s){if(s instanceof vt)return Gt(new URL(s.location,location.href),{},0);throw s}}async function Ae(t){const a=t.href;if(G.has(a))return G.get(a);let e;try{const r=(async()=>{let n=await b.hooks.reroute({url:new URL(t),fetch:async(o,s)=>Se(o,s,t).promise})??t;if(typeof n=="string"){const o=new URL(t);b.hash?o.hash=n:o.pathname=n,n=o}return n})();G.set(a,r),e=await r}catch{G.delete(a);return}return e}async function ot(t,a){if(t&&!_t(t,L,b.hash)){const e=await Ae(t);if(!e)return;const r=Pe(e);for(const n of kt){const o=n.exec(r);if(o)return{id:rt(t),invalidating:a,route:n,params:oe(o),url:t}}}}function Pe(t){return ie(b.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(L.length))||"/"}function rt(t){return(b.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Qt({url:t,type:a,intent:e,delta:r,event:n,scroll:o}){let s=!1;const i=Ut(g,e,t,a,o??null);r!==void 0&&(i.navigation.delta=r),n!==void 0&&(i.navigation.event=n);const c={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return H||Mt.forEach(l=>l(c)),s?null:i}async function D({type:t,url:a,popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s={},redirect_count:i=0,nav_token:c={},accept:l=Tt,block:h=Tt,event:u}){var j;const w=O;O=c;const f=await ot(a,!1),d=t==="enter"?Ut(g,f,a,t):Qt({url:a,type:t,delta:e==null?void 0:e.delta,intent:f,scroll:e==null?void 0:e.scroll,event:u});if(!d){h(),O===c&&(O=w);return}const _=E,m=R;l(),H=!0,et&&d.navigation.type!=="enter"&&P.navigating.set(ft.current=d.navigation);let p=f&&await Xt(f);if(!p){if(_t(a,L,b.hash))return await V(a,o);p=await Zt(a,{id:null},await Y(new yt(404,"Not Found",`Not found: ${a.pathname}`),{url:a,params:{},route:{id:null}}),404,o)}if(a=(f==null?void 0:f.url)||a,O!==c)return d.reject(new Error("navigation aborted")),!1;if(p.type==="redirect"){if(i<20){await D({type:t,url:new URL(p.location,a),popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s,redirect_count:i+1,nav_token:c}),d.fulfil(void 0);return}p=await Lt({status:500,error:await Y(new Error("Redirect loop"),{url:a,params:{},route:{id:null}}),url:a,route:{id:null}})}else p.props.page.status>=400&&await P.updated.check()&&(await Bt(),await V(a,o));if(be(),bt(_),zt(m),p.props.page.url.pathname!==a.pathname&&(a.pathname=p.props.page.url.pathname),s=e?e.state:s,!e){const k=o?0:1,W={[N]:E+=k,[B]:R+=k,[Nt]:s};(o?history.replaceState:history.pushState).call(history,W,"",a),o||ye(E,R)}const y=f&&(v==null?void 0:v.id)===f.id?v.fork:null;v=null,p.props.page.state=s;let S;if(et){const k=(await Promise.all(Array.from(Ee,$=>$(d.navigation)))).filter($=>typeof $=="function");if(k.length>0){let $=function(){k.forEach(st=>{F.delete(st)})};k.push($),k.forEach(st=>{F.add(st)})}g=p.state,p.props.page&&(p.props.page.url=a);const W=y&&await y;W?S=W.commit():(Yt.$set(p.props),fe(p.props.page),S=(j=ee)==null?void 0:j()),Ht=!0}else await Jt(p,dt,!1);const{activeElement:A}=document;await S,await J(),await J();let T=null;if(Ot){const k=e?e.scroll:n?C():null;k?scrollTo(k.x,k.y):(T=a.hash&&document.getElementById(te(a)))?T.scrollIntoView():scrollTo(0,0)}const z=document.activeElement!==A&&document.activeElement!==document.body;!r&&!z&&$e(a,!T),Ot=!0,p.props.page&&Object.assign(x,p.props.page),H=!1,t==="popstate"&&Wt(R),d.fulfil(void 0),d.navigation.to&&(d.navigation.to.scroll=C()),F.forEach(k=>k(d.navigation)),P.navigating.set(ft.current=null)}async function Zt(t,a,e,r,n){return t.origin===Dt&&t.pathname===location.pathname&&!Vt?await Lt({status:r,error:e,url:t,route:a}):await V(t,n)}function Ie(){let t,a={element:void 0,href:void 0},e;U.addEventListener("mousemove",i=>{const c=i.target;clearTimeout(t),t=setTimeout(()=>{o(c,q.hover)},20)});function r(i){i.defaultPrevented||o(i.composedPath()[0],q.tap)}U.addEventListener("mousedown",r),U.addEventListener("touchstart",r,{passive:!0});const n=new IntersectionObserver(i=>{for(const c of i)c.isIntersecting&&(lt(new URL(c.target.href)),n.unobserve(c.target))},{threshold:0});async function o(i,c){const l=$t(i,U),h=l===a.element&&(l==null?void 0:l.href)===a.href&&c>=e;if(!l||h)return;const{url:u,external:w,download:f}=ut(l,L,b.hash);if(w||f)return;const d=X(l),_=u&&rt(g.url)===rt(u);if(!(d.reload||_))if(c<=d.preload_data){a={element:l,href:l.href},e=q.tap;const m=await ot(u,!1);if(!m)return;ke(m)}else c<=d.preload_code&&(a={element:l,href:l.href},e=c,lt(u))}function s(){n.disconnect();for(const i of U.querySelectorAll("a")){const{url:c,external:l,download:h}=ut(i,L,b.hash);if(l||h)continue;const u=X(i);u.reload||(u.preload_code===q.viewport&&n.observe(i),u.preload_code===q.eager&<(c))}}F.add(s),s()}function Y(t,a){if(t instanceof wt)return t.body;const e=Et(t),r=we(t);return b.hooks.handleError({error:t,event:a,status:e,message:r})??{message:r}}function Be(t,a={}){return t=new URL(gt(t)),t.origin!==Dt?Promise.reject(new Error("goto: invalid URL")):Gt(t,a,0)}function Te(t){if(typeof t=="function")Z.push(t);else{const{href:a}=new URL(t,location.href);Z.push(e=>e.href===a)}}function Oe(){var a;history.scrollRestoration="manual",addEventListener("beforeunload",e=>{let r=!1;if(jt(),!H){const n=Ut(g,void 0,null,"leave"),o={...n.navigation,cancel:()=>{r=!0,n.reject(new Error("navigation cancelled"))}};Mt.forEach(s=>s(o))}r?(e.preventDefault(),e.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&jt()}),(a=navigator.connection)!=null&&a.saveData||Ie(),U.addEventListener("click",async e=>{if(e.button||e.which!==1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.defaultPrevented)return;const r=$t(e.composedPath()[0],U);if(!r)return;const{url:n,external:o,target:s,download:i}=ut(r,L,b.hash);if(!n)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const c=X(r);if(!(r instanceof SVGAElement)&&n.protocol!==location.protocol&&!(n.protocol==="https:"||n.protocol==="http:")||i)return;const[h,u]=(b.hash?n.hash.replace(/^#/,""):n.href).split("#"),w=h===it(location);if(o||c.reload&&(!w||!u)){Qt({url:n,type:"link",event:e})?H=!0:e.preventDefault();return}if(u!==void 0&&w){const[,f]=g.url.href.split("#");if(f===u){if(e.preventDefault(),u===""||u==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const d=r.ownerDocument.getElementById(decodeURIComponent(u));d&&(d.scrollIntoView(),d.focus())}return}if(K=!0,bt(E),t(n),!c.replace_state)return;K=!1}e.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await D({type:"link",url:n,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??n.href===location.href,event:e})}),U.addEventListener("submit",e=>{if(e.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if(((n==null?void 0:n.formTarget)||r.target)==="_blank"||((n==null?void 0:n.formMethod)||r.method)!=="get")return;const i=new URL((n==null?void 0:n.hasAttribute("formaction"))&&(n==null?void 0:n.formAction)||r.action);if(_t(i,L,!1))return;const c=e.target,l=X(c);if(l.reload)return;e.preventDefault(),e.stopPropagation();const h=new FormData(c,n);i.search=new URLSearchParams(h).toString(),D({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href,event:e})}),addEventListener("popstate",async e=>{var r;if(!mt){if((r=e.state)!=null&&r[N]){const n=e.state[N];if(O={},n===E)return;const o=I[n],s=e.state[Nt]??{},i=new URL(e.state[re]??location.href),c=e.state[B],l=g.url?it(location)===it(g.url):!1;if(c===R&&(Ht||l)){s!==x.state&&(x.state=s),t(i),I[E]=C(),o&&scrollTo(o.x,o.y),E=n;return}const u=n-E;await D({type:"popstate",url:i,popped:{state:s,scroll:o,delta:u},accept:()=>{E=n,R=c},block:()=>{history.go(-u)},nav_token:O,event:e})}else if(!K){const n=new URL(location.href);t(n),b.hash&&location.reload()}}}),addEventListener("hashchange",()=>{K&&(K=!1,history.replaceState({...history.state,[N]:++E,[B]:R},"",location.href))});for(const e of document.querySelectorAll("link"))ve.has(e.rel)&&(e.href=e.href);addEventListener("pageshow",e=>{e.persisted&&P.navigating.set(ft.current=null)});function t(e){g.url=x.url=e,P.page.set(At(x)),P.page.notify()}}async function Ce(t,{status:a=200,error:e,node_ids:r,params:n,route:o,server_route:s,data:i,form:c}){Vt=!0;const l=new URL(location.href);let h;({params:n={},route:o={id:null}}=await ot(l,!1)||{}),h=kt.find(({id:f})=>f===o.id);let u,w=!0;try{const f=r.map(async(_,m)=>{const p=i[m];return p!=null&&p.uses&&(p.uses=je(p.uses)),Rt({loader:b.nodes[_],url:l,params:n,route:o,parent:async()=>{const y={};for(let S=0;S{const i=history.state;mt=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(i,"",t),a&&scrollTo(o,s),mt=!1})}else{const o=document.body,s=o.getAttribute("tabindex");o.tabIndex=-1,o.focus({preventScroll:!0,focusVisible:!1}),s!==null?o.setAttribute("tabindex",s):o.removeAttribute("tabindex")}const n=getSelection();if(n&&n.type!=="None"){const o=[];for(let s=0;s{if(n.rangeCount===o.length){for(let s=0;s{o=u,s=w});return i.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((l=t.route)==null?void 0:l.id)??null},url:t.url,scroll:C()},to:e&&{params:(a==null?void 0:a.params)??null,route:{id:((h=a==null?void 0:a.route)==null?void 0:h.id)??null},url:e,scroll:n},willUnload:!a,type:r,complete:i},fulfil:o,reject:s}}function At(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Ne(t){const a=new URL(t);return a.hash=decodeURIComponent(t.hash),a}function te(t){let a;if(b.hash){const[,,e]=t.hash.split("#",3);a=e??""}else a=t.hash.slice(1);return decodeURIComponent(a)}export{Fe as a,Be as g,P as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.br b/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.br deleted file mode 100644 index 102259b646c555bc4e422982b67c0346f51af503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7675 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 diff --git a/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.gz b/apps/dashboard/build/_app/immutable/chunks/CK5Nmlyf.js.gz deleted file mode 100644 index f563d824546da5e8a0d5f1a03a1f0b26ce99de7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8415 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

{c|_d1N_cr01T|G@a55xs}eqDUk~wE zM5=?bXvFcxuo`_Z|2cW*z+$eE$=SpHO(8Y>&<);;;XecC%fnENwpk_IWOv+%thCt> z-Si0Q^B?SEY4aC^O+HC$yn%D2!^EQ-kMIDvFY^TX#GQgRQ3*-g_(KZ{pjYUS!B*98POY&!^_69YkguuE+|8(B>LUsp_Q7-H=7|^8-gqD#nW@Id19Y%hIH_ z87LZV=x6TkFzzO~-MZ79H#XHR-zU~ys+$iAbdubz=`gweZjoH?C%LVO!}q7->k01X zw5<>4v@OjMFOt#yz<`Ye&T;cg3UhyqX(u=Brp-+|!8hZ@WV_9bQJF&K)R6cTxQhB* zm3%K(CG$7{Yq-kth@;Ki9T@N#D^nxur#l%d8xMkdMw&jBu+rGb)qc3_5~83x0kbLD z99}aQ4$C{w_9p_KNfQpHK>!SPR#*L~MYSKZ*))dWO8~YsS#{4Oa4%BgJ<4tLElwp9h=XLE|H|$S0^uF1XSN6O^?*pj0!{;9kjG>?IZiZ5u zgZ2wJbKAw_q&efErcJba=Wc<&*WWF40^ zXyRlS`u1jJPq!os6ZY8qJp|9Pe|&SiQS~3Y{CZe(2~bTM6V|l>NQsG|l+(0La!)TF zLrN-55_)UaYIZA%j6Vc8k&$M%FW`YbIU~}MYU9jLdyp1>3Cq0y2p~$%?V&!fTFi1v z&@P8sCnb)hJ9&7p_uAV8Gp_9tTDulbQGjFb^BvyEf_HMXI!Uwet4HN`MWnz6cm@&l zqy%{>E%a8HpL~FC7aFqZ_g2oF*JvwuehbK^LVm4}X4&D~1xe{nXD|yB+gQlrqDT#l z1+oHuKnT);(#O8Rxm**z=$G!lft+k!b_Yd(O8pC{d4BYo$^iQ6; z6eQK2ITbarAqKbW7~d~SXLlaZ(9I{if(!s){if(s=!0,r.hasAttribute("value")){var e=r.value;_(r,"value",null),r.value=e}if(r.hasAttribute("checked")){var o=r.checked;_(r,"checked",null),r.checked=o}}};r.__on_r=a,A(a),S()}}function l(r,s){var a=d(r);a.value===(a.value=s??void 0)||r.value===s&&(s!==0||r.nodeName!==E)||(r.value=s??"")}function _(r,s,a,e){var o=d(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===T)||o[s]!==(o[s]=a)&&(s==="loading"&&(r[u]=a),a==null?r.removeAttribute(s):typeof a!="string"&&L(r).includes(s)?r[s]=a:r.setAttribute(s,a))}function d(r){return r.__attributes??(r.__attributes={[p]:r.nodeName.includes("-"),[N]:r.namespaceURI===v})}var c=new Map;function L(r){var s=r.getAttribute("is")||r.nodeName,a=c.get(s);if(a)return a;c.set(s,a=[]);for(var e,o=r,n=Element.prototype;n!==o;){e=g(o);for(var t in e)e[t].set&&a.push(t);o=h(o)}return a}export{l as a,k as r,_ as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.br b/apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.br new file mode 100644 index 0000000000000000000000000000000000000000..5a2eda35ddaa74727a75f8d040540ef6ca697548 GIT binary patch literal 587 zcmV-R0<`@bR0KdQ3T$K2=udjqb7G=q5z|t3F%#cRHFeK2{S(211n9O}IJ<9Y{oMq| zr793pn%v+_OCXUfOa>aiSzdPF!Umjig5!dLR%&{uv)Q)W0A1nSU3tIPq6lh1fy5CM zy73bhrEv`E*-khE!77F8f6rMh`_Pv+|I{g8>w$0dw7gPZzw)K_NS8Ijx6hg(RqKDc zU0U55xysJ7*&8-MT$DED6>YqKAkhnS)NBCTzQeRh_R`d(navFwKJ3DRzkP;t0~6Qw zj-&i-mb_6)nIUfwENC5(+>qhit*g5B)?M|FFiA(0gk)ubScU4jDMv+ht7(XdKHkJ4 zZI(=r&33atX|O?xza5AD@A!R#kWzB7I-Q2&G{S2airz9QiH_`}YBcY7ymA!hIgUF`Y8h+Rm1&7kch%?S% zV4?@2;dn8*w<77HLEGB}LE6r#C?oGXjoV?n752z+bw#JQio1tFduY4Of1$D&S zBvnYXyg&vdVH73zzJ$*tNk%`-aa??5=e_=AXNY>%^<8YvxO|m_c4{(qVP7P^Zh*^ Zu;w6%%}iQ+TO4f9z3ynVby+{1+zAWiC6E9B literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.gz b/apps/dashboard/build/_app/immutable/chunks/CNfQDikv.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e58934a1d53f028d2012606356770df6c47defef GIT binary patch literal 629 zcmV-*0*d_~iwFP!000026J1nMZ`v>re&4T1tSPc3FQczSH^e41RqNPPx`z%`$PEs- zBzAP?uyrK=eKL@S_UUu(^L=;U*|Di=hyHLMDT*5TJHTG90&Ha!z{vLjHd2iO7V>j| zsZ>`17hQp_V(G^(`=`b99{;6J#IoF3@=*UZ0?P-(T<}yn1UN|*ei?( z;w!0u3-}bGF&#;QcqB31Dw=wa=CSdbv%M-C&BQ5B1E$A7w&EzyoU~0@3VCKgcc$QP zRr0OQcY59HIKcEAIw|%1i`F>+uIsuC)78q^6@rpeu7q50(RDB0N{*6Fx(e1DMW)WJ z0PucElgZwhbu&XKkOTmXFlTMsFG>6UYm2&INix(2fIHE)K`aJ1i7F8~4ckkn*2ZpFl5ku$ zfsqOzjBSD`>dNi)W%03puC*&76$2xWr_39UA~iNIo3$oRVuHsSV@&B)>r#me-@)bq zwQtZy;Y3uwktP%VIsk`d{V*OZ4aL|8CggH{BvqxUR=NIldkp~lPIO_OIavKC`mXBX z_J)4X_x8U@mxq<%7ryhx~Y>r2~`}W~YBHtUxY2DD4dyzTVawodJVyFKepN%rS0ZQ%y;OW_* PE_?SM`R@%eRRjP4Y)>|& literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js b/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js new file mode 100644 index 0000000..5a37130 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js @@ -0,0 +1 @@ +import{aB as a,az as t,Q as u,A as o}from"./CvjSAYrz.js";function c(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function l(e){t===null&&c(),u&&t.l!==null?i(t).m.push(e):a(()=>{const n=o(e);if(typeof n=="function")return n})}function f(e){t===null&&c(),l(()=>()=>o(e))}function i(e){var n=e.l;return n.u??(n.u={a:[],b:[],m:[]})}export{f as a,l as o}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.br b/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.br new file mode 100644 index 0000000000000000000000000000000000000000..95f3b721109ff2854993b38cddb83338b9e61ea1 GIT binary patch literal 225 zcmV<703QDvcmV+9(#^fg1pcXn9qy~c)axXMJhc$a+QDOOMyKG2Q#3O1Pa&j{9^xY@kz5H6n{;XL1LPS{$VOb%td2Lx07wYnO^@fV^ ztIUfA*(NWfemSRYPwA$HZ~p literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.gz b/apps/dashboard/build/_app/immutable/chunks/CNjeV5xa.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..3ae842a0aa8c0c40eac3da2eb5adc4b9458ef41d GIT binary patch literal 269 zcmV+o0rLJIiwFP!000026J?OWYQr!PMDP6y)dwSik?%HYNJ~GU^i)C!su$4czRMfB&2|wB{9G5d Tw}Jg_(f;WdI0pi-c>w?bd#HO% literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js b/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js new file mode 100644 index 0000000..4a0c459 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js @@ -0,0 +1 @@ +import{D as k,F as f,G as m,A as t,z as _,m as b,I as i}from"./CvjSAYrz.js";function E(e,a,v=a){var c=new WeakSet;k(e,"input",async r=>{var l=r?e.defaultValue:e.value;if(l=o(e)?u(l):l,v(l),f!==null&&c.add(f),await m(),l!==(l=a())){var h=e.selectionStart,d=e.selectionEnd,n=e.value.length;if(e.value=l??"",d!==null){var s=e.value.length;h===d&&d===n&&s>n?(e.selectionStart=s,e.selectionEnd=s):(e.selectionStart=h,e.selectionEnd=Math.min(d,s))}}}),(b&&e.defaultValue!==e.value||t(a)==null&&e.value)&&(v(o(e)?u(e.value):e.value),f!==null&&c.add(f)),_(()=>{var r=a();if(e===document.activeElement){var l=i??f;if(c.has(l))return}o(e)&&r===u(e.value)||e.type==="date"&&!r&&!e.value||r!==e.value&&(e.value=r??"")})}function S(e,a,v=a){k(e,"change",c=>{var r=c?e.defaultChecked:e.checked;v(r)}),(b&&e.defaultChecked!==e.checked||t(a)==null)&&v(e.checked),_(()=>{var c=a();e.checked=!!c})}function o(e){var a=e.type;return a==="number"||a==="range"}function u(e){return e===""?null:+e}export{S as a,E as b}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.br b/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.br new file mode 100644 index 0000000000000000000000000000000000000000..8cd42fe715030f22ab5102bdcad676eb1211fdd0 GIT binary patch literal 457 zcmV;)0XF^{<^ur4QdRdXlf~ijk35)N!kH;`)|AO$lN%+s{y&$~8(<&l-T|K3-mN_> zz+M*h0tzhf5Hq*-l!Qf*&Nk26eid;bPTxL9em7d`_XeH*K(BAG*DFl4hoFDX{9)#+ zu`eITMf>)@z1qdjG{)w?IIGtqJigV4A)mg^Jlp1dv*fJCJJ)Dlj%_j49VpnkY#n3S z6RWfJ`j^eT(j?J8h6ltL7(Pl-EGpV})uix!1`F7PbkN@<2{A!jLa zqp5k|Ye+i4s`#KzV%~9GKyl6(O~T#x>Tb+G&HyB$1YjWAjR(h;DX`NA*h#HPI@|ng z?}vUqaMGQ~Wf zEy+V3+#|Fs(>TVbjK(>fMUwIFrK5`$ubwtX-U_h1CM&#bNK1&0+`9=F9!0rBRYiZ1 z6^EDSfq;;g6%Pd$sxfoFx3F2@%#6nl{17ZV#{IZa?Kwa4Ii|5T=JhLXqmSkZ)ScyY literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.gz b/apps/dashboard/build/_app/immutable/chunks/CVpUe0w3.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..ad38343f0ccb941b0d1e288402e4b1b9e17b7aad GIT binary patch literal 517 zcmV+g0{Z81!BpaVFs--`#*4RL9z`3>R{RL2 znJTw$Gx_CVc;4Lqac}au%krwX+BbWftT_oK22}7qD3@ro^pgB0wcC)-cbr7l*hB9# zp}JSA6Nh(EXV4WSOR7|F{4ZsCT9F)r&6|oF+;f7W=LS|r4BUXIQbgMu!{`{e5oc=n(viYyc59P{{Q zcdM@vv1F`7M9WxrXA6EC6+3Yq6+2jcRMoetpUT&=Z7eTE2QW<&2)c8*&4?saxz~M5)=Q;*Gtk;l*umV%rYNeQ)Us9` zHvo=&@9Y#pGv*NS9Df{1`qx8vG%J;-jIq=)mM(?3b5)Ej{cxclFu}CU-R3-ZamsY9 z>=R`|FZt{9fIZZtcT}!O>fn_0pV*_7Ku3+g1YdOO-)t9*j5K*V_ zSbcsZl&FBg_U)EjHjZ)UVj1VVeYiWzBekpu$*expM1SLd-h^MO#5(@jDgX2jwaBYE H=K}x$<3{@L literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js b/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js new file mode 100644 index 0000000..46dcff7 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js @@ -0,0 +1 @@ +import{w as S,g as T}from"./DfQhL-hC.js";import{e as R}from"./CtkE7HV2.js";import{E as u}from"./DzfRjky4.js";const M=4,x=1500;function F(){const{subscribe:y,update:i}=S([]);let m=1,b=0;const d=new Map,a=new Map,l=new Map;function f(e,o){l.set(e,Date.now());const t=setTimeout(()=>{d.delete(e),l.delete(e),g(e)},o);d.set(e,t)}function w(e){const o=m++,t=Date.now(),s={id:o,createdAt:t,...e};i(n=>{const r=[s,...n];return r.length>M?r.slice(0,M):r}),f(o,e.dwellMs)}function g(e){const o=d.get(e);o&&(clearTimeout(o),d.delete(e)),a.delete(e),l.delete(e),i(t=>t.filter(s=>s.id!==e))}function C(e,o){const t=d.get(e);if(!t)return;clearTimeout(t),d.delete(e);const s=l.get(e)??Date.now(),n=Date.now()-s,r=Math.max(200,o-n);a.set(e,{remaining:r})}function D(e){const o=a.get(e);o&&(a.delete(e),f(e,o.remaining))}function N(){for(const e of d.values())clearTimeout(e);d.clear(),a.clear(),l.clear(),i(()=>[])}function _(e){const o=u[e.type]??"#818CF8",t=e.data;switch(e.type){case"DreamCompleted":{const s=Number(t.memories_replayed??0),n=Number(t.connections_found??0),r=Number(t.insights_generated??0),p=Number(t.duration_ms??0),c=[];return c.push(`Replayed ${s} ${s===1?"memory":"memories"}`),n>0&&c.push(`${n} new connection${n===1?"":"s"}`),r>0&&c.push(`${r} insight${r===1?"":"s"}`),{type:e.type,title:"Dream consolidated",body:`${c.join(" · ")} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:7e3}}case"ConsolidationCompleted":{const s=Number(t.nodes_processed??0),n=Number(t.decay_applied??0),r=Number(t.embeddings_generated??0),p=Number(t.duration_ms??0),c=[];return n>0&&c.push(`${n} decayed`),r>0&&c.push(`${r} embedded`),{type:e.type,title:"Consolidation swept",body:`${s} node${s===1?"":"s"}${c.length?" · "+c.join(" · "):""} in ${(p/1e3).toFixed(1)}s`,color:o,dwellMs:6e3}}case"ConnectionDiscovered":{const s=Date.now();if(s-b0?`suppression #${s} · Rac1 cascade ~${n} neighbors`:`suppression #${s}`,color:o,dwellMs:5500}}case"MemoryUnsuppressed":{const s=Number(t.remaining_count??0);return{type:e.type,title:"Recovered",body:s>0?`${s} suppression${s===1?"":"s"} remain`:"fully unsuppressed",color:o,dwellMs:5e3}}case"Rac1CascadeSwept":{const s=Number(t.seeds??0),n=Number(t.neighbors_affected??0);return{type:e.type,title:"Rac1 cascade",body:`${s} seed${s===1?"":"s"} · ${n} dendritic spine${n===1?"":"s"} pruned`,color:o,dwellMs:6e3}}case"MemoryDeleted":return{type:e.type,title:"Memory deleted",body:String(t.id??"").slice(0,8),color:o,dwellMs:4e3};case"Heartbeat":case"SearchPerformed":case"RetentionDecayed":case"ActivationSpread":case"ImportanceScored":case"MemoryCreated":case"MemoryUpdated":case"DreamStarted":case"DreamProgress":case"ConsolidationStarted":case"Connected":return null;default:return null}}let h=null;return R.subscribe(e=>{if(e.length===0)return;const o=[];for(const t of e){if(t===h)break;o.push(t)}if(o.length!==0){h=e[0];for(let t=o.length-1;t>=0;t--){const s=_(o[t]);s&&w(s)}}}),{subscribe:y,dismiss:g,clear:N,pauseDwell:C,resumeDwell:D,push:w}}const $=F();function O(){[{type:"DreamCompleted",title:"Dream consolidated",body:"Replayed 127 memories · 43 new connections · 5 insights in 2.4s",color:u.DreamCompleted,dwellMs:7e3},{type:"ConnectionDiscovered",title:"Bridge discovered",body:"semantic · weight 0.87",color:u.ConnectionDiscovered,dwellMs:4500},{type:"MemorySuppressed",title:"Forgetting",body:"suppression #2 · Rac1 cascade ~8 neighbors",color:u.MemorySuppressed,dwellMs:5500},{type:"ConsolidationCompleted",title:"Consolidation swept",body:"892 nodes · 156 decayed · 48 embedded in 1.1s",color:u.ConsolidationCompleted,dwellMs:6e3}].forEach((i,m)=>{setTimeout(()=>{$.push(i)},m*800)}),T($)}export{O as f,$ as t}; diff --git a/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.br b/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.br new file mode 100644 index 0000000000000000000000000000000000000000..30d9d9ea8c725457ee81c4d34581677800f0efcc GIT binary patch literal 1504 zcmV<61t0nw+zl1OmXE7g6yhov-TUhN`W0g7;G)V&09WqWj6la`jXEYi*cQ)H zSbl2US~aJSQB(w7!v2&qzNi4Q+nAl&l zw~_W#nnUI|h(}8Bl1zAy)zt8d_*r?ZK7~98QT)c0Vsy|stsE5Ns4~{%UKBuBivyvn zyE;56hIpkdOw*f1!0etAKo!6wSO-Rr5>F4l z7Z(KvClfmN_B^)K8{>E8>Q(iPLDy>_tI48v%!~0PBy!3KF;*3Ton#nQ2Lqr?|D}%A zgKO2L8;5QX^}@Na6ac(PhKzh$rvU3uq0WiCw)iZMVoI6D%IO*F{*wG$QOMaeNw;=V ziAJouDpVO~OUfDYSXFtJ&293Dmyv5%oKlfhs)Fu+VKe)(WqGkrQ5ZmSB+52tDRw+9 zq&*scdwmm*To{v!h0p4y3aP3oAN{?orL){DO@waFcsB`+Vy@HprW+9@g%qo$(#C0h zK*lj3{z5|Fw~M*%;6Eh%25oM#?R7~Y`Y}r966=sbyVx~;$4D$?D|ifo zaiSHFtB*`}>+E`TJgMGF<*0eL_wR{iGZ8l(+>Cp{0l#Y3(f}^ zSo8r<2qT;dKdHD)vrK@^v#~r`tn&Pm)+jH$a#=&fSBvjmetJFO#v^L7OY-6>yCHK6 za*v~gy|5@`hd|+jYHW;bhG$)D(MA&ml`ZTuDMC*}LU&bw_Ur3xYlbVvtZ4TNS%(!3 zWVS*4Qnnnpfx=8GX^5;fO@8G;V5+3hrNkINGuQc4ewtCg{Zut?g=X4yPqMl|8)`{w zvMe`cZ={@5ep1y8OUaHCgOb7F+T^AfN0ljN83<>LmffmNM95j;K{KgkuX%j+a2CH$Q7p4rzcR|$wE#h3%wrX_5WI`xkz{%J7i z7d}-}&m-cO*e&b}B>g6HgbAy*FEPg8GDkb=Sioxjt&Uxq12xT1b5@lqt-;!)za~sS z%q`0e2c{nRC3i&_q3A=a=ECRp)cpv^eEy%GY%->0V;HDP?Pprl}tbOw}c?2$;zr(NT{Z!h9D+T z(nKc)qJ{FU@j?%-op_Oz3iwzK*DRMy8xHZieI4he)EJ0>U$ueAuYW%T{BC!JbE4K; GVax&t)9FM2 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.gz b/apps/dashboard/build/_app/immutable/chunks/Casl2yrL.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..6ef420d0fd7b242c9c55c9a9c28c245ef447af91 GIT binary patch literal 1644 zcmV-y29x<8iwFP!000026RlX?a@#f*zTc-{Sgi+WXqIy9MoTTE=}PgmGj*C;>E38O zGDIFqNJxMKfRVi%_O)`KC+mQJA|=IccX}gH;K4cP`wq?z#FA7XK4nd8>5+r%~($QpZ%TXj}p)Z_30@V=ypndJQt_#JOAxmM4u*W-8o-0R^8>+W%LLbnD=Q-k><1wv6l1oS^8o~Kp$5$O=AW}p@L)$VaWLA{|weK@1;2iPcmFtD_@@Cv$5XwDiEJQ_SoOo8B@B{`TE}vxZxy= zRwp(30^@FLPD~_jGEzx#d_}W2(-AaN6ZV)`2SfO~{aa*dD$7hf<)W(JnlliHjO)X61*KVH(r^_}70?i#!Er6*2DD~; zQ)A#0Z+hP`V|`O5&zH~EEe(cNt=0Oyu99rCT??u1{o_5yV6P6r{>IglaN7>K2m1t; zTj(EWWuTPacYHgj09Iw<-nXMHjvuY8>(McQHopxSvxd@Y+XGZ-YnlGQNx{UHrGR*=@rHsQt|FTk*-Af=y{sT0lbl5e>W)PS@!E;E9_W^L6L^2-NKjc)|C&3-DSuZKmG%L-MtFa@`UT;9 zS)IPa5%k%K%5EpY;l*pK8T(A8T)sLO^UBq$W|C8;^Iy1^s;L8++qc~tyXukTbmM=n z@!AR!%1yfNo3H1NUhgfRQrmALjRQw* literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js b/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js deleted file mode 100644 index c1865d5..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js +++ /dev/null @@ -1 +0,0 @@ -import{N as a}from"./VE8Jor13.js";a(); diff --git a/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.br b/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.br deleted file mode 100644 index 9b0362e..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.br +++ /dev/null @@ -1,2 +0,0 @@ - import{N as a}from"./VE8Jor13.js";a(); - \ No newline at end of file diff --git a/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.gz b/apps/dashboard/build/_app/immutable/chunks/CrlWs-6R.js.gz deleted file mode 100644 index af78db4c616c1c61e80b086e8fdeb69132b3a425..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59 zcmb2|=3oE;CgIa(bWiAOt^5}3p%dn@##j5)`Or(3`HQ!HIHhl7a_zKM*e1U#7q&cO NVzAN4cU1>!0RV@d7Lot} diff --git a/apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js b/apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js new file mode 100644 index 0000000..dc8aa6c --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js @@ -0,0 +1 @@ +import{d as i,w as S}from"./DfQhL-hC.js";const b=200;function H(){const{subscribe:t,set:o,update:e}=S({connected:!1,events:[],lastHeartbeat:null,error:null});let n=null,a=null,d=0;function m(s){const c=s||(window.location.port==="5173"?`ws://${window.location.hostname}:3927/ws`:`ws://${window.location.host}/ws`);if((n==null?void 0:n.readyState)!==WebSocket.OPEN)try{n=new WebSocket(c),n.onopen=()=>{d=0,e(r=>({...r,connected:!0,error:null}))},n.onmessage=r=>{try{const l=JSON.parse(r.data);e(f=>{if(l.type==="Heartbeat")return{...f,lastHeartbeat:l};const $=[l,...f.events].slice(0,b);return{...f,events:$}})}catch(l){console.warn("[vestige] Failed to parse WebSocket message:",l)}},n.onclose=()=>{e(r=>({...r,connected:!1})),p(c)},n.onerror=()=>{e(r=>({...r,error:"WebSocket connection failed"}))}}catch(r){e(l=>({...l,error:String(r)}))}}function p(s){a&&clearTimeout(a);const c=Math.min(1e3*2**d,3e4);d++,a=setTimeout(()=>m(s),c)}function v(){a&&clearTimeout(a),n==null||n.close(),n=null,o({connected:!1,events:[],lastHeartbeat:null,error:null})}function h(){e(s=>({...s,events:[]}))}function w(s){e(c=>{const r=[s,...c.events].slice(0,b);return{...c,events:r}})}return{subscribe:t,connect:m,disconnect:v,clearEvents:h,injectEvent:w}}const u=H(),g=i(u,t=>t.connected),k=i(u,t=>t.events);i(u,t=>t.lastHeartbeat);const M=i(u,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.memory_count)??0}),E=i(u,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.avg_retention)??0}),T=i(u,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.suppressed_count)??0}),W=i(u,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.uptime_secs)??0});function _(t){if(!Number.isFinite(t)||t<0)return"—";const o=Math.floor(t/86400),e=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),a=Math.floor(t%60);return o>0?e>0?`${o}d ${e}h`:`${o}d`:e>0?n>0?`${e}h ${n}m`:`${e}h`:n>0?a>0?`${n}m ${a}s`:`${n}m`:`${a}s`}export{E as a,k as e,_ as f,g as i,M as m,T as s,W as u,u as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js.br b/apps/dashboard/build/_app/immutable/chunks/CtkE7HV2.js.br new file mode 100644 index 0000000000000000000000000000000000000000..a56c52e1d8ad137eeb8072240d9dfefda57368df GIT binary patch literal 817 zcmV-11J3*#3J3s<)J``BmvpJBdzOi&+rRvQAiIP4)H1nMn0%>&J^~Vx12Jq%nkfp9 z(!nv)t+hlZT+1l&67Y#1Y>Gqthd7-Z8YFb{pN%*>R+;tLgxYoNH1YUV zuKJ&cj(I))q^3SE%G&vmJ@c;C1=sp_zz7US&ht$mFTvC#X{wRLrx3m0Flz%6UNg7% z)KGe%75=$A6jP)&P3I;o<`Oc;n}D4juULiR0{pzWtYqJH&@P{9-@VM79}JH6@^?>d z@}Ig9G0_`nNy}vRPIiy_=YBHizJx_-ln2L}`QFv1TiQ64*ze#P^QAnW*5yos`q{-V zVQBtE$4=S|I15T7r)uYx7Be8fjTLJWX!tEerBp-K+o=r{$3!jOjB>L?A#9S^oO6i& z$se&sIlKo8f#JA!GK9Gbcr=dN0f`(_1O@Ll^i6V}BA|DJZ|8&*P=7xH{i8$fXnMwi z2k!>VMoL%&i*t;9z>li6jf4DlB|c0>a{qRJQhAwyf?4~@CH77P+1 zy+COrGTZ7zV$E&2yk%9Af1VtgSy~Wnkb!otoy+h_yg_7lV5(kj*sZOuvlA>9vAXix zms`G=I2g!YZ@1U0XixUBsCIV9a?+yO806QeL;+{6U>2lU%y*sp*M20CQs*e@{97(J zHU{+R-e4Fw{)B zO6L%$vv3taLR1;ys{60uyLUPveGxU=u11fI1aZ!iZM&U~mR037QtgW(YZ4qQ>~J6>~@{bT4KAMR_7BoOsxuD^E( zw&HLT?H{hKSlCH>M`ZO|{Z7t5dD@6|s{JB zgI|`vuRngb{+WKZy^+w$x@f`9<9M_zm2gt4=nCPwG1RtPSYhM>5=Sh!M3b^exq}2e zo1);PKsZQ~lQRMvP|haz4&?40o*03%rXMTXwxh`9%bMn#Tq?tMarJR=g4;W zkzjVaMU_;ku4twO4-Pcc#u)2;fA)UZo6IYl3^5mKzlYO>KXjp9U613Z12I_?0UFm?xvsTPmm=%?Qj2Qwk+EN=pKfTujRj#w$L*5A1s}D zj7fn+$4^7qKLc7Odk3uUgfLdiCZS%SxXa$)8c@~+?`CxBj8rRRaO1ci$|4LUfAdCU zz|F19L6;73Jlf6aHFs;8ONGv0czS+%nvx;B!=v==Tf&(Iw+jg=hXE%79}eH3e>`GbQNQNiHrAb2*n9Y+ u`N=QC7tYCJ5I|-@EXk_<-minm$!!pp+yzmRGKk8LzWE#7`?n7Z2mk;{if(!s){if(s=!0,r.hasAttribute("value")){var a=r.value;t(r,"value",null),r.value=a}if(r.hasAttribute("checked")){var o=r.checked;t(r,"checked",null),r.checked=o}}};r.__on_r=e,u(e),h()}}function t(r,s,e,a){var o=L(r);i&&(o[s]=r.getAttribute(s),s==="src"||s==="srcset"||s==="href"&&r.nodeName===p)||o[s]!==(o[s]=e)&&(s==="loading"&&(r[g]=e),e==null?r.removeAttribute(s):typeof e!="string"&&M(r).includes(s)?r[s]=e:r.setAttribute(s,e))}function L(r){return r.__attributes??(r.__attributes={[T]:r.nodeName.includes("-"),[l]:r.namespaceURI===d})}var c=new Map;function M(r){var s=r.getAttribute("is")||r.nodeName,e=c.get(s);if(e)return e;c.set(s,e=[]);for(var a,o=r,f=Element.prototype;f!==o;){a=A(o);for(var _ in a)a[_].set&&e.push(_);o=v(o)}return e}export{S as r,t as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/Cu3VmnGp.js.br b/apps/dashboard/build/_app/immutable/chunks/Cu3VmnGp.js.br deleted file mode 100644 index eb4a15ba774a75790e762622223180e3c28a5b12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmV{KwVeNcUUyb?vL$!T$Q^4PD}n$AZA0yjmH#_clcVqlv-_91yEo0D z#bT{i%qx}ec|dF0KIi6BqvaVW2!i?4oU#db|86pGS;hAN9e#jUeuPhcgAaa!J~yGq zQI+WrK@&vbOP9Uvab>pIx346CrO zxt?qL;WaA#Rb8yQi)WJ0a1bO}!$-MYG#yW~PWHWRzV~s2pmGdUv*Sf4Q8V|B%2bm* zJ|RBd6rZXt@=-=G^%SFmWLYbrWbOV&VoJ&BWV0Dxn<{}nFc9~VQqoR%Ut#0Gp8G#1 zsN|}mz*t&cbeA`BjMzj3Oxy7P|4_H^4j5={C<*TsTqR*l44R zNPV!rj;IXzD{tznN?nMXhY27qpUITO+@EuMbtod8M9HF`+VUE{vQt0uCvu9^n`YlE zs0`@;Usjugv3MKXrCDQJ;Fx*h+yT<2s`;FLMMMksAL{t zD_=)A?@MwGQ*XareE8((?7jN!SynjfL$ZY1hvv@JoEe`Koe!=_u*L>$U_#bU*(x+O z6S4)nV70OLY|gGOZ$7iE>}(N?v&k(du{R|*V!zXrc$l3@1TNrXjL!T(dYHYFq$=&t zLm+e41>|g}>kgSX)@dL$1hT+Mo;Yc{x)$=pfbLDnU#b)p7WcRrbsUg7g^o%i|EP5e zfb07{BbDdQ<^(7^jzU&k^!=l^DBvYZJ!)TZ5}8R;?pA&cq_!BQQM`~I0GOwO9S-BC z$1wg?ge6N;Qr2zoMmGomtvDQ_*bLw(iXu(0{{S*unuJa diff --git a/apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js b/apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js new file mode 100644 index 0000000..ac58719 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js @@ -0,0 +1 @@ +var cn=Object.defineProperty;var wt=e=>{throw TypeError(e)};var _n=(e,t,n)=>t in e?cn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var de=(e,t,n)=>_n(e,typeof t!="symbol"?t+"":t,n),Ke=(e,t,n)=>t.has(e)||wt("Cannot "+n);var p=(e,t,n)=>(Ke(e,t,"read from private field"),n?n.call(e):t.get(e)),F=(e,t,n)=>t.has(e)?wt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),z=(e,t,n,r)=>(Ke(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),K=(e,t,n)=>(Ke(e,t,"access private method"),n);var vn=Array.isArray,dn=Array.prototype.indexOf,me=Array.prototype.includes,lr=Array.from,or=Object.defineProperty,Re=Object.getOwnPropertyDescriptor,pn=Object.getOwnPropertyDescriptors,hn=Object.prototype,wn=Array.prototype,kt=Object.getPrototypeOf,yt=Object.isExtensible;const yn=()=>{};function ur(e){return e()}function En(e){for(var t=0;t{e=r,t=s});return{promise:n,resolve:e,reject:t}}function cr(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const A=2,De=4,Ie=8,Dt=1<<24,G=16,H=32,ve=64,mn=128,P=512,g=1024,R=2048,Y=4096,j=8192,Z=16384,oe=32768,je=65536,Et=1<<17,It=1<<18,Pe=1<<19,Pt=1<<20,_r=1<<25,ue=65536,Xe=1<<21,st=1<<22,W=1<<23,ae=Symbol("$state"),vr=Symbol("legacy props"),dr=Symbol(""),ne=new class extends Error{constructor(){super(...arguments);de(this,"name","StaleReactionError");de(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Nt;const hr=!!((Nt=globalThis.document)!=null&&Nt.contentType)&&globalThis.document.contentType.includes("xml"),Ue=3,Ct=8;function gn(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function wr(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Tn(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function bn(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function An(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Sn(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function yr(){throw new Error("https://svelte.dev/e/hydration_failed")}function Er(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Rn(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function On(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Nn(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function mr(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const gr=1,Tr=2,br=4,Ar=8,Sr=16,Rr=1,Or=2,Nr=4,kr=8,xr=16,Dr=1,Ir=2,kn="[",xn="[!",Pr="[?",Dn="]",ft={},T=Symbol(),In="http://www.w3.org/1999/xhtml";function it(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function Cr(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Fr(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let Q=!1;function Mr(e){Q=e}let m;function ge(e){if(e===null)throw it(),ft;return m=e}function Lr(){return ge(te(m))}function jr(e){if(Q){if(te(m)!==null)throw it(),ft;m=e}}function Yr(e=1){if(Q){for(var t=e,n=m;t--;)n=te(n);m=n}}function Hr(e=!0){for(var t=0,n=m;;){if(n.nodeType===Ct){var r=n.data;if(r===Dn){if(t===0)return n;t-=1}else(r===kn||r===xn||r[0]==="["&&!isNaN(Number(r.slice(1))))&&(t+=1)}var s=te(n);e&&n.remove(),n=s}}function qr(e){if(!e||e.nodeType!==Ct)throw it(),ft;return e.data}function Ft(e){return e===this.v}function Pn(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Mt(e){return!Pn(e,this.v)}let Be=!1;function Vr(){Be=!0}let S=null;function Ye(e){S=e}function Ur(e,t=!1,n){S={p:S,i:!1,c:null,e:null,s:e,x:null,l:Be&&!t?{s:null,u:null,$:[]}:null}}function Br(e){var t=S,n=t.e;if(n!==null){t.e=null;for(var r of n)Jt(r)}return t.i=!0,S=t.p,{}}function Ce(){return!Be||S!==null&&S.l===null}let re=[];function Lt(){var e=re;re=[],En(e)}function mt(e){if(re.length===0&&!Oe){var t=re;queueMicrotask(()=>{t===re&&Lt()})}re.push(e)}function Cn(){for(;re.length>0;)Lt()}function Fn(e){var t=w;if(t===null)return _.f|=W,e;if((t.f&oe)===0&&(t.f&De)===0)throw e;He(e,t)}function He(e,t){for(;t!==null;){if((t.f&mn)!==0){if((t.f&oe)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Mn=-7169;function E(e,t){e.f=e.f&Mn|t}function at(e){(e.f&P)!==0||e.deps===null?E(e,g):E(e,Y)}function jt(e){if(e!==null)for(const t of e)(t.f&A)===0||(t.f&ue)===0||(t.f^=ue,jt(t.deps))}function Ln(e,t,n){(e.f&R)!==0?t.add(e):(e.f&Y)!==0&&n.add(e),jt(e.deps),E(e,g)}const Me=new Set;let d=null,gt=null,b=null,N=[],Ge=null,Ze=!1,Oe=!1;var he,we,fe,ye,ke,xe,ie,U,Ee,D,We,Je,Qe,Yt;const dt=class dt{constructor(){F(this,D);de(this,"current",new Map);de(this,"previous",new Map);F(this,he,new Set);F(this,we,new Set);F(this,fe,0);F(this,ye,0);F(this,ke,null);F(this,xe,new Set);F(this,ie,new Set);F(this,U,new Map);de(this,"is_fork",!1);F(this,Ee,!1)}skip_effect(t){p(this,U).has(t)||p(this,U).set(t,{d:[],m:[]})}unskip_effect(t){var n=p(this,U).get(t);if(n){p(this,U).delete(t);for(var r of n.d)E(r,R),B(r);for(r of n.m)E(r,Y),B(r)}}process(t){var s;N=[],this.apply();var n=[],r=[];for(const f of t)K(this,D,Je).call(this,f,n,r);if(K(this,D,We).call(this)){K(this,D,Qe).call(this,r),K(this,D,Qe).call(this,n);for(const[f,a]of p(this,U))Ut(f,a)}else{for(const f of p(this,he))f();p(this,he).clear(),p(this,fe)===0&&K(this,D,Yt).call(this),gt=this,d=null,Tt(r),Tt(n),gt=null,(s=p(this,ke))==null||s.resolve()}b=null}capture(t,n){n!==T&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&W)===0&&(this.current.set(t,t.v),b==null||b.set(t,t.v))}activate(){d=this,this.apply()}deactivate(){d===this&&(d=null,b=null)}flush(){if(this.activate(),N.length>0){if(Ht(),d!==null&&d!==this)return}else p(this,fe)===0&&this.process([]);this.deactivate()}discard(){for(const t of p(this,we))t(this);p(this,we).clear()}increment(t){z(this,fe,p(this,fe)+1),t&&z(this,ye,p(this,ye)+1)}decrement(t){z(this,fe,p(this,fe)-1),t&&z(this,ye,p(this,ye)-1),!p(this,Ee)&&(z(this,Ee,!0),mt(()=>{z(this,Ee,!1),K(this,D,We).call(this)?N.length>0&&this.flush():this.revive()}))}revive(){for(const t of p(this,xe))p(this,ie).delete(t),E(t,R),B(t);for(const t of p(this,ie))E(t,Y),B(t);this.flush()}oncommit(t){p(this,he).add(t)}ondiscard(t){p(this,we).add(t)}settled(){return(p(this,ke)??z(this,ke,xt())).promise}static ensure(){if(d===null){const t=d=new dt;Me.add(d),Oe||mt(()=>{d===t&&t.flush()})}return d}apply(){}};he=new WeakMap,we=new WeakMap,fe=new WeakMap,ye=new WeakMap,ke=new WeakMap,xe=new WeakMap,ie=new WeakMap,U=new WeakMap,Ee=new WeakMap,D=new WeakSet,We=function(){return this.is_fork||p(this,ye)>0},Je=function(t,n,r){t.f^=g;for(var s=t.first;s!==null;){var f=s.f,a=(f&(H|ve))!==0,l=a&&(f&g)!==0,i=l||(f&j)!==0||p(this,U).has(s);if(!i&&s.fn!==null){a?s.f^=g:(f&De)!==0?n.push(s):Fe(s)&&((f&G)!==0&&p(this,ie).add(s),Ae(s));var o=s.first;if(o!==null){s=o;continue}}for(;s!==null;){var c=s.next;if(c!==null){s=c;break}s=s.parent}}},Qe=function(t){for(var n=0;n1){this.previous.clear();var t=b,n=!0;for(const f of Me){if(f===this){n=!1;continue}const a=[];for(const[i,o]of this.current){if(f.current.has(i))if(n&&o!==f.current.get(i))f.current.set(i,o);else continue;a.push(i)}if(a.length===0)continue;const l=[...f.current.keys()].filter(i=>!this.current.has(i));if(l.length>0){var r=N;N=[];const i=new Set,o=new Map;for(const c of a)qt(c,l,i,o);if(N.length>0){d=f,f.apply();for(const c of N)K(s=f,D,Je).call(s,c,[],[]);f.deactivate()}N=r}}d=null,b=t}Me.delete(this)};let Te=dt;function jn(e){var t=Oe;Oe=!0;try{for(var n;;){if(Cn(),N.length===0&&(d==null||d.flush(),N.length===0))return Ge=null,n;Ht()}}finally{Oe=t}}function Ht(){Ze=!0;var e=null;try{for(var t=0;N.length>0;){var n=Te.ensure();if(t++>1e3){var r,s;Yn()}n.process(N),J.clear()}}finally{N=[],Ze=!1,Ge=null}}function Yn(){try{Sn()}catch(e){He(e,Ge)}}let M=null;function Tt(e){var t=e.length;if(t!==0){for(var n=0;n0)){J.clear();for(const s of M){if((s.f&(Z|j))!==0)continue;const f=[s];let a=s.parent;for(;a!==null;)M.has(a)&&(M.delete(a),f.push(a)),a=a.parent;for(let l=f.length-1;l>=0;l--){const i=f[l];(i.f&(Z|j))===0&&Ae(i)}}M.clear()}}M=null}}function qt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const f=s.f;(f&A)!==0?qt(s,t,n,r):(f&(st|G))!==0&&(f&R)===0&&Vt(s,t,r)&&(E(s,R),B(s))}}function Vt(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(me.call(t,s))return!0;if((s.f&A)!==0&&Vt(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function B(e){var t=Ge=e,n=t.b;if(n!=null&&n.is_pending&&(e.f&(De|Ie|Dt))!==0&&(e.f&oe)===0){n.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var r=t.f;if(Ze&&t===w&&(r&G)!==0&&(r&It)===0&&(r&oe)!==0)return;if((r&(ve|H))!==0){if((r&g)===0)return;t.f^=g}}N.push(t)}function Ut(e,t){if(!((e.f&H)!==0&&(e.f&g)!==0)){(e.f&R)!==0?t.d.push(e):(e.f&Y)!==0&&t.m.push(e),E(e,g);for(var n=e.first;n!==null;)Ut(n,t),n=n.next}}function Hn(e,t,n,r){const s=Ce()?lt:Bn;var f=e.filter(u=>!u.settled);if(n.length===0&&f.length===0){r(t.map(s));return}var a=w,l=qn(),i=f.length===1?f[0].promise:f.length>1?Promise.all(f.map(u=>u.promise)):null;function o(u){l();try{r(u)}catch(v){(a.f&Z)===0&&He(v,a)}et()}if(n.length===0){i.then(()=>o(t.map(s)));return}function c(){l(),Promise.all(n.map(u=>Un(u))).then(u=>o([...t.map(s),...u])).catch(u=>He(u,a))}i?i.then(c):c()}function qn(){var e=w,t=_,n=S,r=d;return function(f=!0){be(e),ee(t),Ye(n),f&&(r==null||r.activate())}}function et(e=!0){be(null),ee(null),Ye(null),e&&(d==null||d.deactivate())}function Vn(){var e=w.b,t=d,n=e.is_rendered();return e.update_pending_count(1),t.increment(n),()=>{e.update_pending_count(-1),t.decrement(n)}}function lt(e){var t=A|R,n=_!==null&&(_.f&A)!==0?_:null;return w!==null&&(w.f|=Pe),{ctx:S,deps:null,effects:null,equals:Ft,f:t,fn:e,reactions:null,rv:0,v:T,wv:0,parent:n??w,ac:null}}function Un(e,t,n){w===null&&gn();var s=void 0,f=ut(T),a=!_,l=new Map;return tr(()=>{var v;var i=xt();s=i.promise;try{Promise.resolve(e()).then(i.resolve,i.reject).finally(et)}catch(y){i.reject(y),et()}var o=d;if(a){var c=Vn();(v=l.get(o))==null||v.reject(ne),l.delete(o),l.set(o,i)}const u=(y,h=void 0)=>{if(o.activate(),h)h!==ne&&(f.f|=W,nt(f,h));else{(f.f&W)!==0&&(f.f^=W),nt(f,y);for(const[V,O]of l){if(l.delete(V),V===o)break;O.reject(ne)}}c&&c()};i.promise.then(u,y=>u(null,y||"unknown"))}),er(()=>{for(const i of l.values())i.reject(ne)}),new Promise(i=>{function o(c){function u(){c===s?i(f):o(s)}c.then(u,u)}o(s)})}function Gr(e){const t=lt(e);return rn(t),t}function Bn(e){const t=lt(e);return t.equals=Mt,t}function Gn(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!zt&&$n()}return t}function $n(){zt=!1;for(const e of tt)(e.f&g)!==0&&E(e,Y),Fe(e)&&Ae(e);tt.clear()}function Kr(e,t=1){var n=pe(e),r=t===1?n++:n--;return X(e,n),r}function $e(e){X(e,e.v+1)}function Kt(e,t){var n=e.reactions;if(n!==null)for(var r=Ce(),s=n.length,f=0;f{if(le===f)return l();var i=_,o=le;ee(null),Ot(f);var c=l();return ee(i),Ot(o),c};return r&&n.set("length",$(e.length)),new Proxy(e,{defineProperty(l,i,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&Rn();var c=n.get(i);return c===void 0?a(()=>{var u=$(o.value);return n.set(i,u),u}):X(c,o.value,!0),!0},deleteProperty(l,i){var o=n.get(i);if(o===void 0){if(i in l){const c=a(()=>$(T));n.set(i,c),$e(s)}}else X(o,T),$e(s);return!0},get(l,i,o){var y;if(i===ae)return e;var c=n.get(i),u=i in l;if(c===void 0&&(!u||(y=Re(l,i))!=null&&y.writable)&&(c=a(()=>{var h=Se(u?l[i]:T),V=$(h);return V}),n.set(i,c)),c!==void 0){var v=pe(c);return v===T?void 0:v}return Reflect.get(l,i,o)},getOwnPropertyDescriptor(l,i){var o=Reflect.getOwnPropertyDescriptor(l,i);if(o&&"value"in o){var c=n.get(i);c&&(o.value=pe(c))}else if(o===void 0){var u=n.get(i),v=u==null?void 0:u.v;if(u!==void 0&&v!==T)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return o},has(l,i){var v;if(i===ae)return!0;var o=n.get(i),c=o!==void 0&&o.v!==T||Reflect.has(l,i);if(o!==void 0||w!==null&&(!c||(v=Re(l,i))!=null&&v.writable)){o===void 0&&(o=a(()=>{var y=c?Se(l[i]):T,h=$(y);return h}),n.set(i,o));var u=pe(o);if(u===T)return!1}return c},set(l,i,o,c){var ht;var u=n.get(i),v=i in l;if(r&&i==="length")for(var y=o;y$(T)),n.set(y+"",h))}if(u===void 0)(!v||(ht=Re(l,i))!=null&&ht.writable)&&(u=a(()=>$(void 0)),X(u,Se(o)),n.set(i,u));else{v=u.v!==T;var V=a(()=>Se(o));X(u,V)}var O=Reflect.getOwnPropertyDescriptor(l,i);if(O!=null&&O.set&&O.set.call(c,o),!v){if(r&&typeof i=="string"){var pt=n.get("length"),ze=Number(i);Number.isInteger(ze)&&ze>=pt.v&&X(pt,ze+1)}$e(s)}return!0},ownKeys(l){pe(s);var i=Reflect.ownKeys(l).filter(u=>{var v=n.get(u);return v===void 0||v.v!==T});for(var[o,c]of n)c.v!==T&&!(o in l)&&i.push(o);return i},setPrototypeOf(){On()}})}function bt(e){try{if(e!==null&&typeof e=="object"&&ae in e)return e[ae]}catch{}return e}function $r(e,t){return Object.is(bt(e),bt(t))}var At,Xn,Zn,$t,Xt;function Xr(){if(At===void 0){At=window,Xn=document,Zn=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;$t=Re(t,"firstChild").get,Xt=Re(t,"nextSibling").get,yt(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),yt(n)&&(n.__t=void 0)}}function qe(e=""){return document.createTextNode(e)}function Ve(e){return $t.call(e)}function te(e){return Xt.call(e)}function Zr(e,t){if(!Q)return Ve(e);var n=Ve(m);if(n===null)n=m.appendChild(qe());else if(t&&n.nodeType!==Ue){var r=qe();return n==null||n.before(r),ge(r),r}return t&&ct(n),ge(n),n}function Wr(e,t=!1){if(!Q){var n=Ve(e);return n instanceof Comment&&n.data===""?te(n):n}if(t){if((m==null?void 0:m.nodeType)!==Ue){var r=qe();return m==null||m.before(r),ge(r),r}ct(m)}return m}function Jr(e,t=1,n=!1){let r=Q?m:e;for(var s;t--;)s=r,r=te(r);if(!Q)return r;if(n){if((r==null?void 0:r.nodeType)!==Ue){var f=qe();return r===null?s==null||s.after(f):r.before(f),ge(f),f}ct(r)}return ge(r),r}function Wn(e){e.textContent=""}function Qr(){return!1}function es(e,t,n){return document.createElementNS(In,e,void 0)}function ct(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===Ue;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function ts(e){Q&&Ve(e)!==null&&Wn(e)}let St=!1;function Jn(){St||(St=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function _t(e){var t=_,n=w;ee(null),be(null);try{return e()}finally{ee(t),be(n)}}function ns(e,t,n,r=n){e.addEventListener(t,()=>_t(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),Jn()}function Zt(e){w===null&&(_===null&&An(),bn()),_e&&Tn()}function Qn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function q(e,t,n){var r=w;r!==null&&(r.f&j)!==0&&(e|=j);var s={ctx:S,deps:null,nodes:null,f:e|R|P,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{Ae(s)}catch(l){throw ce(s),l}else t!==null&&B(s);var f=s;if(n&&f.deps===null&&f.teardown===null&&f.nodes===null&&f.first===f.last&&(f.f&Pe)===0&&(f=f.first,(e&G)!==0&&(e&je)!==0&&f!==null&&(f.f|=je)),f!==null&&(f.parent=r,r!==null&&Qn(f,r),_!==null&&(_.f&A)!==0&&(e&ve)===0)){var a=_;(a.effects??(a.effects=[])).push(f)}return s}function Wt(){return _!==null&&!L}function er(e){const t=q(Ie,null,!1);return E(t,g),t.teardown=e,t}function rs(e){Zt();var t=w.f,n=!_&&(t&H)!==0&&(t&oe)===0;if(n){var r=S;(r.e??(r.e=[])).push(e)}else return Jt(e)}function Jt(e){return q(De|Pt,e,!1)}function ss(e){return Zt(),q(Ie|Pt,e,!0)}function fs(e){Te.ensure();const t=q(ve|Pe,e,!0);return(n={})=>new Promise(r=>{n.outro?sr(t,()=>{ce(t),r(void 0)}):(ce(t),r(void 0))})}function is(e){return q(De,e,!1)}function tr(e){return q(st|Pe,e,!0)}function as(e,t=0){return q(Ie|t,e,!0)}function ls(e,t=[],n=[],r=[]){Hn(r,t,n,s=>{q(Ie,()=>e(...s.map(pe)),!0)})}function os(e,t=0){var n=q(G|t,e,!0);return n}function us(e){return q(H|Pe,e,!0)}function Qt(e){var t=e.teardown;if(t!==null){const n=_e,r=_;Rt(!0),ee(null);try{t.call(null)}finally{Rt(n),ee(r)}}}function vt(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&_t(()=>{s.abort(ne)});var r=n.next;(n.f&ve)!==0?n.parent=null:ce(n,t),n=r}}function nr(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&H)===0&&ce(t),t=n}}function ce(e,t=!0){var n=!1;(t||(e.f&It)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(rr(e.nodes.start,e.nodes.end),n=!0),vt(e,t&&!n),Ne(e,0),E(e,Z);var r=e.nodes&&e.nodes.t;if(r!==null)for(const f of r)f.stop();Qt(e);var s=e.parent;s!==null&&s.first!==null&&en(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function rr(e,t){for(;e!==null;){var n=e===t?null:te(e);e.remove(),e=n}}function en(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function sr(e,t,n=!0){var r=[];tn(e,r,!0);var s=()=>{n&&ce(e),t&&t()},f=r.length;if(f>0){var a=()=>--f||s();for(var l of r)l.out(a)}else s()}function tn(e,t,n){if((e.f&j)===0){e.f^=j;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var s=e.first;s!==null;){var f=s.next,a=(s.f&je)!==0||(s.f&H)!==0&&(e.f&G)!==0;tn(s,t,a?n:!1),s=f}}}function cs(e){nn(e,!0)}function nn(e,t){if((e.f&j)!==0){e.f^=j,(e.f&g)===0&&(E(e,R),B(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&je)!==0||(n.f&H)!==0;nn(n,s?t:!1),n=r}var f=e.nodes&&e.nodes.t;if(f!==null)for(const a of f)(a.is_global||t)&&a.in()}}function _s(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:te(n);t.append(n),n=s}}let Le=!1,_e=!1;function Rt(e){_e=e}let _=null,L=!1;function ee(e){_=e}let w=null;function be(e){w=e}let C=null;function rn(e){_!==null&&(C===null?C=[e]:C.push(e))}let k=null,x=0,I=null;function fr(e){I=e}let sn=1,se=0,le=se;function Ot(e){le=e}function fn(){return++sn}function Fe(e){var t=e.f;if((t&R)!==0)return!0;if(t&A&&(e.f&=~ue),(t&Y)!==0){for(var n=e.deps,r=n.length,s=0;se.wv)return!0}(t&P)!==0&&b===null&&E(e,g)}return!1}function an(e,t,n=!0){var r=e.reactions;if(r!==null&&!(C!==null&&me.call(C,e)))for(var s=0;s{e.ac.abort(ne)}),e.ac=null);try{e.f|=Xe;var c=e.fn,u=c();e.f|=oe;var v=e.deps,y=d==null?void 0:d.is_fork;if(k!==null){var h;if(y||Ne(e,x),v!==null&&x>0)for(v.length=x+k.length,h=0;h8p>+X0#PF2)M^k0GsaE^Zu)MPP5`y^gY>w-4 zB4O)8ru+SoW%kB3j*ua@H&d-AP9v$G@tq}SDTsKqIic1~NR85yLtP0<{D zne8)*$)hd#9i`nGPh{ZehX;hcMSu;b(o`Sg#|pe^m0-Hg502DQ?O&_bb`pYvH(vDO zo3E-6dC7E!v z>P|R=(BCPBLboAiTK(q%Hr@F)OlzN{?Y_C0*v24)&`+A}Rra>wQ(FkSE>S*_iO0WV zU&=~Ke=g%Dr~zq39RU3L+f`WzR1$jf^d@8j`!sh}Kj87(B}Co6(4aS7y}&vO+62J9 zTTizF4n4c8{M{Ox-CC8<>gro+p!VL|A&*AeD+%13@H;<6`?&%z$GR~3`8ns&n^D`5 zaB5$+KHYfJjGk1L(yHKr(&h#2?gOv!KLCWr#twiuZ!bMAE%)s%#z&PRacPZKj()FI zXhf?t-oFRyD=)zZ3HR-;Szlx?!{cR$3_Uy^P2bB4c=to3ssLeYp#iB>zag>7D`KwR zrG9Aql5pLvve~D}kG&(h&AIbYqVZ|Qd6gLd6qqLUHTmRYZ?dtU_L)CQ{?|1Y?z2>@ zvb}0(9-ckyquf?)I-PFz6geFG=fd^-;Fjyt&8tQKnyWWMD%zgZXU?)-o&ZH;7P|HI z$XU`1zfh%9pRgLNt&jEw^*iS@4h8N6gEb@P%|EPq9)>AxUkCD3g?k-R_`!Ood!m?` z?}6+tjP!cf{&f8WP*LGW467t>0)KMk+bSZ>YjHA1g`dxSmxZ!&?PHnm`V=;-(*U4o zp7ivVoyI-KNr%&q-SZzotapY1Az?v@1k8}6Qoi)TxRtZt6+QhF*RXpU*Q9g{S&>lwQuG3P_TI0{P+7;`pQc^`!-~HS$_g~h@ z76V)E9H8>GSQ;ddk>laM8zA02Wv=RtjbwftGAC*77)(qLk_PmqJ&&9<^{ zuJj(vzh7UAe+u7iCgU{WZPS_yC09wzH03}?(T{<86+js`SUmt ztA{W(>**tT82WFRE)DdlC@7i%R;SGuqaO4nU-Zku=HotdNtyNSsqJj{ zPR#7EJjHMb&l4}QI&ppN>74X_!K9S4LE08;`8yc9DCHAzC?n(=X%DXjkXR5g6( zRbUUkA~YAGWIC*q(gu=s-naocna6S2_V_e!l)3rb<0HbVpX+frRlglcA7?$?!*p`z zKnP%UK0zcdpGWHX0MqB;7*w&-4R6v5QDCk1{0@}Zc&UC_F}n(}M7uHtW>9@>05t#Gja^_l$ic3^=|ch2`xv)aS_?u;U-_;{uKk?{6(&V!co z-J0Vx*Wify`1fkX+UuO+UH@bLm~3|<&?^I|<#pmtjG35#KNdJY;SWh_fchXKHycU^ zW}t!d((MWhDRd`#$KOi9D>Cqf+1jIHp(~t-GOCo0i0Ij4voiLxQbcH)^4kR+2@8?3A?1u%ro(c z*GqsZWuSwnf9$tsh7BqC?esF?-lA;4!`AnT+tdM+?BB94$ln&e{$9WN8^?cPibUiM z+7d7>M8K1UA)G{Ppyggg_*GySr~j@-kkUL$W6zIIej$L+v$E$Y4shKaMARlABVp^( zddg|rpd;^i++tvG)*Tk*cM&WplP(ksb4C(<+dDuz#@#?|Jp+8s zBiZTr&jvb+&9o;m%1aUYOpUnbt4Lwy?5e{>cSPzHMgv=6ffIJ@J5Xd^hjD4B@-}dv zf+bY!!6e5TU-Fu=#P$s;ZddEveQ4AHE)6w@l+U(JC}1qzCrP+(!u`2QnC*2(y7^

f7`=wN*p zy~J!TMF*;Rep;Bfv1;kMB$ zn8(}o$-b7CmcqQ0&b-6e85<-`dI^f!*JI(B+M<}_&ZA<#gdfeeeq+b-w#(011^&&E zPV+YwjL)ebeWCJTALjSHqrunCd;-(XH+8JA+qbOP&PZxCkwF~t1|KXT^g9_kFn~P? zK29rs4|Ipu7FU-Vkq(Irvo14c-V)WZF^^ve8C-J&2?r!AMUIEXey`-OJd4 zt)^e@(BJAKm$CG^EdVymq%A)AT{HoA#2WN@Q``$CC^31tr)cD>+yJyHmM;T*eMbUn zB|7b_-<10t=-NK|rMmp{u;X5=UT>ei>#;BDBfkgI`kUpM7abwsBys*{BecQMgM&Xv zOg)$?-mW$L78ZNN*_H-)>`EWt2ZUMAoQem=33Y08Y`jVG0s3o5-drEjyo35F z0^>7X&bqP{PuD)%3$oz;r2|UKxA`7oIghNj7MW(W01YPlRn)5(me$r%m}bq<{n|8i z*jA(ueNC{>=)kBL5^A-P=BRp*XeKllnu>RB@cagpp5g!?`L`NKSF~1HY3}*5Sf9>T z_R8SFS2%V{_It*`afWfW;~d5b+1JZ}v*QO(Z*vLGxdT)Ra2OUP&2m#D$emv{&Gk7L z<*=o_#B&)_7s>Ng%SF-m^ zkXcr3B&+AckGS(QkK4Z3Qi%v+Z_wepR82@yT6hO{8f}QYy(UE}pvD0fwodA6v3p-& zazqW*Lpxv`pBtbWH9#*rdf&#*_W9CbLNb49yd2%w?jGRtAK@&gSfvm?5l6=3ag{Q< z-GJTx+^VSuCGxZ{coKPW^fZ$cL5@M+U+QpQ@Qmz)thM-lxsfHx z(!M9(?%w|HBC9l=DfC>wA>sz$+sZ%jZK2zf`>#1NjGMKZzsn2gtfIBTt-ji|qi%1t zp{1!%IbrfADW{bh5jE;UG~;+~AsuQW`=LZbvRCYg__mMI8sw74lUe~G8^`kq9vy^Z z=!;VOZ4TY>Z74@@>}~*2vY!6)JQ@V{YCh=EmR7LGOSoDqC^_vTgBe(SM|S4_ zokOr;+6dse7TX1GD5nU8Cird2ef?JAthZwB3|$N;mg0_wNao*?3Wc0zeF^T&_gG-x zXlXtQOynfU*fByI`RGAs|IR||I!u(@bpYr50}g^dW-M!*jhJCPu+mb*Jjk7Mg)~G<=_s^)YX_m`|0GDa>Hc(9S)bJ5>6i^rX zUGO*{p|Z0+S*1+$#!TnnQ+G6=G4TRRtlWyqdTXJ50Keu77Wpo23Jz4C~cu?#eil`B%na@95HFmyh%Zvpfw46Yp)z&jxE&< zkhKZe>YbMKYf|`-LI6(c-5YkEPT=a=$!(5a64j{2?SIssSGZ68LNc`2x70~TNpl(~ z?~rZk>VG?)+rJ~nkXGGZK;nb+-4+F+0+Q2h9NwLx8KOw$durdXBd>m%QRj^sR5R*5VF@~^W`<3fqqGV-cw*ry6~lCtYp_-c zOY~fL6H)N*%Tmv%*sTa^a?gxkbmtit*d9l^b7FMP1S#B{?%)v1XP^nzL44a6cGV3g zzF#uHd4SGcBr>GhOuk5UhAN!oxR6h29Yk5=`~5I79pv*Jgl!(-eZArxF9Ny|hTc^T=uM;rY)^mdW{rYZ=dDqfWv|qTp`Xpt(iWXK| z?A&HlMWChnVxs@fi&6_8zP9}{IV%(o$eGkOWJCUv+MgG3Q)2c&5rT!j1OL@e=(ZR3 z_mNfIWlwvzru!NjiC=xkaWCt|9CiOt6f1fl5pqE%OU4GBe{Dku$R-Z7iheluNf% za-v051JTPv8Yx_5aD$(hg#%j@$o@%N&v8!GTAYpEq}|8b9m#>%X`#F(23>33 z5|$Dl0$ekLAM(B#OB*@3hDywqX8N0oT&i>l`n-MEVCu$+U&RI%I4F6ZL`xi2Z2Vgh z&XX))n3(+bLl8e5g>JDrZ)Qm3shMytKVTAX}jfu z0iKg|E^hZ|IH5p`zkgFIYs`d0dYRS+GNfLsnS;N`+}1}>hOOJIe#W7lc|Pcv{TH$( zux8{cvn#>{KtM<)uuphMN_7mTC&M-4DVLE{kJ^9$<&PBG3-rGgZC4IxItPh+~4it4j2l9S2EK?wz3pPcH5<`q_SSulAL zQfWGPjtlo?EKG!*+t$xyNfjP@S_X3>x&nj#eSHvMkE8L^1+0=lBkogLK{`A!zGlm^ zgg80@d7H6GmT~fp0>Tv>u4n-f0^%d(Bu-sl@byBOp@YgvEU1W5$G|>FeRMsk@#%B= z4qXv>VwZ#f|E;b;G+l3=L?eQJ3D#xrqJ-$_P0B`1F%V{Pk#E9qk=!XRR+P)hVO?u# zpq(mVy%+w!j#sGZ&|;{bhz25M=o~#EoYmkeVG%#ia{FMErb1CCk)LKFh)G*_=N%2t z9vt1Mct4u~v{ffC&CulN>)xnx#DY9%VL;$eT(X=0yJG`RPsnzgsdlr4?DGF z0&pUQTBH|O0H6CGX!BdCeUCOAaABJn8$AMJX+hm$+-Bx-C{K2Tuchd)-NG82T+?3ZOs zK*Ui;oicIYQ8UVqN9>Li9w=HZJ$m!8r48(t&Z5#pu$Z`n;%O$#wm2HI@g+^zOCN`E zJ_gV6YxJCYMkz( z7mMz62iqNhAFCk(xO*4N6gWx|e5&(o66RRMvYL4%Qf5D`yy3rLxefhZr3U>3?4fg! z6R5Gz`p=EAj=q@H#H9G?!q}tlADBVD6^rg!irg|5`f>Y0WTsn|O0sShh`@wV)`7CJ z7bL4z@de6eg)e<&K7=&4xG;$?dkI1bfouivhYg#dJujrjG}I3f4YDARr5QFP`}fMu zpuRhzQ`h59^h!yP_d?ruZZ$CSo*&_i7v;S56j0o>WL!(Hto7kVR+=*!D zKaD!}r#>}fSyvyGSq-u9CRxE!L=M+ zd%64;P~)`zrDU{xEYmG1i;SaMy78~--Vg4GK!pfW>FcOh0ZUTEYjs7mQI!d8~uWfCz~i=O#xB;YE_26m%UIik@0aCSbP zVDj8x<{Y?5K-b4=XxekRGFAMf7T25k5R%~WnVbd2%q6-%^$7@UD9dZhN?qg?4S&Dz!St>OWFfP3I1S>&`-c z*amt*_i+B_{;7U^?&f+~wq!i(1%4KdP7;(Al<;l-FD{a+RmDLeKJIu-WE#Y*J)B$j=b#f zgi|1Kugb+i>0|F)hMQNagQMM{048`+WviLVX(#vTb;izqwu~Bv0)E2EVy7H!8@1t+ zN0A(G!eGKJHQI5|i@b3Cvh1ep`w+l&n}$^O;OjJV%Z$-uEpjWiq{1G-V9iQFoHz!% zI088&ZoSd#dg)c~hE>YB5pA%Z;Egk)8_S|vRnmR{{CuzyY&UmeHe?zNrs;fxY!4rp z6XryJ4U(1D+Ci!oApu8!(}0~Ej(2@|XmUNUJJ##$VPR*O745=n zGfG+1X!h>t?XMeT_uzt#`A2#3vIxQMFj*cJgnS%6HjhQYcv>9NBH;sQ*+T^Prho!{ zJjm2VHYngux&T7G^^Y$lE0TI#5#t0Qt8lr^*FpD+0bFzPjH@JY-sns0JwecGcy2`~ zHSE!1R0{inw`WuwQy*jEDP^P@aYipA(LOCf;Vq0DkZccPwS4aRSN*X8S?YEGRk)a= zk8|n%Yr-SFH}Y6jgNyzTq;5ygVdrxLN+JR3O{-3!x+T@a8t8YS!yRS&2pCHPWQRU6j1nRo+a@x1&tR9Gh0hVi^uAA|{9pwd%oy1*t6YDp=iI zvSxPlw#lz%Tg&i0yqW~GQ zDLLYh^{3)bQCvZ3{Qff0Mq-mO+SAPHs8Go!4Qvk11~$iLkiEq=O~+bvV)SULr4E}4 zs?-P#Vm<#L88Wczgm6)YbMmWGDBEwQi{?H2ZE09HMOb?##$Ztx+4QX zO^=w>R@jfGiS&}eFdVRV@9_SFU=u4K^4F@8;2zyG^PX?gPKy9FEB5YkN%#!iQ)P>F z0UakV!^dRDDVV-K1xVkY>Pg7X<7+9>pI*ixaGRt&uc~qvNt-FmUN>0xaN+7!-?w3% zWvWup@tbv=a7wx;bi4m0h$UN3Z>$tKOLduGF4`6)bt?4atm8f&k0sHev$v=!{<<$k znv*r(`$dau#WM!vZf9?_f|R@Cv3%QGe``}0(cIRml-1rhGk(qp35(k07I z)Typ?MK|*X#D54(!tx8iz%z2R!~X&o?rW4e*2tub5*EO!Sm6X@<*TEiz*c2PBcs43 zn!R_PPsU5R>;>%(J{KB&p$qm)u3iW-P60a zc93`Cr8;p4K5X*5U?2gh094O6P!3T$0hsj^t&pQmW37O4vH{2Ke5^4}KESMrO}bI? zOh<_s&?oRm&p{ z8lyWNX^5s%FDfJeyJYdW#?%i|32ya3%%gg6952#X1znnVR6TSEI)p@?0Uw19@_-^N zDmz^hKqjov4&-i$&^)-u2GXrT`IOrVzWlN7jNR5Y?TVo%yajPs%@r%Hz)66N=u8C- zY0+3vXfVgiK*q;ST@lj0SejzU3?De9G(`hE5HXaGSVi&nF^q(~838KvLJ8R6rUn*{ zCI0>+q0;ScD~u4?ds+gM+>8>O(Ng!Fm*S<6VY)&$c!hLS0qagE#9lm~<%EnSpAc|C z^F-O@1y~dIe;w#P2Kr9m80X0ZHk4523l%rn@>P1_vY9;VwQtXa%!guFmsEqebVsxXUyhVzVxQRAY?0B{gLcS8=tU54V6PE zDDrAS^%~BDhjq!p`UZ^|_iQOV*>tlGGzBWiRY#l-_&#Sa@6e2Oe4{Fy4f{fJ?5DXO zcH|SnU`XA^?bD9PZ#Sip0l7?Aowqp%zX6x*;0qDBQRsigo z?gx1CFfSy1YPdO-lo66=c6nHRsDtb2F;^$|6IVR}>Sc*+bF4f0W21U&N|IFnvi4$ZO*eiBJ}49Jr`avlI}ZJ~iFm^w2N+xww4Sr?AI zn72#aR*W{hSTSOUwR5}Z3INo5;Ed_i)>T|9BM+k!4(AmlT7_ZlgQl17c5C(Qb%+9UGF2p$qw znHB5sqyp~k(E%{8STThiE2vNgPf>;p9apV%^P1`4qc92O1SP(H$QBnATQ;lfrmFbd zEV?om@dk4nTycU9+1n+umG**v<09z}9&pTwD?%g!pGcyWQ+3>ZqyRzD!NnuWk`xZ~ z4DI+@;zQ4DJwpNg$o=S01HWK~Up$nrF+I(ojSJw z9P*?07uyA*0rv=Ser*8`K2hWyP&aj6qM-hdL|h7Rfd05YH@*D4eEFyYyM&MZVyiQ^ zyd?-$Um`AmdcN!u7`f1e2!rMHQ~sx(uzl&H@6sQu{+mm7)kA>V17TpA3a+q2i26uN z1`4C2r45E^SOmjCc6h5CfvXdh1xUm>87!Paf}--HQPEY70VbxcU|C9R5e|lMl@21D z_>Yc%{v|VeUfHz1alXgJk3IME@T)C;FS$RMzn8_ou?h@TNRZfE#Ist0DJiE^TuZw$ z@F~l%Tx;?MD1=@StHi2&sZwWEd8+B2PRIUCcyIGx8R@HEG*l{i=@Ky|Bn$X{R?vl{+;r#C~8AR}(*4 zBsx1OyDu|Qmp_ITDfBDJdMb*f=A<#vJ{r7^An6rna4C$cnhC}HnA&?$vog&luk8H# HJ^u3qlaCn0 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js.gz b/apps/dashboard/build/_app/immutable/chunks/CvjSAYrz.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..05005a6257e98d066aa7e394f7195025da046d60 GIT binary patch literal 9695 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js b/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js new file mode 100644 index 0000000..82869ba --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js @@ -0,0 +1 @@ +import{y as S,z as h,A as k,B as A,S as B}from"./CvjSAYrz.js";function t(r,i){return r===i||(r==null?void 0:r[B])===i}function q(r={},i,a,T){return S(()=>{var f,s;return h(()=>{f=s,s=[],k(()=>{r!==a(...s)&&(i(r,...s),f&&t(a(...f),r)&&i(null,...f))})}),()=>{A(()=>{s&&t(a(...s),r)&&i(null,...s)})}}),r}export{q as b}; diff --git a/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.br b/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.br new file mode 100644 index 0000000000000000000000000000000000000000..623300e81db601fea6ba1b3447e02f27a899a1d8 GIT binary patch literal 197 zcmV;$06PC0JOLoYx1ZC`D4_hiSJ3NaD+oCNQcVi9%TvvTLr)aos4W^BC~bM-cBxPJ z->yYOJt@GnL2nd?73xL{70&xj09>W}E2P){K3_r;SH%DV%8sUOl| zzL0I(YKBAlkl-2dJS8EmJ`E(whelTBlKEc-2pf=sRxnkob8F@QDEfut=KA+qSDRx3 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.gz b/apps/dashboard/build/_app/immutable/chunks/D3XWCg9-.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8ef743f489403dc15f2ac314593be374f6ca56d7 GIT binary patch literal 227 zcmV<90381xiwFP!000026J1cdZo@DP-1`-327v?!wQ~$Mu=5G-QUn>?HbRt#olvsT z#?ikAk_!)=j=Tp!oI77S3FEJ7ysGJzU{7U&BUK4XsuNVvN_SqEm-TR{%MZDkgI^T3 zZ@+@;S`|RZ;V8S%ORI#L-Te;2-1eu_YUtdzdR@w<+G3L8oV$YX7|BsX?{mBcKzXy1_wfUCaZOTELbE#tsSIaC=(blBISHJo$<5X d|F`?(jz|)BKe?=HDPY;wrpqo7b0030xX&nFn literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js b/apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js similarity index 79% rename from apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js rename to apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js index c8ff9c2..463a6f4 100644 --- a/apps/dashboard/build/_app/immutable/chunks/AcZBvMXu.js +++ b/apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js @@ -1 +1 @@ -import{s as c,g as l}from"./CCRrbKqn.js";import{a0 as o,a1 as f,a2 as b,g as p,h as d,a3 as g}from"./VE8Jor13.js";let s=!1,i=Symbol();function y(e,n,r){const u=r[n]??(r[n]={store:null,source:b(void 0),unsubscribe:f});if(u.store!==e&&!(i in r))if(u.unsubscribe(),u.store=e??null,e==null)u.source.v=void 0,u.unsubscribe=f;else{var t=!0;u.unsubscribe=c(e,a=>{t?u.source.v=a:d(u.source,a)}),t=!1}return e&&i in r?l(e):p(u.source)}function m(){const e={};function n(){o(()=>{for(var r in e)e[r].unsubscribe();g(e,i,{enumerable:!1,value:!0})})}return[e,n]}function N(e){var n=s;try{return s=!1,[e(),s]}finally{s=n}}export{y as a,N as c,m as s}; +import{s as c,g as l}from"./DfQhL-hC.js";import{a3 as o,a4 as f,a5 as b,g as p,h as d,a6 as g}from"./CvjSAYrz.js";let s=!1,i=Symbol();function y(e,n,r){const u=r[n]??(r[n]={store:null,source:b(void 0),unsubscribe:f});if(u.store!==e&&!(i in r))if(u.unsubscribe(),u.store=e??null,e==null)u.source.v=void 0,u.unsubscribe=f;else{var t=!0;u.unsubscribe=c(e,a=>{t?u.source.v=a:d(u.source,a)}),t=!1}return e&&i in r?l(e):p(u.source)}function m(){const e={};function n(){o(()=>{for(var r in e)e[r].unsubscribe();g(e,i,{enumerable:!1,value:!0})})}return[e,n]}function N(e){var n=s;try{return s=!1,[e(),s]}finally{s=n}}export{y as a,N as c,m as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js.br b/apps/dashboard/build/_app/immutable/chunks/D81f-o_I.js.br new file mode 100644 index 0000000000000000000000000000000000000000..47ef78b1510fc231f0d5b5a4882426e477163143 GIT binary patch literal 372 zcmV-)0gL_{egYtjlrA@9w5hYb%ars)1+men<+|7&%`zPANa}M zr6M$PQ97~VZaCms6w)m7N^k|yUF_^PMwA)^hpTqs1q&~tbk`~u;%Wcve3qDTnoZAI z^fgusu1D5Ta5I=>3f>B#vp1*gU}6J!C#A7q({=CTkM3KQEWHK$mz47#5@(~X^5-20 z8S2nRjae+c6?b3eXE=mKXG<2Zlt=XBsSw@_^##((^yaI?iCkZu`P}uH<@nf#+{=yE zAsP?Q5Rkw*%W#;$6Xt1vtFu(l*_w~Z+2cgZgR_#kuw?&21OALaDByuz4ntLeis4F& z0(3~LdFfOd$nkNd^I-*oYL2$i(PY)Y(21~h^s&Y?Z2*u5R!CeI?g~Nq>VBHu)+q?( zWaWcH{jd_{Uy?w^%D-^vu&A>yA@h?ycmjE3HViNHvfEi8aZkA~Hp9h_Q|X#ruyIbd S(&2Vn5YUs(-Lx!opGWf zOF4<7iFHaCGG4QnhZY&MD_t4^O(mOe8Y=p`QHF@0sHDT{_u#vfyE zEX}5D)F^rs%j%2|wn$nesshcwO#n$ly}_<3H^(qC!%6@E literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js b/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js new file mode 100644 index 0000000..3b990c2 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js @@ -0,0 +1 @@ +var B=Object.defineProperty;var g=i=>{throw TypeError(i)};var D=(i,e,s)=>e in i?B(i,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[e]=s;var w=(i,e,s)=>D(i,typeof e!="symbol"?e+"":e,s),y=(i,e,s)=>e.has(i)||g("Cannot "+s);var t=(i,e,s)=>(y(i,e,"read from private field"),s?s.call(i):e.get(i)),l=(i,e,s)=>e.has(i)?g("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(i):e.set(i,s),M=(i,e,s,a)=>(y(i,e,"write to private field"),a?a.call(i,s):e.set(i,s),s);import{F,aq as q,aw as k,ar as C,k as x,ai as A,m as S,w as j,ay as z,ak as E}from"./CvjSAYrz.js";var h,n,f,u,p,_,v;class I{constructor(e,s=!0){w(this,"anchor");l(this,h,new Map);l(this,n,new Map);l(this,f,new Map);l(this,u,new Set);l(this,p,!0);l(this,_,()=>{var e=F;if(t(this,h).has(e)){var s=t(this,h).get(e),a=t(this,n).get(s);if(a)q(a),t(this,u).delete(s);else{var c=t(this,f).get(s);c&&(t(this,n).set(s,c.effect),t(this,f).delete(s),c.fragment.lastChild.remove(),this.anchor.before(c.fragment),a=c.effect)}for(const[r,o]of t(this,h)){if(t(this,h).delete(r),r===e)break;const d=t(this,f).get(o);d&&(k(d.effect),t(this,f).delete(o))}for(const[r,o]of t(this,n)){if(r===s||t(this,u).has(r))continue;const d=()=>{if(Array.from(t(this,h).values()).includes(r)){var b=document.createDocumentFragment();z(o,b),b.append(x()),t(this,f).set(r,{effect:o,fragment:b})}else k(o);t(this,u).delete(r),t(this,n).delete(r)};t(this,p)||!a?(t(this,u).add(r),C(o,d,!1)):d()}}});l(this,v,e=>{t(this,h).delete(e);const s=Array.from(t(this,h).values());for(const[a,c]of t(this,f))s.includes(a)||(k(c.effect),t(this,f).delete(a))});this.anchor=e,M(this,p,s)}ensure(e,s){var a=F,c=E();if(s&&!t(this,n).has(e)&&!t(this,f).has(e))if(c){var r=document.createDocumentFragment(),o=x();r.append(o),t(this,f).set(e,{effect:A(()=>s(o)),fragment:r})}else t(this,n).set(e,A(()=>s(this.anchor)));if(t(this,h).set(a,e),c){for(const[d,m]of t(this,n))d===e?a.unskip_effect(m):a.skip_effect(m);for(const[d,m]of t(this,f))d===e?a.unskip_effect(m.effect):a.skip_effect(m.effect);a.oncommit(t(this,_)),a.ondiscard(t(this,v))}else S&&(this.anchor=j),t(this,_).call(this)}}h=new WeakMap,n=new WeakMap,f=new WeakMap,u=new WeakMap,p=new WeakMap,_=new WeakMap,v=new WeakMap;export{I as B}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.br b/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.br new file mode 100644 index 0000000000000000000000000000000000000000..7325bd7bbea2329527d467d2e24083a7e25e700d GIT binary patch literal 878 zcmV-!1Cjh2y$Aq|(!}zU4_PaDi6N_*TD3e*x1&{RVNN)Au2k7sG2;B3Uz_&+j0@^8 z@=E_-WjynMh16YA`u6*&O<9+n{jb;abvh{lDN;a+$KW;xC`ke?;(3f{om3N0yZ)=n zU~g&3xIU3J(!UyYp}l&XA9p`aQ*>A1VkIp7&t0V?ae($FuH3pZT@wZm+Ic%F=X}UI z+}o%jqKznwe^S+3VK9X9nO-%E%~=Y!vY>yJr%F9k8-1EIybr9_a#P2DTg4ztiBe{w zZU(&FeLB_15SKIhWE-`rlc_R;Tqu*p_azU=OJJt-9(B~7>^h283omw zDN{fekzVu&v>?m7n;y8jyH8`9v@jk^%O6mSqW`so;%P55V1af$lxuYTtZU{mbKVZ&lfY`kjKz zz=?^5bM){+pW69)b9WTtpj8L;Vv+q+=j9ehYzPMn^5n<;4^pg|H3z|@&L?9jG3yXC z8lJWGYE|}--p6t(ql`9SGe!V|(4cgL`XYfK7P5DM5beN008+!GcOWoFH-iKeJ6GU+ z#+{!_&ChYVmb+kzxFJQ?+DOUTau>)~F@)-3qUp-(p{Re~IEFZ(`b`p8jDbyXG4R|| zUUyTc+jXd6VwAtL2YXeWz?HH^?i)F;EfAhRVl7@HTNEfj$S7GVmjY433-m@O*Q5f( zByytrG>8UqSn+yyGASCjRK(Hab|E`KVf4Hl_wX`H)w7Gxf;N0}PFB%6LWIS89#Jv~ zAzcmDVBth-4U+Mu!qp2j$>dIB{6s=2)gTGq=wLj~zQ4(io>>7Af04d>?- za10i4h*%uzSWLwUv1E_PK8pT|j(s#!5(#-PVxTT$5dfd!-oR7LMjpc&-VeYrA=XcT z1Ul4U*7a%qFyhN7-dH+_A=w@=#i;nK0a#%W zH#s7P?90#3bzagX$XoB>AVC#ob9IK%L%aNdL?&SaJF$s1%p8mK>y24IS@vr2 E1ocX&kpKVy literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.gz b/apps/dashboard/build/_app/immutable/chunks/DE4u6cUg.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..af926f8bfc63acc790b5ce0e66f63a577be4187b GIT binary patch literal 988 zcmV<210(z&iwFP!000026NObxZ{s!)z4uqhIv5=6Kuxa}6eFL&9)cD~fudL}j4?He z8B3%>QcfIO|Gl7WNp^y4Pt-gO=i|L0xgi@}XMZlAS^6aBLTUcXnwqWOrW>-+Q>L=Z zonKk=8vVVk`OaEng@U&Gdz%S`j1IC(j+Bnn{JH~ntec80ElZwFE>Id>sHbMIU#;@} z_lC-bXRd{r`oTXl*TsDuWy+(%nkuTT+K}g{P+aCQpqslyQdtTGGftk^3k87X=T!4C z6Xkj2R~$L2cnDZ=wPYJr#&YCWq$8sx$1n?YIZs-K#{OYiKeC^5LV12j=|alT-or5` z(n;ZgK#simR5#7(SU0+}Fb+~x)yDeWJ<>}=E_y+F4eJ`ohV=&5VR=JRVZFjCERWbZ zJtJ+y`i|6j-L-+XIQji%^Za=AuYFIRUEI;ULX8DBSmOdWsVvF4==)9@?YwQIH&!sZ zY;pm+SK(L6VN6=CjEx~J55NjFzeW#K4~YJR6rYf$Lmt@=NR5+=!C0Vx>~a?>QEDyl+USxeg_4B<)P-Cg1YK%%rPo1D8CofOL~H?rwil$Oc!?a{nH zawQ;r7Y3Jr%Y^EhbuQinoOTn$vba06IWyR^JX^NV2F;^&pySg-*dd5M!P?%jhW&m* zb207V>r^}vR~7aj%pCf6Ez9|H*!a?-;1^Q z#ds1x3+c%WW{eO0>2uJsc8%q5;twiNc8@Z<6Ws}N)9GX+=5Po{s2I+rDug_2xBo99 zn(R$LYI_aMM+JFM@JfVXa$!72Ep4ym`5|TOy-%72fb)wacoH(8gxyGSj@9|V=iyY% zDQUD@t9o%LM^rGQ;P99|P>uS`D$cCt%&O0<#hJA^wNifTp0MxX3A%36-~Izz K+d6E%2mk{var f,s;return S(()=>{f=s,s=[],h(()=>{r!==a(...s)&&(i(r,...s),f&&k(a(...f),r)&&i(null,...f))})}),()=>{q(()=>{s&&k(a(...s),r)&&i(null,...s)})}}),r}export{A as b}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.br b/apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.br deleted file mode 100644 index bfd492a439f0d947d0b617193bb4dd0f3d041659..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmV;%06G5~Hvu5TujKqbO$F`Eybv3y1#ugF+~hUgjYmVAT2bT!6-Cpx%X`BA&O}Vd zvA*7+CDFs>-^scV>l5d|EnLby9%!A|HppAM&)=;inl~K``;KBygWD5n9G34)GxOp9 zpPY@7%q{M5Af-p`iBg>@1%)&J862>{iZFf>DbD`=L9vCT1!QeqY*`>YnqZ&$p>50y z^7(wC+-^FM#&d$L+kGM}-74rv4m7Pi7nHda5c)xKQb80cPA%7F^KBI@WJ{B_020?> AOaK4? diff --git a/apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.gz b/apps/dashboard/build/_app/immutable/chunks/DHakDdar.js.gz deleted file mode 100644 index d26ca8c41182c76128a202141b77a9b6c33cb816..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmVI^o?itktE?&Iz0-OIzHIfYea z$6+6xA5;rM4ktOpQ3fTi$`_n;m8;Ex9!aPl+5gv|r*80QqIQ zG@>kp>W{5w)^ec0+Z`R}U2d5hFvbMb8XO1}Ojhd_ieQlhwRVtyp+aE7gjDk9`Ak^s e;lDj(cS4eM_$fWDb0MFpy7>h!lX8DJ0RRA5!E12< diff --git a/apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js b/apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js deleted file mode 100644 index e551895..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js +++ /dev/null @@ -1,2 +0,0 @@ -var Ye=Object.defineProperty;var ce=t=>{throw TypeError(t)};var Ie=(t,e,r)=>e in t?Ye(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var j=(t,e,r)=>Ie(t,typeof e!="symbol"?e+"":e,r),re=(t,e,r)=>e.has(t)||ce("Cannot "+r);var s=(t,e,r)=>(re(t,e,"read from private field"),r?r.call(t):e.get(t)),l=(t,e,r)=>e.has(t)?ce("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),a=(t,e,r,n)=>(re(t,e,"write to private field"),n?n.call(t,r):e.set(t,r),r),p=(t,e,r)=>(re(t,e,"access private method"),r);import{aL as Me,g as Te,l as Ce,m as Pe,aM as ue,q as G,ax as Ee,aj as Y,T as I,w as q,aN as _e,b as Ve,a7 as qe,aa as xe,aO as pe,ai as F,ah as we,aP as se,ag as ie,ak as Be,aQ as ge,aR as He,aS as ve,aT as Le,aU as We,aV as X,aW as Z,aX as ye,aY as je,aZ as Re,G as Se,ar as $e,af as ae,ac as K,O as ze,ab as Ue,a_ as $,E as Ge,a$ as Je,b0 as Qe,b1 as Xe,a3 as Ze,b2 as ne,ao as Ke,ap as De,a9 as et,aD as tt,b3 as fe,ad as z,b4 as rt,aC as st,b5 as it,au as at,p as nt,aq as ft,b6 as ht,a as ot}from"./VE8Jor13.js";import{b as lt}from"./7UNxJI5L.js";function dt(t){let e=0,r=Ee(0),n;return()=>{Me()&&(Te(r),Ce(()=>(e===0&&(n=Pe(()=>t(()=>ue(r)))),e+=1,()=>{G(()=>{e-=1,e===0&&(n==null||n(),n=void 0,ue(r))})})))}}var ct=Ge|Je;function ut(t,e,r,n){new _t(t,e,r,n)}var m,W,w,C,g,R,T,E,S,P,A,x,B,H,D,ee,h,Ne,Ae,Oe,he,J,Q,oe;class _t{constructor(e,r,n,c){l(this,h);j(this,"parent");j(this,"is_pending",!1);j(this,"transform_error");l(this,m);l(this,W,I?Y:null);l(this,w);l(this,C);l(this,g);l(this,R,null);l(this,T,null);l(this,E,null);l(this,S,null);l(this,P,0);l(this,A,0);l(this,x,!1);l(this,B,new Set);l(this,H,new Set);l(this,D,null);l(this,ee,dt(()=>(a(this,D,Ee(s(this,P))),()=>{a(this,D,null)})));var i;a(this,m,e),a(this,w,r),a(this,C,f=>{var u=q;u.b=this,u.f|=_e,n(f)}),this.parent=q.b,this.transform_error=c??((i=this.parent)==null?void 0:i.transform_error)??(f=>f),a(this,g,Ve(()=>{if(I){const f=s(this,W);qe();const u=f.data===xe;if(f.data.startsWith(pe)){const d=JSON.parse(f.data.slice(pe.length));p(this,h,Ae).call(this,d)}else u?p(this,h,Oe).call(this):p(this,h,Ne).call(this)}else p(this,h,he).call(this)},ct)),I&&a(this,m,Y)}defer_effect(e){We(e,s(this,B),s(this,H))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!s(this,w).pending}update_pending_count(e){p(this,h,oe).call(this,e),a(this,P,s(this,P)+e),!(!s(this,D)||s(this,x))&&(a(this,x,!0),G(()=>{a(this,x,!1),s(this,D)&&$e(s(this,D),s(this,P))}))}get_effect_pending(){return s(this,ee).call(this),Te(s(this,D))}error(e){var r=s(this,w).onerror;let n=s(this,w).failed;if(!r&&!n)throw e;s(this,R)&&(ae(s(this,R)),a(this,R,null)),s(this,T)&&(ae(s(this,T)),a(this,T,null)),s(this,E)&&(ae(s(this,E)),a(this,E,null)),I&&(K(s(this,W)),ze(),K(Ue()));var c=!1,i=!1;const f=()=>{if(c){Xe();return}c=!0,i&&Qe(),s(this,E)!==null&&ie(s(this,E),()=>{a(this,E,null)}),p(this,h,Q).call(this,()=>{se.ensure(),p(this,h,he).call(this)})},u=o=>{try{i=!0,r==null||r(o,f),i=!1}catch(d){$(d,s(this,g)&&s(this,g).parent)}n&&a(this,E,p(this,h,Q).call(this,()=>{se.ensure();try{return F(()=>{var d=q;d.b=this,d.f|=_e,n(s(this,m),()=>o,()=>f)})}catch(d){return $(d,s(this,g).parent),null}}))};G(()=>{var o;try{o=this.transform_error(e)}catch(d){$(d,s(this,g)&&s(this,g).parent);return}o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(u,d=>$(d,s(this,g)&&s(this,g).parent)):u(o)})}}m=new WeakMap,W=new WeakMap,w=new WeakMap,C=new WeakMap,g=new WeakMap,R=new WeakMap,T=new WeakMap,E=new WeakMap,S=new WeakMap,P=new WeakMap,A=new WeakMap,x=new WeakMap,B=new WeakMap,H=new WeakMap,D=new WeakMap,ee=new WeakMap,h=new WeakSet,Ne=function(){try{a(this,R,F(()=>s(this,C).call(this,s(this,m))))}catch(e){this.error(e)}},Ae=function(e){const r=s(this,w).failed;r&&a(this,E,F(()=>{r(s(this,m),()=>e,()=>()=>{})}))},Oe=function(){const e=s(this,w).pending;e&&(this.is_pending=!0,a(this,T,F(()=>e(s(this,m)))),G(()=>{var r=a(this,S,document.createDocumentFragment()),n=we();r.append(n),a(this,R,p(this,h,Q).call(this,()=>(se.ensure(),F(()=>s(this,C).call(this,n))))),s(this,A)===0&&(s(this,m).before(r),a(this,S,null),ie(s(this,T),()=>{a(this,T,null)}),p(this,h,J).call(this))}))},he=function(){try{if(this.is_pending=this.has_pending_snippet(),a(this,A,0),a(this,P,0),a(this,R,F(()=>{s(this,C).call(this,s(this,m))})),s(this,A)>0){var e=a(this,S,document.createDocumentFragment());Be(s(this,R),e);const r=s(this,w).pending;a(this,T,F(()=>r(s(this,m))))}else p(this,h,J).call(this)}catch(r){this.error(r)}},J=function(){this.is_pending=!1;for(const e of s(this,B))ge(e,He),ve(e);for(const e of s(this,H))ge(e,Le),ve(e);s(this,B).clear(),s(this,H).clear()},Q=function(e){var r=q,n=Re,c=Se;X(s(this,g)),Z(s(this,g)),ye(s(this,g).ctx);try{return e()}catch(i){return je(i),null}finally{X(r),Z(n),ye(c)}},oe=function(e){var r;if(!this.has_pending_snippet()){this.parent&&p(r=this.parent,h,oe).call(r,e);return}a(this,A,s(this,A)+e),s(this,A)===0&&(p(this,h,J).call(this),s(this,T)&&ie(s(this,T),()=>{a(this,T,null)}),s(this,S)&&(s(this,m).before(s(this,S)),a(this,S,null)))};const pt=["touchstart","touchmove"];function gt(t){return pt.includes(t)}const M=Symbol("events"),ke=new Set,le=new Set;function Tt(t,e,r){(e[M]??(e[M]={}))[t]=r}function Et(t){for(var e=0;e{throw k});throw N}}finally{t[M]=e,delete t.currentTarget,Z(V),X(L)}}}function wt(t,e){var r=e==null?"":typeof e=="object"?e+"":e;r!==(t.__t??(t.__t=t.nodeValue))&&(t.__t=r,t.nodeValue=r+"")}function vt(t,e){return Fe(t,e)}function Rt(t,e){ne(),e.intro=e.intro??!1;const r=e.target,n=I,c=Y;try{for(var i=Ke(r);i&&(i.nodeType!==De||i.data!==et);)i=tt(i);if(!i)throw fe;z(!0),K(i);const f=Fe(t,{...e,anchor:i});return z(!1),f}catch(f){if(f instanceof Error&&f.message.split(` -`).some(u=>u.startsWith("https://svelte.dev/e/")))throw f;return f!==fe&&console.warn("Failed to hydrate: ",f),e.recover===!1&&rt(),ne(),st(r),z(!1),vt(t,e)}finally{z(n),K(c)}}const U=new Map;function Fe(t,{target:e,anchor:r,props:n={},events:c,context:i,intro:f=!0,transformError:u}){ne();var o=void 0,d=it(()=>{var V=r??e.appendChild(we());ut(V,{pending:()=>{}},v=>{nt({});var _=Se;if(i&&(_.c=i),c&&(n.$$events=c),I&<(v,null),o=t(v,n)||{},I&&(q.nodes.end=Y,Y===null||Y.nodeType!==De||Y.data!==ft))throw ht(),fe;ot()},u);var L=new Set,N=v=>{for(var _=0;_{var O;for(var v of L)for(const b of[e,document]){var _=U.get(b),y=_.get(v);--y==0?(b.removeEventListener(v,me),_.delete(v),_.size===0&&U.delete(b)):_.set(v,y)}le.delete(N),V!==r&&((O=V.parentNode)==null||O.removeChild(V))}});return de.set(o,d),o}let de=new WeakMap;function St(t,e){const r=de.get(t);return r?(de.delete(t),r(e)):Promise.resolve()}export{Tt as a,Et as d,Rt as h,vt as m,wt as s,St as u}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js.br b/apps/dashboard/build/_app/immutable/chunks/DHnEMX8z.js.br deleted file mode 100644 index b74870682e993235053122ae8d981de446d65822..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2999 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 YIXs#+hYQmdrT>@z1O3=F%Ss*q08XiwPXGV_ diff --git a/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js b/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js new file mode 100644 index 0000000..76a05b0 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js @@ -0,0 +1 @@ +var x=t=>{throw TypeError(t)};var B=(t,e,n)=>e.has(t)||x("Cannot "+n);var a=(t,e,n)=>(B(t,e,"read from private field"),n?n.call(t):e.get(t)),c=(t,e,n)=>e.has(t)?x("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{o as I}from"./CNjeV5xa.js";import{s as u,g as f,h as d}from"./CvjSAYrz.js";import{w as G}from"./DfQhL-hC.js";new URL("sveltekit-internal://");function ae(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function oe(t){return t.split("%25").map(decodeURI).join("%25")}function ie(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function le({href:t}){return t.split("#")[0]}function W(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let s=r.length;for(;s;)e=e*33^r[--s]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;new TextDecoder;function X(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&b.delete(U(t)),z(t,e));const b=new Map;function ce(t,e){const n=U(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:s,...l}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&b.set(n,{body:s,init:l,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(s=X(s)),Promise.resolve(new Response(s,l))}return window.fetch(t,e)}function ue(t,e,n){if(b.size>0){const r=U(t,n),s=b.get(r);if(s){if(performance.now()o)}function s(o){n=!1,e.set(o)}function l(o){let i;return e.subscribe(h=>{(i===void 0||n&&h!==i)&&o(i=h)})}return{notify:r,set:s,subscribe:l}}const D={v:()=>{}};function Ae(){const{set:t,subscribe:e}=G(!1);let n;async function r(){clearTimeout(n);try{const s=await fetch(`${M}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!s.ok)return!1;const o=(await s.json()).version!==F;return o&&(t(!0),D.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:r}}function Q(t,e,n){return t.origin!==Y||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Re(t){}const H=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...H];const Z=new Set([...H]);[...Z];let E,O,T;const ee=I.toString().includes("$$")||/function \w+\(\) \{\}/.test(I.toString());var _,w,m,p,v,y,k,A,P,R,V,S,j;ee?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},O={current:null},T={current:!1}):(E=new(P=class{constructor(){c(this,_,u({}));c(this,w,u(null));c(this,m,u(null));c(this,p,u({}));c(this,v,u({id:null}));c(this,y,u({}));c(this,k,u(-1));c(this,A,u(new URL("https://example.com")))}get data(){return f(a(this,_))}set data(e){d(a(this,_),e)}get form(){return f(a(this,w))}set form(e){d(a(this,w),e)}get error(){return f(a(this,m))}set error(e){d(a(this,m),e)}get params(){return f(a(this,p))}set params(e){d(a(this,p),e)}get route(){return f(a(this,v))}set route(e){d(a(this,v),e)}get state(){return f(a(this,y))}set state(e){d(a(this,y),e)}get status(){return f(a(this,k))}set status(e){d(a(this,k),e)}get url(){return f(a(this,A))}set url(e){d(a(this,A),e)}},_=new WeakMap,w=new WeakMap,m=new WeakMap,p=new WeakMap,v=new WeakMap,y=new WeakMap,k=new WeakMap,A=new WeakMap,P),O=new(V=class{constructor(){c(this,R,u(null))}get current(){return f(a(this,R))}set current(e){d(a(this,R),e)}},R=new WeakMap,V),T=new(j=class{constructor(){c(this,S,u(!1))}get current(){return f(a(this,S))}set current(e){d(a(this,S),e)}},S=new WeakMap,j),D.v=()=>T.current=!0);function Ue(t){Object.assign(E,t)}export{be as H,_e as N,ge as P,he as S,ye as a,J as b,Ae as c,le as d,ie as e,pe as f,ve as g,ae as h,Q as i,N as j,oe as k,fe as l,ue as m,O as n,Y as o,E as p,ce as q,we as r,me as s,de as t,ke as u,Ue as v,Re as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.br b/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.br new file mode 100644 index 0000000000000000000000000000000000000000..441f2384144f6f10f8fa0db06cbfd04af84ced28 GIT binary patch literal 2609 zcmV-13eNQ#jTs<}!nWD-F&=K~7Q>JvF+!4A|KFcxU%#O7>b$$YmQB*7ykSe}4jGfR z9D57Q0a7JhHnsnKe&`z9j7e?h(t5xwRY+vD2A9cSbG?-Z`Tq(WRpII@%%v>Js0w#^ z@9k!8_h1^jPT)iCV;QprB-J_sg&@nSN_A=(`gy;sH1Q?pJ(gP6`lX5kL_oWucYy6< z4@&x;=sb;Cm2aFlxP(vw!1pMq5P<@E9i87RA>{l<*vGvXMyl9)0O(Ye3L5Ii_9k`TaMYCE-ucI$Y2<&4KkMP}KFK+_%u53dv1(*0fN^?wFx zqqC03RCCH4mB2)6C0SW>RWJE{pK%u-e;2~!?u})JvjNJfU{7ypv`fG41ew*V@aO!W zc*TaA*PJO?XJAWLAm`x$;^Vs|<@+C$W+KeP;(Z$vvl$vctqHxvLNBX9wf}GbH{@^9H%nhR22E3#~o3=1YcBzvq?o*_Rwi?YZmUn%c@uDoMgB-OOZ2p zDjAYjB02^CKc-@uCL!@i73kgFM@`7X7*WX+(+%dcOX!uSmAH+Nndy~cK`l4!bDO!#0oC3^M6AJ*X?r%hvidIP(B8yp`U<7@wS-|vOg2lT1Hz46lhlg8Hpp2y5}i{2#wVj>VKbCE_CFM%s9u)b0~{RCl$O@tdP#mv*A69#l-EwVES} zP{M(NwO1z({9C6x62$ z3gR0kkE)+P9wqk#PiYMd8bzn`!jEV=zY1%z*oZ)|S}`T#d^x*I+DMj^lH zm$Q2njkY!0W3SHNp^64iwHR%-J^6}m(OIfymcLpLH>{{>9zJ~V_|C(}*QSr}-7|FK z8;fYJS3{o|q@^#TLxx;w8hx@c2N*rD250Y4Z?u`2SPJ7-`AF&$*wI9N;;%SbF8`Wi z0ekZeq4y&CTgubP=Ng*8X5U*l*R~Cr#VHAy&9IKD?1`V2=6W4$b*8T6(LtN(4*|(tK zpiKv=|FMRuHjT9c3M(OV5(xQslXygPV|}uAsa0brF^mPs8=5qJr~&325u%)9J~SZ~ zn?0=^fYt{Yl&ejOMVeOiRJx;}O9D-Alk!muL*$;Gp){bt*3Ewg&SsR*eUlLE?3%yih-{*V-pi~_T zzlwDb9((w+pm_VyvI#^|4?Z&5$a7}6%`1W*>}5e_kBm1lX_sP2LrrO1lTn~#&|V|3 z_EKwQ=F5zHy}_8&vRDt*lYs2DDK9o(V0{rl1vDN7wGFmKpaC?`v8fD~BB2R)7=5j(j(nsgUg zo3l}>4G>j@+AkLg)pqzNC`NL03IBp97fXE~#cilW0%aOBN)_)MhiGeo?OKPa%vs;p z_oN5Cy72=ljNzYo7lpHW8D_dF9F3Suf$&%G$lo!;a29y-@LVm`M-!(4c#n0SQXGALp z8*~Wvu2<{mSYJenJ`5tW0A^TFW|t$_iy*$$+t-Q!w^u6(U*Bf>>8sc4r?Nt|N~^N% zj8y_tciY!*nK5RV#xb)kkhnAPKx)rd23C?f7Kqmfe=_T1+77y%1AjZ|SZj3`V^d5@e7q?X{FZ z)LS8)xmtSdNLzJlJRa$#Iu;^?QSOE4O#A7-i4v$T1P7^z985)N& zR4PI>t@n!yd9rFddr6L^H@)=18a?YsnS>JGbg|oZJcc!H7xfN3y+>ak@)%fb973CU zmvBeE(;WsnFwtG6x<@PU+1~~MJNq!C^avxmd!2J1#O&@y3(iMNmcxWQ|L}|1PDjSN TqN5Wdeb4d8lmj-vs-T1)^Zf9} literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.gz b/apps/dashboard/build/_app/immutable/chunks/DJWRm1Ki.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..8b01e8fb1e11b76a5618fab4518b23806ffb8b6c GIT binary patch literal 2956 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 CgRxlv literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js b/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js similarity index 76% rename from apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js rename to apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js index 7830d83..8908737 100644 --- a/apps/dashboard/build/_app/immutable/chunks/B5Pq2mnD.js +++ b/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js @@ -1 +1 @@ -import{Q as s,k as o,a0 as c,a4 as b,a5 as m,a6 as h,U as v,V as y}from"./VE8Jor13.js";function _(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function q(e){var r=new MutationObserver(()=>{_(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function k(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var d=e.querySelector(l)??e.querySelector("option:not([disabled])");n=d&&i(d)}f(n),v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=y??v;if(a.has(l))return}if(_(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),q(e)}function i(e){return"__value"in e?e.__value:e.value}export{k as b}; +import{D as s,F as v,y as o,a3 as c,a7 as b,a8 as m,a9 as h,I as y}from"./CvjSAYrz.js";function _(e,r,f=!1){if(e.multiple){if(r==null)return;if(!b(r))return m();for(var a of e.options)a.selected=r.includes(i(a));return}for(a of e.options){var t=i(a);if(h(t,r)){a.selected=!0;return}}(!f||r!==void 0)&&(e.selectedIndex=-1)}function q(e){var r=new MutationObserver(()=>{_(e,e.__value)});r.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),c(()=>{r.disconnect()})}function p(e,r,f=r){var a=new WeakSet,t=!0;s(e,"change",u=>{var l=u?"[selected]":":checked",n;if(e.multiple)n=[].map.call(e.querySelectorAll(l),i);else{var d=e.querySelector(l)??e.querySelector("option:not([disabled])");n=d&&i(d)}f(n),v!==null&&a.add(v)}),o(()=>{var u=r();if(e===document.activeElement){var l=y??v;if(a.has(l))return}if(_(e,u,t),t&&u===void 0){var n=e.querySelector(":checked");n!==null&&(u=i(n),f(u))}e.__value=u,t=!1}),q(e)}function i(e){return"__value"in e?e.__value:e.value}export{p as b}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.br b/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.br new file mode 100644 index 0000000000000000000000000000000000000000..1248e871f7690375b89966249d75bb39c5375f2f GIT binary patch literal 518 zcmV+h0{Q(L<^y14Rn@=GW$O?~fMv(Fz|L{yYPaH%Ek|Bi)!)x;^LIbQrLA)r8H7KxW2iKY#r5fUxkiV<&x~dYNk6nfj&Bg89GZ3 z>1heCg1DE8cW%0I@9Mo;^SD+<=<{F5siH#SJ=}~6$k|zRx)On#5Bmri6tzB7So+Zn z(0F9lMr9G@Y*-#G+a8zd?`bqfVDXgor0xYY6{lJS za@t@?e%@<5iFc`P`>86oF%WN7bugz)@~Osk>wX8MR8FtrY*Ygf09VsDkBD0-i>y3t zcDt81)HtA9Lrw}Q9Yw926V6Sgy-=S=?^`7*`Kr4E(91td&iv4fF5#GyvJphhmrFIY24&JACfZY8pr IXKp%}Eq6QiXaE2J literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.gz b/apps/dashboard/build/_app/immutable/chunks/DMu1Byux.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d1faf346fe47485f437ffe5de8598baa39e9ae7b GIT binary patch literal 584 zcmV-O0=NAiiwFP!000026J=9PZxb;Pz4I$Jdsxj##9u znf#P-!!9%IhQ@bo$=`kMZ?4XN`M>-oly#Gwil%eLH4yWx5wla=n+Axt$wsraG=^RX zm#jrkF?m;;24-vUc!-M@ux>gJz4V1Fx~3rBZFAayk_WP+B5C2dampr50SrjQdQuNr z`AW6VnWD(FTxY~)#y7UlA3`c*kE=W0XhmUPKR<6b!H#B#-3x#db)3&igd`Q6nh?fkj5 zV38TD$p#v8Yw?N$78i@xcjaW_+;tI_+61|_q*qvC?S!r>0~&`09I}2kZB<^MKx#I>B;&5CGk+Kn|1G2nQ&(@i|U{eR>fm#|@(Bi0^6CZJ) W`|(?E$B#SIZyo``+@I{{0{{RswHn+2 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js b/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js similarity index 91% rename from apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js rename to apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js index 4d7acdb..8ce57c7 100644 --- a/apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js +++ b/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js @@ -1 +1 @@ -const r="/api";async function t(e,o){const i=await fetch(`${r}${e}`,{headers:{"Content-Type":"application/json"},...o});if(!i.ok)throw new Error(`API ${i.status}: ${i.statusText}`);return i.json()}const n={memories:{list:e=>{const o=e?"?"+new URLSearchParams(e).toString():"";return t(`/memories${o}`)},get:e=>t(`/memories/${e}`),delete:e=>t(`/memories/${e}`,{method:"DELETE"}),promote:e=>t(`/memories/${e}/promote`,{method:"POST"}),demote:e=>t(`/memories/${e}/demote`,{method:"POST"}),suppress:(e,o)=>t(`/memories/${e}/suppress`,{method:"POST",body:o?JSON.stringify({reason:o}):void 0}),unsuppress:e=>t(`/memories/${e}/unsuppress`,{method:"POST"})},search:(e,o=20)=>t(`/search?q=${encodeURIComponent(e)}&limit=${o}`),stats:()=>t("/stats"),health:()=>t("/health"),timeline:(e=7,o=200)=>t(`/timeline?days=${e}&limit=${o}`),graph:e=>{const o=e?"?"+new URLSearchParams(Object.entries(e).filter(([,i])=>i!==void 0).map(([i,s])=>[i,String(s)])).toString():"";return t(`/graph${o}`)},dream:()=>t("/dream",{method:"POST"}),explore:(e,o="associations",i,s=10)=>t("/explore",{method:"POST",body:JSON.stringify({from_id:e,action:o,to_id:i,limit:s})}),predict:()=>t("/predict",{method:"POST"}),importance:e=>t("/importance",{method:"POST",body:JSON.stringify({content:e})}),consolidate:()=>t("/consolidate",{method:"POST"}),retentionDistribution:()=>t("/retention-distribution"),intentions:(e="active")=>t(`/intentions?status=${e}`)};export{n as a}; +const r="/api";async function t(e,o){const i=await fetch(`${r}${e}`,{headers:{"Content-Type":"application/json"},...o});if(!i.ok)throw new Error(`API ${i.status}: ${i.statusText}`);return i.json()}const n={memories:{list:e=>{const o=e?"?"+new URLSearchParams(e).toString():"";return t(`/memories${o}`)},get:e=>t(`/memories/${e}`),delete:e=>t(`/memories/${e}`,{method:"DELETE"}),promote:e=>t(`/memories/${e}/promote`,{method:"POST"}),demote:e=>t(`/memories/${e}/demote`,{method:"POST"}),suppress:(e,o)=>t(`/memories/${e}/suppress`,{method:"POST",body:o?JSON.stringify({reason:o}):void 0}),unsuppress:e=>t(`/memories/${e}/unsuppress`,{method:"POST"})},search:(e,o=20)=>t(`/search?q=${encodeURIComponent(e)}&limit=${o}`),stats:()=>t("/stats"),health:()=>t("/health"),timeline:(e=7,o=200)=>t(`/timeline?days=${e}&limit=${o}`),graph:e=>{const o=e?"?"+new URLSearchParams(Object.entries(e).filter(([,i])=>i!==void 0).map(([i,s])=>[i,String(s)])).toString():"";return t(`/graph${o}`)},dream:()=>t("/dream",{method:"POST"}),explore:(e,o="associations",i,s=10)=>t("/explore",{method:"POST",body:JSON.stringify({from_id:e,action:o,to_id:i,limit:s})}),predict:()=>t("/predict",{method:"POST"}),importance:e=>t("/importance",{method:"POST",body:JSON.stringify({content:e})}),consolidate:()=>t("/consolidate",{method:"POST"}),retentionDistribution:()=>t("/retention-distribution"),intentions:(e="active")=>t(`/intentions?status=${e}`),deepReference:(e,o=20)=>t("/deep_reference",{method:"POST",body:JSON.stringify({query:e,depth:o})})};export{n as a}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.br b/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.br new file mode 100644 index 0000000000000000000000000000000000000000..03be48c45ef38d4861693d3ee2debe6887114397 GIT binary patch literal 580 zcmV-K0=xYi0tNt##5jiXo3g}i)24ft>7$Z$Rf&{SVAzTi`me7vD%b(`DPfYBhSs@K z7FxgaLxT`u_oVNey z$1&V=2B0>WTpp8Mvf1KcM~`DLNf|y{RA*e$Ex{_?_@}dI4_>9iu>3ENYXbSF$~hHh ze@7A-Ac*8V#1o+}c1!k%PTwlI3oV}{gdIsi2B5H0$viv5-$*y$NNV1nNj< zhXWhk9n$EoV_1AL=V@PdM%D8!k>Yqc_j<`m%qVZeO(^Q0=dx2rTBNZ0N3nyZ zPc-dLDvfsmId>)qcW)x=e)=0z^nJTjB#&hBg*FZXY;Xec1Crfv6uH7HG5};9ISwi} zA+tThNzx*haTzB7 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.gz b/apps/dashboard/build/_app/immutable/chunks/DNjM5a-l.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..0d33cd930d741d95437c669168bab1920835d8a4 GIT binary patch literal 694 zcmV;n0!jTJiwFP!000026OB|+PunmMe&4SMRyEn0N!eZ|xeC<;JTRewXn8`2n&e83 zC3dh~po;w8Cp$^0piDg8eg5vgJAZbrm34{9$XGT=Cep4|o-9`?cc@k3C~(c%JRZVK zK1+1T5?o%=#i%uY)Pi5|wgg##v7#kMS~*Z|f4**j2qK%N!d!-0;|Hr1@jOja?b!sE zbPrSgm$}mD=S0DCa$<}&bn)xrG#Ry+S|{Dgda)JE;l=p{n;38_qY_L*P0DAUo`}>kOu3O1_0YSC?lqkR~rLq>;6yz*47Y&Y-%dOb{}ZcXTlx3XWRs z7tHf}h*h_taa;o91ytZ*H_F=@T&W8|j!(``<|o86-WXl$4+!HP+#+6_&*p(vz{ji( z+d;CcrZHfxi1)dRI-Gb*=6AYS3qAckJO7i~xFlSzX=^}Qt%UYWJZUVF1JC$MZTjq# z_lm!l=(&w|5*21Y4tkMYa{8E!T2Q$z;Og@9NY{;4pd1C}zgAeI%ewpF!6sJFNG9VL z5ynf9l`A*tE+mXQtf4{$f-1ti_eeu>6OQY*sECg^FKMm#~7;Kt>Rn*cZ2R1 zTQFf9RS$$WmyxiJCm_AOUcqViv1OY-1e!}&f`Ksc_ER9^fZdt_{M_)5D==#Tynx1) c;jwz=C-4$B*s4U@MEc2>e=+%c_yYz20NvAA2LJ#7 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js b/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js new file mode 100644 index 0000000..5667ae5 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js @@ -0,0 +1 @@ +import{k as y,b as o,H as u,l as _,m as t,C as g,o as l,q as i,v as d,w as m,x as p}from"./CvjSAYrz.js";function C(n,r){let s=null,E=t;var a;if(t){s=m;for(var e=p(document.head);e!==null&&(e.nodeType!==g||e.data!==n);)e=l(e);if(e===null)i(!1);else{var f=l(e);e.remove(),d(f)}}t||(a=document.head.appendChild(y()));try{o(()=>r(a),u|_)}finally{E&&(i(!0),d(s))}}export{C as h}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.br b/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.br new file mode 100644 index 0000000000000000000000000000000000000000..11ad62dad0bad34a0b7f04567ff07c04bda5cab8 GIT binary patch literal 264 zcmV+j0r&nJb^%}4C^w=@(k_Qx&6#itU9)lCw>+39=YKZF6>T7R5Xt+9FG^9fG-4%sakD zBE6}k5QB)48x9E}8J<-0ry-*C>AydAQu0>!v3I3nNvD|KVx%00kjr^t3FU{6kS{Ir zY$$Ok4iRxEd`MwoGE+t3#i3BQTVO?~0@?)C8An#el7tQk`49q2J@BDqj~*;^io=43 z+REp)JH8-)0i{3KI8Eg^f_3OSGJEI%5vk0(ApyX{F$W8!YBX@#&eiacz=MSbe<%>A OiCfO`Hvg}GdYS>#7JE?u literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.gz b/apps/dashboard/build/_app/immutable/chunks/DObx9JW_.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..4f3738c7cc741a455e47b79d45c17abf274ebd6a GIT binary patch literal 277 zcmV+w0qXuAiwFP!000026IIYXYr`-Q2H?HF!pUInK&b63R0t-}yk3ByJ1b4!Q?Sk1c?&ZjqRMGrA^_@_1O~;p9%g_60qHr=&l)XY5KSJ`Sz?Kz@Wye&3jIm+schyT+BV z-JMYQvzhw0Tx{9(_d8Lvf>lLXEv6x0vmoih}R?rH&~QcNS}tCtm< z+>Ke$5+De833ViV#rW)M09R{^+y5rtaZILChWZkwXIl_)Aw&GNLrUdnG2zSzA`7si j8bFglDy5(;3#Gq!#h~B?>@0*9+DNs5mW+GdTjzU-I`^V?}zOt_eeT-FuSE8GU@J&1o$JOGE zJ}-pJ{XSvn*-4<N< znq(t*C?#WN8@o?Dk#@oYUHD8j-IurL-J?^Sm}2S=YDr7mP`#(6-(R fqgpwVO__Q|qy4z7dz#jbV{`Wf2m7Q^kO2Sy=0Jhz literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js b/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js new file mode 100644 index 0000000..2ddb1e4 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js @@ -0,0 +1 @@ +import{k as z,b as fe,aa as re,m as R,v as q,x as ie,ab as le,g as Z,ac as ue,ad as se,ae as $,q as L,w as O,C as oe,af as ve,ag as y,F as te,ah as T,ai as V,aj as de,ak as ce,V as pe,a7 as _e,al as U,am as he,an as ge,a5 as Ee,ao as j,ap as me,aq as ne,ar as ae,as as B,B as Te,at as Ce,au as we,av as Ae,aw as Ie,o as Ne}from"./CvjSAYrz.js";function Re(e,i){return i}function Se(e,i,l){for(var t=[],g=i.length,s,u=i.length,c=0;c{if(s){if(s.pending.delete(E),s.done.add(E),s.pending.size===0){var o=e.outrogroups;Y(U(s.done)),o.delete(s),o.size===0&&(e.outrogroups=null)}}else u-=1},!1)}if(u===0){var f=t.length===0&&l!==null;if(f){var v=l,n=v.parentNode;Ae(n),n.append(v),e.items.clear()}Y(i,!f)}else s={pending:new Set(i),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(s)}function Y(e,i=!0){for(var l=0;l{var a=l();return _e(a)?a:a==null?[]:U(a)}),o,d=!0;function w(){r.fallback=n,xe(r,o,u,i,t),n!==null&&(o.length===0?(n.f&T)===0?ne(n):(n.f^=T,M(n,null,u)):ae(n,()=>{n=null}))}var N=fe(()=>{o=Z(E);var a=o.length;let S=!1;if(R){var x=ue(u)===se;x!==(a===0)&&(u=$(),q(u),L(!1),S=!0)}for(var _=new Set,A=te,b=ce(),p=0;ps(u)):(n=V(()=>s(ee??(ee=z()))),n.f|=T)),a>_.size&&de(),R&&a>0&&q($()),!d)if(b){for(const[D,F]of c)_.has(D)||A.skip_effect(F.e);A.oncommit(w),A.ondiscard(()=>{})}else w();S&&L(!0),Z(E)}),r={effect:N,items:c,outrogroups:null,fallback:n};d=!1,R&&(u=O)}function H(e){for(;e!==null&&(e.f&Ce)===0;)e=e.next;return e}function xe(e,i,l,t,g){var h,D,F,X,G,J,K,P,Q;var s=(t&we)!==0,u=i.length,c=e.items,f=H(e.effect.first),v,n=null,E,o=[],d=[],w,N,r,a;if(s)for(a=0;a0){var k=(t&re)!==0&&u===0?l:null;if(s){for(a=0;a{var m,W;if(E!==void 0)for(r of E)(W=(m=r.nodes)==null?void 0:m.a)==null||W.apply()})}function be(e,i,l,t,g,s,u,c){var f=(u&he)!==0?(u&ge)===0?Ee(l,!1,!1):j(l):null,v=(u&me)!==0?j(g):null;return{v:f,i:v,e:V(()=>(s(i,f??l,v??g,c),()=>{e.delete(t)}))}}function M(e,i,l){if(e.nodes)for(var t=e.nodes.start,g=e.nodes.end,s=i&&(i.f&T)===0?i.nodes.start:l;t!==null;){var u=Ne(t);if(s.before(t),t===g)return;t=u}}function C(e,i,l){i===null?e.effect.first=l:i.next=l,l===null?e.effect.last=i:l.prev=i}export{He as e,Re as i}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.br b/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.br new file mode 100644 index 0000000000000000000000000000000000000000..53ec356070318f66b034b9cfe371bf4a321a9df0 GIT binary patch literal 1803 zcmV+m2lV(GP7nZ$!g23|OKX=UB0@1jl36oj=IfgjG}_6Y3v6Z21>hXFI%ZF6TL1n0 zyb4$Kz30uC(wc(;NodwPm7-kMh?Yg7q$yIKv z4p@N`D_eQsrp8APkHrDiQO#=h>IyOtqdN>+?36eQUok3FJQ&Juyaz@gH^d&SR)%)S2%=? zraZY(l?e}2y0F=_CfcGUY|{ensrJH-ycX%o<<`-(*ZLROrLtS>#b93jVr-?v#E&n(1>(hD?n zGv?+BBOe#{FGnMI!Sis?7MtX=fzsOqQ2#I3vKyRprGgIr&uUDxK~pd}SkV9fbHrLa zsddG17ztaINKr?J`#V6JioLI$dIX?iNla4Rs?7kMRtjK4FO)2UOBJ{Ooce1*v z?AVY^$cLg;fm*uS+r2oYd>n0yB!L8F`I&SNlJAy*|K>Zk!v4n@0}2JYjowCDv&uXf zEYmsz2jtItPN)9QZEZZbZWb`!QwAQ?`$L6-aJ!r<3_d2?j|Lx&;F|7(-#1FcL$CKlT{sllVz*t-MEPnj2jq#r*Ep}#imIpcJ|CEad-ooX3QbtNU zGVG$-{&F7!{s8B=|7!=87va(Q5&g9v4r6IH@*o5ev!sJsZ`{H>;ggg zH%`PRXqFQd{vZOiz_@yXLI`x&?qdc(OQ4j-ef|Kcg1uli9oDj-x!sqSt^Z+=JwbwY zYoMJu~iC*J}$&eW*Tp(bf{oiotd_3#WBSP z*ZIkD1iZN4CYO?J+s&@hSXVfMHEz{rV4jmM-E9tho z)I-J8oytGt6`J{|&T1_5lXiZLC;WW951xdxOrNFdf%8ysiPRF6eSO++>eeiPXj(}B z?K6?$sNN5*Ch3_qIo4~5gJY!?#xn?`nnY-pneBXoA5Si4tm~qxDU}gTDcWGV5j?GS z3{dVWi~qJ(5DI@E}sc6{Ku zu9FNk^75TGmw!V(MHZ)e$o794F*Crr*BoSec?<~`&pV<_JOQ`eh#>#~ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.gz b/apps/dashboard/build/_app/immutable/chunks/DTnG8poT.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d64bcbd9005811cb0fb1fea8ababfe7d1d1e541b GIT binary patch literal 1954 zcmV;T2VM9diwFP!000026OC9~Z`(=^e&1hV9~1);Wwp-3!2(jIMw%w4=_PHG^mYud zF}5gMi7ctQ#jT_NzTk{}>t%OeOpe4E-ac|D$ICn`s`XvZl)djX6%sKSBTT`x6naIC zkgv275;GYqmoUwR{!L~kv}Q7)FeQ^=VII*}A+PCP$XhxUk};V`n1;#N1HRF@kc!DH zgt;LT3;jsuR%pm%tbsG8k3w@M^Dkj0OePWL0~u@Tg2|-9%$dxe!kjUgOqg3TxzHt( zv1X-ArVz$3$#2%4BL`?wO2@!3mSG&Rj6rQ!lxVifs9Z_s`Sj_WI;Y z@!h*E{|KTwomFv`_O2M1Vq6zo)kWHi+wGfc`-T!+M_B=lDSDM2jcKl9FX41vEvTe= zx0vZcFgugD>y_+)hNwHpi91Z#F6g2YYl{CkeJKCnfjl zC;F(R{t>ou1oci&q^r&^cSO?Hc3%)j5IK=XCzR^O%T2*)b(w`6oG_$Fsb_Mr9vUR} z;)<80H%r(QfbAEEsUM+JUg~w{rJwSB@0u%!k;IwJx}`(ghr=IzadL<@a3$`t_eGMY z`-5Hf52f_aCF7hU$LqB(Uzvwqi_X=W9_F*!vVVpTBq zwH_P;Fv7nIXQoP_Wl5Zf!I5(W%JKD7$yOy>+1EAr6j1Tg4;Ibkq3 zG`?|(7>>sN2Qb(oWfbcEU}yO~;JWZ4lO$6!yVEJH7z)a$rkEhuqpw^E7=_}Mouc3d0bSsR#5>F?(Vw&n115&OBL4It4 z{INd5^_5a@y)+B?=36d>kg+@nO(jYiwo2aGbDauj@rBMt`Izo>1s9YfEp#{(H~pD6 z=L+sHSPWs|HA;OGLKjF2FLtX~HcXW|@#?g^i}MLb5zi`Ec#P=7LQffH6b@^jS&+)-HtD*4WLFB#YLEj+Fyi%0X0+A*b;&--EjjPI1seY;ygu_&Sw81Yyas<2O zz9y8~vcxIwj_wn3=-M`F0-aj)=S06V(_-XWd6NS(3;cYv(fOLfV+8;U&;@Jc{%SV9$BvMR8G9NDXc3oHDseLixF; zODf0&_I41vjUEK%xDJfK_+G~&Gp0*DhkG&-B?rVy^q8R7maI|$&owM`VKHA~*Cv`Q z4toQC;hFBq!^3lL$)>Ce$vd14hj8{o8!ZrnpA3%SUv(3rc(;}$=?WiN|*2Qs+) z@fs|UmhKwdK9I0U!icH`nR>!MPS+EA2|)6W{tf0NVmy_|mb>NJX1zsl$~l!#RHC1#S!rmwX-N2$hE zbbU zq}VjMQ;WS*3rckt%WT5N+Fza7BR742RJCP-GEO=;d{}5Kdqb zb+C{jqO$_G8V)KwbNieXc5ml|AnBK7xc)!uaBpUm$#S`wEa9)ixpRxVzc$fbA_fN{ z|7-pfH~X7oc4%~H%O#EnD7BrW5ZfE4F-blHmPh#)cFXDQJ@JYk+H_c|br{Mb_BDMwi$ORBWib9CMWm9F<}JKfs$>lUOFKXx}# oLdj1e_8yD<#9d2q%Pae@!3+D9&va#J+y?*n4+6`xwoecM0Lfj&ivR!s literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js b/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js deleted file mode 100644 index c2d8023..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js +++ /dev/null @@ -1 +0,0 @@ -var x=t=>{throw TypeError(t)};var B=(t,e,n)=>e.has(t)||x("Cannot "+n);var a=(t,e,n)=>(B(t,e,"read from private field"),n?n.call(t):e.get(t)),c=(t,e,n)=>e.has(t)?x("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{o as I}from"./DWVWfZUn.js";import{s as u,g as f,h as d}from"./VE8Jor13.js";import{w as G}from"./CCRrbKqn.js";new URL("sveltekit-internal://");function ae(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function oe(t){return t.split("%25").map(decodeURI).join("%25")}function ie(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function le({href:t}){return t.split("#")[0]}function W(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let s=r.length;for(;s;)e=e*33^r[--s]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;new TextDecoder;function X(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&b.delete(U(t)),z(t,e));const b=new Map;function ce(t,e){const n=U(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:s,...l}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&b.set(n,{body:s,init:l,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(s=X(s)),Promise.resolve(new Response(s,l))}return window.fetch(t,e)}function ue(t,e,n){if(b.size>0){const r=U(t,n),s=b.get(r);if(s){if(performance.now()o)}function s(o){n=!1,e.set(o)}function l(o){let i;return e.subscribe(h=>{(i===void 0||n&&h!==i)&&o(i=h)})}return{notify:r,set:s,subscribe:l}}const D={v:()=>{}};function Re(){const{set:t,subscribe:e}=G(!1);let n;async function r(){clearTimeout(n);try{const s=await fetch(`${M}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!s.ok)return!1;const o=(await s.json()).version!==F;return o&&(t(!0),D.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:r}}function Q(t,e,n){return t.origin!==Y||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Se(t){}const H=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...H];const Z=new Set([...H]);[...Z];let E,O,T;const ee=I.toString().includes("$$")||/function \w+\(\) \{\}/.test(I.toString());var _,w,m,p,v,y,A,R,P,S,V,k,j;ee?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},O={current:null},T={current:!1}):(E=new(P=class{constructor(){c(this,_,u({}));c(this,w,u(null));c(this,m,u(null));c(this,p,u({}));c(this,v,u({id:null}));c(this,y,u({}));c(this,A,u(-1));c(this,R,u(new URL("https://example.com")))}get data(){return f(a(this,_))}set data(e){d(a(this,_),e)}get form(){return f(a(this,w))}set form(e){d(a(this,w),e)}get error(){return f(a(this,m))}set error(e){d(a(this,m),e)}get params(){return f(a(this,p))}set params(e){d(a(this,p),e)}get route(){return f(a(this,v))}set route(e){d(a(this,v),e)}get state(){return f(a(this,y))}set state(e){d(a(this,y),e)}get status(){return f(a(this,A))}set status(e){d(a(this,A),e)}get url(){return f(a(this,R))}set url(e){d(a(this,R),e)}},_=new WeakMap,w=new WeakMap,m=new WeakMap,p=new WeakMap,v=new WeakMap,y=new WeakMap,A=new WeakMap,R=new WeakMap,P),O=new(V=class{constructor(){c(this,S,u(null))}get current(){return f(a(this,S))}set current(e){d(a(this,S),e)}},S=new WeakMap,V),T=new(j=class{constructor(){c(this,k,u(!1))}get current(){return f(a(this,k))}set current(e){d(a(this,k),e)}},k=new WeakMap,j),D.v=()=>T.current=!0);function Ue(t){Object.assign(E,t)}export{be as H,_e as N,ge as P,he as S,ye as a,J as b,Re as c,le as d,ie as e,pe as f,ve as g,ae as h,Q as i,N as j,oe as k,fe as l,ue as m,O as n,Y as o,E as p,ce as q,we as r,me as s,de as t,Ae as u,Ue as v,Se as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.br b/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.br deleted file mode 100644 index 2c6962aa0e3ac67d9a7a7f7498642dcced9b02bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2619 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 diff --git a/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.gz b/apps/dashboard/build/_app/immutable/chunks/DUtaznkq.js.gz deleted file mode 100644 index 70132e1ff0bf19ec4fe6442fd70326c0a915a184..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2959 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 F0029B(cAz4 diff --git a/apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js b/apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js deleted file mode 100644 index 25cc4bc..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js +++ /dev/null @@ -1 +0,0 @@ -import{I as u,G as t,y as l,m as o}from"./VE8Jor13.js";function c(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function a(e){t===null&&c(),l&&t.l!==null?i(t).m.push(e):u(()=>{const n=o(e);if(typeof n=="function")return n})}function f(e){t===null&&c(),a(()=>()=>o(e))}function i(e){var n=e.l;return n.u??(n.u={a:[],b:[],m:[]})}export{f as a,a as o}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js.br b/apps/dashboard/build/_app/immutable/chunks/DWVWfZUn.js.br deleted file mode 100644 index e0cdeaad01cbdc141c9c0a966457eb92a22bd9a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 225 zcmV<703QDvb^##dQn#ID5=$y6W=|*dc9Y6i1$^+FZadgeueP9PViZNw0YB7(BviXn zKJp`JuGW^{!8F`|*F_~Q=EAb!On75Y@a^yqye%_nJ0EVsq}5?gTApA9jbyJ+0(?F> zERgcQPOsAkdKoeu9}-FdsdC!QB*rcGT0s9$Nr?f#ik*60BUC6^#=O$%Shh(zxI2F&++>DY+vY3=Sg(2vmvX zkEmCoQYvKc>)LS9__`+PAFtNNaT0QnV@@XyqRX5M^*S32iC9p`LG;dYx{QF91*NJR zx)Kp6$H2mJ*JuCt=@nV7(C)IXWG5Y2P#}GO!^yna@F26Ab+_9$U*!$mZoh~He%5_$ UnNm0Ux@iCK3t6<%J9hy90O)#q-v9sr diff --git a/apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js.br b/apps/dashboard/build/_app/immutable/chunks/DcQGRi49.js.br deleted file mode 100644 index aefb74219ba7049f39761d456e306771e86fb344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 554 zcmV+_0@eK+o&_Kr33iOj)&%>Jd!_20Ws*sIE~GVdxGY1a`nm|mqzIS(N5Vi!RT9(m z`*U^I7g~SN*C0pOeJOxC2J>Bj%606O?1{-=RC9sLW@=FLBu`YhOiGT$&TG=p=Do2l zza}Xkm3egY8ktJlCl*}5U*$Y#wipUUPhsZ{x|rBJF!-lu7ygUO$=o+pr(OJg#Wm(p zs-t2T4sHe?Mt5LxMXq((z7-EUhKs>Y%FDAwb-|_D60Fj9KkcFe*pknR^1mDiSH&NYWC^X^`g se8LSj&)cDZlm_ci*x3cxSObK0=+yzYsX`-;s9z{2UAn4SY+aL!`Zq9rkJkl5_8?w8a_BOEXXuXDTom+ z_yMN$NBE_sr^LWhGO?B{pZ~Z#O9l<5&TGGNLG1)Hc=ll~Mi%_angr9fCKsX8XR@Y( ziY$UtO^MDc$c}sMl);#d*_XD@_0{gNLdp;j-3Jw|y za}ne{#Hzc{Fb+Y;0!r|(AC*l7eo2L5r<3!^Y{G(&wWW&QAq;zPhj@80owc+A-e+~# z9+F$twFT!?+~+>(=EQ5VyrW{RX#8_}@hf$4NVr(@#)5Wa6a}Fk35(EceJ!tC2oFS1LH|7L>*Oil${U!9#$Rg(eZIf(GN#0q`Z?MJpYaf(MW8^(wU zxddJM*AiMJv<#)B;DW+>81*PP#=bS-d$vbUuZx8gr8jdC^?EiCA2d)XMVw~m14x+DwT zxS4j2a*XfPF^SS;Uyu3%{Xw?Z7q4BhuvGoVLV?ur15qSBwF#7Qe#!+Atq%p}ek-z% z_sGPmChN7yd&jfkOXg#e^6p1c5IeW)q7n=3VcUHtw?~16mX2gjv8{Tyiuc-Zx9DN9 x12ZAf^g#ROGS-gc5m;}p7jWEtY+3h*gb_Tqw`)wIU82M2(?0=KQ^B7F000O4PqF|2 diff --git a/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js b/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js new file mode 100644 index 0000000..3f77100 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js @@ -0,0 +1 @@ +import{a4 as a,A as m,aG as q,aC as A}from"./CvjSAYrz.js";function _(e,t,n){if(e==null)return t(void 0),n&&n(void 0),a;const r=m(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const f=[];function x(e,t){return{subscribe:z(e,t).subscribe}}function z(e,t=a){let n=null;const r=new Set;function i(u){if(q(e,u)&&(e=u,n)){const o=!f.length;for(const s of r)s[1](),f.push(s,e);if(o){for(let s=0;s{r.delete(s),r.size===0&&n&&(n(),n=null)}}return{set:i,update:b,subscribe:l}}function B(e,t,n){const r=!Array.isArray(e),i=r?[e]:e;if(!i.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const b=t.length<2;return x(n,(l,u)=>{let o=!1;const s=[];let d=0,p=a;const y=()=>{if(d)return;p();const c=t(r?s[0]:s,l,u);b?l(c):p=typeof c=="function"?c:a},h=i.map((c,g)=>_(c,w=>{s[g]=w,d&=~(1<{d|=1<t=n)(),t}export{B as d,C as g,_ as s,z as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.br b/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ca2c57a6daffe46bec02c0a99214866a901f57fd GIT binary patch literal 614 zcmV-s0-60AX9R$Z)L1P!yEavA&oVLje;#mw-6zRNskdiT8YNM(ax&=&OT$XXRv+GfMy00$b87PU+I9;(GeU;r*SnYl8e4BeNB6`9wV`mMo7?<80P>CfCm9GO z64Y!MZd@zow$nkM5?~e*si}sG50StA$g>g77B1XF9}u^g zx&}cC?>6xW^F(WK9HFBU&u4=~k0J2AQy5MHgWUsT#+4o*;TB*@$d_!)IvU@?tfXu_ z>qFsT{2}0GFMq(F+KGuUZ|*qU7WN~vP^p*QFZDR|;C*k6LyXJdcWNl1KfG?_>VE(P zfa>Xfny8aKVi=DA;TMAukMQEJ+QBj{-Zg4)|5Y)*1Kp#t%% zta(gpHl=!C#L8U*H7)^-HLw7x1rTnf7=L6!WY^^7Z4VV@YhEwQRLocR`}^az%1ojq zcf*xg160%^-+VzuyXti*+7I4Qt@%Gp7K;|iYkdGrgUqSV>?@{;3XxqNQwPJe)QRq4 ziM0brijAi<_IQtArwJiqflTj59N$EC2uLy6{VareNMbcTIxT%AX`!R~ZU86c7h2gM AtN;K2 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.gz b/apps/dashboard/build/_app/immutable/chunks/DfQhL-hC.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..b45b0bd5d61efff683f1018c3f69a2bc83674abe GIT binary patch literal 653 zcmV;80&@KyiwFP!000026IE2fZrd;nz3(fO91Id8ykyuZE*qr9un*X2FpNU6ccu*58u0>(0vYUe4T{-xO@mH_&KVKlXmuqPNG3_l?L%gzH9iQ(2LR+p zmHKY$OQ*LAA`)iTe3y3S_Oy5X z0I5#f&hNpK!c5m-v5%3lxaURYA8r8tGk?W8_eH)apw9j0Wr5lB%8TJc58IIzbf6IL z-Ud3dv9l`;&O5TjU1C{P;E`PF^_ybmWs-p50GhV={w|Rs9!2qcmsYA#LH!rMND>oM z0O_I|4#T9p3M)-rTgjkSTe=UT`M~;V+Mh}8*~U3}PPHFxEUwwDb5*QVlxn6^byV&Q zPu4a{8pN=7_9WtzzB^|f%q!*eQB{CKy|$_hUie_0@^PEBX}dsTXM>QUmW@A)qii}g z$LqYe9IomE?07(J?r!!TY!>w$d4~j(up5?pYIAjQI+st zSUx=LkZh8i0f)=Ts&|gw;eJ$>XA3&V6};jD_8ZtEwSW{G8-@?t^9<^86Jg4a_ip$x nut7iygL)l*Ax}}3FYNf9)P92vE)UrCQpn8XN8KWuvfYHg)%NH~I?5%9P4 zPnMlN6D|dRkTEs%?&)Q8;aD~%U@33KYOz@HuR0w)CO+yTHY|g#+ZC#nB|k{;{;>YD zhiaCBVOrQ#+-C+#J_vcqOh!eY4BiAUEPD>SX+FM*>PChJ0u*QL%M?dW-nf|Hwa6`GC{5z)t z?H#qn{yIv&x!{XWqNzsL6j=5Vmz(iJ+N$6|f~R$w;yl1_IxlW*S)M&2(wdy!C-byg zu)v(q=dq7F0j}i6qrrg*{Y}B?8{!}<3+l3%0h0)uU*mo)8)(de5)b;nSCJM_-HrCn TkUY!#eaQ2VM0Y8J_n|lfdB~ai literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/DzfRjky4.js.gz b/apps/dashboard/build/_app/immutable/chunks/DzfRjky4.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..fc5020bf964206fedfbb1f6b5a4ea303bf1e8dbe GIT binary patch literal 388 zcmV-~0ek)*iwFP!000026IGHyPQx$|MfaSdGFvZFH7PELMdH+g1*mGo0gN++NR7uD zn*yqOcjUMs?aG?>{l7=!F=&05!Q*kKO}J;bSyl?A7&mAQxJXuYmPG;wu(4LE5?RK$ z1M+AGi&FKRaktk7hPuw9!D5J|s8&T;Fz$2+Kz2x2$Wk)ig6VvR3FUXi9XoOLczl5# z=~oiy0PRJ7;%~0~=c(1iYuH2L=d3f|5cW6)2{9Q)uGF$x6eDlGoFnjlkjlkEO>ewe ze<{xMwUA53x7y65_C~kRe5au;*U8s_CiA%g+9CCWNz8>*g7F%_ZD9ul)_}y`jqS_4 zDpbvQO`!WGXi9keh5>H~KVlpA?6%7D@}FPjWFl9Raf#OBzH4>p&`x>dH(tq?ex+7L zys(7;Hi|VE{d+ZGiPnM{w9Xqm0G;QY7N9htJEUhFfxaBsbMKIXwgwu5bPi2h@dTQ} iJLoX&&glVu;{BtVX+K+Yh{x;c;pPt^cWm9h0ssK2v%oe0 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js b/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js new file mode 100644 index 0000000..29ca25a --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js @@ -0,0 +1,2 @@ +var Me=Object.defineProperty;var ue=t=>{throw TypeError(t)};var Ye=(t,e,r)=>e in t?Me(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var $=(t,e,r)=>Ye(t,typeof e!="symbol"?e+"":e,r),re=(t,e,r)=>e.has(t)||ue("Cannot "+r);var s=(t,e,r)=>(re(t,e,"read from private field"),r?r.call(t):e.get(t)),c=(t,e,r)=>e.has(t)?ue("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),n=(t,e,r,a)=>(re(t,e,"write to private field"),a?a.call(t,r):e.set(t,r),r),p=(t,e,r)=>(re(t,e,"access private method"),r);import{aP as Ie,g as we,z as Le,A as xe,aQ as _e,B as q,ao as me,w as M,m as Y,M as C,aR as pe,b as Be,ab as Ce,ad as He,aS as ge,ai as F,k as Te,aT as se,ar as ie,ay as Pe,aU as ve,aV as Ve,aW as ye,aX as We,aY as qe,aZ as Z,a_ as G,a$ as be,b0 as ze,b1 as Re,az as Se,ag as $e,aw as ae,v as K,n as je,ae as Ue,b2 as j,E as Je,l as Qe,b3 as Xe,b4 as Ze,a6 as Ge,a3 as Ke,b5 as et,b6 as ne,x as tt,C as Ae,ax as rt,o as st,b7 as fe,q as U,b8 as it,av as at,b9 as nt,al as ft,p as ht,af as ot,ba as lt,a as ct}from"./CvjSAYrz.js";import{d as dt}from"./BsvCUYx-.js";function ut(t){let e=0,r=me(0),a;return()=>{Ie()&&(we(r),Le(()=>(e===0&&(a=xe(()=>t(()=>_e(r)))),e+=1,()=>{q(()=>{e-=1,e===0&&(a==null||a(),a=void 0,_e(r))})})))}}var _t=Je|Qe;function pt(t,e,r,a){new gt(t,e,r,a)}var E,z,T,L,g,R,w,m,S,x,N,H,P,V,A,ee,o,De,Ne,Oe,he,Q,X,oe;class gt{constructor(e,r,a,h){c(this,o);$(this,"parent");$(this,"is_pending",!1);$(this,"transform_error");c(this,E);c(this,z,Y?M:null);c(this,T);c(this,L);c(this,g);c(this,R,null);c(this,w,null);c(this,m,null);c(this,S,null);c(this,x,0);c(this,N,0);c(this,H,!1);c(this,P,new Set);c(this,V,new Set);c(this,A,null);c(this,ee,ut(()=>(n(this,A,me(s(this,x))),()=>{n(this,A,null)})));var i;n(this,E,e),n(this,T,r),n(this,L,f=>{var u=C;u.b=this,u.f|=pe,a(f)}),this.parent=C.b,this.transform_error=h??((i=this.parent)==null?void 0:i.transform_error)??(f=>f),n(this,g,Be(()=>{if(Y){const f=s(this,z);Ce();const u=f.data===He;if(f.data.startsWith(ge)){const d=JSON.parse(f.data.slice(ge.length));p(this,o,Ne).call(this,d)}else u?p(this,o,Oe).call(this):p(this,o,De).call(this)}else p(this,o,he).call(this)},_t)),Y&&n(this,E,M)}defer_effect(e){qe(e,s(this,P),s(this,V))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!s(this,T).pending}update_pending_count(e){p(this,o,oe).call(this,e),n(this,x,s(this,x)+e),!(!s(this,A)||s(this,H))&&(n(this,H,!0),q(()=>{n(this,H,!1),s(this,A)&&$e(s(this,A),s(this,x))}))}get_effect_pending(){return s(this,ee).call(this),we(s(this,A))}error(e){var r=s(this,T).onerror;let a=s(this,T).failed;if(!r&&!a)throw e;s(this,R)&&(ae(s(this,R)),n(this,R,null)),s(this,w)&&(ae(s(this,w)),n(this,w,null)),s(this,m)&&(ae(s(this,m)),n(this,m,null)),Y&&(K(s(this,z)),je(),K(Ue()));var h=!1,i=!1;const f=()=>{if(h){Ze();return}h=!0,i&&Xe(),s(this,m)!==null&&ie(s(this,m),()=>{n(this,m,null)}),p(this,o,X).call(this,()=>{se.ensure(),p(this,o,he).call(this)})},u=l=>{try{i=!0,r==null||r(l,f),i=!1}catch(d){j(d,s(this,g)&&s(this,g).parent)}a&&n(this,m,p(this,o,X).call(this,()=>{se.ensure();try{return F(()=>{var d=C;d.b=this,d.f|=pe,a(s(this,E),()=>l,()=>f)})}catch(d){return j(d,s(this,g).parent),null}}))};q(()=>{var l;try{l=this.transform_error(e)}catch(d){j(d,s(this,g)&&s(this,g).parent);return}l!==null&&typeof l=="object"&&typeof l.then=="function"?l.then(u,d=>j(d,s(this,g)&&s(this,g).parent)):u(l)})}}E=new WeakMap,z=new WeakMap,T=new WeakMap,L=new WeakMap,g=new WeakMap,R=new WeakMap,w=new WeakMap,m=new WeakMap,S=new WeakMap,x=new WeakMap,N=new WeakMap,H=new WeakMap,P=new WeakMap,V=new WeakMap,A=new WeakMap,ee=new WeakMap,o=new WeakSet,De=function(){try{n(this,R,F(()=>s(this,L).call(this,s(this,E))))}catch(e){this.error(e)}},Ne=function(e){const r=s(this,T).failed;r&&n(this,m,F(()=>{r(s(this,E),()=>e,()=>()=>{})}))},Oe=function(){const e=s(this,T).pending;e&&(this.is_pending=!0,n(this,w,F(()=>e(s(this,E)))),q(()=>{var r=n(this,S,document.createDocumentFragment()),a=Te();r.append(a),n(this,R,p(this,o,X).call(this,()=>(se.ensure(),F(()=>s(this,L).call(this,a))))),s(this,N)===0&&(s(this,E).before(r),n(this,S,null),ie(s(this,w),()=>{n(this,w,null)}),p(this,o,Q).call(this))}))},he=function(){try{if(this.is_pending=this.has_pending_snippet(),n(this,N,0),n(this,x,0),n(this,R,F(()=>{s(this,L).call(this,s(this,E))})),s(this,N)>0){var e=n(this,S,document.createDocumentFragment());Pe(s(this,R),e);const r=s(this,T).pending;n(this,w,F(()=>r(s(this,E))))}else p(this,o,Q).call(this)}catch(r){this.error(r)}},Q=function(){this.is_pending=!1;for(const e of s(this,P))ve(e,Ve),ye(e);for(const e of s(this,V))ve(e,We),ye(e);s(this,P).clear(),s(this,V).clear()},X=function(e){var r=C,a=Re,h=Se;Z(s(this,g)),G(s(this,g)),be(s(this,g).ctx);try{return e()}catch(i){return ze(i),null}finally{Z(r),G(a),be(h)}},oe=function(e){var r;if(!this.has_pending_snippet()){this.parent&&p(r=this.parent,o,oe).call(r,e);return}n(this,N,s(this,N)+e),s(this,N)===0&&(p(this,o,Q).call(this),s(this,w)&&ie(s(this,w),()=>{n(this,w,null)}),s(this,S)&&(s(this,E).before(s(this,S)),n(this,S,null)))};const vt=["touchstart","touchmove"];function yt(t){return vt.includes(t)}const I=Symbol("events"),ke=new Set,le=new Set;function bt(t,e,r,a={}){function h(i){if(a.capture||ce.call(e,i),!i.cancelBubble)return et(()=>r==null?void 0:r.call(this,i))}return t.startsWith("pointer")||t.startsWith("touch")||t==="wheel"?q(()=>{e.addEventListener(t,h,a)}):e.addEventListener(t,h,a),h}function Rt(t,e,r,a,h){var i={capture:a,passive:h},f=bt(t,e,r,i);(e===document.body||e===window||e===document||e instanceof HTMLMediaElement)&&Ke(()=>{e.removeEventListener(t,f,i)})}function St(t,e,r){(e[I]??(e[I]={}))[t]=r}function At(t){for(var e=0;e{throw k});throw D}}finally{t[I]=e,delete t.currentTarget,G(B),Z(W)}}}function Dt(t,e){var r=e==null?"":typeof e=="object"?e+"":e;r!==(t.__t??(t.__t=t.nodeValue))&&(t.__t=r,t.nodeValue=r+"")}function Et(t,e){return Fe(t,e)}function Nt(t,e){ne(),e.intro=e.intro??!1;const r=e.target,a=Y,h=M;try{for(var i=tt(r);i&&(i.nodeType!==Ae||i.data!==rt);)i=st(i);if(!i)throw fe;U(!0),K(i);const f=Fe(t,{...e,anchor:i});return U(!1),f}catch(f){if(f instanceof Error&&f.message.split(` +`).some(u=>u.startsWith("https://svelte.dev/e/")))throw f;return f!==fe&&console.warn("Failed to hydrate: ",f),e.recover===!1&&it(),ne(),at(r),U(!1),Et(t,e)}finally{U(a),K(h)}}const J=new Map;function Fe(t,{target:e,anchor:r,props:a={},events:h,context:i,intro:f=!0,transformError:u}){ne();var l=void 0,d=nt(()=>{var B=r??e.appendChild(Te());pt(B,{pending:()=>{}},v=>{ht({});var _=Se;if(i&&(_.c=i),h&&(a.$$events=h),Y&&dt(v,null),l=t(v,a)||{},Y&&(C.nodes.end=M,M===null||M.nodeType!==Ae||M.data!==ot))throw lt(),fe;ct()},u);var W=new Set,D=v=>{for(var _=0;_{var O;for(var v of W)for(const b of[e,document]){var _=J.get(b),y=_.get(v);--y==0?(b.removeEventListener(v,ce),_.delete(v),_.size===0&&J.delete(b)):_.set(v,y)}le.delete(D),B!==r&&((O=B.parentNode)==null||O.removeChild(B))}});return de.set(l,d),l}let de=new WeakMap;function Ot(t,e){const r=de.get(t);return r?(de.delete(t),r(e)):Promise.resolve()}export{St as a,At as d,Rt as e,Nt as h,Et as m,Dt as s,Ot as u}; diff --git a/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.br b/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.br new file mode 100644 index 0000000000000000000000000000000000000000..92f1bf81230f24b8738a219c113ad1287c1be68d GIT binary patch literal 3127 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 Rc(F&*-;)vUDTzGS`x`S570Lhr literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.gz b/apps/dashboard/build/_app/immutable/chunks/FzvEaXMa.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..091898c68311224a3fdd537e2aa6adccae78fe9b GIT binary patch literal 3497 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 X98N6E;ljeA^#Accb`q`e6CeNpPa427 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js b/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js deleted file mode 100644 index aab0ce9..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js +++ /dev/null @@ -1 +0,0 @@ -import{b as T,T as o,a7 as b,E as h,a8 as p,a9 as A,aa as E,ab as R,ac as g,ad as l}from"./VE8Jor13.js";import{B as v}from"./BYWGnCkZ.js";function N(t,c,u=!1){o&&b();var n=new v(t),_=u?h:0;function i(a,r){if(o){const e=p(t);var s;if(e===A?s=0:e===E?s=!1:s=parseInt(e.substring(1)),a!==s){var f=R();g(f),n.anchor=f,l(!1),n.ensure(a,r),l(!0);return}}n.ensure(a,r)}T(()=>{var a=!1;c((r,s=0)=>{a=!0,i(s,r)}),a||i(!1,null)},_)}export{N as i}; diff --git a/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.br b/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.br deleted file mode 100644 index a919f0f5eac60e5e1675954e73d1c626c5bd0091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmV+)0pR`{wE+l>lr9g{ZT07$uDfM2lM<=@c`NzgR`?2YW5sEDS-_CSsWhrsD)urS z4QhM(XMbzwU=n3=IguZPH>_kJb#m=c$6TG`}D>zrXX)TR^i+RLFpb*!n44K1*x zBX;)9lkw9RjeWQCgXbraie407sT~@+PI4N5Kix<3`mf6UJ^_`sq_Iq(^9+SHpuayn z_^~&H4l0tYRZqou?&mYC>4VPs08ex-uJ^>AU!Yd7lv2XQo|)@ah2zBt)2?KqsPHU~ z`!Vbjh?HbjG*Ub807^horcXoSv0eDLphB>*zRj&=Y5 diff --git a/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.gz b/apps/dashboard/build/_app/immutable/chunks/JkhlGLjU.js.gz deleted file mode 100644 index 410c0c5d39abcb43c9adebd403a55d603628db14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 321 zcmV-H0lxkpiwFP!000026IGBwOT$1Ah421~q=zyKLrn0XHjJf}AbRMb6h$v(5;yH? zx*K*kRY>#SWm7~veZ!mgW`z+{5xZ!En*f7+9av%!ut&ZLY>{sR7swn~Adjgv zauv8keh+Mh+M2^8xqL2eo{Y_|k`Fh@)p^e{IF7%L{const n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(n)return a.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const o=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(o)return a.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const s=r.split(/\[(.+?)\](?!\])/);return"/"+s.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return ct(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return ct(String.fromCharCode(...c.slice(2).split("-").map(_=>parseInt(_,16))));const h=ue.exec(c),[,u,w,f,d]=h;return a.push({name:f,matcher:d,optional:!!u,rest:!!w,chained:w?l===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return ct(c)}).join("")}).join("")}/?$`),params:a}}function de(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function pe(t){return t.slice(1).split("/").filter(de)}function ge(t,a,e){const r={},n=t.slice(1),o=n.filter(i=>i!==void 0);let s=0;for(let i=0;ih).join("/"),s=0),l===void 0)if(c.rest)l="";else continue;if(!c.matcher||e[c.matcher](l)){r[c.name]=l;const h=a[i+1],u=n[i+1];h&&!h.rest&&h.optional&&u&&c.chained&&(s=0),!h&&!u&&Object.keys(r).length===o.length&&(s=0);continue}if(c.optional&&c.chained){s++;continue}return}if(!s)return r}function ct(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function me({nodes:t,server_loads:a,dictionary:e,matchers:r}){const n=new Set(a);return Object.entries(e).map(([i,[c,l,h]])=>{const{pattern:u,params:w}=he(i),f={id:i,exec:d=>{const _=u.exec(d);if(_)return ge(_,w,r)},errors:[1,...h||[]].map(d=>t[d]),layouts:[0,...l||[]].map(s),leaf:o(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function o(i){const c=i<0;return c&&(i=~i),[c,t[i]]}function s(i){return i===void 0?i:[n.has(i),t[i]]}}function Ft(t,a=JSON.parse){try{return a(sessionStorage[t])}catch{}}function It(t,a,e=JSON.stringify){const r=e(a);try{sessionStorage[t]=r}catch{}}function _e(t){return t.filter(a=>a!=null)}function Et(t){return t instanceof wt||t instanceof yt?t.status:500}function we(t){return t instanceof yt?t.text:"Internal Error"}const ve=new Set(["icon","shortcut icon","apple-touch-icon"]),I=Ft(Kt)??{},M=Ft(qt)??{},P={url:Pt({}),page:Pt({}),navigating:ae(null),updated:ne()};function bt(t){I[t]=C()}function ye(t,a){let e=t+1;for(;I[e];)delete I[e],e+=1;for(e=a+1;M[e];)delete M[e],e+=1}function V(t,a=!1){return a?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function Bt(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(L||"/");t&&await t.update()}}function Tt(){}let kt,ht,Q,U,dt,b;const Z=[],tt=[];let v=null;function pt(){var t;(t=v==null?void 0:v.fork)==null||t.then(a=>a==null?void 0:a.discard()),v=null}const W=new Map,Mt=new Set,Ee=new Set,F=new Set;let m={branch:[],error:null,url:null},Vt=!1,et=!1,Ot=!0,H=!1,K=!1,Ht=!1,St=!1,Yt,E,R,O;const at=new Set,Ct=new Map;async function Fe(t,a,e){var o,s,i,c,l;(o=globalThis.__sveltekit_er3k9h)!=null&&o.data&&globalThis.__sveltekit_er3k9h.data,document.URL!==location.href&&(location.href=location.href),b=t,await((i=(s=t.hooks).init)==null?void 0:i.call(s)),kt=me(t),U=document.documentElement,dt=a,ht=t.nodes[0],Q=t.nodes[1],ht(),Q(),E=(c=history.state)==null?void 0:c[N],R=(l=history.state)==null?void 0:l[B],E||(E=R=Date.now(),history.replaceState({...history.state,[N]:E,[B]:R},""));const r=I[E];function n(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}e?(n(),await Ce(dt,e)):(await D({type:"enter",url:mt(b.hash?Ne(new URL(location.href)):location.href),replace_state:!0}),n()),Oe()}function be(){Z.length=0,St=!1}function zt(t){tt.some(a=>a==null?void 0:a.snapshot)&&(M[t]=tt.map(a=>{var e;return(e=a==null?void 0:a.snapshot)==null?void 0:e.capture()}))}function Gt(t){var a;(a=M[t])==null||a.forEach((e,r)=>{var n,o;(o=(n=tt[r])==null?void 0:n.snapshot)==null||o.restore(e)})}function jt(){bt(E),It(Kt,I),zt(R),It(qt,M)}async function Wt(t,a,e,r){let n;a.invalidateAll&&pt(),await D({type:"goto",url:mt(t),keepfocus:a.keepFocus,noscroll:a.noScroll,replace_state:a.replaceState,state:a.state,redirect_count:e,nav_token:r,accept:()=>{a.invalidateAll&&(St=!0,n=[...Ct.keys()]),a.invalidate&&a.invalidate.forEach(Te)}}),a.invalidateAll&&J().then(J).then(()=>{Ct.forEach(({resource:o},s)=>{var i;n!=null&&n.includes(s)&&((i=o.refresh)==null||i.call(o))})})}async function ke(t){if(t.id!==(v==null?void 0:v.id)){pt();const a={};at.add(a),v={id:t.id,token:a,promise:Xt({...t,preload:a}).then(e=>(at.delete(a),e.type==="loaded"&&e.state.error&&pt(),e)),fork:null}}return v.promise}async function lt(t){var e;const a=(e=await ot(t,!1))==null?void 0:e.route;a&&await Promise.all([...a.layouts,a.leaf].filter(Boolean).map(r=>r[1]()))}async function Jt(t,a,e){var n;m=t.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(x,t.props.page),Yt=new b.root({target:a,props:{...t.props,stores:P,components:tt},hydrate:e,sync:!1}),await Promise.resolve(),Gt(R),e){const o={from:null,to:{params:m.params,route:{id:((n=m.route)==null?void 0:n.id)??null},url:new URL(location.href),scroll:I[E]??C()},willUnload:!1,type:"enter",complete:Promise.resolve()};F.forEach(s=>s(o))}et=!0}function nt({url:t,params:a,branch:e,status:r,error:n,route:o,form:s}){let i="never";if(L&&(t.pathname===L||t.pathname===L+"/"))i="always";else for(const f of e)(f==null?void 0:f.slash)!==void 0&&(i=f.slash);t.pathname=se(t.pathname,i),t.search=t.search;const c={type:"loaded",state:{url:t,params:a,branch:e,error:n,route:o},props:{constructors:_e(e).map(f=>f.node.component),page:At(x)}};s!==void 0&&(c.props.form=s);let l={},h=!x,u=0;for(let f=0;fi(new URL(s))))return!0;return!1}function xt(t,a){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?a??null:null}function xe(t,a){if(!t)return new Set(a.searchParams.keys());const e=new Set([...t.searchParams.keys(),...a.searchParams.keys()]);for(const r of e){const n=t.searchParams.getAll(r),o=a.searchParams.getAll(r);n.every(s=>o.includes(s))&&o.every(s=>n.includes(s))&&e.delete(r)}return e}function Le({error:t,url:a,route:e,params:r}){return{type:"loaded",state:{error:t,url:a,route:e,params:r,branch:[]},props:{page:At(x),constructors:[]}}}async function Xt({id:t,invalidating:a,url:e,params:r,route:n,preload:o}){if((v==null?void 0:v.id)===t)return at.delete(v.token),v.promise;const{errors:s,layouts:i,leaf:c}=n,l=[...i,c];s.forEach(g=>g==null?void 0:g().catch(()=>{})),l.forEach(g=>g==null?void 0:g[1]().catch(()=>{}));const h=m.url?t!==rt(m.url):!1,u=m.route?n.id!==m.route.id:!1,w=xe(m.url,e);let f=!1;const d=l.map(async(g,p)=>{var A;if(!g)return;const y=m.branch[p];return g[1]===(y==null?void 0:y.loader)&&!Re(f,u,h,w,(A=y.universal)==null?void 0:A.uses,r)?y:(f=!0,Rt({loader:g[1],url:e,params:r,route:n,parent:async()=>{var z;const T={};for(let j=0;j{});const _=[];for(let g=0;gPromise.resolve({}),server_data_node:xt(o)}),i={node:await Q(),loader:Q,universal:null,server:null,data:null};return nt({url:e,params:n,branch:[s,i],status:t,error:a,route:null})}catch(s){if(s instanceof vt)return Wt(new URL(s.location,location.href),{},0);throw s}}async function Ae(t){const a=t.href;if(W.has(a))return W.get(a);let e;try{const r=(async()=>{let n=await b.hooks.reroute({url:new URL(t),fetch:async(o,s)=>Se(o,s,t).promise})??t;if(typeof n=="string"){const o=new URL(t);b.hash?o.hash=n:o.pathname=n,n=o}return n})();W.set(a,r),e=await r}catch{W.delete(a);return}return e}async function ot(t,a){if(t&&!_t(t,L,b.hash)){const e=await Ae(t);if(!e)return;const r=Pe(e);for(const n of kt){const o=n.exec(r);if(o)return{id:rt(t),invalidating:a,route:n,params:oe(o),url:t}}}}function Pe(t){return ie(b.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(L.length))||"/"}function rt(t){return(b.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Qt({url:t,type:a,intent:e,delta:r,event:n,scroll:o}){let s=!1;const i=Ut(m,e,t,a,o??null);r!==void 0&&(i.navigation.delta=r),n!==void 0&&(i.navigation.event=n);const c={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return H||Mt.forEach(l=>l(c)),s?null:i}async function D({type:t,url:a,popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s={},redirect_count:i=0,nav_token:c={},accept:l=Tt,block:h=Tt,event:u}){var j;const w=O;O=c;const f=await ot(a,!1),d=t==="enter"?Ut(m,f,a,t):Qt({url:a,type:t,delta:e==null?void 0:e.delta,intent:f,scroll:e==null?void 0:e.scroll,event:u});if(!d){h(),O===c&&(O=w);return}const _=E,g=R;l(),H=!0,et&&d.navigation.type!=="enter"&&P.navigating.set(ft.current=d.navigation);let p=f&&await Xt(f);if(!p){if(_t(a,L,b.hash))return await V(a,o);p=await Zt(a,{id:null},await Y(new yt(404,"Not Found",`Not found: ${a.pathname}`),{url:a,params:{},route:{id:null}}),404,o)}if(a=(f==null?void 0:f.url)||a,O!==c)return d.reject(new Error("navigation aborted")),!1;if(p.type==="redirect"){if(i<20){await D({type:t,url:new URL(p.location,a),popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s,redirect_count:i+1,nav_token:c}),d.fulfil(void 0);return}p=await Lt({status:500,error:await Y(new Error("Redirect loop"),{url:a,params:{},route:{id:null}}),url:a,route:{id:null}})}else p.props.page.status>=400&&await P.updated.check()&&(await Bt(),await V(a,o));if(be(),bt(_),zt(g),p.props.page.url.pathname!==a.pathname&&(a.pathname=p.props.page.url.pathname),s=e?e.state:s,!e){const k=o?0:1,G={[N]:E+=k,[B]:R+=k,[Nt]:s};(o?history.replaceState:history.pushState).call(history,G,"",a),o||ye(E,R)}const y=f&&(v==null?void 0:v.id)===f.id?v.fork:null;v=null,p.props.page.state=s;let S;if(et){const k=(await Promise.all(Array.from(Ee,$=>$(d.navigation)))).filter($=>typeof $=="function");if(k.length>0){let $=function(){k.forEach(st=>{F.delete(st)})};k.push($),k.forEach(st=>{F.add(st)})}m=p.state,p.props.page&&(p.props.page.url=a);const G=y&&await y;G?S=G.commit():(Yt.$set(p.props),fe(p.props.page),S=(j=ee)==null?void 0:j()),Ht=!0}else await Jt(p,dt,!1);const{activeElement:A}=document;await S,await J(),await J();let T=null;if(Ot){const k=e?e.scroll:n?C():null;k?scrollTo(k.x,k.y):(T=a.hash&&document.getElementById(te(a)))?T.scrollIntoView():scrollTo(0,0)}const z=document.activeElement!==A&&document.activeElement!==document.body;!r&&!z&&$e(a,!T),Ot=!0,p.props.page&&Object.assign(x,p.props.page),H=!1,t==="popstate"&&Gt(R),d.fulfil(void 0),d.navigation.to&&(d.navigation.to.scroll=C()),F.forEach(k=>k(d.navigation)),P.navigating.set(ft.current=null)}async function Zt(t,a,e,r,n){return t.origin===Dt&&t.pathname===location.pathname&&!Vt?await Lt({status:r,error:e,url:t,route:a}):await V(t,n)}function Ie(){let t,a={element:void 0,href:void 0},e;U.addEventListener("mousemove",i=>{const c=i.target;clearTimeout(t),t=setTimeout(()=>{o(c,q.hover)},20)});function r(i){i.defaultPrevented||o(i.composedPath()[0],q.tap)}U.addEventListener("mousedown",r),U.addEventListener("touchstart",r,{passive:!0});const n=new IntersectionObserver(i=>{for(const c of i)c.isIntersecting&&(lt(new URL(c.target.href)),n.unobserve(c.target))},{threshold:0});async function o(i,c){const l=$t(i,U),h=l===a.element&&(l==null?void 0:l.href)===a.href&&c>=e;if(!l||h)return;const{url:u,external:w,download:f}=ut(l,L,b.hash);if(w||f)return;const d=X(l),_=u&&rt(m.url)===rt(u);if(!(d.reload||_))if(c<=d.preload_data){a={element:l,href:l.href},e=q.tap;const g=await ot(u,!1);if(!g)return;ke(g)}else c<=d.preload_code&&(a={element:l,href:l.href},e=c,lt(u))}function s(){n.disconnect();for(const i of U.querySelectorAll("a")){const{url:c,external:l,download:h}=ut(i,L,b.hash);if(l||h)continue;const u=X(i);u.reload||(u.preload_code===q.viewport&&n.observe(i),u.preload_code===q.eager&<(c))}}F.add(s),s()}function Y(t,a){if(t instanceof wt)return t.body;const e=Et(t),r=we(t);return b.hooks.handleError({error:t,event:a,status:e,message:r})??{message:r}}function Be(t,a={}){return t=new URL(mt(t)),t.origin!==Dt?Promise.reject(new Error("goto: invalid URL")):Wt(t,a,0)}function Te(t){if(typeof t=="function")Z.push(t);else{const{href:a}=new URL(t,location.href);Z.push(e=>e.href===a)}}function Oe(){var a;history.scrollRestoration="manual",addEventListener("beforeunload",e=>{let r=!1;if(jt(),!H){const n=Ut(m,void 0,null,"leave"),o={...n.navigation,cancel:()=>{r=!0,n.reject(new Error("navigation cancelled"))}};Mt.forEach(s=>s(o))}r?(e.preventDefault(),e.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&jt()}),(a=navigator.connection)!=null&&a.saveData||Ie(),U.addEventListener("click",async e=>{if(e.button||e.which!==1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.defaultPrevented)return;const r=$t(e.composedPath()[0],U);if(!r)return;const{url:n,external:o,target:s,download:i}=ut(r,L,b.hash);if(!n)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const c=X(r);if(!(r instanceof SVGAElement)&&n.protocol!==location.protocol&&!(n.protocol==="https:"||n.protocol==="http:")||i)return;const[h,u]=(b.hash?n.hash.replace(/^#/,""):n.href).split("#"),w=h===it(location);if(o||c.reload&&(!w||!u)){Qt({url:n,type:"link",event:e})?H=!0:e.preventDefault();return}if(u!==void 0&&w){const[,f]=m.url.href.split("#");if(f===u){if(e.preventDefault(),u===""||u==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const d=r.ownerDocument.getElementById(decodeURIComponent(u));d&&(d.scrollIntoView(),d.focus())}return}if(K=!0,bt(E),t(n),!c.replace_state)return;K=!1}e.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await D({type:"link",url:n,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??n.href===location.href,event:e})}),U.addEventListener("submit",e=>{if(e.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if(((n==null?void 0:n.formTarget)||r.target)==="_blank"||((n==null?void 0:n.formMethod)||r.method)!=="get")return;const i=new URL((n==null?void 0:n.hasAttribute("formaction"))&&(n==null?void 0:n.formAction)||r.action);if(_t(i,L,!1))return;const c=e.target,l=X(c);if(l.reload)return;e.preventDefault(),e.stopPropagation();const h=new FormData(c,n);i.search=new URLSearchParams(h).toString(),D({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href,event:e})}),addEventListener("popstate",async e=>{var r;if(!gt){if((r=e.state)!=null&&r[N]){const n=e.state[N];if(O={},n===E)return;const o=I[n],s=e.state[Nt]??{},i=new URL(e.state[re]??location.href),c=e.state[B],l=m.url?it(location)===it(m.url):!1;if(c===R&&(Ht||l)){s!==x.state&&(x.state=s),t(i),I[E]=C(),o&&scrollTo(o.x,o.y),E=n;return}const u=n-E;await D({type:"popstate",url:i,popped:{state:s,scroll:o,delta:u},accept:()=>{E=n,R=c},block:()=>{history.go(-u)},nav_token:O,event:e})}else if(!K){const n=new URL(location.href);t(n),b.hash&&location.reload()}}}),addEventListener("hashchange",()=>{K&&(K=!1,history.replaceState({...history.state,[N]:++E,[B]:R},"",location.href))});for(const e of document.querySelectorAll("link"))ve.has(e.rel)&&(e.href=e.href);addEventListener("pageshow",e=>{e.persisted&&P.navigating.set(ft.current=null)});function t(e){m.url=x.url=e,P.page.set(At(x)),P.page.notify()}}async function Ce(t,{status:a=200,error:e,node_ids:r,params:n,route:o,server_route:s,data:i,form:c}){Vt=!0;const l=new URL(location.href);let h;({params:n={},route:o={id:null}}=await ot(l,!1)||{}),h=kt.find(({id:f})=>f===o.id);let u,w=!0;try{const f=r.map(async(_,g)=>{const p=i[g];return p!=null&&p.uses&&(p.uses=je(p.uses)),Rt({loader:b.nodes[_],url:l,params:n,route:o,parent:async()=>{const y={};for(let S=0;S{const i=history.state;gt=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(i,"",t),a&&scrollTo(o,s),gt=!1})}else{const o=document.body,s=o.getAttribute("tabindex");o.tabIndex=-1,o.focus({preventScroll:!0,focusVisible:!1}),s!==null?o.setAttribute("tabindex",s):o.removeAttribute("tabindex")}const n=getSelection();if(n&&n.type!=="None"){const o=[];for(let s=0;s{if(n.rangeCount===o.length){for(let s=0;s{o=u,s=w});return i.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((l=t.route)==null?void 0:l.id)??null},url:t.url,scroll:C()},to:e&&{params:(a==null?void 0:a.params)??null,route:{id:((h=a==null?void 0:a.route)==null?void 0:h.id)??null},url:e,scroll:n},willUnload:!a,type:r,complete:i},fulfil:o,reject:s}}function At(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Ne(t){const a=new URL(t);return a.hash=decodeURIComponent(t.hash),a}function te(t){let a;if(b.hash){const[,,e]=t.hash.split("#",3);a=e??""}else a=t.hash.slice(1);return decodeURIComponent(a)}export{Fe as a,Be as g,P as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/S0ILvWpb.js.br b/apps/dashboard/build/_app/immutable/chunks/S0ILvWpb.js.br new file mode 100644 index 0000000000000000000000000000000000000000..cfb62ad2dcf0d15db6ce0397525e588fb0015a12 GIT binary patch literal 7671 zcmV2XC;}L)0FvHhLB}9WTRd=joh*XLULLyjHBY)r`l`PDq^tW{-^%H z6(zZI86pP7*?dwyDy%c%_x{xH>o+KVbMCCih21WniC!rk6E6o8n++}tavB2qSMz^W z|AEyTF?uo~`O0!r{0_8)l)UFJ%k`$C;j|-aL;H?@MTnmsY*hk40{XMi@)^rfNM11DzUq+5`0{S^>qRN-_dbgS?cRZ?c9*SNsRx&QvZIK z@9RI>uDgGX-UtYo+H9f{pQoSQgRdvoTRQR3|qrR9=hoQ6jAbD`SOp(w+eQ}Fh$Qg2cb~|)&(3g*aOM~Ugm=R-CZ4wr=|11!U z6<`ix#GtQp5>x*?$1-Dw<@8V3cvDFZ*#dBv=>%iN(FHB@=}W5bS|7%; zN;Na%X6MV^C z0e=KNuE)B5wA;VW`&O`y8IQGWmWmkKHk*sv&ijfVB1jHr|3r44|HACdA~&Oci!3L` z+nN1oK8qil&mgVM^6@92V$~)bQgFL<5?bu z{)mW+NkVaAAi=7g6umkj#YLajidpUdQwf(6*;BC@W7DcXQ1@hWFD1v%N^<@A{QcIb z)O4e+k9UB50b{c?NWU4FSaNJ^+&(v}Np|8oH}(=kXB% zq^p+;eXY@?zOTyDFODgjV0X>9)X`!)W141#nUYtglcc(N|2u|YH>N}5ui}^RRY?~#)i$^U$+HO`2cMe7uHva6sf2pQU;}xia6L2?EZ6ow;TA*D!<063CSMv z)%4hgS;vXqDhr|3|7+CQ6nCRFmm9*7-@x?5TV{P(?m}OEP$=!Q_rhR;m>)#ymw1IQ zw-J?~veIb>VW;HwRpZ|pBxOCud>Y*lz1{wh!wLOuN?zk48G+*n>Z`XCLm_tt}+#LOEtS z!n#Be@R6&Uaj&X)@KLQXIS`mU7V2L@@sg5@<^NuF994*A!C_upbpLEJ1ATX%#_zPa z-ItFAWhtQJZ%nX*ZCqZt&Q9)wEl>BjQjv7D+dKpcs2zx;$w{YnX7EKSA8o-DjLW_? z?{3z240BZ$h^3sJ{nK!Vrfr7vw^+SBBLSN)E)=-PQMrRCAk&>^!aY>qTWl=a^27xj z%Zfa${m}A%*!xDKA=nZ~dSUb`3 zqODM1Dg=!3^<&lD^&oc!%ce|o)4%w@42D}JIYVfdKX9V7QV4)PjQBQRtXV34m3gSn zz1(zf9`bUJtll5?Zkh6#4;7Js43y8Et+YjJstYzp)X9r`1{zA*CcFmKIN$2S)T{0< z-vobIhn4^G+vXq57@$hDUvB zuW{@zJ3ha?)qz{bH76D4odR%U-6j|=lmp%%5!mxdV+Cp}2XO_Kw&Ih6b@VpcD154g zQwb?K5Q-m6iC-c6{qQ+Cb30}G*)7vEVyb7&ZpwA%8inDwqvH9EJe>ZBi0}$o-j6<= zth39{)7&uoN06@ibO8FCLzfC61|cEQ|2@vc5>tI&ZTFi~>`5_zyxQPuVK;oS^F(7o z(1m05znWfKp3Dy+kMP>s8mpx6F;w%2nyaXzn;y3w%gyX{{Q? z`XJ-p7~(ZA@*BzK*^5w$@2stGD-Oc1McxQ^$T%O&M}U6>eT5`_pFo8->{R$4V`aDq z`IWN_LB!{wHKgdE6Su%Fa2hKw3M3%|RY%|Bo{?~3XEf4ExJ+_f-3MJ9&}Etpzpy^S{-erJFo-YG zFAuS8KMlnlpp`RbuOpvKZQc*yu4D&+x+2M+5Z>l3l3lrag@i?-099HFWzKd16`ow_ zwEQFDo8iTwVn^RQh+Le;Ir%&}!Fa=$wV(y+`fE&n;M}e1rx%CV_0!P64bvR5^mivj z$PK_)6-KRzVp^wt34P@~ewf>Aa+64VpD~Bo6IGC}MYA)j-Ixx%kY%ST=kdyBTK9Xi`=B8(^hIAQ~jeD#d4!yeTC zR&5cyMHWv;Y78|-+M6~CXE?(VdRQI=QGzMy@L|*Fuegm3DNW#7z`7uW)3!;>Xl%*s zJRKwm&L*BfC{YGbvix-Hva8mh@Wnyo?ktt+@T-3`m!p}w=$Y-H$&U^N43s|7s5yhX z4_L~i$cL4XBNLzaF)C-?^VLQc!$g-gqg+#h;>N|>Lg1y0p`Prwl=}LNZtlX@&hevA z%a8yD7<*CKd38^&z6VaK`qrrkABt|nvLzgH@}6X+GZ-=#7sWuJ(3CqQWD;we(M?_2Yc#tP%FD( zl%Zu*MXh6a9|!NnZDf}pgQcWvcQ(SVhPC?4DSMP?Dq1!is>?VvOYPNrfsyJ_HpfN; z2mS8+2M!|e(4a0%KKpcj-qom&^JzXB7;{AUuLs#S;+Js+Kz%Jyb;ElY;}(JDoL##! zRupW@n_rz6H%O0>L|IcKaq~s`Wr{CT()UJg```fd(f(OtJVX#zinh$^t-0(Az9&j_ zX+3*M%PD|q%I^Y3>|+MU$anH9tT6zY(E5pHLrX0`#oQC%TE;n6+oiJhogLeVsM(1V zE@o*`uu+X)nk!kH7{b&CC5dTpEtD{rp|WIQD6>uL`8rB33o98;&S)s#L_p=b7?jR4 zRhJKZ;iFA6dv!wHnp+5e(oZSf{IC^5r)LNy^-BKQ^=|zMDa6K$aYcsDK{e`ws@_Qw zw2*$h=0e~Ezex`nG?oz&m9Mrr#*PyWfCtT7Z`CVRUtJ&M6xWszW(O;C&2gEaSf$Q$gDLjSH&P&!_k1lZKGO z5Fwd)v)EG*-R}$+Z}5z0#aX~4g0G&|XhMaLh2TWQOf@Ipe-IDOFrW+SkbjBu4)`@b zp23}(vnhcBZc}uBKW&BwwgEve*j*^Ml0o1V`o6H}xk~JJXZ!4Xez;8FY!g^L)-B;> z$ry-#X^7CDZ4^(9HxofXfssRwH4@t=Wd?7lLDbe84g&%Xa`sv8)~K2X1eS;PjvsV1 zhbkCoV+FZe&0>XR`UMcEUhE$P@xEt-`8{%u9qqvFy0?_00w-s+DR0uQwY6BaBMT|_ zjW!4}_@>{i$r6P4HW%)zwuXab>cK2+(d|ZD|`K;DUyt3;seI0S#y)*ZF7IBn~uYS1P#ilzzN&!r5#(V_1h*Uf8 zwd0_S7`P-p0C4v+gy!|;kH6xesnNlz<=N_Mm+DMzaJ&MAqJblw8zwxTV@@80m&BRS z=!x}G5mhP2Bt%!I;npn@Eo%uNQa;^AZ!t(w)y&5mk39{u-|+d5V^FpwGQvEqOX)u^orrZ_(vy>fcP$E`{AIZ?q}D}Y(t9V6}u7MvPthFW|# zS->Ca{g`=^ZTFv*6`e*E-|sXnh2ibJ*>5Z@soe-UTPi9VDqUIv=sPke}Y7+s8nGX|8=I?SJgAksv1^4CuX z#}vP5_tz((W%^HT%_N6|4liF3%mmD8Q*8!;8j{#5O_HDiLQqW2|`i6^h0{7X#O%cnq-IpTTB;nM23aaoF;|RqE)41kozwWsJnO>$SOxCKN|<_i05A4 z)d4_)qD0nlCtf9*)Sw*PESj`DbGwUNC|NlbZF~?_%guL^L*-?2 ziNJ`xiP6H?63GPmq0DYBlBXr&X~Z%1-%klTZ%GauJlE}m#pTNS7+|(P0=PQN^;b?mR9z9Xb+Mu2_@0DVWo{& zrOI{XY_d7U2BQPPC@60GRMY|BE`|_aL4?_>*ym(a^wUpJVd+}Og#Rjq%AeIYZ?u7>9?{?e#?GaYnSv7uc+X}6(ou1ekp0c%0cx5mh zm^8r%xWCNvv`FbmtKZKHOI=GyWqqy_-W!2&7XXIf2)g$rS4OQ%w%SM{(B2LJ<&FkT5VPa3 zJq>pU8-$yWst+=G&I@hiw|PHureyFCE_(S5H@SN(*SwvhBn(iX%_1ldN~wbyn8z8GDHFFVl=vE z$W{_-p)#?(t_4O<-W=vd8a>xW$3{a;QYJA;i2j8;E2mRU>n%c+Duy1Y#TK@loTmvD zn|NqGgjB{Hpqvy?P}yvzGnq|hv(&|0fVJ<7Xd)6ao*kH9JBG~4 zw<3!c?J-MK9~9cpcQJ^6o~$jD+!Y#m+G~AAOEOc78dcG!cW8Bn1iN-P4ge9FjWota zl$auwe9%DzS1LZ(L=K?F*4m_f=mp!AsA7AW2hRf^))45ntB%&<@M9C{XPIp1IPAg6 zS37jB=qeErkFgIT1hl;zbg;!OCi>(GCMY39ih6P#iqZCOkJuK6+m!kIL|8z>0gWaG z$l}De^)1d}&aX3MO^rhybjerAujPOr!|}Lb)ohb8r_0SbHv6R*_th*P98S--TUf;@Qa#ri^#?fE58cIy?5v)d`8ZMxgRjEa^ zDx_|*@e{w$qcCp_%V%Sf#o^|Ro53NH{c_~VODOj|_X$U-IgW;91R<7lJx;%P<&#El z)xuhjg=E-r$g{o3REB6mlK{!#ZIiMvy8*q<5qa?dR`pJk)9i@O zVz7N!#6?A37xh*RDpul7#DaCT)c;oz4`yBrX^&)}@3+G1+P6fFAwfcC55iE(o_Loz zL?lBKJt20MKA`1&TT=g%{IP&W%q2#ilLg2;T=PLjRYuOrbV(?a=v}mo)y@*AEO9`q zj&KGI0n3PI?ZkJyj+y;O3&N89S)>7xbaLp{h{$}df_EZRNW{Ffw>_bFgk+YuznXqxh_h* zRU#~XgrGXrPqR}7)MZr2bM+&Z{_K8$D1i%PGjhI!9wCo$*Obkt`%c{L2y{yFO!b1WN`r>fC(!GlV@sb`2t-EqVt^)YQXd zlq9O_et$6gO%1~@Er*yLKuPl0TyZ^9#(B1d7{7*gt!>o4aT>CIrKV)IOnNv2}DH+V~!sOS1OVOE9|h8r5D zwxp*Lc(fLopfsmI$Af4;aP_ub@$eji1&%)wq|0l+u7#s^i^`O^t+DlW*-=HtwkAa? z%XpZ?Nv6V;oSW8?QrkL=lkZp5Z z*vCr``0yrqIYPn<>^+uNnwI?G z*p*~SYUCPZq8_DWV70{tj$+v;IGqC6E5?w&MU!<9-+%mQmaNkmz-MY@ljan5^LGnM1Bz=(#FAj{<;)~YLfFRIBnLp^ASj*(X* z`)p|T2E$5ZI(Mp;R_wmq$@JDh&hK!HJeaqIMA)e7IzM+XhHh##qtmO+-O_D^#avi1 zpc}ens_#&(ZL6$7T&Gm840dfZ7z!Qm?cEzG2S^)O(KwcZznRKpvQL{<-#+FiSv!tc zF_vy=J*CFu%P#q)ALDl1l^a4ALl(ga)z5CdIjfZsl}-6e5Xz4kDThzq;+M+ow@nR& z+ddRiyOByPY2Cy@0-W>X3P83;nqQiWEu!8AVAjzn{6-|RpIfQhQN&M0*aC*s5wFX5 zy6gu<*l;-X#36V(Ln8shdojcg#f3KPM|V*x(Va-@cn-wo^1*)f>=Y81gL$_T<&9)Q zEbexrRI)VhDUdn*r7qQCl|fG3aCtNsvFywTXP;_CGL` z55azMQGZYM)uj>(>V4u3YT4XFH|ak15mLBlK=-o`<8$DLFKD(I{v98% zVJxTFJixh%4Je{+IGYKzu)0_Hg9lK|F9Oc=zKGwXJLm)K{~Zq)0j&qA=@IBh1NyOe zrQ_)$I4~`4VY5dR4SFlaVKz6(%*nA}y8Zd+h!^EnlXShcX^-+!Nzpe9%4C*KSN->tw z1E$liBc_Kkd$1)>3;p(1oYf+#V#XKef3D)gVxbh$#oTHd{?ai@%hNAeau6O zn|(T3Bxv4gXr^k<(0a;Y2W@Bw>r^8e$a+cU3W&HBIKCE?HqY_chEya~AX%r-2G?Uv=5VbvVQ~GGnDGfsu1(9Dyoamegu_*GlEJm) zM8frZO}@bOPjY9fagv)yO%`xXIQbK~Vua(3&O{lNn(3;fjOg`}%h?g9G$^$a#XK0B0=F_<)6IgHC7bh@ z*D>$B=kb9upD&e?Dn2^iu=;adYk6(jLwKXOu2gaK>iXT=$aW%TYt%G>>)MX?{_jT% zPq|E(7P6q+S6u5O{-Al0mPcj~yUh@VH)XZt3Motuw5a)mHmyOmql(khKhUQM9-~hY z{K3uY1fy|G%?&(H@%Z?3G^>gPhH{i~q_OSxh|$S(WaqqDGOf8PVofOxPJ{93AD>Q- zPve5Gj;{Fp@?nWS|8cxoLhWe5mPpZa*GfT8|M)bq1K92U)AaZ>;txDQ3XjAL71)uO zMa!zp(57Gu9v73dDOoU`WL(9?ol#m?L^NpCH{2$+9xF)~@N|(O~ouT02B*1>~ ziAI)nBiLBaGNzu%l%pk6C4X6HsF{m|qi-=e``;LwnfF_({=T&+irRMEM1m)Q<$@b} z-t=~3JHc++8LhY_d4kD=RAfbFB%RW1bcpn`hVE&H=!42peXwfCz8dG0(z7ruC&MW) zYY-34YD`w+!0^Ku2XSTYPpALH;~=)TCu1Dc?MxF~*rJSC zT{jyiH5Ae)`(GZVv4lFku&7?wbFX(V2zGG3&i@DB5 z;)I_0W)sRLVrpvSw3vt|<qjeZ25zs#j%P>SaEnNTNNlC=XSu^&Go@btfrvWA< z9by8j0q(4wfg*)d7vR)4$YljdQHa*Q`>l0?8FQ<^uN#U|q9 zY)UE^^vT(Dl!f6Sb3@G{&p%;U!3>(oATzE36t2SX-R&2i=;)5GOQf(P52aMPTUUPM z2U?q1v~4#H<4t*T(iXFe4W$RA-&(3&+C=v_qL6CAa`6{OI8uC>vxKA5$>h^?dO9b; zr%%UW(E0EWc=?ZS|I>Z<>D0cQJfBT_@5ko-zjoh$V~hW*`)(5b^JM(T@uo(2`{`4s z>vr4=jy8o%c^PX`a&^zuO)gnl#*C!G6k%!|bH9ztSk<^u5THe_xkk(jydy__UT7tF ziMSOfXd=iYAvwvWQ|uK?qnaweEmt+oI1-r5=tiWmARuPqw9!a6w6c;XH6riEFTEP$F+jl$hk4&0+~M#7}1y z*#c=*#jyr-K=@tIrsMkyBBk&MKO;V zM}`ihTBc0%G%h&8b;~-phAJX(te1_xZ13XgumH-joE4dIQM+mlm zjcZn}i{z;310Z@2D=){+#619mt+aG z@0mK%Bc$m)HJ`_Jf5!LGOsYF3SGREjVrwg<0n5HfZHG8-w)>P zwfX;>CYR)jymLfgZRgLlAJS-NC7(AY4$woAk_eKJe1s&O=kk{2AHd(axhd~?uKAtN zH(dSe?*C-i?*1^8QOYz6!>^V$Wk@QMYQYN~eY|=-ptQ$)VA%ASvG;_@E!D*E144qL z5_nb0yAnsD5E}PaMnnnAb5vqX?lfJ1L?It()4RX9%sE_0swpFxreFo69L!nrQ}b{( zC7DK;{Dd&Mq$r`8D792;BfR)d$I0aFlw47if3;LTc{(MR+bz1JSM+QeOx#p&%*?DOSHO09$Gej9mLt6R-K+4S<@WaTUq--c9hGvy4{p@5 zV9PR-8iyfz1Ad2YeWeH z$#Th(3?V=mT;~Omu-i~UwVtTyPCv!&0Jd9cENrPb;<)Z~{RO1jtwxuayaa_tUSjf> zMpx$XPfgzJiSb{YsQ_>Xh@xV|B2nD4T!6s6fb9*UlI$${Tx!{@xyIy<^W{t?RT;Ag z?w`XwDWqkqm_>!WHn%(L&3dd({7cK`il;*HMBgN`Ds;?2<=$v{$BS4ImLzVLYcyFZ4jx6!YByC*&k@s+wK$*^ z9swVK&kqH88iXOYt7eUA$2A;d0;<$%G4J%>N3O@+$>q(?;mzP-LmJ+bz^Q{XytfOL ztTZ1nZ!9>wB?2PC@-uJN6Y#v*Z0Zfzr&8ve6%B}{CTCNG@gB)v>8^e(Mhj}~R^CY6 zMz8!?akakYIX5U`Q0jHgC!qMAH0p2~7*9xrp^6k=$a{`3aXuI;OEE9d1JOXCWf_6J ziOFwPb>BuxN{u#}sX5nn-Iir+mdutXMkbW;dy>e-QWm_>Wvq2gvURFpXK?~kvnWlU zTEM!w8OsYJFB-r@(hY!6)*#U`-Z;;15!oAJ$R7h!Aym+XU5-5wCQ>{eTU*9hH3yZ0 z(?T(5vGEv8WwH`^{;@FJI5;CcjRSK8evJ3#P>-HByRxL`rP)kiJaxQ`LL+0@>jq&W z&IYq$s48RSZ80}T3B0_B%i4-cL4$(db7i2$*I|fsv}8I1goIN18tlgI^9k6rSkQpw zE4D5j_yR_~CG_kFFm;S(ebUXMGG`?iTh4nl?xue`>hw|a&Iky&mQl%>N;2wiM&5mO zQrzubCw3nt#|{;0&v+fgyo_(ShYn`+d}d6isNq8AIbCSP zwm5-l#o0KIAMB(tNp?l$l|~!GRLU|EFF;N~qudWpxxp14yE4=Qc8O(eMQlzohn*Uq z&90-Mo0Knkk@6xDyo|kHsC{MrbFLv317(Q%!x8;=jjtY{Bpx#E9Tyac4h$b(TAIRv&)gyT^W zNhRi@ppAd!ox$2fqX zD}&vY_$zhV!g5kh%{I5MCgt=i)w&!Gm4CMm4a5~1f2xGYPSb>+WJ{X|Z9yd`aCDy= zv@zT;SZ;k@8L~gE6!GXpOkG9|v9mu|4gN8hF`J?Y)__v%mfNcR)I0yBsJ= zjNx|R!xVR@rmV_r!0nx;=3HOoImB-zWsiIs6%pw0HP{KVYo24kHJVSw&L{3|VdW+J z5pPNJnjQ#Z*>v({7vK2HDm_2z5B0uf@SxFrGMswFYQ&OLrRMz}g`CQEQBQzp zx^iORQCpR{7?&mi5(HOKen`PNm ztoMG4xLJ63BOu-jikD5IN)24Xw9z!ONepNOi|z3@v?QBm&Fm7kwjVGpKpBUZwze$0 zrk5HmF}WV?j(4T;HC>u?8{@0Mgq+jp@c1-JGM?O_W_U`vAPHsrqu*b#Ndv5yz@x~b*Lvj&`^Z`eSEE1;Cg>gr)H*?p{qq%NL;pq9hMw~Q* zA=hM$YvZQ5b@q{cuk9WmiSO&%;joM7`)y?mYu32Opjh{ChmVbwW}-s+$&(TAo{9N+ z!_5Ya25h3HBdng#vr!u?+=%ocRwrk~Y$0pa+G#=)2zvt;o~%W>@mtS@9~yJl!Z$85 z*u>ZOG|Ov^Hg4Y9&6@Srxf_Yz)Q110HS%HDK1s(8vLm1}-REKNiYhOjU z5e{SrHrdoX$unVoF%6;RNYKeFX>o(34eF}G4b zY`1UP*g{UvbCh6AO6!V=T^{w38SgVJ<#Nf>n0F#Gs*T4KJ7E~<9FG!kx1F$ypuNn%w3xxr;Nnwd+wi6z7Yh(2Bkry`zbHnzd*?12mtc)a1EZOm}RSYepE+ zIQ9%+6OLo;)}8O-|K_#lj+y6%y<+x#J4mxfQ@qIlf2Wi}9?v_vYNUa;1~18+UX5~u zA>=+JT!&%WWe6DDpqW7!zK`0>5F>tOI!Y=9dWv={S~6utRBSs`1Eoo!7Fl)CMT+f?Zz;A1f{yqFR3EoP5^jua&8j#O$KZARddEM;7`ZFeu z;!dUjH?#(tF#<4w<|Kx+I!5==YVe)5TSnduC{6sJ)35IUb}N-O{7)=gvuwgkjgf3f zBEI`}h&TOMr0#*1tp!aO{{P(tds_gEsCEm~n55CH%4Z_qu?TCwARSBSKaB<0T^2`# zE7#FcF6A=#ACbR{33T3DJ9XK?ga|z(et~V9YDUOP;L6@jxF@NZleR8ywxUR@jZkA zy0O{DooeOR;AcJF6XiZ2%&nR2gfMI11IW89I_WqsA!`Yk3eqt*+;O9&5dk;M-PeSV zKEiIh1monjC^av*Lcu~-rAZM8h-gx(6DlH`0x(K)&eR97;Ic9ff~Fg6w1wrF_P!T)$VwG~(%YE0M6V+mfg6na&V~jJQ7|&6c=+bfBqR z6#=+fhf0`yTXWteAPP{RvK03=->Vm4GI_lvHv@ckYn^Y1e{5Q}DFL@h;3N`dTe_G- zV77IZ6GtPLbw-M)Dx__%`G#>#Hadgs8=0pu3}x5zLxLn;3gq-yBSAi5l2JHP!6LV! zCM4X?@3Y;SLN>KAIj8o3MGg_%u48CaensFg8YDEwD*}Wxko&Brl}34M1VRg|?RM7p zEK~X`$}zd2RTwt-H8ogvWerLM1{gHC-QHkx2;@7OMh@9G@Ce>?I5fA+X=hOrPR-K0 z-sY_ZUm1zpgR}2Anmb#h*GD2#V-#nBPPrj%(vmiBNt+qciau%0+BC;u+{r%rD-w8AH3UReZ&H-fKcjoWS8zTQQoKBu z2}}-@pLv6z(IY{%bPykQ5BZG@Q->K=J8S@%RylR57lNDt0rtVnZi z?ad~zWW6Bf@hMLHiA)86%%**62ldpzk#tkHBDDc#OcEd@oLCt<02w=O0l8h%AF>DI zBL`qia8I68G2)xwBL=H4yHvW(v%lL7y_kgOc0~(u>mIrz%1|?7c45-J^!9* zw%vldJ*a$=TqJh^vBI6(Go3uTt+bZKcFUtxCX#GG=@~pMxMn}{HQXjzhD5|`*#wo*$Nsipc-t4Vc$hZ2Z*V`1@NyS0xR zd`p=0N))MFxm<_=rS{oXw^AG0un9-OP090F(4SL6e|7le0I9BUy8ijag)=@eh{2_j zS|&2@X8HSfVK_kTlUa7Hmt`D4KF03rIKbPj=#65Mk!ngkyjVN}FS;G?Pk4S4V6vic zu2ASE@6aNx+il{+dl;g@YP%g&7;ilORJgRmToiYKlbnEC0~{3ZZ=O+m?6B&fh%2|} zCuBD5Bz<*82SWjIRAI}Xd%LnSXKc4ybA>g998$R|xcdGPPs5Y~Q^45CjdQWla%s$+ zR&XAr^l#cqIViD@S1+IWtUgfIqtw{;yN(Qa1OT@nj626Le*~Fj)6+F7Fc~CK4}tNE z498mP0|ao#h&qRpW*`Y|!qP<{7G_PKE4FaQmOAF}3^WTwggS4|hUVQ)Zo6G)yYek= zltj&aiy$SDzuke7b|y9+7hc)))KSY#^A&++_eHY@DA8h&UR{5$%xZLKfxC^%1M{2#{ zI+LlXwXnA!TIO8u2o}+(?EQ8!R$geW#4QAw0%(;v8vyXDgWXA*^WZbAux0r-4eH`D7*MiR|#nGI}5~TEi)^ zq8~-5Xz}E7v?FI)g4*SEVD-kMp+2nT;vQAqJM(f$3vxx1+67?DJ8z`TC3;ffx`SE2 z>nyHU^MfDz$HMpX@kd5V-#R#}bA%MO1suja$S6>{XYc(OhRB>${4b8Tot$(Ixb4{R z{bU|)l6elEz%cHh5$71+a}(|c%Qgq8;jDk|W_p0%*&Kj@l@-1`T5?sw$MowV9*anI zP!^3i-WXP+59U87?;TjoH8MGS*uN>HhM&2?dolcH;Cy))iqST!gq!S+8Xi3Fn-XzB@y?j}k)HVY} z!wvny-5ti=B)404n)Ak{y5;-C+DmowL4i(^+ch1IuD_d)uJ@DN*2Llav&r=o_jB6T zhjZGN=7<+b>3(3qMglY3{EkBAk1_4!rror;X(#w*GM{d@sWB=O$ebDyp8{7=pR1DZ z<*K9}2Vf0XSsrn;$=rbfpRqDCvVOLcv9j?XsAr_vV+kvbja==A%Pt`bx)U&)kXF#U}tsJk6KjwF`G?e2)+VfOOsXiTxBPR;@~j^w4X%X%jF)A zCsVw0R^dP$mp0y%Hb)r-NPAw_&UM57bVKi(J$Yr%JM=z)nmc^{;lLRB>F#DIwK--# zhcmaWTsyXS&|uhRz&v&iZUPX2u~yvaH;%dY54t{xqS|NAsK>)6s)6?&VoBCW9d#F9_+pLHo=^0yM)%Rg;NyZ*!z5kx3b`!9IZ~$Ed1tC`CSnyumPSy1btM3 zyp$GtE6fi*z_$wx+4OrWXU=Q1l{>!#WK$u()2F3ze z0Y4uEX+g$VB|?CN(uHcuX-Dg4sqxtSH< z#x?HddwuLgzpORVJ5(h}+4H!XpZTcB%0!H4MM}D=8{H-PS<+ZI1%PP6?({D;Pn?T&%_{)_&}Q{throw TypeError(e)};var _n=(e,t,n)=>t in e?cn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var de=(e,t,n)=>_n(e,typeof t!="symbol"?t+"":t,n),Ke=(e,t,n)=>t.has(e)||wt("Cannot "+n);var p=(e,t,n)=>(Ke(e,t,"read from private field"),n?n.call(e):t.get(e)),F=(e,t,n)=>t.has(e)?wt("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),z=(e,t,n,r)=>(Ke(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),K=(e,t,n)=>(Ke(e,t,"access private method"),n);var vn=Array.isArray,dn=Array.prototype.indexOf,Ee=Array.prototype.includes,ar=Array.from,lr=Object.defineProperty,Re=Object.getOwnPropertyDescriptor,pn=Object.getOwnPropertyDescriptors,hn=Object.prototype,wn=Array.prototype,kt=Object.getPrototypeOf,yt=Object.isExtensible;const yn=()=>{};function or(e){return e()}function En(e){for(var t=0;t{e=r,t=s});return{promise:n,resolve:e,reject:t}}function ur(e,t){if(Array.isArray(e))return e;if(t===void 0||!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const A=2,De=4,Ie=8,Dt=1<<24,G=16,H=32,ve=64,mn=128,P=512,g=1024,R=2048,Y=4096,j=8192,$=16384,oe=32768,je=65536,Et=1<<17,It=1<<18,Pe=1<<19,Pt=1<<20,cr=1<<25,ue=65536,$e=1<<21,st=1<<22,Z=1<<23,ae=Symbol("$state"),_r=Symbol("legacy props"),vr=Symbol(""),ne=new class extends Error{constructor(){super(...arguments);de(this,"name","StaleReactionError");de(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};var Nt;const pr=!!((Nt=globalThis.document)!=null&&Nt.contentType)&&globalThis.document.contentType.includes("xml"),Ue=3,Ct=8;function gn(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function hr(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function Tn(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function bn(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function An(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Sn(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function wr(){throw new Error("https://svelte.dev/e/hydration_failed")}function yr(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Rn(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function On(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Nn(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Er(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const mr=1,gr=2,Tr=4,br=8,Ar=16,Sr=1,Rr=2,Or=4,Nr=8,kr=16,xr=1,Dr=2,kn="[",xn="[!",Ir="[?",Dn="]",ft={},T=Symbol(),In="http://www.w3.org/1999/xhtml";function it(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function Pr(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Cr(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let J=!1;function Fr(e){J=e}let m;function me(e){if(e===null)throw it(),ft;return m=e}function Mr(){return me(ee(m))}function Lr(e){if(J){if(ee(m)!==null)throw it(),ft;m=e}}function jr(e=1){if(J){for(var t=e,n=m;t--;)n=ee(n);m=n}}function Yr(e=!0){for(var t=0,n=m;;){if(n.nodeType===Ct){var r=n.data;if(r===Dn){if(t===0)return n;t-=1}else(r===kn||r===xn||r[0]==="["&&!isNaN(Number(r.slice(1))))&&(t+=1)}var s=ee(n);e&&n.remove(),n=s}}function Hr(e){if(!e||e.nodeType!==Ct)throw it(),ft;return e.data}function Ft(e){return e===this.v}function Pn(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function Mt(e){return!Pn(e,this.v)}let Be=!1;function qr(){Be=!0}let S=null;function Ye(e){S=e}function Vr(e,t=!1,n){S={p:S,i:!1,c:null,e:null,s:e,x:null,l:Be&&!t?{s:null,u:null,$:[]}:null}}function Ur(e){var t=S,n=t.e;if(n!==null){t.e=null;for(var r of n)Jt(r)}return t.i=!0,S=t.p,{}}function Ce(){return!Be||S!==null&&S.l===null}let re=[];function Lt(){var e=re;re=[],En(e)}function mt(e){if(re.length===0&&!Oe){var t=re;queueMicrotask(()=>{t===re&&Lt()})}re.push(e)}function Cn(){for(;re.length>0;)Lt()}function Fn(e){var t=w;if(t===null)return _.f|=Z,e;if((t.f&oe)===0&&(t.f&De)===0)throw e;He(e,t)}function He(e,t){for(;t!==null;){if((t.f&mn)!==0){if((t.f&oe)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Mn=-7169;function E(e,t){e.f=e.f&Mn|t}function at(e){(e.f&P)!==0||e.deps===null?E(e,g):E(e,Y)}function jt(e){if(e!==null)for(const t of e)(t.f&A)===0||(t.f&ue)===0||(t.f^=ue,jt(t.deps))}function Ln(e,t,n){(e.f&R)!==0?t.add(e):(e.f&Y)!==0&&n.add(e),jt(e.deps),E(e,g)}const Me=new Set;let d=null,gt=null,b=null,N=[],Ge=null,Ze=!1,Oe=!1;var pe,he,fe,we,ke,xe,ie,U,ye,D,We,Je,Qe,Yt;const dt=class dt{constructor(){F(this,D);de(this,"current",new Map);de(this,"previous",new Map);F(this,pe,new Set);F(this,he,new Set);F(this,fe,0);F(this,we,0);F(this,ke,null);F(this,xe,new Set);F(this,ie,new Set);F(this,U,new Map);de(this,"is_fork",!1);F(this,ye,!1)}skip_effect(t){p(this,U).has(t)||p(this,U).set(t,{d:[],m:[]})}unskip_effect(t){var n=p(this,U).get(t);if(n){p(this,U).delete(t);for(var r of n.d)E(r,R),B(r);for(r of n.m)E(r,Y),B(r)}}process(t){var s;N=[],this.apply();var n=[],r=[];for(const f of t)K(this,D,Je).call(this,f,n,r);if(K(this,D,We).call(this)){K(this,D,Qe).call(this,r),K(this,D,Qe).call(this,n);for(const[f,a]of p(this,U))Ut(f,a)}else{for(const f of p(this,pe))f();p(this,pe).clear(),p(this,fe)===0&&K(this,D,Yt).call(this),gt=this,d=null,Tt(r),Tt(n),gt=null,(s=p(this,ke))==null||s.resolve()}b=null}capture(t,n){n!==T&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&Z)===0&&(this.current.set(t,t.v),b==null||b.set(t,t.v))}activate(){d=this,this.apply()}deactivate(){d===this&&(d=null,b=null)}flush(){if(this.activate(),N.length>0){if(Ht(),d!==null&&d!==this)return}else p(this,fe)===0&&this.process([]);this.deactivate()}discard(){for(const t of p(this,he))t(this);p(this,he).clear()}increment(t){z(this,fe,p(this,fe)+1),t&&z(this,we,p(this,we)+1)}decrement(t){z(this,fe,p(this,fe)-1),t&&z(this,we,p(this,we)-1),!p(this,ye)&&(z(this,ye,!0),mt(()=>{z(this,ye,!1),K(this,D,We).call(this)?N.length>0&&this.flush():this.revive()}))}revive(){for(const t of p(this,xe))p(this,ie).delete(t),E(t,R),B(t);for(const t of p(this,ie))E(t,Y),B(t);this.flush()}oncommit(t){p(this,pe).add(t)}ondiscard(t){p(this,he).add(t)}settled(){return(p(this,ke)??z(this,ke,xt())).promise}static ensure(){if(d===null){const t=d=new dt;Me.add(d),Oe||mt(()=>{d===t&&t.flush()})}return d}apply(){}};pe=new WeakMap,he=new WeakMap,fe=new WeakMap,we=new WeakMap,ke=new WeakMap,xe=new WeakMap,ie=new WeakMap,U=new WeakMap,ye=new WeakMap,D=new WeakSet,We=function(){return this.is_fork||p(this,we)>0},Je=function(t,n,r){t.f^=g;for(var s=t.first;s!==null;){var f=s.f,a=(f&(H|ve))!==0,l=a&&(f&g)!==0,i=l||(f&j)!==0||p(this,U).has(s);if(!i&&s.fn!==null){a?s.f^=g:(f&De)!==0?n.push(s):Fe(s)&&((f&G)!==0&&p(this,ie).add(s),be(s));var o=s.first;if(o!==null){s=o;continue}}for(;s!==null;){var c=s.next;if(c!==null){s=c;break}s=s.parent}}},Qe=function(t){for(var n=0;n1){this.previous.clear();var t=b,n=!0;for(const f of Me){if(f===this){n=!1;continue}const a=[];for(const[i,o]of this.current){if(f.current.has(i))if(n&&o!==f.current.get(i))f.current.set(i,o);else continue;a.push(i)}if(a.length===0)continue;const l=[...f.current.keys()].filter(i=>!this.current.has(i));if(l.length>0){var r=N;N=[];const i=new Set,o=new Map;for(const c of a)qt(c,l,i,o);if(N.length>0){d=f,f.apply();for(const c of N)K(s=f,D,Je).call(s,c,[],[]);f.deactivate()}N=r}}d=null,b=t}Me.delete(this)};let ge=dt;function jn(e){var t=Oe;Oe=!0;try{for(var n;;){if(Cn(),N.length===0&&(d==null||d.flush(),N.length===0))return Ge=null,n;Ht()}}finally{Oe=t}}function Ht(){Ze=!0;var e=null;try{for(var t=0;N.length>0;){var n=ge.ensure();if(t++>1e3){var r,s;Yn()}n.process(N),W.clear()}}finally{N=[],Ze=!1,Ge=null}}function Yn(){try{Sn()}catch(e){He(e,Ge)}}let M=null;function Tt(e){var t=e.length;if(t!==0){for(var n=0;n0)){W.clear();for(const s of M){if((s.f&($|j))!==0)continue;const f=[s];let a=s.parent;for(;a!==null;)M.has(a)&&(M.delete(a),f.push(a)),a=a.parent;for(let l=f.length-1;l>=0;l--){const i=f[l];(i.f&($|j))===0&&be(i)}}M.clear()}}M=null}}function qt(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const f=s.f;(f&A)!==0?qt(s,t,n,r):(f&(st|G))!==0&&(f&R)===0&&Vt(s,t,r)&&(E(s,R),B(s))}}function Vt(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Ee.call(t,s))return!0;if((s.f&A)!==0&&Vt(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function B(e){var t=Ge=e,n=t.b;if(n!=null&&n.is_pending&&(e.f&(De|Ie|Dt))!==0&&(e.f&oe)===0){n.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var r=t.f;if(Ze&&t===w&&(r&G)!==0&&(r&It)===0&&(r&oe)!==0)return;if((r&(ve|H))!==0){if((r&g)===0)return;t.f^=g}}N.push(t)}function Ut(e,t){if(!((e.f&H)!==0&&(e.f&g)!==0)){(e.f&R)!==0?t.d.push(e):(e.f&Y)!==0&&t.m.push(e),E(e,g);for(var n=e.first;n!==null;)Ut(n,t),n=n.next}}function Hn(e,t,n,r){const s=Ce()?lt:Bn;var f=e.filter(u=>!u.settled);if(n.length===0&&f.length===0){r(t.map(s));return}var a=w,l=qn(),i=f.length===1?f[0].promise:f.length>1?Promise.all(f.map(u=>u.promise)):null;function o(u){l();try{r(u)}catch(v){(a.f&$)===0&&He(v,a)}et()}if(n.length===0){i.then(()=>o(t.map(s)));return}function c(){l(),Promise.all(n.map(u=>Un(u))).then(u=>o([...t.map(s),...u])).catch(u=>He(u,a))}i?i.then(c):c()}function qn(){var e=w,t=_,n=S,r=d;return function(f=!0){Te(e),Q(t),Ye(n),f&&(r==null||r.activate())}}function et(e=!0){Te(null),Q(null),Ye(null),e&&(d==null||d.deactivate())}function Vn(){var e=w.b,t=d,n=e.is_rendered();return e.update_pending_count(1),t.increment(n),()=>{e.update_pending_count(-1),t.decrement(n)}}function lt(e){var t=A|R,n=_!==null&&(_.f&A)!==0?_:null;return w!==null&&(w.f|=Pe),{ctx:S,deps:null,effects:null,equals:Ft,f:t,fn:e,reactions:null,rv:0,v:T,wv:0,parent:n??w,ac:null}}function Un(e,t,n){w===null&&gn();var s=void 0,f=ut(T),a=!_,l=new Map;return er(()=>{var v;var i=xt();s=i.promise;try{Promise.resolve(e()).then(i.resolve,i.reject).finally(et)}catch(y){i.reject(y),et()}var o=d;if(a){var c=Vn();(v=l.get(o))==null||v.reject(ne),l.delete(o),l.set(o,i)}const u=(y,h=void 0)=>{if(o.activate(),h)h!==ne&&(f.f|=Z,nt(f,h));else{(f.f&Z)!==0&&(f.f^=Z),nt(f,y);for(const[V,O]of l){if(l.delete(V),V===o)break;O.reject(ne)}}c&&c()};i.promise.then(u,y=>u(null,y||"unknown"))}),Qn(()=>{for(const i of l.values())i.reject(ne)}),new Promise(i=>{function o(c){function u(){c===s?i(f):o(s)}c.then(u,u)}o(s)})}function Br(e){const t=lt(e);return rn(t),t}function Bn(e){const t=lt(e);return t.equals=Mt,t}function Gn(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n0&&!zt&&Xn()}return t}function Xn(){zt=!1;for(const e of tt)(e.f&g)!==0&&E(e,Y),Fe(e)&&be(e);tt.clear()}function Xe(e){te(e,e.v+1)}function Kt(e,t){var n=e.reactions;if(n!==null)for(var r=Ce(),s=n.length,f=0;f{if(le===f)return l();var i=_,o=le;Q(null),Ot(f);var c=l();return Q(i),Ot(o),c};return r&&n.set("length",X(e.length)),new Proxy(e,{defineProperty(l,i,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&Rn();var c=n.get(i);return c===void 0?a(()=>{var u=X(o.value);return n.set(i,u),u}):te(c,o.value,!0),!0},deleteProperty(l,i){var o=n.get(i);if(o===void 0){if(i in l){const c=a(()=>X(T));n.set(i,c),Xe(s)}}else te(o,T),Xe(s);return!0},get(l,i,o){var y;if(i===ae)return e;var c=n.get(i),u=i in l;if(c===void 0&&(!u||(y=Re(l,i))!=null&&y.writable)&&(c=a(()=>{var h=Ae(u?l[i]:T),V=X(h);return V}),n.set(i,c)),c!==void 0){var v=Se(c);return v===T?void 0:v}return Reflect.get(l,i,o)},getOwnPropertyDescriptor(l,i){var o=Reflect.getOwnPropertyDescriptor(l,i);if(o&&"value"in o){var c=n.get(i);c&&(o.value=Se(c))}else if(o===void 0){var u=n.get(i),v=u==null?void 0:u.v;if(u!==void 0&&v!==T)return{enumerable:!0,configurable:!0,value:v,writable:!0}}return o},has(l,i){var v;if(i===ae)return!0;var o=n.get(i),c=o!==void 0&&o.v!==T||Reflect.has(l,i);if(o!==void 0||w!==null&&(!c||(v=Re(l,i))!=null&&v.writable)){o===void 0&&(o=a(()=>{var y=c?Ae(l[i]):T,h=X(y);return h}),n.set(i,o));var u=Se(o);if(u===T)return!1}return c},set(l,i,o,c){var ht;var u=n.get(i),v=i in l;if(r&&i==="length")for(var y=o;yX(T)),n.set(y+"",h))}if(u===void 0)(!v||(ht=Re(l,i))!=null&&ht.writable)&&(u=a(()=>X(void 0)),te(u,Ae(o)),n.set(i,u));else{v=u.v!==T;var V=a(()=>Ae(o));te(u,V)}var O=Reflect.getOwnPropertyDescriptor(l,i);if(O!=null&&O.set&&O.set.call(c,o),!v){if(r&&typeof i=="string"){var pt=n.get("length"),ze=Number(i);Number.isInteger(ze)&&ze>=pt.v&&te(pt,ze+1)}Xe(s)}return!0},ownKeys(l){Se(s);var i=Reflect.ownKeys(l).filter(u=>{var v=n.get(u);return v===void 0||v.v!==T});for(var[o,c]of n)c.v!==T&&!(o in l)&&i.push(o);return i},setPrototypeOf(){On()}})}function bt(e){try{if(e!==null&&typeof e=="object"&&ae in e)return e[ae]}catch{}return e}function zr(e,t){return Object.is(bt(e),bt(t))}var At,$n,Xt,$t;function Kr(){if(At===void 0){At=window,$n=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Xt=Re(t,"firstChild").get,$t=Re(t,"nextSibling").get,yt(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),yt(n)&&(n.__t=void 0)}}function qe(e=""){return document.createTextNode(e)}function Ve(e){return Xt.call(e)}function ee(e){return $t.call(e)}function Xr(e,t){if(!J)return Ve(e);var n=Ve(m);if(n===null)n=m.appendChild(qe());else if(t&&n.nodeType!==Ue){var r=qe();return n==null||n.before(r),me(r),r}return t&&ct(n),me(n),n}function $r(e,t=!1){if(!J){var n=Ve(e);return n instanceof Comment&&n.data===""?ee(n):n}if(t){if((m==null?void 0:m.nodeType)!==Ue){var r=qe();return m==null||m.before(r),me(r),r}ct(m)}return m}function Zr(e,t=1,n=!1){let r=J?m:e;for(var s;t--;)s=r,r=ee(r);if(!J)return r;if(n){if((r==null?void 0:r.nodeType)!==Ue){var f=qe();return r===null?s==null||s.after(f):r.before(f),me(f),f}ct(r)}return me(r),r}function Zn(e){e.textContent=""}function Wr(){return!1}function Jr(e,t,n){return document.createElementNS(In,e,void 0)}function ct(e){if(e.nodeValue.length<65536)return;let t=e.nextSibling;for(;t!==null&&t.nodeType===Ue;)t.remove(),e.nodeValue+=t.nodeValue,t=e.nextSibling}function Qr(e){J&&Ve(e)!==null&&Zn(e)}let St=!1;function Wn(){St||(St=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function _t(e){var t=_,n=w;Q(null),Te(null);try{return e()}finally{Q(t),Te(n)}}function es(e,t,n,r=n){e.addEventListener(t,()=>_t(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),Wn()}function Zt(e){w===null&&(_===null&&An(),bn()),_e&&Tn()}function Jn(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function q(e,t,n){var r=w;r!==null&&(r.f&j)!==0&&(e|=j);var s={ctx:S,deps:null,nodes:null,f:e|R|P,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{be(s)}catch(l){throw ce(s),l}else t!==null&&B(s);var f=s;if(n&&f.deps===null&&f.teardown===null&&f.nodes===null&&f.first===f.last&&(f.f&Pe)===0&&(f=f.first,(e&G)!==0&&(e&je)!==0&&f!==null&&(f.f|=je)),f!==null&&(f.parent=r,r!==null&&Jn(f,r),_!==null&&(_.f&A)!==0&&(e&ve)===0)){var a=_;(a.effects??(a.effects=[])).push(f)}return s}function Wt(){return _!==null&&!L}function Qn(e){const t=q(Ie,null,!1);return E(t,g),t.teardown=e,t}function ts(e){Zt();var t=w.f,n=!_&&(t&H)!==0&&(t&oe)===0;if(n){var r=S;(r.e??(r.e=[])).push(e)}else return Jt(e)}function Jt(e){return q(De|Pt,e,!1)}function ns(e){return Zt(),q(Ie|Pt,e,!0)}function rs(e){ge.ensure();const t=q(ve|Pe,e,!0);return(n={})=>new Promise(r=>{n.outro?rr(t,()=>{ce(t),r(void 0)}):(ce(t),r(void 0))})}function ss(e){return q(De,e,!1)}function er(e){return q(st|Pe,e,!0)}function fs(e,t=0){return q(Ie|t,e,!0)}function is(e,t=[],n=[],r=[]){Hn(r,t,n,s=>{q(Ie,()=>e(...s.map(Se)),!0)})}function as(e,t=0){var n=q(G|t,e,!0);return n}function ls(e){return q(H|Pe,e,!0)}function Qt(e){var t=e.teardown;if(t!==null){const n=_e,r=_;Rt(!0),Q(null);try{t.call(null)}finally{Rt(n),Q(r)}}}function vt(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&_t(()=>{s.abort(ne)});var r=n.next;(n.f&ve)!==0?n.parent=null:ce(n,t),n=r}}function tr(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&H)===0&&ce(t),t=n}}function ce(e,t=!0){var n=!1;(t||(e.f&It)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(nr(e.nodes.start,e.nodes.end),n=!0),vt(e,t&&!n),Ne(e,0),E(e,$);var r=e.nodes&&e.nodes.t;if(r!==null)for(const f of r)f.stop();Qt(e);var s=e.parent;s!==null&&s.first!==null&&en(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function nr(e,t){for(;e!==null;){var n=e===t?null:ee(e);e.remove(),e=n}}function en(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function rr(e,t,n=!0){var r=[];tn(e,r,!0);var s=()=>{n&&ce(e),t&&t()},f=r.length;if(f>0){var a=()=>--f||s();for(var l of r)l.out(a)}else s()}function tn(e,t,n){if((e.f&j)===0){e.f^=j;var r=e.nodes&&e.nodes.t;if(r!==null)for(const l of r)(l.is_global||n)&&t.push(l);for(var s=e.first;s!==null;){var f=s.next,a=(s.f&je)!==0||(s.f&H)!==0&&(e.f&G)!==0;tn(s,t,a?n:!1),s=f}}}function os(e){nn(e,!0)}function nn(e,t){if((e.f&j)!==0){e.f^=j,(e.f&g)===0&&(E(e,R),B(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&je)!==0||(n.f&H)!==0;nn(n,s?t:!1),n=r}var f=e.nodes&&e.nodes.t;if(f!==null)for(const a of f)(a.is_global||t)&&a.in()}}function us(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:ee(n);t.append(n),n=s}}let Le=!1,_e=!1;function Rt(e){_e=e}let _=null,L=!1;function Q(e){_=e}let w=null;function Te(e){w=e}let C=null;function rn(e){_!==null&&(C===null?C=[e]:C.push(e))}let k=null,x=0,I=null;function sr(e){I=e}let sn=1,se=0,le=se;function Ot(e){le=e}function fn(){return++sn}function Fe(e){var t=e.f;if((t&R)!==0)return!0;if(t&A&&(e.f&=~ue),(t&Y)!==0){for(var n=e.deps,r=n.length,s=0;se.wv)return!0}(t&P)!==0&&b===null&&E(e,g)}return!1}function an(e,t,n=!0){var r=e.reactions;if(r!==null&&!(C!==null&&Ee.call(C,e)))for(var s=0;s{e.ac.abort(ne)}),e.ac=null);try{e.f|=$e;var c=e.fn,u=c();e.f|=oe;var v=e.deps,y=d==null?void 0:d.is_fork;if(k!==null){var h;if(y||Ne(e,x),v!==null&&x>0)for(v.length=x+k.length,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,e(r=>({...r,connected:!0,error:null}))},n.onmessage=r=>{try{const s=JSON.parse(r.data);e(f=>{if(s.type==="Heartbeat")return{...f,lastHeartbeat:s};const w=[s,...f.events].slice(0,$);return{...f,events:w}})}catch(s){console.warn("[vestige] Failed to parse WebSocket message:",s)}},n.onclose=()=>{e(r=>({...r,connected:!1})),b(u)},n.onerror=()=>{e(r=>({...r,error:"WebSocket connection failed"}))}}catch(r){e(s=>({...s,error:String(r)}))}}function b(i){a&&clearTimeout(a);const u=Math.min(1e3*2**d,3e4);d++,a=setTimeout(()=>m(i),u)}function p(){a&&clearTimeout(a),n==null||n.close(),n=null,o({connected:!1,events:[],lastHeartbeat:null,error:null})}function h(){e(i=>({...i,events:[]}))}return{subscribe:t,connect:m,disconnect:p,clearEvents:h}}const l=S(),y=c(l,t=>t.connected),g=c(l,t=>t.events);c(l,t=>t.lastHeartbeat);const k=c(l,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.memory_count)??0}),M=c(l,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.avg_retention)??0}),T=c(l,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.suppressed_count)??0}),W=c(l,t=>{var o,e;return((e=(o=t.lastHeartbeat)==null?void 0:o.data)==null?void 0:e.uptime_secs)??0});function _(t){if(!Number.isFinite(t)||t<0)return"—";const o=Math.floor(t/86400),e=Math.floor(t%86400/3600),n=Math.floor(t%3600/60),a=Math.floor(t%60);return o>0?e>0?`${o}d ${e}h`:`${o}d`:e>0?n>0?`${e}h ${n}m`:`${e}h`:n>0?a>0?`${n}m ${a}s`:`${n}m`:`${a}s`}export{M as a,g as e,_ as f,y as i,k as m,T as s,W as u,l as w}; diff --git a/apps/dashboard/build/_app/immutable/chunks/XIUN5r_Y.js.br b/apps/dashboard/build/_app/immutable/chunks/XIUN5r_Y.js.br deleted file mode 100644 index c643daa15b24bfcf83beb1443bddab1f87a1a083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmV+v1MB=7tp@-ciLs4}Jq-Fc9BDIE|M|QWr2}wq6rF6U=$Kmr_9j!2w(6r;fRvr$ zvLpVFd(|_1i9|3LrT<3e7#(X_wHm;#30UHSMKOrA5uCHC$ECpx;%IEM%4ZGrOV>7) z@vFSz!Grf*{oVwVyHjW2!u5 ze*B`2(i5%l=kkzEQL|}0p0Hd=$Skic)%bYJO^B{xKAkSx@O&7cUnbSRdzm>u9iJcP zcmDRyf9kc!iP}IURg*csJUTDV{nxOY5*N8q7%aEUbSFRE(#9&seh2rNzexSTHA@NV zYZt$Sq1#2vR{D%M0vjZ&oK?$=8IW(smNf}f)tsw4DvYJl9Bq_x^~ayQ3H7!sFf zAEH0`!__H;7qJwW3`_F~cxCVij$Q$toQq(^yG?ZC^~nNCJ^%2;WKq8#f&S=_JDRRx zSq5*arcVizVANxb0Y9p~>MZ0xw&KHlD!*RtPfcD1kTvUHhsnuf>N1%wqqQES7K{@j z)v&>cU|U^Ci{`exzGYdGzn&bztnGob!vdsU>N(N^otX88DXMQ&H*SQ^98_4^>dH@F zp80xiVJyd^qtU3PV>!XHJv^j}ofeyoMt+SpSizZBFtL&?riZ~QkfMO(I!EFBZ+X40 z86Y5?Z<`l`eP_+D3<26Y!)8qho-c4;QM)aV{fR9JGOz=--K5ceC|V2~k`8l#JOqJF zOJ|#lM5-iZ&5#M~L+lgolMIw(J5Jj@49L?-_lLi`-`$a-D3!KN7H|`!r1oOtmRc1d z9ln46yI%bIS<*jDn50S?8w}WG6eY__rdB8!Oc8EcLu0CiNwru&Y>5FID^isiw-AG4 z8|0lNq!zOH?1I1sq&4yV1If9uKLgix0o=y2%5wr*E8TuNoaA5w$yz<{M8=-L7fAH@ zLB+&whiV}+RnuIh+&fTT8)Gbdd+}}*PUf|Vhr>bh+-t3jmAn8KkAA#-H>}M({x4VO zJ#ZqH2uapvHQ6YU1yL-i2A*xFmRrDQjNQRvs?tZW^wV!2Zm`wcMluO?a4?_>6G@d+ zB}j%a8#ft?2q4YIsG*c<@`SnQgdFVJ$O4SvD`1+98xPRYVc0LzPdBvW+5plt=<-=#jO)8!vwK6l1MOP)Kus=EKoJ?>@{uxnLgO`!BeY+Tp^8H$HP!A{7~{&uhJa2 zz7++i$|8=F{hVHNyQYPZ=mJLPm*?jh8NnNzWUpTn&J5Unh)>xMIH~aQ@DhFPY|_u+ zZYOC=5b~;aU)2BIy(8ut`RYYqy*M7>>+ZY$bp3n0xFDG@`=64uIe+M4*UoixQgNDUIy#hpRVHgbAEzzi+j} z(UmvJQ+9lup M3o|WB7_J8Z0PLo;4gdfE diff --git a/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js b/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js new file mode 100644 index 0000000..1fa46c8 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js @@ -0,0 +1 @@ +import{b as T,m as o,ab as b,E as h,ac as p,ax as v,ad as A,ae as E,v as R,q as l}from"./CvjSAYrz.js";import{B as g}from"./DE4u6cUg.js";function N(t,c,u=!1){o&&b();var n=new g(t),_=u?h:0;function i(a,r){if(o){const e=p(t);var s;if(e===v?s=0:e===A?s=!1:s=parseInt(e.substring(1)),a!==s){var f=E();R(f),n.anchor=f,l(!1),n.ensure(a,r),l(!0);return}}n.ensure(a,r)}T(()=>{var a=!1;c((r,s=0)=>{a=!0,i(s,r)}),a||i(!1,null)},_)}export{N as i}; diff --git a/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.br b/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ea04e43dac4b4136915f901bf9d18f8b082c02e4 GIT binary patch literal 282 zcmV+#0phI&!IJQNy)-dvgGIKNMW}qYy%e zWO9Fsbk*uP2AdjO;{ZxrZ(45&K3C8g+pQrx@R@lywXEs`b}2+nZ+Q{6e*V`QBH1Ey z3y$l6AArUW1W1Jpp*jbYfvE9h+)FWt-Bgc+?Dt*V-2VWOk8>W|ENX@e&``@NU*N?m g#n7rAAlcg%gQ(F??BGr&?yqM=>xb}je|I;Y07DRrF#rGn literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.gz b/apps/dashboard/build/_app/immutable/chunks/ciN1mm2W.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..59ddd4db1ac071a607083e0a156e573b58f646e5 GIT binary patch literal 319 zcmV-F0l@wriwFP!000026IGBgPs1<}g?D~M(xEy_r;td9q0vzl=)lsUl!2*of|I&R z?O;2hBF%qCmkJ@K@9z0M+j{!cS{H^Ql0MquiD6MrYk_OV0cFW-QJ$GS$`9rWrDCqJ zXKeA4(TtU|r&)6Q)E{40@9sM}`dO~8uROA&{&hUB@4EZ)t)3iJXUd?hi8c_h#E#-j z40b**K;*r2ks+hLq8ft0J$1{&BK?bKkm$sqE3jfHt??mJ)Izu>eXc7|MAR=mr3;=` zOHXmO@YG7@)r$$B65ka*IBjakgg_Y+c`CSi#VKm=>=P(27Y%WSrfV88;$DpEJhivs R_Vk$F`~ZD$U=y?f000Eqn63Z- literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js b/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js new file mode 100644 index 0000000..04f8dd3 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js @@ -0,0 +1 @@ +import{b as p,E as t}from"./CvjSAYrz.js";import{B as c}from"./DE4u6cUg.js";function E(r,s,...a){var e=new c(r);p(()=>{const n=s()??null;e.ensure(n,n&&(o=>n(o,...a)))},t)}export{E as s}; diff --git a/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.br b/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.br new file mode 100644 index 0000000000000000000000000000000000000000..76088d77144f85421999986730fbf4e1b20cfc21 GIT binary patch literal 156 zcmV;N0Av3fxd4ES)JFM7MzlDmpHV=`0FNlt)#ccwBTTg_y{G3<=DD_IL5te*q%F=l zJ;>e0w$H5y(ytL0xaWuuYrZhQux9l?Mca9Ie$RiktrpKhcxkL4pYNvK#pRN7e4#RH z)3)uf+u!s`Y0t+{;kf|7>uru1)eTSA8t{IfH$SJ}qcO=ORRxA3V5UtBu~)Ofb%8|A KU;ZlgSkD~pXjAC` literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.gz b/apps/dashboard/build/_app/immutable/chunks/ckF4CxmX.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..1046007600670b1efdd6993589686add41e3d75d GIT binary patch literal 170 zcmV;b09F4ViwFP!000026E)7g3WG2dhT*+e5gg%#nGwPz!*mIv(s.s);if(n){let o=0,t={};const _=h(()=>{let c=!1;const a=s.s;for(const f in a)a[f]!==t[f]&&(t[f]=a[f],c=!0);return c&&o++,o});r=()=>p(_)}e.b.length&&g(()=>{u(s,r),l(e.b)}),i(()=>{const o=m(()=>e.m.map(b));return()=>{for(const t of o)typeof t=="function"&&t()}}),e.a.length&&i(()=>{u(s,r),l(e.a)})}function u(n,s){if(n.l.s)for(const e of n.l.s)p(e);s()}export{x as i}; diff --git a/apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.br b/apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.br deleted file mode 100644 index 0c09cc579fbcfa09dd42a659aaec659e964683e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 308 zcmV-40n7dy{{bM3!nWD-lDDj7TrQGqrs51q?LHr_tC3iu-O z;9R;5@DQgIRaT)@hA;k2@2}fLJfb_CHqodvriM%ZB=jJP*93ugqu}rvk;PX4LqNnI zIxdzpx}Ra3w5#V<$k`U_N9aiZnCvyk#4j%X@uZ?lFnz=}ZteuQE4dvIdzZ4ZXywf% zE+;hd;*o986ji;sT@s*McBSE*XpliB($LQFOJ@DXNu3GFY`{l>>T?CfB1>u&5v-@p zdqj%GOSz0-;_}#C8HlZ7{5BAxY-r~%F31AQa3>~E2tyhNJy{4nxY*4iW8t9vF4^@f zg*63vf{UseR_uLPEIxTP6R;TZE;LWEf-Y`zteXg;)ED!}hbu Gk+}tqkD4U_ diff --git a/apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.gz b/apps/dashboard/build/_app/immutable/chunks/jyeIy8pa.js.gz deleted file mode 100644 index 49a2ff951f97386b9b4208c4cd96c6f4410aa775..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 334 zcmV-U0kQrciwFP!000026J?PxYr`-Qh4=mnIfK!WLrv&X5Z9ql+NN~v5<;*Y$#JnI zW62@K=)V_PO)_+Px_5`Z<6YDBcJR|HD;zuETa+5#qcqszCO%sHh*Dx5rN_@GCwz`_ z40^ELLfn77JZ|i;eh}YoA@yh~-&n)W+)%cLsj|j-=IDTmoM^=;8_hEXgYx5GWUD+I zhyy*HxDyUy*T58QODps=1)09s(~-xyxmQuP{__iR!bxoho@&h+!wM+2dY2LTt={E1 zk3!MHin0~RL}yi=+vO5%0GXEP`5uB2rD&C@{V~t$#2mT90kGvtln?-$WGAAfZZ4JR zL|62@gbQFEx~=A!)y#tb>6O*Y6D=-rE%MxR2mw%u;tFs6!3ziwt{IQqpo1w!CR*X( gMpBWK%$_TdjzduA`QGRG!a?5s0&}P`l>h<&0I{H?{{R30 diff --git a/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.br b/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.br deleted file mode 100644 index 134103c6b6070bf93baee10b48c050846ce022f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 197 zcmV;$06PC0{s2HM3hajCJ5H)d6RH!wKA}CW`ZR7X)vH#s(AcX3w{*A|*y6~a9=w}U zVbjSGALwuiB;h=1>rzRFqL4~SL+kGP!%^<~U*e=K3@GYr3!=b6NYfiW=eCTLONo{+ zye-o%b1VIF7PFtySxq>fLx49?Wtes4&R{Avpn;63s@)2;sy6VP2`St6D@zFBk#H+e z^#_3Dpx?|$oG?aJB}s7@c4dxllx=vI$Jzy106ZEJ)rek!e+#rpcqMGdwHN&WRv=z9 diff --git a/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.gz b/apps/dashboard/build/_app/immutable/chunks/ussr1V5_.js.gz deleted file mode 100644 index 620dc6a4a98b080869ad33a4112103dbec3c291b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200 zcmV;(05|_1iwFP!000026J^ga3&KDQ1>oIZaqS>?P)@`}EJ0KpbS|z^C6$wFPm)wD zw*OshQ3toc`yP+D@)k&*xyo5JT|uFY?PT5TWWVK&y>gtoL1b@1A92{u_kpIfUKDk8 z78fd&Ye_IE5@(+GoRkN#$0JMQF?EHew)GJJ4k1IM(WE+}w&e&w>;+{dLhe)x>bS4P z#*D|B0jk>jrC7o;-0@#6#P*jxGiUe^V3T~e0XssesZy@P$M0S4($Ncd^zu~y0000J Cgk8V@ diff --git a/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js b/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js deleted file mode 100644 index 6d5bb97..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js +++ /dev/null @@ -1 +0,0 @@ -import{n as L,o as D,P as T,g as P,c as B,h as b,v as Y,w as h,D as x,x as M,m as N,y as U,z as w,A as z,B as C,C as $,F as q,S as y,L as F}from"./VE8Jor13.js";import{c as G}from"./AcZBvMXu.js";function H(r,a,t,s){var o;var f=!U||(t&w)!==0,v=(t&M)!==0,E=(t&q)!==0,n=s,c=!0,g=()=>(c&&(c=!1,n=E?N(s):s),n),u;if(v){var O=y in r||F in r;u=((o=L(r,a))==null?void 0:o.set)??(O&&a in r?e=>r[a]=e:void 0)}var _,I=!1;v?[_,I]=G(()=>r[a]):_=r[a],_===void 0&&s!==void 0&&(_=g(),u&&(f&&D(),u(_)));var i;if(f?i=()=>{var e=r[a];return e===void 0?g():(c=!0,e)}:i=()=>{var e=r[a];return e!==void 0&&(n=void 0),e===void 0?n:e},f&&(t&T)===0)return i;if(u){var R=r.$$legacy;return(function(e,S){return arguments.length>0?((!f||!S||R||I)&&u(S?i():e),e):i()})}var l=!1,d=((t&z)!==0?C:$)(()=>(l=!1,i()));v&&P(d);var m=h;return(function(e,S){if(arguments.length>0){const A=S?P(d):f&&v?B(e):e;return b(d,A),l=!0,n!==void 0&&(n=A),e}return Y&&l||(m.f&x)!==0?d.v:P(d)})}export{H as p}; diff --git a/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js.br b/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js.br deleted file mode 100644 index 4f1a9ab..0000000 --- a/apps/dashboard/build/_app/immutable/chunks/ykT2B6d3.js.br +++ /dev/null @@ -1,2 +0,0 @@ - M{2d?$tϲ lqN+QR,Ҩ&F)oek9 d_h>Ǫ뤈ңEd6 g 81D9BOaFD L!AH Mh!O6+Č݉fߞIhy۬Sb4`{}NYl3"R"9!:mJ@}WxY4]+W$-3ǃ4;X}H$%;\ϊ%w,TJͩwύ} $\|@U[Ul "%YU*z5 @Eb`CUm$-cG,u!2Q8a -t/ֲ[x4ǚ]>76 DUYhd[t:43e-jP' hv]5oxr 27g3m"ŸW_όWb A7UwlD0lp{_h&sEzjchG?~~^ITWvey+C){F8|MTH3aO$JH%(YLxi8O1+@V zJfeo7Qs;erDD`t+8!jngcSH#T@*YG=LB#GZ89odyphT}kGDx+b#?bUPT=LpUjZ?Jk zk)>ZVK+b341CiO(Sr#;TI(J51J}h;GK>(LZg|<7;yjR?Z53Ieu2Rjj+(J8yTeiPi! z==6b)LF`B$dNUT%jG6lhrAqgA4Kq#vsa6VNr4FQo86w&oQt=%Jsr@_aURyQ4&{bU+ zNBEosjW#N3l{+sT*YG5pGAVnYs`0nv3CJkm)3h)>~I-rYeV-Hc7SE8wCJv+_vttZLiz*6qTxB8l-@pM$+h|fL$MICYziy zK&4*ozJq;lfHqpNXDQgAl)8d>AJ~!?|F)CH@V6D*M7b#|XUx+;B)nLuCYXRmPrn8B z2y+@EWsi.map(i=>d[i]); -var Q=r=>{throw TypeError(r)};var X=(r,t,e)=>t.has(r)||Q("Cannot "+e);var m=(r,t,e)=>(X(r,t,"read from private field"),e?e.call(r):t.get(r)),G=(r,t,e)=>t.has(r)?Q("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),W=(r,t,e,n)=>(X(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e);import{T as Z,a7 as ut,b as lt,E as mt,a8 as _t,ab as dt,ac as ft,ad as $,a9 as ht,aj as vt,h as F,L as gt,g as v,b7 as Et,a3 as yt,a2 as pt,p as Pt,H as Rt,I as bt,R as Ot,f as L,d as Tt,a as At,s as z,e as Lt,r as wt,t as It,u as V}from"../chunks/VE8Jor13.js";import{h as kt,m as Dt,u as xt,s as Vt}from"../chunks/DHnEMX8z.js";import"../chunks/Bzak7iHL.js";import{o as St}from"../chunks/DWVWfZUn.js";import{i as B}from"../chunks/JkhlGLjU.js";import{a as y,c as k,f as et,t as jt}from"../chunks/7UNxJI5L.js";import{B as Ct}from"../chunks/BYWGnCkZ.js";import{b as S}from"../chunks/DHakDdar.js";import{p as q}from"../chunks/ykT2B6d3.js";function j(r,t,e){var n;Z&&(n=vt,ut());var o=new Ct(r);lt(()=>{var l=t()??null;if(Z){var s=_t(n),a=s===ht,i=l!==null;if(a!==i){var P=dt();ft(P),o.anchor=P,$(!1),o.ensure(l,l&&(c=>e(c,l))),$(!0);return}}o.ensure(l,l&&(c=>e(c,l)))},mt)}function Bt(r){return class extends qt{constructor(t){super({component:r,...t})}}}var p,d;class qt{constructor(t){G(this,p);G(this,d);var l;var e=new Map,n=(s,a)=>{var i=pt(a,!1,!1);return e.set(s,i),i};const o=new Proxy({...t.props||{},$$events:{}},{get(s,a){return v(e.get(a)??n(a,Reflect.get(s,a)))},has(s,a){return a===gt?!0:(v(e.get(a)??n(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,i){return F(e.get(a)??n(a,i),i),Reflect.set(s,a,i)}});W(this,d,(t.hydrate?kt:Dt)(t.component,{target:t.target,anchor:t.anchor,props:o,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((l=t==null?void 0:t.props)!=null&&l.$$host)||t.sync===!1)&&Et(),W(this,p,o.$$events);for(const s of Object.keys(m(this,d)))s==="$set"||s==="$destroy"||s==="$on"||yt(this,s,{get(){return m(this,d)[s]},set(a){m(this,d)[s]=a},enumerable:!0});m(this,d).$set=s=>{Object.assign(o,s)},m(this,d).$destroy=()=>{xt(m(this,d))}}$set(t){m(this,d).$set(t)}$on(t,e){m(this,p)[t]=m(this,p)[t]||[];const n=(...o)=>e.call(this,...o);return m(this,p)[t].push(n),()=>{m(this,p)[t]=m(this,p)[t].filter(o=>o!==n)}}$destroy(){m(this,d).$destroy()}}p=new WeakMap,d=new WeakMap;const Ft="modulepreload",Ht=function(r,t){return new URL(r,t).href},tt={},_=function(t,e,n){let o=Promise.resolve();if(e&&e.length>0){let s=function(c){return Promise.all(c.map(g=>Promise.resolve(g).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};const a=document.getElementsByTagName("link"),i=document.querySelector("meta[property=csp-nonce]"),P=(i==null?void 0:i.nonce)||(i==null?void 0:i.getAttribute("nonce"));o=s(e.map(c=>{if(c=Ht(c,n),c in tt)return;tt[c]=!0;const g=c.endsWith(".css"),R=g?'[rel="stylesheet"]':"";if(!!n)for(let b=a.length-1;b>=0;b--){const u=a[b];if(u.href===c&&(!g||u.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${c}"]${R}`))return;const E=document.createElement("link");if(E.rel=g?"stylesheet":Ft,g||(E.as="script"),E.crossOrigin="",E.href=c,P&&E.setAttribute("nonce",P),document.head.appendChild(E),g)return new Promise((b,u)=>{E.addEventListener("load",b),E.addEventListener("error",()=>u(new Error(`Unable to preload CSS for ${c}`)))})}))}function l(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return o.then(s=>{for(const a of s||[])a.status==="rejected"&&l(a.reason);return t().catch(l)})},ae={};var Nt=et('

'),Ut=et(" ",1);function Yt(r,t){Pt(t,!0);let e=q(t,"components",23,()=>[]),n=q(t,"data_0",3,null),o=q(t,"data_1",3,null),l=q(t,"data_2",3,null);Rt(()=>t.stores.page.set(t.page)),bt(()=>{t.stores,t.page,t.constructors,e(),t.form,n(),o(),l(),t.stores.page.notify()});let s=z(!1),a=z(!1),i=z(null);St(()=>{const u=t.stores.page.subscribe(()=>{v(s)&&(F(a,!0),Ot().then(()=>{F(i,document.title||"untitled page",!0)}))});return F(s,!0),u});const P=V(()=>t.constructors[2]);var c=Ut(),g=L(c);{var R=u=>{const O=V(()=>t.constructors[0]);var T=k(),D=L(T);j(D,()=>v(O),(A,w)=>{S(w(A,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(f,Wt)=>{var K=k(),at=L(K);{var st=I=>{const H=V(()=>t.constructors[1]);var x=k(),N=L(x);j(N,()=>v(H),(U,Y)=>{S(Y(U,{get data(){return o()},get form(){return t.form},get params(){return t.page.params},children:(h,zt)=>{var M=k(),ot=L(M);j(ot,()=>v(P),(it,ct)=>{S(ct(it,{get data(){return l()},get form(){return t.form},get params(){return t.page.params}}),C=>e()[2]=C,()=>{var C;return(C=e())==null?void 0:C[2]})}),y(h,M)},$$slots:{default:!0}}),h=>e()[1]=h,()=>{var h;return(h=e())==null?void 0:h[1]})}),y(I,x)},nt=I=>{const H=V(()=>t.constructors[1]);var x=k(),N=L(x);j(N,()=>v(H),(U,Y)=>{S(Y(U,{get data(){return o()},get form(){return t.form},get params(){return t.page.params}}),h=>e()[1]=h,()=>{var h;return(h=e())==null?void 0:h[1]})}),y(I,x)};B(at,I=>{t.constructors[2]?I(st):I(nt,!1)})}y(f,K)},$$slots:{default:!0}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),y(u,T)},J=u=>{const O=V(()=>t.constructors[0]);var T=k(),D=L(T);j(D,()=>v(O),(A,w)=>{S(w(A,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),y(u,T)};B(g,u=>{t.constructors[1]?u(R):u(J,!1)})}var E=Tt(g,2);{var b=u=>{var O=Nt(),T=Lt(O);{var D=A=>{var w=jt();It(()=>Vt(w,v(i))),y(A,w)};B(T,A=>{v(a)&&A(D)})}wt(O),y(u,O)};B(E,u=>{v(s)&&u(b)})}y(r,c),At()}const se=Bt(Yt),ne=[()=>_(()=>import("../nodes/0.Bfsm2nvh.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),import.meta.url),()=>_(()=>import("../nodes/1.ClSH3vNb.js"),__vite__mapDeps([21,1,19,3,4,5,22,17,2,15,16]),import.meta.url),()=>_(()=>import("../nodes/2.BFaWefTK.js"),__vite__mapDeps([23,1,3,5,9,7]),import.meta.url),()=>_(()=>import("../nodes/3.BbrO3ed8.js"),__vite__mapDeps([24,1,19,3,2,22,16,15,17]),import.meta.url),()=>_(()=>import("../nodes/4.BEP4iikl.js"),__vite__mapDeps([25,1,3,4,5,6,7,8,10,11,26,12,27]),import.meta.url),()=>_(()=>import("../nodes/5.BgcStf4T.js"),__vite__mapDeps([28,1,19,3,4,5,6,7,8,26,22,14,15,18,29,10,11,30,31]),import.meta.url),()=>_(()=>import("../nodes/6.QRT_dh4Q.js"),__vite__mapDeps([32,1,2,3,4,5,6,7,8,10,11,26,12,33,14,15,17,13,30,29,19,22,27,18]),import.meta.url),()=>_(()=>import("../nodes/7.B1rI2ZuC.js"),__vite__mapDeps([34,1,2,3,4,5,6,7,8,11,27]),import.meta.url),()=>_(()=>import("../nodes/8.BmBiit5q.js"),__vite__mapDeps([35,1,2,3,4,5,6,7,8,10,11,26,12,33,27,29]),import.meta.url),()=>_(()=>import("../nodes/9.Ds9IBqJA.js"),__vite__mapDeps([36,1,2,3,4,5,6,7,8,11,26,14,15,27,18]),import.meta.url),()=>_(()=>import("../nodes/10.BXBzm8vP.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,26,27]),import.meta.url),()=>_(()=>import("../nodes/11.BOa24N9o.js"),__vite__mapDeps([38,1,2,3,4,5,6,7,8,26,33,27,29]),import.meta.url)],oe=[],ie={"/":[3],"/(app)/explore":[4,[2]],"/(app)/feed":[5,[2]],"/(app)/graph":[6,[2]],"/(app)/intentions":[7,[2]],"/(app)/memories":[8,[2]],"/(app)/settings":[9,[2]],"/(app)/stats":[10,[2]],"/(app)/timeline":[11,[2]]},rt={handleError:(({error:r})=>{console.error(r)}),reroute:(()=>{}),transport:{}},Gt=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.decode])),ce=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.encode])),ue=!1,le=(r,t)=>Gt[r](t);export{le as decode,Gt as decoders,ie as dictionary,ce as encoders,ue as hash,rt as hooks,ae as matchers,ne as nodes,se as root,oe as server_loads}; diff --git a/apps/dashboard/build/_app/immutable/entry/app.B1RqXwG0.js.br b/apps/dashboard/build/_app/immutable/entry/app.B1RqXwG0.js.br deleted file mode 100644 index 7e99144ea966da12d94c4f886de46ae1cbf5a290..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3150 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 Sq^P|9um1sn3{zb0A^-rd)ZMWF diff --git a/apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js b/apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js new file mode 100644 index 0000000..2ef6e20 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js @@ -0,0 +1,2 @@ +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.CFcocLwc.js","../chunks/Bzak7iHL.js","../chunks/CNjeV5xa.js","../chunks/CvjSAYrz.js","../chunks/FzvEaXMa.js","../chunks/BsvCUYx-.js","../chunks/ciN1mm2W.js","../chunks/DE4u6cUg.js","../chunks/DTnG8poT.js","../chunks/ckF4CxmX.js","../chunks/CNfQDikv.js","../chunks/DPl3NjBv.js","../chunks/BKuqSeVd.js","../chunks/CVpUe0w3.js","../chunks/D3XWCg9-.js","../chunks/D81f-o_I.js","../chunks/DfQhL-hC.js","../chunks/S0ILvWpb.js","../chunks/DJWRm1Ki.js","../chunks/CtkE7HV2.js","../chunks/Bz1l2A_1.js","../chunks/Bhad70Ss.js","../chunks/Casl2yrL.js","../chunks/DzfRjky4.js","../chunks/DNjM5a-l.js","../assets/0.IIz8MMYb.css","../nodes/1.--qOmhsd.js","../nodes/2.CD5F7bS_.js","../nodes/3.D16O8s7t.js","../nodes/4.BSlP3-UA.js","../chunks/B_YDQCB6.js","../nodes/5.B300rRjT.js","../chunks/DMu1Byux.js","../assets/5.DQ_AfUnN.css","../nodes/6.DBS_R5Hl.js","../chunks/DObx9JW_.js","../assets/6.BSSBWVKL.css","../nodes/7.br0Vbs-w.js","../assets/7.CCrNEDd3.css","../nodes/8.CDAVQcae.js","../nodes/9.DVbfK-u1.js","../assets/9.BBx09UGv.css","../nodes/10.CPGa_1iF.js","../nodes/11.j3H5l-xO.js","../nodes/12.DZiW_IZ_.js","../nodes/13.DReyqY5Q.js","../assets/13.Bjd0S47S.css","../nodes/14.BpCacSGt.js","../nodes/15.DFbOY736.js","../assets/15.ChjqzJHo.css","../nodes/16.DMIuRZWa.js","../assets/16.BnHgRQtR.css","../nodes/17.PvQmHhRC.js","../nodes/18.Df4fIuu-.js","../nodes/19.CMsn8k5A.js"])))=>i.map(i=>d[i]); +var M=r=>{throw TypeError(r)};var Q=(r,t,e)=>t.has(r)||M("Cannot "+e);var l=(r,t,e)=>(Q(r,t,"read from private field"),e?e.call(r):t.get(r)),H=(r,t,e)=>t.has(r)?M("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(r):t.set(r,e),W=(r,t,e,n)=>(Q(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e);import{m as Z,ab as ut,b as ct,E as _t,ac as lt,ae as dt,v as ft,q as $,ax as vt,w as ht,h as F,X as pt,g as h,bb as gt,a6 as Et,a5 as Pt,p as yt,aA as Rt,aB as Ot,G as bt,f as L,d as At,a as Tt,s as X,e as Lt,r as Dt,u as x,t as It}from"../chunks/CvjSAYrz.js";import{h as Vt,m as wt,u as kt,s as xt}from"../chunks/FzvEaXMa.js";import"../chunks/Bzak7iHL.js";import{o as St}from"../chunks/CNjeV5xa.js";import{i as B}from"../chunks/ciN1mm2W.js";import{a as E,c as V,f as et,t as jt}from"../chunks/BsvCUYx-.js";import{B as Ct}from"../chunks/DE4u6cUg.js";import{b as S}from"../chunks/D3XWCg9-.js";import{p as q}from"../chunks/B_YDQCB6.js";function j(r,t,e){var n;Z&&(n=ht,ut());var i=new Ct(r);ct(()=>{var _=t()??null;if(Z){var s=lt(n),a=s===vt,m=_!==null;if(a!==m){var y=dt();ft(y),i.anchor=y,$(!1),i.ensure(_,_&&(u=>e(u,_))),$(!0);return}}i.ensure(_,_&&(u=>e(u,_)))},_t)}function Bt(r){return class extends qt{constructor(t){super({component:r,...t})}}}var P,d;class qt{constructor(t){H(this,P);H(this,d);var _;var e=new Map,n=(s,a)=>{var m=Pt(a,!1,!1);return e.set(s,m),m};const i=new Proxy({...t.props||{},$$events:{}},{get(s,a){return h(e.get(a)??n(a,Reflect.get(s,a)))},has(s,a){return a===pt?!0:(h(e.get(a)??n(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,m){return F(e.get(a)??n(a,m),m),Reflect.set(s,a,m)}});W(this,d,(t.hydrate?Vt:wt)(t.component,{target:t.target,anchor:t.anchor,props:i,context:t.context,intro:t.intro??!1,recover:t.recover,transformError:t.transformError})),(!((_=t==null?void 0:t.props)!=null&&_.$$host)||t.sync===!1)&>(),W(this,P,i.$$events);for(const s of Object.keys(l(this,d)))s==="$set"||s==="$destroy"||s==="$on"||Et(this,s,{get(){return l(this,d)[s]},set(a){l(this,d)[s]=a},enumerable:!0});l(this,d).$set=s=>{Object.assign(i,s)},l(this,d).$destroy=()=>{kt(l(this,d))}}$set(t){l(this,d).$set(t)}$on(t,e){l(this,P)[t]=l(this,P)[t]||[];const n=(...i)=>e.call(this,...i);return l(this,P)[t].push(n),()=>{l(this,P)[t]=l(this,P)[t].filter(i=>i!==n)}}$destroy(){l(this,d).$destroy()}}P=new WeakMap,d=new WeakMap;const Ft="modulepreload",Gt=function(r,t){return new URL(r,t).href},tt={},o=function(t,e,n){let i=Promise.resolve();if(e&&e.length>0){let s=function(u){return Promise.all(u.map(p=>Promise.resolve(p).then(R=>({status:"fulfilled",value:R}),R=>({status:"rejected",reason:R}))))};const a=document.getElementsByTagName("link"),m=document.querySelector("meta[property=csp-nonce]"),y=(m==null?void 0:m.nonce)||(m==null?void 0:m.getAttribute("nonce"));i=s(e.map(u=>{if(u=Gt(u,n),u in tt)return;tt[u]=!0;const p=u.endsWith(".css"),R=p?'[rel="stylesheet"]':"";if(!!n)for(let O=a.length-1;O>=0;O--){const c=a[O];if(c.href===u&&(!p||c.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${R}`))return;const g=document.createElement("link");if(g.rel=p?"stylesheet":Ft,p||(g.as="script"),g.crossOrigin="",g.href=u,y&&g.setAttribute("nonce",y),document.head.appendChild(g),p)return new Promise((O,c)=>{g.addEventListener("load",O),g.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${u}`)))})}))}function _(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return i.then(s=>{for(const a of s||[])a.status==="rejected"&&_(a.reason);return t().catch(_)})},ae={};var Nt=et('
'),Ut=et(" ",1);function Yt(r,t){yt(t,!0);let e=q(t,"components",23,()=>[]),n=q(t,"data_0",3,null),i=q(t,"data_1",3,null),_=q(t,"data_2",3,null);Rt(()=>t.stores.page.set(t.page)),Ot(()=>{t.stores,t.page,t.constructors,e(),t.form,n(),i(),_(),t.stores.page.notify()});let s=X(!1),a=X(!1),m=X(null);St(()=>{const c=t.stores.page.subscribe(()=>{h(s)&&(F(a,!0),bt().then(()=>{F(m,document.title||"untitled page",!0)}))});return F(s,!0),c});const y=x(()=>t.constructors[2]);var u=Ut(),p=L(u);{var R=c=>{const b=x(()=>t.constructors[0]);var A=V(),w=L(A);j(w,()=>h(b),(T,D)=>{S(D(T,{get data(){return n()},get form(){return t.form},get params(){return t.page.params},children:(f,Wt)=>{var J=V(),at=L(J);{var st=I=>{const G=x(()=>t.constructors[1]);var k=V(),N=L(k);j(N,()=>h(G),(U,Y)=>{S(Y(U,{get data(){return i()},get form(){return t.form},get params(){return t.page.params},children:(v,Xt)=>{var K=V(),nt=L(K);j(nt,()=>h(y),(it,mt)=>{S(mt(it,{get data(){return _()},get form(){return t.form},get params(){return t.page.params}}),C=>e()[2]=C,()=>{var C;return(C=e())==null?void 0:C[2]})}),E(v,K)},$$slots:{default:!0}}),v=>e()[1]=v,()=>{var v;return(v=e())==null?void 0:v[1]})}),E(I,k)},ot=I=>{const G=x(()=>t.constructors[1]);var k=V(),N=L(k);j(N,()=>h(G),(U,Y)=>{S(Y(U,{get data(){return i()},get form(){return t.form},get params(){return t.page.params}}),v=>e()[1]=v,()=>{var v;return(v=e())==null?void 0:v[1]})}),E(I,k)};B(at,I=>{t.constructors[2]?I(st):I(ot,!1)})}E(f,J)},$$slots:{default:!0}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),E(c,A)},z=c=>{const b=x(()=>t.constructors[0]);var A=V(),w=L(A);j(w,()=>h(b),(T,D)=>{S(D(T,{get data(){return n()},get form(){return t.form},get params(){return t.page.params}}),f=>e()[0]=f,()=>{var f;return(f=e())==null?void 0:f[0]})}),E(c,A)};B(p,c=>{t.constructors[1]?c(R):c(z,!1)})}var g=At(p,2);{var O=c=>{var b=Nt(),A=Lt(b);{var w=T=>{var D=jt();It(()=>xt(D,h(m))),E(T,D)};B(A,T=>{h(a)&&T(w)})}Dt(b),E(c,b)};B(g,c=>{h(s)&&c(O)})}E(r,u),Tt()}const se=Bt(Yt),oe=[()=>o(()=>import("../nodes/0.CFcocLwc.js"),__vite__mapDeps([0,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]),import.meta.url),()=>o(()=>import("../nodes/1.--qOmhsd.js"),__vite__mapDeps([26,1,20,3,4,5,18,2,16,17]),import.meta.url),()=>o(()=>import("../nodes/2.CD5F7bS_.js"),__vite__mapDeps([27,1,3,5,9,7]),import.meta.url),()=>o(()=>import("../nodes/3.D16O8s7t.js"),__vite__mapDeps([28,1,20,3,2,17,16,18]),import.meta.url),()=>o(()=>import("../nodes/4.BSlP3-UA.js"),__vite__mapDeps([29,1,2,3,4,5,6,7,10,13,24,19,16,8,30,15,23]),import.meta.url),()=>o(()=>import("../nodes/5.B300rRjT.js"),__vite__mapDeps([31,1,3,4,5,6,7,8,11,12,21,32,10,30,15,16,33]),import.meta.url),()=>o(()=>import("../nodes/6.DBS_R5Hl.js"),__vite__mapDeps([34,1,3,4,5,6,7,8,35,10,11,12,24,21,30,15,16,18,2,36]),import.meta.url),()=>o(()=>import("../nodes/7.br0Vbs-w.js"),__vite__mapDeps([37,1,2,3,4,5,6,7,8,10,13,11,12,21,23,38]),import.meta.url),()=>o(()=>import("../nodes/8.CDAVQcae.js"),__vite__mapDeps([39,1,3,4,5,6,7,8,10,11,12,21,13,24]),import.meta.url),()=>o(()=>import("../nodes/9.DVbfK-u1.js"),__vite__mapDeps([40,1,20,3,4,5,6,7,8,21,12,15,16,19,23,10,11,30,41]),import.meta.url),()=>o(()=>import("../nodes/10.CPGa_1iF.js"),__vite__mapDeps([42,1,2,3,4,5,6,7,8,10,11,12,21,13,32,15,16,18,14,30,23,20,24,19]),import.meta.url),()=>o(()=>import("../nodes/11.j3H5l-xO.js"),__vite__mapDeps([43,1,2,3,4,5,6,7,8,21,12,13,17,16,18,24,23,10,30,15]),import.meta.url),()=>o(()=>import("../nodes/12.DZiW_IZ_.js"),__vite__mapDeps([44,1,2,3,4,5,6,7,8,11,12,24]),import.meta.url),()=>o(()=>import("../nodes/13.DReyqY5Q.js"),__vite__mapDeps([45,1,2,3,4,5,6,7,8,10,11,12,21,13,32,24,23,46]),import.meta.url),()=>o(()=>import("../nodes/14.BpCacSGt.js"),__vite__mapDeps([47,1,2,3,4,5,6,7,8,10,11,12,21]),import.meta.url),()=>o(()=>import("../nodes/15.DFbOY736.js"),__vite__mapDeps([48,1,2,3,4,5,6,7,8,35,10,21,12,13,14,24,11,30,15,16,23,49]),import.meta.url),()=>o(()=>import("../nodes/16.DMIuRZWa.js"),__vite__mapDeps([50,1,2,3,4,5,6,7,8,11,12,24,10,21,30,15,16,23,51]),import.meta.url),()=>o(()=>import("../nodes/17.PvQmHhRC.js"),__vite__mapDeps([52,1,2,3,4,5,6,7,8,11,12,21,15,16,24,19,22,23]),import.meta.url),()=>o(()=>import("../nodes/18.Df4fIuu-.js"),__vite__mapDeps([53,1,2,3,4,5,6,7,8,21,12,24]),import.meta.url),()=>o(()=>import("../nodes/19.CMsn8k5A.js"),__vite__mapDeps([54,1,2,3,4,5,6,7,8,21,12,32,24,23]),import.meta.url)],ne=[],ie={"/":[3],"/(app)/activation":[4,[2]],"/(app)/contradictions":[5,[2]],"/(app)/dreams":[6,[2]],"/(app)/duplicates":[7,[2]],"/(app)/explore":[8,[2]],"/(app)/feed":[9,[2]],"/(app)/graph":[10,[2]],"/(app)/importance":[11,[2]],"/(app)/intentions":[12,[2]],"/(app)/memories":[13,[2]],"/(app)/patterns":[14,[2]],"/(app)/reasoning":[15,[2]],"/(app)/schedule":[16,[2]],"/(app)/settings":[17,[2]],"/(app)/stats":[18,[2]],"/(app)/timeline":[19,[2]]},rt={handleError:(({error:r})=>{console.error(r)}),reroute:(()=>{}),transport:{}},Ht=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.decode])),me=Object.fromEntries(Object.entries(rt.transport).map(([r,t])=>[r,t.encode])),ue=!1,ce=(r,t)=>Ht[r](t);export{ce as decode,Ht as decoders,ie as dictionary,me as encoders,ue as hash,rt as hooks,ae as matchers,oe as nodes,se as root,ne as server_loads}; diff --git a/apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js.br b/apps/dashboard/build/_app/immutable/entry/app.Y1ipb8HW.js.br new file mode 100644 index 0000000000000000000000000000000000000000..cd9b35b64cd1a46b10a94c3642965345ab88e312 GIT binary patch literal 3516 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js b/apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js new file mode 100644 index 0000000..ecb6143 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js @@ -0,0 +1 @@ +import{a as r}from"../chunks/S0ILvWpb.js";import{w as t}from"../chunks/DJWRm1Ki.js";export{t as load_css,r as start}; diff --git a/apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js.br b/apps/dashboard/build/_app/immutable/entry/start.Bjj_Sn2c.js.br new file mode 100644 index 0000000000000000000000000000000000000000..689a89b223ea03576e92ab03ae719603638ae291 GIT binary patch literal 98 zcmV-o0GEab0lxygn309d}0ajT8Qkj#Vm=d2{T&zmqg01kG}*GOi12~C$%{EgG}JCHJ5Exe zEG?I+)O2!wz2U*G_yrVDz+oU9c*sh6I>pq<^OzVUKkzr8JbQspxYd)~FfFjG$|>Jo Q2HVi=tq8D!17&G+0P-_54gdfE diff --git a/apps/dashboard/build/_app/immutable/entry/start.C8fl2m83.js.gz b/apps/dashboard/build/_app/immutable/entry/start.C8fl2m83.js.gz deleted file mode 100644 index f41bf6071e13a2e47f20d9cb88e84e8a69de593e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmV-y0F(b8iwFP!000026U)pk$S*3XPE<%NRw$}XE6UGR($mvV&M3{xF4lMUHucNR zsZ7($Dps=2gs3bBsVqTP=@MF!Se2Ju2v(U|0ajT8Qkj#Vm=d2{T&z{const f=Qe;return{page:{subscribe:f.page.subscribe},navigating:{subscribe:f.navigating.subscribe},updated:f.updated}},Ze={subscribe(f){return Ye().page.subscribe(f)}};var et=b('
');function tt(f){const h=()=>y(he,"$suppressedCount",S),[S,K]=ge();var L=Re(),z=be(L);{var T=C=>{var u=et(),q=n(s(u),2),p=s(q);a(q),a(u),F(()=>v(p,`Actively forgetting ${h()??""} ${h()===1?"memory":"memories"}`)),m(C,u)};M(z,C=>{h()>0&&C(T)})}m(f,L),K()}var at=b('
'),st=b('
'),rt=b(''),nt=b(' '),ot=b(''),it=b('
No matches
'),lt=b('
esc
'),dt=b('
',1);function Et(f,h){je(h,!0);const S=()=>y(Ze,"$page",u),K=()=>y(Je,"$isConnected",u),L=()=>y(Pe,"$memoryCount",u),z=()=>y(Be,"$avgRetention",u),T=()=>y(Ue,"$uptimeSeconds",u),C=()=>y(he,"$suppressedCount",u),[u,q]=ge();let p=X(!1),g=X(""),E=X(void 0);Ne(()=>{xe.connect();function t(e){if((e.metaKey||e.ctrlKey)&&e.key==="k"){e.preventDefault(),c(p,!r(p)),c(g,""),r(p)&&requestAnimationFrame(()=>{var i;return(i=r(E))==null?void 0:i.focus()});return}if(e.key==="Escape"&&r(p)){c(p,!1);return}if(e.target instanceof HTMLInputElement||e.target instanceof HTMLTextAreaElement)return;if(e.key==="/"){e.preventDefault();const i=document.querySelector('input[type="text"]');i==null||i.focus();return}const o={g:"/graph",m:"/memories",t:"/timeline",f:"/feed",e:"/explore",i:"/intentions",s:"/stats"}[e.key.toLowerCase()];o&&!e.metaKey&&!e.ctrlKey&&!e.altKey&&(e.preventDefault(),fe(`${_}${o}`))}return window.addEventListener("keydown",t),()=>{xe.disconnect(),window.removeEventListener("keydown",t)}});const I=[{href:"/graph",label:"Graph",icon:"◎",shortcut:"G"},{href:"/memories",label:"Memories",icon:"◈",shortcut:"M"},{href:"/timeline",label:"Timeline",icon:"◷",shortcut:"T"},{href:"/feed",label:"Feed",icon:"◉",shortcut:"F"},{href:"/explore",label:"Explore",icon:"◬",shortcut:"E"},{href:"/intentions",label:"Intentions",icon:"◇",shortcut:"I"},{href:"/stats",label:"Stats",icon:"◫",shortcut:"S"},{href:"/settings",label:"Settings",icon:"⚙",shortcut:","}],_e=I.slice(0,5);function se(t,e){const d=e.startsWith(_)?e.slice(_.length)||"/":e;return t==="/graph"?d==="/"||d==="/graph":d.startsWith(t)}let N=Y(()=>r(g)?I.filter(t=>t.label.toLowerCase().includes(r(g).toLowerCase())):I);function re(t){c(p,!1),c(g,""),fe(`${_}${t}`)}var ne=dt(),G=n(be(ne),6),R=s(G),oe=s(R),H=n(oe,2);Z(H,21,()=>I,ee,(t,e)=>{const d=Y(()=>se(r(e).href,S().url.pathname));var o=at(),i=s(o),w=s(i,!0);a(i);var x=n(i,2),A=s(x,!0);a(x);var j=n(x,2),l=s(j,!0);a(j),a(o),F(()=>{te(o,"href",`${_??""}${r(e).href??""}`),ae(o,1,`flex items-center gap-3 px-3 py-2.5 rounded-lg transition-all duration-200 text-sm - ${r(d)?"bg-synapse/15 text-synapse-glow border border-synapse/30 shadow-[0_0_12px_rgba(99,102,241,0.15)] nav-active-border":"text-dim hover:text-text hover:bg-white/[0.03] border border-transparent"}`),v(w,r(e).icon),v(A,r(e).label),v(l,r(e).shortcut)}),m(t,o)}),a(H);var O=n(H,2),ye=s(O);a(O);var ie=n(O,2),V=s(ie),le=s(V),de=n(le,2),we=s(de,!0);a(de),a(V);var W=n(V,2),Q=s(W),$e=s(Q);a(Q);var U=n(Q,2),ke=s(U);a(U);var Fe=n(U,2);{var Ce=t=>{var e=st(),d=s(e);a(e),F(o=>v(d,`up ${o??""}`),[()=>Xe(T())]),m(t,e)};M(Fe,t=>{T()>0&&t(Ce)})}a(W);var Ee=n(W,2);{var Ae=t=>{var e=rt(),d=s(e);tt(d),a(e),m(t,e)};M(Ee,t=>{C()>0&&t(Ae)})}a(ie),a(R);var B=n(R,2),pe=s(B),Me=s(pe);He(Me,()=>h.children),a(pe),a(B);var ce=n(B,2),ve=s(ce),ue=s(ve);Z(ue,17,()=>_e,ee,(t,e)=>{const d=Y(()=>se(r(e).href,S().url.pathname));var o=nt(),i=s(o),w=s(i,!0);a(i);var x=n(i,2),A=s(x,!0);a(x),a(o),F(()=>{te(o,"href",`${_??""}${r(e).href??""}`),ae(o,1,`flex flex-col items-center gap-0.5 px-3 py-2 rounded-lg transition-all min-w-[3.5rem] - ${r(d)?"text-synapse-glow":"text-muted"}`),v(w,r(e).icon),v(A,r(e).label)}),m(t,o)});var Se=n(ue,2);a(ve),a(ce),a(G);var Ke=n(G,2);{var Le=t=>{var e=lt(),d=s(e),o=s(d),i=n(s(o),2);Oe(i),We(i,l=>c(E,l),()=>r(E)),ze(2),a(o);var w=n(o,2),x=s(w);Z(x,17,()=>r(N),ee,(l,$)=>{var D=ot(),J=s(D),Te=s(J,!0);a(J);var P=n(J,2),qe=s(P,!0);a(P);var me=n(P,2),Ie=s(me,!0);a(me),a(D),F(()=>{v(Te,r($).icon),v(qe,r($).label),v(Ie,r($).shortcut)}),k("click",D,()=>re(r($).href)),m(l,D)});var A=n(x,2);{var j=l=>{var $=it();m(l,$)};M(A,l=>{r(N).length===0&&l(j)})}a(w),a(d),a(e),k("keydown",e,l=>{l.key==="Escape"&&c(p,!1)}),k("click",e,l=>{l.target===l.currentTarget&&c(p,!1)}),k("keydown",i,l=>{l.key==="Enter"&&r(N).length>0&&re(r(N)[0].href)}),Ve(i,()=>r(g),l=>c(g,l)),m(t,e)};M(Ke,t=>{r(p)&&t(Le)})}F(t=>{te(oe,"href",`${_??""}/graph`),ae(le,1,`w-2 h-2 rounded-full ${K()?"bg-recall animate-pulse-glow":"bg-decay"}`),v(we,K()?"Connected":"Offline"),v($e,`${L()??""} memories`),v(ke,`${t??""}% retention`)},[()=>(z()*100).toFixed(0)]),k("click",ye,()=>{c(p,!0),c(g,""),requestAnimationFrame(()=>{var t;return(t=r(E))==null?void 0:t.focus()})}),k("click",Se,()=>{c(p,!0),c(g,""),requestAnimationFrame(()=>{var t;return(t=r(E))==null?void 0:t.focus()})}),m(f,ne),De(),q()}Ge(["click","keydown"]);export{Et as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.br b/apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.br deleted file mode 100644 index ebdb948d9f887b6bdc07f451eefa1592b7029cdf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3251 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 diff --git a/apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.gz b/apps/dashboard/build/_app/immutable/nodes/0.Bfsm2nvh.js.gz deleted file mode 100644 index 8b249639c1d209e6e711bec37a8ab3fd334759f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3746 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 a=xt;return{page:{subscribe:a.page.subscribe},navigating:{subscribe:a.navigating.subscribe},updated:a.updated}},At={subscribe(a){return Ct().page.subscribe(a)}};var Dt=x('
');function Tt(a){const r=()=>j(at,"$suppressedCount",l),[l,u]=ye();var g=mt(),$=de(g);{var w=A=>{var _=Dt(),b=o(s(_),2),m=s(b);t(b),t(_),I(()=>y(m,`Actively forgetting ${r()??""} ${r()===1?"memory":"memories"}`)),h(A,_)};V($,A=>{r()>0&&A(w)})}h(a,g),u()}var Et=x(''),Ft=x('
');function St(a,r){Oe(r,!1);const l=()=>j(ee,"$toasts",u),[u,g]=ye(),$={DreamCompleted:"✦",ConsolidationCompleted:"◉",ConnectionDiscovered:"⟷",MemoryPromoted:"↑",MemoryDemoted:"↓",MemorySuppressed:"◬",MemoryUnsuppressed:"◉",Rac1CascadeSwept:"✺",MemoryDeleted:"✕"};function w(m){return $[m]??"◆"}function A(m){ee.dismiss(m.id)}function _(m,d){(m.key==="Enter"||m.key===" ")&&(m.preventDefault(),ee.dismiss(d.id))}$t();var b=Ft();_e(b,5,l,m=>m.id,(m,d)=>{var k=Et(),D=o(s(k),2),S=s(D),G=s(S),L=s(G,!0);t(G);var N=o(G,2),Z=s(N,!0);t(N),t(S);var H=o(S,2),q=s(H,!0);t(H),t(D),W(2),t(k),I(z=>{te(k,"aria-label",`${e(d).title??""}: ${e(d).body??""}. Click to dismiss.`),nt(k,`--toast-color: ${e(d).color??""}; --toast-dwell: ${e(d).dwellMs??""}ms;`),y(L,z),y(Z,e(d).title),y(q,e(d).body)},[()=>w(e(d).type)]),Q("click",k,()=>A(e(d))),Q("keydown",k,z=>_(z,e(d))),Ee("mouseenter",k,()=>ee.pauseDwell(e(d).id,e(d).dwellMs)),Ee("mouseleave",k,()=>ee.resumeDwell(e(d).id)),Ee("focus",k,()=>ee.pauseDwell(e(d).id,e(d).dwellMs)),Ee("blur",k,()=>ee.resumeDwell(e(d).id)),h(m,k)}),t(b),h(a,b),Pe(),g()}Ye(["click","keydown"]);function ve(a){const r=a.data;if(!r||typeof r!="object")return null;const l=r.timestamp??r.at??r.occurred_at;if(l==null)return null;if(typeof l=="number")return Number.isFinite(l)?l>1e12?l:l*1e3:null;if(typeof l!="string")return null;const u=Date.parse(l);return Number.isFinite(u)?u:null}const qe=10,lt=3e4,It=qe*lt;function Lt(a,r){const l=r-It,u=new Array(qe).fill(0);for(const $ of a){if($.type==="Heartbeat")continue;const w=ve($);if(w===null||wr)continue;const A=Math.min(qe-1,Math.floor((w-l)/lt));u[A]+=1}const g=Math.max(1,...u);return u.map($=>({count:$,ratio:$/g}))}function Nt(a,r){const l=r-864e5;for(const u of a){if(u.type!=="DreamCompleted")continue;return(ve(u)??r)>=l?u:null}return null}function Rt(a){if(!a||!a.data)return null;const r=a.data,l=typeof r.insights_generated=="number"?r.insights_generated:typeof r.insightsGenerated=="number"?r.insightsGenerated:null;return l!==null&&Number.isFinite(l)?l:null}function jt(a,r){let l=null,u=null;for(const A of a)if(!l&&A.type==="DreamStarted"&&(l=A),!u&&A.type==="DreamCompleted"&&(u=A),l&&u)break;if(!l)return!1;const g=ve(l)??r,$=r-300*1e3;return g<$?!1:u?(ve(u)??r)=u}return!1}var Bt=x(' at risk',1),Gt=x('0 at risk',1),Ht=x(' at risk',1),qt=x(' intentions',1),zt=x('— intentions'),Ot=x('· insights',1),Pt=x(' Last dream: ',1),Yt=x('No recent dream'),Wt=x('
'),Qt=x('
DREAMING...
',1),Xt=x(''),Zt=x('
memories · avg retention
');function Jt(a,r){Oe(r,!0);const l=()=>j(rt,"$avgRetention",$),u=()=>j(kt,"$eventFeed",$),g=()=>j(st,"$memoryCount",$),[$,w]=ye(),A=B(()=>Math.round((l()??0)*100)),_=B(()=>(l()??0)>=.5);let b=ce(null);async function m(){try{const n=await Ze.retentionDistribution();if(Array.isArray(n.endangered)&&n.endangered.length>0){C(b,n.endangered.length,!0);return}const v=n.distribution??[];let M=0;for(const i of v){const c=/^(\d+)/.exec(i.range);if(!c)continue;const p=Number.parseInt(c[1],10);Number.isFinite(p)&&p<30&&(M+=i.count??0)}C(b,M,!0)}catch{C(b,null)}}let d=ce(null);async function k(){var n;try{const v=await Ze.intentions("active");C(d,v.total??((n=v.intentions)==null?void 0:n.length)??0,!0)}catch{C(d,null)}}let D=ce(ut(Date.now()));const S=B(()=>{const n=u(),v=Nt(n,e(D)),M=v?ve(v)??e(D):null,i=M!==null?e(D)-M:null;return{isDreaming:jt(n,e(D)),recent:v,recentMsAgo:i,insights:Rt(v)}}),G=B(()=>Lt(u(),e(D))),L=B(()=>Vt(u(),e(D)));tt(()=>{m(),k();const n=setInterval(()=>{C(D,Date.now(),!0)},1e3),v=setInterval(()=>{m(),k()},6e4);return()=>{clearInterval(n),clearInterval(v)}});var N=Zt();let Z;var H=s(N),q=s(H),z=s(q);let ae;var ue=o(z,2);let we;t(q);var se=o(q,2),me=s(se,!0);t(se);var re=o(se,6);let ne;var Se=s(re);t(re),W(2),t(H);var ie=o(H,4),Ie=s(ie);{var fe=n=>{var v=Bt(),M=de(v),i=s(M,!0);t(M),W(2),I(()=>y(i,e(b))),h(n,v)},he=n=>{var v=Gt();W(2),h(n,v)},Le=n=>{var v=Ht();W(2),h(n,v)};V(Ie,n=>{e(b)!==null&&e(b)>0?n(fe):e(b)===0?n(he,1):n(Le,!1)})}t(ie);var J=o(ie,4),Ne=s(J);{var Re=n=>{var v=qt(),M=de(v);let i;var c=o(M,2);let p;var f=s(c,!0);t(c),W(2),I(()=>{i=R(M,1,"inline-flex h-2 w-2 rounded-full svelte-1kk3799",null,i,{"bg-node-pattern":e(d)>5,"animate-ping-slow":e(d)>5,"bg-muted":e(d)<=5}),p=R(c,1,"tabular-nums svelte-1kk3799",null,p,{"text-node-pattern":e(d)>5,"text-text":e(d)>0&&e(d)<=5,"text-muted":e(d)===0}),y(f,e(d))}),h(n,v)},je=n=>{var v=zt();h(n,v)};V(Ne,n=>{e(d)!==null?n(Re):n(je,!1)})}t(J);var ge=o(J,4),Ke=s(ge);{var be=n=>{var v=Pt(),M=o(de(v),4),i=s(M,!0);t(M);var c=o(M,2);{var p=f=>{var T=Ot(),F=o(de(T),2),K=s(F,!0);t(F),W(2),I(()=>y(K,e(S).insights)),h(f,T)};V(c,f=>{e(S).insights!==null&&f(p)})}I(f=>y(i,f),[()=>Kt(e(S).recentMsAgo)]),h(n,v)},$e=n=>{var v=Yt();h(n,v)};V(Ke,n=>{e(S).recent&&e(S).recentMsAgo!==null?n(be):n($e,!1)})}t(ge);var oe=o(ge,4),Me=o(s(oe),2);_e(Me,21,()=>e(G),Fe,(n,v)=>{var M=Wt();I(i=>nt(M,`height: ${i??""}%; opacity: ${e(v).count===0?.18:.5+e(v).ratio*.5};`),[()=>Math.max(10,e(v).ratio*100)]),h(n,M)}),t(Me),t(oe);var xe=o(oe,2);{var Ce=n=>{var v=Qt();W(2),h(n,v)};V(xe,n=>{e(S).isDreaming&&n(Ce)})}var Ae=o(xe,4);{var Ve=n=>{var v=Xt();h(n,v)};V(Ae,n=>{e(L)&&n(Ve)})}t(N),I(()=>{Z=R(N,1,"ambient-strip relative flex h-9 w-full items-center gap-0 overflow-hidden border-b border-synapse/15 bg-black/40 px-3 text-[11px] text-dim backdrop-blur-md svelte-1kk3799",null,Z,{"ambient-flash":e(L)}),ae=R(z,1,"absolute inline-flex h-full w-full animate-ping rounded-full opacity-75 svelte-1kk3799",null,ae,{"bg-recall":e(_),"bg-warning":!e(_)}),we=R(ue,1,"relative inline-flex h-2 w-2 rounded-full svelte-1kk3799",null,we,{"bg-recall":e(_),"bg-warning":!e(_)}),y(me,g()),ne=R(re,1,"svelte-1kk3799",null,ne,{"text-recall":e(_),"text-warning":!e(_)}),y(Se,`${e(A)??""}%`)}),h(a,N),Pe(),w()}const dt="vestige.theme",Je="vestige-theme-light",pe=it("dark"),ze=it(!0),Ue=Mt([pe,ze],([a,r])=>a==="auto"?r?"dark":"light":a);function Ut(a){return a==="dark"||a==="light"||a==="auto"}function ea(a){if(Ut(a)){pe.set(a);try{localStorage.setItem(dt,a)}catch{}}}function He(){const a=ot(pe);ea(a==="dark"?"light":a==="light"?"auto":"dark")}function ta(){if(document.getElementById(Je))return;const a=document.createElement("style");a.id=Je,a.textContent=` +/* Vestige light-mode overrides — injected by theme.ts. + * Activated by [data-theme='light'] on . + * Tokens mirror the real names used in app.css so the cascade stays clean. */ +[data-theme='light'] { + /* Core surface palette (slate scale) */ + --color-void: #f8fafc; /* slate-50 — page background */ + --color-abyss: #f1f5f9; /* slate-100 */ + --color-deep: #e2e8f0; /* slate-200 */ + --color-surface: #f1f5f9; /* slate-100 */ + --color-elevated: #e2e8f0; /* slate-200 */ + --color-subtle: #cbd5e1; /* slate-300 */ + --color-muted: #94a3b8; /* slate-400 */ + --color-dim: #475569; /* slate-600 */ + --color-text: #0f172a; /* slate-900 */ + --color-bright: #020617; /* slate-950 */ +} + +/* Baseline body/html wiring — app.css sets these against the dark + * tokens; we just let the variables do the work. Reassert for clarity. */ +[data-theme='light'] html, +html[data-theme='light'] { + background: var(--color-void); + color: var(--color-text); +} + +/* Glass surfaces — recompose on a light canvas. The original alphas + * are tuned for dark; invert-and-tint for light so panels still read + * as elevated instead of vanishing. */ +[data-theme='light'] .glass { + background: rgba(255, 255, 255, 0.65); + border: 1px solid rgba(99, 102, 241, 0.12); + box-shadow: + inset 0 1px 0 0 rgba(255, 255, 255, 0.6), + 0 4px 24px rgba(15, 23, 42, 0.08); +} +[data-theme='light'] .glass-subtle { + background: rgba(255, 255, 255, 0.55); + border: 1px solid rgba(99, 102, 241, 0.1); + box-shadow: + inset 0 1px 0 0 rgba(255, 255, 255, 0.5), + 0 2px 12px rgba(15, 23, 42, 0.06); +} +[data-theme='light'] .glass-sidebar { + background: rgba(248, 250, 252, 0.82); + border-right: 1px solid rgba(99, 102, 241, 0.14); + box-shadow: + inset -1px 0 0 0 rgba(255, 255, 255, 0.4), + 4px 0 24px rgba(15, 23, 42, 0.08); +} +[data-theme='light'] .glass-panel { + background: rgba(255, 255, 255, 0.75); + border: 1px solid rgba(99, 102, 241, 0.14); + box-shadow: + inset 0 1px 0 0 rgba(255, 255, 255, 0.5), + 0 8px 32px rgba(15, 23, 42, 0.1); +} + +/* Halve glow intensity — neon accents stay recognizable without + * washing out on slate-50. */ +[data-theme='light'] .glow-synapse { + box-shadow: 0 0 10px rgba(99, 102, 241, 0.15), 0 0 30px rgba(99, 102, 241, 0.05); +} +[data-theme='light'] .glow-dream { + box-shadow: 0 0 10px rgba(168, 85, 247, 0.15), 0 0 30px rgba(168, 85, 247, 0.05); +} +[data-theme='light'] .glow-memory { + box-shadow: 0 0 10px rgba(59, 130, 246, 0.15), 0 0 30px rgba(59, 130, 246, 0.05); +} + +/* Ambient orbs are gorgeous on black and blinding on white. Tame them. */ +[data-theme='light'] .ambient-orb { + opacity: 0.18; + filter: blur(100px); +} + +/* Scrollbar recolor for the lighter surface. */ +[data-theme='light'] ::-webkit-scrollbar-thumb { + background: #cbd5e1; +} +[data-theme='light'] ::-webkit-scrollbar-thumb:hover { + background: #94a3b8; +} +`,document.head.appendChild(a)}function et(a){document.documentElement.dataset.theme=a}let O=null,X=null,P=null,Y=null;function aa(){O&&X&&O.removeEventListener("change",X),Y==null||Y(),P==null||P(),O=null,X=null,Y=null,P=null,ta();let a="dark";try{const r=localStorage.getItem(dt);(r==="dark"||r==="light"||r==="auto")&&(a=r)}catch{}return pe.set(a),O=window.matchMedia("(prefers-color-scheme: dark)"),ze.set(O.matches),X=r=>ze.set(r.matches),O.addEventListener("change",X),et(ot(Ue)),Y=Ue.subscribe(et),P=pe.subscribe(()=>{}),()=>{O&&X&&O.removeEventListener("change",X),O=null,X=null,Y==null||Y(),P==null||P(),Y=null,P=null}}var sa=x('');function ra(a){const r=()=>j(pe,"$theme",l),[l,u]=ye(),g={dark:"Dark",light:"Light",auto:"Auto (system)"},$={dark:"light",light:"auto",auto:"dark"};let w=B(r),A=B(()=>$[e(w)]),_=B(()=>`Toggle theme: ${g[e(w)]} (click for ${g[e(A)]})`);var b=sa(),m=s(b),d=s(m);let k;var D=o(d,2);let S;var G=o(D,2);let L;t(m),t(b),I(()=>{te(b,"aria-label",e(_)),te(b,"title",e(_)),te(b,"data-mode",e(w)),k=R(d,0,"icon svelte-1cmi4dh",null,k,{active:e(w)==="dark"}),S=R(D,0,"icon svelte-1cmi4dh",null,S,{active:e(w)==="light"}),L=R(G,0,"icon svelte-1cmi4dh",null,L,{active:e(w)==="auto"})}),Q("click",b,function(...N){He==null||He.apply(this,N)}),h(a,b),u()}Ye(["click"]);var na=x(' '),ia=x('
'),oa=x(''),la=x(' '),da=x(''),ca=x('
No matches
'),va=x('
esc
'),pa=x('
',1);function La(a,r){Oe(r,!0);const l=()=>j(At,"$page",_),u=()=>j(yt,"$isConnected",_),g=()=>j(st,"$memoryCount",_),$=()=>j(rt,"$avgRetention",_),w=()=>j(_t,"$uptimeSeconds",_),A=()=>j(at,"$suppressedCount",_),[_,b]=ye();let m=ce(!1),d=ce(""),k=ce(void 0);tt(()=>{Xe.connect();const i=aa();function c(p){if((p.metaKey||p.ctrlKey)&&p.key==="k"){p.preventDefault(),C(m,!e(m)),C(d,""),e(m)&&requestAnimationFrame(()=>{var F;return(F=e(k))==null?void 0:F.focus()});return}if(p.key==="Escape"&&e(m)){C(m,!1);return}if(p.target instanceof HTMLInputElement||p.target instanceof HTMLTextAreaElement)return;if(p.key==="/"){p.preventDefault();const F=document.querySelector('input[type="text"]');F==null||F.focus();return}const T={g:"/graph",m:"/memories",t:"/timeline",f:"/feed",e:"/explore",i:"/intentions",s:"/stats",r:"/reasoning",a:"/activation",d:"/dreams",c:"/schedule",p:"/importance",u:"/duplicates",x:"/contradictions",n:"/patterns"}[p.key.toLowerCase()];T&&!p.metaKey&&!p.ctrlKey&&!p.altKey&&(p.preventDefault(),Qe(`${U}${T}`))}return window.addEventListener("keydown",c),()=>{Xe.disconnect(),window.removeEventListener("keydown",c),i()}});const D=[{href:"/graph",label:"Graph",icon:"◎",shortcut:"G"},{href:"/reasoning",label:"Reasoning",icon:"✦",shortcut:"R"},{href:"/memories",label:"Memories",icon:"◈",shortcut:"M"},{href:"/timeline",label:"Timeline",icon:"◷",shortcut:"T"},{href:"/feed",label:"Feed",icon:"◉",shortcut:"F"},{href:"/explore",label:"Explore",icon:"◬",shortcut:"E"},{href:"/activation",label:"Activation",icon:"◈",shortcut:"A"},{href:"/dreams",label:"Dreams",icon:"✧",shortcut:"D"},{href:"/schedule",label:"Schedule",icon:"◷",shortcut:"C"},{href:"/importance",label:"Importance",icon:"◎",shortcut:"P"},{href:"/duplicates",label:"Duplicates",icon:"◉",shortcut:"U"},{href:"/contradictions",label:"Contradictions",icon:"⚠",shortcut:"X"},{href:"/patterns",label:"Patterns",icon:"▦",shortcut:"N"},{href:"/intentions",label:"Intentions",icon:"◇",shortcut:"I"},{href:"/stats",label:"Stats",icon:"◫",shortcut:"S"},{href:"/settings",label:"Settings",icon:"⚙",shortcut:","}],S=D.slice(0,5);function G(i,c){const p=c.startsWith(U)?c.slice(U.length)||"/":c;return i==="/graph"?p==="/"||p==="/graph":p.startsWith(i)}let L=B(()=>e(d)?D.filter(i=>i.label.toLowerCase().includes(e(d).toLowerCase())):D);function N(i){C(m,!1),C(d,""),Qe(`${U}${i}`)}var Z=pa(),H=o(de(Z),6),q=s(H),z=s(q),ae=o(z,2);_e(ae,21,()=>D,Fe,(i,c)=>{const p=B(()=>G(e(c).href,l().url.pathname));var f=na(),T=s(f),F=s(T,!0);t(T);var K=o(T,2),ke=s(K,!0);t(K);var De=o(K,2),E=s(De,!0);t(De),t(f),I(()=>{te(f,"href",`${U??""}${e(c).href??""}`),R(f,1,`flex items-center gap-3 px-3 py-2.5 rounded-lg transition-all duration-200 text-sm + ${e(p)?"bg-synapse/15 text-synapse-glow border border-synapse/30 shadow-[0_0_12px_rgba(99,102,241,0.15)] nav-active-border":"text-dim hover:text-text hover:bg-white/[0.03] border border-transparent"}`),y(F,e(c).icon),y(ke,e(c).label),y(E,e(c).shortcut)}),h(i,f)}),t(ae);var ue=o(ae,2),we=s(ue);t(ue);var se=o(ue,2),me=s(se),re=s(me),ne=o(re,2),Se=s(ne,!0);t(ne);var ie=o(ne,2),Ie=s(ie);ra(Ie),t(ie),t(me);var fe=o(me,2),he=s(fe),Le=s(he);t(he);var J=o(he,2),Ne=s(J);t(J);var Re=o(J,2);{var je=i=>{var c=ia(),p=s(c);t(c),I(f=>y(p,`up ${f??""}`),[()=>wt(w())]),h(i,c)};V(Re,i=>{w()>0&&i(je)})}t(fe);var ge=o(fe,2);{var Ke=i=>{var c=oa(),p=s(c);Tt(p),t(c),h(i,c)};V(ge,i=>{A()>0&&i(Ke)})}t(se),t(q);var be=o(q,2),$e=s(be);Jt($e,{});var oe=o($e,2),Me=s(oe);ft(Me,()=>r.children),t(oe),t(be);var xe=o(be,2),Ce=s(xe),Ae=s(Ce);_e(Ae,17,()=>S,Fe,(i,c)=>{const p=B(()=>G(e(c).href,l().url.pathname));var f=la(),T=s(f),F=s(T,!0);t(T);var K=o(T,2),ke=s(K,!0);t(K),t(f),I(()=>{te(f,"href",`${U??""}${e(c).href??""}`),R(f,1,`flex flex-col items-center gap-0.5 px-3 py-2 rounded-lg transition-all min-w-[3.5rem] + ${e(p)?"text-synapse-glow":"text-muted"}`),y(F,e(c).icon),y(ke,e(c).label)}),h(i,f)});var Ve=o(Ae,2);t(Ce),t(xe),t(H);var n=o(H,2);St(n,{});var v=o(n,2);{var M=i=>{var c=va(),p=s(c),f=s(p),T=o(s(f),2);ht(T),bt(T,E=>C(k,E),()=>e(k)),W(2),t(f);var F=o(f,2),K=s(F);_e(K,17,()=>e(L),Fe,(E,le)=>{var Te=da(),Be=s(Te),ct=s(Be,!0);t(Be);var Ge=o(Be,2),vt=s(Ge,!0);t(Ge);var We=o(Ge,2),pt=s(We,!0);t(We),t(Te),I(()=>{y(ct,e(le).icon),y(vt,e(le).label),y(pt,e(le).shortcut)}),Q("click",Te,()=>N(e(le).href)),h(E,Te)});var ke=o(K,2);{var De=E=>{var le=ca();h(E,le)};V(ke,E=>{e(L).length===0&&E(De)})}t(F),t(p),t(c),Q("keydown",c,E=>{E.key==="Escape"&&C(m,!1)}),Q("click",c,E=>{E.target===E.currentTarget&&C(m,!1)}),Q("keydown",T,E=>{E.key==="Enter"&&e(L).length>0&&N(e(L)[0].href)}),gt(T,()=>e(d),E=>C(d,E)),h(i,c)};V(v,i=>{e(m)&&i(M)})}I(i=>{te(z,"href",`${U??""}/graph`),R(re,1,`w-2 h-2 rounded-full ${u()?"bg-recall animate-pulse-glow":"bg-decay"}`),y(Se,u()?"Connected":"Offline"),y(Le,`${g()??""} memories`),y(Ne,`${i??""}% retention`)},[()=>($()*100).toFixed(0)]),Q("click",we,()=>{C(m,!0),C(d,""),requestAnimationFrame(()=>{var i;return(i=e(k))==null?void 0:i.focus()})}),Q("click",Ve,()=>{C(m,!0),C(d,""),requestAnimationFrame(()=>{var i;return(i=e(k))==null?void 0:i.focus()})}),h(a,Z),Pe(),b()}Ye(["click","keydown"]);export{La as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.br b/apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.br new file mode 100644 index 0000000000000000000000000000000000000000..e2921e26bfc2bc907fe5306cfe96ee73e22fa9f0 GIT binary patch literal 8038 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.gz b/apps/dashboard/build/_app/immutable/nodes/0.CFcocLwc.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..c29e5e2729feb4d7477f92495964953560eb0b5e GIT binary patch literal 9199 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 F003f#6CnTq literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js b/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js new file mode 100644 index 0000000..f82681f --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js @@ -0,0 +1 @@ +import"../chunks/Bzak7iHL.js";import{i as h}from"../chunks/Bz1l2A_1.js";import{p as g,f as d,t as l,a as v,d as _,e as s,r as o}from"../chunks/CvjSAYrz.js";import{s as p}from"../chunks/FzvEaXMa.js";import{a as x,f as $}from"../chunks/BsvCUYx-.js";import{p as m}from"../chunks/DJWRm1Ki.js";import{s as k}from"../chunks/S0ILvWpb.js";const b={get error(){return m.error},get status(){return m.status}};k.updated.check;const i=b;var E=$("

",1);function C(f,n){g(n,!1),h();var t=E(),r=d(t),c=s(r,!0);o(r);var a=_(r,2),u=s(a,!0);o(a),l(()=>{var e;p(c,i.status),p(u,(e=i.error)==null?void 0:e.message)}),x(f,t),v()}export{C as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.br b/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.br new file mode 100644 index 0000000000000000000000000000000000000000..1143018fab197ed5d94eac84f029b555b7dcb70a GIT binary patch literal 334 zcmV-U0kQrYi2`6`&8B;nDP>!72(MQlm>!7#?^MqK`J@4hSz>2dixSFN#+Vj8#lBjL z#eUAs*3+$Fl1Nuang@U09S%o|nfXpKx~L^*W!*gu?PQm+Z;jQLlD^sLeToW9-08V6 zp+ansjzOgqT#_Is6$H{Cp_mvbMO^0g=lOqJQwcEy#7&)FOMlN2C3)ra~ ze>os}fVg`2{qQD_7M1WioX_$7Q~n#u#tZMuzRVj#OMhP3s7Qe~r1%{%HOD`iM(Vnb zIm2jjhY_GFjV&&-pscU?KI~o#g5wc#!lBfMU78@<=kJ%GlaGx7KJ849Oi0{6Qhp6c zF;^i)Qg{L}?TnEH5DSD77iiHGDPywI3kk^uKz`E5Y&8~wLYBR6kV41^G;Xa9Bj;y_ gb6Tmh@m3o~*=OvKO3*1q$^kpA^eA;{rXKEC52RP0@&Et; literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.gz b/apps/dashboard/build/_app/immutable/nodes/1.--qOmhsd.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..443d0e7f788172277363f5ce6ae3560cf0d16113 GIT binary patch literal 385 zcmV-{0e=1;iwFP!000026J?OiZrd;rgztR{#>in8*veKe1**_R>bmGpdT9`(IT^G> zS&Sr-ASuDHpm#4Q`{39Y4zcrbcetvx#)Vmu%=4<#wV!`Ii29TI@tC~%S*9j;P)vAM zjioc~J2GwV9yaMYX(PF#GD<-qN<$(_Peqgs$ta#&6m!{g)xSMGyt>1APajEpNq#@{ zYw_=oI47q;`{VT6tGK>jJ-_ZhUd3%M$#1`2{6g?kA==`~Ptc+t;C!H-skVTSLGOtfP72jsPaBR(QVRm1o zOLjk>P8)A_IinP_veS7`Mza-^q;c4RrkfP00-PQPz6K=63kXO#_u%Meftdk!^abC5 zqdTOIdk`m2AT2SBamDjKZl&_u4%sXMip%FSthOYUhE`}NP8$L fAoYNw+)oQ##f9dkwMI)F#_Yp?vDOa9iUI%tO5U|w literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js b/apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js deleted file mode 100644 index 405fc32..0000000 --- a/apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/Bzak7iHL.js";import"../chunks/CrlWs-6R.js";import{p as h,f as g,t as d,a as l,d as v,e as s,r as o}from"../chunks/VE8Jor13.js";import{s as p}from"../chunks/DHnEMX8z.js";import{a as _,f as x}from"../chunks/7UNxJI5L.js";import{i as $}from"../chunks/jyeIy8pa.js";import{p as m}from"../chunks/DUtaznkq.js";import{s as k}from"../chunks/CK5Nmlyf.js";const b={get error(){return m.error},get status(){return m.status}};k.updated.check;const i=b;var E=x("

",1);function D(f,n){h(n,!1),$();var t=E(),r=g(t),c=s(r,!0);o(r);var a=v(r,2),u=s(a,!0);o(a),d(()=>{var e;p(c,i.status),p(u,(e=i.error)==null?void 0:e.message)}),_(f,t),l()}export{D as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js.br b/apps/dashboard/build/_app/immutable/nodes/1.ClSH3vNb.js.br deleted file mode 100644 index a1f8933f3f4e08ae9363b05f1de6c1d3c6857555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmV-p0i6CDrvdfuu2WZ=C#?pZB$xv$;*T4#J@k8Os1-p2W~pOZ)A6CzkW`f^h8Jq zJ|x~>I^J||qoJG*EixLIlz~Pvc%(r=I;50%VQ=E2UgY;__Z}wmC6y8*Y2@)Wc>4O^ zHI(cgEg)8tknP{q``h}HvWaH}accdo-bFGM@%qT)PbN2k8&fH-%X#=%fBRl-=uf~e zhYGi*o_)=-p0a#@LiBp#t2^^lRchDw!kxg)nLtF-8{4c1)Yea2!O6YBznb>!Xe16N zG$(-Y{Sgcbu(cqd(HxyYWdD%y6CfpQLWZPr3JHy7L z*){q&bl(mWu2*l{r^n0wGK~!6cu0Qj#N%#e_{n0`$q*~g_p11RGHx*>@1HN1=q8`e$<3sDP57Dl2&Xj8YL$4Y6%H~Z#L~I~Ic^sFbff_+Dd037zrs}f1-DsJTi{B!u pgmZi?XiM<}GV~Nnpsm<;2VI1NCb}|O3FX`P$2a3ey#uHM003IN$b0|* diff --git a/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js b/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js deleted file mode 100644 index e38f4b0..0000000 --- a/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/Bzak7iHL.js";import{o as Ft}from"../chunks/DWVWfZUn.js";import{p as $t,a as Ct,d as s,e,j as W,h as y,g as t,r as a,s as E,f as dt,O,t as B,u as P}from"../chunks/VE8Jor13.js";import{d as Rt,s as i,a as At}from"../chunks/DHnEMX8z.js";import{i as X}from"../chunks/JkhlGLjU.js";import{e as U,i as q}from"../chunks/ByItJEsC.js";import{a as p,f as u}from"../chunks/7UNxJI5L.js";import{s as A}from"../chunks/ussr1V5_.js";import{a as w}from"../chunks/DcQGRi49.js";var Dt=u('
'),Mt=u('
'),kt=u('
'),Bt=u('
'),St=u('
'),Tt=u('

'),jt=u('

Retention Distribution

Memory Types

',1),Et=u('
Total Memories
Avg Retention
Due for Review
Embedding Coverage
',1),Ot=u('

System Stats

');function Lt(ot,vt){$t(vt,!0);let n=E(null),m=E(null),l=E(null),Y=E(!0);Ft(async()=>{try{await(async d=>{var r=W(d,3);y(n,r[0],!0),y(m,r[1],!0),y(l,r[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}catch{}finally{y(Y,!1)}});function z(d){return{healthy:"#10b981",degraded:"#f59e0b",critical:"#ef4444",empty:"#6b7280"}[d]||"#6b7280"}async function nt(){try{await w.consolidate(),await(async d=>{var r=W(d,3);y(n,r[0],!0),y(m,r[1],!0),y(l,r[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}catch{}}var G=Ot(),lt=s(e(G),2);{var ct=d=>{var r=Mt();U(r,20,()=>Array(8),q,(F,H)=>{var $=Dt();p(F,$)}),a(r),p(d,r)},xt=d=>{var r=Et(),F=dt(r),H=e(F),$=s(H,2),pt=e($,!0);a($);var Z=s($,2),ut=e(Z);a(Z),a(F);var I=s(F,2),J=e(I),tt=e(J),mt=e(tt,!0);a(tt),O(2),a(J);var K=s(J,2),L=e(K),gt=e(L);a(L),O(2),a(K);var N=s(K,2),at=e(N),_t=e(at,!0);a(at),O(2),a(N);var et=s(N,2),st=e(et),ft=e(st);a(st),O(2),a(et),a(I);var rt=s(I,2);{var bt=D=>{var S=jt(),M=dt(S),T=s(e(M),2);U(T,21,()=>t(l).distribution,q,(g,c,v)=>{const C=P(()=>Math.max(...t(l).distribution.map(V=>V.count),1)),R=P(()=>t(c).count/t(C)*100),_=P(()=>v<3?"#ef4444":v<5?"#f59e0b":v<7?"#10b981":"#6366f1");var x=kt(),o=e(x),f=e(o,!0);a(o);var b=s(o,2),h=s(b,2),Q=e(h,!0);a(h),a(x),B(()=>{i(f,t(c).count),A(b,`height: ${t(R)??""}%; background: ${t(_)??""}; opacity: 0.7; min-height: 2px`),i(Q,t(c).range)}),p(g,x)}),a(T),a(M);var k=s(M,2),j=s(e(k),2);U(j,21,()=>Object.entries(t(l).byType),q,(g,c)=>{var v=P(()=>W(t(c),2));let C=()=>t(v)[0],R=()=>t(v)[1];var _=Bt(),x=e(_),o=s(x,2),f=e(o,!0);a(o);var b=s(o,2),h=e(b,!0);a(b),a(_),B(()=>{A(x,`background: ${({fact:"#00A8FF",concept:"#9D00FF",event:"#FFB800",person:"#00FFD1",note:"#8B95A5",pattern:"#FF3CAC",decision:"#FF4757"}[C()]||"#8B95A5")??""}`),i(f,C()),i(h,R())}),p(g,_)}),a(j),a(k);var yt=s(k,2);{var wt=g=>{var c=Tt(),v=e(c),C=e(v);a(v);var R=s(v,2);U(R,21,()=>t(l).endangered.slice(0,20),q,(_,x)=>{var o=St(),f=e(o),b=e(f);a(f);var h=s(f,2),Q=e(h,!0);a(h),a(o),B(V=>{i(b,`${V??""}%`),i(Q,t(x).content)},[()=>(t(x).retentionStrength*100).toFixed(0)]),p(_,o)}),a(R),a(c),B(()=>i(C,`Endangered Memories (${t(l).endangered.length??""})`)),p(g,c)};X(yt,g=>{t(l).endangered.length>0&&g(wt)})}p(D,S)};X(rt,D=>{t(l)&&D(bt)})}var it=s(rt,2),ht=e(it);a(it),B((D,S,M,T,k,j)=>{A(F,`border-color: ${D??""}30`),A(H,`background: ${S??""}`),A($,`color: ${M??""}`),i(pt,T),i(ut,`v${t(m).version??""}`),i(mt,t(n).totalMemories),A(L,`color: ${t(n).averageRetention>.7?"#10b981":t(n).averageRetention>.4?"#f59e0b":"#ef4444"}`),i(gt,`${k??""}%`),i(_t,t(n).dueForReview),i(ft,`${j??""}%`)},[()=>z(t(m).status),()=>z(t(m).status),()=>z(t(m).status),()=>t(m).status.toUpperCase(),()=>(t(n).averageRetention*100).toFixed(1),()=>t(n).embeddingCoverage.toFixed(0)]),At("click",ht,nt),p(d,r)};X(lt,d=>{t(Y)?d(ct):t(n)&&t(m)&&d(xt,1)})}a(G),p(ot,G),Ct()}Rt(["click"]);export{Lt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.br b/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.br deleted file mode 100644 index 15329e115dc7961f845f5705afc46f3709e91ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2025 zcmV8&#Prjn4*<)v?78fh>xVmiQk*k zPFI!x?E5kl$U7yvEkZy+r{roK0y{ zJjMkovg)YiiAl$KGqIN&iNQ-;?prT7OS7&tEy`^b?nN|-2VT|as;xNsvs$TQ0prhGtxrNgC z&|CU^mnrgd6w@0Xg&upJ-R)mD-lN*GGTbNZsIN+A50l=qI;z4woR;3AILV5&2U0;%AM{9!+7;1 zQkvI*p!60Xi&umDfcf4GV^HU<3l0bwjr1&C!|sV|9Kc+btYfK2No+Q&CD3H`1nD5> zJkL!T?h+B@7r7`6AvsJfG!cEW%=DAQ{a0(1{@Nd%zJ8ffxNiPBKX)fk_R}?^BLeXI-tVltBRN3 z^o?%Q%28I-H=LG3{Khm-wq6;bs-w5hJkR{{%&U-#d(=0#d@3z&Cz`N;w=(mzy?mb} zGOx7b%u7~YX*r5Ju=7%QOmKurf+-1k=wkD>)OUe|eCrS*IaL8yHLx5%pZ1+u$A18>_{J&ppE#XRen#_pH(j^U}q0 zm+dyZy4mtB8uhbg+UuPx2e3gOh2eUBF|E|tNGt?vBIXtfz4cEWWa$x z0Nqzk^DR+*l(@??>!`yJ1feU+0Cq}muM25Qbmi2ggx)UC^VCJ9a%KDN1GYmG@fY~> z_BP?{kWFn#43b&LU76U*@}CJ$6j^9S7|ZJE%s??RMS$oDSt;<{WSc_$>BK-48{}lO z*C$GUe&&py=?Fjhq_Ho=t4USGbJA-8J)XWhSRSG~m=k)IHFI&Ne_c^-vnRHZn0tiMclr1z7b; zxYB@gIDwV5mYOnQ;(>J{zsnHG>*Zl`>Tzkam@~Z`VNTXL=<{Dz#f!(S3h(dlY1MF4 zhOPem`YMCQ3mFkEw?_=NtfrF?Ubm;QiPPNhW9|rSX{>=%z8pIu_Yn7r}5zs>qMali$<&| zm25DUa(XNAep#%g`qhGr-N^3ctln_`%YP96BOc0yyYe8 z5QtD$iN8u^>TCvdO=RZ)wGmp4`U6B%G&mPL{e7!@pCRtDOzdbH!BCm%Za%uAX%_Nf zvy__~sYBB|5=6;1YMR2Z$dbyG!;7vU3R*CV<{LR#ltqY&F8&DL7TQGoC4=(KT1qZH zl8^5&XJ=YGE`@}WItIzmuMJ*kcu>~6t8HC}g+hiKvNQ{p*hN}nSyxyiH~T0}qQqXKa0Pk2vVCRE6)eUi-!}xgO?}T0_%;fBL(OuS!wJ_6 z8R#r%1#ZTywxytK*~yICisT?N zD#19GaqBTrY4KCpEpf?7;x0=etL6Qx^t-(2folrVI&^eAV?YhHH19efTOsQDKq!u} z1jIb0_tcp;D^Dt&GwyBK2 Hhq3qqLx1?Q diff --git a/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.gz b/apps/dashboard/build/_app/immutable/nodes/10.BXBzm8vP.js.gz deleted file mode 100644 index 8176c27d2d61125c0a0625c8351d2ecf0b30e3e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2289 zcmV!UW`+5^{rhE=^<->Tmn;m{ zEOdR9n`K6W{vl1~p$bydQ6Z{C+bA3LgEW@mTnkl>W}Y%Vx?W(^*})bG)Y-D}k=f0B zf8iQ3Ok|jP=tZF^eV@5mBK2a&vgRn+uMY|`RPOyz3$KnI^=jRVN?|4qjQT3dZPqup z7cdF)Z_qq&cWqyzWPxwW45LTTo<9-o_7d7(bFUmZ{w*BW3m7I@=txwLpt)E>6PquK z%v?^%XPqcIQIPBP{|z|NbRFSS`oi`@w9o10i>W7edge$bp%?bHDi$j`@N8IYRILKfY(0Nx zEcfm{!P;LkwrwrFh>dzX3t1xy)5!N+S;V?PG;g}p6+S-NcByNR%$?k4L9W|1n|Jh= z)YZzX)cL>eYDWEhoT3WYIZC94R@R)&yMC>kg^upbr^q9OA&SWc@*%=AOVoUYEVPe# znEAedU@`L-vv2k>C&?CanT|t;3%fqSWIT~0>CK)o*RD_KwwBmmxC`5&Hs&ED*VYd@ z1jamof#z^kOQww!%IoQQ)PjBz>P>k4huEBtr{y;c7e9oU zIuf1!WZLyY>HFi!n16$3Wig#DIscQpVv;D#l5kQO9q${@%U0*rUfBRw^%ChSci(v4 z-Fc;~jsZ^Mq31|{-*~RN)oQhBfC^$Ht(TqM%ARFRuiYPi{&~MFs92mBA{X~Wu~Erc zB#Pn!{(1CG3BnuuBXR*g+9_B3jev@%X>1PK_b|_pi`pempke_f#9@-iG2avL2k;iW z6*IvNyGepEZ^4F`3XnVz5OWt2F@=2D;4vNAvRx#Jx3=Of0ULJ8-$F$|jJDz%I$tH< z5c<2|yPfh4+RSM4JMDa@16sxQJ3Hkq+CH%reO??5BjU^!qJWRQLV72K-g`Uc zC!}|3EB;)V}Tc%a|4w)zZKx|&&3&u410=lKIT2hi{!tc zpR)q_z)txY0lw2=8_dFXHxJv#&Yg0wq(Y>d4A;@J}47fuI5MHF4V zVHa^33hE>6`&Ide25@5^5x2Rm_zh8<@|@uOo@B*4v%L=aa$>J$co%EPA4bDx`I*b+l($2E-~!qfo1~TFtTnVT5Ymc)oY^YUgmr zfLJ1`B-9$)jl%{tZpTZ#sCZP}-Ptv!*9|UoU!G|dq0_PHLW2vM^r6kgJUTZ;bnfV9 zP`Es%q8luVZiIGk#BpIe+~W{|&lwodN1#4GyKvOLav#Cfsq;;|cDaK> zv$(lQ05>;Xo+Fegnt in i?Cc(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var zt=(i,t,e)=>Pc(i,typeof t!="symbol"?t+"":t,e);import"../chunks/Bzak7iHL.js";import{o as Ll,a as Ul}from"../chunks/DWVWfZUn.js";import{p as fs,I as Dc,a as ps,e as At,d as Dt,O as Lc,r as bt,t as on,g as V,u as ei,f as Il,s as De,h as te,c as Uc}from"../chunks/VE8Jor13.js";import{s as me,d as Nl,a as Ge}from"../chunks/DHnEMX8z.js";import{i as Zn}from"../chunks/JkhlGLjU.js";import{e as cr,i as sa}from"../chunks/ByItJEsC.js";import{a as we,f as Ue,c as Ic}from"../chunks/7UNxJI5L.js";import{s as Pe,r as Fl}from"../chunks/Cu3VmnGp.js";import{s as Er}from"../chunks/BR2EHpd7.js";import{s as $a}from"../chunks/ussr1V5_.js";import{b as Ol}from"../chunks/BRHZEveZ.js";import{b as Bl}from"../chunks/B5Pq2mnD.js";import{s as Nc,a as Fc}from"../chunks/AcZBvMXu.js";import{b as Oc}from"../chunks/DUtaznkq.js";import{b as Bc}from"../chunks/DHakDdar.js";import{p as cs}from"../chunks/ykT2B6d3.js";import{N as zl}from"../chunks/BNytumrp.js";import"../chunks/CrlWs-6R.js";import{i as zc}from"../chunks/jyeIy8pa.js";import{a as Zi}from"../chunks/DcQGRi49.js";import{e as kc}from"../chunks/XIUN5r_Y.js";/** +var Oc=Object.defineProperty;var Bc=(i,t,e)=>t in i?Oc(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e;var Bt=(i,t,e)=>Bc(i,typeof t!="symbol"?t+"":t,e);import"../chunks/Bzak7iHL.js";import{o as Hl,a as Vl}from"../chunks/CNjeV5xa.js";import{s as me,c as ha,h as Gt,g as H,p as Ms,aB as zc,a as Ss,e as yt,d as Tt,n as kc,r as St,t as nn,u as oi,f as Gl}from"../chunks/CvjSAYrz.js";import{s as fe,d as Wl,a as He}from"../chunks/FzvEaXMa.js";import{i as ti}from"../chunks/ciN1mm2W.js";import{e as mr,i as ua}from"../chunks/DTnG8poT.js";import{a as ye,f as Re,c as Hc}from"../chunks/BsvCUYx-.js";import{s as Me,r as da}from"../chunks/CNfQDikv.js";import{s as Cr}from"../chunks/DPl3NjBv.js";import{s as co}from"../chunks/Bhad70Ss.js";import{b as fa}from"../chunks/CVpUe0w3.js";import{b as Xl}from"../chunks/DMu1Byux.js";import{s as Vc,a as Gc}from"../chunks/D81f-o_I.js";import{b as bo}from"../chunks/DJWRm1Ki.js";import{b as Wc}from"../chunks/D3XWCg9-.js";import{p as gs}from"../chunks/B_YDQCB6.js";import{N as Yl}from"../chunks/DzfRjky4.js";import{i as Xc}from"../chunks/Bz1l2A_1.js";import{a as gi}from"../chunks/DNjM5a-l.js";import{e as Yc}from"../chunks/CtkE7HV2.js";/** * @license * Copyright 2010-2024 Three.js Authors * SPDX-License-Identifier: MIT - */const Ja="172",Li={ROTATE:0,DOLLY:1,PAN:2},Ci={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},Hc=0,go=1,Vc=2,kl=1,Gc=2,En=3,kn=0,We=1,dn=2,Tn=0,Ui=1,Be=2,_o=3,vo=4,Wc=5,$n=100,Xc=101,Yc=102,qc=103,jc=104,Zc=200,Kc=201,$c=202,Jc=203,ra=204,aa=205,Qc=206,th=207,eh=208,nh=209,ih=210,sh=211,rh=212,ah=213,oh=214,oa=0,la=1,ca=2,Oi=3,ha=4,ua=5,da=6,fa=7,Hl=0,lh=1,ch=2,Bn=0,hh=1,uh=2,dh=3,Vl=4,fh=5,ph=6,mh=7,Gl=300,Bi=301,zi=302,pa=303,ma=304,vr=306,ga=1e3,Qn=1001,_a=1002,Ze=1003,gh=1004,Es=1005,pn=1006,br=1007,ti=1008,Rn=1009,Wl=1010,Xl=1011,us=1012,Qa=1013,ii=1014,mn=1015,wn=1016,to=1017,eo=1018,ki=1020,Yl=35902,ql=1021,jl=1022,ln=1023,Zl=1024,Kl=1025,Ii=1026,Hi=1027,no=1028,io=1029,$l=1030,so=1031,ro=1033,tr=33776,er=33777,nr=33778,ir=33779,va=35840,xa=35841,Ma=35842,Sa=35843,ya=36196,Ea=37492,ba=37496,Ta=37808,wa=37809,Aa=37810,Ra=37811,Ca=37812,Pa=37813,Da=37814,La=37815,Ua=37816,Ia=37817,Na=37818,Fa=37819,Oa=37820,Ba=37821,sr=36492,za=36494,ka=36495,Jl=36283,Ha=36284,Va=36285,Ga=36286,_h=3200,vh=3201,Ql=0,xh=1,On="",Qe="srgb",Vi="srgb-linear",hr="linear",re="srgb",ci=7680,xo=519,Mh=512,Sh=513,yh=514,tc=515,Eh=516,bh=517,Th=518,wh=519,Wa=35044,Mo="300 es",bn=2e3,ur=2001;class ri{addEventListener(t,e){this._listeners===void 0&&(this._listeners={});const n=this._listeners;n[t]===void 0&&(n[t]=[]),n[t].indexOf(e)===-1&&n[t].push(e)}hasEventListener(t,e){if(this._listeners===void 0)return!1;const n=this._listeners;return n[t]!==void 0&&n[t].indexOf(e)!==-1}removeEventListener(t,e){if(this._listeners===void 0)return;const s=this._listeners[t];if(s!==void 0){const r=s.indexOf(e);r!==-1&&s.splice(r,1)}}dispatchEvent(t){if(this._listeners===void 0)return;const n=this._listeners[t.type];if(n!==void 0){t.target=this;const s=n.slice(0);for(let r=0,a=s.length;r>8&255]+Re[i>>16&255]+Re[i>>24&255]+"-"+Re[t&255]+Re[t>>8&255]+"-"+Re[t>>16&15|64]+Re[t>>24&255]+"-"+Re[e&63|128]+Re[e>>8&255]+"-"+Re[e>>16&255]+Re[e>>24&255]+Re[n&255]+Re[n>>8&255]+Re[n>>16&255]+Re[n>>24&255]).toLowerCase()}function Xt(i,t,e){return Math.max(t,Math.min(e,i))}function Ah(i,t){return(i%t+t)%t}function Tr(i,t,e){return(1-e)*i+e*t}function fn(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return i/4294967295;case Uint16Array:return i/65535;case Uint8Array:return i/255;case Int32Array:return Math.max(i/2147483647,-1);case Int16Array:return Math.max(i/32767,-1);case Int8Array:return Math.max(i/127,-1);default:throw new Error("Invalid component type.")}}function ae(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return Math.round(i*4294967295);case Uint16Array:return Math.round(i*65535);case Uint8Array:return Math.round(i*255);case Int32Array:return Math.round(i*2147483647);case Int16Array:return Math.round(i*32767);case Int8Array:return Math.round(i*127);default:throw new Error("Invalid component type.")}}const Rh={DEG2RAD:rr};class Mt{constructor(t=0,e=0){Mt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6],this.y=s[1]*e+s[4]*n+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Xt(this.x,t.x,e.x),this.y=Xt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Xt(this.x,t,e),this.y=Xt(this.y,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Xt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Xt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),s=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*s+t.x,this.y=r*s+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class Bt{constructor(t,e,n,s,r,a,o,l,c){Bt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c)}set(t,e,n,s,r,a,o,l,c){const h=this.elements;return h[0]=t,h[1]=s,h[2]=o,h[3]=e,h[4]=r,h[5]=l,h[6]=n,h[7]=a,h[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[3],l=n[6],c=n[1],h=n[4],d=n[7],p=n[2],u=n[5],g=n[8],v=s[0],m=s[3],f=s[6],T=s[1],b=s[4],S=s[7],D=s[2],w=s[5],R=s[8];return r[0]=a*v+o*T+l*D,r[3]=a*m+o*b+l*w,r[6]=a*f+o*S+l*R,r[1]=c*v+h*T+d*D,r[4]=c*m+h*b+d*w,r[7]=c*f+h*S+d*R,r[2]=p*v+u*T+g*D,r[5]=p*m+u*b+g*w,r[8]=p*f+u*S+g*R,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8];return e*a*h-e*o*c-n*r*h+n*o*l+s*r*c-s*a*l}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],d=h*a-o*c,p=o*l-h*r,u=c*r-a*l,g=e*d+n*p+s*u;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const v=1/g;return t[0]=d*v,t[1]=(s*c-h*n)*v,t[2]=(o*n-s*a)*v,t[3]=p*v,t[4]=(h*e-s*l)*v,t[5]=(s*r-o*e)*v,t[6]=u*v,t[7]=(n*l-c*e)*v,t[8]=(a*e-n*r)*v,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,s,r,a,o){const l=Math.cos(r),c=Math.sin(r);return this.set(n*l,n*c,-n*(l*a+c*o)+a+t,-s*c,s*l,-s*(-c*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(wr.makeScale(t,e)),this}rotate(t){return this.premultiply(wr.makeRotation(-t)),this}translate(t,e){return this.premultiply(wr.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<9;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const wr=new Bt;function ec(i){for(let t=i.length-1;t>=0;--t)if(i[t]>=65535)return!0;return!1}function dr(i){return document.createElementNS("http://www.w3.org/1999/xhtml",i)}function Ch(){const i=dr("canvas");return i.style.display="block",i}const So={};function Ri(i){i in So||(So[i]=!0,console.warn(i))}function Ph(i,t,e){return new Promise(function(n,s){function r(){switch(i.clientWaitSync(t,i.SYNC_FLUSH_COMMANDS_BIT,0)){case i.WAIT_FAILED:s();break;case i.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:n()}}setTimeout(r,e)})}function Dh(i){const t=i.elements;t[2]=.5*t[2]+.5*t[3],t[6]=.5*t[6]+.5*t[7],t[10]=.5*t[10]+.5*t[11],t[14]=.5*t[14]+.5*t[15]}function Lh(i){const t=i.elements;t[11]===-1?(t[10]=-t[10]-1,t[14]=-t[14]):(t[10]=-t[10],t[14]=-t[14]+1)}const yo=new Bt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Eo=new Bt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function Uh(){const i={enabled:!0,workingColorSpace:Vi,spaces:{},convert:function(s,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===re&&(s.r=An(s.r),s.g=An(s.g),s.b=An(s.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(s.applyMatrix3(this.spaces[r].toXYZ),s.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===re&&(s.r=Ni(s.r),s.g=Ni(s.g),s.b=Ni(s.b))),s},fromWorkingColorSpace:function(s,r){return this.convert(s,this.workingColorSpace,r)},toWorkingColorSpace:function(s,r){return this.convert(s,r,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===On?hr:this.spaces[s].transfer},getLuminanceCoefficients:function(s,r=this.workingColorSpace){return s.fromArray(this.spaces[r].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,r,a){return s.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return i.define({[Vi]:{primaries:t,whitePoint:n,transfer:hr,toXYZ:yo,fromXYZ:Eo,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:Qe},outputColorSpaceConfig:{drawingBufferColorSpace:Qe}},[Qe]:{primaries:t,whitePoint:n,transfer:re,toXYZ:yo,fromXYZ:Eo,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:Qe}}}),i}const Qt=Uh();function An(i){return i<.04045?i*.0773993808:Math.pow(i*.9478672986+.0521327014,2.4)}function Ni(i){return i<.0031308?i*12.92:1.055*Math.pow(i,.41666)-.055}let hi;class Ih{static getDataURL(t){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{hi===void 0&&(hi=dr("canvas")),hi.width=t.width,hi.height=t.height;const n=hi.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=hi}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=dr("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const s=n.getImageData(0,0,t.width,t.height),r=s.data;for(let a=0;a0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Gl)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case ga:t.x=t.x-Math.floor(t.x);break;case Qn:t.x=t.x<0?0:1;break;case _a:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case ga:t.y=t.y-Math.floor(t.y);break;case Qn:t.y=t.y<0?0:1;break;case _a:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}be.DEFAULT_IMAGE=null;be.DEFAULT_MAPPING=Gl;be.DEFAULT_ANISOTROPY=1;class le{constructor(t=0,e=0,n=0,s=1){le.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,s){return this.x=t,this.y=e,this.z=n,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*s+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*s+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*s+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*s+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,s,r;const l=t.elements,c=l[0],h=l[4],d=l[8],p=l[1],u=l[5],g=l[9],v=l[2],m=l[6],f=l[10];if(Math.abs(h-p)<.01&&Math.abs(d-v)<.01&&Math.abs(g-m)<.01){if(Math.abs(h+p)<.1&&Math.abs(d+v)<.1&&Math.abs(g+m)<.1&&Math.abs(c+u+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const b=(c+1)/2,S=(u+1)/2,D=(f+1)/2,w=(h+p)/4,R=(d+v)/4,U=(g+m)/4;return b>S&&b>D?b<.01?(n=0,s=.707106781,r=.707106781):(n=Math.sqrt(b),s=w/n,r=R/n):S>D?S<.01?(n=.707106781,s=0,r=.707106781):(s=Math.sqrt(S),n=w/s,r=U/s):D<.01?(n=.707106781,s=.707106781,r=0):(r=Math.sqrt(D),n=R/r,s=U/r),this.set(n,s,r,e),this}let T=Math.sqrt((m-g)*(m-g)+(d-v)*(d-v)+(p-h)*(p-h));return Math.abs(T)<.001&&(T=1),this.x=(m-g)/T,this.y=(d-v)/T,this.z=(p-h)/T,this.w=Math.acos((c+u+f-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Xt(this.x,t.x,e.x),this.y=Xt(this.y,t.y,e.y),this.z=Xt(this.z,t.z,e.z),this.w=Xt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Xt(this.x,t,e),this.y=Xt(this.y,t,e),this.z=Xt(this.z,t,e),this.w=Xt(this.w,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Xt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Oh extends ri{constructor(t=1,e=1,n={}){super(),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=1,this.scissor=new le(0,0,t,e),this.scissorTest=!1,this.viewport=new le(0,0,t,e);const s={width:t,height:e,depth:1};n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:pn,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},n);const r=new be(s,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);r.flipY=!1,r.generateMipmaps=n.generateMipmaps,r.internalFormat=n.internalFormat,this.textures=[];const a=n.count;for(let o=0;o=0?1:-1,b=1-f*f;if(b>Number.EPSILON){const D=Math.sqrt(b),w=Math.atan2(D,f*T);m=Math.sin(m*w)/D,o=Math.sin(o*w)/D}const S=o*T;if(l=l*m+p*S,c=c*m+u*S,h=h*m+g*S,d=d*m+v*S,m===1-o){const D=1/Math.sqrt(l*l+c*c+h*h+d*d);l*=D,c*=D,h*=D,d*=D}}t[e]=l,t[e+1]=c,t[e+2]=h,t[e+3]=d}static multiplyQuaternionsFlat(t,e,n,s,r,a){const o=n[s],l=n[s+1],c=n[s+2],h=n[s+3],d=r[a],p=r[a+1],u=r[a+2],g=r[a+3];return t[e]=o*g+h*d+l*u-c*p,t[e+1]=l*g+h*p+c*d-o*u,t[e+2]=c*g+h*u+o*p-l*d,t[e+3]=h*g-o*d-l*p-c*u,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,s){return this._x=t,this._y=e,this._z=n,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,s=t._y,r=t._z,a=t._order,o=Math.cos,l=Math.sin,c=o(n/2),h=o(s/2),d=o(r/2),p=l(n/2),u=l(s/2),g=l(r/2);switch(a){case"XYZ":this._x=p*h*d+c*u*g,this._y=c*u*d-p*h*g,this._z=c*h*g+p*u*d,this._w=c*h*d-p*u*g;break;case"YXZ":this._x=p*h*d+c*u*g,this._y=c*u*d-p*h*g,this._z=c*h*g-p*u*d,this._w=c*h*d+p*u*g;break;case"ZXY":this._x=p*h*d-c*u*g,this._y=c*u*d+p*h*g,this._z=c*h*g+p*u*d,this._w=c*h*d-p*u*g;break;case"ZYX":this._x=p*h*d-c*u*g,this._y=c*u*d+p*h*g,this._z=c*h*g-p*u*d,this._w=c*h*d+p*u*g;break;case"YZX":this._x=p*h*d+c*u*g,this._y=c*u*d+p*h*g,this._z=c*h*g-p*u*d,this._w=c*h*d-p*u*g;break;case"XZY":this._x=p*h*d-c*u*g,this._y=c*u*d-p*h*g,this._z=c*h*g+p*u*d,this._w=c*h*d+p*u*g;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,s=Math.sin(n);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],s=e[4],r=e[8],a=e[1],o=e[5],l=e[9],c=e[2],h=e[6],d=e[10],p=n+o+d;if(p>0){const u=.5/Math.sqrt(p+1);this._w=.25/u,this._x=(h-l)*u,this._y=(r-c)*u,this._z=(a-s)*u}else if(n>o&&n>d){const u=2*Math.sqrt(1+n-o-d);this._w=(h-l)/u,this._x=.25*u,this._y=(s+a)/u,this._z=(r+c)/u}else if(o>d){const u=2*Math.sqrt(1+o-n-d);this._w=(r-c)/u,this._x=(s+a)/u,this._y=.25*u,this._z=(l+h)/u}else{const u=2*Math.sqrt(1+d-n-o);this._w=(a-s)/u,this._x=(r+c)/u,this._y=(l+h)/u,this._z=.25*u}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Xt(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(n===0)return this;const s=Math.min(1,e/n);return this.slerp(t,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,s=t._y,r=t._z,a=t._w,o=e._x,l=e._y,c=e._z,h=e._w;return this._x=n*h+a*o+s*c-r*l,this._y=s*h+a*l+r*o-n*c,this._z=r*h+a*c+n*l-s*o,this._w=a*h-n*o-s*l-r*c,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const n=this._x,s=this._y,r=this._z,a=this._w;let o=a*t._w+n*t._x+s*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=s,this._z=r,this;const l=1-o*o;if(l<=Number.EPSILON){const u=1-e;return this._w=u*a+e*this._w,this._x=u*n+e*this._x,this._y=u*s+e*this._y,this._z=u*r+e*this._z,this.normalize(),this}const c=Math.sqrt(l),h=Math.atan2(c,o),d=Math.sin((1-e)*h)/c,p=Math.sin(e*h)/c;return this._w=a*d+this._w*p,this._x=n*d+this._x*p,this._y=s*d+this._y*p,this._z=r*d+this._z*p,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),s=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class C{constructor(t=0,e=0,n=0){C.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(bo.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(bo.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*s,this.y=r[1]*e+r[4]*n+r[7]*s,this.z=r[2]*e+r[5]*n+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*s+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*s+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*s+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,s=this.z,r=t.x,a=t.y,o=t.z,l=t.w,c=2*(a*s-o*n),h=2*(o*e-r*s),d=2*(r*n-a*e);return this.x=e+l*c+a*d-o*h,this.y=n+l*h+o*c-r*d,this.z=s+l*d+r*h-a*c,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*s,this.y=r[1]*e+r[5]*n+r[9]*s,this.z=r[2]*e+r[6]*n+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Xt(this.x,t.x,e.x),this.y=Xt(this.y,t.y,e.y),this.z=Xt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Xt(this.x,t,e),this.y=Xt(this.y,t,e),this.z=Xt(this.z,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Xt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,s=t.y,r=t.z,a=e.x,o=e.y,l=e.z;return this.x=s*l-r*o,this.y=r*a-n*l,this.z=n*o-s*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Rr.copy(this).projectOnVector(t),this.sub(Rr)}reflect(t){return this.sub(Rr.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Xt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,s=this.z-t.z;return e*e+n*n+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const s=Math.sin(e)*t;return this.x=s*Math.sin(n),this.y=Math.cos(e)*t,this.z=s*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Rr=new C,bo=new si;class ai{constructor(t=new C(1/0,1/0,1/0),e=new C(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,sn),sn.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Ki),Ts.subVectors(this.max,Ki),ui.subVectors(t.a,Ki),di.subVectors(t.b,Ki),fi.subVectors(t.c,Ki),Cn.subVectors(di,ui),Pn.subVectors(fi,di),Gn.subVectors(ui,fi);let e=[0,-Cn.z,Cn.y,0,-Pn.z,Pn.y,0,-Gn.z,Gn.y,Cn.z,0,-Cn.x,Pn.z,0,-Pn.x,Gn.z,0,-Gn.x,-Cn.y,Cn.x,0,-Pn.y,Pn.x,0,-Gn.y,Gn.x,0];return!Cr(e,ui,di,fi,Ts)||(e=[1,0,0,0,1,0,0,0,1],!Cr(e,ui,di,fi,Ts))?!1:(ws.crossVectors(Cn,Pn),e=[ws.x,ws.y,ws.z],Cr(e,ui,di,fi,Ts))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,sn).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(sn).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(_n[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),_n[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),_n[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),_n[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),_n[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),_n[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),_n[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),_n[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(_n),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const _n=[new C,new C,new C,new C,new C,new C,new C,new C],sn=new C,bs=new ai,ui=new C,di=new C,fi=new C,Cn=new C,Pn=new C,Gn=new C,Ki=new C,Ts=new C,ws=new C,Wn=new C;function Cr(i,t,e,n,s){for(let r=0,a=i.length-3;r<=a;r+=3){Wn.fromArray(i,r);const o=s.x*Math.abs(Wn.x)+s.y*Math.abs(Wn.y)+s.z*Math.abs(Wn.z),l=t.dot(Wn),c=e.dot(Wn),h=n.dot(Wn);if(Math.max(-Math.max(l,c,h),Math.min(l,c,h))>o)return!1}return!0}const zh=new ai,$i=new C,Pr=new C;class oi{constructor(t=new C,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;e!==void 0?n.copy(e):zh.setFromPoints(t).getCenter(n);let s=0;for(let r=0,a=t.length;rthis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;$i.subVectors(t,this.center);const e=$i.lengthSq();if(e>this.radius*this.radius){const n=Math.sqrt(e),s=(n-this.radius)*.5;this.center.addScaledVector($i,s/n),this.radius+=s}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Pr.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint($i.copy(t.center).add(Pr)),this.expandByPoint($i.copy(t.center).sub(Pr))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}}const vn=new C,Dr=new C,As=new C,Dn=new C,Lr=new C,Rs=new C,Ur=new C;class ms{constructor(t=new C,e=new C(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,vn)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=vn.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(vn.copy(this.origin).addScaledVector(this.direction,e),vn.distanceToSquared(t))}distanceSqToSegment(t,e,n,s){Dr.copy(t).add(e).multiplyScalar(.5),As.copy(e).sub(t).normalize(),Dn.copy(this.origin).sub(Dr);const r=t.distanceTo(e)*.5,a=-this.direction.dot(As),o=Dn.dot(this.direction),l=-Dn.dot(As),c=Dn.lengthSq(),h=Math.abs(1-a*a);let d,p,u,g;if(h>0)if(d=a*l-o,p=a*o-l,g=r*h,d>=0)if(p>=-g)if(p<=g){const v=1/h;d*=v,p*=v,u=d*(d+a*p+2*o)+p*(a*d+p+2*l)+c}else p=r,d=Math.max(0,-(a*p+o)),u=-d*d+p*(p+2*l)+c;else p=-r,d=Math.max(0,-(a*p+o)),u=-d*d+p*(p+2*l)+c;else p<=-g?(d=Math.max(0,-(-a*r+o)),p=d>0?-r:Math.min(Math.max(-r,-l),r),u=-d*d+p*(p+2*l)+c):p<=g?(d=0,p=Math.min(Math.max(-r,-l),r),u=p*(p+2*l)+c):(d=Math.max(0,-(a*r+o)),p=d>0?r:Math.min(Math.max(-r,-l),r),u=-d*d+p*(p+2*l)+c);else p=a>0?-r:r,d=Math.max(0,-(a*p+o)),u=-d*d+p*(p+2*l)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Dr).addScaledVector(As,p),u}intersectSphere(t,e){vn.subVectors(t.center,this.origin);const n=vn.dot(this.direction),s=vn.dot(vn)-n*n,r=t.radius*t.radius;if(s>r)return null;const a=Math.sqrt(r-s),o=n-a,l=n+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return n===null?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,s,r,a,o,l;const c=1/this.direction.x,h=1/this.direction.y,d=1/this.direction.z,p=this.origin;return c>=0?(n=(t.min.x-p.x)*c,s=(t.max.x-p.x)*c):(n=(t.max.x-p.x)*c,s=(t.min.x-p.x)*c),h>=0?(r=(t.min.y-p.y)*h,a=(t.max.y-p.y)*h):(r=(t.max.y-p.y)*h,a=(t.min.y-p.y)*h),n>a||r>s||((r>n||isNaN(n))&&(n=r),(a=0?(o=(t.min.z-p.z)*d,l=(t.max.z-p.z)*d):(o=(t.max.z-p.z)*d,l=(t.min.z-p.z)*d),n>l||o>s)||((o>n||n!==n)&&(n=o),(l=0?n:s,e)}intersectsBox(t){return this.intersectBox(t,vn)!==null}intersectTriangle(t,e,n,s,r){Lr.subVectors(e,t),Rs.subVectors(n,t),Ur.crossVectors(Lr,Rs);let a=this.direction.dot(Ur),o;if(a>0){if(s)return null;o=1}else if(a<0)o=-1,a=-a;else return null;Dn.subVectors(this.origin,t);const l=o*this.direction.dot(Rs.crossVectors(Dn,Rs));if(l<0)return null;const c=o*this.direction.dot(Lr.cross(Dn));if(c<0||l+c>a)return null;const h=-o*Dn.dot(Ur);return h<0?null:this.at(h/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class ie{constructor(t,e,n,s,r,a,o,l,c,h,d,p,u,g,v,m){ie.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c,h,d,p,u,g,v,m)}set(t,e,n,s,r,a,o,l,c,h,d,p,u,g,v,m){const f=this.elements;return f[0]=t,f[4]=e,f[8]=n,f[12]=s,f[1]=r,f[5]=a,f[9]=o,f[13]=l,f[2]=c,f[6]=h,f[10]=d,f[14]=p,f[3]=u,f[7]=g,f[11]=v,f[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ie().fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,s=1/pi.setFromMatrixColumn(t,0).length(),r=1/pi.setFromMatrixColumn(t,1).length(),a=1/pi.setFromMatrixColumn(t,2).length();return e[0]=n[0]*s,e[1]=n[1]*s,e[2]=n[2]*s,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,s=t.y,r=t.z,a=Math.cos(n),o=Math.sin(n),l=Math.cos(s),c=Math.sin(s),h=Math.cos(r),d=Math.sin(r);if(t.order==="XYZ"){const p=a*h,u=a*d,g=o*h,v=o*d;e[0]=l*h,e[4]=-l*d,e[8]=c,e[1]=u+g*c,e[5]=p-v*c,e[9]=-o*l,e[2]=v-p*c,e[6]=g+u*c,e[10]=a*l}else if(t.order==="YXZ"){const p=l*h,u=l*d,g=c*h,v=c*d;e[0]=p+v*o,e[4]=g*o-u,e[8]=a*c,e[1]=a*d,e[5]=a*h,e[9]=-o,e[2]=u*o-g,e[6]=v+p*o,e[10]=a*l}else if(t.order==="ZXY"){const p=l*h,u=l*d,g=c*h,v=c*d;e[0]=p-v*o,e[4]=-a*d,e[8]=g+u*o,e[1]=u+g*o,e[5]=a*h,e[9]=v-p*o,e[2]=-a*c,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const p=a*h,u=a*d,g=o*h,v=o*d;e[0]=l*h,e[4]=g*c-u,e[8]=p*c+v,e[1]=l*d,e[5]=v*c+p,e[9]=u*c-g,e[2]=-c,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const p=a*l,u=a*c,g=o*l,v=o*c;e[0]=l*h,e[4]=v-p*d,e[8]=g*d+u,e[1]=d,e[5]=a*h,e[9]=-o*h,e[2]=-c*h,e[6]=u*d+g,e[10]=p-v*d}else if(t.order==="XZY"){const p=a*l,u=a*c,g=o*l,v=o*c;e[0]=l*h,e[4]=-d,e[8]=c*h,e[1]=p*d+v,e[5]=a*h,e[9]=u*d-g,e[2]=g*d-u,e[6]=o*h,e[10]=v*d+p}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(kh,t,Hh)}lookAt(t,e,n){const s=this.elements;return Ye.subVectors(t,e),Ye.lengthSq()===0&&(Ye.z=1),Ye.normalize(),Ln.crossVectors(n,Ye),Ln.lengthSq()===0&&(Math.abs(n.z)===1?Ye.x+=1e-4:Ye.z+=1e-4,Ye.normalize(),Ln.crossVectors(n,Ye)),Ln.normalize(),Cs.crossVectors(Ye,Ln),s[0]=Ln.x,s[4]=Cs.x,s[8]=Ye.x,s[1]=Ln.y,s[5]=Cs.y,s[9]=Ye.y,s[2]=Ln.z,s[6]=Cs.z,s[10]=Ye.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[4],l=n[8],c=n[12],h=n[1],d=n[5],p=n[9],u=n[13],g=n[2],v=n[6],m=n[10],f=n[14],T=n[3],b=n[7],S=n[11],D=n[15],w=s[0],R=s[4],U=s[8],y=s[12],M=s[1],P=s[5],W=s[9],z=s[13],G=s[2],$=s[6],X=s[10],Q=s[14],k=s[3],it=s[7],ft=s[11],St=s[15];return r[0]=a*w+o*M+l*G+c*k,r[4]=a*R+o*P+l*$+c*it,r[8]=a*U+o*W+l*X+c*ft,r[12]=a*y+o*z+l*Q+c*St,r[1]=h*w+d*M+p*G+u*k,r[5]=h*R+d*P+p*$+u*it,r[9]=h*U+d*W+p*X+u*ft,r[13]=h*y+d*z+p*Q+u*St,r[2]=g*w+v*M+m*G+f*k,r[6]=g*R+v*P+m*$+f*it,r[10]=g*U+v*W+m*X+f*ft,r[14]=g*y+v*z+m*Q+f*St,r[3]=T*w+b*M+S*G+D*k,r[7]=T*R+b*P+S*$+D*it,r[11]=T*U+b*W+S*X+D*ft,r[15]=T*y+b*z+S*Q+D*St,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],s=t[8],r=t[12],a=t[1],o=t[5],l=t[9],c=t[13],h=t[2],d=t[6],p=t[10],u=t[14],g=t[3],v=t[7],m=t[11],f=t[15];return g*(+r*l*d-s*c*d-r*o*p+n*c*p+s*o*u-n*l*u)+v*(+e*l*u-e*c*p+r*a*p-s*a*u+s*c*h-r*l*h)+m*(+e*c*d-e*o*u-r*a*d+n*a*u+r*o*h-n*c*h)+f*(-s*o*h-e*l*d+e*o*p+s*a*d-n*a*p+n*l*h)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const s=this.elements;return t.isVector3?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=e,s[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],d=t[9],p=t[10],u=t[11],g=t[12],v=t[13],m=t[14],f=t[15],T=d*m*c-v*p*c+v*l*u-o*m*u-d*l*f+o*p*f,b=g*p*c-h*m*c-g*l*u+a*m*u+h*l*f-a*p*f,S=h*v*c-g*d*c+g*o*u-a*v*u-h*o*f+a*d*f,D=g*d*l-h*v*l-g*o*p+a*v*p+h*o*m-a*d*m,w=e*T+n*b+s*S+r*D;if(w===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const R=1/w;return t[0]=T*R,t[1]=(v*p*r-d*m*r-v*s*u+n*m*u+d*s*f-n*p*f)*R,t[2]=(o*m*r-v*l*r+v*s*c-n*m*c-o*s*f+n*l*f)*R,t[3]=(d*l*r-o*p*r-d*s*c+n*p*c+o*s*u-n*l*u)*R,t[4]=b*R,t[5]=(h*m*r-g*p*r+g*s*u-e*m*u-h*s*f+e*p*f)*R,t[6]=(g*l*r-a*m*r-g*s*c+e*m*c+a*s*f-e*l*f)*R,t[7]=(a*p*r-h*l*r+h*s*c-e*p*c-a*s*u+e*l*u)*R,t[8]=S*R,t[9]=(g*d*r-h*v*r-g*n*u+e*v*u+h*n*f-e*d*f)*R,t[10]=(a*v*r-g*o*r+g*n*c-e*v*c-a*n*f+e*o*f)*R,t[11]=(h*o*r-a*d*r-h*n*c+e*d*c+a*n*u-e*o*u)*R,t[12]=D*R,t[13]=(h*v*s-g*d*s+g*n*p-e*v*p-h*n*m+e*d*m)*R,t[14]=(g*o*s-a*v*s-g*n*l+e*v*l+a*n*m-e*o*m)*R,t[15]=(a*d*s-h*o*s+h*n*l-e*d*l-a*n*p+e*o*p)*R,this}scale(t){const e=this.elements,n=t.x,s=t.y,r=t.z;return e[0]*=n,e[4]*=s,e[8]*=r,e[1]*=n,e[5]*=s,e[9]*=r,e[2]*=n,e[6]*=s,e[10]*=r,e[3]*=n,e[7]*=s,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,s))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),s=Math.sin(e),r=1-n,a=t.x,o=t.y,l=t.z,c=r*a,h=r*o;return this.set(c*a+n,c*o-s*l,c*l+s*o,0,c*o+s*l,h*o+n,h*l-s*a,0,c*l-s*o,h*l+s*a,r*l*l+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,s,r,a){return this.set(1,n,r,0,t,1,a,0,e,s,1,0,0,0,0,1),this}compose(t,e,n){const s=this.elements,r=e._x,a=e._y,o=e._z,l=e._w,c=r+r,h=a+a,d=o+o,p=r*c,u=r*h,g=r*d,v=a*h,m=a*d,f=o*d,T=l*c,b=l*h,S=l*d,D=n.x,w=n.y,R=n.z;return s[0]=(1-(v+f))*D,s[1]=(u+S)*D,s[2]=(g-b)*D,s[3]=0,s[4]=(u-S)*w,s[5]=(1-(p+f))*w,s[6]=(m+T)*w,s[7]=0,s[8]=(g+b)*R,s[9]=(m-T)*R,s[10]=(1-(p+v))*R,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,e,n){const s=this.elements;let r=pi.set(s[0],s[1],s[2]).length();const a=pi.set(s[4],s[5],s[6]).length(),o=pi.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],rn.copy(this);const c=1/r,h=1/a,d=1/o;return rn.elements[0]*=c,rn.elements[1]*=c,rn.elements[2]*=c,rn.elements[4]*=h,rn.elements[5]*=h,rn.elements[6]*=h,rn.elements[8]*=d,rn.elements[9]*=d,rn.elements[10]*=d,e.setFromRotationMatrix(rn),n.x=r,n.y=a,n.z=o,this}makePerspective(t,e,n,s,r,a,o=bn){const l=this.elements,c=2*r/(e-t),h=2*r/(n-s),d=(e+t)/(e-t),p=(n+s)/(n-s);let u,g;if(o===bn)u=-(a+r)/(a-r),g=-2*a*r/(a-r);else if(o===ur)u=-a/(a-r),g=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=d,l[12]=0,l[1]=0,l[5]=h,l[9]=p,l[13]=0,l[2]=0,l[6]=0,l[10]=u,l[14]=g,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,n,s,r,a,o=bn){const l=this.elements,c=1/(e-t),h=1/(n-s),d=1/(a-r),p=(e+t)*c,u=(n+s)*h;let g,v;if(o===bn)g=(a+r)*d,v=-2*d;else if(o===ur)g=r*d,v=-1*d;else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=2*c,l[4]=0,l[8]=0,l[12]=-p,l[1]=0,l[5]=2*h,l[9]=0,l[13]=-u,l[2]=0,l[6]=0,l[10]=v,l[14]=-g,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<16;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const pi=new C,rn=new ie,kh=new C(0,0,0),Hh=new C(1,1,1),Ln=new C,Cs=new C,Ye=new C,To=new ie,wo=new si;class gn{constructor(t=0,e=0,n=0,s=gn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,s=this._order){return this._x=t,this._y=e,this._z=n,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const s=t.elements,r=s[0],a=s[4],o=s[8],l=s[1],c=s[5],h=s[9],d=s[2],p=s[6],u=s[10];switch(e){case"XYZ":this._y=Math.asin(Xt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,u),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(p,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Xt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,u),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,r),this._z=0);break;case"ZXY":this._x=Math.asin(Xt(p,-1,1)),Math.abs(p)<.9999999?(this._y=Math.atan2(-d,u),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-Xt(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(p,u),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-a,c));break;case"YZX":this._z=Math.asin(Xt(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-d,r)):(this._x=0,this._y=Math.atan2(o,u));break;case"XZY":this._z=Math.asin(-Xt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(p,c),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-h,u),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return To.makeRotationFromQuaternion(t),this.setFromRotationMatrix(To,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return wo.setFromEuler(this),this.setFromQuaternion(wo,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}gn.DEFAULT_ORDER="XYZ";class ao{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let e=0;e1){for(let n=0;n0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.visibility=this._visibility,s.active=this._active,s.bounds=this._bounds.map(o=>({boxInitialized:o.boxInitialized,boxMin:o.box.min.toArray(),boxMax:o.box.max.toArray(),sphereInitialized:o.sphereInitialized,sphereRadius:o.sphere.radius,sphereCenter:o.sphere.center.toArray()})),s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.geometryCount=this._geometryCount,s.matricesTexture=this._matricesTexture.toJSON(t),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(s.boundingSphere={center:s.boundingSphere.center.toArray(),radius:s.boundingSphere.radius}),this.boundingBox!==null&&(s.boundingBox={min:s.boundingBox.min.toArray(),max:s.boundingBox.max.toArray()}));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,h=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(n.geometries=o),l.length>0&&(n.materials=l),c.length>0&&(n.textures=c),h.length>0&&(n.images=h),d.length>0&&(n.shapes=d),p.length>0&&(n.skeletons=p),u.length>0&&(n.animations=u),g.length>0&&(n.nodes=g)}return n.object=s,n;function a(o){const l=[];for(const c in o){const h=o[c];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,n,s,r){an.subVectors(s,e),Mn.subVectors(n,e),Nr.subVectors(t,e);const a=an.dot(an),o=an.dot(Mn),l=an.dot(Nr),c=Mn.dot(Mn),h=Mn.dot(Nr),d=a*c-o*o;if(d===0)return r.set(0,0,0),null;const p=1/d,u=(c*l-o*h)*p,g=(a*h-o*l)*p;return r.set(1-u-g,g,u)}static containsPoint(t,e,n,s){return this.getBarycoord(t,e,n,s,Sn)===null?!1:Sn.x>=0&&Sn.y>=0&&Sn.x+Sn.y<=1}static getInterpolation(t,e,n,s,r,a,o,l){return this.getBarycoord(t,e,n,s,Sn)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,Sn.x),l.addScaledVector(a,Sn.y),l.addScaledVector(o,Sn.z),l)}static getInterpolatedAttribute(t,e,n,s,r,a){return zr.setScalar(0),kr.setScalar(0),Hr.setScalar(0),zr.fromBufferAttribute(t,e),kr.fromBufferAttribute(t,n),Hr.fromBufferAttribute(t,s),a.setScalar(0),a.addScaledVector(zr,r.x),a.addScaledVector(kr,r.y),a.addScaledVector(Hr,r.z),a}static isFrontFacing(t,e,n,s){return an.subVectors(n,e),Mn.subVectors(t,e),an.cross(Mn).dot(s)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,s){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,n,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,s),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return an.subVectors(this.c,this.b),Mn.subVectors(this.a,this.b),an.cross(Mn).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return tn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return tn.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,s,r){return tn.getInterpolation(t,this.a,this.b,this.c,e,n,s,r)}containsPoint(t){return tn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return tn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,s=this.b,r=this.c;let a,o;_i.subVectors(s,n),vi.subVectors(r,n),Fr.subVectors(t,n);const l=_i.dot(Fr),c=vi.dot(Fr);if(l<=0&&c<=0)return e.copy(n);Or.subVectors(t,s);const h=_i.dot(Or),d=vi.dot(Or);if(h>=0&&d<=h)return e.copy(s);const p=l*d-h*c;if(p<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(n).addScaledVector(_i,a);Br.subVectors(t,r);const u=_i.dot(Br),g=vi.dot(Br);if(g>=0&&u<=g)return e.copy(r);const v=u*c-l*g;if(v<=0&&c>=0&&g<=0)return o=c/(c-g),e.copy(n).addScaledVector(vi,o);const m=h*g-u*d;if(m<=0&&d-h>=0&&u-g>=0)return Lo.subVectors(r,s),o=(d-h)/(d-h+(u-g)),e.copy(s).addScaledVector(Lo,o);const f=1/(m+v+p);return a=v*f,o=p*f,e.copy(n).addScaledVector(_i,a).addScaledVector(vi,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const sc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Un={h:0,s:0,l:0},Ds={h:0,s:0,l:0};function Vr(i,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?i+(t-i)*6*e:e<1/2?t:e<2/3?i+(t-i)*6*(2/3-e):i}class rt{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){const s=t;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=Qe){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Qt.toWorkingColorSpace(this,e),this}setRGB(t,e,n,s=Qt.workingColorSpace){return this.r=t,this.g=e,this.b=n,Qt.toWorkingColorSpace(this,s),this}setHSL(t,e,n,s=Qt.workingColorSpace){if(t=Ah(t,1),e=Xt(e,0,1),n=Xt(n,0,1),e===0)this.r=this.g=this.b=n;else{const r=n<=.5?n*(1+e):n+e-n*e,a=2*n-r;this.r=Vr(a,r,t+1/3),this.g=Vr(a,r,t),this.b=Vr(a,r,t-1/3)}return Qt.toWorkingColorSpace(this,s),this}setStyle(t,e=Qe){function n(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=s[1],o=s[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=s[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=Qe){const n=sc[t.toLowerCase()];return n!==void 0?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=An(t.r),this.g=An(t.g),this.b=An(t.b),this}copyLinearToSRGB(t){return this.r=Ni(t.r),this.g=Ni(t.g),this.b=Ni(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=Qe){return Qt.fromWorkingColorSpace(Ce.copy(this),t),Math.round(Xt(Ce.r*255,0,255))*65536+Math.round(Xt(Ce.g*255,0,255))*256+Math.round(Xt(Ce.b*255,0,255))}getHexString(t=Qe){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Qt.workingColorSpace){Qt.fromWorkingColorSpace(Ce.copy(this),e);const n=Ce.r,s=Ce.g,r=Ce.b,a=Math.max(n,s,r),o=Math.min(n,s,r);let l,c;const h=(o+a)/2;if(o===a)l=0,c=0;else{const d=a-o;switch(c=h<=.5?d/(a+o):d/(2-a-o),a){case n:l=(s-r)/d+(s0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const n=t[e];if(n===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];if(s===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(n):s&&s.isVector3&&n&&n.isVector3?s.copy(n):this[e]=n}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==Ui&&(n.blending=this.blending),this.side!==kn&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==ra&&(n.blendSrc=this.blendSrc),this.blendDst!==aa&&(n.blendDst=this.blendDst),this.blendEquation!==$n&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==Oi&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==xo&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==ci&&(n.stencilFail=this.stencilFail),this.stencilZFail!==ci&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==ci&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function s(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(e){const r=s(t.textures),a=s(t.images);r.length>0&&(n.textures=r),a.length>0&&(n.images=a)}return n}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(e!==null){const s=e.length;n=new Array(s);for(let r=0;r!==s;++r)n[r]=e[r].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}}class ds extends Hn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new rt(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new gn,this.combine=Hl,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const ve=new C,Ls=new Mt;class ue{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=Wa,this.updateRanges=[],this.gpuType=mn,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let s=0,r=this.itemSize;se.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ai);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new C(-1/0,-1/0,-1/0),new C(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,s=e.length;n0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(t[c]=l[c]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const l in n){const c=n[l];t.data.attributes[l]=c.toJSON(t.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],h=[];for(let d=0,p=c.length;d0&&(s[l]=h,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;n!==null&&this.setIndex(n.clone(e));const s=t.attributes;for(const c in s){const h=s[c];this.setAttribute(c,h.clone(e))}const r=t.morphAttributes;for(const c in r){const h=[],d=r[c];for(let p=0,u=d.length;p0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r(t.far-t.near)**2))&&(Uo.copy(r).invert(),Xn.copy(t.ray).applyMatrix4(Uo),!(n.boundingBox!==null&&Xn.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(t,e,Xn)))}_computeIntersections(t,e,n){let s;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,c=r.attributes.uv,h=r.attributes.uv1,d=r.attributes.normal,p=r.groups,u=r.drawRange;if(o!==null)if(Array.isArray(a))for(let g=0,v=p.length;ge.far?null:{distance:c,point:Bs.clone(),object:i}}function zs(i,t,e,n,s,r,a,o,l,c){i.getVertexPosition(o,Is),i.getVertexPosition(l,Ns),i.getVertexPosition(c,Fs);const h=jh(i,t,e,n,Is,Ns,Fs,No);if(h){const d=new C;tn.getBarycoord(No,Is,Ns,Fs,d),s&&(h.uv=tn.getInterpolatedAttribute(s,o,l,c,d,new Mt)),r&&(h.uv1=tn.getInterpolatedAttribute(r,o,l,c,d,new Mt)),a&&(h.normal=tn.getInterpolatedAttribute(a,o,l,c,d,new C),h.normal.dot(n.direction)>0&&h.normal.multiplyScalar(-1));const p={a:o,b:l,c,normal:new C,materialIndex:0};tn.getNormal(Is,Ns,Fs,p.normal),h.face=p,h.barycoord=d}return h}class gs extends ge{constructor(t=1,e=1,n=1,s=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:s,heightSegments:r,depthSegments:a};const o=this;s=Math.floor(s),r=Math.floor(r),a=Math.floor(a);const l=[],c=[],h=[],d=[];let p=0,u=0;g("z","y","x",-1,-1,n,e,t,a,r,0),g("z","y","x",1,-1,n,e,-t,a,r,1),g("x","z","y",1,1,t,n,e,s,a,2),g("x","z","y",1,-1,t,n,-e,s,a,3),g("x","y","z",1,-1,t,e,n,s,r,4),g("x","y","z",-1,-1,t,e,-n,s,r,5),this.setIndex(l),this.setAttribute("position",new Le(c,3)),this.setAttribute("normal",new Le(h,3)),this.setAttribute("uv",new Le(d,2));function g(v,m,f,T,b,S,D,w,R,U,y){const M=S/R,P=D/U,W=S/2,z=D/2,G=w/2,$=R+1,X=U+1;let Q=0,k=0;const it=new C;for(let ft=0;ft0?1:-1,h.push(it.x,it.y,it.z),d.push(Ft/R),d.push(1-ft/U),Q+=1}}for(let ft=0;ft>8&255]+Ne[i>>16&255]+Ne[i>>24&255]+"-"+Ne[t&255]+Ne[t>>8&255]+"-"+Ne[t>>16&15|64]+Ne[t>>24&255]+"-"+Ne[e&63|128]+Ne[e>>8&255]+"-"+Ne[e>>16&255]+Ne[e>>24&255]+Ne[n&255]+Ne[n>>8&255]+Ne[n>>16&255]+Ne[n>>24&255]).toLowerCase()}function Yt(i,t,e){return Math.max(t,Math.min(e,i))}function Uh(i,t){return(i%t+t)%t}function Dr(i,t,e){return(1-e)*i+e*t}function gn(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return i/4294967295;case Uint16Array:return i/65535;case Uint8Array:return i/255;case Int32Array:return Math.max(i/2147483647,-1);case Int16Array:return Math.max(i/32767,-1);case Int8Array:return Math.max(i/127,-1);default:throw new Error("Invalid component type.")}}function se(i,t){switch(t.constructor){case Float32Array:return i;case Uint32Array:return Math.round(i*4294967295);case Uint16Array:return Math.round(i*65535);case Uint8Array:return Math.round(i*255);case Int32Array:return Math.round(i*2147483647);case Int16Array:return Math.round(i*32767);case Int8Array:return Math.round(i*127);default:throw new Error("Invalid component type.")}}const Ih={DEG2RAD:ur};class xt{constructor(t=0,e=0){xt.prototype.isVector2=!0,this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t){return this.x+=t.x,this.y+=t.y,this}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,s=t.elements;return this.x=s[0]*e+s[3]*n+s[6],this.y=s[1]*e+s[4]*n+s[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Yt(this.x,t.x,e.x),this.y=Yt(this.y,t.y,e.y),this}clampScalar(t,e){return this.x=Yt(this.x,t,e),this.y=Yt(this.y,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Yt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.x}lengthSq(){return this.x*this.x+this.y*this.y}length(){return Math.sqrt(this.x*this.x+this.y*this.y)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)}normalize(){return this.divideScalar(this.length()||1)}angle(){return Math.atan2(-this.y,-this.x)+Math.PI}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Yt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x&&t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),s=Math.sin(e),r=this.x-t.x,a=this.y-t.y;return this.x=r*n-a*s+t.x,this.y=r*s+a*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class zt{constructor(t,e,n,s,r,a,o,l,c){zt.prototype.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c)}set(t,e,n,s,r,a,o,l,c){const h=this.elements;return h[0]=t,h[1]=s,h[2]=o,h[3]=e,h[4]=r,h[5]=l,h[6]=n,h[7]=a,h[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[3],l=n[6],c=n[1],h=n[4],d=n[7],f=n[2],u=n[5],g=n[8],_=s[0],m=s[3],p=s[6],T=s[1],E=s[4],y=s[7],D=s[2],A=s[5],C=s[8];return r[0]=a*_+o*T+l*D,r[3]=a*m+o*E+l*A,r[6]=a*p+o*y+l*C,r[1]=c*_+h*T+d*D,r[4]=c*m+h*E+d*A,r[7]=c*p+h*y+d*C,r[2]=f*_+u*T+g*D,r[5]=f*m+u*E+g*A,r[8]=f*p+u*y+g*C,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8];return e*a*h-e*o*c-n*r*h+n*o*l+s*r*c-s*a*l}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],d=h*a-o*c,f=o*l-h*r,u=c*r-a*l,g=e*d+n*f+s*u;if(g===0)return this.set(0,0,0,0,0,0,0,0,0);const _=1/g;return t[0]=d*_,t[1]=(s*c-h*n)*_,t[2]=(o*n-s*a)*_,t[3]=f*_,t[4]=(h*e-s*l)*_,t[5]=(s*r-o*e)*_,t[6]=u*_,t[7]=(n*l-c*e)*_,t[8]=(a*e-n*r)*_,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,s,r,a,o){const l=Math.cos(r),c=Math.sin(r);return this.set(n*l,n*c,-n*(l*a+c*o)+a+t,-s*c,s*l,-s*(-c*a+l*o)+o+e,0,0,1),this}scale(t,e){return this.premultiply(Lr.makeScale(t,e)),this}rotate(t){return this.premultiply(Lr.makeRotation(-t)),this}translate(t,e){return this.premultiply(Lr.makeTranslation(t,e)),this}makeTranslation(t,e){return t.isVector2?this.set(1,0,t.x,0,1,t.y,0,0,1):this.set(1,0,t,0,1,e,0,0,1),this}makeRotation(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,n,e,0,0,0,1),this}makeScale(t,e){return this.set(t,0,0,0,e,0,0,0,1),this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<9;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return new this.constructor().fromArray(this.elements)}}const Lr=new zt;function lc(i){for(let t=i.length-1;t>=0;--t)if(i[t]>=65535)return!0;return!1}function vr(i){return document.createElementNS("http://www.w3.org/1999/xhtml",i)}function Nh(){const i=vr("canvas");return i.style.display="block",i}const Po={};function Fi(i){i in Po||(Po[i]=!0,console.warn(i))}function Fh(i,t,e){return new Promise(function(n,s){function r(){switch(i.clientWaitSync(t,i.SYNC_FLUSH_COMMANDS_BIT,0)){case i.WAIT_FAILED:s();break;case i.TIMEOUT_EXPIRED:setTimeout(r,e);break;default:n()}}setTimeout(r,e)})}function Oh(i){const t=i.elements;t[2]=.5*t[2]+.5*t[3],t[6]=.5*t[6]+.5*t[7],t[10]=.5*t[10]+.5*t[11],t[14]=.5*t[14]+.5*t[15]}function Bh(i){const t=i.elements;t[11]===-1?(t[10]=-t[10]-1,t[14]=-t[14]):(t[10]=-t[10],t[14]=-t[14]+1)}const Do=new zt().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Lo=new zt().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function zh(){const i={enabled:!0,workingColorSpace:Ji,spaces:{},convert:function(s,r,a){return this.enabled===!1||r===a||!r||!a||(this.spaces[r].transfer===ie&&(s.r=Pn(s.r),s.g=Pn(s.g),s.b=Pn(s.b)),this.spaces[r].primaries!==this.spaces[a].primaries&&(s.applyMatrix3(this.spaces[r].toXYZ),s.applyMatrix3(this.spaces[a].fromXYZ)),this.spaces[a].transfer===ie&&(s.r=Wi(s.r),s.g=Wi(s.g),s.b=Wi(s.b))),s},fromWorkingColorSpace:function(s,r){return this.convert(s,this.workingColorSpace,r)},toWorkingColorSpace:function(s,r){return this.convert(s,r,this.workingColorSpace)},getPrimaries:function(s){return this.spaces[s].primaries},getTransfer:function(s){return s===kn?gr:this.spaces[s].transfer},getLuminanceCoefficients:function(s,r=this.workingColorSpace){return s.fromArray(this.spaces[r].luminanceCoefficients)},define:function(s){Object.assign(this.spaces,s)},_getMatrix:function(s,r,a){return s.copy(this.spaces[r].toXYZ).multiply(this.spaces[a].fromXYZ)},_getDrawingBufferColorSpace:function(s){return this.spaces[s].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(s=this.workingColorSpace){return this.spaces[s].workingColorSpaceConfig.unpackColorSpace}},t=[.64,.33,.3,.6,.15,.06],e=[.2126,.7152,.0722],n=[.3127,.329];return i.define({[Ji]:{primaries:t,whitePoint:n,transfer:gr,toXYZ:Do,fromXYZ:Lo,luminanceCoefficients:e,workingColorSpaceConfig:{unpackColorSpace:sn},outputColorSpaceConfig:{drawingBufferColorSpace:sn}},[sn]:{primaries:t,whitePoint:n,transfer:ie,toXYZ:Do,fromXYZ:Lo,luminanceCoefficients:e,outputColorSpaceConfig:{drawingBufferColorSpace:sn}}}),i}const Jt=zh();function Pn(i){return i<.04045?i*.0773993808:Math.pow(i*.9478672986+.0521327014,2.4)}function Wi(i){return i<.0031308?i*12.92:1.055*Math.pow(i,.41666)-.055}let vi;class kh{static getDataURL(t){if(/^data:/i.test(t.src)||typeof HTMLCanvasElement>"u")return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{vi===void 0&&(vi=vr("canvas")),vi.width=t.width,vi.height=t.height;const n=vi.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=vi}return e.width>2048||e.height>2048?(console.warn("THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons",t),e.toDataURL("image/jpeg",.6)):e.toDataURL("image/png")}static sRGBToLinear(t){if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap){const e=vr("canvas");e.width=t.width,e.height=t.height;const n=e.getContext("2d");n.drawImage(t,0,0,t.width,t.height);const s=n.getImageData(0,0,t.width,t.height),r=s.data;for(let a=0;a0&&(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:"dispose"})}transformUv(t){if(this.mapping!==Kl)return t;if(t.applyMatrix3(this.matrix),t.x<0||t.x>1)switch(this.wrapS){case Ta:t.x=t.x-Math.floor(t.x);break;case ri:t.x=t.x<0?0:1;break;case wa:Math.abs(Math.floor(t.x)%2)===1?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x);break}if(t.y<0||t.y>1)switch(this.wrapT){case Ta:t.y=t.y-Math.floor(t.y);break;case ri:t.y=t.y<0?0:1;break;case wa:Math.abs(Math.floor(t.y)%2)===1?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y);break}return this.flipY&&(t.y=1-t.y),t}set needsUpdate(t){t===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(t){t===!0&&this.pmremVersion++}}Ae.DEFAULT_IMAGE=null;Ae.DEFAULT_MAPPING=Kl;Ae.DEFAULT_ANISOTROPY=1;class ae{constructor(t=0,e=0,n=0,s=1){ae.prototype.isVector4=!0,this.x=t,this.y=e,this.z=n,this.w=s}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,s){return this.x=t,this.y=e,this.z=n,this.w=s,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=t.w!==void 0?t.w:1,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*s+a[12]*r,this.y=a[1]*e+a[5]*n+a[9]*s+a[13]*r,this.z=a[2]*e+a[6]*n+a[10]*s+a[14]*r,this.w=a[3]*e+a[7]*n+a[11]*s+a[15]*r,this}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this.w/=t.w,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,s,r;const l=t.elements,c=l[0],h=l[4],d=l[8],f=l[1],u=l[5],g=l[9],_=l[2],m=l[6],p=l[10];if(Math.abs(h-f)<.01&&Math.abs(d-_)<.01&&Math.abs(g-m)<.01){if(Math.abs(h+f)<.1&&Math.abs(d+_)<.1&&Math.abs(g+m)<.1&&Math.abs(c+u+p-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;const E=(c+1)/2,y=(u+1)/2,D=(p+1)/2,A=(h+f)/4,C=(d+_)/4,I=(g+m)/4;return E>y&&E>D?E<.01?(n=0,s=.707106781,r=.707106781):(n=Math.sqrt(E),s=A/n,r=C/n):y>D?y<.01?(n=.707106781,s=0,r=.707106781):(s=Math.sqrt(y),n=A/s,r=I/s):D<.01?(n=.707106781,s=.707106781,r=0):(r=Math.sqrt(D),n=C/r,s=I/r),this.set(n,s,r,e),this}let T=Math.sqrt((m-g)*(m-g)+(d-_)*(d-_)+(f-h)*(f-h));return Math.abs(T)<.001&&(T=1),this.x=(m-g)/T,this.y=(d-_)/T,this.z=(f-h)/T,this.w=Math.acos((c+u+p-1)/2),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this.w=e[15],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Yt(this.x,t.x,e.x),this.y=Yt(this.y,t.y,e.y),this.z=Yt(this.z,t.z,e.z),this.w=Yt(this.w,t.w,e.w),this}clampScalar(t,e){return this.x=Yt(this.x,t,e),this.y=Yt(this.y,t,e),this.z=Yt(this.z,t,e),this.w=Yt(this.w,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Yt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this.w=Math.trunc(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}class Gh extends ui{constructor(t=1,e=1,n={}){super(),this.isRenderTarget=!0,this.width=t,this.height=e,this.depth=1,this.scissor=new ae(0,0,t,e),this.scissorTest=!1,this.viewport=new ae(0,0,t,e);const s={width:t,height:e,depth:1};n=Object.assign({generateMipmaps:!1,internalFormat:null,minFilter:_n,depthBuffer:!0,stencilBuffer:!1,resolveDepthBuffer:!0,resolveStencilBuffer:!0,depthTexture:null,samples:0,count:1},n);const r=new Ae(s,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.colorSpace);r.flipY=!1,r.generateMipmaps=n.generateMipmaps,r.internalFormat=n.internalFormat,this.textures=[];const a=n.count;for(let o=0;o=0?1:-1,E=1-p*p;if(E>Number.EPSILON){const D=Math.sqrt(E),A=Math.atan2(D,p*T);m=Math.sin(m*A)/D,o=Math.sin(o*A)/D}const y=o*T;if(l=l*m+f*y,c=c*m+u*y,h=h*m+g*y,d=d*m+_*y,m===1-o){const D=1/Math.sqrt(l*l+c*c+h*h+d*d);l*=D,c*=D,h*=D,d*=D}}t[e]=l,t[e+1]=c,t[e+2]=h,t[e+3]=d}static multiplyQuaternionsFlat(t,e,n,s,r,a){const o=n[s],l=n[s+1],c=n[s+2],h=n[s+3],d=r[a],f=r[a+1],u=r[a+2],g=r[a+3];return t[e]=o*g+h*d+l*u-c*f,t[e+1]=l*g+h*f+c*d-o*u,t[e+2]=c*g+h*u+o*f-l*d,t[e+3]=h*g-o*d-l*f-c*u,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,s){return this._x=t,this._y=e,this._z=n,this._w=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e=!0){const n=t._x,s=t._y,r=t._z,a=t._order,o=Math.cos,l=Math.sin,c=o(n/2),h=o(s/2),d=o(r/2),f=l(n/2),u=l(s/2),g=l(r/2);switch(a){case"XYZ":this._x=f*h*d+c*u*g,this._y=c*u*d-f*h*g,this._z=c*h*g+f*u*d,this._w=c*h*d-f*u*g;break;case"YXZ":this._x=f*h*d+c*u*g,this._y=c*u*d-f*h*g,this._z=c*h*g-f*u*d,this._w=c*h*d+f*u*g;break;case"ZXY":this._x=f*h*d-c*u*g,this._y=c*u*d+f*h*g,this._z=c*h*g+f*u*d,this._w=c*h*d-f*u*g;break;case"ZYX":this._x=f*h*d-c*u*g,this._y=c*u*d+f*h*g,this._z=c*h*g-f*u*d,this._w=c*h*d+f*u*g;break;case"YZX":this._x=f*h*d+c*u*g,this._y=c*u*d+f*h*g,this._z=c*h*g-f*u*d,this._w=c*h*d-f*u*g;break;case"XZY":this._x=f*h*d-c*u*g,this._y=c*u*d-f*h*g,this._z=c*h*g+f*u*d,this._w=c*h*d+f*u*g;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return e===!0&&this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,s=Math.sin(n);return this._x=t.x*s,this._y=t.y*s,this._z=t.z*s,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],s=e[4],r=e[8],a=e[1],o=e[5],l=e[9],c=e[2],h=e[6],d=e[10],f=n+o+d;if(f>0){const u=.5/Math.sqrt(f+1);this._w=.25/u,this._x=(h-l)*u,this._y=(r-c)*u,this._z=(a-s)*u}else if(n>o&&n>d){const u=2*Math.sqrt(1+n-o-d);this._w=(h-l)/u,this._x=.25*u,this._y=(s+a)/u,this._z=(r+c)/u}else if(o>d){const u=2*Math.sqrt(1+o-n-d);this._w=(r-c)/u,this._x=(s+a)/u,this._y=.25*u,this._z=(l+h)/u}else{const u=2*Math.sqrt(1+d-n-o);this._w=(a-s)/u,this._x=(r+c)/u,this._y=(l+h)/u,this._z=.25*u}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return nMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(Yt(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(n===0)return this;const s=Math.min(1,e/n);return this.slerp(t,s),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w}lengthSq(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w}length(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)}normalize(){let t=this.length();return t===0?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t){return this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,s=t._y,r=t._z,a=t._w,o=e._x,l=e._y,c=e._z,h=e._w;return this._x=n*h+a*o+s*c-r*l,this._y=s*h+a*l+r*o-n*c,this._z=r*h+a*c+n*l-s*o,this._w=a*h-n*o-s*l-r*c,this._onChangeCallback(),this}slerp(t,e){if(e===0)return this;if(e===1)return this.copy(t);const n=this._x,s=this._y,r=this._z,a=this._w;let o=a*t._w+n*t._x+s*t._y+r*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=s,this._z=r,this;const l=1-o*o;if(l<=Number.EPSILON){const u=1-e;return this._w=u*a+e*this._w,this._x=u*n+e*this._x,this._y=u*s+e*this._y,this._z=u*r+e*this._z,this.normalize(),this}const c=Math.sqrt(l),h=Math.atan2(c,o),d=Math.sin((1-e)*h)/c,f=Math.sin(e*h)/c;return this._w=a*d+this._w*f,this._x=n*d+this._x*f,this._y=s*d+this._y*f,this._z=r*d+this._z*f,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=2*Math.PI*Math.random(),e=2*Math.PI*Math.random(),n=Math.random(),s=Math.sqrt(1-n),r=Math.sqrt(n);return this.set(s*Math.sin(t),s*Math.cos(t),r*Math.sin(e),r*Math.cos(e))}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class P{constructor(t=0,e=0,n=0){P.prototype.isVector3=!0,this.x=t,this.y=e,this.z=n}set(t,e,n){return n===void 0&&(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t){return this.x+=t.x,this.y+=t.y,this.z+=t.z,this}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t){return this.x-=t.x,this.y-=t.y,this.z-=t.z,this}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return this.applyQuaternion(Uo.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(Uo.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*s,this.y=r[1]*e+r[4]*n+r[7]*s,this.z=r[2]*e+r[5]*n+r[8]*s,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,s=this.z,r=t.elements,a=1/(r[3]*e+r[7]*n+r[11]*s+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*s+r[12])*a,this.y=(r[1]*e+r[5]*n+r[9]*s+r[13])*a,this.z=(r[2]*e+r[6]*n+r[10]*s+r[14])*a,this}applyQuaternion(t){const e=this.x,n=this.y,s=this.z,r=t.x,a=t.y,o=t.z,l=t.w,c=2*(a*s-o*n),h=2*(o*e-r*s),d=2*(r*n-a*e);return this.x=e+l*c+a*d-o*h,this.y=n+l*h+o*c-r*d,this.z=s+l*d+r*h-a*c,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,s=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*s,this.y=r[1]*e+r[5]*n+r[9]*s,this.z=r[2]*e+r[6]*n+r[10]*s,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Yt(this.x,t.x,e.x),this.y=Yt(this.y,t.y,e.y),this.z=Yt(this.z,t.z,e.z),this}clampScalar(t,e){return this.x=Yt(this.x,t,e),this.y=Yt(this.y,t,e),this.z=Yt(this.z,t,e),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Yt(n,t,e))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}lengthSq(){return this.x*this.x+this.y*this.y+this.z*this.z}length(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)}manhattanLength(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)}normalize(){return this.divideScalar(this.length()||1)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t){return this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,s=t.y,r=t.z,a=e.x,o=e.y,l=e.z;return this.x=s*l-r*o,this.y=r*a-n*l,this.z=n*o-s*a,this}projectOnVector(t){const e=t.lengthSq();if(e===0)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return Ir.copy(this).projectOnVector(t),this.sub(Ir)}reflect(t){return this.sub(Ir.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(e===0)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(Yt(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,s=this.z-t.z;return e*e+n*n+s*s}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const s=Math.sin(e)*t;return this.x=s*Math.sin(n),this.y=Math.cos(e)*t,this.z=s*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),s=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=s,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,e*4)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,e*3)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}setFromColor(t){return this.x=t.r,this.y=t.g,this.z=t.b,this}equals(t){return t.x===this.x&&t.y===this.y&&t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e){return this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=Math.random()*Math.PI*2,e=Math.random()*2-1,n=Math.sqrt(1-e*e);return this.x=n*Math.cos(t),this.y=e,this.z=n*Math.sin(t),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const Ir=new P,Uo=new hi;class di{constructor(t=new P(1/0,1/0,1/0),e=new P(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){this.makeEmpty();for(let e=0,n=t.length;e=this.min.x&&t.x<=this.max.x&&t.y>=this.min.y&&t.y<=this.max.y&&t.z>=this.min.z&&t.z<=this.max.z}containsBox(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return t.max.x>=this.min.x&&t.min.x<=this.max.x&&t.max.y>=this.min.y&&t.min.y<=this.max.y&&t.max.z>=this.min.z&&t.min.z<=this.max.z}intersectsSphere(t){return this.clampPoint(t.center,cn),cn.distanceToSquared(t.center)<=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(is),Ls.subVectors(this.max,is),xi.subVectors(t.a,is),Mi.subVectors(t.b,is),Si.subVectors(t.c,is),Ln.subVectors(Mi,xi),Un.subVectors(Si,Mi),jn.subVectors(xi,Si);let e=[0,-Ln.z,Ln.y,0,-Un.z,Un.y,0,-jn.z,jn.y,Ln.z,0,-Ln.x,Un.z,0,-Un.x,jn.z,0,-jn.x,-Ln.y,Ln.x,0,-Un.y,Un.x,0,-jn.y,jn.x,0];return!Nr(e,xi,Mi,Si,Ls)||(e=[1,0,0,0,1,0,0,0,1],!Nr(e,xi,Mi,Si,Ls))?!1:(Us.crossVectors(Ln,Un),e=[Us.x,Us.y,Us.z],Nr(e,xi,Mi,Si,Ls))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return this.clampPoint(t,cn).distanceTo(t)}getBoundingSphere(t){return this.isEmpty()?t.makeEmpty():(this.getCenter(t.center),t.radius=this.getSize(cn).length()*.5),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()?this:(Mn[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Mn[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Mn[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Mn[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Mn[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Mn[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Mn[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Mn[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Mn),this)}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}const Mn=[new P,new P,new P,new P,new P,new P,new P,new P],cn=new P,Ds=new di,xi=new P,Mi=new P,Si=new P,Ln=new P,Un=new P,jn=new P,is=new P,Ls=new P,Us=new P,Zn=new P;function Nr(i,t,e,n,s){for(let r=0,a=i.length-3;r<=a;r+=3){Zn.fromArray(i,r);const o=s.x*Math.abs(Zn.x)+s.y*Math.abs(Zn.y)+s.z*Math.abs(Zn.z),l=t.dot(Zn),c=e.dot(Zn),h=n.dot(Zn);if(Math.max(-Math.max(l,c,h),Math.min(l,c,h))>o)return!1}return!0}const Xh=new di,ss=new P,Fr=new P;class fi{constructor(t=new P,e=-1){this.isSphere=!0,this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;e!==void 0?n.copy(e):Xh.setFromPoints(t).getCenter(n);let s=0;for(let r=0,a=t.length;rthis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){if(this.isEmpty())return this.center.copy(t),this.radius=0,this;ss.subVectors(t,this.center);const e=ss.lengthSq();if(e>this.radius*this.radius){const n=Math.sqrt(e),s=(n-this.radius)*.5;this.center.addScaledVector(ss,s/n),this.radius+=s}return this}union(t){return t.isEmpty()?this:this.isEmpty()?(this.copy(t),this):(this.center.equals(t.center)===!0?this.radius=Math.max(this.radius,t.radius):(Fr.subVectors(t.center,this.center).setLength(t.radius),this.expandByPoint(ss.copy(t.center).add(Fr)),this.expandByPoint(ss.copy(t.center).sub(Fr))),this)}equals(t){return t.center.equals(this.center)&&t.radius===this.radius}clone(){return new this.constructor().copy(this)}}const Sn=new P,Or=new P,Is=new P,In=new P,Br=new P,Ns=new P,zr=new P;class ys{constructor(t=new P,e=new P(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.origin).addScaledVector(this.direction,t)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Sn)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.origin).addScaledVector(this.direction,n)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Sn.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Sn.copy(this.origin).addScaledVector(this.direction,e),Sn.distanceToSquared(t))}distanceSqToSegment(t,e,n,s){Or.copy(t).add(e).multiplyScalar(.5),Is.copy(e).sub(t).normalize(),In.copy(this.origin).sub(Or);const r=t.distanceTo(e)*.5,a=-this.direction.dot(Is),o=In.dot(this.direction),l=-In.dot(Is),c=In.lengthSq(),h=Math.abs(1-a*a);let d,f,u,g;if(h>0)if(d=a*l-o,f=a*o-l,g=r*h,d>=0)if(f>=-g)if(f<=g){const _=1/h;d*=_,f*=_,u=d*(d+a*f+2*o)+f*(a*d+f+2*l)+c}else f=r,d=Math.max(0,-(a*f+o)),u=-d*d+f*(f+2*l)+c;else f=-r,d=Math.max(0,-(a*f+o)),u=-d*d+f*(f+2*l)+c;else f<=-g?(d=Math.max(0,-(-a*r+o)),f=d>0?-r:Math.min(Math.max(-r,-l),r),u=-d*d+f*(f+2*l)+c):f<=g?(d=0,f=Math.min(Math.max(-r,-l),r),u=f*(f+2*l)+c):(d=Math.max(0,-(a*r+o)),f=d>0?r:Math.min(Math.max(-r,-l),r),u=-d*d+f*(f+2*l)+c);else f=a>0?-r:r,d=Math.max(0,-(a*f+o)),u=-d*d+f*(f+2*l)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,d),s&&s.copy(Or).addScaledVector(Is,f),u}intersectSphere(t,e){Sn.subVectors(t.center,this.origin);const n=Sn.dot(this.direction),s=Sn.dot(Sn)-n*n,r=t.radius*t.radius;if(s>r)return null;const a=Math.sqrt(r-s),o=n-a,l=n+a;return l<0?null:o<0?this.at(l,e):this.at(o,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(e===0)return t.distanceToPoint(this.origin)===0?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return n===null?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);return e===0||t.normal.dot(this.direction)*e<0}intersectBox(t,e){let n,s,r,a,o,l;const c=1/this.direction.x,h=1/this.direction.y,d=1/this.direction.z,f=this.origin;return c>=0?(n=(t.min.x-f.x)*c,s=(t.max.x-f.x)*c):(n=(t.max.x-f.x)*c,s=(t.min.x-f.x)*c),h>=0?(r=(t.min.y-f.y)*h,a=(t.max.y-f.y)*h):(r=(t.max.y-f.y)*h,a=(t.min.y-f.y)*h),n>a||r>s||((r>n||isNaN(n))&&(n=r),(a=0?(o=(t.min.z-f.z)*d,l=(t.max.z-f.z)*d):(o=(t.max.z-f.z)*d,l=(t.min.z-f.z)*d),n>l||o>s)||((o>n||n!==n)&&(n=o),(l=0?n:s,e)}intersectsBox(t){return this.intersectBox(t,Sn)!==null}intersectTriangle(t,e,n,s,r){Br.subVectors(e,t),Ns.subVectors(n,t),zr.crossVectors(Br,Ns);let a=this.direction.dot(zr),o;if(a>0){if(s)return null;o=1}else if(a<0)o=-1,a=-a;else return null;In.subVectors(this.origin,t);const l=o*this.direction.dot(Ns.crossVectors(In,Ns));if(l<0)return null;const c=o*this.direction.dot(Br.cross(In));if(c<0||l+c>a)return null;const h=-o*In.dot(zr);return h<0?null:this.at(h/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}class ne{constructor(t,e,n,s,r,a,o,l,c,h,d,f,u,g,_,m){ne.prototype.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],t!==void 0&&this.set(t,e,n,s,r,a,o,l,c,h,d,f,u,g,_,m)}set(t,e,n,s,r,a,o,l,c,h,d,f,u,g,_,m){const p=this.elements;return p[0]=t,p[4]=e,p[8]=n,p[12]=s,p[1]=r,p[5]=a,p[9]=o,p[13]=l,p[2]=c,p[6]=h,p[10]=d,p[14]=f,p[3]=u,p[7]=g,p[11]=_,p[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ne().fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,s=1/yi.setFromMatrixColumn(t,0).length(),r=1/yi.setFromMatrixColumn(t,1).length(),a=1/yi.setFromMatrixColumn(t,2).length();return e[0]=n[0]*s,e[1]=n[1]*s,e[2]=n[2]*s,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){const e=this.elements,n=t.x,s=t.y,r=t.z,a=Math.cos(n),o=Math.sin(n),l=Math.cos(s),c=Math.sin(s),h=Math.cos(r),d=Math.sin(r);if(t.order==="XYZ"){const f=a*h,u=a*d,g=o*h,_=o*d;e[0]=l*h,e[4]=-l*d,e[8]=c,e[1]=u+g*c,e[5]=f-_*c,e[9]=-o*l,e[2]=_-f*c,e[6]=g+u*c,e[10]=a*l}else if(t.order==="YXZ"){const f=l*h,u=l*d,g=c*h,_=c*d;e[0]=f+_*o,e[4]=g*o-u,e[8]=a*c,e[1]=a*d,e[5]=a*h,e[9]=-o,e[2]=u*o-g,e[6]=_+f*o,e[10]=a*l}else if(t.order==="ZXY"){const f=l*h,u=l*d,g=c*h,_=c*d;e[0]=f-_*o,e[4]=-a*d,e[8]=g+u*o,e[1]=u+g*o,e[5]=a*h,e[9]=_-f*o,e[2]=-a*c,e[6]=o,e[10]=a*l}else if(t.order==="ZYX"){const f=a*h,u=a*d,g=o*h,_=o*d;e[0]=l*h,e[4]=g*c-u,e[8]=f*c+_,e[1]=l*d,e[5]=_*c+f,e[9]=u*c-g,e[2]=-c,e[6]=o*l,e[10]=a*l}else if(t.order==="YZX"){const f=a*l,u=a*c,g=o*l,_=o*c;e[0]=l*h,e[4]=_-f*d,e[8]=g*d+u,e[1]=d,e[5]=a*h,e[9]=-o*h,e[2]=-c*h,e[6]=u*d+g,e[10]=f-_*d}else if(t.order==="XZY"){const f=a*l,u=a*c,g=o*l,_=o*c;e[0]=l*h,e[4]=-d,e[8]=c*h,e[1]=f*d+_,e[5]=a*h,e[9]=u*d-g,e[2]=g*d-u,e[6]=o*h,e[10]=_*d+f}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Yh,t,qh)}lookAt(t,e,n){const s=this.elements;return Ze.subVectors(t,e),Ze.lengthSq()===0&&(Ze.z=1),Ze.normalize(),Nn.crossVectors(n,Ze),Nn.lengthSq()===0&&(Math.abs(n.z)===1?Ze.x+=1e-4:Ze.z+=1e-4,Ze.normalize(),Nn.crossVectors(n,Ze)),Nn.normalize(),Fs.crossVectors(Ze,Nn),s[0]=Nn.x,s[4]=Fs.x,s[8]=Ze.x,s[1]=Nn.y,s[5]=Fs.y,s[9]=Ze.y,s[2]=Nn.z,s[6]=Fs.z,s[10]=Ze.z,this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,s=e.elements,r=this.elements,a=n[0],o=n[4],l=n[8],c=n[12],h=n[1],d=n[5],f=n[9],u=n[13],g=n[2],_=n[6],m=n[10],p=n[14],T=n[3],E=n[7],y=n[11],D=n[15],A=s[0],C=s[4],I=s[8],S=s[12],M=s[1],w=s[5],Y=s[9],V=s[13],j=s[2],$=s[6],q=s[10],J=s[14],X=s[3],it=s[7],ft=s[11],Mt=s[15];return r[0]=a*A+o*M+l*j+c*X,r[4]=a*C+o*w+l*$+c*it,r[8]=a*I+o*Y+l*q+c*ft,r[12]=a*S+o*V+l*J+c*Mt,r[1]=h*A+d*M+f*j+u*X,r[5]=h*C+d*w+f*$+u*it,r[9]=h*I+d*Y+f*q+u*ft,r[13]=h*S+d*V+f*J+u*Mt,r[2]=g*A+_*M+m*j+p*X,r[6]=g*C+_*w+m*$+p*it,r[10]=g*I+_*Y+m*q+p*ft,r[14]=g*S+_*V+m*J+p*Mt,r[3]=T*A+E*M+y*j+D*X,r[7]=T*C+E*w+y*$+D*it,r[11]=T*I+E*Y+y*q+D*ft,r[15]=T*S+E*V+y*J+D*Mt,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],s=t[8],r=t[12],a=t[1],o=t[5],l=t[9],c=t[13],h=t[2],d=t[6],f=t[10],u=t[14],g=t[3],_=t[7],m=t[11],p=t[15];return g*(+r*l*d-s*c*d-r*o*f+n*c*f+s*o*u-n*l*u)+_*(+e*l*u-e*c*f+r*a*f-s*a*u+s*c*h-r*l*h)+m*(+e*c*d-e*o*u-r*a*d+n*a*u+r*o*h-n*c*h)+p*(-s*o*h-e*l*d+e*o*f+s*a*d-n*a*f+n*l*h)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const s=this.elements;return t.isVector3?(s[12]=t.x,s[13]=t.y,s[14]=t.z):(s[12]=t,s[13]=e,s[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],s=t[2],r=t[3],a=t[4],o=t[5],l=t[6],c=t[7],h=t[8],d=t[9],f=t[10],u=t[11],g=t[12],_=t[13],m=t[14],p=t[15],T=d*m*c-_*f*c+_*l*u-o*m*u-d*l*p+o*f*p,E=g*f*c-h*m*c-g*l*u+a*m*u+h*l*p-a*f*p,y=h*_*c-g*d*c+g*o*u-a*_*u-h*o*p+a*d*p,D=g*d*l-h*_*l-g*o*f+a*_*f+h*o*m-a*d*m,A=e*T+n*E+s*y+r*D;if(A===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const C=1/A;return t[0]=T*C,t[1]=(_*f*r-d*m*r-_*s*u+n*m*u+d*s*p-n*f*p)*C,t[2]=(o*m*r-_*l*r+_*s*c-n*m*c-o*s*p+n*l*p)*C,t[3]=(d*l*r-o*f*r-d*s*c+n*f*c+o*s*u-n*l*u)*C,t[4]=E*C,t[5]=(h*m*r-g*f*r+g*s*u-e*m*u-h*s*p+e*f*p)*C,t[6]=(g*l*r-a*m*r-g*s*c+e*m*c+a*s*p-e*l*p)*C,t[7]=(a*f*r-h*l*r+h*s*c-e*f*c-a*s*u+e*l*u)*C,t[8]=y*C,t[9]=(g*d*r-h*_*r-g*n*u+e*_*u+h*n*p-e*d*p)*C,t[10]=(a*_*r-g*o*r+g*n*c-e*_*c-a*n*p+e*o*p)*C,t[11]=(h*o*r-a*d*r-h*n*c+e*d*c+a*n*u-e*o*u)*C,t[12]=D*C,t[13]=(h*_*s-g*d*s+g*n*f-e*_*f-h*n*m+e*d*m)*C,t[14]=(g*o*s-a*_*s-g*n*l+e*_*l+a*n*m-e*o*m)*C,t[15]=(a*d*s-h*o*s+h*n*l-e*d*l-a*n*f+e*o*f)*C,this}scale(t){const e=this.elements,n=t.x,s=t.y,r=t.z;return e[0]*=n,e[4]*=s,e[8]*=r,e[1]*=n,e[5]*=s,e[9]*=r,e[2]*=n,e[6]*=s,e[10]*=r,e[3]*=n,e[7]*=s,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],s=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,s))}makeTranslation(t,e,n){return t.isVector3?this.set(1,0,0,t.x,0,1,0,t.y,0,0,1,t.z,0,0,0,1):this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),s=Math.sin(e),r=1-n,a=t.x,o=t.y,l=t.z,c=r*a,h=r*o;return this.set(c*a+n,c*o-s*l,c*l+s*o,0,c*o+s*l,h*o+n,h*l-s*a,0,c*l-s*o,h*l+s*a,r*l*l+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,s,r,a){return this.set(1,n,r,0,t,1,a,0,e,s,1,0,0,0,0,1),this}compose(t,e,n){const s=this.elements,r=e._x,a=e._y,o=e._z,l=e._w,c=r+r,h=a+a,d=o+o,f=r*c,u=r*h,g=r*d,_=a*h,m=a*d,p=o*d,T=l*c,E=l*h,y=l*d,D=n.x,A=n.y,C=n.z;return s[0]=(1-(_+p))*D,s[1]=(u+y)*D,s[2]=(g-E)*D,s[3]=0,s[4]=(u-y)*A,s[5]=(1-(f+p))*A,s[6]=(m+T)*A,s[7]=0,s[8]=(g+E)*C,s[9]=(m-T)*C,s[10]=(1-(f+_))*C,s[11]=0,s[12]=t.x,s[13]=t.y,s[14]=t.z,s[15]=1,this}decompose(t,e,n){const s=this.elements;let r=yi.set(s[0],s[1],s[2]).length();const a=yi.set(s[4],s[5],s[6]).length(),o=yi.set(s[8],s[9],s[10]).length();this.determinant()<0&&(r=-r),t.x=s[12],t.y=s[13],t.z=s[14],hn.copy(this);const c=1/r,h=1/a,d=1/o;return hn.elements[0]*=c,hn.elements[1]*=c,hn.elements[2]*=c,hn.elements[4]*=h,hn.elements[5]*=h,hn.elements[6]*=h,hn.elements[8]*=d,hn.elements[9]*=d,hn.elements[10]*=d,e.setFromRotationMatrix(hn),n.x=r,n.y=a,n.z=o,this}makePerspective(t,e,n,s,r,a,o=An){const l=this.elements,c=2*r/(e-t),h=2*r/(n-s),d=(e+t)/(e-t),f=(n+s)/(n-s);let u,g;if(o===An)u=-(a+r)/(a-r),g=-2*a*r/(a-r);else if(o===_r)u=-a/(a-r),g=-a*r/(a-r);else throw new Error("THREE.Matrix4.makePerspective(): Invalid coordinate system: "+o);return l[0]=c,l[4]=0,l[8]=d,l[12]=0,l[1]=0,l[5]=h,l[9]=f,l[13]=0,l[2]=0,l[6]=0,l[10]=u,l[14]=g,l[3]=0,l[7]=0,l[11]=-1,l[15]=0,this}makeOrthographic(t,e,n,s,r,a,o=An){const l=this.elements,c=1/(e-t),h=1/(n-s),d=1/(a-r),f=(e+t)*c,u=(n+s)*h;let g,_;if(o===An)g=(a+r)*d,_=-2*d;else if(o===_r)g=r*d,_=-1*d;else throw new Error("THREE.Matrix4.makeOrthographic(): Invalid coordinate system: "+o);return l[0]=2*c,l[4]=0,l[8]=0,l[12]=-f,l[1]=0,l[5]=2*h,l[9]=0,l[13]=-u,l[2]=0,l[6]=0,l[10]=_,l[14]=-g,l[3]=0,l[7]=0,l[11]=0,l[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let s=0;s<16;s++)if(e[s]!==n[s])return!1;return!0}fromArray(t,e=0){for(let n=0;n<16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}const yi=new P,hn=new ne,Yh=new P(0,0,0),qh=new P(1,1,1),Nn=new P,Fs=new P,Ze=new P,Io=new ne,No=new hi;class xn{constructor(t=0,e=0,n=0,s=xn.DEFAULT_ORDER){this.isEuler=!0,this._x=t,this._y=e,this._z=n,this._order=s}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,s=this._order){return this._x=t,this._y=e,this._z=n,this._order=s,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const s=t.elements,r=s[0],a=s[4],o=s[8],l=s[1],c=s[5],h=s[9],d=s[2],f=s[6],u=s[10];switch(e){case"XYZ":this._y=Math.asin(Yt(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(-h,u),this._z=Math.atan2(-a,r)):(this._x=Math.atan2(f,c),this._z=0);break;case"YXZ":this._x=Math.asin(-Yt(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(o,u),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-d,r),this._z=0);break;case"ZXY":this._x=Math.asin(Yt(f,-1,1)),Math.abs(f)<.9999999?(this._y=Math.atan2(-d,u),this._z=Math.atan2(-a,c)):(this._y=0,this._z=Math.atan2(l,r));break;case"ZYX":this._y=Math.asin(-Yt(d,-1,1)),Math.abs(d)<.9999999?(this._x=Math.atan2(f,u),this._z=Math.atan2(l,r)):(this._x=0,this._z=Math.atan2(-a,c));break;case"YZX":this._z=Math.asin(Yt(l,-1,1)),Math.abs(l)<.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-d,r)):(this._x=0,this._y=Math.atan2(o,u));break;case"XZY":this._z=Math.asin(-Yt(a,-1,1)),Math.abs(a)<.9999999?(this._x=Math.atan2(f,c),this._y=Math.atan2(o,r)):(this._x=Math.atan2(-h,u),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,n===!0&&this._onChangeCallback(),this}setFromQuaternion(t,e,n){return Io.makeRotationFromQuaternion(t),this.setFromRotationMatrix(Io,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return No.setFromEuler(this),this.setFromQuaternion(No,t)}equals(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],t[3]!==void 0&&(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}xn.DEFAULT_ORDER="XYZ";class xo{constructor(){this.mask=1}set(t){this.mask=(1<>>0}enable(t){this.mask|=1<1){for(let e=0;e1){for(let n=0;n0&&(s.userData=this.userData),s.layers=this.layers.mask,s.matrix=this.matrix.toArray(),s.up=this.up.toArray(),this.matrixAutoUpdate===!1&&(s.matrixAutoUpdate=!1),this.isInstancedMesh&&(s.type="InstancedMesh",s.count=this.count,s.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(s.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(s.type="BatchedMesh",s.perObjectFrustumCulled=this.perObjectFrustumCulled,s.sortObjects=this.sortObjects,s.drawRanges=this._drawRanges,s.reservedRanges=this._reservedRanges,s.visibility=this._visibility,s.active=this._active,s.bounds=this._bounds.map(o=>({boxInitialized:o.boxInitialized,boxMin:o.box.min.toArray(),boxMax:o.box.max.toArray(),sphereInitialized:o.sphereInitialized,sphereRadius:o.sphere.radius,sphereCenter:o.sphere.center.toArray()})),s.maxInstanceCount=this._maxInstanceCount,s.maxVertexCount=this._maxVertexCount,s.maxIndexCount=this._maxIndexCount,s.geometryInitialized=this._geometryInitialized,s.geometryCount=this._geometryCount,s.matricesTexture=this._matricesTexture.toJSON(t),this._colorsTexture!==null&&(s.colorsTexture=this._colorsTexture.toJSON(t)),this.boundingSphere!==null&&(s.boundingSphere={center:s.boundingSphere.center.toArray(),radius:s.boundingSphere.radius}),this.boundingBox!==null&&(s.boundingBox={min:s.boundingBox.min.toArray(),max:s.boundingBox.max.toArray()}));function r(o,l){return o[l.uuid]===void 0&&(o[l.uuid]=l.toJSON(t)),l.uuid}if(this.isScene)this.background&&(this.background.isColor?s.background=this.background.toJSON():this.background.isTexture&&(s.background=this.background.toJSON(t).uuid)),this.environment&&this.environment.isTexture&&this.environment.isRenderTargetTexture!==!0&&(s.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){s.geometry=r(t.geometries,this.geometry);const o=this.geometry.parameters;if(o!==void 0&&o.shapes!==void 0){const l=o.shapes;if(Array.isArray(l))for(let c=0,h=l.length;c0){s.children=[];for(let o=0;o0){s.animations=[];for(let o=0;o0&&(n.geometries=o),l.length>0&&(n.materials=l),c.length>0&&(n.textures=c),h.length>0&&(n.images=h),d.length>0&&(n.shapes=d),f.length>0&&(n.skeletons=f),u.length>0&&(n.animations=u),g.length>0&&(n.nodes=g)}return n.object=s,n;function a(o){const l=[];for(const c in o){const h=o[c];delete h.metadata,l.push(h)}return l}}clone(t){return new this.constructor().copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldAutoUpdate=t.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.animations=t.animations.slice(),this.userData=JSON.parse(JSON.stringify(t.userData)),e===!0)for(let n=0;n0?s.multiplyScalar(1/Math.sqrt(r)):s.set(0,0,0)}static getBarycoord(t,e,n,s,r){un.subVectors(s,e),En.subVectors(n,e),Hr.subVectors(t,e);const a=un.dot(un),o=un.dot(En),l=un.dot(Hr),c=En.dot(En),h=En.dot(Hr),d=a*c-o*o;if(d===0)return r.set(0,0,0),null;const f=1/d,u=(c*l-o*h)*f,g=(a*h-o*l)*f;return r.set(1-u-g,g,u)}static containsPoint(t,e,n,s){return this.getBarycoord(t,e,n,s,bn)===null?!1:bn.x>=0&&bn.y>=0&&bn.x+bn.y<=1}static getInterpolation(t,e,n,s,r,a,o,l){return this.getBarycoord(t,e,n,s,bn)===null?(l.x=0,l.y=0,"z"in l&&(l.z=0),"w"in l&&(l.w=0),null):(l.setScalar(0),l.addScaledVector(r,bn.x),l.addScaledVector(a,bn.y),l.addScaledVector(o,bn.z),l)}static getInterpolatedAttribute(t,e,n,s,r,a){return Xr.setScalar(0),Yr.setScalar(0),qr.setScalar(0),Xr.fromBufferAttribute(t,e),Yr.fromBufferAttribute(t,n),qr.fromBufferAttribute(t,s),a.setScalar(0),a.addScaledVector(Xr,r.x),a.addScaledVector(Yr,r.y),a.addScaledVector(qr,r.z),a}static isFrontFacing(t,e,n,s){return un.subVectors(n,e),En.subVectors(t,e),un.cross(En).dot(s)<0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,s){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[s]),this}setFromAttributeAndIndices(t,e,n,s){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,s),this}clone(){return new this.constructor().copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return un.subVectors(this.c,this.b),En.subVectors(this.a,this.b),un.cross(En).length()*.5}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return rn.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return rn.getBarycoord(t,this.a,this.b,this.c,e)}getInterpolation(t,e,n,s,r){return rn.getInterpolation(t,this.a,this.b,this.c,e,n,s,r)}containsPoint(t){return rn.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return rn.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,s=this.b,r=this.c;let a,o;Ti.subVectors(s,n),wi.subVectors(r,n),Vr.subVectors(t,n);const l=Ti.dot(Vr),c=wi.dot(Vr);if(l<=0&&c<=0)return e.copy(n);Gr.subVectors(t,s);const h=Ti.dot(Gr),d=wi.dot(Gr);if(h>=0&&d<=h)return e.copy(s);const f=l*d-h*c;if(f<=0&&l>=0&&h<=0)return a=l/(l-h),e.copy(n).addScaledVector(Ti,a);Wr.subVectors(t,r);const u=Ti.dot(Wr),g=wi.dot(Wr);if(g>=0&&u<=g)return e.copy(r);const _=u*c-l*g;if(_<=0&&c>=0&&g<=0)return o=c/(c-g),e.copy(n).addScaledVector(wi,o);const m=h*g-u*d;if(m<=0&&d-h>=0&&u-g>=0)return Ho.subVectors(r,s),o=(d-h)/(d-h+(u-g)),e.copy(s).addScaledVector(Ho,o);const p=1/(m+_+f);return a=_*p,o=f*p,e.copy(n).addScaledVector(Ti,a).addScaledVector(wi,o)}equals(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}const uc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Fn={h:0,s:0,l:0},Bs={h:0,s:0,l:0};function jr(i,t,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?i+(t-i)*6*e:e<1/2?t:e<2/3?i+(t-i)*6*(2/3-e):i}class st{constructor(t,e,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(t,e,n)}set(t,e,n){if(e===void 0&&n===void 0){const s=t;s&&s.isColor?this.copy(s):typeof s=="number"?this.setHex(s):typeof s=="string"&&this.setStyle(s)}else this.setRGB(t,e,n);return this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=sn){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(t&255)/255,Jt.toWorkingColorSpace(this,e),this}setRGB(t,e,n,s=Jt.workingColorSpace){return this.r=t,this.g=e,this.b=n,Jt.toWorkingColorSpace(this,s),this}setHSL(t,e,n,s=Jt.workingColorSpace){if(t=Uh(t,1),e=Yt(e,0,1),n=Yt(n,0,1),e===0)this.r=this.g=this.b=n;else{const r=n<=.5?n*(1+e):n+e-n*e,a=2*n-r;this.r=jr(a,r,t+1/3),this.g=jr(a,r,t),this.b=jr(a,r,t-1/3)}return Jt.toWorkingColorSpace(this,s),this}setStyle(t,e=sn){function n(r){r!==void 0&&parseFloat(r)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}let s;if(s=/^(\w+)\(([^\)]*)\)/.exec(t)){let r;const a=s[1],o=s[2];switch(a){case"rgb":case"rgba":if(r=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(255,parseInt(r[1],10))/255,Math.min(255,parseInt(r[2],10))/255,Math.min(255,parseInt(r[3],10))/255,e);if(r=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setRGB(Math.min(100,parseInt(r[1],10))/100,Math.min(100,parseInt(r[2],10))/100,Math.min(100,parseInt(r[3],10))/100,e);break;case"hsl":case"hsla":if(r=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(r[4]),this.setHSL(parseFloat(r[1])/360,parseFloat(r[2])/100,parseFloat(r[3])/100,e);break;default:console.warn("THREE.Color: Unknown color model "+t)}}else if(s=/^\#([A-Fa-f\d]+)$/.exec(t)){const r=s[1],a=r.length;if(a===3)return this.setRGB(parseInt(r.charAt(0),16)/15,parseInt(r.charAt(1),16)/15,parseInt(r.charAt(2),16)/15,e);if(a===6)return this.setHex(parseInt(r,16),e);console.warn("THREE.Color: Invalid hex color "+t)}else if(t&&t.length>0)return this.setColorName(t,e);return this}setColorName(t,e=sn){const n=uc[t.toLowerCase()];return n!==void 0?this.setHex(n,e):console.warn("THREE.Color: Unknown color "+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=Pn(t.r),this.g=Pn(t.g),this.b=Pn(t.b),this}copyLinearToSRGB(t){return this.r=Wi(t.r),this.g=Wi(t.g),this.b=Wi(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=sn){return Jt.fromWorkingColorSpace(Fe.copy(this),t),Math.round(Yt(Fe.r*255,0,255))*65536+Math.round(Yt(Fe.g*255,0,255))*256+Math.round(Yt(Fe.b*255,0,255))}getHexString(t=sn){return("000000"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=Jt.workingColorSpace){Jt.fromWorkingColorSpace(Fe.copy(this),e);const n=Fe.r,s=Fe.g,r=Fe.b,a=Math.max(n,s,r),o=Math.min(n,s,r);let l,c;const h=(o+a)/2;if(o===a)l=0,c=0;else{const d=a-o;switch(c=h<=.5?d/(a+o):d/(2-a-o),a){case n:l=(s-r)/d+(s0!=t>0&&this.version++,this._alphaTest=t}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(t!==void 0)for(const e in t){const n=t[e];if(n===void 0){console.warn(`THREE.Material: parameter '${e}' has value of undefined.`);continue}const s=this[e];if(s===void 0){console.warn(`THREE.Material: '${e}' is not a property of THREE.${this.type}.`);continue}s&&s.isColor?s.set(n):s&&s.isVector3&&n&&n.isVector3?s.copy(n):this[e]=n}}toJSON(t){const e=t===void 0||typeof t=="string";e&&(t={textures:{},images:{}});const n={metadata:{version:4.6,type:"Material",generator:"Material.toJSON"}};n.uuid=this.uuid,n.type=this.type,this.name!==""&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(t).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(t).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(t).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(t).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(t).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(t).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==Vi&&(n.blending=this.blending),this.side!==Gn&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==pa&&(n.blendSrc=this.blendSrc),this.blendDst!==ma&&(n.blendDst=this.blendDst),this.blendEquation!==ii&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==qi&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==Ro&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==_i&&(n.stencilFail=this.stencilFail),this.stencilZFail!==_i&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==_i&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!=="round"&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!=="round"&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function s(r){const a=[];for(const o in r){const l=r[o];delete l.metadata,a.push(l)}return a}if(e){const r=s(t.textures),a=s(t.images);r.length>0&&(n.textures=r),a.length>0&&(n.images=a)}return n}clone(){return new this.constructor().copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.blendColor.copy(t.blendColor),this.blendAlpha=t.blendAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(e!==null){const s=e.length;n=new Array(s);for(let r=0;r!==s;++r)n[r]=e[r].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaHash=t.alphaHash,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.forceSinglePass=t.forceSinglePass,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:"dispose"})}set needsUpdate(t){t===!0&&this.version++}onBuild(){console.warn("Material: onBuild() has been removed.")}}class xs extends Wn{constructor(t){super(),this.isMeshBasicMaterial=!0,this.type="MeshBasicMaterial",this.color=new st(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new xn,this.combine=jl,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapRotation.copy(t.envMapRotation),this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}const xe=new P,zs=new xt;class ce{constructor(t,e,n=!1){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.isBufferAttribute=!0,this.name="",this.array=t,this.itemSize=e,this.count=t!==void 0?t.length/e:0,this.normalized=n,this.usage=Qa,this.updateRanges=[],this.gpuType=vn,this.version=0}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this.gpuType=t.gpuType,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let s=0,r=this.itemSize;se.count&&console.warn("THREE.BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry."),e.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new di);const t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute){console.error("THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.",this),this.boundingBox.set(new P(-1/0,-1/0,-1/0),new P(1/0,1/0,1/0));return}if(t!==void 0){if(this.boundingBox.setFromBufferAttribute(t),e)for(let n=0,s=e.length;n0&&(t.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0&&(t[c]=l[c]);return t}t.data={attributes:{}};const e=this.index;e!==null&&(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const l in n){const c=n[l];t.data.attributes[l]=c.toJSON(t.data)}const s={};let r=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],h=[];for(let d=0,f=c.length;d0&&(s[l]=h,r=!0)}r&&(t.data.morphAttributes=s,t.data.morphTargetsRelative=this.morphTargetsRelative);const a=this.groups;a.length>0&&(t.data.groups=JSON.parse(JSON.stringify(a)));const o=this.boundingSphere;return o!==null&&(t.data.boundingSphere={center:o.center.toArray(),radius:o.radius}),t}clone(){return new this.constructor().copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;n!==null&&this.setIndex(n.clone(e));const s=t.attributes;for(const c in s){const h=s[c];this.setAttribute(c,h.clone(e))}const r=t.morphAttributes;for(const c in r){const h=[],d=r[c];for(let f=0,u=d.length;f0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;r(t.far-t.near)**2))&&(Vo.copy(r).invert(),Kn.copy(t.ray).applyMatrix4(Vo),!(n.boundingBox!==null&&Kn.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(t,e,Kn)))}_computeIntersections(t,e,n){let s;const r=this.geometry,a=this.material,o=r.index,l=r.attributes.position,c=r.attributes.uv,h=r.attributes.uv1,d=r.attributes.normal,f=r.groups,u=r.drawRange;if(o!==null)if(Array.isArray(a))for(let g=0,_=f.length;g<_;g++){const m=f[g],p=a[m.materialIndex],T=Math.max(m.start,u.start),E=Math.min(o.count,Math.min(m.start+m.count,u.start+u.count));for(let y=T,D=E;ye.far?null:{distance:c,point:Xs.clone(),object:i}}function Ys(i,t,e,n,s,r,a,o,l,c){i.getVertexPosition(o,Hs),i.getVertexPosition(l,Vs),i.getVertexPosition(c,Gs);const h=tu(i,t,e,n,Hs,Vs,Gs,Wo);if(h){const d=new P;rn.getBarycoord(Wo,Hs,Vs,Gs,d),s&&(h.uv=rn.getInterpolatedAttribute(s,o,l,c,d,new xt)),r&&(h.uv1=rn.getInterpolatedAttribute(r,o,l,c,d,new xt)),a&&(h.normal=rn.getInterpolatedAttribute(a,o,l,c,d,new P),h.normal.dot(n.direction)>0&&h.normal.multiplyScalar(-1));const f={a:o,b:l,c,normal:new P,materialIndex:0};rn.getNormal(Hs,Vs,Gs,f.normal),h.face=f,h.barycoord=d}return h}class Es extends ge{constructor(t=1,e=1,n=1,s=1,r=1,a=1){super(),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:s,heightSegments:r,depthSegments:a};const o=this;s=Math.floor(s),r=Math.floor(r),a=Math.floor(a);const l=[],c=[],h=[],d=[];let f=0,u=0;g("z","y","x",-1,-1,n,e,t,a,r,0),g("z","y","x",1,-1,n,e,-t,a,r,1),g("x","z","y",1,1,t,n,e,s,a,2),g("x","z","y",1,-1,t,n,-e,s,a,3),g("x","y","z",1,-1,t,e,n,s,r,4),g("x","y","z",-1,-1,t,e,-n,s,r,5),this.setIndex(l),this.setAttribute("position",new Oe(c,3)),this.setAttribute("normal",new Oe(h,3)),this.setAttribute("uv",new Oe(d,2));function g(_,m,p,T,E,y,D,A,C,I,S){const M=y/C,w=D/I,Y=y/2,V=D/2,j=A/2,$=C+1,q=I+1;let J=0,X=0;const it=new P;for(let ft=0;ft0?1:-1,h.push(it.x,it.y,it.z),d.push(Nt/C),d.push(1-ft/I),J+=1}}for(let ft=0;ft0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const n={};for(const s in this.extensions)this.extensions[s]===!0&&(n[s]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}class lc extends Ae{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new ie,this.projectionMatrix=new ie,this.projectionMatrixInverse=new ie,this.coordinateSystem=bn}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const In=new C,Fo=new Mt,Oo=new Mt;class je extends lc{constructor(t=50,e=1,n=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=s,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=Xa*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(rr*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return Xa*2*Math.atan(Math.tan(rr*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,n){In.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(In.x,In.y).multiplyScalar(-t/In.z),In.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(In.x,In.y).multiplyScalar(-t/In.z)}getViewSize(t,e){return this.getViewBounds(t,Fo,Oo),e.subVectors(Oo,Fo)}setViewOffset(t,e,n,s,r,a){this.aspect=t/e,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(rr*.5*this.fov)/this.zoom,n=2*e,s=this.aspect*n,r=-.5*s;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,c=a.fullHeight;r+=a.offsetX*s/l,e-=a.offsetY*n/c,s*=a.width/l,n*=a.height/c}const o=this.filmOffset;o!==0&&(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,e,e-n,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const Mi=-90,Si=1;class Jh extends Ae{constructor(t,e,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new je(Mi,Si,t,e);s.layers=this.layers,this.add(s);const r=new je(Mi,Si,t,e);r.layers=this.layers,this.add(r);const a=new je(Mi,Si,t,e);a.layers=this.layers,this.add(a);const o=new je(Mi,Si,t,e);o.layers=this.layers,this.add(o);const l=new je(Mi,Si,t,e);l.layers=this.layers,this.add(l);const c=new je(Mi,Si,t,e);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[n,s,r,a,o,l]=e;for(const c of e)this.remove(c);if(t===bn)n.up.set(0,1,0),n.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(t===ur)n.up.set(0,-1,0),n.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);for(const c of e)this.add(c),c.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,c,h]=this.children,d=t.getRenderTarget(),p=t.getActiveCubeFace(),u=t.getActiveMipmapLevel(),g=t.xr.enabled;t.xr.enabled=!1;const v=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0,s),t.render(e,r),t.setRenderTarget(n,1,s),t.render(e,a),t.setRenderTarget(n,2,s),t.render(e,o),t.setRenderTarget(n,3,s),t.render(e,l),t.setRenderTarget(n,4,s),t.render(e,c),n.texture.generateMipmaps=v,t.setRenderTarget(n,5,s),t.render(e,h),t.setRenderTarget(d,p,u),t.xr.enabled=g,n.texture.needsPMREMUpdate=!0}}class cc extends be{constructor(t,e,n,s,r,a,o,l,c,h){t=t!==void 0?t:[],e=e!==void 0?e:Bi,super(t,e,n,s,r,a,o,l,c,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class Qh extends cn{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const n={width:t,height:t,depth:1},s=[n,n,n,n,n,n];this.texture=new cc(s,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=e.generateMipmaps!==void 0?e.generateMipmaps:!1,this.texture.minFilter=e.minFilter!==void 0?e.minFilter:pn}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:` +}`;class Ve extends Wn{constructor(t){super(),this.isShaderMaterial=!0,this.type="ShaderMaterial",this.defines={},this.uniforms={},this.uniformsGroups=[],this.vertexShader=nu,this.fragmentShader=iu,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.forceSinglePass=!0,this.extensions={clipCullDistance:!1,multiDraw:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv1:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,t!==void 0&&this.setValues(t)}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Qi(t.uniforms),this.uniformsGroups=eu(t.uniformsGroups),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const s in this.uniforms){const a=this.uniforms[s].value;a&&a.isTexture?e.uniforms[s]={type:"t",value:a.toJSON(t).uuid}:a&&a.isColor?e.uniforms[s]={type:"c",value:a.getHex()}:a&&a.isVector2?e.uniforms[s]={type:"v2",value:a.toArray()}:a&&a.isVector3?e.uniforms[s]={type:"v3",value:a.toArray()}:a&&a.isVector4?e.uniforms[s]={type:"v4",value:a.toArray()}:a&&a.isMatrix3?e.uniforms[s]={type:"m3",value:a.toArray()}:a&&a.isMatrix4?e.uniforms[s]={type:"m4",value:a.toArray()}:e.uniforms[s]={value:a}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader,e.lights=this.lights,e.clipping=this.clipping;const n={};for(const s in this.extensions)this.extensions[s]===!0&&(n[s]=!0);return Object.keys(n).length>0&&(e.extensions=n),e}}class mc extends Le{constructor(){super(),this.isCamera=!0,this.type="Camera",this.matrixWorldInverse=new ne,this.projectionMatrix=new ne,this.projectionMatrixInverse=new ne,this.coordinateSystem=An}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this.coordinateSystem=t.coordinateSystem,this}getWorldDirection(t){return super.getWorldDirection(t).negate()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}const On=new P,Xo=new xt,Yo=new xt;class $e extends mc{constructor(t=50,e=1,n=.1,s=2e3){super(),this.isPerspectiveCamera=!0,this.type="PerspectiveCamera",this.fov=t,this.zoom=1,this.near=n,this.far=s,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=t.view===null?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=to*2*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(ur*.5*this.fov);return .5*this.getFilmHeight()/t}getEffectiveFOV(){return to*2*Math.atan(Math.tan(ur*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}getViewBounds(t,e,n){On.set(-1,-1,.5).applyMatrix4(this.projectionMatrixInverse),e.set(On.x,On.y).multiplyScalar(-t/On.z),On.set(1,1,.5).applyMatrix4(this.projectionMatrixInverse),n.set(On.x,On.y).multiplyScalar(-t/On.z)}getViewSize(t,e){return this.getViewBounds(t,Xo,Yo),e.subVectors(Yo,Xo)}setViewOffset(t,e,n,s,r,a){this.aspect=t/e,this.view===null&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=s,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null&&(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(ur*.5*this.fov)/this.zoom,n=2*e,s=this.aspect*n,r=-.5*s;const a=this.view;if(this.view!==null&&this.view.enabled){const l=a.fullWidth,c=a.fullHeight;r+=a.offsetX*s/l,e-=a.offsetY*n/c,s*=a.width/l,n*=a.height/c}const o=this.filmOffset;o!==0&&(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+s,e,e-n,t,this.far,this.coordinateSystem),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,this.view!==null&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}const Ri=-90,Ci=1;class su extends Le{constructor(t,e,n){super(),this.type="CubeCamera",this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;const s=new $e(Ri,Ci,t,e);s.layers=this.layers,this.add(s);const r=new $e(Ri,Ci,t,e);r.layers=this.layers,this.add(r);const a=new $e(Ri,Ci,t,e);a.layers=this.layers,this.add(a);const o=new $e(Ri,Ci,t,e);o.layers=this.layers,this.add(o);const l=new $e(Ri,Ci,t,e);l.layers=this.layers,this.add(l);const c=new $e(Ri,Ci,t,e);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){const t=this.coordinateSystem,e=this.children.concat(),[n,s,r,a,o,l]=e;for(const c of e)this.remove(c);if(t===An)n.up.set(0,1,0),n.lookAt(1,0,0),s.up.set(0,1,0),s.lookAt(-1,0,0),r.up.set(0,0,-1),r.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),l.up.set(0,1,0),l.lookAt(0,0,-1);else if(t===_r)n.up.set(0,-1,0),n.lookAt(-1,0,0),s.up.set(0,-1,0),s.lookAt(1,0,0),r.up.set(0,0,1),r.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),l.up.set(0,-1,0),l.lookAt(0,0,-1);else throw new Error("THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: "+t);for(const c of e)this.add(c),c.updateMatrixWorld()}update(t,e){this.parent===null&&this.updateMatrixWorld();const{renderTarget:n,activeMipmapLevel:s}=this;this.coordinateSystem!==t.coordinateSystem&&(this.coordinateSystem=t.coordinateSystem,this.updateCoordinateSystem());const[r,a,o,l,c,h]=this.children,d=t.getRenderTarget(),f=t.getActiveCubeFace(),u=t.getActiveMipmapLevel(),g=t.xr.enabled;t.xr.enabled=!1;const _=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0,s),t.render(e,r),t.setRenderTarget(n,1,s),t.render(e,a),t.setRenderTarget(n,2,s),t.render(e,o),t.setRenderTarget(n,3,s),t.render(e,l),t.setRenderTarget(n,4,s),t.render(e,c),n.texture.generateMipmaps=_,t.setRenderTarget(n,5,s),t.render(e,h),t.setRenderTarget(d,f,u),t.xr.enabled=g,n.texture.needsPMREMUpdate=!0}}class gc extends Ae{constructor(t,e,n,s,r,a,o,l,c,h){t=t!==void 0?t:[],e=e!==void 0?e:ji,super(t,e,n,s,r,a,o,l,c,h),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}class ru extends fn{constructor(t=1,e={}){super(t,t,e),this.isWebGLCubeRenderTarget=!0;const n={width:t,height:t,depth:1},s=[n,n,n,n,n,n];this.texture=new gc(s,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.colorSpace),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=e.generateMipmaps!==void 0?e.generateMipmaps:!1,this.texture.minFilter=e.minFilter!==void 0?e.minFilter:_n}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.colorSpace=e.colorSpace,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:` varying vec3 vWorldDirection; @@ -41,13 +41,13 @@ var Cc=Object.defineProperty;var Pc=(i,t,e)=>t in i?Cc(i,t,{enumerable:!0,config gl_FragColor = texture2D( tEquirect, sampleUV ); } - `},s=new gs(5,5,5),r=new ze({name:"CubemapFromEquirect",uniforms:Gi(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:We,blending:Tn});r.uniforms.tEquirect.value=e;const a=new Me(s,r),o=e.minFilter;return e.minFilter===ti&&(e.minFilter=pn),new Jh(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(t,e,n,s){const r=t.getRenderTarget();for(let a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,n,s);t.setRenderTarget(r)}}class xr{constructor(t,e=25e-5){this.isFogExp2=!0,this.name="",this.color=new rt(t),this.density=e}clone(){return new xr(this.color,this.density)}toJSON(){return{type:"FogExp2",name:this.name,color:this.color.getHex(),density:this.density}}}class tu extends Ae{constructor(){super(),this.isScene=!0,this.type="Scene",this.background=null,this.environment=null,this.fog=null,this.backgroundBlurriness=0,this.backgroundIntensity=1,this.backgroundRotation=new gn,this.environmentIntensity=1,this.environmentRotation=new gn,this.overrideMaterial=null,typeof __THREE_DEVTOOLS__<"u"&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}copy(t,e){return super.copy(t,e),t.background!==null&&(this.background=t.background.clone()),t.environment!==null&&(this.environment=t.environment.clone()),t.fog!==null&&(this.fog=t.fog.clone()),this.backgroundBlurriness=t.backgroundBlurriness,this.backgroundIntensity=t.backgroundIntensity,this.backgroundRotation.copy(t.backgroundRotation),this.environmentIntensity=t.environmentIntensity,this.environmentRotation.copy(t.environmentRotation),t.overrideMaterial!==null&&(this.overrideMaterial=t.overrideMaterial.clone()),this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return this.fog!==null&&(e.object.fog=this.fog.toJSON()),this.backgroundBlurriness>0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}class eu{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=t!==void 0?t.length/e:0,this.usage=Wa,this.updateRanges=[],this.version=0,this.uuid=zn()}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let s=0,r=this.stride;st.far||e.push({distance:l,point:ts.clone(),uv:tn.getInterpolation(ts,ks,ns,Hs,Bo,Xr,zo,new Mt),face:null,object:this})}copy(t,e){return super.copy(t,e),t.center!==void 0&&this.center.copy(t.center),this.material=t.material,this}}function Gs(i,t,e,n,s,r){Ti.subVectors(i,e).addScalar(.5).multiply(n),s!==void 0?(es.x=r*Ti.x-s*Ti.y,es.y=s*Ti.x+r*Ti.y):es.copy(Ti),i.copy(t),i.x+=es.x,i.y+=es.y,i.applyMatrix4(hc)}class nu extends be{constructor(t=null,e=1,n=1,s,r,a,o,l,c=Ze,h=Ze,d,p){super(null,a,o,l,c,h,s,r,d,p),this.isDataTexture=!0,this.image={data:t,width:e,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class ko extends ue{constructor(t,e,n,s=1){super(t,e,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=s}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}const wi=new ie,Ho=new ie,Ws=[],Vo=new ai,iu=new ie,is=new Me,ss=new oi;class su extends Me{constructor(t,e,n){super(t,e),this.isInstancedMesh=!0,this.instanceMatrix=new ko(new Float32Array(n*16),16),this.instanceColor=null,this.morphTexture=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let s=0;s1?null:e.copy(t.start).addScaledVector(n,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||au.getNormalMatrix(t),s=this.coplanarPoint(Yr).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Yn=new oi,Xs=new C;class oo{constructor(t=new Fn,e=new Fn,n=new Fn,s=new Fn,r=new Fn,a=new Fn){this.planes=[t,e,n,s,r,a]}set(t,e,n,s,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(s),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t,e=bn){const n=this.planes,s=t.elements,r=s[0],a=s[1],o=s[2],l=s[3],c=s[4],h=s[5],d=s[6],p=s[7],u=s[8],g=s[9],v=s[10],m=s[11],f=s[12],T=s[13],b=s[14],S=s[15];if(n[0].setComponents(l-r,p-c,m-u,S-f).normalize(),n[1].setComponents(l+r,p+c,m+u,S+f).normalize(),n[2].setComponents(l+a,p+h,m+g,S+T).normalize(),n[3].setComponents(l-a,p-h,m-g,S-T).normalize(),n[4].setComponents(l-o,p-d,m-v,S-b).normalize(),e===bn)n[5].setComponents(l+o,p+d,m+v,S+b).normalize();else if(e===ur)n[5].setComponents(o,d,v,b).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),Yn.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),Yn.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere(Yn)}intersectsSprite(t){return Yn.center.set(0,0,0),Yn.radius=.7071067811865476,Yn.applyMatrix4(t.matrixWorld),this.intersectsSphere(Yn)}intersectsSphere(t){const e=this.planes,n=t.center,s=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(n)0?t.max.x:t.min.x,Xs.y=s.normal.y>0?t.max.y:t.min.y,Xs.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint(Xs)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class mr extends Hn{constructor(t){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new rt(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.fog=t.fog,this}}const gr=new C,_r=new C,Go=new ie,rs=new ms,Ys=new oi,qr=new C,Wo=new C;class Ya extends Ae{constructor(t=new ge,e=new mr){super(),this.isLine=!0,this.type="Line",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.index===null){const e=t.attributes.position,n=[0];for(let s=1,r=e.count;s0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;rn)return;qr.applyMatrix4(i.matrixWorld);const l=t.ray.origin.distanceTo(qr);if(!(lt.far))return{distance:l,point:Wo.clone().applyMatrix4(i.matrixWorld),index:s,face:null,faceIndex:null,barycoord:null,object:i}}class ni extends Hn{constructor(t){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new rt(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}const Xo=new ie,qa=new ms,js=new oi,Zs=new C;class Fi extends Ae{constructor(t=new ge,e=new ni){super(),this.isPoints=!0,this.type="Points",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,s=this.matrixWorld,r=t.params.Points.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),js.copy(n.boundingSphere),js.applyMatrix4(s),js.radius+=r,t.ray.intersectsSphere(js)===!1)return;Xo.copy(s).invert(),qa.copy(t.ray).applyMatrix4(Xo);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=n.index,d=n.attributes.position;if(c!==null){const p=Math.max(0,a.start),u=Math.min(c.count,a.start+a.count);for(let g=p,v=u;g0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;rs.far)return;r.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:t,face:null,faceIndex:null,barycoord:null,object:a})}}class Pi extends Ae{constructor(){super(),this.isGroup=!0,this.type="Group"}}class uc extends be{constructor(t,e,n,s,r,a,o,l,c){super(t,e,n,s,r,a,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class dc extends be{constructor(t,e,n,s,r,a,o,l,c,h=Ii){if(h!==Ii&&h!==Hi)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");n===void 0&&h===Ii&&(n=ii),n===void 0&&h===Hi&&(n=ki),super(null,s,r,a,o,l,h,n,c),this.isDepthTexture=!0,this.image={width:t,height:e},this.magFilter=o!==void 0?o:Ze,this.minFilter=l!==void 0?l:Ze,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class _s extends ge{constructor(t=1,e=1,n=1,s=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:n,heightSegments:s};const r=t/2,a=e/2,o=Math.floor(n),l=Math.floor(s),c=o+1,h=l+1,d=t/o,p=e/l,u=[],g=[],v=[],m=[];for(let f=0;f0)&&u.push(b,S,w),(f!==n-1||l0&&(e.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(e.object.backgroundIntensity=this.backgroundIntensity),e.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(e.object.environmentIntensity=this.environmentIntensity),e.object.environmentRotation=this.environmentRotation.toArray(),e}}class ou{constructor(t,e){this.isInterleavedBuffer=!0,this.array=t,this.stride=e,this.count=t!==void 0?t.length/e:0,this.usage=Qa,this.updateRanges=[],this.version=0,this.uuid=Vn()}onUploadCallback(){}set needsUpdate(t){t===!0&&this.version++}setUsage(t){return this.usage=t,this}addUpdateRange(t,e){this.updateRanges.push({start:t,count:e})}clearUpdateRanges(){this.updateRanges.length=0}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let s=0,r=this.stride;st.far||e.push({distance:l,point:os.clone(),uv:rn.getInterpolation(os,qs,cs,js,qo,$r,jo,new xt),face:null,object:this})}copy(t,e){return super.copy(t,e),t.center!==void 0&&this.center.copy(t.center),this.material=t.material,this}}function Zs(i,t,e,n,s,r){Ui.subVectors(i,e).addScalar(.5).multiply(n),s!==void 0?(ls.x=r*Ui.x-s*Ui.y,ls.y=s*Ui.x+r*Ui.y):ls.copy(Ui),i.copy(t),i.x+=ls.x,i.y+=ls.y,i.applyMatrix4(_c)}class lu extends Ae{constructor(t=null,e=1,n=1,s,r,a,o,l,c=Je,h=Je,d,f){super(null,a,o,l,c,h,s,r,d,f),this.isDataTexture=!0,this.image={data:t,width:e,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}class Zo extends ce{constructor(t,e,n,s=1){super(t,e,n),this.isInstancedBufferAttribute=!0,this.meshPerAttribute=s}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}const Ii=new ne,Ko=new ne,Ks=[],$o=new di,cu=new ne,hs=new Ee,us=new fi;class hu extends Ee{constructor(t,e,n){super(t,e),this.isInstancedMesh=!0,this.instanceMatrix=new Zo(new Float32Array(n*16),16),this.instanceColor=null,this.morphTexture=null,this.count=n,this.boundingBox=null,this.boundingSphere=null;for(let s=0;s1?null:e.copy(t.start).addScaledVector(n,r)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||du.getNormalMatrix(t),s=this.coplanarPoint(Jr).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-s.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)&&t.constant===this.constant}clone(){return new this.constructor().copy(this)}}const $n=new fi,$s=new P;class Mo{constructor(t=new zn,e=new zn,n=new zn,s=new zn,r=new zn,a=new zn){this.planes=[t,e,n,s,r,a]}set(t,e,n,s,r,a){const o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(s),o[4].copy(r),o[5].copy(a),this}copy(t){const e=this.planes;for(let n=0;n<6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t,e=An){const n=this.planes,s=t.elements,r=s[0],a=s[1],o=s[2],l=s[3],c=s[4],h=s[5],d=s[6],f=s[7],u=s[8],g=s[9],_=s[10],m=s[11],p=s[12],T=s[13],E=s[14],y=s[15];if(n[0].setComponents(l-r,f-c,m-u,y-p).normalize(),n[1].setComponents(l+r,f+c,m+u,y+p).normalize(),n[2].setComponents(l+a,f+h,m+g,y+T).normalize(),n[3].setComponents(l-a,f-h,m-g,y-T).normalize(),n[4].setComponents(l-o,f-d,m-_,y-E).normalize(),e===An)n[5].setComponents(l+o,f+d,m+_,y+E).normalize();else if(e===_r)n[5].setComponents(o,d,_,E).normalize();else throw new Error("THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: "+e);return this}intersectsObject(t){if(t.boundingSphere!==void 0)t.boundingSphere===null&&t.computeBoundingSphere(),$n.copy(t.boundingSphere).applyMatrix4(t.matrixWorld);else{const e=t.geometry;e.boundingSphere===null&&e.computeBoundingSphere(),$n.copy(e.boundingSphere).applyMatrix4(t.matrixWorld)}return this.intersectsSphere($n)}intersectsSprite(t){return $n.center.set(0,0,0),$n.radius=.7071067811865476,$n.applyMatrix4(t.matrixWorld),this.intersectsSphere($n)}intersectsSphere(t){const e=this.planes,n=t.center,s=-t.radius;for(let r=0;r<6;r++)if(e[r].distanceToPoint(n)0?t.max.x:t.min.x,$s.y=s.normal.y>0?t.max.y:t.min.y,$s.z=s.normal.z>0?t.max.z:t.min.z,s.distanceToPoint($s)<0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class Sr extends Wn{constructor(t){super(),this.isLineBasicMaterial=!0,this.type="LineBasicMaterial",this.color=new st(16777215),this.map=null,this.linewidth=1,this.linecap="round",this.linejoin="round",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.fog=t.fog,this}}const yr=new P,Er=new P,Jo=new ne,ds=new ys,Js=new fi,Qr=new P,Qo=new P;class eo extends Le{constructor(t=new ge,e=new Sr){super(),this.isLine=!0,this.type="Line",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.index===null){const e=t.attributes.position,n=[0];for(let s=1,r=e.count;s0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;rn)return;Qr.applyMatrix4(i.matrixWorld);const l=t.ray.origin.distanceTo(Qr);if(!(lt.far))return{distance:l,point:Qo.clone().applyMatrix4(i.matrixWorld),index:s,face:null,faceIndex:null,barycoord:null,object:i}}class li extends Wn{constructor(t){super(),this.isPointsMaterial=!0,this.type="PointsMaterial",this.color=new st(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}const tl=new ne,no=new ys,tr=new fi,er=new P;class Yi extends Le{constructor(t=new ge,e=new li){super(),this.isPoints=!0,this.type="Points",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t,e){return super.copy(t,e),this.material=Array.isArray(t.material)?t.material.slice():t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,s=this.matrixWorld,r=t.params.Points.threshold,a=n.drawRange;if(n.boundingSphere===null&&n.computeBoundingSphere(),tr.copy(n.boundingSphere),tr.applyMatrix4(s),tr.radius+=r,t.ray.intersectsSphere(tr)===!1)return;tl.copy(s).invert(),no.copy(t.ray).applyMatrix4(tl);const o=r/((this.scale.x+this.scale.y+this.scale.z)/3),l=o*o,c=n.index,d=n.attributes.position;if(c!==null){const f=Math.max(0,a.start),u=Math.min(c.count,a.start+a.count);for(let g=f,_=u;g<_;g++){const m=c.getX(g);er.fromBufferAttribute(d,m),el(er,m,l,s,t,e,this)}}else{const f=Math.max(0,a.start),u=Math.min(d.count,a.start+a.count);for(let g=f,_=u;g<_;g++)er.fromBufferAttribute(d,g),el(er,g,l,s,t,e,this)}}updateMorphTargets(){const e=this.geometry.morphAttributes,n=Object.keys(e);if(n.length>0){const s=e[n[0]];if(s!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let r=0,a=s.length;rs.far)return;r.push({distance:c,distanceToRay:Math.sqrt(o),point:l,index:t,face:null,faceIndex:null,barycoord:null,object:a})}}class zi extends Le{constructor(){super(),this.isGroup=!0,this.type="Group"}}class vc extends Ae{constructor(t,e,n,s,r,a,o,l,c){super(t,e,n,s,r,a,o,l,c),this.isCanvasTexture=!0,this.needsUpdate=!0}}class xc extends Ae{constructor(t,e,n,s,r,a,o,l,c,h=Gi){if(h!==Gi&&h!==$i)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");n===void 0&&h===Gi&&(n=ci),n===void 0&&h===$i&&(n=Ki),super(null,s,r,a,o,l,h,n,c),this.isDepthTexture=!0,this.image={width:t,height:e},this.magFilter=o!==void 0?o:Je,this.minFilter=l!==void 0?l:Je,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(t){return super.copy(t),this.compareFunction=t.compareFunction,this}toJSON(t){const e=super.toJSON(t);return this.compareFunction!==null&&(e.compareFunction=this.compareFunction),e}}class bs extends ge{constructor(t=1,e=1,n=1,s=1){super(),this.type="PlaneGeometry",this.parameters={width:t,height:e,widthSegments:n,heightSegments:s};const r=t/2,a=e/2,o=Math.floor(n),l=Math.floor(s),c=o+1,h=l+1,d=t/o,f=e/l,u=[],g=[],_=[],m=[];for(let p=0;p0)&&u.push(E,y,A),(p!==n-1||lu.start-g.start);let p=0;for(let u=1;uu.start-g.start);let f=0;for(let u=1;ut in i?Cc(i,t,{enumerable:!0,config : cases.z; return clamp( threshold , 1.0e-6, 1.0 ); } -#endif`,Su=`#ifdef USE_ALPHAMAP +#endif`,Au=`#ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g; -#endif`,yu=`#ifdef USE_ALPHAMAP +#endif`,Ru=`#ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,Eu=`#ifdef USE_ALPHATEST +#endif`,Cu=`#ifdef USE_ALPHATEST #ifdef ALPHA_TO_COVERAGE diffuseColor.a = smoothstep( alphaTest, alphaTest + fwidth( diffuseColor.a ), diffuseColor.a ); if ( diffuseColor.a == 0.0 ) discard; #else if ( diffuseColor.a < alphaTest ) discard; #endif -#endif`,bu=`#ifdef USE_ALPHATEST +#endif`,Pu=`#ifdef USE_ALPHATEST uniform float alphaTest; -#endif`,Tu=`#ifdef USE_AOMAP +#endif`,Du=`#ifdef USE_AOMAP float ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0; reflectedLight.indirectDiffuse *= ambientOcclusion; #if defined( USE_CLEARCOAT ) @@ -108,10 +108,10 @@ var Cc=Object.defineProperty;var Pc=(i,t,e)=>t in i?Cc(i,t,{enumerable:!0,config float dotNV = saturate( dot( geometryNormal, geometryViewDir ) ); reflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness ); #endif -#endif`,wu=`#ifdef USE_AOMAP +#endif`,Lu=`#ifdef USE_AOMAP uniform sampler2D aoMap; uniform float aoMapIntensity; -#endif`,Au=`#ifdef USE_BATCHING +#endif`,Uu=`#ifdef USE_BATCHING #if ! defined( GL_ANGLE_multi_draw ) #define gl_DrawID _gl_DrawID uniform int _gl_DrawID; @@ -145,15 +145,15 @@ var Cc=Object.defineProperty;var Pc=(i,t,e)=>t in i?Cc(i,t,{enumerable:!0,config int y = j / size; return texelFetch( batchingColorTexture, ivec2( x, y ), 0 ).rgb; } -#endif`,Ru=`#ifdef USE_BATCHING +#endif`,Iu=`#ifdef USE_BATCHING mat4 batchingMatrix = getBatchingMatrix( getIndirectIndex( gl_DrawID ) ); -#endif`,Cu=`vec3 transformed = vec3( position ); +#endif`,Nu=`vec3 transformed = vec3( position ); #ifdef USE_ALPHAHASH vPosition = vec3( position ); -#endif`,Pu=`vec3 objectNormal = vec3( normal ); +#endif`,Fu=`vec3 objectNormal = vec3( normal ); #ifdef USE_TANGENT vec3 objectTangent = vec3( tangent.xyz ); -#endif`,Du=`float G_BlinnPhong_Implicit( ) { +#endif`,Ou=`float G_BlinnPhong_Implicit( ) { return 0.25; } float D_BlinnPhong( const in float shininess, const in float dotNH ) { @@ -167,7 +167,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve float G = G_BlinnPhong_Implicit( ); float D = D_BlinnPhong( shininess, dotNH ); return F * ( G * D ); -} // validated`,Lu=`#ifdef USE_IRIDESCENCE +} // validated`,Bu=`#ifdef USE_IRIDESCENCE const mat3 XYZ_TO_REC709 = mat3( 3.2404542, -0.9692660, 0.0556434, -1.5371385, 1.8760108, -0.2040259, @@ -230,7 +230,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve } return max( I, vec3( 0.0 ) ); } -#endif`,Uu=`#ifdef USE_BUMPMAP +#endif`,zu=`#ifdef USE_BUMPMAP uniform sampler2D bumpMap; uniform float bumpScale; vec2 dHdxy_fwd() { @@ -251,7 +251,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve vec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 ); return normalize( abs( fDet ) * surf_norm - vGrad ); } -#endif`,Iu=`#if NUM_CLIPPING_PLANES > 0 +#endif`,ku=`#if NUM_CLIPPING_PLANES > 0 vec4 plane; #ifdef ALPHA_TO_COVERAGE float distanceToPlane, distanceGradient; @@ -297,26 +297,26 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve if ( clipped ) discard; #endif #endif -#endif`,Nu=`#if NUM_CLIPPING_PLANES > 0 +#endif`,Hu=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,Fu=`#if NUM_CLIPPING_PLANES > 0 +#endif`,Vu=`#if NUM_CLIPPING_PLANES > 0 varying vec3 vClipPosition; -#endif`,Ou=`#if NUM_CLIPPING_PLANES > 0 +#endif`,Gu=`#if NUM_CLIPPING_PLANES > 0 vClipPosition = - mvPosition.xyz; -#endif`,Bu=`#if defined( USE_COLOR_ALPHA ) +#endif`,Wu=`#if defined( USE_COLOR_ALPHA ) diffuseColor *= vColor; #elif defined( USE_COLOR ) diffuseColor.rgb *= vColor; -#endif`,zu=`#if defined( USE_COLOR_ALPHA ) +#endif`,Xu=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) varying vec3 vColor; -#endif`,ku=`#if defined( USE_COLOR_ALPHA ) +#endif`,Yu=`#if defined( USE_COLOR_ALPHA ) varying vec4 vColor; #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) varying vec3 vColor; -#endif`,Hu=`#if defined( USE_COLOR_ALPHA ) +#endif`,qu=`#if defined( USE_COLOR_ALPHA ) vColor = vec4( 1.0 ); #elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) vColor = vec3( 1.0 ); @@ -330,7 +330,7 @@ vec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in ve #ifdef USE_BATCHING_COLOR vec3 batchingColor = getBatchingColor( getIndirectIndex( gl_DrawID ) ); vColor.xyz *= batchingColor.xyz; -#endif`,Vu=`#define PI 3.141592653589793 +#endif`,ju=`#define PI 3.141592653589793 #define PI2 6.283185307179586 #define PI_HALF 1.5707963267948966 #define RECIPROCAL_PI 0.3183098861837907 @@ -404,7 +404,7 @@ vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,Gu=`#ifdef ENVMAP_TYPE_CUBE_UV +} // validated`,Zu=`#ifdef ENVMAP_TYPE_CUBE_UV #define cubeUV_minMipLevel 4.0 #define cubeUV_minTileSize 16.0 float getFace( vec3 direction ) { @@ -497,7 +497,7 @@ float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { return vec4( mix( color0, color1, mipF ), 1.0 ); } } -#endif`,Wu=`vec3 transformedNormal = objectNormal; +#endif`,Ku=`vec3 transformedNormal = objectNormal; #ifdef USE_TANGENT vec3 transformedTangent = objectTangent; #endif @@ -526,21 +526,21 @@ transformedNormal = normalMatrix * transformedNormal; #ifdef FLIP_SIDED transformedTangent = - transformedTangent; #endif -#endif`,Xu=`#ifdef USE_DISPLACEMENTMAP +#endif`,$u=`#ifdef USE_DISPLACEMENTMAP uniform sampler2D displacementMap; uniform float displacementScale; uniform float displacementBias; -#endif`,Yu=`#ifdef USE_DISPLACEMENTMAP +#endif`,Ju=`#ifdef USE_DISPLACEMENTMAP transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,qu=`#ifdef USE_EMISSIVEMAP +#endif`,Qu=`#ifdef USE_EMISSIVEMAP vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE emissiveColor = sRGBTransferEOTF( emissiveColor ); #endif totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,ju=`#ifdef USE_EMISSIVEMAP +#endif`,td=`#ifdef USE_EMISSIVEMAP uniform sampler2D emissiveMap; -#endif`,Zu="gl_FragColor = linearToOutputTexel( gl_FragColor );",Ku=`vec4 LinearTransferOETF( in vec4 value ) { +#endif`,ed="gl_FragColor = linearToOutputTexel( gl_FragColor );",nd=`vec4 LinearTransferOETF( in vec4 value ) { return value; } vec4 sRGBTransferEOTF( in vec4 value ) { @@ -548,7 +548,7 @@ vec4 sRGBTransferEOTF( in vec4 value ) { } vec4 sRGBTransferOETF( in vec4 value ) { return vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a ); -}`,$u=`#ifdef USE_ENVMAP +}`,id=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vec3 cameraToFrag; if ( isOrthographic ) { @@ -577,7 +577,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #elif defined( ENVMAP_BLENDING_ADD ) outgoingLight += envColor.xyz * specularStrength * reflectivity; #endif -#endif`,Ju=`#ifdef USE_ENVMAP +#endif`,sd=`#ifdef USE_ENVMAP uniform float envMapIntensity; uniform float flipEnvMap; uniform mat3 envMapRotation; @@ -587,7 +587,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform sampler2D envMap; #endif -#endif`,Qu=`#ifdef USE_ENVMAP +#endif`,rd=`#ifdef USE_ENVMAP uniform float reflectivity; #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS @@ -598,7 +598,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { #else varying vec3 vReflect; #endif -#endif`,td=`#ifdef USE_ENVMAP +#endif`,ad=`#ifdef USE_ENVMAP #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) #define ENV_WORLDPOS #endif @@ -609,7 +609,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { varying vec3 vReflect; uniform float refractionRatio; #endif -#endif`,ed=`#ifdef USE_ENVMAP +#endif`,od=`#ifdef USE_ENVMAP #ifdef ENV_WORLDPOS vWorldPosition = worldPosition.xyz; #else @@ -626,18 +626,18 @@ vec4 sRGBTransferOETF( in vec4 value ) { vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); #endif #endif -#endif`,nd=`#ifdef USE_FOG +#endif`,ld=`#ifdef USE_FOG vFogDepth = - mvPosition.z; -#endif`,id=`#ifdef USE_FOG +#endif`,cd=`#ifdef USE_FOG varying float vFogDepth; -#endif`,sd=`#ifdef USE_FOG +#endif`,hd=`#ifdef USE_FOG #ifdef FOG_EXP2 float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); #else float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); #endif gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,rd=`#ifdef USE_FOG +#endif`,ud=`#ifdef USE_FOG uniform vec3 fogColor; varying float vFogDepth; #ifdef FOG_EXP2 @@ -646,7 +646,7 @@ vec4 sRGBTransferOETF( in vec4 value ) { uniform float fogNear; uniform float fogFar; #endif -#endif`,ad=`#ifdef USE_GRADIENTMAP +#endif`,dd=`#ifdef USE_GRADIENTMAP uniform sampler2D gradientMap; #endif vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { @@ -658,12 +658,12 @@ vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { vec2 fw = fwidth( coord ) * 0.5; return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); #endif -}`,od=`#ifdef USE_LIGHTMAP +}`,fd=`#ifdef USE_LIGHTMAP uniform sampler2D lightMap; uniform float lightMapIntensity; -#endif`,ld=`LambertMaterial material; +#endif`,pd=`LambertMaterial material; material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,cd=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,md=`varying vec3 vViewPosition; struct LambertMaterial { vec3 diffuseColor; float specularStrength; @@ -677,7 +677,7 @@ void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometr reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,hd=`uniform bool receiveShadow; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,gd=`uniform bool receiveShadow; uniform vec3 ambientLightColor; #if defined( USE_LIGHT_PROBES ) uniform vec3 lightProbe[ 9 ]; @@ -793,7 +793,7 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); return irradiance; } -#endif`,ud=`#ifdef USE_ENVMAP +#endif`,_d=`#ifdef USE_ENVMAP vec3 getIBLIrradiance( const in vec3 normal ) { #ifdef ENVMAP_TYPE_CUBE_UV vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); @@ -826,8 +826,8 @@ float getSpotAttenuation( const in float coneCosine, const in float penumbraCosi #endif } #endif -#endif`,dd=`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,fd=`varying vec3 vViewPosition; +#endif`,vd=`ToonMaterial material; +material.diffuseColor = diffuseColor.rgb;`,xd=`varying vec3 vViewPosition; struct ToonMaterial { vec3 diffuseColor; }; @@ -839,11 +839,11 @@ void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPo reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,pd=`BlinnPhongMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,Md=`BlinnPhongMaterial material; material.diffuseColor = diffuseColor.rgb; material.specularColor = specular; material.specularShininess = shininess; -material.specularStrength = specularStrength;`,md=`varying vec3 vViewPosition; +material.specularStrength = specularStrength;`,Sd=`varying vec3 vViewPosition; struct BlinnPhongMaterial { vec3 diffuseColor; vec3 specularColor; @@ -860,7 +860,7 @@ void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geom reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); } #define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,gd=`PhysicalMaterial material; +#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,yd=`PhysicalMaterial material; material.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor ); vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); @@ -946,7 +946,7 @@ material.roughness = min( material.roughness, 1.0 ); material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,_d=`struct PhysicalMaterial { +#endif`,Ed=`struct PhysicalMaterial { vec3 diffuseColor; float roughness; vec3 specularColor; @@ -1247,7 +1247,7 @@ void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradia #define RE_IndirectSpecular RE_IndirectSpecular_Physical float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,vd=` +}`,bd=` vec3 geometryPosition = - vViewPosition; vec3 geometryNormal = normal; vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); @@ -1362,7 +1362,7 @@ IncidentLight directLight; #if defined( RE_IndirectSpecular ) vec3 radiance = vec3( 0.0 ); vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,xd=`#if defined( RE_IndirectDiffuse ) +#endif`,Td=`#if defined( RE_IndirectDiffuse ) #ifdef USE_LIGHTMAP vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; @@ -1381,32 +1381,32 @@ IncidentLight directLight; #ifdef USE_CLEARCOAT clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); #endif -#endif`,Md=`#if defined( RE_IndirectDiffuse ) +#endif`,wd=`#if defined( RE_IndirectDiffuse ) RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); #endif #if defined( RE_IndirectSpecular ) RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,Sd=`#if defined( USE_LOGDEPTHBUF ) +#endif`,Ad=`#if defined( USE_LOGDEPTHBUF ) gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,yd=`#if defined( USE_LOGDEPTHBUF ) +#endif`,Rd=`#if defined( USE_LOGDEPTHBUF ) uniform float logDepthBufFC; varying float vFragDepth; varying float vIsPerspective; -#endif`,Ed=`#ifdef USE_LOGDEPTHBUF +#endif`,Cd=`#ifdef USE_LOGDEPTHBUF varying float vFragDepth; varying float vIsPerspective; -#endif`,bd=`#ifdef USE_LOGDEPTHBUF +#endif`,Pd=`#ifdef USE_LOGDEPTHBUF vFragDepth = 1.0 + gl_Position.w; vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,Td=`#ifdef USE_MAP +#endif`,Dd=`#ifdef USE_MAP vec4 sampledDiffuseColor = texture2D( map, vMapUv ); #ifdef DECODE_VIDEO_TEXTURE sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); #endif diffuseColor *= sampledDiffuseColor; -#endif`,wd=`#ifdef USE_MAP +#endif`,Ld=`#ifdef USE_MAP uniform sampler2D map; -#endif`,Ad=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) +#endif`,Ud=`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) #if defined( USE_POINTS_UV ) vec2 uv = vUv; #else @@ -1418,7 +1418,7 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,Rd=`#if defined( USE_POINTS_UV ) +#endif`,Id=`#if defined( USE_POINTS_UV ) varying vec2 vUv; #else #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) @@ -1430,19 +1430,19 @@ IncidentLight directLight; #endif #ifdef USE_ALPHAMAP uniform sampler2D alphaMap; -#endif`,Cd=`float metalnessFactor = metalness; +#endif`,Nd=`float metalnessFactor = metalness; #ifdef USE_METALNESSMAP vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); metalnessFactor *= texelMetalness.b; -#endif`,Pd=`#ifdef USE_METALNESSMAP +#endif`,Fd=`#ifdef USE_METALNESSMAP uniform sampler2D metalnessMap; -#endif`,Dd=`#ifdef USE_INSTANCING_MORPH +#endif`,Od=`#ifdef USE_INSTANCING_MORPH float morphTargetInfluences[ MORPHTARGETS_COUNT ]; float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; } -#endif`,Ld=`#if defined( USE_MORPHCOLORS ) +#endif`,Bd=`#if defined( USE_MORPHCOLORS ) vColor *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { #if defined( USE_COLOR_ALPHA ) @@ -1451,12 +1451,12 @@ IncidentLight directLight; if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; #endif } -#endif`,Ud=`#ifdef USE_MORPHNORMALS +#endif`,zd=`#ifdef USE_MORPHNORMALS objectNormal *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; } -#endif`,Id=`#ifdef USE_MORPHTARGETS +#endif`,kd=`#ifdef USE_MORPHTARGETS #ifndef USE_INSTANCING_MORPH uniform float morphTargetBaseInfluence; uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; @@ -1470,12 +1470,12 @@ IncidentLight directLight; ivec3 morphUV = ivec3( x, y, morphTargetIndex ); return texelFetch( morphTargetsTexture, morphUV, 0 ); } -#endif`,Nd=`#ifdef USE_MORPHTARGETS +#endif`,Hd=`#ifdef USE_MORPHTARGETS transformed *= morphTargetBaseInfluence; for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; } -#endif`,Fd=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; +#endif`,Vd=`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; #ifdef FLAT_SHADED vec3 fdx = dFdx( vViewPosition ); vec3 fdy = dFdy( vViewPosition ); @@ -1516,7 +1516,7 @@ IncidentLight directLight; tbn2[1] *= faceDirection; #endif #endif -vec3 nonPerturbedNormal = normal;`,Od=`#ifdef USE_NORMALMAP_OBJECTSPACE +vec3 nonPerturbedNormal = normal;`,Gd=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; #ifdef FLIP_SIDED normal = - normal; @@ -1531,25 +1531,25 @@ vec3 nonPerturbedNormal = normal;`,Od=`#ifdef USE_NORMALMAP_OBJECTSPACE normal = normalize( tbn * mapN ); #elif defined( USE_BUMPMAP ) normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,Bd=`#ifndef FLAT_SHADED +#endif`,Wd=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,zd=`#ifndef FLAT_SHADED +#endif`,Xd=`#ifndef FLAT_SHADED varying vec3 vNormal; #ifdef USE_TANGENT varying vec3 vTangent; varying vec3 vBitangent; #endif -#endif`,kd=`#ifndef FLAT_SHADED +#endif`,Yd=`#ifndef FLAT_SHADED vNormal = normalize( transformedNormal ); #ifdef USE_TANGENT vTangent = normalize( transformedTangent ); vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); #endif -#endif`,Hd=`#ifdef USE_NORMALMAP +#endif`,qd=`#ifdef USE_NORMALMAP uniform sampler2D normalMap; uniform vec2 normalScale; #endif @@ -1571,13 +1571,13 @@ vec3 nonPerturbedNormal = normal;`,Od=`#ifdef USE_NORMALMAP_OBJECTSPACE float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); return mat3( T * scale, B * scale, N ); } -#endif`,Vd=`#ifdef USE_CLEARCOAT +#endif`,jd=`#ifdef USE_CLEARCOAT vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,Gd=`#ifdef USE_CLEARCOAT_NORMALMAP +#endif`,Zd=`#ifdef USE_CLEARCOAT_NORMALMAP vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; clearcoatMapN.xy *= clearcoatNormalScale; clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,Wd=`#ifdef USE_CLEARCOATMAP +#endif`,Kd=`#ifdef USE_CLEARCOATMAP uniform sampler2D clearcoatMap; #endif #ifdef USE_CLEARCOAT_NORMALMAP @@ -1586,18 +1586,18 @@ vec3 nonPerturbedNormal = normal;`,Od=`#ifdef USE_NORMALMAP_OBJECTSPACE #endif #ifdef USE_CLEARCOAT_ROUGHNESSMAP uniform sampler2D clearcoatRoughnessMap; -#endif`,Xd=`#ifdef USE_IRIDESCENCEMAP +#endif`,$d=`#ifdef USE_IRIDESCENCEMAP uniform sampler2D iridescenceMap; #endif #ifdef USE_IRIDESCENCE_THICKNESSMAP uniform sampler2D iridescenceThicknessMap; -#endif`,Yd=`#ifdef OPAQUE +#endif`,Jd=`#ifdef OPAQUE diffuseColor.a = 1.0; #endif #ifdef USE_TRANSMISSION diffuseColor.a *= material.transmissionAlpha; #endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,qd=`vec3 packNormalToRGB( const in vec3 normal ) { +gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,Qd=`vec3 packNormalToRGB( const in vec3 normal ) { return normalize( normal ) * 0.5 + 0.5; } vec3 unpackRGBToNormal( const in vec3 rgb ) { @@ -1666,9 +1666,9 @@ float viewZToPerspectiveDepth( const in float viewZ, const in float near, const } float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { return ( near * far ) / ( ( far - near ) * depth - far ); -}`,jd=`#ifdef PREMULTIPLIED_ALPHA +}`,tf=`#ifdef PREMULTIPLIED_ALPHA gl_FragColor.rgb *= gl_FragColor.a; -#endif`,Zd=`vec4 mvPosition = vec4( transformed, 1.0 ); +#endif`,ef=`vec4 mvPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING mvPosition = batchingMatrix * mvPosition; #endif @@ -1676,22 +1676,22 @@ float perspectiveDepthToViewZ( const in float depth, const in float near, const mvPosition = instanceMatrix * mvPosition; #endif mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING +gl_Position = projectionMatrix * mvPosition;`,nf=`#ifdef DITHERING gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,$d=`#ifdef DITHERING +#endif`,sf=`#ifdef DITHERING vec3 dithering( vec3 color ) { float grid_position = rand( gl_FragCoord.xy ); vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); return color + dither_shift_RGB; } -#endif`,Jd=`float roughnessFactor = roughness; +#endif`,rf=`float roughnessFactor = roughness; #ifdef USE_ROUGHNESSMAP vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); roughnessFactor *= texelRoughness.g; -#endif`,Qd=`#ifdef USE_ROUGHNESSMAP +#endif`,af=`#ifdef USE_ROUGHNESSMAP uniform sampler2D roughnessMap; -#endif`,tf=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,of=`#if NUM_SPOT_LIGHT_COORDS > 0 varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif #if NUM_SPOT_LIGHT_MAPS > 0 @@ -1877,7 +1877,7 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING } return mix( 1.0, shadow, shadowIntensity ); } -#endif`,ef=`#if NUM_SPOT_LIGHT_COORDS > 0 +#endif`,lf=`#if NUM_SPOT_LIGHT_COORDS > 0 uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; #endif @@ -1918,7 +1918,7 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING }; uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; #endif -#endif`,nf=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) +#endif`,cf=`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); vec4 shadowWorldPosition; #endif @@ -1950,7 +1950,7 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; } #pragma unroll_loop_end -#endif`,sf=`float getShadowMask() { +#endif`,hf=`float getShadowMask() { float shadow = 1.0; #ifdef USE_SHADOWMAP #if NUM_DIR_LIGHT_SHADOWS > 0 @@ -1982,12 +1982,12 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING #endif #endif return shadow; -}`,rf=`#ifdef USE_SKINNING +}`,uf=`#ifdef USE_SKINNING mat4 boneMatX = getBoneMatrix( skinIndex.x ); mat4 boneMatY = getBoneMatrix( skinIndex.y ); mat4 boneMatZ = getBoneMatrix( skinIndex.z ); mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,af=`#ifdef USE_SKINNING +#endif`,df=`#ifdef USE_SKINNING uniform mat4 bindMatrix; uniform mat4 bindMatrixInverse; uniform highp sampler2D boneTexture; @@ -2002,7 +2002,7 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); return mat4( v1, v2, v3, v4 ); } -#endif`,of=`#ifdef USE_SKINNING +#endif`,ff=`#ifdef USE_SKINNING vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); vec4 skinned = vec4( 0.0 ); skinned += boneMatX * skinVertex * skinWeight.x; @@ -2010,7 +2010,7 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING skinned += boneMatZ * skinVertex * skinWeight.z; skinned += boneMatW * skinVertex * skinWeight.w; transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,lf=`#ifdef USE_SKINNING +#endif`,pf=`#ifdef USE_SKINNING mat4 skinMatrix = mat4( 0.0 ); skinMatrix += skinWeight.x * boneMatX; skinMatrix += skinWeight.y * boneMatY; @@ -2021,17 +2021,17 @@ gl_Position = projectionMatrix * mvPosition;`,Kd=`#ifdef DITHERING #ifdef USE_TANGENT objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; #endif -#endif`,cf=`float specularStrength; +#endif`,mf=`float specularStrength; #ifdef USE_SPECULARMAP vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); specularStrength = texelSpecular.r; #else specularStrength = 1.0; -#endif`,hf=`#ifdef USE_SPECULARMAP +#endif`,gf=`#ifdef USE_SPECULARMAP uniform sampler2D specularMap; -#endif`,uf=`#if defined( TONE_MAPPING ) +#endif`,_f=`#if defined( TONE_MAPPING ) gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,df=`#ifndef saturate +#endif`,vf=`#ifndef saturate #define saturate( a ) clamp( a, 0.0, 1.0 ) #endif uniform float toneMappingExposure; @@ -2128,7 +2128,7 @@ vec3 NeutralToneMapping( vec3 color ) { float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); return mix( color, vec3( newPeak ), g ); } -vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISSION +vec3 CustomToneMapping( vec3 color ) { return color; }`,xf=`#ifdef USE_TRANSMISSION material.transmission = transmission; material.transmissionAlpha = 1.0; material.thickness = thickness; @@ -2149,7 +2149,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS material.attenuationColor, material.attenuationDistance ); material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,pf=`#ifdef USE_TRANSMISSION +#endif`,Mf=`#ifdef USE_TRANSMISSION uniform float transmission; uniform float thickness; uniform float attenuationDistance; @@ -2275,7 +2275,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); } -#endif`,mf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Sf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2345,7 +2345,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,gf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,yf=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) varying vec2 vUv; #endif #ifdef USE_MAP @@ -2439,7 +2439,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS #ifdef USE_THICKNESSMAP uniform mat3 thicknessMapTransform; varying vec2 vThicknessMapUv; -#endif`,_f=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) +#endif`,Ef=`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) vUv = vec3( uv, 1 ).xy; #endif #ifdef USE_MAP @@ -2510,7 +2510,7 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS #endif #ifdef USE_THICKNESSMAP vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,vf=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 +#endif`,bf=`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 vec4 worldPosition = vec4( transformed, 1.0 ); #ifdef USE_BATCHING worldPosition = batchingMatrix * worldPosition; @@ -2519,12 +2519,12 @@ vec3 CustomToneMapping( vec3 color ) { return color; }`,ff=`#ifdef USE_TRANSMISS worldPosition = instanceMatrix * worldPosition; #endif worldPosition = modelMatrix * worldPosition; -#endif`;const xf=`varying vec2 vUv; +#endif`;const Tf=`varying vec2 vUv; uniform mat3 uvTransform; void main() { vUv = ( uvTransform * vec3( uv, 1 ) ).xy; gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,Mf=`uniform sampler2D t2D; +}`,wf=`uniform sampler2D t2D; uniform float backgroundIntensity; varying vec2 vUv; void main() { @@ -2536,14 +2536,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,Sf=`varying vec3 vWorldDirection; +}`,Af=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,yf=`#ifdef ENVMAP_TYPE_CUBE +}`,Rf=`#ifdef ENVMAP_TYPE_CUBE uniform samplerCube envMap; #elif defined( ENVMAP_TYPE_CUBE_UV ) uniform sampler2D envMap; @@ -2566,14 +2566,14 @@ void main() { gl_FragColor = texColor; #include #include -}`,Ef=`varying vec3 vWorldDirection; +}`,Cf=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include gl_Position.z = gl_Position.w; -}`,bf=`uniform samplerCube tCube; +}`,Pf=`uniform samplerCube tCube; uniform float tFlip; uniform float opacity; varying vec3 vWorldDirection; @@ -2583,7 +2583,7 @@ void main() { gl_FragColor.a *= opacity; #include #include -}`,Tf=`#include +}`,Df=`#include #include #include #include @@ -2610,7 +2610,7 @@ void main() { #include #include vHighPrecisionZW = gl_Position.zw; -}`,wf=`#if DEPTH_PACKING == 3200 +}`,Lf=`#if DEPTH_PACKING == 3200 uniform float opacity; #endif #include @@ -2644,7 +2644,7 @@ void main() { #elif DEPTH_PACKING == 3203 gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); #endif -}`,Af=`#define DISTANCE +}`,Uf=`#define DISTANCE varying vec3 vWorldPosition; #include #include @@ -2671,7 +2671,7 @@ void main() { #include #include vWorldPosition = worldPosition.xyz; -}`,Rf=`#define DISTANCE +}`,If=`#define DISTANCE uniform vec3 referencePosition; uniform float nearDistance; uniform float farDistance; @@ -2695,13 +2695,13 @@ void main () { dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); dist = saturate( dist ); gl_FragColor = packDepthToRGBA( dist ); -}`,Cf=`varying vec3 vWorldDirection; +}`,Nf=`varying vec3 vWorldDirection; #include void main() { vWorldDirection = transformDirection( position, modelMatrix ); #include #include -}`,Pf=`uniform sampler2D tEquirect; +}`,Ff=`uniform sampler2D tEquirect; varying vec3 vWorldDirection; #include void main() { @@ -2710,7 +2710,7 @@ void main() { gl_FragColor = texture2D( tEquirect, sampleUV ); #include #include -}`,Df=`uniform float scale; +}`,Of=`uniform float scale; attribute float lineDistance; varying float vLineDistance; #include @@ -2732,7 +2732,7 @@ void main() { #include #include #include -}`,Lf=`uniform vec3 diffuse; +}`,Bf=`uniform vec3 diffuse; uniform float opacity; uniform float dashSize; uniform float totalSize; @@ -2760,7 +2760,7 @@ void main() { #include #include #include -}`,Uf=`#include +}`,zf=`#include #include #include #include @@ -2792,7 +2792,7 @@ void main() { #include #include #include -}`,If=`uniform vec3 diffuse; +}`,kf=`uniform vec3 diffuse; uniform float opacity; #ifndef FLAT_SHADED varying vec3 vNormal; @@ -2840,7 +2840,7 @@ void main() { #include #include #include -}`,Nf=`#define LAMBERT +}`,Hf=`#define LAMBERT varying vec3 vViewPosition; #include #include @@ -2879,7 +2879,7 @@ void main() { #include #include #include -}`,Ff=`#define LAMBERT +}`,Vf=`#define LAMBERT uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -2936,7 +2936,7 @@ void main() { #include #include #include -}`,Of=`#define MATCAP +}`,Gf=`#define MATCAP varying vec3 vViewPosition; #include #include @@ -2970,7 +2970,7 @@ void main() { #include #include vViewPosition = - mvPosition.xyz; -}`,Bf=`#define MATCAP +}`,Wf=`#define MATCAP uniform vec3 diffuse; uniform float opacity; uniform sampler2D matcap; @@ -3016,7 +3016,7 @@ void main() { #include #include #include -}`,zf=`#define NORMAL +}`,Xf=`#define NORMAL #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; #endif @@ -3049,7 +3049,7 @@ void main() { #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) vViewPosition = - mvPosition.xyz; #endif -}`,kf=`#define NORMAL +}`,Yf=`#define NORMAL uniform float opacity; #if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) varying vec3 vViewPosition; @@ -3071,7 +3071,7 @@ void main() { #ifdef OPAQUE gl_FragColor.a = 1.0; #endif -}`,Hf=`#define PHONG +}`,qf=`#define PHONG varying vec3 vViewPosition; #include #include @@ -3110,7 +3110,7 @@ void main() { #include #include #include -}`,Vf=`#define PHONG +}`,jf=`#define PHONG uniform vec3 diffuse; uniform vec3 emissive; uniform vec3 specular; @@ -3169,7 +3169,7 @@ void main() { #include #include #include -}`,Gf=`#define STANDARD +}`,Zf=`#define STANDARD varying vec3 vViewPosition; #ifdef USE_TRANSMISSION varying vec3 vWorldPosition; @@ -3212,7 +3212,7 @@ void main() { #ifdef USE_TRANSMISSION vWorldPosition = worldPosition.xyz; #endif -}`,Wf=`#define STANDARD +}`,Kf=`#define STANDARD #ifdef PHYSICAL #define IOR #define USE_SPECULAR @@ -3337,7 +3337,7 @@ void main() { #include #include #include -}`,Xf=`#define TOON +}`,$f=`#define TOON varying vec3 vViewPosition; #include #include @@ -3374,7 +3374,7 @@ void main() { #include #include #include -}`,Yf=`#define TOON +}`,Jf=`#define TOON uniform vec3 diffuse; uniform vec3 emissive; uniform float opacity; @@ -3427,7 +3427,7 @@ void main() { #include #include #include -}`,qf=`uniform float size; +}`,Qf=`uniform float size; uniform float scale; #include #include @@ -3458,7 +3458,7 @@ void main() { #include #include #include -}`,jf=`uniform vec3 diffuse; +}`,tp=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3483,7 +3483,7 @@ void main() { #include #include #include -}`,Zf=`#include +}`,ep=`#include #include #include #include @@ -3506,7 +3506,7 @@ void main() { #include #include #include -}`,Kf=`uniform vec3 color; +}`,np=`uniform vec3 color; uniform float opacity; #include #include @@ -3522,7 +3522,7 @@ void main() { #include #include #include -}`,$f=`uniform float rotation; +}`,ip=`uniform float rotation; uniform vec2 center; #include #include @@ -3546,7 +3546,7 @@ void main() { #include #include #include -}`,Jf=`uniform vec3 diffuse; +}`,sp=`uniform vec3 diffuse; uniform float opacity; #include #include @@ -3571,7 +3571,7 @@ void main() { #include #include #include -}`,kt={alphahash_fragment:xu,alphahash_pars_fragment:Mu,alphamap_fragment:Su,alphamap_pars_fragment:yu,alphatest_fragment:Eu,alphatest_pars_fragment:bu,aomap_fragment:Tu,aomap_pars_fragment:wu,batching_pars_vertex:Au,batching_vertex:Ru,begin_vertex:Cu,beginnormal_vertex:Pu,bsdfs:Du,iridescence_fragment:Lu,bumpmap_pars_fragment:Uu,clipping_planes_fragment:Iu,clipping_planes_pars_fragment:Nu,clipping_planes_pars_vertex:Fu,clipping_planes_vertex:Ou,color_fragment:Bu,color_pars_fragment:zu,color_pars_vertex:ku,color_vertex:Hu,common:Vu,cube_uv_reflection_fragment:Gu,defaultnormal_vertex:Wu,displacementmap_pars_vertex:Xu,displacementmap_vertex:Yu,emissivemap_fragment:qu,emissivemap_pars_fragment:ju,colorspace_fragment:Zu,colorspace_pars_fragment:Ku,envmap_fragment:$u,envmap_common_pars_fragment:Ju,envmap_pars_fragment:Qu,envmap_pars_vertex:td,envmap_physical_pars_fragment:ud,envmap_vertex:ed,fog_vertex:nd,fog_pars_vertex:id,fog_fragment:sd,fog_pars_fragment:rd,gradientmap_pars_fragment:ad,lightmap_pars_fragment:od,lights_lambert_fragment:ld,lights_lambert_pars_fragment:cd,lights_pars_begin:hd,lights_toon_fragment:dd,lights_toon_pars_fragment:fd,lights_phong_fragment:pd,lights_phong_pars_fragment:md,lights_physical_fragment:gd,lights_physical_pars_fragment:_d,lights_fragment_begin:vd,lights_fragment_maps:xd,lights_fragment_end:Md,logdepthbuf_fragment:Sd,logdepthbuf_pars_fragment:yd,logdepthbuf_pars_vertex:Ed,logdepthbuf_vertex:bd,map_fragment:Td,map_pars_fragment:wd,map_particle_fragment:Ad,map_particle_pars_fragment:Rd,metalnessmap_fragment:Cd,metalnessmap_pars_fragment:Pd,morphinstance_vertex:Dd,morphcolor_vertex:Ld,morphnormal_vertex:Ud,morphtarget_pars_vertex:Id,morphtarget_vertex:Nd,normal_fragment_begin:Fd,normal_fragment_maps:Od,normal_pars_fragment:Bd,normal_pars_vertex:zd,normal_vertex:kd,normalmap_pars_fragment:Hd,clearcoat_normal_fragment_begin:Vd,clearcoat_normal_fragment_maps:Gd,clearcoat_pars_fragment:Wd,iridescence_pars_fragment:Xd,opaque_fragment:Yd,packing:qd,premultiplied_alpha_fragment:jd,project_vertex:Zd,dithering_fragment:Kd,dithering_pars_fragment:$d,roughnessmap_fragment:Jd,roughnessmap_pars_fragment:Qd,shadowmap_pars_fragment:tf,shadowmap_pars_vertex:ef,shadowmap_vertex:nf,shadowmask_pars_fragment:sf,skinbase_vertex:rf,skinning_pars_vertex:af,skinning_vertex:of,skinnormal_vertex:lf,specularmap_fragment:cf,specularmap_pars_fragment:hf,tonemapping_fragment:uf,tonemapping_pars_fragment:df,transmission_fragment:ff,transmission_pars_fragment:pf,uv_pars_fragment:mf,uv_pars_vertex:gf,uv_vertex:_f,worldpos_vertex:vf,background_vert:xf,background_frag:Mf,backgroundCube_vert:Sf,backgroundCube_frag:yf,cube_vert:Ef,cube_frag:bf,depth_vert:Tf,depth_frag:wf,distanceRGBA_vert:Af,distanceRGBA_frag:Rf,equirect_vert:Cf,equirect_frag:Pf,linedashed_vert:Df,linedashed_frag:Lf,meshbasic_vert:Uf,meshbasic_frag:If,meshlambert_vert:Nf,meshlambert_frag:Ff,meshmatcap_vert:Of,meshmatcap_frag:Bf,meshnormal_vert:zf,meshnormal_frag:kf,meshphong_vert:Hf,meshphong_frag:Vf,meshphysical_vert:Gf,meshphysical_frag:Wf,meshtoon_vert:Xf,meshtoon_frag:Yf,points_vert:qf,points_frag:jf,shadow_vert:Zf,shadow_frag:Kf,sprite_vert:$f,sprite_frag:Jf},st={common:{diffuse:{value:new rt(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Bt},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Bt}},envmap:{envMap:{value:null},envMapRotation:{value:new Bt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Bt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Bt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Bt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Bt},normalScale:{value:new Mt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Bt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Bt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Bt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Bt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new rt(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new rt(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0},uvTransform:{value:new Bt}},sprite:{diffuse:{value:new rt(16777215)},opacity:{value:1},center:{value:new Mt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Bt},alphaMap:{value:null},alphaMapTransform:{value:new Bt},alphaTest:{value:0}}},un={basic:{uniforms:Oe([st.common,st.specularmap,st.envmap,st.aomap,st.lightmap,st.fog]),vertexShader:kt.meshbasic_vert,fragmentShader:kt.meshbasic_frag},lambert:{uniforms:Oe([st.common,st.specularmap,st.envmap,st.aomap,st.lightmap,st.emissivemap,st.bumpmap,st.normalmap,st.displacementmap,st.fog,st.lights,{emissive:{value:new rt(0)}}]),vertexShader:kt.meshlambert_vert,fragmentShader:kt.meshlambert_frag},phong:{uniforms:Oe([st.common,st.specularmap,st.envmap,st.aomap,st.lightmap,st.emissivemap,st.bumpmap,st.normalmap,st.displacementmap,st.fog,st.lights,{emissive:{value:new rt(0)},specular:{value:new rt(1118481)},shininess:{value:30}}]),vertexShader:kt.meshphong_vert,fragmentShader:kt.meshphong_frag},standard:{uniforms:Oe([st.common,st.envmap,st.aomap,st.lightmap,st.emissivemap,st.bumpmap,st.normalmap,st.displacementmap,st.roughnessmap,st.metalnessmap,st.fog,st.lights,{emissive:{value:new rt(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:kt.meshphysical_vert,fragmentShader:kt.meshphysical_frag},toon:{uniforms:Oe([st.common,st.aomap,st.lightmap,st.emissivemap,st.bumpmap,st.normalmap,st.displacementmap,st.gradientmap,st.fog,st.lights,{emissive:{value:new rt(0)}}]),vertexShader:kt.meshtoon_vert,fragmentShader:kt.meshtoon_frag},matcap:{uniforms:Oe([st.common,st.bumpmap,st.normalmap,st.displacementmap,st.fog,{matcap:{value:null}}]),vertexShader:kt.meshmatcap_vert,fragmentShader:kt.meshmatcap_frag},points:{uniforms:Oe([st.points,st.fog]),vertexShader:kt.points_vert,fragmentShader:kt.points_frag},dashed:{uniforms:Oe([st.common,st.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:kt.linedashed_vert,fragmentShader:kt.linedashed_frag},depth:{uniforms:Oe([st.common,st.displacementmap]),vertexShader:kt.depth_vert,fragmentShader:kt.depth_frag},normal:{uniforms:Oe([st.common,st.bumpmap,st.normalmap,st.displacementmap,{opacity:{value:1}}]),vertexShader:kt.meshnormal_vert,fragmentShader:kt.meshnormal_frag},sprite:{uniforms:Oe([st.sprite,st.fog]),vertexShader:kt.sprite_vert,fragmentShader:kt.sprite_frag},background:{uniforms:{uvTransform:{value:new Bt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:kt.background_vert,fragmentShader:kt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Bt}},vertexShader:kt.backgroundCube_vert,fragmentShader:kt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:kt.cube_vert,fragmentShader:kt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:kt.equirect_vert,fragmentShader:kt.equirect_frag},distanceRGBA:{uniforms:Oe([st.common,st.displacementmap,{referencePosition:{value:new C},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:kt.distanceRGBA_vert,fragmentShader:kt.distanceRGBA_frag},shadow:{uniforms:Oe([st.lights,st.fog,{color:{value:new rt(0)},opacity:{value:1}}]),vertexShader:kt.shadow_vert,fragmentShader:kt.shadow_frag}};un.physical={uniforms:Oe([un.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Bt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Bt},clearcoatNormalScale:{value:new Mt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Bt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Bt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Bt},sheen:{value:0},sheenColor:{value:new rt(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Bt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Bt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Bt},transmissionSamplerSize:{value:new Mt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Bt},attenuationDistance:{value:0},attenuationColor:{value:new rt(0)},specularColor:{value:new rt(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Bt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Bt},anisotropyVector:{value:new Mt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Bt}}]),vertexShader:kt.meshphysical_vert,fragmentShader:kt.meshphysical_frag};const Ks={r:0,b:0,g:0},qn=new gn,Qf=new ie;function tp(i,t,e,n,s,r,a){const o=new rt(0);let l=r===!0?0:1,c,h,d=null,p=0,u=null;function g(b){let S=b.isScene===!0?b.background:null;return S&&S.isTexture&&(S=(b.backgroundBlurriness>0?e:t).get(S)),S}function v(b){let S=!1;const D=g(b);D===null?f(o,l):D&&D.isColor&&(f(D,1),S=!0);const w=i.xr.getEnvironmentBlendMode();w==="additive"?n.buffers.color.setClear(0,0,0,1,a):w==="alpha-blend"&&n.buffers.color.setClear(0,0,0,0,a),(i.autoClear||S)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil))}function m(b,S){const D=g(S);D&&(D.isCubeTexture||D.mapping===vr)?(h===void 0&&(h=new Me(new gs(1,1,1),new ze({name:"BackgroundCubeMaterial",uniforms:Gi(un.backgroundCube.uniforms),vertexShader:un.backgroundCube.vertexShader,fragmentShader:un.backgroundCube.fragmentShader,side:We,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(w,R,U){this.matrixWorld.copyPosition(U.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(h)),qn.copy(S.backgroundRotation),qn.x*=-1,qn.y*=-1,qn.z*=-1,D.isCubeTexture&&D.isRenderTargetTexture===!1&&(qn.y*=-1,qn.z*=-1),h.material.uniforms.envMap.value=D,h.material.uniforms.flipEnvMap.value=D.isCubeTexture&&D.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=S.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=S.backgroundIntensity,h.material.uniforms.backgroundRotation.value.setFromMatrix4(Qf.makeRotationFromEuler(qn)),h.material.toneMapped=Qt.getTransfer(D.colorSpace)!==re,(d!==D||p!==D.version||u!==i.toneMapping)&&(h.material.needsUpdate=!0,d=D,p=D.version,u=i.toneMapping),h.layers.enableAll(),b.unshift(h,h.geometry,h.material,0,0,null)):D&&D.isTexture&&(c===void 0&&(c=new Me(new _s(2,2),new ze({name:"BackgroundMaterial",uniforms:Gi(un.background.uniforms),vertexShader:un.background.vertexShader,fragmentShader:un.background.fragmentShader,side:kn,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=D,c.material.uniforms.backgroundIntensity.value=S.backgroundIntensity,c.material.toneMapped=Qt.getTransfer(D.colorSpace)!==re,D.matrixAutoUpdate===!0&&D.updateMatrix(),c.material.uniforms.uvTransform.value.copy(D.matrix),(d!==D||p!==D.version||u!==i.toneMapping)&&(c.material.needsUpdate=!0,d=D,p=D.version,u=i.toneMapping),c.layers.enableAll(),b.unshift(c,c.geometry,c.material,0,0,null))}function f(b,S){b.getRGB(Ks,oc(i)),n.buffers.color.setClear(Ks.r,Ks.g,Ks.b,S,a)}function T(){h!==void 0&&(h.geometry.dispose(),h.material.dispose()),c!==void 0&&(c.geometry.dispose(),c.material.dispose())}return{getClearColor:function(){return o},setClearColor:function(b,S=1){o.set(b),l=S,f(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(b){l=b,f(o,l)},render:v,addToRenderList:m,dispose:T}}function ep(i,t){const e=i.getParameter(i.MAX_VERTEX_ATTRIBS),n={},s=p(null);let r=s,a=!1;function o(M,P,W,z,G){let $=!1;const X=d(z,W,P);r!==X&&(r=X,c(r.object)),$=u(M,z,W,G),$&&g(M,z,W,G),G!==null&&t.update(G,i.ELEMENT_ARRAY_BUFFER),($||a)&&(a=!1,S(M,P,W,z),G!==null&&i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,t.get(G).buffer))}function l(){return i.createVertexArray()}function c(M){return i.bindVertexArray(M)}function h(M){return i.deleteVertexArray(M)}function d(M,P,W){const z=W.wireframe===!0;let G=n[M.id];G===void 0&&(G={},n[M.id]=G);let $=G[P.id];$===void 0&&($={},G[P.id]=$);let X=$[z];return X===void 0&&(X=p(l()),$[z]=X),X}function p(M){const P=[],W=[],z=[];for(let G=0;G=0){const ft=G[k];let St=$[k];if(St===void 0&&(k==="instanceMatrix"&&M.instanceMatrix&&(St=M.instanceMatrix),k==="instanceColor"&&M.instanceColor&&(St=M.instanceColor)),ft===void 0||ft.attribute!==St||St&&ft.data!==St.data)return!0;X++}return r.attributesNum!==X||r.index!==z}function g(M,P,W,z){const G={},$=P.attributes;let X=0;const Q=W.getAttributes();for(const k in Q)if(Q[k].location>=0){let ft=$[k];ft===void 0&&(k==="instanceMatrix"&&M.instanceMatrix&&(ft=M.instanceMatrix),k==="instanceColor"&&M.instanceColor&&(ft=M.instanceColor));const St={};St.attribute=ft,ft&&ft.data&&(St.data=ft.data),G[k]=St,X++}r.attributes=G,r.attributesNum=X,r.index=z}function v(){const M=r.newAttributes;for(let P=0,W=M.length;P=0){let it=G[Q];if(it===void 0&&(Q==="instanceMatrix"&&M.instanceMatrix&&(it=M.instanceMatrix),Q==="instanceColor"&&M.instanceColor&&(it=M.instanceColor)),it!==void 0){const ft=it.normalized,St=it.itemSize,Ft=t.get(it);if(Ft===void 0)continue;const Vt=Ft.buffer,Y=Ft.type,nt=Ft.bytesPerElement,_t=Y===i.INT||Y===i.UNSIGNED_INT||it.gpuType===Qa;if(it.isInterleavedBufferAttribute){const ot=it.data,Pt=ot.stride,Lt=it.offset;if(ot.isInstancedInterleavedBuffer){for(let Ht=0;Ht0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.HIGH_FLOAT).precision>0)return"highp";R="mediump"}return R==="mediump"&&i.getShaderPrecisionFormat(i.VERTEX_SHADER,i.MEDIUM_FLOAT).precision>0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=e.precision!==void 0?e.precision:"highp";const h=l(c);h!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",h,"instead."),c=h);const d=e.logarithmicDepthBuffer===!0,p=e.reverseDepthBuffer===!0&&t.has("EXT_clip_control"),u=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS),g=i.getParameter(i.MAX_VERTEX_TEXTURE_IMAGE_UNITS),v=i.getParameter(i.MAX_TEXTURE_SIZE),m=i.getParameter(i.MAX_CUBE_MAP_TEXTURE_SIZE),f=i.getParameter(i.MAX_VERTEX_ATTRIBS),T=i.getParameter(i.MAX_VERTEX_UNIFORM_VECTORS),b=i.getParameter(i.MAX_VARYING_VECTORS),S=i.getParameter(i.MAX_FRAGMENT_UNIFORM_VECTORS),D=g>0,w=i.getParameter(i.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reverseDepthBuffer:p,maxTextures:u,maxVertexTextures:g,maxTextureSize:v,maxCubemapSize:m,maxAttributes:f,maxVertexUniforms:T,maxVaryings:b,maxFragmentUniforms:S,vertexTextures:D,maxSamples:w}}function sp(i){const t=this;let e=null,n=0,s=!1,r=!1;const a=new Fn,o=new Bt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,p){const u=d.length!==0||p||n!==0||s;return s=p,n=d.length,u},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(d,p){e=h(d,p,0)},this.setState=function(d,p,u){const g=d.clippingPlanes,v=d.clipIntersection,m=d.clipShadows,f=i.get(d);if(!s||g===null||g.length===0||r&&!m)r?h(null):c();else{const T=r?0:n,b=T*4;let S=f.clippingState||null;l.value=S,S=h(g,p,b,u);for(let D=0;D!==b;++D)S[D]=e[D];f.clippingState=S,this.numIntersection=v?this.numPlanes:0,this.numPlanes+=T}};function c(){l.value!==e&&(l.value=e,l.needsUpdate=n>0),t.numPlanes=n,t.numIntersection=0}function h(d,p,u,g){const v=d!==null?d.length:0;let m=null;if(v!==0){if(m=l.value,g!==!0||m===null){const f=u+v*4,T=p.matrixWorldInverse;o.getNormalMatrix(T),(m===null||m.length0){const c=new Qh(l.height);return c.fromEquirectangularTexture(i,a),t.set(a,c),a.addEventListener("dispose",s),e(c.texture,a.mapping)}else return null}}return a}function s(a){const o=a.target;o.removeEventListener("dispose",s);const l=t.get(o);l!==void 0&&(t.delete(o),l.dispose())}function r(){t=new WeakMap}return{get:n,dispose:r}}const Di=4,nl=[.125,.215,.35,.446,.526,.582],Jn=20,Kr=new pc,il=new rt;let $r=null,Jr=0,Qr=0,ta=!1;const Kn=(1+Math.sqrt(5))/2,Ai=1/Kn,sl=[new C(-Kn,Ai,0),new C(Kn,Ai,0),new C(-Ai,0,Kn),new C(Ai,0,Kn),new C(0,Kn,-Ai),new C(0,Kn,Ai),new C(-1,1,-1),new C(1,1,-1),new C(-1,1,1),new C(1,1,1)];class rl{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,s=100){$r=this._renderer.getRenderTarget(),Jr=this._renderer.getActiveCubeFace(),Qr=this._renderer.getActiveMipmapLevel(),ta=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,s,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=ll(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=ol(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t2?b:0,b,b),h.setRenderTarget(s),v&&h.render(g,o),h.render(t,o)}g.geometry.dispose(),g.material.dispose(),h.toneMapping=p,h.autoClear=d,t.background=m}_textureToCubeUV(t,e){const n=this._renderer,s=t.mapping===Bi||t.mapping===zi;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=ll()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=ol());const r=s?this._cubemapMaterial:this._equirectMaterial,a=new Me(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const l=this._cubeSize;$s(e,0,0,3*l,2*l),n.setRenderTarget(e),n.render(a,Kr)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;const s=this._lodPlanes.length;for(let r=1;rJn&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${Jn}`);const f=[];let T=0;for(let R=0;Rb-Di?s-b+Di:0),w=4*(this._cubeSize-S);$s(e,D,w,3*S,2*S),l.setRenderTarget(e),l.render(d,Kr)}}function ap(i){const t=[],e=[],n=[];let s=i;const r=i-Di+1+nl.length;for(let a=0;ai-Di?l=nl[a-i+Di-1]:a===0&&(l=0),n.push(l);const c=1/(o-2),h=-c,d=1+c,p=[h,h,d,h,d,d,h,h,d,d,h,d],u=6,g=6,v=3,m=2,f=1,T=new Float32Array(v*g*u),b=new Float32Array(m*g*u),S=new Float32Array(f*g*u);for(let w=0;w2?0:-1,y=[R,U,0,R+2/3,U,0,R+2/3,U+1,0,R,U,0,R+2/3,U+1,0,R,U+1,0];T.set(y,v*g*w),b.set(p,m*g*w);const M=[w,w,w,w,w,w];S.set(M,f*g*w)}const D=new ge;D.setAttribute("position",new ue(T,v)),D.setAttribute("uv",new ue(b,m)),D.setAttribute("faceIndex",new ue(S,f)),t.push(D),s>Di&&s--}return{lodPlanes:t,sizeLods:e,sigmas:n}}function al(i,t,e){const n=new cn(i,t,e);return n.texture.mapping=vr,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function $s(i,t,e,n,s){i.viewport.set(t,e,n,s),i.scissor.set(t,e,n,s)}function op(i,t,e){const n=new Float32Array(Jn),s=new C(0,1,0);return new ze({name:"SphericalGaussianBlur",defines:{n:Jn,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${i}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:co(),fragmentShader:` +}`,Vt={alphahash_fragment:Tu,alphahash_pars_fragment:wu,alphamap_fragment:Au,alphamap_pars_fragment:Ru,alphatest_fragment:Cu,alphatest_pars_fragment:Pu,aomap_fragment:Du,aomap_pars_fragment:Lu,batching_pars_vertex:Uu,batching_vertex:Iu,begin_vertex:Nu,beginnormal_vertex:Fu,bsdfs:Ou,iridescence_fragment:Bu,bumpmap_pars_fragment:zu,clipping_planes_fragment:ku,clipping_planes_pars_fragment:Hu,clipping_planes_pars_vertex:Vu,clipping_planes_vertex:Gu,color_fragment:Wu,color_pars_fragment:Xu,color_pars_vertex:Yu,color_vertex:qu,common:ju,cube_uv_reflection_fragment:Zu,defaultnormal_vertex:Ku,displacementmap_pars_vertex:$u,displacementmap_vertex:Ju,emissivemap_fragment:Qu,emissivemap_pars_fragment:td,colorspace_fragment:ed,colorspace_pars_fragment:nd,envmap_fragment:id,envmap_common_pars_fragment:sd,envmap_pars_fragment:rd,envmap_pars_vertex:ad,envmap_physical_pars_fragment:_d,envmap_vertex:od,fog_vertex:ld,fog_pars_vertex:cd,fog_fragment:hd,fog_pars_fragment:ud,gradientmap_pars_fragment:dd,lightmap_pars_fragment:fd,lights_lambert_fragment:pd,lights_lambert_pars_fragment:md,lights_pars_begin:gd,lights_toon_fragment:vd,lights_toon_pars_fragment:xd,lights_phong_fragment:Md,lights_phong_pars_fragment:Sd,lights_physical_fragment:yd,lights_physical_pars_fragment:Ed,lights_fragment_begin:bd,lights_fragment_maps:Td,lights_fragment_end:wd,logdepthbuf_fragment:Ad,logdepthbuf_pars_fragment:Rd,logdepthbuf_pars_vertex:Cd,logdepthbuf_vertex:Pd,map_fragment:Dd,map_pars_fragment:Ld,map_particle_fragment:Ud,map_particle_pars_fragment:Id,metalnessmap_fragment:Nd,metalnessmap_pars_fragment:Fd,morphinstance_vertex:Od,morphcolor_vertex:Bd,morphnormal_vertex:zd,morphtarget_pars_vertex:kd,morphtarget_vertex:Hd,normal_fragment_begin:Vd,normal_fragment_maps:Gd,normal_pars_fragment:Wd,normal_pars_vertex:Xd,normal_vertex:Yd,normalmap_pars_fragment:qd,clearcoat_normal_fragment_begin:jd,clearcoat_normal_fragment_maps:Zd,clearcoat_pars_fragment:Kd,iridescence_pars_fragment:$d,opaque_fragment:Jd,packing:Qd,premultiplied_alpha_fragment:tf,project_vertex:ef,dithering_fragment:nf,dithering_pars_fragment:sf,roughnessmap_fragment:rf,roughnessmap_pars_fragment:af,shadowmap_pars_fragment:of,shadowmap_pars_vertex:lf,shadowmap_vertex:cf,shadowmask_pars_fragment:hf,skinbase_vertex:uf,skinning_pars_vertex:df,skinning_vertex:ff,skinnormal_vertex:pf,specularmap_fragment:mf,specularmap_pars_fragment:gf,tonemapping_fragment:_f,tonemapping_pars_fragment:vf,transmission_fragment:xf,transmission_pars_fragment:Mf,uv_pars_fragment:Sf,uv_pars_vertex:yf,uv_vertex:Ef,worldpos_vertex:bf,background_vert:Tf,background_frag:wf,backgroundCube_vert:Af,backgroundCube_frag:Rf,cube_vert:Cf,cube_frag:Pf,depth_vert:Df,depth_frag:Lf,distanceRGBA_vert:Uf,distanceRGBA_frag:If,equirect_vert:Nf,equirect_frag:Ff,linedashed_vert:Of,linedashed_frag:Bf,meshbasic_vert:zf,meshbasic_frag:kf,meshlambert_vert:Hf,meshlambert_frag:Vf,meshmatcap_vert:Gf,meshmatcap_frag:Wf,meshnormal_vert:Xf,meshnormal_frag:Yf,meshphong_vert:qf,meshphong_frag:jf,meshphysical_vert:Zf,meshphysical_frag:Kf,meshtoon_vert:$f,meshtoon_frag:Jf,points_vert:Qf,points_frag:tp,shadow_vert:ep,shadow_frag:np,sprite_vert:ip,sprite_frag:sp},rt={common:{diffuse:{value:new st(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new zt},alphaMap:{value:null},alphaMapTransform:{value:new zt},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new zt}},envmap:{envMap:{value:null},envMapRotation:{value:new zt},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new zt}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new zt}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new zt},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new zt},normalScale:{value:new xt(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new zt},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new zt}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new zt}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new zt}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new st(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotShadowMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new st(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new zt},alphaTest:{value:0},uvTransform:{value:new zt}},sprite:{diffuse:{value:new st(16777215)},opacity:{value:1},center:{value:new xt(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new zt},alphaMap:{value:null},alphaMapTransform:{value:new zt},alphaTest:{value:0}}},pn={basic:{uniforms:ke([rt.common,rt.specularmap,rt.envmap,rt.aomap,rt.lightmap,rt.fog]),vertexShader:Vt.meshbasic_vert,fragmentShader:Vt.meshbasic_frag},lambert:{uniforms:ke([rt.common,rt.specularmap,rt.envmap,rt.aomap,rt.lightmap,rt.emissivemap,rt.bumpmap,rt.normalmap,rt.displacementmap,rt.fog,rt.lights,{emissive:{value:new st(0)}}]),vertexShader:Vt.meshlambert_vert,fragmentShader:Vt.meshlambert_frag},phong:{uniforms:ke([rt.common,rt.specularmap,rt.envmap,rt.aomap,rt.lightmap,rt.emissivemap,rt.bumpmap,rt.normalmap,rt.displacementmap,rt.fog,rt.lights,{emissive:{value:new st(0)},specular:{value:new st(1118481)},shininess:{value:30}}]),vertexShader:Vt.meshphong_vert,fragmentShader:Vt.meshphong_frag},standard:{uniforms:ke([rt.common,rt.envmap,rt.aomap,rt.lightmap,rt.emissivemap,rt.bumpmap,rt.normalmap,rt.displacementmap,rt.roughnessmap,rt.metalnessmap,rt.fog,rt.lights,{emissive:{value:new st(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Vt.meshphysical_vert,fragmentShader:Vt.meshphysical_frag},toon:{uniforms:ke([rt.common,rt.aomap,rt.lightmap,rt.emissivemap,rt.bumpmap,rt.normalmap,rt.displacementmap,rt.gradientmap,rt.fog,rt.lights,{emissive:{value:new st(0)}}]),vertexShader:Vt.meshtoon_vert,fragmentShader:Vt.meshtoon_frag},matcap:{uniforms:ke([rt.common,rt.bumpmap,rt.normalmap,rt.displacementmap,rt.fog,{matcap:{value:null}}]),vertexShader:Vt.meshmatcap_vert,fragmentShader:Vt.meshmatcap_frag},points:{uniforms:ke([rt.points,rt.fog]),vertexShader:Vt.points_vert,fragmentShader:Vt.points_frag},dashed:{uniforms:ke([rt.common,rt.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Vt.linedashed_vert,fragmentShader:Vt.linedashed_frag},depth:{uniforms:ke([rt.common,rt.displacementmap]),vertexShader:Vt.depth_vert,fragmentShader:Vt.depth_frag},normal:{uniforms:ke([rt.common,rt.bumpmap,rt.normalmap,rt.displacementmap,{opacity:{value:1}}]),vertexShader:Vt.meshnormal_vert,fragmentShader:Vt.meshnormal_frag},sprite:{uniforms:ke([rt.sprite,rt.fog]),vertexShader:Vt.sprite_vert,fragmentShader:Vt.sprite_frag},background:{uniforms:{uvTransform:{value:new zt},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:Vt.background_vert,fragmentShader:Vt.background_frag},backgroundCube:{uniforms:{envMap:{value:null},flipEnvMap:{value:-1},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new zt}},vertexShader:Vt.backgroundCube_vert,fragmentShader:Vt.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:Vt.cube_vert,fragmentShader:Vt.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Vt.equirect_vert,fragmentShader:Vt.equirect_frag},distanceRGBA:{uniforms:ke([rt.common,rt.displacementmap,{referencePosition:{value:new P},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Vt.distanceRGBA_vert,fragmentShader:Vt.distanceRGBA_frag},shadow:{uniforms:ke([rt.lights,rt.fog,{color:{value:new st(0)},opacity:{value:1}}]),vertexShader:Vt.shadow_vert,fragmentShader:Vt.shadow_frag}};pn.physical={uniforms:ke([pn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new zt},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new zt},clearcoatNormalScale:{value:new xt(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new zt},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new zt},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new zt},sheen:{value:0},sheenColor:{value:new st(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new zt},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new zt},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new zt},transmissionSamplerSize:{value:new xt},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new zt},attenuationDistance:{value:0},attenuationColor:{value:new st(0)},specularColor:{value:new st(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new zt},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new zt},anisotropyVector:{value:new xt},anisotropyMap:{value:null},anisotropyMapTransform:{value:new zt}}]),vertexShader:Vt.meshphysical_vert,fragmentShader:Vt.meshphysical_frag};const nr={r:0,b:0,g:0},Jn=new xn,rp=new ne;function ap(i,t,e,n,s,r,a){const o=new st(0);let l=r===!0?0:1,c,h,d=null,f=0,u=null;function g(E){let y=E.isScene===!0?E.background:null;return y&&y.isTexture&&(y=(E.backgroundBlurriness>0?e:t).get(y)),y}function _(E){let y=!1;const D=g(E);D===null?p(o,l):D&&D.isColor&&(p(D,1),y=!0);const A=i.xr.getEnvironmentBlendMode();A==="additive"?n.buffers.color.setClear(0,0,0,1,a):A==="alpha-blend"&&n.buffers.color.setClear(0,0,0,0,a),(i.autoClear||y)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),i.clear(i.autoClearColor,i.autoClearDepth,i.autoClearStencil))}function m(E,y){const D=g(y);D&&(D.isCubeTexture||D.mapping===br)?(h===void 0&&(h=new Ee(new Es(1,1,1),new Ve({name:"BackgroundCubeMaterial",uniforms:Qi(pn.backgroundCube.uniforms),vertexShader:pn.backgroundCube.vertexShader,fragmentShader:pn.backgroundCube.fragmentShader,side:Ye,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),h.geometry.deleteAttribute("uv"),h.onBeforeRender=function(A,C,I){this.matrixWorld.copyPosition(I.matrixWorld)},Object.defineProperty(h.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),s.update(h)),Jn.copy(y.backgroundRotation),Jn.x*=-1,Jn.y*=-1,Jn.z*=-1,D.isCubeTexture&&D.isRenderTargetTexture===!1&&(Jn.y*=-1,Jn.z*=-1),h.material.uniforms.envMap.value=D,h.material.uniforms.flipEnvMap.value=D.isCubeTexture&&D.isRenderTargetTexture===!1?-1:1,h.material.uniforms.backgroundBlurriness.value=y.backgroundBlurriness,h.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,h.material.uniforms.backgroundRotation.value.setFromMatrix4(rp.makeRotationFromEuler(Jn)),h.material.toneMapped=Jt.getTransfer(D.colorSpace)!==ie,(d!==D||f!==D.version||u!==i.toneMapping)&&(h.material.needsUpdate=!0,d=D,f=D.version,u=i.toneMapping),h.layers.enableAll(),E.unshift(h,h.geometry,h.material,0,0,null)):D&&D.isTexture&&(c===void 0&&(c=new Ee(new bs(2,2),new Ve({name:"BackgroundMaterial",uniforms:Qi(pn.background.uniforms),vertexShader:pn.background.vertexShader,fragmentShader:pn.background.fragmentShader,side:Gn,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute("normal"),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),s.update(c)),c.material.uniforms.t2D.value=D,c.material.uniforms.backgroundIntensity.value=y.backgroundIntensity,c.material.toneMapped=Jt.getTransfer(D.colorSpace)!==ie,D.matrixAutoUpdate===!0&&D.updateMatrix(),c.material.uniforms.uvTransform.value.copy(D.matrix),(d!==D||f!==D.version||u!==i.toneMapping)&&(c.material.needsUpdate=!0,d=D,f=D.version,u=i.toneMapping),c.layers.enableAll(),E.unshift(c,c.geometry,c.material,0,0,null))}function p(E,y){E.getRGB(nr,pc(i)),n.buffers.color.setClear(nr.r,nr.g,nr.b,y,a)}function T(){h!==void 0&&(h.geometry.dispose(),h.material.dispose()),c!==void 0&&(c.geometry.dispose(),c.material.dispose())}return{getClearColor:function(){return o},setClearColor:function(E,y=1){o.set(E),l=y,p(o,l)},getClearAlpha:function(){return l},setClearAlpha:function(E){l=E,p(o,l)},render:_,addToRenderList:m,dispose:T}}function op(i,t){const e=i.getParameter(i.MAX_VERTEX_ATTRIBS),n={},s=f(null);let r=s,a=!1;function o(M,w,Y,V,j){let $=!1;const q=d(V,Y,w);r!==q&&(r=q,c(r.object)),$=u(M,V,Y,j),$&&g(M,V,Y,j),j!==null&&t.update(j,i.ELEMENT_ARRAY_BUFFER),($||a)&&(a=!1,y(M,w,Y,V),j!==null&&i.bindBuffer(i.ELEMENT_ARRAY_BUFFER,t.get(j).buffer))}function l(){return i.createVertexArray()}function c(M){return i.bindVertexArray(M)}function h(M){return i.deleteVertexArray(M)}function d(M,w,Y){const V=Y.wireframe===!0;let j=n[M.id];j===void 0&&(j={},n[M.id]=j);let $=j[w.id];$===void 0&&($={},j[w.id]=$);let q=$[V];return q===void 0&&(q=f(l()),$[V]=q),q}function f(M){const w=[],Y=[],V=[];for(let j=0;j=0){const ft=j[X];let Mt=$[X];if(Mt===void 0&&(X==="instanceMatrix"&&M.instanceMatrix&&(Mt=M.instanceMatrix),X==="instanceColor"&&M.instanceColor&&(Mt=M.instanceColor)),ft===void 0||ft.attribute!==Mt||Mt&&ft.data!==Mt.data)return!0;q++}return r.attributesNum!==q||r.index!==V}function g(M,w,Y,V){const j={},$=w.attributes;let q=0;const J=Y.getAttributes();for(const X in J)if(J[X].location>=0){let ft=$[X];ft===void 0&&(X==="instanceMatrix"&&M.instanceMatrix&&(ft=M.instanceMatrix),X==="instanceColor"&&M.instanceColor&&(ft=M.instanceColor));const Mt={};Mt.attribute=ft,ft&&ft.data&&(Mt.data=ft.data),j[X]=Mt,q++}r.attributes=j,r.attributesNum=q,r.index=V}function _(){const M=r.newAttributes;for(let w=0,Y=M.length;w=0){let it=j[J];if(it===void 0&&(J==="instanceMatrix"&&M.instanceMatrix&&(it=M.instanceMatrix),J==="instanceColor"&&M.instanceColor&&(it=M.instanceColor)),it!==void 0){const ft=it.normalized,Mt=it.itemSize,Nt=t.get(it);if(Nt===void 0)continue;const Wt=Nt.buffer,Z=Nt.type,nt=Nt.bytesPerElement,_t=Z===i.INT||Z===i.UNSIGNED_INT||it.gpuType===uo;if(it.isInterleavedBufferAttribute){const at=it.data,wt=at.stride,Pt=it.offset;if(at.isInstancedInterleavedBuffer){for(let kt=0;kt0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.HIGH_FLOAT).precision>0)return"highp";C="mediump"}return C==="mediump"&&i.getShaderPrecisionFormat(i.VERTEX_SHADER,i.MEDIUM_FLOAT).precision>0&&i.getShaderPrecisionFormat(i.FRAGMENT_SHADER,i.MEDIUM_FLOAT).precision>0?"mediump":"lowp"}let c=e.precision!==void 0?e.precision:"highp";const h=l(c);h!==c&&(console.warn("THREE.WebGLRenderer:",c,"not supported, using",h,"instead."),c=h);const d=e.logarithmicDepthBuffer===!0,f=e.reverseDepthBuffer===!0&&t.has("EXT_clip_control"),u=i.getParameter(i.MAX_TEXTURE_IMAGE_UNITS),g=i.getParameter(i.MAX_VERTEX_TEXTURE_IMAGE_UNITS),_=i.getParameter(i.MAX_TEXTURE_SIZE),m=i.getParameter(i.MAX_CUBE_MAP_TEXTURE_SIZE),p=i.getParameter(i.MAX_VERTEX_ATTRIBS),T=i.getParameter(i.MAX_VERTEX_UNIFORM_VECTORS),E=i.getParameter(i.MAX_VARYING_VECTORS),y=i.getParameter(i.MAX_FRAGMENT_UNIFORM_VECTORS),D=g>0,A=i.getParameter(i.MAX_SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:r,getMaxPrecision:l,textureFormatReadable:a,textureTypeReadable:o,precision:c,logarithmicDepthBuffer:d,reverseDepthBuffer:f,maxTextures:u,maxVertexTextures:g,maxTextureSize:_,maxCubemapSize:m,maxAttributes:p,maxVertexUniforms:T,maxVaryings:E,maxFragmentUniforms:y,vertexTextures:D,maxSamples:A}}function hp(i){const t=this;let e=null,n=0,s=!1,r=!1;const a=new zn,o=new zt,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(d,f){const u=d.length!==0||f||n!==0||s;return s=f,n=d.length,u},this.beginShadows=function(){r=!0,h(null)},this.endShadows=function(){r=!1},this.setGlobalState=function(d,f){e=h(d,f,0)},this.setState=function(d,f,u){const g=d.clippingPlanes,_=d.clipIntersection,m=d.clipShadows,p=i.get(d);if(!s||g===null||g.length===0||r&&!m)r?h(null):c();else{const T=r?0:n,E=T*4;let y=p.clippingState||null;l.value=y,y=h(g,f,E,u);for(let D=0;D!==E;++D)y[D]=e[D];p.clippingState=y,this.numIntersection=_?this.numPlanes:0,this.numPlanes+=T}};function c(){l.value!==e&&(l.value=e,l.needsUpdate=n>0),t.numPlanes=n,t.numIntersection=0}function h(d,f,u,g){const _=d!==null?d.length:0;let m=null;if(_!==0){if(m=l.value,g!==!0||m===null){const p=u+_*4,T=f.matrixWorldInverse;o.getNormalMatrix(T),(m===null||m.length0){const c=new ru(l.height);return c.fromEquirectangularTexture(i,a),t.set(a,c),a.addEventListener("dispose",s),e(c.texture,a.mapping)}else return null}}return a}function s(a){const o=a.target;o.removeEventListener("dispose",s);const l=t.get(o);l!==void 0&&(t.delete(o),l.dispose())}function r(){t=new WeakMap}return{get:n,dispose:r}}const ki=4,ul=[.125,.215,.35,.446,.526,.582],si=20,na=new Sc,dl=new st;let ia=null,sa=0,ra=0,aa=!1;const ei=(1+Math.sqrt(5))/2,Ni=1/ei,fl=[new P(-ei,Ni,0),new P(ei,Ni,0),new P(-Ni,0,ei),new P(Ni,0,ei),new P(0,ei,-Ni),new P(0,ei,Ni),new P(-1,1,-1),new P(1,1,-1),new P(-1,1,1),new P(1,1,1)];class pl{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._lodMax=0,this._cubeSize=0,this._lodPlanes=[],this._sizeLods=[],this._sigmas=[],this._blurMaterial=null,this._cubemapMaterial=null,this._equirectMaterial=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,s=100){ia=this._renderer.getRenderTarget(),sa=this._renderer.getActiveCubeFace(),ra=this._renderer.getActiveMipmapLevel(),aa=this._renderer.xr.enabled,this._renderer.xr.enabled=!1,this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,s,r),e>0&&this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=_l(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=gl(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let t=0;t2?E:0,E,E),h.setRenderTarget(s),_&&h.render(g,o),h.render(t,o)}g.geometry.dispose(),g.material.dispose(),h.toneMapping=f,h.autoClear=d,t.background=m}_textureToCubeUV(t,e){const n=this._renderer,s=t.mapping===ji||t.mapping===Zi;s?(this._cubemapMaterial===null&&(this._cubemapMaterial=_l()),this._cubemapMaterial.uniforms.flipEnvMap.value=t.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=gl());const r=s?this._cubemapMaterial:this._equirectMaterial,a=new Ee(this._lodPlanes[0],r),o=r.uniforms;o.envMap.value=t;const l=this._cubeSize;ir(e,0,0,3*l,2*l),n.setRenderTarget(e),n.render(a,na)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;const s=this._lodPlanes.length;for(let r=1;rsi&&console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${si}`);const p=[];let T=0;for(let C=0;CE-ki?s-E+ki:0),A=4*(this._cubeSize-y);ir(e,D,A,3*y,2*y),l.setRenderTarget(e),l.render(d,na)}}function dp(i){const t=[],e=[],n=[];let s=i;const r=i-ki+1+ul.length;for(let a=0;ai-ki?l=ul[a-i+ki-1]:a===0&&(l=0),n.push(l);const c=1/(o-2),h=-c,d=1+c,f=[h,h,d,h,d,d,h,h,d,d,h,d],u=6,g=6,_=3,m=2,p=1,T=new Float32Array(_*g*u),E=new Float32Array(m*g*u),y=new Float32Array(p*g*u);for(let A=0;A2?0:-1,S=[C,I,0,C+2/3,I,0,C+2/3,I+1,0,C,I,0,C+2/3,I+1,0,C,I+1,0];T.set(S,_*g*A),E.set(f,m*g*A);const M=[A,A,A,A,A,A];y.set(M,p*g*A)}const D=new ge;D.setAttribute("position",new ce(T,_)),D.setAttribute("uv",new ce(E,m)),D.setAttribute("faceIndex",new ce(y,p)),t.push(D),s>ki&&s--}return{lodPlanes:t,sizeLods:e,sigmas:n}}function ml(i,t,e){const n=new fn(i,t,e);return n.texture.mapping=br,n.texture.name="PMREM.cubeUv",n.scissorTest=!0,n}function ir(i,t,e,n,s){i.viewport.set(t,e,n,s),i.scissor.set(t,e,n,s)}function fp(i,t,e){const n=new Float32Array(si),s=new P(0,1,0);return new Ve({name:"SphericalGaussianBlur",defines:{n:si,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/e,CUBEUV_MAX_MIP:`${i}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:n},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:s}},vertexShader:yo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3631,7 +3631,7 @@ void main() { } } - `,blending:Tn,depthTest:!1,depthWrite:!1})}function ol(){return new ze({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:co(),fragmentShader:` + `,blending:Rn,depthTest:!1,depthWrite:!1})}function gl(){return new Ve({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null}},vertexShader:yo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3650,7 +3650,7 @@ void main() { gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); } - `,blending:Tn,depthTest:!1,depthWrite:!1})}function ll(){return new ze({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:co(),fragmentShader:` + `,blending:Rn,depthTest:!1,depthWrite:!1})}function _l(){return new Ve({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:yo(),fragmentShader:` precision mediump float; precision mediump int; @@ -3666,7 +3666,7 @@ void main() { gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); } - `,blending:Tn,depthTest:!1,depthWrite:!1})}function co(){return` + `,blending:Rn,depthTest:!1,depthWrite:!1})}function yo(){return` precision mediump float; precision mediump int; @@ -3721,17 +3721,17 @@ void main() { gl_Position = vec4( position, 1.0 ); } - `}function lp(i){let t=new WeakMap,e=null;function n(o){if(o&&o.isTexture){const l=o.mapping,c=l===pa||l===ma,h=l===Bi||l===zi;if(c||h){let d=t.get(o);const p=d!==void 0?d.texture.pmremVersion:0;if(o.isRenderTargetTexture&&o.pmremVersion!==p)return e===null&&(e=new rl(i)),d=c?e.fromEquirectangular(o,d):e.fromCubemap(o,d),d.texture.pmremVersion=o.pmremVersion,t.set(o,d),d.texture;if(d!==void 0)return d.texture;{const u=o.image;return c&&u&&u.height>0||h&&u&&s(u)?(e===null&&(e=new rl(i)),d=c?e.fromEquirectangular(o):e.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,t.set(o,d),o.addEventListener("dispose",r),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let h=0;ht.maxTextureSize&&(D=Math.ceil(S/t.maxTextureSize),S=t.maxTextureSize);const w=new Float32Array(S*D*4*d),R=new ic(w,S,D,d);R.type=mn,R.needsUpdate=!0;const U=b*4;for(let M=0;M0)return i;const s=t*e;let r=hl[s];if(r===void 0&&(r=new Float32Array(s),hl[s]=r),t!==0){n.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,i[a].toArray(r,o)}return r}function Se(i,t){if(i.length!==t.length)return!1;for(let e=0,n=i.length;e0||h&&u&&s(u)?(e===null&&(e=new pl(i)),d=c?e.fromEquirectangular(o):e.fromCubemap(o),d.texture.pmremVersion=o.pmremVersion,t.set(o,d),o.addEventListener("dispose",r),d.texture):null}}}return o}function s(o){let l=0;const c=6;for(let h=0;ht.maxTextureSize&&(D=Math.ceil(y/t.maxTextureSize),y=t.maxTextureSize);const A=new Float32Array(y*D*4*d),C=new hc(A,y,D,d);C.type=vn,C.needsUpdate=!0;const I=E*4;for(let M=0;M0)return i;const s=t*e;let r=xl[s];if(r===void 0&&(r=new Float32Array(s),xl[s]=r),t!==0){n.toArray(r,0);for(let a=1,o=0;a!==t;++a)o+=e,i[a].toArray(r,o)}return r}function be(i,t){if(i.length!==t.length)return!1;for(let e=0,n=i.length;e":" "} ${o}: ${e[a]}`)}return n.join(` -`)}const _l=new Bt;function lm(i){Qt._getMatrix(_l,Qt.workingColorSpace,i);const t=`mat3( ${_l.elements.map(e=>e.toFixed(4))} )`;switch(Qt.getTransfer(i)){case hr:return[t,"LinearTransferOETF"];case re:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",i),[t,"LinearTransferOETF"]}}function vl(i,t,e){const n=i.getShaderParameter(t,i.COMPILE_STATUS),s=i.getShaderInfoLog(t).trim();if(n&&s==="")return"";const r=/ERROR: 0:(\d+)/.exec(s);if(r){const a=parseInt(r[1]);return e.toUpperCase()+` +`)}const wl=new zt;function pm(i){Jt._getMatrix(wl,Jt.workingColorSpace,i);const t=`mat3( ${wl.elements.map(e=>e.toFixed(4))} )`;switch(Jt.getTransfer(i)){case gr:return[t,"LinearTransferOETF"];case ie:return[t,"sRGBTransferOETF"];default:return console.warn("THREE.WebGLProgram: Unsupported color space: ",i),[t,"LinearTransferOETF"]}}function Al(i,t,e){const n=i.getShaderParameter(t,i.COMPILE_STATUS),s=i.getShaderInfoLog(t).trim();if(n&&s==="")return"";const r=/ERROR: 0:(\d+)/.exec(s);if(r){const a=parseInt(r[1]);return e.toUpperCase()+` `+s+` -`+om(i.getShaderSource(t),a)}else return s}function cm(i,t){const e=lm(t);return[`vec4 ${i}( vec4 value ) {`,` return ${e[1]}( vec4( value.rgb * ${e[0]}, value.a ) );`,"}"].join(` -`)}function hm(i,t){let e;switch(t){case hh:e="Linear";break;case uh:e="Reinhard";break;case dh:e="Cineon";break;case Vl:e="ACESFilmic";break;case ph:e="AgX";break;case mh:e="Neutral";break;case fh:e="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",t),e="Linear"}return"vec3 "+i+"( vec3 color ) { return "+e+"ToneMapping( color ); }"}const Js=new C;function um(){Qt.getLuminanceCoefficients(Js);const i=Js.x.toFixed(4),t=Js.y.toFixed(4),e=Js.z.toFixed(4);return["float luminance( const in vec3 rgb ) {",` const vec3 weights = vec3( ${i}, ${t}, ${e} );`," return dot( weights, rgb );","}"].join(` -`)}function dm(i){return[i.extensionClipCullDistance?"#extension GL_ANGLE_clip_cull_distance : require":"",i.extensionMultiDraw?"#extension GL_ANGLE_multi_draw : require":""].filter(ls).join(` -`)}function fm(i){const t=[];for(const e in i){const n=i[e];n!==!1&&t.push("#define "+e+" "+n)}return t.join(` -`)}function pm(i,t){const e={},n=i.getProgramParameter(t,i.ACTIVE_ATTRIBUTES);for(let s=0;s/gm;function Za(i){return i.replace(mm,_m)}const gm=new Map;function _m(i,t){let e=kt[t];if(e===void 0){const n=gm.get(t);if(n!==void 0)e=kt[n],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,n);else throw new Error("Can not resolve #include <"+t+">")}return Za(e)}const vm=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Sl(i){return i.replace(vm,xm)}function xm(i,t,e,n){let s="";for(let r=parseInt(t);r/gm;function so(i){return i.replace(Sm,Em)}const ym=new Map;function Em(i,t){let e=Vt[t];if(e===void 0){const n=ym.get(t);if(n!==void 0)e=Vt[n],console.warn('THREE.WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.',t,n);else throw new Error("Can not resolve #include <"+t+">")}return so(e)}const bm=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;function Pl(i){return i.replace(bm,Tm)}function Tm(i,t,e,n){let s="";for(let r=parseInt(t);r0&&(m+=` -`),f=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g].filter(ls).join(` -`),f.length>0&&(f+=` -`)):(m=[yl(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",e.batching?"#define USE_BATCHING":"",e.batchingColor?"#define USE_BATCHING_COLOR":"",e.instancing?"#define USE_INSTANCING":"",e.instancingColor?"#define USE_INSTANCING_COLOR":"",e.instancingMorph?"#define USE_INSTANCING_MORPH":"",e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+h:"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.displacementMap?"#define USE_DISPLACEMENTMAP":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.mapUv?"#define MAP_UV "+e.mapUv:"",e.alphaMapUv?"#define ALPHAMAP_UV "+e.alphaMapUv:"",e.lightMapUv?"#define LIGHTMAP_UV "+e.lightMapUv:"",e.aoMapUv?"#define AOMAP_UV "+e.aoMapUv:"",e.emissiveMapUv?"#define EMISSIVEMAP_UV "+e.emissiveMapUv:"",e.bumpMapUv?"#define BUMPMAP_UV "+e.bumpMapUv:"",e.normalMapUv?"#define NORMALMAP_UV "+e.normalMapUv:"",e.displacementMapUv?"#define DISPLACEMENTMAP_UV "+e.displacementMapUv:"",e.metalnessMapUv?"#define METALNESSMAP_UV "+e.metalnessMapUv:"",e.roughnessMapUv?"#define ROUGHNESSMAP_UV "+e.roughnessMapUv:"",e.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+e.anisotropyMapUv:"",e.clearcoatMapUv?"#define CLEARCOATMAP_UV "+e.clearcoatMapUv:"",e.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+e.clearcoatNormalMapUv:"",e.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+e.clearcoatRoughnessMapUv:"",e.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+e.iridescenceMapUv:"",e.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+e.iridescenceThicknessMapUv:"",e.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+e.sheenColorMapUv:"",e.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+e.sheenRoughnessMapUv:"",e.specularMapUv?"#define SPECULARMAP_UV "+e.specularMapUv:"",e.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+e.specularColorMapUv:"",e.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+e.specularIntensityMapUv:"",e.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+e.transmissionMapUv:"",e.thicknessMapUv?"#define THICKNESSMAP_UV "+e.thicknessMapUv:"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.flatShading?"#define FLAT_SHADED":"",e.skinning?"#define USE_SKINNING":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals&&e.flatShading===!1?"#define USE_MORPHNORMALS":"",e.morphColors?"#define USE_MORPHCOLORS":"",e.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+e.morphTextureStride:"",e.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+e.morphTargetsCount:"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` -`].filter(ls).join(` -`),f=[yl(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",e.map?"#define USE_MAP":"",e.matcap?"#define USE_MATCAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+c:"",e.envMap?"#define "+h:"",e.envMap?"#define "+d:"",p?"#define CUBEUV_TEXEL_WIDTH "+p.texelWidth:"",p?"#define CUBEUV_TEXEL_HEIGHT "+p.texelHeight:"",p?"#define CUBEUV_MAX_MIP "+p.maxMip+".0":"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoat?"#define USE_CLEARCOAT":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.dispersion?"#define USE_DISPERSION":"",e.iridescence?"#define USE_IRIDESCENCE":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaTest?"#define USE_ALPHATEST":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.sheen?"#define USE_SHEEN":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors||e.instancingColor||e.batchingColor?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.gradientMap?"#define USE_GRADIENTMAP":"",e.flatShading?"#define FLAT_SHADED":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",e.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",e.toneMapping!==Bn?"#define TONE_MAPPING":"",e.toneMapping!==Bn?kt.tonemapping_pars_fragment:"",e.toneMapping!==Bn?hm("toneMapping",e.toneMapping):"",e.dithering?"#define DITHERING":"",e.opaque?"#define OPAQUE":"",kt.colorspace_pars_fragment,cm("linearToOutputTexel",e.outputColorSpace),um(),e.useDepthPacking?"#define DEPTH_PACKING "+e.depthPacking:"",` -`].filter(ls).join(` -`)),a=Za(a),a=xl(a,e),a=Ml(a,e),o=Za(o),o=xl(o,e),o=Ml(o,e),a=Sl(a),o=Sl(o),e.isRawShaderMaterial!==!0&&(T=`#version 300 es +`),p=["#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g].filter(ms).join(` +`),p.length>0&&(p+=` +`)):(m=[Dl(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.extensionClipCullDistance?"#define USE_CLIP_DISTANCE":"",e.batching?"#define USE_BATCHING":"",e.batchingColor?"#define USE_BATCHING_COLOR":"",e.instancing?"#define USE_INSTANCING":"",e.instancingColor?"#define USE_INSTANCING_COLOR":"",e.instancingMorph?"#define USE_INSTANCING_MORPH":"",e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.map?"#define USE_MAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+h:"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.displacementMap?"#define USE_DISPLACEMENTMAP":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.mapUv?"#define MAP_UV "+e.mapUv:"",e.alphaMapUv?"#define ALPHAMAP_UV "+e.alphaMapUv:"",e.lightMapUv?"#define LIGHTMAP_UV "+e.lightMapUv:"",e.aoMapUv?"#define AOMAP_UV "+e.aoMapUv:"",e.emissiveMapUv?"#define EMISSIVEMAP_UV "+e.emissiveMapUv:"",e.bumpMapUv?"#define BUMPMAP_UV "+e.bumpMapUv:"",e.normalMapUv?"#define NORMALMAP_UV "+e.normalMapUv:"",e.displacementMapUv?"#define DISPLACEMENTMAP_UV "+e.displacementMapUv:"",e.metalnessMapUv?"#define METALNESSMAP_UV "+e.metalnessMapUv:"",e.roughnessMapUv?"#define ROUGHNESSMAP_UV "+e.roughnessMapUv:"",e.anisotropyMapUv?"#define ANISOTROPYMAP_UV "+e.anisotropyMapUv:"",e.clearcoatMapUv?"#define CLEARCOATMAP_UV "+e.clearcoatMapUv:"",e.clearcoatNormalMapUv?"#define CLEARCOAT_NORMALMAP_UV "+e.clearcoatNormalMapUv:"",e.clearcoatRoughnessMapUv?"#define CLEARCOAT_ROUGHNESSMAP_UV "+e.clearcoatRoughnessMapUv:"",e.iridescenceMapUv?"#define IRIDESCENCEMAP_UV "+e.iridescenceMapUv:"",e.iridescenceThicknessMapUv?"#define IRIDESCENCE_THICKNESSMAP_UV "+e.iridescenceThicknessMapUv:"",e.sheenColorMapUv?"#define SHEEN_COLORMAP_UV "+e.sheenColorMapUv:"",e.sheenRoughnessMapUv?"#define SHEEN_ROUGHNESSMAP_UV "+e.sheenRoughnessMapUv:"",e.specularMapUv?"#define SPECULARMAP_UV "+e.specularMapUv:"",e.specularColorMapUv?"#define SPECULAR_COLORMAP_UV "+e.specularColorMapUv:"",e.specularIntensityMapUv?"#define SPECULAR_INTENSITYMAP_UV "+e.specularIntensityMapUv:"",e.transmissionMapUv?"#define TRANSMISSIONMAP_UV "+e.transmissionMapUv:"",e.thicknessMapUv?"#define THICKNESSMAP_UV "+e.thicknessMapUv:"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.flatShading?"#define FLAT_SHADED":"",e.skinning?"#define USE_SKINNING":"",e.morphTargets?"#define USE_MORPHTARGETS":"",e.morphNormals&&e.flatShading===!1?"#define USE_MORPHNORMALS":"",e.morphColors?"#define USE_MORPHCOLORS":"",e.morphTargetsCount>0?"#define MORPHTARGETS_TEXTURE_STRIDE "+e.morphTextureStride:"",e.morphTargetsCount>0?"#define MORPHTARGETS_COUNT "+e.morphTargetsCount:"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.sizeAttenuation?"#define USE_SIZEATTENUATION":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR"," attribute vec3 instanceColor;","#endif","#ifdef USE_INSTANCING_MORPH"," uniform sampler2D morphTexture;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_UV1"," attribute vec2 uv1;","#endif","#ifdef USE_UV2"," attribute vec2 uv2;","#endif","#ifdef USE_UV3"," attribute vec2 uv3;","#endif","#ifdef USE_TANGENT"," attribute vec4 tangent;","#endif","#if defined( USE_COLOR_ALPHA )"," attribute vec4 color;","#elif defined( USE_COLOR )"," attribute vec3 color;","#endif","#ifdef USE_SKINNING"," attribute vec4 skinIndex;"," attribute vec4 skinWeight;","#endif",` +`].filter(ms).join(` +`),p=[Dl(e),"#define SHADER_TYPE "+e.shaderType,"#define SHADER_NAME "+e.shaderName,g,e.useFog&&e.fog?"#define USE_FOG":"",e.useFog&&e.fogExp2?"#define FOG_EXP2":"",e.alphaToCoverage?"#define ALPHA_TO_COVERAGE":"",e.map?"#define USE_MAP":"",e.matcap?"#define USE_MATCAP":"",e.envMap?"#define USE_ENVMAP":"",e.envMap?"#define "+c:"",e.envMap?"#define "+h:"",e.envMap?"#define "+d:"",f?"#define CUBEUV_TEXEL_WIDTH "+f.texelWidth:"",f?"#define CUBEUV_TEXEL_HEIGHT "+f.texelHeight:"",f?"#define CUBEUV_MAX_MIP "+f.maxMip+".0":"",e.lightMap?"#define USE_LIGHTMAP":"",e.aoMap?"#define USE_AOMAP":"",e.bumpMap?"#define USE_BUMPMAP":"",e.normalMap?"#define USE_NORMALMAP":"",e.normalMapObjectSpace?"#define USE_NORMALMAP_OBJECTSPACE":"",e.normalMapTangentSpace?"#define USE_NORMALMAP_TANGENTSPACE":"",e.emissiveMap?"#define USE_EMISSIVEMAP":"",e.anisotropy?"#define USE_ANISOTROPY":"",e.anisotropyMap?"#define USE_ANISOTROPYMAP":"",e.clearcoat?"#define USE_CLEARCOAT":"",e.clearcoatMap?"#define USE_CLEARCOATMAP":"",e.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",e.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",e.dispersion?"#define USE_DISPERSION":"",e.iridescence?"#define USE_IRIDESCENCE":"",e.iridescenceMap?"#define USE_IRIDESCENCEMAP":"",e.iridescenceThicknessMap?"#define USE_IRIDESCENCE_THICKNESSMAP":"",e.specularMap?"#define USE_SPECULARMAP":"",e.specularColorMap?"#define USE_SPECULAR_COLORMAP":"",e.specularIntensityMap?"#define USE_SPECULAR_INTENSITYMAP":"",e.roughnessMap?"#define USE_ROUGHNESSMAP":"",e.metalnessMap?"#define USE_METALNESSMAP":"",e.alphaMap?"#define USE_ALPHAMAP":"",e.alphaTest?"#define USE_ALPHATEST":"",e.alphaHash?"#define USE_ALPHAHASH":"",e.sheen?"#define USE_SHEEN":"",e.sheenColorMap?"#define USE_SHEEN_COLORMAP":"",e.sheenRoughnessMap?"#define USE_SHEEN_ROUGHNESSMAP":"",e.transmission?"#define USE_TRANSMISSION":"",e.transmissionMap?"#define USE_TRANSMISSIONMAP":"",e.thicknessMap?"#define USE_THICKNESSMAP":"",e.vertexTangents&&e.flatShading===!1?"#define USE_TANGENT":"",e.vertexColors||e.instancingColor||e.batchingColor?"#define USE_COLOR":"",e.vertexAlphas?"#define USE_COLOR_ALPHA":"",e.vertexUv1s?"#define USE_UV1":"",e.vertexUv2s?"#define USE_UV2":"",e.vertexUv3s?"#define USE_UV3":"",e.pointsUvs?"#define USE_POINTS_UV":"",e.gradientMap?"#define USE_GRADIENTMAP":"",e.flatShading?"#define FLAT_SHADED":"",e.doubleSided?"#define DOUBLE_SIDED":"",e.flipSided?"#define FLIP_SIDED":"",e.shadowMapEnabled?"#define USE_SHADOWMAP":"",e.shadowMapEnabled?"#define "+l:"",e.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",e.numLightProbes>0?"#define USE_LIGHT_PROBES":"",e.decodeVideoTexture?"#define DECODE_VIDEO_TEXTURE":"",e.decodeVideoTextureEmissive?"#define DECODE_VIDEO_TEXTURE_EMISSIVE":"",e.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",e.reverseDepthBuffer?"#define USE_REVERSEDEPTHBUF":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",e.toneMapping!==Hn?"#define TONE_MAPPING":"",e.toneMapping!==Hn?Vt.tonemapping_pars_fragment:"",e.toneMapping!==Hn?gm("toneMapping",e.toneMapping):"",e.dithering?"#define DITHERING":"",e.opaque?"#define OPAQUE":"",Vt.colorspace_pars_fragment,mm("linearToOutputTexel",e.outputColorSpace),_m(),e.useDepthPacking?"#define DEPTH_PACKING "+e.depthPacking:"",` +`].filter(ms).join(` +`)),a=so(a),a=Rl(a,e),a=Cl(a,e),o=so(o),o=Rl(o,e),o=Cl(o,e),a=Pl(a),o=Pl(o),e.isRawShaderMaterial!==!0&&(T=`#version 300 es `,m=[u,"#define attribute in","#define varying out","#define texture2D texture"].join(` `)+` -`+m,f=["#define varying in",e.glslVersion===Mo?"":"layout(location = 0) out highp vec4 pc_fragColor;",e.glslVersion===Mo?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` +`+m,p=["#define varying in",e.glslVersion===Co?"":"layout(location = 0) out highp vec4 pc_fragColor;",e.glslVersion===Co?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join(` `)+` -`+f);const b=T+m+a,S=T+f+o,D=gl(s,s.VERTEX_SHADER,b),w=gl(s,s.FRAGMENT_SHADER,S);s.attachShader(v,D),s.attachShader(v,w),e.index0AttributeName!==void 0?s.bindAttribLocation(v,0,e.index0AttributeName):e.morphTargets===!0&&s.bindAttribLocation(v,0,"position"),s.linkProgram(v);function R(P){if(i.debug.checkShaderErrors){const W=s.getProgramInfoLog(v).trim(),z=s.getShaderInfoLog(D).trim(),G=s.getShaderInfoLog(w).trim();let $=!0,X=!0;if(s.getProgramParameter(v,s.LINK_STATUS)===!1)if($=!1,typeof i.debug.onShaderError=="function")i.debug.onShaderError(s,v,D,w);else{const Q=vl(s,D,"vertex"),k=vl(s,w,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(v,s.VALIDATE_STATUS)+` +`+p);const E=T+m+a,y=T+p+o,D=Tl(s,s.VERTEX_SHADER,E),A=Tl(s,s.FRAGMENT_SHADER,y);s.attachShader(_,D),s.attachShader(_,A),e.index0AttributeName!==void 0?s.bindAttribLocation(_,0,e.index0AttributeName):e.morphTargets===!0&&s.bindAttribLocation(_,0,"position"),s.linkProgram(_);function C(w){if(i.debug.checkShaderErrors){const Y=s.getProgramInfoLog(_).trim(),V=s.getShaderInfoLog(D).trim(),j=s.getShaderInfoLog(A).trim();let $=!0,q=!0;if(s.getProgramParameter(_,s.LINK_STATUS)===!1)if($=!1,typeof i.debug.onShaderError=="function")i.debug.onShaderError(s,_,D,A);else{const J=Al(s,D,"vertex"),X=Al(s,A,"fragment");console.error("THREE.WebGLProgram: Shader Error "+s.getError()+" - VALIDATE_STATUS "+s.getProgramParameter(_,s.VALIDATE_STATUS)+` -Material Name: `+P.name+` -Material Type: `+P.type+` +Material Name: `+w.name+` +Material Type: `+w.type+` -Program Info Log: `+W+` -`+Q+` -`+k)}else W!==""?console.warn("THREE.WebGLProgram: Program Info Log:",W):(z===""||G==="")&&(X=!1);X&&(P.diagnostics={runnable:$,programLog:W,vertexShader:{log:z,prefix:m},fragmentShader:{log:G,prefix:f}})}s.deleteShader(D),s.deleteShader(w),U=new or(s,v),y=pm(s,v)}let U;this.getUniforms=function(){return U===void 0&&R(this),U};let y;this.getAttributes=function(){return y===void 0&&R(this),y};let M=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return M===!1&&(M=s.getProgramParameter(v,rm)),M},this.destroy=function(){n.releaseStatesOfProgram(this),s.deleteProgram(v),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=am++,this.cacheKey=t,this.usedTimes=1,this.program=v,this.vertexShader=D,this.fragmentShader=w,this}let wm=0;class Am{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,n=t.fragmentShader,s=this._getShaderStage(e),r=this._getShaderStage(n),a=this._getShaderCacheForMaterial(t);return a.has(s)===!1&&(a.add(s),s.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const n of e)n.usedTimes--,n.usedTimes===0&&this.shaderCache.delete(n.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let n=e.get(t);return n===void 0&&(n=new Set,e.set(t,n)),n}_getShaderStage(t){const e=this.shaderCache;let n=e.get(t);return n===void 0&&(n=new Rm(t),e.set(t,n)),n}}class Rm{constructor(t){this.id=wm++,this.code=t,this.usedTimes=0}}function Cm(i,t,e,n,s,r,a){const o=new ao,l=new Am,c=new Set,h=[],d=s.logarithmicDepthBuffer,p=s.vertexTextures;let u=s.precision;const g={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function v(y){return c.add(y),y===0?"uv":`uv${y}`}function m(y,M,P,W,z){const G=W.fog,$=z.geometry,X=y.isMeshStandardMaterial?W.environment:null,Q=(y.isMeshStandardMaterial?e:t).get(y.envMap||X),k=Q&&Q.mapping===vr?Q.image.height:null,it=g[y.type];y.precision!==null&&(u=s.getMaxPrecision(y.precision),u!==y.precision&&console.warn("THREE.WebGLProgram.getParameters:",y.precision,"not supported, using",u,"instead."));const ft=$.morphAttributes.position||$.morphAttributes.normal||$.morphAttributes.color,St=ft!==void 0?ft.length:0;let Ft=0;$.morphAttributes.position!==void 0&&(Ft=1),$.morphAttributes.normal!==void 0&&(Ft=2),$.morphAttributes.color!==void 0&&(Ft=3);let Vt,Y,nt,_t;if(it){const Wt=un[it];Vt=Wt.vertexShader,Y=Wt.fragmentShader}else Vt=y.vertexShader,Y=y.fragmentShader,l.update(y),nt=l.getVertexShaderID(y),_t=l.getFragmentShaderID(y);const ot=i.getRenderTarget(),Pt=i.state.buffers.depth.getReversed(),Lt=z.isInstancedMesh===!0,Ht=z.isBatchedMesh===!0,he=!!y.map,Yt=!!y.matcap,fe=!!Q,A=!!y.aoMap,ke=!!y.lightMap,qt=!!y.bumpMap,jt=!!y.normalMap,J=!!y.displacementMap,Et=!!y.emissiveMap,ct=!!y.metalnessMap,E=!!y.roughnessMap,_=y.anisotropy>0,F=y.clearcoat>0,q=y.dispersion>0,K=y.iridescence>0,j=y.sheen>0,yt=y.transmission>0,lt=_&&!!y.anisotropyMap,pt=F&&!!y.clearcoatMap,Gt=F&&!!y.clearcoatNormalMap,et=F&&!!y.clearcoatRoughnessMap,mt=K&&!!y.iridescenceMap,Tt=K&&!!y.iridescenceThicknessMap,Ut=j&&!!y.sheenColorMap,gt=j&&!!y.sheenRoughnessMap,Zt=!!y.specularMap,Ot=!!y.specularColorMap,se=!!y.specularIntensityMap,L=yt&&!!y.transmissionMap,at=yt&&!!y.thicknessMap,H=!!y.gradientMap,Z=!!y.alphaMap,dt=y.alphaTest>0,ht=!!y.alphaHash,wt=!!y.extensions;let Kt=Bn;y.toneMapped&&(ot===null||ot.isXRRenderTarget===!0)&&(Kt=i.toneMapping);const ce={shaderID:it,shaderType:y.type,shaderName:y.name,vertexShader:Vt,fragmentShader:Y,defines:y.defines,customVertexShaderID:nt,customFragmentShaderID:_t,isRawShaderMaterial:y.isRawShaderMaterial===!0,glslVersion:y.glslVersion,precision:u,batching:Ht,batchingColor:Ht&&z._colorsTexture!==null,instancing:Lt,instancingColor:Lt&&z.instanceColor!==null,instancingMorph:Lt&&z.morphTexture!==null,supportsVertexTextures:p,outputColorSpace:ot===null?i.outputColorSpace:ot.isXRRenderTarget===!0?ot.texture.colorSpace:Vi,alphaToCoverage:!!y.alphaToCoverage,map:he,matcap:Yt,envMap:fe,envMapMode:fe&&Q.mapping,envMapCubeUVHeight:k,aoMap:A,lightMap:ke,bumpMap:qt,normalMap:jt,displacementMap:p&&J,emissiveMap:Et,normalMapObjectSpace:jt&&y.normalMapType===xh,normalMapTangentSpace:jt&&y.normalMapType===Ql,metalnessMap:ct,roughnessMap:E,anisotropy:_,anisotropyMap:lt,clearcoat:F,clearcoatMap:pt,clearcoatNormalMap:Gt,clearcoatRoughnessMap:et,dispersion:q,iridescence:K,iridescenceMap:mt,iridescenceThicknessMap:Tt,sheen:j,sheenColorMap:Ut,sheenRoughnessMap:gt,specularMap:Zt,specularColorMap:Ot,specularIntensityMap:se,transmission:yt,transmissionMap:L,thicknessMap:at,gradientMap:H,opaque:y.transparent===!1&&y.blending===Ui&&y.alphaToCoverage===!1,alphaMap:Z,alphaTest:dt,alphaHash:ht,combine:y.combine,mapUv:he&&v(y.map.channel),aoMapUv:A&&v(y.aoMap.channel),lightMapUv:ke&&v(y.lightMap.channel),bumpMapUv:qt&&v(y.bumpMap.channel),normalMapUv:jt&&v(y.normalMap.channel),displacementMapUv:J&&v(y.displacementMap.channel),emissiveMapUv:Et&&v(y.emissiveMap.channel),metalnessMapUv:ct&&v(y.metalnessMap.channel),roughnessMapUv:E&&v(y.roughnessMap.channel),anisotropyMapUv:lt&&v(y.anisotropyMap.channel),clearcoatMapUv:pt&&v(y.clearcoatMap.channel),clearcoatNormalMapUv:Gt&&v(y.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:et&&v(y.clearcoatRoughnessMap.channel),iridescenceMapUv:mt&&v(y.iridescenceMap.channel),iridescenceThicknessMapUv:Tt&&v(y.iridescenceThicknessMap.channel),sheenColorMapUv:Ut&&v(y.sheenColorMap.channel),sheenRoughnessMapUv:gt&&v(y.sheenRoughnessMap.channel),specularMapUv:Zt&&v(y.specularMap.channel),specularColorMapUv:Ot&&v(y.specularColorMap.channel),specularIntensityMapUv:se&&v(y.specularIntensityMap.channel),transmissionMapUv:L&&v(y.transmissionMap.channel),thicknessMapUv:at&&v(y.thicknessMap.channel),alphaMapUv:Z&&v(y.alphaMap.channel),vertexTangents:!!$.attributes.tangent&&(jt||_),vertexColors:y.vertexColors,vertexAlphas:y.vertexColors===!0&&!!$.attributes.color&&$.attributes.color.itemSize===4,pointsUvs:z.isPoints===!0&&!!$.attributes.uv&&(he||Z),fog:!!G,useFog:y.fog===!0,fogExp2:!!G&&G.isFogExp2,flatShading:y.flatShading===!0,sizeAttenuation:y.sizeAttenuation===!0,logarithmicDepthBuffer:d,reverseDepthBuffer:Pt,skinning:z.isSkinnedMesh===!0,morphTargets:$.morphAttributes.position!==void 0,morphNormals:$.morphAttributes.normal!==void 0,morphColors:$.morphAttributes.color!==void 0,morphTargetsCount:St,morphTextureStride:Ft,numDirLights:M.directional.length,numPointLights:M.point.length,numSpotLights:M.spot.length,numSpotLightMaps:M.spotLightMap.length,numRectAreaLights:M.rectArea.length,numHemiLights:M.hemi.length,numDirLightShadows:M.directionalShadowMap.length,numPointLightShadows:M.pointShadowMap.length,numSpotLightShadows:M.spotShadowMap.length,numSpotLightShadowsWithMaps:M.numSpotLightShadowsWithMaps,numLightProbes:M.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:y.dithering,shadowMapEnabled:i.shadowMap.enabled&&P.length>0,shadowMapType:i.shadowMap.type,toneMapping:Kt,decodeVideoTexture:he&&y.map.isVideoTexture===!0&&Qt.getTransfer(y.map.colorSpace)===re,decodeVideoTextureEmissive:Et&&y.emissiveMap.isVideoTexture===!0&&Qt.getTransfer(y.emissiveMap.colorSpace)===re,premultipliedAlpha:y.premultipliedAlpha,doubleSided:y.side===dn,flipSided:y.side===We,useDepthPacking:y.depthPacking>=0,depthPacking:y.depthPacking||0,index0AttributeName:y.index0AttributeName,extensionClipCullDistance:wt&&y.extensions.clipCullDistance===!0&&n.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(wt&&y.extensions.multiDraw===!0||Ht)&&n.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:n.has("KHR_parallel_shader_compile"),customProgramCacheKey:y.customProgramCacheKey()};return ce.vertexUv1s=c.has(1),ce.vertexUv2s=c.has(2),ce.vertexUv3s=c.has(3),c.clear(),ce}function f(y){const M=[];if(y.shaderID?M.push(y.shaderID):(M.push(y.customVertexShaderID),M.push(y.customFragmentShaderID)),y.defines!==void 0)for(const P in y.defines)M.push(P),M.push(y.defines[P]);return y.isRawShaderMaterial===!1&&(T(M,y),b(M,y),M.push(i.outputColorSpace)),M.push(y.customProgramCacheKey),M.join()}function T(y,M){y.push(M.precision),y.push(M.outputColorSpace),y.push(M.envMapMode),y.push(M.envMapCubeUVHeight),y.push(M.mapUv),y.push(M.alphaMapUv),y.push(M.lightMapUv),y.push(M.aoMapUv),y.push(M.bumpMapUv),y.push(M.normalMapUv),y.push(M.displacementMapUv),y.push(M.emissiveMapUv),y.push(M.metalnessMapUv),y.push(M.roughnessMapUv),y.push(M.anisotropyMapUv),y.push(M.clearcoatMapUv),y.push(M.clearcoatNormalMapUv),y.push(M.clearcoatRoughnessMapUv),y.push(M.iridescenceMapUv),y.push(M.iridescenceThicknessMapUv),y.push(M.sheenColorMapUv),y.push(M.sheenRoughnessMapUv),y.push(M.specularMapUv),y.push(M.specularColorMapUv),y.push(M.specularIntensityMapUv),y.push(M.transmissionMapUv),y.push(M.thicknessMapUv),y.push(M.combine),y.push(M.fogExp2),y.push(M.sizeAttenuation),y.push(M.morphTargetsCount),y.push(M.morphAttributeCount),y.push(M.numDirLights),y.push(M.numPointLights),y.push(M.numSpotLights),y.push(M.numSpotLightMaps),y.push(M.numHemiLights),y.push(M.numRectAreaLights),y.push(M.numDirLightShadows),y.push(M.numPointLightShadows),y.push(M.numSpotLightShadows),y.push(M.numSpotLightShadowsWithMaps),y.push(M.numLightProbes),y.push(M.shadowMapType),y.push(M.toneMapping),y.push(M.numClippingPlanes),y.push(M.numClipIntersection),y.push(M.depthPacking)}function b(y,M){o.disableAll(),M.supportsVertexTextures&&o.enable(0),M.instancing&&o.enable(1),M.instancingColor&&o.enable(2),M.instancingMorph&&o.enable(3),M.matcap&&o.enable(4),M.envMap&&o.enable(5),M.normalMapObjectSpace&&o.enable(6),M.normalMapTangentSpace&&o.enable(7),M.clearcoat&&o.enable(8),M.iridescence&&o.enable(9),M.alphaTest&&o.enable(10),M.vertexColors&&o.enable(11),M.vertexAlphas&&o.enable(12),M.vertexUv1s&&o.enable(13),M.vertexUv2s&&o.enable(14),M.vertexUv3s&&o.enable(15),M.vertexTangents&&o.enable(16),M.anisotropy&&o.enable(17),M.alphaHash&&o.enable(18),M.batching&&o.enable(19),M.dispersion&&o.enable(20),M.batchingColor&&o.enable(21),y.push(o.mask),o.disableAll(),M.fog&&o.enable(0),M.useFog&&o.enable(1),M.flatShading&&o.enable(2),M.logarithmicDepthBuffer&&o.enable(3),M.reverseDepthBuffer&&o.enable(4),M.skinning&&o.enable(5),M.morphTargets&&o.enable(6),M.morphNormals&&o.enable(7),M.morphColors&&o.enable(8),M.premultipliedAlpha&&o.enable(9),M.shadowMapEnabled&&o.enable(10),M.doubleSided&&o.enable(11),M.flipSided&&o.enable(12),M.useDepthPacking&&o.enable(13),M.dithering&&o.enable(14),M.transmission&&o.enable(15),M.sheen&&o.enable(16),M.opaque&&o.enable(17),M.pointsUvs&&o.enable(18),M.decodeVideoTexture&&o.enable(19),M.decodeVideoTextureEmissive&&o.enable(20),M.alphaToCoverage&&o.enable(21),y.push(o.mask)}function S(y){const M=g[y.type];let P;if(M){const W=un[M];P=fr.clone(W.uniforms)}else P=y.uniforms;return P}function D(y,M){let P;for(let W=0,z=h.length;W0?n.push(f):u.transparent===!0?s.push(f):e.push(f)}function l(d,p,u,g,v,m){const f=a(d,p,u,g,v,m);u.transmission>0?n.unshift(f):u.transparent===!0?s.unshift(f):e.unshift(f)}function c(d,p){e.length>1&&e.sort(d||Dm),n.length>1&&n.sort(p||El),s.length>1&&s.sort(p||El)}function h(){for(let d=t,p=i.length;d=r.length?(a=new bl,r.push(a)):a=r[s],a}function e(){i=new WeakMap}return{get:t,dispose:e}}function Um(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new C,color:new rt};break;case"SpotLight":e={position:new C,direction:new C,color:new rt,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new C,color:new rt,distance:0,decay:0};break;case"HemisphereLight":e={direction:new C,skyColor:new rt,groundColor:new rt};break;case"RectAreaLight":e={color:new rt,position:new C,halfWidth:new C,halfHeight:new C};break}return i[t.id]=e,e}}}function Im(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Mt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Mt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Mt,shadowCameraNear:1,shadowCameraFar:1e3};break}return i[t.id]=e,e}}}let Nm=0;function Fm(i,t){return(t.castShadow?2:0)-(i.castShadow?2:0)+(t.map?1:0)-(i.map?1:0)}function Om(i){const t=new Um,e=Im(),n={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)n.probe.push(new C);const s=new C,r=new ie,a=new ie;function o(c){let h=0,d=0,p=0;for(let y=0;y<9;y++)n.probe[y].set(0,0,0);let u=0,g=0,v=0,m=0,f=0,T=0,b=0,S=0,D=0,w=0,R=0;c.sort(Fm);for(let y=0,M=c.length;y0&&(i.has("OES_texture_float_linear")===!0?(n.rectAreaLTC1=st.LTC_FLOAT_1,n.rectAreaLTC2=st.LTC_FLOAT_2):(n.rectAreaLTC1=st.LTC_HALF_1,n.rectAreaLTC2=st.LTC_HALF_2)),n.ambient[0]=h,n.ambient[1]=d,n.ambient[2]=p;const U=n.hash;(U.directionalLength!==u||U.pointLength!==g||U.spotLength!==v||U.rectAreaLength!==m||U.hemiLength!==f||U.numDirectionalShadows!==T||U.numPointShadows!==b||U.numSpotShadows!==S||U.numSpotMaps!==D||U.numLightProbes!==R)&&(n.directional.length=u,n.spot.length=v,n.rectArea.length=m,n.point.length=g,n.hemi.length=f,n.directionalShadow.length=T,n.directionalShadowMap.length=T,n.pointShadow.length=b,n.pointShadowMap.length=b,n.spotShadow.length=S,n.spotShadowMap.length=S,n.directionalShadowMatrix.length=T,n.pointShadowMatrix.length=b,n.spotLightMatrix.length=S+D-w,n.spotLightMap.length=D,n.numSpotLightShadowsWithMaps=w,n.numLightProbes=R,U.directionalLength=u,U.pointLength=g,U.spotLength=v,U.rectAreaLength=m,U.hemiLength=f,U.numDirectionalShadows=T,U.numPointShadows=b,U.numSpotShadows=S,U.numSpotMaps=D,U.numLightProbes=R,n.version=Nm++)}function l(c,h){let d=0,p=0,u=0,g=0,v=0;const m=h.matrixWorldInverse;for(let f=0,T=c.length;f=a.length?(o=new Tl(i),a.push(o)):o=a[r],o}function n(){t=new WeakMap}return{get:e,dispose:n}}const zm=`void main() { +Program Info Log: `+Y+` +`+J+` +`+X)}else Y!==""?console.warn("THREE.WebGLProgram: Program Info Log:",Y):(V===""||j==="")&&(q=!1);q&&(w.diagnostics={runnable:$,programLog:Y,vertexShader:{log:V,prefix:m},fragmentShader:{log:j,prefix:p}})}s.deleteShader(D),s.deleteShader(A),I=new dr(s,_),S=Mm(s,_)}let I;this.getUniforms=function(){return I===void 0&&C(this),I};let S;this.getAttributes=function(){return S===void 0&&C(this),S};let M=e.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return M===!1&&(M=s.getProgramParameter(_,um)),M},this.destroy=function(){n.releaseStatesOfProgram(this),s.deleteProgram(_),this.program=void 0},this.type=e.shaderType,this.name=e.shaderName,this.id=dm++,this.cacheKey=t,this.usedTimes=1,this.program=_,this.vertexShader=D,this.fragmentShader=A,this}let Lm=0;class Um{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,n=t.fragmentShader,s=this._getShaderStage(e),r=this._getShaderStage(n),a=this._getShaderCacheForMaterial(t);return a.has(s)===!1&&(a.add(s),s.usedTimes++),a.has(r)===!1&&(a.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const n of e)n.usedTimes--,n.usedTimes===0&&this.shaderCache.delete(n.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;let n=e.get(t);return n===void 0&&(n=new Set,e.set(t,n)),n}_getShaderStage(t){const e=this.shaderCache;let n=e.get(t);return n===void 0&&(n=new Im(t),e.set(t,n)),n}}class Im{constructor(t){this.id=Lm++,this.code=t,this.usedTimes=0}}function Nm(i,t,e,n,s,r,a){const o=new xo,l=new Um,c=new Set,h=[],d=s.logarithmicDepthBuffer,f=s.vertexTextures;let u=s.precision;const g={MeshDepthMaterial:"depth",MeshDistanceMaterial:"distanceRGBA",MeshNormalMaterial:"normal",MeshBasicMaterial:"basic",MeshLambertMaterial:"lambert",MeshPhongMaterial:"phong",MeshToonMaterial:"toon",MeshStandardMaterial:"physical",MeshPhysicalMaterial:"physical",MeshMatcapMaterial:"matcap",LineBasicMaterial:"basic",LineDashedMaterial:"dashed",PointsMaterial:"points",ShadowMaterial:"shadow",SpriteMaterial:"sprite"};function _(S){return c.add(S),S===0?"uv":`uv${S}`}function m(S,M,w,Y,V){const j=Y.fog,$=V.geometry,q=S.isMeshStandardMaterial?Y.environment:null,J=(S.isMeshStandardMaterial?e:t).get(S.envMap||q),X=J&&J.mapping===br?J.image.height:null,it=g[S.type];S.precision!==null&&(u=s.getMaxPrecision(S.precision),u!==S.precision&&console.warn("THREE.WebGLProgram.getParameters:",S.precision,"not supported, using",u,"instead."));const ft=$.morphAttributes.position||$.morphAttributes.normal||$.morphAttributes.color,Mt=ft!==void 0?ft.length:0;let Nt=0;$.morphAttributes.position!==void 0&&(Nt=1),$.morphAttributes.normal!==void 0&&(Nt=2),$.morphAttributes.color!==void 0&&(Nt=3);let Wt,Z,nt,_t;if(it){const Kt=pn[it];Wt=Kt.vertexShader,Z=Kt.fragmentShader}else Wt=S.vertexShader,Z=S.fragmentShader,l.update(S),nt=l.getVertexShaderID(S),_t=l.getFragmentShaderID(S);const at=i.getRenderTarget(),wt=i.state.buffers.depth.getReversed(),Pt=V.isInstancedMesh===!0,kt=V.isBatchedMesh===!0,le=!!S.map,Ht=!!S.matcap,de=!!J,R=!!S.aoMap,Ue=!!S.lightMap,qt=!!S.bumpMap,jt=!!S.normalMap,bt=!!S.displacementMap,oe=!!S.emissiveMap,Et=!!S.metalnessMap,b=!!S.roughnessMap,v=S.anisotropy>0,O=S.clearcoat>0,F=S.dispersion>0,k=S.iridescence>0,G=S.sheen>0,ot=S.transmission>0,Q=v&&!!S.anisotropyMap,lt=O&&!!S.clearcoatMap,Ft=O&&!!S.clearcoatNormalMap,tt=O&&!!S.clearcoatRoughnessMap,mt=k&&!!S.iridescenceMap,At=k&&!!S.iridescenceThicknessMap,Dt=G&&!!S.sheenColorMap,pt=G&&!!S.sheenRoughnessMap,Xt=!!S.specularMap,Ot=!!S.specularColorMap,Qt=!!S.specularIntensityMap,L=ot&&!!S.transmissionMap,ct=ot&&!!S.thicknessMap,W=!!S.gradientMap,K=!!S.alphaMap,ht=S.alphaTest>0,ut=!!S.alphaHash,Ut=!!S.extensions;let he=Hn;S.toneMapped&&(at===null||at.isXRRenderTarget===!0)&&(he=i.toneMapping);const _e={shaderID:it,shaderType:S.type,shaderName:S.name,vertexShader:Wt,fragmentShader:Z,defines:S.defines,customVertexShaderID:nt,customFragmentShaderID:_t,isRawShaderMaterial:S.isRawShaderMaterial===!0,glslVersion:S.glslVersion,precision:u,batching:kt,batchingColor:kt&&V._colorsTexture!==null,instancing:Pt,instancingColor:Pt&&V.instanceColor!==null,instancingMorph:Pt&&V.morphTexture!==null,supportsVertexTextures:f,outputColorSpace:at===null?i.outputColorSpace:at.isXRRenderTarget===!0?at.texture.colorSpace:Ji,alphaToCoverage:!!S.alphaToCoverage,map:le,matcap:Ht,envMap:de,envMapMode:de&&J.mapping,envMapCubeUVHeight:X,aoMap:R,lightMap:Ue,bumpMap:qt,normalMap:jt,displacementMap:f&&bt,emissiveMap:oe,normalMapObjectSpace:jt&&S.normalMapType===Th,normalMapTangentSpace:jt&&S.normalMapType===ac,metalnessMap:Et,roughnessMap:b,anisotropy:v,anisotropyMap:Q,clearcoat:O,clearcoatMap:lt,clearcoatNormalMap:Ft,clearcoatRoughnessMap:tt,dispersion:F,iridescence:k,iridescenceMap:mt,iridescenceThicknessMap:At,sheen:G,sheenColorMap:Dt,sheenRoughnessMap:pt,specularMap:Xt,specularColorMap:Ot,specularIntensityMap:Qt,transmission:ot,transmissionMap:L,thicknessMap:ct,gradientMap:W,opaque:S.transparent===!1&&S.blending===Vi&&S.alphaToCoverage===!1,alphaMap:K,alphaTest:ht,alphaHash:ut,combine:S.combine,mapUv:le&&_(S.map.channel),aoMapUv:R&&_(S.aoMap.channel),lightMapUv:Ue&&_(S.lightMap.channel),bumpMapUv:qt&&_(S.bumpMap.channel),normalMapUv:jt&&_(S.normalMap.channel),displacementMapUv:bt&&_(S.displacementMap.channel),emissiveMapUv:oe&&_(S.emissiveMap.channel),metalnessMapUv:Et&&_(S.metalnessMap.channel),roughnessMapUv:b&&_(S.roughnessMap.channel),anisotropyMapUv:Q&&_(S.anisotropyMap.channel),clearcoatMapUv:lt&&_(S.clearcoatMap.channel),clearcoatNormalMapUv:Ft&&_(S.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:tt&&_(S.clearcoatRoughnessMap.channel),iridescenceMapUv:mt&&_(S.iridescenceMap.channel),iridescenceThicknessMapUv:At&&_(S.iridescenceThicknessMap.channel),sheenColorMapUv:Dt&&_(S.sheenColorMap.channel),sheenRoughnessMapUv:pt&&_(S.sheenRoughnessMap.channel),specularMapUv:Xt&&_(S.specularMap.channel),specularColorMapUv:Ot&&_(S.specularColorMap.channel),specularIntensityMapUv:Qt&&_(S.specularIntensityMap.channel),transmissionMapUv:L&&_(S.transmissionMap.channel),thicknessMapUv:ct&&_(S.thicknessMap.channel),alphaMapUv:K&&_(S.alphaMap.channel),vertexTangents:!!$.attributes.tangent&&(jt||v),vertexColors:S.vertexColors,vertexAlphas:S.vertexColors===!0&&!!$.attributes.color&&$.attributes.color.itemSize===4,pointsUvs:V.isPoints===!0&&!!$.attributes.uv&&(le||K),fog:!!j,useFog:S.fog===!0,fogExp2:!!j&&j.isFogExp2,flatShading:S.flatShading===!0,sizeAttenuation:S.sizeAttenuation===!0,logarithmicDepthBuffer:d,reverseDepthBuffer:wt,skinning:V.isSkinnedMesh===!0,morphTargets:$.morphAttributes.position!==void 0,morphNormals:$.morphAttributes.normal!==void 0,morphColors:$.morphAttributes.color!==void 0,morphTargetsCount:Mt,morphTextureStride:Nt,numDirLights:M.directional.length,numPointLights:M.point.length,numSpotLights:M.spot.length,numSpotLightMaps:M.spotLightMap.length,numRectAreaLights:M.rectArea.length,numHemiLights:M.hemi.length,numDirLightShadows:M.directionalShadowMap.length,numPointLightShadows:M.pointShadowMap.length,numSpotLightShadows:M.spotShadowMap.length,numSpotLightShadowsWithMaps:M.numSpotLightShadowsWithMaps,numLightProbes:M.numLightProbes,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:S.dithering,shadowMapEnabled:i.shadowMap.enabled&&w.length>0,shadowMapType:i.shadowMap.type,toneMapping:he,decodeVideoTexture:le&&S.map.isVideoTexture===!0&&Jt.getTransfer(S.map.colorSpace)===ie,decodeVideoTextureEmissive:oe&&S.emissiveMap.isVideoTexture===!0&&Jt.getTransfer(S.emissiveMap.colorSpace)===ie,premultipliedAlpha:S.premultipliedAlpha,doubleSided:S.side===mn,flipSided:S.side===Ye,useDepthPacking:S.depthPacking>=0,depthPacking:S.depthPacking||0,index0AttributeName:S.index0AttributeName,extensionClipCullDistance:Ut&&S.extensions.clipCullDistance===!0&&n.has("WEBGL_clip_cull_distance"),extensionMultiDraw:(Ut&&S.extensions.multiDraw===!0||kt)&&n.has("WEBGL_multi_draw"),rendererExtensionParallelShaderCompile:n.has("KHR_parallel_shader_compile"),customProgramCacheKey:S.customProgramCacheKey()};return _e.vertexUv1s=c.has(1),_e.vertexUv2s=c.has(2),_e.vertexUv3s=c.has(3),c.clear(),_e}function p(S){const M=[];if(S.shaderID?M.push(S.shaderID):(M.push(S.customVertexShaderID),M.push(S.customFragmentShaderID)),S.defines!==void 0)for(const w in S.defines)M.push(w),M.push(S.defines[w]);return S.isRawShaderMaterial===!1&&(T(M,S),E(M,S),M.push(i.outputColorSpace)),M.push(S.customProgramCacheKey),M.join()}function T(S,M){S.push(M.precision),S.push(M.outputColorSpace),S.push(M.envMapMode),S.push(M.envMapCubeUVHeight),S.push(M.mapUv),S.push(M.alphaMapUv),S.push(M.lightMapUv),S.push(M.aoMapUv),S.push(M.bumpMapUv),S.push(M.normalMapUv),S.push(M.displacementMapUv),S.push(M.emissiveMapUv),S.push(M.metalnessMapUv),S.push(M.roughnessMapUv),S.push(M.anisotropyMapUv),S.push(M.clearcoatMapUv),S.push(M.clearcoatNormalMapUv),S.push(M.clearcoatRoughnessMapUv),S.push(M.iridescenceMapUv),S.push(M.iridescenceThicknessMapUv),S.push(M.sheenColorMapUv),S.push(M.sheenRoughnessMapUv),S.push(M.specularMapUv),S.push(M.specularColorMapUv),S.push(M.specularIntensityMapUv),S.push(M.transmissionMapUv),S.push(M.thicknessMapUv),S.push(M.combine),S.push(M.fogExp2),S.push(M.sizeAttenuation),S.push(M.morphTargetsCount),S.push(M.morphAttributeCount),S.push(M.numDirLights),S.push(M.numPointLights),S.push(M.numSpotLights),S.push(M.numSpotLightMaps),S.push(M.numHemiLights),S.push(M.numRectAreaLights),S.push(M.numDirLightShadows),S.push(M.numPointLightShadows),S.push(M.numSpotLightShadows),S.push(M.numSpotLightShadowsWithMaps),S.push(M.numLightProbes),S.push(M.shadowMapType),S.push(M.toneMapping),S.push(M.numClippingPlanes),S.push(M.numClipIntersection),S.push(M.depthPacking)}function E(S,M){o.disableAll(),M.supportsVertexTextures&&o.enable(0),M.instancing&&o.enable(1),M.instancingColor&&o.enable(2),M.instancingMorph&&o.enable(3),M.matcap&&o.enable(4),M.envMap&&o.enable(5),M.normalMapObjectSpace&&o.enable(6),M.normalMapTangentSpace&&o.enable(7),M.clearcoat&&o.enable(8),M.iridescence&&o.enable(9),M.alphaTest&&o.enable(10),M.vertexColors&&o.enable(11),M.vertexAlphas&&o.enable(12),M.vertexUv1s&&o.enable(13),M.vertexUv2s&&o.enable(14),M.vertexUv3s&&o.enable(15),M.vertexTangents&&o.enable(16),M.anisotropy&&o.enable(17),M.alphaHash&&o.enable(18),M.batching&&o.enable(19),M.dispersion&&o.enable(20),M.batchingColor&&o.enable(21),S.push(o.mask),o.disableAll(),M.fog&&o.enable(0),M.useFog&&o.enable(1),M.flatShading&&o.enable(2),M.logarithmicDepthBuffer&&o.enable(3),M.reverseDepthBuffer&&o.enable(4),M.skinning&&o.enable(5),M.morphTargets&&o.enable(6),M.morphNormals&&o.enable(7),M.morphColors&&o.enable(8),M.premultipliedAlpha&&o.enable(9),M.shadowMapEnabled&&o.enable(10),M.doubleSided&&o.enable(11),M.flipSided&&o.enable(12),M.useDepthPacking&&o.enable(13),M.dithering&&o.enable(14),M.transmission&&o.enable(15),M.sheen&&o.enable(16),M.opaque&&o.enable(17),M.pointsUvs&&o.enable(18),M.decodeVideoTexture&&o.enable(19),M.decodeVideoTextureEmissive&&o.enable(20),M.alphaToCoverage&&o.enable(21),S.push(o.mask)}function y(S){const M=g[S.type];let w;if(M){const Y=pn[M];w=xr.clone(Y.uniforms)}else w=S.uniforms;return w}function D(S,M){let w;for(let Y=0,V=h.length;Y0?n.push(p):u.transparent===!0?s.push(p):e.push(p)}function l(d,f,u,g,_,m){const p=a(d,f,u,g,_,m);u.transmission>0?n.unshift(p):u.transparent===!0?s.unshift(p):e.unshift(p)}function c(d,f){e.length>1&&e.sort(d||Om),n.length>1&&n.sort(f||Ll),s.length>1&&s.sort(f||Ll)}function h(){for(let d=t,f=i.length;d=r.length?(a=new Ul,r.push(a)):a=r[s],a}function e(){i=new WeakMap}return{get:t,dispose:e}}function zm(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={direction:new P,color:new st};break;case"SpotLight":e={position:new P,direction:new P,color:new st,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":e={position:new P,color:new st,distance:0,decay:0};break;case"HemisphereLight":e={direction:new P,skyColor:new st,groundColor:new st};break;case"RectAreaLight":e={color:new st,position:new P,halfWidth:new P,halfHeight:new P};break}return i[t.id]=e,e}}}function km(){const i={};return{get:function(t){if(i[t.id]!==void 0)return i[t.id];let e;switch(t.type){case"DirectionalLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new xt};break;case"SpotLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new xt};break;case"PointLight":e={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new xt,shadowCameraNear:1,shadowCameraFar:1e3};break}return i[t.id]=e,e}}}let Hm=0;function Vm(i,t){return(t.castShadow?2:0)-(i.castShadow?2:0)+(t.map?1:0)-(i.map?1:0)}function Gm(i){const t=new zm,e=km(),n={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotLightMap:[],spotShadow:[],spotShadowMap:[],spotLightMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[],numSpotLightShadowsWithMaps:0,numLightProbes:0};for(let c=0;c<9;c++)n.probe.push(new P);const s=new P,r=new ne,a=new ne;function o(c){let h=0,d=0,f=0;for(let S=0;S<9;S++)n.probe[S].set(0,0,0);let u=0,g=0,_=0,m=0,p=0,T=0,E=0,y=0,D=0,A=0,C=0;c.sort(Vm);for(let S=0,M=c.length;S0&&(i.has("OES_texture_float_linear")===!0?(n.rectAreaLTC1=rt.LTC_FLOAT_1,n.rectAreaLTC2=rt.LTC_FLOAT_2):(n.rectAreaLTC1=rt.LTC_HALF_1,n.rectAreaLTC2=rt.LTC_HALF_2)),n.ambient[0]=h,n.ambient[1]=d,n.ambient[2]=f;const I=n.hash;(I.directionalLength!==u||I.pointLength!==g||I.spotLength!==_||I.rectAreaLength!==m||I.hemiLength!==p||I.numDirectionalShadows!==T||I.numPointShadows!==E||I.numSpotShadows!==y||I.numSpotMaps!==D||I.numLightProbes!==C)&&(n.directional.length=u,n.spot.length=_,n.rectArea.length=m,n.point.length=g,n.hemi.length=p,n.directionalShadow.length=T,n.directionalShadowMap.length=T,n.pointShadow.length=E,n.pointShadowMap.length=E,n.spotShadow.length=y,n.spotShadowMap.length=y,n.directionalShadowMatrix.length=T,n.pointShadowMatrix.length=E,n.spotLightMatrix.length=y+D-A,n.spotLightMap.length=D,n.numSpotLightShadowsWithMaps=A,n.numLightProbes=C,I.directionalLength=u,I.pointLength=g,I.spotLength=_,I.rectAreaLength=m,I.hemiLength=p,I.numDirectionalShadows=T,I.numPointShadows=E,I.numSpotShadows=y,I.numSpotMaps=D,I.numLightProbes=C,n.version=Hm++)}function l(c,h){let d=0,f=0,u=0,g=0,_=0;const m=h.matrixWorldInverse;for(let p=0,T=c.length;p=a.length?(o=new Il(i),a.push(o)):o=a[r],o}function n(){t=new WeakMap}return{get:e,dispose:n}}const Xm=`void main() { gl_Position = vec4( position, 1.0 ); -}`,km=`uniform sampler2D shadow_pass; +}`,Ym=`uniform sampler2D shadow_pass; uniform vec2 resolution; uniform float radius; #include @@ -3800,12 +3800,12 @@ void main() { squared_mean = squared_mean / samples; float std_dev = sqrt( squared_mean - mean * mean ); gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) ); -}`;function Hm(i,t,e){let n=new oo;const s=new Mt,r=new Mt,a=new le,o=new lu({depthPacking:vh}),l=new cu,c={},h=e.maxTextureSize,d={[kn]:We,[We]:kn,[dn]:dn},p=new ze({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new Mt},radius:{value:4}},vertexShader:zm,fragmentShader:km}),u=p.clone();u.defines.HORIZONTAL_PASS=1;const g=new ge;g.setAttribute("position",new ue(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const v=new Me(g,p),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=kl;let f=this.type;this.render=function(w,R,U){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||w.length===0)return;const y=i.getRenderTarget(),M=i.getActiveCubeFace(),P=i.getActiveMipmapLevel(),W=i.state;W.setBlending(Tn),W.buffers.color.setClear(1,1,1,1),W.buffers.depth.setTest(!0),W.setScissorTest(!1);const z=f!==En&&this.type===En,G=f===En&&this.type!==En;for(let $=0,X=w.length;$h||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/it.x),s.x=r.x*it.x,k.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/it.y),s.y=r.y*it.y,k.mapSize.y=r.y)),k.map===null||z===!0||G===!0){const St=this.type!==En?{minFilter:Ze,magFilter:Ze}:{};k.map!==null&&k.map.dispose(),k.map=new cn(s.x,s.y,St),k.map.texture.name=Q.name+".shadowMap",k.camera.updateProjectionMatrix()}i.setRenderTarget(k.map),i.clear();const ft=k.getViewportCount();for(let St=0;St0||R.map&&R.alphaTest>0){const W=M.uuid,z=R.uuid;let G=c[W];G===void 0&&(G={},c[W]=G);let $=G[z];$===void 0&&($=M.clone(),G[z]=$,R.addEventListener("dispose",D)),M=$}if(M.visible=R.visible,M.wireframe=R.wireframe,y===En?M.side=R.shadowSide!==null?R.shadowSide:R.side:M.side=R.shadowSide!==null?R.shadowSide:d[R.side],M.alphaMap=R.alphaMap,M.alphaTest=R.alphaTest,M.map=R.map,M.clipShadows=R.clipShadows,M.clippingPlanes=R.clippingPlanes,M.clipIntersection=R.clipIntersection,M.displacementMap=R.displacementMap,M.displacementScale=R.displacementScale,M.displacementBias=R.displacementBias,M.wireframeLinewidth=R.wireframeLinewidth,M.linewidth=R.linewidth,U.isPointLight===!0&&M.isMeshDistanceMaterial===!0){const W=i.properties.get(M);W.light=U}return M}function S(w,R,U,y,M){if(w.visible===!1)return;if(w.layers.test(R.layers)&&(w.isMesh||w.isLine||w.isPoints)&&(w.castShadow||w.receiveShadow&&M===En)&&(!w.frustumCulled||n.intersectsObject(w))){w.modelViewMatrix.multiplyMatrices(U.matrixWorldInverse,w.matrixWorld);const z=t.update(w),G=w.material;if(Array.isArray(G)){const $=z.groups;for(let X=0,Q=$.length;X=1):k.indexOf("OpenGL ES")!==-1&&(Q=parseFloat(/^OpenGL ES (\d)/.exec(k)[1]),X=Q>=2);let it=null,ft={};const St=i.getParameter(i.SCISSOR_BOX),Ft=i.getParameter(i.VIEWPORT),Vt=new le().fromArray(St),Y=new le().fromArray(Ft);function nt(L,at,H,Z){const dt=new Uint8Array(4),ht=i.createTexture();i.bindTexture(L,ht),i.texParameteri(L,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(L,i.TEXTURE_MAG_FILTER,i.NEAREST);for(let wt=0;wt"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new Mt,h=new WeakMap;let d;const p=new WeakMap;let u=!1;try{u=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function g(E,_){return u?new OffscreenCanvas(E,_):dr("canvas")}function v(E,_,F){let q=1;const K=ct(E);if((K.width>F||K.height>F)&&(q=F/Math.max(K.width,K.height)),q<1)if(typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&E instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&E instanceof ImageBitmap||typeof VideoFrame<"u"&&E instanceof VideoFrame){const j=Math.floor(q*K.width),yt=Math.floor(q*K.height);d===void 0&&(d=g(j,yt));const lt=_?g(j,yt):d;return lt.width=j,lt.height=yt,lt.getContext("2d").drawImage(E,0,0,j,yt),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+K.width+"x"+K.height+") to ("+j+"x"+yt+")."),lt}else return"data"in E&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+K.width+"x"+K.height+")."),E;return E}function m(E){return E.generateMipmaps}function f(E){i.generateMipmap(E)}function T(E){return E.isWebGLCubeRenderTarget?i.TEXTURE_CUBE_MAP:E.isWebGL3DRenderTarget?i.TEXTURE_3D:E.isWebGLArrayRenderTarget||E.isCompressedArrayTexture?i.TEXTURE_2D_ARRAY:i.TEXTURE_2D}function b(E,_,F,q,K=!1){if(E!==null){if(i[E]!==void 0)return i[E];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+E+"'")}let j=_;if(_===i.RED&&(F===i.FLOAT&&(j=i.R32F),F===i.HALF_FLOAT&&(j=i.R16F),F===i.UNSIGNED_BYTE&&(j=i.R8)),_===i.RED_INTEGER&&(F===i.UNSIGNED_BYTE&&(j=i.R8UI),F===i.UNSIGNED_SHORT&&(j=i.R16UI),F===i.UNSIGNED_INT&&(j=i.R32UI),F===i.BYTE&&(j=i.R8I),F===i.SHORT&&(j=i.R16I),F===i.INT&&(j=i.R32I)),_===i.RG&&(F===i.FLOAT&&(j=i.RG32F),F===i.HALF_FLOAT&&(j=i.RG16F),F===i.UNSIGNED_BYTE&&(j=i.RG8)),_===i.RG_INTEGER&&(F===i.UNSIGNED_BYTE&&(j=i.RG8UI),F===i.UNSIGNED_SHORT&&(j=i.RG16UI),F===i.UNSIGNED_INT&&(j=i.RG32UI),F===i.BYTE&&(j=i.RG8I),F===i.SHORT&&(j=i.RG16I),F===i.INT&&(j=i.RG32I)),_===i.RGB_INTEGER&&(F===i.UNSIGNED_BYTE&&(j=i.RGB8UI),F===i.UNSIGNED_SHORT&&(j=i.RGB16UI),F===i.UNSIGNED_INT&&(j=i.RGB32UI),F===i.BYTE&&(j=i.RGB8I),F===i.SHORT&&(j=i.RGB16I),F===i.INT&&(j=i.RGB32I)),_===i.RGBA_INTEGER&&(F===i.UNSIGNED_BYTE&&(j=i.RGBA8UI),F===i.UNSIGNED_SHORT&&(j=i.RGBA16UI),F===i.UNSIGNED_INT&&(j=i.RGBA32UI),F===i.BYTE&&(j=i.RGBA8I),F===i.SHORT&&(j=i.RGBA16I),F===i.INT&&(j=i.RGBA32I)),_===i.RGB&&F===i.UNSIGNED_INT_5_9_9_9_REV&&(j=i.RGB9_E5),_===i.RGBA){const yt=K?hr:Qt.getTransfer(q);F===i.FLOAT&&(j=i.RGBA32F),F===i.HALF_FLOAT&&(j=i.RGBA16F),F===i.UNSIGNED_BYTE&&(j=yt===re?i.SRGB8_ALPHA8:i.RGBA8),F===i.UNSIGNED_SHORT_4_4_4_4&&(j=i.RGBA4),F===i.UNSIGNED_SHORT_5_5_5_1&&(j=i.RGB5_A1)}return(j===i.R16F||j===i.R32F||j===i.RG16F||j===i.RG32F||j===i.RGBA16F||j===i.RGBA32F)&&t.get("EXT_color_buffer_float"),j}function S(E,_){let F;return E?_===null||_===ii||_===ki?F=i.DEPTH24_STENCIL8:_===mn?F=i.DEPTH32F_STENCIL8:_===us&&(F=i.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):_===null||_===ii||_===ki?F=i.DEPTH_COMPONENT24:_===mn?F=i.DEPTH_COMPONENT32F:_===us&&(F=i.DEPTH_COMPONENT16),F}function D(E,_){return m(E)===!0||E.isFramebufferTexture&&E.minFilter!==Ze&&E.minFilter!==pn?Math.log2(Math.max(_.width,_.height))+1:E.mipmaps!==void 0&&E.mipmaps.length>0?E.mipmaps.length:E.isCompressedTexture&&Array.isArray(E.image)?_.mipmaps.length:1}function w(E){const _=E.target;_.removeEventListener("dispose",w),U(_),_.isVideoTexture&&h.delete(_)}function R(E){const _=E.target;_.removeEventListener("dispose",R),M(_)}function U(E){const _=n.get(E);if(_.__webglInit===void 0)return;const F=E.source,q=p.get(F);if(q){const K=q[_.__cacheKey];K.usedTimes--,K.usedTimes===0&&y(E),Object.keys(q).length===0&&p.delete(F)}n.remove(E)}function y(E){const _=n.get(E);i.deleteTexture(_.__webglTexture);const F=E.source,q=p.get(F);delete q[_.__cacheKey],a.memory.textures--}function M(E){const _=n.get(E);if(E.depthTexture&&(E.depthTexture.dispose(),n.remove(E.depthTexture)),E.isWebGLCubeRenderTarget)for(let q=0;q<6;q++){if(Array.isArray(_.__webglFramebuffer[q]))for(let K=0;K<_.__webglFramebuffer[q].length;K++)i.deleteFramebuffer(_.__webglFramebuffer[q][K]);else i.deleteFramebuffer(_.__webglFramebuffer[q]);_.__webglDepthbuffer&&i.deleteRenderbuffer(_.__webglDepthbuffer[q])}else{if(Array.isArray(_.__webglFramebuffer))for(let q=0;q<_.__webglFramebuffer.length;q++)i.deleteFramebuffer(_.__webglFramebuffer[q]);else i.deleteFramebuffer(_.__webglFramebuffer);if(_.__webglDepthbuffer&&i.deleteRenderbuffer(_.__webglDepthbuffer),_.__webglMultisampledFramebuffer&&i.deleteFramebuffer(_.__webglMultisampledFramebuffer),_.__webglColorRenderbuffer)for(let q=0;q<_.__webglColorRenderbuffer.length;q++)_.__webglColorRenderbuffer[q]&&i.deleteRenderbuffer(_.__webglColorRenderbuffer[q]);_.__webglDepthRenderbuffer&&i.deleteRenderbuffer(_.__webglDepthRenderbuffer)}const F=E.textures;for(let q=0,K=F.length;q=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+E+" texture units while this GPU supports only "+s.maxTextures),P+=1,E}function G(E){const _=[];return _.push(E.wrapS),_.push(E.wrapT),_.push(E.wrapR||0),_.push(E.magFilter),_.push(E.minFilter),_.push(E.anisotropy),_.push(E.internalFormat),_.push(E.format),_.push(E.type),_.push(E.generateMipmaps),_.push(E.premultiplyAlpha),_.push(E.flipY),_.push(E.unpackAlignment),_.push(E.colorSpace),_.join()}function $(E,_){const F=n.get(E);if(E.isVideoTexture&&J(E),E.isRenderTargetTexture===!1&&E.version>0&&F.__version!==E.version){const q=E.image;if(q===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(q.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Y(F,E,_);return}}e.bindTexture(i.TEXTURE_2D,F.__webglTexture,i.TEXTURE0+_)}function X(E,_){const F=n.get(E);if(E.version>0&&F.__version!==E.version){Y(F,E,_);return}e.bindTexture(i.TEXTURE_2D_ARRAY,F.__webglTexture,i.TEXTURE0+_)}function Q(E,_){const F=n.get(E);if(E.version>0&&F.__version!==E.version){Y(F,E,_);return}e.bindTexture(i.TEXTURE_3D,F.__webglTexture,i.TEXTURE0+_)}function k(E,_){const F=n.get(E);if(E.version>0&&F.__version!==E.version){nt(F,E,_);return}e.bindTexture(i.TEXTURE_CUBE_MAP,F.__webglTexture,i.TEXTURE0+_)}const it={[ga]:i.REPEAT,[Qn]:i.CLAMP_TO_EDGE,[_a]:i.MIRRORED_REPEAT},ft={[Ze]:i.NEAREST,[gh]:i.NEAREST_MIPMAP_NEAREST,[Es]:i.NEAREST_MIPMAP_LINEAR,[pn]:i.LINEAR,[br]:i.LINEAR_MIPMAP_NEAREST,[ti]:i.LINEAR_MIPMAP_LINEAR},St={[Mh]:i.NEVER,[wh]:i.ALWAYS,[Sh]:i.LESS,[tc]:i.LEQUAL,[yh]:i.EQUAL,[Th]:i.GEQUAL,[Eh]:i.GREATER,[bh]:i.NOTEQUAL};function Ft(E,_){if(_.type===mn&&t.has("OES_texture_float_linear")===!1&&(_.magFilter===pn||_.magFilter===br||_.magFilter===Es||_.magFilter===ti||_.minFilter===pn||_.minFilter===br||_.minFilter===Es||_.minFilter===ti)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),i.texParameteri(E,i.TEXTURE_WRAP_S,it[_.wrapS]),i.texParameteri(E,i.TEXTURE_WRAP_T,it[_.wrapT]),(E===i.TEXTURE_3D||E===i.TEXTURE_2D_ARRAY)&&i.texParameteri(E,i.TEXTURE_WRAP_R,it[_.wrapR]),i.texParameteri(E,i.TEXTURE_MAG_FILTER,ft[_.magFilter]),i.texParameteri(E,i.TEXTURE_MIN_FILTER,ft[_.minFilter]),_.compareFunction&&(i.texParameteri(E,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE),i.texParameteri(E,i.TEXTURE_COMPARE_FUNC,St[_.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(_.magFilter===Ze||_.minFilter!==Es&&_.minFilter!==ti||_.type===mn&&t.has("OES_texture_float_linear")===!1)return;if(_.anisotropy>1||n.get(_).__currentAnisotropy){const F=t.get("EXT_texture_filter_anisotropic");i.texParameterf(E,F.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(_.anisotropy,s.getMaxAnisotropy())),n.get(_).__currentAnisotropy=_.anisotropy}}}function Vt(E,_){let F=!1;E.__webglInit===void 0&&(E.__webglInit=!0,_.addEventListener("dispose",w));const q=_.source;let K=p.get(q);K===void 0&&(K={},p.set(q,K));const j=G(_);if(j!==E.__cacheKey){K[j]===void 0&&(K[j]={texture:i.createTexture(),usedTimes:0},a.memory.textures++,F=!0),K[j].usedTimes++;const yt=K[E.__cacheKey];yt!==void 0&&(K[E.__cacheKey].usedTimes--,yt.usedTimes===0&&y(_)),E.__cacheKey=j,E.__webglTexture=K[j].texture}return F}function Y(E,_,F){let q=i.TEXTURE_2D;(_.isDataArrayTexture||_.isCompressedArrayTexture)&&(q=i.TEXTURE_2D_ARRAY),_.isData3DTexture&&(q=i.TEXTURE_3D);const K=Vt(E,_),j=_.source;e.bindTexture(q,E.__webglTexture,i.TEXTURE0+F);const yt=n.get(j);if(j.version!==yt.__version||K===!0){e.activeTexture(i.TEXTURE0+F);const lt=Qt.getPrimaries(Qt.workingColorSpace),pt=_.colorSpace===On?null:Qt.getPrimaries(_.colorSpace),Gt=_.colorSpace===On||lt===pt?i.NONE:i.BROWSER_DEFAULT_WEBGL;i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,_.flipY),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,_.premultiplyAlpha),i.pixelStorei(i.UNPACK_ALIGNMENT,_.unpackAlignment),i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,Gt);let et=v(_.image,!1,s.maxTextureSize);et=Et(_,et);const mt=r.convert(_.format,_.colorSpace),Tt=r.convert(_.type);let Ut=b(_.internalFormat,mt,Tt,_.colorSpace,_.isVideoTexture);Ft(q,_);let gt;const Zt=_.mipmaps,Ot=_.isVideoTexture!==!0,se=yt.__version===void 0||K===!0,L=j.dataReady,at=D(_,et);if(_.isDepthTexture)Ut=S(_.format===Hi,_.type),se&&(Ot?e.texStorage2D(i.TEXTURE_2D,1,Ut,et.width,et.height):e.texImage2D(i.TEXTURE_2D,0,Ut,et.width,et.height,0,mt,Tt,null));else if(_.isDataTexture)if(Zt.length>0){Ot&&se&&e.texStorage2D(i.TEXTURE_2D,at,Ut,Zt[0].width,Zt[0].height);for(let H=0,Z=Zt.length;H0){const dt=el(gt.width,gt.height,_.format,_.type);for(const ht of _.layerUpdates){const wt=gt.data.subarray(ht*dt/gt.data.BYTES_PER_ELEMENT,(ht+1)*dt/gt.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,H,0,0,ht,gt.width,gt.height,1,mt,wt)}_.clearLayerUpdates()}else e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,H,0,0,0,gt.width,gt.height,et.depth,mt,gt.data)}else e.compressedTexImage3D(i.TEXTURE_2D_ARRAY,H,Ut,gt.width,gt.height,et.depth,0,gt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else Ot?L&&e.texSubImage3D(i.TEXTURE_2D_ARRAY,H,0,0,0,gt.width,gt.height,et.depth,mt,Tt,gt.data):e.texImage3D(i.TEXTURE_2D_ARRAY,H,Ut,gt.width,gt.height,et.depth,0,mt,Tt,gt.data)}else{Ot&&se&&e.texStorage2D(i.TEXTURE_2D,at,Ut,Zt[0].width,Zt[0].height);for(let H=0,Z=Zt.length;H0){const H=el(et.width,et.height,_.format,_.type);for(const Z of _.layerUpdates){const dt=et.data.subarray(Z*H/et.data.BYTES_PER_ELEMENT,(Z+1)*H/et.data.BYTES_PER_ELEMENT);e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,Z,et.width,et.height,1,mt,Tt,dt)}_.clearLayerUpdates()}else e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,0,et.width,et.height,et.depth,mt,Tt,et.data)}else e.texImage3D(i.TEXTURE_2D_ARRAY,0,Ut,et.width,et.height,et.depth,0,mt,Tt,et.data);else if(_.isData3DTexture)Ot?(se&&e.texStorage3D(i.TEXTURE_3D,at,Ut,et.width,et.height,et.depth),L&&e.texSubImage3D(i.TEXTURE_3D,0,0,0,0,et.width,et.height,et.depth,mt,Tt,et.data)):e.texImage3D(i.TEXTURE_3D,0,Ut,et.width,et.height,et.depth,0,mt,Tt,et.data);else if(_.isFramebufferTexture){if(se)if(Ot)e.texStorage2D(i.TEXTURE_2D,at,Ut,et.width,et.height);else{let H=et.width,Z=et.height;for(let dt=0;dt>=1,Z>>=1}}else if(Zt.length>0){if(Ot&&se){const H=ct(Zt[0]);e.texStorage2D(i.TEXTURE_2D,at,Ut,H.width,H.height)}for(let H=0,Z=Zt.length;H0&&at++;const Z=ct(mt[0]);e.texStorage2D(i.TEXTURE_CUBE_MAP,at,Zt,Z.width,Z.height)}for(let Z=0;Z<6;Z++)if(et){Ot?L&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,0,0,mt[Z].width,mt[Z].height,Ut,gt,mt[Z].data):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+Z,0,Zt,mt[Z].width,mt[Z].height,0,Ut,gt,mt[Z].data);for(let dt=0;dt>j),Tt=Math.max(1,_.height>>j);K===i.TEXTURE_3D||K===i.TEXTURE_2D_ARRAY?e.texImage3D(K,j,pt,mt,Tt,_.depth,0,yt,lt,null):e.texImage2D(K,j,pt,mt,Tt,0,yt,lt,null)}e.bindFramebuffer(i.FRAMEBUFFER,E),jt(_)?o.framebufferTexture2DMultisampleEXT(i.FRAMEBUFFER,q,K,et.__webglTexture,0,qt(_)):(K===i.TEXTURE_2D||K>=i.TEXTURE_CUBE_MAP_POSITIVE_X&&K<=i.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&i.framebufferTexture2D(i.FRAMEBUFFER,q,K,et.__webglTexture,j),e.bindFramebuffer(i.FRAMEBUFFER,null)}function ot(E,_,F){if(i.bindRenderbuffer(i.RENDERBUFFER,E),_.depthBuffer){const q=_.depthTexture,K=q&&q.isDepthTexture?q.type:null,j=S(_.stencilBuffer,K),yt=_.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,lt=qt(_);jt(_)?o.renderbufferStorageMultisampleEXT(i.RENDERBUFFER,lt,j,_.width,_.height):F?i.renderbufferStorageMultisample(i.RENDERBUFFER,lt,j,_.width,_.height):i.renderbufferStorage(i.RENDERBUFFER,j,_.width,_.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,yt,i.RENDERBUFFER,E)}else{const q=_.textures;for(let K=0;K{delete _.__boundDepthTexture,delete _.__depthDisposeCallback,q.removeEventListener("dispose",K)};q.addEventListener("dispose",K),_.__depthDisposeCallback=K}_.__boundDepthTexture=q}if(E.depthTexture&&!_.__autoAllocateDepthBuffer){if(F)throw new Error("target.depthTexture not supported in Cube render targets");Pt(_.__webglFramebuffer,E)}else if(F){_.__webglDepthbuffer=[];for(let q=0;q<6;q++)if(e.bindFramebuffer(i.FRAMEBUFFER,_.__webglFramebuffer[q]),_.__webglDepthbuffer[q]===void 0)_.__webglDepthbuffer[q]=i.createRenderbuffer(),ot(_.__webglDepthbuffer[q],E,!1);else{const K=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,j=_.__webglDepthbuffer[q];i.bindRenderbuffer(i.RENDERBUFFER,j),i.framebufferRenderbuffer(i.FRAMEBUFFER,K,i.RENDERBUFFER,j)}}else if(e.bindFramebuffer(i.FRAMEBUFFER,_.__webglFramebuffer),_.__webglDepthbuffer===void 0)_.__webglDepthbuffer=i.createRenderbuffer(),ot(_.__webglDepthbuffer,E,!1);else{const q=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,K=_.__webglDepthbuffer;i.bindRenderbuffer(i.RENDERBUFFER,K),i.framebufferRenderbuffer(i.FRAMEBUFFER,q,i.RENDERBUFFER,K)}e.bindFramebuffer(i.FRAMEBUFFER,null)}function Ht(E,_,F){const q=n.get(E);_!==void 0&&_t(q.__webglFramebuffer,E,E.texture,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,0),F!==void 0&&Lt(E)}function he(E){const _=E.texture,F=n.get(E),q=n.get(_);E.addEventListener("dispose",R);const K=E.textures,j=E.isWebGLCubeRenderTarget===!0,yt=K.length>1;if(yt||(q.__webglTexture===void 0&&(q.__webglTexture=i.createTexture()),q.__version=_.version,a.memory.textures++),j){F.__webglFramebuffer=[];for(let lt=0;lt<6;lt++)if(_.mipmaps&&_.mipmaps.length>0){F.__webglFramebuffer[lt]=[];for(let pt=0;pt<_.mipmaps.length;pt++)F.__webglFramebuffer[lt][pt]=i.createFramebuffer()}else F.__webglFramebuffer[lt]=i.createFramebuffer()}else{if(_.mipmaps&&_.mipmaps.length>0){F.__webglFramebuffer=[];for(let lt=0;lt<_.mipmaps.length;lt++)F.__webglFramebuffer[lt]=i.createFramebuffer()}else F.__webglFramebuffer=i.createFramebuffer();if(yt)for(let lt=0,pt=K.length;lt0&&jt(E)===!1){F.__webglMultisampledFramebuffer=i.createFramebuffer(),F.__webglColorRenderbuffer=[],e.bindFramebuffer(i.FRAMEBUFFER,F.__webglMultisampledFramebuffer);for(let lt=0;lt0)for(let pt=0;pt<_.mipmaps.length;pt++)_t(F.__webglFramebuffer[lt][pt],E,_,i.COLOR_ATTACHMENT0,i.TEXTURE_CUBE_MAP_POSITIVE_X+lt,pt);else _t(F.__webglFramebuffer[lt],E,_,i.COLOR_ATTACHMENT0,i.TEXTURE_CUBE_MAP_POSITIVE_X+lt,0);m(_)&&f(i.TEXTURE_CUBE_MAP),e.unbindTexture()}else if(yt){for(let lt=0,pt=K.length;lt0)for(let pt=0;pt<_.mipmaps.length;pt++)_t(F.__webglFramebuffer[pt],E,_,i.COLOR_ATTACHMENT0,lt,pt);else _t(F.__webglFramebuffer,E,_,i.COLOR_ATTACHMENT0,lt,0);m(_)&&f(lt),e.unbindTexture()}E.depthBuffer&&Lt(E)}function Yt(E){const _=E.textures;for(let F=0,q=_.length;F0){if(jt(E)===!1){const _=E.textures,F=E.width,q=E.height;let K=i.COLOR_BUFFER_BIT;const j=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,yt=n.get(E),lt=_.length>1;if(lt)for(let pt=0;pt<_.length;pt++)e.bindFramebuffer(i.FRAMEBUFFER,yt.__webglMultisampledFramebuffer),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+pt,i.RENDERBUFFER,null),e.bindFramebuffer(i.FRAMEBUFFER,yt.__webglFramebuffer),i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0+pt,i.TEXTURE_2D,null,0);e.bindFramebuffer(i.READ_FRAMEBUFFER,yt.__webglMultisampledFramebuffer),e.bindFramebuffer(i.DRAW_FRAMEBUFFER,yt.__webglFramebuffer);for(let pt=0;pt<_.length;pt++){if(E.resolveDepthBuffer&&(E.depthBuffer&&(K|=i.DEPTH_BUFFER_BIT),E.stencilBuffer&&E.resolveStencilBuffer&&(K|=i.STENCIL_BUFFER_BIT)),lt){i.framebufferRenderbuffer(i.READ_FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.RENDERBUFFER,yt.__webglColorRenderbuffer[pt]);const Gt=n.get(_[pt]).__webglTexture;i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,Gt,0)}i.blitFramebuffer(0,0,F,q,0,0,F,q,K,i.NEAREST),l===!0&&(fe.length=0,A.length=0,fe.push(i.COLOR_ATTACHMENT0+pt),E.depthBuffer&&E.resolveDepthBuffer===!1&&(fe.push(j),A.push(j),i.invalidateFramebuffer(i.DRAW_FRAMEBUFFER,A)),i.invalidateFramebuffer(i.READ_FRAMEBUFFER,fe))}if(e.bindFramebuffer(i.READ_FRAMEBUFFER,null),e.bindFramebuffer(i.DRAW_FRAMEBUFFER,null),lt)for(let pt=0;pt<_.length;pt++){e.bindFramebuffer(i.FRAMEBUFFER,yt.__webglMultisampledFramebuffer),i.framebufferRenderbuffer(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+pt,i.RENDERBUFFER,yt.__webglColorRenderbuffer[pt]);const Gt=n.get(_[pt]).__webglTexture;e.bindFramebuffer(i.FRAMEBUFFER,yt.__webglFramebuffer),i.framebufferTexture2D(i.DRAW_FRAMEBUFFER,i.COLOR_ATTACHMENT0+pt,i.TEXTURE_2D,Gt,0)}e.bindFramebuffer(i.DRAW_FRAMEBUFFER,yt.__webglMultisampledFramebuffer)}else if(E.depthBuffer&&E.resolveDepthBuffer===!1&&l){const _=E.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT;i.invalidateFramebuffer(i.DRAW_FRAMEBUFFER,[_])}}}function qt(E){return Math.min(s.maxSamples,E.samples)}function jt(E){const _=n.get(E);return E.samples>0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&_.__useRenderToTexture!==!1}function J(E){const _=a.render.frame;h.get(E)!==_&&(h.set(E,_),E.update())}function Et(E,_){const F=E.colorSpace,q=E.format,K=E.type;return E.isCompressedTexture===!0||E.isVideoTexture===!0||F!==Vi&&F!==On&&(Qt.getTransfer(F)===re?(q!==ln||K!==Rn)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",F)),_}function ct(E){return typeof HTMLImageElement<"u"&&E instanceof HTMLImageElement?(c.width=E.naturalWidth||E.width,c.height=E.naturalHeight||E.height):typeof VideoFrame<"u"&&E instanceof VideoFrame?(c.width=E.displayWidth,c.height=E.displayHeight):(c.width=E.width,c.height=E.height),c}this.allocateTextureUnit=z,this.resetTextureUnits=W,this.setTexture2D=$,this.setTexture2DArray=X,this.setTexture3D=Q,this.setTextureCube=k,this.rebindTextures=Ht,this.setupRenderTarget=he,this.updateRenderTargetMipmap=Yt,this.updateMultisampleRenderTarget=ke,this.setupDepthRenderbuffer=Lt,this.setupFrameBufferTexture=_t,this.useMultisampledRTT=jt}function Xm(i,t){function e(n,s=On){let r;const a=Qt.getTransfer(s);if(n===Rn)return i.UNSIGNED_BYTE;if(n===to)return i.UNSIGNED_SHORT_4_4_4_4;if(n===eo)return i.UNSIGNED_SHORT_5_5_5_1;if(n===Yl)return i.UNSIGNED_INT_5_9_9_9_REV;if(n===Wl)return i.BYTE;if(n===Xl)return i.SHORT;if(n===us)return i.UNSIGNED_SHORT;if(n===Qa)return i.INT;if(n===ii)return i.UNSIGNED_INT;if(n===mn)return i.FLOAT;if(n===wn)return i.HALF_FLOAT;if(n===ql)return i.ALPHA;if(n===jl)return i.RGB;if(n===ln)return i.RGBA;if(n===Zl)return i.LUMINANCE;if(n===Kl)return i.LUMINANCE_ALPHA;if(n===Ii)return i.DEPTH_COMPONENT;if(n===Hi)return i.DEPTH_STENCIL;if(n===no)return i.RED;if(n===io)return i.RED_INTEGER;if(n===$l)return i.RG;if(n===so)return i.RG_INTEGER;if(n===ro)return i.RGBA_INTEGER;if(n===tr||n===er||n===nr||n===ir)if(a===re)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(n===tr)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===er)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===nr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===ir)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(n===tr)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===er)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===nr)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===ir)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===va||n===xa||n===Ma||n===Sa)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(n===va)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===xa)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===Ma)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===Sa)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===ya||n===Ea||n===ba)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(n===ya||n===Ea)return a===re?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(n===ba)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(n===Ta||n===wa||n===Aa||n===Ra||n===Ca||n===Pa||n===Da||n===La||n===Ua||n===Ia||n===Na||n===Fa||n===Oa||n===Ba)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(n===Ta)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===wa)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===Aa)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===Ra)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===Ca)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===Pa)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===Da)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===La)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===Ua)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===Ia)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===Na)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===Fa)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===Oa)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===Ba)return a===re?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===sr||n===za||n===ka)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(n===sr)return a===re?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===za)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===ka)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===Jl||n===Ha||n===Va||n===Ga)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(n===sr)return r.COMPRESSED_RED_RGTC1_EXT;if(n===Ha)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===Va)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===Ga)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===ki?i.UNSIGNED_INT_24_8:i[n]!==void 0?i[n]:null}return{convert:e}}const Ym={type:"move"};class na{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new Pi,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new Pi,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new C,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new C),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new Pi,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new C,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new C),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const n of t.hand.values())this._getHandJoint(e,n)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,n){let s=null,r=null,a=null;const o=this._targetRay,l=this._grip,c=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(c&&t.hand){a=!0;for(const v of t.hand.values()){const m=e.getJointPose(v,n),f=this._getHandJoint(c,v);m!==null&&(f.matrix.fromArray(m.transform.matrix),f.matrix.decompose(f.position,f.rotation,f.scale),f.matrixWorldNeedsUpdate=!0,f.jointRadius=m.radius),f.visible=m!==null}const h=c.joints["index-finger-tip"],d=c.joints["thumb-tip"],p=h.position.distanceTo(d.position),u=.02,g=.005;c.inputState.pinching&&p>u+g?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&p<=u-g&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else l!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=e.getPose(t.targetRaySpace,n),s===null&&r!==null&&(s=r),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Ym)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const n=new Pi;n.matrixAutoUpdate=!1,n.visible=!1,t.joints[e.jointName]=n,t.add(n)}return t.joints[e.jointName]}}const qm=` +}`;function qm(i,t,e){let n=new Mo;const s=new xt,r=new xt,a=new ae,o=new pu({depthPacking:bh}),l=new mu,c={},h=e.maxTextureSize,d={[Gn]:Ye,[Ye]:Gn,[mn]:mn},f=new Ve({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new xt},radius:{value:4}},vertexShader:Xm,fragmentShader:Ym}),u=f.clone();u.defines.HORIZONTAL_PASS=1;const g=new ge;g.setAttribute("position",new ce(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const _=new Ee(g,f),m=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=ql;let p=this.type;this.render=function(A,C,I){if(m.enabled===!1||m.autoUpdate===!1&&m.needsUpdate===!1||A.length===0)return;const S=i.getRenderTarget(),M=i.getActiveCubeFace(),w=i.getActiveMipmapLevel(),Y=i.state;Y.setBlending(Rn),Y.buffers.color.setClear(1,1,1,1),Y.buffers.depth.setTest(!0),Y.setScissorTest(!1);const V=p!==wn&&this.type===wn,j=p===wn&&this.type!==wn;for(let $=0,q=A.length;$h||s.y>h)&&(s.x>h&&(r.x=Math.floor(h/it.x),s.x=r.x*it.x,X.mapSize.x=r.x),s.y>h&&(r.y=Math.floor(h/it.y),s.y=r.y*it.y,X.mapSize.y=r.y)),X.map===null||V===!0||j===!0){const Mt=this.type!==wn?{minFilter:Je,magFilter:Je}:{};X.map!==null&&X.map.dispose(),X.map=new fn(s.x,s.y,Mt),X.map.texture.name=J.name+".shadowMap",X.camera.updateProjectionMatrix()}i.setRenderTarget(X.map),i.clear();const ft=X.getViewportCount();for(let Mt=0;Mt0||C.map&&C.alphaTest>0){const Y=M.uuid,V=C.uuid;let j=c[Y];j===void 0&&(j={},c[Y]=j);let $=j[V];$===void 0&&($=M.clone(),j[V]=$,C.addEventListener("dispose",D)),M=$}if(M.visible=C.visible,M.wireframe=C.wireframe,S===wn?M.side=C.shadowSide!==null?C.shadowSide:C.side:M.side=C.shadowSide!==null?C.shadowSide:d[C.side],M.alphaMap=C.alphaMap,M.alphaTest=C.alphaTest,M.map=C.map,M.clipShadows=C.clipShadows,M.clippingPlanes=C.clippingPlanes,M.clipIntersection=C.clipIntersection,M.displacementMap=C.displacementMap,M.displacementScale=C.displacementScale,M.displacementBias=C.displacementBias,M.wireframeLinewidth=C.wireframeLinewidth,M.linewidth=C.linewidth,I.isPointLight===!0&&M.isMeshDistanceMaterial===!0){const Y=i.properties.get(M);Y.light=I}return M}function y(A,C,I,S,M){if(A.visible===!1)return;if(A.layers.test(C.layers)&&(A.isMesh||A.isLine||A.isPoints)&&(A.castShadow||A.receiveShadow&&M===wn)&&(!A.frustumCulled||n.intersectsObject(A))){A.modelViewMatrix.multiplyMatrices(I.matrixWorldInverse,A.matrixWorld);const V=t.update(A),j=A.material;if(Array.isArray(j)){const $=V.groups;for(let q=0,J=$.length;q=1):X.indexOf("OpenGL ES")!==-1&&(J=parseFloat(/^OpenGL ES (\d)/.exec(X)[1]),q=J>=2);let it=null,ft={};const Mt=i.getParameter(i.SCISSOR_BOX),Nt=i.getParameter(i.VIEWPORT),Wt=new ae().fromArray(Mt),Z=new ae().fromArray(Nt);function nt(L,ct,W,K){const ht=new Uint8Array(4),ut=i.createTexture();i.bindTexture(L,ut),i.texParameteri(L,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(L,i.TEXTURE_MAG_FILTER,i.NEAREST);for(let Ut=0;Ut"u"?!1:/OculusBrowser/g.test(navigator.userAgent),c=new xt,h=new WeakMap;let d;const f=new WeakMap;let u=!1;try{u=typeof OffscreenCanvas<"u"&&new OffscreenCanvas(1,1).getContext("2d")!==null}catch{}function g(b,v){return u?new OffscreenCanvas(b,v):vr("canvas")}function _(b,v,O){let F=1;const k=Et(b);if((k.width>O||k.height>O)&&(F=O/Math.max(k.width,k.height)),F<1)if(typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement||typeof HTMLCanvasElement<"u"&&b instanceof HTMLCanvasElement||typeof ImageBitmap<"u"&&b instanceof ImageBitmap||typeof VideoFrame<"u"&&b instanceof VideoFrame){const G=Math.floor(F*k.width),ot=Math.floor(F*k.height);d===void 0&&(d=g(G,ot));const Q=v?g(G,ot):d;return Q.width=G,Q.height=ot,Q.getContext("2d").drawImage(b,0,0,G,ot),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+k.width+"x"+k.height+") to ("+G+"x"+ot+")."),Q}else return"data"in b&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+k.width+"x"+k.height+")."),b;return b}function m(b){return b.generateMipmaps}function p(b){i.generateMipmap(b)}function T(b){return b.isWebGLCubeRenderTarget?i.TEXTURE_CUBE_MAP:b.isWebGL3DRenderTarget?i.TEXTURE_3D:b.isWebGLArrayRenderTarget||b.isCompressedArrayTexture?i.TEXTURE_2D_ARRAY:i.TEXTURE_2D}function E(b,v,O,F,k=!1){if(b!==null){if(i[b]!==void 0)return i[b];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+b+"'")}let G=v;if(v===i.RED&&(O===i.FLOAT&&(G=i.R32F),O===i.HALF_FLOAT&&(G=i.R16F),O===i.UNSIGNED_BYTE&&(G=i.R8)),v===i.RED_INTEGER&&(O===i.UNSIGNED_BYTE&&(G=i.R8UI),O===i.UNSIGNED_SHORT&&(G=i.R16UI),O===i.UNSIGNED_INT&&(G=i.R32UI),O===i.BYTE&&(G=i.R8I),O===i.SHORT&&(G=i.R16I),O===i.INT&&(G=i.R32I)),v===i.RG&&(O===i.FLOAT&&(G=i.RG32F),O===i.HALF_FLOAT&&(G=i.RG16F),O===i.UNSIGNED_BYTE&&(G=i.RG8)),v===i.RG_INTEGER&&(O===i.UNSIGNED_BYTE&&(G=i.RG8UI),O===i.UNSIGNED_SHORT&&(G=i.RG16UI),O===i.UNSIGNED_INT&&(G=i.RG32UI),O===i.BYTE&&(G=i.RG8I),O===i.SHORT&&(G=i.RG16I),O===i.INT&&(G=i.RG32I)),v===i.RGB_INTEGER&&(O===i.UNSIGNED_BYTE&&(G=i.RGB8UI),O===i.UNSIGNED_SHORT&&(G=i.RGB16UI),O===i.UNSIGNED_INT&&(G=i.RGB32UI),O===i.BYTE&&(G=i.RGB8I),O===i.SHORT&&(G=i.RGB16I),O===i.INT&&(G=i.RGB32I)),v===i.RGBA_INTEGER&&(O===i.UNSIGNED_BYTE&&(G=i.RGBA8UI),O===i.UNSIGNED_SHORT&&(G=i.RGBA16UI),O===i.UNSIGNED_INT&&(G=i.RGBA32UI),O===i.BYTE&&(G=i.RGBA8I),O===i.SHORT&&(G=i.RGBA16I),O===i.INT&&(G=i.RGBA32I)),v===i.RGB&&O===i.UNSIGNED_INT_5_9_9_9_REV&&(G=i.RGB9_E5),v===i.RGBA){const ot=k?gr:Jt.getTransfer(F);O===i.FLOAT&&(G=i.RGBA32F),O===i.HALF_FLOAT&&(G=i.RGBA16F),O===i.UNSIGNED_BYTE&&(G=ot===ie?i.SRGB8_ALPHA8:i.RGBA8),O===i.UNSIGNED_SHORT_4_4_4_4&&(G=i.RGBA4),O===i.UNSIGNED_SHORT_5_5_5_1&&(G=i.RGB5_A1)}return(G===i.R16F||G===i.R32F||G===i.RG16F||G===i.RG32F||G===i.RGBA16F||G===i.RGBA32F)&&t.get("EXT_color_buffer_float"),G}function y(b,v){let O;return b?v===null||v===ci||v===Ki?O=i.DEPTH24_STENCIL8:v===vn?O=i.DEPTH32F_STENCIL8:v===vs&&(O=i.DEPTH24_STENCIL8,console.warn("DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.")):v===null||v===ci||v===Ki?O=i.DEPTH_COMPONENT24:v===vn?O=i.DEPTH_COMPONENT32F:v===vs&&(O=i.DEPTH_COMPONENT16),O}function D(b,v){return m(b)===!0||b.isFramebufferTexture&&b.minFilter!==Je&&b.minFilter!==_n?Math.log2(Math.max(v.width,v.height))+1:b.mipmaps!==void 0&&b.mipmaps.length>0?b.mipmaps.length:b.isCompressedTexture&&Array.isArray(b.image)?v.mipmaps.length:1}function A(b){const v=b.target;v.removeEventListener("dispose",A),I(v),v.isVideoTexture&&h.delete(v)}function C(b){const v=b.target;v.removeEventListener("dispose",C),M(v)}function I(b){const v=n.get(b);if(v.__webglInit===void 0)return;const O=b.source,F=f.get(O);if(F){const k=F[v.__cacheKey];k.usedTimes--,k.usedTimes===0&&S(b),Object.keys(F).length===0&&f.delete(O)}n.remove(b)}function S(b){const v=n.get(b);i.deleteTexture(v.__webglTexture);const O=b.source,F=f.get(O);delete F[v.__cacheKey],a.memory.textures--}function M(b){const v=n.get(b);if(b.depthTexture&&(b.depthTexture.dispose(),n.remove(b.depthTexture)),b.isWebGLCubeRenderTarget)for(let F=0;F<6;F++){if(Array.isArray(v.__webglFramebuffer[F]))for(let k=0;k=s.maxTextures&&console.warn("THREE.WebGLTextures: Trying to use "+b+" texture units while this GPU supports only "+s.maxTextures),w+=1,b}function j(b){const v=[];return v.push(b.wrapS),v.push(b.wrapT),v.push(b.wrapR||0),v.push(b.magFilter),v.push(b.minFilter),v.push(b.anisotropy),v.push(b.internalFormat),v.push(b.format),v.push(b.type),v.push(b.generateMipmaps),v.push(b.premultiplyAlpha),v.push(b.flipY),v.push(b.unpackAlignment),v.push(b.colorSpace),v.join()}function $(b,v){const O=n.get(b);if(b.isVideoTexture&&bt(b),b.isRenderTargetTexture===!1&&b.version>0&&O.__version!==b.version){const F=b.image;if(F===null)console.warn("THREE.WebGLRenderer: Texture marked for update but no image data found.");else if(F.complete===!1)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{Z(O,b,v);return}}e.bindTexture(i.TEXTURE_2D,O.__webglTexture,i.TEXTURE0+v)}function q(b,v){const O=n.get(b);if(b.version>0&&O.__version!==b.version){Z(O,b,v);return}e.bindTexture(i.TEXTURE_2D_ARRAY,O.__webglTexture,i.TEXTURE0+v)}function J(b,v){const O=n.get(b);if(b.version>0&&O.__version!==b.version){Z(O,b,v);return}e.bindTexture(i.TEXTURE_3D,O.__webglTexture,i.TEXTURE0+v)}function X(b,v){const O=n.get(b);if(b.version>0&&O.__version!==b.version){nt(O,b,v);return}e.bindTexture(i.TEXTURE_CUBE_MAP,O.__webglTexture,i.TEXTURE0+v)}const it={[Ta]:i.REPEAT,[ri]:i.CLAMP_TO_EDGE,[wa]:i.MIRRORED_REPEAT},ft={[Je]:i.NEAREST,[yh]:i.NEAREST_MIPMAP_NEAREST,[Ps]:i.NEAREST_MIPMAP_LINEAR,[_n]:i.LINEAR,[Pr]:i.LINEAR_MIPMAP_NEAREST,[ai]:i.LINEAR_MIPMAP_LINEAR},Mt={[wh]:i.NEVER,[Lh]:i.ALWAYS,[Ah]:i.LESS,[oc]:i.LEQUAL,[Rh]:i.EQUAL,[Dh]:i.GEQUAL,[Ch]:i.GREATER,[Ph]:i.NOTEQUAL};function Nt(b,v){if(v.type===vn&&t.has("OES_texture_float_linear")===!1&&(v.magFilter===_n||v.magFilter===Pr||v.magFilter===Ps||v.magFilter===ai||v.minFilter===_n||v.minFilter===Pr||v.minFilter===Ps||v.minFilter===ai)&&console.warn("THREE.WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device."),i.texParameteri(b,i.TEXTURE_WRAP_S,it[v.wrapS]),i.texParameteri(b,i.TEXTURE_WRAP_T,it[v.wrapT]),(b===i.TEXTURE_3D||b===i.TEXTURE_2D_ARRAY)&&i.texParameteri(b,i.TEXTURE_WRAP_R,it[v.wrapR]),i.texParameteri(b,i.TEXTURE_MAG_FILTER,ft[v.magFilter]),i.texParameteri(b,i.TEXTURE_MIN_FILTER,ft[v.minFilter]),v.compareFunction&&(i.texParameteri(b,i.TEXTURE_COMPARE_MODE,i.COMPARE_REF_TO_TEXTURE),i.texParameteri(b,i.TEXTURE_COMPARE_FUNC,Mt[v.compareFunction])),t.has("EXT_texture_filter_anisotropic")===!0){if(v.magFilter===Je||v.minFilter!==Ps&&v.minFilter!==ai||v.type===vn&&t.has("OES_texture_float_linear")===!1)return;if(v.anisotropy>1||n.get(v).__currentAnisotropy){const O=t.get("EXT_texture_filter_anisotropic");i.texParameterf(b,O.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(v.anisotropy,s.getMaxAnisotropy())),n.get(v).__currentAnisotropy=v.anisotropy}}}function Wt(b,v){let O=!1;b.__webglInit===void 0&&(b.__webglInit=!0,v.addEventListener("dispose",A));const F=v.source;let k=f.get(F);k===void 0&&(k={},f.set(F,k));const G=j(v);if(G!==b.__cacheKey){k[G]===void 0&&(k[G]={texture:i.createTexture(),usedTimes:0},a.memory.textures++,O=!0),k[G].usedTimes++;const ot=k[b.__cacheKey];ot!==void 0&&(k[b.__cacheKey].usedTimes--,ot.usedTimes===0&&S(v)),b.__cacheKey=G,b.__webglTexture=k[G].texture}return O}function Z(b,v,O){let F=i.TEXTURE_2D;(v.isDataArrayTexture||v.isCompressedArrayTexture)&&(F=i.TEXTURE_2D_ARRAY),v.isData3DTexture&&(F=i.TEXTURE_3D);const k=Wt(b,v),G=v.source;e.bindTexture(F,b.__webglTexture,i.TEXTURE0+O);const ot=n.get(G);if(G.version!==ot.__version||k===!0){e.activeTexture(i.TEXTURE0+O);const Q=Jt.getPrimaries(Jt.workingColorSpace),lt=v.colorSpace===kn?null:Jt.getPrimaries(v.colorSpace),Ft=v.colorSpace===kn||Q===lt?i.NONE:i.BROWSER_DEFAULT_WEBGL;i.pixelStorei(i.UNPACK_FLIP_Y_WEBGL,v.flipY),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,v.premultiplyAlpha),i.pixelStorei(i.UNPACK_ALIGNMENT,v.unpackAlignment),i.pixelStorei(i.UNPACK_COLORSPACE_CONVERSION_WEBGL,Ft);let tt=_(v.image,!1,s.maxTextureSize);tt=oe(v,tt);const mt=r.convert(v.format,v.colorSpace),At=r.convert(v.type);let Dt=E(v.internalFormat,mt,At,v.colorSpace,v.isVideoTexture);Nt(F,v);let pt;const Xt=v.mipmaps,Ot=v.isVideoTexture!==!0,Qt=ot.__version===void 0||k===!0,L=G.dataReady,ct=D(v,tt);if(v.isDepthTexture)Dt=y(v.format===$i,v.type),Qt&&(Ot?e.texStorage2D(i.TEXTURE_2D,1,Dt,tt.width,tt.height):e.texImage2D(i.TEXTURE_2D,0,Dt,tt.width,tt.height,0,mt,At,null));else if(v.isDataTexture)if(Xt.length>0){Ot&&Qt&&e.texStorage2D(i.TEXTURE_2D,ct,Dt,Xt[0].width,Xt[0].height);for(let W=0,K=Xt.length;W0){const ht=hl(pt.width,pt.height,v.format,v.type);for(const ut of v.layerUpdates){const Ut=pt.data.subarray(ut*ht/pt.data.BYTES_PER_ELEMENT,(ut+1)*ht/pt.data.BYTES_PER_ELEMENT);e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,W,0,0,ut,pt.width,pt.height,1,mt,Ut)}v.clearLayerUpdates()}else e.compressedTexSubImage3D(i.TEXTURE_2D_ARRAY,W,0,0,0,pt.width,pt.height,tt.depth,mt,pt.data)}else e.compressedTexImage3D(i.TEXTURE_2D_ARRAY,W,Dt,pt.width,pt.height,tt.depth,0,pt.data,0,0);else console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()");else Ot?L&&e.texSubImage3D(i.TEXTURE_2D_ARRAY,W,0,0,0,pt.width,pt.height,tt.depth,mt,At,pt.data):e.texImage3D(i.TEXTURE_2D_ARRAY,W,Dt,pt.width,pt.height,tt.depth,0,mt,At,pt.data)}else{Ot&&Qt&&e.texStorage2D(i.TEXTURE_2D,ct,Dt,Xt[0].width,Xt[0].height);for(let W=0,K=Xt.length;W0){const W=hl(tt.width,tt.height,v.format,v.type);for(const K of v.layerUpdates){const ht=tt.data.subarray(K*W/tt.data.BYTES_PER_ELEMENT,(K+1)*W/tt.data.BYTES_PER_ELEMENT);e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,K,tt.width,tt.height,1,mt,At,ht)}v.clearLayerUpdates()}else e.texSubImage3D(i.TEXTURE_2D_ARRAY,0,0,0,0,tt.width,tt.height,tt.depth,mt,At,tt.data)}else e.texImage3D(i.TEXTURE_2D_ARRAY,0,Dt,tt.width,tt.height,tt.depth,0,mt,At,tt.data);else if(v.isData3DTexture)Ot?(Qt&&e.texStorage3D(i.TEXTURE_3D,ct,Dt,tt.width,tt.height,tt.depth),L&&e.texSubImage3D(i.TEXTURE_3D,0,0,0,0,tt.width,tt.height,tt.depth,mt,At,tt.data)):e.texImage3D(i.TEXTURE_3D,0,Dt,tt.width,tt.height,tt.depth,0,mt,At,tt.data);else if(v.isFramebufferTexture){if(Qt)if(Ot)e.texStorage2D(i.TEXTURE_2D,ct,Dt,tt.width,tt.height);else{let W=tt.width,K=tt.height;for(let ht=0;ht>=1,K>>=1}}else if(Xt.length>0){if(Ot&&Qt){const W=Et(Xt[0]);e.texStorage2D(i.TEXTURE_2D,ct,Dt,W.width,W.height)}for(let W=0,K=Xt.length;W0&&ct++;const K=Et(mt[0]);e.texStorage2D(i.TEXTURE_CUBE_MAP,ct,Xt,K.width,K.height)}for(let K=0;K<6;K++)if(tt){Ot?L&&e.texSubImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+K,0,0,0,mt[K].width,mt[K].height,Dt,pt,mt[K].data):e.texImage2D(i.TEXTURE_CUBE_MAP_POSITIVE_X+K,0,Xt,mt[K].width,mt[K].height,0,Dt,pt,mt[K].data);for(let ht=0;ht>G),At=Math.max(1,v.height>>G);k===i.TEXTURE_3D||k===i.TEXTURE_2D_ARRAY?e.texImage3D(k,G,lt,mt,At,v.depth,0,ot,Q,null):e.texImage2D(k,G,lt,mt,At,0,ot,Q,null)}e.bindFramebuffer(i.FRAMEBUFFER,b),jt(v)?o.framebufferTexture2DMultisampleEXT(i.FRAMEBUFFER,F,k,tt.__webglTexture,0,qt(v)):(k===i.TEXTURE_2D||k>=i.TEXTURE_CUBE_MAP_POSITIVE_X&&k<=i.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&i.framebufferTexture2D(i.FRAMEBUFFER,F,k,tt.__webglTexture,G),e.bindFramebuffer(i.FRAMEBUFFER,null)}function at(b,v,O){if(i.bindRenderbuffer(i.RENDERBUFFER,b),v.depthBuffer){const F=v.depthTexture,k=F&&F.isDepthTexture?F.type:null,G=y(v.stencilBuffer,k),ot=v.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,Q=qt(v);jt(v)?o.renderbufferStorageMultisampleEXT(i.RENDERBUFFER,Q,G,v.width,v.height):O?i.renderbufferStorageMultisample(i.RENDERBUFFER,Q,G,v.width,v.height):i.renderbufferStorage(i.RENDERBUFFER,G,v.width,v.height),i.framebufferRenderbuffer(i.FRAMEBUFFER,ot,i.RENDERBUFFER,b)}else{const F=v.textures;for(let k=0;k{delete v.__boundDepthTexture,delete v.__depthDisposeCallback,F.removeEventListener("dispose",k)};F.addEventListener("dispose",k),v.__depthDisposeCallback=k}v.__boundDepthTexture=F}if(b.depthTexture&&!v.__autoAllocateDepthBuffer){if(O)throw new Error("target.depthTexture not supported in Cube render targets");wt(v.__webglFramebuffer,b)}else if(O){v.__webglDepthbuffer=[];for(let F=0;F<6;F++)if(e.bindFramebuffer(i.FRAMEBUFFER,v.__webglFramebuffer[F]),v.__webglDepthbuffer[F]===void 0)v.__webglDepthbuffer[F]=i.createRenderbuffer(),at(v.__webglDepthbuffer[F],b,!1);else{const k=b.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,G=v.__webglDepthbuffer[F];i.bindRenderbuffer(i.RENDERBUFFER,G),i.framebufferRenderbuffer(i.FRAMEBUFFER,k,i.RENDERBUFFER,G)}}else if(e.bindFramebuffer(i.FRAMEBUFFER,v.__webglFramebuffer),v.__webglDepthbuffer===void 0)v.__webglDepthbuffer=i.createRenderbuffer(),at(v.__webglDepthbuffer,b,!1);else{const F=b.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,k=v.__webglDepthbuffer;i.bindRenderbuffer(i.RENDERBUFFER,k),i.framebufferRenderbuffer(i.FRAMEBUFFER,F,i.RENDERBUFFER,k)}e.bindFramebuffer(i.FRAMEBUFFER,null)}function kt(b,v,O){const F=n.get(b);v!==void 0&&_t(F.__webglFramebuffer,b,b.texture,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,0),O!==void 0&&Pt(b)}function le(b){const v=b.texture,O=n.get(b),F=n.get(v);b.addEventListener("dispose",C);const k=b.textures,G=b.isWebGLCubeRenderTarget===!0,ot=k.length>1;if(ot||(F.__webglTexture===void 0&&(F.__webglTexture=i.createTexture()),F.__version=v.version,a.memory.textures++),G){O.__webglFramebuffer=[];for(let Q=0;Q<6;Q++)if(v.mipmaps&&v.mipmaps.length>0){O.__webglFramebuffer[Q]=[];for(let lt=0;lt0){O.__webglFramebuffer=[];for(let Q=0;Q0&&jt(b)===!1){O.__webglMultisampledFramebuffer=i.createFramebuffer(),O.__webglColorRenderbuffer=[],e.bindFramebuffer(i.FRAMEBUFFER,O.__webglMultisampledFramebuffer);for(let Q=0;Q0)for(let lt=0;lt0)for(let lt=0;lt0){if(jt(b)===!1){const v=b.textures,O=b.width,F=b.height;let k=i.COLOR_BUFFER_BIT;const G=b.stencilBuffer?i.DEPTH_STENCIL_ATTACHMENT:i.DEPTH_ATTACHMENT,ot=n.get(b),Q=v.length>1;if(Q)for(let lt=0;lt0&&t.has("WEBGL_multisampled_render_to_texture")===!0&&v.__useRenderToTexture!==!1}function bt(b){const v=a.render.frame;h.get(b)!==v&&(h.set(b,v),b.update())}function oe(b,v){const O=b.colorSpace,F=b.format,k=b.type;return b.isCompressedTexture===!0||b.isVideoTexture===!0||O!==Ji&&O!==kn&&(Jt.getTransfer(O)===ie?(F!==dn||k!==Dn)&&console.warn("THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType."):console.error("THREE.WebGLTextures: Unsupported texture color space:",O)),v}function Et(b){return typeof HTMLImageElement<"u"&&b instanceof HTMLImageElement?(c.width=b.naturalWidth||b.width,c.height=b.naturalHeight||b.height):typeof VideoFrame<"u"&&b instanceof VideoFrame?(c.width=b.displayWidth,c.height=b.displayHeight):(c.width=b.width,c.height=b.height),c}this.allocateTextureUnit=V,this.resetTextureUnits=Y,this.setTexture2D=$,this.setTexture2DArray=q,this.setTexture3D=J,this.setTextureCube=X,this.rebindTextures=kt,this.setupRenderTarget=le,this.updateRenderTargetMipmap=Ht,this.updateMultisampleRenderTarget=Ue,this.setupDepthRenderbuffer=Pt,this.setupFrameBufferTexture=_t,this.useMultisampledRTT=jt}function $m(i,t){function e(n,s=kn){let r;const a=Jt.getTransfer(s);if(n===Dn)return i.UNSIGNED_BYTE;if(n===fo)return i.UNSIGNED_SHORT_4_4_4_4;if(n===po)return i.UNSIGNED_SHORT_5_5_5_1;if(n===Ql)return i.UNSIGNED_INT_5_9_9_9_REV;if(n===$l)return i.BYTE;if(n===Jl)return i.SHORT;if(n===vs)return i.UNSIGNED_SHORT;if(n===uo)return i.INT;if(n===ci)return i.UNSIGNED_INT;if(n===vn)return i.FLOAT;if(n===Cn)return i.HALF_FLOAT;if(n===tc)return i.ALPHA;if(n===ec)return i.RGB;if(n===dn)return i.RGBA;if(n===nc)return i.LUMINANCE;if(n===ic)return i.LUMINANCE_ALPHA;if(n===Gi)return i.DEPTH_COMPONENT;if(n===$i)return i.DEPTH_STENCIL;if(n===mo)return i.RED;if(n===go)return i.RED_INTEGER;if(n===sc)return i.RG;if(n===_o)return i.RG_INTEGER;if(n===vo)return i.RGBA_INTEGER;if(n===ar||n===or||n===lr||n===cr)if(a===ie)if(r=t.get("WEBGL_compressed_texture_s3tc_srgb"),r!==null){if(n===ar)return r.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===or)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===lr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===cr)return r.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(r=t.get("WEBGL_compressed_texture_s3tc"),r!==null){if(n===ar)return r.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===or)return r.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===lr)return r.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===cr)return r.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===Aa||n===Ra||n===Ca||n===Pa)if(r=t.get("WEBGL_compressed_texture_pvrtc"),r!==null){if(n===Aa)return r.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===Ra)return r.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===Ca)return r.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===Pa)return r.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===Da||n===La||n===Ua)if(r=t.get("WEBGL_compressed_texture_etc"),r!==null){if(n===Da||n===La)return a===ie?r.COMPRESSED_SRGB8_ETC2:r.COMPRESSED_RGB8_ETC2;if(n===Ua)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:r.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(n===Ia||n===Na||n===Fa||n===Oa||n===Ba||n===za||n===ka||n===Ha||n===Va||n===Ga||n===Wa||n===Xa||n===Ya||n===qa)if(r=t.get("WEBGL_compressed_texture_astc"),r!==null){if(n===Ia)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:r.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===Na)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:r.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===Fa)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:r.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===Oa)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:r.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===Ba)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:r.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===za)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:r.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===ka)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:r.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===Ha)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:r.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===Va)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:r.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===Ga)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:r.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===Wa)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:r.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===Xa)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:r.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===Ya)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:r.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===qa)return a===ie?r.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:r.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===hr||n===ja||n===Za)if(r=t.get("EXT_texture_compression_bptc"),r!==null){if(n===hr)return a===ie?r.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:r.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===ja)return r.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===Za)return r.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===rc||n===Ka||n===$a||n===Ja)if(r=t.get("EXT_texture_compression_rgtc"),r!==null){if(n===hr)return r.COMPRESSED_RED_RGTC1_EXT;if(n===Ka)return r.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===$a)return r.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===Ja)return r.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===Ki?i.UNSIGNED_INT_24_8:i[n]!==void 0?i[n]:null}return{convert:e}}const Jm={type:"move"};class la{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null&&(this._hand=new zi,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null&&(this._targetRay=new zi,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new P,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new P),this._targetRay}getGripSpace(){return this._grip===null&&(this._grip=new zi,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new P,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new P),this._grip}dispatchEvent(t){return this._targetRay!==null&&this._targetRay.dispatchEvent(t),this._grip!==null&&this._grip.dispatchEvent(t),this._hand!==null&&this._hand.dispatchEvent(t),this}connect(t){if(t&&t.hand){const e=this._hand;if(e)for(const n of t.hand.values())this._getHandJoint(e,n)}return this.dispatchEvent({type:"connected",data:t}),this}disconnect(t){return this.dispatchEvent({type:"disconnected",data:t}),this._targetRay!==null&&(this._targetRay.visible=!1),this._grip!==null&&(this._grip.visible=!1),this._hand!==null&&(this._hand.visible=!1),this}update(t,e,n){let s=null,r=null,a=null;const o=this._targetRay,l=this._grip,c=this._hand;if(t&&e.session.visibilityState!=="visible-blurred"){if(c&&t.hand){a=!0;for(const _ of t.hand.values()){const m=e.getJointPose(_,n),p=this._getHandJoint(c,_);m!==null&&(p.matrix.fromArray(m.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.matrixWorldNeedsUpdate=!0,p.jointRadius=m.radius),p.visible=m!==null}const h=c.joints["index-finger-tip"],d=c.joints["thumb-tip"],f=h.position.distanceTo(d.position),u=.02,g=.005;c.inputState.pinching&&f>u+g?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&f<=u-g&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}else l!==null&&t.gripSpace&&(r=e.getPose(t.gripSpace,n),r!==null&&(l.matrix.fromArray(r.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),l.matrixWorldNeedsUpdate=!0,r.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(r.linearVelocity)):l.hasLinearVelocity=!1,r.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(r.angularVelocity)):l.hasAngularVelocity=!1));o!==null&&(s=e.getPose(t.targetRaySpace,n),s===null&&r!==null&&(s=r),s!==null&&(o.matrix.fromArray(s.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,s.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(s.linearVelocity)):o.hasLinearVelocity=!1,s.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(s.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Jm)))}return o!==null&&(o.visible=s!==null),l!==null&&(l.visible=r!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(t,e){if(t.joints[e.jointName]===void 0){const n=new zi;n.matrixAutoUpdate=!1,n.visible=!1,t.joints[e.jointName]=n,t.add(n)}return t.joints[e.jointName]}}const Qm=` void main() { gl_Position = vec4( position, 1.0 ); -}`,jm=` +}`,tg=` uniform sampler2DArray depthColor; uniform float depthWidth; uniform float depthHeight; @@ -3824,7 +3824,7 @@ void main() { } -}`;class Zm{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(t,e,n){if(this.texture===null){const s=new be,r=t.properties.get(s);r.__webglTexture=e.texture,(e.depthNear!==n.depthNear||e.depthFar!==n.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=s}}getMesh(t){if(this.texture!==null&&this.mesh===null){const e=t.cameras[0].viewport,n=new ze({vertexShader:qm,fragmentShader:jm,uniforms:{depthColor:{value:this.texture},depthWidth:{value:e.z},depthHeight:{value:e.w}}});this.mesh=new Me(new _s(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}}class Km extends ri{constructor(t,e){super();const n=this;let s=null,r=1,a=null,o="local-floor",l=1,c=null,h=null,d=null,p=null,u=null,g=null;const v=new Zm,m=e.getContextAttributes();let f=null,T=null;const b=[],S=[],D=new Mt;let w=null;const R=new je;R.viewport=new le;const U=new je;U.viewport=new le;const y=[R,U],M=new fu;let P=null,W=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(Y){let nt=b[Y];return nt===void 0&&(nt=new na,b[Y]=nt),nt.getTargetRaySpace()},this.getControllerGrip=function(Y){let nt=b[Y];return nt===void 0&&(nt=new na,b[Y]=nt),nt.getGripSpace()},this.getHand=function(Y){let nt=b[Y];return nt===void 0&&(nt=new na,b[Y]=nt),nt.getHandSpace()};function z(Y){const nt=S.indexOf(Y.inputSource);if(nt===-1)return;const _t=b[nt];_t!==void 0&&(_t.update(Y.inputSource,Y.frame,c||a),_t.dispatchEvent({type:Y.type,data:Y.inputSource}))}function G(){s.removeEventListener("select",z),s.removeEventListener("selectstart",z),s.removeEventListener("selectend",z),s.removeEventListener("squeeze",z),s.removeEventListener("squeezestart",z),s.removeEventListener("squeezeend",z),s.removeEventListener("end",G),s.removeEventListener("inputsourceschange",$);for(let Y=0;Y=0&&(S[ot]=null,b[ot].disconnect(_t))}for(let nt=0;nt=S.length){S.push(_t),ot=Lt;break}else if(S[Lt]===null){S[Lt]=_t,ot=Lt;break}if(ot===-1)break}const Pt=b[ot];Pt&&Pt.connect(_t)}}const X=new C,Q=new C;function k(Y,nt,_t){X.setFromMatrixPosition(nt.matrixWorld),Q.setFromMatrixPosition(_t.matrixWorld);const ot=X.distanceTo(Q),Pt=nt.projectionMatrix.elements,Lt=_t.projectionMatrix.elements,Ht=Pt[14]/(Pt[10]-1),he=Pt[14]/(Pt[10]+1),Yt=(Pt[9]+1)/Pt[5],fe=(Pt[9]-1)/Pt[5],A=(Pt[8]-1)/Pt[0],ke=(Lt[8]+1)/Lt[0],qt=Ht*A,jt=Ht*ke,J=ot/(-A+ke),Et=J*-A;if(nt.matrixWorld.decompose(Y.position,Y.quaternion,Y.scale),Y.translateX(Et),Y.translateZ(J),Y.matrixWorld.compose(Y.position,Y.quaternion,Y.scale),Y.matrixWorldInverse.copy(Y.matrixWorld).invert(),Pt[10]===-1)Y.projectionMatrix.copy(nt.projectionMatrix),Y.projectionMatrixInverse.copy(nt.projectionMatrixInverse);else{const ct=Ht+J,E=he+J,_=qt-Et,F=jt+(ot-Et),q=Yt*he/E*ct,K=fe*he/E*ct;Y.projectionMatrix.makePerspective(_,F,q,K,ct,E),Y.projectionMatrixInverse.copy(Y.projectionMatrix).invert()}}function it(Y,nt){nt===null?Y.matrixWorld.copy(Y.matrix):Y.matrixWorld.multiplyMatrices(nt.matrixWorld,Y.matrix),Y.matrixWorldInverse.copy(Y.matrixWorld).invert()}this.updateCamera=function(Y){if(s===null)return;let nt=Y.near,_t=Y.far;v.texture!==null&&(v.depthNear>0&&(nt=v.depthNear),v.depthFar>0&&(_t=v.depthFar)),M.near=U.near=R.near=nt,M.far=U.far=R.far=_t,(P!==M.near||W!==M.far)&&(s.updateRenderState({depthNear:M.near,depthFar:M.far}),P=M.near,W=M.far),R.layers.mask=Y.layers.mask|2,U.layers.mask=Y.layers.mask|4,M.layers.mask=R.layers.mask|U.layers.mask;const ot=Y.parent,Pt=M.cameras;it(M,ot);for(let Lt=0;Lt0&&(m.alphaTest.value=f.alphaTest);const T=t.get(f),b=T.envMap,S=T.envMapRotation;b&&(m.envMap.value=b,jn.copy(S),jn.x*=-1,jn.y*=-1,jn.z*=-1,b.isCubeTexture&&b.isRenderTargetTexture===!1&&(jn.y*=-1,jn.z*=-1),m.envMapRotation.value.setFromMatrix4($m.makeRotationFromEuler(jn)),m.flipEnvMap.value=b.isCubeTexture&&b.isRenderTargetTexture===!1?-1:1,m.reflectivity.value=f.reflectivity,m.ior.value=f.ior,m.refractionRatio.value=f.refractionRatio),f.lightMap&&(m.lightMap.value=f.lightMap,m.lightMapIntensity.value=f.lightMapIntensity,e(f.lightMap,m.lightMapTransform)),f.aoMap&&(m.aoMap.value=f.aoMap,m.aoMapIntensity.value=f.aoMapIntensity,e(f.aoMap,m.aoMapTransform))}function a(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,f.map&&(m.map.value=f.map,e(f.map,m.mapTransform))}function o(m,f){m.dashSize.value=f.dashSize,m.totalSize.value=f.dashSize+f.gapSize,m.scale.value=f.scale}function l(m,f,T,b){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.size.value=f.size*T,m.scale.value=b*.5,f.map&&(m.map.value=f.map,e(f.map,m.uvTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,e(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function c(m,f){m.diffuse.value.copy(f.color),m.opacity.value=f.opacity,m.rotation.value=f.rotation,f.map&&(m.map.value=f.map,e(f.map,m.mapTransform)),f.alphaMap&&(m.alphaMap.value=f.alphaMap,e(f.alphaMap,m.alphaMapTransform)),f.alphaTest>0&&(m.alphaTest.value=f.alphaTest)}function h(m,f){m.specular.value.copy(f.specular),m.shininess.value=Math.max(f.shininess,1e-4)}function d(m,f){f.gradientMap&&(m.gradientMap.value=f.gradientMap)}function p(m,f){m.metalness.value=f.metalness,f.metalnessMap&&(m.metalnessMap.value=f.metalnessMap,e(f.metalnessMap,m.metalnessMapTransform)),m.roughness.value=f.roughness,f.roughnessMap&&(m.roughnessMap.value=f.roughnessMap,e(f.roughnessMap,m.roughnessMapTransform)),f.envMap&&(m.envMapIntensity.value=f.envMapIntensity)}function u(m,f,T){m.ior.value=f.ior,f.sheen>0&&(m.sheenColor.value.copy(f.sheenColor).multiplyScalar(f.sheen),m.sheenRoughness.value=f.sheenRoughness,f.sheenColorMap&&(m.sheenColorMap.value=f.sheenColorMap,e(f.sheenColorMap,m.sheenColorMapTransform)),f.sheenRoughnessMap&&(m.sheenRoughnessMap.value=f.sheenRoughnessMap,e(f.sheenRoughnessMap,m.sheenRoughnessMapTransform))),f.clearcoat>0&&(m.clearcoat.value=f.clearcoat,m.clearcoatRoughness.value=f.clearcoatRoughness,f.clearcoatMap&&(m.clearcoatMap.value=f.clearcoatMap,e(f.clearcoatMap,m.clearcoatMapTransform)),f.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=f.clearcoatRoughnessMap,e(f.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),f.clearcoatNormalMap&&(m.clearcoatNormalMap.value=f.clearcoatNormalMap,e(f.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(f.clearcoatNormalScale),f.side===We&&m.clearcoatNormalScale.value.negate())),f.dispersion>0&&(m.dispersion.value=f.dispersion),f.iridescence>0&&(m.iridescence.value=f.iridescence,m.iridescenceIOR.value=f.iridescenceIOR,m.iridescenceThicknessMinimum.value=f.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=f.iridescenceThicknessRange[1],f.iridescenceMap&&(m.iridescenceMap.value=f.iridescenceMap,e(f.iridescenceMap,m.iridescenceMapTransform)),f.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=f.iridescenceThicknessMap,e(f.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),f.transmission>0&&(m.transmission.value=f.transmission,m.transmissionSamplerMap.value=T.texture,m.transmissionSamplerSize.value.set(T.width,T.height),f.transmissionMap&&(m.transmissionMap.value=f.transmissionMap,e(f.transmissionMap,m.transmissionMapTransform)),m.thickness.value=f.thickness,f.thicknessMap&&(m.thicknessMap.value=f.thicknessMap,e(f.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=f.attenuationDistance,m.attenuationColor.value.copy(f.attenuationColor)),f.anisotropy>0&&(m.anisotropyVector.value.set(f.anisotropy*Math.cos(f.anisotropyRotation),f.anisotropy*Math.sin(f.anisotropyRotation)),f.anisotropyMap&&(m.anisotropyMap.value=f.anisotropyMap,e(f.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=f.specularIntensity,m.specularColor.value.copy(f.specularColor),f.specularColorMap&&(m.specularColorMap.value=f.specularColorMap,e(f.specularColorMap,m.specularColorMapTransform)),f.specularIntensityMap&&(m.specularIntensityMap.value=f.specularIntensityMap,e(f.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,f){f.matcap&&(m.matcap.value=f.matcap)}function v(m,f){const T=t.get(f).light;m.referencePosition.value.setFromMatrixPosition(T.matrixWorld),m.nearDistance.value=T.shadow.camera.near,m.farDistance.value=T.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:s}}function Qm(i,t,e,n){let s={},r={},a=[];const o=i.getParameter(i.MAX_UNIFORM_BUFFER_BINDINGS);function l(T,b){const S=b.program;n.uniformBlockBinding(T,S)}function c(T,b){let S=s[T.id];S===void 0&&(g(T),S=h(T),s[T.id]=S,T.addEventListener("dispose",m));const D=b.program;n.updateUBOMapping(T,D);const w=t.render.frame;r[T.id]!==w&&(p(T),r[T.id]=w)}function h(T){const b=d();T.__bindingPointIndex=b;const S=i.createBuffer(),D=T.__size,w=T.usage;return i.bindBuffer(i.UNIFORM_BUFFER,S),i.bufferData(i.UNIFORM_BUFFER,D,w),i.bindBuffer(i.UNIFORM_BUFFER,null),i.bindBufferBase(i.UNIFORM_BUFFER,b,S),S}function d(){for(let T=0;T0&&(S+=D-w),T.__size=S,T.__cache={},this}function v(T){const b={boundary:0,storage:0};return typeof T=="number"||typeof T=="boolean"?(b.boundary=4,b.storage=4):T.isVector2?(b.boundary=8,b.storage=8):T.isVector3||T.isColor?(b.boundary=16,b.storage=12):T.isVector4?(b.boundary=16,b.storage=16):T.isMatrix3?(b.boundary=48,b.storage=48):T.isMatrix4?(b.boundary=64,b.storage=64):T.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",T),b}function m(T){const b=T.target;b.removeEventListener("dispose",m);const S=a.indexOf(b.__bindingPointIndex);a.splice(S,1),i.deleteBuffer(s[b.id]),delete s[b.id],delete r[b.id]}function f(){for(const T in s)i.deleteBuffer(s[T]);a=[],s={},r={}}return{bind:l,update:c,dispose:f}}class tg{constructor(t={}){const{canvas:e=Ch(),context:n=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:d=!1,reverseDepthBuffer:p=!1}=t;this.isWebGLRenderer=!0;let u;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");u=n.getContextAttributes().alpha}else u=a;const g=new Uint32Array(4),v=new Int32Array(4);let m=null,f=null;const T=[],b=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=Qe,this.toneMapping=Bn,this.toneMappingExposure=1;const S=this;let D=!1,w=0,R=0,U=null,y=-1,M=null;const P=new le,W=new le;let z=null;const G=new rt(0);let $=0,X=e.width,Q=e.height,k=1,it=null,ft=null;const St=new le(0,0,X,Q),Ft=new le(0,0,X,Q);let Vt=!1;const Y=new oo;let nt=!1,_t=!1;this.transmissionResolutionScale=1;const ot=new ie,Pt=new ie,Lt=new C,Ht=new le,he={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Yt=!1;function fe(){return U===null?k:1}let A=n;function ke(x,I){return e.getContext(x,I)}try{const x={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:d};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${Ja}`),e.addEventListener("webglcontextlost",Z,!1),e.addEventListener("webglcontextrestored",dt,!1),e.addEventListener("webglcontextcreationerror",ht,!1),A===null){const I="webgl2";if(A=ke(I,x),A===null)throw ke(I)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(x){throw console.error("THREE.WebGLRenderer: "+x.message),x}let qt,jt,J,Et,ct,E,_,F,q,K,j,yt,lt,pt,Gt,et,mt,Tt,Ut,gt,Zt,Ot,se,L;function at(){qt=new cp(A),qt.init(),Ot=new Xm(A,qt),jt=new ip(A,qt,t,Ot),J=new Gm(A,qt),jt.reverseDepthBuffer&&p&&J.buffers.depth.setReversed(!0),Et=new dp(A),ct=new Pm,E=new Wm(A,qt,J,ct,jt,Ot,Et),_=new rp(S),F=new lp(S),q=new vu(A),se=new ep(A,q),K=new hp(A,q,Et,se),j=new pp(A,K,q,Et),Ut=new fp(A,jt,E),et=new sp(ct),yt=new Cm(S,_,F,qt,jt,se,et),lt=new Jm(S,ct),pt=new Lm,Gt=new Bm(qt),Tt=new tp(S,_,F,J,j,u,l),mt=new Hm(S,j,jt),L=new Qm(A,Et,jt,J),gt=new np(A,qt,Et),Zt=new up(A,qt,Et),Et.programs=yt.programs,S.capabilities=jt,S.extensions=qt,S.properties=ct,S.renderLists=pt,S.shadowMap=mt,S.state=J,S.info=Et}at();const H=new Km(S,A);this.xr=H,this.getContext=function(){return A},this.getContextAttributes=function(){return A.getContextAttributes()},this.forceContextLoss=function(){const x=qt.get("WEBGL_lose_context");x&&x.loseContext()},this.forceContextRestore=function(){const x=qt.get("WEBGL_lose_context");x&&x.restoreContext()},this.getPixelRatio=function(){return k},this.setPixelRatio=function(x){x!==void 0&&(k=x,this.setSize(X,Q,!1))},this.getSize=function(x){return x.set(X,Q)},this.setSize=function(x,I,O=!0){if(H.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}X=x,Q=I,e.width=Math.floor(x*k),e.height=Math.floor(I*k),O===!0&&(e.style.width=x+"px",e.style.height=I+"px"),this.setViewport(0,0,x,I)},this.getDrawingBufferSize=function(x){return x.set(X*k,Q*k).floor()},this.setDrawingBufferSize=function(x,I,O){X=x,Q=I,k=O,e.width=Math.floor(x*O),e.height=Math.floor(I*O),this.setViewport(0,0,x,I)},this.getCurrentViewport=function(x){return x.copy(P)},this.getViewport=function(x){return x.copy(St)},this.setViewport=function(x,I,O,B){x.isVector4?St.set(x.x,x.y,x.z,x.w):St.set(x,I,O,B),J.viewport(P.copy(St).multiplyScalar(k).round())},this.getScissor=function(x){return x.copy(Ft)},this.setScissor=function(x,I,O,B){x.isVector4?Ft.set(x.x,x.y,x.z,x.w):Ft.set(x,I,O,B),J.scissor(W.copy(Ft).multiplyScalar(k).round())},this.getScissorTest=function(){return Vt},this.setScissorTest=function(x){J.setScissorTest(Vt=x)},this.setOpaqueSort=function(x){it=x},this.setTransparentSort=function(x){ft=x},this.getClearColor=function(x){return x.copy(Tt.getClearColor())},this.setClearColor=function(){Tt.setClearColor.apply(Tt,arguments)},this.getClearAlpha=function(){return Tt.getClearAlpha()},this.setClearAlpha=function(){Tt.setClearAlpha.apply(Tt,arguments)},this.clear=function(x=!0,I=!0,O=!0){let B=0;if(x){let N=!1;if(U!==null){const tt=U.texture.format;N=tt===ro||tt===so||tt===io}if(N){const tt=U.texture.type,ut=tt===Rn||tt===ii||tt===us||tt===ki||tt===to||tt===eo,vt=Tt.getClearColor(),xt=Tt.getClearAlpha(),It=vt.r,Nt=vt.g,Rt=vt.b;ut?(g[0]=It,g[1]=Nt,g[2]=Rt,g[3]=xt,A.clearBufferuiv(A.COLOR,0,g)):(v[0]=It,v[1]=Nt,v[2]=Rt,v[3]=xt,A.clearBufferiv(A.COLOR,0,v))}else B|=A.COLOR_BUFFER_BIT}I&&(B|=A.DEPTH_BUFFER_BIT),O&&(B|=A.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),A.clear(B)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",Z,!1),e.removeEventListener("webglcontextrestored",dt,!1),e.removeEventListener("webglcontextcreationerror",ht,!1),Tt.dispose(),pt.dispose(),Gt.dispose(),ct.dispose(),_.dispose(),F.dispose(),j.dispose(),se.dispose(),L.dispose(),yt.dispose(),H.dispose(),H.removeEventListener("sessionstart",Yi),H.removeEventListener("sessionend",xs),hn.stop()};function Z(x){x.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),D=!0}function dt(){console.log("THREE.WebGLRenderer: Context Restored."),D=!1;const x=Et.autoReset,I=mt.enabled,O=mt.autoUpdate,B=mt.needsUpdate,N=mt.type;at(),Et.autoReset=x,mt.enabled=I,mt.autoUpdate=O,mt.needsUpdate=B,mt.type=N}function ht(x){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",x.statusMessage)}function wt(x){const I=x.target;I.removeEventListener("dispose",wt),Kt(I)}function Kt(x){ce(x),ct.remove(x)}function ce(x){const I=ct.get(x).programs;I!==void 0&&(I.forEach(function(O){yt.releaseProgram(O)}),x.isShaderMaterial&&yt.releaseShaderCache(x))}this.renderBufferDirect=function(x,I,O,B,N,tt){I===null&&(I=he);const ut=N.isMesh&&N.matrixWorld.determinant()<0,vt=Ec(x,I,O,B,N);J.setMaterial(B,ut);let xt=O.index,It=1;if(B.wireframe===!0){if(xt=K.getWireframeAttribute(O),xt===void 0)return;It=2}const Nt=O.drawRange,Rt=O.attributes.position;let $t=Nt.start*It,ee=(Nt.start+Nt.count)*It;tt!==null&&($t=Math.max($t,tt.start*It),ee=Math.min(ee,(tt.start+tt.count)*It)),xt!==null?($t=Math.max($t,0),ee=Math.min(ee,xt.count)):Rt!=null&&($t=Math.max($t,0),ee=Math.min(ee,Rt.count));const _e=ee-$t;if(_e<0||_e===1/0)return;se.setup(N,B,vt,O,xt);let pe,Jt=gt;if(xt!==null&&(pe=q.get(xt),Jt=Zt,Jt.setIndex(pe)),N.isMesh)B.wireframe===!0?(J.setLineWidth(B.wireframeLinewidth*fe()),Jt.setMode(A.LINES)):Jt.setMode(A.TRIANGLES);else if(N.isLine){let Ct=B.linewidth;Ct===void 0&&(Ct=1),J.setLineWidth(Ct*fe()),N.isLineSegments?Jt.setMode(A.LINES):N.isLineLoop?Jt.setMode(A.LINE_LOOP):Jt.setMode(A.LINE_STRIP)}else N.isPoints?Jt.setMode(A.POINTS):N.isSprite&&Jt.setMode(A.TRIANGLES);if(N.isBatchedMesh)if(N._multiDrawInstances!==null)Jt.renderMultiDrawInstances(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount,N._multiDrawInstances);else if(qt.get("WEBGL_multi_draw"))Jt.renderMultiDraw(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount);else{const Ct=N._multiDrawStarts,Te=N._multiDrawCounts,ne=N._multiDrawCount,nn=xt?q.get(xt).bytesPerElement:1,li=ct.get(B).currentProgram.getUniforms();for(let Xe=0;Xe{function tt(){if(B.forEach(function(ut){ct.get(ut).currentProgram.isReady()&&B.delete(ut)}),B.size===0){N(x);return}setTimeout(tt,10)}qt.get("KHR_parallel_shader_compile")!==null?tt():setTimeout(tt,10)})};let Ie=null;function en(x){Ie&&Ie(x)}function Yi(){hn.stop()}function xs(){hn.start()}const hn=new mc;hn.setAnimationLoop(en),typeof self<"u"&&hn.setContext(self),this.setAnimationLoop=function(x){Ie=x,H.setAnimationLoop(x),x===null?hn.stop():hn.start()},H.addEventListener("sessionstart",Yi),H.addEventListener("sessionend",xs),this.render=function(x,I){if(I!==void 0&&I.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;if(x.matrixWorldAutoUpdate===!0&&x.updateMatrixWorld(),I.parent===null&&I.matrixWorldAutoUpdate===!0&&I.updateMatrixWorld(),H.enabled===!0&&H.isPresenting===!0&&(H.cameraAutoUpdate===!0&&H.updateCamera(I),I=H.getCamera()),x.isScene===!0&&x.onBeforeRender(S,x,I,U),f=Gt.get(x,b.length),f.init(I),b.push(f),Pt.multiplyMatrices(I.projectionMatrix,I.matrixWorldInverse),Y.setFromProjectionMatrix(Pt),_t=this.localClippingEnabled,nt=et.init(this.clippingPlanes,_t),m=pt.get(x,T.length),m.init(),T.push(m),H.enabled===!0&&H.isPresenting===!0){const tt=S.xr.getDepthSensingMesh();tt!==null&&qi(tt,I,-1/0,S.sortObjects)}qi(x,I,0,S.sortObjects),m.finish(),S.sortObjects===!0&&m.sort(it,ft),Yt=H.enabled===!1||H.isPresenting===!1||H.hasDepthSensing()===!1,Yt&&Tt.addToRenderList(m,x),this.info.render.frame++,nt===!0&&et.beginShadows();const O=f.state.shadowsArray;mt.render(O,x,I),nt===!0&&et.endShadows(),this.info.autoReset===!0&&this.info.reset();const B=m.opaque,N=m.transmissive;if(f.setupLights(),I.isArrayCamera){const tt=I.cameras;if(N.length>0)for(let ut=0,vt=tt.length;ut0&&uo(B,N,x,I),Yt&&Tt.render(x),Ms(m,x,I);U!==null&&R===0&&(E.updateMultisampleRenderTarget(U),E.updateRenderTargetMipmap(U)),x.isScene===!0&&x.onAfterRender(S,x,I),se.resetDefaultState(),y=-1,M=null,b.pop(),b.length>0?(f=b[b.length-1],nt===!0&&et.setGlobalState(S.clippingPlanes,f.state.camera)):f=null,T.pop(),T.length>0?m=T[T.length-1]:m=null};function qi(x,I,O,B){if(x.visible===!1)return;if(x.layers.test(I.layers)){if(x.isGroup)O=x.renderOrder;else if(x.isLOD)x.autoUpdate===!0&&x.update(I);else if(x.isLight)f.pushLight(x),x.castShadow&&f.pushShadow(x);else if(x.isSprite){if(!x.frustumCulled||Y.intersectsSprite(x)){B&&Ht.setFromMatrixPosition(x.matrixWorld).applyMatrix4(Pt);const ut=j.update(x),vt=x.material;vt.visible&&m.push(x,ut,vt,O,Ht.z,null)}}else if((x.isMesh||x.isLine||x.isPoints)&&(!x.frustumCulled||Y.intersectsObject(x))){const ut=j.update(x),vt=x.material;if(B&&(x.boundingSphere!==void 0?(x.boundingSphere===null&&x.computeBoundingSphere(),Ht.copy(x.boundingSphere.center)):(ut.boundingSphere===null&&ut.computeBoundingSphere(),Ht.copy(ut.boundingSphere.center)),Ht.applyMatrix4(x.matrixWorld).applyMatrix4(Pt)),Array.isArray(vt)){const xt=ut.groups;for(let It=0,Nt=xt.length;It0&&Ss(N,I,O),tt.length>0&&Ss(tt,I,O),ut.length>0&&Ss(ut,I,O),J.buffers.depth.setTest(!0),J.buffers.depth.setMask(!0),J.buffers.color.setMask(!0),J.setPolygonOffset(!1)}function uo(x,I,O,B){if((O.isScene===!0?O.overrideMaterial:null)!==null)return;f.state.transmissionRenderTarget[B.id]===void 0&&(f.state.transmissionRenderTarget[B.id]=new cn(1,1,{generateMipmaps:!0,type:qt.has("EXT_color_buffer_half_float")||qt.has("EXT_color_buffer_float")?wn:Rn,minFilter:ti,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Qt.workingColorSpace}));const tt=f.state.transmissionRenderTarget[B.id],ut=B.viewport||P;tt.setSize(ut.z*S.transmissionResolutionScale,ut.w*S.transmissionResolutionScale);const vt=S.getRenderTarget();S.setRenderTarget(tt),S.getClearColor(G),$=S.getClearAlpha(),$<1&&S.setClearColor(16777215,.5),S.clear(),Yt&&Tt.render(O);const xt=S.toneMapping;S.toneMapping=Bn;const It=B.viewport;if(B.viewport!==void 0&&(B.viewport=void 0),f.setupLightsView(B),nt===!0&&et.setGlobalState(S.clippingPlanes,B),Ss(x,O,B),E.updateMultisampleRenderTarget(tt),E.updateRenderTargetMipmap(tt),qt.has("WEBGL_multisampled_render_to_texture")===!1){let Nt=!1;for(let Rt=0,$t=I.length;Rt<$t;Rt++){const ee=I[Rt],_e=ee.object,pe=ee.geometry,Jt=ee.material,Ct=ee.group;if(Jt.side===dn&&_e.layers.test(B.layers)){const Te=Jt.side;Jt.side=We,Jt.needsUpdate=!0,fo(_e,O,B,pe,Jt,Ct),Jt.side=Te,Jt.needsUpdate=!0,Nt=!0}}Nt===!0&&(E.updateMultisampleRenderTarget(tt),E.updateRenderTargetMipmap(tt))}S.setRenderTarget(vt),S.setClearColor(G,$),It!==void 0&&(B.viewport=It),S.toneMapping=xt}function Ss(x,I,O){const B=I.isScene===!0?I.overrideMaterial:null;for(let N=0,tt=x.length;N0),Rt=!!O.morphAttributes.position,$t=!!O.morphAttributes.normal,ee=!!O.morphAttributes.color;let _e=Bn;B.toneMapped&&(U===null||U.isXRRenderTarget===!0)&&(_e=S.toneMapping);const pe=O.morphAttributes.position||O.morphAttributes.normal||O.morphAttributes.color,Jt=pe!==void 0?pe.length:0,Ct=ct.get(B),Te=f.state.lights;if(nt===!0&&(_t===!0||x!==M)){const Ne=x===M&&B.id===y;et.setState(B,x,Ne)}let ne=!1;B.version===Ct.__version?(Ct.needsLights&&Ct.lightsStateVersion!==Te.state.version||Ct.outputColorSpace!==vt||N.isBatchedMesh&&Ct.batching===!1||!N.isBatchedMesh&&Ct.batching===!0||N.isBatchedMesh&&Ct.batchingColor===!0&&N.colorTexture===null||N.isBatchedMesh&&Ct.batchingColor===!1&&N.colorTexture!==null||N.isInstancedMesh&&Ct.instancing===!1||!N.isInstancedMesh&&Ct.instancing===!0||N.isSkinnedMesh&&Ct.skinning===!1||!N.isSkinnedMesh&&Ct.skinning===!0||N.isInstancedMesh&&Ct.instancingColor===!0&&N.instanceColor===null||N.isInstancedMesh&&Ct.instancingColor===!1&&N.instanceColor!==null||N.isInstancedMesh&&Ct.instancingMorph===!0&&N.morphTexture===null||N.isInstancedMesh&&Ct.instancingMorph===!1&&N.morphTexture!==null||Ct.envMap!==xt||B.fog===!0&&Ct.fog!==tt||Ct.numClippingPlanes!==void 0&&(Ct.numClippingPlanes!==et.numPlanes||Ct.numIntersection!==et.numIntersection)||Ct.vertexAlphas!==It||Ct.vertexTangents!==Nt||Ct.morphTargets!==Rt||Ct.morphNormals!==$t||Ct.morphColors!==ee||Ct.toneMapping!==_e||Ct.morphTargetsCount!==Jt)&&(ne=!0):(ne=!0,Ct.__version=B.version);let nn=Ct.currentProgram;ne===!0&&(nn=ys(B,I,N));let li=!1,Xe=!1,ji=!1;const de=nn.getUniforms(),Ke=Ct.uniforms;if(J.useProgram(nn.program)&&(li=!0,Xe=!0,ji=!0),B.id!==y&&(y=B.id,Xe=!0),li||M!==x){J.buffers.depth.getReversed()?(ot.copy(x.projectionMatrix),Dh(ot),Lh(ot),de.setValue(A,"projectionMatrix",ot)):de.setValue(A,"projectionMatrix",x.projectionMatrix),de.setValue(A,"viewMatrix",x.matrixWorldInverse);const He=de.map.cameraPosition;He!==void 0&&He.setValue(A,Lt.setFromMatrixPosition(x.matrixWorld)),jt.logarithmicDepthBuffer&&de.setValue(A,"logDepthBufFC",2/(Math.log(x.far+1)/Math.LN2)),(B.isMeshPhongMaterial||B.isMeshToonMaterial||B.isMeshLambertMaterial||B.isMeshBasicMaterial||B.isMeshStandardMaterial||B.isShaderMaterial)&&de.setValue(A,"isOrthographic",x.isOrthographicCamera===!0),M!==x&&(M=x,Xe=!0,ji=!0)}if(N.isSkinnedMesh){de.setOptional(A,N,"bindMatrix"),de.setOptional(A,N,"bindMatrixInverse");const Ne=N.skeleton;Ne&&(Ne.boneTexture===null&&Ne.computeBoneTexture(),de.setValue(A,"boneTexture",Ne.boneTexture,E))}N.isBatchedMesh&&(de.setOptional(A,N,"batchingTexture"),de.setValue(A,"batchingTexture",N._matricesTexture,E),de.setOptional(A,N,"batchingIdTexture"),de.setValue(A,"batchingIdTexture",N._indirectTexture,E),de.setOptional(A,N,"batchingColorTexture"),N._colorsTexture!==null&&de.setValue(A,"batchingColorTexture",N._colorsTexture,E));const $e=O.morphAttributes;if(($e.position!==void 0||$e.normal!==void 0||$e.color!==void 0)&&Ut.update(N,O,nn),(Xe||Ct.receiveShadow!==N.receiveShadow)&&(Ct.receiveShadow=N.receiveShadow,de.setValue(A,"receiveShadow",N.receiveShadow)),B.isMeshGouraudMaterial&&B.envMap!==null&&(Ke.envMap.value=xt,Ke.flipEnvMap.value=xt.isCubeTexture&&xt.isRenderTargetTexture===!1?-1:1),B.isMeshStandardMaterial&&B.envMap===null&&I.environment!==null&&(Ke.envMapIntensity.value=I.environmentIntensity),Xe&&(de.setValue(A,"toneMappingExposure",S.toneMappingExposure),Ct.needsLights&&bc(Ke,ji),tt&&B.fog===!0&<.refreshFogUniforms(Ke,tt),lt.refreshMaterialUniforms(Ke,B,k,Q,f.state.transmissionRenderTarget[x.id]),or.upload(A,po(Ct),Ke,E)),B.isShaderMaterial&&B.uniformsNeedUpdate===!0&&(or.upload(A,po(Ct),Ke,E),B.uniformsNeedUpdate=!1),B.isSpriteMaterial&&de.setValue(A,"center",N.center),de.setValue(A,"modelViewMatrix",N.modelViewMatrix),de.setValue(A,"normalMatrix",N.normalMatrix),de.setValue(A,"modelMatrix",N.matrixWorld),B.isShaderMaterial||B.isRawShaderMaterial){const Ne=B.uniformsGroups;for(let He=0,yr=Ne.length;He0&&E.useMultisampledRTT(x)===!1?N=ct.get(x).__webglMultisampledFramebuffer:Array.isArray(Nt)?N=Nt[O]:N=Nt,P.copy(x.viewport),W.copy(x.scissor),z=x.scissorTest}else P.copy(St).multiplyScalar(k).floor(),W.copy(Ft).multiplyScalar(k).floor(),z=Vt;if(O!==0&&(N=wc),J.bindFramebuffer(A.FRAMEBUFFER,N)&&B&&J.drawBuffers(x,N),J.viewport(P),J.scissor(W),J.setScissorTest(z),tt){const xt=ct.get(x.texture);A.framebufferTexture2D(A.FRAMEBUFFER,A.COLOR_ATTACHMENT0,A.TEXTURE_CUBE_MAP_POSITIVE_X+I,xt.__webglTexture,O)}else if(ut){const xt=ct.get(x.texture),It=I;A.framebufferTextureLayer(A.FRAMEBUFFER,A.COLOR_ATTACHMENT0,xt.__webglTexture,O,It)}else if(x!==null&&O!==0){const xt=ct.get(x.texture);A.framebufferTexture2D(A.FRAMEBUFFER,A.COLOR_ATTACHMENT0,A.TEXTURE_2D,xt.__webglTexture,O)}y=-1},this.readRenderTargetPixels=function(x,I,O,B,N,tt,ut){if(!(x&&x.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let vt=ct.get(x).__webglFramebuffer;if(x.isWebGLCubeRenderTarget&&ut!==void 0&&(vt=vt[ut]),vt){J.bindFramebuffer(A.FRAMEBUFFER,vt);try{const xt=x.texture,It=xt.format,Nt=xt.type;if(!jt.textureFormatReadable(It)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!jt.textureTypeReadable(Nt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}I>=0&&I<=x.width-B&&O>=0&&O<=x.height-N&&A.readPixels(I,O,B,N,Ot.convert(It),Ot.convert(Nt),tt)}finally{const xt=U!==null?ct.get(U).__webglFramebuffer:null;J.bindFramebuffer(A.FRAMEBUFFER,xt)}}},this.readRenderTargetPixelsAsync=async function(x,I,O,B,N,tt,ut){if(!(x&&x.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let vt=ct.get(x).__webglFramebuffer;if(x.isWebGLCubeRenderTarget&&ut!==void 0&&(vt=vt[ut]),vt){const xt=x.texture,It=xt.format,Nt=xt.type;if(!jt.textureFormatReadable(It))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!jt.textureTypeReadable(Nt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(I>=0&&I<=x.width-B&&O>=0&&O<=x.height-N){J.bindFramebuffer(A.FRAMEBUFFER,vt);const Rt=A.createBuffer();A.bindBuffer(A.PIXEL_PACK_BUFFER,Rt),A.bufferData(A.PIXEL_PACK_BUFFER,tt.byteLength,A.STREAM_READ),A.readPixels(I,O,B,N,Ot.convert(It),Ot.convert(Nt),0);const $t=U!==null?ct.get(U).__webglFramebuffer:null;J.bindFramebuffer(A.FRAMEBUFFER,$t);const ee=A.fenceSync(A.SYNC_GPU_COMMANDS_COMPLETE,0);return A.flush(),await Ph(A,ee,4),A.bindBuffer(A.PIXEL_PACK_BUFFER,Rt),A.getBufferSubData(A.PIXEL_PACK_BUFFER,0,tt),A.deleteBuffer(Rt),A.deleteSync(ee),tt}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(x,I=null,O=0){x.isTexture!==!0&&(Ri("WebGLRenderer: copyFramebufferToTexture function signature has changed."),I=arguments[0]||null,x=arguments[1]);const B=Math.pow(2,-O),N=Math.floor(x.image.width*B),tt=Math.floor(x.image.height*B),ut=I!==null?I.x:0,vt=I!==null?I.y:0;E.setTexture2D(x,0),A.copyTexSubImage2D(A.TEXTURE_2D,O,0,0,ut,vt,N,tt),J.unbindTexture()};const Ac=A.createFramebuffer(),Rc=A.createFramebuffer();this.copyTextureToTexture=function(x,I,O=null,B=null,N=0,tt=null){x.isTexture!==!0&&(Ri("WebGLRenderer: copyTextureToTexture function signature has changed."),B=arguments[0]||null,x=arguments[1],I=arguments[2],tt=arguments[3]||0,O=null),tt===null&&(N!==0?(Ri("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),tt=N,N=0):tt=0);let ut,vt,xt,It,Nt,Rt,$t,ee,_e;const pe=x.isCompressedTexture?x.mipmaps[tt]:x.image;if(O!==null)ut=O.max.x-O.min.x,vt=O.max.y-O.min.y,xt=O.isBox3?O.max.z-O.min.z:1,It=O.min.x,Nt=O.min.y,Rt=O.isBox3?O.min.z:0;else{const $e=Math.pow(2,-N);ut=Math.floor(pe.width*$e),vt=Math.floor(pe.height*$e),x.isDataArrayTexture?xt=pe.depth:x.isData3DTexture?xt=Math.floor(pe.depth*$e):xt=1,It=0,Nt=0,Rt=0}B!==null?($t=B.x,ee=B.y,_e=B.z):($t=0,ee=0,_e=0);const Jt=Ot.convert(I.format),Ct=Ot.convert(I.type);let Te;I.isData3DTexture?(E.setTexture3D(I,0),Te=A.TEXTURE_3D):I.isDataArrayTexture||I.isCompressedArrayTexture?(E.setTexture2DArray(I,0),Te=A.TEXTURE_2D_ARRAY):(E.setTexture2D(I,0),Te=A.TEXTURE_2D),A.pixelStorei(A.UNPACK_FLIP_Y_WEBGL,I.flipY),A.pixelStorei(A.UNPACK_PREMULTIPLY_ALPHA_WEBGL,I.premultiplyAlpha),A.pixelStorei(A.UNPACK_ALIGNMENT,I.unpackAlignment);const ne=A.getParameter(A.UNPACK_ROW_LENGTH),nn=A.getParameter(A.UNPACK_IMAGE_HEIGHT),li=A.getParameter(A.UNPACK_SKIP_PIXELS),Xe=A.getParameter(A.UNPACK_SKIP_ROWS),ji=A.getParameter(A.UNPACK_SKIP_IMAGES);A.pixelStorei(A.UNPACK_ROW_LENGTH,pe.width),A.pixelStorei(A.UNPACK_IMAGE_HEIGHT,pe.height),A.pixelStorei(A.UNPACK_SKIP_PIXELS,It),A.pixelStorei(A.UNPACK_SKIP_ROWS,Nt),A.pixelStorei(A.UNPACK_SKIP_IMAGES,Rt);const de=x.isDataArrayTexture||x.isData3DTexture,Ke=I.isDataArrayTexture||I.isData3DTexture;if(x.isDepthTexture){const $e=ct.get(x),Ne=ct.get(I),He=ct.get($e.__renderTarget),yr=ct.get(Ne.__renderTarget);J.bindFramebuffer(A.READ_FRAMEBUFFER,He.__webglFramebuffer),J.bindFramebuffer(A.DRAW_FRAMEBUFFER,yr.__webglFramebuffer);for(let Vn=0;VnMath.PI&&(n-=Ve),s<-Math.PI?s+=Ve:s>Math.PI&&(s-=Ve),n<=s?this._spherical.theta=Math.max(n,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+s)/2?Math.max(n,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(xe.setFromSpherical(this._spherical),xe.applyQuaternion(this._quatInverse),e.copy(this.target).add(xe),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=xe.length();a=this._clampDistance(o*this._scale);const l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){const o=new C(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;const c=new C(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=xe.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(Qs.origin.copy(this.object.position),Qs.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(Qs.direction))ia||8*(1-this._lastQuaternion.dot(this.object.quaternion))>ia||this._lastTargetPosition.distanceToSquared(this.target)>ia?(this.dispatchEvent(wl),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?Ve/60*this.autoRotateSpeed*t:Ve/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){xe.setFromMatrixColumn(e,0),xe.multiplyScalar(-t),this._panOffset.add(xe)}_panUp(t,e){this.screenSpacePanning===!0?xe.setFromMatrixColumn(e,1):(xe.setFromMatrixColumn(e,0),xe.crossVectors(this.object.up,xe)),xe.multiplyScalar(t),this._panOffset.add(xe)}_pan(t,e){const n=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;xe.copy(s).sub(this.target);let r=xe.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*r/n.clientHeight,this.object.matrix),this._panUp(2*e*r/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),s=t-n.left,r=e-n.top,a=n.width,o=n.height;this._mouse.x=s/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Ve*this._rotateDelta.x/e.clientHeight),this._rotateUp(Ve*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(Ve*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-Ve*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(Ve*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-Ve*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._rotateStart.set(n,s)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._panStart.set(n,s)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,s=t.pageY-e.y,r=Math.sqrt(n*n+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const n=this._getSecondPointerPosition(t),s=.5*(t.pageX+n.x),r=.5*(t.pageY+n.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Ve*this._rotateDelta.x/e.clientHeight),this._rotateUp(Ve*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._panEnd.set(n,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,s=t.pageY-e.y,r=Math.sqrt(n*n+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(t.pageX+e.x)*.5,o=(t.pageY+e.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e=0&&(y[at]=null,E[at].disconnect(_t))}for(let nt=0;nt=y.length){y.push(_t),at=Pt;break}else if(y[Pt]===null){y[Pt]=_t,at=Pt;break}if(at===-1)break}const wt=E[at];wt&&wt.connect(_t)}}const q=new P,J=new P;function X(Z,nt,_t){q.setFromMatrixPosition(nt.matrixWorld),J.setFromMatrixPosition(_t.matrixWorld);const at=q.distanceTo(J),wt=nt.projectionMatrix.elements,Pt=_t.projectionMatrix.elements,kt=wt[14]/(wt[10]-1),le=wt[14]/(wt[10]+1),Ht=(wt[9]+1)/wt[5],de=(wt[9]-1)/wt[5],R=(wt[8]-1)/wt[0],Ue=(Pt[8]+1)/Pt[0],qt=kt*R,jt=kt*Ue,bt=at/(-R+Ue),oe=bt*-R;if(nt.matrixWorld.decompose(Z.position,Z.quaternion,Z.scale),Z.translateX(oe),Z.translateZ(bt),Z.matrixWorld.compose(Z.position,Z.quaternion,Z.scale),Z.matrixWorldInverse.copy(Z.matrixWorld).invert(),wt[10]===-1)Z.projectionMatrix.copy(nt.projectionMatrix),Z.projectionMatrixInverse.copy(nt.projectionMatrixInverse);else{const Et=kt+bt,b=le+bt,v=qt-oe,O=jt+(at-oe),F=Ht*le/b*Et,k=de*le/b*Et;Z.projectionMatrix.makePerspective(v,O,F,k,Et,b),Z.projectionMatrixInverse.copy(Z.projectionMatrix).invert()}}function it(Z,nt){nt===null?Z.matrixWorld.copy(Z.matrix):Z.matrixWorld.multiplyMatrices(nt.matrixWorld,Z.matrix),Z.matrixWorldInverse.copy(Z.matrixWorld).invert()}this.updateCamera=function(Z){if(s===null)return;let nt=Z.near,_t=Z.far;_.texture!==null&&(_.depthNear>0&&(nt=_.depthNear),_.depthFar>0&&(_t=_.depthFar)),M.near=I.near=C.near=nt,M.far=I.far=C.far=_t,(w!==M.near||Y!==M.far)&&(s.updateRenderState({depthNear:M.near,depthFar:M.far}),w=M.near,Y=M.far),C.layers.mask=Z.layers.mask|2,I.layers.mask=Z.layers.mask|4,M.layers.mask=C.layers.mask|I.layers.mask;const at=Z.parent,wt=M.cameras;it(M,at);for(let Pt=0;Pt0&&(m.alphaTest.value=p.alphaTest);const T=t.get(p),E=T.envMap,y=T.envMapRotation;E&&(m.envMap.value=E,Qn.copy(y),Qn.x*=-1,Qn.y*=-1,Qn.z*=-1,E.isCubeTexture&&E.isRenderTargetTexture===!1&&(Qn.y*=-1,Qn.z*=-1),m.envMapRotation.value.setFromMatrix4(ig.makeRotationFromEuler(Qn)),m.flipEnvMap.value=E.isCubeTexture&&E.isRenderTargetTexture===!1?-1:1,m.reflectivity.value=p.reflectivity,m.ior.value=p.ior,m.refractionRatio.value=p.refractionRatio),p.lightMap&&(m.lightMap.value=p.lightMap,m.lightMapIntensity.value=p.lightMapIntensity,e(p.lightMap,m.lightMapTransform)),p.aoMap&&(m.aoMap.value=p.aoMap,m.aoMapIntensity.value=p.aoMapIntensity,e(p.aoMap,m.aoMapTransform))}function a(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,p.map&&(m.map.value=p.map,e(p.map,m.mapTransform))}function o(m,p){m.dashSize.value=p.dashSize,m.totalSize.value=p.dashSize+p.gapSize,m.scale.value=p.scale}function l(m,p,T,E){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.size.value=p.size*T,m.scale.value=E*.5,p.map&&(m.map.value=p.map,e(p.map,m.uvTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,e(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function c(m,p){m.diffuse.value.copy(p.color),m.opacity.value=p.opacity,m.rotation.value=p.rotation,p.map&&(m.map.value=p.map,e(p.map,m.mapTransform)),p.alphaMap&&(m.alphaMap.value=p.alphaMap,e(p.alphaMap,m.alphaMapTransform)),p.alphaTest>0&&(m.alphaTest.value=p.alphaTest)}function h(m,p){m.specular.value.copy(p.specular),m.shininess.value=Math.max(p.shininess,1e-4)}function d(m,p){p.gradientMap&&(m.gradientMap.value=p.gradientMap)}function f(m,p){m.metalness.value=p.metalness,p.metalnessMap&&(m.metalnessMap.value=p.metalnessMap,e(p.metalnessMap,m.metalnessMapTransform)),m.roughness.value=p.roughness,p.roughnessMap&&(m.roughnessMap.value=p.roughnessMap,e(p.roughnessMap,m.roughnessMapTransform)),p.envMap&&(m.envMapIntensity.value=p.envMapIntensity)}function u(m,p,T){m.ior.value=p.ior,p.sheen>0&&(m.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),m.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap&&(m.sheenColorMap.value=p.sheenColorMap,e(p.sheenColorMap,m.sheenColorMapTransform)),p.sheenRoughnessMap&&(m.sheenRoughnessMap.value=p.sheenRoughnessMap,e(p.sheenRoughnessMap,m.sheenRoughnessMapTransform))),p.clearcoat>0&&(m.clearcoat.value=p.clearcoat,m.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap&&(m.clearcoatMap.value=p.clearcoatMap,e(p.clearcoatMap,m.clearcoatMapTransform)),p.clearcoatRoughnessMap&&(m.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap,e(p.clearcoatRoughnessMap,m.clearcoatRoughnessMapTransform)),p.clearcoatNormalMap&&(m.clearcoatNormalMap.value=p.clearcoatNormalMap,e(p.clearcoatNormalMap,m.clearcoatNormalMapTransform),m.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),p.side===Ye&&m.clearcoatNormalScale.value.negate())),p.dispersion>0&&(m.dispersion.value=p.dispersion),p.iridescence>0&&(m.iridescence.value=p.iridescence,m.iridescenceIOR.value=p.iridescenceIOR,m.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],m.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap&&(m.iridescenceMap.value=p.iridescenceMap,e(p.iridescenceMap,m.iridescenceMapTransform)),p.iridescenceThicknessMap&&(m.iridescenceThicknessMap.value=p.iridescenceThicknessMap,e(p.iridescenceThicknessMap,m.iridescenceThicknessMapTransform))),p.transmission>0&&(m.transmission.value=p.transmission,m.transmissionSamplerMap.value=T.texture,m.transmissionSamplerSize.value.set(T.width,T.height),p.transmissionMap&&(m.transmissionMap.value=p.transmissionMap,e(p.transmissionMap,m.transmissionMapTransform)),m.thickness.value=p.thickness,p.thicknessMap&&(m.thicknessMap.value=p.thicknessMap,e(p.thicknessMap,m.thicknessMapTransform)),m.attenuationDistance.value=p.attenuationDistance,m.attenuationColor.value.copy(p.attenuationColor)),p.anisotropy>0&&(m.anisotropyVector.value.set(p.anisotropy*Math.cos(p.anisotropyRotation),p.anisotropy*Math.sin(p.anisotropyRotation)),p.anisotropyMap&&(m.anisotropyMap.value=p.anisotropyMap,e(p.anisotropyMap,m.anisotropyMapTransform))),m.specularIntensity.value=p.specularIntensity,m.specularColor.value.copy(p.specularColor),p.specularColorMap&&(m.specularColorMap.value=p.specularColorMap,e(p.specularColorMap,m.specularColorMapTransform)),p.specularIntensityMap&&(m.specularIntensityMap.value=p.specularIntensityMap,e(p.specularIntensityMap,m.specularIntensityMapTransform))}function g(m,p){p.matcap&&(m.matcap.value=p.matcap)}function _(m,p){const T=t.get(p).light;m.referencePosition.value.setFromMatrixPosition(T.matrixWorld),m.nearDistance.value=T.shadow.camera.near,m.farDistance.value=T.shadow.camera.far}return{refreshFogUniforms:n,refreshMaterialUniforms:s}}function rg(i,t,e,n){let s={},r={},a=[];const o=i.getParameter(i.MAX_UNIFORM_BUFFER_BINDINGS);function l(T,E){const y=E.program;n.uniformBlockBinding(T,y)}function c(T,E){let y=s[T.id];y===void 0&&(g(T),y=h(T),s[T.id]=y,T.addEventListener("dispose",m));const D=E.program;n.updateUBOMapping(T,D);const A=t.render.frame;r[T.id]!==A&&(f(T),r[T.id]=A)}function h(T){const E=d();T.__bindingPointIndex=E;const y=i.createBuffer(),D=T.__size,A=T.usage;return i.bindBuffer(i.UNIFORM_BUFFER,y),i.bufferData(i.UNIFORM_BUFFER,D,A),i.bindBuffer(i.UNIFORM_BUFFER,null),i.bindBufferBase(i.UNIFORM_BUFFER,E,y),y}function d(){for(let T=0;T0&&(y+=D-A),T.__size=y,T.__cache={},this}function _(T){const E={boundary:0,storage:0};return typeof T=="number"||typeof T=="boolean"?(E.boundary=4,E.storage=4):T.isVector2?(E.boundary=8,E.storage=8):T.isVector3||T.isColor?(E.boundary=16,E.storage=12):T.isVector4?(E.boundary=16,E.storage=16):T.isMatrix3?(E.boundary=48,E.storage=48):T.isMatrix4?(E.boundary=64,E.storage=64):T.isTexture?console.warn("THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group."):console.warn("THREE.WebGLRenderer: Unsupported uniform value type.",T),E}function m(T){const E=T.target;E.removeEventListener("dispose",m);const y=a.indexOf(E.__bindingPointIndex);a.splice(y,1),i.deleteBuffer(s[E.id]),delete s[E.id],delete r[E.id]}function p(){for(const T in s)i.deleteBuffer(s[T]);a=[],s={},r={}}return{bind:l,update:c,dispose:p}}class ag{constructor(t={}){const{canvas:e=Nh(),context:n=null,depth:s=!0,stencil:r=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:l=!0,preserveDrawingBuffer:c=!1,powerPreference:h="default",failIfMajorPerformanceCaveat:d=!1,reverseDepthBuffer:f=!1}=t;this.isWebGLRenderer=!0;let u;if(n!==null){if(typeof WebGLRenderingContext<"u"&&n instanceof WebGLRenderingContext)throw new Error("THREE.WebGLRenderer: WebGL 1 is not supported since r163.");u=n.getContextAttributes().alpha}else u=a;const g=new Uint32Array(4),_=new Int32Array(4);let m=null,p=null;const T=[],E=[];this.domElement=e,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this._outputColorSpace=sn,this.toneMapping=Hn,this.toneMappingExposure=1;const y=this;let D=!1,A=0,C=0,I=null,S=-1,M=null;const w=new ae,Y=new ae;let V=null;const j=new st(0);let $=0,q=e.width,J=e.height,X=1,it=null,ft=null;const Mt=new ae(0,0,q,J),Nt=new ae(0,0,q,J);let Wt=!1;const Z=new Mo;let nt=!1,_t=!1;this.transmissionResolutionScale=1;const at=new ne,wt=new ne,Pt=new P,kt=new ae,le={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};let Ht=!1;function de(){return I===null?X:1}let R=n;function Ue(x,U){return e.getContext(x,U)}try{const x={alpha:!0,depth:s,stencil:r,antialias:o,premultipliedAlpha:l,preserveDrawingBuffer:c,powerPreference:h,failIfMajorPerformanceCaveat:d};if("setAttribute"in e&&e.setAttribute("data-engine",`three.js r${ho}`),e.addEventListener("webglcontextlost",K,!1),e.addEventListener("webglcontextrestored",ht,!1),e.addEventListener("webglcontextcreationerror",ut,!1),R===null){const U="webgl2";if(R=Ue(U,x),R===null)throw Ue(U)?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.")}}catch(x){throw console.error("THREE.WebGLRenderer: "+x.message),x}let qt,jt,bt,oe,Et,b,v,O,F,k,G,ot,Q,lt,Ft,tt,mt,At,Dt,pt,Xt,Ot,Qt,L;function ct(){qt=new mp(R),qt.init(),Ot=new $m(R,qt),jt=new cp(R,qt,t,Ot),bt=new Zm(R,qt),jt.reverseDepthBuffer&&f&&bt.buffers.depth.setReversed(!0),oe=new vp(R),Et=new Fm,b=new Km(R,qt,bt,Et,jt,Ot,oe),v=new up(y),O=new pp(y),F=new bu(R),Qt=new op(R,F),k=new gp(R,F,oe,Qt),G=new Mp(R,k,F,oe),Dt=new xp(R,jt,b),tt=new hp(Et),ot=new Nm(y,v,O,qt,jt,Qt,tt),Q=new sg(y,Et),lt=new Bm,Ft=new Wm(qt),At=new ap(y,v,O,bt,G,u,l),mt=new qm(y,G,jt),L=new rg(R,oe,jt,bt),pt=new lp(R,qt,oe),Xt=new _p(R,qt,oe),oe.programs=ot.programs,y.capabilities=jt,y.extensions=qt,y.properties=Et,y.renderLists=lt,y.shadowMap=mt,y.state=bt,y.info=oe}ct();const W=new ng(y,R);this.xr=W,this.getContext=function(){return R},this.getContextAttributes=function(){return R.getContextAttributes()},this.forceContextLoss=function(){const x=qt.get("WEBGL_lose_context");x&&x.loseContext()},this.forceContextRestore=function(){const x=qt.get("WEBGL_lose_context");x&&x.restoreContext()},this.getPixelRatio=function(){return X},this.setPixelRatio=function(x){x!==void 0&&(X=x,this.setSize(q,J,!1))},this.getSize=function(x){return x.set(q,J)},this.setSize=function(x,U,B=!0){if(W.isPresenting){console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");return}q=x,J=U,e.width=Math.floor(x*X),e.height=Math.floor(U*X),B===!0&&(e.style.width=x+"px",e.style.height=U+"px"),this.setViewport(0,0,x,U)},this.getDrawingBufferSize=function(x){return x.set(q*X,J*X).floor()},this.setDrawingBufferSize=function(x,U,B){q=x,J=U,X=B,e.width=Math.floor(x*B),e.height=Math.floor(U*B),this.setViewport(0,0,x,U)},this.getCurrentViewport=function(x){return x.copy(w)},this.getViewport=function(x){return x.copy(Mt)},this.setViewport=function(x,U,B,z){x.isVector4?Mt.set(x.x,x.y,x.z,x.w):Mt.set(x,U,B,z),bt.viewport(w.copy(Mt).multiplyScalar(X).round())},this.getScissor=function(x){return x.copy(Nt)},this.setScissor=function(x,U,B,z){x.isVector4?Nt.set(x.x,x.y,x.z,x.w):Nt.set(x,U,B,z),bt.scissor(Y.copy(Nt).multiplyScalar(X).round())},this.getScissorTest=function(){return Wt},this.setScissorTest=function(x){bt.setScissorTest(Wt=x)},this.setOpaqueSort=function(x){it=x},this.setTransparentSort=function(x){ft=x},this.getClearColor=function(x){return x.copy(At.getClearColor())},this.setClearColor=function(){At.setClearColor.apply(At,arguments)},this.getClearAlpha=function(){return At.getClearAlpha()},this.setClearAlpha=function(){At.setClearAlpha.apply(At,arguments)},this.clear=function(x=!0,U=!0,B=!0){let z=0;if(x){let N=!1;if(I!==null){const et=I.texture.format;N=et===vo||et===_o||et===go}if(N){const et=I.texture.type,dt=et===Dn||et===ci||et===vs||et===Ki||et===fo||et===po,gt=At.getClearColor(),vt=At.getClearAlpha(),Lt=gt.r,It=gt.g,Rt=gt.b;dt?(g[0]=Lt,g[1]=It,g[2]=Rt,g[3]=vt,R.clearBufferuiv(R.COLOR,0,g)):(_[0]=Lt,_[1]=It,_[2]=Rt,_[3]=vt,R.clearBufferiv(R.COLOR,0,_))}else z|=R.COLOR_BUFFER_BIT}U&&(z|=R.DEPTH_BUFFER_BIT),B&&(z|=R.STENCIL_BUFFER_BIT,this.state.buffers.stencil.setMask(4294967295)),R.clear(z)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener("webglcontextlost",K,!1),e.removeEventListener("webglcontextrestored",ht,!1),e.removeEventListener("webglcontextcreationerror",ut,!1),At.dispose(),lt.dispose(),Ft.dispose(),Et.dispose(),v.dispose(),O.dispose(),G.dispose(),Qt.dispose(),L.dispose(),ot.dispose(),W.dispose(),W.removeEventListener("sessionstart",Ge),W.removeEventListener("sessionend",Ie),Ce.stop()};function K(x){x.preventDefault(),console.log("THREE.WebGLRenderer: Context Lost."),D=!0}function ht(){console.log("THREE.WebGLRenderer: Context Restored."),D=!1;const x=oe.autoReset,U=mt.enabled,B=mt.autoUpdate,z=mt.needsUpdate,N=mt.type;ct(),oe.autoReset=x,mt.enabled=U,mt.autoUpdate=B,mt.needsUpdate=z,mt.type=N}function ut(x){console.error("THREE.WebGLRenderer: A WebGL context could not be created. Reason: ",x.statusMessage)}function Ut(x){const U=x.target;U.removeEventListener("dispose",Ut),he(U)}function he(x){_e(x),Et.remove(x)}function _e(x){const U=Et.get(x).programs;U!==void 0&&(U.forEach(function(B){ot.releaseProgram(B)}),x.isShaderMaterial&&ot.releaseShaderCache(x))}this.renderBufferDirect=function(x,U,B,z,N,et){U===null&&(U=le);const dt=N.isMesh&&N.matrixWorld.determinant()<0,gt=Dc(x,U,B,z,N);bt.setMaterial(z,dt);let vt=B.index,Lt=1;if(z.wireframe===!0){if(vt=k.getWireframeAttribute(B),vt===void 0)return;Lt=2}const It=B.drawRange,Rt=B.attributes.position;let Zt=It.start*Lt,te=(It.start+It.count)*Lt;et!==null&&(Zt=Math.max(Zt,et.start*Lt),te=Math.min(te,(et.start+et.count)*Lt)),vt!==null?(Zt=Math.max(Zt,0),te=Math.min(te,vt.count)):Rt!=null&&(Zt=Math.max(Zt,0),te=Math.min(te,Rt.count));const ve=te-Zt;if(ve<0||ve===1/0)return;Qt.setup(N,z,gt,B,vt);let pe,$t=pt;if(vt!==null&&(pe=F.get(vt),$t=Xt,$t.setIndex(pe)),N.isMesh)z.wireframe===!0?(bt.setLineWidth(z.wireframeLinewidth*de()),$t.setMode(R.LINES)):$t.setMode(R.TRIANGLES);else if(N.isLine){let Ct=z.linewidth;Ct===void 0&&(Ct=1),bt.setLineWidth(Ct*de()),N.isLineSegments?$t.setMode(R.LINES):N.isLineLoop?$t.setMode(R.LINE_LOOP):$t.setMode(R.LINE_STRIP)}else N.isPoints?$t.setMode(R.POINTS):N.isSprite&&$t.setMode(R.TRIANGLES);if(N.isBatchedMesh)if(N._multiDrawInstances!==null)$t.renderMultiDrawInstances(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount,N._multiDrawInstances);else if(qt.get("WEBGL_multi_draw"))$t.renderMultiDraw(N._multiDrawStarts,N._multiDrawCounts,N._multiDrawCount);else{const Ct=N._multiDrawStarts,Pe=N._multiDrawCounts,ee=N._multiDrawCount,ln=vt?F.get(vt).bytesPerElement:1,mi=Et.get(z).currentProgram.getUniforms();for(let je=0;je{function et(){if(z.forEach(function(dt){Et.get(dt).currentProgram.isReady()&&z.delete(dt)}),z.size===0){N(x);return}setTimeout(et,10)}qt.get("KHR_parallel_shader_compile")!==null?et():setTimeout(et,10)})};let qe=null;function an(x){qe&&qe(x)}function Ge(){Ce.stop()}function Ie(){Ce.start()}const Ce=new yc;Ce.setAnimationLoop(an),typeof self<"u"&&Ce.setContext(self),this.setAnimationLoop=function(x){qe=x,W.setAnimationLoop(x),x===null?Ce.stop():Ce.start()},W.addEventListener("sessionstart",Ge),W.addEventListener("sessionend",Ie),this.render=function(x,U){if(U!==void 0&&U.isCamera!==!0){console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");return}if(D===!0)return;if(x.matrixWorldAutoUpdate===!0&&x.updateMatrixWorld(),U.parent===null&&U.matrixWorldAutoUpdate===!0&&U.updateMatrixWorld(),W.enabled===!0&&W.isPresenting===!0&&(W.cameraAutoUpdate===!0&&W.updateCamera(U),U=W.getCamera()),x.isScene===!0&&x.onBeforeRender(y,x,U,I),p=Ft.get(x,E.length),p.init(U),E.push(p),wt.multiplyMatrices(U.projectionMatrix,U.matrixWorldInverse),Z.setFromProjectionMatrix(wt),_t=this.localClippingEnabled,nt=tt.init(this.clippingPlanes,_t),m=lt.get(x,T.length),m.init(),T.push(m),W.enabled===!0&&W.isPresenting===!0){const et=y.xr.getDepthSensingMesh();et!==null&&on(et,U,-1/0,y.sortObjects)}on(x,U,0,y.sortObjects),m.finish(),y.sortObjects===!0&&m.sort(it,ft),Ht=W.enabled===!1||W.isPresenting===!1||W.hasDepthSensing()===!1,Ht&&At.addToRenderList(m,x),this.info.render.frame++,nt===!0&&tt.beginShadows();const B=p.state.shadowsArray;mt.render(B,x,U),nt===!0&&tt.endShadows(),this.info.autoReset===!0&&this.info.reset();const z=m.opaque,N=m.transmissive;if(p.setupLights(),U.isArrayCamera){const et=U.cameras;if(N.length>0)for(let dt=0,gt=et.length;dt0&&ws(z,N,x,U),Ht&&At.render(x),pi(m,x,U);I!==null&&C===0&&(b.updateMultisampleRenderTarget(I),b.updateRenderTargetMipmap(I)),x.isScene===!0&&x.onAfterRender(y,x,U),Qt.resetDefaultState(),S=-1,M=null,E.pop(),E.length>0?(p=E[E.length-1],nt===!0&&tt.setGlobalState(y.clippingPlanes,p.state.camera)):p=null,T.pop(),T.length>0?m=T[T.length-1]:m=null};function on(x,U,B,z){if(x.visible===!1)return;if(x.layers.test(U.layers)){if(x.isGroup)B=x.renderOrder;else if(x.isLOD)x.autoUpdate===!0&&x.update(U);else if(x.isLight)p.pushLight(x),x.castShadow&&p.pushShadow(x);else if(x.isSprite){if(!x.frustumCulled||Z.intersectsSprite(x)){z&&kt.setFromMatrixPosition(x.matrixWorld).applyMatrix4(wt);const dt=G.update(x),gt=x.material;gt.visible&&m.push(x,dt,gt,B,kt.z,null)}}else if((x.isMesh||x.isLine||x.isPoints)&&(!x.frustumCulled||Z.intersectsObject(x))){const dt=G.update(x),gt=x.material;if(z&&(x.boundingSphere!==void 0?(x.boundingSphere===null&&x.computeBoundingSphere(),kt.copy(x.boundingSphere.center)):(dt.boundingSphere===null&&dt.computeBoundingSphere(),kt.copy(dt.boundingSphere.center)),kt.applyMatrix4(x.matrixWorld).applyMatrix4(wt)),Array.isArray(gt)){const vt=dt.groups;for(let Lt=0,It=vt.length;Lt0&&Xn(N,U,B),et.length>0&&Xn(et,U,B),dt.length>0&&Xn(dt,U,B),bt.buffers.depth.setTest(!0),bt.buffers.depth.setMask(!0),bt.buffers.color.setMask(!0),bt.setPolygonOffset(!1)}function ws(x,U,B,z){if((B.isScene===!0?B.overrideMaterial:null)!==null)return;p.state.transmissionRenderTarget[z.id]===void 0&&(p.state.transmissionRenderTarget[z.id]=new fn(1,1,{generateMipmaps:!0,type:qt.has("EXT_color_buffer_half_float")||qt.has("EXT_color_buffer_float")?Cn:Dn,minFilter:ai,samples:4,stencilBuffer:r,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Jt.workingColorSpace}));const et=p.state.transmissionRenderTarget[z.id],dt=z.viewport||w;et.setSize(dt.z*y.transmissionResolutionScale,dt.w*y.transmissionResolutionScale);const gt=y.getRenderTarget();y.setRenderTarget(et),y.getClearColor(j),$=y.getClearAlpha(),$<1&&y.setClearColor(16777215,.5),y.clear(),Ht&&At.render(B);const vt=y.toneMapping;y.toneMapping=Hn;const Lt=z.viewport;if(z.viewport!==void 0&&(z.viewport=void 0),p.setupLightsView(z),nt===!0&&tt.setGlobalState(y.clippingPlanes,z),Xn(x,B,z),b.updateMultisampleRenderTarget(et),b.updateRenderTargetMipmap(et),qt.has("WEBGL_multisampled_render_to_texture")===!1){let It=!1;for(let Rt=0,Zt=U.length;Rt0),Rt=!!B.morphAttributes.position,Zt=!!B.morphAttributes.normal,te=!!B.morphAttributes.color;let ve=Hn;z.toneMapped&&(I===null||I.isXRRenderTarget===!0)&&(ve=y.toneMapping);const pe=B.morphAttributes.position||B.morphAttributes.normal||B.morphAttributes.color,$t=pe!==void 0?pe.length:0,Ct=Et.get(z),Pe=p.state.lights;if(nt===!0&&(_t===!0||x!==M)){const Be=x===M&&z.id===S;tt.setState(z,x,Be)}let ee=!1;z.version===Ct.__version?(Ct.needsLights&&Ct.lightsStateVersion!==Pe.state.version||Ct.outputColorSpace!==gt||N.isBatchedMesh&&Ct.batching===!1||!N.isBatchedMesh&&Ct.batching===!0||N.isBatchedMesh&&Ct.batchingColor===!0&&N.colorTexture===null||N.isBatchedMesh&&Ct.batchingColor===!1&&N.colorTexture!==null||N.isInstancedMesh&&Ct.instancing===!1||!N.isInstancedMesh&&Ct.instancing===!0||N.isSkinnedMesh&&Ct.skinning===!1||!N.isSkinnedMesh&&Ct.skinning===!0||N.isInstancedMesh&&Ct.instancingColor===!0&&N.instanceColor===null||N.isInstancedMesh&&Ct.instancingColor===!1&&N.instanceColor!==null||N.isInstancedMesh&&Ct.instancingMorph===!0&&N.morphTexture===null||N.isInstancedMesh&&Ct.instancingMorph===!1&&N.morphTexture!==null||Ct.envMap!==vt||z.fog===!0&&Ct.fog!==et||Ct.numClippingPlanes!==void 0&&(Ct.numClippingPlanes!==tt.numPlanes||Ct.numIntersection!==tt.numIntersection)||Ct.vertexAlphas!==Lt||Ct.vertexTangents!==It||Ct.morphTargets!==Rt||Ct.morphNormals!==Zt||Ct.morphColors!==te||Ct.toneMapping!==ve||Ct.morphTargetsCount!==$t)&&(ee=!0):(ee=!0,Ct.__version=z.version);let ln=Ct.currentProgram;ee===!0&&(ln=Yn(z,U,N));let mi=!1,je=!1,ns=!1;const ue=ln.getUniforms(),Qe=Ct.uniforms;if(bt.useProgram(ln.program)&&(mi=!0,je=!0,ns=!0),z.id!==S&&(S=z.id,je=!0),mi||M!==x){bt.buffers.depth.getReversed()?(at.copy(x.projectionMatrix),Oh(at),Bh(at),ue.setValue(R,"projectionMatrix",at)):ue.setValue(R,"projectionMatrix",x.projectionMatrix),ue.setValue(R,"viewMatrix",x.matrixWorldInverse);const We=ue.map.cameraPosition;We!==void 0&&We.setValue(R,Pt.setFromMatrixPosition(x.matrixWorld)),jt.logarithmicDepthBuffer&&ue.setValue(R,"logDepthBufFC",2/(Math.log(x.far+1)/Math.LN2)),(z.isMeshPhongMaterial||z.isMeshToonMaterial||z.isMeshLambertMaterial||z.isMeshBasicMaterial||z.isMeshStandardMaterial||z.isShaderMaterial)&&ue.setValue(R,"isOrthographic",x.isOrthographicCamera===!0),M!==x&&(M=x,je=!0,ns=!0)}if(N.isSkinnedMesh){ue.setOptional(R,N,"bindMatrix"),ue.setOptional(R,N,"bindMatrixInverse");const Be=N.skeleton;Be&&(Be.boneTexture===null&&Be.computeBoneTexture(),ue.setValue(R,"boneTexture",Be.boneTexture,b))}N.isBatchedMesh&&(ue.setOptional(R,N,"batchingTexture"),ue.setValue(R,"batchingTexture",N._matricesTexture,b),ue.setOptional(R,N,"batchingIdTexture"),ue.setValue(R,"batchingIdTexture",N._indirectTexture,b),ue.setOptional(R,N,"batchingColorTexture"),N._colorsTexture!==null&&ue.setValue(R,"batchingColorTexture",N._colorsTexture,b));const tn=B.morphAttributes;if((tn.position!==void 0||tn.normal!==void 0||tn.color!==void 0)&&Dt.update(N,B,ln),(je||Ct.receiveShadow!==N.receiveShadow)&&(Ct.receiveShadow=N.receiveShadow,ue.setValue(R,"receiveShadow",N.receiveShadow)),z.isMeshGouraudMaterial&&z.envMap!==null&&(Qe.envMap.value=vt,Qe.flipEnvMap.value=vt.isCubeTexture&&vt.isRenderTargetTexture===!1?-1:1),z.isMeshStandardMaterial&&z.envMap===null&&U.environment!==null&&(Qe.envMapIntensity.value=U.environmentIntensity),je&&(ue.setValue(R,"toneMappingExposure",y.toneMappingExposure),Ct.needsLights&&Lc(Qe,ns),et&&z.fog===!0&&Q.refreshFogUniforms(Qe,et),Q.refreshMaterialUniforms(Qe,z,X,J,p.state.transmissionRenderTarget[x.id]),dr.upload(R,Rs(Ct),Qe,b)),z.isShaderMaterial&&z.uniformsNeedUpdate===!0&&(dr.upload(R,Rs(Ct),Qe,b),z.uniformsNeedUpdate=!1),z.isSpriteMaterial&&ue.setValue(R,"center",N.center),ue.setValue(R,"modelViewMatrix",N.modelViewMatrix),ue.setValue(R,"normalMatrix",N.normalMatrix),ue.setValue(R,"modelMatrix",N.matrixWorld),z.isShaderMaterial||z.isRawShaderMaterial){const Be=z.uniformsGroups;for(let We=0,Rr=Be.length;We0&&b.useMultisampledRTT(x)===!1?N=Et.get(x).__webglMultisampledFramebuffer:Array.isArray(It)?N=It[B]:N=It,w.copy(x.viewport),Y.copy(x.scissor),V=x.scissorTest}else w.copy(Mt).multiplyScalar(X).floor(),Y.copy(Nt).multiplyScalar(X).floor(),V=Wt;if(B!==0&&(N=Ic),bt.bindFramebuffer(R.FRAMEBUFFER,N)&&z&&bt.drawBuffers(x,N),bt.viewport(w),bt.scissor(Y),bt.setScissorTest(V),et){const vt=Et.get(x.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_CUBE_MAP_POSITIVE_X+U,vt.__webglTexture,B)}else if(dt){const vt=Et.get(x.texture),Lt=U;R.framebufferTextureLayer(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,vt.__webglTexture,B,Lt)}else if(x!==null&&B!==0){const vt=Et.get(x.texture);R.framebufferTexture2D(R.FRAMEBUFFER,R.COLOR_ATTACHMENT0,R.TEXTURE_2D,vt.__webglTexture,B)}S=-1},this.readRenderTargetPixels=function(x,U,B,z,N,et,dt){if(!(x&&x.isWebGLRenderTarget)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");return}let gt=Et.get(x).__webglFramebuffer;if(x.isWebGLCubeRenderTarget&&dt!==void 0&&(gt=gt[dt]),gt){bt.bindFramebuffer(R.FRAMEBUFFER,gt);try{const vt=x.texture,Lt=vt.format,It=vt.type;if(!jt.textureFormatReadable(Lt)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");return}if(!jt.textureTypeReadable(It)){console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");return}U>=0&&U<=x.width-z&&B>=0&&B<=x.height-N&&R.readPixels(U,B,z,N,Ot.convert(Lt),Ot.convert(It),et)}finally{const vt=I!==null?Et.get(I).__webglFramebuffer:null;bt.bindFramebuffer(R.FRAMEBUFFER,vt)}}},this.readRenderTargetPixelsAsync=async function(x,U,B,z,N,et,dt){if(!(x&&x.isWebGLRenderTarget))throw new Error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");let gt=Et.get(x).__webglFramebuffer;if(x.isWebGLCubeRenderTarget&&dt!==void 0&&(gt=gt[dt]),gt){const vt=x.texture,Lt=vt.format,It=vt.type;if(!jt.textureFormatReadable(Lt))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.");if(!jt.textureTypeReadable(It))throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.");if(U>=0&&U<=x.width-z&&B>=0&&B<=x.height-N){bt.bindFramebuffer(R.FRAMEBUFFER,gt);const Rt=R.createBuffer();R.bindBuffer(R.PIXEL_PACK_BUFFER,Rt),R.bufferData(R.PIXEL_PACK_BUFFER,et.byteLength,R.STREAM_READ),R.readPixels(U,B,z,N,Ot.convert(Lt),Ot.convert(It),0);const Zt=I!==null?Et.get(I).__webglFramebuffer:null;bt.bindFramebuffer(R.FRAMEBUFFER,Zt);const te=R.fenceSync(R.SYNC_GPU_COMMANDS_COMPLETE,0);return R.flush(),await Fh(R,te,4),R.bindBuffer(R.PIXEL_PACK_BUFFER,Rt),R.getBufferSubData(R.PIXEL_PACK_BUFFER,0,et),R.deleteBuffer(Rt),R.deleteSync(te),et}else throw new Error("THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.")}},this.copyFramebufferToTexture=function(x,U=null,B=0){x.isTexture!==!0&&(Fi("WebGLRenderer: copyFramebufferToTexture function signature has changed."),U=arguments[0]||null,x=arguments[1]);const z=Math.pow(2,-B),N=Math.floor(x.image.width*z),et=Math.floor(x.image.height*z),dt=U!==null?U.x:0,gt=U!==null?U.y:0;b.setTexture2D(x,0),R.copyTexSubImage2D(R.TEXTURE_2D,B,0,0,dt,gt,N,et),bt.unbindTexture()};const Nc=R.createFramebuffer(),Fc=R.createFramebuffer();this.copyTextureToTexture=function(x,U,B=null,z=null,N=0,et=null){x.isTexture!==!0&&(Fi("WebGLRenderer: copyTextureToTexture function signature has changed."),z=arguments[0]||null,x=arguments[1],U=arguments[2],et=arguments[3]||0,B=null),et===null&&(N!==0?(Fi("WebGLRenderer: copyTextureToTexture function signature has changed to support src and dst mipmap levels."),et=N,N=0):et=0);let dt,gt,vt,Lt,It,Rt,Zt,te,ve;const pe=x.isCompressedTexture?x.mipmaps[et]:x.image;if(B!==null)dt=B.max.x-B.min.x,gt=B.max.y-B.min.y,vt=B.isBox3?B.max.z-B.min.z:1,Lt=B.min.x,It=B.min.y,Rt=B.isBox3?B.min.z:0;else{const tn=Math.pow(2,-N);dt=Math.floor(pe.width*tn),gt=Math.floor(pe.height*tn),x.isDataArrayTexture?vt=pe.depth:x.isData3DTexture?vt=Math.floor(pe.depth*tn):vt=1,Lt=0,It=0,Rt=0}z!==null?(Zt=z.x,te=z.y,ve=z.z):(Zt=0,te=0,ve=0);const $t=Ot.convert(U.format),Ct=Ot.convert(U.type);let Pe;U.isData3DTexture?(b.setTexture3D(U,0),Pe=R.TEXTURE_3D):U.isDataArrayTexture||U.isCompressedArrayTexture?(b.setTexture2DArray(U,0),Pe=R.TEXTURE_2D_ARRAY):(b.setTexture2D(U,0),Pe=R.TEXTURE_2D),R.pixelStorei(R.UNPACK_FLIP_Y_WEBGL,U.flipY),R.pixelStorei(R.UNPACK_PREMULTIPLY_ALPHA_WEBGL,U.premultiplyAlpha),R.pixelStorei(R.UNPACK_ALIGNMENT,U.unpackAlignment);const ee=R.getParameter(R.UNPACK_ROW_LENGTH),ln=R.getParameter(R.UNPACK_IMAGE_HEIGHT),mi=R.getParameter(R.UNPACK_SKIP_PIXELS),je=R.getParameter(R.UNPACK_SKIP_ROWS),ns=R.getParameter(R.UNPACK_SKIP_IMAGES);R.pixelStorei(R.UNPACK_ROW_LENGTH,pe.width),R.pixelStorei(R.UNPACK_IMAGE_HEIGHT,pe.height),R.pixelStorei(R.UNPACK_SKIP_PIXELS,Lt),R.pixelStorei(R.UNPACK_SKIP_ROWS,It),R.pixelStorei(R.UNPACK_SKIP_IMAGES,Rt);const ue=x.isDataArrayTexture||x.isData3DTexture,Qe=U.isDataArrayTexture||U.isData3DTexture;if(x.isDepthTexture){const tn=Et.get(x),Be=Et.get(U),We=Et.get(tn.__renderTarget),Rr=Et.get(Be.__renderTarget);bt.bindFramebuffer(R.READ_FRAMEBUFFER,We.__webglFramebuffer),bt.bindFramebuffer(R.DRAW_FRAMEBUFFER,Rr.__webglFramebuffer);for(let qn=0;qnMath.PI&&(n-=Xe),s<-Math.PI?s+=Xe:s>Math.PI&&(s-=Xe),n<=s?this._spherical.theta=Math.max(n,Math.min(s,this._spherical.theta)):this._spherical.theta=this._spherical.theta>(n+s)/2?Math.max(n,this._spherical.theta):Math.min(s,this._spherical.theta)),this._spherical.phi=Math.max(this.minPolarAngle,Math.min(this.maxPolarAngle,this._spherical.phi)),this._spherical.makeSafe(),this.enableDamping===!0?this.target.addScaledVector(this._panOffset,this.dampingFactor):this.target.add(this._panOffset),this.target.sub(this.cursor),this.target.clampLength(this.minTargetRadius,this.maxTargetRadius),this.target.add(this.cursor);let r=!1;if(this.zoomToCursor&&this._performCursorZoom||this.object.isOrthographicCamera)this._spherical.radius=this._clampDistance(this._spherical.radius);else{const a=this._spherical.radius;this._spherical.radius=this._clampDistance(this._spherical.radius*this._scale),r=a!=this._spherical.radius}if(Se.setFromSpherical(this._spherical),Se.applyQuaternion(this._quatInverse),e.copy(this.target).add(Se),this.object.lookAt(this.target),this.enableDamping===!0?(this._sphericalDelta.theta*=1-this.dampingFactor,this._sphericalDelta.phi*=1-this.dampingFactor,this._panOffset.multiplyScalar(1-this.dampingFactor)):(this._sphericalDelta.set(0,0,0),this._panOffset.set(0,0,0)),this.zoomToCursor&&this._performCursorZoom){let a=null;if(this.object.isPerspectiveCamera){const o=Se.length();a=this._clampDistance(o*this._scale);const l=o-a;this.object.position.addScaledVector(this._dollyDirection,l),this.object.updateMatrixWorld(),r=!!l}else if(this.object.isOrthographicCamera){const o=new P(this._mouse.x,this._mouse.y,0);o.unproject(this.object);const l=this.object.zoom;this.object.zoom=Math.max(this.minZoom,Math.min(this.maxZoom,this.object.zoom/this._scale)),this.object.updateProjectionMatrix(),r=l!==this.object.zoom;const c=new P(this._mouse.x,this._mouse.y,0);c.unproject(this.object),this.object.position.sub(c).add(o),this.object.updateMatrixWorld(),a=Se.length()}else console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."),this.zoomToCursor=!1;a!==null&&(this.screenSpacePanning?this.target.set(0,0,-1).transformDirection(this.object.matrix).multiplyScalar(a).add(this.object.position):(rr.origin.copy(this.object.position),rr.direction.set(0,0,-1).transformDirection(this.object.matrix),Math.abs(this.object.up.dot(rr.direction))ca||8*(1-this._lastQuaternion.dot(this.object.quaternion))>ca||this._lastTargetPosition.distanceToSquared(this.target)>ca?(this.dispatchEvent(Nl),this._lastPosition.copy(this.object.position),this._lastQuaternion.copy(this.object.quaternion),this._lastTargetPosition.copy(this.target),!0):!1}_getAutoRotationAngle(t){return t!==null?Xe/60*this.autoRotateSpeed*t:Xe/60/60*this.autoRotateSpeed}_getZoomScale(t){const e=Math.abs(t*.01);return Math.pow(.95,this.zoomSpeed*e)}_rotateLeft(t){this._sphericalDelta.theta-=t}_rotateUp(t){this._sphericalDelta.phi-=t}_panLeft(t,e){Se.setFromMatrixColumn(e,0),Se.multiplyScalar(-t),this._panOffset.add(Se)}_panUp(t,e){this.screenSpacePanning===!0?Se.setFromMatrixColumn(e,1):(Se.setFromMatrixColumn(e,0),Se.crossVectors(this.object.up,Se)),Se.multiplyScalar(t),this._panOffset.add(Se)}_pan(t,e){const n=this.domElement;if(this.object.isPerspectiveCamera){const s=this.object.position;Se.copy(s).sub(this.target);let r=Se.length();r*=Math.tan(this.object.fov/2*Math.PI/180),this._panLeft(2*t*r/n.clientHeight,this.object.matrix),this._panUp(2*e*r/n.clientHeight,this.object.matrix)}else this.object.isOrthographicCamera?(this._panLeft(t*(this.object.right-this.object.left)/this.object.zoom/n.clientWidth,this.object.matrix),this._panUp(e*(this.object.top-this.object.bottom)/this.object.zoom/n.clientHeight,this.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),this.enablePan=!1)}_dollyOut(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale/=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_dollyIn(t){this.object.isPerspectiveCamera||this.object.isOrthographicCamera?this._scale*=t:(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),this.enableZoom=!1)}_updateZoomParameters(t,e){if(!this.zoomToCursor)return;this._performCursorZoom=!0;const n=this.domElement.getBoundingClientRect(),s=t-n.left,r=e-n.top,a=n.width,o=n.height;this._mouse.x=s/a*2-1,this._mouse.y=-(r/o)*2+1,this._dollyDirection.set(this._mouse.x,this._mouse.y,1).unproject(this.object).sub(this.object.position).normalize()}_clampDistance(t){return Math.max(this.minDistance,Math.min(this.maxDistance,t))}_handleMouseDownRotate(t){this._rotateStart.set(t.clientX,t.clientY)}_handleMouseDownDolly(t){this._updateZoomParameters(t.clientX,t.clientX),this._dollyStart.set(t.clientX,t.clientY)}_handleMouseDownPan(t){this._panStart.set(t.clientX,t.clientY)}_handleMouseMoveRotate(t){this._rotateEnd.set(t.clientX,t.clientY),this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Xe*this._rotateDelta.x/e.clientHeight),this._rotateUp(Xe*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd),this.update()}_handleMouseMoveDolly(t){this._dollyEnd.set(t.clientX,t.clientY),this._dollyDelta.subVectors(this._dollyEnd,this._dollyStart),this._dollyDelta.y>0?this._dollyOut(this._getZoomScale(this._dollyDelta.y)):this._dollyDelta.y<0&&this._dollyIn(this._getZoomScale(this._dollyDelta.y)),this._dollyStart.copy(this._dollyEnd),this.update()}_handleMouseMovePan(t){this._panEnd.set(t.clientX,t.clientY),this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd),this.update()}_handleMouseWheel(t){this._updateZoomParameters(t.clientX,t.clientY),t.deltaY<0?this._dollyIn(this._getZoomScale(t.deltaY)):t.deltaY>0&&this._dollyOut(this._getZoomScale(t.deltaY)),this.update()}_handleKeyDown(t){let e=!1;switch(t.code){case this.keys.UP:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(Xe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,this.keyPanSpeed),e=!0;break;case this.keys.BOTTOM:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateUp(-Xe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(0,-this.keyPanSpeed),e=!0;break;case this.keys.LEFT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(Xe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(this.keyPanSpeed,0),e=!0;break;case this.keys.RIGHT:t.ctrlKey||t.metaKey||t.shiftKey?this.enableRotate&&this._rotateLeft(-Xe*this.keyRotateSpeed/this.domElement.clientHeight):this.enablePan&&this._pan(-this.keyPanSpeed,0),e=!0;break}e&&(t.preventDefault(),this.update())}_handleTouchStartRotate(t){if(this._pointers.length===1)this._rotateStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._rotateStart.set(n,s)}}_handleTouchStartPan(t){if(this._pointers.length===1)this._panStart.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._panStart.set(n,s)}}_handleTouchStartDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,s=t.pageY-e.y,r=Math.sqrt(n*n+s*s);this._dollyStart.set(0,r)}_handleTouchStartDollyPan(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enablePan&&this._handleTouchStartPan(t)}_handleTouchStartDollyRotate(t){this.enableZoom&&this._handleTouchStartDolly(t),this.enableRotate&&this._handleTouchStartRotate(t)}_handleTouchMoveRotate(t){if(this._pointers.length==1)this._rotateEnd.set(t.pageX,t.pageY);else{const n=this._getSecondPointerPosition(t),s=.5*(t.pageX+n.x),r=.5*(t.pageY+n.y);this._rotateEnd.set(s,r)}this._rotateDelta.subVectors(this._rotateEnd,this._rotateStart).multiplyScalar(this.rotateSpeed);const e=this.domElement;this._rotateLeft(Xe*this._rotateDelta.x/e.clientHeight),this._rotateUp(Xe*this._rotateDelta.y/e.clientHeight),this._rotateStart.copy(this._rotateEnd)}_handleTouchMovePan(t){if(this._pointers.length===1)this._panEnd.set(t.pageX,t.pageY);else{const e=this._getSecondPointerPosition(t),n=.5*(t.pageX+e.x),s=.5*(t.pageY+e.y);this._panEnd.set(n,s)}this._panDelta.subVectors(this._panEnd,this._panStart).multiplyScalar(this.panSpeed),this._pan(this._panDelta.x,this._panDelta.y),this._panStart.copy(this._panEnd)}_handleTouchMoveDolly(t){const e=this._getSecondPointerPosition(t),n=t.pageX-e.x,s=t.pageY-e.y,r=Math.sqrt(n*n+s*s);this._dollyEnd.set(0,r),this._dollyDelta.set(0,Math.pow(this._dollyEnd.y/this._dollyStart.y,this.zoomSpeed)),this._dollyOut(this._dollyDelta.y),this._dollyStart.copy(this._dollyEnd);const a=(t.pageX+e.x)*.5,o=(t.pageY+e.y)*.5;this._updateZoomParameters(a,o)}_handleTouchMoveDollyPan(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enablePan&&this._handleTouchMovePan(t)}_handleTouchMoveDollyRotate(t){this.enableZoom&&this._handleTouchMoveDolly(t),this.enableRotate&&this._handleTouchMoveRotate(t)}_addPointer(t){this._pointers.push(t.pointerId)}_removePointer(t){delete this._pointerPositions[t.pointerId];for(let e=0;e{var e;(t instanceof Me||t instanceof su)&&((e=t.geometry)==null||e.dispose(),Array.isArray(t.material)?t.material.forEach(n=>n.dispose()):t.material&&t.material.dispose())}),i.renderer.dispose(),i.composer.dispose()}class wg{constructor(t){zt(this,"positions");zt(this,"velocities");zt(this,"running",!0);zt(this,"step",0);zt(this,"repulsionStrength",500);zt(this,"attractionStrength",.01);zt(this,"dampening",.9);zt(this,"baseMaxSteps",300);zt(this,"maxSteps",300);zt(this,"cooldownExtension",0);this.positions=t,this.velocities=new Map;for(const e of t.keys())this.velocities.set(e,new C)}addNode(t,e){this.positions.set(t,e.clone()),this.velocities.set(t,new C),this.cooldownExtension=100,this.maxSteps=Math.max(this.maxSteps,this.step+this.cooldownExtension),this.running=!0}removeNode(t){this.positions.delete(t),this.velocities.delete(t)}tick(t){if(!this.running)return;if(this.step>this.maxSteps){this.cooldownExtension>0&&(this.cooldownExtension=0,this.maxSteps=this.baseMaxSteps);return}this.step++;const e=Math.max(.001,1-this.step/this.maxSteps),n=Array.from(this.positions.keys());for(let s=0;s=.7?"active":i>=.4?"dormant":i>=.1?"silent":"unavailable"}const Ka={active:"#10b981",dormant:"#f59e0b",silent:"#8b5cf6",unavailable:"#6b7280"},Rg={active:"Easily retrievable (retention ≥ 70%)",dormant:"Retrievable with effort (40–70%)",silent:"Difficult, needs cues (10–40%)",unavailable:"Needs reinforcement (< 10%)"};function Cl(i,t){return t==="state"?Ka[Ag(i.retention)]:zl[i.type]||"#8B95A5"}let os=null;function Cg(){if(os)return os;const i=128,t=document.createElement("canvas");t.width=i,t.height=i;const e=t.getContext("2d");if(!e)return os=new be,os;const n=e.createRadialGradient(i/2,i/2,0,i/2,i/2,i/2);n.addColorStop(0,"rgba(255, 255, 255, 1.0)"),n.addColorStop(.25,"rgba(255, 255, 255, 0.7)"),n.addColorStop(.55,"rgba(255, 255, 255, 0.2)"),n.addColorStop(1,"rgba(255, 255, 255, 0.0)"),e.fillStyle=n,e.fillRect(0,0,i,i);const s=new uc(t);return s.needsUpdate=!0,os=s,s}function Pl(i){if(i===0||i===1)return i;const t=.3;return Math.pow(2,-10*i)*Math.sin((i-t/4)*(2*Math.PI)/t)+1}function Pg(i){return i*i*((1.70158+1)*i-1.70158)}class Dg{constructor(){zt(this,"group");zt(this,"meshMap",new Map);zt(this,"glowMap",new Map);zt(this,"positions",new Map);zt(this,"labelSprites",new Map);zt(this,"hoveredNode",null);zt(this,"selectedNode",null);zt(this,"colorMode","type");zt(this,"materializingNodes",[]);zt(this,"dissolvingNodes",[]);zt(this,"growingNodes",[]);this.group=new Pi}setColorMode(t){if(this.colorMode!==t){this.colorMode=t;for(const[e,n]of this.meshMap){const s=n.userData.retention??0,a={type:n.userData.type??"fact",retention:s},o=Cl(a,t),l=new rt(o),c=n.material;c.color.copy(l),c.emissive.copy(l);const h=this.glowMap.get(e);h&&h.material.color.copy(l)}}}createNodes(t){const e=(1+Math.sqrt(5))/2,n=t.length;for(let s=0;s0,o=new Mr(s,16,16),l=new ou({color:new rt(r),emissive:new rt(r),emissiveIntensity:a?0:.3+t.retention*.5,roughness:.3,metalness:.1,transparent:!0,opacity:a?.2:.3+t.retention*.7}),c=new Me(o,l);c.position.copy(e),c.scale.setScalar(n),c.userData={nodeId:t.id,type:t.type,retention:t.retention},this.meshMap.set(t.id,c),this.group.add(c);const h=new ar({map:Cg(),color:new rt(r),transparent:!0,opacity:n>0?a?.1:.3+t.retention*.35:0,blending:Be,depthWrite:!1}),d=new Vs(h);d.scale.set(s*6*n,s*6*n,1),d.position.copy(e),d.userData={isGlow:!0,nodeId:t.id},this.glowMap.set(t.id,d),this.group.add(d);const p=t.label||t.type,u=this.createTextSprite(p,"#94a3b8");return u.position.copy(e),u.position.y+=s*2+1.5,u.userData={isLabel:!0,nodeId:t.id,offset:s*2+1.5},this.group.add(u),this.labelSprites.set(t.id,u),{mesh:c,glow:d,label:u,size:s}}addNode(t,e){const n=(e==null?void 0:e.clone())??new C((Math.random()-.5)*40,(Math.random()-.5)*40,(Math.random()-.5)*40);this.positions.set(t.id,n);const{mesh:s,glow:r,label:a}=this.createNodeMeshes(t,n,0);return s.scale.setScalar(.001),r.scale.set(.001,.001,1),r.material.opacity=0,a.material.opacity=0,this.materializingNodes.push({id:t.id,frame:0,totalFrames:30,mesh:s,glow:r,label:a,targetScale:.5+t.retention*2}),n}removeNode(t){const e=this.meshMap.get(t),n=this.glowMap.get(t),s=this.labelSprites.get(t);!e||!n||!s||(this.materializingNodes=this.materializingNodes.filter(r=>r.id!==t),this.dissolvingNodes.push({id:t,frame:0,totalFrames:60,mesh:e,glow:n,label:s,originalScale:e.scale.x}))}growNode(t,e){const n=this.meshMap.get(t);if(!n)return;const s=n.scale.x,r=.5+e*2;n.userData.retention=e,this.growingNodes.push({id:t,frame:0,totalFrames:30,startScale:s,targetScale:r})}createTextSprite(t,e){const n=document.createElement("canvas"),s=n.getContext("2d");if(!s){const f=new be;return new Vs(new ar({map:f,transparent:!0,opacity:0}))}n.width=512,n.height=64;const r=t.length>40?t.slice(0,37)+"...":t;s.clearRect(0,0,n.width,n.height),s.font='600 22px -apple-system, BlinkMacSystemFont, "SF Pro Text", sans-serif';const o=s.measureText(r).width,c=Math.min(o+14*2,n.width-4),h=40,d=(n.width-c)/2,p=(n.height-h)/2,u=h/2;s.fillStyle="rgba(10, 16, 28, 0.82)",s.beginPath(),s.moveTo(d+u,p),s.lineTo(d+c-u,p),s.quadraticCurveTo(d+c,p,d+c,p+u),s.lineTo(d+c,p+h-u),s.quadraticCurveTo(d+c,p+h,d+c-u,p+h),s.lineTo(d+u,p+h),s.quadraticCurveTo(d,p+h,d,p+h-u),s.lineTo(d,p+u),s.quadraticCurveTo(d,p,d+u,p),s.closePath(),s.fill(),s.strokeStyle="rgba(148, 163, 184, 0.18)",s.lineWidth=1,s.stroke(),s.textAlign="center",s.textBaseline="middle",s.fillStyle=e,s.fillText(r,n.width/2,n.height/2+1);const g=new uc(n);g.needsUpdate=!0;const v=new ar({map:g,transparent:!0,opacity:0,depthTest:!1,sizeAttenuation:!0}),m=new Vs(v);return m.scale.set(9,1.2,1),m}updatePositions(){this.group.children.forEach(t=>{if(t.userData.nodeId){const e=this.positions.get(t.userData.nodeId);if(!e)return;t.userData.isGlow?t.position.copy(e):t.userData.isLabel?(t.position.copy(e),t.position.y+=t.userData.offset):t instanceof Me&&t.position.copy(e)}})}animate(t,e,n){var r,a;for(let o=this.materializingNodes.length-1;o>=0;o--){const l=this.materializingNodes[o];l.frame++;const c=Math.min(l.frame/l.totalFrames,1),h=Pl(c);if(l.mesh.scale.setScalar(Math.max(.001,h)),l.frame>=5){const d=Math.min((l.frame-5)/5,1),p=l.glow.material;p.opacity=d*.4;const u=l.targetScale*6*h;l.glow.scale.set(u,u,1)}if(l.frame>=40){const d=Math.min((l.frame-40)/20,1);l.label.material.opacity=d*.9}l.frame>=60&&this.materializingNodes.splice(o,1)}for(let o=this.dissolvingNodes.length-1;o>=0;o--){const l=this.dissolvingNodes[o];l.frame++;const c=Math.min(l.frame/l.totalFrames,1),h=1-Pg(c),d=Math.max(.001,l.originalScale*h);l.mesh.scale.setScalar(d);const p=d*6;l.glow.scale.set(p,p,1);const u=l.mesh.material;u.opacity*=.97,l.glow.material.opacity*=.95,l.label.material.opacity*=.93,l.frame>=l.totalFrames&&(this.group.remove(l.mesh),this.group.remove(l.glow),this.group.remove(l.label),l.mesh.geometry.dispose(),l.mesh.material.dispose(),(r=l.glow.material.map)==null||r.dispose(),l.glow.material.dispose(),(a=l.label.material.map)==null||a.dispose(),l.label.material.dispose(),this.meshMap.delete(l.id),this.glowMap.delete(l.id),this.labelSprites.delete(l.id),this.positions.delete(l.id),this.dissolvingNodes.splice(o,1))}for(let o=this.growingNodes.length-1;o>=0;o--){const l=this.growingNodes[o];l.frame++;const c=Math.min(l.frame/l.totalFrames,1),h=l.startScale+(l.targetScale-l.startScale)*Pl(c),d=this.meshMap.get(l.id);d&&d.scale.setScalar(h);const p=this.glowMap.get(l.id);if(p){const u=h*6;p.scale.set(u,u,1)}l.frame>=l.totalFrames&&this.growingNodes.splice(o,1)}const s=new Set([...this.materializingNodes.map(o=>o.id),...this.dissolvingNodes.map(o=>o.id),...this.growingNodes.map(o=>o.id)]);this.meshMap.forEach((o,l)=>{if(s.has(l))return;const c=e.find(p=>p.id===l);if(!c)return;const h=1+Math.sin(t*1.5+e.indexOf(c)*.5)*.15*c.retention;o.scale.setScalar(h);const d=o.material;if(l===this.hoveredNode)d.emissiveIntensity=1;else if(l===this.selectedNode)d.emissiveIntensity=.8;else{const u=.3+c.retention*.5+Math.sin(t*(.8+c.retention*.7))*.1*c.retention;d.emissiveIntensity=u}}),this.labelSprites.forEach((o,l)=>{if(s.has(l))return;const c=this.positions.get(l);if(!c)return;const h=n.position.distanceTo(c),d=o.material,p=l===this.hoveredNode||l===this.selectedNode?1:h<40?.9:h<80?.9*(1-(h-40)/40):0;d.opacity+=(p-d.opacity)*.1})}getMeshes(){return Array.from(this.meshMap.values())}dispose(){this.group.traverse(t=>{var e,n,s,r,a;t instanceof Me?((e=t.geometry)==null||e.dispose(),(n=t.material)==null||n.dispose()):t instanceof Vs&&((r=(s=t.material)==null?void 0:s.map)==null||r.dispose(),(a=t.material)==null||a.dispose())}),this.materializingNodes=[],this.dissolvingNodes=[],this.growingNodes=[]}}function Lg(i){return 1-Math.pow(1-i,3)}class Ug{constructor(){zt(this,"group");zt(this,"growingEdges",[]);zt(this,"dissolvingEdges",[]);this.group=new Pi}createEdges(t,e){for(const n of t){const s=e.get(n.source),r=e.get(n.target);if(!s||!r)continue;const a=[s,r],o=new ge().setFromPoints(a),l=new mr({color:9133302,transparent:!0,opacity:Math.min(.25+n.weight*.5,.8),blending:Be,depthWrite:!1}),c=new Ya(o,l);c.userData={source:n.source,target:n.target},this.group.add(c)}}addEdge(t,e){const n=e.get(t.source),s=e.get(t.target);if(!n||!s)return;const r=[n.clone(),n.clone()],a=new ge().setFromPoints(r),o=new mr({color:9133302,transparent:!0,opacity:0,blending:Be,depthWrite:!1}),l=new Ya(a,o);l.userData={source:t.source,target:t.target},this.group.add(l),this.growingEdges.push({line:l,source:t.source,target:t.target,frame:0,totalFrames:45})}removeEdgesForNode(t){const e=[];this.group.children.forEach(n=>{const s=n;(s.userData.source===t||s.userData.target===t)&&e.push(s)});for(const n of e)this.growingEdges=this.growingEdges.filter(s=>s.line!==n),this.dissolvingEdges.push({line:n,frame:0,totalFrames:40})}animateEdges(t){for(let e=this.growingEdges.length-1;e>=0;e--){const n=this.growingEdges[e];n.frame++;const s=Lg(Math.min(n.frame/n.totalFrames,1)),r=t.get(n.source),a=t.get(n.target);if(!r||!a)continue;const o=r.clone().lerp(a,s),l=n.line.geometry.attributes.position;l.setXYZ(0,r.x,r.y,r.z),l.setXYZ(1,o.x,o.y,o.z),l.needsUpdate=!0;const c=n.line.material;c.opacity=s*.65,n.frame>=n.totalFrames&&(c.opacity=.65,this.growingEdges.splice(e,1))}for(let e=this.dissolvingEdges.length-1;e>=0;e--){const n=this.dissolvingEdges[e];n.frame++;const s=n.frame/n.totalFrames,r=n.line.material;r.opacity=Math.max(0,.65*(1-s)),n.frame>=n.totalFrames&&(this.group.remove(n.line),n.line.geometry.dispose(),n.line.material.dispose(),this.dissolvingEdges.splice(e,1))}}updatePositions(t){this.group.children.forEach(e=>{const n=e;if(this.growingEdges.some(a=>a.line===n)||this.dissolvingEdges.some(a=>a.line===n))return;const s=t.get(n.userData.source),r=t.get(n.userData.target);if(s&&r){const a=n.geometry.attributes.position;a.setXYZ(0,s.x,s.y,s.z),a.setXYZ(1,r.x,r.y,r.z),a.needsUpdate=!0}})}dispose(){this.group.children.forEach(t=>{var n,s;const e=t;(n=e.geometry)==null||n.dispose(),(s=e.material)==null||s.dispose()}),this.growingEdges=[],this.dissolvingEdges=[]}}class Ig{constructor(t){zt(this,"starField");zt(this,"neuralParticles");this.starField=this.createStarField(),this.neuralParticles=this.createNeuralParticles(),t.add(this.starField),t.add(this.neuralParticles)}createStarField(){const e=new ge,n=new Float32Array(3e3*3),s=new Float32Array(3e3);for(let a=0;a<3e3;a++)n[a*3]=(Math.random()-.5)*1e3,n[a*3+1]=(Math.random()-.5)*1e3,n[a*3+2]=(Math.random()-.5)*1e3,s[a]=Math.random()*1.5;e.setAttribute("position",new ue(n,3)),e.setAttribute("size",new ue(s,1));const r=new ni({color:6514417,size:.5,transparent:!0,opacity:.4,sizeAttenuation:!0,blending:Be});return new Fi(e,r)}createNeuralParticles(){const e=new ge,n=new Float32Array(500*3),s=new Float32Array(500*3);for(let a=0;a<500;a++)n[a*3]=(Math.random()-.5)*100,n[a*3+1]=(Math.random()-.5)*100,n[a*3+2]=(Math.random()-.5)*100,s[a*3]=.4+Math.random()*.3,s[a*3+1]=.3+Math.random()*.2,s[a*3+2]=.8+Math.random()*.2;e.setAttribute("position",new ue(n,3)),e.setAttribute("color",new ue(s,3));const r=new ni({size:.3,vertexColors:!0,transparent:!0,opacity:.4,blending:Be,sizeAttenuation:!0});return new Fi(e,r)}animate(t){this.starField.rotation.y+=1e-4,this.starField.rotation.x+=5e-5;const e=this.neuralParticles.geometry.attributes.position;for(let n=0;n=0;s--){const r=this.pulseEffects[s];if(r.intensity-=r.decay,r.intensity<=0){this.pulseEffects.splice(s,1);continue}const a=t.get(r.nodeId);if(a){const o=a.material;o.emissive.lerp(r.color,r.intensity*.3),o.emissiveIntensity=Math.max(o.emissiveIntensity,r.intensity)}}for(let s=this.spawnBursts.length-1;s>=0;s--){const r=this.spawnBursts[s];if(r.age++,r.age>120){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),this.spawnBursts.splice(s,1);continue}const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity;for(let c=0;c=0;s--){const r=this.rainbowBursts[s];if(r.age++,r.age>r.maxAge){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),this.rainbowBursts.splice(s,1);continue}const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity;for(let p=0;p=0;s--){const r=this.rippleWaves[s];if(r.age++,r.radius+=r.speed,r.age>r.maxAge){this.rippleWaves.splice(s,1);continue}const a=r.radius,o=3;n.forEach((l,c)=>{if(r.pulsedNodes.has(c))return;const h=l.distanceTo(r.origin);h>=a-o&&h<=a+o&&(r.pulsedNodes.add(c),this.addPulse(c,.8,new rt(65489),.03))})}for(let s=this.implosions.length-1;s>=0;s--){const r=this.implosions[s];if(r.age++,r.age>r.maxAge+20){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),r.flash&&(this.scene.remove(r.flash),r.flash.geometry.dispose(),r.flash.material.dispose()),this.implosions.splice(s,1);continue}if(r.age<=r.maxAge){const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity,l=1+r.age*.02;for(let h=0;hr.maxAge){const a=(r.age-r.maxAge)/20;r.flash.material.opacity=Math.max(0,1-a),r.flash.scale.setScalar(1+a*3)}}for(let s=this.shockwaves.length-1;s>=0;s--){const r=this.shockwaves[s];if(r.age++,r.age>r.maxAge){this.scene.remove(r.mesh),r.mesh.geometry.dispose(),r.mesh.material.dispose(),this.shockwaves.splice(s,1);continue}const a=r.age/r.maxAge;r.mesh.scale.setScalar(1+a*20),r.mesh.material.opacity=.8*(1-a),r.mesh.lookAt(e.position)}for(let s=this.connectionFlashes.length-1;s>=0;s--){const r=this.connectionFlashes[s];if(r.intensity-=.015,r.intensity<=0){this.scene.remove(r.line),r.line.geometry.dispose(),r.line.material.dispose(),this.connectionFlashes.splice(s,1);continue}r.line.material.opacity=r.intensity}}dispose(){for(const t of this.spawnBursts)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose();for(const t of this.rainbowBursts)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose();for(const t of this.implosions)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose(),t.flash&&(this.scene.remove(t.flash),t.flash.geometry.dispose(),t.flash.material.dispose());for(const t of this.shockwaves)this.scene.remove(t.mesh),t.mesh.geometry.dispose(),t.mesh.material.dispose();for(const t of this.connectionFlashes)this.scene.remove(t.line),t.line.geometry.dispose(),t.line.material.dispose();this.pulseEffects=[],this.spawnBursts=[],this.rainbowBursts=[],this.rippleWaves=[],this.implosions=[],this.shockwaves=[],this.connectionFlashes=[]}}const yn={bloomStrength:.8,rotateSpeed:.3,fogColor:328976,fogDensity:.008,nebulaIntensity:0,chromaticIntensity:.002,vignetteRadius:.9,breatheAmplitude:1},Nn={bloomStrength:1.8,rotateSpeed:.08,fogColor:656672,fogDensity:.006,nebulaIntensity:1,chromaticIntensity:.005,vignetteRadius:.7,breatheAmplitude:2};class Fg{constructor(){zt(this,"active",!1);zt(this,"transition",0);zt(this,"transitionSpeed",.008);zt(this,"current");zt(this,"auroraHue",0);this.current={...yn}}setActive(t){this.active=t}update(t,e,n,s,r){const a=this.active?1:0;this.transition+=(a-this.transition)*this.transitionSpeed*60*(1/60),this.transition=Math.max(0,Math.min(1,this.transition));const o=this.transition;this.current.bloomStrength=this.lerp(yn.bloomStrength,Nn.bloomStrength,o),this.current.rotateSpeed=this.lerp(yn.rotateSpeed,Nn.rotateSpeed,o),this.current.fogDensity=this.lerp(yn.fogDensity,Nn.fogDensity,o),this.current.nebulaIntensity=this.lerp(yn.nebulaIntensity,Nn.nebulaIntensity,o),this.current.chromaticIntensity=this.lerp(yn.chromaticIntensity,Nn.chromaticIntensity,o),this.current.vignetteRadius=this.lerp(yn.vignetteRadius,Nn.vignetteRadius,o),this.current.breatheAmplitude=this.lerp(yn.breatheAmplitude,Nn.breatheAmplitude,o),e.strength=this.current.bloomStrength,n.autoRotateSpeed=this.current.rotateSpeed;const l=new rt(yn.fogColor),c=new rt(Nn.fogColor),h=l.clone().lerp(c,o);if(t.fog=new xr(h,this.current.fogDensity),o>.01){this.auroraHue=r*.1%1;const d=new rt().setHSL(.75+this.auroraHue*.15,.8,.5),p=new rt().setHSL(.55+this.auroraHue*.2,.7,.4);s.point1.color.lerp(d,o*.3),s.point2.color.lerp(p,o*.3)}else s.point1.color.set(6514417),s.point2.color.set(11032055)}lerp(t,e,n){return t+(e-t)*n}}const Og=50,hs=[];function Bg(i,t,e){const n=i.tags??[],s=i.type??"";let r=null,a=0;for(const o of t){let l=0;o.type===s&&(l+=2);for(const c of o.tags)n.includes(c)&&(l+=1);l>a&&(a=l,r=o.id)}if(r&&a>0){const o=e.get(r);if(o)return new C(o.x+(Math.random()-.5)*10,o.y+(Math.random()-.5)*10,o.z+(Math.random()-.5)*10)}return new C((Math.random()-.5)*40,(Math.random()-.5)*40,(Math.random()-.5)*40)}function zg(i,t){if(hs.length<=Og)return;const e=hs.shift();i.edgeManager.removeEdgesForNode(e),i.nodeManager.removeNode(e),i.forceSim.removeNode(e),i.onMutation({type:"edgesRemoved",nodeId:e}),i.onMutation({type:"nodeRemoved",nodeId:e});const n=t.findIndex(s=>s.id===e);n!==-1&&t.splice(n,1)}function kg(i,t,e){var d,p;const{effects:n,nodeManager:s,edgeManager:r,forceSim:a,camera:o,onMutation:l}=t,c=s.positions,h=s.meshMap;switch(i.type){case"MemoryCreated":{const u=i.data;if(!u.id)break;const g={id:u.id,label:(u.content??"").slice(0,60),type:u.node_type??"fact",retention:Math.max(0,Math.min(1,u.retention??.9)),tags:u.tags??[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),isCenter:!1},v=Bg(g,e,c),m=s.addNode(g,v);a.addNode(u.id,m),hs.push(u.id),zg(t,e);const f=new rt(zl[g.type]||"#00ffd1");n.createRainbowBurst(v,f),n.createShockwave(v,f,o);const T=f.clone();T.offsetHSL(.15,0,0),setTimeout(()=>{n.createShockwave(v,T,o)},166),n.createRippleWave(v),l({type:"nodeAdded",node:g});break}case"ConnectionDiscovered":{const u=i.data;if(!u.source_id||!u.target_id)break;const g=c.get(u.source_id),v=c.get(u.target_id),m={source:u.source_id,target:u.target_id,weight:u.weight??.5,type:u.connection_type??"semantic"};r.addEdge(m,c),g&&v&&n.createConnectionFlash(g,v,new rt(54527)),u.source_id&&h.has(u.source_id)&&n.addPulse(u.source_id,1,new rt(54527),.02),u.target_id&&h.has(u.target_id)&&n.addPulse(u.target_id,1,new rt(54527),.02),l({type:"edgeAdded",edge:m});break}case"MemoryDeleted":{const u=i.data;if(!u.id)break;const g=c.get(u.id);if(g){const m=new rt(16729943);n.createImplosion(g,m)}r.removeEdgesForNode(u.id),s.removeNode(u.id),a.removeNode(u.id);const v=hs.indexOf(u.id);v!==-1&&hs.splice(v,1),l({type:"edgesRemoved",nodeId:u.id}),l({type:"nodeRemoved",nodeId:u.id});break}case"MemoryPromoted":{const u=i.data,g=u==null?void 0:u.id;if(!g)break;const v=u.new_retention??.95;if(h.has(g)){s.growNode(g,v),n.addPulse(g,1.2,new rt(65416),.01);const m=c.get(g);m&&(n.createShockwave(m,new rt(65416),o),n.createSpawnBurst(m,new rt(65416))),l({type:"nodeUpdated",nodeId:g,retention:v})}break}case"MemoryDemoted":{const u=i.data,g=u==null?void 0:u.id;if(!g)break;const v=u.new_retention??.3;h.has(g)&&(s.growNode(g,v),n.addPulse(g,.8,new rt(16729943),.03),l({type:"nodeUpdated",nodeId:g,retention:v}));break}case"MemoryUpdated":{const u=i.data,g=u==null?void 0:u.id;if(!g||!h.has(g))break;n.addPulse(g,.6,new rt(8490232),.02),u.retention!==void 0&&(s.growNode(g,u.retention),l({type:"nodeUpdated",nodeId:g,retention:u.retention}));break}case"SearchPerformed":{h.forEach((u,g)=>{n.addPulse(g,.6+Math.random()*.4,new rt(8490232),.02)});break}case"DreamStarted":{h.forEach((u,g)=>{n.addPulse(g,1,new rt(11032055),.005)});break}case"DreamProgress":{const u=(d=i.data)==null?void 0:d.memory_id;u&&h.has(u)&&n.addPulse(u,1.5,new rt(12616956),.01);break}case"DreamCompleted":{n.createSpawnBurst(new C(0,0,0),new rt(11032055)),n.createShockwave(new C(0,0,0),new rt(11032055),o);break}case"RetentionDecayed":{const u=(p=i.data)==null?void 0:p.id;u&&h.has(u)&&n.addPulse(u,.8,new rt(16729943),.03);break}case"ConsolidationCompleted":{h.forEach((u,g)=>{n.addPulse(g,.4+Math.random()*.3,new rt(16758784),.015)});break}case"ActivationSpread":{const u=i.data;if(u.source_id&&u.target_ids){const g=c.get(u.source_id);if(g)for(const v of u.target_ids){const m=c.get(v);m&&n.createConnectionFlash(g,m,new rt(1370310))}}break}case"MemorySuppressed":{const u=i.data;if(!u.id)break;const g=c.get(u.id);if(g){n.createImplosion(g,new rt(11032055));const v=Math.max(1,u.suppression_count??1),m=Math.min(.4+v*.15,1);n.addPulse(u.id,m,new rt(11032055),.04)}break}case"MemoryUnsuppressed":{const u=i.data;if(!u.id)break;const g=c.get(u.id);g&&h.has(u.id)&&(n.createRainbowBurst(g,new rt(65416)),n.addPulse(u.id,1,new rt(65416),.02));break}case"Rac1CascadeSwept":{const g=i.data.neighbors_affected??0;if(g===0)break;const v=Array.from(h.keys()),m=Math.min(g,v.length,12);for(let f=0;f{var e;(t instanceof Ee||t instanceof hu)&&((e=t.geometry)==null||e.dispose(),Array.isArray(t.material)?t.material.forEach(n=>n.dispose()):t.material&&t.material.dispose())}),i.renderer.dispose(),i.composer.dispose()}class Lg{constructor(t){Bt(this,"positions");Bt(this,"velocities");Bt(this,"running",!0);Bt(this,"step",0);Bt(this,"repulsionStrength",500);Bt(this,"attractionStrength",.01);Bt(this,"dampening",.9);Bt(this,"baseMaxSteps",300);Bt(this,"maxSteps",300);Bt(this,"cooldownExtension",0);this.positions=t,this.velocities=new Map;for(const e of t.keys())this.velocities.set(e,new P)}addNode(t,e){this.positions.set(t,e.clone()),this.velocities.set(t,new P),this.cooldownExtension=100,this.maxSteps=Math.max(this.maxSteps,this.step+this.cooldownExtension),this.running=!0}removeNode(t){this.positions.delete(t),this.velocities.delete(t)}tick(t){if(!this.running)return;if(this.step>this.maxSteps){this.cooldownExtension>0&&(this.cooldownExtension=0,this.maxSteps=this.baseMaxSteps);return}this.step++;const e=Math.max(.001,1-this.step/this.maxSteps),n=Array.from(this.positions.keys());for(let s=0;s=.7?"active":i>=.4?"dormant":i>=.1?"silent":"unavailable"}const ro={active:"#10b981",dormant:"#f59e0b",silent:"#8b5cf6",unavailable:"#6b7280"},Ig={active:"Easily retrievable (retention ≥ 70%)",dormant:"Retrievable with effort (40–70%)",silent:"Difficult, needs cues (10–40%)",unavailable:"Needs reinforcement (< 10%)"};function Bl(i,t){return t==="state"?ro[Ug(i.retention)]:Yl[i.type]||"#8B95A5"}let ps=null;function ao(){if(ps)return ps;const i=128,t=document.createElement("canvas");t.width=i,t.height=i;const e=t.getContext("2d");if(!e)return ps=new Ae,ps;const n=e.createRadialGradient(i/2,i/2,0,i/2,i/2,i/2);n.addColorStop(0,"rgba(255, 255, 255, 1.0)"),n.addColorStop(.25,"rgba(255, 255, 255, 0.7)"),n.addColorStop(.55,"rgba(255, 255, 255, 0.2)"),n.addColorStop(1,"rgba(255, 255, 255, 0.0)"),e.fillStyle=n,e.fillRect(0,0,i,i);const s=new vc(t);return s.needsUpdate=!0,ps=s,s}function zl(i){if(i===0||i===1)return i;const t=.3;return Math.pow(2,-10*i)*Math.sin((i-t/4)*(2*Math.PI)/t)+1}function Ng(i){return i*i*((1.70158+1)*i-1.70158)}class Fg{constructor(){Bt(this,"group");Bt(this,"meshMap",new Map);Bt(this,"glowMap",new Map);Bt(this,"positions",new Map);Bt(this,"labelSprites",new Map);Bt(this,"hoveredNode",null);Bt(this,"selectedNode",null);Bt(this,"colorMode","type");Bt(this,"materializingNodes",[]);Bt(this,"dissolvingNodes",[]);Bt(this,"growingNodes",[]);this.group=new zi}setColorMode(t){if(this.colorMode!==t){this.colorMode=t;for(const[e,n]of this.meshMap){const s=n.userData.retention??0,a={type:n.userData.type??"fact",retention:s},o=Bl(a,t),l=new st(o),c=n.material;c.color.copy(l),c.emissive.copy(l);const h=this.glowMap.get(e);h&&h.material.color.copy(l)}}}createNodes(t){const e=(1+Math.sqrt(5))/2,n=t.length;for(let s=0;s0,o=new wr(s,16,16),l=new fu({color:new st(r),emissive:new st(r),emissiveIntensity:a?0:.3+t.retention*.5,roughness:.3,metalness:.1,transparent:!0,opacity:a?.2:.3+t.retention*.7}),c=new Ee(o,l);c.position.copy(e),c.scale.setScalar(n),c.userData={nodeId:t.id,type:t.type,retention:t.retention},this.meshMap.set(t.id,c),this.group.add(c);const h=new Xi({map:ao(),color:new st(r),transparent:!0,opacity:n>0?a?.1:.3+t.retention*.35:0,blending:De,depthWrite:!1}),d=new Bi(h);d.scale.set(s*6*n,s*6*n,1),d.position.copy(e),d.userData={isGlow:!0,nodeId:t.id},this.glowMap.set(t.id,d),this.group.add(d);const f=t.label||t.type,u=this.createTextSprite(f,"#94a3b8");return u.position.copy(e),u.position.y+=s*2+1.5,u.userData={isLabel:!0,nodeId:t.id,offset:s*2+1.5},this.group.add(u),this.labelSprites.set(t.id,u),{mesh:c,glow:d,label:u,size:s}}addNode(t,e,n={}){const s=(e==null?void 0:e.clone())??new P((Math.random()-.5)*40,(Math.random()-.5)*40,(Math.random()-.5)*40);this.positions.set(t.id,s);const{mesh:r,glow:a,label:o}=this.createNodeMeshes(t,s,0);return r.scale.setScalar(.001),a.scale.set(.001,.001,1),a.material.opacity=0,o.material.opacity=0,n.isBirthRitual?(r.visible=!1,a.visible=!1,o.visible=!1,r.userData.birthRitualPending={totalFrames:30,targetScale:.5+t.retention*2}):this.materializingNodes.push({id:t.id,frame:0,totalFrames:30,mesh:r,glow:a,label:o,targetScale:.5+t.retention*2}),s}igniteNode(t){const e=this.meshMap.get(t),n=this.glowMap.get(t),s=this.labelSprites.get(t);if(!e||!n||!s)return;const r=e.userData.birthRitualPending;r&&(e.visible=!0,n.visible=!0,s.visible=!0,delete e.userData.birthRitualPending,this.materializingNodes.push({id:t,frame:0,totalFrames:r.totalFrames,mesh:e,glow:n,label:s,targetScale:r.targetScale}))}removeNode(t){const e=this.meshMap.get(t),n=this.glowMap.get(t),s=this.labelSprites.get(t);!e||!n||!s||(this.materializingNodes=this.materializingNodes.filter(r=>r.id!==t),this.dissolvingNodes.push({id:t,frame:0,totalFrames:60,mesh:e,glow:n,label:s,originalScale:e.scale.x}))}growNode(t,e){const n=this.meshMap.get(t);if(!n)return;const s=n.scale.x,r=.5+e*2;n.userData.retention=e,this.growingNodes.push({id:t,frame:0,totalFrames:30,startScale:s,targetScale:r})}createTextSprite(t,e){const n=document.createElement("canvas"),s=n.getContext("2d");if(!s){const p=new Ae;return new Bi(new Xi({map:p,transparent:!0,opacity:0}))}n.width=512,n.height=64;const r=t.length>40?t.slice(0,37)+"...":t;s.clearRect(0,0,n.width,n.height),s.font='600 22px -apple-system, BlinkMacSystemFont, "SF Pro Text", sans-serif';const o=s.measureText(r).width,c=Math.min(o+14*2,n.width-4),h=40,d=(n.width-c)/2,f=(n.height-h)/2,u=h/2;s.fillStyle="rgba(10, 16, 28, 0.82)",s.beginPath(),s.moveTo(d+u,f),s.lineTo(d+c-u,f),s.quadraticCurveTo(d+c,f,d+c,f+u),s.lineTo(d+c,f+h-u),s.quadraticCurveTo(d+c,f+h,d+c-u,f+h),s.lineTo(d+u,f+h),s.quadraticCurveTo(d,f+h,d,f+h-u),s.lineTo(d,f+u),s.quadraticCurveTo(d,f,d+u,f),s.closePath(),s.fill(),s.strokeStyle="rgba(148, 163, 184, 0.18)",s.lineWidth=1,s.stroke(),s.textAlign="center",s.textBaseline="middle",s.fillStyle=e,s.fillText(r,n.width/2,n.height/2+1);const g=new vc(n);g.needsUpdate=!0;const _=new Xi({map:g,transparent:!0,opacity:0,depthTest:!1,sizeAttenuation:!0}),m=new Bi(_);return m.scale.set(9,1.2,1),m}updatePositions(){this.group.children.forEach(t=>{if(t.userData.nodeId){const e=this.positions.get(t.userData.nodeId);if(!e)return;t.userData.isGlow?t.position.copy(e):t.userData.isLabel?(t.position.copy(e),t.position.y+=t.userData.offset):t instanceof Ee&&t.position.copy(e)}})}animate(t,e,n,s=1){var a,o;for(let l=this.materializingNodes.length-1;l>=0;l--){const c=this.materializingNodes[l];c.frame++;const h=Math.min(c.frame/c.totalFrames,1),d=zl(h);if(c.mesh.scale.setScalar(Math.max(.001,d)),c.frame>=5){const f=Math.min((c.frame-5)/5,1),u=c.glow.material;u.opacity=f*.4;const g=c.targetScale*6*d;c.glow.scale.set(g,g,1)}if(c.frame>=40){const f=Math.min((c.frame-40)/20,1);c.label.material.opacity=f*.9}c.frame>=60&&this.materializingNodes.splice(l,1)}for(let l=this.dissolvingNodes.length-1;l>=0;l--){const c=this.dissolvingNodes[l];c.frame++;const h=Math.min(c.frame/c.totalFrames,1),d=1-Ng(h),f=Math.max(.001,c.originalScale*d);c.mesh.scale.setScalar(f);const u=f*6;c.glow.scale.set(u,u,1);const g=c.mesh.material;g.opacity*=.97,c.glow.material.opacity*=.95,c.label.material.opacity*=.93,c.frame>=c.totalFrames&&(this.group.remove(c.mesh),this.group.remove(c.glow),this.group.remove(c.label),c.mesh.geometry.dispose(),c.mesh.material.dispose(),(a=c.glow.material.map)==null||a.dispose(),c.glow.material.dispose(),(o=c.label.material.map)==null||o.dispose(),c.label.material.dispose(),this.meshMap.delete(c.id),this.glowMap.delete(c.id),this.labelSprites.delete(c.id),this.positions.delete(c.id),this.dissolvingNodes.splice(l,1))}for(let l=this.growingNodes.length-1;l>=0;l--){const c=this.growingNodes[l];c.frame++;const h=Math.min(c.frame/c.totalFrames,1),d=c.startScale+(c.targetScale-c.startScale)*zl(h),f=this.meshMap.get(c.id);f&&f.scale.setScalar(d);const u=this.glowMap.get(c.id);if(u){const g=d*6;u.scale.set(g,g,1)}c.frame>=c.totalFrames&&this.growingNodes.splice(l,1)}const r=new Set([...this.materializingNodes.map(l=>l.id),...this.dissolvingNodes.map(l=>l.id),...this.growingNodes.map(l=>l.id)]);this.meshMap.forEach((l,c)=>{if(r.has(c))return;const h=e.find(T=>T.id===c);if(!h)return;const d=1+Math.sin(t*1.5+e.indexOf(h)*.5)*.15*h.retention;l.scale.setScalar(d);const f=this.positions.get(c),u=f?n.position.distanceTo(f):0,g=1+Math.min(1.4,Math.max(0,(u-60)/100)),_=l.material;if(c===this.hoveredNode)_.emissiveIntensity=1*s;else if(c===this.selectedNode)_.emissiveIntensity=.8*s;else{const E=.3+h.retention*.5+Math.sin(t*(.8+h.retention*.7))*.1*h.retention;_.emissiveIntensity=E*s*g}const m=.3+h.retention*.7;_.opacity=Math.min(1,m*s*g);const p=this.glowMap.get(c);if(p){const T=p.material,E=.3+h.retention*.35;T.opacity=Math.min(.95,E*s*g)}}),this.labelSprites.forEach((l,c)=>{if(r.has(c))return;const h=this.positions.get(c);if(!h)return;const d=n.position.distanceTo(h),f=l.material,u=c===this.hoveredNode||c===this.selectedNode?1:d<40?.9:d<80?.9*(1-(d-40)/40):0;f.opacity+=(u-f.opacity)*.1})}getMeshes(){return Array.from(this.meshMap.values())}dispose(){this.group.traverse(t=>{var e,n,s,r,a;t instanceof Ee?((e=t.geometry)==null||e.dispose(),(n=t.material)==null||n.dispose()):t instanceof Bi&&((r=(s=t.material)==null?void 0:s.map)==null||r.dispose(),(a=t.material)==null||a.dispose())}),this.materializingNodes=[],this.dissolvingNodes=[],this.growingNodes=[]}}function Og(i){return 1-Math.pow(1-i,3)}class Bg{constructor(){Bt(this,"group");Bt(this,"growingEdges",[]);Bt(this,"dissolvingEdges",[]);this.group=new zi}createEdges(t,e){for(const n of t){const s=e.get(n.source),r=e.get(n.target);if(!s||!r)continue;const a=[s,r],o=new ge().setFromPoints(a),l=new Sr({color:9133302,transparent:!0,opacity:Math.min(.25+n.weight*.5,.8),blending:De,depthWrite:!1}),c=new eo(o,l);c.userData={source:n.source,target:n.target},this.group.add(c)}}addEdge(t,e){const n=e.get(t.source),s=e.get(t.target);if(!n||!s)return;const r=[n.clone(),n.clone()],a=new ge().setFromPoints(r),o=new Sr({color:9133302,transparent:!0,opacity:0,blending:De,depthWrite:!1}),l=new eo(a,o);l.userData={source:t.source,target:t.target},this.group.add(l),this.growingEdges.push({line:l,source:t.source,target:t.target,frame:0,totalFrames:45})}removeEdgesForNode(t){const e=[];this.group.children.forEach(n=>{const s=n;(s.userData.source===t||s.userData.target===t)&&e.push(s)});for(const n of e)this.growingEdges=this.growingEdges.filter(s=>s.line!==n),this.dissolvingEdges.push({line:n,frame:0,totalFrames:40})}animateEdges(t){for(let e=this.growingEdges.length-1;e>=0;e--){const n=this.growingEdges[e];n.frame++;const s=Og(Math.min(n.frame/n.totalFrames,1)),r=t.get(n.source),a=t.get(n.target);if(!r||!a)continue;const o=r.clone().lerp(a,s),l=n.line.geometry.attributes.position;l.setXYZ(0,r.x,r.y,r.z),l.setXYZ(1,o.x,o.y,o.z),l.needsUpdate=!0;const c=n.line.material;c.opacity=s*.65,n.frame>=n.totalFrames&&(c.opacity=.65,this.growingEdges.splice(e,1))}for(let e=this.dissolvingEdges.length-1;e>=0;e--){const n=this.dissolvingEdges[e];n.frame++;const s=n.frame/n.totalFrames,r=n.line.material;r.opacity=Math.max(0,.65*(1-s)),n.frame>=n.totalFrames&&(this.group.remove(n.line),n.line.geometry.dispose(),n.line.material.dispose(),this.dissolvingEdges.splice(e,1))}}updatePositions(t){this.group.children.forEach(e=>{const n=e;if(this.growingEdges.some(a=>a.line===n)||this.dissolvingEdges.some(a=>a.line===n))return;const s=t.get(n.userData.source),r=t.get(n.userData.target);if(s&&r){const a=n.geometry.attributes.position;a.setXYZ(0,s.x,s.y,s.z),a.setXYZ(1,r.x,r.y,r.z),a.needsUpdate=!0}})}dispose(){this.group.children.forEach(t=>{var n,s;const e=t;(n=e.geometry)==null||n.dispose(),(s=e.material)==null||s.dispose()}),this.growingEdges=[],this.dissolvingEdges=[]}}class zg{constructor(t){Bt(this,"starField");Bt(this,"neuralParticles");this.starField=this.createStarField(),this.neuralParticles=this.createNeuralParticles(),t.add(this.starField),t.add(this.neuralParticles)}createStarField(){const e=new ge,n=new Float32Array(3e3*3),s=new Float32Array(3e3);for(let a=0;a<3e3;a++)n[a*3]=(Math.random()-.5)*1e3,n[a*3+1]=(Math.random()-.5)*1e3,n[a*3+2]=(Math.random()-.5)*1e3,s[a]=Math.random()*1.5;e.setAttribute("position",new ce(n,3)),e.setAttribute("size",new ce(s,1));const r=new li({color:6514417,size:.5,transparent:!0,opacity:.4,sizeAttenuation:!0,blending:De});return new Yi(e,r)}createNeuralParticles(){const e=new ge,n=new Float32Array(500*3),s=new Float32Array(500*3);for(let a=0;a<500;a++)n[a*3]=(Math.random()-.5)*100,n[a*3+1]=(Math.random()-.5)*100,n[a*3+2]=(Math.random()-.5)*100,s[a*3]=.4+Math.random()*.3,s[a*3+1]=.3+Math.random()*.2,s[a*3+2]=.8+Math.random()*.2;e.setAttribute("position",new ce(n,3)),e.setAttribute("color",new ce(s,3));const r=new li({size:.3,vertexColors:!0,transparent:!0,opacity:.4,blending:De,sizeAttenuation:!0});return new Yi(e,r)}animate(t){this.starField.rotation.y+=1e-4,this.starField.rotation.x+=5e-5;const e=this.neuralParticles.geometry.attributes.position;for(let n=0;n=0;s--){const r=this.pulseEffects[s];if(r.intensity-=r.decay,r.intensity<=0){this.pulseEffects.splice(s,1);continue}const a=t.get(r.nodeId);if(a){const o=a.material;o.emissive.lerp(r.color,r.intensity*.3),o.emissiveIntensity=Math.max(o.emissiveIntensity,r.intensity)}}for(let s=this.spawnBursts.length-1;s>=0;s--){const r=this.spawnBursts[s];if(r.age++,r.age>120){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),this.spawnBursts.splice(s,1);continue}const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity;for(let c=0;c=0;s--){const r=this.rainbowBursts[s];if(r.age++,r.age>r.maxAge){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),this.rainbowBursts.splice(s,1);continue}const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity;for(let f=0;f=0;s--){const r=this.rippleWaves[s];if(r.age++,r.radius+=r.speed,r.age>r.maxAge){this.rippleWaves.splice(s,1);continue}const a=r.radius,o=3;n.forEach((l,c)=>{if(r.pulsedNodes.has(c))return;const h=l.distanceTo(r.origin);h>=a-o&&h<=a+o&&(r.pulsedNodes.add(c),this.addPulse(c,.8,new st(65489),.03))})}for(let s=this.implosions.length-1;s>=0;s--){const r=this.implosions[s];if(r.age++,r.age>r.maxAge+20){this.scene.remove(r.particles),r.particles.geometry.dispose(),r.particles.material.dispose(),r.flash&&(this.scene.remove(r.flash),r.flash.geometry.dispose(),r.flash.material.dispose()),this.implosions.splice(s,1);continue}if(r.age<=r.maxAge){const a=r.particles.geometry.attributes.position,o=r.particles.geometry.attributes.velocity,l=1+r.age*.02;for(let h=0;hr.maxAge){const a=(r.age-r.maxAge)/20;r.flash.material.opacity=Math.max(0,1-a),r.flash.scale.setScalar(1+a*3)}}for(let s=this.shockwaves.length-1;s>=0;s--){const r=this.shockwaves[s];if(r.age++,r.age>r.maxAge){this.scene.remove(r.mesh),r.mesh.geometry.dispose(),r.mesh.material.dispose(),this.shockwaves.splice(s,1);continue}const a=r.age/r.maxAge;r.mesh.scale.setScalar(1+a*20),r.mesh.material.opacity=.8*(1-a),r.mesh.lookAt(e.position)}for(let s=this.connectionFlashes.length-1;s>=0;s--){const r=this.connectionFlashes[s];if(r.intensity-=.015,r.intensity<=0){this.scene.remove(r.line),r.line.geometry.dispose(),r.line.material.dispose(),this.connectionFlashes.splice(s,1);continue}r.line.material.opacity=r.intensity}for(let s=this.birthOrbs.length-1;s>=0;s--){const r=this.birthOrbs[s];r.age++;const a=r.gestationFrames+r.flightFrames,o=r.sprite.material,l=r.core.material,c=r.getTargetPos();if(c)r.lastTargetPos.copy(c);else if(r.age>r.gestationFrames&&!r.aborted){r.aborted=!0;const h=r.sprite.position;o.color.setRGB(1,.15,.2),l.color.setRGB(1,.6,.6),this.createImplosion(h,new st(16721203)),r.arriveFired=!0,r.age=a+1}if(r.age<=r.gestationFrames){const h=r.age/r.gestationFrames,d=1-Math.pow(1-h,3),f=.85+Math.sin(r.age*.35)*.15,u=.5+d*4.5*f,g=.2+d*1.8*f;r.sprite.scale.set(u,u,1),r.core.scale.set(g,g,1),o.opacity=d*.95,l.opacity=d,o.color.copy(r.color).multiplyScalar(.7+d*.3),r.sprite.position.copy(r.startPos),r.core.position.copy(r.startPos)}else if(r.age<=a){const h=(r.age-r.gestationFrames)/r.flightFrames,d=h<.5?2*h*h:1-Math.pow(-2*h+2,2)/2,f=r.startPos,u=r.lastTargetPos,g=u.x-f.x,_=u.y-f.y,m=u.z-f.z,p=Math.sqrt(g*g+_*_+m*m),T=(f.x+u.x)*.5,E=(f.y+u.y)*.5+30+p*.15,y=(f.z+u.z)*.5,D=1-d,A=D*D,C=2*D*d,I=d*d,S=A*f.x+C*T+I*u.x,M=A*f.y+C*E+I*u.y,w=A*f.z+C*y+I*u.z;r.sprite.position.set(S,M,w),r.core.position.set(S,M,w);const Y=1-d*.35;r.sprite.scale.setScalar(5*Y),r.core.scale.setScalar(2*Y),o.opacity=.95,l.opacity=1,o.color.copy(r.color)}else if(r.arriveFired){const h=r.age-a,d=Math.max(0,1-h/8);o.opacity=.95*d,l.opacity=1*d,r.sprite.scale.setScalar(5*(1+(1-d)*2)),d<=0&&(this.scene.remove(r.sprite),this.scene.remove(r.core),o.dispose(),l.dispose(),this.birthOrbs.splice(s,1))}else{r.arriveFired=!0;try{r.onArrive()}catch(h){console.warn("[birth-orb] onArrive threw",h)}}}}dispose(){for(const t of this.spawnBursts)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose();for(const t of this.rainbowBursts)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose();for(const t of this.implosions)this.scene.remove(t.particles),t.particles.geometry.dispose(),t.particles.material.dispose(),t.flash&&(this.scene.remove(t.flash),t.flash.geometry.dispose(),t.flash.material.dispose());for(const t of this.shockwaves)this.scene.remove(t.mesh),t.mesh.geometry.dispose(),t.mesh.material.dispose();for(const t of this.connectionFlashes)this.scene.remove(t.line),t.line.geometry.dispose(),t.line.material.dispose();for(const t of this.birthOrbs)this.scene.remove(t.sprite),this.scene.remove(t.core),t.sprite.material.dispose(),t.core.material.dispose();this.pulseEffects=[],this.spawnBursts=[],this.rainbowBursts=[],this.rippleWaves=[],this.implosions=[],this.shockwaves=[],this.connectionFlashes=[],this.birthOrbs=[]}}const Tn={bloomStrength:.8,rotateSpeed:.3,fogColor:328976,fogDensity:.008,nebulaIntensity:0,chromaticIntensity:.002,vignetteRadius:.9,breatheAmplitude:1},Bn={bloomStrength:1.8,rotateSpeed:.08,fogColor:656672,fogDensity:.006,nebulaIntensity:1,chromaticIntensity:.005,vignetteRadius:.7,breatheAmplitude:2};class Hg{constructor(){Bt(this,"active",!1);Bt(this,"transition",0);Bt(this,"transitionSpeed",.008);Bt(this,"current");Bt(this,"auroraHue",0);this.current={...Tn}}setActive(t){this.active=t}update(t,e,n,s,r){const a=this.active?1:0;this.transition+=(a-this.transition)*this.transitionSpeed*60*(1/60),this.transition=Math.max(0,Math.min(1,this.transition));const o=this.transition;this.current.bloomStrength=this.lerp(Tn.bloomStrength,Bn.bloomStrength,o),this.current.rotateSpeed=this.lerp(Tn.rotateSpeed,Bn.rotateSpeed,o),this.current.fogDensity=this.lerp(Tn.fogDensity,Bn.fogDensity,o),this.current.nebulaIntensity=this.lerp(Tn.nebulaIntensity,Bn.nebulaIntensity,o),this.current.chromaticIntensity=this.lerp(Tn.chromaticIntensity,Bn.chromaticIntensity,o),this.current.vignetteRadius=this.lerp(Tn.vignetteRadius,Bn.vignetteRadius,o),this.current.breatheAmplitude=this.lerp(Tn.breatheAmplitude,Bn.breatheAmplitude,o),e.strength=this.current.bloomStrength,n.autoRotateSpeed=this.current.rotateSpeed;const l=new st(Tn.fogColor),c=new st(Bn.fogColor),h=l.clone().lerp(c,o);if(t.fog=new Tr(h,this.current.fogDensity),o>.01){this.auroraHue=r*.1%1;const d=new st().setHSL(.75+this.auroraHue*.15,.8,.5),f=new st().setHSL(.55+this.auroraHue*.2,.7,.4);s.point1.color.lerp(d,o*.3),s.point2.color.lerp(f,o*.3)}else s.point1.color.set(6514417),s.point2.color.set(11032055)}lerp(t,e,n){return t+(e-t)*n}}const Vg=50,_s=[];function Gg(i,t,e){const n=i.tags??[],s=i.type??"";let r=null,a=0;for(const o of t){let l=0;o.type===s&&(l+=2);for(const c of o.tags)n.includes(c)&&(l+=1);l>a&&(a=l,r=o.id)}if(r&&a>0){const o=e.get(r);if(o)return new P(o.x+(Math.random()-.5)*10,o.y+(Math.random()-.5)*10,o.z+(Math.random()-.5)*10)}return new P((Math.random()-.5)*40,(Math.random()-.5)*40,(Math.random()-.5)*40)}function Wg(i,t){if(_s.length<=Vg)return;const e=_s.shift();i.edgeManager.removeEdgesForNode(e),i.nodeManager.removeNode(e),i.forceSim.removeNode(e),i.onMutation({type:"edgesRemoved",nodeId:e}),i.onMutation({type:"nodeRemoved",nodeId:e});const n=t.findIndex(s=>s.id===e);n!==-1&&t.splice(n,1)}function Xg(i,t,e){var d,f;const{effects:n,nodeManager:s,edgeManager:r,forceSim:a,camera:o,onMutation:l}=t,c=s.positions,h=s.meshMap;switch(i.type){case"MemoryCreated":{const u=i.data;if(!u.id)break;const g={id:u.id,label:(u.content??"").slice(0,60),type:u.node_type??"fact",retention:Math.max(0,Math.min(1,u.retention??.9)),tags:u.tags??[],createdAt:new Date().toISOString(),updatedAt:new Date().toISOString(),isCenter:!1},_=Gg(g,e,c),m=s.addNode(g,_,{isBirthRitual:!0});a.addNode(u.id,m),_s.push(u.id),Wg(t,e);const p=new st(Yl[g.type]||"#00ffd1"),T=p.clone();T.offsetHSL(.15,0,0),n.createBirthOrb(o,p,()=>s.positions.get(g.id),()=>{s.igniteNode(g.id);const E=s.positions.get(g.id)??_,y=s.meshMap.get(g.id);y&&y.scale.multiplyScalar(1.8),n.createRainbowBurst(E,p),n.createShockwave(E,p,o),n.createShockwave(E,T,o),n.createRippleWave(E)}),l({type:"nodeAdded",node:g});break}case"ConnectionDiscovered":{const u=i.data;if(!u.source_id||!u.target_id)break;const g=c.get(u.source_id),_=c.get(u.target_id),m={source:u.source_id,target:u.target_id,weight:u.weight??.5,type:u.connection_type??"semantic"};r.addEdge(m,c),g&&_&&n.createConnectionFlash(g,_,new st(54527)),u.source_id&&h.has(u.source_id)&&n.addPulse(u.source_id,1,new st(54527),.02),u.target_id&&h.has(u.target_id)&&n.addPulse(u.target_id,1,new st(54527),.02),l({type:"edgeAdded",edge:m});break}case"MemoryDeleted":{const u=i.data;if(!u.id)break;const g=c.get(u.id);if(g){const m=new st(16729943);n.createImplosion(g,m)}r.removeEdgesForNode(u.id),s.removeNode(u.id),a.removeNode(u.id);const _=_s.indexOf(u.id);_!==-1&&_s.splice(_,1),l({type:"edgesRemoved",nodeId:u.id}),l({type:"nodeRemoved",nodeId:u.id});break}case"MemoryPromoted":{const u=i.data,g=u==null?void 0:u.id;if(!g)break;const _=u.new_retention??.95;if(h.has(g)){s.growNode(g,_),n.addPulse(g,1.2,new st(65416),.01);const m=c.get(g);m&&(n.createShockwave(m,new st(65416),o),n.createSpawnBurst(m,new st(65416))),l({type:"nodeUpdated",nodeId:g,retention:_})}break}case"MemoryDemoted":{const u=i.data,g=u==null?void 0:u.id;if(!g)break;const _=u.new_retention??.3;h.has(g)&&(s.growNode(g,_),n.addPulse(g,.8,new st(16729943),.03),l({type:"nodeUpdated",nodeId:g,retention:_}));break}case"MemoryUpdated":{const u=i.data,g=u==null?void 0:u.id;if(!g||!h.has(g))break;n.addPulse(g,.6,new st(8490232),.02),u.retention!==void 0&&(s.growNode(g,u.retention),l({type:"nodeUpdated",nodeId:g,retention:u.retention}));break}case"SearchPerformed":{h.forEach((u,g)=>{n.addPulse(g,.6+Math.random()*.4,new st(8490232),.02)});break}case"DreamStarted":{h.forEach((u,g)=>{n.addPulse(g,1,new st(11032055),.005)});break}case"DreamProgress":{const u=(d=i.data)==null?void 0:d.memory_id;u&&h.has(u)&&n.addPulse(u,1.5,new st(12616956),.01);break}case"DreamCompleted":{n.createSpawnBurst(new P(0,0,0),new st(11032055)),n.createShockwave(new P(0,0,0),new st(11032055),o);break}case"RetentionDecayed":{const u=(f=i.data)==null?void 0:f.id;u&&h.has(u)&&n.addPulse(u,.8,new st(16729943),.03);break}case"ConsolidationCompleted":{h.forEach((u,g)=>{n.addPulse(g,.4+Math.random()*.3,new st(16758784),.015)});break}case"ActivationSpread":{const u=i.data;if(u.source_id&&u.target_ids){const g=c.get(u.source_id);if(g)for(const _ of u.target_ids){const m=c.get(_);m&&n.createConnectionFlash(g,m,new st(1370310))}}break}case"MemorySuppressed":{const u=i.data;if(!u.id)break;const g=c.get(u.id);if(g){n.createImplosion(g,new st(11032055));const _=Math.max(1,u.suppression_count??1),m=Math.min(.4+_*.15,1);n.addPulse(u.id,m,new st(11032055),.04)}break}case"MemoryUnsuppressed":{const u=i.data;if(!u.id)break;const g=c.get(u.id);g&&h.has(u.id)&&(n.createRainbowBurst(g,new st(65416)),n.addPulse(u.id,1,new st(65416),.02));break}case"Rac1CascadeSwept":{const g=i.data.neighbors_affected??0;if(g===0)break;const _=Array.from(h.keys()),m=Math.min(g,_.length,12);for(let p=0;p');function $g(i,t){fs(t,!0);let e=cs(t,"events",19,()=>[]),n=cs(t,"isDreaming",3,!1),s=cs(t,"colorMode",3,"type");Dc(()=>{l==null||l.setColorMode(s())});let r,a,o,l,c,h,d,p,u,g,v,m=0,f=[];Ll(()=>{a=Eg(r),g=Gg(a.scene).material,v=jg(a.composer),h=new Ig(a.scene),l=new Dg,l.colorMode=s(),c=new Ug,d=new Ng(a.scene),u=new Fg;const y=l.createNodes(t.nodes);c.createEdges(t.edges,y),p=new wg(y),f=[...t.nodes],a.scene.add(c.group),a.scene.add(l.group),T(),window.addEventListener("resize",S),r.addEventListener("pointermove",D),r.addEventListener("click",w)}),Ul(()=>{cancelAnimationFrame(o),window.removeEventListener("resize",S),r==null||r.removeEventListener("pointermove",D),r==null||r.removeEventListener("click",w),d==null||d.dispose(),h==null||h.dispose(),l==null||l.dispose(),c==null||c.dispose(),a&&Tg(a)});function T(){o=requestAnimationFrame(T);const U=performance.now()*.001;p.tick(t.edges),l.updatePositions(),c.updatePositions(l.positions),c.animateEdges(l.positions),h.animate(U),l.animate(U,f,a.camera),u.setActive(n()),u.update(a.scene,a.bloomPass,a.controls,a.lights,U),Wg(g,U,u.current.nebulaIntensity,r.clientWidth,r.clientHeight),Zg(v,U,u.current.nebulaIntensity),b(),d.update(l.meshMap,a.camera,l.positions),a.controls.update(),a.composer.render()}function b(){if(!e()||e().length<=m)return;const U=e().slice(m);m=e().length;const y={effects:d,nodeManager:l,edgeManager:c,forceSim:p,camera:a.camera,onMutation:M=>{var P;M.type==="nodeAdded"?f=[...f,M.node]:M.type==="nodeRemoved"&&(f=f.filter(W=>W.id!==M.nodeId)),(P=t.onGraphMutation)==null||P.call(t,M)}};for(const M of U)kg(M,y,f)}function S(){!r||!a||bg(a,r)}function D(U){const y=r.getBoundingClientRect();a.mouse.x=(U.clientX-y.left)/y.width*2-1,a.mouse.y=-((U.clientY-y.top)/y.height)*2+1,a.raycaster.setFromCamera(a.mouse,a.camera);const M=a.raycaster.intersectObjects(l.getMeshes());M.length>0?(l.hoveredNode=M[0].object.userData.nodeId,r.style.cursor="pointer"):(l.hoveredNode=null,r.style.cursor="grab")}function w(){var U;if(l.hoveredNode){l.selectedNode=l.hoveredNode,(U=t.onSelect)==null||U.call(t,l.hoveredNode);const y=l.positions.get(l.hoveredNode);y&&a.controls.target.lerp(y.clone(),.5)}}var R=Kg();Bc(R,U=>r=U,()=>r),we(i,R),ps()}var Jg=Ue('
'),Qg=Ue('
');function t_(i,t){fs(t,!0);let e=cs(t,"width",3,240),n=cs(t,"height",3,80);function s(m){return t.stability<=0?0:Math.exp(-m/t.stability)}let r=ei(()=>{const m=[],f=Math.max(t.stability*3,30),T=4,b=e()-T*2,S=n()-T*2;for(let D=0;D<=50;D++){const w=D/50*f,R=s(w),U=T+D/50*b,y=T+(1-R)*S;m.push(`${D===0?"M":"L"}${U.toFixed(1)},${y.toFixed(1)}`)}return m.join(" ")}),a=ei(()=>[{label:"Now",days:0,value:t.retention},{label:"1d",days:1,value:s(1)},{label:"7d",days:7,value:s(7)},{label:"30d",days:30,value:s(30)}]);function o(m){return m>.7?"#10b981":m>.4?"#f59e0b":"#ef4444"}var l=Qg(),c=At(l),h=At(c),d=Dt(h),p=Dt(d),u=Dt(p),g=Dt(u);Lc(),bt(c);var v=Dt(c,2);cr(v,21,()=>V(a),sa,(m,f)=>{var T=Jg(),b=At(T),S=At(b);bt(b);var D=Dt(b,2),w=At(D);bt(D),bt(T),on((R,U)=>{me(S,`${V(f).label??""}:`),$a(D,`color: ${R??""}`),me(w,`${U??""}%`)},[()=>o(V(f).value),()=>(V(f).value*100).toFixed(0)]),we(m,T)}),bt(v),bt(l),on(m=>{Pe(c,"width",e()),Pe(c,"height",n()),Pe(c,"viewBox",`0 0 ${e()??""} ${n()??""}`),Pe(h,"y1",4+(n()-8)*.5),Pe(h,"x2",e()-4),Pe(h,"y2",4+(n()-8)*.5),Pe(d,"y1",4+(n()-8)*.8),Pe(d,"x2",e()-4),Pe(d,"y2",4+(n()-8)*.8),Pe(p,"d",V(r)),Pe(u,"d",`${V(r)??""} L${e()-4},${n()-4} L4,${n()-4} Z`),Pe(g,"cy",4+(1-t.retention)*(n()-8)),Pe(g,"fill",m)},[()=>o(t.retention)]),we(i,l),ps()}function Dl(i,t,e){const n=e.getTime(),s=new Set,r=new Map,a=i.filter(l=>{const c=new Date(l.createdAt).getTime();if(c<=n){s.add(l.id);const h=n-c,d=1440*60*1e3,p=hs.has(l.source)&&s.has(l.target));return{visibleNodes:a,visibleEdges:o,nodeOpacities:r}}function e_(i){if(i.length===0){const n=new Date;return{oldest:n,newest:n}}let t=1/0,e=-1/0;for(const n of i){const s=new Date(n.createdAt).getTime();se&&(e=s)}return{oldest:new Date(t),newest:new Date(e)}}var n_=Ue(`
"u")return pr;const i=localStorage.getItem(Pc);if(i===null)return pr;const t=Number(i);return Number.isFinite(t)?Math.min(lo,Math.max(oo,t)):pr}const ni=n_();function n_(){let i=me(!1),t=me(ha(new Date)),e=me(!1),n=me(1),s=me(!1),r=me(ha(e_()));return{get temporalEnabled(){return H(i)},set temporalEnabled(a){Gt(i,a,!0)},get temporalDate(){return H(t)},set temporalDate(a){Gt(t,a,!0)},get temporalPlaying(){return H(e)},set temporalPlaying(a){Gt(e,a,!0)},get temporalSpeed(){return H(n)},set temporalSpeed(a){Gt(n,a,!0)},get dreamMode(){return H(s)},set dreamMode(a){Gt(s,a,!0)},get brightness(){return H(r)},set brightness(a){const o=Math.min(lo,Math.max(oo,a));if(Gt(r,o,!0),typeof localStorage<"u")try{localStorage.setItem(Pc,String(o))}catch{}},brightnessMin:oo,brightnessMax:lo,brightnessDefault:pr}}var i_=Re('
');function s_(i,t){Ms(t,!0);let e=gs(t,"events",19,()=>[]),n=gs(t,"isDreaming",3,!1),s=gs(t,"colorMode",3,"type");zc(()=>{l==null||l.setColorMode(s())});let r,a,o,l,c,h,d,f,u,g,_,m=null,p=[];Hl(()=>{a=Cg(r),g=jg(a.scene).material,_=Qg(a.composer),h=new zg(a.scene),l=new Fg,l.colorMode=s(),c=new Bg,d=new kg(a.scene),u=new Hg;const M=l.createNodes(t.nodes);c.createEdges(t.edges,M),f=new Lg(M),p=[...t.nodes],a.scene.add(c.group),a.scene.add(l.group),E(),window.addEventListener("resize",D),r.addEventListener("pointermove",A),r.addEventListener("click",C)}),Vl(()=>{cancelAnimationFrame(o),window.removeEventListener("resize",D),r==null||r.removeEventListener("pointermove",A),r==null||r.removeEventListener("click",C),d==null||d.dispose(),h==null||h.dispose(),l==null||l.dispose(),c==null||c.dispose(),a&&Dg(a)});let T=0;function E(){o=requestAnimationFrame(E);const S=performance.now();T===0&&(T=S);const M=S-T;if(M<16)return;T=S-M%16;const w=S*.001;f.tick(t.edges),l.updatePositions(),c.updatePositions(l.positions),c.animateEdges(l.positions),h.animate(w),l.animate(w,p,a.camera,ni.brightness),u.setActive(n()),u.update(a.scene,a.bloomPass,a.controls,a.lights,w),Zg(g,w,u.current.nebulaIntensity,r.clientWidth,r.clientHeight),t_(_,w,u.current.nebulaIntensity),y(),d.update(l.meshMap,a.camera,l.positions),a.controls.update(),a.composer.render()}function y(){if(!e()||e().length===0)return;const S=[];for(const w of e()){if(w===m)break;S.push(w)}if(S.length===0)return;if(S.length===e().length&&e().length>=200){console.warn("[vestige] Event horizon overflow: dropping visuals for",S.length,"events"),m=e()[0];return}m=e()[0];const M={effects:d,nodeManager:l,edgeManager:c,forceSim:f,camera:a.camera,onMutation:w=>{var Y;w.type==="nodeAdded"?p=[...p,w.node]:w.type==="nodeRemoved"&&(p=p.filter(V=>V.id!==w.nodeId)),(Y=t.onGraphMutation)==null||Y.call(t,w)}};for(let w=S.length-1;w>=0;w--)Xg(S[w],M,p)}function D(){!r||!a||Pg(a,r)}function A(S){const M=r.getBoundingClientRect();a.mouse.x=(S.clientX-M.left)/M.width*2-1,a.mouse.y=-((S.clientY-M.top)/M.height)*2+1,a.raycaster.setFromCamera(a.mouse,a.camera);const w=a.raycaster.intersectObjects(l.getMeshes());w.length>0?(l.hoveredNode=w[0].object.userData.nodeId,r.style.cursor="pointer"):(l.hoveredNode=null,r.style.cursor="grab")}function C(){var S;if(l.hoveredNode){l.selectedNode=l.hoveredNode,(S=t.onSelect)==null||S.call(t,l.hoveredNode);const M=l.positions.get(l.hoveredNode);M&&a.controls.target.lerp(M.clone(),.5)}}var I=i_();Wc(I,S=>r=S,()=>r),ye(i,I),Ss()}var r_=Re('
'),a_=Re('
');function o_(i,t){Ms(t,!0);let e=gs(t,"width",3,240),n=gs(t,"height",3,80);function s(m){return t.stability<=0?0:Math.exp(-m/t.stability)}let r=oi(()=>{const m=[],p=Math.max(t.stability*3,30),T=4,E=e()-T*2,y=n()-T*2;for(let D=0;D<=50;D++){const A=D/50*p,C=s(A),I=T+D/50*E,S=T+(1-C)*y;m.push(`${D===0?"M":"L"}${I.toFixed(1)},${S.toFixed(1)}`)}return m.join(" ")}),a=oi(()=>[{label:"Now",days:0,value:t.retention},{label:"1d",days:1,value:s(1)},{label:"7d",days:7,value:s(7)},{label:"30d",days:30,value:s(30)}]);function o(m){return m>.7?"#10b981":m>.4?"#f59e0b":"#ef4444"}var l=a_(),c=yt(l),h=yt(c),d=Tt(h),f=Tt(d),u=Tt(f),g=Tt(u);kc(),St(c);var _=Tt(c,2);mr(_,21,()=>H(a),ua,(m,p)=>{var T=r_(),E=yt(T),y=yt(E);St(E);var D=Tt(E,2),A=yt(D);St(D),St(T),nn((C,I)=>{fe(y,`${H(p).label??""}:`),co(D,`color: ${C??""}`),fe(A,`${I??""}%`)},[()=>o(H(p).value),()=>(H(p).value*100).toFixed(0)]),ye(m,T)}),St(_),St(l),nn(m=>{Me(c,"width",e()),Me(c,"height",n()),Me(c,"viewBox",`0 0 ${e()??""} ${n()??""}`),Me(h,"y1",4+(n()-8)*.5),Me(h,"x2",e()-4),Me(h,"y2",4+(n()-8)*.5),Me(d,"y1",4+(n()-8)*.8),Me(d,"x2",e()-4),Me(d,"y2",4+(n()-8)*.8),Me(f,"d",H(r)),Me(u,"d",`${H(r)??""} L${e()-4},${n()-4} L4,${n()-4} Z`),Me(g,"cy",4+(1-t.retention)*(n()-8)),Me(g,"fill",m)},[()=>o(t.retention)]),ye(i,l),Ss()}function kl(i,t,e){const n=e.getTime(),s=new Set,r=new Map,a=i.filter(l=>{const c=new Date(l.createdAt).getTime();if(c<=n){s.add(l.id);const h=n-c,d=1440*60*1e3,f=hs.has(l.source)&&s.has(l.target));return{visibleNodes:a,visibleEdges:o,nodeOpacities:r}}function l_(i){if(i.length===0){const n=new Date;return{oldest:n,newest:n}}let t=1/0,e=-1/0;for(const n of i){const s=new Date(n.createdAt).getTime();se&&(e=s)}return{oldest:new Date(t),newest:new Date(e)}}var c_=Re(`
`),i_=Ue('');function s_(i,t){fs(t,!0);let e=De(!1),n=De(!1),s=De(1),r=De(100),a,o=0,l=ei(()=>e_(t.nodes)),c=ei(()=>{const b=V(l).oldest.getTime(),D=V(l).newest.getTime()-b||1;return new Date(b+V(r)/100*D)});function h(b){return b.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function d(){te(e,!V(e)),t.onToggle(V(e)),V(e)&&(te(r,100),t.onDateChange(V(c)))}function p(){te(n,!V(n)),V(n)?(te(r,0),o=performance.now(),u()):cancelAnimationFrame(a)}function u(){V(n)&&(a=requestAnimationFrame(b=>{const S=(b-o)/1e3;o=b;const D=V(l).oldest.getTime(),R=(V(l).newest.getTime()-D)/(1440*60*1e3)||1,U=V(s)/R*100;if(te(r,Math.min(100,V(r)+U*S),!0),t.onDateChange(V(c)),V(r)>=100){te(n,!1);return}u()}))}function g(){t.onDateChange(V(c))}Ul(()=>{te(n,!1),cancelAnimationFrame(a)});var v=Ic(),m=Il(v);{var f=b=>{var S=n_(),D=At(S),w=At(D),R=At(w),U=At(R),y=At(U,!0);bt(U);var M=Dt(U,2),P=At(M);P.value=P.__value=1;var W=Dt(P);W.value=W.__value=7;var z=Dt(W);z.value=z.__value=30,bt(M),bt(R);var G=Dt(R,2),$=At(G,!0);bt(G);var X=Dt(G,2);bt(w);var Q=Dt(w,2);Fl(Q);var k=Dt(Q,2),it=At(k),ft=At(it,!0);bt(it);var St=Dt(it,2),Ft=At(St,!0);bt(St),bt(k),bt(D),bt(S),on((Vt,Y,nt)=>{me(y,V(n)?"⏸":"▶"),me($,Vt),me(ft,Y),me(Ft,nt)},[()=>h(V(c)),()=>h(V(l).oldest),()=>h(V(l).newest)]),Ge("click",U,p),Bl(M,()=>V(s),Vt=>te(s,Vt)),Ge("click",X,d),Ge("input",Q,g),Ol(Q,()=>V(r),Vt=>te(r,Vt)),we(b,S)},T=b=>{var S=i_();Ge("click",S,d),we(b,S)};Zn(m,b=>{V(e)?b(f):b(T,!1)})}we(i,v),ps()}Nl(["click","input"]);var r_=Ue('
'),a_=Ue('
FSRS accessibility
');function o_(i,t){fs(t,!1);const e=["active","dormant","silent","unavailable"];zc();var n=a_(),s=Dt(At(n),2);cr(s,1,()=>e,r=>r,(r,a)=>{var o=r_(),l=At(o),c=Dt(l,2),h=At(c,!0);bt(c);var d=Dt(c,2),p=At(d,!0);bt(d),bt(o),on(u=>{$a(l,`background: ${Ka[V(a)]??""}; box-shadow: 0 0 6px ${Ka[V(a)]??""}55;`),me(h,V(a)),me(p,u)},[()=>{var u;return((u=Rg[V(a)].match(/\(([^)]+)\)/))==null?void 0:u[1])??""}]),we(r,o)}),bt(n),we(i,n),ps()}var l_=Ue('

Loading memory graph...

'),c_=Ue('

Your Mind Awaits

'),h_=Ue(' · · ',1),u_=Ue('
'),d_=Ue(' '),f_=Ue('
'),p_=Ue("
"),m_=Ue(`

Memory Detail

Retention Forecast
◬ Explore Connections
`),g_=Ue(`
`);function z_(i,t){fs(t,!0);const e=()=>Fc(kc,"$eventFeed",n),[n,s]=Nc();let r=De(null),a=De(null),o=De(!0),l=De(""),c=De(!1),h=De(""),d=De(150),p=De(!1),u=De(Uc(new Date)),g=De("type"),v=De(0),m=De(0),f=ei(()=>V(r)?V(p)?Dl(V(r).nodes,V(r).edges,V(u)).visibleNodes:V(r).nodes:[]),T=ei(()=>V(r)?V(p)?Dl(V(r).nodes,V(r).edges,V(u)).visibleEdges:V(r).edges:[]);function b(J){if(V(r))switch(J.type){case"nodeAdded":V(r).nodes=[...V(r).nodes,J.node],V(r).nodeCount=V(r).nodes.length,te(v,V(r).nodeCount,!0);break;case"nodeRemoved":V(r).nodes=V(r).nodes.filter(Et=>Et.id!==J.nodeId),V(r).nodeCount=V(r).nodes.length,te(v,V(r).nodeCount,!0);break;case"edgeAdded":V(r).edges=[...V(r).edges,J.edge],V(r).edgeCount=V(r).edges.length,te(m,V(r).edgeCount,!0);break;case"edgesRemoved":V(r).edges=V(r).edges.filter(Et=>Et.source!==J.nodeId&&Et.target!==J.nodeId),V(r).edgeCount=V(r).edges.length,te(m,V(r).edgeCount,!0);break;case"nodeUpdated":{const Et=V(r).nodes.find(ct=>ct.id===J.nodeId);Et&&(Et.retention=J.retention);break}}}Ll(()=>S());async function S(J,Et){var ct;te(o,!0),te(l,"");try{te(r,await Zi.graph({max_nodes:V(d),depth:3,query:J||void 0,center_id:Et||void 0}),!0),V(r)&&(te(v,V(r).nodeCount,!0),te(m,V(r).edgeCount,!0))}catch(E){const _=E instanceof Error?E.message:String(E),F=_.replace(/\/[\w./-]+\.(sqlite|rs|db|toml|lock)\b/g,"[path]").slice(0,200),q=(((ct=V(r))==null?void 0:ct.nodeCount)??0)===0&&/not found|404|empty|no memor/i.test(_);te(l,q?"No memories yet. Start using Vestige to populate your graph.":`Failed to load graph: ${F}`,!0)}finally{te(o,!1)}}async function D(){te(c,!0);try{await Zi.dream(),await S()}catch{}finally{te(c,!1)}}async function w(J){try{te(a,await Zi.memories.get(J),!0)}catch{te(a,null)}}function R(){V(h).trim()&&S(V(h))}var U=g_(),y=At(U);{var M=J=>{var Et=l_();we(J,Et)},P=J=>{var Et=c_(),ct=At(Et),E=Dt(At(ct),4),_=At(E,!0);bt(E),bt(ct),bt(Et),on(()=>me(_,V(l))),we(J,Et)},W=J=>{$g(J,{get nodes(){return V(f)},get edges(){return V(T)},get centerId(){return V(r).center_id},get events(){return e()},get isDreaming(){return V(c)},get colorMode(){return V(g)},onSelect:w,onGraphMutation:b})};Zn(y,J=>{V(o)?J(M):V(l)?J(P,1):V(r)&&J(W,2)})}var z=Dt(y,2),G=At(z),$=At(G);Fl($);var X=Dt($,2);bt(G);var Q=Dt(G,2),k=At(Q),it=At(k),ft=Dt(it,2);bt(k);var St=Dt(k,2),Ft=At(St);Ft.value=Ft.__value=50;var Vt=Dt(Ft);Vt.value=Vt.__value=100;var Y=Dt(Vt);Y.value=Y.__value=150;var nt=Dt(Y);nt.value=nt.__value=200,bt(St);var _t=Dt(St,2),ot=At(_t,!0);bt(_t);var Pt=Dt(_t,2);bt(Q),bt(z);var Lt=Dt(z,2),Ht=At(Lt);{var he=J=>{var Et=h_(),ct=Il(Et),E=At(ct);bt(ct);var _=Dt(ct,4),F=At(_);bt(_);var q=Dt(_,4),K=At(q);bt(q),on(()=>{me(E,`${V(v)??""} nodes`),me(F,`${V(m)??""} edges`),me(K,`depth ${V(r).depth??""}`)}),we(J,Et)};Zn(Ht,J=>{V(r)&&J(he)})}bt(Lt);var Yt=Dt(Lt,2);{var fe=J=>{var Et=u_(),ct=At(Et);o_(ct,{}),bt(Et),we(J,Et)};Zn(Yt,J=>{V(g)==="state"&&J(fe)})}var A=Dt(Yt,2);{var ke=J=>{s_(J,{get nodes(){return V(r).nodes},onDateChange:Et=>{te(u,Et,!0)},onToggle:Et=>{te(p,Et,!0)}})};Zn(A,J=>{V(r)&&J(ke)})}var qt=Dt(A,2);{var jt=J=>{var Et=m_(),ct=At(Et),E=Dt(At(ct),2);bt(ct);var _=Dt(ct,2),F=At(_),q=At(F),K=At(q,!0);bt(q);var j=Dt(q,2);cr(j,17,()=>V(a).tags,sa,(wt,Kt)=>{var ce=d_(),Wt=At(ce,!0);bt(ce),on(()=>me(Wt,V(Kt))),we(wt,ce)}),bt(F);var yt=Dt(F,2),lt=At(yt,!0);bt(yt);var pt=Dt(yt,2);cr(pt,21,()=>[{label:"Retention",value:V(a).retentionStrength},{label:"Storage",value:V(a).storageStrength},{label:"Retrieval",value:V(a).retrievalStrength}],sa,(wt,Kt)=>{var ce=f_(),Wt=At(ce),Ie=At(Wt),en=At(Ie,!0);bt(Ie);var Yi=Dt(Ie,2),xs=At(Yi);bt(Yi),bt(Wt);var hn=Dt(Wt,2),qi=At(hn);bt(hn),bt(ce),on(Ms=>{me(en,V(Kt).label),me(xs,`${Ms??""}%`),$a(qi,`width: ${V(Kt).value*100}%; background: ${V(Kt).value>.7?"#10b981":V(Kt).value>.4?"#f59e0b":"#ef4444"}`)},[()=>(V(Kt).value*100).toFixed(1)]),we(wt,ce)}),bt(pt);var Gt=Dt(pt,2),et=Dt(At(Gt),2);{let wt=ei(()=>V(a).storageStrength*30);t_(et,{get retention(){return V(a).retentionStrength},get stability(){return V(wt)}})}bt(Gt);var mt=Dt(Gt,2),Tt=At(mt),Ut=At(Tt);bt(Tt);var gt=Dt(Tt,2),Zt=At(gt);bt(gt);var Ot=Dt(gt,2);{var se=wt=>{var Kt=p_(),ce=At(Kt);bt(Kt),on(Wt=>me(ce,`Accessed: ${Wt??""}`),[()=>new Date(V(a).lastAccessedAt).toLocaleString()]),we(wt,Kt)};Zn(Ot,wt=>{V(a).lastAccessedAt&&wt(se)})}var L=Dt(Ot,2),at=At(L);bt(L),bt(mt);var H=Dt(mt,2),Z=At(H),dt=Dt(Z,2);bt(H);var ht=Dt(H,2);bt(_),bt(Et),on((wt,Kt)=>{me(K,V(a).nodeType),me(lt,V(a).content),me(Ut,`Created: ${wt??""}`),me(Zt,`Updated: ${Kt??""}`),me(at,`Reviews: ${V(a).reviewCount??0??""}`),Pe(ht,"href",`${Oc??""}/explore`)},[()=>new Date(V(a).createdAt).toLocaleString(),()=>new Date(V(a).updatedAt).toLocaleString()]),Ge("click",E,()=>te(a,null)),Ge("click",Z,()=>{V(a)&&Zi.memories.promote(V(a).id)}),Ge("click",dt,()=>{V(a)&&Zi.memories.demote(V(a).id)}),we(J,Et)};Zn(qt,J=>{V(a)&&J(jt)})}bt(U),on(()=>{Pe(it,"aria-checked",V(g)==="type"),Er(it,1,`px-3 py-1.5 rounded-lg transition ${V(g)==="type"?"bg-synapse/25 text-synapse-glow":"text-dim hover:text-text"}`),Pe(ft,"aria-checked",V(g)==="state"),Er(ft,1,`px-3 py-1.5 rounded-lg transition ${V(g)==="state"?"bg-synapse/25 text-synapse-glow":"text-dim hover:text-text"}`),_t.disabled=V(c),Er(_t,1,`px-4 py-2 rounded-xl bg-dream/20 border border-dream/40 text-dream-glow text-sm + [&::-webkit-slider-thumb]:shadow-[0_0_8px_rgba(129,140,248,0.4)]"/>
`),h_=Re('');function u_(i,t){Ms(t,!0);let e=me(!1),n=me(!1),s=me(1),r=me(100),a,o=0,l=oi(()=>l_(t.nodes)),c=oi(()=>{const E=H(l).oldest.getTime(),D=H(l).newest.getTime()-E||1;return new Date(E+H(r)/100*D)});function h(E){return E.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function d(){Gt(e,!H(e)),t.onToggle(H(e)),H(e)&&(Gt(r,100),t.onDateChange(H(c)))}function f(){Gt(n,!H(n)),H(n)?(Gt(r,0),o=performance.now(),u()):cancelAnimationFrame(a)}function u(){H(n)&&(a=requestAnimationFrame(E=>{const y=(E-o)/1e3;o=E;const D=H(l).oldest.getTime(),C=(H(l).newest.getTime()-D)/(1440*60*1e3)||1,I=H(s)/C*100;if(Gt(r,Math.min(100,H(r)+I*y),!0),t.onDateChange(H(c)),H(r)>=100){Gt(n,!1);return}u()}))}function g(){t.onDateChange(H(c))}Vl(()=>{Gt(n,!1),cancelAnimationFrame(a)});var _=Hc(),m=Gl(_);{var p=E=>{var y=c_(),D=yt(y),A=yt(D),C=yt(A),I=yt(C),S=yt(I,!0);St(I);var M=Tt(I,2),w=yt(M);w.value=w.__value=1;var Y=Tt(w);Y.value=Y.__value=7;var V=Tt(Y);V.value=V.__value=30,St(M),St(C);var j=Tt(C,2),$=yt(j,!0);St(j);var q=Tt(j,2);St(A);var J=Tt(A,2);da(J);var X=Tt(J,2),it=yt(X),ft=yt(it,!0);St(it);var Mt=Tt(it,2),Nt=yt(Mt,!0);St(Mt),St(X),St(D),St(y),nn((Wt,Z,nt)=>{fe(S,H(n)?"⏸":"▶"),fe($,Wt),fe(ft,Z),fe(Nt,nt)},[()=>h(H(c)),()=>h(H(l).oldest),()=>h(H(l).newest)]),He("click",I,f),Xl(M,()=>H(s),Wt=>Gt(s,Wt)),He("click",q,d),He("input",J,g),fa(J,()=>H(r),Wt=>Gt(r,Wt)),ye(E,y)},T=E=>{var y=h_();He("click",y,d),ye(E,y)};ti(m,E=>{H(e)?E(p):E(T,!1)})}ye(i,_),Ss()}Wl(["click","input"]);var d_=Re('
'),f_=Re('
FSRS accessibility
');function p_(i,t){Ms(t,!1);const e=["active","dormant","silent","unavailable"];Xc();var n=f_(),s=Tt(yt(n),2);mr(s,1,()=>e,r=>r,(r,a)=>{var o=d_(),l=yt(o),c=Tt(l,2),h=yt(c,!0);St(c);var d=Tt(c,2),f=yt(d,!0);St(d),St(o),nn(u=>{co(l,`background: ${ro[H(a)]??""}; box-shadow: 0 0 6px ${ro[H(a)]??""}55;`),fe(h,H(a)),fe(f,u)},[()=>{var u;return((u=Ig[H(a)].match(/\(([^)]+)\)/))==null?void 0:u[1])??""}]),ye(r,o)}),St(n),ye(i,n),Ss()}var m_=Re('

Loading memory graph...

'),g_=Re(`

MCP Backend Offline

The Vestige MCP server isn't reachable on :3927. + The dashboard is running but has nothing to query.

Start the backend:
nohup bash -c 'tail -f /dev/null | VESTIGE_DASHBOARD_ENABLED=true ~/.local/bin/vestige-mcp' > /tmp/vestige.log 2>&1 & +disown
`),__=Re('

Your Mind Awaits

No memories yet. Start using Vestige to populate your graph.

'),v_=Re('

Your Mind Awaits

'),x_=Re(' · · ',1),M_=Re('
'),S_=Re(' '),y_=Re('
'),E_=Re("
"),b_=Re(`

Memory Detail

Retention Forecast
◬ Explore Connections
`),T_=Re(`
`);function q_(i,t){Ms(t,!0);const e=()=>Gc(Yc,"$eventFeed",n),[n,s]=Vc();let r=me(null),a=me(null),o=me(!0),l=me(""),c=me(!1),h=me(""),d=me(150),f=me(!1),u=me(ha(new Date)),g=me("type"),_=me(0),m=me(0),p=oi(()=>H(r)?H(f)?kl(H(r).nodes,H(r).edges,H(u)).visibleNodes:H(r).nodes:[]),T=oi(()=>H(r)?H(f)?kl(H(r).nodes,H(r).edges,H(u)).visibleEdges:H(r).edges:[]);function E(F){if(H(r))switch(F.type){case"nodeAdded":H(r).nodes=[...H(r).nodes,F.node],H(r).nodeCount=H(r).nodes.length,Gt(_,H(r).nodeCount,!0);break;case"nodeRemoved":H(r).nodes=H(r).nodes.filter(k=>k.id!==F.nodeId),H(r).nodeCount=H(r).nodes.length,Gt(_,H(r).nodeCount,!0);break;case"edgeAdded":H(r).edges=[...H(r).edges,F.edge],H(r).edgeCount=H(r).edges.length,Gt(m,H(r).edgeCount,!0);break;case"edgesRemoved":H(r).edges=H(r).edges.filter(k=>k.source!==F.nodeId&&k.target!==F.nodeId),H(r).edgeCount=H(r).edges.length,Gt(m,H(r).edgeCount,!0);break;case"nodeUpdated":{const k=H(r).nodes.find(G=>G.id===F.nodeId);k&&(k.retention=F.retention);break}}}Hl(()=>y());async function y(F,k){var G;Gt(o,!0),Gt(l,"");try{const ot=!F&&!k;if(Gt(r,await gi.graph({max_nodes:H(d),depth:3,query:F||void 0,center_id:k||void 0,sort:ot?"recent":void 0}),!0),ot&&H(r)&&H(r).nodeCount<=1&&H(r).edgeCount===0){const Q=await gi.graph({max_nodes:H(d),depth:3,sort:"connected"});Q&&Q.nodeCount>H(r).nodeCount&&Gt(r,Q,!0)}H(r)&&(Gt(_,H(r).nodeCount,!0),Gt(m,H(r).edgeCount,!0))}catch(ot){const Q=ot instanceof Error?ot.message:String(ot),lt=Q.replace(/\/[\w./-]+\.(sqlite|rs|db|toml|lock)\b/g,"[path]").slice(0,200),Ft=ot instanceof TypeError||/failed to fetch|NetworkError|load failed/i.test(Q)||/^API 500:?\s*(Internal Server Error)?\s*$/i.test(Q.trim()),tt=(((G=H(r))==null?void 0:G.nodeCount)??0)===0&&/not found|404|empty|no memor/i.test(Q);Ft?Gt(l,"OFFLINE"):tt?Gt(l,"EMPTY"):Gt(l,`Failed to load graph: ${lt}`)}finally{Gt(o,!1)}}async function D(){Gt(c,!0);try{await gi.dream(),await y()}catch{}finally{Gt(c,!1)}}async function A(F){try{Gt(a,await gi.memories.get(F),!0)}catch{Gt(a,null)}}function C(){H(h).trim()&&y(H(h))}var I=T_(),S=yt(I);{var M=F=>{var k=m_();ye(F,k)},w=F=>{var k=g_(),G=yt(k),ot=Tt(yt(G),8),Q=yt(ot),lt=Tt(Q,2);St(ot),St(G),St(k),nn(()=>Me(lt,"href",`${bo??""}/settings`)),He("click",Q,()=>y()),ye(F,k)},Y=F=>{var k=__();ye(F,k)},V=F=>{var k=v_(),G=yt(k),ot=Tt(yt(G),4),Q=yt(ot,!0);St(ot),St(G),St(k),nn(()=>fe(Q,H(l))),ye(F,k)},j=F=>{s_(F,{get nodes(){return H(p)},get edges(){return H(T)},get centerId(){return H(r).center_id},get events(){return e()},get isDreaming(){return H(c)},get colorMode(){return H(g)},onSelect:A,onGraphMutation:E})};ti(S,F=>{H(o)?F(M):H(l)==="OFFLINE"?F(w,1):H(l)==="EMPTY"?F(Y,2):H(l)?F(V,3):H(r)&&F(j,4)})}var $=Tt(S,2),q=yt($),J=yt(q);da(J);var X=Tt(J,2);St(q);var it=Tt(q,2),ft=yt(it),Mt=yt(ft),Nt=Tt(Mt,2);St(ft);var Wt=Tt(ft,2),Z=yt(Wt);Z.value=Z.__value=50;var nt=Tt(Z);nt.value=nt.__value=100;var _t=Tt(nt);_t.value=_t.__value=150;var at=Tt(_t);at.value=at.__value=200,St(Wt);var wt=Tt(Wt,2),Pt=Tt(yt(wt),2);da(Pt);var kt=Tt(Pt,2),le=yt(kt);St(kt),St(wt);var Ht=Tt(wt,2),de=yt(Ht,!0);St(Ht);var R=Tt(Ht,2);St(it),St($);var Ue=Tt($,2),qt=yt(Ue);{var jt=F=>{var k=x_(),G=Gl(k),ot=yt(G);St(G);var Q=Tt(G,4),lt=yt(Q);St(Q);var Ft=Tt(Q,4),tt=yt(Ft);St(Ft),nn(()=>{fe(ot,`${H(_)??""} nodes`),fe(lt,`${H(m)??""} edges`),fe(tt,`depth ${H(r).depth??""}`)}),ye(F,k)};ti(qt,F=>{H(r)&&F(jt)})}St(Ue);var bt=Tt(Ue,2);{var oe=F=>{var k=M_(),G=yt(k);p_(G,{}),St(k),ye(F,k)};ti(bt,F=>{H(g)==="state"&&F(oe)})}var Et=Tt(bt,2);{var b=F=>{u_(F,{get nodes(){return H(r).nodes},onDateChange:k=>{Gt(u,k,!0)},onToggle:k=>{Gt(f,k,!0)}})};ti(Et,F=>{H(r)&&F(b)})}var v=Tt(Et,2);{var O=F=>{var k=b_(),G=yt(k),ot=Tt(yt(G),2);St(G);var Q=Tt(G,2),lt=yt(Q),Ft=yt(lt),tt=yt(Ft,!0);St(Ft);var mt=Tt(Ft,2);mr(mt,17,()=>H(a).tags,ua,(Ge,Ie)=>{var Ce=S_(),on=yt(Ce,!0);St(Ce),nn(()=>fe(on,H(Ie))),ye(Ge,Ce)}),St(lt);var At=Tt(lt,2),Dt=yt(At,!0);St(At);var pt=Tt(At,2);mr(pt,21,()=>[{label:"Retention",value:H(a).retentionStrength},{label:"Storage",value:H(a).storageStrength},{label:"Retrieval",value:H(a).retrievalStrength}],ua,(Ge,Ie)=>{var Ce=y_(),on=yt(Ce),pi=yt(on),ws=yt(pi,!0);St(pi);var Xn=Tt(pi,2),As=yt(Xn);St(Xn),St(on);var Yn=Tt(on,2),Rs=yt(Yn);St(Yn),St(Ce),nn(Cs=>{fe(ws,H(Ie).label),fe(As,`${Cs??""}%`),co(Rs,`width: ${H(Ie).value*100}%; background: ${H(Ie).value>.7?"#10b981":H(Ie).value>.4?"#f59e0b":"#ef4444"}`)},[()=>(H(Ie).value*100).toFixed(1)]),ye(Ge,Ce)}),St(pt);var Xt=Tt(pt,2),Ot=Tt(yt(Xt),2);{let Ge=oi(()=>H(a).storageStrength*30);o_(Ot,{get retention(){return H(a).retentionStrength},get stability(){return H(Ge)}})}St(Xt);var Qt=Tt(Xt,2),L=yt(Qt),ct=yt(L);St(L);var W=Tt(L,2),K=yt(W);St(W);var ht=Tt(W,2);{var ut=Ge=>{var Ie=E_(),Ce=yt(Ie);St(Ie),nn(on=>fe(Ce,`Accessed: ${on??""}`),[()=>new Date(H(a).lastAccessedAt).toLocaleString()]),ye(Ge,Ie)};ti(ht,Ge=>{H(a).lastAccessedAt&&Ge(ut)})}var Ut=Tt(ht,2),he=yt(Ut);St(Ut),St(Qt);var _e=Tt(Qt,2),Kt=yt(_e),qe=Tt(Kt,2);St(_e);var an=Tt(_e,2);St(Q),St(k),nn((Ge,Ie)=>{fe(tt,H(a).nodeType),fe(Dt,H(a).content),fe(ct,`Created: ${Ge??""}`),fe(K,`Updated: ${Ie??""}`),fe(he,`Reviews: ${H(a).reviewCount??0??""}`),Me(an,"href",`${bo??""}/explore`)},[()=>new Date(H(a).createdAt).toLocaleString(),()=>new Date(H(a).updatedAt).toLocaleString()]),He("click",ot,()=>Gt(a,null)),He("click",Kt,()=>{H(a)&&gi.memories.promote(H(a).id)}),He("click",qe,()=>{H(a)&&gi.memories.demote(H(a).id)}),ye(F,k)};ti(v,F=>{H(a)&&F(O)})}St(I),nn((F,k)=>{Me(Mt,"aria-checked",H(g)==="type"),Cr(Mt,1,`px-3 py-1.5 rounded-lg transition ${H(g)==="type"?"bg-synapse/25 text-synapse-glow":"text-dim hover:text-text"}`),Me(Nt,"aria-checked",H(g)==="state"),Cr(Nt,1,`px-3 py-1.5 rounded-lg transition ${H(g)==="state"?"bg-synapse/25 text-synapse-glow":"text-dim hover:text-text"}`),Me(wt,"title",`Adjust graph brightness (${F??""}x). Combines with auto distance compensation.`),Me(Pt,"min",ni.brightnessMin),Me(Pt,"max",ni.brightnessMax),fe(le,`${k??""}x`),Ht.disabled=H(c),Cr(Ht,1,`px-4 py-2 rounded-xl bg-dream/20 border border-dream/40 text-dream-glow text-sm hover:bg-dream/30 transition-all backdrop-blur-sm disabled:opacity-50 - ${V(c)?"glow-dream animate-pulse-glow":""}`),me(ot,V(c)?"◈ Dreaming...":"◈ Dream")}),Ge("keydown",$,J=>J.key==="Enter"&&R()),Ol($,()=>V(h),J=>te(h,J)),Ge("click",X,R),Ge("click",it,()=>te(g,"type")),Ge("click",ft,()=>te(g,"state")),Ge("change",St,()=>S()),Bl(St,()=>V(d),J=>te(d,J)),Ge("click",_t,D),Ge("click",Pt,()=>S()),we(i,U),ps(),s()}Nl(["keydown","click","change"]);export{z_ as component}; + ${H(c)?"glow-dream animate-pulse-glow":""}`),fe(de,H(c)?"◈ Dreaming...":"◈ Dream")},[()=>ni.brightness.toFixed(1),()=>ni.brightness.toFixed(1)]),He("keydown",J,F=>F.key==="Enter"&&C()),fa(J,()=>H(h),F=>Gt(h,F)),He("click",X,C),He("click",Mt,()=>Gt(g,"type")),He("click",Nt,()=>Gt(g,"state")),He("change",Wt,()=>y()),Xl(Wt,()=>H(d),F=>Gt(d,F)),fa(Pt,()=>ni.brightness,F=>ni.brightness=F),He("click",Ht,D),He("click",R,()=>y()),ye(i,I),Ss(),s()}Wl(["click","keydown","change"]);export{q_ as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/10.CPGa_1iF.js.br b/apps/dashboard/build/_app/immutable/nodes/10.CPGa_1iF.js.br new file mode 100644 index 0000000000000000000000000000000000000000..860c09176a19161e63324bc6cf67ce5f4c63607e GIT binary patch literal 123490 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 Fu{&vD0#X0~ diff --git a/apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js.gz b/apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js.gz deleted file mode 100644 index 96c412571bc019f1fb1e3bb193b9d4c411bf69ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1770 zcmV;(K^#X%xlFr`JLQO$GdUhgWa{)SWQBJq6BNr-I6=&l%<*2S zPs9Db)MXNj-fs!LSt&m;&L+y>!&iAIa>q;`^f2X_7B$aB(}}3hY5%+uDi<*~vL{d$ zJKol!a@^M{E{s62Xd7n>8I?JksPAl}$XOC{lD@vg1Nj}Nr({{TKawU?7e%XX_siSfqL)-}O6AKaxh&?%k@p`G8E$Q!R~D zsl)B;t{=UnN_=7ZLZl^p&7kO{B<1I_6B*Q2sc{k!$|8Af`fr8><}8V!oy+sJ%nlBN zS849OX`;P1OIpEusn_dN9Q@-{{B9oJ*?Dl0uZ&TNp~uaZv5?xDf21`uJEr?bvVc7L)jZG+GmLYi9Pgto<{S zxJ4SDC-%=X`=)E{KbXXyN#n=F{$pnU;8KGNLJfW<7Wth?{7mblF@m?BOtYqa3Ry>B z(uin;T~5AvK3@eZM1C?3!@nE-R<12Dz|nv*d^4hfC1rXd+qA?5-`C9brXdCLK) zG_dl7AWtL016ucNT7e%4ZL?;(8ge5jZqt04`kFn1bvW*i?8y1_U; zCX@@t@kZHlyiwNui%Glz9vY0l!14>oAD8AACh;+tPZ`HAKtf{_w;0 z!FGl0?^i1022vRhq!|Ldy7{Mt=fa2-M)}(0BJG&yztx@b69LUrnvrqIUkWDi>8!80 zVCjUGVto)TV;n1}S`k`OOn~B_8>7YgVw=P9+*uAq#*I%{3JMX|ft#ND#~&%q1sRjE z!7m`|QAtYyt)m&Oc%IfxIdAH<@pGX;+l+pkYJ0-EP{bMI_=M0)Ch-|G>zr|XNoWsR zdOqp*Ii$ZV(_b)&F98?=;sVSUU_Jp2Qo)*|ulQ_jpFaMsPfvs2=9_uy`XhKH=|FTkb=$uklZ^3kQ5MIgBxPUt=MtM|L%aa9&x?P01#LzXcUq z&?`a*0vD4(=@W<<;6Bwh`yIU@^ig0kE(E@xxlO8hAPq6F|D~?%-^D;BnMy@!#*Kgd M4=Pgm5nm4g08`*w0RR91 diff --git a/apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js b/apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js new file mode 100644 index 0000000..09afad5 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js @@ -0,0 +1,7 @@ +import"../chunks/Bzak7iHL.js";import{o as Pt}from"../chunks/CNjeV5xa.js";import{m as Kt,ab as qt,aO as Ht,b as Wt,p as Rt,h as C,e as i,t as S,g as t,d as o,r as n,a as Tt,u as y,s as q,f as U,c as Ct,a2 as Xt,i as Zt,n as Gt}from"../chunks/CvjSAYrz.js";import{s as _,d as Ut,a as kt}from"../chunks/FzvEaXMa.js";import{i as R}from"../chunks/ciN1mm2W.js";import{B as Vt}from"../chunks/DE4u6cUg.js";import{e as V,i as rt}from"../chunks/DTnG8poT.js";import{a as x,c as Nt,b as yt,f as h}from"../chunks/BsvCUYx-.js";import{s as Yt}from"../chunks/Bhad70Ss.js";import{b as Jt}from"../chunks/CVpUe0w3.js";import{g as Qt}from"../chunks/S0ILvWpb.js";import{b as te}from"../chunks/DJWRm1Ki.js";import{a as Ft}from"../chunks/DNjM5a-l.js";import{N as ee}from"../chunks/DzfRjky4.js";import{s as p}from"../chunks/CNfQDikv.js";import{p as ae}from"../chunks/B_YDQCB6.js";const re=Symbol("NaN");function se(a,F,m){Kt&&qt();var v=new Vt(a),T=!Ht();Wt(()=>{var w=F();w!==w&&(w=re),T&&w!==null&&typeof w=="object"&&(w={}),v.ensure(w,m)})}function Mt(a){return a==null||!Number.isFinite(a)||a<0?0:a>1?1:a}function ne(a){return{novelty:Mt(a==null?void 0:a.novelty),arousal:Mt(a==null?void 0:a.arousal),reward:Mt(a==null?void 0:a.reward),attention:Mt(a==null?void 0:a.attention)}}const It={sm:80,md:180,lg:320};function $t(a){return a&&(a==="sm"||a==="md"||a==="lg")?It[a]:It.md}const gt=[{key:"novelty",angle:-Math.PI/2},{key:"arousal",angle:0},{key:"reward",angle:Math.PI/2},{key:"attention",angle:Math.PI}];function oe(a){const F=$t(a);let m;switch(a){case"lg":m=44;break;case"sm":m=4;break;default:m=28}return Math.max(0,F/2-m)}var ie=yt(''),le=yt(''),de=yt(''),ce=yt(' ',1),ve=yt('');function Et(a,F){Rt(F,!0);let m=ae(F,"size",3,"md"),v=y(()=>$t(m())),T=y(()=>m()!=="sm"),w=y(()=>oe(m())),Y=y(()=>t(v)/2),J=y(()=>t(v)/2);const St={novelty:"Novelty",arousal:"Arousal",reward:"Reward",attention:"Attention"};let N=y(()=>ne({novelty:F.novelty,arousal:F.arousal,reward:F.reward,attention:F.attention}));function H(d,l){const r=d*t(w);return[t(Y)+Math.cos(l)*r,t(J)+Math.sin(l)*r]}const st=[.25,.5,.75,1];function nt(d){return gt.map(({angle:r})=>H(d,r)).map((r,c)=>`${c===0?"M":"L"}${r[0].toFixed(2)},${r[1].toFixed(2)}`).join(" ")+" Z"}let $=q(0);Pt(()=>{const l=performance.now();let r=0;const c=b=>{const g=Math.min(1,(b-l)/600);C($,1-Math.pow(1-g,3)),g<1&&(r=requestAnimationFrame(c))};return r=requestAnimationFrame(c),()=>cancelAnimationFrame(r)});let ot=y(()=>{const d=t($);return gt.map(({key:r,angle:c})=>H(t(N)[r]*d,c)).map((r,c)=>`${c===0?"M":"L"}${r[0].toFixed(2)},${r[1].toFixed(2)}`).join(" ")+" Z"});function _t(d){const l=t(w)+(m()==="lg"?18:12),r=t(Y)+Math.cos(d)*l,c=t(J)+Math.sin(d)*l;let b="middle";return Math.abs(Math.cos(d))>.5&&(b=Math.cos(d)>0?"start":"end"),{x:r,y:c,anchor:b}}var P=ve(),it=i(P);V(it,17,()=>st,rt,(d,l)=>{var r=ie();S(c=>{p(r,"d",c),p(r,"stroke-opacity",t(l)===1?.45:.18),p(r,"stroke-width",t(l)===1?1:.75)},[()=>nt(t(l))]),x(d,r)});var ht=o(it);V(ht,17,()=>gt,rt,(d,l)=>{const r=y(()=>{const[b,g]=H(1,t(l).angle);return{x:b,y:g}});var c=le();S(()=>{p(c,"x1",t(Y)),p(c,"y1",t(J)),p(c,"x2",t(r).x),p(c,"y2",t(r).y)}),x(d,c)});var W=o(ht),Q=o(W);{var wt=d=>{var l=Nt(),r=U(l);V(r,17,()=>gt,rt,(c,b)=>{const g=y(()=>{const[I,dt]=H(t(N)[t(b).key]*t($),t(b).angle);return{px:I,py:dt}});var j=de();S(()=>{p(j,"cx",t(g).px),p(j,"cy",t(g).py),p(j,"r",m()==="lg"?3:2.25)}),x(c,j)}),x(d,l)};R(Q,d=>{m()!=="sm"&&d(wt)})}var lt=o(Q);{var tt=d=>{var l=Nt(),r=U(l);V(r,17,()=>gt,rt,(c,b)=>{const g=y(()=>_t(t(b).angle));var j=ce(),I=U(j),dt=i(I);n(I);var L=o(I),ct=i(L,!0);n(L),S(At=>{p(I,"x",t(g).x),p(I,"y",t(g).y),p(I,"text-anchor",t(g).anchor),p(I,"font-size",m()==="lg"?12:10),_(dt,`${At??""}%`),p(L,"x",t(g).x),p(L,"y",t(g).y+(m()==="lg"?14:11)),p(L,"text-anchor",t(g).anchor),p(L,"font-size",m()==="lg"?10:8.5),_(ct,St[t(b).key])},[()=>(t(N)[t(b).key]*100).toFixed(0)]),x(c,j)}),x(d,l)};R(lt,d=>{t(T)&&d(tt)})}n(P),S((d,l,r,c)=>{p(P,"width",t(v)),p(P,"height",t(v)),p(P,"viewBox",`0 0 ${t(v)??""} ${t(v)??""}`),p(P,"aria-label",`Importance radar: novelty ${d??""}%, arousal ${l??""}%, reward ${r??""}%, attention ${c??""}%`),p(W,"d",t(ot)),p(W,"stroke-width",m()==="sm"?1:1.5)},[()=>(t(N).novelty*100).toFixed(0),()=>(t(N).arousal*100).toFixed(0),()=>(t(N).reward*100).toFixed(0),()=>(t(N).attention*100).toFixed(0)]),x(a,P),Tt()}var pe=h(' '),xe=h('Driven by ',1),me=h('
✓ Save

'),ue=h('Weakest channel: ',1),fe=h('
⨯ Skip

'),ge=h('
Composite
%
',1),ye=h(`

Type some content above to score its importance.

Composite = 0.25·novelty + 0.30·arousal + 0.25·reward + 0.20·attention. + Threshold for save: 60%.

`),_e=h('
'),he=h('
'),we=h('

No memories yet.

'),be=h('· ',1),ke=h(' '),Me=h('
'),Se=h(``),Ae=h('
'),Fe=h(`

Importance Radar

4-channel importance model: Novelty · Arousal · Reward · Attention

Test Importance

Paste any content below. Vestige scores it across 4 channels and + decides whether it is worth saving.

⌘/Ctrl + Enter

Top Important Memories This Week

Ranked by retention × reviews ÷ age. Click any card to open it.

`);function He(a,F){Rt(F,!0);let m=q(""),v=q(null),T=q(!1),w=q(null),Y=q(0);async function J(){const e=t(m).trim();if(!(!e||t(T))){C(T,!0),C(w,null);try{C(v,await Ft.importance(e),!0),Xt(Y)}catch(s){C(w,s instanceof Error?s.message:String(s),!0),C(v,null)}finally{C(T,!1)}}}function St(e){(e.metaKey||e.ctrlKey)&&e.key==="Enter"&&(e.preventDefault(),J())}const N={novelty:.25,arousal:.3,reward:.25,attention:.2},H={novelty:{high:"new information not already in your graph",low:"overlaps heavily with what you already know"},arousal:{high:"emotionally salient — decisions, bugs, or discoveries stick",low:"neutral tone, no strong affect signal"},reward:{high:"high reward value — preferences, wins, or solutions you will revisit",low:"low reward value — transient or incidental detail"},attention:{high:"strong attentional markers (imperatives, questions, urgency)",low:"passive phrasing, no clear attentional hook"}};let st=y(()=>t(v)?Object.keys(N).map(s=>({key:s,contribution:t(v).channels[s]*N[s]})).sort((s,u)=>u.contribution-s.contribution)[0]:null),nt=y(()=>t(v)?Object.keys(N).slice().sort((e,s)=>t(v).channels[e]-t(v).channels[s])[0]:null),$=q(Ct([])),ot=q(!0),_t=Ct({});function P(e){const s=Math.max(1,(Date.now()-new Date(e.createdAt).getTime())/864e5),u=e.reviewCount??0,f=1/Math.pow(s,.5);return e.retentionStrength*Math.log1p(u+1)*f}async function it(){C(ot,!0);try{const s=(await Ft.memories.list({limit:"20"})).memories.slice().sort((u,f)=>P(f)-P(u)).slice(0,20);C($,s,!0),t($).forEach(async u=>{try{const f=await Ft.importance(u.content);_t[u.id]=f.channels}catch{}})}catch{C($,[],!0)}finally{C(ot,!1)}}Pt(it);function ht(e){Qt(`${te}/memories`)}var W=Fe(),Q=o(i(W),2),wt=o(i(Q),2),lt=i(wt),tt=i(lt);Zt(tt);var d=o(tt,2),l=i(d),r=i(l,!0);n(l);var c=o(l,4);{var b=e=>{var s=pe(),u=i(s,!0);n(s),S(()=>_(u,t(w))),x(e,s)};R(c,e=>{t(w)&&e(b)})}n(d),n(lt);var g=o(lt,2),j=i(g);{var I=e=>{var s=ge(),u=U(s),f=o(i(u),2),z=i(f,!0);Gt(),n(f),n(u);var X=o(u,2);se(X,()=>t(Y),A=>{Et(A,{get novelty(){return t(v).channels.novelty},get arousal(){return t(v).channels.arousal},get reward(){return t(v).channels.reward},get attention(){return t(v).channels.attention},size:"lg"})});var vt=o(X,2);{var pt=A=>{var B=me(),D=o(i(B),2),Z=i(D),xt=o(Z);{var mt=k=>{var G=xe(),O=o(U(G)),ut=i(O,!0);n(O);var et=o(O);S(()=>{_(ut,t(st).key),_(et,` — ${H[t(st).key].high??""}.`)}),x(k,G)};R(xt,k=>{t(st)&&k(mt)})}n(D),n(B),S(k=>_(Z,`Composite ${k??""}% > 60% threshold. `),[()=>(t(v).composite*100).toFixed(0)]),x(A,B)},bt=A=>{var B=fe(),D=o(i(B),2),Z=i(D),xt=o(Z);{var mt=k=>{var G=ue(),O=o(U(G)),ut=i(O,!0);n(O);var et=o(O);S(()=>{_(ut,t(nt)),_(et,` — ${H[t(nt)].low??""}.`)}),x(k,G)};R(xt,k=>{t(nt)&&k(mt)})}n(D),n(B),S(k=>_(Z,`Composite ${k??""}% < 60% threshold. `),[()=>(t(v).composite*100).toFixed(0)]),x(A,B)};R(vt,A=>{t(v).composite>.6?A(pt):A(bt,!1)})}S(A=>_(z,A),[()=>(t(v).composite*100).toFixed(0)]),x(e,s)},dt=e=>{var s=ye();x(e,s)};R(j,e=>{t(v)?e(I):e(dt,!1)})}n(g),n(wt),n(Q);var L=o(Q,2),ct=i(L),At=o(i(ct),2);n(ct);var jt=o(ct,2);{var Lt=e=>{var s=he();V(s,20,()=>Array(6),rt,(u,f)=>{var z=_e();x(u,z)}),n(s),x(e,s)},Bt=e=>{var s=we();x(e,s)},Dt=e=>{var s=Ae();V(s,21,()=>t($),u=>u.id,(u,f)=>{const z=y(()=>_t[t(f).id]);var X=Se(),vt=i(X),pt=i(vt),bt=i(pt),A=o(bt,2),B=i(A,!0);n(A);var D=o(A,4),Z=i(D);n(D);var xt=o(D,2);{var mt=E=>{var K=be(),at=o(U(K),2),ft=i(at);n(at),S(()=>_(ft,`${t(f).reviewCount??""} reviews`)),x(E,K)};R(xt,E=>{t(f).reviewCount&&E(mt)})}n(pt);var k=o(pt,2),G=i(k,!0);n(k);var O=o(k,2);{var ut=E=>{var K=Me();V(K,21,()=>t(f).tags.slice(0,4),rt,(at,ft)=>{var M=ke(),zt=i(M,!0);n(M),S(()=>_(zt,t(ft))),x(at,M)}),n(K),x(E,K)};R(O,E=>{t(f).tags.length>0&&E(ut)})}n(vt);var et=o(vt,2),Ot=i(et);{let E=y(()=>{var M;return((M=t(z))==null?void 0:M.novelty)??0}),K=y(()=>{var M;return((M=t(z))==null?void 0:M.arousal)??0}),at=y(()=>{var M;return((M=t(z))==null?void 0:M.reward)??0}),ft=y(()=>{var M;return((M=t(z))==null?void 0:M.attention)??0});Et(Ot,{get novelty(){return t(E)},get arousal(){return t(K)},get reward(){return t(at)},get attention(){return t(ft)},size:"sm"})}n(et),n(X),S(E=>{Yt(bt,`background: ${(ee[t(f).nodeType]||"#8B95A5")??""}`),_(B,t(f).nodeType),_(Z,`${E??""}% retention`),_(G,t(f).content)},[()=>(t(f).retentionStrength*100).toFixed(0)]),kt("click",X,()=>ht(t(f).id)),x(u,X)}),n(s),x(e,s)};R(jt,e=>{t(ot)?e(Lt):t($).length===0?e(Bt,1):e(Dt,!1)})}n(L),n(W),S(e=>{l.disabled=e,_(r,t(T)?"Scoring…":"Score Importance")},[()=>t(T)||!t(m).trim()]),kt("keydown",tt,St),Jt(tt,()=>t(m),e=>C(m,e)),kt("click",l,J),kt("click",At,it),x(a,W),Tt()}Ut(["keydown","click"]);export{He as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js.br b/apps/dashboard/build/_app/immutable/nodes/11.j3H5l-xO.js.br new file mode 100644 index 0000000000000000000000000000000000000000..a632edd6c67136dbd97390f49288bfeda9911e9f GIT binary patch literal 4832 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 ywxXdjUviw;FFD>Td_G^?5?+udAM5|K "),$t=v('
'),Ot=v('
'),Pt=v('

Use "Remind me..." in conversation to create intentions.

'),Nt=v(' '),It=v(' '),Tt=v('

'),kt=v('
'),zt=v('

No predictions yet. Use Vestige more to train the predictive model.

'),Dt=v(" "),Lt=v(' '),Ut=v('

'),Ct=v('
'),At=v('

Intentions & Predictions

Prospective Memory

"Remember to do X when Y happens"

Predicted Needs

What you might need next
');function Wt(tt,et){yt(et,!0);let I=D(Q([])),C=D(Q([])),A=D(!0),S=D("active");const at={active:"text-synapse-glow bg-synapse/10 border-synapse/30",fulfilled:"text-recall bg-recall/10 border-recall/30",cancelled:"text-dim bg-white/[0.03] border-subtle/20",snoozed:"text-dream-glow bg-dream/10 border-dream/30"},st={4:"critical",3:"high",2:"normal",1:"low"},rt={4:"text-decay",3:"text-amber-400",2:"text-dim",1:"text-muted"},it={time:"⏰",context:"◎",event:"⚡",manual:"◇"};function nt(s){let t;try{const e=JSON.parse(s.trigger_data||"{}");if(typeof e.condition=="string"&&e.condition)t=e.condition;else if(typeof e.topic=="string"&&e.topic)t=e.topic;else if(typeof e.at=="string"&&e.at)try{t=new Date(e.at).toLocaleDateString("en-US",{month:"short",day:"numeric"})}catch{t=e.at}else if(typeof e.in_minutes=="number")t=`in ${e.in_minutes} min`;else if(typeof e.inMinutes=="number")t=`in ${e.inMinutes} min`;else if(typeof e.codebase=="string"&&e.codebase){const i=typeof e.filePattern=="string"&&e.filePattern?`/${e.filePattern}`:"";t=`${e.codebase}${i}`}else t=s.trigger_type}catch{t=s.trigger_type}return t.length>40?t.slice(0,37)+"...":t}gt(async()=>{await X()});async function X(){N(A,!0);try{const[s,t]=await Promise.all([Z.intentions(r(S)),Z.predict()]);N(I,s.intentions||[],!0),N(C,t.predictions||[],!0)}catch{}finally{N(A,!1)}}async function ot(s){N(S,s,!0),await X()}function M(s){if(!s)return"";try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}var j=At(),F=n(j),q=o(n(F),2),dt=n(q);a(q),a(F);var Y=o(F,2),E=o(n(Y),2);L(E,20,()=>["active","fulfilled","snoozed","cancelled","all"],U,(s,t)=>{var e=St(),i=n(e,!0);a(e),u(p=>{W(e,1,`px-3 py-1.5 rounded-xl text-xs transition ${r(S)===t?"bg-synapse/20 text-synapse-glow border border-synapse/40":"glass-subtle text-dim hover:bg-white/[0.03]"}`),d(i,p)},[()=>t.charAt(0).toUpperCase()+t.slice(1)]),Rt("click",e,()=>ot(t)),l(s,e)}),a(E);var lt=o(E,2);{var vt=s=>{var t=Ot();L(t,20,()=>Array(4),U,(e,i)=>{var p=$t();l(e,p)}),a(t),l(s,t)},ct=s=>{var t=Pt(),e=o(n(t),2),i=n(e);a(e),ht(2),a(t),u(()=>d(i,`No ${r(S)==="all"?"":r(S)+" "}intentions.`)),l(s,t)},pt=s=>{var t=kt();L(t,21,()=>r(I),U,(e,i)=>{var p=Tt(),g=n(p),y=n(g),T=n(y,!0);a(y);var f=o(y,2),$=n(f),k=n($,!0);a($);var b=o($,2),h=n(b),z=n(h,!0);a(h);var w=o(h,2),G=n(w);a(w);var O=o(w,2),x=n(O);a(O);var c=o(O,2);{var P=m=>{var _=Nt(),J=n(_);a(_),u(V=>d(J,`deadline: ${V??""}`),[()=>M(r(i).deadline)]),l(m,_)};R(c,m=>{r(i).deadline&&m(P)})}var B=o(c,2);{var ut=m=>{var _=It(),J=n(_);a(_),u(V=>d(J,`snoozed until ${V??""}`),[()=>M(r(i).snoozed_until)]),l(m,_)};R(B,m=>{r(i).snoozed_until&&m(ut)})}a(b),a(f);var K=o(f,2),ft=n(K,!0);a(K),a(g),a(p),u((m,_)=>{d(T,it[r(i).trigger_type]||"◇"),d(k,r(i).content),W(h,1,`px-2 py-0.5 text-[10px] rounded-lg border ${(at[r(i).status]||"text-dim bg-white/[0.03] border-subtle/20")??""}`),d(z,r(i).status),W(w,1,`text-[10px] ${(rt[r(i).priority]||"text-muted")??""}`),d(G,`${(st[r(i).priority]||"normal")??""} priority`),d(x,`${r(i).trigger_type??""}: ${m??""}`),d(ft,_)},[()=>nt(r(i)),()=>M(r(i).created_at)]),l(e,p)}),a(t),l(s,t)};R(lt,s=>{r(A)?s(vt):r(I).length===0?s(ct,1):s(pt,!1)})}a(Y);var H=o(Y,2),xt=o(n(H),2);{var mt=s=>{var t=zt();l(s,t)},_t=s=>{var t=Ct();L(t,21,()=>r(C),U,(e,i,p)=>{var g=Ut(),y=n(g);y.textContent=p+1;var T=o(y,2),f=n(T),$=n(f,!0);a(f);var k=o(f,2),b=n(k),h=n(b,!0);a(b);var z=o(b,2);{var w=x=>{var c=Dt(),P=n(c);a(c),u(B=>d(P,`${B??""}% retention`),[()=>(Number(r(i).retention)*100).toFixed(0)]),l(x,c)};R(z,x=>{r(i).retention&&x(w)})}var G=o(z,2);{var O=x=>{var c=Lt(),P=n(c);a(c),u(()=>d(P,`${r(i).predictedNeed??""} need`)),l(x,c)};R(G,x=>{r(i).predictedNeed&&x(O)})}a(k),a(T),a(g),u(()=>{d($,r(i).content),d(h,r(i).nodeType)}),l(e,g)}),a(t),l(s,t)};R(xt,s=>{r(C).length===0?s(mt):s(_t,!1)})}a(H),a(j),u(()=>d(dt,`${r(I).length??""} intentions`)),l(tt,j),bt()}wt(["click"]);export{Wt as component}; +import"../chunks/Bzak7iHL.js";import{o as gt}from"../chunks/CNjeV5xa.js";import{p as yt,s as D,c as Q,t as u,a as bt,d as o,e as n,h as O,g as r,r as a,n as ht}from"../chunks/CvjSAYrz.js";import{d as wt,s as d,a as Rt}from"../chunks/FzvEaXMa.js";import{i as R}from"../chunks/ciN1mm2W.js";import{e as L,i as U}from"../chunks/DTnG8poT.js";import{a as l,f as v}from"../chunks/BsvCUYx-.js";import{s as W}from"../chunks/DPl3NjBv.js";import{a as Z}from"../chunks/DNjM5a-l.js";var St=v(""),$t=v('
'),Pt=v('
'),Nt=v('

Use "Remind me..." in conversation to create intentions.

'),Ot=v(' '),It=v(' '),Tt=v('

'),kt=v('
'),zt=v('

No predictions yet. Use Vestige more to train the predictive model.

'),Dt=v(" "),Lt=v(' '),Ut=v('

'),Ct=v('
'),At=v('

Intentions & Predictions

Prospective Memory

"Remember to do X when Y happens"

Predicted Needs

What you might need next
');function Wt(tt,et){yt(et,!0);let I=D(Q([])),C=D(Q([])),A=D(!0),S=D("active");const at={active:"text-synapse-glow bg-synapse/10 border-synapse/30",fulfilled:"text-recall bg-recall/10 border-recall/30",cancelled:"text-dim bg-white/[0.03] border-subtle/20",snoozed:"text-dream-glow bg-dream/10 border-dream/30"},st={4:"critical",3:"high",2:"normal",1:"low"},rt={4:"text-decay",3:"text-amber-400",2:"text-dim",1:"text-muted"},it={time:"⏰",context:"◎",event:"⚡",manual:"◇"};function nt(s){let t;try{const e=JSON.parse(s.trigger_data||"{}");if(typeof e.condition=="string"&&e.condition)t=e.condition;else if(typeof e.topic=="string"&&e.topic)t=e.topic;else if(typeof e.at=="string"&&e.at)try{t=new Date(e.at).toLocaleDateString("en-US",{month:"short",day:"numeric"})}catch{t=e.at}else if(typeof e.in_minutes=="number")t=`in ${e.in_minutes} min`;else if(typeof e.inMinutes=="number")t=`in ${e.inMinutes} min`;else if(typeof e.codebase=="string"&&e.codebase){const i=typeof e.filePattern=="string"&&e.filePattern?`/${e.filePattern}`:"";t=`${e.codebase}${i}`}else t=s.trigger_type}catch{t=s.trigger_type}return t.length>40?t.slice(0,37)+"...":t}gt(async()=>{await X()});async function X(){O(A,!0);try{const[s,t]=await Promise.all([Z.intentions(r(S)),Z.predict()]);O(I,s.intentions||[],!0),O(C,t.predictions||[],!0)}catch{}finally{O(A,!1)}}async function ot(s){O(S,s,!0),await X()}function M(s){if(!s)return"";try{return new Date(s).toLocaleDateString("en-US",{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}catch{return s}}var j=At(),F=n(j),q=o(n(F),2),dt=n(q);a(q),a(F);var Y=o(F,2),E=o(n(Y),2);L(E,20,()=>["active","fulfilled","snoozed","cancelled","all"],U,(s,t)=>{var e=St(),i=n(e,!0);a(e),u(p=>{W(e,1,`px-3 py-1.5 rounded-xl text-xs transition ${r(S)===t?"bg-synapse/20 text-synapse-glow border border-synapse/40":"glass-subtle text-dim hover:bg-white/[0.03]"}`),d(i,p)},[()=>t.charAt(0).toUpperCase()+t.slice(1)]),Rt("click",e,()=>ot(t)),l(s,e)}),a(E);var lt=o(E,2);{var vt=s=>{var t=Pt();L(t,20,()=>Array(4),U,(e,i)=>{var p=$t();l(e,p)}),a(t),l(s,t)},ct=s=>{var t=Nt(),e=o(n(t),2),i=n(e);a(e),ht(2),a(t),u(()=>d(i,`No ${r(S)==="all"?"":r(S)+" "}intentions.`)),l(s,t)},pt=s=>{var t=kt();L(t,21,()=>r(I),U,(e,i)=>{var p=Tt(),g=n(p),y=n(g),T=n(y,!0);a(y);var f=o(y,2),$=n(f),k=n($,!0);a($);var b=o($,2),h=n(b),z=n(h,!0);a(h);var w=o(h,2),G=n(w);a(w);var P=o(w,2),x=n(P);a(P);var c=o(P,2);{var N=m=>{var _=Ot(),J=n(_);a(_),u(V=>d(J,`deadline: ${V??""}`),[()=>M(r(i).deadline)]),l(m,_)};R(c,m=>{r(i).deadline&&m(N)})}var B=o(c,2);{var ut=m=>{var _=It(),J=n(_);a(_),u(V=>d(J,`snoozed until ${V??""}`),[()=>M(r(i).snoozed_until)]),l(m,_)};R(B,m=>{r(i).snoozed_until&&m(ut)})}a(b),a(f);var K=o(f,2),ft=n(K,!0);a(K),a(g),a(p),u((m,_)=>{d(T,it[r(i).trigger_type]||"◇"),d(k,r(i).content),W(h,1,`px-2 py-0.5 text-[10px] rounded-lg border ${(at[r(i).status]||"text-dim bg-white/[0.03] border-subtle/20")??""}`),d(z,r(i).status),W(w,1,`text-[10px] ${(rt[r(i).priority]||"text-muted")??""}`),d(G,`${(st[r(i).priority]||"normal")??""} priority`),d(x,`${r(i).trigger_type??""}: ${m??""}`),d(ft,_)},[()=>nt(r(i)),()=>M(r(i).created_at)]),l(e,p)}),a(t),l(s,t)};R(lt,s=>{r(A)?s(vt):r(I).length===0?s(ct,1):s(pt,!1)})}a(Y);var H=o(Y,2),xt=o(n(H),2);{var mt=s=>{var t=zt();l(s,t)},_t=s=>{var t=Ct();L(t,21,()=>r(C),U,(e,i,p)=>{var g=Ut(),y=n(g);y.textContent=p+1;var T=o(y,2),f=n(T),$=n(f,!0);a(f);var k=o(f,2),b=n(k),h=n(b,!0);a(b);var z=o(b,2);{var w=x=>{var c=Dt(),N=n(c);a(c),u(B=>d(N,`${B??""}% retention`),[()=>(Number(r(i).retention)*100).toFixed(0)]),l(x,c)};R(z,x=>{r(i).retention&&x(w)})}var G=o(z,2);{var P=x=>{var c=Lt(),N=n(c);a(c),u(()=>d(N,`${r(i).predictedNeed??""} need`)),l(x,c)};R(G,x=>{r(i).predictedNeed&&x(P)})}a(k),a(T),a(g),u(()=>{d($,r(i).content),d(h,r(i).nodeType)}),l(e,g)}),a(t),l(s,t)};R(xt,s=>{r(C).length===0?s(mt):s(_t,!1)})}a(H),a(j),u(()=>d(dt,`${r(I).length??""} intentions`)),l(tt,j),bt()}wt(["click"]);export{Wt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/12.DZiW_IZ_.js.br b/apps/dashboard/build/_app/immutable/nodes/12.DZiW_IZ_.js.br new file mode 100644 index 0000000000000000000000000000000000000000..0d77603e65e300dbd0b83d035ad809eb4be35313 GIT binary patch literal 2398 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js b/apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js new file mode 100644 index 0000000..1795cd8 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js @@ -0,0 +1,6 @@ +import"../chunks/Bzak7iHL.js";import{o as Ye}from"../chunks/CNjeV5xa.js";import{p as Ge,s as R,c as Ne,h as M,e as s,g as e,r as t,a as Je,f as Ke,d as n,t as k,u as ae}from"../chunks/CvjSAYrz.js";import{d as Ue,s as w,a as h}from"../chunks/FzvEaXMa.js";import{i as q}from"../chunks/ciN1mm2W.js";import{e as ue,i as je}from"../chunks/DTnG8poT.js";import{a as c,f as g,b as re}from"../chunks/BsvCUYx-.js";import{s as X,r as qe}from"../chunks/CNfQDikv.js";import{s as Le}from"../chunks/DPl3NjBv.js";import{s as Z}from"../chunks/Bhad70Ss.js";import{b as Qe}from"../chunks/CVpUe0w3.js";import{b as it}from"../chunks/DMu1Byux.js";import{a as H}from"../chunks/DNjM5a-l.js";import{N as lt}from"../chunks/DzfRjky4.js";const dt={created:{label:"Created",color:"#10b981",glyph:"",kind:"ring"},accessed:{label:"Accessed",color:"#3b82f6",glyph:"",kind:"dot"},promoted:{label:"Promoted",color:"#10b981",glyph:"",kind:"arrow-up"},demoted:{label:"Demoted",color:"#f59e0b",glyph:"",kind:"arrow-down"},edited:{label:"Edited",color:"#facc15",glyph:"",kind:"pencil"},suppressed:{label:"Suppressed",color:"#a855f7",glyph:"",kind:"x"},dreamed:{label:"Dreamed",color:"#c084fc",glyph:"",kind:"star"},reconsolidated:{label:"Reconsolidated",color:"#ec4899",glyph:"",kind:"circle-arrow"}},ke=15;function ct(u){let p=0;for(let x=0;x>>0;return p}function vt(u){let p=u>>>0;return()=>(p=p*1664525+1013904223>>>0,p/4294967296)}function pt(u,p=Date.now(),x){if(!u)return[];const _=vt(ct(u)),S=8+Math.floor(_()*8);if(S<=0)return[];const P=[],T=p-(14+_()*21)*864e5;P.push({action:"created",timestamp:new Date(T).toISOString(),reason:"smart_ingest · prediction-error gate opened",triggered_by:"smart_ingest"});let A=T,l=.5+_()*.2;const D=["accessed","accessed","accessed","accessed","promoted","demoted","edited","dreamed","reconsolidated","suppressed"];for(let $=1;$.5?"search":"deep_reference";break}case"promoted":{const E=l;l=Math.min(1,l+.1),d.old_value=E,d.new_value=l,d.reason="confirmed helpful by user",d.triggered_by="memory(action=promote)";break}case"demoted":{const E=l;l=Math.max(0,l-.15),d.old_value=E,d.new_value=l,d.reason="user flagged as outdated",d.triggered_by="memory(action=demote)";break}case"edited":{d.reason="content refined, FSRS state preserved",d.triggered_by="memory(action=edit)";break}case"suppressed":{const E=l;l=Math.max(0,l-.08),d.old_value=E,d.new_value=l,d.reason="top-down inhibition (Anderson 2025)",d.triggered_by="suppress(dashboard)";break}case"dreamed":{const E=l;l=Math.min(1,l+.05),d.old_value=E,d.new_value=l,d.reason="replayed during dream consolidation",d.triggered_by="dream()";break}case"reconsolidated":{d.reason="edited within 5-min labile window (Nader)",d.triggered_by="reconsolidation-manager";break}case"created":d.triggered_by="smart_ingest";break}P.push(d)}return P.reverse()}function ut(u,p=Date.now()){const x=new Date(u).getTime(),_=Math.max(0,p-x),S=Math.floor(_/1e3);if(S<60)return`${S}s ago`;const P=Math.floor(S/60);if(P<60)return`${P}m ago`;const T=Math.floor(P/60);if(T<24)return`${T}h ago`;const A=Math.floor(T/24);if(A<30)return`${A}d ago`;const l=Math.floor(A/30);return l<12?`${l}mo ago`:`${Math.floor(l/12)}y ago`}function ft(u,p){const x=typeof u=="number"&&Number.isFinite(u),_=typeof p=="number"&&Number.isFinite(p);return!x&&!_?null:!x&&_?`set ${p.toFixed(2)}`:x&&!_?`was ${u.toFixed(2)}`:`${u.toFixed(2)} → ${p.toFixed(2)}`}function gt(u,p){return p||u.length<=ke?{visible:u,hiddenCount:Math.max(0,u.length-ke)}:{visible:u.slice(0,ke),hiddenCount:u.length-ke}}var _t=g('
'),xt=g('
'),bt=g('

Audit trail failed to load.

'),mt=g('

No memory selected.

'),ht=g('

No audit events recorded yet.

'),kt=g(''),yt=g(''),wt=re(''),Mt=re(''),St=re(''),Pt=re(''),Tt=re(''),At=re(''),Dt=g(' '),Et=g('
'),Ct=g('
'),Ft=g('
  • '),It=g(''),Lt=g('
      ',1),Nt=g('
      ');function jt(u,p){Ge(p,!0);let x=R(Ne([])),_=R(!0),S=R(!1),P=R(!1);async function T(m){return pt(m,Date.now())}Ye(async()=>{if(!p.memoryId){M(x,[],!0),M(_,!1);return}try{M(x,await T(p.memoryId),!0)}catch{M(x,[],!0),M(S,!0)}finally{M(_,!1)}});const A=ae(()=>gt(e(x),e(P))),l=ae(()=>e(A).visible),D=ae(()=>e(A).hiddenCount);var $=Nt(),I=s($);{var d=m=>{var y=xt();ue(y,20,()=>Array(5),je,(N,Q)=>{var K=_t();c(N,K)}),t(y),c(m,y)},E=m=>{var y=bt();c(m,y)},oe=m=>{var y=mt();c(m,y)},se=m=>{var y=ht();c(m,y)},fe=m=>{var y=Lt(),N=Ke(y);ue(N,23,()=>e(l),(L,b)=>L.timestamp+b,(L,b,U)=>{const v=ae(()=>dt[e(b).action]),V=ae(()=>ft(e(b).old_value,e(b).new_value));var Y=Ft(),G=s(Y),ge=s(G);{var _e=a=>{var r=kt();k(()=>Z(r,`background: ${e(v).color??""};`)),c(a,r)},ee=a=>{var r=yt();k(()=>Z(r,`border-color: ${e(v).color??""}; background: transparent;`)),c(a,r)},xe=a=>{var r=wt();k(()=>X(r,"stroke",e(v).color)),c(a,r)},ye=a=>{var r=Mt();k(()=>X(r,"stroke",e(v).color)),c(a,r)},we=a=>{var r=St();k(()=>X(r,"stroke",e(v).color)),c(a,r)},Me=a=>{var r=Pt();k(()=>X(r,"stroke",e(v).color)),c(a,r)},Se=a=>{var r=Tt();k(()=>X(r,"fill",e(v).color)),c(a,r)},f=a=>{var r=At();k(()=>X(r,"stroke",e(v).color)),c(a,r)};q(ge,a=>{e(v).kind==="dot"?a(_e):e(v).kind==="ring"?a(ee,1):e(v).kind==="arrow-up"?a(xe,2):e(v).kind==="arrow-down"?a(ye,3):e(v).kind==="pencil"?a(we,4):e(v).kind==="x"?a(Me,5):e(v).kind==="star"?a(Se,6):e(v).kind==="circle-arrow"&&a(f,7)})}t(G);var C=n(G,2),z=s(C),i=s(z),F=s(i),ne=s(F,!0);t(F);var ie=n(F,2);{var le=a=>{var r=Dt(),W=s(r,!0);t(r),k(()=>w(W,e(b).triggered_by)),c(a,r)};q(ie,a=>{e(b).triggered_by&&a(le)})}t(i);var te=n(i,2),de=s(te,!0);t(te),t(z);var be=n(z,2);{var Pe=a=>{var r=Et(),W=s(r);t(r),k(()=>w(W,`retention ${e(V)??""}`)),c(a,r)};q(be,a=>{e(V)&&a(Pe)})}var me=n(be,2);{var Te=a=>{var r=Ct(),W=s(r,!0);t(r),k(()=>w(W,e(b).reason)),c(a,r)};q(me,a=>{e(b).reason&&a(Te)})}t(C),t(Y),k((a,r)=>{Z(Y,`animation-delay: ${e(U)*40}ms;`),Z(G,`background: rgba(10,10,26,0.9); box-shadow: 0 0 10px ${e(v).color??""}88; border: 1px solid ${e(v).color??""};`),Z(F,`color: ${e(v).color??""};`),w(ne,e(v).label),X(te,"title",a),w(de,r)},[()=>new Date(e(b).timestamp).toLocaleString(),()=>ut(e(b).timestamp)]),c(L,Y)}),t(N);var Q=n(N,2);{var K=L=>{var b=It(),U=s(b,!0);t(b),k(()=>w(U,e(P)?"Hide older events":`Show ${e(D)} older event${e(D)===1?"":"s"}…`)),h("click",b,v=>{v.stopPropagation(),M(P,!e(P))}),c(L,b)};q(Q,L=>{e(D)>0&&L(K)})}c(m,y)};q(I,m=>{e(_)?m(d):e(S)?m(E,1):p.memoryId?e(x).length===0?m(se,3):m(fe,!1):m(oe,2)})}t($),c(u,$),Je()}Ue(["click"]);var Bt=g('
      '),Ot=g('
      '),Rt=g(' '),$t=g('

      ',1),zt=g('
      '),Ht=g('
      Content Audit Trail
      Promote Demote Suppress Delete
      '),qt=g(''),Qt=g('
      '),Yt=g(`

      Memories

      Min retention:
      `);function na(u,p){Ge(p,!0);let x=R(Ne([])),_=R(""),S=R(""),P="",T=R(0),A=R(!0),l=R(null),D=Ne({}),$;Ye(()=>I());async function I(){M(A,!0);try{const f={};e(_)&&(f.q=e(_)),e(S)&&(f.node_type=e(S)),e(T)>0&&(f.min_retention=String(e(T)));const C=await H.memories.list(f);M(x,C.memories,!0)}catch{M(x,[],!0)}finally{M(A,!1)}}function d(){clearTimeout($),$=setTimeout(I,300)}function E(f){return f>.7?"#10b981":f>.4?"#f59e0b":"#ef4444"}var oe=Yt(),se=s(oe),fe=n(s(se),2),m=s(fe);t(fe),t(se);var y=n(se,2),N=s(y);qe(N);var Q=n(N,2),K=s(Q);K.value=K.__value="";var L=n(K);L.value=L.__value="fact";var b=n(L);b.value=b.__value="concept";var U=n(b);U.value=U.__value="event";var v=n(U);v.value=v.__value="person";var V=n(v);V.value=V.__value="place";var Y=n(V);Y.value=Y.__value="note";var G=n(Y);G.value=G.__value="pattern";var ge=n(G);ge.value=ge.__value="decision",t(Q);var _e=n(Q,2),ee=n(s(_e),2);qe(ee);var xe=n(ee,2),ye=s(xe);t(xe),t(_e),t(y);var we=n(y,2);{var Me=f=>{var C=Ot();ue(C,20,()=>Array(8),je,(z,i)=>{var F=Bt();c(z,F)}),t(C),c(f,C)},Se=f=>{var C=Qt();ue(C,21,()=>e(x),z=>z.id,(z,i)=>{var F=qt(),ne=s(F),ie=s(ne),le=s(ie),te=s(le),de=n(te,2),be=s(de,!0);t(de);var Pe=n(de,2);ue(Pe,17,()=>e(i).tags.slice(0,3),je,(j,B)=>{var O=Rt(),ce=s(O,!0);t(O),k(()=>w(ce,e(B))),c(j,O)}),t(le);var me=n(le,2),Te=s(me,!0);t(me),t(ie);var a=n(ie,2),r=s(a),W=s(r);t(r);var Be=n(r,2),We=s(Be);t(Be),t(a),t(ne);var Xe=n(ne,2);{var Ze=j=>{const B=ae(()=>D[e(i).id]??"content");var O=Ht(),ce=s(O),he=s(ce),Ae=n(he,2);t(ce);var Oe=n(ce,2);{var Ve=o=>{var J=$t(),ve=Ke(J),pe=s(ve,!0);t(ve);var ze=n(ve,2),Fe=s(ze),tt=s(Fe);t(Fe);var Ie=n(Fe,2),at=s(Ie);t(Ie);var He=n(Ie,2),rt=s(He);t(He),t(ze),k((ot,st,nt)=>{w(pe,e(i).content),w(tt,`Storage: ${ot??""}%`),w(at,`Retrieval: ${st??""}%`),w(rt,`Created: ${nt??""}`)},[()=>(e(i).storageStrength*100).toFixed(1),()=>(e(i).retrievalStrength*100).toFixed(1),()=>new Date(e(i).createdAt).toLocaleDateString()]),c(o,J)},et=o=>{var J=zt(),ve=s(J);jt(ve,{get memoryId(){return e(i).id}}),t(J),h("click",J,pe=>pe.stopPropagation()),h("keydown",J,pe=>pe.stopPropagation()),c(o,J)};q(Oe,o=>{e(B)==="content"?o(Ve):o(et,!1)})}var Re=n(Oe,2),De=s(Re),Ee=n(De,2),Ce=n(Ee,2),$e=n(Ce,2);t(Re),t(O),k(()=>{Le(he,1,`px-3 py-1.5 rounded-lg cursor-pointer select-none transition + ${e(B)==="content"?"bg-synapse/20 text-synapse-glow border border-synapse/40":"bg-white/[0.03] text-dim hover:text-text border border-transparent"}`),Le(Ae,1,`px-3 py-1.5 rounded-lg cursor-pointer select-none transition + ${e(B)==="audit"?"bg-synapse/20 text-synapse-glow border border-synapse/40":"bg-white/[0.03] text-dim hover:text-text border border-transparent"}`)}),h("click",he,o=>{o.stopPropagation(),D[e(i).id]="content"}),h("keydown",he,o=>{(o.key==="Enter"||o.key===" ")&&(o.stopPropagation(),D[e(i).id]="content")}),h("click",Ae,o=>{o.stopPropagation(),D[e(i).id]="audit"}),h("keydown",Ae,o=>{(o.key==="Enter"||o.key===" ")&&(o.stopPropagation(),D[e(i).id]="audit")}),h("click",De,o=>{o.stopPropagation(),H.memories.promote(e(i).id)}),h("keydown",De,o=>{o.key==="Enter"&&(o.stopPropagation(),H.memories.promote(e(i).id))}),h("click",Ee,o=>{o.stopPropagation(),H.memories.demote(e(i).id)}),h("keydown",Ee,o=>{o.key==="Enter"&&(o.stopPropagation(),H.memories.demote(e(i).id))}),h("click",Ce,async o=>{o.stopPropagation(),await H.memories.suppress(e(i).id,"dashboard trigger")}),h("keydown",Ce,async o=>{o.key==="Enter"&&(o.stopPropagation(),await H.memories.suppress(e(i).id,"dashboard trigger"))}),h("click",$e,async o=>{o.stopPropagation(),await H.memories.delete(e(i).id),I()}),h("keydown",$e,async o=>{o.key==="Enter"&&(o.stopPropagation(),await H.memories.delete(e(i).id),I())}),c(j,O)};q(Xe,j=>{var B;((B=e(l))==null?void 0:B.id)===e(i).id&&j(Ze)})}t(F),k((j,B)=>{var O;Le(F,1,`text-left p-4 glass-subtle rounded-xl hover:bg-white/[0.04] + transition-all duration-200 group + ${((O=e(l))==null?void 0:O.id)===e(i).id?"!border-synapse/40 glow-synapse":""}`),Z(te,`background: ${(lt[e(i).nodeType]||"#8B95A5")??""}`),w(be,e(i).nodeType),w(Te,e(i).content),Z(W,`width: ${e(i).retentionStrength*100}%; background: ${j??""}`),w(We,`${B??""}%`)},[()=>E(e(i).retentionStrength),()=>(e(i).retentionStrength*100).toFixed(0)]),h("click",F,()=>{var j;return M(l,((j=e(l))==null?void 0:j.id)===e(i).id?null:e(i),!0)}),c(z,F)}),t(C),c(f,C)};q(we,f=>{e(A)?f(Me):f(Se,!1)})}t(oe),k(f=>{w(m,`${e(x).length??""} results`),w(ye,`${f??""}%`)},[()=>(e(T)*100).toFixed(0)]),h("input",N,d),Qe(N,()=>e(_),f=>M(_,f)),h("change",Q,I),it(Q,()=>e(S),f=>M(S,f)),h("change",ee,I),Qe(ee,()=>e(T),f=>M(T,f)),c(u,oe),Je()}Ue(["input","change","click","keydown"]);export{na as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js.br b/apps/dashboard/build/_app/immutable/nodes/13.DReyqY5Q.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ccbcb5dc829303c9889cddaa32a1c1bbf9dd9c29 GIT binary patch literal 5188 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js b/apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js new file mode 100644 index 0000000..e66c260 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js @@ -0,0 +1,3 @@ +import"../chunks/Bzak7iHL.js";import{o as Ut}from"../chunks/CNjeV5xa.js";import{p as Mt,e as r,d as a,r as e,t as S,g as t,u as H,a as Et,s as rt,h as $,f as Rt,c as Vt}from"../chunks/CvjSAYrz.js";import{d as Ht,s as o,a as at,e as Ft}from"../chunks/FzvEaXMa.js";import{i as Y}from"../chunks/ciN1mm2W.js";import{e as V,i as Yt}from"../chunks/DTnG8poT.js";import{a as m,c as Jt,f as h}from"../chunks/BsvCUYx-.js";import{s as yt}from"../chunks/CNfQDikv.js";import{s as bt}from"../chunks/DPl3NjBv.js";import{s as wt}from"../chunks/Bhad70Ss.js";function Xt(y,x,A=3){const g={};for(const v of y){g[v]={};for(const u of y)g[v][u]={count:0,topNames:[]}}for(const v of x){const u=v.origin_project;if(g[u])for(const L of v.transferred_to)g[u][L]&&(g[u][L].count+=1,g[u][L].topNames.push(v.name))}const d=Math.max(0,A);for(const v of y)for(const u of y)g[v][u].topNames=g[v][u].topNames.slice(0,d);return g}function te(y,x){let A=0;for(const g of y){const d=x[g];if(d)for(const v of y){const u=d[v];u&&u.count>A&&(A=u.count)}}return A}function ee(y,x){var g;const A=[];for(const d of y)for(const v of y){const u=(g=x[d])==null?void 0:g[v];u&&u.count>0&&A.push({from:d,to:v,count:u.count,topNames:u.topNames})}return A.sort((d,v)=>v.count-d.count)}function re(y){return y?y.length>12?y.slice(0,11)+"…":y:""}var ae=h('
      '),ne=h(''),se=h(' '),oe=h('
      '),ie=h('
      Top patterns
      '),ce=h('
      No transfers recorded
      '),le=h('
      '),de=h('
      No cross-project transfers recorded yet.
      '),ve=h('
      '),ue=h(''),fe=h('
      ');function pe(y,x){Mt(x,!0);const A=H(()=>Xt(x.projects,x.patterns)),g=H(()=>te(x.projects,t(A))||1);let d=rt(null);function v(s){if(s===0)return"background: rgba(255,255,255,0.02); border-color: rgba(99,102,241,0.05);";const n=s/t(g),f=.1+n*.7;if(n<.5)return`background: rgba(99, 102, 241, ${f.toFixed(3)}); border-color: rgba(129, 140, 248, ${(f*.6).toFixed(3)}); box-shadow: 0 0 ${(n*14).toFixed(1)}px rgba(129, 140, 248, ${(n*.45).toFixed(3)});`;{const p=(n-.5)*2,l=Math.round(99+69*p),k=Math.round(102+-17*p),b=Math.round(241+6*p);return`background: rgba(${l}, ${k}, ${b}, ${f.toFixed(3)}); border-color: rgba(192, 132, 252, ${(f*.7).toFixed(3)}); box-shadow: 0 0 ${(6+n*18).toFixed(1)}px rgba(192, 132, 252, ${(n*.55).toFixed(3)});`}}function u(s){if(s===0)return"text-muted";const n=s/t(g);return n>=.5?"text-bright font-semibold":n>=.2?"text-text":"text-dim"}function L(s,n,f){const l=s.currentTarget.getBoundingClientRect();$(d,{from:n,to:f,x:l.left+l.width/2,y:l.top},!0)}function j(){$(d,null)}const B=re;function nt(s,n){return x.selectedCell!==null&&x.selectedCell.from===s&&x.selectedCell.to===n}const I=H(()=>ee(x.projects,t(A)));var Q=fe(),J=r(Q),X=r(J),st=a(r(X),2),ot=a(r(st),4),jt=r(ot,!0);e(ot),e(st),e(X);var it=a(X,2),gt=r(it),q=r(gt),tt=r(q),ct=a(r(tt));V(ct,16,()=>x.projects,s=>s,(s,n)=>{var f=ae(),p=r(f),l=r(p),k=r(l,!0);e(l),e(p),e(f),S(b=>{yt(f,"title",n),o(k,b)},[()=>B(n)]),m(s,f)}),e(tt),e(q);var xt=a(q);V(xt,20,()=>x.projects,s=>s,(s,n)=>{var f=se(),p=r(f),l=r(p,!0);e(p);var k=a(p);V(k,16,()=>x.projects,b=>b,(b,N)=>{const P=H(()=>t(A)[n][N]),W=H(()=>n===N);var F=ne(),z=r(F),M=r(z),U=r(M,!0);e(M),e(z),e(F),S((E,Z,T)=>{wt(z,`${E??""} ${Z??""} ${t(W)&&t(P).count>0?"border-style: dashed;":""}`),yt(z,"aria-label",`${t(P).count??""} patterns from ${n??""} to ${N??""}`),bt(M,1,`text-[11px] ${T??""}`),o(U,t(P).count||"")},[()=>v(t(P).count),()=>nt(n,N)?"outline: 2px solid var(--color-dream-glow); outline-offset: 1px;":"",()=>u(t(P).count)]),at("click",z,()=>x.onCellClick(n,N)),Ft("mouseenter",z,E=>L(E,n,N)),Ft("mouseleave",z,j),m(b,F)}),e(f),S(b=>{yt(p,"title",n),o(l,b)},[()=>B(n)]),m(s,f)}),e(xt),e(gt),e(it);var Tt=a(it,2);{var Ct=s=>{const n=H(()=>t(A)[t(d).from][t(d).to]);var f=le(),p=r(f),l=r(p),k=r(l,!0);e(l);var b=a(l,4),N=r(b,!0);e(b),e(p);var P=a(p,2),W=r(P),F=a(W),z=r(F);e(F),e(P);var M=a(P,2);{var U=Z=>{var T=ie(),G=a(r(T),2);V(G,17,()=>t(n).topNames,Yt,(K,dt)=>{var vt=oe(),mt=r(vt);e(vt),S(()=>o(mt,`· ${t(dt)??""}`)),m(K,vt)}),e(T),m(Z,T)},E=Z=>{var T=ce();m(Z,T)};Y(M,Z=>{t(n).topNames.length>0?Z(U):Z(E,!1)})}e(f),S((Z,T)=>{wt(f,`left: ${t(d).x??""}px; top: ${t(d).y-12}px; transform: translate(-50%, -100%);`),o(k,Z),o(N,T),o(W,`${t(n).count??""} `),o(z,`${t(n).count===1?"pattern":"patterns"} transferred`)},[()=>B(t(d).from),()=>B(t(d).to)]),m(s,f)};Y(Tt,s=>{t(d)&&s(Ct)})}e(J);var _t=a(J,2),lt=r(_t),i=r(lt);e(lt);var c=a(lt,2);{var _=s=>{var n=de();m(s,n)},C=s=>{var n=Jt(),f=Rt(n);V(f,17,()=>t(I),p=>p.from+"->"+p.to,(p,l)=>{var k=ue(),b=r(k),N=r(b),P=r(N),W=r(P,!0);e(P);var F=a(P,4),z=r(F,!0);e(F),e(N);var M=a(N,2);{var U=T=>{var G=ve(),K=r(G,!0);e(G),S(dt=>o(K,dt),[()=>t(l).topNames.join(" · ")]),m(T,G)};Y(M,T=>{t(l).topNames.length>0&&T(U)})}e(b);var E=a(b,2),Z=r(E,!0);e(E),e(k),S((T,G,K)=>{bt(k,1,`flex w-full items-center justify-between rounded-lg border border-synapse/10 bg-white/[0.02] p-3 transition hover:border-synapse/30 hover:bg-white/[0.04] ${T??""}`),o(W,G),o(z,K),o(Z,t(l).count)},[()=>nt(t(l).from,t(l).to)?"ring-1 ring-dream-glow":"",()=>B(t(l).from),()=>B(t(l).to)]),at("click",k,()=>x.onCellClick(t(l).from,t(l).to)),m(p,k)}),m(s,n)};Y(c,s=>{t(I).length===0?s(_):s(C,!1)})}e(_t),e(Q),S(()=>{o(jt,t(g)),o(i,`${t(I).length??""} transfer pair${t(I).length===1?"":"s"} · tap to filter`)}),m(y,Q),Et()}Ht(["click"]);var ge=h(''),xe=h(`
      Couldn't load pattern transfers
      `),_e=h('
      '),me=h('
      Filtered to
      '),he=h('
      No matching patterns
      '),ye=h('
    1. '),be=h('
        '),we=h('
        ',1),je=h('

        Cross-Project Intelligence

        Patterns learned here, applied there.

        ');function Fe(y,x){Mt(x,!0);const A=["ErrorHandling","AsyncConcurrency","Testing","Architecture","Performance","Security"],g={ErrorHandling:"var(--color-decay)",AsyncConcurrency:"var(--color-synapse-glow)",Testing:"var(--color-recall)",Architecture:"var(--color-dream-glow)",Performance:"var(--color-warning)",Security:"var(--color-node-pattern)"};let d=rt("All"),v=rt(Vt({projects:[],patterns:[]})),u=rt(!0),L=rt(null),j=rt(null);async function B(){return await new Promise(_=>setTimeout(_,420)),{projects:["vestige","nullgaze","injeranet","nemotron","orbit-wars","nightvision","aimo3"],patterns:[{name:"Result with thiserror context",category:"ErrorHandling",origin_project:"vestige",transferred_to:["nullgaze","injeranet","nemotron","nightvision"],transfer_count:4,last_used:"2026-04-18T14:22:00Z",confidence:.94},{name:"Axum error middleware with tower-http",category:"ErrorHandling",origin_project:"nullgaze",transferred_to:["vestige","nightvision"],transfer_count:2,last_used:"2026-04-17T09:10:00Z",confidence:.88},{name:"Graceful shutdown on SIGINT/SIGTERM",category:"ErrorHandling",origin_project:"vestige",transferred_to:["vestige","injeranet","nightvision"],transfer_count:3,last_used:"2026-04-15T22:01:00Z",confidence:.82},{name:"Python try/except with contextual re-raise",category:"ErrorHandling",origin_project:"aimo3",transferred_to:["nemotron"],transfer_count:1,last_used:"2026-04-10T11:30:00Z",confidence:.7},{name:"Arc> reader/writer split",category:"AsyncConcurrency",origin_project:"vestige",transferred_to:["nullgaze","injeranet"],transfer_count:2,last_used:"2026-04-14T16:42:00Z",confidence:.91},{name:"tokio::select! for cancellation propagation",category:"AsyncConcurrency",origin_project:"injeranet",transferred_to:["vestige","nightvision"],transfer_count:2,last_used:"2026-04-19T08:05:00Z",confidence:.86},{name:"Bounded mpsc channel with backpressure",category:"AsyncConcurrency",origin_project:"injeranet",transferred_to:["vestige","nullgaze"],transfer_count:2,last_used:"2026-04-12T13:18:00Z",confidence:.83},{name:"asyncio.gather with return_exceptions",category:"AsyncConcurrency",origin_project:"nemotron",transferred_to:["aimo3"],transfer_count:1,last_used:"2026-04-08T20:45:00Z",confidence:.72},{name:"Property-based tests with proptest",category:"Testing",origin_project:"vestige",transferred_to:["nullgaze","injeranet"],transfer_count:2,last_used:"2026-04-11T10:22:00Z",confidence:.89},{name:"Snapshot testing with insta",category:"Testing",origin_project:"nullgaze",transferred_to:["vestige"],transfer_count:1,last_used:"2026-04-16T14:00:00Z",confidence:.81},{name:"Vitest + Playwright dashboard harness",category:"Testing",origin_project:"vestige",transferred_to:["nullgaze","injeranet"],transfer_count:2,last_used:"2026-04-19T18:30:00Z",confidence:.87},{name:"One-variable-at-a-time Kaggle submission",category:"Testing",origin_project:"aimo3",transferred_to:["nemotron","orbit-wars"],transfer_count:2,last_used:"2026-04-20T07:15:00Z",confidence:.95},{name:"Kaggle pre-flight Input-panel screenshot",category:"Testing",origin_project:"aimo3",transferred_to:["nemotron","orbit-wars"],transfer_count:2,last_used:"2026-04-20T06:50:00Z",confidence:.98},{name:"SvelteKit 2 + Svelte 5 runes dashboard",category:"Architecture",origin_project:"vestige",transferred_to:["nullgaze","nightvision"],transfer_count:2,last_used:"2026-04-19T12:10:00Z",confidence:.92},{name:"glass-panel + cosmic-dark design system",category:"Architecture",origin_project:"vestige",transferred_to:["nullgaze","nightvision","injeranet"],transfer_count:3,last_used:"2026-04-20T09:00:00Z",confidence:.9},{name:"Tauri 2 + Rust/Axum sidecar",category:"Architecture",origin_project:"injeranet",transferred_to:["nightvision"],transfer_count:1,last_used:"2026-04-13T19:44:00Z",confidence:.78},{name:"MCP server with 23 stateful tools",category:"Architecture",origin_project:"vestige",transferred_to:["injeranet"],transfer_count:1,last_used:"2026-04-17T11:05:00Z",confidence:.85},{name:"USearch HNSW index for vector search",category:"Performance",origin_project:"vestige",transferred_to:["nullgaze"],transfer_count:1,last_used:"2026-04-09T15:20:00Z",confidence:.88},{name:"SQLite WAL mode for concurrent reads",category:"Performance",origin_project:"vestige",transferred_to:["nullgaze","injeranet","nightvision"],transfer_count:3,last_used:"2026-04-18T21:33:00Z",confidence:.93},{name:"vLLM prefix caching at 0.35 mem util",category:"Performance",origin_project:"aimo3",transferred_to:["nemotron"],transfer_count:1,last_used:"2026-04-11T08:00:00Z",confidence:.84},{name:"Cross-encoder rerank at k=30",category:"Performance",origin_project:"vestige",transferred_to:["nullgaze"],transfer_count:1,last_used:"2026-04-14T17:55:00Z",confidence:.79},{name:"Rotated auth token in env var",category:"Security",origin_project:"vestige",transferred_to:["nullgaze","injeranet","nightvision"],transfer_count:3,last_used:"2026-04-16T20:12:00Z",confidence:.96},{name:"Parameterized SQL via rusqlite params!",category:"Security",origin_project:"vestige",transferred_to:["nullgaze"],transfer_count:1,last_used:"2026-04-10T13:40:00Z",confidence:.89},{name:"664-pattern secret scanner",category:"Security",origin_project:"nullgaze",transferred_to:["vestige","nightvision","injeranet"],transfer_count:3,last_used:"2026-04-20T05:30:00Z",confidence:.97},{name:"CSP header with nonce-based script allow",category:"Security",origin_project:"nullgaze",transferred_to:["nightvision"],transfer_count:1,last_used:"2026-04-05T16:08:00Z",confidence:.8}]}}async function nt(){$(u,!0),$(L,null);try{$(v,await B(),!0)}catch(i){$(L,i instanceof Error?i.message:"Failed to load pattern transfers",!0),$(v,{projects:[],patterns:[]},!0)}finally{$(u,!1)}}Ut(()=>nt());const I=H(()=>t(d)==="All"?t(v).patterns:t(v).patterns.filter(i=>i.category===t(d))),Q=H(()=>[...t(j)?t(I).filter(c=>c.origin_project===t(j).from&&c.transferred_to.includes(t(j).to)):t(I)].sort((c,_)=>_.transfer_count-c.transfer_count)),J=H(()=>t(I).reduce((i,c)=>i+c.transferred_to.length,0)),X=H(()=>t(v).projects.length),st=H(()=>t(I).length);function ot(i){$(d,i,!0),$(j,null)}function jt(i,c){t(j)&&t(j).from===i&&t(j).to===c?$(j,null):$(j,{from:i,to:c},!0)}function it(){$(j,null)}function gt(i){const c=new Date(i).getTime(),_=Date.now(),C=Math.floor((_-c)/864e5);return C<=0?"today":C===1?"1d ago":C<30?`${C}d ago`:`${Math.floor(C/30)}mo ago`}var q=je(),tt=a(r(q),2),ct=r(tt),xt=a(ct,2);V(xt,16,()=>A,i=>i,(i,c)=>{var _=ge(),C=r(_),s=a(C);e(_),S(()=>{bt(_,1,`flex items-center gap-1.5 rounded-lg px-3 py-1.5 text-xs font-medium transition ${t(d)===c?"bg-synapse/25 text-synapse-glow":"text-dim hover:bg-white/[0.04] hover:text-text"}`),wt(C,`background: ${g[c]??""}`),o(s,` ${c??""}`)}),at("click",_,()=>ot(c)),m(i,_)}),e(tt);var Tt=a(tt,2);{var Ct=i=>{var c=xe(),_=a(r(c),2),C=r(_,!0);e(_);var s=a(_,2);e(c),S(()=>o(C,t(L))),at("click",s,nt),m(i,c)},_t=i=>{var c=_e();m(i,c)},lt=i=>{var c=we(),_=Rt(c),C=r(_),s=r(C);pe(s,{get projects(){return t(v).projects},get patterns(){return t(I)},get selectedCell(){return t(j)},onCellClick:jt});var n=a(s,2);{var f=O=>{var R=me(),D=r(R),w=a(r(D),2),ut=r(w,!0);e(w);var ft=a(w,4),pt=r(ft,!0);e(ft),e(D);var et=a(D,2);e(R),S(()=>{o(ut,t(j).from),o(pt,t(j).to)}),at("click",et,it),m(O,R)};Y(n,O=>{t(j)&&O(f)})}e(C);var p=a(C,2),l=r(p),k=a(r(l),2),b=r(k);e(k),e(l);var N=a(l,2);{var P=O=>{var R=he(),D=a(r(R),2),w=r(D,!0);e(D),e(R),S(()=>o(w,t(j)?"No patterns transferred from this origin to this destination.":"No patterns in this category.")),m(O,R)},W=O=>{var R=be();V(R,21,()=>t(Q),D=>D.name,(D,w)=>{var ut=ye(),ft=r(ut),pt=r(ft),et=r(pt),It=r(et,!0);e(et);var kt=a(et,2),ht=r(kt),Gt=r(ht,!0);e(ht);var Pt=a(ht,2),Ot=r(Pt,!0);e(Pt),e(kt);var zt=a(kt,2),Zt=r(zt),Dt=r(Zt,!0);e(Zt);var St=a(Zt,4),Kt=r(St);e(St),e(zt),e(pt);var Nt=a(pt,2),At=r(Nt),Bt=r(At,!0);e(At);var $t=a(At,2),Qt=r($t);e($t),e(Nt),e(ft),e(ut),S((Wt,qt)=>{yt(et,"title",t(w).name),o(It,t(w).name),wt(ht,`border-color: ${g[t(w).category]??""}66; color: ${g[t(w).category]??""}; background: ${g[t(w).category]??""}1a;`),o(Gt,t(w).category),o(Ot,Wt),o(Dt,t(w).origin_project),o(Kt,`${t(w).transferred_to.length??""} + ${t(w).transferred_to.length===1?"project":"projects"}`),o(Bt,t(w).transfer_count),o(Qt,`${qt??""}%`)},[()=>gt(t(w).last_used),()=>(t(w).confidence*100).toFixed(0)]),m(D,ut)}),e(R),m(O,R)};Y(N,O=>{t(Q).length===0?O(P):O(W,!1)})}e(p),e(_);var F=a(_,2),z=r(F),M=r(z),U=r(M,!0);e(M);var E=a(M),Z=a(E),T=r(Z,!0);e(Z);var G=a(Z),K=a(G),dt=r(K,!0);e(K);var vt=a(K);e(z);var mt=a(z,2),Lt=r(mt,!0);e(mt),e(F),S(()=>{o(b,`${t(Q).length??""} + ${t(Q).length===1?"pattern":"patterns"}`),o(U,t(st)),o(E,` pattern${t(st)===1?"":"s"} across `),o(T,t(X)),o(G,` project${t(X)===1?"":"s"}, `),o(dt,t(J)),o(vt,` total transfer${t(J)===1?"":"s"}`),o(Lt,t(d)==="All"?"All categories":t(d))}),m(i,c)};Y(Tt,i=>{t(L)?i(Ct):t(u)?i(_t,1):i(lt,!1)})}e(q),S(()=>bt(ct,1,`rounded-lg px-3 py-1.5 text-xs font-medium transition ${t(d)==="All"?"bg-synapse/25 text-synapse-glow":"text-dim hover:bg-white/[0.04] hover:text-text"}`)),at("click",ct,()=>ot("All")),m(y,q),Et()}Ht(["click"]);export{Fe as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js.br b/apps/dashboard/build/_app/immutable/nodes/14.BpCacSGt.js.br new file mode 100644 index 0000000000000000000000000000000000000000..c9f52d513ac519d66ff4aa9821f1ec8e380bec09 GIT binary patch literal 5939 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'),Bt=_('

        '),Gt=_("
        ");function lt(l,o){We(o,!0);let V=ie(o,"intent",3,"Synthesis"),$=ie(o,"memoriesAnalyzed",3,0),R=ie(o,"evidenceCount",3,0),i=ie(o,"contradictionCount",3,0),B=ie(o,"supersededCount",3,0),E=ie(o,"running",3,!1),G=ie(o,"stageHints",19,()=>({}));const I=[{key:"broad",icon:"◎",label:"Broad Retrieval",base:"Hybrid BM25 + semantic (3x overfetch) then cross-encoder rerank"},{key:"spreading",icon:"⟿",label:"Spreading Activation",base:"Collins & Loftus — expand via graph edges to surface what search missed"},{key:"fsrs",icon:"▲",label:"FSRS Trust Scoring",base:"retention × stability × reps ÷ lapses — which memories have earned trust"},{key:"intent",icon:"◆",label:"Intent Classification",base:"FactCheck / Timeline / RootCause / Comparison / Synthesis"},{key:"supersession",icon:"↗",label:"Temporal Supersession",base:"Newer high-trust memories replace older ones on the same fact"},{key:"contradiction",icon:"⚡",label:"Contradiction Analysis",base:"Only flag conflicts between memories where BOTH have trust > 0.3"},{key:"relation",icon:"⬡",label:"Relation Assessment",base:"Per pair: Supports / Contradicts / Supersedes / Irrelevant"},{key:"template",icon:"❖",label:"Template Reasoning",base:"Build the natural-language reasoning chain you validate"}],Y=Z(()=>({broad:$()?`Analyzed ${$()} memories · ${R()} survived ranking`:void 0,intent:V()?`Classified as ${V()}`:void 0,supersession:B()?`${B()} outdated memor${B()===1?"y":"ies"} superseded`:void 0,contradiction:i()?`${i()} real conflict${i()===1?"":"s"} between trusted memories`:"No conflicts between trusted memories"}));function Q(M,z){return G()[M]??e(Y)[M]??z}var P=Gt();let ue;re(P,23,()=>I,M=>M.key,(M,z,H)=>{var A=Bt(),U=s(A);{var le=n=>{var p=$t();w(()=>b(p,`animation-delay: ${e(H)*140+120}ms;`)),f(n,p)};O(U,n=>{e(H){b(A,`animation-delay: ${e(H)*140}ms;`),b(J,`animation-delay: ${e(H)*140}ms;`),v(te,e(z).icon),v(pe,`0${e(H)+1}`),v(me,e(z).label),v(r,n)},[()=>Q(e(z).key,e(z).base)]),f(M,A)}),t(P),w(()=>ue=ut(P,1,"reasoning-chain space-y-2 svelte-9hm057",null,ue,{running:E()})),f(l,P),Ke()}const Pt="#10b981",Ht="#f59e0b",He="#ef4444",vt="#8B95A5",ot={primary:{label:"Primary",accent:"synapse",icon:"◈"},supporting:{label:"Supporting",accent:"recall",icon:"◇"},contradicting:{label:"Contradicting",accent:"decay",icon:"⚠"},superseded:{label:"Superseded",accent:"muted",icon:"⊘"}};function Wt(l){return ot[l]??ot.supporting}function Te(l){return Number.isFinite(l)?l>75?Pt:l>=40?Ht:He:He}function dt(l){return Number.isFinite(l)?l>75?"HIGH CONFIDENCE":l>=40?"MIXED SIGNAL":"LOW CONFIDENCE":"LOW CONFIDENCE"}function Pe(l){return Number.isFinite(l)?Te(l*100):He}function Kt(l){return!Number.isFinite(l)||l<0?0:l>1?1:l}function Vt(l){return Kt(l)*100}function Yt(l){return l?zt[l]??vt:vt}function Qt(l,o){if(l==null||typeof l!="string"||l.trim()==="")return"—";const V=new Date(l);if(Number.isNaN(V.getTime()))return l;try{return V.toLocaleDateString(o,{month:"short",day:"numeric",year:"numeric"})}catch{return l}}function Ut(l,o=8){return l?l.length>o?l.slice(0,o):l:""}var Xt=_(' '),Zt=_('

        Trust
        FSRS · reps × retention
        ');function Jt(l,o){We(o,!0);let V=ie(o,"index",3,0);const $=Z(()=>Vt(o.trust)),R=Z(()=>Wt(o.role)),i=Z(()=>Ut(o.id)),B=Z(()=>Yt(o.nodeType));var E=Zt();let G;var I=s(E),Y=s(I),Q=s(Y),P=s(Q),ue=s(P,!0);t(P);var M=a(P,1,!0);t(Q);var z=a(Q,2);{var H=r=>{var n=Xt(),p=s(n,!0);t(n),w(()=>{b(n,`color: ${e(B)??""}`),v(p,o.nodeType)}),f(r,n)};O(z,r=>{o.nodeType&&r(H)})}t(Y);var A=a(Y,2),U=s(A);t(A),t(I);var le=a(I,2),J=s(le,!0);t(le);var ee=a(le,2),te=s(ee),se=a(s(te),2),ae=s(se);t(se),t(te);var ne=a(te,2),pe=s(ne);t(ne),t(ee);var ve=a(ee,2),me=s(ve),xe=s(me,!0);t(me),Fe(2),t(ve),t(E),w((r,n,p,k,x)=>{G=ut(E,1,"evidence-card glass rounded-xl p-4 space-y-3 transition relative svelte-ksja6x",null,G,{contradicting:o.role==="contradicting",primary:o.role==="primary",superseded:o.role==="superseded"}),b(E,`animation-delay: ${V()*80}ms;`),K(E,"data-evidence-id",o.id),v(ue,e(R).icon),v(M,e(R).label),K(A,"title",o.id),v(U,`#${e(i)??""}`),v(J,o.preview),b(se,`color: ${r??""}`),v(ae,`${n??""}%`),b(pe,`width: ${e($)??""}%; background: ${p??""}; box-shadow: 0 0 8px ${k??""}80;`),v(xe,x)},[()=>Pe(o.trust),()=>e($).toFixed(0),()=>Pe(o.trust),()=>Pe(o.trust),()=>Qt(o.date)]),f(l,E),Ke()}var es=_(''),ts=_('
        Try
        '),ss=_('
        Error:
        '),as=_('
        Running cognitive pipeline
        '),ns=_('

        Reasoning

        intent: · ·
        '),rs=ct('',1),is=ct(''),ls=_('

        '),vs=_('

        Contradictions Detected

        '),os=_('
        '),ds=_('

        Superseded

        '),cs=_('
        '),us=_('

        Evolution

        '),ps=_('

        '),ms=_('

        Related Insights

        '),xs=_('
        Confidence
        %
        intent: ·
        Primary Source

        ·

        Cognitive Pipeline

        Evidence

        primary supporting contradicting superseded
        ',1),gs=_(`

        Ask anything. Vestige will run the full reasoning pipeline and show you its work.

        8-stage pipeline: retrieval → rerank → activation → trust-score → supersession → + contradiction → relations → chain. Zero LLM calls, 100% local.

        `),fs=_(`

        Reasoning Theater

        deep_reference

        Watch Vestige reason. Your query runs the 8-stage cognitive pipeline — broad retrieval, + spreading activation, FSRS trust scoring, intent classification, supersession, contradiction + analysis, relation assessment, template reasoning — and returns a pre-built answer with + trust-scored evidence.

        `);function Ls(l,o){We(o,!0);async function V(r){var qe,Ee,we;const n=await Mt.deepReference(r,20),k=(Array.isArray(n.evidence)?n.evidence:[]).map(c=>{const T=typeof c.trust=="number"?c.trust:0,ke=T>1?T/100:T,Se=c.role||"supporting";return{id:String(c.id??""),trust:Math.max(0,Math.min(1,ke)),date:String(c.date??""),role:Se,preview:String(c.preview??""),nodeType:c.node_type?String(c.node_type):c.nodeType?String(c.nodeType):void 0}}),x=n.recommended,N={answer_preview:String((x==null?void 0:x.answer_preview)??((qe=k[0])==null?void 0:qe.preview)??""),memory_id:String((x==null?void 0:x.memory_id)??((Ee=k[0])==null?void 0:Ee.id)??""),trust_score:(()=>{var T;const c=x==null?void 0:x.trust_score;return typeof c=="number"?c>1?c/100:c:((T=k[0])==null?void 0:T.trust)??0})(),date:String((x==null?void 0:x.date)??((we=k[0])==null?void 0:we.date)??"")},ge=(Array.isArray(n.contradictions)?n.contradictions:[]).map(c=>({a_id:String(c.a_id??""),b_id:String(c.b_id??""),summary:String(c.summary??c.reason??"Trust-weighted conflict between high-FSRS memories.")})),he=(Array.isArray(n.superseded)?n.superseded:[]).map(c=>({old_id:String(c.old_id??""),new_id:String(c.new_id??N.memory_id??""),reason:String(c.reason??"Superseded by newer memory with higher FSRS trust.")})),fe=(Array.isArray(n.evolution)?n.evolution:[]).map(c=>({date:String(c.date??""),summary:String(c.summary??c.preview??""),trust:(()=>{const T=c.trust;return typeof T=="number"?T>1?T/100:T:0})()})),je=Array.isArray(n.related_insights)?n.related_insights:[],oe=typeof n.confidence=="number"?n.confidence:0,de=oe>1?Math.round(oe):Math.round(oe*100),Le=String(n.intent??"Synthesis"),Re=String(n.reasoning??n.guidance??""),be=typeof n.memoriesAnalyzed=="number"?n.memoriesAnalyzed:k.length;return{intent:Le,reasoning:Re,recommended:N,evidence:k,contradictions:ge,superseded:he,evolution:fe,related_insights:je,confidence:de,memoriesAnalyzed:be}}let $=ce(""),R=ce(!1),i=ce(null),B=ce(null),E=ce(null),G=ce(null),I=ce(Tt([]));async function Y(){const r=e($).trim();if(!(!r||e(R))){D(R,!0),D(B,null),D(i,null),D(I,[],!0);try{D(i,await V(r),!0),requestAnimationFrame(()=>requestAnimationFrame(Q))}catch(n){D(B,n instanceof Error?n.message:"Unknown error",!0)}finally{D(R,!1)}}}function Q(){if(!e(i)||!e(G)||e(i).contradictions.length===0){D(I,[],!0);return}const r=e(G).getBoundingClientRect(),n=[];for(const p of e(i).contradictions){const k=e(G).querySelector(`[data-evidence-id="${p.a_id}"]`),x=e(G).querySelector(`[data-evidence-id="${p.b_id}"]`);if(!k||!x)continue;const N=k.getBoundingClientRect(),W=x.getBoundingClientRect();n.push({x1:N.left-r.left+N.width/2,y1:N.top-r.top+N.height/2,x2:W.left-r.left+W.width/2,y2:W.top-r.top+W.height/2})}D(I,n,!0)}function P(r){var n,p;(r.metaKey||r.ctrlKey)&&r.key.toLowerCase()==="k"&&(r.preventDefault(),(n=e(E))==null||n.focus(),(p=e(E))==null||p.select())}Nt(()=>{var r;return(r=e(E))==null||r.focus(),window.addEventListener("keydown",P),window.addEventListener("resize",Q),()=>{window.removeEventListener("keydown",P),window.removeEventListener("resize",Q)}});const ue=["What port does the dev server use?","Should I enable prefix caching with vLLM?","Why did the AIMO3 submission score 36/50?","How does FSRS-6 trust scoring work?"];var M=fs();Dt("q2v96u",r=>{Ft(()=>{jt.title="Reasoning Theater · Vestige"})});var z=a(s(M),2),H=s(z),A=a(s(H),2);Ot(A),it(A,r=>D(E,r),()=>e(E));var U=a(A,4),le=s(U,!0);t(U),t(H);var J=a(H,2);{var ee=r=>{var n=ts(),p=a(s(n),2);re(p,17,()=>ue,ye,(k,x)=>{var N=es(),W=s(N,!0);t(N),w(()=>v(W,e(x))),Ge("click",N,()=>{D($,e(x),!0),Y()}),f(k,N)}),t(n),f(r,n)};O(J,r=>{!e(i)&&!e(R)&&r(ee)})}t(z);var te=a(z,2);{var se=r=>{var n=ss(),p=a(s(n));t(n),w(()=>v(p,` ${e(B)??""}`)),f(r,n)};O(te,r=>{e(B)&&r(se)})}var ae=a(te,2);{var ne=r=>{var n=as(),p=a(s(n),2);lt(p,{running:!0}),t(n),f(r,n)};O(ae,r=>{e(R)&&r(ne)})}var pe=a(ae,2);{var ve=r=>{const n=Z(()=>e(i).confidence),p=Z(()=>Te(e(n)));var k=xs(),x=rt(k);{var N=u=>{var d=ns(),g=s(d),S=a(s(g),2),m=s(S),y=a(s(m)),j=s(y,!0);t(y),t(m);var C=a(m,4),L=s(C);t(C);var h=a(C,4),F=s(h);t(h),t(S),t(g);var q=a(g,2),X=s(q,!0);t(q),t(d),w(_e=>{v(j,e(i).intent),v(L,`${e(i).memoriesAnalyzed??""} analyzed`),b(h,`color: ${e(p)??""}`),v(F,`${e(n)??""}% ${_e??""}`),b(q,`box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.03), 0 0 32px ${e(p)??""}20, 0 8px 32px rgba(0,0,0,0.4); border-color: ${e(p)??""}35;`),v(X,e(i).reasoning)},[()=>dt(e(n))]),f(u,d)};O(x,u=>{e(i).reasoning&&u(N)})}var W=a(x,2),ge=s(W),Ce=a(s(ge),2),he=s(Ce),Ve=s(he,!0);Fe(),t(he),t(Ce);var fe=a(Ce,2),je=s(fe,!0);t(fe);var oe=a(fe,2),de=a(s(oe)),Le=s(de);t(de),t(oe);var Re=a(oe,2),be=s(Re),qe=a(s(be)),Ee=s(qe,!0);t(qe),t(be);var we=a(be,4),c=s(we);t(we),t(Re),t(ge);var T=a(ge,2),ke=s(T),Se=a(s(ke),2),pt=s(Se);t(Se),t(ke);var De=a(ke,2),mt=s(De,!0);t(De);var Ye=a(De,2),Oe=s(Ye),Qe=s(Oe),xt=a(Qe);t(Oe);var Ue=a(Oe,4),gt=s(Ue,!0);t(Ue),t(Ye),t(T),t(W);var Ie=a(W,2),Xe=a(s(Ie),2),ft=s(Xe);lt(ft,{get intent(){return e(i).intent},get memoriesAnalyzed(){return e(i).memoriesAnalyzed},get evidenceCount(){return e(i).evidence.length},get contradictionCount(){return e(i).contradictions.length},get supersededCount(){return e(i).superseded.length}}),t(Xe),t(Ie);var Me=a(Ie,2),ze=s(Me),Ze=s(ze),Je=a(s(Ze),2),_t=s(Je);t(Je),t(Ze),Fe(2),t(ze);var $e=a(ze,2),et=s($e);re(et,19,()=>e(i).evidence,u=>u.id,(u,d,g)=>{Jt(u,{get id(){return e(d).id},get trust(){return e(d).trust},get date(){return e(d).date},get role(){return e(d).role},get preview(){return e(d).preview},get nodeType(){return e(d).nodeType},get index(){return e(g)}})});var yt=a(et,2);{var ht=u=>{var d=is(),g=a(s(d));re(g,17,()=>e(I),ye,(S,m,y)=>{const j=Z(()=>(e(m).x1+e(m).x2)/2),C=Z(()=>Math.min(e(m).y1,e(m).y2)-28);var L=rs(),h=rt(L);b(h,`animation-delay: ${y*120+600}ms;`);var F=a(h);b(F,`animation-delay: ${y*120+600}ms;`);var q=a(F);b(q,`animation-delay: ${y*120+700}ms;`),w(()=>{K(h,"d",`M ${e(m).x1??""} ${e(m).y1??""} Q ${e(j)??""} ${e(C)??""} ${e(m).x2??""} ${e(m).y2??""}`),K(F,"cx",e(m).x1),K(F,"cy",e(m).y1),K(q,"cx",e(m).x2),K(q,"cy",e(m).y2)}),f(S,L)}),t(d),f(u,d)};O(yt,u=>{e(I).length>0&&u(ht)})}t($e),it($e,u=>D(G,u),()=>e(G)),t(Me);var tt=a(Me,2);{var bt=u=>{var d=vs(),g=s(d),S=a(s(g),2),m=s(S);t(S),t(g);var y=a(g,2);re(y,21,()=>e(i).contradictions,ye,(j,C,L)=>{var h=ls(),F=a(s(h),2),q=s(F),X=s(q),_e=s(X);t(X);var Ae=a(X,4),Be=s(Ae);t(Ae),t(q);var Ne=a(q,2),Ct=s(Ne,!0);t(Ne),t(F);var Rt=a(F,2);Rt.textContent=`pair ${L+1}`,t(h),w((Et,At)=>{v(_e,`#${Et??""}`),v(Be,`#${At??""}`),v(Ct,e(C).summary)},[()=>e(C).a_id.slice(0,8),()=>e(C).b_id.slice(0,8)]),f(j,h)}),t(y),t(d),w(()=>v(m,`(${e(i).contradictions.length??""})`)),f(u,d)};O(tt,u=>{e(i).contradictions.length>0&&u(bt)})}var st=a(tt,2);{var qt=u=>{var d=ds(),g=s(d),S=a(s(g),2),m=s(S);t(S),t(g);var y=a(g,2);re(y,21,()=>e(i).superseded,ye,(j,C)=>{var L=os(),h=s(L),F=s(h);t(h);var q=a(h,4),X=s(q);t(q);var _e=a(q,2),Ae=s(_e,!0);t(_e),t(L),w((Be,Ne)=>{v(F,`#${Be??""}`),v(X,`#${Ne??""}`),v(Ae,e(C).reason)},[()=>e(C).old_id.slice(0,8),()=>e(C).new_id.slice(0,8)]),f(j,L)}),t(y),t(d),w(()=>v(m,`(${e(i).superseded.length??""})`)),f(u,d)};O(st,u=>{e(i).superseded.length>0&&u(qt)})}var at=a(st,2),nt=s(at);{var wt=u=>{var d=us(),g=a(s(d),2);re(g,21,()=>e(i).evolution,ye,(S,m)=>{var y=cs(),j=s(y),C=s(j,!0);t(j);var L=a(j,2),h=a(L,2),F=s(h,!0);t(h),t(y),w((q,X)=>{v(C,q),b(L,`background: ${X??""}`),v(F,e(m).summary)},[()=>new Date(e(m).date).toLocaleDateString(void 0,{month:"short",day:"numeric"}),()=>Te(e(m).trust*100)]),f(S,y)}),t(g),t(d),f(u,d)};O(nt,u=>{e(i).evolution.length>0&&u(wt)})}var kt=a(nt,2);{var St=u=>{var d=ms(),g=a(s(d),2);re(g,21,()=>e(i).related_insights,ye,(S,m)=>{var y=ps(),j=a(s(y),1,!0);t(y),w(()=>v(j,e(m))),f(S,y)}),t(g),t(d),f(u,d)};O(kt,u=>{e(i).related_insights.length>0&&u(St)})}t(at),w((u,d,g,S,m)=>{b(ge,`box-shadow: inset 0 1px 0 0 rgba(255,255,255,0.03), 0 0 32px ${e(p)??""}30, 0 8px 32px rgba(0,0,0,0.4); border-color: ${e(p)??""}40;`),b(he,`color: ${e(p)??""}; text-shadow: 0 0 24px ${e(p)??""}80;`),v(Ve,e(n)),b(fe,`color: ${e(p)??""}`),v(je,u),K(de,"width",e(n)/100*220),K(de,"fill",e(p)),b(de,`filter: drop-shadow(0 0 6px ${e(p)??""});`),K(Le,"to",e(n)/100*220),v(Ee,e(i).intent),v(c,`${e(i).memoriesAnalyzed??""} analyzed`),K(Se,"title",e(i).recommended.memory_id),v(pt,`#${d??""}`),v(mt,e(i).recommended.answer_preview),b(Qe,`background: ${g??""}`),v(xt,` Trust ${S??""}%`),v(gt,m),v(_t,`(${e(i).evidence.length??""})`)},[()=>dt(e(n)),()=>e(i).recommended.memory_id.slice(0,8),()=>Te(e(i).recommended.trust_score*100),()=>(e(i).recommended.trust_score*100).toFixed(0),()=>new Date(e(i).recommended.date).toLocaleDateString()]),f(r,k)};O(pe,r=>{e(i)&&!e(R)&&r(ve)})}var me=a(pe,2);{var xe=r=>{var n=gs();f(r,n)};O(me,r=>{!e(i)&&!e(R)&&!e(B)&&r(xe)})}t(M),w(r=>{U.disabled=r,v(le,e(R)?"Reasoning…":"Reason")},[()=>!e($).trim()||e(R)]),Ge("keydown",A,r=>r.key==="Enter"&&Y()),It(A,()=>e($),r=>D($,r)),Ge("click",U,Y),f(l,M),Ke()}Lt(["keydown","click"]);export{Ls as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.br b/apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.br new file mode 100644 index 0000000000000000000000000000000000000000..9378b0f42d1bc545f5ff8b12450693a6bd38f973 GIT binary patch literal 7442 zcmV+t9qr;9GiRcxkCM~?qA25}*8?mEY-1SKW7+9kX=@(M4(7WKo34h)N8|{NeUe)W zBJlX>tg2PQ+Wa^&1w5BG2Sf{mKK0F2|k)ExPV(c8C!s$3n2jp`}Y62d;Qj=Ih7xAE-6Zsv#3fm`fd#0mo1G_ z`Jx_GYgJkUesf5W(ZM?qjce!cQQ4cSHmwZ5f%ib4$PBS3_gfVB31KgN7bTmOz(!j@wwyaP>HB>vet>CXN2b)4tI zIr{n8?hEsus_9^2_oh67P1(6~+cmz3`yu6TA8tG){XK|&&zPg3h#VB5X|Xo0O)|7D zUJYx8M4RHP8S$xKb35X`m>73;d&@{l!y_nR3vFkg)gxU~W?D+xW_o(;6x)jg$K})M z4-3*{=F;>c@#dX;*c|?#s7paxvwIH~@xI~bpHCKFC^TVUx@Wwwhr_gp)0U67$BtNZ zgpDuaee}AE*ZVVNUBfgiqf&8!@S~p0mz2%+NLgs@!PNZMhaEYo{5MlWoO5c28hr4@-W`LLW|Q97@ew>HSE0 zUn_FPl3jCGE2yb7PowD~k%NW(J9+RTo($+R3?2JsNv+c~&S_&ckQF|dPUzj#@6W3` zMBiqn{CcrE`{2g&8-2W+q(!Zc~ z6b>{WAuhGmja?n#BXp7Fmxl`Y(Io0tl1;OP*XJX3dp&lkL5`9lnP?yLI@URTFGJwD zphs{Sol?N(UuX)U6!@d_gxqDR_dw}^q#;MtE|OU-kaT4Fn|TH}hbR-y)2tQFhUp* zBvG)=!Gkn`qndyTksL&C>t7d?${9 zj#Bql0|AgAf@}JAJ&9RIa-D@cCgJn_kPr`20&O4GvZ`zC0LTJNF#s5CnFBc+VN02k zyYwAQzHXd8Pk3**;;=~(j(oHHKN~B+jEj^u$1e-Xr-tc6X+|&!s3~CA?hsK4S_GTP z^q7O5FAeB#1wqj28-+O~HlqNMMu|`70IQrP#4b=OQ?ju19GQ&cD@np#AhhQP@p-~A zEZ>JVD^86oGzCe9me-`BXb4a6UIKhTtC9?VMUa=fY)xr~#IrsS7pS!X(Nc=o9E(bt zP^Sb>2c0DZBl*2AA|-s5Tc66WiH8ikS?)Zy2l1J$NNsi!+fz`*B-uD8an@uwFU=_+ zmc9%8dFx$6McowZSJUN2Y$?xQty8IfNT_*KBZBN8`tg0JFLI1mWevEuUOOBw#7iD_ zPI0w1;St#UFPv`Jzd{<9k^$VhOG>T7cDtcm#YC|*F7rae`wj=vabRu<&K26AS8 z*e)-E5(=9X4@+(BAeiesn5%q#6jApHE62E!er^%a{{%%rIHpCR#xWs^%KfzvhFS|T zxXEas3krt}10L(}KuLfQ64yu@mI14Bj!=yKSoApq1kxxS)*A4R3O4Onf+zOefO`FWFuMys#Z4TBV&Y|V;mNjXYzS`%k#7;5x5xFDsOUn&swlk#^A>J9HB-d_#l6h-jih@Qz6l^*fhU2}Q?Ytu(mgg6g zKH;nO#y%k*E|vK^$Fs`Z4_RYp{7qfhGa=5B_Do3wOaGvlKcAFwl{SAqe{XS?cE-nX z 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 Q36h#^l=}$*0(=^N2OTV0egFUf literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.gz b/apps/dashboard/build/_app/immutable/nodes/15.DFbOY736.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..581fc7198a903867b6e8e9fd80f427fee535aef4 GIT binary patch literal 8547 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.getTime()-B.getTime())/ze,Z++)}const w=Z>0?j/Z:0;return{overdue:f,dueToday:N,dueThisWeek:P,dueThisMonth:E,avgDays:w}}var dt=Oe(''),lt=Oe(''),vt=Oe(''),ct=m('
        '),ut=m(' '),pt=m(' '),xt=m('
        '),gt=m(''),mt=m(" "),ft=m(' '),_t=m('

        '),bt=m('

        '),ht=m('

        '),yt=m('
        Avg retention of memories due — last 2 weeks → next 4
        retention today
        Overdue Due today Within 7 days Future (8+ days)
        ');function wt(p,o){Ye(o,!0);let f=st(o,"anchor",19,()=>new Date),N=S(()=>xe(f())),P=S(()=>it(f())),E=S(()=>(()=>{const r=new Map;for(const s of o.memories){if(!s.nextReviewAt)continue;const i=new Date(s.nextReviewAt);if(Number.isNaN(i.getTime()))continue;const c=Be(xe(i)),k=r.get(c);k?k.push(s):r.set(c,[s])}return r})()),j=S(()=>(()=>{const r=[];for(let s=0;s<42;s++){const i=new Date(e(P));i.setDate(i.getDate()+s);const c=Be(i),k=e(E).get(c)??[],h=we(i,e(N));r.push({date:i,key:c,isToday:h===0,inWindow:h>=-14&&h<=28,memories:k,avgRetention:nt(k)})}return r})());function Z(r){if(r.memories.length===0)return{bg:"rgba(255,255,255,0.02)",border:"rgba(99,102,241,0.06)",text:"#4a4a7a"};const s=we(r.date,e(N));return s<-1?{bg:"rgba(239,68,68,0.16)",border:"rgba(239,68,68,0.45)",text:"#fca5a5"}:s>=-1&&s<=0?{bg:"rgba(245,158,11,0.18)",border:"rgba(245,158,11,0.5)",text:"#fcd34d"}:s>0&&s<=7?{bg:"rgba(99,102,241,0.16)",border:"rgba(99,102,241,0.45)",text:"#a5b4fc"}:{bg:"rgba(168,85,247,0.08)",border:"rgba(168,85,247,0.2)",text:"#c084fc"}}let B=ue(null),w=S(()=>e(j).find(r=>r.key===e(B))??null);function H(r){I(B,e(B)===r?null:r,!0)}const K=600,_=56;let Y=S(()=>(()=>{const r=[],s=e(j).length;for(let i=0;i(()=>{const r=e(Y).filter(s=>s.count>0);return r.length===0?"":r.map((s,i)=>`${i===0?"M":"L"} ${s.x.toFixed(1)} ${s.y.toFixed(1)}`).join(" ")})()),ge=S(()=>e(j).findIndex(r=>r.isToday)),ee=S(()=>e(ge)>=0?e(ge)/(e(j).length-1)*K:-1);const me=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];function fe(r){return r.toLocaleDateString(void 0,{weekday:"long",month:"long",day:"numeric",year:"numeric"})}var ne=yt(),_e=a(ne),be=n(a(_e),2);M(be,"viewBox","0 0 600 56");var ie=a(be);M(ie,"x2",K),M(ie,"y1",_-6-.3*(_-12)),M(ie,"y2",_-6-.3*(_-12));var oe=n(ie);M(oe,"x2",K),M(oe,"y1",_-6-.7*(_-12)),M(oe,"y2",_-6-.7*(_-12));var $e=n(oe);{var Ne=r=>{var s=dt();M(s,"y2",_),y(()=>{M(s,"x1",e(ee)),M(s,"x2",e(ee))}),v(r,s)};L($e,r=>{e(ee)>=0&&r(Ne)})}var d=n($e);{var x=r=>{var s=lt();y(()=>M(s,"d",e(ke))),v(r,s)};L(d,r=>{e(ke)&&r(x)})}var g=n(d);Q(g,17,()=>e(Y),pe,(r,s)=>{var i=at(),c=Ze(i);{var k=h=>{var A=vt();y(()=>{M(A,"cx",e(s).x),M(A,"cy",e(s).y)}),v(h,A)};L(c,h=>{e(s).count>0&&h(k)})}v(r,i)}),t(be),t(_e);var D=n(_e,2);Q(D,21,()=>me,pe,(r,s)=>{var i=ct(),c=a(i,!0);t(i),y(()=>u(c,e(s))),v(r,i)}),t(D);var W=n(D,2);Q(W,21,()=>e(j),r=>r.key,(r,s)=>{const i=S(()=>Z(e(s)));var c=gt(),k=a(c),h=a(k),A=a(h),he=a(A,!0);t(A);var de=n(A,2);{var ae=b=>{var l=ut(),C=a(l,!0);t(l),y(X=>u(C,X),[()=>e(s).date.toLocaleDateString(void 0,{month:"short"})]),v(b,l)},le=S(()=>e(s).date.getDate()===1);L(de,b=>{e(le)&&b(ae)})}t(h);var ve=n(h,2);{var se=b=>{var l=xt(),C=a(l),X=a(C,!0);t(C);var G=n(C,2);{var U=z=>{var J=pt(),V=a(J);t(J),y(ye=>u(V,`${ye??""}%`),[()=>(e(s).avgRetention*100).toFixed(0)]),v(z,J)};L(G,z=>{e(s).avgRetention>0&&z(U)})}t(l),y(()=>{Re(C,`color: ${e(i).text??""}`),u(X,e(s).memories.length)}),v(b,l)};L(ve,b=>{e(s).memories.length>0&&b(se)})}t(k),t(c),y((b,l)=>{c.disabled=e(s).memories.length===0,Fe(c,1,`relative aspect-square rounded-lg p-2 text-left transition-all duration-200 + ${e(s).inWindow?"opacity-100":"opacity-35"} + ${e(s).memories.length>0?"hover:scale-[1.03] cursor-pointer":"cursor-default"} + ${e(s).isToday?"ring-2 ring-synapse/60 shadow-[0_0_16px_rgba(99,102,241,0.3)]":""} + ${e(B)===e(s).key?"ring-2 ring-dream/60 shadow-[0_0_16px_rgba(168,85,247,0.3)]":""}`),Re(c,`background: ${e(i).bg??""}; border: 1px solid ${e(i).border??""};`),M(c,"title",b),Fe(A,1,`text-[10px] font-mono ${e(s).isToday?"text-synapse-glow font-bold":"text-dim"}`),u(he,l)},[()=>`${fe(e(s).date)} — ${e(s).memories.length} due`,()=>e(s).date.getDate()]),Ae("click",c,()=>H(e(s).key)),v(r,c)}),t(W);var q=n(W,4);{var te=r=>{var s=ht(),i=a(s),c=a(i),k=a(c),h=a(k,!0);t(k);var A=n(k,2),he=a(A);t(A),t(c);var de=n(c,2);t(i);var ae=n(i,2),le=a(ae);Q(le,17,()=>e(w).memories.slice(0,100),b=>b.id,(b,l)=>{var C=_t(),X=a(C),G=n(X,2),U=a(G),z=a(U,!0);t(U);var J=n(U,2),V=a(J),ye=a(V,!0);t(V);var Se=n(V,2);{var Ce=R=>{var F=mt(),O=a(F);t(F),y(()=>u(O,`· ${e(l).reviewCount??""} review${e(l).reviewCount===1?"":"s"}`)),v(R,F)};L(Se,R=>{e(l).reviewCount!==void 0&&R(Ce)})}var je=n(Se,2);Q(je,17,()=>e(l).tags.slice(0,2),pe,(R,F)=>{var O=ft(),De=a(O,!0);t(O),y(()=>u(De,e(F))),v(R,O)}),t(J),t(G);var $=n(G,2),T=a($),re=a(T);t(T);var ce=n(T,2),Me=a(ce);t(ce),t($),t(C),y(R=>{Re(X,`background: ${(rt[e(l).nodeType]||"#8B95A5")??""}`),u(z,e(l).content),u(ye,e(l).nodeType),Re(re,`width: ${e(l).retentionStrength*100}%; background: ${e(l).retentionStrength>.7?"var(--color-recall)":e(l).retentionStrength>.4?"var(--color-warning)":"var(--color-decay)"}`),u(Me,`${R??""}%`)},[()=>(e(l).retentionStrength*100).toFixed(0)]),v(b,C)});var ve=n(le,2);{var se=b=>{var l=bt(),C=a(l);t(l),y(()=>u(C,`+${e(w).memories.length-100} more`)),v(b,l)};L(ve,b=>{e(w).memories.length>100&&b(se)})}t(ae),t(s),y((b,l)=>{u(h,b),u(he,`${e(w).memories.length??""} memor${e(w).memories.length===1?"y":"ies"} due + · avg retention ${l??""}%`)},[()=>fe(e(w).date),()=>(e(w).avgRetention*100).toFixed(0)]),Ae("click",de,()=>I(B,null)),v(r,s)};L(q,r=>{e(w)&&e(w).memories.length>0&&r(te)})}t(ne),v(p,ne),qe()}Ue(["click"]);var kt=m(''),$t=m('
        '),St=m('
        '),Dt=m('
        '),Tt=m('
        '),Rt=m('

        API unavailable.

        Could not fetch memories from /api/memories.

        '),At=m(`

        FSRS review schedule not yet populated.

        nextReviewAt timestamp yet. Run consolidation to compute + next-review dates via FSRS-6.

        `),Ft=m('
        Overdue
        '),Nt=m('

        Nothing in this window.

        '),Ct=m('

        '),jt=m('

        '),Mt=m('
        '),Lt=m('
        '),Wt=m('

        Review Schedule

        FSRS-6 next-review dates across your memory corpus

        ');function Gt(p,o){Ye(o,!0);let f=ue(et([])),N=ue(0),P=ue(!0),E=ue(!1),j=ue("week");const Z=2e3;async function B(){const d=await Ee.memories.list({limit:String(Z)});I(f,d.memories,!0),I(N,d.total,!0)}Ve(async()=>{try{await B()}catch{I(E,!0),I(f,[],!0)}finally{I(P,!1)}});let w=S(()=>e(f).filter(d=>!!d.nextReviewAt)),H=S(()=>new Date),K=S(()=>e(N)>e(f).length),_=S(()=>(()=>{const d=e(j);return d==="all"?e(w):e(w).filter(x=>{const g=He(e(H),x.nextReviewAt);if(g==="none")return!1;if(d==="today")return g==="overdue"||g==="today";if(d==="week")return g!=="future";const D=Ke(e(H),x.nextReviewAt);return D!==null&&D<=30})})()),Y=S(()=>ot(e(H),e(w)));async function ke(){I(P,!0);try{await Ee.consolidate(),await B(),I(E,!1)}catch{I(E,!0)}finally{I(P,!1)}}const ge=[{key:"today",label:"Due today"},{key:"week",label:"This week"},{key:"month",label:"This month"},{key:"all",label:"All upcoming"}];var ee=Wt(),me=a(ee),fe=n(a(me),2);Q(fe,21,()=>ge,pe,(d,x)=>{var g=kt(),D=a(g,!0);t(g),y(()=>{Fe(g,1,`px-3 py-1.5 text-xs rounded-lg transition-all + ${e(j)===e(x).key?"bg-synapse/20 text-synapse-glow border border-synapse/30":"text-dim hover:text-text hover:bg-white/[0.03] border border-transparent"}`),u(D,e(x).label)}),Ae("click",g,()=>I(j,e(x).key,!0)),v(d,g)}),t(fe),t(me);var ne=n(me,2);{var _e=d=>{var x=$t(),g=a(x);t(x),y((D,W)=>u(g,`Showing the first ${D??""} of ${W??""} memories. + Schedule reflects this slice only.`),[()=>e(f).length.toLocaleString(),()=>e(N).toLocaleString()]),v(d,x)};L(ne,d=>{!e(P)&&!e(E)&&e(K)&&d(_e)})}var be=n(ne,2);{var ie=d=>{var x=Tt(),g=a(x),D=n(a(g),2);Q(D,20,()=>Array(42),pe,(q,te)=>{var r=St();v(q,r)}),t(D),t(g);var W=n(g,2);Q(W,20,()=>Array(5),pe,(q,te)=>{var r=Dt();v(q,r)}),t(W),t(x),v(d,x)},oe=d=>{var x=Rt();v(d,x)},$e=d=>{var x=At(),g=n(a(x),4),D=a(g);tt(2),t(g);var W=n(g,2);t(x),y(()=>u(D,`None of your ${e(f).length??""} memor${e(f).length===1?"y has":"ies have"} a `)),Ae("click",W,ke),v(d,x)},Ne=d=>{var x=Lt(),g=a(x),D=a(g);wt(D,{get memories(){return e(w)}}),t(g);var W=n(g,2),q=a(W),te=n(a(q),2),r=a(te);{var s=$=>{var T=Ft(),re=n(a(T),2),ce=a(re,!0);t(re),t(T),y(()=>u(ce,e(Y).overdue)),v($,T)};L(r,$=>{e(Y).overdue>0&&$(s)})}var i=n(r,2),c=n(a(i),2),k=a(c,!0);t(c),t(i);var h=n(i,2),A=n(a(h),2),he=a(A,!0);t(A),t(h);var de=n(h,2),ae=n(a(de),2),le=a(ae,!0);t(ae),t(de),t(te);var ve=n(te,2),se=a(ve),b=n(a(se),2),l=a(b,!0);t(b),t(se);var C=n(se,2),X=a(C);t(C),t(ve),t(q);var G=n(q,2),U=a(G),z=a(U),J=a(z,!0);t(z);var V=n(z,2),ye=a(V,!0);t(V),t(U);var Se=n(U,2);{var Ce=$=>{var T=Nt();v($,T)},je=$=>{var T=Mt(),re=a(T);Q(re,17,()=>e(_).slice().sort((R,F)=>(R.nextReviewAt??"").localeCompare(F.nextReviewAt??"")).slice(0,50),R=>R.id,(R,F)=>{const O=S(()=>He(e(H),e(F).nextReviewAt)),De=S(()=>Ke(e(H),e(F).nextReviewAt)??0);var Le=Ct(),We=a(Le),Qe=a(We,!0);t(We);var Ie=n(We,2),Te=a(Ie),Xe=a(Te,!0);t(Te);var Pe=n(Te,2),Ge=a(Pe);t(Pe),t(Ie),t(Le),y(Je=>{u(Qe,e(F).content),Fe(Te,1,e(O)==="overdue"?"text-decay":e(O)==="today"?"text-warning":e(O)==="week"?"text-synapse-glow":"text-dream-glow"),u(Xe,e(O)==="overdue"?`${-e(De)}d overdue`:e(O)==="today"?"today":`in ${e(De)}d`),u(Ge,`· ${Je??""}%`)},[()=>(e(F).retentionStrength*100).toFixed(0)]),v(R,Le)});var ce=n(re,2);{var Me=R=>{var F=jt(),O=a(F);t(F),y(()=>u(O,`+${e(_).length-50} more`)),v(R,F)};L(ce,R=>{e(_).length>50&&R(Me)})}t(T),v($,T)};L(Se,$=>{e(_).length===0?$(Ce):$(je,!1)})}t(G),t(W),t(x),y(($,T)=>{u(k,e(Y).dueToday),u(he,e(Y).dueThisWeek),u(le,e(Y).dueThisMonth),u(l,$),u(X,`Across ${e(w).length??""} scheduled memor${e(w).length===1?"y":"ies"}`),u(J,T),u(ye,e(_).length)},[()=>e(Y).avgDays.toFixed(1),()=>{var $;return($=ge.find(T=>T.key===e(j)))==null?void 0:$.label}]),v(d,x)};L(be,d=>{e(P)?d(ie):e(E)?d(oe,1):e(w).length===0?d($e,2):d(Ne,!1)})}t(ee),v(p,ee),qe()}Ue(["click"]);export{Gt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.br b/apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.br new file mode 100644 index 0000000000000000000000000000000000000000..71ed886099a7d09519cc79d2acd99b96ae1b4b21 GIT binary patch literal 5680 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 Wd&bE*c%gSW@JKL9vpn`sJlh|4d?B|0 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.gz b/apps/dashboard/build/_app/immutable/nodes/16.DMIuRZWa.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..9bfdbe06669774cfea2b4b36f6a61beb9073d59e GIT binary patch literal 6484 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 Running...',1),lt=l('
        Processed
        '),ct=l('
        Decayed
        '),xt=l('
        Embedded
        '),mt=l('
        '),pt=l(' Dreaming...',1),ut=l('
        '),ft=l('
        Insights Discovered:
        ',1),gt=l('
        Connections found:
        '),bt=l('
        Memories replayed:
        '),_t=l('
        '),yt=l('
        '),ht=l('
        '),wt=l('

        Retention Distribution

        '),kt=l('
        '),St=l(`

        Settings & System

        Memories
        Avg Retention
        WebSocket
        v2.1
        Vestige

        Cognitive Operations

        Pulse Toast Preview
        Fire a synthetic event sequence — useful for UI demos
        Birth Ritual Preview
        Inject a synthetic memory — switch to Graph to watch the orb fly in
        FSRS-6 Consolidation
        Apply spaced-repetition decay, regenerate embeddings, run maintenance
        Memory Dream Cycle
        Replay memories, discover hidden connections, synthesize insights

        Keyboard Shortcuts

        About

        V
        Vestige v2.1 "Nuclear Dashboard"
        Your AI's long-term memory system
        29 cognitive modules
        FSRS-6 spaced repetition
        Nomic Embed v1.5 (256d)
        Jina Reranker v1 Turbo
        USearch HNSW (20x FAISS)
        Local-first, zero cloud
        Built with Rust + Axum + SvelteKit 2 + Svelte 5 + Three.js + Tailwind CSS 4
        `);function It(Se,Ce){Xe(Ce,!0);const De=()=>ie(dt,"$memoryCount",B),N=()=>ie(rt,"$avgRetention",B),de=()=>ie(ot,"$isConnected",B),[B,$e]=at(),re=["fact","concept","pattern","decision","person","place"];let K=k(0);function Re(){const a=re[s(K)%re.length];et(K),it.injectEvent({type:"MemoryCreated",data:{id:`demo-birth-${Date.now()}`,content:`Demo memory #${s(K)} — ${a}`,node_type:a,tags:["demo","v2.3-birth-ritual"],retention:.9}})}let T=k(!1),R=k(!1),y=k(null),f=k(null),Ae=k(null),$=k(null),oe=k(!0),Ge=k(null);Qe(()=>{O()});async function O(){m(oe,!0);try{const[a,d,c]=await Promise.all([F.stats().catch(()=>null),F.health().catch(()=>null),F.retentionDistribution().catch(()=>null)]);m(Ae,a,!0),m(Ge,d,!0),m($,c,!0)}finally{m(oe,!1)}}async function je(){m(T,!0),m(y,null);try{m(y,await F.consolidate(),!0),await O()}catch{}finally{m(T,!1)}}async function Me(){m(R,!0),m(f,null);try{m(f,await F.dream(),!0),await O()}catch{}finally{m(R,!1)}}var V=St(),q=t(V),Pe=i(t(q),2);e(q);var z=i(q,2),J=t(z),ne=t(J),Ee=t(ne,!0);e(ne),_(2),e(J);var U=i(J,2),W=t(U),Fe=t(W);e(W),_(2),e(U);var ve=i(U,2),le=t(ve),ce=t(le),xe=i(ce,2),Te=t(xe,!0);e(xe),e(le),_(2),e(ve),_(2),e(z);var Y=i(z,2),H=i(t(Y),2),me=t(H),Oe=i(t(me),2);e(me),e(H);var L=i(H,2),pe=t(L),Ie=i(t(pe),2);e(pe),e(L);var Q=i(L,2),X=t(Q),I=i(t(X),2),Ne=t(I);{var Be=a=>{var d=vt();_(),v(a,d)},Ke=a=>{var d=he("Consolidate");v(a,d)};u(Ne,a=>{s(T)?a(Be):a(Ke,!1)})}e(I),e(X);var Ve=i(X,2);{var qe=a=>{var d=mt(),c=t(d),g=t(c);{var S=o=>{var r=lt(),n=t(r),x=t(n,!0);e(n),_(2),e(r),w(()=>p(x,s(y).nodesProcessed)),v(o,r)};u(g,o=>{s(y).nodesProcessed!==void 0&&o(S)})}var b=i(g,2);{var h=o=>{var r=ct(),n=t(r),x=t(n,!0);e(n),_(2),e(r),w(()=>p(x,s(y).decayApplied)),v(o,r)};u(b,o=>{s(y).decayApplied!==void 0&&o(h)})}var C=i(b,2);{var G=o=>{var r=xt(),n=t(r),x=t(n,!0);e(n),_(2),e(r),w(()=>p(x,s(y).embeddingsGenerated)),v(o,r)};u(C,o=>{s(y).embeddingsGenerated!==void 0&&o(G)})}e(c),e(d),v(a,d)};u(Ve,a=>{s(y)&&a(qe)})}e(Q);var ue=i(Q,2),Z=t(ue),A=i(t(Z),2),ze=t(A);{var Je=a=>{var d=pt();_(),v(a,d)},Ue=a=>{var d=he("Dream");v(a,d)};u(ze,a=>{s(R)?a(Je):a(Ue,!1)})}e(A),e(Z);var We=i(Z,2);{var Ye=a=>{var d=_t(),c=t(d);{var g=o=>{var r=ft(),n=i(tt(r),2);se(n,17,()=>s(f).insights,ae,(x,j)=>{var D=ut(),M=t(D,!0);e(D),w(ee=>p(M,ee),[()=>typeof s(j)=="string"?s(j):JSON.stringify(s(j))]),v(x,D)}),v(o,r)},S=P(()=>s(f).insights&&Array.isArray(s(f).insights));u(c,o=>{s(S)&&o(g)})}var b=i(c,2);{var h=o=>{var r=gt(),n=i(t(r)),x=t(n,!0);e(n),e(r),w(()=>p(x,s(f).connections_found)),v(o,r)};u(b,o=>{s(f).connections_found!==void 0&&o(h)})}var C=i(b,2);{var G=o=>{var r=bt(),n=i(t(r)),x=t(n,!0);e(n),e(r),w(()=>p(x,s(f).memories_replayed)),v(o,r)};u(C,o=>{s(f).memories_replayed!==void 0&&o(G)})}e(d),v(a,d)};u(We,a=>{s(f)&&a(Ye)})}e(ue),e(Y);var fe=i(Y,2);{var He=a=>{var d=wt(),c=i(t(d),2),g=t(c);{var S=h=>{var C=ht();se(C,21,()=>s($).distribution,ae,(G,o,r)=>{const n=P(()=>Math.max(...s($).distribution.map(te=>te.count),1)),x=P(()=>s(o).count/s(n)*100),j=P(()=>r<2?"#ef4444":r<4?"#f59e0b":r<7?"#6366f1":"#10b981");var D=yt(),M=t(D),ee=t(M,!0);e(M);var ye=i(M,2),Le=i(ye,2);Le.textContent=`${r*10}%`,e(D),w(te=>{p(ee,s(o).count),ke(ye,`height: ${te??""}%; background: ${s(j)??""}; opacity: 0.7`)},[()=>Math.max(s(x),2)]),v(G,D)}),e(C),v(h,C)},b=P(()=>s($).distribution&&Array.isArray(s($).distribution));u(g,h=>{s(b)&&h(S)})}e(c),e(d),v(a,d)};u(fe,a=>{s($)&&a(He)})}var ge=i(fe,2),be=i(t(ge),2),_e=t(be);se(_e,20,()=>[{key:"⌘ K",desc:"Command palette"},{key:"/",desc:"Focus search"},{key:"G",desc:"Go to Graph"},{key:"M",desc:"Go to Memories"},{key:"T",desc:"Go to Timeline"},{key:"F",desc:"Go to Feed"},{key:"E",desc:"Go to Explore"},{key:"S",desc:"Go to Stats"}],ae,(a,d)=>{var c=kt(),g=t(c),S=t(g,!0);e(g);var b=i(g,2),h=t(b,!0);e(b),e(c),w(()=>{p(S,d.key),p(h,d.desc)}),v(a,c)}),e(_e),e(be),e(ge),_(2),e(V),w(a=>{p(Ee,De()),ke(W,`color: ${N()>.7?"#10b981":N()>.4?"#f59e0b":"#ef4444"}`),p(Fe,`${a??""}%`),we(ce,1,`w-2.5 h-2.5 rounded-full ${de()?"bg-recall animate-pulse-glow":"bg-decay"}`),p(Te,de()?"Online":"Offline"),I.disabled=s(T),A.disabled=s(R),we(A,1,`px-4 py-2 bg-dream/20 border border-dream/40 text-dream-glow text-sm rounded-xl hover:bg-dream/30 transition disabled:opacity-50 flex items-center gap-2 + ${s(R)?"glow-dream animate-pulse-glow":""}`)},[()=>(N()*100).toFixed(1)]),E("click",Pe,O),E("click",Oe,function(...a){var d;(d=nt)==null||d.apply(this,a)}),E("click",Ie,Re),E("click",I,je),E("click",A,Me),v(Se,V),Ze(),$e()}st(["click"]);export{It as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/17.PvQmHhRC.js.br b/apps/dashboard/build/_app/immutable/nodes/17.PvQmHhRC.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ccfee224a5d538c1da9be8fe13a2b3e56402f407 GIT binary patch literal 3402 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js b/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js new file mode 100644 index 0000000..a80255d --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js @@ -0,0 +1 @@ +import"../chunks/Bzak7iHL.js";import{o as Ft}from"../chunks/CNjeV5xa.js";import{p as $t,a as Ct,d as s,e,j as W,h as y,g as t,r as a,s as E,f as dt,n as P,t as B,u as O}from"../chunks/CvjSAYrz.js";import{d as Rt,s as i,a as At}from"../chunks/FzvEaXMa.js";import{i as X}from"../chunks/ciN1mm2W.js";import{e as U,i as q}from"../chunks/DTnG8poT.js";import{a as p,f as u}from"../chunks/BsvCUYx-.js";import{s as A}from"../chunks/Bhad70Ss.js";import{a as w}from"../chunks/DNjM5a-l.js";var Dt=u('
        '),Mt=u('
        '),kt=u('
        '),Bt=u('
        '),St=u('
        '),Tt=u('

        '),jt=u('

        Retention Distribution

        Memory Types

        ',1),Et=u('
        Total Memories
        Avg Retention
        Due for Review
        Embedding Coverage
        ',1),Pt=u('

        System Stats

        ');function Lt(ot,vt){$t(vt,!0);let n=E(null),m=E(null),l=E(null),Y=E(!0);Ft(async()=>{try{await(async d=>{var r=W(d,3);y(n,r[0],!0),y(m,r[1],!0),y(l,r[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}catch{}finally{y(Y,!1)}});function z(d){return{healthy:"#10b981",degraded:"#f59e0b",critical:"#ef4444",empty:"#6b7280"}[d]||"#6b7280"}async function nt(){try{await w.consolidate(),await(async d=>{var r=W(d,3);y(n,r[0],!0),y(m,r[1],!0),y(l,r[2],!0)})(await Promise.all([w.stats(),w.health(),w.retentionDistribution()]))}catch{}}var G=Pt(),lt=s(e(G),2);{var ct=d=>{var r=Mt();U(r,20,()=>Array(8),q,(F,H)=>{var $=Dt();p(F,$)}),a(r),p(d,r)},xt=d=>{var r=Et(),F=dt(r),H=e(F),$=s(H,2),pt=e($,!0);a($);var Z=s($,2),ut=e(Z);a(Z),a(F);var I=s(F,2),J=e(I),tt=e(J),mt=e(tt,!0);a(tt),P(2),a(J);var K=s(J,2),L=e(K),gt=e(L);a(L),P(2),a(K);var N=s(K,2),at=e(N),_t=e(at,!0);a(at),P(2),a(N);var et=s(N,2),st=e(et),ft=e(st);a(st),P(2),a(et),a(I);var rt=s(I,2);{var bt=D=>{var S=jt(),M=dt(S),T=s(e(M),2);U(T,21,()=>t(l).distribution,q,(g,c,v)=>{const C=O(()=>Math.max(...t(l).distribution.map(V=>V.count),1)),R=O(()=>t(c).count/t(C)*100),_=O(()=>v<3?"#ef4444":v<5?"#f59e0b":v<7?"#10b981":"#6366f1");var x=kt(),o=e(x),f=e(o,!0);a(o);var b=s(o,2),h=s(b,2),Q=e(h,!0);a(h),a(x),B(()=>{i(f,t(c).count),A(b,`height: ${t(R)??""}%; background: ${t(_)??""}; opacity: 0.7; min-height: 2px`),i(Q,t(c).range)}),p(g,x)}),a(T),a(M);var k=s(M,2),j=s(e(k),2);U(j,21,()=>Object.entries(t(l).byType),q,(g,c)=>{var v=O(()=>W(t(c),2));let C=()=>t(v)[0],R=()=>t(v)[1];var _=Bt(),x=e(_),o=s(x,2),f=e(o,!0);a(o);var b=s(o,2),h=e(b,!0);a(b),a(_),B(()=>{A(x,`background: ${({fact:"#00A8FF",concept:"#9D00FF",event:"#FFB800",person:"#00FFD1",note:"#8B95A5",pattern:"#FF3CAC",decision:"#FF4757"}[C()]||"#8B95A5")??""}`),i(f,C()),i(h,R())}),p(g,_)}),a(j),a(k);var yt=s(k,2);{var wt=g=>{var c=Tt(),v=e(c),C=e(v);a(v);var R=s(v,2);U(R,21,()=>t(l).endangered.slice(0,20),q,(_,x)=>{var o=St(),f=e(o),b=e(f);a(f);var h=s(f,2),Q=e(h,!0);a(h),a(o),B(V=>{i(b,`${V??""}%`),i(Q,t(x).content)},[()=>(t(x).retentionStrength*100).toFixed(0)]),p(_,o)}),a(R),a(c),B(()=>i(C,`Endangered Memories (${t(l).endangered.length??""})`)),p(g,c)};X(yt,g=>{t(l).endangered.length>0&&g(wt)})}p(D,S)};X(rt,D=>{t(l)&&D(bt)})}var it=s(rt,2),ht=e(it);a(it),B((D,S,M,T,k,j)=>{A(F,`border-color: ${D??""}30`),A(H,`background: ${S??""}`),A($,`color: ${M??""}`),i(pt,T),i(ut,`v${t(m).version??""}`),i(mt,t(n).totalMemories),A(L,`color: ${t(n).averageRetention>.7?"#10b981":t(n).averageRetention>.4?"#f59e0b":"#ef4444"}`),i(gt,`${k??""}%`),i(_t,t(n).dueForReview),i(ft,`${j??""}%`)},[()=>z(t(m).status),()=>z(t(m).status),()=>z(t(m).status),()=>t(m).status.toUpperCase(),()=>(t(n).averageRetention*100).toFixed(1),()=>t(n).embeddingCoverage.toFixed(0)]),At("click",ht,nt),p(d,r)};X(lt,d=>{t(Y)?d(ct):t(n)&&t(m)&&d(xt,1)})}a(G),p(ot,G),Ct()}Rt(["click"]);export{Lt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.br b/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.br new file mode 100644 index 0000000000000000000000000000000000000000..8c0615ff354f5fbc8867c74268f1696ecff093b5 GIT binary patch literal 2023 zcmV`_eVI;}=oOaA)=+gab)Bs0TA+@?06MuO*`Tn^Y zx9O}&d(Tz07YwK0VY6INEbcOAH4a$JJDog%_BITAg;tQKSflkf(Etu&B8J=GK!4Xz z(`z6s8Z6?5K3yFqkTxty8hU)3eo_8Fi|HrzR6GMDYru8@fx+|Q+&a!6IPH-- zfisy4$$awwXvdC;y8WF%|D0ZS@|!JK4LRLz9|?NR;&gYS9`Nba$j+IL_XJDM6NfZ5*cFrU*2%1RYE^0aY(kHAT? zT!u?C3XqjI15v#)G8xSGRv5vys0JKRG9Kw!y29>BS`y%1)U4-Tj+)qFR_oyTa*1?I za=w?g6nCD8GOL`E29c&*QhT?Q3vqvJs-*n+e>^xG_ zhFaQ9PsYlWsVK2DAFN?bM|B!^Hr_!3iwxGUH7pL3jD(uiA?)si^n8yg!Lr zO&AjyT=8-4A?Q3YTDJ4eu_f~0$3Q}=lNsmF&XMPqS%|I&M)CmXdpQGqMhBGJd`a=L zxJUi+>YK{qcH%h;*myHT+Y9$e zJo92Z&WvP*)s~^SgZNkrj|vVk2{3sf4_sp27AG;FkZ+wJET|R|L->Lp2Of7>4J?-%;g-mnnxX>6Bh1_{?zcz2g&U?~HYthy zDGnquV$z23@kWOK#%tM?o*|LaPLO`;$2N7^P1>fnD|s_i?3;OpGcH{(dhR8aR~~DZ zJi2VR;nmHSXX~183$2msEG&xiQed}=@{N0buV_X8j;SFtmL?r*D2>fbiZ~FLY9DDE z*TUq#>R35Z>Lf69L_QBr%Z}VXb=E@_46k*Nw%C4L=mC(D6g5&7zxY1|9cGQhs1lSo zCMKgGC+%6+FvY5CT&f#|CgfP%Xc+k67B-bJmKg!}N93#ucXj`J7@O>BoY>4IMg|=C z1K7!Oy1R<%qs&vD*#{kgAq-t91KM%Joi5^S-qqO>7lzxiEMvDy<>q$#dt!%Y;xG8; zUzAxf=F4T4$6U6nY>@}CKB99d{a7#kYsdjrSV6a!%(6s5p-lVb|?r!xar>`+k5 zKHoSkZ+OPfbcDb81~?Sr23F7hR1QE^qR>Ji%mGR0W|8NR$x(V_d0`kWlJl4aqKI`AsG!TtZA+F;*rpR;FYE zo;juWrkje1GKYz2(dqL8hHK^D$*P$9$N+N_Qx75&x}Or;*28J=(9pstB^2IB6vVF7 zgN;r(2Q#v^n7;jV#5NcVZ2OrI}Xlxp2mIX zF7D!@*Wq~<4#H$@0O$e@FR6^%Kj|u}qD7=|-zI6Q#^Y2t_#<*#X*2Pc2F^EYDVg|C zKEBJG{!{03%_US}Kv)s^wZV%Fk5rXjgQMG^RK##YlV-^hyG(1W3(8w}SR3IUbbTIo zI|96Ug(99}Ce0RubR^S_K@9tZwlv-RD_q4tv#aKinfndZ>TtE&tFll@LbaG#N+K_~ zEF2(43w(AzG~HxEZf?KJfR{f^YBHF?+I7S}X9A7pdDTS2dtLX&cGYH4Jw!%?ah^Dn ziX&AGV``7hB|F+C~!wuk+5v0VyWD?-3&gA=7JL>(E^%jgd~XwQn@fx zoN+Yc&Qqk)f~cY|aY>oD%Y4YnW&bMtE-PJnrXZao$G|fUwg_ZJ?*MHDsVhUSIL0$b z!h)~YNjNxtmrTgbOr`WT-((bLMs2dFqb-o*#zh?mzR9Ark!oPh=3)kYV`_~KR38$@ z;F6Q{25?L`>94PUQdN@%phiKXf(nDA`!b{ch-Tp8N5h3V_l%)GQlQ5$rkvVV1mS~N F`~qHf?SB9O literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.gz b/apps/dashboard/build/_app/immutable/nodes/18.Df4fIuu-.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..43f6179858839244674395ce1b75808f93a7b49d GIT binary patch literal 2286 zcmVDKWNdAIAm zIjsy+qv7e@X~bm8IymbkQBV?Xoe$OLom`ehV-np!kTkXsTpCkQFrjDdNUIF1~4Rzl!dNx z&D>`)^a6>>j59w~M)P3H^+wGX0?yXV^b^lz^kX`apPDu1_xJCob=H@$Sua_*TeHyf zRc=-p4f=;PnTIM!O-F^O5^bYuG!N2Ph6^oJIhuLO^yqql(PRf(B+z7K<72az`To*1 zWSGb>_0Wq#Q~Ex0vqb92j%6)SvY#ImWT@Qxqn2JBKkC)G7q!An8W_!0l-q1zZZBaH z=3k(B;O^SKM#%!-lo>{kpuKz|+U*kBpT}M~a`Hw@ZT$L2(ZPh4SgWAeDX;4DMdQpgGssgVY`7R5(=C(e2P+KKP8cRo+6SKwwnVSQ% zzQ>}GN_u`YHYf7{7EqUfhff0hb9~*z>kn`pVBKh5C{!Wwk+r=P6R(@mWF2)WUn+Eq z0$~HQZmoi4kAhsU_rHbpOa)OgVONt_rRxZv(igTLqJ7qU0aXDfPv&QA)*lP}UzFBr zdo%lfH2y`kr9t6-pjThQj~+?IQ=8^W_WsIKeR3`L*Aquc(|Fc^JVea`q)vMk zq4b$fut&-LDWjf@>F?n<8ui(-B>o>T{`b(dGsSvQ!Y_^ZDYPQSRLX zg0){Vwr!PO#76TX3t1}))5!N+S>(Dvv}n526+S-NcByNR&7It5L9W|1TXgi7)YYo1 zq4R&<)r{ulBt;dlOO!|rt*T?T==zOb7CO2!pCXSCMkuBm$VUjzEYa{4vd})^Vdnb+ zg5{IHeEMdeaFXmGm+2&QxUid3OeRw~mfn1gxps3(x3$Fn!d=)FjR_ASxwgL3Au!%reru<^L)-6c#or1*l6of~pb>Fy3sJyFUL(DCh2DERhxfIi8elI-bH^nD?EZm0Y`iAs_=7jQ$PT-cWPw$BR%MKL`mjg%x63h2>8iX@-j z%hQhJZwsx2wB9b$&_%mFkJ_a@q^O-y)Gh^F>5QG}jD6x)P^;?HAooSZE#;hY)CUJf zlqKRMvX=dUlkAzqK_!qmuT&~)dX+%N{IlKsTydf-L;+PH;9{>Mu3Y=3mHd$_Das;%vpFMCy^@IANh$iv81JQvWj6_4i8jS7LT zo$`nxIG+RoC1z`7j6fNI_f^#m?FOrhlhqS`*(wN zrE}NU?}1|Hrr2q)D3*?glYM4Yb{j14LUUoD7U#DDJpNm8Mk2$$BF@LW4|zfUEBZMr zkl)!UKO?|HowmDq+J=j?edrFAgB2Ab-DJ4VMt4GYRxwZDqR2+`D1YH}Fw{iR)mwIv zmyw`8a&bSae%AnQ>|=^;ZYzF6Ax?QtaDE+R#k=#pF8Ok^jO`K6;dV7@eA<%^?iu9gjF~EsJN5!=As%=@cqDCsDd8c!{XITcsDoLYIt8_Z;ssUkyYTtOicl>JSXvct9 zBB~_R8r!X-7Bz0iOTDOAs_*XX8nf#b7rHOcwTjf~-1MNu1w9Plf{R6VZi?&->F2I+ zc|t{Zw=B9b+WmR79s7#HHnJ53yJagrqHv4~y$d_#qau?RD+Q=Rmk5z4x03pvqqqe% zOK0*1@i`;u(y6bR_riucHNudq!N?>$QKh|=&`GrSA88`IAPjhA%HiSi+}e=&n= z!o>CB@|AFji3OShJnZpNu#R$cbB zb&X2giX!Tcm^Hrg2?9m-afPO}x!LDq6f-f4c^fXZN`layt88wzc~@^!fILcCf|{w+ zS3TWVJ=BQXa0zE{1$Qtk_}YQn`F+rd{3s#Dwl%_S>y~=Mn}>Y9T=3|KZ@}$R>Fl0f zF~Sv%8N%&|q7aD6NF~J2d!YaUc}P)4=`VstMo&vdwS+9L#LMr9W~JOJejpJj+;3aH&dM`DZUJJooLD7LUK-;A6$Dxw~H(l@bsn9LItBwajcS-Oz9Fd z=i(!ttWvSMFcgZ4T6{Dtz8O{tdxYF@e9yTvV1PhvUkhj<7qbiG*K@PqMMLHKFU(W@C$AF)aTKZ$XN`aT7ws!> Ih>;cm0FS_ioB#j- literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js b/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js similarity index 85% rename from apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js rename to apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js index c8c3513..dddca2b 100644 --- a/apps/dashboard/build/_app/immutable/nodes/11.BOa24N9o.js +++ b/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js @@ -1 +1 @@ -import"../chunks/Bzak7iHL.js";import{o as pe}from"../chunks/DWVWfZUn.js";import{p as ce,s as b,c as me,g as e,a as _e,d as i,e as a,h as c,r as t,t as g}from"../chunks/VE8Jor13.js";import{d as ue,a as K,s as m}from"../chunks/DHnEMX8z.js";import{i as M}from"../chunks/JkhlGLjU.js";import{e as h,i as P}from"../chunks/ByItJEsC.js";import{a as l,f as v}from"../chunks/7UNxJI5L.js";import{s as Q}from"../chunks/ussr1V5_.js";import{b as xe}from"../chunks/B5Pq2mnD.js";import{a as fe}from"../chunks/DcQGRi49.js";import{N as U}from"../chunks/BNytumrp.js";var be=v('
        '),ge=v('
        '),he=v('

        No memories in the selected time range.

        '),ye=v('
        '),we=v(' '),ke=v('
        '),Te=v('
        '),je=v('
        '),Ae=v('
        '),Ne=v('

        Timeline

        ');function Re(V,W){ce(W,!0);let _=b(me([])),y=b(!0),w=b(14),k=b(null);pe(()=>R());async function R(){c(y,!0);try{const s=await fe.timeline(e(w),500);c(_,s.timeline,!0)}catch{c(_,[],!0)}finally{c(y,!1)}}var T=Ne(),j=a(T),u=i(a(j),2),A=a(u);A.value=A.__value=7;var N=i(A);N.value=N.__value=14;var O=i(N);O.value=O.__value=30;var Y=i(O);Y.value=Y.__value=90,t(u),t(j);var X=i(j,2);{var Z=s=>{var d=ge();h(d,20,()=>Array(7),P,(x,f)=>{var r=be();l(x,r)}),t(d),l(s,d)},ee=s=>{var d=he();l(s,d)},te=s=>{var d=Ae(),x=i(a(d),2);h(x,21,()=>e(_),f=>f.date,(f,r)=>{var S=je(),B=i(a(S),2),D=a(B),E=a(D),$=a(E),ae=a($,!0);t($);var q=i($,2),se=a(q);t(q),t(E);var z=i(E,2),G=a(z);h(G,17,()=>e(r).memories.slice(0,10),P,(n,o)=>{var p=ye();g(()=>Q(p,`background: ${(U[e(o).nodeType]||"#8B95A5")??""}; opacity: ${.3+e(o).retentionStrength*.7}`)),l(n,p)});var ie=i(G,2);{var re=n=>{var o=we(),p=a(o);t(o),g(()=>m(p,`+${e(r).memories.length-10}`)),l(n,o)};M(ie,n=>{e(r).memories.length>10&&n(re)})}t(z),t(D);var oe=i(D,2);{var le=n=>{var o=Te();h(o,21,()=>e(r).memories,P,(p,C)=>{var F=ke(),H=a(F),L=i(H,2),I=a(L),ve=a(I,!0);t(I),t(L);var J=i(L,2),de=a(J);t(J),t(F),g(ne=>{Q(H,`background: ${(U[e(C).nodeType]||"#8B95A5")??""}`),m(ve,e(C).content),m(de,`${ne??""}%`)},[()=>(e(C).retentionStrength*100).toFixed(0)]),l(p,F)}),t(o),l(n,o)};M(oe,n=>{e(k)===e(r).date&&n(le)})}t(B),t(S),g(()=>{m(ae,e(r).date),m(se,`${e(r).count??""} memories`)}),K("click",B,()=>c(k,e(k)===e(r).date?null:e(r).date,!0)),l(f,S)}),t(x),t(d),l(s,d)};M(X,s=>{e(y)?s(Z):e(_).length===0?s(ee,1):s(te,!1)})}t(T),K("change",u,R),xe(u,()=>e(w),s=>c(w,s)),l(V,T),_e()}ue(["change","click"]);export{Re as component}; +import"../chunks/Bzak7iHL.js";import{o as pe}from"../chunks/CNjeV5xa.js";import{p as ce,s as b,c as me,g as e,a as _e,d as i,e as a,h as c,r as t,t as g}from"../chunks/CvjSAYrz.js";import{d as ue,a as K,s as m}from"../chunks/FzvEaXMa.js";import{i as M}from"../chunks/ciN1mm2W.js";import{e as h,i as P}from"../chunks/DTnG8poT.js";import{a as l,f as v}from"../chunks/BsvCUYx-.js";import{s as Q}from"../chunks/Bhad70Ss.js";import{b as xe}from"../chunks/DMu1Byux.js";import{a as fe}from"../chunks/DNjM5a-l.js";import{N as U}from"../chunks/DzfRjky4.js";var be=v('
        '),ge=v('
        '),he=v('

        No memories in the selected time range.

        '),ye=v('
        '),we=v(' '),ke=v('
        '),Te=v('
        '),je=v('
        '),Ae=v('
        '),Ne=v('

        Timeline

        ');function Re(V,W){ce(W,!0);let _=b(me([])),y=b(!0),w=b(14),k=b(null);pe(()=>R());async function R(){c(y,!0);try{const s=await fe.timeline(e(w),500);c(_,s.timeline,!0)}catch{c(_,[],!0)}finally{c(y,!1)}}var T=Ne(),j=a(T),u=i(a(j),2),A=a(u);A.value=A.__value=7;var N=i(A);N.value=N.__value=14;var O=i(N);O.value=O.__value=30;var Y=i(O);Y.value=Y.__value=90,t(u),t(j);var X=i(j,2);{var Z=s=>{var d=ge();h(d,20,()=>Array(7),P,(x,f)=>{var r=be();l(x,r)}),t(d),l(s,d)},ee=s=>{var d=he();l(s,d)},te=s=>{var d=Ae(),x=i(a(d),2);h(x,21,()=>e(_),f=>f.date,(f,r)=>{var S=je(),B=i(a(S),2),D=a(B),E=a(D),$=a(E),ae=a($,!0);t($);var q=i($,2),se=a(q);t(q),t(E);var z=i(E,2),G=a(z);h(G,17,()=>e(r).memories.slice(0,10),P,(n,o)=>{var p=ye();g(()=>Q(p,`background: ${(U[e(o).nodeType]||"#8B95A5")??""}; opacity: ${.3+e(o).retentionStrength*.7}`)),l(n,p)});var ie=i(G,2);{var re=n=>{var o=we(),p=a(o);t(o),g(()=>m(p,`+${e(r).memories.length-10}`)),l(n,o)};M(ie,n=>{e(r).memories.length>10&&n(re)})}t(z),t(D);var oe=i(D,2);{var le=n=>{var o=Te();h(o,21,()=>e(r).memories,P,(p,C)=>{var F=ke(),H=a(F),L=i(H,2),I=a(L),ve=a(I,!0);t(I),t(L);var J=i(L,2),de=a(J);t(J),t(F),g(ne=>{Q(H,`background: ${(U[e(C).nodeType]||"#8B95A5")??""}`),m(ve,e(C).content),m(de,`${ne??""}%`)},[()=>(e(C).retentionStrength*100).toFixed(0)]),l(p,F)}),t(o),l(n,o)};M(oe,n=>{e(k)===e(r).date&&n(le)})}t(B),t(S),g(()=>{m(ae,e(r).date),m(se,`${e(r).count??""} memories`)}),K("click",B,()=>c(k,e(k)===e(r).date?null:e(r).date,!0)),l(f,S)}),t(x),t(d),l(s,d)};M(X,s=>{e(y)?s(Z):e(_).length===0?s(ee,1):s(te,!1)})}t(T),K("change",u,R),xe(u,()=>e(w),s=>c(w,s)),l(V,T),_e()}ue(["change","click"]);export{Re as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.br b/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.br new file mode 100644 index 0000000000000000000000000000000000000000..0a55f3ddf6164a8004a4c61f45b4b544bdfc3b73 GIT binary patch literal 1554 zcmV+t2JQJ9UJoFQ!nSSm5htdhiU`X&i%e>(Uf({i+*TM^vA&$RXA~HLv1NNvr~jU- z9iieS!{5G`WxapHWj$$n#WR>38IRldW^*wHSlM|2njkzSy*0E;>7}WB zd`HtVeJHVkw!16D0MhN`k#DNt5MOYNma1%y-5A@RPJcHWMwNGw&&(yc3wcW=O@eFs1aG^cDL#2lk z{^lz#|F)$sT-L5hxm?X670a^mMWyb(Ce%_ADtl8?eG2HTqw1Ecp)^ZumE}3lW_eV_ zoDer(PQ#Y@CcFtoyvhB@Lb-XW9Dy zXSL*3NhG_Ki{8CiF@djC2h3yIpP8~G2+8q7^sLh=&7Of#NNS_va51VUN?;xe35YD*1k;&5hFG72uDsL;Yz#_I-~+Wex5!LupfWF% zkH6G*%B5nEu%bzI=qdUpKE{wdM(ou=Jcm@q#IY;2@`2XmPxV$LBYT_aymu&+CA<)c zQA0H8{B)%bD_o`AaKr&>nGQ&d+(XtERJFUEQkjbF46s)Fqlwiw@~^f$yUdG}fn$9h{9e5_BRb{34tS z^n$%%N~!dqSEIG0qp5*~TeJ_g4W!YvZuGGlwFL!IrNFOHZdE-aRIME1n4^?^MA|Y# z+X4+HQu9*QY|=`qxp_2Of-!1zpDPsmt_XX%(}}TcjJ_E0R7L~n&kP+?&ZLtZGv;%N zwzpwtf8jV*8xf|)ajRzB8B6!Mh34=lBnrpnmEC-cD~T=1EeX%URVN`$b0Ao3yA8ec z1T<)2_N$(?;+P2qvGCb$pOmm8_QTj}LvhqyYgZdTW$DS}dkRTuIQ$pJ)^%LbG{9IG zngM_*WWvHXAe30x#S_mu>vq4MYhGjAU^lc^2ocqd>DJPH$9t?B)r;vRJm!4CdQpp* z#Vgh2*%Y>?gP4|ue zcN+y@IoyU4sjWCW=TY`(y}^mA_+nHe{t zSUO@YFMGuww|siut&-av5QI$C+!T~1aCJlT00-1^vWou6O4bbR;yx$t}} zw{Bg$m}1UruVIXg`@Nl!g|}X7vtC|d#`XK7^jp}T>QYD&sttFQHPQC_Zmvu7ES^DO z0FQ9yNt94svvav4k;-gxhe~ti&4?Ws&P08~vzsrUpV#nRlB5#a>fVwj$nILjs*JQq*6fqt#jgIMJl%%EakL}E9L37Z_E8xC{8M;h!o2T zib}_TMm5caE#HbgW`3f<}KxR5s12nxQ*0MxiCe EBWsEe2><{9 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.gz b/apps/dashboard/build/_app/immutable/nodes/19.CMsn8k5A.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..5d017b5266cb3adf0c46f04cf249435ca3ba5156 GIT binary patch literal 1766 zcmVmFN5Xer|enGbSboc4gEdeUYbZ%?)dLxL6bZ8pK4`R5d-ksM6 zrq)uO=lp#?3Q8`ngKMB)WF)M0W686eOM(Gu-r)+!m6l*MbOCk z&>R*^EiC&QTL{3L09T}3*E z5p@oKt~;Dur*D7H^!2KP;}X*zETeUYV>5d5`FqJ$9USXV8^}n6d)}2oO!3uAaKV*V@C zhi7Jru8k$ib&-ZLWMzy*suE!(%Zk{@TKk|8s!{tTq5X|8CKG{V6SlL0iZ)PImX-xF zwK7N9gf%_nc0!fZ+6P&?qfsIgohxaON|B8uGBTEdl_9b!kti2wU)B#A*<+H)Mv^gW zqKGw@b@YljUSTz^984zCC$vgakx2?G!&)01Gynn~!;KWZSe8gxnHXlQ$SvxNj5RBN z1GPLuC$Y@0?>=FLAPzH8uF@g%797!fCg!6=rEKgV8@xl6pjf4n1+hpn=08$jg!_4^ z>m;6fza;c}qx{6OZIr=BSLdP3nO!`XNh&fU8@`7Y6VY7Jey|ZLm$9&FBvBSKf9I)k zqHA3w^tVwK{!tc5o*!5Jwr?`Nsnm>5+`kF4i1A~YahI5 zqk|V~TETmz*W*+i{o_>pY#v^@dGJtITdNc1p)t$Kl`b{>-DgkK#!a>4(b?dUu~#S& zB^$GyGDbB5}S|t)r_CX`^p)>9(Tv99H3{GI= z*QTdB0?(YtmAPAXbTJt{9Ta9?7uH=RsZJ&8ieMP#I%D0q$g68jXE2oQJrs(GIcUsZ z7u){M^ZVQ0^ZT#Y_ZwA-Pll!HO{-U=0f5k@#9!!FG7TjDN?&-S6-$fmco!!U-`o;H zC%lVac!Z957yCPe4tW=+MI4h>CNUxXuD$gJ=qdn_IWhQ>lpKNfp~Cvl)B|U-OQ{gbujC z*Mt^aVSxvPHVHlA0vDupR3C}Bko>5AcUL{_xo__dSNMpuI&*VpY4&%V{UcYnLs}o_ z_K!>Zw&(2Mxxybw>-*gPeQAH~QHu*gEgleu{Kgd?&?ae3;q5POc-uXNye~0nML48Q zkAj*YlS6S?;qnlDmc@c}pj@Y5n9x%$@Cl(?T;Nkeh2#Qn zRV~L`Roy?h!du{B!1x0!KY;vcWq#lapMv=<7x)1Py`}!%oKQ~ci(fBw6RSXCkNTby zCZ&48F5?p@xbH^s6VB*8oU^_=oBL>Mia*~-tVuo9p}d}C^7ik)YybWI`1S75ZjBrs z)@rjB(wPX9odCSP{hNd5(#jM@`O4-p?c37174 zV-PLl0&A#R6IxMBfZ}gk)2H>tE(i0yWe!bdtqZIqg^16A+rIb9FDcF?nUR^r4k#k#tE>i1AE`OEZL)JfVEr?YxtkGlFkpK_rdd@?*arc+6AUZJZ z(W{Dg`SeC;UEpujIPMd2Xz*WT9}f6@ayaMSp}|s8pX?h9;ryzc>xxYTe+z1~pqGS} z5*PD9854*Z;4w8W`xkmm=$*u5R!DrabemUmOIosY|D`V7-^D;DnNDSDXRZJIA8ln? I$zKlu03c&#Y5)KL literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js b/apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js deleted file mode 100644 index f2b50dc..0000000 --- a/apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js +++ /dev/null @@ -1 +0,0 @@ -import"../chunks/Bzak7iHL.js";import{f as m}from"../chunks/VE8Jor13.js";import{c as n,a as p}from"../chunks/7UNxJI5L.js";import{s as i}from"../chunks/BZYVQ1d5.js";function d(r,t){var o=n(),a=m(o);i(a,()=>t.children),p(r,o)}export{d as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js.br b/apps/dashboard/build/_app/immutable/nodes/2.BFaWefTK.js.br deleted file mode 100644 index 982eff87258be84e30e7f92e752dcbeb835cb2b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmV;A0C4{s_5grnWln#imZ|oHG=a$h2A@)&LWFk&@LMAf4Aa-0xaPII9FP x|Nq{%8rw4e#e!XQ>vas5p+nX+n9>Wwr^}R zB=Nt8p3KvGc%Sckr7~dsma#xIoo-!_eR&(p(}lg1H1b{AN)u|Zr9j52pI6FhMSwD(EA7W*^8+>Y`A+u$003UrTowQT diff --git a/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js b/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js new file mode 100644 index 0000000..e1fb4c2 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js @@ -0,0 +1 @@ +import"../chunks/Bzak7iHL.js";import{f as m}from"../chunks/CvjSAYrz.js";import{c as n,a as p}from"../chunks/BsvCUYx-.js";import{s as i}from"../chunks/ckF4CxmX.js";function d(r,t){var o=n(),a=m(o);i(a,()=>t.children),p(r,o)}export{d as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.br b/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.br new file mode 100644 index 0000000000000000000000000000000000000000..0461b7b80fc3de6d64e77c1b338c2c4868e817ff GIT binary patch literal 169 zcmV;a09OAS_5gq^3T)>UTbkWuNYWv$o{z8DE0G_ffi5{=iG7|1CL`ls<6}to)KVGd$+6diPQKY zR>W$13m7l#|FyG|>}XuggER&n%Q_7Z*TdWitZNNX>(KR)`L7Hwe2eQldSk+4U3es{ Xam=x3HhGv6otPu}{IZ42Vve5x`xH{7 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.gz b/apps/dashboard/build/_app/immutable/nodes/2.CD5F7bS_.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..4200ecf29855b7ccb4940d4985417eff7c42ce38 GIT binary patch literal 183 zcmV;o07(BIiwFP!000026J5=*3WG2h1mL|-Ax;UTaVc~V3soo`x|Kp5LsX15{~wYl zqWJD5PU3XKea9(n(E6D3M79I;F3D%nU)A%)I~S*FYnLVxF4AjbQSW3icJF&>=e?9c z0uv$3age*Q_>|LmKX5^+qm=#QQcU{0$z}lQ6+%=I%RF61VI$0dP$n`>kfw?VMrd~P lT(;_0*%~M_#4@C7J#8;lc#)_LLJfXRPk%#5S}peg0051MPGm("/graph",{replaceState:!0})),a(),t()}export{u as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.br b/apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.br deleted file mode 100644 index a72f272af24c0e4d5a78e2c9747e43131b37b38f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmV;g08sxMM*%=&aZZ1uwyN}m>?Gk zZVP#@x_iT}H6XPVh#YadsB2OXR81@nt+S>^d^+*&fmAebVuMj6Yq)3v;L%tERQdhB dP%+t$em1rD$!dmikpd2vGvh)*csV(h4RYaNQ!M}h diff --git a/apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.gz b/apps/dashboard/build/_app/immutable/nodes/3.BbrO3ed8.js.gz deleted file mode 100644 index 52fbb7adbdcedcf05a8afa77f542ab2e4f00afbc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmV;~04Dz*iwFP!000026J5%7 zypX0~E&cBjPobwd%r}gX8jTI3D9*}8-Rt=03HL9tJw&%UT#8}4HdR_r<|nW1Fn~JH zeQr>C@;AMt`SoA)Ws~gCOh5gBa1w^{*7CnL(csI%Nja43{p={KHh;^! zQJEE}f`$l&v@-W%| diff --git a/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js b/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js new file mode 100644 index 0000000..77ab624 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js @@ -0,0 +1 @@ +import"../chunks/Bzak7iHL.js";import{i as p}from"../chunks/Bz1l2A_1.js";import{o as r}from"../chunks/CNjeV5xa.js";import{p as t,a}from"../chunks/CvjSAYrz.js";import{g as m}from"../chunks/S0ILvWpb.js";function g(i,o){t(o,!1),r(()=>m("/graph",{replaceState:!0})),p(),a()}export{g as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.br b/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.br new file mode 100644 index 0000000..e8f7f30 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.br @@ -0,0 +1,3 @@ +$ ep`i$fXfa\[mdi{wyJQD+]JJEB]yw(. +-qŭ<4 u1'0YGY^ӎhXgDS +$WY۟D}"K&J=h:*9Dѽ@)zv 7 j9B%  QGb2b \ No newline at end of file diff --git a/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.gz b/apps/dashboard/build/_app/immutable/nodes/3.D16O8s7t.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..d7c5f09701715c4e68bd4b1f0a6332ecb6ad5077 GIT binary patch literal 197 zcmV;$06PC4iwFP!000026J^a!3xY5JfZ=<;LOpFT{0JgQ3am?kbP$?E(*@KPp)(vItTY0>hk@s0zow)7mkW#fc&t|PT@V@Z=K!MNFr`p+&EObSl8HsR_Ggo^1WB>?~c$$VLX literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.br b/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.br deleted file mode 100644 index 43b45efd5b54f03d5c90c4b701eab2d6ac8d929a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3024 zcmV;>3orB=(Ip}(L>0iQz&4f*c3{`5^Z&!akYo);L#RgCV1y*IwttyUDwvgy7Zi>qI+egOw&e}-~oAy-r1ozFE@SLosu+KfkSdSm<#!FR_JXOe+w zFVuHU40xve1UH?@>F1if8KLw0cKiLw?65_bbKOKacgLU4kEq^I%8R$(U&Z)4ASd*$ z=c#>Hejm@SL3%Fm7zTWDkX%ZtQ9$5tu}f-ZZs-{f_(6jl z2`L@|KH#QRQPt)-oH00^R$Qm4)gbiySmyr#mx*)NRIQQJ#nAeN8j&?d6y%e-Ew}-c znZQUj41JyzX#eke+hqS4cT#RDl~R3Q%Z!zulU(eV#oBQ&mQL>{o=0ZrRoKEk6mm}0 z^Sn`TmU7is_on_Y^?8{c_;hy}N-I3MdSPV!(i>QFaPHyuWZrw=G_DecVRWW&DhCCj ztRHNBbMYFykx+HPl&}#s)_mh+&Rav`9aU(dpxHHMq+DP@?YkZ?0}=5nF9~rdD+SA- zl0OlBRyK8!peQ|$oo#2sBDJJfm}&my?<$Xv^$aR9va@$h6PqB zb~K_%O1!QJhFu(w4AhbbZDkTdh2-$-t>f4d10BCF^I{@&2=TI2FlyW@ktx!TS+7tQvB6lK}9)qt#_vaq92#wAHm zUHbCcNXNYb+467Hqe7>IE+D56Ppb=4D0ZQYsSL9NqJmQgelgb1%uTp$K%!vO8idyQcD+p3S7L=9ZZ9L^e0KPQ-V{adPwV z(@ql(7P;$+C~sY_g!Q>jODu+n_IkQi3-`X7`Ad+iM_D1e}^j ztK^e@O(%zYceUIP-u^dmT%YT09s0e4gnJ{z5MY;u7@3J+I8LNIW_c9;Q;i`>V-L-#G|Wdr@7gbnHyI7V zGsO=7zn+K{d!oOj;m-<8H z2lpx;m~MZR6^jOuabkakOt0h)45booZ|rRn6g@}H8o*hkOYuG5P|CdYO(~`Kd;`)` z_%D!!Silf708Ge)7eq&3>c#oRj6U9z?RKV)cESOzz3z;-Vxv++i`cG=fTf?z zK(>ah=`E16hJmCe1*j>Zla2C|1l31D>{xXHX*CFl83U4CuJpNm4@-DZ9R2KXz9{tC z7Hqo=?H|JSbjI3`gP#!op+&`V)g=hNm|zdt z4-!1%3AL8!Wohl8@G5aE0$1E|vCE!}B#HFnz=O6#T{lVJ-Pmgh21Eo=%rjYFKj0Ly zE+VmSYjh+F1w+5B6>wPiCYOexNo)`hWP4E?9wb4r4F~u{tfqM`8=>GuH1Srv-KAW@ z?6re~zY6F6QOPjd4DP}O&iI^imuAgEu5rUZVo92oXTt)&d+!A}X<1H)x~cy3pc%ev zUd+NjkUAWi-5c~r$1inO1PRNP$gx2nTp5TyacT325z>Q?ptY<(@`ya}pvF5b#n_k^ z2vFYiQH@!z>2R16d$k0kx>_FEeei&jZD`PQ90prj^+#_GJ3_MO$08GY{M#Z&lffKb z_kR;=zDL07a}(f6#G%)ujxola{Jfr67T6JNZz$Gc9s}?U)wCkRxTzmwg2-`|f{!y= zj|4HN=nO(OuXy6o;34cKzq#T=lfA%{wHzO3HG_3{o~l6s4c{)_;YwG+D&Q!C&;i6% z%J++E0_bduw40rDAcAPID*%RE|x*KX`HVtHSa*!VZf#XHF!1BFCh7QihFKW3*Z_BDcW!6Q#WD5Sv^MJp2U=X}t>@8}B7DP5U37{?B>qBl-ygwg67eqlOq zD*>m87qj$)HbVJCY!wu)`pu?yH-=$vhu$IXWOt4B)OOZhH0i4IHg&h+(Ui}8gv5Ka zUgF2SSFhs>0D8IL9^EMPuKiwmZuaM%{!IDX>^NbsiMyUNI|F-97?;vEH*{G}XqIZKkYbHCEgh2dA^J=~b)=J}mS#_XaT z;Bf*NoK)p~Lb#m0xO}9NdNn*6_Ia{HB8j%PDPy?B1+sFyZ3>+G*$^#2)cvAv`hsuS zcd>qj8JW#xH1Jv9?(5T<=0%deFjBfjqCR!*Onj^CQZu1LFgZo!Fof69 S0|cHgmy^}yL`$(1oA?DdJ??)1 diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.gz b/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js.gz deleted file mode 100644 index 28560f6d55ca6dfe49e4c8f9f0983abb3398e727..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3518 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 diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js b/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js new file mode 100644 index 0000000..7b83027 --- /dev/null +++ b/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js @@ -0,0 +1,8 @@ +import"../chunks/Bzak7iHL.js";import{o as we,a as Ne}from"../chunks/CNjeV5xa.js";import{p as Me,s as A,c as le,aB as ve,d as y,e as p,t as L,g as e,f as Ee,u as de,r as v,a as Se,h as d,n as me}from"../chunks/CvjSAYrz.js";import{s as K,d as Ie,a as xe}from"../chunks/FzvEaXMa.js";import{i as ue}from"../chunks/ciN1mm2W.js";import{a as E,c as Fe,b as oe,f as X}from"../chunks/BsvCUYx-.js";import{s as o,r as ge}from"../chunks/CNfQDikv.js";import{b as Ge,a as Pe}from"../chunks/CVpUe0w3.js";import{a as he}from"../chunks/DNjM5a-l.js";import{e as ke}from"../chunks/CtkE7HV2.js";import{e as fe,i as ye}from"../chunks/DTnG8poT.js";import{p as W}from"../chunks/B_YDQCB6.js";import{N as Ce}from"../chunks/DzfRjky4.js";const Re=.93,Te=.05,be="#8B95A5",Le="#818cf8",Oe=140,pe=8,De=4,Ke=12;function je(s){return!Number.isFinite(s)||s<=0?0:s*Re}function Ue(s){return Number.isFinite(s)?s>=Te:!1}function Ae(s){return!Number.isFinite(s)||stypeof b=="string");M.length!==0&&u.push({source_id:N.source_id,target_ids:M})}return u.reverse()}var Qe=oe(''),We=oe(''),Xe=oe(' '),Je=oe(''),Ze=oe('');function $e(s,f){Me(f,!0);let u=W(f,"width",3,900),x=W(f,"height",3,560),N=W(f,"source",3,null),M=W(f,"neighbours",19,()=>[]),b=W(f,"liveBurstKey",3,0),S=W(f,"liveBurst",3,null);const F=22,J=14;let B=A(le([])),G=A(le([])),T=A(le([])),U=0,O=null,ne=null,Z=0;function $(n,t,c,_){U+=1;const i=U,l=b()>0&&e(B).length>0?40:0,m=c+(Math.random()-.5)*l,g=_+(Math.random()-.5)*l;d(T,[...e(T),{burstId:i,x:m,y:g,radius:F,opacity:.75},{burstId:i,x:m,y:g,radius:F,opacity:.5}],!0);const V={id:`${n.id}::${i}`,label:n.label,nodeType:"source",x:m,y:g,activation:1,isSource:!0,sourceBurstId:i},H=[],k=[],C=U*.37%(Math.PI*2),re=qe(m,g,t.length,C);t.forEach((D,ie)=>{const se=re[ie];se&&(H.push({id:`${D.id}::${i}`,label:D.label,nodeType:D.nodeType,x:se.x,y:se.y,activation:Ye(ie,t.length),isSource:!1,sourceBurstId:i}),k.push({burstId:i,sourceNodeId:V.id,targetNodeId:`${D.id}::${i}`,drawProgress:0,staggerDelay:ze(ie),framesElapsed:0}))}),d(B,[...e(B),V,...H],!0),d(G,[...e(G),...k],!0)}function q(){let n=[];for(const i of e(B)){const l=je(i.activation);Ue(l)&&n.push({...i,activation:l})}d(B,n,!0);const t=new Set(n.map(i=>i.id));let c=[];for(const i of e(G)){if(!t.has(i.sourceNodeId)||!t.has(i.targetNodeId))continue;const l=i.framesElapsed+1;let m=i.drawProgress;l>=i.staggerDelay&&(m=Math.min(1,m+1/15)),c.push({...i,framesElapsed:l,drawProgress:m})}d(G,c,!0);let _=[];for(const i of e(T)){const l=i.radius+6,m=i.opacity*.96;m<.02||l>Math.max(u(),x())||_.push({...i,radius:l,opacity:m})}d(T,_,!0),O=requestAnimationFrame(q)}function Y(){d(B,[],!0),d(G,[],!0),d(T,[],!0)}ve(()=>{if(!N())return;const n=N().id;n!==ne&&(ne=n,Y(),$(N(),M(),u()/2,x()/2))}),ve(()=>{if(!S()||b()===0||b()===Z)return;Z=b();const n=(Math.random()-.5)*120,t=(Math.random()-.5)*120;$(S().source,S().neighbours,u()/2+n,x()/2+t)}),we(()=>{O=requestAnimationFrame(q)}),Ne(()=>{O!==null&&cancelAnimationFrame(O)});function ce(n,t){return Ve(n,t)}function ee(n){const t=e(B).find(l=>l.id===n.sourceNodeId),c=e(B).find(l=>l.id===n.targetNodeId);if(!t||!c)return null;const _=t.x+(c.x-t.x)*n.drawProgress,i=t.y+(c.y-t.y)*n.drawProgress;return{x1:t.x,y1:t.y,x2:_,y2:i}}var P=Ze(),te=y(p(P));fe(te,17,()=>e(T),ye,(n,t)=>{var c=Qe();L(()=>{o(c,"cx",e(t).x),o(c,"cy",e(t).y),o(c,"r",e(t).radius),o(c,"opacity",e(t).opacity)}),E(n,c)});var j=y(te);fe(j,17,()=>e(G),ye,(n,t)=>{const c=de(()=>ee(e(t)));var _=Fe(),i=Ee(_);{var l=m=>{var g=We();L(()=>{o(g,"x1",e(c).x1),o(g,"y1",e(c).y1),o(g,"x2",e(c).x2),o(g,"y2",e(c).y2),o(g,"opacity",.35*e(t).drawProgress)}),E(m,g)};ue(i,m=>{e(c)&&m(l)})}E(n,_)});var z=y(j);fe(z,17,()=>e(B),n=>n.id,(n,t)=>{const c=de(()=>ce(e(t).nodeType,e(t).isSource)),_=de(()=>e(t).isSource?F*(.7+.3*e(t).activation):J*(.5+.8*e(t).activation));var i=Je(),l=p(i),m=y(l),g=y(m),V=y(g);{var H=k=>{var C=Xe(),re=p(C,!0);v(C),L(D=>{o(C,"x",e(t).x),o(C,"y",e(t).y+e(_)+18),o(C,"opacity",.9*e(t).activation),K(re,D)},[()=>e(t).label.length>40?e(t).label.slice(0,40)+"…":e(t).label]),E(k,C)};ue(V,k=>{e(t).isSource&&e(t).label&&k(H)})}v(i),L(k=>{o(i,"opacity",k),o(l,"cx",e(t).x),o(l,"cy",e(t).y),o(l,"r",e(_)*1.9),o(l,"fill",e(c)),o(l,"opacity",.18*e(t).activation),o(m,"cx",e(t).x),o(m,"cy",e(t).y),o(m,"r",e(_)),o(m,"fill",e(c)),o(g,"cx",e(t).x-e(_)*.3),o(g,"cy",e(t).y-e(_)*.3),o(g,"r",e(_)*.35),o(g,"opacity",.35*e(t).activation)},[()=>Math.min(1,e(t).activation*1.25)]),E(n,i)}),v(P),L(()=>{o(P,"width",u()),o(P,"height",x()),o(P,"viewBox",`0 0 ${u()??""} ${x()??""}`)}),E(s,P),Se()}var et=X('

        Computing activation...

        '),tt=X('

        Activation failed

        '),rt=X(`

        No matching memory

        Nothing in the graph matches . Try a broader + query or switch on live mode to watch the engine fire its own + bursts.

        `),it=X(`

        Waiting for activation

        Seed a burst with the search bar above, or enable live mode to + overlay bursts from the cognitive engine as they happen.

        `),st=X('
        Seed

        '),at=X(`

        Spreading Activation

        Collins & Loftus 1975 — activation spreads from a seed memory to + neighbours along semantic edges, decaying by 0.93 per animation frame + until it drops below 0.05. Search seeds a focused burst; live mode + overlays every spread event fired by the cognitive engine in real time.

        Seed Memory
        Live bursts fired:
        `);function yt(s,f){Me(f,!0);let u=A(""),x=A(!1),N=A(!1),M=A(null),b=A(null),S=A(le([])),F=A(!0),J=A(0),B=A(null),G=A(0);const T=new Map;function U(r){T.set(r.id,r)}function O(r){return{id:r.id,label:ne(r.content,r.id),nodeType:r.nodeType}}function ne(r,a){if(r&&r.trim().length>0){const h=r.trim();return h.length>60?h.slice(0,60)+"…":h}return a.slice(0,8)}function Z(r){const a=T.get(r);return a?O(a):{id:r,label:r.slice(0,8),nodeType:"note"}}async function $(){const r=e(u).trim();if(!r){d(M,null);return}d(x,!0),d(N,!0),d(M,null),d(b,null),d(S,[],!0);try{const a=await he.search(r,1);if(!a.results||a.results.length===0)return;const h=a.results[0];U(h),d(b,O(h),!0);const w=await he.explore(h.id,"associations",void 0,15),I=(w==null?void 0:w.results)??(w==null?void 0:w.nodes)??(w==null?void 0:w.associations)??[],R=[];for(const Q of I){if(!Q||typeof Q!="object"||!("id"in Q))continue;const ae=Q;U(ae),R.push(O(ae))}d(S,R,!0)}catch(a){d(M,a instanceof Error?a.message:String(a),!0),d(b,null),d(S,[],!0)}finally{d(x,!1)}}let q=null,Y=null,ce=!1;we(()=>{q=ke.subscribe(r=>{if(!r||r.length===0)return;if(!ce){Y=r[0],ce=!0;return}if(!e(F)){Y=r[0];return}const a=He(r,Y);if(Y=r[0],a.length!==0)for(const h of a){const w=Z(h.source_id),I=h.target_ids.map(R=>Z(R));d(J,e(J)+1),d(B,{source:w,neighbours:I},!0),d(G,e(G)+1)}})}),Ne(()=>{q&&q()});var ee=at(),P=y(p(ee),2),te=y(p(P),2),j=p(te);ge(j);var z=y(j,2),n=p(z,!0);v(z),v(te),v(P);var t=y(P,2),c=p(t),_=p(c);ge(_),me(2),v(c);var i=y(c,2),l=y(p(i)),m=p(l,!0);v(l),v(i),v(t);var g=y(t,2),V=p(g);{var H=r=>{var a=et();E(r,a)},k=r=>{var a=tt(),h=p(a),w=y(p(h),4),I=p(w,!0);v(w),v(h),v(a),L(()=>K(I,e(M))),E(r,a)},C=r=>{var a=rt(),h=p(a),w=y(p(h),4),I=y(p(w)),R=p(I);v(I),me(),v(w),v(h),v(a),L(()=>K(R,`"${e(u)??""}"`)),E(r,a)},re=r=>{var a=it();E(r,a)},D=r=>{$e(r,{width:1040,height:560,get source(){return e(b)},get neighbours(){return e(S)},get liveBurstKey(){return e(J)},get liveBurst(){return e(B)}})};ue(V,r=>{e(x)?r(H):e(M)?r(k,1):!e(b)&&e(N)?r(C,2):e(b)?r(D,!1):r(re,3)})}v(g);var ie=y(g,2);{var se=r=>{var a=st(),h=y(p(a),2),w=p(h,!0);v(h);var I=y(h,2),R=p(I),Q=p(R,!0);v(R);var ae=y(R,2),Be=p(ae);v(ae),v(I),v(a),L(()=>{K(w,e(b).label),K(Q,e(b).nodeType),K(Be,`${e(S).length??""} neighbours`)}),E(r,a)};ue(ie,r=>{e(b)&&r(se)})}v(ee),L(()=>{z.disabled=e(x),K(n,e(x)?"Activating…":"Activate"),K(m,e(G))}),xe("keydown",j,r=>r.key==="Enter"&&$()),Ge(j,()=>e(u),r=>d(u,r)),xe("click",z,$),Pe(_,()=>e(F),r=>d(F,r)),E(s,ee),Se()}Ie(["keydown","click"]);export{yt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.br b/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.br new file mode 100644 index 0000000000000000000000000000000000000000..31eeb91bfd21a3ea9f8ef36120772a4e4e18e1a3 GIT binary patch literal 4454 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.gz b/apps/dashboard/build/_app/immutable/nodes/4.BSlP3-UA.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..0851ccd662a1749024696f98b59b56d4ff8079ea GIT binary patch literal 5010 zcmV;D6K(7tiwFP!000026U{o=Zre(h&(mK~W~Y6t>=I4MaTduX!%OzqS?uKA#4sF+ zJd(=h7A}?;OF(}?KMl~pJk8TQ%~#zo8JwyjMOjYw?S}!{FjV9@r_Ns6DatU3)7-M{ zEpJ>z*V)#=5BK`9eEHVC%B-GL*xQ)68JPfgu|0wLFpa}Tm&21Q_`EZ9n_UtlJqDg( zyU#sr0^sfeKHLEJu`M}Zlkgmyw|s;R@F6zOfEU>Mz*E&nOFsoZR$v}s6Rs+Ab9K7^ zCH>JfHs zE`x*Y=J3;(X=_ExSX(=~$H~JFNAmin*+a>AVGMe|+U0Zd37pCHik9OQ(xa2B;~lpZ zG)Yx#u2;F{*Uuim{M=a~9RgSGDp$FmMK7Kt@!3j({JP?o%P&VC4i6qRDNm5{aFywg z;m51%@}VO2;wa0>M-cYYZGHyAc6Rsxg!Shq2TynQcP#!^y|kZr!zUJh2crGZ;R%Q* z{0PKD{su(5(;F6%m&-UJS3om%n?hcs(b`E74j{E<_FP6XN6c)N?Fwhl>1G=rVP5z8 z)aXT4d+lX?aR%MB_M*rBKbMohUc1{_bh!kY@gXnxl%EKP-O3?d=~=MZtk@L})11#Q zjC+p7JJ^`=fjGbD4davskdss4^iFq+-s$EhyVYdR#mVOBRwyB_AoYCiOl1F=Y!~eyH%?r^!#m4Ydn~K^&(vW4sW^LD_7U*#ShOd@RIjz7$oW z=+`NUheR7R6+#TzAO-ijhp%>CCa@-iweRKf#zjG=NeZrSF)xmC85Pj0!alWqH+Qic zc8Z7O#LnU(_25$aYr@L%R7N9fHe1_IQ@6BbrdoPp=WaTJ{8IWEyUX=hG|~1@205g3 zAo@ncK-7#`@7S2UCWN!TUYOjjb?7$q;R~kSMrs#!3OA5uK-v7pP00rkG048diaf;GcKy)F7ny+(cMu zTtq(dLoZ-+S!#K)Ynfw95YPZen&<$l! z3hTyAX{)6`VI0NG>XY3qWQvkr8%d*n!xK5A!Ya~${@L~N)+mT4EmS!gv4-LQkp3rx zsPa(#HSufx-K`NS^VKMm-HeDAxLGEwNo!aH0U7IN5X9cKMch=nt-u{XAS|7;G8z%L z&SP>Tv%(GJ5A|mCcYPRU{avjok-o4hJuNa7R%^%ki$%)n!9=R#;L8}~Xq=n3{_YT7 zxJ8ypH#!K4lw`So1UFKN5!OSCq>vRsF04UNq-f$YJ@!9_bOiOoN$dlWQL{r0UnM$K zIsPJbld<$xsJCk7TiVilEjE$VhPR!{a{XjX-(E6(`wy7@bqvoVcFMOJO;v z6oT&b*N*)o4D81X7F)~e_jk8+3a?fFTiFc`nZ^F+fmtJtfe!ha!+N+=D8#RH$SoCC zi*NI%j>Gs=19f;2y7S0k{6s_bG>Xuu2m)N;6*xlTL0qJn#oJFgWukw6!T3O919<}n zMVjSrpv0~Y#U~z!0cCw>eI4ilGYd)I*?Z`89UcmAld2Uwbt69xDQnp~ zY$MxL1Bx@@Y5ZWp~6eWJT6}&P`--+cE!Rggf&K6*{f@ zXK^e2?zacGkuCjsxBK8$&cAUr?R6ttwLFS_I4cwA)`6?IFJ{ATo6Ag(pYEE&HQ_;} z&YZs#=NJ4Me-6c`4SW0XUueCJWIP4&9cai$JU6c6hpd;|!#I8BdSgnDxCAEpW{a4C zNa0+Cvh`}%&Pr(Ag+K) zd*K<@`vf##>+6xR*|u%j^jt7!b5tv8O?@ykL4a zn%iSHqtb4Al+9)}yy@4K9bh1&z2vyfwh|c%X*Ye|3;IIZO}DSF(@-?_@Zn~AtG&Y* z_nLMu2PIgJW2ijwf_wF3d3mp;XAN&lTaVezM;vuD<95S-`luJ~+D>OS3;OkesGy8b zDPyzQWm73L>VtaJYemlZrAm!=B8Be-Wchw1Llv{YHcs{MwUY4_=i6G+J(Fm=oQlHR1>(@mX0BBU@MlRIaGL(@|1JMs`=?fvE z<#EBipHMB0lAan@v)P(g9W_y7!OG4;6RO)U;IXZDnF4JZwuG=S8+>+xWKW=t5AdBXrcqY?KoIw7fX6+cX`6skq4m2l4%B);yKzV#WSFntf!0!L}<(ziC>q@8F6dcMwL8fPur;J zh+Aa^DJ#gdQ_*xPnhH`@klH?bduK!0*o==hG~^>T?-f8LM~#rd`g%wMHfM8m!)4`$ zAEKmJ$_qahUN~Sp5`Ek;{LB@ecEw_uRd3Z2${4?_oz_I`J>Q`A<4t>8>)lv$y015= zy|ZaQS;1&MrFf0r4n#sFN!1zd%G-UjLZ;2Pe;y=O(dzJ5(#Vl;2iA8+ZkGDwc*@pkX8;Qqv{xg$i9 z{`bG_Zu#=2Pj-`~4q0gR592T?^5s&AZQHwBc;LiN`u7*c^Z!?SNa#*mlUC@HWZHUk z583uKASNAJ+YXwxZS{ZuumAp;XLO1uu821puI4%ExD^B8Eb&wIs$3R9{chPJhBfDAR zMoYc%NBIvieVd%6C2`3hja?toKmCXL`(8j=k~k&VMCRU@#1X;j012_glgDI&+?6zl zMp#K5$`pvqGZIfC!$Te6vXzYe#<={qjMLx#g*g4{N;NizaoQN4e;`(;06uyfeM2TP z*G|m9O}#N0xG8Z5@eOcvJw)yxfF-{h&&D^925zajWCZW+6dNxdMKVWv6BRc@cuB@? zl0bA{D6*BwBWZ1u5k3-C=?1?w4anLcPJKvQSsCF0ZL8zlvRWX&%NRcFv zdTs_JPhIa?Mk6e<{(v#)aJJX1} zlAcNHk;$q@(}0B2mRsa8$r9ItR;hAq3^;l!`U=xQOnW&Wf~9oQcL5N}K^$Ou)CKbW zMplj6|17Nz;~5;ebFfTIFe)@Qa{QlSfY!=%yCBWp2OEOGHJ<*u-S{&er z8^qCwWDvShEexGEFltT4GKZ~m$9A?ah#sfp&Twrz&B0s` zDKk_Mn9iN2ePXIo@}*@Y2nI?#OuP;J}VDsnTHJde<2E7G4r_S)8_#SSoA=0eHFc^quVS#^7BK;%S`_u7@0#Jfa+} zGV*P`aNrzp-RC~l(Z6R4VP+jAp<;-Gv3n2gl5&kHw=wfB`FVNm!M!u8 zKE&IwvGje2Ru-eS${!yf*?Q>UO-&g9UcN>xeQ4+swRPxO`Z7jKT&vf>MG>jY@4c4U zr>llG(fq&==~@!cBvq+!BWG(q!r#hE=qGi%=N z-aG2DuCmP-mNvLFu27;l2Wvievoi8X<6f!aoeKO;r&1lubSV~MkIluFmN)n5)YM{6 zOlt_ZPY3nWsj1WU^0cf~cPFmQ$rxlnm$PI$>R)xOJ=5rk6-}N2k7u|Ru*4n+QSp8jGgPj$F%uD3}XlknJ>1>wX z6IMidz;3^Y^xU~nteh&_5C`-*tFRTkN~xDPB)_OEGTq(Ar!;Kg@iBVbtx|m=zS8mH zn;MM$xcRjX-V=Qk{jc;RV?Cd~=0IPw&9=VtGT-HNCw#H<>%N-Tmlas6-9$GvOY`5? z*T2)MvGoHG7i6`=tb?=(u%_;Mu@RRbOY)yC1_yg-eIp}JTBFjZd z-y@la9I)D%P*3r>WIP1gL0Ye>T$a>B+CWK`49k}Z4Gi-DNu`pY>9MGpBmHNQG|HN( zDQmg{a>{zo)Fe6Q*9}CD){aGjX*N;9#*9Biw!Kg`QhLqXthwG^-0H*~^L zVO?;>O7{o-UM+SAIspC+V|rSx(7M#QaJngVs#vNE2{0~0-=s7H?EoB}M(z*0+6oJF zEPq2It~^|SWEhRqf?mCYg+!s65>VO{sC5mcA5S8SU!l0vzJ^i=VLel&(Dn5PSgn15 zS3kOHUoa%|X~9#b8F+#8t}Xt9KVbYl&`U%3+z>ujgjm8w%~cKe70~mAT*Kgk^et?ft:m>tt?xt:bt}function rt(m){return m>et?"strong":m>tt?"moderate":"mild"}const Ue="#8b5cf6",gt={fact:"#3b82f6",concept:"#8b5cf6",event:"#f59e0b",person:"#10b981",place:"#06b6d4",note:"#6b7280",pattern:"#ec4899",decision:"#ef4444"};function Ke(m){return m?gt[m]??Ue:Ue}const qe=5,kt=9;function ht(m){if(!Number.isFinite(m))return qe;const _=m<0?0:m>1?1:m;return qe+_*kt}const wt=.12;function Xe(m,_){return _==null||_===m?1:wt}function he(m,_=60){return m==null||typeof m!="string"||_<=0?"":m.length<=_?m:m.slice(0,_-1)+"…"}function jt(m){if(!m||m.length===0)return 0;const _=new Set;for(const x of m)x.memory_a_id&&_.add(x.memory_a_id),x.memory_b_id&&_.add(x.memory_b_id);return _.size}function St(m){if(!m||m.length===0)return 0;let _=0;for(const x of m)_+=Math.abs((x.trust_a??0)-(x.trust_b??0));return _/m.length}var Mt=Le('',1),It=Le(' '),Rt=Le('',1),Tt=M('
        '),Ot=M('
        '),At=M('
        '),Et=M('
        topic:
        '),Gt=M('
        SEVERITYstrong (>0.7)moderate (0.5-0.7)mild (0.3-0.5)
        ');function Ft(m,_){Qe(_,!0);let x=Pe(_,"focusedPairIndex",3,null),G=Pe(_,"width",3,800),F=Pe(_,"height",3,600);const R=A(()=>{const n=G()/2,t=F()/2,k=Math.min(G(),F())*.38;return{cx:n,cy:t,R:k}}),H=A(()=>{const n=[],t=[],k=_.contradictions.length||1;return _.contradictions.forEach((l,y)=>{const j=y/k*Math.PI*2-Math.PI/2,p=.18+l.similarity*.22,g=j-p,d=j+p,L=e(R).R+Math.sin(y*2.3)*18,N=e(R).R+Math.cos(y*1.7)*18,u={x:e(R).cx+Math.cos(g)*L,y:e(R).cy+Math.sin(g)*L,trust:l.trust_a,preview:l.memory_a_preview,type:l.memory_a_type,created:l.memory_a_created,tags:l.memory_a_tags,memoryId:l.memory_a_id,pairIndex:y,side:"a"},S={x:e(R).cx+Math.cos(d)*N,y:e(R).cy+Math.sin(d)*N,trust:l.trust_b,preview:l.memory_b_preview,type:l.memory_b_type,created:l.memory_b_created,tags:l.memory_b_tags,memoryId:l.memory_b_id,pairIndex:y,side:"b"};n.push(u,S);const $=(u.x+S.x)/2,I=(u.y+S.y)/2,T=.55-l.similarity*.25,P=$+(e(R).cx-$)*T,Y=I+(e(R).cy-I)*T,je=1+Math.min(l.trust_a,l.trust_b)*4;t.push({pairIndex:y,path:`M ${u.x.toFixed(1)} ${u.y.toFixed(1)} Q ${P.toFixed(1)} ${Y.toFixed(1)} ${S.x.toFixed(1)} ${S.y.toFixed(1)}`,color:Ce(l.similarity),thickness:je,severity:rt(l.similarity),topic:l.topic,similarity:l.similarity,dateDiff:l.date_diff_days,aPoint:u,bPoint:S,midX:P,midY:Y})}),{nodes:n,arcs:t}});let b=re(null),C=re(null),ie=re(0),le=re(0);function me(n){const t=n.currentTarget.getBoundingClientRect();E(ie,n.clientX-t.left),E(le,n.clientY-t.top)}function ae(n){_.onSelectPair&&_.onSelectPair(x()===n?null:n)}function ne(){var n;(n=_.onSelectPair)==null||n.call(_,null)}var U=Gt(),D=a(U),se=o(a(D)),X=o(se),_e=o(X),oe=o(_e);te(oe,17,()=>e(H).arcs,n=>n.pairIndex,(n,t)=>{const k=A(()=>Xe(e(t).pairIndex,x())),l=A(()=>x()===e(t).pairIndex);var y=Mt(),j=We(y),p=o(j),g=o(p);O(d=>{i(j,"d",e(t).path),i(j,"stroke",e(t).color),i(j,"stroke-width",e(t).thickness*3),i(j,"stroke-opacity",.08*e(k)),i(p,"d",e(t).path),i(p,"stroke",e(t).color),i(p,"stroke-width",e(t).thickness*(e(l)?1.6:1)),i(p,"stroke-opacity",(e(l)?1:.72)*e(k)),i(p,"aria-label",`contradiction ${e(t).pairIndex+1}: ${e(t).topic??""}`),i(g,"d",e(t).path),i(g,"stroke",e(t).color),i(g,"stroke-width",d),i(g,"stroke-opacity",.85*e(k)),q(g,`animation-duration: ${4+e(t).pairIndex%5}s`)},[()=>Math.max(1,e(t).thickness*.6)]),W("click",p,d=>{d.stopPropagation(),ae(e(t).pairIndex)}),ue("mouseenter",p,()=>E(C,e(t),!0)),ue("mouseleave",p,()=>E(C,null)),W("keydown",p,d=>{d.key==="Enter"&&ae(e(t).pairIndex)}),w(n,y)});var fe=o(oe);te(fe,19,()=>e(H).nodes,(n,t)=>n.memoryId+"-"+n.side+"-"+t,(n,t)=>{const k=A(()=>Xe(e(t).pairIndex,x())),l=A(()=>x()===e(t).pairIndex),y=A(()=>ht(e(t).trust)),j=A(()=>Ke(e(t).type));var p=Rt(),g=We(p),d=o(g),L=o(d);{var N=u=>{var S=It(),$=a(S,!0);r(S),O(I=>{i(S,"x",e(t).x),i(S,"y",e(t).y-e(y)-8),v($,I)},[()=>he(e(t).preview,40)]),w(u,S)};B(L,u=>{e(l)&&u(N)})}O(u=>{i(g,"cx",e(t).x),i(g,"cy",e(t).y),i(g,"r",e(y)*2.2),i(g,"fill",e(j)),i(g,"opacity",.12*e(k)),i(d,"cx",e(t).x),i(d,"cy",e(t).y),i(d,"r",e(y)),i(d,"fill",e(j)),i(d,"opacity",e(k)),i(d,"stroke-opacity",e(l)?.85:.25),i(d,"stroke-width",e(l)?2:1),i(d,"aria-label",`memory ${u??""}`)},[()=>he(e(t).preview,40)]),ue("mouseenter",d,()=>E(b,e(t),!0)),ue("mouseleave",d,()=>E(b,null)),W("click",d,u=>{u.stopPropagation(),ae(e(t).pairIndex)}),W("keydown",d,u=>{u.key==="Enter"&&ae(e(t).pairIndex)}),w(n,p)}),ke(),r(D);var we=o(D,2);{var de=n=>{var t=At(),k=a(t),l=a(k),y=o(l,2),j=a(y,!0);r(y);var p=o(y,2),g=a(p);r(p),r(k);var d=o(k,2),L=a(d,!0);r(d);var N=o(d,2);{var u=I=>{var T=Tt(),P=a(T);r(T),O(()=>v(P,`created ${e(b).created??""}`)),w(I,T)};B(N,I=>{e(b).created&&I(u)})}var S=o(N,2);{var $=I=>{var T=Ot(),P=a(T,!0);r(T),O(Y=>v(P,Y),[()=>e(b).tags.slice(0,4).join(" · ")]),w(I,T)};B(S,I=>{e(b).tags&&e(b).tags.length>0&&I($)})}r(t),O((I,T,P,Y)=>{q(t,`left: ${I??""}px; top: ${T??""}px;`),q(l,`background: ${P??""}`),v(j,e(b).type??"memory"),v(g,`trust ${Y??""}%`),v(L,e(b).preview)},[()=>Math.max(0,Math.min(e(ie)+12,G()-240)),()=>Math.max(0,Math.min(e(le)-8,F()-120)),()=>Ke(e(b).type),()=>(e(b).trust*100).toFixed(0)]),w(n,t)},xe=n=>{var t=Et(),k=a(t),l=a(k),y=o(l,2),j=a(y);r(y),r(k);var p=o(k,2),g=o(a(p)),d=a(g,!0);r(g),r(p);var L=o(p,2),N=a(L);r(L),r(t),O((u,S,$)=>{q(t,`left: ${u??""}px; top: ${S??""}px;`),q(l,`background: ${e(C).color??""}`),v(j,`${e(C).severity??""} conflict`),v(d,e(C).topic),v(N,`similarity ${$??""}% · ${e(C).dateDiff??""}d apart`)},[()=>Math.max(0,Math.min(e(ie)+12,G()-240)),()=>Math.max(0,Math.min(e(le)-8,F()-120)),()=>(e(C).similarity*100).toFixed(0)]),w(n,t)};B(we,n=>{e(b)?n(de):e(C)&&n(xe,1)})}r(U),O(()=>{q(U,`aspect-ratio: ${G()??""} / ${F()??""};`),i(D,"width",G()),i(D,"height",F()),i(D,"viewBox",`0 0 ${G()??""} ${F()??""}`),i(se,"width",G()),i(se,"height",F()),i(X,"cx",e(R).cx),i(X,"cy",e(R).cy),i(X,"r",e(R).R),i(_e,"cx",e(R).cx),i(_e,"cy",e(R).cy)}),W("mousemove",D,me),ue("mouseleave",D,()=>{E(b,null),E(C,null)}),W("click",D,ne),w(m,U),Je()}Ze(["mousemove","click","keydown"]);var Dt=M(""),Nt=M(""),Pt=M(''),Ct=M(''),Lt=M('
        No contradictions match this filter.
        '),Bt=M('
        No pairs visible.
        '),$t=M(' '),Yt=M('
        '),zt=M(' '),Vt=M('
        '),Wt=M('
        Full memory A
        Full memory B
        '),Ht=M(''),Ut=M('

        Contradiction Constellation

        Where your memory disagrees with itself

        average trust delta
        visible in current filter
        strong conflicts
        ');function or(m,_){Qe(_,!0);const x=[{memory_a_id:"a1",memory_b_id:"b1",memory_a_preview:"Dev server runs on port 3000 (default Vite config)",memory_b_preview:"Dev server moved to port 3002 to avoid conflict",memory_a_type:"fact",memory_b_type:"decision",memory_a_created:"2026-01-14",memory_b_created:"2026-03-22",memory_a_tags:["dev","vite"],memory_b_tags:["dev","vite","decision"],trust_a:.42,trust_b:.91,similarity:.88,date_diff_days:67,topic:"dev server port"},{memory_a_id:"a2",memory_b_id:"b2",memory_a_preview:"Prompt diversity helps at T>=0.6 per GPT-OSS paper",memory_b_preview:"Prompt diversity monotonically HURTS at T>=0.6 (arxiv 2603.27844)",memory_a_type:"concept",memory_b_type:"fact",memory_a_created:"2026-03-30",memory_b_created:"2026-04-03",memory_a_tags:["aimo3","prompting"],memory_b_tags:["aimo3","prompting","evidence"],trust_a:.35,trust_b:.88,similarity:.92,date_diff_days:4,topic:"prompt diversity"},{memory_a_id:"a3",memory_b_id:"b3",memory_a_preview:"Use min_p=0.05 for GPT-OSS-120B sampling",memory_b_preview:"min_p scheduling fails at competition temperatures",memory_a_type:"pattern",memory_b_type:"fact",memory_a_created:"2026-04-01",memory_b_created:"2026-04-05",memory_a_tags:["aimo3","sampling"],memory_b_tags:["aimo3","sampling"],trust_a:.58,trust_b:.74,similarity:.81,date_diff_days:4,topic:"min_p sampling"},{memory_a_id:"a4",memory_b_id:"b4",memory_a_preview:"LoRA rank 16 is enough for domain adaptation",memory_b_preview:"LoRA rank 32 consistently outperforms rank 16 on math",memory_a_type:"concept",memory_b_type:"fact",memory_a_created:"2026-02-10",memory_b_created:"2026-04-12",memory_a_tags:["lora","training"],memory_b_tags:["lora","training","nemotron"],trust_a:.48,trust_b:.76,similarity:.74,date_diff_days:61,topic:"LoRA rank"},{memory_a_id:"a5",memory_b_id:"b5",memory_a_preview:"Sam prefers Rust for all backend services",memory_b_preview:"Sam chose Axum + Rust for Nullgaze backend",memory_a_type:"note",memory_b_type:"decision",memory_a_created:"2026-01-05",memory_b_created:"2026-02-18",memory_a_tags:["preference","sam"],memory_b_tags:["nullgaze","backend"],trust_a:.81,trust_b:.88,similarity:.42,date_diff_days:44,topic:"backend language"},{memory_a_id:"a6",memory_b_id:"b6",memory_a_preview:"Warm-start from checkpoint saves 8h of training",memory_b_preview:"Warm-start code never loaded the PEFT adapter correctly",memory_a_type:"pattern",memory_b_type:"fact",memory_a_created:"2026-03-11",memory_b_created:"2026-04-16",memory_a_tags:["training","warm-start"],memory_b_tags:["training","warm-start","bug-fix"],trust_a:.55,trust_b:.93,similarity:.79,date_diff_days:36,topic:"warm-start correctness"},{memory_a_id:"a7",memory_b_id:"b7",memory_a_preview:"Three.js force-directed graph runs fine at 5k nodes",memory_b_preview:"WebGL graph stutters above 2k nodes on M1 MacBook Air",memory_a_type:"fact",memory_b_type:"fact",memory_a_created:"2025-12-02",memory_b_created:"2026-03-29",memory_a_tags:["vestige","graph","perf"],memory_b_tags:["vestige","graph","perf"],trust_a:.39,trust_b:.72,similarity:.67,date_diff_days:117,topic:"graph performance"},{memory_a_id:"a8",memory_b_id:"b8",memory_a_preview:"Submit GPT-OSS with 16384 token budget for AIMO",memory_b_preview:"AIMO3 baseline at 32768 tokens scored 44/50",memory_a_type:"pattern",memory_b_type:"event",memory_a_created:"2026-04-04",memory_b_created:"2026-04-10",memory_a_tags:["aimo3","tokens"],memory_b_tags:["aimo3","baseline"],trust_a:.31,trust_b:.85,similarity:.73,date_diff_days:6,topic:"token budget"},{memory_a_id:"a9",memory_b_id:"b9",memory_a_preview:"FSRS-6 parameters require ~1k reviews to train",memory_b_preview:"FSRS-6 default parameters work fine out of the box",memory_a_type:"concept",memory_b_type:"concept",memory_a_created:"2026-01-22",memory_b_created:"2026-02-28",memory_a_tags:["fsrs","training"],memory_b_tags:["fsrs"],trust_a:.62,trust_b:.54,similarity:.57,date_diff_days:37,topic:"FSRS parameter tuning"},{memory_a_id:"a10",memory_b_id:"b10",memory_a_preview:"Tailwind 4 requires explicit CSS import only",memory_b_preview:"Tailwind 4 config still supports tailwind.config.js",memory_a_type:"fact",memory_b_type:"fact",memory_a_created:"2026-01-30",memory_b_created:"2026-02-14",memory_a_tags:["tailwind","config"],memory_b_tags:["tailwind","config"],trust_a:.47,trust_b:.33,similarity:.85,date_diff_days:15,topic:"Tailwind 4 config"},{memory_a_id:"a11",memory_b_id:"b11",memory_a_preview:"Kaggle API silently ignores invalid modelDataSources slugs",memory_b_preview:"Kaggle API throws an error when model slug is invalid",memory_a_type:"fact",memory_b_type:"concept",memory_a_created:"2026-04-07",memory_b_created:"2026-02-20",memory_a_tags:["kaggle","bug-fix","api"],memory_b_tags:["kaggle","api"],trust_a:.89,trust_b:.28,similarity:.91,date_diff_days:46,topic:"Kaggle API validation"},{memory_a_id:"a12",memory_b_id:"b12",memory_a_preview:"USearch HNSW is 20x faster than FAISS for embeddings",memory_b_preview:"FAISS IVF is the fastest vector index at scale",memory_a_type:"fact",memory_b_type:"concept",memory_a_created:"2026-02-01",memory_b_created:"2025-11-15",memory_a_tags:["vectors","perf"],memory_b_tags:["vectors","perf"],trust_a:.78,trust_b:.36,similarity:.69,date_diff_days:78,topic:"vector index perf"},{memory_a_id:"a13",memory_b_id:"b13",memory_a_preview:"Orbit Wars leaderboard scores weight by top-10 consistency",memory_b_preview:"Orbit Wars uses single-best-episode scoring",memory_a_type:"fact",memory_b_type:"fact",memory_a_created:"2026-04-18",memory_b_created:"2026-04-10",memory_a_tags:["orbit-wars","scoring"],memory_b_tags:["orbit-wars","scoring"],trust_a:.64,trust_b:.52,similarity:.82,date_diff_days:8,topic:"Orbit Wars scoring"},{memory_a_id:"a14",memory_b_id:"b14",memory_a_preview:"Sam commits to morning posts 8am ET",memory_b_preview:"Morning cadence moved to 9am ET after energy review",memory_a_type:"decision",memory_b_type:"decision",memory_a_created:"2026-03-01",memory_b_created:"2026-04-15",memory_a_tags:["cadence","content"],memory_b_tags:["cadence","content"],trust_a:.5,trust_b:.81,similarity:.58,date_diff_days:45,topic:"posting cadence"},{memory_a_id:"a15",memory_b_id:"b15",memory_a_preview:"Dream cycle consolidates ~50 memories per run",memory_b_preview:"Dream cycle replays closer to 120 memories in practice",memory_a_type:"fact",memory_b_type:"fact",memory_a_created:"2026-02-15",memory_b_created:"2026-04-08",memory_a_tags:["vestige","dream"],memory_b_tags:["vestige","dream"],trust_a:.44,trust_b:.79,similarity:.76,date_diff_days:52,topic:"dream cycle count"},{memory_a_id:"a16",memory_b_id:"b16",memory_a_preview:"Never commit API keys to git; use .env files",memory_b_preview:"Environment secrets should live in a 1Password vault",memory_a_type:"pattern",memory_b_type:"pattern",memory_a_created:"2025-10-11",memory_b_created:"2026-03-20",memory_a_tags:["security","secrets"],memory_b_tags:["security","secrets"],trust_a:.72,trust_b:.64,similarity:.48,date_diff_days:160,topic:"secret storage"}];let G=re("all"),F=re("");const R=A(()=>Array.from(new Set(x.map(s=>s.topic))).sort()),H=A(()=>{switch(e(G)){case"recent":{const s=new Date("2026-04-20").getTime(),c=10080*60*1e3;return x.filter(h=>{const f=h.memory_a_created?new Date(h.memory_a_created).getTime():0,K=h.memory_b_created?new Date(h.memory_b_created).getTime():0;return s-Math.max(f,K)<=c})}case"high-trust":return x.filter(s=>Math.min(s.trust_a,s.trust_b)>.6);case"topic":return e(F)?x.filter(s=>s.topic===e(F)):x;case"all":default:return x}});let b=re(null);function C(s){E(b,s,!0)}const ie=A(()=>jt(x)),le=A(()=>St(x)),me=A(()=>{const s=new Map(x.map((c,h)=>[c.memory_a_id+"|"+c.memory_b_id,h]));return e(H).map(c=>({orig:s.get(c.memory_a_id+"|"+c.memory_b_id)??0,c}))});function ae(s){E(b,e(b)===s?null:s,!0)}var ne=Ut(),U=o(a(ne),2),D=a(U),se=a(D);se.textContent="47";var X=o(se,2),_e=a(X);r(X),r(D);var oe=o(D,2),fe=a(oe),we=a(fe,!0);r(fe),ke(2),r(oe);var de=o(oe,2),xe=a(de),n=a(xe,!0);r(xe),ke(2),r(de);var t=o(de,2),k=a(t),l=a(k,!0);r(k),ke(2),r(t),r(U);var y=o(U,2),j=a(y);te(j,16,()=>[{id:"all",label:"All"},{id:"recent",label:"Recent (7d)"},{id:"high-trust",label:"High trust (>60%)"},{id:"topic",label:"By topic"}],s=>s.id,(s,c)=>{var h=Dt(),f=a(h,!0);r(h),O(()=>{He(h,1,`px-3 py-1.5 rounded-lg text-xs border transition + ${e(G)===c.id?"bg-synapse/15 border-synapse/40 text-synapse-glow":"border-subtle/30 text-dim hover:text-text hover:bg-white/[0.03]"}`),v(f,c.label)}),W("click",h,()=>{E(G,c.id,!0),E(b,null)}),w(s,h)});var p=o(j,2);{var g=s=>{var c=Pt(),h=a(c);h.value=h.__value="";var f=o(h);te(f,17,()=>e(R),Ne,(K,z)=>{var V=Nt(),be=a(V,!0);r(V);var Q={};O(()=>{v(be,e(z)),Q!==(Q=e(z))&&(V.value=(V.__value=e(z))??"")}),w(K,V)}),r(c),ut(c,()=>e(F),K=>E(F,K)),w(s,c)};B(p,s=>{e(G)==="topic"&&s(g)})}var d=o(p,2);{var L=s=>{var c=Ct();W("click",c,()=>E(b,null)),w(s,c)};B(d,s=>{e(b)!==null&&s(L)})}r(y);var N=o(y,2),u=a(N),S=a(u);{var $=s=>{var c=Lt();w(s,c)},I=s=>{Ft(s,{get contradictions(){return e(H)},get focusedPairIndex(){return e(b)},onSelectPair:C,width:800,height:600})};B(S,s=>{e(H).length===0?s($):s(I,!1)})}r(u);var T=o(u,2),P=a(T),Y=o(a(P),2),je=a(Y,!0);r(Y),r(P);var Be=o(P,2);{var at=s=>{var c=Bt();w(s,c)};B(Be,s=>{e(me).length===0&&s(at)})}var st=o(Be,2);te(st,19,()=>e(me),s=>s.c.memory_a_id+"|"+s.c.memory_b_id,(s,c,h)=>{const f=A(()=>e(c).c),K=A(()=>e(b)===e(h));var z=Ht(),V=a(z),be=a(V),Q=o(be,2),ot=a(Q,!0);r(Q);var $e=o(Q,2),it=a($e);r($e),r(V);var Se=o(V,2),lt=a(Se,!0);r(Se);var Me=o(Se,2),Ie=a(Me),Re=o(a(Ie),2),mt=a(Re,!0);r(Re);var Ye=o(Re,2),nt=a(Ye);r(Ye),r(Ie);var ze=o(Ie,2),Te=o(a(ze),2),_t=a(Te,!0);r(Te);var Ve=o(Te,2),dt=a(Ve);r(Ve),r(ze),r(Me);var ct=o(Me,2);{var vt=ce=>{var ve=Wt(),pe=o(a(ve),2),Oe=a(pe,!0);r(pe);var ge=o(pe,2);{var Ae=J=>{var Z=Yt();te(Z,21,()=>e(f).memory_a_tags,Ne,(Ge,Fe)=>{var ee=$t(),De=a(ee,!0);r(ee),O(()=>v(De,e(Fe))),w(Ge,ee)}),r(Z),w(J,Z)};B(ge,J=>{e(f).memory_a_tags&&e(f).memory_a_tags.length>0&&J(Ae)})}var ye=o(ge,4),Ee=a(ye,!0);r(ye);var pt=o(ye,2);{var yt=J=>{var Z=Vt();te(Z,21,()=>e(f).memory_b_tags,Ne,(Ge,Fe)=>{var ee=zt(),De=a(ee,!0);r(ee),O(()=>v(De,e(Fe))),w(Ge,ee)}),r(Z),w(J,Z)};B(pt,J=>{e(f).memory_b_tags&&e(f).memory_b_tags.length>0&&J(yt)})}r(ve),O(()=>{v(Oe,e(f).memory_a_preview),v(Ee,e(f).memory_b_preview)}),w(ce,ve)};B(ct,ce=>{e(K)&&ce(vt)})}r(z),O((ce,ve,pe,Oe,ge,Ae,ye,Ee)=>{He(z,1,`w-full text-left p-3 rounded-xl border transition + ${e(K)?"bg-synapse/10 border-synapse/40 shadow-[0_0_12px_rgba(99,102,241,0.18)]":"border-subtle/20 hover:border-synapse/30 hover:bg-white/[0.02]"}`),q(be,`background: ${ce??""}`),q(Q,`color: ${ve??""}`),v(ot,pe),v(it,`${Oe??""}% sim · ${e(f).date_diff_days??""}d`),v(lt,e(f).topic),v(mt,ge),v(nt,`${Ae??""}%`),v(_t,ye),v(dt,`${Ee??""}%`)},[()=>Ce(e(f).similarity),()=>Ce(e(f).similarity),()=>rt(e(f).similarity),()=>(e(f).similarity*100).toFixed(0),()=>he(e(f).memory_a_preview),()=>(e(f).trust_a*100).toFixed(0),()=>he(e(f).memory_b_preview),()=>(e(f).trust_b*100).toFixed(0)]),W("click",z,()=>ae(e(h))),w(s,z)}),r(T),r(N),r(ne),O((s,c,h)=>{v(_e,`contradictions across ${s??""} memories`),v(we,c),v(n,e(H).length),v(l,h),v(je,e(me).length)},[()=>e(ie).toLocaleString(),()=>e(le).toFixed(2),()=>e(H).filter(s=>s.similarity>.7).length]),w(m,ne),Je()}Ze(["click"]);export{or as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/5.B300rRjT.js.br b/apps/dashboard/build/_app/immutable/nodes/5.B300rRjT.js.br new file mode 100644 index 0000000000000000000000000000000000000000..808578f1785659ccab17f47ca77dd0475b46650e GIT binary patch literal 7341 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:n}const Ke=.3,Qe=.7;function Ze(v){const n=ye(v);return n>Qe?"high":n1?1:v}function $e(v){return v==null||!Number.isFinite(v)||v<0?"0ms":v<1e3?`${Math.round(v)}ms`:`${(v/1e3).toFixed(2)}s`}function et(v){const n=ye(v);return`${Math.round(n*100)}%`}function tt(v,n=""){return`${n}/memories/${v}`}function st(v,n=2){return!v||v.length===0?[]:v.slice(0,Math.max(0,n))}function at(v,n=2){return v?Math.max(0,v.length-n):0}function rt(v){return v?v.length>8?v.slice(0,8):v:""}var nt=_('
        Episodic hippocampus
        Semantic cortex
        ',1),it=Ve(''),vt=_('
        '),lt=_(''),ot=_('Replaying memories'),ct=_('New connections found: '),dt=_('Strengthened: '),ut=_('Compressed: '),ft=_('Connections persisted: Insights: ',1),mt=_('
        ');function pt(v,n){qe(n,!0);const N=[{num:1,name:"Replay",color:"#818cf8",desc:"Hippocampal replay: tagged memories surface for consolidation."},{num:2,name:"Cross-reference",color:"#a855f7",desc:"Semantic proximity check — new edges discovered across memories."},{num:3,name:"Strengthen",color:"#c084fc",desc:"Co-activated memories strengthen; FSRS stability grows."},{num:4,name:"Prune",color:"#ef4444",desc:"Low-retention redundant memories compressed or released."},{num:5,name:"Transfer",color:"#10b981",desc:"Episodic → semantic consolidation (hippocampus → cortex)."}];let l=b(()=>Oe(n.stage)),f=b(()=>N[e(l)-1]),q=b(()=>{if(!n.dreamResult)return 8;const s=n.dreamResult.memoriesReplayed??8;return Math.max(6,Math.min(12,s))}),re=b(()=>{var r;if(!n.dreamResult)return 5;const s=((r=n.dreamResult.stats)==null?void 0:r.newConnectionsFound)??5;return Math.max(3,Math.min(e(q),s))}),z=b(()=>{var r;if(!n.dreamResult)return Math.ceil(e(q)*.5);const s=((r=n.dreamResult.stats)==null?void 0:r.memoriesStrengthened)??Math.ceil(e(q)*.5);return Math.max(1,Math.min(e(q),s))}),ne=b(()=>{var r;if(!n.dreamResult)return Math.ceil(e(q)*.25);const s=((r=n.dreamResult.stats)==null?void 0:r.memoriesCompressed)??Math.ceil(e(q)*.25);return Math.max(1,Math.min(Math.floor(e(q)/2),s))});function C(s,r=0){const d=Math.sin((s+1)*9301+49297+r*233)*233280;return d-Math.floor(d)}let U=b(()=>{const s=[],r=Math.ceil(Math.sqrt(e(q))),d=Math.ceil(e(q)/r);for(let c=0;c{const s=[],r=e(U).length;for(let d=0;d{var r=nt();X(4),m(s,r)};j(le,s=>{e(l)===5&&s(oe)})}var ee=i(le,2);ge(ee,23,()=>e(L),(s,r)=>s.a+"-"+s.b+"-"+r,(s,r,d)=>{const c=b(()=>e(U)[e(r).a]),p=b(()=>e(U)[e(r).b]);var u=Fe(),k=he(u);{var w=g=>{const M=b(()=>I(e(c))),h=b(()=>F(e(c))),V=b(()=>I(e(p))),ke=b(()=>F(e(p)));var E=it();R(()=>{A(E,"x1",e(M)),A(E,"y1",e(h)),A(E,"x2",e(V)),A(E,"y2",e(ke)),A(E,"stroke",e(f).color),A(E,"stroke-width",e(l)===2?.25:e(l)===3?.35:.2),A(E,"stroke-opacity",e(l)<2?0:e(l)===4?.25:e(l)===5?.15:.6),A(E,"stroke-dasharray",e(l)===2?"1.2 0.8":"none"),ae(E,`--edge-delay: ${e(d)*80}ms`)}),m(g,E)};j(k,g=>{e(c)&&e(p)&&g(w)})}m(s,u)}),t(ee);var S=i(ee,2);ge(S,17,()=>e(U),s=>s.id,(s,r)=>{var d=vt();let c;R((p,u,k,w,g)=>{c=_e(d,1,"memory-card svelte-1cq1ntk",null,c,{"is-pulsing":e(l)===3&&e(r).strengthened,"is-pruning":e(l)===4&&e(r).pruned,"is-transferring":e(l)===5,"semantic-side":e(l)===5&&e(r).transferIsSemantic}),ae(d,` + left: ${p??""}%; + top: ${u??""}%; + opacity: ${k??""}; + --card-scale: ${w??""}; + --card-delay: ${e(r).id*40}ms; + --card-hue: ${g??""}deg; + `)},[()=>I(e(r)),()=>F(e(r)),()=>J(e(r)),()=>K(e(r)),()=>C(e(r).id,3)*60-30]),m(s,d)});var D=i(S,2);{var te=s=>{var r=lt();m(s,r)};j(D,s=>{e(l)===1&&s(te)})}t(P);var se=i(P,2),ue=a(se);{var ce=s=>{var r=ot(),d=i(a(r)),c=a(d,!0);t(d),X(),t(r),R(()=>{var p;return x(c,((p=n.dreamResult)==null?void 0:p.memoriesReplayed)??e(q))}),m(s,r)},T=s=>{var r=ct(),d=i(a(r)),c=a(d,!0);t(d),t(r),R(()=>{var p,u;return x(c,((u=(p=n.dreamResult)==null?void 0:p.stats)==null?void 0:u.newConnectionsFound)??e(re))}),m(s,r)},H=s=>{var r=dt(),d=i(a(r)),c=a(d,!0);t(d),t(r),R(()=>{var p,u;return x(c,((u=(p=n.dreamResult)==null?void 0:p.stats)==null?void 0:u.memoriesStrengthened)??e(z))}),m(s,r)},G=s=>{var r=ut(),d=i(a(r)),c=a(d,!0);t(d),t(r),R(()=>{var p,u;return x(c,((u=(p=n.dreamResult)==null?void 0:p.stats)==null?void 0:u.memoriesCompressed)??e(ne))}),m(s,r)},fe=s=>{var r=ft(),d=he(r),c=i(a(d)),p=a(c,!0);t(c),t(d);var u=i(d,2),k=i(a(u)),w=a(k,!0);t(k),t(u),R(()=>{var g,M,h;x(p,((g=n.dreamResult)==null?void 0:g.connectionsPersisted)??0),x(w,((h=(M=n.dreamResult)==null?void 0:M.stats)==null?void 0:h.insightsGenerated)??0)}),m(s,r)};j(ue,s=>{e(l)===1?s(ce):e(l)===2?s(T,1):e(l)===3?s(H,2):e(l)===4?s(G,3):e(l)===5&&s(fe,4)})}t(se),t(ie),R(()=>{ae(Y,` + background: color-mix(in srgb, ${e(f).color??""} 20%, transparent); + color: ${e(f).color??""}; + border: 1.5px solid ${e(f).color??""}; + box-shadow: 0 0 16px color-mix(in srgb, ${e(f).color??""} 40%, transparent); + `),x(me,e(f).num),x(o,e(f).name),x(O,e(f).desc),x(W,`Stage ${e(f).num??""} / 5`),ae(P,`--stage-color: ${e(f).color??""}`),A(P,"aria-label",`Dream stage ${e(f).num??""} — ${e(f).name??""}`)}),m(v,ie),Se()}var gt=_(' novel'),xt=_(' '),bt=_('
        '),ht=_('
        Sources
        '),_t=_('

        Novelty
        Confidence
        ');function yt(v,n){qe(n,!0);let N=Ue(n,"index",3,0),l=b(()=>ye(n.insight.noveltyScore)),f=b(()=>ye(n.insight.confidence)),q=b(()=>Ze(n.insight.noveltyScore)),re=b(()=>e(q)==="high"),z=b(()=>e(q)==="low"),ne=b(()=>st(n.insight.sourceMemories,2)),C=b(()=>at(n.insight.sourceMemories,2));const U={connection:"#818cf8",pattern:"#ec4899",contradiction:"#ef4444",synthesis:"#c084fc",emergence:"#f59e0b",cluster:"#06b6d4"};let L=b(()=>{var S;return U[((S=n.insight.type)==null?void 0:S.toLowerCase())??""]??"#a855f7"});var I=_t();let F;var J=a(I),K=a(J),ie=a(K,!0);t(K);var ve=i(K,2);{var Q=S=>{var D=gt();m(S,D)};j(ve,S=>{e(re)&&S(Q)})}t(J);var Y=i(J,2),me=a(Y,!0);t(Y);var Z=i(Y,2),B=a(Z),o=i(a(B),2),y=a(o,!0);t(o),t(B);var O=i(B,2),$=a(O);t(O),t(Z);var W=i(Z,2),P=i(a(W),2),le=a(P,!0);t(P),t(W);var oe=i(W,2);{var ee=S=>{var D=ht(),te=a(D),se=i(a(te));{var ue=T=>{var H=xt(),G=a(H);t(H),R(()=>x(G,`(+${e(C)??""})`)),m(T,H)};j(se,T=>{e(C)>0&&T(ue)})}t(te);var ce=i(te,2);ge(ce,20,()=>e(ne),T=>T,(T,H)=>{var G=bt(),fe=a(G,!0);t(G),R((s,r)=>{A(G,"href",s),A(G,"title",`Open memory ${H??""}`),x(fe,r)},[()=>tt(H,Je),()=>rt(H)]),m(T,G)}),t(ce),t(D),m(S,D)};j(oe,S=>{e(ne).length>0&&S(ee)})}t(I),R((S,D)=>{F=_e(I,1,"insight-card glass-panel rounded-xl p-4 space-y-3 svelte-1y17hsl",null,F,{"high-novelty":e(re),"low-novelty":e(z)}),ae(I,`--insight-color: ${e(L)??""}; --enter-delay: ${N()*60}ms`),ae(K,`background: ${e(L)??""}22; color: ${e(L)??""}; border: 1px solid ${e(L)??""}55`),x(ie,n.insight.type??"insight"),x(me,n.insight.insight),x(y,S),ae($,`width: ${e(l)*100}%; background: linear-gradient(90deg, ${e(L)??""}, var(--color-dream-glow))`),ae(P,`color: ${e(f)>.7?"#10b981":e(f)>.4?"#f59e0b":"#ef4444"}`),x(le,D)},[()=>e(l).toFixed(2),()=>et(e(f))]),m(v,I),Se()}var kt=_(' Dreaming...',1),wt=_(' Dream Now',1),qt=_('
        '),St=_('

        No dream yet.

        Click Dream Now to begin.

        '),Mt=_(''),Rt=_('
        '),Ct=_('
        Replayed
        Connections Found
        Connections Persisted
        Insights
        Duration
        '),Dt=_('
        ',1),Nt=_(`

        Dream Cinema

        Scrub through Vestige's 5-stage consolidation cycle. Replay, cross-reference, + strengthen, prune, transfer. Watch episodic become semantic.

        `);function Bt(v,n){qe(n,!0);let N=be(null),l=be(1),f=be(!1),q=be(null),re=b(()=>e(N)!==null),z=b(()=>{const o=e(N);return o?[...o.insights].sort((y,O)=>(O.noveltyScore??0)-(y.noveltyScore??0)):[]});async function ne(){if(!e(f)){de(f,!0),de(q,null);try{const o=await ze.dream();de(N,o,!0),de(l,1)}catch(o){de(q,o instanceof Error?o.message:"Dream failed",!0)}finally{de(f,!1)}}}function C(o){de(l,Oe(o),!0)}function U(o){const y=Number(o.currentTarget.value);C(y)}var L=Nt();Be("1fv2vo0",o=>{Ge(()=>{Ae.title="Dream Cinema · Vestige"})});var I=a(L),F=i(a(I),2);let J;var K=a(F);{var ie=o=>{var y=kt();X(2),m(o,y)},ve=o=>{var y=wt();X(2),m(o,y)};j(K,o=>{e(f)?o(ie):o(ve,!1)})}t(F),t(I);var Q=i(I,2);{var Y=o=>{var y=qt(),O=a(y,!0);t(y),R(()=>x(O,e(q))),m(o,y)};j(Q,o=>{e(q)&&o(Y)})}var me=i(Q,2);{var Z=o=>{var y=St();m(o,y)},B=o=>{var y=Dt(),O=he(y),$=a(O),W=a($),P=a(W);t(W);var le=i(W,2),oe=a(le),ee=i(oe,2);t(le),t($);var S=i($,2),D=a(S);We(D);var te=i(D,2);ge(te,22,()=>je,u=>u,(u,k,w)=>{var g=Mt();let M;var h=i(a(g),2),V=a(h);t(h),t(g),R(()=>{M=_e(g,1,"tick svelte-1fv2vo0",null,M,{active:e(l)===e(w)+1,passed:e(l)>e(w)+1}),g.disabled=e(f),x(V,`${e(w)+1}. ${k??""}`)}),pe("click",g,()=>C(e(w)+1)),m(u,g)}),t(te),t(S),t(O);var se=i(O,2),ue=a(se);pt(ue,{get stage(){return e(l)},get dreamResult(){return e(N)}});var ce=i(ue,2),T=a(ce),H=i(a(T),2),G=a(H);t(H),t(T);var fe=i(T,2),s=a(fe);{var r=u=>{var k=Rt(),w=a(k);{var g=h=>{var V=Ie("Dreaming...");m(h,V)},M=h=>{var V=Ie("No insights generated this cycle.");m(h,V)};j(w,h=>{e(f)?h(g):h(M,!1)})}t(k),m(u,k)},d=u=>{var k=Fe(),w=he(k);ge(w,19,()=>e(z),(g,M)=>{var h;return M+"-"+(((h=g.insight)==null?void 0:h.slice(0,32))??"")},(g,M,h)=>{yt(g,{get insight(){return e(M)},get index(){return e(h)}})}),m(u,k)};j(s,u=>{e(z).length===0?u(r):u(d,!1)})}t(fe),t(ce),t(se);var c=i(se,2);{var p=u=>{var k=Ct(),w=a(k),g=a(w),M=a(g,!0);t(g),X(2),t(w);var h=i(w,2),V=a(h),ke=a(V,!0);t(V),X(2),t(h);var E=i(h,2),Me=a(E),He=a(Me,!0);t(Me),X(2),t(E);var we=i(E,2),Re=a(we),Le=a(Re,!0);t(Re),X(2),t(we);var Ce=i(we,2),De=a(Ce),Pe=a(De,!0);t(De),X(2),t(Ce),t(k),R(xe=>{var Ne,Ee;x(M,e(N).memoriesReplayed??0),x(ke,((Ne=e(N).stats)==null?void 0:Ne.newConnectionsFound)??0),x(He,e(N).connectionsPersisted??0),x(Le,((Ee=e(N).stats)==null?void 0:Ee.insightsGenerated)??0),x(Pe,xe)},[()=>{var xe;return $e((xe=e(N).stats)==null?void 0:xe.durationMs)}]),m(u,k)};j(c,u=>{e(N)&&u(p)})}R(()=>{x(P,`Stage ${e(l)??""} · ${je[e(l)-1]??""}`),oe.disabled=e(l)<=1||e(f),ee.disabled=e(l)>=5||e(f),Xe(D,e(l)),D.disabled=e(f),x(G,`${e(z).length??""} total · by novelty`)}),pe("click",oe,()=>C(e(l)-1)),pe("click",ee,()=>C(e(l)+1)),pe("input",D,U),m(o,y)};j(me,o=>{!e(re)&&!e(f)?o(Z):o(B,!1)})}t(L),R(()=>{F.disabled=e(f),J=_e(F,1,"dream-button svelte-1fv2vo0",null,J,{"is-dreaming":e(f)})}),pe("click",F,ne),m(v,L),Se()}Ye(["click","input"]);export{Bt as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.br b/apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.br new file mode 100644 index 0000000000000000000000000000000000000000..ca2fab55b9b7cf85df3f81dfea404c5a2aa077bb GIT binary patch literal 5621 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 P?E@v!vXeU~O786~r*q{# literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.gz b/apps/dashboard/build/_app/immutable/nodes/6.DBS_R5Hl.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..5061aabf788b7722148a0af2aac8e3eabac57dd5 GIT binary patch literal 6360 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 a^ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/6.QRT_dh4Q.js.br b/apps/dashboard/build/_app/immutable/nodes/6.QRT_dh4Q.js.br deleted file mode 100644 index 24366cef3826ea0d560e7b4d33b2e3e24b8718b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121369 zcmYJ3Ly#znl0@6KZQHhO+qP}nwr$(CjoY@Zd8_%mT%Cy8R8?fAcG+|W0Bg7hJf%h9 zdD%8XfpXbx*GGO`VyA3TwLgD}yR=UsmfI2wu5m|X2B8Lh=O(2RU%!!*yK4icf~u;j ztMns2=d1tRxBuNP8xk-@kzT4WP8EYal2H*-AB`jrwR*Y+d6c>e>{g9};Id$Abll93 zKvl7Ukkd-)I8Is&>%vXnEbJ*40c)TN!HUFTs2koQs%^B2f*cOT)P2CzBYoUoJujjs zzvCYH7M=U8Vz}smX6l?*u%e8{w@WojcuNIV^U}*fnb= zsV*+;79AQP$*9{@P{<5;3^TO32}QeXs4n}B zjXaxlJJs*`Y1RIh5ex0l@qJ=Y<6~FVFp(a4nPTDiY?xZ%<@=)sEd%!}5P$T$S%hdI zv7{x69OW_vRAROZLJ#P=m3Xhhi*~p}?{fs{I>jFd7_vo4S^pXMEu+wBgnHk)n a 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%0DGN|qETf~g(=fP`z=)_a#zbwdnE-cIuvOEULB zA@;Vi$+2j|x@y#e74S&F;BJ!u=Wm~q5x+llpMTYlCRI;%fu zcMm2SpzG-3tgMqiBIa93iRi3D9B}d%#-=Zay(hex_H+D3?}+mu1%yP9qNAF!9XiXh2`c$+9c4$frP;2=0 zWUaMt>+PlMSnD9Un_-81OxwhsL?b8C6z(UjA&-I2{SEL8`Rw=$uxOA0XdYL07vEJ!TLMqOx?1fT9nuW6gXEZ{)!?aZ^?t#gKO3hB#~Rkcn0`;FY<)20{kL;3@vEb$u)!}l0_i0~UUILURAb=kw8LsvaUT6|{2yG#tC7f= zML~?-bPb5p#8IWMX5IU)bPjKZtPfYGHK`frrpU~DU;t=ZTw^_~$~BzmGhv`uOWY+i z^$hq4PES6a;Oyl46P%y?>ICnew6&PX5F=uQ-V2$qglc?7cJmYE@h|=_ep|2s>#)2e zKv>+cdU!1sIQPsLQf_5wwi#gedOcz1Ytxakq$lf@4v_AlnKZ}yQ&0GzC@Kn1fRbH)Qj zuuZ6RT`tRnZ3Wj5@$i#mmv-5QQ7X+B9=7Bs%rWz(Z0L15E%vaf1rrU&sCYF~N(C{W zv4m>gQI=dCbE~Nq@Y$Zq?C^Oqf0i)CkKngTZv+1uJH%G1Yu*ZKNV?qeR1#RH1S@}PvQavCn z@o-m4+;l4qx%zQQvQ(LEd#2)w%bC%5sXl1vaDQFWA9) z2}KN4W3}BQ@|(5o{rv1xX9}A>nkjsF?ovzb*8v-rmqzypRDjJMPGkS3KVX1yjRSU? zd|z(E*2Z?hk(!DmWgEY}t(&N;3mf(c>+w>8v21<+A_w!&@;{x2katO$%MOqtINsXSL~DmD|FbMGQ5r&*hXqvMi=lU)Gfb>w$mlSnNH z`XWwORh;Zpb|yQ&@-AYe4(%ZbPUn0Q4{?$BW`j*=4lwZ_Hu1%!)M?Dt&cU`)mkU$O zu_5LcD@@r|?qTTOQE^0Ty^tP(K+kJJVgm+UdIMK%;KU8Y5=~zjV>Jh{raTt8^nb)w z^lXhzXtx?i{8WJg(K~spF0}+nhLlYOy^L2j6Rcz^Wplx`%=+Lii4WSHyag}meP134 zCn=&l%Q_N((g6;yYw~dOc8T~F>TAUmKF5!3R*Ttcw;81C?L@;hov|B8f1$AXq(|kod@IY7{DGQ0QJ@4(AX}0_gM~Eop8jTN+(Bpkoqrh9&isS-bWE zzC@ob_|IOyggM|82KL^MooMhs`*kiLMjum1h$EX=t0fI7kQ^JUp!&F0RLMb*;2{1f^@xh9@v>EduDv6Y2J- zTEcOx3wgPzssN@TOJzz`avxHgyp`N9Z}6ihoQrlbUv+$KO_|E zcmyt#awai-Pd1{uk5}C1Naiilnf+lzBds7>dIH9z1 zEaM-q>`L3oBaNfgnM@C%z||_Bwt=wGZN&}2zM(-l01a4VY|>Ifw+5Gc%PfR<|cjP;Ts-yB%Md?xrxGn<@vJ)ckP zV4Gc;2Kq`nlF70I6Qh>gptLE5lDLNPELoUep~8$c=ZFtxP{`$8Y6lfGiOcC2ZUm)6 z1qO#vzQPD3r|O-0SG8H|(`wX70H4D)sVx_pOIr6ffN{GylzNhLo)fDVC+$OxloGdz zULkW3{TFn{w5~@*Th+yi^$geOzVC$;>}XOLN?32UU3gH%zJ1I)^b7;^8i}RQDXIFLXT!Am$wk|cyO1z&eZV;dR^S7S3)X=}o z#UKB= zLCCMBtKO&-@vo+xf0x1zf3DvYSqBEq14P}=OKoZ3UL=l(2;00bi6QXEtR-!`UDAA& zg!Pj>fFN=hg76#-gU8>VyQzan9x5UsCeACPey~Fk-(OPZGja0)EZaF~&XFKeb@tn@ z%9y!nHVs4{1^5La-Af`e)>6W<@?>oQJ7D1OnsTCfrS~$;Bt!gxX;-E09idLA;T#Oz zu|p7Z2`s9&RjjGX8lrlbI1I~dI%e=#uQ)bU{)%GN;f{3V5x_qPH#lQx9%}ZHq#Zni zn!T-ZtRLl=+Jem_%2lygoh-9=I`@CIaxGdulWe`o5&r-dH0^VKyH_zoT$QpfN(Eb{`KWZITWzXsiPi0uDOlw+ zWVF*~A*2k~A%)2QV#1VkLC4qfg=(bUNsDhT#P=Lx3)yrrf^I(T6`Ao%774$bXvg%Z zQzU>anUXU;vAl2^aV^l;EQ|ybI_#!b_&9rnUO_&CI((K-Wv`&&yka|Qkxt1{7+8AI z27`&~?uc{GdjO)z4>}ku41S3OlbS$;P=%r?2-Vo{&umq36laBgo+o9?LtiwaZ5f|& z3W}0lWT-T+ojU0V#qt(hm|wNj_^UVc+?w@&taH{QbQ}hXs)MQ7QtOXQWMFNZpE7+6^Tt@R{4iduW0nJ1a7hj~L zqvO>g@^@ICol4sHRN48v^gh0SGh;1!(BXBnWV+i*?Auge?wYs^`_C$Zbx>kaTudrXQ8;KreOt_x&tOP zwMBEhM`?1V%AUGa$F2PMYxqj9;8j`MF=n)6qdp{031o_3SiU&bk{=NbaBr@gimb+5eX6DK1G{ z`F2kXL&zz3Zgt5K8Z-9V-~!S@Ni>F7`B!HSitftJZ~V!Ua;Cc}ZH$~s!C89_@3iE@?5lCDaT_5Ozh|2{>hZ}k9;zkYfr&Y&3X2#~?;6v`% zrartsswQ2LEz1+x##snR7(rjj#|UI+@X4 z8+}`wWCC1o_mmIbsUQ5NA{U5eFCyY5E%Q!)VNK@nnq3iR2310}!Uc;BguY=rPIMm| z#kX4j=Y4;V!tB$O>5G}|JFUoInE#N?Nh+)8hRHJAO{H+55!q=CGgcM ztDzyRlW9b^pPOow97uspBV@oyP?=%VBHCPV-AdZo0q$yi4E81+ z7Lkv+MQp$Y&1||u;Bv-sRKx93mL8q4<*tDq$P=;-Z=KgDV+|HcEZSDz7t*Pu3Os{& zXL6ek7|9LvM|9As2^vq1#!v(Z^E<=(y>FE}{INtbvm}NZh%-Hehil8S30f+fn%bWe z8yPmTbX;RWuSvb}#HXC?ob`nr43D7*x-h7Resrv%-RT{7<{4oXjy=^n2~&pqir5F)$@^3$$ZTVEq;#+x9alRZRavn{^aNN;MAuyyQwW272WMf0 zlPujnkND}P2Tob1^>+@H>y?@8T0C+hLBV#cjAYqzWXvPIBn1wK>&Eh<-IO!dW-CO+ zEN8-5Yj$9JVnVwKAr2fOeE+0V+2xXoo}kQ}8lV08 zZ_~San*<=P-B;cNYUo}(BGz=vdg}#X9|M-4BA%$7nS2uD+Fb^ zuh(eZxJ64?w!&wROk0!g{&hP7HvZO9*Z1Wac7S% zrPKaQ(tR=zjVrs=Ro%Pt^Y`I&x@A)2jA_8_$A+yvrT(4P##SH4Vt0VCWuu1EDC@-0}rxQgL8zQbkXxfV`2d+v&Y#RKt@zHNnVM zg_xMdV-NYz#$*|FOFFE4En8@cv&PD(P{pPi*`@hH%gKyr0G;)^?ip80=3RAmk*0xF zCD%#1$En@sC9SK4$cDY{2Q&`S8t5d9j|GFKxevH~2es0OVk~c%;cC_VYEYxh32Re5 zjx9HZx>3~Nf4GWo*O9tAP41%7?4o6k(sDygD!KO(rE?LR&#H=NDt3rmBx4!CDUws4 zT6ZpWsX_z!4q+1mTBV!`S8|kWoZ_in_hY(rTWbJzPCj|ojYd8a03DA^vq&|}32H`R z4NXalCerX6MLTt~MfA^SWLu{6u#YKAPWVu17exhTtapJe1F`B#FJ%FnSZXZBu!zicC; z7?TRcx;vo~yl-;;Z;=nl)VAZ1vjfhoBijM?E)#JUR?n6&uV}SrQFl**<|${n+it(N z+cwoQ5V8{yp)%8K%reBJp2}yH^$rBrE268e7PJC*9>{~;E{FL#I|PZptC`j^>up9O zVwP@({3R_=<-)N<7aylC7mQm3*zUBPxQ@yk_AT{rRx`5>~-surWQfx<woRABHKAiOt9H>?!BhE%uOk#=T;-J85d%x`xzXIV^AHI31j=Qg)NB6>Pko zk^aohJ32r4r$~D`TQ{@K6{T7c8R&HQGn7*qT8xUeYVVPYtZvpYZgj$ef8>nDw}7Ftkf#}##oyP zGUKUgOLS{O6aPe|2<2VvZm13S))Y389cMY4ctanpxji{OH*Sy}^o_EG1m2aiMajVn zX=p)24X|qn z&vTG{#|yI^Icu6KmgERrHJ4DBw#am8MUSi!4^)$(B@XS_B5t&W&zZF)?L`eigvqOs z5VKjbyk?FAfSKvJVb-X*zpCcBb=A|5US6z^bSv$GkB){c+1%wP(Did-wW2Lfo$^S! zo3mVQ(-or_Ci%=$p`&V1Q3UvrlEoB+YWb`|z*QCyv zu9nPMwt6OG6Rs(^wyj>_Z#e3vxR;{}ygJCnM`4VvSla7L)ytZv@I9I6S*H1LRc&Uo z*fBEGi?gE!iNwNwUmIS_u1P|uZDw>;129|c`G(h!)+F=B7xj8+qc zYHd2vR_LhV(6t#lfM$iFb3_zGvM!>9QjbOxj$Razy(weLW-~j;beKKD_2-R6{QDXiuhR+SxcHa8^-XV=u2nHfAET^x%i)J zwh}Ahy9q98z}&Zl4ZUw0A!| zxc&dma^FCt5?U!pmvX?_C1!+GRN_|b5*H6jSKucPyAeuXACh%NKTMK980A;D4Nk<; zk0GOjQM!b>%4lX|dR8$j&!^|bd1Stq)0x(GGb_)k%*ylfJU8{CMEM?!rDaZv!>_fa4p5=%;#c>*=XtD*Looc-g1D!plDG z6<+p&PxrEOv+}$=Pq>pQSsv{UEebZ#+Z9

        +dKQ%oQ!SCVvmZB-oI7AeVAr6tOzZ z>o_{t@p*Z4BRgPnq5QGUP}(#r!jO2D2Pm75juqfIF`M0<$iC%7TMGj}u%tGO=bm(f zlFH8qAgS7<$1K=@KmBt8+ymZXuiQe&f}1R=R!+c zNXegkozYj}#c+{{2C+q5p2>O_=b!Ik>C}k8jHwzzJ}EROi}p#t!REb%SG1?SivQ5P zfHfaf@^lHKXw0Ps;f07*MPKG=KFeswKV>d6vs0c=&x`Y9q-FqHuvNCStv|<8D(S(9 zMnWZN00DVPh5hR7a*=ifZ#A24+2@&Ni0Sx0q|# zqhN=$$tQxD9?EoG17ul<4;L@`aAYzlGESh)z2#>BIKTPRH&7w-0Y2}QR$7)Z$2P}i zj~iuB`wp}J+*+}94M;n>+NTS7Vs33tEk6|y)QE)8m&OxT83$q`>6eZGbRgK#&IqLq zC9kSB{MgzJW#muVLgB2Ue49GOsVrW1xT1@lF5AHv;-T%qrDaq!9fqDQn`z24hZ6nO zhO1I;eJaWR=fCG|<9zc)+V}_CF3-}zcu5C$=E|kh(CDZCk?O3qS@k*>s-ClCQ9bw|o#?L6bv+zkv)h(K-i=h#jh|cU34=7^#d~!jNDDnsBY?tL*tvzjg z30k5K2BR?+fxVMKkyuf0KX9sRX1rf3nCRJuxxJD_E^pQx3@znI19_n*A(^5O;#|t| z^Nt>tQ#_7}M881Z=4p7 zX^9mYM#wYc?E$PYC2*%@T4c=2ARnmrIM*{a^+SWK3g_3V>@40H*;D=dsisIx8E}5YuWmqf&HgP(+=oVfYI9rxA*U+MTK^z^DyLeba^gdj z%U2y6_CQ;C^%?46?wfvDWq6m|57I7eW92^gD^IQp*(bf31(CZpwz%IcvnIC5898E zSS;49gISumQ)cIeIXIPf^?@i1M~CW=c+-tXTD+f*SnlrYBB;$G-pA5fuX;XSLb+|a z!Dg*3Q^aNgmv>qW;)q{ugs%MRzIxOZ!KP4qmBaJEaX`DN3M$$|=@JAN+n3e|6`7e) zZgDu769RHHIwjHu`KZ@4j_M9oeA8sf{l7wVRl}!2f#0yw#*;4TMr$s3Xger6eaLA3 zcXiTBBPws-I$4?Fs9mfKs2*X!p@QT0%~U|(B#ns=yr&=7#XD5$glIuVFkxvot*MXu zuY}`@xmXnu;7cd1_b?3dw_Lmg^8lG%%-*>djp)vXTo2I!n*5fpwHtVVTs+(7(4>`y z0cUQK3sc3($u0}^yAHjoR#}K(Q-(68UQ#)bz$EQ|W&`}zrgWwTALSoq&(KZvwnQxqpO*)wH36fEwhH&(GTKbQqlM|r8aZ4s-vqK`DW)JX^8;}vJJ1Av z%C_b4r7bIu6hr(s=rL`VJI zO7xO5c!e#3Y9wc9W&k~{+>(gY(81y2K-KPtYA{B+vW*!g& zZN9ck?~8!D^GK>?!cm12rIv)8NW=`KwXg^rL0-nrFsNSTVtCwJ~m5iqu5>mM;Pd+U*_sVo&>@&o$dp4Kvrm)m+-dOOG~k3uD#>0wE_qwa zdoX#UD+QBDtsg{kqe^FMA#6r5BCGmSexPr+RO3S=az*UsU5vf*VTcRaQVg^;WA=-} z;D3S}cX3S-%OrWF{)YL^qcSX)K8#@_)5f2D z;*E*?57#M&;3XJClc~8SOqI282VN!iUk3uWzNR*l%{@1cLXT2rlLP9_K)TKE3Jh{W zje4HY1M>-_3@uI`y@FjSEHJ$iT;3*7@$=H;k$o5j2nh{X{IVBZIptl!V+rlNq z+kb8|H9V*#Z_e!w-%)`IRbFi0i-r7HlVkqJBfo42QfnE`%AV(#c2A*qNaC8H@o;Y% zoczO+tlo+JZB|%0rI*oYNQ4!f2527QBvhtG^2J{rAzqh8DXh5kEO2;GEsTKrP_F<+ z*uBucFmBg8Mx0|SZU3)1YDDnu_B$|QU`CbM3ygF8>umtR8>f-RW2e5W&@O4*miXIl z_E&7JcIwQo@HZM&$2GQuhlElMp3EZ~NOsB80Q`TLF*fk>tCmrr4mF~$dkMC$;nwhZ zo|}PmcntB&I&e_v5K3txs@%!x9vD=~RDVXwT&kpQ&hdT<*3gi4`wCTOBQOEo+A%K^ zwA-J3X1 zc7-o<#p$#!%a3Q^fXQh9+{7??Hv{;}qLIKyM&T~egm8M?>Ab)ZbQoqU8^XU#GzCAh zQeRDr7+7jYm#fT^lPI@YS-q8PVFt)oKq+hGy$VE%Az-$M>fR%Uk4teW@l&G{3T$#1 z(a<^KS#Dub7sgre=|(wnc2f+*&>Nr$%n=Er!Rv8GEwwq)SDq)>R~7=L8=)c?*r4GJf=z2qKJlEcsE{{ zTVBejNIftK zOsy1rH1Vk7)dx;sWM;t16qkguuVNQG20E}WsU;n>U;V3Ck2)%v;x=@{5RIFQ&xfRV zHkMRc%yBU@DJ|!?oSBwZv##)@P}>qkA-bP+!i`7bbGtyLZ~KRJc~(Nz<-S%>dD%|3 zSD$K7LK3H5r>4j6mJ zingiqs}4|hx#TlGub=w9%4n2z3FATj4SbBM?&`IxZuhjE#;U#!V&jmS@`Jjc;2F~G zUZg{4+Fah{*vzDUb`%0uuve|DEJfkI`_=Z>ycI%X-;}%Fom@CNb|))@_JHcI(M%%R3P)hF>GE> zO4EGX34b*-8|B!WZtXwOl^b#V?;rARV0+7r+`#^I1N}qt=$uE{D!ZJpE+J(BilmpBB}AgwVe>v4UQ34w1_t#aVcl z5B<)hnrskq&7JXk@u~!;!(irE$7w!{yC^PD!1ja@=#Wl>&rz4 zi#dd~aCzGub&cf=P)PZPqnR-)o*Iv0PmM_=1s7iWG{2Wk zofv##I7>~@DBz(z^Hwao$SFZn<;QD$YP?1*R%1Z7NNgO~e<3lz=jh3}C;cDA+9r+c zdj10Q^oltj*E2G5TEj(Ss!*~@26opCs$>o2gnZThF%ChK&~OG%F0;Y9j64Bw&UD;n z>LP{cJri=0cnbfN8g^zobF5J1h3umziVacGziYTh>A3YYjlmdSbnb~Rql*wosl3E? z9d1h(d+zYyNsW;aDgx$r5ofF|kL^09-Npb^VsPk>e?Q(z1iQzg{`kBw46kQGjMQ%G zQZ)pxc*kTW!4>Wr9j07tpmjZj*HYw~1-H*^W!hRNFDv*QywoZuS2$P+J`26Zi#t0# zZg-+;J)B>KiP~P06VZwVREd0*)@S{gJTu`=7#_1Sk4Yukp3|AJDv>jaYSFV$%@w~j zxo-Cfwb@lv)OUbYC?uzeS;oEVyY$7naVJFXZ#-7`%GKD*>4#e}p7Zj8|*TvPD^p0t8HzIkz`0z;92#sJ=;2|*4 z4AL(Aq-l+GnYQAaC+IQX%2})$?u~^>S2uia%}=w66~9_VH~eFgQ^gpHaWBdGc+O?> zF5~5BJ8gN2D2^t8B~kJ;-_C#DaOZ7f$?5VOqVBM7-m3hNwb%NbpX2G-K-yhIC*bkJ zE3bBrowkp-2O<47pRan2KyQdC4Tohs9g>{vwh`yij2(F9*H*ji(Dv;jHX}ifELD{1 zK6Msn92_1#){%SgCT6p8G+|s|yfJ>~1)=oC>>b%vNGh02GWIgzWhmq&=dJl_AQ<~0 z-|Dw=IrE~@SJqiZX%Ob5X2318;m@|t!i#v*4uopT7kmX*^3%CSFo2^<$V%sqEj^AfYZGviN0kTf0H^ge&aHRyHxzrx4j7+3jsNy?omVn{wZSI+|0+DIoMz@N*xenCmfGDc2Yr{SWrg_^m0Xh z+przL-AhQGXL`>-k_a1XB#nsQ|FL_^C8oytL4EwUhC9SWoN%QgW1!jlN3uCN zx&g6jJ5@7Dt0@_2izcA5;c3%;LxHbNNhWy3*O2yQ2DD0je`OKgosX?nyi0O9DrTS{ zI0-IlQrOA!IV}y7@`B%s0l&VVeBgfcF|KWibatr<%5zvdTRhyDju#2ori;++ay)tR zXX$`|sL|oVB-XcCL~O=?s&8=uH_Lxncu6L_L|~zE`+%P|#MhDkZoQp=rBAN@#&^c7 zmYw+GzpixUrB@Pt(NQwNPQgr#cP}X?R#?8|tS9!fWkS&-g6fV_mHxu5ebhL~OIgw+ z1M(xccM|W#{OOB;c0~4JRN%j4=$MGvs&Sr}wh5z)X_yz zJxCc9G4K=cctNJ22B6c0Q}6bMT>QV=*C zWgqiJ{h|m?1Tss(>z?fe0Cj zo*bk2kH6n_&I&*3qMU4qxmM;TdkH_eF^Mi*d_CQpEhlw7X%_Ns&ZF>-`&~}~?#}A( zBd&^v;ltT)r=RP}|M!8d;6YGygmcN5kNA0GR!2n6`5QW*)R|nwxIHrlVZJ!6gok0Lw|?-`qIU3jru`Ci6~b~J;sQ>NYS~40GR#qy?r~oNUo;v zrqZS^OGM}$2dcG=jpII;cEwe|iQ0u3K-|k*}pTK7jq5Y0!x?DkZmiuD!RI{)Da&q4Pk1QHfaZ{l1BuN$-a^kiyiemK3Z0EGqZA0AeaS)gfdj6qrK_(P!Cd zL0;gyhf-VxR=^Iz$9YUXIAn0iFKrk2DareaVPyb{VghO`|W?M zkO%eH)z#noZ2Ja5Le)ma4SApyURuwPX!K~6xOO!!XEZx?E$&z$i>^1ZQO6r?pPC9?V=QdoL^4 ze-VmFe+tMTZm>wp?pDgSF3@(6UPR9Bu#M~raJ?IIsjG8Jm1dC_{afE&&9P2>n>;R9HMms(_-Z4dZa~MgS45vu+F!y49AwYbMO(p&B@ocvw~)-x$*M{U9i>9 zTe6k%b9pCNn3p@JctQADCTYZgRFJ-_oYoaC<>*J^Q7k`(>SxWOWqw>GPmvq-ijVdC zFXpktwZdZW?gS^-gb_7PnAv}~pSFvH&?ZyM_F{$|X z8~NFJDRkqOn&)0DPpq60C{680ih zlEbCn3<9NO6IYaHUY*F79s%K-psW8012^97;(gd@O^dFD9}!NZZX#0|jp~Vm#~i)G zn6JB}?1X|El@9`T358T$34_Xa@=bWB&gfnout7#F-Du>NrTF=SMl%;9*GKa-4K6Dz=Go5>W`gk%x`* zgiN~YA*K7PMhkDjx=RYkx3ZtV(kOD$)Hc8WrDr6SJq%@Fldg(d=zE;WE)|POET=>^ z3f1ybYkTj=+@Jz$?Ej(qvDPR%-euKcFOi&7hc*o%VK z#(V%H%i)fs`IA5t`48D6XJMsfvatMBHe1vqz!-_QrT~%c40i_hTG^5%Y`A@v9KFk; zbl|=FsEsR9zyIi}>Lvv#j4)He)!K#{2~)9^MA5bb%lt7oiN3UV!@|2lEU;8S;CW7y zo%-gSQolQuq4-tA5p=2gL{c)>*fjMxI`3~xUDlB$e?UtLRrhrrbMxVOk5D(Y8U~R} zvPj;y3LyOLB72i0X|`hq>_j;kQlXOXWapH{Cgk~#z2A#ZEH0|jgJV0e5@4O+dfU_l)3M_qv|9A8><_$Vs_VY=r=hDPFr(6wCK=P zeJD{Lb0KOD6$MyQHY)Mxr=pFT$UpO3;Y6DD72h`O|5y0?O}uM7_)mg&hS^GWFw!n~~TTbnWNNHtBD2L6Zo3T`McJnuYvx zgu4+W_QSm6$nxWXF~FV%A6_55w&k5V>J9a~3>`I_o-Rl6_P_jFhGEQu)kYPz!&Nf+ z|2N)Csj?R>VmJK=p*!WY4=B{n`z|olCnKk4vwR5~}*(sfLs$FL|j` z@AV%`Q~u`s?f!I^>90I1eN|3X`e&tw_q>YkcKBuTYM2tIsz&-ErWa3DuNZQ_-_yi0 zs`Y9o#pVo;-`S=|e(Sv&%4h7}_pf^OxaDD2{;1SY6sw*ENQbl&{AY&i)+ggvWIh<- zGU^1xKyT{hhXsyhw)SQoOowX+9)mp4m#y#QyVo(ZRS)UPOk{yBE2m?vqvSfbwJ3IAOe-Y8DB35ygt_GD>Rrtsq1BR zW>mavN;Vn@J1S6F2HSe&F4+_Pp;ue%GNNGo6&S5c9^|H> z+xR6j2xT&;VIiTxL%X-wghCtW$BvLf(7-u%b8|Jg;2>Ew*knbLQFk(Ij9Jl$GUr{bAu3VDYQ+Uev51yMYdZ->zo4HJSBXQ)Lk$w zb}?xe4GCP)iij0`+t&q~dJ%dXh$3h~JpM@GJuH0phwgj%7ur=6Iih!{^WiHS5CWS& zY=XU@7l&~0_|QBX$o)}EPwC5{?IciCOU+Y~){ZVykHGX~_4^ap@iulC0>9P(?8;l! z3-|u1t-*C9JABA0Xrkv_$S&b~IlFW9F1>ya!rZ(v8p>nQ&qC&6CcyehVr80@lVZWJr&Qj!hvdHb}I0h<`E|H(H@pXv;icm3JqHf~LI4WHX(WcHWfV8OF z#{$LdK!jR>t6yXLupkuH@p^884G3)abdIMn1XKeV+MA@EK9$fOZ9D+}U>5ODAtgw5 z^A9y*J15sc@zA0F+M#A-8_eBf$3h-uExbFP=r9~ORnQ1+dGu$RN5xwZUBb|59xYlS zTxO_zA1#`=q?i~@V+!6)*1lES1#58qXL8t0V@k>oiT*c-itmK?;sKH<3I9BgkH};A z)sSIA=S-A!g0c=o?@2J{6mX8_Oo}_ro_$fR_Y4k$yfCGPuP3uE35J#=t~cFi(bhRK zayuam%kc>iNeH1?aM*5Zg-z2+YOyJ(4Lm$J*6^rL;F0f==jYaoUJ(bmrBYrrQ#r+Q zrq&9w{nfiIZ!!xsY7Ep$Xyn21{qNP<0GvvzG6n9n zGNsdjqwW7gh)(i)`f6h%i@kIQGkTIOjDEaVD`X#gr)Hg?dv6C=lAOZVJ`XIUwIIwo zc1J5gc*&E-Q8xI~9*XU=a^hb>t$3w#~?$Y5dK0)7?= zkC@Z8ISOkK@k!T3k6e$toLLKK5U3DA11bQOkf}d=>@W{u6Mf?9o`@Nw$v9^lfyXB^ zKPK^ZIAQHc`ACS+d~|F`oeACSFdEai1ydXoK@yUpa-HPU=gb*2D{m^f$&B8Z#Zruf zR94B^X-3i*r(2DK-qZ5C)Z(l=wGzVeC=1_fhipurYAS3r$NGObvgPbCM zy_?@WQ{TO^h*O+o-N$c*jCB%4jC~7gcf5DImm0_b-%+aqe!o~{b$dToMR1ds=%?W( z6oH4|rdwQs0o@k=us0S`zFI$A07XCkrIaVwC-QXpμ;G#IsXV#i_r*6j2 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ϊH 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 P`^|p=16-nDr^^Tcbji=` diff --git a/apps/dashboard/build/_app/immutable/nodes/7.B1rI2ZuC.js.br b/apps/dashboard/build/_app/immutable/nodes/7.B1rI2ZuC.js.br deleted file mode 100644 index 683a4318e659c93d28536637d6d6076fd6d4a80f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2404 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.92?"near-identical":n>=.8?"strong":"weak"}function ge(n){const i=Me(n);return i==="near-identical"?"var(--color-decay)":i==="strong"?"var(--color-warning)":"#fde047"}function Ze(n){const i=Me(n);return i==="near-identical"?"Near-identical":i==="strong"?"Strong match":"Weak match"}function Ee(n){return n>.7?"#10b981":n>.4?"#f59e0b":"#ef4444"}function Oe(n){if(!n||n.length===0)return null;let i=n[0],d=Number.isFinite(i.retention)?i.retention:-1/0;for(let u=1;ud&&(i=b,d=_)}return i}function Pe(n,i){return n.filter(d=>d.similarity>=i)}function be(n){return n.map(i=>i.id).slice().sort().join("|")}function Be(n,i=80){if(!n)return"";const d=n.trim().replace(/\s+/g," ");return d.length<=i?d:d.slice(0,i)+"…"}function ye(n){if(!n||typeof n!="string")return"";const i=new Date(n);return Number.isNaN(i.getTime())?"":i.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}function He(n,i=4){return Array.isArray(n)?n.slice(0,i):[]}var Ke=m('WINNER'),Ue=m(' '),We=m('

        '),je=m('

        '),ze=m('
        ');function Ge(n,i){_e(i,!0);let d=j(!1);const u=P(()=>Oe(i.memories)),b=P(()=>e(u)?i.memories.filter(x=>x.id!==e(u).id).map(x=>x.id):[]);function _(){i.onMerge&&e(u)&&i.onMerge(e(u).id,e(b))}var k=Re(),V=we(k);{var le=x=>{var X=ze(),B=r(X),Y=r(B),h=r(Y),C=r(h),ee=r(C);s(C);var H=o(C,2),de=r(H,!0);s(H);var K=o(H,2),q=r(K);s(K),s(h);var L=o(h,2),U=r(L);s(L),s(Y);var W=o(Y,2),ce=r(W);s(W),s(B);var R=o(B,2);oe(R,21,()=>i.memories,T=>T.id,(T,c)=>{var M=je(),N=r(M),I=o(N,2),t=r(I),a=r(t),l=r(a,!0);s(a);var p=o(a,2);{var Z=y=>{var A=Ke();v(y,A)};G(p,y=>{e(c).id===e(u).id&&y(Z)})}var D=o(p,2);oe(D,17,()=>He(e(c).tags,4),ke,(y,A)=>{var O=Ue(),me=r(O,!0);s(O),S(()=>g(me,e(A))),v(y,O)}),s(t);var f=o(t,2),E=r(f,!0);s(f);var ae=o(f,2);{var Q=y=>{var A=We(),O=r(A,!0);s(A),S(me=>g(O,me),[()=>ye(e(c).createdAt)]),v(y,A)},ve=P(()=>ye(e(c).createdAt));G(ae,y=>{e(ve)&&y(Q)})}s(I);var se=o(I,2),$=r(se),De=r($);s($);var fe=o($,2),Se=r(fe);s(fe),s(se),s(M),S((y,A,O)=>{pe(M,1,`group flex items-start gap-3 rounded-xl border border-synapse/5 bg-white/[0.02] p-3 transition-all duration-200 hover:border-synapse/20 hover:bg-white/[0.04] ${e(c).id===e(u).id?"ring-1 ring-recall/30":""}`),re(N,`background: ${(Ie[e(c).nodeType]||"#8B95A5")??""}`),ne(N,"title",e(c).nodeType),g(l,e(c).nodeType),pe(f,1,`text-sm text-text leading-relaxed ${e(d)?"whitespace-pre-wrap":""}`),g(E,y),re(De,`width: ${e(c).retention*100}%; background: ${A??""}`),g(Se,`${O??""}%`)},[()=>e(d)?e(c).content:Be(e(c).content),()=>Ee(e(c).retention),()=>(e(c).retention*100).toFixed(0)]),v(T,M)}),s(R);var te=o(R,2),J=r(te),F=o(J,2),ue=r(F,!0);s(F);var ie=o(F,2);s(te),s(X),S((T,c,M,N,I,t,a,l)=>{re(C,`color: ${T??""}`),g(ee,`${c??""}%`),g(de,M),g(q,`· ${i.memories.length??""} memories`),ne(L,"aria-valuenow",N),re(U,`width: ${I??""}%; background: ${t??""}; box-shadow: 0 0 12px ${a??""}66`),pe(W,1,`flex-shrink-0 rounded-full border px-3 py-1 text-xs font-medium ${i.suggestedAction==="merge"?"border-recall/40 bg-recall/10 text-recall":"border-dream-glow/40 bg-dream/10 text-dream-glow"}`),g(ce,`Suggested: ${i.suggestedAction==="merge"?"Merge":"Review"}`),ne(J,"title",`Merge all into highest-retention memory (${l??""}%)`),ne(F,"aria-expanded",e(d)),g(ue,e(d)?"Collapse":"Review")},[()=>ge(i.similarity),()=>(i.similarity*100).toFixed(1),()=>Ze(i.similarity),()=>Math.round(i.similarity*100),()=>(i.similarity*100).toFixed(1),()=>ge(i.similarity),()=>ge(i.similarity),()=>(e(u).retention*100).toFixed(0)]),z("click",J,_),z("click",F,()=>w(d,!e(d))),z("click",ie,function(...T){var c;(c=i.onDismiss)==null||c.apply(this,T)}),v(x,X)};G(V,x=>{i.memories.length>0&&e(u)&&x(le)})}v(n,k),Te()}Ae(["click"]);var Ve=m(' Detecting…',1),Xe=m(' Error',1),Ye=m(' ',1),qe=m(`
        Couldn't detect duplicates
        `),Je=m('
        '),Qe=m('
        '),$e=m('
        ·
        No duplicates found above threshold.
        Memory is clean.
        '),et=m('
        '),tt=m('
        '),it=m('
        '),at=m(`

        Memory Hygiene — Duplicate Detection

        Cosine-similarity clustering over embeddings. Merges reinforce the winner's FSRS state; + losers inherit into the merged node. Dismissed clusters are hidden for this session only.

        `);function ft(n,i){_e(i,!0);let d=j(.8),u=j(xe([])),b=j(xe(new Set)),_=j(!0),k=j(null),V;async function le(t){return await new Promise(l=>setTimeout(l,450)),{clusters:Pe([{similarity:.96,suggestedAction:"merge",memories:[{id:"m-001",content:"BUG FIX: Harmony parser dropped `final` channel tokens when tool call followed. Root cause: 5-layer fallback missed the final channel marker when channel switched mid-stream. Solution: added final-channel detector before tool-call pop. Files: src/parser/harmony.rs",nodeType:"fact",tags:["bug-fix","aimo3","parser"],retention:.91,createdAt:"2026-04-12T14:22:00Z"},{id:"m-002",content:"Fixed Harmony parser final-channel bug — 5-layer fallback was missing the final channel marker when a tool call followed. Added detector before tool pop.",nodeType:"fact",tags:["bug-fix","aimo3"],retention:.64,createdAt:"2026-04-13T09:15:00Z"},{id:"m-003",content:"Harmony parser: final channel dropped on tool-call. Patched the fallback stack.",nodeType:"note",tags:["parser"],retention:.38,createdAt:"2026-04-14T11:02:00Z"}]},{similarity:.88,suggestedAction:"merge",memories:[{id:"m-004",content:"DECISION: Use vLLM prefix caching at 0.35 gpu_memory_utilization for AIMO3 submissions. Alternatives considered: sglang (slower cold start), TensorRT-LLM (deployment friction).",nodeType:"decision",tags:["vllm","aimo3","inference"],retention:.84,createdAt:"2026-04-05T18:44:00Z"},{id:"m-005",content:"Chose vLLM with prefix caching (0.35 mem util) over sglang and TensorRT-LLM for AIMO3 inference.",nodeType:"decision",tags:["vllm","aimo3"],retention:.72,createdAt:"2026-04-06T10:30:00Z"}]},{similarity:.83,suggestedAction:"review",memories:[{id:"m-006",content:"Sam prefers to ship one change per Kaggle submission — stacking changes destroyed signal at AIMO3 (30/50 regression from 12 stacked variables).",nodeType:"pattern",tags:["kaggle","methodology","aimo3"],retention:.88,createdAt:"2026-04-04T22:10:00Z"},{id:"m-007",content:"One-variable-at-a-time rule: never stack multiple changes per submission. Paper 2603.27844 proves +/-2 points is noise.",nodeType:"pattern",tags:["kaggle","methodology"],retention:.67,createdAt:"2026-04-08T16:20:00Z"},{id:"m-008",content:"Lesson: stacking 12 changes at AIMO3 cost a submission. Always isolate variables.",nodeType:"note",tags:["methodology"],retention:.42,createdAt:"2026-04-15T08:55:00Z"}]},{similarity:.78,suggestedAction:"review",memories:[{id:"m-009",content:"Dimensional Illusion performance: 7-minute flow poi set, LED config Parthenos overcook preset, tempo 128 BPM.",nodeType:"event",tags:["dimensional-illusion","poi","performance"],retention:.76,createdAt:"2026-03-28T19:45:00Z"},{id:"m-010",content:"Dimensional Illusion set: 7 min, Parthenos LED overcook, 128 BPM.",nodeType:"event",tags:["dimensional-illusion","poi"],retention:.51,createdAt:"2026-04-02T12:12:00Z"}]},{similarity:.76,suggestedAction:"review",memories:[{id:"m-011",content:"Vestige v2.0.7 shipped active forgetting via Anderson 2025 top-down inhibition + Davis Rac1 cascade. Suppress compounds, reversible 24h.",nodeType:"fact",tags:["vestige","release","active-forgetting"],retention:.93,createdAt:"2026-04-17T03:22:00Z"},{id:"m-012",content:"Active Forgetting feature: compounds on each suppress, 24h reversible labile window, violet implosion animation in graph view.",nodeType:"concept",tags:["vestige","active-forgetting"],retention:.81,createdAt:"2026-04-18T09:07:00Z"}]}],t)}}async function x(){w(_,!0),w(k,null);try{const t=await le(e(d));w(u,t.clusters,!0);const a=new Set(e(u).map(p=>be(p.memories))),l=new Set;for(const p of e(b))a.has(p)&&l.add(p);w(b,l,!0)}catch(t){w(k,t instanceof Error?t.message:"Failed to detect duplicates",!0),w(u,[],!0)}finally{w(_,!1)}}function X(){clearTimeout(V),V=setTimeout(x,250)}function B(t){const a=new Set(e(b));a.add(t),w(b,a,!0)}function Y(t,a,l){console.log("Merge cluster",t,{winnerId:a,loserIds:l}),B(t)}const h=P(()=>e(u).map(t=>({c:t,key:be(t.memories)})).filter(({key:t})=>!e(b).has(t))),C=P(()=>e(h).reduce((t,{c:a})=>t+a.memories.length,0)),ee=50,H=P(()=>e(h).length>ee),de=P(()=>e(H)?e(h).slice(0,ee):e(h));Ce(()=>x()),Le(()=>clearTimeout(V));var K=at(),q=o(r(K),2),L=r(q),U=o(r(L),2);Fe(U);var W=o(U,2),ce=r(W);s(W),s(L);var R=o(L,2),te=r(R);{var J=t=>{var a=Ve();he(2),v(t,a)},F=t=>{var a=Xe();he(2),v(t,a)},ue=t=>{var a=Ye(),l=o(we(a),2),p=r(l);s(l),S(()=>g(p,`${e(h).length??""} + ${e(h).length===1?"cluster":"clusters"}, + ${e(C)??""} potential duplicate${e(C)===1?"":"s"}`)),v(t,a)};G(te,t=>{e(_)?t(J):e(k)?t(F,1):t(ue,!1)})}s(R);var ie=o(R,2);s(q);var T=o(q,2);{var c=t=>{var a=qe(),l=o(r(a),2),p=r(l,!0);s(l);var Z=o(l,2);s(a),S(()=>g(p,e(k))),z("click",Z,x),v(t,a)},M=t=>{var a=Qe();oe(a,20,()=>Array(3),ke,(l,p)=>{var Z=Je();v(l,Z)}),s(a),v(t,a)},N=t=>{var a=$e();v(t,a)},I=t=>{var a=it(),l=r(a);{var p=D=>{var f=et(),E=r(f);s(f),S(()=>g(E,`Showing first 50 of ${e(h).length??""} clusters. Raise the + threshold to narrow results.`)),v(D,f)};G(l,D=>{e(H)&&D(p)})}var Z=o(l,2);oe(Z,17,()=>e(de),({c:D,key:f})=>f,(D,f)=>{let E=()=>e(f).c,ae=()=>e(f).key;var Q=tt(),ve=r(Q);Ge(ve,{get similarity(){return E().similarity},get memories(){return E().memories},get suggestedAction(){return E().suggestedAction},onDismiss:()=>B(ae()),onMerge:(se,$)=>Y(ae(),se,$)}),s(Q),v(D,Q)}),s(a),v(t,a)};G(T,t=>{e(k)?t(c):e(_)?t(M,1):e(h).length===0?t(N,2):t(I,!1)})}s(K),S(t=>{g(ce,`${t??""}%`),ie.disabled=e(_)},[()=>(e(d)*100).toFixed(0)]),z("input",U,X),Ne(U,()=>e(d),t=>w(d,t)),z("click",ie,x),v(n,K),Te()}Ae(["input","click"]);export{ft as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.br b/apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.br new file mode 100644 index 0000000000000000000000000000000000000000..f0204651f22a8778858e71456f23c1a99197641e GIT binary patch literal 4941 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 Lj-FH})Uf8~lNpF^ literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.gz b/apps/dashboard/build/_app/immutable/nodes/7.br0Vbs-w.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e5f616e64937e17443f03c927cef84d972400936 GIT binary patch literal 5697 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js b/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js deleted file mode 100644 index 014a288..0000000 --- a/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js +++ /dev/null @@ -1,4 +0,0 @@ -import"../chunks/Bzak7iHL.js";import{o as Be}from"../chunks/DWVWfZUn.js";import{p as Qe,s as b,c as Ye,t as D,g as e,a as ze,d as t,e as o,h as x,r as a}from"../chunks/VE8Jor13.js";import{d as Ge,a as n,s as v}from"../chunks/DHnEMX8z.js";import{i as ue}from"../chunks/JkhlGLjU.js";import{e as ee,i as xe}from"../chunks/ByItJEsC.js";import{a as g,f}from"../chunks/7UNxJI5L.js";import{r as _e}from"../chunks/Cu3VmnGp.js";import{s as He}from"../chunks/BR2EHpd7.js";import{s as ge}from"../chunks/ussr1V5_.js";import{b as fe}from"../chunks/BRHZEveZ.js";import{b as Ie}from"../chunks/B5Pq2mnD.js";import{a as u}from"../chunks/DcQGRi49.js";import{N as Je}from"../chunks/BNytumrp.js";var Ke=f('
        '),Ue=f('
        '),Ve=f(' '),We=f('

        Promote Demote Suppress Delete
        '),Xe=f(''),Ze=f('
        '),et=f(`

        Memories

        Min retention:
        `);function _t(me,be){Qe(be,!0);let k=b(Ye([])),P=b(""),S=b(""),he="",h=b(0),A=b(!0),T=b(null),te;Be(()=>m());async function m(){x(A,!0);try{const i={};e(P)&&(i.q=e(P)),e(S)&&(i.node_type=e(S)),e(h)>0&&(i.min_retention=String(e(h)));const c=await u.memories.list(i);x(k,c.memories,!0)}catch{x(k,[],!0)}finally{x(A,!1)}}function ye(){clearTimeout(te),te=setTimeout(m,300)}function we(i){return i>.7?"#10b981":i>.4?"#f59e0b":"#ef4444"}var C=et(),F=o(C),ae=t(o(F),2),ke=o(ae);a(ae),a(F);var M=t(F,2),$=o(M);_e($);var y=t($,2),R=o(y);R.value=R.__value="";var N=t(R);N.value=N.__value="fact";var O=t(N);O.value=O.__value="concept";var j=t(O);j.value=j.__value="event";var L=t(j);L.value=L.__value="person";var q=t(L);q.value=q.__value="place";var B=t(q);B.value=B.__value="note";var Q=t(B);Q.value=Q.__value="pattern";var se=t(Q);se.value=se.__value="decision",a(y);var oe=t(y,2),E=t(o(oe),2);_e(E);var ie=t(E,2),Pe=o(ie);a(ie),a(oe),a(M);var Se=t(M,2);{var Te=i=>{var c=Ue();ee(c,20,()=>Array(8),xe,(w,s)=>{var _=Ke();g(w,_)}),a(c),g(i,c)},$e=i=>{var c=Ze();ee(c,21,()=>e(k),w=>w.id,(w,s)=>{var _=Xe(),Y=o(_),z=o(Y),G=o(z),re=o(G),H=t(re,2),Ee=o(H,!0);a(H);var De=t(H,2);ee(De,17,()=>e(s).tags.slice(0,3),xe,(p,d)=>{var l=Ve(),J=o(l,!0);a(l),D(()=>v(J,e(d))),g(p,l)}),a(G);var ne=t(G,2),Ae=o(ne,!0);a(ne),a(z);var pe=t(z,2),I=o(pe),Ce=o(I);a(I);var de=t(I,2),Fe=o(de);a(de),a(pe),a(Y);var Me=t(Y,2);{var Re=p=>{var d=We(),l=o(d),J=o(l,!0);a(l);var K=t(l,2),U=o(K),Ne=o(U);a(U);var V=t(U,2),Oe=o(V);a(V);var le=t(V,2),je=o(le);a(le),a(K);var ve=t(K,2),W=o(ve),X=t(W,2),Z=t(X,2),ce=t(Z,2);a(ve),a(d),D((r,Le,qe)=>{v(J,e(s).content),v(Ne,`Storage: ${r??""}%`),v(Oe,`Retrieval: ${Le??""}%`),v(je,`Created: ${qe??""}`)},[()=>(e(s).storageStrength*100).toFixed(1),()=>(e(s).retrievalStrength*100).toFixed(1),()=>new Date(e(s).createdAt).toLocaleDateString()]),n("click",W,r=>{r.stopPropagation(),u.memories.promote(e(s).id)}),n("keydown",W,r=>{r.key==="Enter"&&(r.stopPropagation(),u.memories.promote(e(s).id))}),n("click",X,r=>{r.stopPropagation(),u.memories.demote(e(s).id)}),n("keydown",X,r=>{r.key==="Enter"&&(r.stopPropagation(),u.memories.demote(e(s).id))}),n("click",Z,async r=>{r.stopPropagation(),await u.memories.suppress(e(s).id,"dashboard trigger")}),n("keydown",Z,async r=>{r.key==="Enter"&&(r.stopPropagation(),await u.memories.suppress(e(s).id,"dashboard trigger"))}),n("click",ce,async r=>{r.stopPropagation(),await u.memories.delete(e(s).id),m()}),n("keydown",ce,async r=>{r.key==="Enter"&&(r.stopPropagation(),await u.memories.delete(e(s).id),m())}),g(p,d)};ue(Me,p=>{var d;((d=e(T))==null?void 0:d.id)===e(s).id&&p(Re)})}a(_),D((p,d)=>{var l;He(_,1,`text-left p-4 glass-subtle rounded-xl hover:bg-white/[0.04] - transition-all duration-200 group - ${((l=e(T))==null?void 0:l.id)===e(s).id?"!border-synapse/40 glow-synapse":""}`),ge(re,`background: ${(Je[e(s).nodeType]||"#8B95A5")??""}`),v(Ee,e(s).nodeType),v(Ae,e(s).content),ge(Ce,`width: ${e(s).retentionStrength*100}%; background: ${p??""}`),v(Fe,`${d??""}%`)},[()=>we(e(s).retentionStrength),()=>(e(s).retentionStrength*100).toFixed(0)]),n("click",_,()=>{var p;return x(T,((p=e(T))==null?void 0:p.id)===e(s).id?null:e(s),!0)}),g(w,_)}),a(c),g(i,c)};ue(Se,i=>{e(A)?i(Te):i($e,!1)})}a(C),D(i=>{v(ke,`${e(k).length??""} results`),v(Pe,`${i??""}%`)},[()=>(e(h)*100).toFixed(0)]),n("input",$,ye),fe($,()=>e(P),i=>x(P,i)),n("change",y,m),Ie(y,()=>e(S),i=>x(S,i)),n("change",E,m),fe(E,()=>e(h),i=>x(h,i)),g(me,C),ze()}Ge(["input","change","click","keydown"]);export{_t as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.br b/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.br deleted file mode 100644 index 89e42a9e1d08406ba351dbcd67fa029a56223b1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2409 zcmV-v36}O7j~f6SgKhKavFk3`x20VZ7e^%d7$M25@0+vkb2)jvB<+*ZWPrVZT=<>% z)kz#`dCJY|zo{+^FOHu$Zm|Me5*FPA;_!W}EgvO`?##P`e2YoKvuLE^|7u!h*wedm z%+S!(WkA->h#p)cyL);@Y4>X6EII3(;-@5ybV(mVWDm_A#efXRKVk`TTa-KcicVXG z(@ELI84VIB5qPQSOnhLQC4+I^m$P=jud~?+d~W`$TWg3XZw8aKhQ}`KD)H>GT#6}NS~#s0zHI{|w>St-c>H|B-s4B5<VpKlr)_$^`wLiQ?y2|XlG3~s%-{5T8zR< z7JC{I+~jl}yrJ?>7Qe@{D&Cs*h#>PM-6IT_nEb;*q(9<<2rv<9M<~cbq)0F;%5w6W zk~1GO=8Z3BIbqR@Nn=a@)rgpye=`wP%@aV9!}+tu7HZ4<@zeCGPtGm7du$&8v*I;N z%5Gi?`nyp%(+!t;Qf}FrZn=0GCh(%TWum^2G5)WSXZZ9(l52sU9UjP0`0@3hvOrNa z9<654lpCjjFU;|=cx}%F61p&j9W{xib;(xLgHe}|FiFpEYevQ$a^jeI?3987%|jbl zX;nt3F2Hhgdr7LMXwG@5C+4`iL4k*yY8BSQY9boB>1&3w! ztdzPmX)84P!lB8=ahuZPB|z@YR7ReiJ+algzb2WegXG}f2T%@~rR)}+XE3G62-IBhGH%ZXqy)Ak4W>Y*mX<~Q)WYl`FjM1j(#G$iUcNu zn`j`Jp_m44pbYHH2BdOhOJwcE@@s@Ev^14~@VV-OxboqW_`CKKy82l1uT6!4l^yy! zfjwYTLyCq|4%mS+;7IF?ep59#K|N4&bAx^;6Y9VmFm*G9HfjfEup8Jh5!N@w!!FI;4%3ldm< zJ(vu()Plu8S($H65EjtAJ^i)9MWCN9L4{DM)Hpu#lt1*qoFP9JGBWtu7zE_vSmcF^W-P#0s<^FPa$cM zPL+7EkCjy6=g}S}>GQpRMWn6{ZSNWaBY224;8X)cfLbiib^wqK=%I88i`L|_2*D4~ z8sO#`Z3td$_&YMBT1Pa$U@&%MaWth7kcu&K4v6Eq{n)htW2{{Z$Ofba6duut=7OVR zVd6YmHMnpEfE5MMJ0>8XAKHis*`Yirzp2cmHSihCk!(mhVEMP6-{H6B-n+HC+G)0O z?CvRK!|?LT*D$J<;l=6EudkgrSeI?mj7*wB&8m@4xkIKYXI*u!Gv7fn(BtOX{>!u^ zYk$(ZnLU_bc_qjg0K!)u`g1RO!ZzRVm6%K8-hRzk#IO7btC5Ci9Yg6S9HHbhtaR?m z*CDfXudmoi;`u1+w_2LIjTuC9T z`zp)D_qt4T;(X%&bocc&sJm``i{yhc&Xf>^8gYK=g$hc9l>gE%_ffq;qz$d6Ii=nV zdbp7Ms%Sc~Hr^GWZ;++VbncB1*e}IzL?Q7z3GZ_cyQXo)TTNfw4%?jO~!JkIx-g zq<&o?jPN1}fr1YJ`sBW+5S&B8A+v0eLxBaB!_=Tp5{mS{b4JMcRGdRScW0ipgBA$$ z_HKR%TrOZXAY3NNTuxc|t_$%DtapQXGZ*PV3ob#h(*Pyd1X57-sz2XS2N9Sn=x5A9 b>(toDOj%eGaeXhB%N~#{>5T1z%y<3**doLy diff --git a/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.gz b/apps/dashboard/build/_app/immutable/nodes/8.BmBiit5q.js.gz deleted file mode 100644 index 77dcb3b9596542fff8bb7f19811ac2bf0a6cd173..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2789 zcmVb_H@{qbXW)9k(gJx-}suwF)WoQ$jtw*%(UT$^aat^vT4_!IFTMDDixe#P?sqjAU zoXFa{GV%zK`}0bV209B>9)PZ^$VU(@`s%$eyTl9JG!<6IUaFBcKHF*5)Bz9`XOR!S z-4BQx$*2tdM5g?scSw#qUnVsr?vHAO;;~8hook-Y=pe)ca-5e5majN${r`D<71tM-S;B za+4Gms}4yM*8_WCC?->c(l9rLKg2M}v55k^r`*I?Pa0(2VlKJYO%R%EHxsXXOnlBpyBd&P0at`=Q2$N8zhrIEjI`ZP-t1!?+! zNl3Mvkj2-|Z{%djAz@&?jDO7+bp>?Dd{DwV z1y^|;5*8#Xl}TlqS{1KrxC_^C`7h1x!OK62{qvD+v~)h0Oy0tszn(pN_N>Hab&_$? zioGmdjWcZ~HWq}UYsN&)Df$(zhHCj`1i?D0+$hcKbkp^2eHABmGsqOibPdtJP z`=1;wrR_0i=4dqD#|aW_tl^$JNN_?FJtN7s>*=}9jX3fkneX4~LNwodY__QRZcM^l z?~&OWXQ8gvpypLG9oNY6tX6K+1`Fq@ z*{njhFRZFXQVof)oJ!Ry)#n;v_> ziAG2ntGnqS^2pd=NZCW5t{FpG4IaEWN;Q$c}EocaAg97 zT`1_VhGRsbjIPEp6{i|k3q?6&^<1|n+@32n$tvT*5Xe+h$?AQ2%e`?oavFNB_BszJ z`2NFmv}EK4!5}AHWy9gvl>t!p;055SGZ{jhX{rI;7b)mbPso=YR5BXV11i~r0-dRd z$VTPO2kS-EX})_~wN_=LQu|=NXsx^hr)jNPFQ8Sc)oRud?=KqyG-Z5S#B_sk7lfuU z-DZ4=@mmlvb%E7g{N*m)X6DLsC^X$hz=DYBA*){jUC1Q^q3HrjPDD%xtbS7IxhZR=+7=Hxn4( z>drw2Lem>oKPW&46HsCndycvjnjWzFU4gnQp>XZzpmm|?9jmVwp!EqTigkhcEHqtb z_0I+7b4gKN8FE;P(f-WpDHOmICP=@i6&80fl!%WJKfw5InKZ?KdBXT_#kMwXG@T4(MCP`@m_Br>uZp ziH`_v(;mNKL)7ju-lmd!Y{(bNDlaE0t41ZzTgH2$(W^**M(0)y84H-pHjE+pq?{iRs zpnC-EiI^t9_y&Ua5V)5^e1z;FWE(}kNuO_&BcYGZJfRn5J};JFTS7)0gj&a zB>!9?G!4+gxrpgU#*fg@IRegez=hEC908wDa)FYIToRzw3l!a;C@|~-!|P*?=py1H zBEE>2c7gG)LenqUaVa$YiVq%QE|I%y5H1qkq*U<(;CEnhVPc)KiWf&%fEn-7BjDGk zI#zBQR>{JH`tZTBhJRn9=o9ek6VOUR*9}m3043=S@aqi)t_B}vce(7E4f%J>D>a7F zT=S_`5VdvZKUK$J6&-KOKKQiC_ynm&hJK2Tphq@c4fz-^H@~J4cMyAS04OZ>6!wGh zh+1ACy<3Za;Yu_f6f#PVRh+nO7wbD^ytK_E`L}{xyYz7`M%2260p7PKI&NVggs`^o z1Yx~=N<RLTy3p>+cZr;b*+Q{u!?srPH)7d43Lfirm~5ofh}{kv?wuZrW+auJVai zvfTz{%@UtB@;mhZ%SV1#wQ%Z;R4Co>7aY3q6 z>I; zV5Um8fo=f5?nz&FQ2D4}7WvIq2WeKXZ@-q@r% zI@7i8%8WD_PU^+cwNKADrO9J~Pi6v-vQ>OB$7!5^j~qmBI-UZ@vk1^N_CeA!V5^cY zfH`#Iblbq`W)3U#*0_$RlS*Ltn;;McX%^_zMCaH*!no r{XSwc9zV*%xIFw|b?BRaKd#LGVjg~-jUdv)`d|MAw?K!hkQ)F1;z4lS diff --git a/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js b/apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js similarity index 94% rename from apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js rename to apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js index 107913e..8f98651 100644 --- a/apps/dashboard/build/_app/immutable/nodes/4.BEP4iikl.js +++ b/apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js @@ -1,4 +1,4 @@ -import"../chunks/Bzak7iHL.js";import{p as ze,s as I,c as Ae,g as e,a as Pe,d as a,e as r,h as b,r as t,i as Qe,t as y,f as ge,u as se,j as qe}from"../chunks/VE8Jor13.js";import{d as Be,a as q,s as o}from"../chunks/DHnEMX8z.js";import{a as c,f as m,c as De}from"../chunks/7UNxJI5L.js";import{i as k}from"../chunks/JkhlGLjU.js";import{e as ie,i as ne}from"../chunks/ByItJEsC.js";import{r as ye}from"../chunks/Cu3VmnGp.js";import{s as oe}from"../chunks/BR2EHpd7.js";import{s as Ke}from"../chunks/ussr1V5_.js";import{b as de}from"../chunks/BRHZEveZ.js";import{a as X}from"../chunks/DcQGRi49.js";var Re=m(''),Ue=m('
        Source

        '),Ve=m('
        Target

        '),Ge=m(`
        Target Memory
        '),Ue=m('
        Source

        '),Ve=m('
        Target

        '),Ge=m(`
        Target Memory
        `,1),He=m('

        '),Je=m(' '),Le=m(" "),We=m(" "),Xe=m(" "),Ye=m(' '),Ze=m('

        '),et=m('

        '),tt=m('

        No connections found for this query.

        '),rt=m('
        '),at=m('
        '),st=m('
        '),it=m(`

        Explore Connections

        Source Memory

        Importance Scorer

        4-channel neuroscience scoring: novelty, arousal, reward, attention

        `);function ft(he,we){ze(we,!0);let V=I(""),G=I(""),F=I(null),C=I(null),B=I(Ae([])),$=I("associations"),O=I(!1),H=I(""),D=I(null);const le={associations:{icon:"◎",desc:"Spreading activation — find related memories via graph traversal"},chains:{icon:"⟿",desc:"Build reasoning path from source to target memory"},bridges:{icon:"⬡",desc:"Find connecting memories between two concepts"}};async function ve(){if(e(V).trim()){b(O,!0);try{const s=await X.search(e(V),1);s.results.length>0&&(b(F,s.results[0],!0),await Y())}catch{}finally{b(O,!1)}}}async function pe(){if(e(G).trim()){b(O,!0);try{const s=await X.search(e(G),1);s.results.length>0&&(b(C,s.results[0],!0),e(F)&&await Y())}catch{}finally{b(O,!1)}}}async function Y(){if(e(F)){b(O,!0);try{const s=(e($)==="chains"||e($)==="bridges")&&e(C)?e(C).id:void 0,i=await X.explore(e(F).id,e($),s);b(B,i.results||i.nodes||i.chain||i.bridges||[],!0)}catch{b(B,[],!0)}finally{b(O,!1)}}}async function ke(){e(H).trim()&&b(D,await X.importance(e(H)),!0)}function Se(s){b($,s,!0),e(F)&&Y()}var Z=it(),ee=a(r(Z),2);ie(ee,20,()=>["associations","chains","bridges"],ne,(s,i)=>{var d=Re(),_=r(d),h=r(_,!0);t(_);var f=a(_,2),p=r(f,!0);t(f);var n=a(f,2),g=r(n,!0);t(n),t(d),y(w=>{oe(d,1,`flex flex-col items-center gap-1 p-3 rounded-xl text-sm transition diff --git a/apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js.br b/apps/dashboard/build/_app/immutable/nodes/8.CDAVQcae.js.br new file mode 100644 index 0000000000000000000000000000000000000000..9bdbe88134428dcccbd5bcaff500c9fb25b62793 GIT binary patch literal 3021 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/5.BgcStf4T.js b/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js similarity index 53% rename from apps/dashboard/build/_app/immutable/nodes/5.BgcStf4T.js rename to apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js index 359af7b..d989ca5 100644 --- a/apps/dashboard/build/_app/immutable/nodes/5.BgcStf4T.js +++ b/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js @@ -1,8 +1,8 @@ -import"../chunks/Bzak7iHL.js";import"../chunks/CrlWs-6R.js";import{p as ee,I as oe,g as e,h as M,e as o,d,r as s,f as ie,t as $,a as te,s as K,u as X,C as Z}from"../chunks/VE8Jor13.js";import{s as x,d as ne,a as de}from"../chunks/DHnEMX8z.js";import{a as l,f as m}from"../chunks/7UNxJI5L.js";import{i as w}from"../chunks/JkhlGLjU.js";import{e as re,i as ae}from"../chunks/ByItJEsC.js";import{s as C}from"../chunks/ussr1V5_.js";import{i as ce}from"../chunks/jyeIy8pa.js";import{s as le,a as me}from"../chunks/AcZBvMXu.js";import{w as ve,e as ue}from"../chunks/XIUN5r_Y.js";import{E as I}from"../chunks/BNytumrp.js";import{s as pe}from"../chunks/Cu3VmnGp.js";import{s as fe}from"../chunks/BR2EHpd7.js";import{p as Q}from"../chunks/ykT2B6d3.js";var xe=m(' '),_e=m('
        '),ge=m('
        ',1),he=m('
        '),ye=m('
        '),$e=m('
        Cognitive Search Pipeline
        ');function be(O,F){ee(F,!0);let S=Q(F,"resultCount",3,0),j=Q(F,"durationMs",3,0),q=Q(F,"active",3,!1);const p=[{name:"Overfetch",icon:"◎",color:"#818CF8",desc:"Pull 3x results from hybrid search"},{name:"Rerank",icon:"⟿",color:"#00A8FF",desc:"Re-score by relevance quality"},{name:"Temporal",icon:"◷",color:"#00D4FF",desc:"Recent memories get recency bonus"},{name:"Access",icon:"◇",color:"#00FFD1",desc:"FSRS-6 retention threshold filter"},{name:"Context",icon:"◬",color:"#FFB800",desc:"Encoding specificity matching"},{name:"Compete",icon:"⬡",color:"#FF3CAC",desc:"Retrieval-induced forgetting"},{name:"Activate",icon:"◈",color:"#9D00FF",desc:"Spreading activation cascade"}];let _=K(-1),g=K(!1),u=K(!1);oe(()=>{q()&&!e(g)&&P()});function P(){M(g,!0),M(_,-1),M(u,!1);const t=Math.max(1500,(j()||50)*2),a=t/(p.length+1);p.forEach((i,v)=>{setTimeout(()=>{M(_,v,!0)},a*(v+1))}),setTimeout(()=>{M(u,!0),M(g,!1)},t)}var D=$e(),b=o(D),L=d(o(b),2);{var V=t=>{var a=xe(),i=o(a);s(a),$(()=>x(i,`${S()??""} results in ${j()??""}ms`)),l(t,a)};w(L,t=>{e(u)&&t(V)})}s(b);var A=d(b,2);re(A,21,()=>p,ae,(t,a,i)=>{const v=X(()=>i<=e(_)),E=X(()=>i===e(_)&&e(g));var k=ge(),h=ie(k),y=o(h),J=o(y,!0);s(y);var R=d(y,2),T=o(R,!0);s(R),s(h);var U=d(h,2);{var W=B=>{var c=_e();$(()=>C(c,`background: ${i{i{fe(y,1,`w-8 h-8 rounded-full flex items-center justify-center text-xs transition-all duration-300 +import"../chunks/Bzak7iHL.js";import{i as oe}from"../chunks/Bz1l2A_1.js";import{p as ee,aB as ie,g as e,h as M,e as o,d,r as s,f as ne,t as $,a as te,s as K,u as X,V as Z}from"../chunks/CvjSAYrz.js";import{s as x,d as de,a as ce}from"../chunks/FzvEaXMa.js";import{a as l,f as m}from"../chunks/BsvCUYx-.js";import{i as w}from"../chunks/ciN1mm2W.js";import{e as re,i as ae}from"../chunks/DTnG8poT.js";import{s as C}from"../chunks/Bhad70Ss.js";import{s as le,a as me}from"../chunks/D81f-o_I.js";import{w as ve,e as ue}from"../chunks/CtkE7HV2.js";import{E as O}from"../chunks/DzfRjky4.js";import{s as pe}from"../chunks/CNfQDikv.js";import{s as fe}from"../chunks/DPl3NjBv.js";import{p as Q}from"../chunks/B_YDQCB6.js";var xe=m(' '),_e=m('
        '),ge=m('
        ',1),he=m('
        '),ye=m('
        '),$e=m('
        Cognitive Search Pipeline
        ');function be(V,F){ee(F,!0);let S=Q(F,"resultCount",3,0),j=Q(F,"durationMs",3,0),q=Q(F,"active",3,!1);const p=[{name:"Overfetch",icon:"◎",color:"#818CF8",desc:"Pull 3x results from hybrid search"},{name:"Rerank",icon:"⟿",color:"#00A8FF",desc:"Re-score by relevance quality"},{name:"Temporal",icon:"◷",color:"#00D4FF",desc:"Recent memories get recency bonus"},{name:"Access",icon:"◇",color:"#00FFD1",desc:"FSRS-6 retention threshold filter"},{name:"Context",icon:"◬",color:"#FFB800",desc:"Encoding specificity matching"},{name:"Compete",icon:"⬡",color:"#FF3CAC",desc:"Retrieval-induced forgetting"},{name:"Activate",icon:"◈",color:"#9D00FF",desc:"Spreading activation cascade"}];let _=K(-1),g=K(!1),u=K(!1);ie(()=>{q()&&!e(g)&&P()});function P(){M(g,!0),M(_,-1),M(u,!1);const t=Math.max(1500,(j()||50)*2),a=t/(p.length+1);p.forEach((i,v)=>{setTimeout(()=>{M(_,v,!0)},a*(v+1))}),setTimeout(()=>{M(u,!0),M(g,!1)},t)}var D=$e(),b=o(D),I=d(o(b),2);{var L=t=>{var a=xe(),i=o(a);s(a),$(()=>x(i,`${S()??""} results in ${j()??""}ms`)),l(t,a)};w(I,t=>{e(u)&&t(L)})}s(b);var A=d(b,2);re(A,21,()=>p,ae,(t,a,i)=>{const v=X(()=>i<=e(_)),E=X(()=>i===e(_)&&e(g));var k=ge(),h=ne(k),y=o(h),J=o(y,!0);s(y);var R=d(y,2),T=o(R,!0);s(R),s(h);var U=d(h,2);{var W=B=>{var c=_e();$(()=>C(c,`background: ${i{i{fe(y,1,`w-8 h-8 rounded-full flex items-center justify-center text-xs transition-all duration-300 ${e(E)?"scale-125":""}`),C(y,`background: ${e(v)?e(a).color+"25":"rgba(255,255,255,0.03)"}; border: 1.5px solid ${(e(v)?e(a).color:"rgba(255,255,255,0.06)")??""}; color: ${(e(v)?e(a).color:"#4a4a7a")??""}; box-shadow: ${e(E)?"0 0 12px "+e(a).color+"40":"none"}`),pe(y,"title",e(a).desc),x(J,e(a).icon),C(R,`color: ${(e(v)?e(a).color:"#4a4a7a")??""}`),x(T,e(a).name)}),l(t,k)}),s(A);var N=d(A,2),z=o(N);{var n=t=>{var a=he();$(i=>C(a,`width: ${i??""}%; background: linear-gradient(90deg, #818CF8, #00FFD1, #9D00FF); - transition-duration: ${e(g)?"300ms":"500ms"}`),[()=>e(u)?"100":((e(_)+1)/p.length*100).toFixed(0)]),l(t,a)};w(z,t=>{(e(g)||e(u))&&t(n)})}s(N);var r=d(N,2);{var H=t=>{var a=ye(),i=d(o(a),2),v=o(i);s(i),s(a),$(()=>x(v,`Pipeline complete: ${S()??""} memories surfaced from ${p.length??""}-stage cognitive cascade`)),l(t,a)};w(r,t=>{e(u)&&t(H)})}s(D),l(O,D),te()}var we=m('

        Waiting for cognitive events...

        Events appear here in real-time as Vestige thinks.

        '),Ce=m(' '),Fe=m('
        '),Se=m(`

        `),De=m('
        '),ke=m('

        Live Feed

        ');function He(O,F){ee(F,!1);const S=()=>me(ue,"$eventFeed",j),[j,q]=le();function p(n){return new Date(n).toLocaleTimeString()}function _(n){return{MemoryCreated:"+",MemoryUpdated:"~",MemoryDeleted:"×",MemoryPromoted:"↑",MemoryDemoted:"↓",SearchPerformed:"◎",DreamStarted:"◈",DreamProgress:"◈",DreamCompleted:"◈",ConsolidationStarted:"◉",ConsolidationCompleted:"◉",RetentionDecayed:"↘",ConnectionDiscovered:"━",ActivationSpread:"◬",ImportanceScored:"◫",Heartbeat:"♡"}[n]||"·"}function g(n){const r=n.data;switch(n.type){case"MemoryCreated":return`New ${r.node_type}: "${String(r.content_preview).slice(0,60)}..."`;case"SearchPerformed":return`Searched "${r.query}" → ${r.result_count} results (${r.duration_ms}ms)`;case"DreamStarted":return`Dream started with ${r.memory_count} memories`;case"DreamCompleted":return`Dream complete: ${r.connections_found} connections, ${r.insights_generated} insights (${r.duration_ms}ms)`;case"ConsolidationStarted":return"Consolidation cycle started";case"ConsolidationCompleted":return`Consolidated ${r.nodes_processed} nodes, ${r.decay_applied} decayed (${r.duration_ms}ms)`;case"ConnectionDiscovered":return`Connection: ${String(r.connection_type)} (weight: ${Number(r.weight).toFixed(2)})`;case"ImportanceScored":return`Scored ${Number(r.composite_score).toFixed(2)}: "${String(r.content_preview).slice(0,50)}..."`;case"MemoryPromoted":return`Promoted → ${(Number(r.new_retention)*100).toFixed(0)}% retention`;case"MemoryDemoted":return`Demoted → ${(Number(r.new_retention)*100).toFixed(0)}% retention`;default:return JSON.stringify(r).slice(0,100)}}ce();var u=ke(),P=o(u),D=d(o(P),2),b=o(D),L=o(b);s(b);var V=d(b,2);s(D),s(P);var A=d(P,2);{var N=n=>{var r=we();l(n,r)},z=n=>{var r=De();re(r,5,S,ae,(H,t)=>{var a=Se(),i=o(a),v=o(i,!0);s(i);var E=d(i,2),k=o(E),h=o(k),y=o(h,!0);s(h);var J=d(h,2);{var R=c=>{var f=Ce(),Y=o(f,!0);s(f),$(G=>x(Y,G),[()=>p(String(e(t).data.timestamp))]),l(c,f)};w(J,c=>{e(t).data.timestamp&&c(R)})}s(k);var T=d(k,2),U=o(T,!0);s(T);var W=d(T,2);{var B=c=>{var f=Fe(),Y=o(f);{let G=Z(()=>Number(e(t).data.result_count)||0),se=Z(()=>Number(e(t).data.duration_ms)||0);be(Y,{get resultCount(){return e(G)},get durationMs(){return e(se)},active:!0})}s(f),l(c,f)};w(W,c=>{e(t).type==="SearchPerformed"&&c(B)})}s(E),s(a),$((c,f)=>{C(a,`border-left: 3px solid ${(I[e(t).type]||"#8B95A5")??""}`),C(i,`background: ${(I[e(t).type]||"#8B95A5")??""}15; color: ${(I[e(t).type]||"#8B95A5")??""}`),x(v,c),C(h,`color: ${(I[e(t).type]||"#8B95A5")??""}`),x(y,e(t).type),x(U,f)},[()=>_(e(t).type),()=>g(e(t))]),l(H,a)}),s(r),l(n,r)};w(A,n=>{S().length===0?n(N):n(z,!1)})}s(u),$(()=>x(L,`${S().length??""} events`)),de("click",V,()=>ve.clearEvents()),l(O,u),te(),q()}ne(["click"]);export{He as component}; + transition-duration: ${e(g)?"300ms":"500ms"}`),[()=>e(u)?"100":((e(_)+1)/p.length*100).toFixed(0)]),l(t,a)};w(z,t=>{(e(g)||e(u))&&t(n)})}s(N);var r=d(N,2);{var H=t=>{var a=ye(),i=d(o(a),2),v=o(i);s(i),s(a),$(()=>x(v,`Pipeline complete: ${S()??""} memories surfaced from ${p.length??""}-stage cognitive cascade`)),l(t,a)};w(r,t=>{e(u)&&t(H)})}s(D),l(V,D),te()}var we=m('

        Waiting for cognitive events...

        Events appear here in real-time as Vestige thinks.

        '),Ce=m(' '),Fe=m('
        '),Se=m(`

        `),De=m('
        '),ke=m('

        Live Feed

        ');function ze(V,F){ee(F,!1);const S=()=>me(ue,"$eventFeed",j),[j,q]=le();function p(n){return new Date(n).toLocaleTimeString()}function _(n){return{MemoryCreated:"+",MemoryUpdated:"~",MemoryDeleted:"×",MemoryPromoted:"↑",MemoryDemoted:"↓",SearchPerformed:"◎",DreamStarted:"◈",DreamProgress:"◈",DreamCompleted:"◈",ConsolidationStarted:"◉",ConsolidationCompleted:"◉",RetentionDecayed:"↘",ConnectionDiscovered:"━",ActivationSpread:"◬",ImportanceScored:"◫",Heartbeat:"♡"}[n]||"·"}function g(n){const r=n.data;switch(n.type){case"MemoryCreated":return`New ${r.node_type}: "${String(r.content_preview).slice(0,60)}..."`;case"SearchPerformed":return`Searched "${r.query}" → ${r.result_count} results (${r.duration_ms}ms)`;case"DreamStarted":return`Dream started with ${r.memory_count} memories`;case"DreamCompleted":return`Dream complete: ${r.connections_found} connections, ${r.insights_generated} insights (${r.duration_ms}ms)`;case"ConsolidationStarted":return"Consolidation cycle started";case"ConsolidationCompleted":return`Consolidated ${r.nodes_processed} nodes, ${r.decay_applied} decayed (${r.duration_ms}ms)`;case"ConnectionDiscovered":return`Connection: ${String(r.connection_type)} (weight: ${Number(r.weight).toFixed(2)})`;case"ImportanceScored":return`Scored ${Number(r.composite_score).toFixed(2)}: "${String(r.content_preview).slice(0,50)}..."`;case"MemoryPromoted":return`Promoted → ${(Number(r.new_retention)*100).toFixed(0)}% retention`;case"MemoryDemoted":return`Demoted → ${(Number(r.new_retention)*100).toFixed(0)}% retention`;default:return JSON.stringify(r).slice(0,100)}}oe();var u=ke(),P=o(u),D=d(o(P),2),b=o(D),I=o(b);s(b);var L=d(b,2);s(D),s(P);var A=d(P,2);{var N=n=>{var r=we();l(n,r)},z=n=>{var r=De();re(r,5,S,ae,(H,t)=>{var a=Se(),i=o(a),v=o(i,!0);s(i);var E=d(i,2),k=o(E),h=o(k),y=o(h,!0);s(h);var J=d(h,2);{var R=c=>{var f=Ce(),Y=o(f,!0);s(f),$(G=>x(Y,G),[()=>p(String(e(t).data.timestamp))]),l(c,f)};w(J,c=>{e(t).data.timestamp&&c(R)})}s(k);var T=d(k,2),U=o(T,!0);s(T);var W=d(T,2);{var B=c=>{var f=Fe(),Y=o(f);{let G=Z(()=>Number(e(t).data.result_count)||0),se=Z(()=>Number(e(t).data.duration_ms)||0);be(Y,{get resultCount(){return e(G)},get durationMs(){return e(se)},active:!0})}s(f),l(c,f)};w(W,c=>{e(t).type==="SearchPerformed"&&c(B)})}s(E),s(a),$((c,f)=>{C(a,`border-left: 3px solid ${(O[e(t).type]||"#8B95A5")??""}`),C(i,`background: ${(O[e(t).type]||"#8B95A5")??""}15; color: ${(O[e(t).type]||"#8B95A5")??""}`),x(v,c),C(h,`color: ${(O[e(t).type]||"#8B95A5")??""}`),x(y,e(t).type),x(U,f)},[()=>_(e(t).type),()=>g(e(t))]),l(H,a)}),s(r),l(n,r)};w(A,n=>{S().length===0?n(N):n(z,!1)})}s(u),$(()=>x(I,`${S().length??""} events`)),ce("click",L,()=>ve.clearEvents()),l(V,u),te(),q()}de(["click"]);export{ze as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.br b/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.br new file mode 100644 index 0000000000000000000000000000000000000000..244d903d15cc2419687cbc888e264810f6c1b89b GIT binary patch literal 2989 zcmV;e3sUqO`W{hKj=~X@ng*a%flXv;uvf$(Ii((P(+n6Cr|~zZ6rUbNh%W2u5eFYw zuNjgruQT^sCY^$6UR`}V-+_MsFd`cc*y=vC(-x4qg`6!2#Z7g)CP$V|bXv1~C!ZHf znkHdexzsJCKRi@aEa(BYz1i+zDcjpVIy@}lzuup#+6>iM*jR@xVkO>1^v3M{i1}Zq zY32c@2t{no7JsO=YgD@J98hWcViw|~`#+ufI#qIbEAcR9m`gMc@&EVllCu=ODpo)a zq2mxbeeX_?6nO%i2{xpWroCh5K8ET`yPNJQf`=$zjcJ!=;?FQDmM#YI%oC-#10J{N zWKq0NFhJbC(;R*Q;nf-UH@K$aSG!sTks()(U;eOYZ7<;h$6iKE2-Eq~TDbLCG7w1n zbGVdF5ca%yed+W>Z!r+&H}1ZBN*1|FpIP>LuW6OTX~#*H&&15#Q#Czj1xr z_Iu5EyPc3J0wS%A+K^15`}`se{k`C1PrBI%t4qtE1^wDI{u-bt1C~!RBpgnehsu}uQV`D9~+eqUdQB*3eUBUJIfsZc-}N)f(z zX$k8XC9iGA=r(2smIS1z>8}jlgj$O&(*pzEbou1@UeNN2|X}?kGBaDHENRgdt2y$Z|BUwV?DjO~V&_Oh-l$}COJE76~Ze5&wWIsfVyr2?%WngdXV!`GNcRV^C zHIxOeC+Bc)Dc%d;Sc?em-32FMMvg3q;{JXcnq0UYy-_4H9Ee-xGy#rijOm;{2y1=U zpC7e(rjqdjdoh}7pWqJl8t3eFPP^msnxFxyC`f6KrHl6n-&C9L z_Qfo^O?ZOTXdF>XqM4d-V2VTW({89cSV%m7^!68K7UU#US6^bZl7YMA!j5=zre+Ru z0{eHfP#Awlph8h6|Ngw8Hk;#D*vr*BsK)C_r}m#EHk()C_jMYOJ2Yn2(`8KB|3^V< zr&PQu6c@FsyvnawfI}ABkt$pDBV0BrSo77@z_W@%J&AxS3}S?Ul1ylhFyPB}67U9M z0!TZKm$c)PHAu6z_Gbn@U!g*ekbz-3X%eCvsuJEo`WIyU{maLb8L&z7u>}D(d`AB- zpHP3T|LjqxrSm9IT{y>&qMc^YHn}w7qE}taC)@;7AFcW)0*G#fqCVDJpanVK9 zfl{_~EJxuwO%lt_OcIx9yy5Qt4?z>b(6J`|oZM!!pcv|3@xm4=oM6H;OFprFGrdRTgEN#xv}(!UM;=nkj+A}4H>&iOM5MKxm|zU6&BVJOqAOpVUF*mE$(*Fm2=B& z%DM__EariX3Lype*_;9>)I2#A88auSqadq{-TcH%p5iDxK%JL1+nfv!IJ2;8u4I>W z&4;~W&_mfaY&nmTE(S(L6?yNT3Lnk?7lX0~An6ZpjNLasYMUS^g+-@T{gmGI4^n_O>(I1aUkp z+LW1dk@5kT+OrrtN~cVJ&SVkXqE$RcGH(hi*6N*>l^YNP?;~k!Wh^Hjgo@s!t2kZl zglR0Kb}7SNaj-3V84riILMKJi?eC7W9k5ze@xSEEPuQ%qeID$Xv8+3Tva7HI=5p<4 z-U+>6(r{Q@vtGB9g3sp%6DAuWTF*nkj#S1rzXw{P)LXX}tJrDCdRKx6;sRDfOK@5^p<7EP9x>njz+h zsYcz7lTd0cRBU~ebrnYc6wziW1x1vwRyxLYMX{ilzyfj^Xtl@YiywpLE zRtJmYy0cW3X1U?k(wQ4!u(_|z3wFwYdO2_(qV|tKS!*R+S2b;I%3M-^T}CT>afzDQvusA~}pA?Xej^6icu6o)a>|SLU{$ zDL>50s?E;W#ee2Mf7%$xw8EY<)aMXMGBoPJ%+i1z>6g8LhJxFP;qGI0#qWN_Tl zFq_>j)}}qG3j4`FfBuxG87mty9$s+Sdq}J$+f!qprt*^J2pVpOA>f=_HCRNW=3NK6 j$8^QCqN=!s@xgdQwM%gi*MB5|?79)%hfboq-+zXWQOmF; literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.gz b/apps/dashboard/build/_app/immutable/nodes/9.DVbfK-u1.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..574217ca762a41a1f88e2e02b14e0ddf9e487092 GIT binary patch literal 3364 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 literal 0 HcmV?d00001 diff --git a/apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js b/apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js deleted file mode 100644 index 7359846..0000000 --- a/apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js +++ /dev/null @@ -1,2 +0,0 @@ -import"../chunks/Bzak7iHL.js";import{o as ze}from"../chunks/DWVWfZUn.js";import{p as Je,t as w,a as We,d as r,e as t,g as s,s as S,h as m,r as e,O as b,f as Be,u as j}from"../chunks/VE8Jor13.js";import{d as He,a as X,s as p}from"../chunks/DHnEMX8z.js";import{i as u}from"../chunks/JkhlGLjU.js";import{e as Z,i as ee}from"../chunks/ByItJEsC.js";import{a as v,f as l,t as ue}from"../chunks/7UNxJI5L.js";import{s as ge}from"../chunks/BR2EHpd7.js";import{s as fe}from"../chunks/ussr1V5_.js";import{s as Le,a as te}from"../chunks/AcZBvMXu.js";import{a as O}from"../chunks/DcQGRi49.js";import{m as Ue,a as Ye,i as qe}from"../chunks/XIUN5r_Y.js";var Qe=l(' Running...',1),Xe=l('
        Processed
        '),Ze=l('
        Decayed
        '),et=l('
        Embedded
        '),tt=l('
        '),st=l(' Dreaming...',1),at=l('
        '),it=l('
        Insights Discovered:
        ',1),dt=l('
        Connections found:
        '),rt=l('
        Memories replayed:
        '),ot=l('
        '),nt=l('
        '),vt=l('
        '),lt=l('

        Retention Distribution

        '),ct=l('
        '),xt=l(`

        Settings & System

        Memories
        Avg Retention
        WebSocket
        v2.1
        Vestige

        Cognitive Operations

        FSRS-6 Consolidation
        Apply spaced-repetition decay, regenerate embeddings, run maintenance
        Memory Dream Cycle
        Replay memories, discover hidden connections, synthesize insights

        Keyboard Shortcuts

        About

        V
        Vestige v2.1 "Nuclear Dashboard"
        Your AI's long-term memory system
        29 cognitive modules
        FSRS-6 spaced repetition
        Nomic Embed v1.5 (256d)
        Jina Reranker v1 Turbo
        USearch HNSW (20x FAISS)
        Local-first, zero cloud
        Built with Rust + Axum + SvelteKit 2 + Svelte 5 + Three.js + Tailwind CSS 4
        `);function Ct(_e,be){Je(be,!0);const ye=()=>te(Ue,"$memoryCount",I),P=()=>te(Ye,"$avgRetention",I),se=()=>te(qe,"$isConnected",I),[I,he]=Le();let T=S(!1),A=S(!1),y=S(null),g=S(null),we=S(null),$=S(null),ae=S(!0),Se=S(null);ze(()=>{E()});async function E(){m(ae,!0);try{const[a,o,c]=await Promise.all([O.stats().catch(()=>null),O.health().catch(()=>null),O.retentionDistribution().catch(()=>null)]);m(we,a,!0),m(Se,o,!0),m($,c,!0)}finally{m(ae,!1)}}async function ke(){m(T,!0),m(y,null);try{m(y,await O.consolidate(),!0),await E()}catch{}finally{m(T,!1)}}async function Ce(){m(A,!0),m(g,null);try{m(g,await O.dream(),!0),await E()}catch{}finally{m(A,!1)}}var K=xt(),V=t(K),Re=r(t(V),2);e(V);var z=r(V,2),J=t(z),ie=t(J),$e=t(ie,!0);e(ie),b(2),e(J);var W=r(J,2),B=t(W),Ae=t(B);e(B),b(2),e(W);var de=r(W,2),re=t(de),oe=t(re),ne=r(oe,2),De=t(ne,!0);e(ne),e(re),b(2),e(de),b(2),e(z);var H=r(z,2),L=r(t(H),2),U=t(L),N=r(t(U),2),Ge=t(N);{var Me=a=>{var o=Qe();b(),v(a,o)},Fe=a=>{var o=ue("Consolidate");v(a,o)};u(Ge,a=>{s(T)?a(Me):a(Fe,!1)})}e(N),e(U);var je=r(U,2);{var Oe=a=>{var o=tt(),c=t(o),f=t(c);{var k=d=>{var i=Xe(),n=t(i),x=t(n,!0);e(n),b(2),e(i),w(()=>p(x,s(y).nodesProcessed)),v(d,i)};u(f,d=>{s(y).nodesProcessed!==void 0&&d(k)})}var _=r(f,2);{var h=d=>{var i=Ze(),n=t(i),x=t(n,!0);e(n),b(2),e(i),w(()=>p(x,s(y).decayApplied)),v(d,i)};u(_,d=>{s(y).decayApplied!==void 0&&d(h)})}var C=r(_,2);{var G=d=>{var i=et(),n=t(i),x=t(n,!0);e(n),b(2),e(i),w(()=>p(x,s(y).embeddingsGenerated)),v(d,i)};u(C,d=>{s(y).embeddingsGenerated!==void 0&&d(G)})}e(c),e(o),v(a,o)};u(je,a=>{s(y)&&a(Oe)})}e(L);var ve=r(L,2),Y=t(ve),D=r(t(Y),2),Te=t(D);{var Ee=a=>{var o=st();b(),v(a,o)},Ne=a=>{var o=ue("Dream");v(a,o)};u(Te,a=>{s(A)?a(Ee):a(Ne,!1)})}e(D),e(Y);var Pe=r(Y,2);{var Ie=a=>{var o=ot(),c=t(o);{var f=d=>{var i=it(),n=r(Be(i),2);Z(n,17,()=>s(g).insights,ee,(x,M)=>{var R=at(),F=t(R,!0);e(R),w(q=>p(F,q),[()=>typeof s(M)=="string"?s(M):JSON.stringify(s(M))]),v(x,R)}),v(d,i)},k=j(()=>s(g).insights&&Array.isArray(s(g).insights));u(c,d=>{s(k)&&d(f)})}var _=r(c,2);{var h=d=>{var i=dt(),n=r(t(i)),x=t(n,!0);e(n),e(i),w(()=>p(x,s(g).connections_found)),v(d,i)};u(_,d=>{s(g).connections_found!==void 0&&d(h)})}var C=r(_,2);{var G=d=>{var i=rt(),n=r(t(i)),x=t(n,!0);e(n),e(i),w(()=>p(x,s(g).memories_replayed)),v(d,i)};u(C,d=>{s(g).memories_replayed!==void 0&&d(G)})}e(o),v(a,o)};u(Pe,a=>{s(g)&&a(Ie)})}e(ve),e(H);var le=r(H,2);{var Ke=a=>{var o=lt(),c=r(t(o),2),f=t(c);{var k=h=>{var C=vt();Z(C,21,()=>s($).distribution,ee,(G,d,i)=>{const n=j(()=>Math.max(...s($).distribution.map(Q=>Q.count),1)),x=j(()=>s(d).count/s(n)*100),M=j(()=>i<2?"#ef4444":i<4?"#f59e0b":i<7?"#6366f1":"#10b981");var R=nt(),F=t(R),q=t(F,!0);e(F);var pe=r(F,2),Ve=r(pe,2);Ve.textContent=`${i*10}%`,e(R),w(Q=>{p(q,s(d).count),fe(pe,`height: ${Q??""}%; background: ${s(M)??""}; opacity: 0.7`)},[()=>Math.max(s(x),2)]),v(G,R)}),e(C),v(h,C)},_=j(()=>s($).distribution&&Array.isArray(s($).distribution));u(f,h=>{s(_)&&h(k)})}e(c),e(o),v(a,o)};u(le,a=>{s($)&&a(Ke)})}var ce=r(le,2),xe=r(t(ce),2),me=t(xe);Z(me,20,()=>[{key:"⌘ K",desc:"Command palette"},{key:"/",desc:"Focus search"},{key:"G",desc:"Go to Graph"},{key:"M",desc:"Go to Memories"},{key:"T",desc:"Go to Timeline"},{key:"F",desc:"Go to Feed"},{key:"E",desc:"Go to Explore"},{key:"S",desc:"Go to Stats"}],ee,(a,o)=>{var c=ct(),f=t(c),k=t(f,!0);e(f);var _=r(f,2),h=t(_,!0);e(_),e(c),w(()=>{p(k,o.key),p(h,o.desc)}),v(a,c)}),e(me),e(xe),e(ce),b(2),e(K),w(a=>{p($e,ye()),fe(B,`color: ${P()>.7?"#10b981":P()>.4?"#f59e0b":"#ef4444"}`),p(Ae,`${a??""}%`),ge(oe,1,`w-2.5 h-2.5 rounded-full ${se()?"bg-recall animate-pulse-glow":"bg-decay"}`),p(De,se()?"Online":"Offline"),N.disabled=s(T),D.disabled=s(A),ge(D,1,`px-4 py-2 bg-dream/20 border border-dream/40 text-dream-glow text-sm rounded-xl hover:bg-dream/30 transition disabled:opacity-50 flex items-center gap-2 - ${s(A)?"glow-dream animate-pulse-glow":""}`)},[()=>(P()*100).toFixed(1)]),X("click",Re,E),X("click",N,ke),X("click",D,Ce),v(_e,K),We(),he()}He(["click"]);export{Ct as component}; diff --git a/apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js.br b/apps/dashboard/build/_app/immutable/nodes/9.Ds9IBqJA.js.br deleted file mode 100644 index 7ac4c60cb95d321a6da2ff3d06827509e4696e75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3010 zcmV;z3qAB3rX~QKgK^_rvMl;bb~?1CRpx-}{-UuP#zkP@LIjBw_` zAqTF(mlj}KQ*KuOO_k)7mrU5ei=!H`f?LeP;^%+<^zG|cA?+x0?`vHtwd}48$5?9+ z9wZ!i<^QIZbTn>vm#(x5^Fjl=oK|=MJm^Ea^XF^4BaO@Gs(iiLo6_|?)~;8Z(mM+- z9p>1LJX6BXOS?~tzx8o_i9!g$sl_~9bItX;llf-?$ksxg)di9YYe4ZXqf$@iC4zrE!?6FKzHf{JUjm-oEnwDb3Ko)mV_4di9qJX6yH z50a}a^o#+A2J|GgGKUxr{a(U2Croj-aD#7q`Y21}YmSN|@D-*%f+u3_AJz|7xJ#+u zK9c_$l}^R&VhyPBO845i2Pu#>$XyfB9VR$fS|`uEG7UmSF@cP>KPzSg2^ z@FJRfzI1ExFC`eSMip-3CRv=?YR|Z4o7S8U_4=cVRw3><5dZ%L98Cbt8{d@wSgl*GK2u(c z0%G_In|Lt=69rE(qBSqvt6Ph_Uw~AYG3^*#-nGBO5aTGfBtq^;PcSw2r)Gh(A1A|1 zskv%QQgAS|#;pT&qr&hkt$MWrCSkN5M-oKjW(1PQ^1yJ@rHE#Xr5(mcCw>Ci0P!2< zKeZS)kwflPaFUk-G{ger4BmlE3jfF3g!FxDY`Z=%nTEOF6^ap882^b%4x!Ec?K&xt zFcnz+vj4u}sJM;7Nr)`8`lG0V@ETmeshSo2aBhu^zQj=BKh`$?cNG@5`9tp~ShA=^ z=t;ithAPecedI7Q>w{Qbgc3caTr642!zwK<9n#Swo*wVu^314}Sd}8dyMufTIAp;# z+=BY1PM#@jV`fB!bcu!vD*5U?D`Daa>1xM@;fg94BN4~P>QRQ`*|U1$^I6%f>U$m) zcXH;`hEkbiRW#m`1Xt?sOS{-HYhk7cQ3t(&*P#8A0)oVxx|~%meSEgiDheM1Z@>Pm zU#;+?4oZCIrWm#M8?umn&k=j9n;9)c3yuf3Z|B&oF2>uo%(G<$EFfXsXry!$9_Uvl zQ_pMrQh>{=;z3GX++;rWW|$3VmO#( z>}CU_mrSiAMWbjPmjrukM(&0t5(*)wN)#fOKg$1i2b_JX$|ZAjX~B%}xB~ z`%F31{HCvqEnS9EfVfq43DeavJY~(}*O-BmN{DXUttt?^BPvFQ6qLSW{*%4?a$rms zEfIieUM?iXcuxTM8LYJ7irFFz#r>VKXlP-Lg3_}{?>;JvW{4dDDdTAJ2f2tQP8yuT zDia6Jx)dV-Kb&Sv)Cpl_@|pFJZ8PS?@R7#Fl_lu4Dp{0)XI|b-YB3-E_h7MHxdRI9 zaHuEwKkYW{tfokX!;QqqW}fVJqx#Sk^MWQ^la#xi%ykmZQTTxAi%f}Cx-=Olv!24q z*bFP9z2kEaw2knjjv=-+~u zO-zWVzwXu=^}Y&>S=&zCzGE=fS68Nc1zyM^9pJQ6$aM79HKWipV{7T>9-gA zp`Ufm>>1+!srYtxTD*edxZod1yPZ$47HOn5VzI?7e00e2ZD#C1iK$B-(0NU?T&=Q) z$Mw908oQSM)NUO#nXi&;z?7~b9oCWcH`0{)(6mf`I`e6_AhaH*ZMw8!@c#3d{OV9# z+CQ0aDa$Q|*Tt00Lt z;Bl@X6<{`g5#0QHS7s_yFsen6g60gTObG+`F)D7%z&N@L#bVR-XmPXvMSx?g+A+?q z$5DWgUB+xl=rUx>BV9(q)ZYn^(BcA!0P?cliOU|%PMp#-e4BRVllBAGr#IaIc6ChRf)Zan)vB^sY2HF8|+a)@oJMW0+cXyLV~&*}GJK%?{S z?%lLR5);dD)h7FP&oQojXkF3 zTwA!4nKM-$wT%agUX^i!Q!Haa0=V~*$|5q=v@_Y>?H&e)Sd|jqd+K*^aTz@=tO%Db zd|zP$+^wZtSBJU;72fKeQzhU-Z{lPax z)~g;5mw@s*ie{JhZRZd0F2iP@wwb2yu8)_y<>n9eA?hLwuXM!$cI$~ry1n~8dEFZ3 z6V6s=R62DOTk-aj$=v@yDY^Ch6x=3B8lMY*yIDmCPate&c|Ir9l}E=lp@*;a%?m$b?Y{72abN|@ z-Q7Bx!_6&aFZ#mxU)&vW2JciiA;|JY;H!hMpc=2lB zQgn`4ANi|s7sR((Li*5p>*BNd@xr=yU*4MoEANU~LhayZ!q7Uiz>~#h{q52wH!`LO zBeOt5%R(A}nR03@jKv|4lSvL$9R>vI>W309h4Y#g$dc!3UV7vT=uX!oY)15TRrW8DGVY6Ci;CpJ{FlQDCV5#YLbJR23GRyZelKo9WN=;_0Gyg%XAb)us%xDccWdHm~M+Ui07LrEXK-3||n@O4;)LnpnOhak*@Y zY>A9`QAki1yY#*fTj%xcPuQycSMy7@8XzgkQWDSXoN<*2l4ziBUpE?{yr3V&LNkmN z+fBn>va9Wo^rn0`QPNMQy_8($eE zog4V(@^o}~ur_0IDSmgJ$9ZjMzwf-6BkjzQrb!Z4uh#D7NRKlciMb)0_UEm^$;Wg~ zgR?n1+8_4Lz16p6$^a=Zv&lb!GSk;NCLa$jPuJqRPjcwMipd8sefn}E>02SOeJe>! zZK%H@uKtR&qu7BsYxJQNhhErSS*zr4ME;J%Q5rhn=$+K}i4}T*B|uO5UZ^!TR&eSD zIZs0*H4Nh=uQL8ov30yb11~vi0VARNT_Rh&kWLf|J%PY$N4}#q$i@neA#;Ons+Ioe zRt*eN0gl#qA4fJM2{>wuy1r!m^D}rmU|Zw=hWR#5Fvl9ik69<<(CR0kcl~Ji-$<|% zw83%aL=c4t`2_8*K6E_+D>oIRQoAL6{Z-*nzxxCRnRF}FiZ-J{H})KY7u}BhM1MuP z7S1CDvLO@@YmJQ;4U+vo5h@YSM4=Od70h5zzIhG;w~?>}L2J$sQrJ}UWnIP1B?Uo@o9&JTsw z8qFvS!4_T=CZvP%t&8@lED#7SdIKCD$Rg1!~bbG)7e%wVBnnIaH6N(&62nl>HfXJMw$k&n!6xT-Za z+}eyBNidJrJR6Y`$CBxg-y9BNur1%$8o&PEzl#L{1cXwIZ7&hA*G}A8&S zWfrsZntw?X;dRD(8^jO*GoxFbjc@GNRB{!pP=m~ECBnM$6Qkc%Yr z>bEDMg~f2Lj8 za_+e-LP?NiV2;L-B{Xq8$AOU8)1sJ@WE=_?67Kh9Q$3PO$!fIb^iGQoaH2~ z@#{bSm51;VjN6eFJEY}Cv9MF|y#Usev@Lv?Ev&w`_Nv+`v;J&NS~ka@Zwl%6F($MB z%`LInj#BYQXD<|Bb(UzTS8K$@OKHM(SMSD_<3T8N5$Wxi;5kgTR~1q2x*so?W$WZM z+H}25T+4}uxIxP9@|{twqBX8cf%EMMTwLpA3l+iTjcBK-?SmDQZ7Xply0mA-zb!g!oa|)dj?X3eYi0vI25`9eg(YrfX|oV9L$T1HN@m(Wt#8cCo$%k(2s)p{6X9 ztt)DMAk+1sOmi9qo=xPz3K`&Tf!5YuJFHA{=!F(Jhu8{x5R*ZbT%>V3DpOpxz=~~` z?4P!-39VH|WOwtR)tZ^*II=BY?|5+{IC+3LBDNo;&Nof9_zVawQ`H(! z(?pP;$>t~x$j_uT0AIk7CrGV$B5UMla^c1R#+L+dEzci%p+lOj7Fk^!@#^`W)jMgZ zBEKo<9q=}=$3viP;4dnyZbxAv$QVq@%!UAZ30zxJcxXmxC^UY+`1`!~6ZTqzZc)L? z?xYy~75lv;JL>>PcHbOu7jDgCpsenLAQxtfzNj+3nYClHMZ?th8SfT%Lnv;SiaQHm zzNj$XDthY=K#}+34rLQow~}#alS1Jg${qu1DNRK@ew5nYSUlqPt!WJ{PmuR<6nF_3 zmhaP>Gb0g}NGLOGOW3ZQTJb(JT(ErMF6@ePbCfsD^OU!&9?&6h3+3SfZ2^z6+a+$} z-K67%mhX=2zk;MIi>1Nm|u|W|C4pmRMaZITDodD^t)T#?Qfwsi0Sk*H|6s6_W?x4`xiSc#ZKx zQ_u&-Jun45WPAx*PdOB*2aLCAjd7rdYTUIM(?cA$WeR%D_$JbCA?;Q{daXzuWPFXZ zF%mhzc!W1GFdkxG1lYNa@4}p82slGLvq59^jI5s0J>W=~&B0)%gYu$14VeO5Hdi793xaenSu_0@ofp;PZGWt z2;c2Y*_|?a67dASr%&N4_YpI|y~rimMBwg7;GRx_yN#lMQewSFu|5@cJ}6HfO@XU= zJ0&l8$_p{wlJ>5#`ez#Q>Kl%BPiU7J`L=@ta5~~AEE{`nS~zys6!biE-8nk!EBb4f ze`WkeE`Z}cL>-dQ6K0wkt^{FMdxwwfhpn?yL%s1jV~X$CEm~;A&)KB#EAN?K=$tsq z%bRg*jSVl6EuHCPte#Rk14ECYzdPk9u@^>(liLC@IS0x)Ja(B;+N#~j?-vULWf9?T zjh6T~%a(62@A9u63nOI_;i5R136b|XFuO8D4zds#$aP>}A<{=g?iacol@aMHM4~d0 zjGNhf>SlyZbAVCvnKpT?ngMc&8BVF5kf7Y-sFm4Jl?(|pxSUwRH3Dly4a1llXarWD zelQy!3>zyt#;ek*InW%Y-mfGyWPhtxDvY0Go!&<6o%R!SR##V7wRLY}^_})pXYDOi z+W7S5o%Yk~SFc}ps@l5tQ?=55`%6_*7CAS=B48N*Y6`lWd2m+|^wDIyXpbwr>*G>e zzXAixNkPdi4HQtxW!U&$D>@U^X86^edkV&3FfJ^t}rh4eMm-@x!}!nl|}s zowO~x*NxSuwxvf5IoVSu*~!d0sTgnW*+d0zVZwxt&`~lv_f&KOZQ_&5n{2}G3d=pQ z^L&^-A&{Zk;jYBf9a~;@)q=JtHTya4mL%?uAdedx?d8kTWTZ+b8zis-OvocZ5Cy<% z6^Wvo#~zH=wO{}7PjaMj2NHW-Yeqp}g%0UkJ_rHYge#(zoM1Py(}W~)Lsazc<-L0m z5fRyot^Tz0WVSOuaxeNXX8SL^0DLc;vfiET-vw}rzMa{=ol)P9;_1-VYocUT40+FFhte**pBOt3Lh}U*-F$pB)0*J zos7>ma5d~KlwMoc&N>}=$M~s{A9$Krb@J`<^QM$(8%3HqhE*Tx=MG`j>--3I`Yrss zr?6_!?>>Y5%m2u~B~^N8$Syk&T4))xNR}|@d#cim0Tn?-U`1+0qeOn^y`iKz#yh;p= literal 29 lcmb1^V))_eKkb)uu}qO^Xs6T0NzMEAZP3!3JE!j;GXSwR47&gT diff --git a/apps/dashboard/build/_app/version.json.gz b/apps/dashboard/build/_app/version.json.gz index e2667a672d9eeafe6cd0ef328c89868b53054de8..ae0535677e3e8d507caee84bf72994de72ef2409 100644 GIT binary patch delta 26 icmdPbpCBc=*~Do37L!dThJmYC8EW?bd?(GozyJVzvI!~x delta 26 hcmdPbpCBb_Y;0;~v}udM#*kI449?8Thol)87yx2H2C)DD diff --git a/apps/dashboard/build/index.html b/apps/dashboard/build/index.html index f56c28a..25f08dd 100644 --- a/apps/dashboard/build/index.html +++ b/apps/dashboard/build/index.html @@ -11,21 +11,21 @@ - - - - - - - - - + + + + + + + + + - - - - - + + + + + Vestige @@ -33,7 +33,7 @@
        + + + + + + + + + + + + + + + + + + + + + + + + + {#each ripples as r, i (i)} + + {/each} + + + {#each activeEdges as e, i (i)} + {@const pt = edgePoint(e)} + {#if pt} + + {/if} + {/each} + + + {#each activeNodes as n (n.id)} + {@const color = nodeColor(n.nodeType, n.isSource)} + {@const r = n.isSource + ? SOURCE_RADIUS * (0.7 + 0.3 * n.activation) + : NEIGHBOUR_RADIUS_BASE * (0.5 + 0.8 * n.activation)} + + + + + + + + {#if n.isSource && n.label} + + {n.label.length > 40 ? n.label.slice(0, 40) + '…' : n.label} + + {/if} + + {/each} + diff --git a/apps/dashboard/src/lib/components/AmbientAwarenessStrip.svelte b/apps/dashboard/src/lib/components/AmbientAwarenessStrip.svelte new file mode 100644 index 0000000..4b9453b --- /dev/null +++ b/apps/dashboard/src/lib/components/AmbientAwarenessStrip.svelte @@ -0,0 +1,312 @@ + + + +
        + +
        + + + + + {$memoryCount} + memories + · + + {retentionPct}% + + avg retention +
        + + + + +
        + {#if atRiskCount !== null && atRiskCount > 0} + {atRiskCount} + at risk + {:else if atRiskCount === 0} + 0 + at risk + {:else} + + at risk + {/if} +
        + + + + + + + + + + + + + + + {#if dreamState.isDreaming} + +
        + + + + + DREAMING... +
        + {/if} + + +
        + + + {#if suppressionFlash} + + {/if} +
        + + diff --git a/apps/dashboard/src/lib/components/ContradictionArcs.svelte b/apps/dashboard/src/lib/components/ContradictionArcs.svelte new file mode 100644 index 0000000..2969beb --- /dev/null +++ b/apps/dashboard/src/lib/components/ContradictionArcs.svelte @@ -0,0 +1,421 @@ + + +
        + + + { hoverNode = null; hoverArc = null; }} + onclick={handleBgClick} + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {#each layout.arcs as arc (arc.pairIndex)} + {@const op = pairOpacity(arc.pairIndex, focusedPairIndex)} + {@const isFocused = focusedPairIndex === arc.pairIndex} + + + + { e.stopPropagation(); handleArcClick(arc.pairIndex); }} + onmouseenter={() => (hoverArc = arc)} + onmouseleave={() => (hoverArc = null)} + aria-label="contradiction {arc.pairIndex + 1}: {arc.topic}" + role="button" + tabindex="0" + onkeydown={(e) => { if (e.key === 'Enter') handleArcClick(arc.pairIndex); }} + /> + + + {/each} + + + {#each layout.nodes as node, i (node.memoryId + '-' + node.side + '-' + i)} + {@const op = pairOpacity(node.pairIndex, focusedPairIndex)} + {@const isFocused = focusedPairIndex === node.pairIndex} + {@const r = nodeRadius(node.trust)} + {@const fill = nodeColor(node.type)} + + + + (hoverNode = node)} + onmouseleave={() => (hoverNode = null)} + onclick={(e) => { e.stopPropagation(); handleArcClick(node.pairIndex); }} + role="button" + tabindex="0" + aria-label="memory {truncate(node.preview, 40)}" + onkeydown={(e) => { if (e.key === 'Enter') handleArcClick(node.pairIndex); }} + /> + + {#if isFocused} + {truncate(node.preview, 40)} + {/if} + {/each} + + + + + SEVERITY + + strong (>0.7) + + moderate (0.5-0.7) + + mild (0.3-0.5) + + + + + {#if hoverNode} +
        +
        +
        + {hoverNode.type ?? 'memory'} + trust {(hoverNode.trust * 100).toFixed(0)}% +
        +
        {hoverNode.preview}
        + {#if hoverNode.created} +
        created {hoverNode.created}
        + {/if} + {#if hoverNode.tags && hoverNode.tags.length > 0} +
        + {hoverNode.tags.slice(0, 4).join(' · ')} +
        + {/if} +
        + {:else if hoverArc} +
        +
        +
        + {hoverArc.severity} conflict +
        +
        topic: {hoverArc.topic}
        +
        + similarity {(hoverArc.similarity * 100).toFixed(0)}% · {hoverArc.dateDiff}d apart +
        +
        + {/if} +
        + + diff --git a/apps/dashboard/src/lib/components/DreamInsightCard.svelte b/apps/dashboard/src/lib/components/DreamInsightCard.svelte new file mode 100644 index 0000000..6024015 --- /dev/null +++ b/apps/dashboard/src/lib/components/DreamInsightCard.svelte @@ -0,0 +1,211 @@ + + + +
        + +
        + + {insight.type ?? 'insight'} + + {#if isHighNovelty} + + novel + + {/if} +
        + + +

        + {insight.insight} +

        + + +
        +
        + Novelty + {novelty.toFixed(2)} +
        +
        +
        +
        +
        + + +
        + Confidence + + {formatConfidencePct(confidence)} + +
        + + + {#if firstSources.length > 0} +
        +
        + Sources + {#if extraCount > 0} + (+{extraCount}) + {/if} +
        +
        + {#each firstSources as id (id)} + + {shortMemoryId(id)} + + {/each} +
        +
        + {/if} +
        + + diff --git a/apps/dashboard/src/lib/components/DreamStageReplay.svelte b/apps/dashboard/src/lib/components/DreamStageReplay.svelte new file mode 100644 index 0000000..b407191 --- /dev/null +++ b/apps/dashboard/src/lib/components/DreamStageReplay.svelte @@ -0,0 +1,539 @@ + + + +
        + +
        +
        +
        + {current.num} +
        +
        +
        {current.name}
        +
        {current.desc}
        +
        +
        + +
        + + +
        + + {#if stageIdx === 5} +
        + Episodic + hippocampus +
        +
        + Semantic + cortex +
        +
        + {/if} + + + + + + {#each cards as card (card.id)} +
        +
        +
        +
        +
        +
        +
        + {/each} + + + {#if stageIdx === 1} + + {/if} +
        + + +
        + {#if stageIdx === 1} + Replaying {dreamResult?.memoriesReplayed ?? cardCount} memories + {:else if stageIdx === 2} + New connections found: {dreamResult?.stats?.newConnectionsFound ?? connectionCount} + {:else if stageIdx === 3} + Strengthened: {dreamResult?.stats?.memoriesStrengthened ?? strengthenedCount} + {:else if stageIdx === 4} + Compressed: {dreamResult?.stats?.memoriesCompressed ?? prunedCount} + {:else if stageIdx === 5} + Connections persisted: {dreamResult?.connectionsPersisted ?? 0} + Insights: {dreamResult?.stats?.insightsGenerated ?? 0} + {/if} +
        +
        + + diff --git a/apps/dashboard/src/lib/components/DuplicateCluster.svelte b/apps/dashboard/src/lib/components/DuplicateCluster.svelte new file mode 100644 index 0000000..f414ec5 --- /dev/null +++ b/apps/dashboard/src/lib/components/DuplicateCluster.svelte @@ -0,0 +1,192 @@ + + + +{#if memories.length > 0 && winner} +
        + +
        +
        +
        + + {(similarity * 100).toFixed(1)}% + + {similarityBandLabel(similarity)} + · {memories.length} memories +
        +
        +
        +
        +
        + + + + Suggested: {suggestedAction === 'merge' ? 'Merge' : 'Review'} + +
        + + +
        + {#each memories as memory (memory.id)} +
        + + + +
        + +
        + {memory.nodeType} + {#if memory.id === winner.id} + + WINNER + + {/if} + {#each safeTags(memory.tags, 4) as tag} + {tag} + {/each} +
        + + +

        + {expanded ? memory.content : previewContent(memory.content)} +

        + + + {#if formatDate(memory.createdAt)} +
        + {formatDate(memory.createdAt)} +
        + {/if} +
        + + +
        +
        +
        +
        + + {(memory.retention * 100).toFixed(0)}% + +
        +
        + {/each} +
        + + +
        + + + +
        +
        +{/if} diff --git a/apps/dashboard/src/lib/components/EvidenceCard.svelte b/apps/dashboard/src/lib/components/EvidenceCard.svelte new file mode 100644 index 0000000..e845666 --- /dev/null +++ b/apps/dashboard/src/lib/components/EvidenceCard.svelte @@ -0,0 +1,157 @@ + + +
        + +
        +
        + + {meta.icon}{meta.label} + + {#if nodeType} + + {nodeType} + + {/if} +
        + #{shortId} +
        + + +

        {preview}

        + + +
        +
        + Trust + {trustPct.toFixed(0)}% +
        +
        +
        +
        +
        + + +
        + {formatDate(date)} + FSRS · reps × retention +
        +
        + + diff --git a/apps/dashboard/src/lib/components/FSRSCalendar.svelte b/apps/dashboard/src/lib/components/FSRSCalendar.svelte new file mode 100644 index 0000000..053dc5e --- /dev/null +++ b/apps/dashboard/src/lib/components/FSRSCalendar.svelte @@ -0,0 +1,344 @@ + + +
        + +
        +
        + Avg retention of memories due — last 2 weeks → next 4 +
        + retention + today +
        +
        + +
        + + +
        + {#each DOW_LABELS as label} +
        {label}
        + {/each} +
        + + +
        + {#each cells as cell (cell.key)} + {@const colors = cellColor(cell)} + + {/each} +
        + + +
        + + + Overdue + + + + Due today + + + + Within 7 days + + + + Future (8+ days) + +
        + + + {#if selectedCell && selectedCell.memories.length > 0} +
        +
        +
        +

        {fullDate(selectedCell.date)}

        +

        + {selectedCell.memories.length} memor{selectedCell.memories.length === 1 ? 'y' : 'ies'} due + · avg retention {(selectedCell.avgRetention * 100).toFixed(0)}% +

        +
        + +
        +
        + {#each selectedCell.memories.slice(0, 100) as m (m.id)} +
        + +
        +

        {m.content}

        +
        + {m.nodeType} + {#if m.reviewCount !== undefined} + · {m.reviewCount} review{m.reviewCount === 1 ? '' : 's'} + {/if} + {#each m.tags.slice(0, 2) as tag} + {tag} + {/each} +
        +
        +
        +
        +
        +
        + {(m.retentionStrength * 100).toFixed(0)}% +
        +
        + {/each} + {#if selectedCell.memories.length > 100} +

        + +{selectedCell.memories.length - 100} more +

        + {/if} +
        +
        + {/if} +
        + + diff --git a/apps/dashboard/src/lib/components/Graph3D.svelte b/apps/dashboard/src/lib/components/Graph3D.svelte index a9960a2..7a55436 100644 --- a/apps/dashboard/src/lib/components/Graph3D.svelte +++ b/apps/dashboard/src/lib/components/Graph3D.svelte @@ -11,6 +11,7 @@ import { mapEventToEffects, type GraphMutationContext, type GraphMutation } from '$lib/graph/events'; import { createNebulaBackground, updateNebula } from '$lib/graph/shaders/nebula.frag'; import { createPostProcessing, updatePostProcessing, type PostProcessingStack } from '$lib/graph/shaders/post-processing'; + import { graphState } from '$lib/stores/graph-state.svelte'; import type * as THREE from 'three'; interface Props { @@ -59,8 +60,13 @@ let nebulaMaterial: THREE.ShaderMaterial; let postStack: PostProcessingStack; - // Event tracking - let processedEventCount = 0; + // Event tracking — we track the last-processed event by reference identity + // rather than by count, because the WebSocket store PREPENDS new events + // at index 0 and CAPS the array at MAX_EVENTS, so a numeric high-water + // mark would drift out of alignment (and did for ~3 versions — v2.3 + // demo uncovered this while trying to fire multiple MemoryCreated events + // in sequence). + let lastProcessedEvent: VestigeEvent | null = null; // Internal tracking: initial nodes + live-added nodes let allNodes: GraphNode[] = []; @@ -116,9 +122,23 @@ if (ctx) disposeScene(ctx); }); + // 120Hz Governor. All physics and effect counters are frame-based + // (orb.age++, forceSim.tick, materialization frames). On a ProMotion + // display the browser drives rAF at 120 FPS, which would double-speed + // every ritual. Clamping to ~60 FPS keeps the visual timing identical + // across displays without rewriting every counter to use delta time. + // The `- (dt % 16)` carry avoids long-term drift. + let govLastTime = 0; + function animate() { animationId = requestAnimationFrame(animate); - const time = performance.now() * 0.001; + const now = performance.now(); + if (govLastTime === 0) govLastTime = now; + const dt = now - govLastTime; + if (dt < 16) return; + govLastTime = now - (dt % 16); + + const time = now * 0.001; // Force simulation forceSim.tick(edges); @@ -132,7 +152,7 @@ // Animate particles.animate(time); - nodeManager.animate(time, allNodes, ctx.camera); + nodeManager.animate(time, allNodes, ctx.camera, graphState.brightness); // Dream mode dreamMode.setActive(isDreaming); @@ -157,10 +177,33 @@ } function processEvents() { - if (!events || events.length <= processedEventCount) return; + if (!events || events.length === 0) return; - const newEvents = events.slice(processedEventCount); - processedEventCount = events.length; + // Walk the feed from newest (index 0) backward until we hit the last + // event we already processed. Everything between is fresh. This is + // robust against both (a) prepend ordering and (b) the MAX_EVENTS cap + // dropping old entries off the tail. + const fresh: VestigeEvent[] = []; + for (const e of events) { + if (e === lastProcessedEvent) break; + fresh.push(e); + } + if (fresh.length === 0) return; + + // Event Horizon Guard. If the last-processed reference fell off the + // end of the capped array (burst of >MAX_EVENTS events in one tick), + // the walk above consumed the ENTIRE buffer — we'd try to animate + // 200 simultaneous births and melt the GPU. Detect the overflow and + // drop this batch on the floor; state is already current via + // lastProcessedEvent pointing forward. + if (fresh.length === events.length && events.length >= 200) { + // eslint-disable-next-line no-console + console.warn('[vestige] Event horizon overflow: dropping visuals for', fresh.length, 'events'); + lastProcessedEvent = events[0]; + return; + } + + lastProcessedEvent = events[0]; const mutationCtx: GraphMutationContext = { effects, @@ -180,8 +223,11 @@ }, }; - for (const event of newEvents) { - mapEventToEffects(event, mutationCtx, allNodes); + // Process oldest-first so cause precedes effect (e.g. MemoryCreated + // fires before a ConnectionDiscovered that references the new node). + // `fresh` is newest-first from the walk above, so iterate reversed. + for (let i = fresh.length - 1; i >= 0; i--) { + mapEventToEffects(fresh[i], mutationCtx, allNodes); } } diff --git a/apps/dashboard/src/lib/components/ImportanceRadar.svelte b/apps/dashboard/src/lib/components/ImportanceRadar.svelte new file mode 100644 index 0000000..92cf1b3 --- /dev/null +++ b/apps/dashboard/src/lib/components/ImportanceRadar.svelte @@ -0,0 +1,174 @@ + + + + + {#each RINGS as ring} + + {/each} + + + {#each AXIS_ORDER as axis} + {@const [x, y] = pointAt(1, axis.angle)} + + {/each} + + + + + + {#if size !== 'sm'} + {#each AXIS_ORDER as axis} + {@const [px, py] = pointAt(values[axis.key] * animProgress, axis.angle)} + + {/each} + {/if} + + + {#if showLabels} + {#each AXIS_ORDER as axis} + {@const pos = labelPos(axis.angle)} + + {(values[axis.key] * 100).toFixed(0)}% + + + {AXIS_LABELS[axis.key]} + + {/each} + {/if} + diff --git a/apps/dashboard/src/lib/components/InsightToast.svelte b/apps/dashboard/src/lib/components/InsightToast.svelte new file mode 100644 index 0000000..f941911 --- /dev/null +++ b/apps/dashboard/src/lib/components/InsightToast.svelte @@ -0,0 +1,253 @@ + + + +
        + {#each $toasts as t (t.id)} + + {/each} +
        + + diff --git a/apps/dashboard/src/lib/components/MemoryAuditTrail.svelte b/apps/dashboard/src/lib/components/MemoryAuditTrail.svelte new file mode 100644 index 0000000..4a4e8f3 --- /dev/null +++ b/apps/dashboard/src/lib/components/MemoryAuditTrail.svelte @@ -0,0 +1,185 @@ + + +
        + {#if loading} +
        + {#each Array(5) as _} +
        + {/each} +
        + {:else if errored} +

        Audit trail failed to load.

        + {:else if !memoryId} +

        No memory selected.

        + {:else if events.length === 0} +

        No audit events recorded yet.

        + {:else} +
          + {#each visibleEvents as ev, i (ev.timestamp + i)} + {@const m = META[ev.action]} + {@const delta = formatRetentionDelta(ev.old_value, ev.new_value)} +
        1. + + + + +
          +
          +
          + {m.label} + {#if ev.triggered_by} + {ev.triggered_by} + {/if} +
          + + {relativeTime(ev.timestamp)} + +
          + {#if delta} +
          + retention {delta} +
          + {/if} + {#if ev.reason} +
          {ev.reason}
          + {/if} +
          +
        2. + {/each} +
        + + {#if hiddenCount > 0} + + {/if} + {/if} +
        + + diff --git a/apps/dashboard/src/lib/components/PatternTransferHeatmap.svelte b/apps/dashboard/src/lib/components/PatternTransferHeatmap.svelte new file mode 100644 index 0000000..263661d --- /dev/null +++ b/apps/dashboard/src/lib/components/PatternTransferHeatmap.svelte @@ -0,0 +1,251 @@ + + + +
        + + + + +
        +
        + {mobileList.length} transfer pair{mobileList.length === 1 ? '' : 's'} · tap to filter +
        + {#if mobileList.length === 0} +
        + No cross-project transfers recorded yet. +
        + {:else} + {#each mobileList as row (row.from + '->' + row.to)} + + {/each} + {/if} +
        +
        diff --git a/apps/dashboard/src/lib/components/ReasoningChain.svelte b/apps/dashboard/src/lib/components/ReasoningChain.svelte new file mode 100644 index 0000000..61ea92d --- /dev/null +++ b/apps/dashboard/src/lib/components/ReasoningChain.svelte @@ -0,0 +1,259 @@ + + +
        + {#each STAGES as stage, i (stage.key)} +
        + + {#if i < STAGES.length - 1} +
        + {/if} + + +
        + {stage.icon} +
        + +
        +
        + 0{i + 1} + {stage.label} +
        +

        {hintFor(stage.key, stage.base)}

        +
        + + +
        + {/each} +
        + + diff --git a/apps/dashboard/src/lib/components/ThemeToggle.svelte b/apps/dashboard/src/lib/components/ThemeToggle.svelte new file mode 100644 index 0000000..25539a5 --- /dev/null +++ b/apps/dashboard/src/lib/components/ThemeToggle.svelte @@ -0,0 +1,175 @@ + + + + + + diff --git a/apps/dashboard/src/lib/components/__tests__/ActivationNetwork.test.ts b/apps/dashboard/src/lib/components/__tests__/ActivationNetwork.test.ts new file mode 100644 index 0000000..a1641c1 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/ActivationNetwork.test.ts @@ -0,0 +1,464 @@ +/** + * Unit tests for Spreading Activation helpers. + * + * Pure-logic coverage only — the SVG render layer is not exercised here + * (no jsdom). The six concerns we test are the ones that actually decide + * whether the burst looks right: + * + * 1. Per-tick decay math (Collins & Loftus 1975, 0.93/frame) + * 2. Compound decay after N ticks + * 3. Threshold filter (activation < 0.05 → invisible) + * 4. Concentric-ring placement around a source (8-per-ring, even angles) + * 5. Color mapping (source → synapse-glow, unknown type → fallback) + * 6. Staggered edge delay (rank ordering, ring-2 bonus) + * 7. Event-feed filter (only NEW ActivationSpread events since lastSeen) + * + * The test environment is Node (vitest `environment: 'node'`) — the same + * harness the graph + dream helper tests use. + */ +import { describe, it, expect } from 'vitest'; +import { + DECAY, + FALLBACK_COLOR, + MIN_VISIBLE, + RING_GAP, + RING_1_CAPACITY, + SOURCE_COLOR, + STAGGER_PER_RANK, + STAGGER_RING_2_BONUS, + activationColor, + applyDecay, + compoundDecay, + computeRing, + edgeStagger, + filterNewSpreadEvents, + initialActivation, + isVisible, + layoutNeighbours, + ringPositions, + ticksUntilInvisible, +} from '../activation-helpers'; +import { NODE_TYPE_COLORS, type VestigeEvent } from '$types'; + +// --------------------------------------------------------------------------- +// 1. Decay math — single tick +// --------------------------------------------------------------------------- + +describe('applyDecay (Collins & Loftus 1975, 0.93/frame)', () => { + it('multiplies activation by 0.93 per tick', () => { + expect(applyDecay(1)).toBeCloseTo(0.93, 10); + }); + + it('matches the documented constant', () => { + expect(DECAY).toBe(0.93); + }); + + it('returns 0 for zero / negative / non-finite input', () => { + expect(applyDecay(0)).toBe(0); + expect(applyDecay(-0.5)).toBe(0); + expect(applyDecay(Number.NaN)).toBe(0); + expect(applyDecay(Number.POSITIVE_INFINITY)).toBe(0); + }); + + it('preserves strict monotonic decrease', () => { + let a = 1; + let prev = a; + for (let i = 0; i < 50; i++) { + a = applyDecay(a); + if (a === 0) break; + expect(a).toBeLessThan(prev); + prev = a; + } + }); +}); + +// --------------------------------------------------------------------------- +// 2. Compound decay — N ticks +// --------------------------------------------------------------------------- + +describe('compoundDecay', () => { + it('0 ticks returns the input unchanged', () => { + expect(compoundDecay(0.8, 0)).toBe(0.8); + }); + + it('N ticks equals applyDecay called N times', () => { + let iterative = 1; + for (let i = 0; i < 10; i++) iterative = applyDecay(iterative); + expect(compoundDecay(1, 10)).toBeCloseTo(iterative, 10); + }); + + it('5 ticks from 1.0 lands in the 0.69..0.70 band', () => { + // 0.93^5 ≈ 0.6957 + const result = compoundDecay(1, 5); + expect(result).toBeGreaterThan(0.69); + expect(result).toBeLessThan(0.7); + }); + + it('treats negative tick counts as no-op', () => { + expect(compoundDecay(0.5, -3)).toBe(0.5); + }); +}); + +// --------------------------------------------------------------------------- +// 3. Threshold filter — fade/remove below MIN_VISIBLE +// --------------------------------------------------------------------------- + +describe('isVisible / MIN_VISIBLE threshold', () => { + it('MIN_VISIBLE is exactly 0.05', () => { + expect(MIN_VISIBLE).toBe(0.05); + }); + + it('returns true at exactly the threshold (inclusive floor)', () => { + expect(isVisible(0.05)).toBe(true); + }); + + it('returns false just below the threshold', () => { + expect(isVisible(0.0499)).toBe(false); + }); + + it('returns false for zero / negative / NaN', () => { + expect(isVisible(0)).toBe(false); + expect(isVisible(-0.1)).toBe(false); + expect(isVisible(Number.NaN)).toBe(false); + }); + + it('returns true for typical full-activation source', () => { + expect(isVisible(1)).toBe(true); + }); +}); + +describe('ticksUntilInvisible', () => { + it('returns 0 when input is already at/below MIN_VISIBLE', () => { + expect(ticksUntilInvisible(MIN_VISIBLE)).toBe(0); + expect(ticksUntilInvisible(0.03)).toBe(0); + expect(ticksUntilInvisible(0)).toBe(0); + }); + + it('produces a count that actually crosses the threshold', () => { + const n = ticksUntilInvisible(1); + expect(n).toBeGreaterThan(0); + // After n ticks we should be BELOW the threshold... + expect(compoundDecay(1, n)).toBeLessThan(MIN_VISIBLE); + // ...but one fewer tick should still be visible. + expect(compoundDecay(1, n - 1)).toBeGreaterThanOrEqual(MIN_VISIBLE); + }); + + it('takes ~42 ticks for a full-strength burst to fade to threshold', () => { + // log(0.05) / log(0.93) ≈ 41.27 → ceil → 42 + expect(ticksUntilInvisible(1)).toBe(42); + }); +}); + +// --------------------------------------------------------------------------- +// 4. Ring placement +// --------------------------------------------------------------------------- + +describe('computeRing', () => { + it('ranks 0..7 land on ring 1', () => { + for (let r = 0; r < RING_1_CAPACITY; r++) { + expect(computeRing(r)).toBe(1); + } + }); + + it('rank 8 and beyond land on ring 2', () => { + expect(computeRing(RING_1_CAPACITY)).toBe(2); + expect(computeRing(15)).toBe(2); + expect(computeRing(99)).toBe(2); + }); +}); + +describe('ringPositions (concentric circle layout)', () => { + it('returns an empty array for count 0', () => { + expect(ringPositions(0, 0, 0, 1)).toEqual([]); + }); + + it('places 4 nodes on ring 1 at radius RING_GAP, evenly spaced', () => { + const pts = ringPositions(0, 0, 4, 1, 0); + expect(pts).toHaveLength(4); + // First point at angle 0 → (RING_GAP, 0) + expect(pts[0].x).toBeCloseTo(RING_GAP, 6); + expect(pts[0].y).toBeCloseTo(0, 6); + // Every point sits on the circle of the correct radius. + for (const p of pts) { + const dist = Math.hypot(p.x, p.y); + expect(dist).toBeCloseTo(RING_GAP, 6); + } + }); + + it('places ring 2 at 2× RING_GAP from center', () => { + const pts = ringPositions(0, 0, 3, 2, 0); + for (const p of pts) { + expect(Math.hypot(p.x, p.y)).toBeCloseTo(RING_GAP * 2, 6); + } + }); + + it('honours the center (cx, cy)', () => { + const pts = ringPositions(500, 280, 2, 1, 0); + // With angleOffset=0 and 2 points, the two angles are 0 and π. + expect(pts[0].x).toBeCloseTo(500 + RING_GAP, 6); + expect(pts[0].y).toBeCloseTo(280, 6); + expect(pts[1].x).toBeCloseTo(500 - RING_GAP, 6); + expect(pts[1].y).toBeCloseTo(280, 6); + }); + + it('applies angleOffset to every point', () => { + const unrot = ringPositions(0, 0, 3, 1, 0); + const rot = ringPositions(0, 0, 3, 1, Math.PI / 2); + for (let i = 0; i < 3; i++) { + // Rotation preserves distance from center. + expect(Math.hypot(rot[i].x, rot[i].y)).toBeCloseTo( + Math.hypot(unrot[i].x, unrot[i].y), + 6, + ); + } + // And the first rotated point should now be near (0, RING_GAP) rather + // than (RING_GAP, 0). + expect(rot[0].x).toBeCloseTo(0, 6); + expect(rot[0].y).toBeCloseTo(RING_GAP, 6); + }); +}); + +describe('layoutNeighbours (spills overflow to ring 2)', () => { + it('returns one point per neighbour', () => { + expect(layoutNeighbours(0, 0, 15, 0)).toHaveLength(15); + expect(layoutNeighbours(0, 0, 3, 0)).toHaveLength(3); + expect(layoutNeighbours(0, 0, 0, 0)).toHaveLength(0); + }); + + it('first 8 neighbours are on ring 1 (radius RING_GAP)', () => { + const pts = layoutNeighbours(0, 0, 15, 0); + for (let i = 0; i < RING_1_CAPACITY; i++) { + expect(Math.hypot(pts[i].x, pts[i].y)).toBeCloseTo(RING_GAP, 6); + } + }); + + it('neighbour 9..N are on ring 2 (radius 2*RING_GAP)', () => { + const pts = layoutNeighbours(0, 0, 15, 0); + for (let i = RING_1_CAPACITY; i < 15; i++) { + expect(Math.hypot(pts[i].x, pts[i].y)).toBeCloseTo(RING_GAP * 2, 6); + } + }); +}); + +describe('initialActivation', () => { + it('rank 0 gets the highest activation', () => { + const a0 = initialActivation(0, 10); + const a1 = initialActivation(1, 10); + expect(a0).toBeGreaterThan(a1); + }); + + it('ring-2 ranks get a 0.75 ring penalty', () => { + // Rank 7 (last of ring 1) vs rank 8 (first of ring 2) — the jump in + // activation between them should include the 0.75 ring factor. + const ring1Last = initialActivation(7, 16); + const ring2First = initialActivation(8, 16); + expect(ring2First).toBeLessThan(ring1Last * 0.78); + }); + + it('returns values in (0, 1]', () => { + for (let i = 0; i < 20; i++) { + const a = initialActivation(i, 20); + expect(a).toBeGreaterThan(0); + expect(a).toBeLessThanOrEqual(1); + } + }); + + it('returns 0 for invalid inputs', () => { + expect(initialActivation(-1, 10)).toBe(0); + expect(initialActivation(0, 0)).toBe(0); + expect(initialActivation(Number.NaN, 10)).toBe(0); + }); +}); + +// --------------------------------------------------------------------------- +// 5. Color mapping +// --------------------------------------------------------------------------- + +describe('activationColor', () => { + it('source nodes always use SOURCE_COLOR (synapse-glow)', () => { + expect(activationColor('fact', true)).toBe(SOURCE_COLOR); + expect(activationColor('concept', true)).toBe(SOURCE_COLOR); + // Even if nodeType is garbage, source overrides. + expect(activationColor('garbage-type', true)).toBe(SOURCE_COLOR); + }); + + it('fact → NODE_TYPE_COLORS.fact (#00A8FF)', () => { + expect(activationColor('fact', false)).toBe(NODE_TYPE_COLORS.fact); + expect(activationColor('fact', false)).toBe('#00A8FF'); + }); + + it('every known node type resolves to its palette entry', () => { + for (const type of Object.keys(NODE_TYPE_COLORS)) { + expect(activationColor(type, false)).toBe(NODE_TYPE_COLORS[type]); + } + }); + + it('unknown node type falls back to FALLBACK_COLOR (soft steel)', () => { + expect(activationColor('not-a-real-type', false)).toBe(FALLBACK_COLOR); + expect(FALLBACK_COLOR).toBe('#8B95A5'); + }); + + it('null/undefined/empty nodeType also falls back', () => { + expect(activationColor(null, false)).toBe(FALLBACK_COLOR); + expect(activationColor(undefined, false)).toBe(FALLBACK_COLOR); + expect(activationColor('', false)).toBe(FALLBACK_COLOR); + }); +}); + +// --------------------------------------------------------------------------- +// 6. Staggered edge delay +// --------------------------------------------------------------------------- + +describe('edgeStagger', () => { + it('rank 0 has zero delay (first edge lights up immediately)', () => { + expect(edgeStagger(0)).toBe(0); + }); + + it('ring-1 edges are STAGGER_PER_RANK apart', () => { + expect(edgeStagger(1)).toBe(STAGGER_PER_RANK); + expect(edgeStagger(2)).toBe(STAGGER_PER_RANK * 2); + expect(edgeStagger(7)).toBe(STAGGER_PER_RANK * 7); + }); + + it('ring-2 edges add STAGGER_RING_2_BONUS on top of rank×stagger', () => { + expect(edgeStagger(8)).toBe(8 * STAGGER_PER_RANK + STAGGER_RING_2_BONUS); + expect(edgeStagger(12)).toBe(12 * STAGGER_PER_RANK + STAGGER_RING_2_BONUS); + }); + + it('monotonically non-decreasing', () => { + let prev = -1; + for (let i = 0; i < 20; i++) { + const s = edgeStagger(i); + expect(s).toBeGreaterThanOrEqual(prev); + prev = s; + } + }); + + it('produces 15 distinct delays for a typical 15-neighbour burst', () => { + const delays = Array.from({ length: 15 }, (_, i) => edgeStagger(i)); + expect(new Set(delays).size).toBe(15); + }); +}); + +// --------------------------------------------------------------------------- +// 7. Event-feed filter +// --------------------------------------------------------------------------- + +function spreadEvent( + source_id: string, + target_ids: string[], +): VestigeEvent { + return { type: 'ActivationSpread', data: { source_id, target_ids } }; +} + +describe('filterNewSpreadEvents', () => { + it('returns [] on empty feed', () => { + expect(filterNewSpreadEvents([], null)).toEqual([]); + }); + + it('returns all ActivationSpread payloads when lastSeen is null', () => { + const feed = [ + spreadEvent('a', ['b', 'c']), + spreadEvent('d', ['e']), + ]; + const out = filterNewSpreadEvents(feed, null); + expect(out).toHaveLength(2); + }); + + it('returns in oldest-first order (feed itself is newest-first)', () => { + const newest = spreadEvent('new', ['n1']); + const older = spreadEvent('old', ['o1']); + const out = filterNewSpreadEvents([newest, older], null); + expect(out[0].source_id).toBe('old'); + expect(out[1].source_id).toBe('new'); + }); + + it('stops at the lastSeen reference (object identity)', () => { + const oldest = spreadEvent('o', ['x']); + const middle = spreadEvent('m', ['y']); + const newest = spreadEvent('n', ['z']); + // Feed is prepended, so order is [newest, middle, oldest] + const feed = [newest, middle, oldest]; + const out = filterNewSpreadEvents(feed, middle); + // Only `newest` is fresh — middle and oldest were already processed. + expect(out).toHaveLength(1); + expect(out[0].source_id).toBe('n'); + }); + + it('returns [] if lastSeen is already the newest event', () => { + const e = spreadEvent('a', ['b']); + const out = filterNewSpreadEvents([e], e); + expect(out).toEqual([]); + }); + + it('ignores non-ActivationSpread events', () => { + const feed: VestigeEvent[] = [ + { type: 'MemoryCreated', data: { id: 'x' } }, + spreadEvent('a', ['b']), + { type: 'Heartbeat', data: {} }, + ]; + const out = filterNewSpreadEvents(feed, null); + expect(out).toHaveLength(1); + expect(out[0].source_id).toBe('a'); + }); + + it('skips malformed ActivationSpread events (missing / wrong-type fields)', () => { + const feed: VestigeEvent[] = [ + { type: 'ActivationSpread', data: {} }, // missing both + { type: 'ActivationSpread', data: { source_id: 'a' } }, // no targets + { type: 'ActivationSpread', data: { target_ids: ['b'] } }, // no source + { + type: 'ActivationSpread', + data: { source_id: 'a', target_ids: 'not-an-array' }, + }, + { + type: 'ActivationSpread', + data: { source_id: 'a', target_ids: [123, null, 'x'] }, + }, + ]; + const out = filterNewSpreadEvents(feed, null); + // Only the last one survives, with numeric/null targets filtered out. + expect(out).toHaveLength(1); + expect(out[0].source_id).toBe('a'); + expect(out[0].target_ids).toEqual(['x']); + }); + + it('preserves target array contents faithfully', () => { + const feed = [spreadEvent('src', ['t1', 't2', 't3'])]; + const out = filterNewSpreadEvents(feed, null); + expect(out[0].target_ids).toEqual(['t1', 't2', 't3']); + }); + + it('does not mutate its inputs', () => { + const feed = [spreadEvent('a', ['b', 'c'])]; + const snapshot = JSON.stringify(feed); + filterNewSpreadEvents(feed, null); + expect(JSON.stringify(feed)).toBe(snapshot); + }); +}); + +// --------------------------------------------------------------------------- +// Sanity: exported constants are the values the docstring promises +// --------------------------------------------------------------------------- + +describe('exported constants (contract pinning)', () => { + it('RING_1_CAPACITY is 8', () => { + expect(RING_1_CAPACITY).toBe(8); + }); + + it('STAGGER_PER_RANK is 4 frames', () => { + expect(STAGGER_PER_RANK).toBe(4); + }); + + it('STAGGER_RING_2_BONUS is 12 frames', () => { + expect(STAGGER_RING_2_BONUS).toBe(12); + }); + + it('RING_GAP is 140px', () => { + expect(RING_GAP).toBe(140); + }); + + it('SOURCE_COLOR is synapse-glow #818cf8', () => { + expect(SOURCE_COLOR).toBe('#818cf8'); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/AmbientAwarenessStrip.test.ts b/apps/dashboard/src/lib/components/__tests__/AmbientAwarenessStrip.test.ts new file mode 100644 index 0000000..e159e82 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/AmbientAwarenessStrip.test.ts @@ -0,0 +1,439 @@ +import { describe, it, expect } from 'vitest'; +import { + ACTIVITY_BUCKET_COUNT, + ACTIVITY_BUCKET_MS, + ACTIVITY_WINDOW_MS, + bucketizeActivity, + dreamInsightsCount, + findRecentDream, + formatAgo, + hasRecentSuppression, + isDreaming, + parseEventTimestamp, + type EventLike, +} from '../awareness-helpers'; + +// Fixed "now" — March 1 2026 12:00:00 UTC. All tests are clock-free. +const NOW = Date.parse('2026-03-01T12:00:00.000Z'); + +function mkEvent( + type: string, + data: Record = {}, +): EventLike { + return { type, data }; +} + +// ───────────────────────────────────────────────────────────────────────── +// parseEventTimestamp +// ───────────────────────────────────────────────────────────────────────── +describe('parseEventTimestamp', () => { + it('parses ISO-8601 string', () => { + const e = mkEvent('Foo', { timestamp: '2026-03-01T12:00:00.000Z' }); + expect(parseEventTimestamp(e)).toBe(NOW); + }); + + it('parses numeric ms (> 1e12)', () => { + const e = mkEvent('Foo', { timestamp: NOW }); + expect(parseEventTimestamp(e)).toBe(NOW); + }); + + it('parses numeric seconds (<= 1e12) by scaling x1000', () => { + const secs = Math.floor(NOW / 1000); + const e = mkEvent('Foo', { timestamp: secs }); + // Allow floating precision — must land in same second + const result = parseEventTimestamp(e); + expect(result).not.toBeNull(); + expect(Math.abs((result as number) - NOW)).toBeLessThan(1000); + }); + + it('falls back to `at` field', () => { + const e = mkEvent('Foo', { at: '2026-03-01T12:00:00.000Z' }); + expect(parseEventTimestamp(e)).toBe(NOW); + }); + + it('falls back to `occurred_at` field', () => { + const e = mkEvent('Foo', { occurred_at: '2026-03-01T12:00:00.000Z' }); + expect(parseEventTimestamp(e)).toBe(NOW); + }); + + it('prefers `timestamp` over `at` over `occurred_at`', () => { + const e = mkEvent('Foo', { + timestamp: '2026-03-01T12:00:00.000Z', + at: '2020-01-01T00:00:00.000Z', + occurred_at: '2019-01-01T00:00:00.000Z', + }); + expect(parseEventTimestamp(e)).toBe(NOW); + }); + + it('returns null for missing data', () => { + expect(parseEventTimestamp({ type: 'Foo' })).toBeNull(); + }); + + it('returns null for empty data object', () => { + expect(parseEventTimestamp(mkEvent('Foo', {}))).toBeNull(); + }); + + it('returns null for bad ISO string', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: 'not-a-date' }))).toBeNull(); + }); + + it('returns null for non-finite number (NaN)', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: Number.NaN }))).toBeNull(); + }); + + it('returns null for non-finite number (Infinity)', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: Number.POSITIVE_INFINITY }))).toBeNull(); + }); + + it('returns null for null timestamp', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: null as unknown as string }))).toBeNull(); + }); + + it('returns null for non-string non-number timestamp (object)', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: {} as unknown as string }))).toBeNull(); + }); + + it('returns null for a boolean timestamp', () => { + expect(parseEventTimestamp(mkEvent('Foo', { timestamp: true as unknown as string }))).toBeNull(); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// bucketizeActivity +// ───────────────────────────────────────────────────────────────────────── +describe('bucketizeActivity', () => { + it('returns 10 buckets of 30s each covering a 5-min window', () => { + expect(ACTIVITY_BUCKET_COUNT).toBe(10); + expect(ACTIVITY_BUCKET_MS).toBe(30_000); + expect(ACTIVITY_WINDOW_MS).toBe(300_000); + const result = bucketizeActivity([], NOW); + expect(result).toHaveLength(10); + expect(result.every((b) => b.count === 0 && b.ratio === 0)).toBe(true); + }); + + it('assigns newest event to the last bucket (index 9)', () => { + const e = mkEvent('MemoryCreated', { timestamp: NOW - 100 }); + const result = bucketizeActivity([e], NOW); + expect(result[9].count).toBe(1); + expect(result[9].ratio).toBe(1); + for (let i = 0; i < 9; i++) expect(result[i].count).toBe(0); + }); + + it('assigns oldest-edge event to bucket 0', () => { + // Exactly 5 min ago → at start boundary → floor((0)/30s) = 0 + const e = mkEvent('MemoryCreated', { timestamp: NOW - ACTIVITY_WINDOW_MS + 1 }); + const result = bucketizeActivity([e], NOW); + expect(result[0].count).toBe(1); + }); + + it('drops events older than 5 min (clock skew / pre-history)', () => { + const e = mkEvent('MemoryCreated', { timestamp: NOW - ACTIVITY_WINDOW_MS - 1 }); + const result = bucketizeActivity([e], NOW); + expect(result.every((b) => b.count === 0)).toBe(true); + }); + + it('drops future events (negative clock skew)', () => { + const e = mkEvent('MemoryCreated', { timestamp: NOW + 5_000 }); + const result = bucketizeActivity([e], NOW); + expect(result.every((b) => b.count === 0)).toBe(true); + }); + + it('drops Heartbeat events as noise', () => { + const e = mkEvent('Heartbeat', { timestamp: NOW - 100 }); + const result = bucketizeActivity([e], NOW); + expect(result.every((b) => b.count === 0)).toBe(true); + }); + + it('drops events with unparseable timestamps', () => { + const e = mkEvent('MemoryCreated', { timestamp: 'garbage' }); + const result = bucketizeActivity([e], NOW); + expect(result.every((b) => b.count === 0)).toBe(true); + }); + + it('distributes events across buckets and computes correct ratios', () => { + const events = [ + // Bucket 9 (newest 30s): 3 events + mkEvent('MemoryCreated', { timestamp: NOW - 5_000 }), + mkEvent('MemoryCreated', { timestamp: NOW - 10_000 }), + mkEvent('MemoryCreated', { timestamp: NOW - 15_000 }), + // Bucket 8: 1 event (31s - 60s ago) + mkEvent('MemoryCreated', { timestamp: NOW - 35_000 }), + // Bucket 0 (oldest): 1 event (270s - 300s ago) + mkEvent('MemoryCreated', { timestamp: NOW - 290_000 }), + ]; + const result = bucketizeActivity(events, NOW); + expect(result[9].count).toBe(3); + expect(result[8].count).toBe(1); + expect(result[0].count).toBe(1); + expect(result[9].ratio).toBe(1); + expect(result[8].ratio).toBeCloseTo(1 / 3, 5); + expect(result[0].ratio).toBeCloseTo(1 / 3, 5); + }); + + it('handles events with numeric ms timestamp', () => { + const e = { type: 'MemoryCreated', data: { timestamp: NOW - 10_000 } }; + const result = bucketizeActivity([e], NOW); + expect(result[9].count).toBe(1); + }); + + it('works with a mixed real-world feed (200 events, some stale)', () => { + const events: EventLike[] = []; + for (let i = 0; i < 200; i++) { + const offset = i * 3_000; // one every 3s, oldest first + events.unshift(mkEvent('MemoryCreated', { timestamp: NOW - offset })); + } + // add 10 Heartbeats mid-stream + for (let i = 0; i < 10; i++) { + events.push(mkEvent('Heartbeat', { timestamp: NOW - i * 1_000 })); + } + const result = bucketizeActivity(events, NOW); + // 101 events fit in the [now-300s, now] window: offsets 0, 3s, 6s, …, 300s. + // Heartbeats excluded. Sum should be exactly 101. + const total = result.reduce((s, b) => s + b.count, 0); + expect(total).toBe(101); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// findRecentDream +// ───────────────────────────────────────────────────────────────────────── +describe('findRecentDream', () => { + it('returns null on empty feed', () => { + expect(findRecentDream([], NOW)).toBeNull(); + }); + + it('returns null when no DreamCompleted in feed', () => { + const feed = [ + mkEvent('MemoryCreated', { timestamp: NOW - 1000 }), + mkEvent('DreamStarted', { timestamp: NOW - 500 }), + ]; + expect(findRecentDream(feed, NOW)).toBeNull(); + }); + + it('returns the newest DreamCompleted within 24h', () => { + const fresh = mkEvent('DreamCompleted', { + timestamp: NOW - 60_000, + insights_generated: 7, + }); + const stale = mkEvent('DreamCompleted', { + timestamp: NOW - 2 * 24 * 60 * 60 * 1000, + }); + // Feed is newest-first + const result = findRecentDream([fresh, stale], NOW); + expect(result).toBe(fresh); + }); + + it('returns null when only DreamCompleted is older than 24h', () => { + const stale = mkEvent('DreamCompleted', { + timestamp: NOW - 25 * 60 * 60 * 1000, + }); + expect(findRecentDream([stale], NOW)).toBeNull(); + }); + + it('exactly 24h ago still counts (inclusive)', () => { + const edge = mkEvent('DreamCompleted', { + timestamp: NOW - 24 * 60 * 60 * 1000, + }); + expect(findRecentDream([edge], NOW)).toBe(edge); + }); + + it('stops at first DreamCompleted in newest-first feed', () => { + const newest = mkEvent('DreamCompleted', { timestamp: NOW - 1_000 }); + const older = mkEvent('DreamCompleted', { timestamp: NOW - 60_000 }); + expect(findRecentDream([newest, older], NOW)).toBe(newest); + }); + + it('falls back to nowMs for unparseable timestamps (treated as recent)', () => { + const e = mkEvent('DreamCompleted', { timestamp: 'bad' }); + expect(findRecentDream([e], NOW)).toBe(e); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// dreamInsightsCount +// ───────────────────────────────────────────────────────────────────────── +describe('dreamInsightsCount', () => { + it('returns null for null input', () => { + expect(dreamInsightsCount(null)).toBeNull(); + }); + + it('returns null when missing', () => { + expect(dreamInsightsCount(mkEvent('DreamCompleted', {}))).toBeNull(); + }); + + it('reads insights_generated (snake_case)', () => { + expect( + dreamInsightsCount(mkEvent('DreamCompleted', { insights_generated: 5 })), + ).toBe(5); + }); + + it('reads insightsGenerated (camelCase)', () => { + expect( + dreamInsightsCount(mkEvent('DreamCompleted', { insightsGenerated: 3 })), + ).toBe(3); + }); + + it('prefers snake_case when both present', () => { + expect( + dreamInsightsCount( + mkEvent('DreamCompleted', { insights_generated: 7, insightsGenerated: 99 }), + ), + ).toBe(7); + }); + + it('returns null for non-numeric value', () => { + expect( + dreamInsightsCount(mkEvent('DreamCompleted', { insights_generated: 'seven' as unknown as number })), + ).toBeNull(); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// isDreaming +// ───────────────────────────────────────────────────────────────────────── +describe('isDreaming', () => { + it('returns false for empty feed', () => { + expect(isDreaming([], NOW)).toBe(false); + }); + + it('returns false when no DreamStarted in feed', () => { + expect(isDreaming([mkEvent('MemoryCreated', { timestamp: NOW })], NOW)).toBe(false); + }); + + it('returns true for DreamStarted in last 5 min with no DreamCompleted', () => { + const feed = [mkEvent('DreamStarted', { timestamp: NOW - 60_000 })]; + expect(isDreaming(feed, NOW)).toBe(true); + }); + + it('returns false for DreamStarted older than 5 min with no DreamCompleted', () => { + const feed = [mkEvent('DreamStarted', { timestamp: NOW - 6 * 60 * 1000 })]; + expect(isDreaming(feed, NOW)).toBe(false); + }); + + it('returns false when DreamCompleted newer than DreamStarted', () => { + // Feed is newest-first: completed, then started + const feed = [ + mkEvent('DreamCompleted', { timestamp: NOW - 30_000 }), + mkEvent('DreamStarted', { timestamp: NOW - 60_000 }), + ]; + expect(isDreaming(feed, NOW)).toBe(false); + }); + + it('returns true when DreamCompleted is OLDER than DreamStarted (new cycle began)', () => { + // Newest-first: started is newer, and there's an older completed from a prior cycle + const feed = [ + mkEvent('DreamStarted', { timestamp: NOW - 30_000 }), + mkEvent('DreamCompleted', { timestamp: NOW - 10 * 60 * 1000 }), + ]; + expect(isDreaming(feed, NOW)).toBe(true); + }); + + it('boundary: DreamStarted exactly 5 min ago → still dreaming (>= check)', () => { + const feed = [mkEvent('DreamStarted', { timestamp: NOW - 5 * 60 * 1000 })]; + expect(isDreaming(feed, NOW)).toBe(true); + }); + + it('only considers FIRST DreamStarted / FIRST DreamCompleted (newest-first semantics)', () => { + const feed = [ + mkEvent('DreamStarted', { timestamp: NOW - 10_000 }), + mkEvent('DreamCompleted', { timestamp: NOW - 20_000 }), // older — prior cycle + mkEvent('DreamStarted', { timestamp: NOW - 30_000 }), // ignored + ]; + expect(isDreaming(feed, NOW)).toBe(true); + }); + + it('unparseable DreamStarted timestamp falls back to nowMs (counts as dreaming)', () => { + const feed = [mkEvent('DreamStarted', { timestamp: 'bad' })]; + expect(isDreaming(feed, NOW)).toBe(true); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// hasRecentSuppression +// ───────────────────────────────────────────────────────────────────────── +describe('hasRecentSuppression', () => { + it('returns false for empty feed', () => { + expect(hasRecentSuppression([], NOW)).toBe(false); + }); + + it('returns false when no MemorySuppressed in feed', () => { + const feed = [ + mkEvent('MemoryCreated', { timestamp: NOW }), + mkEvent('DreamStarted', { timestamp: NOW }), + ]; + expect(hasRecentSuppression(feed, NOW)).toBe(false); + }); + + it('returns true for MemorySuppressed within 10s', () => { + const feed = [mkEvent('MemorySuppressed', { timestamp: NOW - 5_000 })]; + expect(hasRecentSuppression(feed, NOW)).toBe(true); + }); + + it('returns false for MemorySuppressed older than 10s', () => { + const feed = [mkEvent('MemorySuppressed', { timestamp: NOW - 11_000 })]; + expect(hasRecentSuppression(feed, NOW)).toBe(false); + }); + + it('respects custom threshold', () => { + const feed = [mkEvent('MemorySuppressed', { timestamp: NOW - 8_000 })]; + expect(hasRecentSuppression(feed, NOW, 5_000)).toBe(false); + expect(hasRecentSuppression(feed, NOW, 10_000)).toBe(true); + }); + + it('stops at first MemorySuppressed (newest-first short-circuit)', () => { + const feed = [ + mkEvent('MemorySuppressed', { timestamp: NOW - 30_000 }), // first, outside window + mkEvent('MemorySuppressed', { timestamp: NOW - 1_000 }), // inside, but never checked + ]; + expect(hasRecentSuppression(feed, NOW)).toBe(false); + }); + + it('boundary: exactly at threshold counts (>= check)', () => { + const feed = [mkEvent('MemorySuppressed', { timestamp: NOW - 10_000 })]; + expect(hasRecentSuppression(feed, NOW, 10_000)).toBe(true); + }); + + it('unparseable timestamp falls back to nowMs (flash fires)', () => { + const feed = [mkEvent('MemorySuppressed', { timestamp: 'bad' })]; + expect(hasRecentSuppression(feed, NOW)).toBe(true); + }); + + it('ignores non-MemorySuppressed events before finding one', () => { + const feed = [ + mkEvent('MemoryCreated', { timestamp: NOW }), + mkEvent('DreamStarted', { timestamp: NOW }), + mkEvent('MemorySuppressed', { timestamp: NOW - 3_000 }), + ]; + expect(hasRecentSuppression(feed, NOW)).toBe(true); + }); +}); + +// ───────────────────────────────────────────────────────────────────────── +// formatAgo +// ───────────────────────────────────────────────────────────────────────── +describe('formatAgo', () => { + it('formats seconds', () => { + expect(formatAgo(5_000)).toBe('5s ago'); + expect(formatAgo(59_000)).toBe('59s ago'); + expect(formatAgo(0)).toBe('0s ago'); + }); + + it('formats minutes', () => { + expect(formatAgo(60_000)).toBe('1m ago'); + expect(formatAgo(59 * 60_000)).toBe('59m ago'); + }); + + it('formats hours', () => { + expect(formatAgo(60 * 60_000)).toBe('1h ago'); + expect(formatAgo(23 * 60 * 60_000)).toBe('23h ago'); + }); + + it('formats days', () => { + expect(formatAgo(24 * 60 * 60_000)).toBe('1d ago'); + expect(formatAgo(7 * 24 * 60 * 60_000)).toBe('7d ago'); + }); + + it('clamps negative input to 0', () => { + expect(formatAgo(-5_000)).toBe('0s ago'); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/ContradictionArcs.test.ts b/apps/dashboard/src/lib/components/__tests__/ContradictionArcs.test.ts new file mode 100644 index 0000000..5573d4c --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/ContradictionArcs.test.ts @@ -0,0 +1,326 @@ +/** + * Contradiction Constellation — pure-helper coverage. + * + * Runs in the vitest `node` environment (no jsdom). We only test the pure + * helpers extracted to `contradiction-helpers.ts`; the Svelte component is + * covered indirectly because every classification, opacity, radius, and + * color decision it renders routes through these functions. + */ +import { describe, it, expect } from 'vitest'; + +import { + severityColor, + severityLabel, + nodeColor, + nodeRadius, + clampTrust, + pairOpacity, + truncate, + uniqueMemoryCount, + avgTrustDelta, + NODE_COLORS, + KNOWN_NODE_TYPES, + NODE_COLOR_FALLBACK, + NODE_RADIUS_MIN, + NODE_RADIUS_RANGE, + SEVERITY_STRONG_COLOR, + SEVERITY_MODERATE_COLOR, + SEVERITY_MILD_COLOR, + UNFOCUSED_OPACITY, + type ContradictionLike, +} from '../contradiction-helpers'; + +// --------------------------------------------------------------------------- +// severityColor — strict-greater-than thresholds at 0.5 and 0.7. +// --------------------------------------------------------------------------- + +describe('severityColor', () => { + it('returns mild yellow at or below 0.5', () => { + expect(severityColor(0)).toBe(SEVERITY_MILD_COLOR); + expect(severityColor(0.29)).toBe(SEVERITY_MILD_COLOR); + expect(severityColor(0.3)).toBe(SEVERITY_MILD_COLOR); + expect(severityColor(0.5)).toBe(SEVERITY_MILD_COLOR); // boundary → lower band + }); + + it('returns moderate amber strictly above 0.5 and up to 0.7', () => { + expect(severityColor(0.51)).toBe(SEVERITY_MODERATE_COLOR); + expect(severityColor(0.6)).toBe(SEVERITY_MODERATE_COLOR); + expect(severityColor(0.7)).toBe(SEVERITY_MODERATE_COLOR); // boundary → lower band + }); + + it('returns strong red strictly above 0.7', () => { + expect(severityColor(0.71)).toBe(SEVERITY_STRONG_COLOR); + expect(severityColor(0.9)).toBe(SEVERITY_STRONG_COLOR); + expect(severityColor(1.0)).toBe(SEVERITY_STRONG_COLOR); + }); + + it('handles out-of-range numbers without crashing', () => { + expect(severityColor(-1)).toBe(SEVERITY_MILD_COLOR); + expect(severityColor(1.5)).toBe(SEVERITY_STRONG_COLOR); + }); +}); + +// --------------------------------------------------------------------------- +// severityLabel — matches severityColor thresholds. +// --------------------------------------------------------------------------- + +describe('severityLabel', () => { + it('labels mild at 0, 0.29, 0.3, 0.5', () => { + expect(severityLabel(0)).toBe('mild'); + expect(severityLabel(0.29)).toBe('mild'); + expect(severityLabel(0.3)).toBe('mild'); + expect(severityLabel(0.5)).toBe('mild'); + }); + + it('labels moderate at 0.51, 0.7', () => { + expect(severityLabel(0.51)).toBe('moderate'); + expect(severityLabel(0.7)).toBe('moderate'); + }); + + it('labels strong at 0.71, 1.0', () => { + expect(severityLabel(0.71)).toBe('strong'); + expect(severityLabel(1.0)).toBe('strong'); + }); + + it('covers all 8 ordered boundary cases from the audit', () => { + expect(severityLabel(0)).toBe('mild'); + expect(severityLabel(0.29)).toBe('mild'); + expect(severityLabel(0.3)).toBe('mild'); + expect(severityLabel(0.5)).toBe('mild'); + expect(severityLabel(0.51)).toBe('moderate'); + expect(severityLabel(0.7)).toBe('moderate'); + expect(severityLabel(0.71)).toBe('strong'); + expect(severityLabel(1.0)).toBe('strong'); + }); +}); + +// --------------------------------------------------------------------------- +// nodeColor — 8 known types plus fallback. +// --------------------------------------------------------------------------- + +describe('nodeColor', () => { + it('returns distinct colors for each of the 8 known node types', () => { + const colors = KNOWN_NODE_TYPES.map((t) => nodeColor(t)); + expect(colors.length).toBe(8); + expect(new Set(colors).size).toBe(8); // all distinct + }); + + it('matches the canonical palette exactly', () => { + expect(nodeColor('fact')).toBe(NODE_COLORS.fact); + expect(nodeColor('concept')).toBe(NODE_COLORS.concept); + expect(nodeColor('event')).toBe(NODE_COLORS.event); + expect(nodeColor('person')).toBe(NODE_COLORS.person); + expect(nodeColor('place')).toBe(NODE_COLORS.place); + expect(nodeColor('note')).toBe(NODE_COLORS.note); + expect(nodeColor('pattern')).toBe(NODE_COLORS.pattern); + expect(nodeColor('decision')).toBe(NODE_COLORS.decision); + }); + + it('falls back to violet for unknown / missing types', () => { + expect(nodeColor(undefined)).toBe(NODE_COLOR_FALLBACK); + expect(nodeColor(null)).toBe(NODE_COLOR_FALLBACK); + expect(nodeColor('')).toBe(NODE_COLOR_FALLBACK); + expect(nodeColor('bogus')).toBe(NODE_COLOR_FALLBACK); + expect(nodeColor('FACT')).toBe(NODE_COLOR_FALLBACK); // case-sensitive + }); + + it('violet fallback equals 0x8b5cf6', () => { + expect(NODE_COLOR_FALLBACK).toBe('#8b5cf6'); + }); +}); + +// --------------------------------------------------------------------------- +// nodeRadius + clampTrust — trust is defined on [0,1]. +// --------------------------------------------------------------------------- + +describe('nodeRadius', () => { + it('returns the minimum radius at trust=0', () => { + expect(nodeRadius(0)).toBe(NODE_RADIUS_MIN); + }); + + it('returns min + range at trust=1', () => { + expect(nodeRadius(1)).toBe(NODE_RADIUS_MIN + NODE_RADIUS_RANGE); + }); + + it('scales linearly in between', () => { + expect(nodeRadius(0.5)).toBeCloseTo(NODE_RADIUS_MIN + NODE_RADIUS_RANGE * 0.5); + }); + + it('clamps negative trust to 0 (minimum radius)', () => { + expect(nodeRadius(-0.5)).toBe(NODE_RADIUS_MIN); + expect(nodeRadius(-Infinity)).toBe(NODE_RADIUS_MIN); + }); + + it('clamps >1 trust to 1 (maximum radius)', () => { + expect(nodeRadius(2)).toBe(NODE_RADIUS_MIN + NODE_RADIUS_RANGE); + expect(nodeRadius(Infinity)).toBe(NODE_RADIUS_MIN); + // ^ Infinity isn't finite — falls back to min, matching "suppress suspicious data" + }); + + it('treats NaN as minimum (suppress bad data)', () => { + expect(nodeRadius(NaN)).toBe(NODE_RADIUS_MIN); + }); +}); + +describe('clampTrust', () => { + it('returns values inside [0,1] unchanged', () => { + expect(clampTrust(0)).toBe(0); + expect(clampTrust(0.5)).toBe(0.5); + expect(clampTrust(1)).toBe(1); + }); + + it('clamps negatives to 0 and >1 to 1', () => { + expect(clampTrust(-0.3)).toBe(0); + expect(clampTrust(1.3)).toBe(1); + }); + + it('collapses NaN / null / undefined / Infinity to 0', () => { + expect(clampTrust(NaN)).toBe(0); + expect(clampTrust(null)).toBe(0); + expect(clampTrust(undefined)).toBe(0); + expect(clampTrust(Infinity)).toBe(0); + expect(clampTrust(-Infinity)).toBe(0); + }); +}); + +// --------------------------------------------------------------------------- +// pairOpacity — trinary: no focus = 1, focused = 1, unfocused = 0.12. +// --------------------------------------------------------------------------- + +describe('pairOpacity', () => { + it('returns 1 when no pair is focused (null)', () => { + expect(pairOpacity(0, null)).toBe(1); + expect(pairOpacity(5, null)).toBe(1); + }); + + it('returns 1 when no pair is focused (undefined)', () => { + expect(pairOpacity(0, undefined)).toBe(1); + expect(pairOpacity(5, undefined)).toBe(1); + }); + + it('returns 1 for the focused pair', () => { + expect(pairOpacity(3, 3)).toBe(1); + expect(pairOpacity(0, 0)).toBe(1); + }); + + it('returns 0.12 for a non-focused pair when something is focused', () => { + expect(pairOpacity(0, 3)).toBe(UNFOCUSED_OPACITY); + expect(pairOpacity(7, 3)).toBe(UNFOCUSED_OPACITY); + }); + + it('does not explode for a stale focus index that matches nothing', () => { + // A focus index of 999 with only 5 pairs: every visible pair dims to 0.12. + // The missing pair renders nothing (silent no-op is correct). + for (let i = 0; i < 5; i++) { + expect(pairOpacity(i, 999)).toBe(UNFOCUSED_OPACITY); + } + }); +}); + +// --------------------------------------------------------------------------- +// truncate — length boundaries, empties, odd inputs. +// --------------------------------------------------------------------------- + +describe('truncate', () => { + it('returns strings shorter than max unchanged', () => { + expect(truncate('hi', 10)).toBe('hi'); + expect(truncate('abc', 5)).toBe('abc'); + }); + + it('returns empty strings unchanged', () => { + expect(truncate('', 5)).toBe(''); + expect(truncate('', 0)).toBe(''); + }); + + it('returns strings exactly at max unchanged', () => { + expect(truncate('12345', 5)).toBe('12345'); + expect(truncate('abcdef', 6)).toBe('abcdef'); + }); + + it('cuts strings longer than max, appending ellipsis within budget', () => { + expect(truncate('1234567890', 5)).toBe('1234…'); + expect(truncate('hello world', 6)).toBe('hello…'); + }); + + it('uses default max of 60', () => { + const long = 'a'.repeat(100); + const out = truncate(long); + expect(out.length).toBe(60); + expect(out.endsWith('…')).toBe(true); + }); + + it('null / undefined inputs return empty string', () => { + expect(truncate(null)).toBe(''); + expect(truncate(undefined)).toBe(''); + }); + + it('handles max=0 safely', () => { + expect(truncate('any string', 0)).toBe(''); + }); + + it('handles max=1 safely — one-char budget collapses to just the ellipsis', () => { + expect(truncate('abc', 1)).toBe('…'); + }); +}); + +// --------------------------------------------------------------------------- +// uniqueMemoryCount — union of memory_a_id + memory_b_id across pairs. +// --------------------------------------------------------------------------- + +describe('uniqueMemoryCount', () => { + const mkPair = (a: string, b: string): ContradictionLike => ({ + memory_a_id: a, + memory_b_id: b, + }); + + it('returns 0 for empty input', () => { + expect(uniqueMemoryCount([])).toBe(0); + }); + + it('counts both sides of every pair', () => { + expect(uniqueMemoryCount([mkPair('a', 'b')])).toBe(2); + expect(uniqueMemoryCount([mkPair('a', 'b'), mkPair('c', 'd')])).toBe(4); + }); + + it('deduplicates memories that appear in multiple pairs', () => { + // 'a' appears on both sides of two separate pairs. + expect(uniqueMemoryCount([mkPair('a', 'b'), mkPair('a', 'c')])).toBe(3); + expect(uniqueMemoryCount([mkPair('a', 'b'), mkPair('b', 'a')])).toBe(2); + }); + + it('handles a memory conflicting with itself (same id both sides)', () => { + expect(uniqueMemoryCount([mkPair('a', 'a')])).toBe(1); + }); + + it('ignores empty-string ids', () => { + expect(uniqueMemoryCount([mkPair('', '')])).toBe(0); + expect(uniqueMemoryCount([mkPair('a', '')])).toBe(1); + }); +}); + +// --------------------------------------------------------------------------- +// avgTrustDelta — safety against empty inputs. +// --------------------------------------------------------------------------- + +describe('avgTrustDelta', () => { + it('returns 0 on empty input (no NaN)', () => { + expect(avgTrustDelta([])).toBe(0); + }); + + it('computes mean absolute delta', () => { + const pairs = [ + { trust_a: 0.9, trust_b: 0.1 }, // 0.8 + { trust_a: 0.5, trust_b: 0.3 }, // 0.2 + ]; + expect(avgTrustDelta(pairs)).toBeCloseTo(0.5); + }); + + it('takes absolute value (order does not matter)', () => { + expect(avgTrustDelta([{ trust_a: 0.1, trust_b: 0.9 }])).toBeCloseTo(0.8); + expect(avgTrustDelta([{ trust_a: 0.9, trust_b: 0.1 }])).toBeCloseTo(0.8); + }); + + it('returns 0 when both sides are equal', () => { + expect(avgTrustDelta([{ trust_a: 0.5, trust_b: 0.5 }])).toBe(0); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/DreamInsightCard.test.ts b/apps/dashboard/src/lib/components/__tests__/DreamInsightCard.test.ts new file mode 100644 index 0000000..7d02844 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/DreamInsightCard.test.ts @@ -0,0 +1,258 @@ +/** + * Tests for DreamInsightCard helpers. + * + * Pure logic only — the Svelte template is a thin wrapper around these. + * Covers the boundaries of the gold-glow / muted novelty mapping, the + * formatting helpers, and the source-memory link scheme. + */ +import { describe, it, expect } from 'vitest'; + +import { + LOW_NOVELTY_THRESHOLD, + HIGH_NOVELTY_THRESHOLD, + clamp01, + noveltyBand, + formatDurationMs, + formatConfidencePct, + sourceMemoryHref, + firstSourceIds, + extraSourceCount, + shortMemoryId, +} from '../dream-helpers'; + +// --------------------------------------------------------------------------- +// clamp01 +// --------------------------------------------------------------------------- + +describe('clamp01', () => { + it.each<[number | null | undefined, number]>([ + [0, 0], + [1, 1], + [0.5, 0.5], + [-0.1, 0], + [-5, 0], + [1.1, 1], + [100, 1], + [null, 0], + [undefined, 0], + [Number.NaN, 0], + [Number.POSITIVE_INFINITY, 0], + [Number.NEGATIVE_INFINITY, 0], + ])('clamp01(%s) → %s', (input, expected) => { + expect(clamp01(input)).toBe(expected); + }); +}); + +// --------------------------------------------------------------------------- +// noveltyBand — the gold/muted visual classifier +// --------------------------------------------------------------------------- + +describe('noveltyBand — gold-glow / muted classification', () => { + it('has the documented thresholds', () => { + // These constants are contractual — the component's class bindings + // depend on them. If they change, the visual band shifts. + expect(LOW_NOVELTY_THRESHOLD).toBe(0.3); + expect(HIGH_NOVELTY_THRESHOLD).toBe(0.7); + }); + + it('classifies low-novelty (< 0.3) as muted', () => { + expect(noveltyBand(0)).toBe('low'); + expect(noveltyBand(0.1)).toBe('low'); + expect(noveltyBand(0.29)).toBe('low'); + expect(noveltyBand(0.2999)).toBe('low'); + }); + + it('classifies the boundary 0.3 exactly as neutral (NOT low)', () => { + // The component uses `novelty < 0.3`, strictly exclusive. + expect(noveltyBand(0.3)).toBe('neutral'); + }); + + it('classifies mid-range as neutral', () => { + expect(noveltyBand(0.3)).toBe('neutral'); + expect(noveltyBand(0.5)).toBe('neutral'); + expect(noveltyBand(0.7)).toBe('neutral'); + }); + + it('classifies the boundary 0.7 exactly as neutral (NOT high)', () => { + // The component uses `novelty > 0.7`, strictly exclusive. + expect(noveltyBand(0.7)).toBe('neutral'); + }); + + it('classifies high-novelty (> 0.7) as gold/high', () => { + expect(noveltyBand(0.71)).toBe('high'); + expect(noveltyBand(0.7001)).toBe('high'); + expect(noveltyBand(0.9)).toBe('high'); + expect(noveltyBand(1.0)).toBe('high'); + }); + + it('collapses null / undefined / NaN to the low band', () => { + expect(noveltyBand(null)).toBe('low'); + expect(noveltyBand(undefined)).toBe('low'); + expect(noveltyBand(Number.NaN)).toBe('low'); + }); + + it('clamps out-of-range values before classifying', () => { + // 2.0 clamps to 1.0 → high; -1 clamps to 0 → low. + expect(noveltyBand(2.0)).toBe('high'); + expect(noveltyBand(-1)).toBe('low'); + }); +}); + +// --------------------------------------------------------------------------- +// formatDurationMs +// --------------------------------------------------------------------------- + +describe('formatDurationMs', () => { + it('renders sub-second values with "ms" suffix', () => { + expect(formatDurationMs(0)).toBe('0ms'); + expect(formatDurationMs(1)).toBe('1ms'); + expect(formatDurationMs(500)).toBe('500ms'); + expect(formatDurationMs(999)).toBe('999ms'); + }); + + it('renders second-and-above values with "s" suffix, 2 decimals', () => { + expect(formatDurationMs(1000)).toBe('1.00s'); + expect(formatDurationMs(1500)).toBe('1.50s'); + expect(formatDurationMs(15000)).toBe('15.00s'); + expect(formatDurationMs(60000)).toBe('60.00s'); + }); + + it('rounds fractional millisecond values in the "ms" band', () => { + expect(formatDurationMs(0.4)).toBe('0ms'); + expect(formatDurationMs(12.7)).toBe('13ms'); + }); + + it('returns "0ms" for null / undefined / NaN / negative', () => { + expect(formatDurationMs(null)).toBe('0ms'); + expect(formatDurationMs(undefined)).toBe('0ms'); + expect(formatDurationMs(Number.NaN)).toBe('0ms'); + expect(formatDurationMs(-100)).toBe('0ms'); + expect(formatDurationMs(Number.POSITIVE_INFINITY)).toBe('0ms'); + }); +}); + +// --------------------------------------------------------------------------- +// formatConfidencePct +// --------------------------------------------------------------------------- + +describe('formatConfidencePct', () => { + it('renders 0 / 0.5 / 1 as whole-percent strings', () => { + expect(formatConfidencePct(0)).toBe('0%'); + expect(formatConfidencePct(0.5)).toBe('50%'); + expect(formatConfidencePct(1)).toBe('100%'); + }); + + it('rounds intermediate values', () => { + expect(formatConfidencePct(0.123)).toBe('12%'); + expect(formatConfidencePct(0.5049)).toBe('50%'); + expect(formatConfidencePct(0.505)).toBe('51%'); + expect(formatConfidencePct(0.999)).toBe('100%'); + }); + + it('clamps out-of-range input first', () => { + expect(formatConfidencePct(-0.5)).toBe('0%'); + expect(formatConfidencePct(2)).toBe('100%'); + }); + + it('handles null / undefined / NaN', () => { + expect(formatConfidencePct(null)).toBe('0%'); + expect(formatConfidencePct(undefined)).toBe('0%'); + expect(formatConfidencePct(Number.NaN)).toBe('0%'); + }); +}); + +// --------------------------------------------------------------------------- +// sourceMemoryHref +// --------------------------------------------------------------------------- + +describe('sourceMemoryHref — link format', () => { + it('builds the canonical /memories/:id path with no base', () => { + expect(sourceMemoryHref('abc123')).toBe('/memories/abc123'); + }); + + it('prepends the SvelteKit base path when provided', () => { + expect(sourceMemoryHref('abc123', '/dashboard')).toBe( + '/dashboard/memories/abc123', + ); + }); + + it('handles an empty base (default behaviour)', () => { + expect(sourceMemoryHref('abc', '')).toBe('/memories/abc'); + }); + + it('passes through full UUIDs untouched', () => { + const uuid = '550e8400-e29b-41d4-a716-446655440000'; + expect(sourceMemoryHref(uuid)).toBe(`/memories/${uuid}`); + }); +}); + +// --------------------------------------------------------------------------- +// firstSourceIds + extraSourceCount +// --------------------------------------------------------------------------- + +describe('firstSourceIds', () => { + it('returns [] for empty / null / undefined inputs', () => { + expect(firstSourceIds([])).toEqual([]); + expect(firstSourceIds(null)).toEqual([]); + expect(firstSourceIds(undefined)).toEqual([]); + }); + + it('returns the single element when array has one entry', () => { + expect(firstSourceIds(['a'])).toEqual(['a']); + }); + + it('returns the first 2 by default', () => { + expect(firstSourceIds(['a', 'b', 'c', 'd'])).toEqual(['a', 'b']); + }); + + it('honours a custom N', () => { + expect(firstSourceIds(['a', 'b', 'c', 'd'], 3)).toEqual(['a', 'b', 'c']); + expect(firstSourceIds(['a', 'b', 'c'], 5)).toEqual(['a', 'b', 'c']); + }); + + it('returns [] for non-positive N', () => { + expect(firstSourceIds(['a', 'b'], 0)).toEqual([]); + expect(firstSourceIds(['a', 'b'], -1)).toEqual([]); + }); +}); + +describe('extraSourceCount', () => { + it('returns 0 when there are no extras', () => { + expect(extraSourceCount([])).toBe(0); + expect(extraSourceCount(null)).toBe(0); + expect(extraSourceCount(['a'])).toBe(0); + expect(extraSourceCount(['a', 'b'])).toBe(0); + }); + + it('returns sources.length - shown when there are extras', () => { + expect(extraSourceCount(['a', 'b', 'c'])).toBe(1); + expect(extraSourceCount(['a', 'b', 'c', 'd', 'e'])).toBe(3); + }); + + it('honours a custom shown parameter', () => { + expect(extraSourceCount(['a', 'b', 'c', 'd', 'e'], 3)).toBe(2); + expect(extraSourceCount(['a', 'b'], 5)).toBe(0); + }); +}); + +// --------------------------------------------------------------------------- +// shortMemoryId +// --------------------------------------------------------------------------- + +describe('shortMemoryId', () => { + it('returns the full string when 8 chars or fewer', () => { + expect(shortMemoryId('abc')).toBe('abc'); + expect(shortMemoryId('12345678')).toBe('12345678'); + }); + + it('slices to 8 chars when longer', () => { + expect(shortMemoryId('123456789')).toBe('12345678'); + expect(shortMemoryId('550e8400-e29b-41d4-a716-446655440000')).toBe( + '550e8400', + ); + }); + + it('handles empty string defensively', () => { + expect(shortMemoryId('')).toBe(''); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/DreamStageReplay.test.ts b/apps/dashboard/src/lib/components/__tests__/DreamStageReplay.test.ts new file mode 100644 index 0000000..8d18e72 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/DreamStageReplay.test.ts @@ -0,0 +1,104 @@ +/** + * Tests for DreamStageReplay helpers. + * + * The Svelte component itself is rendered with CSS transforms + derived + * state. We can't mount it in Node without jsdom, so we test the PURE + * helpers it relies on — the same helpers also power the page's scrubber + * and the insight card. If `clampStage` is green, the scrubber can't go + * out of range; if `STAGE_NAMES` stays in sync with MemoryDreamer's 5 + * phases, the badge labels stay correct. + */ +import { describe, it, expect } from 'vitest'; + +import { + STAGE_COUNT, + STAGE_NAMES, + clampStage, + stageName, +} from '../dream-helpers'; + +describe('STAGE_NAMES — MemoryDreamer phase list', () => { + it('has exactly 5 stages matching MemoryDreamer.run()', () => { + expect(STAGE_COUNT).toBe(5); + expect(STAGE_NAMES).toHaveLength(5); + }); + + it('lists the phases in the canonical order', () => { + // Order is load-bearing: the stage replay animates in this sequence. + // Replay → Cross-reference → Strengthen → Prune → Transfer. + expect(STAGE_NAMES).toEqual([ + 'Replay', + 'Cross-reference', + 'Strengthen', + 'Prune', + 'Transfer', + ]); + }); +}); + +describe('clampStage — valid-range enforcement', () => { + it.each<[number, number]>([ + // Out-of-bounds low + [0, 1], + [-1, 1], + [-100, 1], + // In-range (exactly the valid stage indices) + [1, 1], + [2, 2], + [3, 3], + [4, 4], + [5, 5], + // Out-of-bounds high + [6, 5], + [7, 5], + [100, 5], + ])('clampStage(%s) → %s', (input, expected) => { + expect(clampStage(input)).toBe(expected); + }); + + it('floors fractional values before clamping', () => { + expect(clampStage(1.9)).toBe(1); + expect(clampStage(4.9)).toBe(4); + expect(clampStage(5.1)).toBe(5); + }); + + it('collapses NaN / Infinity / -Infinity to stage 1', () => { + expect(clampStage(Number.NaN)).toBe(1); + expect(clampStage(Number.POSITIVE_INFINITY)).toBe(1); + expect(clampStage(Number.NEGATIVE_INFINITY)).toBe(1); + }); + + it('returns a value usable as a 0-indexed STAGE_NAMES lookup', () => { + // The page uses `STAGE_NAMES[stageIdx - 1]`. Every clamped value + // must index a real name, not undefined. + for (const raw of [-5, 0, 1, 3, 5, 10, Number.NaN]) { + const idx = clampStage(raw); + expect(STAGE_NAMES[idx - 1]).toBeDefined(); + expect(typeof STAGE_NAMES[idx - 1]).toBe('string'); + } + }); +}); + +describe('stageName — resolves to the visible label', () => { + it('returns the matching name for every valid stage', () => { + expect(stageName(1)).toBe('Replay'); + expect(stageName(2)).toBe('Cross-reference'); + expect(stageName(3)).toBe('Strengthen'); + expect(stageName(4)).toBe('Prune'); + expect(stageName(5)).toBe('Transfer'); + }); + + it('falls back to the nearest valid name for out-of-range input', () => { + expect(stageName(0)).toBe('Replay'); + expect(stageName(-1)).toBe('Replay'); + expect(stageName(6)).toBe('Transfer'); + expect(stageName(100)).toBe('Transfer'); + }); + + it('never returns undefined, even for garbage input', () => { + for (const raw of [Number.NaN, Number.POSITIVE_INFINITY, -Number.MAX_VALUE]) { + expect(stageName(raw)).toBeDefined(); + expect(stageName(raw)).toMatch(/^[A-Z]/); + } + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/DuplicateCluster.test.ts b/apps/dashboard/src/lib/components/__tests__/DuplicateCluster.test.ts new file mode 100644 index 0000000..fac7c77 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/DuplicateCluster.test.ts @@ -0,0 +1,365 @@ +/** + * Pure-logic tests for the Memory Hygiene / Duplicate Detection UI. + * + * The Svelte components themselves are render-level code (no jsdom in this + * repo) — every ounce of behaviour worth testing is extracted into + * `duplicates-helpers.ts` and exercised here. If this file is green, the + * similarity bands, winner selection, suggested-action mapping, threshold + * filtering, cluster-identity keying, and the "safe render" helpers are all + * sound. + */ +import { describe, it, expect } from 'vitest'; + +import { + similarityBand, + similarityBandColor, + similarityBandLabel, + retentionColor, + pickWinner, + suggestedActionFor, + filterByThreshold, + clusterKey, + previewContent, + formatDate, + safeTags, +} from '../duplicates-helpers'; + +// --------------------------------------------------------------------------- +// Similarity band — boundaries at 0.92 (red) and 0.80 (amber). +// The boundary value MUST land in the higher band (>= semantics). +// --------------------------------------------------------------------------- +describe('similarityBand', () => { + it('0.92 exactly → near-identical (boundary)', () => { + expect(similarityBand(0.92)).toBe('near-identical'); + }); + + it('0.91 → strong (just below upper boundary)', () => { + expect(similarityBand(0.91)).toBe('strong'); + }); + + it('0.80 exactly → strong (boundary)', () => { + expect(similarityBand(0.8)).toBe('strong'); + }); + + it('0.79 → weak (just below strong boundary)', () => { + expect(similarityBand(0.79)).toBe('weak'); + }); + + it('0.50 → weak (well below)', () => { + expect(similarityBand(0.5)).toBe('weak'); + }); + + it('1.0 → near-identical', () => { + expect(similarityBand(1.0)).toBe('near-identical'); + }); + + it('0.0 → weak', () => { + expect(similarityBand(0.0)).toBe('weak'); + }); +}); + +describe('similarityBandColor', () => { + it('near-identical → decay var (red)', () => { + expect(similarityBandColor(0.95)).toBe('var(--color-decay)'); + }); + + it('strong → warning var (amber)', () => { + expect(similarityBandColor(0.85)).toBe('var(--color-warning)'); + }); + + it('weak → yellow-300 literal', () => { + expect(similarityBandColor(0.78)).toBe('#fde047'); + }); + + it('is consistent at boundary 0.92', () => { + expect(similarityBandColor(0.92)).toBe('var(--color-decay)'); + }); + + it('is consistent at boundary 0.80', () => { + expect(similarityBandColor(0.8)).toBe('var(--color-warning)'); + }); +}); + +describe('similarityBandLabel', () => { + it('labels near-identical', () => { + expect(similarityBandLabel(0.97)).toBe('Near-identical'); + }); + + it('labels strong', () => { + expect(similarityBandLabel(0.85)).toBe('Strong match'); + }); + + it('labels weak', () => { + expect(similarityBandLabel(0.75)).toBe('Weak match'); + }); +}); + +// --------------------------------------------------------------------------- +// Retention color — traffic-light: >0.7 green, >0.4 amber, else red. +// --------------------------------------------------------------------------- +describe('retentionColor', () => { + it('0.85 → green', () => expect(retentionColor(0.85)).toBe('#10b981')); + it('0.50 → amber', () => expect(retentionColor(0.5)).toBe('#f59e0b')); + it('0.30 → red', () => expect(retentionColor(0.3)).toBe('#ef4444')); + it('boundary 0.70 → amber (strict >)', () => expect(retentionColor(0.7)).toBe('#f59e0b')); + it('boundary 0.40 → red (strict >)', () => expect(retentionColor(0.4)).toBe('#ef4444')); + it('0.0 → red', () => expect(retentionColor(0)).toBe('#ef4444')); +}); + +// --------------------------------------------------------------------------- +// Winner selection — highest retention wins; ties → earliest index; empty +// list → null; NaN retentions never win. +// --------------------------------------------------------------------------- +describe('pickWinner', () => { + it('picks highest retention', () => { + const mem = [ + { id: 'a', retention: 0.3 }, + { id: 'b', retention: 0.9 }, + { id: 'c', retention: 0.5 }, + ]; + expect(pickWinner(mem)?.id).toBe('b'); + }); + + it('tie-break: earliest wins (stable)', () => { + const mem = [ + { id: 'a', retention: 0.8 }, + { id: 'b', retention: 0.8 }, + { id: 'c', retention: 0.7 }, + ]; + expect(pickWinner(mem)?.id).toBe('a'); + }); + + it('three-way tie: earliest wins', () => { + const mem = [ + { id: 'x', retention: 0.5 }, + { id: 'y', retention: 0.5 }, + { id: 'z', retention: 0.5 }, + ]; + expect(pickWinner(mem)?.id).toBe('x'); + }); + + it('all retention = 0: earliest wins (not null)', () => { + const mem = [ + { id: 'a', retention: 0 }, + { id: 'b', retention: 0 }, + ]; + expect(pickWinner(mem)?.id).toBe('a'); + }); + + it('single-member cluster: that member wins', () => { + const mem = [{ id: 'solo', retention: 0.42 }]; + expect(pickWinner(mem)?.id).toBe('solo'); + }); + + it('empty cluster: returns null', () => { + expect(pickWinner([])).toBeNull(); + }); + + it('NaN retention never wins over a real one', () => { + const mem = [ + { id: 'nan', retention: Number.NaN }, + { id: 'real', retention: 0.1 }, + ]; + expect(pickWinner(mem)?.id).toBe('real'); + }); + + it('all NaN retentions: earliest wins (stable fallback)', () => { + const mem = [ + { id: 'a', retention: Number.NaN }, + { id: 'b', retention: Number.NaN }, + ]; + expect(pickWinner(mem)?.id).toBe('a'); + }); +}); + +// --------------------------------------------------------------------------- +// Suggested action — >=0.92 merge, <0.85 review, 0.85..<0.92 null (caller +// honors upstream). +// --------------------------------------------------------------------------- +describe('suggestedActionFor', () => { + it('0.95 → merge', () => expect(suggestedActionFor(0.95)).toBe('merge')); + it('0.92 exactly → merge (boundary)', () => expect(suggestedActionFor(0.92)).toBe('merge')); + it('0.91 → null (ambiguous corridor)', () => expect(suggestedActionFor(0.91)).toBeNull()); + it('0.85 exactly → null (corridor bottom boundary)', () => + expect(suggestedActionFor(0.85)).toBeNull()); + it('0.849 → review (just below corridor)', () => + expect(suggestedActionFor(0.849)).toBe('review')); + it('0.70 → review', () => expect(suggestedActionFor(0.7)).toBe('review')); + it('0.0 → review', () => expect(suggestedActionFor(0)).toBe('review')); + it('1.0 → merge', () => expect(suggestedActionFor(1.0)).toBe('merge')); +}); + +// --------------------------------------------------------------------------- +// Threshold filter — strict >=. +// --------------------------------------------------------------------------- +describe('filterByThreshold', () => { + const clusters = [ + { similarity: 0.96, memories: [{ id: '1', retention: 1 }] }, + { similarity: 0.88, memories: [{ id: '2', retention: 1 }] }, + { similarity: 0.78, memories: [{ id: '3', retention: 1 }] }, + ]; + + it('0.80 keeps 0.96 and 0.88 (drops 0.78)', () => { + const out = filterByThreshold(clusters, 0.8); + expect(out.map((c) => c.similarity)).toEqual([0.96, 0.88]); + }); + + it('boundary: threshold = 0.88 keeps 0.88 (>=)', () => { + const out = filterByThreshold(clusters, 0.88); + expect(out.map((c) => c.similarity)).toEqual([0.96, 0.88]); + }); + + it('boundary: threshold = 0.881 drops 0.88', () => { + const out = filterByThreshold(clusters, 0.881); + expect(out.map((c) => c.similarity)).toEqual([0.96]); + }); + + it('0.95 (max) keeps only 0.96', () => { + const out = filterByThreshold(clusters, 0.95); + expect(out.map((c) => c.similarity)).toEqual([0.96]); + }); + + it('0.70 (min) keeps all three', () => { + const out = filterByThreshold(clusters, 0.7); + expect(out).toHaveLength(3); + }); + + it('empty input → empty output', () => { + expect(filterByThreshold([], 0.8)).toEqual([]); + }); +}); + +// --------------------------------------------------------------------------- +// Cluster identity — stable across order shuffles and re-fetches. +// --------------------------------------------------------------------------- +describe('clusterKey', () => { + it('identical member sets → identical keys (order-independent)', () => { + const a = [ + { id: 'a', retention: 0 }, + { id: 'b', retention: 0 }, + { id: 'c', retention: 0 }, + ]; + const b = [ + { id: 'c', retention: 0 }, + { id: 'a', retention: 0 }, + { id: 'b', retention: 0 }, + ]; + expect(clusterKey(a)).toBe(clusterKey(b)); + }); + + it('differing members → differing keys', () => { + const a = [ + { id: 'a', retention: 0 }, + { id: 'b', retention: 0 }, + ]; + const b = [ + { id: 'a', retention: 0 }, + { id: 'c', retention: 0 }, + ]; + expect(clusterKey(a)).not.toBe(clusterKey(b)); + }); + + it('does not mutate input order', () => { + const mem = [ + { id: 'z', retention: 0 }, + { id: 'a', retention: 0 }, + ]; + clusterKey(mem); + expect(mem.map((m) => m.id)).toEqual(['z', 'a']); + }); + + it('empty cluster → empty string', () => { + expect(clusterKey([])).toBe(''); + }); +}); + +// --------------------------------------------------------------------------- +// previewContent — trim + collapse whitespace + truncate at 80. +// --------------------------------------------------------------------------- +describe('previewContent', () => { + it('short content: unchanged', () => { + expect(previewContent('hello world')).toBe('hello world'); + }); + + it('collapses internal whitespace', () => { + expect(previewContent(' hello world ')).toBe('hello world'); + }); + + it('truncates with ellipsis', () => { + const long = 'a'.repeat(120); + const out = previewContent(long); + expect(out.length).toBe(81); // 80 + ellipsis + expect(out.endsWith('…')).toBe(true); + }); + + it('null-safe', () => { + expect(previewContent(null)).toBe(''); + expect(previewContent(undefined)).toBe(''); + }); + + it('honors custom max', () => { + expect(previewContent('abcdefghij', 5)).toBe('abcde…'); + }); +}); + +// --------------------------------------------------------------------------- +// formatDate — valid ISO → formatted; everything else → empty. +// --------------------------------------------------------------------------- +describe('formatDate', () => { + it('valid ISO → non-empty formatted string', () => { + const out = formatDate('2026-04-14T11:02:00Z'); + expect(out.length).toBeGreaterThan(0); + expect(out).not.toBe('Invalid Date'); + }); + + it('empty string → empty', () => { + expect(formatDate('')).toBe(''); + }); + + it('null → empty', () => { + expect(formatDate(null)).toBe(''); + }); + + it('undefined → empty', () => { + expect(formatDate(undefined)).toBe(''); + }); + + it('garbage string → empty (no "Invalid Date" leak)', () => { + expect(formatDate('not-a-date')).toBe(''); + }); + + it('non-string input → empty (defensive)', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect(formatDate(12345 as any)).toBe(''); + }); +}); + +// --------------------------------------------------------------------------- +// safeTags — tolerant of undefined / non-array / empty. +// --------------------------------------------------------------------------- +describe('safeTags', () => { + it('normal array: slices to limit', () => { + expect(safeTags(['a', 'b', 'c', 'd', 'e'], 3)).toEqual(['a', 'b', 'c']); + }); + + it('undefined → []', () => { + expect(safeTags(undefined)).toEqual([]); + }); + + it('null → []', () => { + expect(safeTags(null)).toEqual([]); + }); + + it('empty array → []', () => { + expect(safeTags([])).toEqual([]); + }); + + it('non-array (defensive) → []', () => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + expect(safeTags('bad' as any)).toEqual([]); + }); + + it('honors default limit = 4', () => { + expect(safeTags(['a', 'b', 'c', 'd', 'e', 'f'])).toEqual(['a', 'b', 'c', 'd']); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/EvidenceCard.test.ts b/apps/dashboard/src/lib/components/__tests__/EvidenceCard.test.ts new file mode 100644 index 0000000..14a184d --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/EvidenceCard.test.ts @@ -0,0 +1,255 @@ +/** + * EvidenceCard — pure-logic coverage. + * + * The component itself mounts Svelte, which vitest cannot do in a node + * environment. Every piece of logic that was reachable via props has been + * extracted to `reasoning-helpers.ts`; this file exhaustively exercises + * those helpers through the same import surface EvidenceCard uses. If + * this file is green, the card's visual output is a 1:1 function of the + * helper output. + */ +import { describe, it, expect } from 'vitest'; + +import { + ROLE_META, + roleMetaFor, + trustColor, + trustPercent, + clampTrust, + nodeTypeColor, + formatDate, + shortenId, + CONFIDENCE_EMERALD, + CONFIDENCE_AMBER, + CONFIDENCE_RED, + DEFAULT_NODE_TYPE_COLOR, + type EvidenceRole, +} from '../reasoning-helpers'; +import { NODE_TYPE_COLORS } from '$types'; + +// ──────────────────────────────────────────────────────────────── +// clampTrust + trustPercent — numeric contract +// ──────────────────────────────────────────────────────────────── + +describe('clampTrust — 0-1 display range', () => { + it.each<[number, number]>([ + [0, 0], + [0.5, 0.5], + [1, 1], + [-0.1, 0], + [-1, 0], + [1.2, 1], + [999, 1], + ])('clamps %f → %f', (input, expected) => { + expect(clampTrust(input)).toBe(expected); + }); + + it('returns 0 for NaN (defensive — avoids NaN% in the UI)', () => { + expect(clampTrust(Number.NaN)).toBe(0); + }); + + it('returns 0 for non-finite inputs (+/-Infinity) — safe default', () => { + // Infinity indicates upstream garbage — degrade to empty bar rather + // than saturate the UI to 100%. + expect(clampTrust(-Infinity)).toBe(0); + expect(clampTrust(Infinity)).toBe(0); + }); + + it('is idempotent (clamp of clamp is the same)', () => { + for (const v of [-0.5, 0, 0.3, 0.75, 1, 2]) { + expect(clampTrust(clampTrust(v))).toBe(clampTrust(v)); + } + }); +}); + +describe('trustPercent — 0-100 rendering', () => { + it.each<[number, number]>([ + [0, 0], + [0.5, 50], + [1, 100], + [-0.1, 0], + [1.2, 100], + ])('converts trust %f → %f%%', (t, expected) => { + expect(trustPercent(t)).toBe(expected); + }); + + it('handles NaN without producing NaN', () => { + expect(trustPercent(Number.NaN)).toBe(0); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// trustColor — band boundaries for the card's trust bar +// ──────────────────────────────────────────────────────────────── + +describe('trustColor — boundary analysis', () => { + it.each<[number, string]>([ + // Emerald band: strictly > 0.75 → > 75% + [1.0, CONFIDENCE_EMERALD], + [0.9, CONFIDENCE_EMERALD], + [0.751, CONFIDENCE_EMERALD], + // Amber band: 0.40 ≤ t ≤ 0.75 + [0.75, CONFIDENCE_AMBER], // boundary — amber at exactly 75% + [0.5, CONFIDENCE_AMBER], + [0.4, CONFIDENCE_AMBER], // boundary — amber at exactly 40% + // Red band: < 0.40 + [0.399, CONFIDENCE_RED], + [0.2, CONFIDENCE_RED], + [0, CONFIDENCE_RED], + ])('trust %f → %s', (t, expected) => { + expect(trustColor(t)).toBe(expected); + }); + + it('clamps negative to red and super-high to emerald (defensive)', () => { + expect(trustColor(-0.5)).toBe(CONFIDENCE_RED); + expect(trustColor(1.5)).toBe(CONFIDENCE_EMERALD); + }); + + it('returns red for NaN (lowest-confidence fallback)', () => { + expect(trustColor(Number.NaN)).toBe(CONFIDENCE_RED); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// Role metadata — label + accent + icon +// ──────────────────────────────────────────────────────────────── + +describe('ROLE_META — completeness and shape', () => { + const roles: EvidenceRole[] = ['primary', 'supporting', 'contradicting', 'superseded']; + + it('defines an entry for every role', () => { + for (const r of roles) { + expect(ROLE_META[r]).toBeDefined(); + } + }); + + it.each(roles)('%s has non-empty label + icon', (r) => { + const meta = ROLE_META[r]; + expect(meta.label.length).toBeGreaterThan(0); + expect(meta.icon.length).toBeGreaterThan(0); + }); + + it('maps to the expected accent tokens used by Tailwind (synapse/recall/decay/muted)', () => { + expect(ROLE_META.primary.accent).toBe('synapse'); + expect(ROLE_META.supporting.accent).toBe('recall'); + expect(ROLE_META.contradicting.accent).toBe('decay'); + expect(ROLE_META.superseded.accent).toBe('muted'); + }); + + it('accents are unique across roles (each role is visually distinct)', () => { + const accents = roles.map((r) => ROLE_META[r].accent); + expect(new Set(accents).size).toBe(4); + }); + + it('icons are unique across roles', () => { + const icons = roles.map((r) => ROLE_META[r].icon); + expect(new Set(icons).size).toBe(4); + }); + + it('labels are human-readable (first letter capital, no accents on the word)', () => { + for (const r of roles) { + const label = ROLE_META[r].label; + expect(label[0]).toBe(label[0].toUpperCase()); + } + }); +}); + +describe('roleMetaFor — lookup with defensive fallback', () => { + it('returns the exact entry for a known role', () => { + expect(roleMetaFor('primary')).toBe(ROLE_META.primary); + expect(roleMetaFor('contradicting')).toBe(ROLE_META.contradicting); + }); + + it('falls back to Supporting when handed an unknown role (deep_reference could add new ones)', () => { + expect(roleMetaFor('unknown-role')).toBe(ROLE_META.supporting); + expect(roleMetaFor('')).toBe(ROLE_META.supporting); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// nodeTypeColor — palette lookup with fallback +// ──────────────────────────────────────────────────────────────── + +describe('nodeTypeColor — palette lookup', () => { + it('returns the fallback colour when nodeType is undefined/null/empty', () => { + expect(nodeTypeColor(undefined)).toBe(DEFAULT_NODE_TYPE_COLOR); + expect(nodeTypeColor(null)).toBe(DEFAULT_NODE_TYPE_COLOR); + expect(nodeTypeColor('')).toBe(DEFAULT_NODE_TYPE_COLOR); + }); + + it('returns the palette entry for every known NODE_TYPE_COLORS key', () => { + for (const [type, colour] of Object.entries(NODE_TYPE_COLORS)) { + expect(nodeTypeColor(type)).toBe(colour); + } + }); + + it('returns the fallback for an unknown nodeType', () => { + expect(nodeTypeColor('quantum-state')).toBe(DEFAULT_NODE_TYPE_COLOR); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// formatDate — invalid-date handling (the real bug fixed here) +// ──────────────────────────────────────────────────────────────── + +describe('formatDate — ISO parsing with graceful degradation', () => { + it('formats a valid ISO date into a locale string', () => { + const out = formatDate('2026-04-20T12:00:00.000Z', 'en-US'); + // Example: "Apr 20, 2026" + expect(out).toMatch(/2026/); + expect(out).toMatch(/Apr/); + }); + + it('returns em-dash for empty / null / undefined', () => { + expect(formatDate('')).toBe('—'); + expect(formatDate(null)).toBe('—'); + expect(formatDate(undefined)).toBe('—'); + expect(formatDate(' ')).toBe('—'); + }); + + it('returns the original string when the input is unparseable (never "Invalid Date")', () => { + // Regression: `new Date('not-a-date').toLocaleDateString()` returned + // the literal text "Invalid Date" — EvidenceCard rendered that. Now + // we surface the raw string so a reviewer can tell it was garbage. + const garbage = 'not-a-date'; + expect(formatDate(garbage)).toBe(garbage); + expect(formatDate(garbage)).not.toBe('Invalid Date'); + }); + + it('handles ISO dates without time component', () => { + const out = formatDate('2026-01-15', 'en-US'); + expect(out).toMatch(/2026/); + }); + + it('is pure — no global mutation between calls', () => { + const a = formatDate('2026-04-20T00:00:00.000Z', 'en-US'); + const b = formatDate('2026-04-20T00:00:00.000Z', 'en-US'); + expect(a).toBe(b); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// shortenId — UUID → #abcdef01 +// ──────────────────────────────────────────────────────────────── + +describe('shortenId — 8-char display prefix', () => { + it('returns an 8-char prefix for a standard UUID', () => { + expect(shortenId('a1b2c3d4-e5f6-0000-0000-000000000000')).toBe('a1b2c3d4'); + }); + + it('returns the full string when already ≤ 8 chars', () => { + expect(shortenId('abc')).toBe('abc'); + expect(shortenId('12345678')).toBe('12345678'); + }); + + it('handles null/undefined/empty gracefully', () => { + expect(shortenId(null)).toBe(''); + expect(shortenId(undefined)).toBe(''); + expect(shortenId('')).toBe(''); + }); + + it('respects a custom length parameter', () => { + expect(shortenId('abcdefghij', 4)).toBe('abcd'); + expect(shortenId('abcdefghij', 10)).toBe('abcdefghij'); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/FSRSCalendar.test.ts b/apps/dashboard/src/lib/components/__tests__/FSRSCalendar.test.ts new file mode 100644 index 0000000..0b61494 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/FSRSCalendar.test.ts @@ -0,0 +1,311 @@ +/** + * Tests for schedule / FSRS calendar helpers. These are the pure-logic core + * of the `schedule` page + `FSRSCalendar.svelte` component — the Svelte + * runtime is not exercised here (vitest runs `environment: node`, no jsdom). + */ +import { describe, it, expect } from 'vitest'; +import type { Memory } from '$types'; +import { + MS_DAY, + startOfDay, + daysBetween, + isoDate, + classifyUrgency, + daysUntilReview, + weekBucketRange, + avgRetention, + gridCellPosition, + gridStartForAnchor, + computeScheduleStats, +} from '../schedule-helpers'; + +function makeMemory(overrides: Partial = {}): Memory { + return { + id: 'm-' + Math.random().toString(36).slice(2, 8), + content: 'test memory', + nodeType: 'fact', + tags: [], + retentionStrength: 0.7, + storageStrength: 0.5, + retrievalStrength: 0.8, + createdAt: '2026-01-01T00:00:00Z', + updatedAt: '2026-01-01T00:00:00Z', + ...overrides, + }; +} + +// Fixed anchor: 2026-04-20 12:00 local so offsets don't straddle midnight +// in the default test runner's tz. All relative timestamps are derived from +// this anchor to keep tests tz-independent. +function anchor(): Date { + const d = new Date(2026, 3, 20, 12, 0, 0, 0); // Mon Apr 20 2026 12:00 local + return d; +} + +function offsetDays(base: Date, days: number, hour = 12): Date { + const d = new Date(base); + d.setDate(d.getDate() + days); + d.setHours(hour, 0, 0, 0); + return d; +} + +describe('startOfDay', () => { + it('zeros hours / minutes / seconds / ms', () => { + const d = new Date(2026, 3, 20, 14, 35, 27, 999); + const s = startOfDay(d); + expect(s.getHours()).toBe(0); + expect(s.getMinutes()).toBe(0); + expect(s.getSeconds()).toBe(0); + expect(s.getMilliseconds()).toBe(0); + expect(s.getFullYear()).toBe(2026); + expect(s.getMonth()).toBe(3); + expect(s.getDate()).toBe(20); + }); + + it('does not mutate its input', () => { + const input = new Date(2026, 3, 20, 14, 35); + const before = input.getTime(); + startOfDay(input); + expect(input.getTime()).toBe(before); + }); + + it('accepts an ISO string', () => { + const s = startOfDay('2026-04-20T14:35:00'); + expect(s.getHours()).toBe(0); + }); +}); + +describe('daysBetween', () => { + it('returns 0 for the same calendar day at different hours', () => { + const a = new Date(2026, 3, 20, 0, 0); + const b = new Date(2026, 3, 20, 23, 59); + expect(daysBetween(a, b)).toBe(0); + expect(daysBetween(b, a)).toBe(0); + }); + + it('returns positive for future, negative for past', () => { + const today = anchor(); + expect(daysBetween(offsetDays(today, 3), today)).toBe(3); + expect(daysBetween(offsetDays(today, -3), today)).toBe(-3); + }); + + it('is day-granular across the midnight boundary', () => { + const midnight = new Date(2026, 3, 20, 0, 0, 0, 0); + const justBefore = new Date(2026, 3, 19, 23, 59, 59, 999); + expect(daysBetween(midnight, justBefore)).toBe(1); + }); +}); + +describe('isoDate', () => { + it('formats as YYYY-MM-DD with zero-padding in LOCAL time', () => { + expect(isoDate(new Date(2026, 0, 5))).toBe('2026-01-05'); // jan 5 + expect(isoDate(new Date(2026, 11, 31))).toBe('2026-12-31'); + }); + + it('uses local day even for late-evening UTC-crossing timestamps', () => { + // This is the whole reason isoDate uses get* not getUTC*: calendar cells + // should match the user's perceived day. + const d = new Date(2026, 3, 20, 23, 30); // apr 20 23:30 local + expect(isoDate(d)).toBe('2026-04-20'); + }); +}); + +describe('classifyUrgency', () => { + const now = anchor(); + + it('returns "none" for missing nextReviewAt', () => { + expect(classifyUrgency(now, null)).toBe('none'); + expect(classifyUrgency(now, undefined)).toBe('none'); + expect(classifyUrgency(now, '')).toBe('none'); + }); + + it('returns "none" for unparseable ISO strings', () => { + expect(classifyUrgency(now, 'not-a-date')).toBe('none'); + }); + + it('classifies overdue when due date is strictly before today', () => { + expect(classifyUrgency(now, offsetDays(now, -1).toISOString())).toBe('overdue'); + expect(classifyUrgency(now, offsetDays(now, -5).toISOString())).toBe('overdue'); + }); + + it('classifies today when due date is the same calendar day', () => { + // Same day, earlier hour — still today, NOT overdue (day-granular). + const earlier = new Date(now); + earlier.setHours(3, 0); + expect(classifyUrgency(now, earlier.toISOString())).toBe('today'); + const later = new Date(now); + later.setHours(22, 0); + expect(classifyUrgency(now, later.toISOString())).toBe('today'); + }); + + it('classifies 1..=7 days out as "week"', () => { + expect(classifyUrgency(now, offsetDays(now, 1).toISOString())).toBe('week'); + expect(classifyUrgency(now, offsetDays(now, 7).toISOString())).toBe('week'); + }); + + it('classifies 8+ days out as "future"', () => { + expect(classifyUrgency(now, offsetDays(now, 8).toISOString())).toBe('future'); + expect(classifyUrgency(now, offsetDays(now, 30).toISOString())).toBe('future'); + }); + + it('boundary at midnight: 1 second after midnight tomorrow is "week" not "today"', () => { + const tomorrowMidnight = startOfDay(offsetDays(now, 1, 0)); + tomorrowMidnight.setSeconds(1); + expect(classifyUrgency(now, tomorrowMidnight.toISOString())).toBe('week'); + }); +}); + +describe('daysUntilReview', () => { + const now = anchor(); + + it('returns null for missing / invalid input', () => { + expect(daysUntilReview(now, null)).toBeNull(); + expect(daysUntilReview(now, undefined)).toBeNull(); + expect(daysUntilReview(now, 'garbage')).toBeNull(); + }); + + it('returns 0 for today', () => { + expect(daysUntilReview(now, now.toISOString())).toBe(0); + }); + + it('returns signed integer days', () => { + expect(daysUntilReview(now, offsetDays(now, 5).toISOString())).toBe(5); + expect(daysUntilReview(now, offsetDays(now, -3).toISOString())).toBe(-3); + }); +}); + +describe('weekBucketRange', () => { + it('returns Sunday→Sunday exclusive for any weekday', () => { + // Apr 20 2026 is a Monday. The week starts on Sunday Apr 19. + const mon = new Date(2026, 3, 20, 14, 0); + const { start, end } = weekBucketRange(mon); + expect(start.getDay()).toBe(0); // Sunday + expect(start.getDate()).toBe(19); + expect(end.getDate()).toBe(26); // next Sunday + expect(end.getTime() - start.getTime()).toBe(7 * MS_DAY); + }); + + it('for Sunday input, returns that same Sunday as start', () => { + const sun = new Date(2026, 3, 19, 10, 0); // Sun Apr 19 2026 + const { start } = weekBucketRange(sun); + expect(start.getDate()).toBe(19); + }); +}); + +describe('avgRetention', () => { + it('returns 0 for empty array (no NaN)', () => { + expect(avgRetention([])).toBe(0); + expect(Number.isNaN(avgRetention([]))).toBe(false); + }); + + it('returns the single value for a length-1 list', () => { + expect(avgRetention([makeMemory({ retentionStrength: 0.42 })])).toBeCloseTo(0.42); + }); + + it('returns the mean for a mixed list', () => { + const ms = [ + makeMemory({ retentionStrength: 0.2 }), + makeMemory({ retentionStrength: 0.8 }), + makeMemory({ retentionStrength: 0.5 }), + ]; + expect(avgRetention(ms)).toBeCloseTo(0.5); + }); + + it('tolerates missing retentionStrength (treat as 0)', () => { + const ms = [ + makeMemory({ retentionStrength: 1.0 }), + makeMemory({ retentionStrength: undefined as unknown as number }), + ]; + expect(avgRetention(ms)).toBeCloseTo(0.5); + }); +}); + +describe('gridCellPosition', () => { + it('maps row-major: index 0 → (0,0), index 7 → (1,0), index 41 → (5,6)', () => { + expect(gridCellPosition(0)).toEqual({ row: 0, col: 0 }); + expect(gridCellPosition(6)).toEqual({ row: 0, col: 6 }); + expect(gridCellPosition(7)).toEqual({ row: 1, col: 0 }); + expect(gridCellPosition(15)).toEqual({ row: 2, col: 1 }); + expect(gridCellPosition(41)).toEqual({ row: 5, col: 6 }); + }); + + it('returns null for out-of-range or non-integer indices', () => { + expect(gridCellPosition(-1)).toBeNull(); + expect(gridCellPosition(42)).toBeNull(); + expect(gridCellPosition(100)).toBeNull(); + expect(gridCellPosition(3.5)).toBeNull(); + }); +}); + +describe('gridStartForAnchor', () => { + it('returns a Sunday at or before anchor-14 days', () => { + // Apr 20 2026 (Mon) → anchor-14 = Apr 6 2026 (Mon) → back to Sun Apr 5. + const start = gridStartForAnchor(anchor()); + expect(start.getDay()).toBe(0); + expect(start.getFullYear()).toBe(2026); + expect(start.getMonth()).toBe(3); + expect(start.getDate()).toBe(5); + expect(start.getHours()).toBe(0); + }); + + it('includes today in the 6-week window (row 2 or 3)', () => { + const today = anchor(); + const start = gridStartForAnchor(today); + const delta = daysBetween(today, start); + expect(delta).toBeGreaterThanOrEqual(14); + expect(delta).toBeLessThan(42); + }); +}); + +describe('computeScheduleStats', () => { + const now = anchor(); + + it('zeros everything for an empty corpus', () => { + const s = computeScheduleStats(now, []); + expect(s).toEqual({ + overdue: 0, + dueToday: 0, + dueThisWeek: 0, + dueThisMonth: 0, + avgDays: 0, + }); + }); + + it('counts each bucket independently (today ⊂ week ⊂ month)', () => { + const ms = [ + makeMemory({ nextReviewAt: offsetDays(now, -2).toISOString() }), // overdue + makeMemory({ nextReviewAt: new Date(now).toISOString() }), // today + makeMemory({ nextReviewAt: offsetDays(now, 3).toISOString() }), // week + makeMemory({ nextReviewAt: offsetDays(now, 15).toISOString() }), // month + makeMemory({ nextReviewAt: offsetDays(now, 45).toISOString() }), // out of month + ]; + const s = computeScheduleStats(now, ms); + expect(s.overdue).toBe(1); + expect(s.dueToday).toBe(2); // overdue + today (delta <= 0) + expect(s.dueThisWeek).toBe(3); // overdue + today + week + expect(s.dueThisMonth).toBe(4); // overdue + today + week + month + }); + + it('skips memories without a nextReviewAt or with unparseable dates', () => { + const ms = [ + makeMemory({ nextReviewAt: undefined }), + makeMemory({ nextReviewAt: 'bogus' }), + makeMemory({ nextReviewAt: offsetDays(now, 2).toISOString() }), + ]; + const s = computeScheduleStats(now, ms); + expect(s.dueThisWeek).toBe(1); + }); + + it('computes average days across future-only memories', () => { + const ms = [ + makeMemory({ nextReviewAt: offsetDays(now, -5).toISOString() }), // excluded (past) + makeMemory({ nextReviewAt: offsetDays(now, 2).toISOString() }), + makeMemory({ nextReviewAt: offsetDays(now, 4).toISOString() }), + ]; + const s = computeScheduleStats(now, ms); + // avgDays is measured from today-at-midnight (not now-mid-day), so a + // review tomorrow at noon is 1.5 days out. Two memories at +2d and +4d + // (both hour=12) → (2.5 + 4.5) / 2 = 3.5. + expect(s.avgDays).toBeCloseTo(3.5, 2); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/ImportanceRadar.test.ts b/apps/dashboard/src/lib/components/__tests__/ImportanceRadar.test.ts new file mode 100644 index 0000000..bbda296 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/ImportanceRadar.test.ts @@ -0,0 +1,417 @@ +/** + * Unit tests for importance-helpers — the pure logic backing + * ImportanceRadar.svelte + importance/+page.svelte. + * + * Runs in the vitest `node` environment (no jsdom). We exercise: + * - Composite channel weighting (matches backend ImportanceSignals) + * - 4-axis radar vertex geometry (Novelty top / Arousal right / Reward + * bottom / Attention left) + * - Value clamping at the helper boundary (defensive against a mis- + * scaled /api/importance response) + * - Size-preset mapping (sm 80 / md 180 / lg 320) + * - Trending-memory importance proxy (retention × log(reviews) / √age) + * including the age=0 division-by-zero edge case. + */ + +import { describe, it, expect } from 'vitest'; +import { + clamp01, + clampChannels, + compositeScore, + CHANNEL_WEIGHTS, + sizePreset, + radarRadius, + radarVertices, + verticesToPath, + importanceProxy, + rankByProxy, + AXIS_ORDER, + SIZE_PX, + type ProxyMemoryLike, +} from '../importance-helpers'; + +// =========================================================================== +// clamp01 +// =========================================================================== + +describe('clamp01', () => { + it('passes in-range values through', () => { + expect(clamp01(0)).toBe(0); + expect(clamp01(0.5)).toBe(0.5); + expect(clamp01(1)).toBe(1); + }); + + it('clamps below zero to 0', () => { + expect(clamp01(-0.3)).toBe(0); + expect(clamp01(-100)).toBe(0); + }); + + it('clamps above one to 1', () => { + expect(clamp01(1.0001)).toBe(1); + expect(clamp01(42)).toBe(1); + }); + + it('folds null / undefined / NaN / Infinity to 0', () => { + expect(clamp01(null)).toBe(0); + expect(clamp01(undefined)).toBe(0); + expect(clamp01(NaN)).toBe(0); + expect(clamp01(Infinity)).toBe(0); + expect(clamp01(-Infinity)).toBe(0); + }); +}); + +describe('clampChannels', () => { + it('clamps every channel independently', () => { + expect(clampChannels({ novelty: 2, arousal: -1, reward: 0.5, attention: NaN })).toEqual({ + novelty: 1, + arousal: 0, + reward: 0.5, + attention: 0, + }); + }); + + it('fills missing channels with 0', () => { + expect(clampChannels({ novelty: 0.8 })).toEqual({ + novelty: 0.8, + arousal: 0, + reward: 0, + attention: 0, + }); + }); + + it('accepts null / undefined as "all zeros"', () => { + expect(clampChannels(null)).toEqual({ novelty: 0, arousal: 0, reward: 0, attention: 0 }); + expect(clampChannels(undefined)).toEqual({ + novelty: 0, + arousal: 0, + reward: 0, + attention: 0, + }); + }); +}); + +// =========================================================================== +// compositeScore — MUST match backend ImportanceSignals weights +// =========================================================================== + +describe('compositeScore', () => { + it('sums channel contributions with the documented weights', () => { + const c = { novelty: 1, arousal: 1, reward: 1, attention: 1 }; + // 0.25 + 0.30 + 0.25 + 0.20 = 1.00 + expect(compositeScore(c)).toBeCloseTo(1.0, 5); + }); + + it('is zero for all-zero channels', () => { + expect(compositeScore({ novelty: 0, arousal: 0, reward: 0, attention: 0 })).toBe(0); + }); + + it('weights match CHANNEL_WEIGHTS exactly (backend contract)', () => { + expect(CHANNEL_WEIGHTS).toEqual({ + novelty: 0.25, + arousal: 0.3, + reward: 0.25, + attention: 0.2, + }); + // Weights sum to 1 — any drift here and the "composite ∈ [0,1]" + // invariant falls over. + const sum = + CHANNEL_WEIGHTS.novelty + + CHANNEL_WEIGHTS.arousal + + CHANNEL_WEIGHTS.reward + + CHANNEL_WEIGHTS.attention; + expect(sum).toBeCloseTo(1.0, 10); + }); + + it('matches the exact weighted formula per channel', () => { + // 0.4·0.25 + 0.6·0.30 + 0.2·0.25 + 0.8·0.20 + // = 0.10 + 0.18 + 0.05 + 0.16 = 0.49 + expect( + compositeScore({ novelty: 0.4, arousal: 0.6, reward: 0.2, attention: 0.8 }), + ).toBeCloseTo(0.49, 5); + }); + + it('clamps inputs before weighting (never escapes [0,1])', () => { + // All over-max → should pin to 1, not to 2. + expect( + compositeScore({ novelty: 2, arousal: 2, reward: 2, attention: 2 }), + ).toBeCloseTo(1.0, 5); + // Negative channels count as 0. + expect( + compositeScore({ novelty: -1, arousal: -1, reward: -1, attention: -1 }), + ).toBe(0); + }); +}); + +// =========================================================================== +// Size preset +// =========================================================================== + +describe('sizePreset', () => { + it('maps the three documented presets', () => { + expect(sizePreset('sm')).toBe(80); + expect(sizePreset('md')).toBe(180); + expect(sizePreset('lg')).toBe(320); + }); + + it('exposes the SIZE_PX mapping for external consumers', () => { + expect(SIZE_PX).toEqual({ sm: 80, md: 180, lg: 320 }); + }); + + it('falls back to md (180) for unknown / missing keys', () => { + expect(sizePreset(undefined)).toBe(180); + expect(sizePreset('' as unknown as 'md')).toBe(180); + expect(sizePreset('xl' as unknown as 'md')).toBe(180); + }); +}); + +// =========================================================================== +// radarRadius — component padding rules +// =========================================================================== + +describe('radarRadius', () => { + it('applies the correct padding per preset', () => { + // sm: 80/2 - 4 = 36 + // md: 180/2 - 28 = 62 + // lg: 320/2 - 44 = 116 + expect(radarRadius('sm')).toBe(36); + expect(radarRadius('md')).toBe(62); + expect(radarRadius('lg')).toBe(116); + }); + + it('never returns a negative radius', () => { + // Can't construct a sub-zero radius via normal presets, but the + // helper floors at 0 defensively. + expect(radarRadius('md')).toBeGreaterThanOrEqual(0); + }); +}); + +// =========================================================================== +// radarVertices — 4 SVG polygon points on the fixed axis order +// =========================================================================== + +describe('radarVertices', () => { + it('emits vertices in Novelty→Arousal→Reward→Attention order', () => { + expect(AXIS_ORDER.map((a) => a.key)).toEqual([ + 'novelty', + 'arousal', + 'reward', + 'attention', + ]); + }); + + it('places a 0-valued channel at the centre', () => { + // Centre for md is (90, 90). novelty=0 means the top vertex sits AT + // the centre — the polygon pinches inward. + const v = radarVertices( + { novelty: 0, arousal: 0, reward: 0, attention: 0 }, + 'md', + ); + expect(v).toHaveLength(4); + for (const p of v) { + expect(p.x).toBeCloseTo(90, 5); + expect(p.y).toBeCloseTo(90, 5); + } + }); + + it('places a 1-valued channel on the correct axis edge', () => { + // Size md: cx=cy=90, r=62. + // Novelty (angle -π/2, top) → (90, 90 - 62) = (90, 28) + // Arousal (angle 0, right) → (90 + 62, 90) = (152, 90) + // Reward (angle π/2, bottom) → (90, 90 + 62) = (90, 152) + // Attention (angle π, left) → (90 - 62, 90) = (28, 90) + const v = radarVertices( + { novelty: 1, arousal: 1, reward: 1, attention: 1 }, + 'md', + ); + expect(v[0].x).toBeCloseTo(90, 5); + expect(v[0].y).toBeCloseTo(28, 5); + + expect(v[1].x).toBeCloseTo(152, 5); + expect(v[1].y).toBeCloseTo(90, 5); + + expect(v[2].x).toBeCloseTo(90, 5); + expect(v[2].y).toBeCloseTo(152, 5); + + expect(v[3].x).toBeCloseTo(28, 5); + expect(v[3].y).toBeCloseTo(90, 5); + }); + + it('scales vertex radial distance linearly with the channel value', () => { + // Arousal at 0.5 should land half-way from centre to the right edge. + const v = radarVertices( + { novelty: 0, arousal: 0.5, reward: 0, attention: 0 }, + 'md', + ); + // radius=62, so right vertex x = 90 + 62*0.5 = 121. + expect(v[1].x).toBeCloseTo(121, 5); + expect(v[1].y).toBeCloseTo(90, 5); + }); + + it('clamps out-of-range inputs rather than exiting the SVG box', () => { + // novelty=2 should pin to the edge (not overshoot to 90 - 124 = -34). + const v = radarVertices( + { novelty: 2, arousal: -0.5, reward: NaN, attention: Infinity }, + 'md', + ); + // Novelty pinned to edge (y=28), arousal/reward/attention at 0 land at centre. + expect(v[0].y).toBeCloseTo(28, 5); + expect(v[1].x).toBeCloseTo(90, 5); // arousal=0 → centre + expect(v[2].y).toBeCloseTo(90, 5); // reward=0 → centre + expect(v[3].x).toBeCloseTo(90, 5); // attention=0 → centre + }); + + it('respects the active size preset', () => { + // At sm (80px), radius=36. Novelty=1 → (40, 40-36) = (40, 4). + const v = radarVertices({ novelty: 1, arousal: 0, reward: 0, attention: 0 }, 'sm'); + expect(v[0].x).toBeCloseTo(40, 5); + expect(v[0].y).toBeCloseTo(4, 5); + }); +}); + +describe('verticesToPath', () => { + it('serialises to an SVG path with M/L commands and Z close', () => { + const path = verticesToPath([ + { x: 10, y: 20 }, + { x: 30, y: 40 }, + { x: 50, y: 60 }, + { x: 70, y: 80 }, + ]); + expect(path).toBe('M10.00,20.00 L30.00,40.00 L50.00,60.00 L70.00,80.00 Z'); + }); + + it('returns an empty string for no points', () => { + expect(verticesToPath([])).toBe(''); + }); +}); + +// =========================================================================== +// importanceProxy — "Top Important Memories This Week" ranking formula +// =========================================================================== + +describe('importanceProxy', () => { + // Anchor everything to a fixed "now" so recency math is deterministic. + const NOW = new Date('2026-04-20T12:00:00Z').getTime(); + + function mem(over: Partial): ProxyMemoryLike { + return { + retentionStrength: 0.5, + reviewCount: 0, + createdAt: new Date(NOW - 2 * 86_400_000).toISOString(), + ...over, + }; + } + + it('is zero for zero retention', () => { + expect(importanceProxy(mem({ retentionStrength: 0 }), NOW)).toBe(0); + }); + + it('treats missing reviewCount as 0 (not a crash)', () => { + const m = mem({ reviewCount: undefined, retentionStrength: 0.8 }); + const v = importanceProxy(m, NOW); + expect(v).toBeGreaterThan(0); + expect(Number.isFinite(v)).toBe(true); + }); + + it('matches the documented formula: retention × log1p(reviews+1) / √age', () => { + // createdAt = 4 days before NOW → ageDays = 4, √4 = 2. + // retention = 0.6, reviews = 3 → log1p(4) ≈ 1.6094 + // expected = 0.6 × 1.6094 / 2 ≈ 0.4828 + const m = mem({ + retentionStrength: 0.6, + reviewCount: 3, + createdAt: new Date(NOW - 4 * 86_400_000).toISOString(), + }); + const v = importanceProxy(m, NOW); + const expected = (0.6 * Math.log1p(4)) / 2; + expect(v).toBeCloseTo(expected, 6); + }); + + it('clamps age to 1 day for a memory created RIGHT NOW (div-by-zero guard)', () => { + // createdAt equals NOW → raw ageDays = 0. Without the clamp, the + // recency boost would divide by zero. We assert the helper returns + // a finite value equal to the "age=1" path. + const zeroAge = importanceProxy( + mem({ + retentionStrength: 0.5, + reviewCount: 0, + createdAt: new Date(NOW).toISOString(), + }), + NOW, + ); + const oneDayAge = importanceProxy( + mem({ + retentionStrength: 0.5, + reviewCount: 0, + createdAt: new Date(NOW - 1 * 86_400_000).toISOString(), + }), + NOW, + ); + expect(Number.isFinite(zeroAge)).toBe(true); + expect(zeroAge).toBeCloseTo(oneDayAge, 10); + }); + + it('also clamps future-dated memories to ageDays=1 rather than going negative', () => { + const future = importanceProxy( + mem({ + retentionStrength: 0.5, + reviewCount: 0, + createdAt: new Date(NOW + 7 * 86_400_000).toISOString(), + }), + NOW, + ); + expect(Number.isFinite(future)).toBe(true); + expect(future).toBeGreaterThan(0); + }); + + it('returns 0 for a malformed createdAt', () => { + const m = { + retentionStrength: 0.8, + reviewCount: 3, + createdAt: 'not-a-date', + }; + expect(importanceProxy(m, NOW)).toBe(0); + }); + + it('returns 0 when retentionStrength is non-finite', () => { + expect(importanceProxy(mem({ retentionStrength: NaN }), NOW)).toBe(0); + expect(importanceProxy(mem({ retentionStrength: Infinity }), NOW)).toBe(0); + }); + + it('ranks recent + high-retention memories ahead of stale ones', () => { + const fresh: ProxyMemoryLike = { + retentionStrength: 0.9, + reviewCount: 5, + createdAt: new Date(NOW - 1 * 86_400_000).toISOString(), + }; + const stale: ProxyMemoryLike = { + retentionStrength: 0.9, + reviewCount: 5, + createdAt: new Date(NOW - 100 * 86_400_000).toISOString(), + }; + expect(importanceProxy(fresh, NOW)).toBeGreaterThan(importanceProxy(stale, NOW)); + }); +}); + +describe('rankByProxy', () => { + const NOW = new Date('2026-04-20T12:00:00Z').getTime(); + + it('sorts descending by the proxy score', () => { + const items: (ProxyMemoryLike & { id: string })[] = [ + { id: 'stale', retentionStrength: 0.9, reviewCount: 5, createdAt: new Date(NOW - 100 * 86_400_000).toISOString() }, + { id: 'fresh', retentionStrength: 0.9, reviewCount: 5, createdAt: new Date(NOW - 1 * 86_400_000).toISOString() }, + { id: 'dead', retentionStrength: 0.0, reviewCount: 0, createdAt: new Date(NOW - 2 * 86_400_000).toISOString() }, + ]; + const ranked = rankByProxy(items, NOW); + expect(ranked.map((r) => r.id)).toEqual(['fresh', 'stale', 'dead']); + }); + + it('does not mutate the input array', () => { + const items: ProxyMemoryLike[] = [ + { retentionStrength: 0.1, reviewCount: 0, createdAt: new Date(NOW - 10 * 86_400_000).toISOString() }, + { retentionStrength: 0.9, reviewCount: 9, createdAt: new Date(NOW - 1 * 86_400_000).toISOString() }, + ]; + const before = items.slice(); + rankByProxy(items, NOW); + expect(items).toEqual(before); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/MemoryAuditTrail.test.ts b/apps/dashboard/src/lib/components/__tests__/MemoryAuditTrail.test.ts new file mode 100644 index 0000000..e105b83 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/MemoryAuditTrail.test.ts @@ -0,0 +1,298 @@ +/** + * MemoryAuditTrail — pure helper coverage. + * + * Runs in vitest's Node environment (no jsdom). Every assertion exercises + * a function in `audit-trail-helpers.ts` with fully deterministic inputs. + */ +import { describe, it, expect } from 'vitest'; + +import { + ALL_ACTIONS, + META, + VISIBLE_LIMIT, + formatRetentionDelta, + generateMockAuditTrail, + hashSeed, + makeRand, + relativeTime, + splitVisible, + type AuditAction, + type AuditEvent +} from '../audit-trail-helpers'; + +// Fixed reference point for all time-based tests. Millisecond precision so +// relative-time maths are exact, not drifting with wallclock time. +const NOW = Date.UTC(2026, 3, 20, 12, 0, 0); // 2026-04-20 12:00:00 UTC + +// --------------------------------------------------------------------------- +// hashSeed + makeRand +// --------------------------------------------------------------------------- +describe('hashSeed', () => { + it('is deterministic', () => { + expect(hashSeed('abc')).toBe(hashSeed('abc')); + expect(hashSeed('memory-42')).toBe(hashSeed('memory-42')); + }); + + it('different ids hash to different seeds', () => { + expect(hashSeed('a')).not.toBe(hashSeed('b')); + expect(hashSeed('memory-1')).not.toBe(hashSeed('memory-2')); + }); + + it('empty string hashes to 0', () => { + expect(hashSeed('')).toBe(0); + }); + + it('returns an unsigned 32-bit integer', () => { + // Stress: a long id should never produce a negative or non-integer seed. + const seed = hashSeed('a'.repeat(256)); + expect(Number.isInteger(seed)).toBe(true); + expect(seed).toBeGreaterThanOrEqual(0); + expect(seed).toBeLessThan(2 ** 32); + }); +}); + +describe('makeRand', () => { + it('is deterministic given the same seed', () => { + const a = makeRand(42); + const b = makeRand(42); + for (let i = 0; i < 20; i++) expect(a()).toBe(b()); + }); + + it('produces values strictly in [0, 1)', () => { + // Seed with UINT32_MAX to force the edge case that exposed the original + // `/ 0xffffffff` bug — the divisor must be 2^32, not 2^32 - 1. + const rand = makeRand(0xffffffff); + for (let i = 0; i < 5000; i++) { + const v = rand(); + expect(v).toBeGreaterThanOrEqual(0); + expect(v).toBeLessThan(1); + } + }); + + it('different seeds produce different sequences', () => { + const a = makeRand(1); + const b = makeRand(2); + expect(a()).not.toBe(b()); + }); +}); + +// --------------------------------------------------------------------------- +// Deterministic generator +// --------------------------------------------------------------------------- +describe('generateMockAuditTrail — determinism', () => { + it('same id + same now always yields the same sequence', () => { + const a = generateMockAuditTrail('memory-xyz', NOW); + const b = generateMockAuditTrail('memory-xyz', NOW); + expect(a).toEqual(b); + }); + + it('different ids yield different sequences', () => { + const a = generateMockAuditTrail('memory-a', NOW); + const b = generateMockAuditTrail('memory-b', NOW); + // Either different lengths or different event-by-event — anything but equal. + expect(a).not.toEqual(b); + }); + + it('empty id yields no events — the panel should never fabricate history', () => { + expect(generateMockAuditTrail('', NOW)).toEqual([]); + }); + + it('count fits the default 8-15 range', () => { + // Sample a handful of ids — the distribution should stay in range. + for (const id of ['a', 'abc', 'memory-1', 'memory-2', 'memory-3', 'x'.repeat(50)]) { + const events = generateMockAuditTrail(id, NOW); + expect(events.length).toBeGreaterThanOrEqual(8); + expect(events.length).toBeLessThanOrEqual(15); + } + }); + + it('first emitted event (newest-first order → last in array) is "created"', () => { + const events = generateMockAuditTrail('deterministic-id', NOW); + expect(events[events.length - 1].action).toBe('created'); + expect(events[events.length - 1].triggered_by).toBe('smart_ingest'); + }); + + it('emits events in newest-first order', () => { + const events = generateMockAuditTrail('order-check', NOW); + for (let i = 1; i < events.length; i++) { + const prev = new Date(events[i - 1].timestamp).getTime(); + const curr = new Date(events[i].timestamp).getTime(); + expect(prev).toBeGreaterThanOrEqual(curr); + } + }); + + it('all timestamps are valid ISO strings in the past relative to NOW', () => { + const events = generateMockAuditTrail('iso-check', NOW); + for (const ev of events) { + const t = new Date(ev.timestamp).getTime(); + expect(Number.isFinite(t)).toBe(true); + expect(t).toBeLessThanOrEqual(NOW); + } + }); + + it('respects countOverride — 16 events crosses the visibility threshold', () => { + const events = generateMockAuditTrail('big', NOW, 16); + expect(events).toHaveLength(16); + }); + + it('retention values never escape [0, 1]', () => { + for (const id of ['x', 'y', 'z', 'memory-big']) { + const events = generateMockAuditTrail(id, NOW, 30); + for (const ev of events) { + if (ev.old_value !== undefined) { + expect(ev.old_value).toBeGreaterThanOrEqual(0); + expect(ev.old_value).toBeLessThanOrEqual(1); + } + if (ev.new_value !== undefined) { + expect(ev.new_value).toBeGreaterThanOrEqual(0); + expect(ev.new_value).toBeLessThanOrEqual(1); + } + } + } + }); +}); + +// --------------------------------------------------------------------------- +// Relative time +// --------------------------------------------------------------------------- +describe('relativeTime — boundary cases', () => { + // Build an ISO timestamp `offsetMs` before NOW. + const ago = (offsetMs: number) => new Date(NOW - offsetMs).toISOString(); + + const cases: Array<[string, number, string]> = [ + ['0s ago', 0, '0s ago'], + ['59s ago', 59 * 1000, '59s ago'], + ['60s flips to 1m', 60 * 1000, '1m ago'], + ['59m ago', 59 * 60 * 1000, '59m ago'], + ['60m flips to 1h', 60 * 60 * 1000, '1h ago'], + ['23h ago', 23 * 3600 * 1000, '23h ago'], + ['24h flips to 1d', 24 * 3600 * 1000, '1d ago'], + ['6d ago', 6 * 86400 * 1000, '6d ago'], + ['7d ago', 7 * 86400 * 1000, '7d ago'], + ['29d ago', 29 * 86400 * 1000, '29d ago'], + ['30d flips to 1mo', 30 * 86400 * 1000, '1mo ago'], + ['365d → 12mo flips to 1y', 365 * 86400 * 1000, '1y ago'] + ]; + + for (const [name, offset, expected] of cases) { + it(name, () => { + expect(relativeTime(ago(offset), NOW)).toBe(expected); + }); + } + + it('future timestamps clamp to "0s ago"', () => { + const future = new Date(NOW + 60_000).toISOString(); + expect(relativeTime(future, NOW)).toBe('0s ago'); + }); +}); + +// --------------------------------------------------------------------------- +// Event type → marker mapping +// --------------------------------------------------------------------------- +describe('META — action to marker mapping', () => { + it('covers all 8 audit actions exactly', () => { + expect(Object.keys(META).sort()).toEqual([...ALL_ACTIONS].sort()); + expect(ALL_ACTIONS).toHaveLength(8); + }); + + it('every action has a distinct marker kind (8 kinds → 8 glyph shapes)', () => { + const kinds = ALL_ACTIONS.map((a) => META[a].kind); + expect(new Set(kinds).size).toBe(8); + }); + + it('every action has a non-empty label and hex color', () => { + for (const action of ALL_ACTIONS) { + const m = META[action]; + expect(m.label.length).toBeGreaterThan(0); + expect(m.color).toMatch(/^#[0-9a-f]{6}$/i); + } + }); +}); + +// --------------------------------------------------------------------------- +// Retention delta formatter +// --------------------------------------------------------------------------- +describe('formatRetentionDelta', () => { + it('returns null when both values are missing', () => { + expect(formatRetentionDelta(undefined, undefined)).toBeNull(); + }); + + it('returns "set X.XX" when only new is defined', () => { + expect(formatRetentionDelta(undefined, 0.5)).toBe('set 0.50'); + // Note: toFixed(2) uses float-to-string half-to-even; assert on values + // that round unambiguously rather than on IEEE-754 tie edges. + expect(formatRetentionDelta(undefined, 0.736)).toBe('set 0.74'); + }); + + it('returns "was X.XX" when only old is defined', () => { + expect(formatRetentionDelta(0.5, undefined)).toBe('was 0.50'); + }); + + it('returns "old → new" when both are defined', () => { + expect(formatRetentionDelta(0.5, 0.7)).toBe('0.50 → 0.70'); + expect(formatRetentionDelta(0.72, 0.85)).toBe('0.72 → 0.85'); + }); + + it('handles descending deltas without changing the arrow', () => { + // Suppression / demotion paths — old > new. + expect(formatRetentionDelta(0.8, 0.6)).toBe('0.80 → 0.60'); + }); + + it('rejects non-finite numbers', () => { + expect(formatRetentionDelta(NaN, 0.5)).toBe('set 0.50'); + expect(formatRetentionDelta(0.5, NaN)).toBe('was 0.50'); + expect(formatRetentionDelta(NaN, NaN)).toBeNull(); + }); +}); + +// --------------------------------------------------------------------------- +// splitVisible — 15-event cap +// --------------------------------------------------------------------------- +describe('splitVisible — collapse threshold', () => { + const makeEvents = (n: number): AuditEvent[] => + Array.from({ length: n }, (_, i) => ({ + action: 'accessed' as AuditAction, + timestamp: new Date(NOW - i * 60_000).toISOString() + })); + + it('VISIBLE_LIMIT is 15', () => { + expect(VISIBLE_LIMIT).toBe(15); + }); + + it('exactly 15 events → no toggle (hiddenCount 0)', () => { + const { visible, hiddenCount } = splitVisible(makeEvents(15), false); + expect(visible).toHaveLength(15); + expect(hiddenCount).toBe(0); + }); + + it('14 events → no toggle', () => { + const { visible, hiddenCount } = splitVisible(makeEvents(14), false); + expect(visible).toHaveLength(14); + expect(hiddenCount).toBe(0); + }); + + it('16 events collapsed → visible 15, hidden 1', () => { + const { visible, hiddenCount } = splitVisible(makeEvents(16), false); + expect(visible).toHaveLength(15); + expect(hiddenCount).toBe(1); + }); + + it('16 events expanded → visible 16, hidden reports overflow count (1)', () => { + const { visible, hiddenCount } = splitVisible(makeEvents(16), true); + expect(visible).toHaveLength(16); + expect(hiddenCount).toBe(1); + }); + + it('0 events → visible empty, hidden 0', () => { + const { visible, hiddenCount } = splitVisible(makeEvents(0), false); + expect(visible).toHaveLength(0); + expect(hiddenCount).toBe(0); + }); + + it('preserves newest-first order when truncating', () => { + const events = makeEvents(20); + const { visible } = splitVisible(events, false); + expect(visible[0]).toBe(events[0]); + expect(visible[14]).toBe(events[14]); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/PatternTransferHeatmap.test.ts b/apps/dashboard/src/lib/components/__tests__/PatternTransferHeatmap.test.ts new file mode 100644 index 0000000..c7b9ccf --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/PatternTransferHeatmap.test.ts @@ -0,0 +1,334 @@ +/** + * Unit tests for patterns-helpers — the pure logic backing + * PatternTransferHeatmap.svelte + patterns/+page.svelte. + * + * Runs in the vitest `node` environment (no jsdom). We never touch Svelte + * component internals here — only the exported helpers in patterns-helpers.ts. + * Component-level integration (click, hover, DOM wiring) is covered by the + * Playwright e2e suite; this file is pure-logic coverage of the contracts. + */ + +import { describe, it, expect } from 'vitest'; +import { + cellIntensity, + filterByCategory, + buildTransferMatrix, + matrixMaxCount, + flattenNonZero, + shortProjectName, + PATTERN_CATEGORIES, + type TransferPatternLike, +} from '../patterns-helpers'; + +// --------------------------------------------------------------------------- +// Test fixtures — mirror the mockFetchCrossProject shape in +// patterns/+page.svelte, but small enough to reason about by hand. +// --------------------------------------------------------------------------- + +const PROJECTS = ['vestige', 'nullgaze', 'injeranet'] as const; + +const PATTERNS: TransferPatternLike[] = [ + { + name: 'Result', + category: 'ErrorHandling', + origin_project: 'vestige', + transferred_to: ['nullgaze', 'injeranet'], + transfer_count: 2, + }, + { + name: 'Axum middleware', + category: 'ErrorHandling', + origin_project: 'nullgaze', + transferred_to: ['vestige'], + transfer_count: 1, + }, + { + name: 'proptest', + category: 'Testing', + origin_project: 'vestige', + transferred_to: ['nullgaze'], + transfer_count: 1, + }, + { + name: 'Self-reuse pattern', + category: 'Architecture', + origin_project: 'vestige', + transferred_to: ['vestige'], // diagonal — self-reuse + transfer_count: 1, + }, +]; + +// =========================================================================== +// cellIntensity — 0..1 opacity normaliser +// =========================================================================== + +describe('cellIntensity', () => { + it('returns 0 for a zero count', () => { + expect(cellIntensity(0, 10)).toBe(0); + }); + + it('returns 1 at max', () => { + expect(cellIntensity(10, 10)).toBe(1); + }); + + it('returns 1 when count exceeds max (defensive clamp)', () => { + expect(cellIntensity(15, 10)).toBe(1); + }); + + it('scales linearly between 0 and max', () => { + expect(cellIntensity(3, 10)).toBeCloseTo(0.3, 5); + expect(cellIntensity(5, 10)).toBeCloseTo(0.5, 5); + expect(cellIntensity(7, 10)).toBeCloseTo(0.7, 5); + }); + + it('returns 0 when max is 0 (div-by-zero guard)', () => { + expect(cellIntensity(5, 0)).toBe(0); + }); + + it('returns 0 for negative counts', () => { + expect(cellIntensity(-1, 10)).toBe(0); + }); + + it('returns 0 for NaN inputs', () => { + expect(cellIntensity(NaN, 10)).toBe(0); + expect(cellIntensity(5, NaN)).toBe(0); + }); + + it('returns 0 for Infinity inputs', () => { + expect(cellIntensity(Infinity, 10)).toBe(0); + expect(cellIntensity(5, Infinity)).toBe(0); + }); +}); + +// =========================================================================== +// filterByCategory — drives both heatmap + sidebar reflow +// =========================================================================== + +describe('filterByCategory', () => { + it("returns every pattern for 'All'", () => { + const out = filterByCategory(PATTERNS, 'All'); + expect(out).toHaveLength(PATTERNS.length); + // Should NOT return the same reference — helpers return a copy so + // callers can mutate freely. + expect(out).not.toBe(PATTERNS); + }); + + it('filters strictly by category equality', () => { + const errorOnly = filterByCategory(PATTERNS, 'ErrorHandling'); + expect(errorOnly).toHaveLength(2); + expect(errorOnly.every((p) => p.category === 'ErrorHandling')).toBe(true); + }); + + it('returns exactly one match for Testing', () => { + const testing = filterByCategory(PATTERNS, 'Testing'); + expect(testing).toHaveLength(1); + expect(testing[0].name).toBe('proptest'); + }); + + it('returns an empty array for a category with no patterns', () => { + const perf = filterByCategory(PATTERNS, 'Performance'); + expect(perf).toEqual([]); + }); + + it('returns an empty array for an unknown category string (no silent alias)', () => { + // This is the "unknown category fallback" contract — we do NOT + // quietly fall back to 'All'. An unknown category is a caller bug + // and yields an empty list so the empty-state UI renders. + expect(filterByCategory(PATTERNS, 'NotARealCategory')).toEqual([]); + expect(filterByCategory(PATTERNS, '')).toEqual([]); + }); + + it('accepts an empty input array for any category', () => { + expect(filterByCategory([], 'All')).toEqual([]); + expect(filterByCategory([], 'ErrorHandling')).toEqual([]); + expect(filterByCategory([], 'BogusCategory')).toEqual([]); + }); + + it('exposes all six supported categories', () => { + expect([...PATTERN_CATEGORIES]).toEqual([ + 'ErrorHandling', + 'AsyncConcurrency', + 'Testing', + 'Architecture', + 'Performance', + 'Security', + ]); + }); +}); + +// =========================================================================== +// buildTransferMatrix — directional N×N projects × projects grid +// =========================================================================== + +describe('buildTransferMatrix', () => { + it('constructs an N×N matrix over the projects axis', () => { + const m = buildTransferMatrix(PROJECTS, []); + for (const from of PROJECTS) { + for (const to of PROJECTS) { + expect(m[from][to]).toEqual({ count: 0, topNames: [] }); + } + } + }); + + it('aggregates transfer counts directionally', () => { + const m = buildTransferMatrix(PROJECTS, PATTERNS); + // vestige → nullgaze: Result + proptest = 2 + expect(m.vestige.nullgaze.count).toBe(2); + // vestige → injeranet: Result only = 1 + expect(m.vestige.injeranet.count).toBe(1); + // nullgaze → vestige: Axum middleware = 1 + expect(m.nullgaze.vestige.count).toBe(1); + // injeranet → anywhere: zero (no origin in injeranet in fixtures) + expect(m.injeranet.vestige.count).toBe(0); + expect(m.injeranet.nullgaze.count).toBe(0); + }); + + it('treats (A, B) and (B, A) as distinct directions (asymmetry confirmed)', () => { + // The component's doc-comment says "Rows = origin project · Columns = + // destination project" — the matrix MUST be directional. A copy-paste + // bug that aggregates both directions into the same cell would pass + // the "count" test above but fail this symmetry check. + const m = buildTransferMatrix(PROJECTS, PATTERNS); + expect(m.vestige.nullgaze.count).not.toBe(m.nullgaze.vestige.count); + }); + + it('records self-transfer on the diagonal', () => { + const m = buildTransferMatrix(PROJECTS, PATTERNS); + expect(m.vestige.vestige.count).toBe(1); + expect(m.vestige.vestige.topNames).toEqual(['Self-reuse pattern']); + }); + + it('captures top pattern names per cell, capped at 3', () => { + const manyPatterns: TransferPatternLike[] = Array.from({ length: 5 }, (_, i) => ({ + name: `pattern-${i}`, + category: 'ErrorHandling', + origin_project: 'vestige', + transferred_to: ['nullgaze'], + transfer_count: 1, + })); + const m = buildTransferMatrix(['vestige', 'nullgaze'], manyPatterns); + expect(m.vestige.nullgaze.count).toBe(5); + expect(m.vestige.nullgaze.topNames).toHaveLength(3); + expect(m.vestige.nullgaze.topNames).toEqual(['pattern-0', 'pattern-1', 'pattern-2']); + }); + + it('silently drops patterns whose origin is not in the projects axis', () => { + const orphan: TransferPatternLike = { + name: 'Orphan', + category: 'Security', + origin_project: 'ghost-project', + transferred_to: ['vestige'], + transfer_count: 1, + }; + const m = buildTransferMatrix(PROJECTS, [orphan]); + // Nothing anywhere in the matrix should have ticked up. + const total = matrixMaxCount(PROJECTS, m); + expect(total).toBe(0); + // Matrix structure intact — no ghost key added. + expect((m as Record)['ghost-project']).toBeUndefined(); + }); + + it('silently drops transferred_to entries not in the projects axis', () => { + const strayDest: TransferPatternLike = { + name: 'StrayDest', + category: 'Security', + origin_project: 'vestige', + transferred_to: ['ghost-project', 'nullgaze'], + transfer_count: 2, + }; + const m = buildTransferMatrix(PROJECTS, [strayDest]); + // The known destination counts; the ghost doesn't. + expect(m.vestige.nullgaze.count).toBe(1); + expect((m.vestige as Record)['ghost-project']).toBeUndefined(); + }); + + it('respects a custom top-name cap', () => { + const pats: TransferPatternLike[] = [ + { + name: 'a', + category: 'Testing', + origin_project: 'vestige', + transferred_to: ['nullgaze'], + transfer_count: 1, + }, + { + name: 'b', + category: 'Testing', + origin_project: 'vestige', + transferred_to: ['nullgaze'], + transfer_count: 1, + }, + ]; + const m = buildTransferMatrix(['vestige', 'nullgaze'], pats, 1); + expect(m.vestige.nullgaze.topNames).toEqual(['a']); + }); +}); + +// =========================================================================== +// matrixMaxCount +// =========================================================================== + +describe('matrixMaxCount', () => { + it('returns 0 for an empty matrix (div-by-zero guard prerequisite)', () => { + const m = buildTransferMatrix(PROJECTS, []); + expect(matrixMaxCount(PROJECTS, m)).toBe(0); + }); + + it('returns the hottest cell count across all pairs', () => { + const m = buildTransferMatrix(PROJECTS, PATTERNS); + // vestige→nullgaze has 2; everything else is ≤1 + expect(matrixMaxCount(PROJECTS, m)).toBe(2); + }); + + it('tolerates missing rows without crashing', () => { + const partial: Record> = { + vestige: { vestige: { count: 3, topNames: [] } }, + }; + expect(matrixMaxCount(['vestige', 'absent'], partial)).toBe(3); + }); +}); + +// =========================================================================== +// flattenNonZero — mobile fallback feed +// =========================================================================== + +describe('flattenNonZero', () => { + it('returns only non-zero pairs, sorted by count descending', () => { + const m = buildTransferMatrix(PROJECTS, PATTERNS); + const rows = flattenNonZero(PROJECTS, m); + // Distinct non-zero cells in fixtures: + // vestige→nullgaze = 2 + // vestige→injeranet = 1 + // vestige→vestige = 1 + // nullgaze→vestige = 1 + expect(rows).toHaveLength(4); + expect(rows[0]).toMatchObject({ from: 'vestige', to: 'nullgaze', count: 2 }); + // Later rows all tied at 1 — we only verify the leader. + expect(rows.slice(1).every((r) => r.count === 1)).toBe(true); + }); + + it('returns an empty list when nothing is transferred', () => { + const m = buildTransferMatrix(PROJECTS, []); + expect(flattenNonZero(PROJECTS, m)).toEqual([]); + }); +}); + +// =========================================================================== +// shortProjectName +// =========================================================================== + +describe('shortProjectName', () => { + it('passes short names through unchanged', () => { + expect(shortProjectName('vestige')).toBe('vestige'); + expect(shortProjectName('')).toBe(''); + }); + + it('keeps names at the 12-char boundary', () => { + expect(shortProjectName('123456789012')).toBe('123456789012'); + }); + + it('truncates longer names to 11 chars + ellipsis', () => { + expect(shortProjectName('1234567890123')).toBe('12345678901…'); + expect(shortProjectName('super-long-project-name')).toBe('super-long-…'); + }); +}); diff --git a/apps/dashboard/src/lib/components/__tests__/ReasoningChain.test.ts b/apps/dashboard/src/lib/components/__tests__/ReasoningChain.test.ts new file mode 100644 index 0000000..f3c5307 --- /dev/null +++ b/apps/dashboard/src/lib/components/__tests__/ReasoningChain.test.ts @@ -0,0 +1,193 @@ +/** + * ReasoningChain — pure-logic coverage. + * + * ReasoningChain renders the 8-stage cognitive pipeline. Its rendered output + * is a pure function of a handful of primitive props — confidence colours, + * intent-hint selection, and the stage hint resolver. All of that logic + * lives in `reasoning-helpers.ts` and is exercised here without mounting + * Svelte. + */ +import { describe, it, expect } from 'vitest'; + +import { + confidenceColor, + confidenceLabel, + intentHintFor, + INTENT_HINTS, + CONFIDENCE_EMERALD, + CONFIDENCE_AMBER, + CONFIDENCE_RED, + type IntentKey, +} from '../reasoning-helpers'; + +// ──────────────────────────────────────────────────────────────── +// confidenceColor — the spec-critical boundary table +// ──────────────────────────────────────────────────────────────── + +describe('confidenceColor — band boundaries (>75 emerald, 40-75 amber, <40 red)', () => { + it.each<[number, string]>([ + // Emerald band: strictly greater than 75 + [100, CONFIDENCE_EMERALD], + [99.99, CONFIDENCE_EMERALD], + [80, CONFIDENCE_EMERALD], + [76, CONFIDENCE_EMERALD], + [75.01, CONFIDENCE_EMERALD], + // Amber band: 40 <= c <= 75 + [75, CONFIDENCE_AMBER], // exactly 75 → amber (page spec: `>75` emerald) + [60, CONFIDENCE_AMBER], + [50, CONFIDENCE_AMBER], + [40.01, CONFIDENCE_AMBER], + [40, CONFIDENCE_AMBER], // exactly 40 → amber (page spec: `>=40` amber) + // Red band: strictly less than 40 + [39.99, CONFIDENCE_RED], + [20, CONFIDENCE_RED], + [0.01, CONFIDENCE_RED], + [0, CONFIDENCE_RED], + ])('confidence %f → %s', (c, expected) => { + expect(confidenceColor(c)).toBe(expected); + }); + + it('clamps negative to red (defensive — confidence should never be negative)', () => { + expect(confidenceColor(-10)).toBe(CONFIDENCE_RED); + }); + + it('over-100 stays emerald (defensive — confidence should never exceed 100)', () => { + expect(confidenceColor(150)).toBe(CONFIDENCE_EMERALD); + }); + + it('NaN → red (worst-case band)', () => { + expect(confidenceColor(Number.NaN)).toBe(CONFIDENCE_RED); + }); + + it('is pure — same input yields same output', () => { + for (const c of [0, 39.99, 40, 75, 75.01, 100]) { + expect(confidenceColor(c)).toBe(confidenceColor(c)); + } + }); + + it('never returns an empty string or undefined', () => { + for (const c of [-1, 0, 20, 40, 75, 76, 100, 200, Number.NaN]) { + const colour = confidenceColor(c); + expect(typeof colour).toBe('string'); + expect(colour.length).toBeGreaterThan(0); + } + }); +}); + +describe('confidenceLabel — human text per band', () => { + it.each<[number, string]>([ + [100, 'HIGH CONFIDENCE'], + [76, 'HIGH CONFIDENCE'], + [75.01, 'HIGH CONFIDENCE'], + [75, 'MIXED SIGNAL'], + [60, 'MIXED SIGNAL'], + [40, 'MIXED SIGNAL'], + [39.99, 'LOW CONFIDENCE'], + [0, 'LOW CONFIDENCE'], + ])('confidence %f → %s', (c, expected) => { + expect(confidenceLabel(c)).toBe(expected); + }); + + it('NaN → LOW CONFIDENCE (safe default)', () => { + expect(confidenceLabel(Number.NaN)).toBe('LOW CONFIDENCE'); + }); + + it('agrees with confidenceColor across the spec boundary sweep', () => { + // Sanity: if the label is HIGH, the colour must be emerald, etc. + const cases: Array<[number, string, string]> = [ + [100, 'HIGH CONFIDENCE', CONFIDENCE_EMERALD], + [76, 'HIGH CONFIDENCE', CONFIDENCE_EMERALD], + [75, 'MIXED SIGNAL', CONFIDENCE_AMBER], + [40, 'MIXED SIGNAL', CONFIDENCE_AMBER], + [39.99, 'LOW CONFIDENCE', CONFIDENCE_RED], + [0, 'LOW CONFIDENCE', CONFIDENCE_RED], + ]; + for (const [c, label, colour] of cases) { + expect(confidenceLabel(c)).toBe(label); + expect(confidenceColor(c)).toBe(colour); + } + }); +}); + +// ──────────────────────────────────────────────────────────────── +// Intent classification — visual hint mapping +// ──────────────────────────────────────────────────────────────── + +describe('INTENT_HINTS — one hint per deep_reference intent', () => { + const intents: IntentKey[] = [ + 'FactCheck', + 'Timeline', + 'RootCause', + 'Comparison', + 'Synthesis', + ]; + + it('defines a hint for every intent the backend emits', () => { + for (const i of intents) { + expect(INTENT_HINTS[i]).toBeDefined(); + } + }); + + it.each(intents)('%s hint has label + icon + description', (i) => { + const hint = INTENT_HINTS[i]; + expect(hint.label).toBe(i); // label doubles as canonical id + expect(hint.icon.length).toBeGreaterThan(0); + expect(hint.description.length).toBeGreaterThan(0); + }); + + it('icons are unique across intents (so the eye can distinguish them)', () => { + const icons = intents.map((i) => INTENT_HINTS[i].icon); + expect(new Set(icons).size).toBe(intents.length); + }); + + it('descriptions are distinct across intents', () => { + const descs = intents.map((i) => INTENT_HINTS[i].description); + expect(new Set(descs).size).toBe(intents.length); + }); +}); + +describe('intentHintFor — lookup with safe fallback', () => { + it('returns the exact entry for a known intent', () => { + expect(intentHintFor('FactCheck')).toBe(INTENT_HINTS.FactCheck); + expect(intentHintFor('Timeline')).toBe(INTENT_HINTS.Timeline); + expect(intentHintFor('RootCause')).toBe(INTENT_HINTS.RootCause); + expect(intentHintFor('Comparison')).toBe(INTENT_HINTS.Comparison); + expect(intentHintFor('Synthesis')).toBe(INTENT_HINTS.Synthesis); + }); + + it('falls back to Synthesis for unknown intent (most generic classification)', () => { + expect(intentHintFor('Prediction')).toBe(INTENT_HINTS.Synthesis); + expect(intentHintFor('nonsense')).toBe(INTENT_HINTS.Synthesis); + }); + + it('falls back to Synthesis for null / undefined / empty string', () => { + expect(intentHintFor(null)).toBe(INTENT_HINTS.Synthesis); + expect(intentHintFor(undefined)).toBe(INTENT_HINTS.Synthesis); + expect(intentHintFor('')).toBe(INTENT_HINTS.Synthesis); + }); + + it('is case-sensitive — backend emits Title-case strings and we honour that', () => { + // If case-folding becomes desirable, this test will force the + // change to be explicit rather than accidental. + expect(intentHintFor('factcheck')).toBe(INTENT_HINTS.Synthesis); + expect(intentHintFor('FACTCHECK')).toBe(INTENT_HINTS.Synthesis); + }); +}); + +// ──────────────────────────────────────────────────────────────── +// Stage-count invariant — the component renders exactly 8 stages +// ──────────────────────────────────────────────────────────────── + +describe('Cognitive pipeline shape', () => { + it('confidence colour constants are all distinct hex strings', () => { + const set = new Set([ + CONFIDENCE_EMERALD.toLowerCase(), + CONFIDENCE_AMBER.toLowerCase(), + CONFIDENCE_RED.toLowerCase(), + ]); + expect(set.size).toBe(3); + for (const c of set) { + expect(c).toMatch(/^#[0-9a-f]{6}$/); + } + }); +}); diff --git a/apps/dashboard/src/lib/components/activation-helpers.ts b/apps/dashboard/src/lib/components/activation-helpers.ts new file mode 100644 index 0000000..e330910 --- /dev/null +++ b/apps/dashboard/src/lib/components/activation-helpers.ts @@ -0,0 +1,237 @@ +/** + * activation-helpers — Pure logic for the Spreading Activation Live View. + * + * Extracted from ActivationNetwork.svelte + activation/+page.svelte so the + * decay / geometry / event-filtering rules can be exercised in the Vitest + * `node` environment without jsdom. Every helper in this module is a pure + * function of its inputs; no DOM, no timers, no Svelte runes. + * + * The constants in this module are the single source of truth — the Svelte + * component re-exports / re-uses them rather than hard-coding its own. + * + * References + * ---------- + * - Collins & Loftus 1975 — spreading activation with exponential decay + * - Anderson 1983 (ACT-R) — activation threshold for availability + */ +import { NODE_TYPE_COLORS } from '$types'; +import type { VestigeEvent } from '$types'; + +/** Per-tick multiplicative decay factor (Collins & Loftus 1975). */ +export const DECAY = 0.93; + +/** Activation below this floor is invisible / garbage-collected. */ +export const MIN_VISIBLE = 0.05; + +/** Fallback node colour when NODE_TYPE_COLORS has no entry for the type. */ +export const FALLBACK_COLOR = '#8B95A5'; + +/** Source node colour (synapse-glow). Distinct from any node-type colour. */ +export const SOURCE_COLOR = '#818cf8'; + +/** Radial spacing between concentric rings (px). */ +export const RING_GAP = 140; + +/** Max neighbours that fit on ring 1 before spilling to ring 2. */ +export const RING_1_CAPACITY = 8; + +/** Edge draw stagger — frames of delay per rank inside a ring. */ +export const STAGGER_PER_RANK = 4; + +/** Extra stagger added to ring-2 edges so they light up after ring 1. */ +export const STAGGER_RING_2_BONUS = 12; + +// --------------------------------------------------------------------------- +// Decay math +// --------------------------------------------------------------------------- + +/** + * Apply a single tick of exponential decay. Clamps negative input to 0 so a + * corrupt state never produces a creeping-positive value on the next tick. + */ +export function applyDecay(activation: number): number { + if (!Number.isFinite(activation) || activation <= 0) return 0; + return activation * DECAY; +} + +/** + * Compound decay over N ticks. N < 0 is treated as 0 (no change). + * Equivalent to calling `applyDecay` N times. + */ +export function compoundDecay(activation: number, ticks: number): number { + if (!Number.isFinite(activation) || activation <= 0) return 0; + if (!Number.isFinite(ticks) || ticks <= 0) return activation; + return activation * DECAY ** ticks; +} + +/** True if the node's activation is at or above the visibility floor. */ +export function isVisible(activation: number): boolean { + if (!Number.isFinite(activation)) return false; + return activation >= MIN_VISIBLE; +} + +/** + * How many ticks until `initial` decays below `MIN_VISIBLE`. Useful in tests + * and for sizing animation budgets. Initial <= threshold returns 0. + */ +export function ticksUntilInvisible(initial: number): number { + if (!Number.isFinite(initial) || initial <= MIN_VISIBLE) return 0; + // initial * DECAY^n < MIN_VISIBLE → n > log(MIN_VISIBLE/initial) / log(DECAY) + const n = Math.log(MIN_VISIBLE / initial) / Math.log(DECAY); + return Math.ceil(n); +} + +// --------------------------------------------------------------------------- +// Ring placement — concentric circles around a source +// --------------------------------------------------------------------------- + +export interface Point { + x: number; + y: number; +} + +/** + * Classify a neighbour's 0-indexed rank into a ring number. + * Ranks 0..RING_1_CAPACITY-1 → ring 1; rest → ring 2. + */ +export function computeRing(rank: number): 1 | 2 { + if (!Number.isFinite(rank) || rank < RING_1_CAPACITY) return 1; + return 2; +} + +/** + * Evenly distribute `count` positions on a circle of radius `ring * RING_GAP` + * centred at (cx, cy). `angleOffset` rotates the whole ring so overlapping + * bursts don't perfectly collide. Zero count returns `[]`. + */ +export function ringPositions( + cx: number, + cy: number, + count: number, + ring: number, + angleOffset = 0, +): Point[] { + if (!Number.isFinite(count) || count <= 0) return []; + const radius = RING_GAP * ring; + const positions: Point[] = []; + for (let i = 0; i < count; i++) { + const angle = angleOffset + (i / count) * Math.PI * 2; + positions.push({ + x: cx + Math.cos(angle) * radius, + y: cy + Math.sin(angle) * radius, + }); + } + return positions; +} + +/** + * Given the full neighbour list, produce a flat array of Points — ring 1 + * first, ring 2 after. The resulting length === neighbours.length. + */ +export function layoutNeighbours( + cx: number, + cy: number, + neighbourCount: number, + angleOffset = 0, +): Point[] { + const ring1 = Math.min(neighbourCount, RING_1_CAPACITY); + const ring2 = Math.max(0, neighbourCount - RING_1_CAPACITY); + return [ + ...ringPositions(cx, cy, ring1, 1, angleOffset), + ...ringPositions(cx, cy, ring2, 2, angleOffset), + ]; +} + +// --------------------------------------------------------------------------- +// Initial activation by rank +// --------------------------------------------------------------------------- + +/** + * Seed activation for a neighbour at 0-indexed `rank` given `total`. + * Higher-ranked (earlier) neighbours get stronger initial activation. + * Ring-2 neighbours get a 0.75× ring-factor penalty on top of the rank factor. + * Returns a value in (0, 1]. + */ +export function initialActivation(rank: number, total: number): number { + if (!Number.isFinite(total) || total <= 0) return 0; + if (!Number.isFinite(rank) || rank < 0) return 0; + const rankFactor = 1 - (rank / total) * 0.35; + const ringFactor = computeRing(rank) === 1 ? 1 : 0.75; + return Math.min(1, rankFactor * ringFactor); +} + +// --------------------------------------------------------------------------- +// Edge stagger +// --------------------------------------------------------------------------- + +/** + * Delay (in animation frames) before the edge at rank `i` starts drawing. + * Ring 1 edges light up first, then ring 2 after a bonus delay. + */ +export function edgeStagger(rank: number): number { + if (!Number.isFinite(rank) || rank < 0) return 0; + const r = Math.floor(rank); + const base = r * STAGGER_PER_RANK; + return computeRing(r) === 1 ? base : base + STAGGER_RING_2_BONUS; +} + +// --------------------------------------------------------------------------- +// Color mapping +// --------------------------------------------------------------------------- + +/** + * Colour for a node on the activation canvas. + * - source nodes always use SOURCE_COLOR (synapse-glow) + * - known node types use NODE_TYPE_COLORS + * - unknown node types fall back to FALLBACK_COLOR (soft steel) + */ +export function activationColor( + nodeType: string | null | undefined, + isSource: boolean, +): string { + if (isSource) return SOURCE_COLOR; + if (!nodeType) return FALLBACK_COLOR; + return NODE_TYPE_COLORS[nodeType] ?? FALLBACK_COLOR; +} + +// --------------------------------------------------------------------------- +// Event-feed filtering — "only fire on NEW ActivationSpread events" +// --------------------------------------------------------------------------- + +export interface SpreadPayload { + source_id: string; + target_ids: string[]; +} + +/** + * Extract ActivationSpread payloads from a websocket event feed. The feed + * is prepended (newest at index 0, oldest at the end). Stop as soon as we + * hit the reference of `lastSeen` — events at or past that point were + * already processed by a prior tick. + * + * Returned payloads are in OLDEST-FIRST order so downstream callers can + * fire them in the same narrative order they occurred. + * + * Payloads missing required fields are silently skipped. + */ +export function filterNewSpreadEvents( + feed: readonly VestigeEvent[], + lastSeen: VestigeEvent | null, +): SpreadPayload[] { + if (!feed || feed.length === 0) return []; + const fresh: SpreadPayload[] = []; + for (const ev of feed) { + if (ev === lastSeen) break; + if (ev.type !== 'ActivationSpread') continue; + const data = ev.data as { source_id?: unknown; target_ids?: unknown }; + if (typeof data.source_id !== 'string') continue; + if (!Array.isArray(data.target_ids)) continue; + const targets = data.target_ids.filter( + (t): t is string => typeof t === 'string', + ); + if (targets.length === 0) continue; + fresh.push({ source_id: data.source_id, target_ids: targets }); + } + // Reverse so oldest-first. + return fresh.reverse(); +} diff --git a/apps/dashboard/src/lib/components/audit-trail-helpers.ts b/apps/dashboard/src/lib/components/audit-trail-helpers.ts new file mode 100644 index 0000000..2dbca23 --- /dev/null +++ b/apps/dashboard/src/lib/components/audit-trail-helpers.ts @@ -0,0 +1,293 @@ +/** + * Pure helpers for MemoryAuditTrail. + * + * Extracted for isolated unit testing in a Node (vitest) environment — + * no DOM, no Svelte runtime, no fetch. Every function in this module is + * deterministic given its inputs. + */ + +export type AuditAction = + | 'created' + | 'accessed' + | 'promoted' + | 'demoted' + | 'edited' + | 'suppressed' + | 'dreamed' + | 'reconsolidated'; + +export interface AuditEvent { + action: AuditAction; + timestamp: string; // ISO + old_value?: number; + new_value?: number; + reason?: string; + triggered_by?: string; +} + +export type MarkerKind = + | 'dot' + | 'arrow-up' + | 'arrow-down' + | 'pencil' + | 'x' + | 'star' + | 'circle-arrow' + | 'ring'; + +export interface Meta { + label: string; + color: string; // hex for dot + glow + glyph: string; // optional inline symbol + kind: MarkerKind; +} + +/** + * Event type → visual metadata. Each action maps to a UNIQUE marker `kind` + * so the 8 event types are visually distinguishable without relying on the + * colour palette alone (accessibility). + */ +export const META: Record = { + created: { label: 'Created', color: '#10b981', glyph: '', kind: 'ring' }, + accessed: { label: 'Accessed', color: '#3b82f6', glyph: '', kind: 'dot' }, + promoted: { label: 'Promoted', color: '#10b981', glyph: '', kind: 'arrow-up' }, + demoted: { label: 'Demoted', color: '#f59e0b', glyph: '', kind: 'arrow-down' }, + edited: { label: 'Edited', color: '#facc15', glyph: '', kind: 'pencil' }, + suppressed: { label: 'Suppressed', color: '#a855f7', glyph: '', kind: 'x' }, + dreamed: { label: 'Dreamed', color: '#c084fc', glyph: '', kind: 'star' }, + reconsolidated: { label: 'Reconsolidated', color: '#ec4899', glyph: '', kind: 'circle-arrow' } +}; + +export const VISIBLE_LIMIT = 15; + +/** + * All 8 `AuditAction` values, in the canonical order. Used both by the + * event generator (`actionPool`) and by tests that verify uniqueness of + * the marker mapping. + */ +export const ALL_ACTIONS: readonly AuditAction[] = [ + 'created', + 'accessed', + 'promoted', + 'demoted', + 'edited', + 'suppressed', + 'dreamed', + 'reconsolidated' +] as const; + +/** + * Hash a string id into a 32-bit unsigned seed. Stable across runs. + */ +export function hashSeed(id: string): number { + let seed = 0; + for (let i = 0; i < id.length; i++) seed = (seed * 31 + id.charCodeAt(i)) >>> 0; + return seed; +} + +/** + * Linear congruential PRNG bound to a mutable seed. Returns a function + * that yields floats in `[0, 1)` — critically, NEVER 1.0, so callers + * can safely use `Math.floor(rand() * arr.length)` without off-by-one. + */ +export function makeRand(initialSeed: number): () => number { + let seed = initialSeed >>> 0; + return () => { + seed = (seed * 1664525 + 1013904223) >>> 0; + // Divide by 2^32, not 2^32 - 1 — the latter can yield exactly 1.0 + // when seed is UINT32_MAX, breaking array-index math. + return seed / 0x100000000; + }; +} + +/** + * Deterministic mock audit-trail generator. Same `memoryId` + `nowMs` + * ALWAYS yields the same event sequence (critical for snapshot stability + * and for tests). An empty `memoryId` yields no events — the audit trail + * panel should never invent history for a non-existent memory. + * + * `countOverride` lets tests force a specific number of events (e.g. + * to cross the 15-event visibility threshold, which the default range + * 8-15 cannot do). + */ +export function generateMockAuditTrail( + memoryId: string, + nowMs: number = Date.now(), + countOverride?: number +): AuditEvent[] { + if (!memoryId) return []; + + const rand = makeRand(hashSeed(memoryId)); + const count = countOverride ?? 8 + Math.floor(rand() * 8); // default 8-15 events + if (count <= 0) return []; + + const out: AuditEvent[] = []; + + const createdAt = nowMs - (14 + rand() * 21) * 86_400_000; // 14-35 days ago + out.push({ + action: 'created', + timestamp: new Date(createdAt).toISOString(), + reason: 'smart_ingest · prediction-error gate opened', + triggered_by: 'smart_ingest' + }); + + let t = createdAt; + let retention = 0.5 + rand() * 0.2; + const actionPool: AuditAction[] = [ + 'accessed', + 'accessed', + 'accessed', + 'accessed', + 'promoted', + 'demoted', + 'edited', + 'dreamed', + 'reconsolidated', + 'suppressed' + ]; + + for (let i = 1; i < count; i++) { + t += rand() * 5 * 86_400_000 + 3_600_000; // 1h-5d between events + const action = actionPool[Math.floor(rand() * actionPool.length)]; + const ev: AuditEvent = { action, timestamp: new Date(t).toISOString() }; + + switch (action) { + case 'accessed': { + const old = retention; + retention = Math.min(1, retention + rand() * 0.04 + 0.01); + ev.old_value = old; + ev.new_value = retention; + ev.triggered_by = rand() > 0.5 ? 'search' : 'deep_reference'; + break; + } + case 'promoted': { + const old = retention; + retention = Math.min(1, retention + 0.1); + ev.old_value = old; + ev.new_value = retention; + ev.reason = 'confirmed helpful by user'; + ev.triggered_by = 'memory(action=promote)'; + break; + } + case 'demoted': { + const old = retention; + retention = Math.max(0, retention - 0.15); + ev.old_value = old; + ev.new_value = retention; + ev.reason = 'user flagged as outdated'; + ev.triggered_by = 'memory(action=demote)'; + break; + } + case 'edited': { + ev.reason = 'content refined, FSRS state preserved'; + ev.triggered_by = 'memory(action=edit)'; + break; + } + case 'suppressed': { + const old = retention; + retention = Math.max(0, retention - 0.08); + ev.old_value = old; + ev.new_value = retention; + ev.reason = 'top-down inhibition (Anderson 2025)'; + ev.triggered_by = 'suppress(dashboard)'; + break; + } + case 'dreamed': { + const old = retention; + retention = Math.min(1, retention + 0.05); + ev.old_value = old; + ev.new_value = retention; + ev.reason = 'replayed during dream consolidation'; + ev.triggered_by = 'dream()'; + break; + } + case 'reconsolidated': { + ev.reason = 'edited within 5-min labile window (Nader)'; + ev.triggered_by = 'reconsolidation-manager'; + break; + } + case 'created': + // Created is only emitted once, as the first event. If the pool + // ever yields it again, treat it as a no-op access marker with + // no retention change — defensive, not expected. + ev.triggered_by = 'smart_ingest'; + break; + } + + out.push(ev); + } + + // Newest first for display. + return out.reverse(); +} + +/** + * Humanised relative time. Uses supplied `nowMs` for deterministic tests; + * defaults to `Date.now()` in production. + * + * Boundaries (strictly `<`, so 60s flips to "1m", 60m flips to "1h", etc.): + * <60s → "Ns ago" + * <60m → "Nm ago" + * <24h → "Nh ago" + * <30d → "Nd ago" + * <12mo → "Nmo ago" + * else → "Ny ago" + * + * Future timestamps (nowMs < then) clamp to "0s ago" rather than returning + * a negative string — the audit trail is a past-only view. + */ +export function relativeTime(iso: string, nowMs: number = Date.now()): string { + const then = new Date(iso).getTime(); + const diff = Math.max(0, nowMs - then); + const s = Math.floor(diff / 1000); + if (s < 60) return `${s}s ago`; + const m = Math.floor(s / 60); + if (m < 60) return `${m}m ago`; + const h = Math.floor(m / 60); + if (h < 24) return `${h}h ago`; + const d = Math.floor(h / 24); + if (d < 30) return `${d}d ago`; + const mo = Math.floor(d / 30); + if (mo < 12) return `${mo}mo ago`; + const y = Math.floor(mo / 12); + return `${y}y ago`; +} + +/** + * Retention delta formatter. Behaviour: + * (undef, undef) → null — no retention movement on this event + * (undef, 0.72) → "set 0.72" — initial value, no prior state + * (0.50, undef) → "was 0.50" — retention cleared (rare) + * (0.50, 0.72) → "0.50 → 0.72" + * + * The `retention ` prefix is left to the caller so tests can compare the + * core formatted value precisely. + */ +export function formatRetentionDelta( + oldValue: number | undefined, + newValue: number | undefined +): string | null { + const hasOld = typeof oldValue === 'number' && Number.isFinite(oldValue); + const hasNew = typeof newValue === 'number' && Number.isFinite(newValue); + if (!hasOld && !hasNew) return null; + if (!hasOld && hasNew) return `set ${newValue!.toFixed(2)}`; + if (hasOld && !hasNew) return `was ${oldValue!.toFixed(2)}`; + return `${oldValue!.toFixed(2)} → ${newValue!.toFixed(2)}`; +} + +/** + * Split an event list into (visible, hiddenCount) per the 15-event cap. + * Exactly 15 events → no toggle (hiddenCount = 0). 16+ → toggle. + */ +export function splitVisible( + events: AuditEvent[], + showAll: boolean +): { visible: AuditEvent[]; hiddenCount: number } { + if (showAll || events.length <= VISIBLE_LIMIT) { + return { visible: events, hiddenCount: Math.max(0, events.length - VISIBLE_LIMIT) }; + } + return { + visible: events.slice(0, VISIBLE_LIMIT), + hiddenCount: events.length - VISIBLE_LIMIT + }; +} diff --git a/apps/dashboard/src/lib/components/awareness-helpers.ts b/apps/dashboard/src/lib/components/awareness-helpers.ts new file mode 100644 index 0000000..d60a4a6 --- /dev/null +++ b/apps/dashboard/src/lib/components/awareness-helpers.ts @@ -0,0 +1,192 @@ +/** + * Pure helpers for AmbientAwarenessStrip.svelte. + * + * Extracted so the time-window, event-scan, and timestamp-parsing logic can + * be unit tested in the vitest `node` environment without jsdom, Svelte + * rendering, or fake timers bleeding into runes. + * + * Contracts + * --------- + * - `parseEventTimestamp`: handles (a) numeric ms (>1e12), (b) numeric seconds + * (<=1e12), (c) ISO-8601 string, (d) invalid/absent → null. + * - `bucketizeActivity`: given ms timestamps + `now`, returns 10 counts for a + * 5-min trailing window. Bucket 0 = oldest 30s, bucket 9 = newest 30s. + * Events outside [now-5m, now] are dropped (clock skew). + * - `findRecentDream`: returns the newest-indexed (feed is newest-first) + * DreamCompleted whose parsed timestamp is within 24h, else null. If the + * timestamp is unparseable, `now` is used as the fallback (matches the + * component's behavior). + * - `isDreaming`: a DreamStarted within the last 5 min NOT followed by a + * newer DreamCompleted. Mirrors the component's derived block exactly. + * - `hasRecentSuppression`: any MemorySuppressed event with a parsed + * timestamp within `thresholdMs` of `now`. Feed is assumed newest-first — + * we break as soon as we pass the threshold, matching component behavior. + * + * All helpers are null-safe and treat unparseable timestamps consistently + * (fall back to `now`, matching the on-screen "something just happened" feel). + */ + +export interface EventLike { + type: string; + data?: Record; +} + +/** + * Parse a VestigeEvent timestamp, checking `data.timestamp`, then `data.at`, + * then `data.occurred_at`. Supports ms-since-epoch numbers, seconds-since-epoch + * numbers, and ISO-8601 strings. Returns null for absent / invalid input. + * + * Numeric heuristic: values > 1e12 are treated as ms (2001+), values <= 1e12 + * are treated as seconds. `1e12 ms` ≈ Sept 2001, so any real ms timestamp + * lands safely on the "ms" side. + */ +export function parseEventTimestamp(event: EventLike): number | null { + const d = event.data; + if (!d || typeof d !== 'object') return null; + const raw = + (d.timestamp as string | number | undefined) ?? + (d.at as string | number | undefined) ?? + (d.occurred_at as string | number | undefined); + if (raw === undefined || raw === null) return null; + if (typeof raw === 'number') { + if (!Number.isFinite(raw)) return null; + return raw > 1e12 ? raw : raw * 1000; + } + if (typeof raw !== 'string') return null; + const ms = Date.parse(raw); + return Number.isFinite(ms) ? ms : null; +} + +export const ACTIVITY_BUCKET_COUNT = 10; +export const ACTIVITY_BUCKET_MS = 30_000; +export const ACTIVITY_WINDOW_MS = ACTIVITY_BUCKET_COUNT * ACTIVITY_BUCKET_MS; + +export interface ActivityBucket { + count: number; + ratio: number; +} + +/** + * Bucket event timestamps into 10 × 30s buckets for a 5-min trailing window. + * Events with `type === 'Heartbeat'` are skipped (noise). Events whose + * timestamp is out of window (clock skew / pre-history) are dropped. + * + * Returned `ratio` is `count / max(1, maxBucketCount)` — so a sparkline with + * zero events has all-zero ratios (no division by zero) and a sparkline with + * a single spike peaks at 1.0. + */ +export function bucketizeActivity( + events: EventLike[], + nowMs: number, +): ActivityBucket[] { + const start = nowMs - ACTIVITY_WINDOW_MS; + const counts = new Array(ACTIVITY_BUCKET_COUNT).fill(0); + for (const e of events) { + if (e.type === 'Heartbeat') continue; + const t = parseEventTimestamp(e); + if (t === null || t < start || t > nowMs) continue; + const idx = Math.min( + ACTIVITY_BUCKET_COUNT - 1, + Math.floor((t - start) / ACTIVITY_BUCKET_MS), + ); + counts[idx] += 1; + } + const max = Math.max(1, ...counts); + return counts.map((count) => ({ count, ratio: count / max })); +} + +/** + * Find the most recent DreamCompleted within 24h of `nowMs`. + * Feed is assumed newest-first — we return the FIRST match. + * Unparseable timestamps fall back to `nowMs` (matches component behavior). + */ +export function findRecentDream( + events: EventLike[], + nowMs: number, +): EventLike | null { + const dayAgo = nowMs - 24 * 60 * 60 * 1000; + for (const e of events) { + if (e.type !== 'DreamCompleted') continue; + const t = parseEventTimestamp(e) ?? nowMs; + if (t >= dayAgo) return e; + return null; // newest-first: older ones definitely won't match + } + return null; +} + +/** + * Extract `insights_generated` / `insightsGenerated` from a DreamCompleted + * event payload. Returns null if missing or non-numeric. + */ +export function dreamInsightsCount(event: EventLike | null): number | null { + if (!event || !event.data) return null; + const d = event.data; + const raw = + typeof d.insights_generated === 'number' + ? d.insights_generated + : typeof d.insightsGenerated === 'number' + ? d.insightsGenerated + : null; + return raw !== null && Number.isFinite(raw) ? raw : null; +} + +/** + * A Dream is in flight if the newest DreamStarted is within 5 min of `nowMs` + * AND there is no DreamCompleted with a timestamp >= that DreamStarted. + * + * Feed is assumed newest-first. We scan once, grabbing the first Started and + * first Completed, then compare — matching the component's derived block. + */ +export function isDreaming(events: EventLike[], nowMs: number): boolean { + let started: EventLike | null = null; + let completed: EventLike | null = null; + for (const e of events) { + if (!started && e.type === 'DreamStarted') started = e; + if (!completed && e.type === 'DreamCompleted') completed = e; + if (started && completed) break; + } + if (!started) return false; + const startedAt = parseEventTimestamp(started) ?? nowMs; + const fiveMinAgo = nowMs - 5 * 60 * 1000; + if (startedAt < fiveMinAgo) return false; + if (!completed) return true; + const completedAt = parseEventTimestamp(completed) ?? nowMs; + return completedAt < startedAt; +} + +/** + * Format an "ago" duration compactly. Pure and deterministic. + * 0-59s → "Ns ago", 60-3599s → "Nm ago", <24h → "Nh ago", else "Nd ago". + * Negative input is clamped to 0. + */ +export function formatAgo(ms: number): string { + const clamped = Math.max(0, ms); + const s = Math.floor(clamped / 1000); + if (s < 60) return `${s}s ago`; + const m = Math.floor(s / 60); + if (m < 60) return `${m}m ago`; + const h = Math.floor(m / 60); + if (h < 24) return `${h}h ago`; + return `${Math.floor(h / 24)}d ago`; +} + +/** + * True if any MemorySuppressed event lies within `thresholdMs` of `nowMs`. + * Feed assumed newest-first — break as soon as we encounter one OUTSIDE + * the window (all older ones are definitely older). Unparseable timestamps + * fall back to `nowMs` so the flash fires — matches component behavior. + */ +export function hasRecentSuppression( + events: EventLike[], + nowMs: number, + thresholdMs: number = 10_000, +): boolean { + const cutoff = nowMs - thresholdMs; + for (const e of events) { + if (e.type !== 'MemorySuppressed') continue; + const t = parseEventTimestamp(e) ?? nowMs; + if (t >= cutoff) return true; + return false; // newest-first: older ones definitely won't match + } + return false; +} diff --git a/apps/dashboard/src/lib/components/contradiction-helpers.ts b/apps/dashboard/src/lib/components/contradiction-helpers.ts new file mode 100644 index 0000000..14ab90f --- /dev/null +++ b/apps/dashboard/src/lib/components/contradiction-helpers.ts @@ -0,0 +1,210 @@ +/** + * contradiction-helpers — Pure logic for the Contradiction Constellation UI. + * + * Extracted from ContradictionArcs.svelte + contradictions/+page.svelte so + * the math and classification live in one place and can be tested in the + * vitest `node` environment without jsdom / Svelte harnessing. + * + * Contracts + * --------- + * - Severity thresholds are STRICTLY exclusive: similarity > 0.7 → strong, + * similarity > 0.5 → moderate, else → mild. The boundary values 0.5 and + * 0.7 therefore fall into the LOWER band on purpose (so a similarity of + * exactly 0.7 is 'moderate', not 'strong'). + * - Node type palette has 8 known types; anything else — including + * `undefined`, `null`, empty string, or a typo — falls back to violet + * (#8b5cf6), matching the `concept` fallback tone used elsewhere. + * - Pair opacity is a trinary rule: no focus → 1, focused match → 1, + * focused non-match → 0.12. `null` and `undefined` both mean "no focus". + * - Trust is defined on [0,1]; `nodeRadius` clamps out-of-range values so + * a negative trust can't produce a sub-zero radius and a >1 trust can't + * balloon past the design maximum (14px). + * - `uniqueMemoryCount` unions memory_a_id + memory_b_id across the whole + * pair list; duplicated pairs do not double-count. + */ + +/** Shape used by the constellation. Mirrors ContradictionArcs.Contradiction. */ +export interface ContradictionLike { + memory_a_id: string; + memory_b_id: string; +} + +// --------------------------------------------------------------------------- +// Severity — similarity → colour + label. +// --------------------------------------------------------------------------- + +export type SeverityLabel = 'strong' | 'moderate' | 'mild'; + +/** Strong threshold. Similarity STRICTLY above this is red. */ +export const SEVERITY_STRONG_THRESHOLD = 0.7; +/** Moderate threshold. Similarity STRICTLY above this (and <= 0.7) is amber. */ +export const SEVERITY_MODERATE_THRESHOLD = 0.5; + +export const SEVERITY_STRONG_COLOR = '#ef4444'; +export const SEVERITY_MODERATE_COLOR = '#f59e0b'; +export const SEVERITY_MILD_COLOR = '#fde047'; + +/** + * Severity colour by similarity. Boundaries at 0.5 and 0.7 fall into the + * LOWER band (strictly-greater-than comparison). + * + * sim > 0.7 → '#ef4444' (strong / red) + * sim > 0.5 → '#f59e0b' (moderate / amber) + * otherwise → '#fde047' (mild / yellow) + */ +export function severityColor(sim: number): string { + if (sim > SEVERITY_STRONG_THRESHOLD) return SEVERITY_STRONG_COLOR; + if (sim > SEVERITY_MODERATE_THRESHOLD) return SEVERITY_MODERATE_COLOR; + return SEVERITY_MILD_COLOR; +} + +/** Severity label by similarity. Same thresholds as severityColor. */ +export function severityLabel(sim: number): SeverityLabel { + if (sim > SEVERITY_STRONG_THRESHOLD) return 'strong'; + if (sim > SEVERITY_MODERATE_THRESHOLD) return 'moderate'; + return 'mild'; +} + +// --------------------------------------------------------------------------- +// Node type palette. +// --------------------------------------------------------------------------- + +/** Fallback colour used when a memory's node_type is missing or unknown. */ +export const NODE_COLOR_FALLBACK = '#8b5cf6'; + +/** Canonical palette for the 8 known node types. */ +export const NODE_COLORS: Record = { + fact: '#3b82f6', + concept: '#8b5cf6', + event: '#f59e0b', + person: '#10b981', + place: '#06b6d4', + note: '#6b7280', + pattern: '#ec4899', + decision: '#ef4444', +}; + +/** Canonical list of known types (stable order — matches palette object). */ +export const KNOWN_NODE_TYPES = Object.freeze([ + 'fact', + 'concept', + 'event', + 'person', + 'place', + 'note', + 'pattern', + 'decision', +]) as readonly string[]; + +/** + * Map a (possibly undefined) node_type to a colour. Unknown / missing / + * empty / null strings fall back to violet (#8b5cf6). + */ +export function nodeColor(t?: string | null): string { + if (!t) return NODE_COLOR_FALLBACK; + return NODE_COLORS[t] ?? NODE_COLOR_FALLBACK; +} + +// --------------------------------------------------------------------------- +// Trust → node radius. +// --------------------------------------------------------------------------- + +/** Minimum circle radius at trust=0. */ +export const NODE_RADIUS_MIN = 5; +/** Additional radius at trust=1. `r = 5 + trust * 9`, so r ∈ [5, 14]. */ +export const NODE_RADIUS_RANGE = 9; + +/** + * Clamp `trust` to [0,1] before mapping to a radius so a bad FSRS value + * can't produce a sub-zero or oversize node. Non-finite values collapse + * to 0 (smallest radius — visually suppresses suspicious data). + */ +export function nodeRadius(trust: number): number { + if (!Number.isFinite(trust)) return NODE_RADIUS_MIN; + const t = trust < 0 ? 0 : trust > 1 ? 1 : trust; + return NODE_RADIUS_MIN + t * NODE_RADIUS_RANGE; +} + +/** Clamp trust to [0,1]. NaN/Infinity/undefined → 0. */ +export function clampTrust(trust: number | null | undefined): number { + if (trust === null || trust === undefined || !Number.isFinite(trust)) return 0; + if (trust < 0) return 0; + if (trust > 1) return 1; + return trust; +} + +// --------------------------------------------------------------------------- +// Focus / pair opacity. +// --------------------------------------------------------------------------- + +/** Opacity applied to a non-focused pair when any pair is focused. */ +export const UNFOCUSED_OPACITY = 0.12; + +/** + * Opacity for a pair given the current focus state. + * + * focus = null/undefined → 1 (nothing dimmed) + * focus === pairIndex → 1 (the focused pair is fully lit) + * focus !== pairIndex → 0.12 (dimmed) + * + * A focus index that doesn't match any rendered pair simply dims everything. + * That's the intended "silent no-op" for a stale focusedPairIndex. + */ +export function pairOpacity(pairIndex: number, focusedPairIndex: number | null | undefined): number { + if (focusedPairIndex === null || focusedPairIndex === undefined) return 1; + return focusedPairIndex === pairIndex ? 1 : UNFOCUSED_OPACITY; +} + +// --------------------------------------------------------------------------- +// Text truncation. +// --------------------------------------------------------------------------- + +/** + * Truncate a string to `max` characters with an ellipsis at the end. + * Shorter-or-equal strings return unchanged. Empty strings return unchanged. + * Non-string inputs collapse to '' rather than crashing. + * + * The ellipsis counts toward the length budget, so the cut-off content is + * `max - 1` characters, matching the component's inline truncate() helper. + */ +export function truncate(s: string | null | undefined, max = 60): string { + if (s === null || s === undefined) return ''; + if (typeof s !== 'string') return ''; + if (max <= 0) return ''; + if (s.length <= max) return s; + return s.slice(0, max - 1) + '…'; +} + +// --------------------------------------------------------------------------- +// Stats. +// --------------------------------------------------------------------------- + +/** + * Count unique memory IDs across a list of contradiction pairs. Each pair + * contributes memory_a_id and memory_b_id. Duplicates (e.g. one memory that + * appears in multiple conflicts) are counted once. + */ +export function uniqueMemoryCount(pairs: readonly ContradictionLike[]): number { + if (!pairs || pairs.length === 0) return 0; + const set = new Set(); + for (const p of pairs) { + if (p.memory_a_id) set.add(p.memory_a_id); + if (p.memory_b_id) set.add(p.memory_b_id); + } + return set.size; +} + +/** + * Average absolute trust delta across pairs. Returns 0 on empty input so + * the UI can render `0.00` instead of `NaN`. + */ +export function avgTrustDelta( + pairs: readonly { trust_a: number; trust_b: number }[], +): number { + if (!pairs || pairs.length === 0) return 0; + let sum = 0; + for (const p of pairs) { + sum += Math.abs((p.trust_a ?? 0) - (p.trust_b ?? 0)); + } + return sum / pairs.length; +} diff --git a/apps/dashboard/src/lib/components/dream-helpers.ts b/apps/dashboard/src/lib/components/dream-helpers.ts new file mode 100644 index 0000000..b740af5 --- /dev/null +++ b/apps/dashboard/src/lib/components/dream-helpers.ts @@ -0,0 +1,155 @@ +/** + * dream-helpers — Pure logic for Dream Cinema UI. + * + * Extracted so we can test it without jsdom / Svelte component harnessing. + * The Vitest setup for this package runs in a Node environment; every helper + * in this module is a pure function of its inputs, so it can be exercised + * directly in `__tests__/*.test.ts` alongside the graph helpers. + */ + +/** Stage 1..5 of the 5-phase consolidation cycle. */ +export const STAGE_COUNT = 5 as const; + +/** Display names for each stage index (1-indexed). */ +export const STAGE_NAMES = [ + 'Replay', + 'Cross-reference', + 'Strengthen', + 'Prune', + 'Transfer', +] as const; + +export type StageIndex = 1 | 2 | 3 | 4 | 5; + +/** + * Clamp an arbitrary integer to the valid 1..5 stage range. Accepts any + * number (NaN, Infinity, negatives, floats) and always returns an integer + * in [1,5]. NaN and non-finite values fall back to 1 — this matches the + * "start at stage 1" behaviour on a fresh dream. + */ +export function clampStage(n: number): StageIndex { + if (!Number.isFinite(n)) return 1; + const i = Math.floor(n); + if (i < 1) return 1; + if (i > STAGE_COUNT) return STAGE_COUNT; + return i as StageIndex; +} + +/** + * Get the human-readable stage name for a (possibly invalid) stage number. + * Uses `clampStage`, so out-of-range inputs return the nearest valid name. + */ +export function stageName(n: number): string { + return STAGE_NAMES[clampStage(n) - 1]; +} + +// --------------------------------------------------------------------------- +// Novelty classification — drives the gold-glow / muted styling on insight +// cards. Thresholds are STRICTLY exclusive so `0.3` and `0.7` map to the +// neutral band on purpose. See DreamInsightCard.svelte. +// --------------------------------------------------------------------------- + +export type NoveltyBand = 'high' | 'neutral' | 'low'; + +/** Upper bound for the muted "low novelty" band. Values BELOW this are low. */ +export const LOW_NOVELTY_THRESHOLD = 0.3; +/** Lower bound for the gold "high novelty" band. Values ABOVE this are high. */ +export const HIGH_NOVELTY_THRESHOLD = 0.7; + +/** + * Classify a novelty score into one of 3 visual bands. + * + * Thresholds are exclusive on both sides: + * novelty > 0.7 → 'high' (gold glow) + * novelty < 0.3 → 'low' (muted / desaturated) + * otherwise → 'neutral' + * + * `null` / `undefined` / `NaN` collapse to 0 → 'low'. + */ +export function noveltyBand(novelty: number | null | undefined): NoveltyBand { + const n = clamp01(novelty); + if (n > HIGH_NOVELTY_THRESHOLD) return 'high'; + if (n < LOW_NOVELTY_THRESHOLD) return 'low'; + return 'neutral'; +} + +/** Clamp a value into [0,1]. `null`/`undefined`/`NaN` → 0. */ +export function clamp01(n: number | null | undefined): number { + if (n === null || n === undefined || !Number.isFinite(n)) return 0; + if (n < 0) return 0; + if (n > 1) return 1; + return n; +} + +// --------------------------------------------------------------------------- +// Formatting helpers — mirror what the page + card render. Keeping these +// pure lets us test the exact output strings without rendering Svelte. +// --------------------------------------------------------------------------- + +/** + * Format a millisecond duration as a human-readable string. + * < 1000ms → "{n}ms" (e.g. "0ms", "500ms") + * ≥ 1000ms → "{n.nn}s" (e.g. "1.50s", "15.00s") + * Negative / NaN values collapse to "0ms". + */ +export function formatDurationMs(ms: number | null | undefined): string { + if (ms === null || ms === undefined || !Number.isFinite(ms) || ms < 0) { + return '0ms'; + } + if (ms < 1000) return `${Math.round(ms)}ms`; + return `${(ms / 1000).toFixed(2)}s`; +} + +/** + * Format a 0..1 confidence as a whole-percent string ("0%", "50%", "100%"). + * Values outside [0,1] clamp first. Uses `Math.round` so 0.505 → "51%". + */ +export function formatConfidencePct(confidence: number | null | undefined): string { + const c = clamp01(confidence); + return `${Math.round(c * 100)}%`; +} + +// --------------------------------------------------------------------------- +// Source memory link formatting. +// --------------------------------------------------------------------------- + +/** + * Build the href for a source memory link. We keep this behind a helper so + * the route format is tested in one place. `base` corresponds to SvelteKit's + * `$app/paths` base (may be ""). Invalid IDs still produce a URL — route + * handling is the page's responsibility, not ours. + */ +export function sourceMemoryHref(id: string, base = ''): string { + return `${base}/memories/${id}`; +} + +/** + * Return the first N source memory IDs from an insight's `sourceMemories` + * array, safely handling null / undefined / empty. Default N = 2, matching + * the card's "first 2 links" behaviour. + */ +export function firstSourceIds( + sources: readonly string[] | null | undefined, + n = 2, +): string[] { + if (!sources || sources.length === 0) return []; + return sources.slice(0, Math.max(0, n)); +} + +/** Count of sources beyond the first N. Used for the "(+N)" suffix. */ +export function extraSourceCount( + sources: readonly string[] | null | undefined, + shown = 2, +): number { + if (!sources) return 0; + return Math.max(0, sources.length - shown); +} + +/** + * Truncate a memory UUID for display on the chip. Matches the previous + * inline `shortId` logic: first 8 chars, or the whole string if shorter. + */ +export function shortMemoryId(id: string): string { + if (!id) return ''; + return id.length > 8 ? id.slice(0, 8) : id; +} diff --git a/apps/dashboard/src/lib/components/duplicates-helpers.ts b/apps/dashboard/src/lib/components/duplicates-helpers.ts new file mode 100644 index 0000000..3bbe0ed --- /dev/null +++ b/apps/dashboard/src/lib/components/duplicates-helpers.ts @@ -0,0 +1,149 @@ +/** + * Pure helpers for the Memory Hygiene / Duplicate Detection UI. + * + * Extracted from DuplicateCluster.svelte + duplicates/+page.svelte so the + * logic can be unit tested in the vitest `node` environment without jsdom. + * + * Contracts + * --------- + * - `similarityBand`: fixed thresholds at 0.92 (near-identical) and 0.80 + * (strong). Boundary values MATCH the higher band (>= semantics). + * - `pickWinner`: highest retention wins. Ties broken by earliest index + * (stable). Returns `null` on empty input — callers must guard. + * - `suggestedActionFor`: >= 0.92 → 'merge', < 0.85 → 'review'. The 0.85..0.92 + * corridor follows the upstream `suggestedAction` field from the MCP tool, + * so we only override the obvious cases. Default for the corridor is + * whatever the caller already had — this function returns null to signal + * "caller decides." + * - `filterByThreshold`: strict `>=` against the provided similarity. + * - `clusterKey`: stable identity across re-fetches — sorted member ids + * joined. Survives threshold changes that keep the same cluster members. + */ + +export type SimilarityBand = 'near-identical' | 'strong' | 'weak'; +export type SuggestedAction = 'merge' | 'review'; + +export interface ClusterMemoryLike { + id: string; + retention: number; + tags?: string[]; + createdAt?: string; +} + +export interface ClusterLike { + similarity: number; + memories: M[]; +} + +/** Color bands. Boundary at 0.92 → red. Boundary at 0.80 → amber. */ +export function similarityBand(similarity: number): SimilarityBand { + if (similarity >= 0.92) return 'near-identical'; + if (similarity >= 0.8) return 'strong'; + return 'weak'; +} + +export function similarityBandColor(similarity: number): string { + const band = similarityBand(similarity); + if (band === 'near-identical') return 'var(--color-decay)'; + if (band === 'strong') return 'var(--color-warning)'; + return '#fde047'; // yellow-300 — distinct from amber warning +} + +export function similarityBandLabel(similarity: number): string { + const band = similarityBand(similarity); + if (band === 'near-identical') return 'Near-identical'; + if (band === 'strong') return 'Strong match'; + return 'Weak match'; +} + +/** Retention color dot. Matches the traffic-light scheme. */ +export function retentionColor(retention: number): string { + if (retention > 0.7) return '#10b981'; + if (retention > 0.4) return '#f59e0b'; + return '#ef4444'; +} + +/** + * Pick the highest-retention memory. Stable tie-break: earliest wins. + * Returns `null` if the cluster is empty. Treats non-finite retention as + * -Infinity so a `retention=NaN` row never claims the throne. + */ +export function pickWinner(memories: M[]): M | null { + if (!memories || memories.length === 0) return null; + let best = memories[0]; + let bestScore = Number.isFinite(best.retention) ? best.retention : -Infinity; + for (let i = 1; i < memories.length; i++) { + const m = memories[i]; + const s = Number.isFinite(m.retention) ? m.retention : -Infinity; + if (s > bestScore) { + best = m; + bestScore = s; + } + } + return best; +} + +/** + * Suggested action inference. Returns null in the ambiguous 0.85..0.92 band + * so callers can honor an upstream suggestion from the backend. + */ +export function suggestedActionFor(similarity: number): SuggestedAction | null { + if (similarity >= 0.92) return 'merge'; + if (similarity < 0.85) return 'review'; + return null; +} + +/** + * Filter clusters by the >= threshold contract. Separate pure function so the + * mock fetch and any future real fetch both get the same semantics. + */ +export function filterByThreshold(clusters: C[], threshold: number): C[] { + return clusters.filter((c) => c.similarity >= threshold); +} + +/** + * Stable identity across re-fetches. Uses sorted member ids, so a cluster + * that loses/gains a member gets a new key (intentional — the cluster has + * changed). If you dismissed cluster [A,B,C] at 0.80 and refetch at 0.70 + * and it now contains [A,B,C,D], it reappears — correct behaviour: a new + * member deserves fresh attention. + */ +export function clusterKey(memories: M[]): string { + return memories + .map((m) => m.id) + .slice() + .sort() + .join('|'); +} + +/** + * Safe content preview — trims, collapses whitespace, truncates at 80 chars + * with an ellipsis. Null-safe. + */ +export function previewContent(content: string | null | undefined, max: number = 80): string { + if (!content) return ''; + const trimmed = content.trim().replace(/\s+/g, ' '); + return trimmed.length <= max ? trimmed : trimmed.slice(0, max) + '…'; +} + +/** + * Render an ISO date string safely — returns an empty string for missing, + * non-string, or invalid input so the DOM shows nothing rather than + * "Invalid Date". + */ +export function formatDate(iso: string | null | undefined): string { + if (!iso || typeof iso !== 'string') return ''; + const d = new Date(iso); + if (Number.isNaN(d.getTime())) return ''; + return d.toLocaleDateString(undefined, { + year: 'numeric', + month: 'short', + day: 'numeric', + }); +} + +/** Safe tag slice — tolerates undefined or non-array inputs. */ +export function safeTags(tags: string[] | null | undefined, limit: number = 4): string[] { + if (!Array.isArray(tags)) return []; + return tags.slice(0, limit); +} diff --git a/apps/dashboard/src/lib/components/importance-helpers.ts b/apps/dashboard/src/lib/components/importance-helpers.ts new file mode 100644 index 0000000..8516fa5 --- /dev/null +++ b/apps/dashboard/src/lib/components/importance-helpers.ts @@ -0,0 +1,226 @@ +/** + * importance-helpers — Pure logic for the Importance Radar UI + * (importance/+page.svelte + ImportanceRadar.svelte). + * + * Extracted so the radar geometry and importance-proxy maths can be unit- + * tested in the vitest `node` environment without jsdom or Svelte harness. + * + * Contracts + * --------- + * - Backend channel weights (novelty 0.25, arousal 0.30, reward 0.25, + * attention 0.20) sum to 1.0 and mirror ImportanceSignals in vestige-core. + * - `clamp01` folds NaN/Infinity/nullish → 0 and clips [0,1]. + * - `radarVertices` emits 4 SVG polygon points in the fixed axis order + * Novelty (top) → Arousal (right) → Reward (bottom) → Attention (left). + * A zero value places the vertex at centre; a one value places it at the + * unit-ring edge. + * - `importanceProxy` is the SAME formula the page uses to rank the weekly + * list: retentionStrength × log1p(reviews + 1) / sqrt(max(1, ageDays)). + * Age is clamped to 1 so a freshly-created memory never divides by zero. + * - `sizePreset` maps 'sm'|'md'|'lg' to 80|180|320 and defaults to 'md' for + * any unknown size key — matching the component's default prop. + */ + +// -- Channel model ---------------------------------------------------------- + +export type ChannelKey = 'novelty' | 'arousal' | 'reward' | 'attention'; + +/** Weights applied server-side by ImportanceSignals. Must sum to 1.0. */ +export const CHANNEL_WEIGHTS: Readonly> = { + novelty: 0.25, + arousal: 0.3, + reward: 0.25, + attention: 0.2, +} as const; + +export interface Channels { + novelty: number; + arousal: number; + reward: number; + attention: number; +} + +/** Clamp a value to [0,1]. Null / undefined / NaN / Infinity → 0. */ +export function clamp01(v: number | null | undefined): number { + if (v === null || v === undefined) return 0; + if (!Number.isFinite(v)) return 0; + if (v < 0) return 0; + if (v > 1) return 1; + return v; +} + +/** Clamp every channel to [0,1]. Safe for partial / malformed inputs. */ +export function clampChannels(ch: Partial | null | undefined): Channels { + return { + novelty: clamp01(ch?.novelty), + arousal: clamp01(ch?.arousal), + reward: clamp01(ch?.reward), + attention: clamp01(ch?.attention), + }; +} + +/** + * Composite importance score — matches backend ImportanceSignals. + * + * composite = 0.25·novelty + 0.30·arousal + 0.25·reward + 0.20·attention + * + * Every input is clamped first so out-of-range channels never puncture the + * 0..1 composite range. The return value is guaranteed to be in [0,1]. + */ +export function compositeScore(ch: Partial | null | undefined): number { + const c = clampChannels(ch); + return ( + c.novelty * CHANNEL_WEIGHTS.novelty + + c.arousal * CHANNEL_WEIGHTS.arousal + + c.reward * CHANNEL_WEIGHTS.reward + + c.attention * CHANNEL_WEIGHTS.attention + ); +} + +// -- Size preset ------------------------------------------------------------ + +export type RadarSize = 'sm' | 'md' | 'lg'; + +export const SIZE_PX: Readonly> = { + sm: 80, + md: 180, + lg: 320, +} as const; + +/** + * Resolve a size preset key to its px value. Unknown / missing keys fall + * back to 'md' (180), matching the component's default prop. `sm` loses + * axis labels in the renderer but that's rendering concern, not ours. + */ +export function sizePreset(size: RadarSize | string | undefined): number { + if (size && (size === 'sm' || size === 'md' || size === 'lg')) { + return SIZE_PX[size]; + } + return SIZE_PX.md; +} + +// -- Geometry --------------------------------------------------------------- + +/** + * Fixed axis order. Angles use SVG conventions (y grows downward): + * Novelty → angle -π/2 (top) + * Arousal → angle 0 (right) + * Reward → angle π/2 (bottom) + * Attention → angle π (left) + */ +export const AXIS_ORDER: ReadonlyArray<{ key: ChannelKey; angle: number }> = [ + { key: 'novelty', angle: -Math.PI / 2 }, + { key: 'arousal', angle: 0 }, + { key: 'reward', angle: Math.PI / 2 }, + { key: 'attention', angle: Math.PI }, +] as const; + +export interface RadarPoint { + x: number; + y: number; +} + +/** + * Compute the effective drawable radius inside the SVG box. This mirrors the + * component's padding logic: + * sm → padding 4 (edge-to-edge, no labels) + * md → padding 28 + * lg → padding 44 + * Radius = size/2 − padding, floored at 0 (a radius below zero would draw + * an inverted polygon — defensive guard). + */ +export function radarRadius(size: RadarSize | string | undefined): number { + const px = sizePreset(size); + let padding: number; + switch (size) { + case 'lg': + padding = 44; + break; + case 'sm': + padding = 4; + break; + default: + padding = 28; + } + return Math.max(0, px / 2 - padding); +} + +/** + * Compute the 4 SVG polygon vertices for a set of channel values at a given + * radar size. Values are clamped to [0,1] first so out-of-range inputs can't + * escape the radar bounds. + * + * Ordering is FIXED and matches AXIS_ORDER: [novelty, arousal, reward, attention]. + * A zero value places the vertex at the centre (cx, cy); a one value places + * it at the unit-ring edge. + */ +export function radarVertices( + ch: Partial | null | undefined, + size: RadarSize | string | undefined = 'md', +): RadarPoint[] { + const px = sizePreset(size); + const r = radarRadius(size); + const cx = px / 2; + const cy = px / 2; + const values = clampChannels(ch); + return AXIS_ORDER.map(({ key, angle }) => { + const v = values[key]; + return { + x: cx + Math.cos(angle) * v * r, + y: cy + Math.sin(angle) * v * r, + }; + }); +} + +/** Serialise vertices to an SVG "M…L…L…L… Z" path, 2-decimal precision. */ +export function verticesToPath(points: RadarPoint[]): string { + if (points.length === 0) return ''; + return ( + points + .map((p, i) => `${i === 0 ? 'M' : 'L'}${p.x.toFixed(2)},${p.y.toFixed(2)}`) + .join(' ') + ' Z' + ); +} + +// -- Trending-memory proxy -------------------------------------------------- + +export interface ProxyMemoryLike { + retentionStrength: number; + reviewCount?: number | null; + createdAt: string; +} + +/** + * Proxy score for the "Top Important Memories This Week" ranking. Exact + * formula from importance/+page.svelte: + * + * ageDays = max(1, (now - createdAt) / 86_400_000) + * reviews = reviewCount ?? 0 + * recencyBoost = 1 / sqrt(ageDays) + * proxy = retentionStrength × log1p(reviews + 1) × recencyBoost + * + * Edge cases: + * - createdAt is the current instant → ageDays clamps to 1 (no div-by-0) + * - createdAt is in the future → negative age also clamps to 1 + * - reviewCount null/undefined → treated as 0 + * - non-finite retentionStrength → returns 0 defensively + * + * `now` is injectable for deterministic tests. Defaults to `Date.now()`. + */ +export function importanceProxy(m: ProxyMemoryLike, now: number = Date.now()): number { + if (!m || !Number.isFinite(m.retentionStrength)) return 0; + const created = new Date(m.createdAt).getTime(); + if (!Number.isFinite(created)) return 0; + const ageDays = Math.max(1, (now - created) / 86_400_000); + const reviews = m.reviewCount ?? 0; + const recencyBoost = 1 / Math.sqrt(ageDays); + return m.retentionStrength * Math.log1p(reviews + 1) * recencyBoost; +} + +/** Sort memories by the proxy, descending. Stable via `.sort` on a copy. */ +export function rankByProxy( + memories: readonly M[], + now: number = Date.now(), +): M[] { + return memories.slice().sort((a, b) => importanceProxy(b, now) - importanceProxy(a, now)); +} diff --git a/apps/dashboard/src/lib/components/patterns-helpers.ts b/apps/dashboard/src/lib/components/patterns-helpers.ts new file mode 100644 index 0000000..ac498de --- /dev/null +++ b/apps/dashboard/src/lib/components/patterns-helpers.ts @@ -0,0 +1,178 @@ +/** + * patterns-helpers — Pure logic for the Cross-Project Intelligence UI + * (patterns/+page.svelte + PatternTransferHeatmap.svelte). + * + * Extracted so the behaviour can be unit-tested in the vitest `node` + * environment without jsdom or Svelte component harnessing. Every helper + * in this module is a pure function of its inputs. + * + * Contracts + * --------- + * - `cellIntensity`: returns opacity in [0,1] from count / max. count=0 → 0, + * count>=max → 1. `max<=0` collapses to 0 (avoids div-by-zero — the + * component uses `max || 1` for the same reason). + * - `filterByCategory`: 'All' passes every pattern through. An unknown + * category string (not one of the 6 + 'All') returns an empty array — + * there is no hidden alias fallback. + * - `buildTransferMatrix`: directional. `matrix[origin][dest]` counts how + * many patterns originated in `origin` and were transferred to `dest`. + * `origin === dest` captures self-transfer (a project reusing its own + * pattern — rare but real per the component's doc comment). + */ + +export const PATTERN_CATEGORIES = [ + 'ErrorHandling', + 'AsyncConcurrency', + 'Testing', + 'Architecture', + 'Performance', + 'Security', +] as const; + +export type PatternCategory = (typeof PATTERN_CATEGORIES)[number]; +export type CategoryFilter = 'All' | PatternCategory; + +export interface TransferPatternLike { + name: string; + category: PatternCategory; + origin_project: string; + transferred_to: string[]; + transfer_count: number; +} + +/** + * Normalise a raw transfer count to a 0..1 opacity/intensity value against a + * known max. Used by the heatmap cell colour ramp. + * + * count <= 0 → 0 (dead cell) + * count >= max > 0 → 1 (hottest cell) + * otherwise → count / max + * + * Non-finite / negative inputs collapse to 0. When `max <= 0` the result is + * always 0 — the component's own guard (`maxCount || 1`) means this branch + * is unreachable in practice, but defensive anyway. + */ +export function cellIntensity(count: number, max: number): number { + if (!Number.isFinite(count) || count <= 0) return 0; + if (!Number.isFinite(max) || max <= 0) return 0; + if (count >= max) return 1; + return count / max; +} + +/** + * Filter a pattern list by the active category tab. + * 'All' → full pass-through (same reference-equal array is + * NOT guaranteed; callers must not rely on identity) + * one of the 6 enums → strict equality on `category` + * unknown string → empty array (no silent alias; caller bug) + */ +export function filterByCategory

        ( + patterns: readonly P[], + category: CategoryFilter | string, +): P[] { + if (category === 'All') return patterns.slice(); + if (!(PATTERN_CATEGORIES as readonly string[]).includes(category)) { + return []; + } + return patterns.filter((p) => p.category === category); +} + +/** Cell in the directional N×N transfer matrix. */ +export interface TransferCell { + count: number; + topNames: string[]; +} + +/** Dense row-major directional matrix: matrix[origin][destination]. */ +export type TransferMatrix = Record>; + +/** + * Build the directional transfer matrix from patterns + the known projects + * axis. Mirrors `PatternTransferHeatmap.svelte`'s `$derived` logic. + * + * - Every (from, to) pair in `projects × projects` gets a zero cell. + * - Each pattern P contributes `+1` to `matrix[P.origin][dest]` for every + * `dest` in `P.transferred_to` that also appears in `projects`. + * - Patterns whose origin isn't in `projects` are silently skipped — that + * matches the component's `if (!m[from]) continue` guard. + * - `topNames` holds up to 3 pattern names per cell in insertion order. + */ +export function buildTransferMatrix( + projects: readonly string[], + patterns: readonly TransferPatternLike[], + topNameCap = 3, +): TransferMatrix { + const m: TransferMatrix = {}; + for (const from of projects) { + m[from] = {}; + for (const to of projects) { + m[from][to] = { count: 0, topNames: [] }; + } + } + for (const p of patterns) { + const from = p.origin_project; + if (!m[from]) continue; + for (const to of p.transferred_to) { + if (!m[from][to]) continue; + m[from][to].count += 1; + m[from][to].topNames.push(p.name); + } + } + const cap = Math.max(0, topNameCap); + for (const from of projects) { + for (const to of projects) { + m[from][to].topNames = m[from][to].topNames.slice(0, cap); + } + } + return m; +} + +/** + * Maximum single-cell transfer count across the matrix. Floors at 0 for an + * empty matrix, which callers should treat as "scale by 1" to avoid a div- + * by-zero in the colour ramp. + */ +export function matrixMaxCount( + projects: readonly string[], + matrix: TransferMatrix, +): number { + let max = 0; + for (const from of projects) { + const row = matrix[from]; + if (!row) continue; + for (const to of projects) { + const cell = row[to]; + if (cell && cell.count > max) max = cell.count; + } + } + return max; +} + +/** + * Flatten a matrix into sorted-desc rows for the mobile fallback. Only + * non-zero pairs are emitted, matching the component. + */ +export function flattenNonZero( + projects: readonly string[], + matrix: TransferMatrix, +): Array<{ from: string; to: string; count: number; topNames: string[] }> { + const rows: Array<{ from: string; to: string; count: number; topNames: string[] }> = []; + for (const from of projects) { + for (const to of projects) { + const cell = matrix[from]?.[to]; + if (cell && cell.count > 0) { + rows.push({ from, to, count: cell.count, topNames: cell.topNames }); + } + } + } + return rows.sort((a, b) => b.count - a.count); +} + +/** + * Truncate long project names for axis labels. Match the component's + * `shortProject` behaviour: keep ≤12 chars, otherwise 11-char prefix + ellipsis. + */ +export function shortProjectName(name: string): string { + if (!name) return ''; + return name.length > 12 ? name.slice(0, 11) + '…' : name; +} diff --git a/apps/dashboard/src/lib/components/reasoning-helpers.ts b/apps/dashboard/src/lib/components/reasoning-helpers.ts new file mode 100644 index 0000000..83b90d1 --- /dev/null +++ b/apps/dashboard/src/lib/components/reasoning-helpers.ts @@ -0,0 +1,229 @@ +/** + * reasoning-helpers — Pure logic for the Reasoning Theater UI. + * + * Extracted so we can test it without jsdom / Svelte component harnessing. + * The Vitest setup for this package runs in a Node environment; every helper + * in this module is a pure function of its inputs, so it can be exercised + * directly in `__tests__/*.test.ts` alongside the graph helpers. + */ +import { NODE_TYPE_COLORS } from '$types'; + +// ──────────────────────────────────────────────────────────────── +// Shared palette — keep in sync with Tailwind @theme values. +// ──────────────────────────────────────────────────────────────── + +export const CONFIDENCE_EMERALD = '#10b981'; +export const CONFIDENCE_AMBER = '#f59e0b'; +export const CONFIDENCE_RED = '#ef4444'; + +/** Fallback colour when a node-type has no mapping. */ +export const DEFAULT_NODE_TYPE_COLOR = '#8B95A5'; + +// ──────────────────────────────────────────────────────────────── +// Roles +// ──────────────────────────────────────────────────────────────── + +export type EvidenceRole = 'primary' | 'supporting' | 'contradicting' | 'superseded'; + +export interface RoleMeta { + label: string; + /** Tailwind / CSS colour token — see app.css. */ + accent: 'synapse' | 'recall' | 'decay' | 'muted'; + icon: string; +} + +export const ROLE_META: Record = { + primary: { label: 'Primary', accent: 'synapse', icon: '◈' }, + supporting: { label: 'Supporting', accent: 'recall', icon: '◇' }, + contradicting: { label: 'Contradicting', accent: 'decay', icon: '⚠' }, + superseded: { label: 'Superseded', accent: 'muted', icon: '⊘' }, +}; + +/** Look up role metadata with a defensive fallback. */ +export function roleMetaFor(role: EvidenceRole | string): RoleMeta { + return (ROLE_META as Record)[role] ?? ROLE_META.supporting; +} + +// ──────────────────────────────────────────────────────────────── +// Intent classification (deep_reference `intent` field) +// ──────────────────────────────────────────────────────────────── + +export type IntentKey = + | 'FactCheck' + | 'Timeline' + | 'RootCause' + | 'Comparison' + | 'Synthesis'; + +export interface IntentHint { + label: string; + icon: string; + description: string; +} + +export const INTENT_HINTS: Record = { + FactCheck: { + label: 'FactCheck', + icon: '◆', + description: 'Direct verification of a single claim.', + }, + Timeline: { + label: 'Timeline', + icon: '↗', + description: 'Ordered evolution of a fact over time.', + }, + RootCause: { + label: 'RootCause', + icon: '⚡', + description: 'Why did this happen — causal chain.', + }, + Comparison: { + label: 'Comparison', + icon: '⬡', + description: 'Contrasting two or more options side-by-side.', + }, + Synthesis: { + label: 'Synthesis', + icon: '❖', + description: 'Cross-memory composition into a new insight.', + }, +}; + +/** + * Map an arbitrary intent string to a hint. Unknown intents degrade to + * Synthesis, which is the most generic classification. + */ +export function intentHintFor(intent: string | undefined | null): IntentHint { + if (!intent) return INTENT_HINTS.Synthesis; + const key = intent as IntentKey; + return INTENT_HINTS[key] ?? INTENT_HINTS.Synthesis; +} + +// ──────────────────────────────────────────────────────────────── +// Confidence bands +// ──────────────────────────────────────────────────────────────── + +/** + * Confidence colour band. + * + * > 75 → emerald (HIGH) + * 40-75 → amber (MIXED) + * < 40 → red (LOW) + * + * Boundaries: 75 is amber (strictly greater than 75 is emerald), 40 is amber + * (>=40 is amber). Any non-finite input (NaN) is treated as lowest confidence + * and returns red. + */ +export function confidenceColor(c: number): string { + if (!Number.isFinite(c)) return CONFIDENCE_RED; + if (c > 75) return CONFIDENCE_EMERALD; + if (c >= 40) return CONFIDENCE_AMBER; + return CONFIDENCE_RED; +} + +/** Human-readable label for a confidence score (0-100). */ +export function confidenceLabel(c: number): string { + if (!Number.isFinite(c)) return 'LOW CONFIDENCE'; + if (c > 75) return 'HIGH CONFIDENCE'; + if (c >= 40) return 'MIXED SIGNAL'; + return 'LOW CONFIDENCE'; +} + +/** + * Convert a 0-1 trust score to the same confidence band. + * + * Thresholds: >0.75 emerald, 0.40-0.75 amber, <0.40 red. + * Matches `confidenceColor` semantics so the trust bar on an evidence card + * and the confidence meter on the page agree at the boundaries. + */ +export function trustColor(t: number): string { + if (!Number.isFinite(t)) return CONFIDENCE_RED; + return confidenceColor(t * 100); +} + +/** Clamp a trust score into the display range [0, 1]. */ +export function clampTrust(t: number): number { + if (!Number.isFinite(t)) return 0; + if (t < 0) return 0; + if (t > 1) return 1; + return t; +} + +/** Trust as a 0-100 percentage suitable for width / label rendering. */ +export function trustPercent(t: number): number { + return clampTrust(t) * 100; +} + +// ──────────────────────────────────────────────────────────────── +// Node-type colouring +// ──────────────────────────────────────────────────────────────── + +/** Resolve a node-type colour with a soft-steel fallback. */ +export function nodeTypeColor(nodeType?: string | null): string { + if (!nodeType) return DEFAULT_NODE_TYPE_COLOR; + return NODE_TYPE_COLORS[nodeType] ?? DEFAULT_NODE_TYPE_COLOR; +} + +// ──────────────────────────────────────────────────────────────── +// Date formatting +// ──────────────────────────────────────────────────────────────── + +/** + * Format an ISO date string for EvidenceCard display. + * + * Handles three failure modes that `new Date(str)` alone does not: + * 1. Empty / null / undefined → returns '—' + * 2. Unparseable string (NaN) → returns the original string unchanged + * 3. Non-ISO but parseable → best-effort locale format + * + * The previous try/catch-only approach silently rendered the literal text + * "Invalid Date" because `Date` never throws on bad input — it produces a + * valid object whose getTime() is NaN. + */ +export function formatDate( + iso: string | null | undefined, + locale?: string, +): string { + if (iso == null) return '—'; + if (typeof iso !== 'string' || iso.trim() === '') return '—'; + const d = new Date(iso); + if (Number.isNaN(d.getTime())) return iso; + try { + return d.toLocaleDateString(locale, { + month: 'short', + day: 'numeric', + year: 'numeric', + }); + } catch { + return iso; + } +} + +/** Compact month/day formatter for the evolution timeline. */ +export function formatShortDate( + iso: string | null | undefined, + locale?: string, +): string { + if (iso == null) return '—'; + if (typeof iso !== 'string' || iso.trim() === '') return '—'; + const d = new Date(iso); + if (Number.isNaN(d.getTime())) return iso; + try { + return d.toLocaleDateString(locale, { month: 'short', day: 'numeric' }); + } catch { + return iso; + } +} + +// ──────────────────────────────────────────────────────────────── +// Short-id for #abcdef01 style display +// ──────────────────────────────────────────────────────────────── + +/** + * Return the first 8 characters of an id, or the full string if shorter. + * Never throws on null/undefined — returns '' so the caller can render '#'. + */ +export function shortenId(id: string | null | undefined, length = 8): string { + if (!id) return ''; + return id.length > length ? id.slice(0, length) : id; +} diff --git a/apps/dashboard/src/lib/components/schedule-helpers.ts b/apps/dashboard/src/lib/components/schedule-helpers.ts new file mode 100644 index 0000000..93ca985 --- /dev/null +++ b/apps/dashboard/src/lib/components/schedule-helpers.ts @@ -0,0 +1,161 @@ +/** + * Pure helpers for the FSRS review schedule page + calendar. + * + * Extracted from `FSRSCalendar.svelte` and `routes/(app)/schedule/+page.svelte` + * so that bucket / grid / urgency / retention math can be tested in isolation + * (vitest `environment: node`, no jsdom required). + */ +import type { Memory } from '$types'; + +export const MS_DAY = 24 * 60 * 60 * 1000; + +/** + * Zero-out the time component of a date, returning a NEW Date at local + * midnight. Used for day-granular bucketing so comparisons are stable across + * any hour-of-day the user loads the page. + */ +export function startOfDay(d: Date | string): Date { + const x = typeof d === 'string' ? new Date(d) : new Date(d); + x.setHours(0, 0, 0, 0); + return x; +} + +/** + * Signed integer count of whole local days between two timestamps, normalized + * to midnight. Positive means `a` is in the future relative to `b`, negative + * means `a` is in the past. Zero means same calendar day. + */ +export function daysBetween(a: Date, b: Date): number { + return Math.floor((startOfDay(a).getTime() - startOfDay(b).getTime()) / MS_DAY); +} + +/** YYYY-MM-DD in LOCAL time (not UTC) so calendar cells align with user's day. */ +export function isoDate(d: Date): string { + const y = d.getFullYear(); + const m = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${y}-${m}-${day}`; +} + +/** + * Urgency bucket for a review date relative to "now". Used by the right-hand + * list and the calendar cell color. Day-granular (not hour-granular) so a + * memory due at 23:59 today does not suddenly become "in 1d" at 00:01 + * tomorrow UX-wise — it becomes "overdue" cleanly at midnight. + * + * - `none` — no valid `nextReviewAt` + * - `overdue` — due date's calendar day is strictly before today + * - `today` — due date's calendar day is today + * - `week` — due in 1..=7 whole days + * - `future` — due in 8+ whole days + */ +export type Urgency = 'none' | 'overdue' | 'today' | 'week' | 'future'; + +export function classifyUrgency(now: Date, nextReviewAt: string | null | undefined): Urgency { + if (!nextReviewAt) return 'none'; + const d = new Date(nextReviewAt); + if (Number.isNaN(d.getTime())) return 'none'; + const delta = daysBetween(d, now); + if (delta < 0) return 'overdue'; + if (delta === 0) return 'today'; + if (delta <= 7) return 'week'; + return 'future'; +} + +/** + * Signed whole-day count from today → due date. Negative means overdue by + * |n| days; zero means today; positive means n days out. Returns `null` + * if the ISO string is invalid or missing. + */ +export function daysUntilReview(now: Date, nextReviewAt: string | null | undefined): number | null { + if (!nextReviewAt) return null; + const d = new Date(nextReviewAt); + if (Number.isNaN(d.getTime())) return null; + return daysBetween(d, now); +} + +/** + * The [start, end) window for the week containing `d`, starting Sunday at + * local midnight. End is the following Sunday at local midnight — exclusive. + */ +export function weekBucketRange(d: Date): { start: Date; end: Date } { + const start = startOfDay(d); + start.setDate(start.getDate() - start.getDay()); // back to Sunday + const end = new Date(start); + end.setDate(end.getDate() + 7); + return { start, end }; +} + +/** + * Mean retention strength across a list of memories. Returns 0 for an empty + * list (never NaN) so the sidebar can safely render "0%". + */ +export function avgRetention(memories: Memory[]): number { + if (memories.length === 0) return 0; + let sum = 0; + for (const m of memories) sum += m.retentionStrength ?? 0; + return sum / memories.length; +} + +/** + * Given a day-index `i` into a 42-cell calendar grid (6 rows × 7 cols), return + * its row / column. The grid is laid out row-major: cell 0 = row 0 col 0, + * cell 7 = row 1 col 0, cell 41 = row 5 col 6. Returns `null` for indices + * outside `[0, 42)`. + */ +export function gridCellPosition(i: number): { row: number; col: number } | null { + if (!Number.isInteger(i) || i < 0 || i >= 42) return null; + return { row: Math.floor(i / 7), col: i % 7 }; +} + +/** + * The inverse: given a calendar anchor date (today), compute the Sunday + * at-or-before `anchor - 14 days` that seeds row 0 of the 6×7 grid. Pure, + * deterministic, local-time. + */ +export function gridStartForAnchor(anchor: Date): Date { + const base = startOfDay(anchor); + base.setDate(base.getDate() - 14); + base.setDate(base.getDate() - base.getDay()); // back to Sunday + return base; +} + +/** + * Bucket counts used by the sidebar stats block. Day-granular, consistent + * with `classifyUrgency`. + */ +export interface ScheduleStats { + overdue: number; + dueToday: number; + dueThisWeek: number; + dueThisMonth: number; + avgDays: number; +} + +export function computeScheduleStats(now: Date, scheduled: Memory[]): ScheduleStats { + let overdue = 0; + let dueToday = 0; + let dueThisWeek = 0; + let dueThisMonth = 0; + let sumDays = 0; + let futureCount = 0; + const today = startOfDay(now); + for (const m of scheduled) { + if (!m.nextReviewAt) continue; + const d = new Date(m.nextReviewAt); + if (Number.isNaN(d.getTime())) continue; + const delta = daysBetween(d, now); + if (delta < 0) overdue++; + if (delta <= 0) dueToday++; + if (delta <= 7) dueThisWeek++; + if (delta <= 30) dueThisMonth++; + if (delta >= 0) { + // Use hour-resolution days-until for the average so "due in 2.3 days" + // is informative even when bucketing is day-granular elsewhere. + sumDays += (d.getTime() - today.getTime()) / MS_DAY; + futureCount++; + } + } + const avgDays = futureCount > 0 ? sumDays / futureCount : 0; + return { overdue, dueToday, dueThisWeek, dueThisMonth, avgDays }; +} diff --git a/apps/dashboard/src/lib/graph/__tests__/effects.test.ts b/apps/dashboard/src/lib/graph/__tests__/effects.test.ts index 9c80986..e495046 100644 --- a/apps/dashboard/src/lib/graph/__tests__/effects.test.ts +++ b/apps/dashboard/src/lib/graph/__tests__/effects.test.ts @@ -497,4 +497,505 @@ describe('EffectManager', () => { expect(effects.pulseEffects.length).toBe(0); }); }); + + describe('createBirthOrb (v2.3 Memory Birth Ritual)', () => { + // Build a camera with a Quaternion for createBirthOrb's view-space + // projection. The three-mock's applyQuaternion is identity, so the + // start position collapses to `camera.position + (0, 0, -distance)`. + function makeCamera() { + return { + position: new Vector3(0, 30, 80), + quaternion: new (class { + x = 0; y = 0; z = 0; w = 1; + })(), + } as any; + } + + it('adds exactly 2 sprites to the scene on spawn', () => { + const cam = makeCamera(); + const baseline = scene.children.length; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + expect(scene.children.length).toBe(baseline + 2); + }); + + it('both sprite and core use additive blending', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0xff8800) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + const core = scene.children[1] as any; + // AdditiveBlending constant from three-mock is 2 + expect(halo.material.blending).toBe(2); + expect(core.material.blending).toBe(2); + // depthTest:false is passed to the SpriteMaterial constructor in + // effects.ts so the orb stays visible through other nodes. The + // three-mock's SpriteMaterial constructor does not persist this + // param, so we can't assert it at the instance level here; the + // production behavior is covered by ui-fixes.test.ts source grep. + expect(halo.material.transparent).toBe(true); + expect(core.material.transparent).toBe(true); + }); + + it('positions the orb at camera-relative cosmic center on spawn', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {}, + { distanceFromCamera: 40 } + ); + const halo = scene.children[0] as any; + const core = scene.children[1] as any; + // mock applyQuaternion is identity, so startPos = camera.pos + (0,0,-40) + expect(halo.position.x).toBeCloseTo(0); + expect(halo.position.y).toBeCloseTo(30); + expect(halo.position.z).toBeCloseTo(40); // 80 + (-40) + expect(core.position.x).toBeCloseTo(halo.position.x); + expect(core.position.y).toBeCloseTo(halo.position.y); + expect(core.position.z).toBeCloseTo(halo.position.z); + }); + + it('gestation phase: position stays at startPos for all 48 frames', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(100, 100, 100) as any, // far-away target + () => {} + ); + const halo = scene.children[0] as any; + const startX = halo.position.x; + const startY = halo.position.y; + const startZ = halo.position.z; + + for (let f = 0; f < 48; f++) { + effects.update(nodeMeshMap, cam); + expect(halo.position.x).toBeCloseTo(startX); + expect(halo.position.y).toBeCloseTo(startY); + expect(halo.position.z).toBeCloseTo(startZ); + } + }); + + it('gestation phase: opacity rises from 0 toward 0.95', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + const core = scene.children[1] as any; + + // Spawn opacity + expect(halo.material.opacity).toBe(0); + expect(core.material.opacity).toBe(0); + + effects.update(nodeMeshMap, cam); // age 1 + const earlyHaloOp = halo.material.opacity; + expect(earlyHaloOp).toBeGreaterThan(0); + expect(earlyHaloOp).toBeLessThan(0.2); + + // Run to end of gestation + for (let f = 0; f < 47; f++) effects.update(nodeMeshMap, cam); + expect(halo.material.opacity).toBeCloseTo(0.95, 1); + expect(core.material.opacity).toBeCloseTo(1.0, 1); + // Monotonic-ish growth: late gestation > early gestation + expect(halo.material.opacity).toBeGreaterThan(earlyHaloOp); + }); + + it('gestation phase: sprite scale grows substantially', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + + effects.update(nodeMeshMap, cam); // age 1 + const earlyScale = halo.scale.x; + + for (let f = 0; f < 47; f++) effects.update(nodeMeshMap, cam); // age 48 + const lateScale = halo.scale.x; + + // Halo grows from ~0.5 toward ~5 during gestation (with pulse variation). + expect(lateScale).toBeGreaterThan(earlyScale); + expect(lateScale).toBeGreaterThan(2); + }); + + it('gestation phase: halo color tints toward event color', () => { + const cam = makeCamera(); + const eventColor = new Color(0xff0000); // pure red + effects.createBirthOrb( + cam, + eventColor as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + + effects.update(nodeMeshMap, cam); // age 1 — factor ≈ 0.72 + const earlyR = halo.material.color.r; + + for (let f = 0; f < 47; f++) effects.update(nodeMeshMap, cam); // age 48 — factor = 1.0 + const lateR = halo.material.color.r; + + // Red channel should approach the event color's red (1.0) from a dimmer value + expect(lateR).toBeGreaterThan(earlyR); + expect(lateR).toBeCloseTo(1.0, 1); + // Green/blue stay at 0 (event color is pure red) + expect(halo.material.color.g).toBeCloseTo(0); + expect(halo.material.color.b).toBeCloseTo(0); + }); + + it('flight phase: Bezier arc passes ABOVE the linear midpoint at t=0.5', () => { + const cam = makeCamera(); + // startPos = (0, 30, 40), target = (0, 0, 0) + // linear midpoint y = 15; control point y = 15 + 30 + dist*0.15 = 52.5 + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + + // Drive past gestation (48) + half of flight (45) = 93 frames → t=0.5 + for (let f = 0; f < 93; f++) effects.update(nodeMeshMap, cam); + + // Linear midpoint y is 15; Bezier midpoint should be notably higher. + expect(halo.position.y).toBeGreaterThan(15); + // And not as high as the control point itself (52.5) — Bezier + // passes through midpoint-ish at t=0.5, biased upward by the arc. + expect(halo.position.y).toBeLessThan(52.5); + }); + + it('flight phase: orb moves from startPos toward target', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + const halo = scene.children[0] as any; + + // End of gestation + for (let f = 0; f < 48; f++) effects.update(nodeMeshMap, cam); + const gestZ = halo.position.z; + + // One tick into flight + effects.update(nodeMeshMap, cam); + const earlyFlightZ = halo.position.z; + + // Near end of flight + for (let f = 0; f < 88; f++) effects.update(nodeMeshMap, cam); + const lateFlightZ = halo.position.z; + + // Z moves from 40 toward 0 + expect(earlyFlightZ).toBeLessThan(gestZ); + expect(lateFlightZ).toBeLessThan(earlyFlightZ); + expect(lateFlightZ).toBeLessThan(5); // close to target z=0 + }); + + it('dynamic target tracking: changing getTargetPos mid-flight redirects the orb', () => { + const cam = makeCamera(); + let target = new Vector3(0, 0, 0); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => target as any, + () => {} + ); + const halo = scene.children[0] as any; + + // Drive to mid-flight (gestation 48 + 30 flight frames = 78) + for (let f = 0; f < 78; f++) effects.update(nodeMeshMap, cam); + const xBeforeRedirect = halo.position.x; + + // Redirect target far to the +X side + target = new Vector3(200, 0, 0); + + // A few more flight frames — orb should track the new target + for (let f = 0; f < 10; f++) effects.update(nodeMeshMap, cam); + const xAfterRedirect = halo.position.x; + + // With the original target at (0,0,0), x stays near 0 throughout. + // After redirect, x should swing toward the new target's +200. + expect(xAfterRedirect).toBeGreaterThan(xBeforeRedirect + 5); + }); + + it('onArrive fires exactly once at frame 139 (totalFrames + 1)', () => { + const cam = makeCamera(); + let arriveCount = 0; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => { + arriveCount++; + } + ); + + // Drive through gestation (48) + flight (90) = 138 frames. Should NOT have fired. + for (let f = 0; f < 138; f++) effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(0); + + // Frame 139 — fires onArrive + effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(1); + + // Drive many more frames — must stay at 1 + for (let f = 0; f < 50; f++) effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(1); + }); + + it('post-arrival fade: orb disposes from scene after ~8 fade frames', () => { + const cam = makeCamera(); + const baseline = scene.children.length; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + expect(scene.children.length).toBe(baseline + 2); + + // Gestation + flight + arrive + fade = 138 + 1 + 8 = 147 frames + for (let f = 0; f < 150; f++) effects.update(nodeMeshMap, cam); + + // Both orb sprites should be gone + expect(scene.children.length).toBe(baseline); + }); + + it('onArrive callback wrapped in try/catch so a throw does not crash the loop', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => { + throw new Error('caller blew up'); + } + ); + + // Should not throw — the production code swallows arrival-callback errors. + expect(() => { + for (let f = 0; f < 160; f++) effects.update(nodeMeshMap, cam); + }).not.toThrow(); + }); + + it('Sanhedrin Shatter: onArrive NEVER fires when target vanishes mid-flight', () => { + const cam = makeCamera(); + let arriveCount = 0; + let target: Vector3 | undefined = new Vector3(0, 0, 0); + + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => target as any, + () => { + arriveCount++; + } + ); + + // Finish gestation (48 frames) with target present + for (let f = 0; f < 48; f++) effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(0); + + // Stop hook yanks the target mid-flight + target = undefined; + + // Run enough frames to cover the entire orb lifecycle + for (let f = 0; f < 200; f++) effects.update(nodeMeshMap, cam); + + // onArrive must NEVER fire on aborted orbs + expect(arriveCount).toBe(0); + }); + + it('Sanhedrin Shatter: implosion is spawned when target vanishes mid-flight', () => { + const cam = makeCamera(); + let target: Vector3 | undefined = new Vector3(0, 0, 0); + + const baseline = scene.children.length; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => target as any, + () => {} + ); + // baseline + 2 sprites + expect(scene.children.length).toBe(baseline + 2); + + // Finish gestation + for (let f = 0; f < 48; f++) effects.update(nodeMeshMap, cam); + + // Yank target → abort triggers on next tick + target = undefined; + const beforeAbort = scene.children.length; + effects.update(nodeMeshMap, cam); + // Scene should have grown by at least 1 (the implosion particles) + expect(scene.children.length).toBeGreaterThan(beforeAbort); + }); + + it('Sanhedrin Shatter: halo turns blood-red on abort', () => { + const cam = makeCamera(); + let target: Vector3 | undefined = new Vector3(0, 0, 0); + + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, // cyan — NOT red + () => target as any, + () => {} + ); + const halo = scene.children[0] as any; + + // Finish gestation + for (let f = 0; f < 48; f++) effects.update(nodeMeshMap, cam); + + // Sanity: halo is NOT red yet (event color cyan has r≈0) + expect(halo.material.color.r).toBeLessThan(0.5); + + // Yank target; abort triggers next tick + target = undefined; + effects.update(nodeMeshMap, cam); + + // Halo should now be blood red (1.0, 0.15, 0.2) + expect(halo.material.color.r).toBeGreaterThan(0.9); + expect(halo.material.color.g).toBeLessThan(0.3); + expect(halo.material.color.b).toBeLessThan(0.3); + }); + + it('Sanhedrin Shatter: orb eventually disposes from scene', () => { + const cam = makeCamera(); + let target: Vector3 | undefined = new Vector3(0, 0, 0); + + const baseline = scene.children.length; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => target as any, + () => {} + ); + + // Finish gestation + for (let f = 0; f < 48; f++) effects.update(nodeMeshMap, cam); + // Yank target + target = undefined; + + // Drive a long time — orb + implosion should both dispose + // (orb fade ~8 frames, implosion lifetime ~80 frames) + for (let f = 0; f < 200; f++) effects.update(nodeMeshMap, cam); + + expect(scene.children.length).toBe(baseline); + }); + + it('dispose() removes active birth orbs from the scene', () => { + const cam = makeCamera(); + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => {} + ); + effects.createBirthOrb( + cam, + new Color(0xff00ff) as any, + () => new Vector3(10, 10, 10) as any, + () => {} + ); + // 4 sprites in scene (2 per orb) + expect(scene.children.length).toBeGreaterThanOrEqual(4); + + effects.dispose(); + + // All orb sprites should be gone + expect(scene.children.length).toBe(0); + }); + + it('multiple orbs in flight: all 3 onArrive callbacks fire exactly once each', () => { + const cam = makeCamera(); + let c1 = 0, c2 = 0, c3 = 0; + + effects.createBirthOrb( + cam, + new Color(0xff0000) as any, + () => new Vector3(10, 0, 0) as any, + () => { c1++; } + ); + effects.createBirthOrb( + cam, + new Color(0x00ff00) as any, + () => new Vector3(-10, 0, 0) as any, + () => { c2++; } + ); + effects.createBirthOrb( + cam, + new Color(0x0000ff) as any, + () => new Vector3(0, 0, -10) as any, + () => { c3++; } + ); + + // Drive past arrival (139) with margin + for (let f = 0; f < 160; f++) effects.update(nodeMeshMap, cam); + + expect(c1).toBe(1); + expect(c2).toBe(1); + expect(c3).toBe(1); + }); + + it('custom gestation/flight frame counts are honored', () => { + const cam = makeCamera(); + let arriveCount = 0; + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(0, 0, 0) as any, + () => { arriveCount++; }, + { gestationFrames: 10, flightFrames: 20 } + ); + + // Before frame 31 — no arrival + for (let f = 0; f < 30; f++) effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(0); + + // Frame 31 — fires + effects.update(nodeMeshMap, cam); + expect(arriveCount).toBe(1); + }); + + it('zero-alloc invariant (advisory): flight phase runs without throwing across many orbs', () => { + // Advisory test — vitest has no allocator introspection, but the + // inline algebraic Bezier eval in effects.ts is intentionally zero- + // allocation per frame (no `new Vector3`, no `new QuadraticBezierCurve3`). + // Here we just smoke-test that running many orbs across the full + // flight phase does not throw and completes cleanly. + const cam = makeCamera(); + for (let k = 0; k < 6; k++) { + effects.createBirthOrb( + cam, + new Color(0x00ffd1) as any, + () => new Vector3(k * 5, 0, 0) as any, + () => {} + ); + } + expect(() => { + for (let f = 0; f < 150; f++) effects.update(nodeMeshMap, cam); + }).not.toThrow(); + // All orbs should have cleaned up + expect(scene.children.length).toBe(0); + }); + }); }); diff --git a/apps/dashboard/src/lib/graph/__tests__/events.test.ts b/apps/dashboard/src/lib/graph/__tests__/events.test.ts index 5ffe198..c4061a1 100644 --- a/apps/dashboard/src/lib/graph/__tests__/events.test.ts +++ b/apps/dashboard/src/lib/graph/__tests__/events.test.ts @@ -10,7 +10,7 @@ import { NodeManager } from '../nodes'; import { EdgeManager } from '../edges'; import { EffectManager } from '../effects'; import { ForceSimulation } from '../force-sim'; -import { Vector3, Scene } from './three-mock'; +import { Vector3, Scene, RingGeometry, Mesh, Points, Sprite } from './three-mock'; import { makeNode, makeEdge, makeEvent, resetNodeCounter } from './helpers'; import type { GraphNode, VestigeEvent } from '$types'; @@ -155,7 +155,7 @@ describe('Event-to-Mutation Pipeline', () => { expect(distToN1).toBeLessThan(20); }); - it('triggers rainbow burst effect', () => { + it('spawns a v2.3 birth orb in the scene', () => { const childrenBefore = scene.children.length; mapEventToEffects( @@ -168,16 +168,19 @@ describe('Event-to-Mutation Pipeline', () => { allNodes ); - // Scene should have new particles (rainbow burst + shockwave + possibly more) - expect(scene.children.length).toBeGreaterThan(childrenBefore); + // Birth orb adds a halo sprite + bright core sprite to the scene + // immediately. The arrival-cascade effects (rainbow burst, shockwaves, + // ripple wave) are deferred to the orb's onArrive callback — covered + // by the "fires arrival cascade after ritual" test below. + expect(scene.children.length).toBeGreaterThanOrEqual(childrenBefore + 2); }); - it('triggers double shockwave (second delayed)', () => { + it('fires the arrival cascade after the birth ritual completes', () => { vi.useFakeTimers(); mapEventToEffects( makeEvent('MemoryCreated', { - id: 'double-shock', + id: 'cascade-check', content: 'test', node_type: 'fact', }), @@ -185,13 +188,23 @@ describe('Event-to-Mutation Pipeline', () => { allNodes ); - const initialChildren = scene.children.length; + const afterSpawn = scene.children.length; - // Advance past the setTimeout - vi.advanceTimersByTime(200); + // Drive the effects update loop past the full ritual duration + // (gestation 48 + flight 90 = 138 frames). Each tick is one frame; + // we run 150 to give onArrive room to fire. + for (let i = 0; i < 150; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } - // Second shockwave should have been added - expect(scene.children.length).toBeGreaterThan(initialChildren); + // Advance the setTimeout that schedules the delayed second shockwave. + vi.advanceTimersByTime(250); + + // The arrival cascade should have added a rainbow burst, shockwave, + // ripple wave, and delayed second shockwave to the scene. Even after + // the orb fades out and is removed, the burst particles persist long + // enough that children.length should exceed the post-spawn count. + expect(scene.children.length).toBeGreaterThan(afterSpawn); vi.useRealTimers(); }); @@ -861,4 +874,270 @@ describe('Event-to-Mutation Pipeline', () => { expect(mutations.some((m) => m.type === 'edgeAdded')).toBe(true); }); }); + + describe('v2.3 Birth Ritual wiring', () => { + /** Count shockwave rings currently in the scene by their RingGeometry. */ + function countRings(s: InstanceType): number { + let n = 0; + for (const child of s.children) { + if (child instanceof Mesh && child.geometry instanceof RingGeometry) n++; + } + return n; + } + + /** Count Points children — rainbow bursts, spawn bursts, implosions. */ + function countPoints(s: InstanceType): number { + let n = 0; + for (const child of s.children) if (child instanceof Points) n++; + return n; + } + + /** Count Sprite children — birth orb adds a halo + core sprite. */ + function countSprites(s: InstanceType): number { + let n = 0; + for (const child of s.children) if (child instanceof Sprite) n++; + return n; + } + + it('node mesh is hidden immediately after MemoryCreated dispatch', () => { + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'ritual-create', + content: 'fresh memory', + node_type: 'fact', + }), + ctx, + allNodes + ); + + // Ritual path: mesh/glow/label are all .visible = false until + // igniteNode fires on orb arrival. + const mesh = nodeManager.meshMap.get('ritual-create')!; + const glow = nodeManager.glowMap.get('ritual-create')!; + const label = nodeManager.labelSprites.get('ritual-create')!; + expect(mesh.visible).toBe(false); + expect(glow.visible).toBe(false); + expect(label.visible).toBe(false); + + // Pending sentinel is stamped on userData. + expect(mesh.userData.birthRitualPending).toBeDefined(); + }); + + it('does NOT fire burst/ripple/shockwave at spawn (only the birth orb)', () => { + const ringsBefore = countRings(scene); + const pointsBefore = countPoints(scene); + const spritesBefore = countSprites(scene); + + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'spawn-quiet', + content: 'test', + node_type: 'fact', + }), + ctx, + allNodes + ); + + // Birth orb adds exactly 2 sprites (halo + core). NodeManager's + // addNode also adds a glow Sprite + label Sprite to the NodeManager + // GROUP, not to the scene — so spritesBefore -> after delta is +2. + expect(countSprites(scene) - spritesBefore).toBe(2); + + // No arrival-cascade effects yet: no shockwave rings, no rainbow + // burst/spawn burst/ripple particles. + expect(countRings(scene)).toBe(ringsBefore); + expect(countPoints(scene)).toBe(pointsBefore); + }); + + it('drives through the full ritual: onArrive fires, node becomes visible, scale grows', () => { + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'full-ritual', + content: 'visible after arrival', + node_type: 'fact', + }), + ctx, + allNodes + ); + + const mesh = nodeManager.meshMap.get('full-ritual')!; + expect(mesh.visible).toBe(false); + + // Drive the effects update loop past the full ritual duration + // (gestation 48 + flight 90 = 138 frames). After frame 138 the + // orb fires onArrive which ignites the node and queues materialization. + for (let i = 0; i < 140; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } + + // Node is now visible and sentinel is cleared. + expect(mesh.visible).toBe(true); + expect(mesh.userData.birthRitualPending).toBeUndefined(); + + // Run node animation a few frames to let materialization scale grow. + // Note: onArrive bumped scale by 1.8x (from 0.001 -> 0.0018), then + // materialization easeOutElastic pulls it toward targetScale. + for (let f = 0; f < 10; f++) { + nodeManager.animate(f * 0.016, allNodes, camera); + } + expect(mesh.scale.x).toBeGreaterThan(0.001); + }); + + it("Newton's Cradle — target mesh scale is multiplied by 1.8x on arrival", () => { + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'newton-cradle', + content: 'recoil test', + node_type: 'fact', + }), + ctx, + allNodes + ); + + const mesh = nodeManager.meshMap.get('newton-cradle')!; + // Pre-arrival: scale is the addNode initial 0.001. + expect(mesh.scale.x).toBeCloseTo(0.001, 6); + + // Drive just to the moment onArrive fires. Gestation (48) + + // flight (90) = 138 frames. Arrival bumps scale by 1.8x BEFORE + // materialization has run any ticks, so the scale should be + // exactly 0.001 * 1.8 = 0.0018 at that instant. We check right + // after onArrive (frame 139) — but effects.update progresses the + // orb's age counter by one each call, and on the tick where + // orb.age > totalFrames, onArrive fires. We then must NOT tick + // nodeManager.animate (or materialization would diverge the scale). + for (let i = 0; i < 140; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } + + // onArrive fired. Scale was 0.001, got multiplied by 1.8 -> 0.0018. + // Materialization is queued but hasn't run yet (no animate() calls). + expect(mesh.scale.x).toBeCloseTo(0.0018, 6); + }); + + it('dual shockwave — arrival cascade adds TWO RingGeometry meshes, not one', () => { + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'dual-shock', + content: 'layered crash', + node_type: 'fact', + }), + ctx, + allNodes + ); + + const ringsBefore = countRings(scene); + + // Drive past full ritual so onArrive fires. + for (let i = 0; i < 140; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } + + // Both shockwaves fire synchronously in the onArrive callback + // (the previous setTimeout-delayed second shockwave was dropped + // because it could outlive the scene on route change). + const ringsAfter = countRings(scene); + expect(ringsAfter - ringsBefore).toBe(2); + }); + + it('re-reads position on arrival — fires cascade at force-sim-moved position', () => { + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'moving-target', + content: 'follow the node', + node_type: 'fact', + }), + ctx, + allNodes + ); + + // Grab the spawn position, then mutate it to simulate the force + // simulation pushing the node during the ritual. + const movedPos = new Vector3(123, 456, -789); + nodeManager.positions.set('moving-target', movedPos); + + // Drive past full ritual. + for (let i = 0; i < 140; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } + + // The onArrive callback re-reads nodeManager.positions and fires + // the cascade at the LIVE position. The two shockwave Ring meshes + // should have been created at movedPos. Find them and check. + const rings = scene.children.filter( + (c) => c instanceof Mesh && c.geometry instanceof RingGeometry + ); + expect(rings.length).toBeGreaterThanOrEqual(2); + // Rings for this node: their .position copies from arrivePos at + // spawn time inside createShockwave. + const atMovedPos = rings.filter( + (r) => r.position.x === 123 && r.position.y === 456 && r.position.z === -789 + ); + expect(atMovedPos.length).toBe(2); + }); + + it('Sanhedrin abort path — removeNode before arrival prevents the regular cascade', () => { + // Spy on the three arrival-cascade emitters so we can assert + // they were NEVER called when the target is vetoed mid-ritual. + const burstSpy = vi.spyOn(effects, 'createRainbowBurst'); + const shockwaveSpy = vi.spyOn(effects, 'createShockwave'); + const rippleSpy = vi.spyOn(effects, 'createRippleWave'); + + mapEventToEffects( + makeEvent('MemoryCreated', { + id: 'vetoed', + content: 'about to be shattered', + node_type: 'fact', + }), + ctx, + allNodes + ); + + // The orb's getTargetPos() closure reads + // nodeManager.positions.get('vetoed'). Dropping the position + // directly simulates the "target gone" state that the Sanhedrin + // veto produces after dissolution completes — without needing to + // drive the full 60-frame dissolution animation. + nodeManager.positions.delete('vetoed'); + expect(nodeManager.positions.has('vetoed')).toBe(false); + + // Snapshot the orb reference before the update loop disposes it. + // The abort branch flips `aborted` and tints the halo red; we + // assert on those fields after the ritual unwinds. + const orbs = (effects as any).birthOrbs as Array<{ + sprite: { material: { color: any } }; + core: { material: { color: any } }; + aborted: boolean; + }>; + expect(orbs.length).toBe(1); + const orbRef = orbs[0]; + + // Drive effects past the full ritual. During flight the orb will + // see getTargetPos() === undefined, enter the Sanhedrin branch, + // call createImplosion (anti-birth visual) and SKIP onArrive — + // so the regular rainbow-burst + dual-shockwave + ripple cascade + // never fires. + for (let i = 0; i < 200; i++) { + effects.update(nodeManager.meshMap, camera, nodeManager.positions); + } + + // Core assertion: the three regular-cascade emitters were never + // invoked for the vetoed node. + expect(burstSpy).not.toHaveBeenCalled(); + expect(shockwaveSpy).not.toHaveBeenCalled(); + expect(rippleSpy).not.toHaveBeenCalled(); + + // Also confirm the orb actually took the abort branch, not the + // gestation-only no-op path (otherwise this test would pass for + // the wrong reason). The aborted flag is set exactly once inside + // the Sanhedrin branch. + expect(orbRef.aborted).toBe(true); + expect(orbRef.sprite.material.color.r).toBeCloseTo(1.0, 3); + expect(orbRef.sprite.material.color.g).toBeCloseTo(0.15, 3); + + burstSpy.mockRestore(); + shockwaveSpy.mockRestore(); + rippleSpy.mockRestore(); + }); + }); }); diff --git a/apps/dashboard/src/lib/graph/__tests__/nodes.test.ts b/apps/dashboard/src/lib/graph/__tests__/nodes.test.ts index 3d533f8..26b997f 100644 --- a/apps/dashboard/src/lib/graph/__tests__/nodes.test.ts +++ b/apps/dashboard/src/lib/graph/__tests__/nodes.test.ts @@ -453,4 +453,201 @@ describe('NodeManager', () => { // The dispose method clears materializingNodes, dissolvingNodes, growingNodes }); }); + + describe('Birth Ritual integration', () => { + it('addNode with isBirthRitual:true hides mesh, glow, and label immediately', () => { + const node = makeNode({ id: 'ritual-1' }); + manager.addNode(node, new Vector3(5, 5, 5), { isBirthRitual: true }); + + const mesh = manager.meshMap.get('ritual-1')!; + const glow = manager.glowMap.get('ritual-1')!; + const label = manager.labelSprites.get('ritual-1')!; + + expect(mesh.visible).toBe(false); + expect(glow.visible).toBe(false); + expect(label.visible).toBe(false); + }); + + it('addNode with isBirthRitual:true stores a pending sentinel on mesh.userData', () => { + const node = makeNode({ id: 'ritual-sentinel', retention: 0.75 }); + manager.addNode(node, new Vector3(0, 0, 0), { isBirthRitual: true }); + + const mesh = manager.meshMap.get('ritual-sentinel')!; + const pending = mesh.userData.birthRitualPending as any; + expect(pending).toBeDefined(); + expect(pending.totalFrames).toBe(30); + // targetScale = 0.5 + retention * 2 = 0.5 + 0.75 * 2 = 2.0 + expect(pending.targetScale).toBeCloseTo(2.0, 3); + }); + + it('addNode with isBirthRitual:true does NOT enqueue materialization', () => { + const ritualNode = makeNode({ id: 'ritual-pending', retention: 0.8 }); + manager.addNode(ritualNode, new Vector3(10, 10, 10), { isBirthRitual: true }); + + // In the real runtime the ritual-pending node is .visible=false + // AND is not yet in the GraphNode[] list — it only gets added to + // the visible node list once igniteNode flips its visibility and + // materialization kicks in. So we pass an empty `nodes` array to + // animate(), which also exercises that the breathing loop skips + // meshes absent from the nodes array. + const camera = { position: new Vector3(0, 30, 80) } as any; + for (let f = 0; f < 40; f++) { + manager.animate(f * 0.016, [], camera); + } + + const mesh = manager.meshMap.get('ritual-pending')!; + // Materialization queue never pushed — a regular materializing + // node would be at scale ≈ targetScale = 2.1 by frame 40. The + // ritual-pending node stays at its addNode initial 0.001 because + // no animation loop is mutating its scale. + expect(mesh.scale.x).toBeCloseTo(0.001, 3); + + // Stronger invariant — the sentinel is still there, confirming + // the node never got handed off to the materialization queue. + expect(mesh.userData.birthRitualPending).toBeDefined(); + }); + + it('addNode without opts proceeds with normal materialization (old behavior)', () => { + const node = makeNode({ id: 'normal-spawn' }); + manager.addNode(node, new Vector3(1, 2, 3)); + + const mesh = manager.meshMap.get('normal-spawn')!; + const glow = manager.glowMap.get('normal-spawn')!; + const label = manager.labelSprites.get('normal-spawn')!; + + // Default mesh.visible is true in three-mock (Object3D has no explicit field). + // Key invariant: visible is NOT explicitly false like the ritual path. + expect(mesh.visible).not.toBe(false); + expect(glow.visible).not.toBe(false); + expect(label.visible).not.toBe(false); + + // And no pending sentinel + expect(mesh.userData.birthRitualPending).toBeUndefined(); + + // Animation should proceed — scale grows via easeOutElastic + const camera = { position: new Vector3(0, 30, 80) } as any; + for (let f = 0; f < 20; f++) { + manager.animate(f * 0.016, [node], camera); + } + expect(mesh.scale.x).toBeGreaterThan(0.1); + }); + + it('igniteNode flips all three visibility flags and queues materialization', () => { + const node = makeNode({ id: 'to-ignite', retention: 0.6 }); + manager.addNode(node, new Vector3(0, 0, 0), { isBirthRitual: true }); + + // Pre-ignite: hidden + const mesh = manager.meshMap.get('to-ignite')!; + const glow = manager.glowMap.get('to-ignite')!; + const label = manager.labelSprites.get('to-ignite')!; + expect(mesh.visible).toBe(false); + + manager.igniteNode('to-ignite'); + + // Post-ignite: visible + expect(mesh.visible).toBe(true); + expect(glow.visible).toBe(true); + expect(label.visible).toBe(true); + + // Sentinel is gone + expect(mesh.userData.birthRitualPending).toBeUndefined(); + + // Materialization was queued — drive animation and the scale + // should grow past the initial 0.001. + const camera = { position: new Vector3(0, 30, 80) } as any; + for (let f = 0; f < 15; f++) { + manager.animate(f * 0.016, [node], camera); + } + expect(mesh.scale.x).toBeGreaterThan(0.1); + }); + + it('igniteNode called twice is idempotent (second call is a no-op)', () => { + const node = makeNode({ id: 'double-ignite', retention: 0.5 }); + manager.addNode(node, new Vector3(0, 0, 0), { isBirthRitual: true }); + + manager.igniteNode('double-ignite'); + // Capture scale after one round of animation + const camera = { position: new Vector3(0, 30, 80) } as any; + for (let f = 0; f < 10; f++) { + manager.animate(f * 0.016, [node], camera); + } + const scaleAfterFirst = manager.meshMap.get('double-ignite')!.scale.x; + + // Second ignite — should NOT push a duplicate materialization entry. + // If it did, the extra entry (starting at frame 0) would restart + // the scale back near 0.001 or at least visibly reset it. + manager.igniteNode('double-ignite'); + for (let f = 0; f < 5; f++) { + manager.animate((f + 10) * 0.016, [node], camera); + } + const scaleAfterSecond = manager.meshMap.get('double-ignite')!.scale.x; + + // Scale after second ignite should be greater than or roughly equal + // to scale after first, NOT reset toward 0.001. A duplicate entry + // starting at frame 0 would pull the mesh back near zero on the + // very first subsequent animate() tick via mn.mesh.scale.setScalar. + expect(scaleAfterSecond).toBeGreaterThanOrEqual(scaleAfterFirst * 0.5); + }); + + it('igniteNode on a regular (non-ritual) node is a no-op', () => { + const node = makeNode({ id: 'regular', retention: 0.5 }); + manager.addNode(node, new Vector3(0, 0, 0)); + // Regular addNode already queued materialization. Capture state. + const mesh = manager.meshMap.get('regular')!; + const visBefore = mesh.visible; + + // Call igniteNode — there's no pending sentinel, should short-circuit. + expect(() => manager.igniteNode('regular')).not.toThrow(); + + // No pending sentinel means the function returns early after the + // sentinel check, so nothing about the mesh changes. + expect(mesh.visible).toBe(visBefore); + expect(mesh.userData.birthRitualPending).toBeUndefined(); + }); + + it('igniteNode on unknown id is a no-op (no throw)', () => { + expect(() => manager.igniteNode('does-not-exist')).not.toThrow(); + expect(manager.meshMap.has('does-not-exist')).toBe(false); + }); + + it('position is stored in positions map even when the node is invisible', () => { + const node = makeNode({ id: 'invisible-but-positioned' }); + const spawnPos = new Vector3(42, -17, 8); + manager.addNode(node, spawnPos, { isBirthRitual: true }); + + // Force simulation + orb getTargetPos() both rely on positions + // being live immediately — the ritual only hides visuals, not + // physics state. + const stored = manager.positions.get('invisible-but-positioned'); + expect(stored).toBeDefined(); + expect(stored!.x).toBe(42); + expect(stored!.y).toBe(-17); + expect(stored!.z).toBe(8); + + // And the mesh itself is still hidden + expect(manager.meshMap.get('invisible-but-positioned')!.visible).toBe(false); + }); + + it('removeNode during pending ritual cancels without materialization', () => { + // Sanhedrin abort path at the NodeManager level: a ritual-pending + // node gets removed before igniteNode fires. The remove path + // should still work (dissolution queue takes over) and igniteNode + // called later must not resurrect it. + const node = makeNode({ id: 'aborted-ritual' }); + manager.addNode(node, new Vector3(0, 0, 0), { isBirthRitual: true }); + + manager.removeNode('aborted-ritual'); + + // Dissolution progresses past totalFrames = 60 and clears state. + const camera = { position: new Vector3(0, 30, 80) } as any; + for (let f = 0; f < 65; f++) { + manager.animate(f * 0.016, [node], camera); + } + + expect(manager.meshMap.has('aborted-ritual')).toBe(false); + + // And a late igniteNode call on the dead id is a safe no-op. + expect(() => manager.igniteNode('aborted-ritual')).not.toThrow(); + }); + }); }); diff --git a/apps/dashboard/src/lib/graph/__tests__/three-mock.ts b/apps/dashboard/src/lib/graph/__tests__/three-mock.ts index b665ed7..e6afd57 100644 --- a/apps/dashboard/src/lib/graph/__tests__/three-mock.ts +++ b/apps/dashboard/src/lib/graph/__tests__/three-mock.ts @@ -93,6 +93,52 @@ export class Vector3 { this.z = s; return this; } + + addVectors(a: Vector3, b: Vector3) { + this.x = a.x + b.x; + this.y = a.y + b.y; + this.z = a.z + b.z; + return this; + } + + applyQuaternion(_q: Quaternion) { + // Mock: identity transform. Tests don't care about actual + // camera-relative positioning; production uses real THREE math. + return this; + } +} + +export class Quaternion { + x = 0; + y = 0; + z = 0; + w = 1; +} + +export class QuadraticBezierCurve3 { + v0: Vector3; + v1: Vector3; + v2: Vector3; + constructor(v0: Vector3, v1: Vector3, v2: Vector3) { + this.v0 = v0; + this.v1 = v1; + this.v2 = v2; + } + getPoint(t: number): Vector3 { + // Standard quadratic Bezier evaluation, faithful enough for tests + // that only care that points land on the curve. + const one = 1 - t; + return new Vector3( + one * one * this.v0.x + 2 * one * t * this.v1.x + t * t * this.v2.x, + one * one * this.v0.y + 2 * one * t * this.v1.y + t * t * this.v2.y, + one * one * this.v0.z + 2 * one * t * this.v1.z + t * t * this.v2.z + ); + } +} + +export class Texture { + needsUpdate = false; + dispose() {} } export class Vector2 { @@ -157,6 +203,20 @@ export class Color { offsetHSL(_h: number, _s: number, _l: number) { return this; } + + multiplyScalar(s: number) { + this.r *= s; + this.g *= s; + this.b *= s; + return this; + } + + setRGB(r: number, g: number, b: number) { + this.r = r; + this.g = g; + this.b = b; + return this; + } } export class BufferAttribute { @@ -329,6 +389,8 @@ export class SpriteMaterial extends BaseMaterial { export class Object3D { position = new Vector3(); scale = new Vector3(1, 1, 1); + quaternion = new Quaternion(); + renderOrder = 0; userData: Record = {}; children: Object3D[] = []; parent: Object3D | null = null; @@ -428,6 +490,9 @@ export function installThreeMock() { Vector3, Vector2, Color, + Quaternion, + QuadraticBezierCurve3, + Texture, BufferAttribute, BufferGeometry, SphereGeometry, diff --git a/apps/dashboard/src/lib/graph/effects.ts b/apps/dashboard/src/lib/graph/effects.ts index 1402476..ccae736 100644 --- a/apps/dashboard/src/lib/graph/effects.ts +++ b/apps/dashboard/src/lib/graph/effects.ts @@ -1,4 +1,5 @@ import * as THREE from 'three'; +import { getGlowTexture } from './nodes'; export interface PulseEffect { nodeId: string; @@ -49,6 +50,33 @@ interface ConnectionFlash { intensity: number; } +// v2.3 Memory Birth Ritual. The orb gestates at a camera-relative "cosmic +// center" point for `gestationFrames`, then flies along a dynamic quadratic +// Bezier curve to the live position of its target node for `flightFrames`, +// then calls `onArrive` and disposes itself. The target position is +// resolved via `getTargetPos` on every frame so the force simulation can +// move the node during the flight and the orb stays glued to it. +interface BirthOrb { + sprite: THREE.Sprite; + core: THREE.Sprite; + startPos: THREE.Vector3; + getTargetPos: () => THREE.Vector3 | undefined; + color: THREE.Color; + age: number; + gestationFrames: number; + flightFrames: number; + arriveFired: boolean; + onArrive: () => void; + /** Last known target position. If the target disappears mid-flight we keep + * using this snapshot so the orb still lands somewhere sensible. */ + lastTargetPos: THREE.Vector3; + /** v2.3: Sanhedrin-Shatter state. Set true when getTargetPos returns + * undefined after gestation — the Stop hook deleted the target node + * mid-ritual, so we short-circuit the arrival cascade and implode + * the orb in place as the "cognitive immune system" visual. */ + aborted: boolean; +} + export class EffectManager { pulseEffects: PulseEffect[] = []; private spawnBursts: SpawnBurst[] = []; @@ -57,6 +85,7 @@ export class EffectManager { private implosions: ImplosionEffect[] = []; private shockwaves: Shockwave[] = []; private connectionFlashes: ConnectionFlash[] = []; + private birthOrbs: BirthOrb[] = []; private scene: THREE.Scene; constructor(scene: THREE.Scene) { @@ -231,6 +260,89 @@ export class EffectManager { this.connectionFlashes.push({ line, intensity: 1.0 }); } + /** + * v2.3 Memory Birth Ritual. Spawn a glowing orb at a point in front of the + * camera ("cosmic center"), gestate for ~800ms, then arc along a quadratic + * Bezier curve to the live position of the target node, which is resolved + * on every frame via `getTargetPos`. On arrival, `onArrive` fires — caller + * is responsible for adding the real node to the graph and triggering + * arrival-time bursts. + * + * The target getter can return undefined if the node has been removed + * mid-flight; the orb then flies to the last known target position so the + * burst still fires somewhere coherent rather than snapping to origin. + */ + createBirthOrb( + camera: THREE.Camera, + color: THREE.Color, + getTargetPos: () => THREE.Vector3 | undefined, + onArrive: () => void, + opts: { gestationFrames?: number; flightFrames?: number; distanceFromCamera?: number } = {} + ) { + const gestationFrames = opts.gestationFrames ?? 48; // ~800ms + const flightFrames = opts.flightFrames ?? 90; // ~1500ms + const distanceFromCamera = opts.distanceFromCamera ?? 40; + + // Place the orb slightly in front of the camera, in view-space, + // projected back into world coordinates. This way the orb always + // appears "right in front of the user's face" regardless of where + // the camera has been orbited to. + const startPos = new THREE.Vector3(0, 0, -distanceFromCamera) + .applyQuaternion(camera.quaternion) + .add(camera.position); + + // Outer glow halo + const haloMat = new THREE.SpriteMaterial({ + map: getGlowTexture(), + color: color.clone(), + transparent: true, + opacity: 0.0, + blending: THREE.AdditiveBlending, + depthWrite: false, + depthTest: false, // always visible, even through other nodes + }); + const sprite = new THREE.Sprite(haloMat); + sprite.position.copy(startPos); + sprite.scale.set(0.5, 0.5, 1); + sprite.renderOrder = 999; + + // Inner bright core — stays hot white during gestation, tints at launch + const coreMat = new THREE.SpriteMaterial({ + map: getGlowTexture(), + color: new THREE.Color(0xffffff), + transparent: true, + opacity: 0.0, + blending: THREE.AdditiveBlending, + depthWrite: false, + depthTest: false, + }); + const core = new THREE.Sprite(coreMat); + core.position.copy(startPos); + core.scale.set(0.2, 0.2, 1); + core.renderOrder = 1000; + + this.scene.add(sprite); + this.scene.add(core); + + // Snapshot the current target so we have a fallback. + const initialTarget = getTargetPos()?.clone() ?? startPos.clone(); + + this.birthOrbs.push({ + sprite, + core, + startPos, + getTargetPos, + color: color.clone(), + age: 0, + gestationFrames, + flightFrames, + arriveFired: false, + onArrive, + lastTargetPos: initialTarget, + aborted: false, + }); + } + update( nodeMeshMap: Map, camera: THREE.Camera, @@ -431,6 +543,122 @@ export class EffectManager { } (flash.line.material as THREE.LineBasicMaterial).opacity = flash.intensity; } + + // v2.3 Birth orbs — gestate at cosmic center, then arc to live node + // position along a quadratic Bezier curve. Target position is + // re-resolved every frame so the force simulation can move the + // destination during flight without the orb losing its mark. + for (let i = this.birthOrbs.length - 1; i >= 0; i--) { + const orb = this.birthOrbs[i]; + orb.age++; + const totalFrames = orb.gestationFrames + orb.flightFrames; + + const haloMat = orb.sprite.material as THREE.SpriteMaterial; + const coreMat = orb.core.material as THREE.SpriteMaterial; + + // Refresh the live target snapshot. If the target getter returns + // undefined DURING flight (not just at spawn), the node was + // aborted mid-ritual — typically a Sanhedrin veto deleting a + // hallucination node while the orb was still in transit. Trigger + // the anti-birth: turn red, implode in place, stop tracking. + const live = orb.getTargetPos(); + if (live) { + orb.lastTargetPos.copy(live); + } else if (orb.age > orb.gestationFrames && !orb.aborted) { + orb.aborted = true; + // Fire an implosion where the orb currently is, then splice + // out on the next tick by jumping age to the end of life. + const pos = orb.sprite.position; + haloMat.color.setRGB(1.0, 0.15, 0.2); // blood red + coreMat.color.setRGB(1.0, 0.6, 0.6); + this.createImplosion(pos, new THREE.Color(0xff2533)); + orb.arriveFired = true; + orb.age = totalFrames + 1; + } + + if (orb.age <= orb.gestationFrames) { + // Gestation phase — pulse brighter + grow from a tiny spark + // into a full orb. Sits still at the cosmic center. + const t = orb.age / orb.gestationFrames; + const ease = 1 - Math.pow(1 - t, 3); // easeOutCubic + const pulse = 0.85 + Math.sin(orb.age * 0.35) * 0.15; + const haloScale = 0.5 + ease * 4.5 * pulse; + const coreScale = 0.2 + ease * 1.8 * pulse; + orb.sprite.scale.set(haloScale, haloScale, 1); + orb.core.scale.set(coreScale, coreScale, 1); + haloMat.opacity = ease * 0.95; + coreMat.opacity = ease; + // Subtle warm-up — core white, halo tints toward the event + // color as gestation completes. + haloMat.color.copy(orb.color).multiplyScalar(0.7 + ease * 0.3); + orb.sprite.position.copy(orb.startPos); + orb.core.position.copy(orb.startPos); + } else if (orb.age <= totalFrames) { + // Flight phase — inline quadratic Bezier eval. Zero-alloc: + // no new Vector3 or QuadraticBezierCurve3 per frame, which + // would flood the GC when several orbs are in flight. + const t = (orb.age - orb.gestationFrames) / orb.flightFrames; + const ease = t < 0.5 + ? 2 * t * t + : 1 - Math.pow(-2 * t + 2, 2) / 2; // easeInOutQuad + + const s = orb.startPos; + const tgt = orb.lastTargetPos; + const dx = tgt.x - s.x; + const dy = tgt.y - s.y; + const dz = tgt.z - s.z; + const dist = Math.sqrt(dx * dx + dy * dy + dz * dz); + const cx = (s.x + tgt.x) * 0.5; + const cy = (s.y + tgt.y) * 0.5 + 30 + dist * 0.15; + const cz = (s.z + tgt.z) * 0.5; + + const oneMinusE = 1 - ease; + const w0 = oneMinusE * oneMinusE; + const w1 = 2 * oneMinusE * ease; + const w2 = ease * ease; + const px = w0 * s.x + w1 * cx + w2 * tgt.x; + const py = w0 * s.y + w1 * cy + w2 * tgt.y; + const pz = w0 * s.z + w1 * cz + w2 * tgt.z; + + orb.sprite.position.set(px, py, pz); + orb.core.position.set(px, py, pz); + + // Trail effect — shrink + brighten as it approaches target + const shrink = 1 - ease * 0.35; + orb.sprite.scale.setScalar(5 * shrink); + orb.core.scale.setScalar(2 * shrink); + haloMat.opacity = 0.95; + coreMat.opacity = 1.0; + // Shift halo fully to the event color during flight + haloMat.color.copy(orb.color); + } else if (!orb.arriveFired) { + // Docking — fire the arrival callback once. Let the caller + // trigger burst/ripple effects at the exact target point. + orb.arriveFired = true; + try { + orb.onArrive(); + } catch (e) { + // Effects must never take down the render loop. + // eslint-disable-next-line no-console + console.warn('[birth-orb] onArrive threw', e); + } + // Fade the orb out over a few more frames instead of popping. + } else { + // Post-arrival fade (8 frames ≈ 130ms) + const fadeAge = orb.age - totalFrames; + const fade = Math.max(0, 1 - fadeAge / 8); + haloMat.opacity = 0.95 * fade; + coreMat.opacity = 1.0 * fade; + orb.sprite.scale.setScalar(5 * (1 + (1 - fade) * 2)); + if (fade <= 0) { + this.scene.remove(orb.sprite); + this.scene.remove(orb.core); + haloMat.dispose(); + coreMat.dispose(); + this.birthOrbs.splice(i, 1); + } + } + } } dispose() { @@ -464,6 +692,12 @@ export class EffectManager { flash.line.geometry.dispose(); (flash.line.material as THREE.Material).dispose(); } + for (const orb of this.birthOrbs) { + this.scene.remove(orb.sprite); + this.scene.remove(orb.core); + (orb.sprite.material as THREE.Material).dispose(); + (orb.core.material as THREE.Material).dispose(); + } this.pulseEffects = []; this.spawnBursts = []; this.rainbowBursts = []; @@ -471,5 +705,6 @@ export class EffectManager { this.implosions = []; this.shockwaves = []; this.connectionFlashes = []; + this.birthOrbs = []; } } diff --git a/apps/dashboard/src/lib/graph/events.ts b/apps/dashboard/src/lib/graph/events.ts index b13ce22..31fd3cc 100644 --- a/apps/dashboard/src/lib/graph/events.ts +++ b/apps/dashboard/src/lib/graph/events.ts @@ -125,25 +125,59 @@ export function mapEventToEffects( // Find spawn position near related nodes const spawnPos = findSpawnPosition(newNode, allNodes, nodePositions); - // Add to all managers - const pos = nodeManager.addNode(newNode, spawnPos); + // Reserve the physics slot but hide the node until the orb docks. + // `isBirthRitual:true` skips the 30-frame materialization push, so + // the mesh/glow/label stay invisible; `igniteNode` below flips + // visibility and kicks off the elastic scale-up AT the exact + // millisecond the orb lands — not 100 frames before. + const pos = nodeManager.addNode(newNode, spawnPos, { isBirthRitual: true }); forceSim.addNode(data.id, pos); // FIFO eviction liveSpawnedNodes.push(data.id); evictOldestLiveNode(ctx, allNodes); - // Spectacular effects: rainbow burst + double shockwave + ripple wave + // v2.3 Memory Birth Ritual — cosmic-center orb, Bezier flight, + // arrival burst cascade. The burst/ripple/shockwave cascade + // fires on arrival at the docking target, not at spawn, so the + // eye tracks the orb in and the visuals peak on contact. const color = new THREE.Color(NODE_TYPE_COLORS[newNode.type] || '#00ffd1'); - effects.createRainbowBurst(spawnPos, color); - effects.createShockwave(spawnPos, color, camera); - // Second shockwave, hue-shifted, delayed via smaller initial scale const hueShifted = color.clone(); hueShifted.offsetHSL(0.15, 0, 0); - setTimeout(() => { - effects.createShockwave(spawnPos, hueShifted, camera); - }, 166); // ~10 frames at 60fps - effects.createRippleWave(spawnPos); + + effects.createBirthOrb( + camera, + color, + // Re-resolve the live target position every frame — the node + // is being pushed around by the force sim during flight. + // Returning undefined here signals "node was aborted" and + // triggers the Sanhedrin-Shatter anti-birth in effects.ts. + () => nodeManager.positions.get(newNode.id), + () => { + // Dock. Ignite the node (flips visibility + starts + // materialization) and fire the arrival cascade at the + // node's CURRENT position — the force sim may have moved + // the target during the ritual, so we re-read positions. + nodeManager.igniteNode(newNode.id); + const arrivePos = nodeManager.positions.get(newNode.id) ?? spawnPos; + + // Newton's Cradle — kinetic transfer into the graph. + // Bump the mesh scale on impact so the easeOutElastic + // materialization + force-sim springs physically recoil + // instead of the orb docking silently. + const mesh = nodeManager.meshMap.get(newNode.id); + if (mesh) mesh.scale.multiplyScalar(1.8); + + effects.createRainbowBurst(arrivePos, color); + effects.createShockwave(arrivePos, color, camera); + // Fire BOTH shockwaves immediately (different scales / + // colors for layered crash feel). The previous 166ms + // setTimeout could outlive the scene on route change + // and throw an unhandled rejection. + effects.createShockwave(arrivePos, hueShifted, camera); + effects.createRippleWave(arrivePos); + } + ); onMutation({ type: 'nodeAdded', node: newNode }); break; diff --git a/apps/dashboard/src/lib/graph/nodes.ts b/apps/dashboard/src/lib/graph/nodes.ts index 0fef301..b075851 100644 --- a/apps/dashboard/src/lib/graph/nodes.ts +++ b/apps/dashboard/src/lib/graph/nodes.ts @@ -67,7 +67,7 @@ export function getNodeColor(node: GraphNode, mode: ColorMode): string { // hard-edged "glowing cubes" artefact reported in issue #31. Using a // soft radial gradient gives a real round halo and lets bloom do its job. let sharedGlowTexture: THREE.Texture | null = null; -function getGlowTexture(): THREE.Texture { +export function getGlowTexture(): THREE.Texture { if (sharedGlowTexture) return sharedGlowTexture; const size = 128; const canvas = document.createElement('canvas'); @@ -271,7 +271,11 @@ export class NodeManager { return { mesh, glow: sprite, label: labelSprite, size }; } - addNode(node: GraphNode, initialPosition?: THREE.Vector3): THREE.Vector3 { + addNode( + node: GraphNode, + initialPosition?: THREE.Vector3, + options: { isBirthRitual?: boolean } = {} + ): THREE.Vector3 { const pos = initialPosition?.clone() ?? new THREE.Vector3( @@ -289,17 +293,62 @@ export class NodeManager { (glow.material as THREE.SpriteMaterial).opacity = 0; (label.material as THREE.SpriteMaterial).opacity = 0; + if (options.isBirthRitual) { + // v2.3 Birth Ritual: reserve the physics slot but don't show + // anything until the orb docks. Hiding via .visible keeps the + // force simulation + positions map fully active, so getTargetPos() + // can still resolve the live destination for the orb. `igniteNode` + // below flips visibility and kicks off the materialization anim. + mesh.visible = false; + glow.visible = false; + label.visible = false; + mesh.userData.birthRitualPending = { + totalFrames: 30, + targetScale: 0.5 + node.retention * 2, + }; + } else { + this.materializingNodes.push({ + id: node.id, + frame: 0, + totalFrames: 30, + mesh, + glow, + label, + targetScale: 0.5 + node.retention * 2, + }); + } + + return pos; + } + + /** + * v2.3 Birth Ritual docking. Flip visibility and hand the node over to + * the materialization queue so it springs up via easeOutElastic at the + * exact moment the orb hits. No-op if the node wasn't created with + * `isBirthRitual:true` or was already ignited. + */ + igniteNode(id: string) { + const mesh = this.meshMap.get(id); + const glow = this.glowMap.get(id); + const label = this.labelSprites.get(id); + if (!mesh || !glow || !label) return; + const pending = mesh.userData.birthRitualPending as + | { totalFrames: number; targetScale: number } + | undefined; + if (!pending) return; + mesh.visible = true; + glow.visible = true; + label.visible = true; + delete mesh.userData.birthRitualPending; this.materializingNodes.push({ - id: node.id, + id, frame: 0, - totalFrames: 30, + totalFrames: pending.totalFrames, mesh, glow, label, - targetScale: 0.5 + node.retention * 2, + targetScale: pending.targetScale, }); - - return pos; } removeNode(id: string) { @@ -446,7 +495,12 @@ export class NodeManager { }); } - animate(time: number, nodes: GraphNode[], camera: THREE.PerspectiveCamera) { + animate( + time: number, + nodes: GraphNode[], + camera: THREE.PerspectiveCamera, + brightness: number = 1.0 + ) { // Materialization animations — elastic scale-up from 0 for (let i = this.materializingNodes.length - 1; i >= 0; i--) { const mn = this.materializingNodes[i]; @@ -552,16 +606,38 @@ export class NodeManager { 1 + Math.sin(time * 1.5 + nodes.indexOf(node) * 0.5) * 0.15 * node.retention; mesh.scale.setScalar(breathe); + // Distance compensation: FogExp2 attenuates exponentially with camera + // distance, so nodes past ~80 units go nearly black unless we push + // emissive harder. Boost runs 1.0x at <60 units → ~2.4x at 200 units. + // Combined with the user brightness multiplier this gives a visible + // floor at every zoom level without blowing out close-up highlights. + const pos = this.positions.get(id); + const dist = pos ? camera.position.distanceTo(pos) : 0; + const distanceBoost = 1 + Math.min(1.4, Math.max(0, (dist - 60) / 100)); + const mat = mesh.material as THREE.MeshStandardMaterial; if (id === this.hoveredNode) { - mat.emissiveIntensity = 1.0; + mat.emissiveIntensity = 1.0 * brightness; } else if (id === this.selectedNode) { - mat.emissiveIntensity = 0.8; + mat.emissiveIntensity = 0.8 * brightness; } else { const baseIntensity = 0.3 + node.retention * 0.5; const breatheIntensity = baseIntensity + Math.sin(time * (0.8 + node.retention * 0.7)) * 0.1 * node.retention; - mat.emissiveIntensity = breatheIntensity; + mat.emissiveIntensity = breatheIntensity * brightness * distanceBoost; + } + + // Opacity also gets the distance boost (capped at 1.0) so the node + // body stays visible against the dark void at far zoom. + const baseOpacity = 0.3 + node.retention * 0.7; + mat.opacity = Math.min(1.0, baseOpacity * brightness * distanceBoost); + + // Mirror the boost onto the glow sprite so the halo tracks the core. + const glow = this.glowMap.get(id); + if (glow) { + const glowMat = glow.material as THREE.SpriteMaterial; + const baseGlow = 0.3 + node.retention * 0.35; + glowMat.opacity = Math.min(0.95, baseGlow * brightness * distanceBoost); } }); diff --git a/apps/dashboard/src/lib/graph/scene.ts b/apps/dashboard/src/lib/graph/scene.ts index 6f05cca..00713d7 100644 --- a/apps/dashboard/src/lib/graph/scene.ts +++ b/apps/dashboard/src/lib/graph/scene.ts @@ -90,8 +90,15 @@ export function createScene(container: HTMLDivElement): SceneContext { controls.dampingFactor = 0.05; controls.rotateSpeed = 0.5; controls.zoomSpeed = 0.8; - controls.minDistance = 10; - controls.maxDistance = 500; + // Distance clamps — the camera starts at ~86 units from origin + // (position.set(0, 30, 80)). The graph's force-directed layout seats + // most nodes within a ~120-unit radius. 500 was dramatically out of + // scale — the user could zoom out until every node was one pixel on + // a black starfield (issue reported 2026-04-23). 180 keeps the full + // graph in frame with nodes still readable; 12 prevents zooming inside + // a node and losing orientation. + controls.minDistance = 12; + controls.maxDistance = 180; controls.autoRotate = true; controls.autoRotateSpeed = 0.3; diff --git a/apps/dashboard/src/lib/stores/__tests__/theme.test.ts b/apps/dashboard/src/lib/stores/__tests__/theme.test.ts new file mode 100644 index 0000000..46d8e33 --- /dev/null +++ b/apps/dashboard/src/lib/stores/__tests__/theme.test.ts @@ -0,0 +1,496 @@ +/** + * Unit tests for the theme store. + * + * Scope: pure-store behavior — setter validation, cycle order, derived + * resolution, localStorage persistence + fallback, matchMedia listener + * wiring, idempotent style injection, SSR safety. + * + * Environment notes: + * - Vitest runs in Node (no jsdom). We fabricate the window / document / + * localStorage / matchMedia globals the store touches, then mock + * `$app/environment` so `browser` flips between true and false per + * test group. SSR tests leave `browser` false and verify no globals + * are touched. + * - The store caches module-level state (mediaQuery, listener, + * resolvedUnsub). We `vi.resetModules()` before every test so each + * loadTheme() returns a pristine instance. + */ +import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'; +import { get } from 'svelte/store'; + +// --- Controllable `browser` flag ------------------------------------------ +// vi.mock is hoisted — we reference a module-level `browserFlag` the tests +// mutate between blocks. Casting via globalThis keeps the hoist happy. +const browserState = { value: true }; +vi.mock('$app/environment', () => ({ + get browser() { + return browserState.value; + }, +})); + +// --- Fabricated DOM / storage / matchMedia -------------------------------- +// Each test's setup wires these onto globalThis so the store's `browser` +// branch can read them. They are intentionally minimal — only the methods +// theme.ts actually calls are implemented. + +type FakeMediaListener = (e: { matches: boolean }) => void; + +interface FakeMediaQueryList { + matches: boolean; + addEventListener: (type: 'change', listener: FakeMediaListener) => void; + removeEventListener: (type: 'change', listener: FakeMediaListener) => void; + // Test-only helpers + _emit: (matches: boolean) => void; + _listenerCount: () => number; +} + +function createFakeMediaQuery(initialMatches: boolean): FakeMediaQueryList { + const listeners = new Set(); + return { + matches: initialMatches, + addEventListener: (_type, listener) => { + listeners.add(listener); + }, + removeEventListener: (_type, listener) => { + listeners.delete(listener); + }, + _emit(matches: boolean) { + this.matches = matches; + for (const l of listeners) l({ matches }); + }, + _listenerCount() { + return listeners.size; + }, + }; +} + +interface FakeStorageBehavior { + throwOnGet?: boolean; + throwOnSet?: boolean; + corruptRaw?: string | null; +} + +function installFakeLocalStorage(behavior: FakeStorageBehavior = {}) { + const store = new Map(); + if (behavior.corruptRaw !== undefined && behavior.corruptRaw !== null) { + store.set('vestige.theme', behavior.corruptRaw); + } + const fake = { + getItem: (key: string) => { + if (behavior.throwOnGet) throw new Error('SecurityError: storage disabled'); + return store.has(key) ? store.get(key)! : null; + }, + setItem: (key: string, value: string) => { + if (behavior.throwOnSet) throw new Error('QuotaExceededError'); + store.set(key, value); + }, + removeItem: (key: string) => { + store.delete(key); + }, + clear: () => store.clear(), + key: () => null, + length: 0, + _store: store, // test-only peek + }; + vi.stubGlobal('localStorage', fake); + return fake; +} + +/** + * Install a fake `document` with only the APIs theme.ts calls: + * - getElementById (style-dedup check) + * - createElement('style') + * - head.appendChild + * - documentElement.dataset + * Returns handles so tests can inspect the head children and data-theme. + */ +function installFakeDocument() { + const headChildren: Array<{ id: string; textContent: string; tagName: string }> = []; + const docEl = { + dataset: {} as Record, + }; + const fakeDocument = { + getElementById: (id: string) => + headChildren.find((el) => el.id === id) ?? null, + createElement: (tag: string) => ({ + id: '', + textContent: '', + tagName: tag.toUpperCase(), + }), + head: { + appendChild: (el: { id: string; textContent: string; tagName: string }) => { + headChildren.push(el); + return el; + }, + }, + documentElement: docEl, + }; + vi.stubGlobal('document', fakeDocument); + return { fakeDocument, headChildren, docEl }; +} + +/** + * Install a fake `window` with just `matchMedia`. We keep the returned + * MQL handle so tests can emit change events. + */ +function installFakeWindow(initialPrefersDark: boolean) { + const mql = createFakeMediaQuery(initialPrefersDark); + const fakeWindow = { + matchMedia: vi.fn(() => mql), + }; + vi.stubGlobal('window', fakeWindow); + return { fakeWindow, mql }; +} + +/** + * Fresh module import. The theme store caches matchMedia/listener handles + * at module level, so every test that exercises initTheme wants a clean + * copy. Returns the full export surface. + */ +async function loadTheme() { + vi.resetModules(); + return await import('../theme'); +} + +// Baseline: every test starts with browser=true, fake window/doc/storage +// installed, and fresh module state. SSR-specific tests override these. +beforeEach(() => { + browserState.value = true; + installFakeDocument(); + installFakeWindow(true); // system prefers dark by default + installFakeLocalStorage(); +}); + +afterEach(() => { + vi.unstubAllGlobals(); +}); + +// --------------------------------------------------------------------------- +// Export surface +// --------------------------------------------------------------------------- +describe('theme store — exports', () => { + it('exports theme writable, resolvedTheme derived, setTheme, cycleTheme, initTheme', async () => { + const mod = await loadTheme(); + expect(mod.theme).toBeDefined(); + expect(typeof mod.theme.subscribe).toBe('function'); + expect(typeof mod.theme.set).toBe('function'); + expect(mod.resolvedTheme).toBeDefined(); + expect(typeof mod.resolvedTheme.subscribe).toBe('function'); + // Derived stores do NOT expose .set — this guards against accidental + // conversion to a writable during refactors. + expect((mod.resolvedTheme as unknown as { set?: unknown }).set).toBeUndefined(); + expect(typeof mod.setTheme).toBe('function'); + expect(typeof mod.cycleTheme).toBe('function'); + expect(typeof mod.initTheme).toBe('function'); + }); + + it('theme defaults to dark before initTheme is called', async () => { + const mod = await loadTheme(); + expect(get(mod.theme)).toBe('dark'); + }); +}); + +// --------------------------------------------------------------------------- +// setTheme — input validation + persistence +// --------------------------------------------------------------------------- +describe('setTheme', () => { + it('accepts dark/light/auto and updates the store', async () => { + const { theme, setTheme } = await loadTheme(); + setTheme('light'); + expect(get(theme)).toBe('light'); + setTheme('auto'); + expect(get(theme)).toBe('auto'); + setTheme('dark'); + expect(get(theme)).toBe('dark'); + }); + + it('rejects invalid values — store is unchanged, localStorage untouched', async () => { + const { theme, setTheme } = await loadTheme(); + setTheme('light'); // seed a known value + const ls = installFakeLocalStorage(); + // Reset any prior writes so we only see what happens during the bad call. + ls._store.clear(); + + // Cast a bad value through the public API. + setTheme('midnight' as unknown as 'dark'); + expect(get(theme)).toBe('light'); // unchanged + expect(ls._store.has('vestige.theme')).toBe(false); + + setTheme('' as unknown as 'dark'); + setTheme(undefined as unknown as 'dark'); + setTheme(null as unknown as 'dark'); + expect(get(theme)).toBe('light'); + }); + + it('persists the valid value to localStorage under the vestige.theme key', async () => { + const ls = installFakeLocalStorage(); + const { setTheme } = await loadTheme(); + setTheme('auto'); + expect(ls._store.get('vestige.theme')).toBe('auto'); + }); + + it('swallows localStorage write errors (private mode / disabled storage)', async () => { + installFakeLocalStorage({ throwOnSet: true }); + const { theme, setTheme } = await loadTheme(); + // Must not throw. + expect(() => setTheme('light')).not.toThrow(); + // Store still updated even though persistence failed — UI should + // reflect the click; the next session will just start fresh. + expect(get(theme)).toBe('light'); + }); + + it('no-ops localStorage write when browser=false (SSR safety)', async () => { + browserState.value = false; + const ls = installFakeLocalStorage(); + const { theme, setTheme } = await loadTheme(); + setTheme('light'); + // Store update is still safe (pure JS object), but persistence is skipped. + expect(get(theme)).toBe('light'); + expect(ls._store.has('vestige.theme')).toBe(false); + }); +}); + +// --------------------------------------------------------------------------- +// cycleTheme — dark → light → auto → dark +// --------------------------------------------------------------------------- +describe('cycleTheme', () => { + it('cycles dark → light', async () => { + const { theme, cycleTheme } = await loadTheme(); + // Default is 'dark'. + expect(get(theme)).toBe('dark'); + cycleTheme(); + expect(get(theme)).toBe('light'); + }); + + it('cycles light → auto', async () => { + const { theme, setTheme, cycleTheme } = await loadTheme(); + setTheme('light'); + cycleTheme(); + expect(get(theme)).toBe('auto'); + }); + + it('cycles auto → dark (closes the loop)', async () => { + const { theme, setTheme, cycleTheme } = await loadTheme(); + setTheme('auto'); + cycleTheme(); + expect(get(theme)).toBe('dark'); + }); + + it('full triple-click returns to the starting value', async () => { + const { theme, cycleTheme } = await loadTheme(); + const start = get(theme); + cycleTheme(); + cycleTheme(); + cycleTheme(); + expect(get(theme)).toBe(start); + }); + + it('persists each step to localStorage', async () => { + const ls = installFakeLocalStorage(); + const { cycleTheme } = await loadTheme(); + cycleTheme(); + expect(ls._store.get('vestige.theme')).toBe('light'); + cycleTheme(); + expect(ls._store.get('vestige.theme')).toBe('auto'); + cycleTheme(); + expect(ls._store.get('vestige.theme')).toBe('dark'); + }); +}); + +// --------------------------------------------------------------------------- +// resolvedTheme — derived from theme + systemPrefersDark +// --------------------------------------------------------------------------- +describe('resolvedTheme', () => { + it('dark → dark (independent of system preference)', async () => { + const { resolvedTheme, setTheme } = await loadTheme(); + setTheme('dark'); + expect(get(resolvedTheme)).toBe('dark'); + }); + + it('light → light (independent of system preference)', async () => { + const { resolvedTheme, setTheme } = await loadTheme(); + setTheme('light'); + expect(get(resolvedTheme)).toBe('light'); + }); + + it('auto + system prefers dark → dark', async () => { + const { mql } = installFakeWindow(true); + const { resolvedTheme, setTheme, initTheme } = await loadTheme(); + initTheme(); // primes systemPrefersDark from matchMedia + setTheme('auto'); + expect(mql.matches).toBe(true); + expect(get(resolvedTheme)).toBe('dark'); + }); + + it('auto + system prefers light → light', async () => { + installFakeWindow(false); + const { resolvedTheme, setTheme, initTheme } = await loadTheme(); + initTheme(); // primes systemPrefersDark=false + setTheme('auto'); + expect(get(resolvedTheme)).toBe('light'); + }); + + it('auto flips live when the matchMedia listener fires (OS changes scheme)', async () => { + const { mql } = installFakeWindow(true); + const { resolvedTheme, setTheme, initTheme } = await loadTheme(); + initTheme(); + setTheme('auto'); + expect(get(resolvedTheme)).toBe('dark'); + // OS user toggles to light mode — matchMedia fires 'change' with matches=false. + mql._emit(false); + expect(get(resolvedTheme)).toBe('light'); + // And back to dark. + mql._emit(true); + expect(get(resolvedTheme)).toBe('dark'); + }); +}); + +// --------------------------------------------------------------------------- +// initTheme — idempotence, teardown, localStorage hydration +// --------------------------------------------------------------------------- +describe('initTheme', () => { + it('returns a teardown function', async () => { + const { initTheme } = await loadTheme(); + const teardown = initTheme(); + expect(typeof teardown).toBe('function'); + teardown(); + }); + + it('injects exactly one diff --git a/apps/dashboard/src/routes/(app)/duplicates/+page.svelte b/apps/dashboard/src/routes/(app)/duplicates/+page.svelte new file mode 100644 index 0000000..f5e527b --- /dev/null +++ b/apps/dashboard/src/routes/(app)/duplicates/+page.svelte @@ -0,0 +1,387 @@ + + + +

        + +
        +

        + Memory Hygiene — Duplicate Detection +

        +

        + Cosine-similarity clustering over embeddings. Merges reinforce the winner's FSRS state; + losers inherit into the merged node. Dismissed clusters are hidden for this session only. +

        +
        + + +
        + + + + +
        + {#if loading} + + Detecting… + {:else if error} + + Error + {:else} + + + {visibleClusters.length} + {visibleClusters.length === 1 ? 'cluster' : 'clusters'}, + {totalDuplicates} potential duplicate{totalDuplicates === 1 ? '' : 's'} + + {/if} +
        + + +
        + + + {#if error} +
        +
        Couldn't detect duplicates
        +
        {error}
        + +
        + {:else if loading} +
        + {#each Array(3) as _} +
        + {/each} +
        + {:else if visibleClusters.length === 0} +
        +
        ·
        +
        + No duplicates found above threshold. +
        +
        Memory is clean.
        +
        + {:else} +
        + {#if overflowed} +
        + Showing first {CLUSTER_RENDER_CAP} of {visibleClusters.length} clusters. Raise the + threshold to narrow results. +
        + {/if} + {#each renderedClusters as { c, key } (key)} +
        + dismissCluster(key)} + onMerge={(winnerId, loserIds) => mergeCluster(key, winnerId, loserIds)} + /> +
        + {/each} +
        + {/if} +
        + + diff --git a/apps/dashboard/src/routes/(app)/graph/+page.svelte b/apps/dashboard/src/routes/(app)/graph/+page.svelte index 28842a2..a831cd3 100644 --- a/apps/dashboard/src/routes/(app)/graph/+page.svelte +++ b/apps/dashboard/src/routes/(app)/graph/+page.svelte @@ -7,6 +7,7 @@ import MemoryStateLegend from '$components/MemoryStateLegend.svelte'; import { api } from '$stores/api'; import { eventFeed } from '$stores/websocket'; + import { graphState } from '$stores/graph-state.svelte'; import type { GraphResponse, GraphNode, GraphEdge, Memory } from '$types'; import type { GraphMutation } from '$lib/graph/events'; import type { ColorMode } from '$lib/graph/nodes'; @@ -83,37 +84,81 @@ loading = true; error = ''; try { + const isDefault = !query && !centerId; graphData = await api.graph({ max_nodes: maxNodes, depth: 3, query: query || undefined, - center_id: centerId || undefined + center_id: centerId || undefined, + // Center on the newest memory by default. Prevents the old + // "most-connected" behaviour from clustering on historical + // hotspots and hiding today's memories behind the 150-node + // cap. Future UI toggle can flip this to 'connected'. + sort: isDefault ? 'recent' : undefined }); + + // Fallback: if the newest memory is isolated (1 node, 0 edges), + // fall back to the connected hotspot so the user sees context + // instead of a lonely orb. Only applies to the default load — + // explicit queries/centerId honor the user's choice even if the + // subgraph is sparse. + if ( + isDefault && + graphData && + graphData.nodeCount <= 1 && + graphData.edgeCount === 0 + ) { + const connected = await api.graph({ + max_nodes: maxNodes, + depth: 3, + sort: 'connected' + }); + if (connected && connected.nodeCount > graphData.nodeCount) { + graphData = connected; + } + } + if (graphData) { liveNodeCount = graphData.nodeCount; liveEdgeCount = graphData.edgeCount; } } catch (e) { - // Distinguish "cold-start / empty database" from "actual API failure". - // Before v2.0.7 both surfaced as "No memories yet..." which masked - // real errors (network down, dashboard disabled, 500s) and looked - // identical to a first-run install. Split the two so debugging - // isn't a guessing game. - // - // Sanitize the error string before rendering: strip filesystem - // paths and crate-file references (the backend occasionally wraps - // raw rusqlite / fs errors) and cap length at 200 chars so a - // stack-trace-sized error doesn't dominate the page. + // Distinguish three failure modes so the error message is actually + // helpful. Before: all failures (backend offline, empty DB, real + // 500) rendered identical cryptic text. That made the dashboard + // look broken on first-run or on backend-down, when the root + // cause is ALWAYS "the MCP server isn't running." + // (1) Backend offline — vite dev proxy returns 500 with no body + // (upstream EHOSTUNREACH / ECONNREFUSED). Surface clearly: + // tell the user to start vestige-mcp. + // (2) Empty database — fresh install, no memories yet. Happy + // first-run state, not an error. + // (3) Real backend error — a genuine 500 with a response body, + // or a 4xx with content. Show the sanitized upstream msg. const rawMsg = e instanceof Error ? e.message : String(e); const safeMsg = rawMsg .replace(/\/[\w./-]+\.(sqlite|rs|db|toml|lock)\b/g, '[path]') .slice(0, 200); + + // Network-level failure: fetch itself rejects (TypeError) OR vite + // proxy passes back a body-less 500 when upstream :3927 is + // unreachable. Both mean "backend offline." + const isBackendOffline = + e instanceof TypeError || + /failed to fetch|NetworkError|load failed/i.test(rawMsg) || + /^API 500:?\s*(Internal Server Error)?\s*$/i.test(rawMsg.trim()); + const isEmpty = (graphData?.nodeCount ?? 0) === 0 && /not found|404|empty|no memor/i.test(rawMsg); - error = isEmpty - ? 'No memories yet. Start using Vestige to populate your graph.' - : `Failed to load graph: ${safeMsg}`; + + if (isBackendOffline) { + error = 'OFFLINE'; + } else if (isEmpty) { + error = 'EMPTY'; + } else { + error = `Failed to load graph: ${safeMsg}`; + } } finally { loading = false; } @@ -149,6 +194,40 @@

        Loading memory graph...

        + {:else if error === 'OFFLINE'} +
        +
        +
        +

        MCP Backend Offline

        +

        + The Vestige MCP server isn't reachable on :3927. + The dashboard is running but has nothing to query. +

        +
        +
        Start the backend:
        + nohup bash -c 'tail -f /dev/null | VESTIGE_DASHBOARD_ENABLED=true ~/.local/bin/vestige-mcp' > /tmp/vestige.log 2>&1 & +disown +
        +
        + + + Try demos (no backend needed) + +
        +
        +
        + {:else if error === 'EMPTY'} +
        +
        +
        +

        Your Mind Awaits

        +

        No memories yet. Start using Vestige to populate your graph.

        +
        +
        {:else if error}
        @@ -224,6 +303,27 @@ + + + + ⌘/Ctrl + Enter + {#if scoreError} + {scoreError} + {/if} +
        +
        + + +
        + {#if score} +
        +
        Composite
        +
        + {(score.composite * 100).toFixed(0)}% +
        +
        + {#key radarKey} + + {/key} + + + {#if score.composite > 0.6} +
        +
        ✓ Save
        +

        + Composite {(score.composite * 100).toFixed(0)}% > 60% threshold. + {#if topChannel} + Driven by {topChannel.key} — {CHANNEL_BLURBS[topChannel.key].high}. + {/if} +

        +
        + {:else} +
        +
        ⨯ Skip
        +

        + Composite {(score.composite * 100).toFixed(0)}% < 60% threshold. + {#if weakestChannel} + Weakest channel: {weakestChannel} — {CHANNEL_BLURBS[weakestChannel].low}. + {/if} +

        +
        + {/if} + {:else} +
        +
        +

        Type some content above to score its importance.

        +

        + Composite = 0.25·novelty + 0.30·arousal + 0.25·reward + 0.20·attention. + Threshold for save: 60%. +

        +
        + {/if} +
        +
        + + + +
        +
        +
        +

        + Top Important Memories This Week +

        +

        + Ranked by retention × reviews ÷ age. Click any card to open it. +

        +
        + +
        + + {#if loadingMemories} +
        + {#each Array(6) as _} +
        + {/each} +
        + {:else if memories.length === 0} +
        +

        No memories yet.

        +
        + {:else} +
        + {#each memories as memory (memory.id)} + {@const ch = perMemoryScores[memory.id]} + + {/each} +
        + {/if} +
        + diff --git a/apps/dashboard/src/routes/(app)/memories/+page.svelte b/apps/dashboard/src/routes/(app)/memories/+page.svelte index e1000cd..03e9808 100644 --- a/apps/dashboard/src/routes/(app)/memories/+page.svelte +++ b/apps/dashboard/src/routes/(app)/memories/+page.svelte @@ -3,6 +3,7 @@ import { api } from '$stores/api'; import type { Memory } from '$types'; import { NODE_TYPE_COLORS } from '$types'; + import MemoryAuditTrail from '$lib/components/MemoryAuditTrail.svelte'; let memories: Memory[] = $state([]); let searchQuery = $state(''); @@ -11,6 +12,9 @@ let minRetention = $state(0); let loading = $state(true); let selectedMemory: Memory | null = $state(null); + // Which inner tab of the expanded card is active. Keyed by memory id so + // switching between cards remembers each one's last view independently. + let expandedTab: Record = $state({}); let debounceTimer: ReturnType; onMount(() => loadMemories()); @@ -116,13 +120,45 @@ {#if selectedMemory?.id === memory.id} + {@const activeTab = expandedTab[memory.id] ?? 'content'}
        -

        {memory.content}

        -
        -
        Storage: {(memory.storageStrength * 100).toFixed(1)}%
        -
        Retrieval: {(memory.retrievalStrength * 100).toFixed(1)}%
        -
        Created: {new Date(memory.createdAt).toLocaleDateString()}
        + +
        + { e.stopPropagation(); expandedTab[memory.id] = 'content'; }} + onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); expandedTab[memory.id] = 'content'; } }} + class="px-3 py-1.5 rounded-lg cursor-pointer select-none transition + {activeTab === 'content' ? 'bg-synapse/20 text-synapse-glow border border-synapse/40' : 'bg-white/[0.03] text-dim hover:text-text border border-transparent'}" + >Content + { e.stopPropagation(); expandedTab[memory.id] = 'audit'; }} + onkeydown={(e) => { if (e.key === 'Enter' || e.key === ' ') { e.stopPropagation(); expandedTab[memory.id] = 'audit'; } }} + class="px-3 py-1.5 rounded-lg cursor-pointer select-none transition + {activeTab === 'audit' ? 'bg-synapse/20 text-synapse-glow border border-synapse/40' : 'bg-white/[0.03] text-dim hover:text-text border border-transparent'}" + >Audit Trail
        + + {#if activeTab === 'content'} +

        {memory.content}

        +
        +
        Storage: {(memory.storageStrength * 100).toFixed(1)}%
        +
        Retrieval: {(memory.retrievalStrength * 100).toFixed(1)}%
        +
        Created: {new Date(memory.createdAt).toLocaleDateString()}
        +
        + {:else} +
        e.stopPropagation()} + onkeydown={(e) => e.stopPropagation()} + > + +
        + {/if} +
        { e.stopPropagation(); api.memories.promote(memory.id); }} onkeydown={(e) => { if (e.key === 'Enter') { e.stopPropagation(); api.memories.promote(memory.id); } }} diff --git a/apps/dashboard/src/routes/(app)/patterns/+page.svelte b/apps/dashboard/src/routes/(app)/patterns/+page.svelte new file mode 100644 index 0000000..05fcbb0 --- /dev/null +++ b/apps/dashboard/src/routes/(app)/patterns/+page.svelte @@ -0,0 +1,567 @@ + + + +
        + +
        +

        Cross-Project Intelligence

        +

        Patterns learned here, applied there.

        +
        + + +
        + + {#each CATEGORIES as cat (cat)} + + {/each} +
        + + {#if error} +
        +
        Couldn't load pattern transfers
        +
        {error}
        + +
        + {:else if loading} +
        +
        +
        +
        + {:else} + +
        + +
        + + + {#if selectedCell} +
        +
        + Filtered to + {selectedCell.from} + + {selectedCell.to} +
        + +
        + {/if} +
        + + + +
        + + +
        +
        + {patternCount} + pattern{patternCount === 1 ? '' : 's'} across + {projectCount} + project{projectCount === 1 ? '' : 's'}, + {totalTransfers} + total transfer{totalTransfers === 1 ? '' : 's'} +
        +
        + {activeCategory === 'All' ? 'All categories' : activeCategory} +
        +
        + {/if} +
        diff --git a/apps/dashboard/src/routes/(app)/reasoning/+page.svelte b/apps/dashboard/src/routes/(app)/reasoning/+page.svelte new file mode 100644 index 0000000..64f5ccf --- /dev/null +++ b/apps/dashboard/src/routes/(app)/reasoning/+page.svelte @@ -0,0 +1,668 @@ + + + + Reasoning Theater · Vestige + + +
        + +
        +
        + +

        Reasoning Theater

        + + deep_reference + +
        +

        + Watch Vestige reason. Your query runs the 8-stage cognitive pipeline — broad retrieval, + spreading activation, FSRS trust scoring, intent classification, supersession, contradiction + analysis, relation assessment, template reasoning — and returns a pre-built answer with + trust-scored evidence. +

        +
        + + +
        +
        + + e.key === 'Enter' && ask()} + placeholder="Ask your memory anything..." + class="flex-1 bg-transparent text-bright text-lg placeholder:text-muted focus:outline-none font-mono" + /> + + +
        + + {#if !response && !loading} +
        + Try + {#each exampleQueries as ex} + + {/each} +
        + {/if} +
        + + + {#if error} +
        + Error: + {error} +
        + {/if} + + + {#if loading} +
        +
        + + Running cognitive pipeline +
        + +
        + {/if} + + + {#if response && !loading} + {@const conf = response.confidence} + {@const confColor = confidenceColor(conf)} + + + {#if response.reasoning} +
        +
        +

        + + Reasoning +

        +
        + intent: {response.intent} + · + {response.memoriesAnalyzed} analyzed + · + {conf}% {confidenceLabel(conf)} +
        +
        +
        {response.reasoning}
        +
        + {/if} + + +
        + +
        + Confidence +
        + + {conf}% + +
        + + {confidenceLabel(conf)} + + + + + + + + +
        + intent: {response.intent} + · + {response.memoriesAnalyzed} analyzed +
        +
        + + +
        +
        + Primary Source + + #{response.recommended.memory_id.slice(0, 8)} + +
        +

        {response.recommended.answer_preview}

        +
        + + + Trust {(response.recommended.trust_score * 100).toFixed(0)}% + + · + {new Date(response.recommended.date).toLocaleDateString()} +
        +
        +
        + + +
        +

        + + Cognitive Pipeline +

        +
        + +
        +
        + + +
        +
        +

        + + Evidence + ({response.evidence.length}) +

        +
        + + primary + + + supporting + + + contradicting + + + superseded + +
        +
        + +
        + {#each response.evidence as ev, i (ev.id)} + + {/each} + + + {#if arcs.length > 0} + + {/if} +
        +
        + + + {#if response.contradictions.length > 0} +
        +

        + + Contradictions Detected + ({response.contradictions.length}) +

        +
        + {#each response.contradictions as c, i} +
        + +
        +
        + #{c.a_id.slice(0, 8)} + + #{c.b_id.slice(0, 8)} +
        +

        {c.summary}

        +
        + pair {i + 1} +
        + {/each} +
        +
        + {/if} + + + {#if response.superseded.length > 0} +
        +

        + + Superseded + ({response.superseded.length}) +

        +
        + {#each response.superseded as s} +
        + #{s.old_id.slice(0, 8)} + + #{s.new_id.slice(0, 8)} + {s.reason} +
        + {/each} +
        +
        + {/if} + + +
        + {#if response.evolution.length > 0} +
        +

        + + Evolution +

        +
        + {#each response.evolution as ev} +
        + + {new Date(ev.date).toLocaleDateString(undefined, { month: 'short', day: 'numeric' })} + + + {ev.summary} +
        + {/each} +
        +
        + {/if} + + {#if response.related_insights.length > 0} +
        +

        + + Related Insights +

        +
        + {#each response.related_insights as ins} +

        + {ins} +

        + {/each} +
        +
        + {/if} +
        + {/if} + + + {#if !response && !loading && !error} +
        +
        +

        + Ask anything. Vestige will run the full reasoning pipeline and show you its work. +

        +

        + 8-stage pipeline: retrieval → rerank → activation → trust-score → supersession → + contradiction → relations → chain. Zero LLM calls, 100% local. +

        +
        + {/if} +
        + + diff --git a/apps/dashboard/src/routes/(app)/schedule/+page.svelte b/apps/dashboard/src/routes/(app)/schedule/+page.svelte new file mode 100644 index 0000000..781b284 --- /dev/null +++ b/apps/dashboard/src/routes/(app)/schedule/+page.svelte @@ -0,0 +1,252 @@ + + +
        +
        +
        +

        Review Schedule

        +

        FSRS-6 next-review dates across your memory corpus

        +
        +
        + {#each FILTERS as f} + + {/each} +
        +
        + + {#if !loading && !errored && truncated} +
        + Showing the first {memories.length.toLocaleString()} of {totalMemories.toLocaleString()} memories. + Schedule reflects this slice only. +
        + {/if} + + {#if loading} +
        +
        +
        +
        + {#each Array(42) as _} +
        + {/each} +
        +
        +
        + {#each Array(5) as _} +
        + {/each} +
        +
        + {:else if errored} +
        +

        API unavailable.

        +

        Could not fetch memories from /api/memories.

        +
        + {:else if scheduled.length === 0} +
        +
        +

        FSRS review schedule not yet populated.

        +

        + None of your {memories.length} memor{memories.length === 1 ? 'y has' : 'ies have'} a + nextReviewAt timestamp yet. Run consolidation to compute + next-review dates via FSRS-6. +

        + +
        + {:else} +
        + +
        + +
        + + + +
        + {/if} +
        diff --git a/apps/dashboard/src/routes/(app)/settings/+page.svelte b/apps/dashboard/src/routes/(app)/settings/+page.svelte index 90d141e..f7a82eb 100644 --- a/apps/dashboard/src/routes/(app)/settings/+page.svelte +++ b/apps/dashboard/src/routes/(app)/settings/+page.svelte @@ -1,7 +1,29 @@