import type { createTableOfContents } from './create.js'; export type Heading = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'; export type ScrollBehaviour = 'smooth' | 'instant'; /** * This type describes which headings should be considered active. */ export type ActiveType = 'none' | 'lowest' | 'highest' | 'all' | 'all-parents' | 'lowest-parents' | 'highest-parents'; export type HeadingFilterFn = (heading: HTMLHeadingElement) => boolean; export type ScrollFn = (id: string) => void; export type PushStateFn = (url: string | URL, state: object) => void; export type CreateTableOfContentsArgs = { /** * The ID of the container holding the page content. */ selector: string; /** * An array of headings to exclude from the table. */ exclude?: Heading[]; /** * The pixel offset added when scrolling to a heading. */ scrollOffset?: number; /** * The scroll behavior ('smooth' or 'instant'). */ scrollBehaviour?: ScrollBehaviour; /** * The type of headings to consider as active: * - 'none': No intersection observers are added, and no headings are considered active. * - 'all': All headings with visible content are considered active. * - 'all-parents': Parents of all headings with visible content are also considered active. * - 'lowest': The heading with the lowest visible content is considered active. * - 'highest': The heading with the highest visible content is considered active. * - 'lowest-parents': Parents of the heading with the lowest visible content are also considered active. * - 'highest-parents': Parents of the heading with the highest visible content are also considered active. */ activeType?: ActiveType; /** * The root margin for the intersection observer. Refer to the [MDN docs](https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver/rootMargin) for more information. */ rootMargin?: string; /** * A custom filter function for headings. */ headingFilterFn?: HeadingFilterFn; /** * A custom scroll function. */ scrollFn?: ScrollFn; /** * A custom pushState function, expected to be SvelteKit's pushState function. */ pushStateFn?: PushStateFn; }; export type ElementHeadingLU = { [key: number]: number; }; export type HeadingParentsLU = { [key: number]: number[] | null; }; export type TableOfContentsItem = { title: string; index: number; id: string; node: HTMLHeadingElement; children?: TableOfContentsItem[]; }; export type TableOfContents = ReturnType; export type TableOfContentsElements = TableOfContents['elements']; export type TableOfContentsStates = TableOfContents['states'];