// eslint-disable-next-line import/no-extraneous-dependencies import { writable, derived } from 'svelte/store'; import type { ColumnKey } from './types'; const defaultLocale = navigator.language; export const locale = writable(defaultLocale); export const debugWarnings = writable(false); export const createStickyStores = () => { const newOffsetMap = () => new Map(); const createWidths = () => { const { update, set, subscribe } = writable(newOffsetMap()); return { updateColumn: (key: ColumnKey, width: number) => update(($widths) => { $widths.set(key, width); return $widths; }), reset: () => set(newOffsetMap()), subscribe, }; }; const stickyColumnsWidth = createWidths(); const stickyColumnsOffset = derived(stickyColumnsWidth, ($widths) => { const cumulativeWidths = newOffsetMap(); let cumulativeOffset = 0; Array.from($widths).forEach(([key, clientWidth]) => { cumulativeWidths.set(key, cumulativeOffset); cumulativeOffset += clientWidth + 1; }); return cumulativeWidths; }); const lastStickyColumn = derived(stickyColumnsWidth, ($widths) => [...$widths.keys()].at(-1)); const isHorizontallyScrolled = writable(false); const isVerticallyScrolled = writable(false); const stickyHeader = writable(false); return { stickyColumnsOffset, stickyColumnsWidth, lastStickyColumn, isHorizontallyScrolled, isVerticallyScrolled, stickyHeader, }; };