Files
frontend-svelte/src/entities/Breadcrumb/model/store/scrollBreadcrumbsStore.svelte.ts
T
2026-02-10 21:16:32 +03:00

40 lines
943 B
TypeScript

import type { Snippet } from 'svelte';
export interface BreadcrumbItem {
/**
* Index of the item to display
*/
index: number;
/**
* ID of the item to navigate to
*/
id?: string;
/**
* Title snippet to render
*/
title: Snippet<[{ className?: string }]>;
}
class ScrollBreadcrumbsStore {
#items = $state<BreadcrumbItem[]>([]);
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();