import { FoundationElement } from '@microsoft/fast-foundation';
export declare const SECTION_NAVIGATOR_EVENTS: {
readonly setState: "section-navigator-set-state";
readonly setStates: "section-navigator-set-states";
readonly clearState: "section-navigator-clear-state";
readonly clearAllStates: "section-navigator-clear-all-states";
};
export type SectionItemStateName = 'active' | 'inactive' | 'pending' | 'disabled' | 'error' | 'completed';
export type SectionItemStateIcon = {
name: string;
variant: 'solid' | 'regular' | 'light' | 'thin';
};
export type SectionItemState = {
name: SectionItemStateName;
tooltip?: string;
};
export interface SectionItem {
name: string;
label: string;
states?: SectionItemStateName[];
}
export interface SetStateEventDetail {
sectionName: string;
stateName: SectionItemStateName;
}
export interface SetStatesEventDetail {
sectionName: string;
stateNames: SectionItemStateName[];
}
export interface ClearStateEventDetail {
sectionName: string;
stateName: SectionItemStateName;
}
export interface ClearAllStatesEventDetail {
sectionName?: string;
}
/**
* Section Navigator Component
*
* A component that provides navigation between different sections with support for state management.
* Each section can have multiple states that are displayed as icons next to the section label.
*
* @tagname %%prefix%%-section-navigator
*
* @attr sections - Array of section items to display
* @attr scroll-behavior - Scroll behavior: 'view' or 'top' (default: 'top')
* @attr state-tooltips - Custom tooltips for state icons
* @attr state-icons - Custom icons for state types
* @attr disable-auto-scroll-detection - Disable automatic active section detection during scrolling (default: false)
* When enabled, automatically updates active section based on scroll position.
* User clicks are prioritized - clicked section remains active until scroll ends.
*
* @listens set-state - Adds a single state to a section
* Detail: { sectionName: string, stateName: SectionItemStateName }
*
* @listens set-states - Adds multiple states to a section
* Detail: { sectionName: string, stateNames: SectionItemStateName[] }
*
* @listens clear-state - Removes a specific state from a section
* Detail: { sectionName: string, stateName: SectionItemStateName }
*
* @listens clear-all-states - Clears all states from a section or all sections
* Detail: { sectionName?: string } - If sectionName not provided, clears all sections
*
* @fires section-navigator-set-state - Fired when a child state event is re-dispatched with an inferred section name
* @fires section-navigator-set-states - Fired when a child state event is re-dispatched with an inferred section name
* @fires section-navigator-clear-state - Fired when a child state event is re-dispatched with an inferred section name
* @fires section-navigator-clear-all-states - Fired when a child state event is re-dispatched with an inferred section name
*
* @slot {sectionName} - Content for each section (slot name matches section name)
*
* @example
* ```html
*
*
* Section 1 content
* Section 2 content
*
*
*
*
* Section 1 content
* Section 2 content
*
* ```
*/
export declare class SectionNavigator extends FoundationElement {
sections: SectionItem[];
scrollBehavior: 'view' | 'top';
stateTooltips: Record;
stateIcons: Record;
disableAutoScrollDetection: boolean;
private handleSetStateRef?;
private handleSetStatesRef?;
private handleClearStateRef?;
private handleClearAllStatesRef?;
private handleGenericStateEventRef?;
private userClickedSection;
private scrollEndHandler?;
private isUserScrolling;
private scrollCheckHandler?;
private scrollDebounceTimeout?;
private static readonly SCROLL_END_TIMEOUT;
private static readonly SCROLL_DEBOUNCE_TIMEOUT;
sectionsChanged(): void;
disableAutoScrollDetectionChanged(): void;
scrollBehaviorChanged(): void;
sectionItems: SectionItem[];
activeSection: string;
sectionNavigatorContainer: HTMLElement;
sectionContent: HTMLElement;
private spacerElement?;
connectedCallback(): void;
private setSectionItems;
private setActiveSection;
handleSectionClick(sectionName: string): void;
private updateSpacer;
private scrollToSection;
private updateScrollDetection;
private setupScrollDetection;
private updateActiveSectionBasedOnScrollPosition;
private setupScrollEndDetection;
private cleanupScrollEndDetection;
private cleanupScrollDetection;
private setupStateEventListeners;
private updateSectionStates;
private addState;
private addStates;
private clearState;
private clearAllStates;
private clearAllStatesInAllSections;
getStateTooltip(stateName: SectionItemStateName): string;
getSectionStateClass(section: SectionItem): string;
getStateIcon(stateName: SectionItemStateName): SectionItemStateIcon;
disconnectedCallback(): void;
}
export declare const foundationSectionNavigatorShadowOptions: ShadowRootInit;
export declare const defaultSectionNavigatorConfig: {};
/**
* The Foundation SectionNavigator
*
* @public
* @remarks
* HTML Element: \
*/
export declare const foundationSectionNavigator: (overrideDefinition?: import("@microsoft/fast-foundation").OverrideFoundationElementDefinition<{
baseName: string;
template: import("@microsoft/fast-element").ViewTemplate;
styles: import("@microsoft/fast-element").ElementStyles;
shadowOptions: ShadowRootInit;
}>) => import("@microsoft/fast-foundation").FoundationElementRegistry<{
baseName: string;
template: import("@microsoft/fast-element").ViewTemplate;
styles: import("@microsoft/fast-element").ElementStyles;
shadowOptions: ShadowRootInit;
}, typeof SectionNavigator>;
//# sourceMappingURL=section-navigator.d.ts.map