refactor(breadcrumb): replace scrollBreadcrumbsStore singleton with lazy accessor

Convert the eager scrollBreadcrumbsStore singleton to getScrollBreadcrumbsStore()
(+ __resetScrollBreadcrumbsStore for tests) and add a public destroy() that
disconnects the IntersectionObserver and scroll listener. Update the feature
barrel and consumers (BreadcrumbHeader, BreadcrumbHeaderSeeded, NavigationWrapper).
This commit is contained in:
Ilia Mashkov
2026-06-01 18:46:10 +03:00
parent 6877807aaf
commit 839460726e
5 changed files with 28 additions and 6 deletions
@@ -14,9 +14,10 @@ import { cubicOut } from 'svelte/easing';
import { slide } from 'svelte/transition';
import {
type BreadcrumbItem,
scrollBreadcrumbsStore,
getScrollBreadcrumbsStore,
} from '../../model';
const scrollBreadcrumbsStore = getScrollBreadcrumbsStore();
const breadcrumbs = $derived(scrollBreadcrumbsStore.scrolledPastItems);
const responsive = getContext<ResponsiveManager>('responsive');
@@ -1,8 +1,10 @@
<script>
import { onMount } from 'svelte';
import { scrollBreadcrumbsStore } from '../../model';
import { getScrollBreadcrumbsStore } from '../../model';
import BreadcrumbHeader from './BreadcrumbHeader.svelte';
const scrollBreadcrumbsStore = getScrollBreadcrumbsStore();
const sections = [
{ index: 100, title: 'Introduction' },
{ index: 101, title: 'Typography' },
@@ -6,9 +6,11 @@
import { type Snippet } from 'svelte';
import {
type NavigationAction,
scrollBreadcrumbsStore,
getScrollBreadcrumbsStore,
} from '../../model';
const scrollBreadcrumbsStore = getScrollBreadcrumbsStore();
interface Props {
/**
* Navigation index