diff --git a/src/entities/Breadcrumb/index.ts b/src/entities/Breadcrumb/index.ts new file mode 100644 index 0000000..18a6254 --- /dev/null +++ b/src/entities/Breadcrumb/index.ts @@ -0,0 +1,2 @@ +export { scrollBreadcrumbsStore } from './model'; +export { BreadcrumbHeader } from './ui'; diff --git a/src/entities/Breadcrumb/model/index.ts b/src/entities/Breadcrumb/model/index.ts new file mode 100644 index 0000000..f177f5c --- /dev/null +++ b/src/entities/Breadcrumb/model/index.ts @@ -0,0 +1 @@ +export * from './store/scrollBreadcrumbsStore.svelte'; diff --git a/src/entities/Breadcrumb/model/store/scrollBreadcrumbsStore.svelte.ts b/src/entities/Breadcrumb/model/store/scrollBreadcrumbsStore.svelte.ts new file mode 100644 index 0000000..f914c5e --- /dev/null +++ b/src/entities/Breadcrumb/model/store/scrollBreadcrumbsStore.svelte.ts @@ -0,0 +1,29 @@ +import type { Snippet } from 'svelte'; + +export interface BreadcrumbItem { + index: number; + title: Snippet<[{ className?: string }]>; +} + +class ScrollBreadcrumbsStore { + #items = $state([]); + + get items() { + // Keep them sorted by index for Swiss orderliness + return this.#items.sort((a, b) => a.index - b.index); + } + add(item: BreadcrumbItem) { + if (!this.#items.find(i => i.index === item.index)) { + this.#items.push(item); + } + } + remove(index: number) { + this.#items = this.#items.filter(i => i.index !== index); + } +} + +export function createScrollBreadcrumbsStore() { + return new ScrollBreadcrumbsStore(); +} + +export const scrollBreadcrumbsStore = createScrollBreadcrumbsStore(); diff --git a/src/entities/Breadcrumb/ui/BreadcrumbHeader/BreadcrumbHeader.svelte b/src/entities/Breadcrumb/ui/BreadcrumbHeader/BreadcrumbHeader.svelte new file mode 100644 index 0000000..e044e85 --- /dev/null +++ b/src/entities/Breadcrumb/ui/BreadcrumbHeader/BreadcrumbHeader.svelte @@ -0,0 +1,78 @@ + + + +{#if scrollBreadcrumbsStore.items.length > 0} +
+
+
+ +
+ + nav_trace + +
+ +
+ + + +
+
+ + [{scrollBreadcrumbsStore.items.length}] + +
+
+
+{/if} + + diff --git a/src/entities/Breadcrumb/ui/index.ts b/src/entities/Breadcrumb/ui/index.ts new file mode 100644 index 0000000..76d13e1 --- /dev/null +++ b/src/entities/Breadcrumb/ui/index.ts @@ -0,0 +1,3 @@ +import BreadcrumbHeader from './BreadcrumbHeader/BreadcrumbHeader.svelte'; + +export { BreadcrumbHeader };