UNPKG

@jupyterlab/toc

Version:

JupyterLab - Table of Contents widget

248 lines (247 loc) 7.62 kB
import type { ToolbarRegistry } from '@jupyterlab/apputils'; import type { IObservableList } from '@jupyterlab/observables'; import type { VDomRenderer } from '@jupyterlab/ui-components'; import type { JSONObject } from '@lumino/coreutils'; import { Token } from '@lumino/coreutils'; import type { IDisposable } from '@lumino/disposable'; import type { ISignal } from '@lumino/signaling'; import type { Widget } from '@lumino/widgets'; /** * Interface describing the table of contents registry. */ export interface ITableOfContentsRegistry { /** * Finds a table of contents model for a widget. * * ## Notes * * - If unable to find a table of contents model, the method return `undefined`. * * @param widget - widget * @param configuration - Table of contents configuration * @returns Table of contents model or undefined if not found */ getModel(widget: Widget, configuration?: TableOfContents.IConfig): TableOfContents.Model | undefined; /** * Adds a table of contents factory to the registry. * * @param factory - table of contents factory */ add(factory: TableOfContents.IFactory): IDisposable; } /** * Table of contents registry token. */ export declare const ITableOfContentsRegistry: Token<ITableOfContentsRegistry>; /** * Interface for the table of contents tracker */ export interface ITableOfContentsTracker { /** * Get the model associated with a given widget. * * @param widget Widget */ get(widget: Widget): TableOfContents.IModel<TableOfContents.IHeading> | null; } /** * Table of contents tracker token. */ export declare const ITableOfContentsTracker: Token<ITableOfContentsTracker>; /** * Namespace for table of contents interface */ export declare namespace TableOfContents { /** * Table of content model factory interface */ interface IFactory<W extends Widget = Widget, H extends IHeading = IHeading> { /** * Whether the factory can handle the widget or not. * * @param widget - widget * @returns boolean indicating a ToC can be generated */ isApplicable: (widget: W) => boolean; /** * Create a new table of contents model for the widget * * @param widget - widget * @param configuration - Table of contents configuration * @returns The table of contents model */ createNew: (widget: W, configuration?: TableOfContents.IConfig) => IModel<H>; } /** * Table of Contents configuration * * #### Notes * A document model may ignore some of those options. */ interface IConfig extends JSONObject { /** * Base level for the highest headings */ baseNumbering: number; /** * Maximal depth of headings to display */ maximalDepth: number; /** * Whether to number first-level headings or not. */ numberingH1: boolean; /** * Whether to number headings in document or not. */ numberHeaders: boolean; /** * Whether to include cell outputs in headings or not. */ includeOutput: boolean; /** * Whether to synchronize heading collapse state between the ToC and the document or not. */ syncCollapseState: boolean; } /** * Default table of content configuration */ const defaultConfig: IConfig; /** * Interface describing a heading. */ interface IHeading { /** * Heading text. */ text: string; /** * HTML heading level. */ level: number; /** * Heading prefix. */ prefix?: string | null; /** * Dataset to add to the item node */ dataset?: Record<string, string>; /** * Whether the heading is collapsed or not */ collapsed?: boolean; /** * Whether the heading is marked to skip or not */ skip?: boolean; } /** * Interface describing a widget table of contents model. */ interface IModel<H extends IHeading> extends VDomRenderer.IModel { /** * Active heading */ readonly activeHeading: H | null; /** * Signal emitted when the active heading changes. */ readonly activeHeadingChanged: ISignal<IModel<H>, H | null>; /** * Signal emitted when a table of content section collapse state changes. * * If all headings state are set at the same time, the argument is null. */ readonly collapseChanged: ISignal<IModel<H>, H | null>; /** * Model configuration */ readonly configuration: IConfig; /** * Type of document supported by the model. * * #### Notes * A `data-document-type` attribute with this value will be set * on the tree view `.jp-TableOfContents-content[data-document-type="..."]` */ readonly documentType: string; /** * Returns the list of headings. * * @returns list of headings */ readonly headings: H[]; /** * Signal emitted when the headings changes. */ readonly headingsChanged: ISignal<IModel<H>, void>; /** * Whether the model needs to be kept up to date or not. * * ### Notes * This is set to `true` if the ToC panel is visible and * to `false` if it is hidden. But some models may require * to be always active; e.g. to add numbering in the document. */ isActive: boolean; /** * Set a new active heading. * * @param heading The new active heading * @param emitSignal Whether to emit the activeHeadingChanged signal or not. */ setActiveHeading(heading: H | null, emitSignal?: boolean): void; /** * Model configuration setter. * * @param c New configuration */ setConfiguration(c: Partial<IConfig>): void; /** * List of configuration options supported by the model. */ readonly supportedOptions: (keyof IConfig)[]; /** * Document title */ title?: string; /** * Callback on heading collapse. * * @param options.heading The heading to change state (all headings if not provided) * @param options.collapsed The new collapsed status (toggle existing status if not provided) */ toggleCollapse: (options: { heading?: H; collapsed?: boolean; }) => void; } /** * Generic table of contents type */ type Model = IModel<IHeading>; /** * Interface describing table of contents widget options. */ interface IOptions { /** * Table of contents model. */ model?: IModel<IHeading>; /** * If no headings are present, a headline to display as a placeholder */ placeholderHeadline: string; /** * If no headings are present, text to display as a placeholder */ placeholderText: string; } /** * Interface describing a toolbar item list */ interface IToolbarItems extends IObservableList<ToolbarRegistry.IToolbarItem> { } }