/** * Official Type definitions for LemonadeJS plugins * https://lemonadejs.net */ declare function Timeline(el: HTMLElement, options?: Timeline.Options): Timeline.Instance; declare namespace Timeline { interface Tag { /** The tag label text */ title: string; /** The background color of the tag (e.g., '#dc2626', 'red') */ color?: string; /** Click handler for the tag */ onclick?: (event: MouseEvent, tag: Tag) => void; } /** * Loose input shape — what consumers pass into `data`. Only `date` is * required; `title` is filled in by the component when omitted. The * index signature lets consumers attach app-specific metadata (e.g. * `id`, foreign keys) without casts. */ interface ItemInput { /** The date of the item */ date: string | Date; /** The item main label text */ title?: string; /** The text displayed under the title */ subtitle?: string; /** The description of the item */ description?: string; /** The color of border in the item, also influence bullets */ borderColor?: string; /** The style of border in the item */ borderStyle?: string; /** Show editable icon */ editable?: boolean; /** Array of tags to display on this item */ tags?: Tag[]; /** Allow consumers to attach their own metadata. */ [key: string]: any; } /** Resolved runtime shape — what `result` / callbacks hand back. */ interface Item extends ItemInput { title: string; /** Formatted date string (computed at runtime) */ day?: string; /** DOM element reference (set at runtime) */ el?: HTMLElement; } interface Options { /** The data that the component will base to render */ data?: ItemInput[]; /** Format of the date. Default dddd, dd */ format?: string; /** The initial date to start the timeline. Useful for monthly navigation. Accepts string ('2022-12-12') or Date object */ value?: string | Date; /** The type of the Timeline. Use 'monthly' to enable month-based filtering and navigation. */ type?: "monthly"; /** The side that item texts will be aligned to */ align?: "left" | "right" | "top" | "bottom"; /** The displayed message case no item is found */ message?: string; /** The order the dates will follow, either ascendant or descendant */ order?: 'asc' | 'desc'; /** The width of the container */ width?: number; /** The height of the container */ height?: number; /** Specifies the URL for fetching the data. */ url?: string; /** Enable the remote functionality. Default: false */ remote?: boolean; /** Show the navigation header. Defaults to `true` when `type` is 'monthly', `false` otherwise. */ controls?: boolean; /** Sets the `data-mode` attribute on the timeline data container for CSS hooks. */ position?: string; /** The function called when data is updated */ onupdate?: (instance: Instance, result: Item[]) => void; /** Function when the user clicks on edition */ onedition?: (entry: Item) => void; } interface Instance { /** The root DOM element */ el: HTMLElement; /** The data that the component will base to render */ data: Item[]; /** The filtered and sorted result array */ result: Item[]; /** Current year */ year: number; /** Current month (1-12) */ month: number; /** Array of month names */ months: string[]; /** Format of the date */ format: string; /** The type of the Timeline */ type?: "monthly"; /** The side that item texts will be aligned to */ align: "left" | "right" | "top" | "bottom"; /** The displayed message when no items found */ message: string; /** The order the dates will follow */ order: 'asc' | 'desc'; /** The width of the container */ width?: number; /** The height of the container */ height?: number; /** The initial date value */ value?: string | Date; /** Specifies the URL for fetching the data */ url?: string; /** Enable the remote functionality */ remote?: boolean; /** Show navigation controls */ controls?: boolean; /** Position mode for timeline items */ position?: string; /** Navigate to the next month */ next: () => void; /** Navigate to the previous month */ prev: () => void; /** The function called when data is updated */ onupdate?: (instance: Instance, result: Item[]) => void; /** Function when the user clicks on edition */ onedition?: (entry: Item) => void; } } export default Timeline;