import { ConnectedPosition } from '@angular/cdk/overlay';
import * as i0 from '@angular/core';
import { InputSignal, ModelSignal, InputSignalWithTransform, OutputEmitterRef, ElementRef, InjectionToken } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';

declare const DefaultPositions: ConnectedPosition[];
declare const GetDefaultPosition: (position: ConnectedPosition[]) => ConnectedPosition[];
/**
 * Preset options for the popover body width.
 * * `at-least` will apply a minimum width to the body equivalent to the width of the control.
 * * `equal` will apply a width to the body equivalent to the width of the control.
 * * 'fit-content' will apply width needed to properly display items inside, independent of control.
 */
type PopoverFillMode = 'at-least' | 'equal' | 'fit-content';
declare enum PopoverPlacement {
    AUTO_START = "auto-start",
    AUTO = "auto",
    AUTO_END = "auto-end",
    TOP_START = "top-start",
    TOP = "top",
    TOP_END = "top-end",
    RIGHT_START = "right-start",
    RIGHT = "right",
    RIGHT_END = "right-end",
    BOTTOM_END = "bottom-end",
    BOTTOM = "bottom",
    BOTTOM_START = "bottom-start",
    LEFT_END = "left-end",
    LEFT = "left",
    LEFT_START = "left-start"
}
type Placement = 'auto-start' | 'auto' | 'auto-end' | 'top-start' | 'top' | 'top-end' | 'right-start' | 'right' | 'right-end' | 'bottom-end' | 'bottom' | 'bottom-start' | 'left-end' | 'left' | 'left-start';
type RtlPlacement = 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
type XPositions = 'start' | 'center' | 'end';
type YPositions = 'top' | 'center' | 'bottom';
type ArrowPosition = 'top' | 'bottom' | 'start' | 'end' | 'center';
declare const PopoverFlippedYDirection: {
    [key: string]: YPositions;
};
declare const PopoverFlippedRtlPlacement: {
    [key in RtlPlacement]: RtlPlacement;
};
declare class PopoverPosition {
    /** Get the cdk placement of the popover */
    static getCdkPlacement(placement: Placement, direction?: 'rtl' | 'ltr'): ConnectedPosition;
}

type Appearance = {
    searchClass: string;
    searchFieldClass: string;
    searchCategoryClass: string;
    searchSubmitClass: string;
    buttonClass: string;
    addonClass: string;
    categoryButtonClass: string;
    categoryDropdownButtonClass: string;
    removeGroupButtonClass: boolean;
    helperClass?: string;
};
interface SearchComponent {
    placeholder: InputSignal<string>;
    disableRefresh: ModelSignal<boolean>;
    disableSearch: InputSignalWithTransform<boolean, unknown>;
    categoryMode: ModelSignal<'menu' | 'select'>;
    forceSearchButton: ModelSignal<boolean>;
    searchSubmit: OutputEmitterRef<{
        text: string;
        category: string | null;
    }>;
    elementRef: ElementRef<HTMLElement>;
    appearance?: ModelSignal<Appearance | undefined>;
    focus(): void;
}

/**
 * Special days mark, it can be used by passing array of object with
 * Special day number, list 1-20 [class:`fd-calendar__item--legend-{{number}}`] is available there:
 * https://sap.github.io/fundamental-styles/components/calendar.html calendar special days section
 * Rule accepts method with FdDate object as a parameter. ex:
 * `rule: (fdDate: FdDate) => fdDate.getDay() === 1`, which will mark all sundays as special day.
 */
interface SpecialDayRule<D> {
    specialDayNumber: number;
    rule: (date: D) => boolean;
    legendText?: string;
    appointment?: boolean;
}

interface TabList {
    stackContent: boolean;
    scrollableElement: Nullable<ElementRef>;
    headerContainer: Nullable<ElementRef>;
    selectTab(id: Nullable<string>): void;
}

/**
 *
 * This service holds default
 * value state aria messages
 * that are needed for accessibility purposes.
 *
 * It's intendant to be used with form controls
 * which supports different value states
 *
 */
declare class ValueStateAriaMessageService {
    /** Value state "success" message */
    readonly success = "Value State Success";
    /** Value state "information" message */
    readonly information = "Value State Information";
    /** Value state "warning" message */
    readonly warning = "Value State Warning";
    /** Value state "error" message */
    readonly error = "Value State Error";
    static ɵfac: i0.ɵɵFactoryDeclaration<ValueStateAriaMessageService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<ValueStateAriaMessageService>;
}

declare const DYNAMIC_PAGE_HEADER_TOKEN: InjectionToken<unknown>;
interface DynamicPageHeader {
    /**
     * Page Title
     */
    title: string;
}

declare const FD_TABLIST: InjectionToken<TabList>;

type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6 | '1' | '2' | '3' | '4' | '5' | '6' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';

export { DYNAMIC_PAGE_HEADER_TOKEN, DefaultPositions, FD_TABLIST, GetDefaultPosition, PopoverFlippedRtlPlacement, PopoverFlippedYDirection, PopoverPlacement, PopoverPosition, ValueStateAriaMessageService };
export type { Appearance, ArrowPosition, DynamicPageHeader, HeadingLevel, Placement, PopoverFillMode, RtlPlacement, SearchComponent, SpecialDayRule, TabList, XPositions, YPositions };
