import UI5Element from "@ui5/webcomponents-base/dist/UI5Element.js"; import type { DefaultSlot, Slot } from "@ui5/webcomponents-base/dist/UI5Element.js"; import type I18nBundle from "@ui5/webcomponents-base/dist/i18nBundle.js"; import type { ITabbable } from "@ui5/webcomponents-base/dist/delegate/ItemNavigation.js"; import type ToggleButton from "@ui5/webcomponents/dist/ToggleButton.js"; import "./TimelineItem.js"; import ItemNavigation from "@ui5/webcomponents-base/dist/delegate/ItemNavigation.js"; import TimelineLayout from "./types/TimelineLayout.js"; import TimelineGrowingMode from "./types/TimelineGrowingMode.js"; /** * Interface for components that may be slotted inside `ui5-timeline` as items * @public */ interface ITimelineItem extends UI5Element, ITabbable { layout: `${TimelineLayout}`; isGroupItem: boolean; forcedLineWidth?: string; icon?: string; nameClickable?: boolean; positionInGroup?: number; collapsed?: boolean; items?: Array; focusLink?(): void; lastItem: boolean; isNextItemGroup?: boolean; firstItemInTimeline?: boolean; effectiveRole?: string; } /** * @class * * ### Overview * * The `ui5-timeline` component shows entries (such as objects, events, or posts) in chronological order. * A common use case is to provide information about changes to an object, or events related to an object. * These entries can be generated by the system (for example, value XY changed from A to B), or added manually. * There are two distinct variants of the timeline: basic and social. The basic timeline is read-only, * while the social timeline offers a high level of interaction and collaboration, and is integrated within SAP Jam. * * ### Header and Info Bar Slots * * The Timeline exposes two named slots above the items area: * * - `header` — for a controls bar (search field, filter trigger, sort toggle, etc.). * The most common pattern is to place a `ui5-toolbar` containing a search input and buttons that open * a filter dialog or toggle sort direction. The Timeline itself performs no filtering, sorting, or * searching — the application listens for events from its own controls and reorders, hides, or * adds items in the default slot accordingly. * * - `infoBar` — for a status bar that reflects the result of the controls (active filters, * applied sort, current search query). Typically contains tokens, labels, or a `ui5-bar`. * * The Timeline itself does not filter, sort, or search — the application owns that logic. * Use `stickyHeader` to pin both bars while the Timeline's items scroll. Give the Timeline * a constrained height in this mode so it owns its scrollbar. * @constructor * @extends UI5Element * @public * @since 0.8.0 */ declare class Timeline extends UI5Element { eventDetails: { "load-more": void; }; /** * Defines the items orientation. * @default "Vertical" * @since 1.0.0-rc.15 * @public */ layout: `${TimelineLayout}`; /** * Defines the accessible ARIA name of the component. * @default undefined * @public * @since 1.2.0 */ accessibleName?: string; /** * Defines if the component should display a loading indicator over the Timeline. * * @default false * @since 2.7.0 * @public */ loading: boolean; /** * Defines the delay in milliseconds, after which the loading indicator will show up for this component. * @default 1000 * @public */ loadingDelay: number; /** * Defines whether the Timeline will have growing capability either by pressing a "More" button, * or via user scroll. In both cases a `load-more` event is fired. * * Available options: * * `Button` - Displays a button at the end of the Timeline, which when pressed triggers the `load-more` event. * * `Scroll` -Triggers the `load-more` event when the user scrolls to the end of the Timeline. * * `None` (default) - The growing functionality is off. * * @default "None" * @since 2.7.0 * @public */ growing: `${TimelineGrowingMode}`; /** * Defines whether the content of the `header` and `infoBar` slots remains visible when the user scrolls the Timeline. * * **Note:** The bars pin to the Timeline's own scrollport. Give the Timeline a * constrained height (for example `style="height: 32rem"`) so its items scroll * inside it. Placing the Timeline inside an externally scrolling ancestor while * leaving the Timeline itself unsized is not supported in this mode — the bars * will scroll away with the ancestor. * * @default false * @public * @since 2.24.0 */ stickyHeader: boolean; /** * Defines the active state of the `More` button. * @private */ _loadMoreActive: boolean; /** * Determines the content of the `ui5-timeline`. * @public */ items: DefaultSlot; /** * Defines the content of the Timeline's header area, displayed above the items. * Typically a `ui5-toolbar` with search, sort, and filter controls. * * @public * @since 2.24.0 */ header: Slot; /** * Defines the content of the Timeline's info bar area, displayed below the header * and above the items. Use for status display (applied filters, sort direction, counts). * * @public * @since 2.24.0 */ infoBar: Slot; timelineEndMarker: HTMLElement; growingButton: HTMLElement; _scrollContainer: HTMLElement; static i18nBundle: I18nBundle; _itemNavigation: ItemNavigation; growingIntersectionObserver?: IntersectionObserver | null; timeLineEndObserved: boolean; initialIntersection: boolean; constructor(); get ariaLabel(): string; get _hasHeader(): boolean; get _hasInfoBar(): boolean; get showBusyIndicatorOverlay(): boolean; get growsOnScroll(): boolean; get growingButtonIcon(): "process" | "drill-down"; get growingButtonText(): string; get growsWithButton(): boolean; onAfterRendering(): void; onExitDOM(): void; observeTimelineEnd(): Promise; unobserveTimelineEnd(): void; getIntersectionObserver(): IntersectionObserver; onIntersection(entries: Array): void; loadMore(): void; getFocusDomRef(): HTMLElement | undefined; _onLoadMoreKeydown(e: KeyboardEvent): void; _onLoadMoreKeyup(e: KeyboardEvent): void; _onLoadMoreClick(): void; _onfocusin(e: FocusEvent): void; _onwheel(e: WheelEvent): void; onBeforeRendering(): void; _setLastItem(): void; _setIsNextItemGroup(): void; _onkeydown(e: KeyboardEvent): Promise; _handleDown(): void; focusGrowingButton(): void; _handleUp(e: KeyboardEvent): void; /** * Focuses a list item and sets its tabindex to "0" via the ItemNavigation * @protected * @param item */ focusItem(item: ITimelineItem | ToggleButton): void; get hasGroupItems(): boolean; get _navigableItems(): (ToggleButton | ITimelineItem)[]; } export default Timeline; export type { ITimelineItem, };