import type { DefaultPassThrough, PassThrough } from '@primevue-ce/core';
import type { PrimeVueCSPOptions, PrimeVueLocaleOptions, PrimeVueZIndexOptions } from '@primevue-ce/core/config';
import type { AccordionPassThroughOptions } from '@primevue-ce/primevue/accordion';
import type { AccordionContentPassThroughOptions } from '@primevue-ce/primevue/accordioncontent';
import type { AccordionHeaderPassThroughOptions } from '@primevue-ce/primevue/accordionheader';
import type { AccordionPanelPassThroughOptions } from '@primevue-ce/primevue/accordionpanel';
import type { AccordionTabPassThroughOptions } from '@primevue-ce/primevue/accordiontab';
import type { AnimateOnScrollDirectivePassThroughOptions } from '@primevue-ce/primevue/animateonscroll';
import type { AutoCompletePassThroughOptions } from '@primevue-ce/primevue/autocomplete';
import type { AvatarPassThroughOptions } from '@primevue-ce/primevue/avatar';
import type { AvatarGroupPassThroughOptions } from '@primevue-ce/primevue/avatargroup';
import type { BadgePassThroughOptions } from '@primevue-ce/primevue/badge';
import type { BadgeDirectivePassThroughOptions } from '@primevue-ce/primevue/badgedirective';
import type { BlockUIPassThroughOptions } from '@primevue-ce/primevue/blockui';
import type { BreadcrumbPassThroughOptions } from '@primevue-ce/primevue/breadcrumb';
import type { ButtonPassThroughOptions } from '@primevue-ce/primevue/button';
import type { ButtonGroupPassThroughOptions } from '@primevue-ce/primevue/buttongroup';
import type { CalendarPassThroughOptions } from '@primevue-ce/primevue/calendar';
import type { CardPassThroughOptions } from '@primevue-ce/primevue/card';
import type { CarouselPassThroughOptions } from '@primevue-ce/primevue/carousel';
import type { CascadeSelectPassThroughOptions } from '@primevue-ce/primevue/cascadeselect';
import type { ChartPassThroughOptions } from '@primevue-ce/primevue/chart';
import type { CheckboxPassThroughOptions } from '@primevue-ce/primevue/checkbox';
import type { CheckboxGroupPassThroughOptions } from '@primevue-ce/primevue/checkboxgroup';
import type { ChipPassThroughOptions } from '@primevue-ce/primevue/chip';
import type { ChipsPassThroughOptions } from '@primevue-ce/primevue/chips';
import type { ColorPickerPassThroughOptions } from '@primevue-ce/primevue/colorpicker';
import type { ColumnPassThroughOptions } from '@primevue-ce/primevue/column';
import type { ColumnGroupPassThroughOptions } from '@primevue-ce/primevue/columngroup';
import type { ConfirmDialogPassThroughOptions } from '@primevue-ce/primevue/confirmdialog';
import type { ConfirmPopupPassThroughOptions } from '@primevue-ce/primevue/confirmpopup';
import type { ContextMenuPassThroughOptions } from '@primevue-ce/primevue/contextmenu';
import type { DataTablePassThroughOptions } from '@primevue-ce/primevue/datatable';
import type { DataViewPassThroughOptions } from '@primevue-ce/primevue/dataview';
import type { DatePickerPassThroughOptions } from '@primevue-ce/primevue/datepicker';
import type { DeferredContentPassThroughOptions } from '@primevue-ce/primevue/deferredcontent';
import type { DialogPassThroughOptions } from '@primevue-ce/primevue/dialog';
import type { DividerPassThroughOptions } from '@primevue-ce/primevue/divider';
import type { DockPassThroughOptions } from '@primevue-ce/primevue/dock';
import type { DrawerPassThroughOptions } from '@primevue-ce/primevue/drawer';
import type { DropdownPassThroughOptions } from '@primevue-ce/primevue/dropdown';
import type { EditorPassThroughOptions } from '@primevue-ce/primevue/editor';
import type { FieldsetPassThroughOptions } from '@primevue-ce/primevue/fieldset';
import type { FileUploadPassThroughOptions } from '@primevue-ce/primevue/fileupload';
import type { FloatLabelPassThroughOptions } from '@primevue-ce/primevue/floatlabel';
import type { FluidPassThroughOptions } from '@primevue-ce/primevue/fluid';
import type { FocusTrapDirectivePassThroughOptions } from '@primevue-ce/primevue/focustrap';
import type { GalleriaPassThroughOptions } from '@primevue-ce/primevue/galleria';
import type { IconFieldPassThroughOptions } from '@primevue-ce/primevue/iconfield';
import type { IftaLabelPassThroughOptions } from '@primevue-ce/primevue/iftalabel';
import type { ImagePassThroughOptions } from '@primevue-ce/primevue/image';
import type { ImageComparePassThroughOptions } from '@primevue-ce/primevue/imagecompare';
import type { InlineMessagePassThroughOptions } from '@primevue-ce/primevue/inlinemessage';
import type { InplacePassThroughOptions } from '@primevue-ce/primevue/inplace';
import type { InputChipsPassThroughOptions } from '@primevue-ce/primevue/inputchips';
import type { InputGroupPassThroughOptions } from '@primevue-ce/primevue/inputgroup';
import type { InputGroupAddonPassThroughOptions } from '@primevue-ce/primevue/inputgroupaddon';
import type { InputIconPassThroughOptions } from '@primevue-ce/primevue/inputicon';
import type { InputMaskPassThroughOptions } from '@primevue-ce/primevue/inputmask';
import type { InputNumberPassThroughOptions } from '@primevue-ce/primevue/inputnumber';
import type { InputOtpPassThroughOptions } from '@primevue-ce/primevue/inputotp';
import type { InputSwitchPassThroughOptions } from '@primevue-ce/primevue/inputswitch';
import type { InputTextPassThroughOptions } from '@primevue-ce/primevue/inputtext';
import type { KeyFilterDirectivePassThroughOptions } from '@primevue-ce/primevue/keyfilter';
import type { KnobPassThroughOptions } from '@primevue-ce/primevue/knob';
import type { ListboxPassThroughOptions } from '@primevue-ce/primevue/listbox';
import type { MegaMenuPassThroughOptions } from '@primevue-ce/primevue/megamenu';
import type { MenuPassThroughOptions } from '@primevue-ce/primevue/menu';
import type { MenubarPassThroughOptions } from '@primevue-ce/primevue/menubar';
import type { MessagePassThroughOptions } from '@primevue-ce/primevue/message';
import type { MeterGroupPassThroughOptions } from '@primevue-ce/primevue/metergroup';
import type { MultiSelectPassThroughOptions } from '@primevue-ce/primevue/multiselect';
import type { OrderListPassThroughOptions } from '@primevue-ce/primevue/orderlist';
import type { OrganizationChartPassThroughOptions } from '@primevue-ce/primevue/organizationchart';
import type { OverlayBadgePassThroughOptions } from '@primevue-ce/primevue/overlaybadge';
import type { OverlayPanelPassThroughOptions } from '@primevue-ce/primevue/overlaypanel';
import type { PaginatorPassThroughOptions } from '@primevue-ce/primevue/paginator';
import type { PanelPassThroughOptions } from '@primevue-ce/primevue/panel';
import type { PanelMenuPassThroughOptions } from '@primevue-ce/primevue/panelmenu';
import type { PassThroughOptions } from '@primevue-ce/primevue/passthrough';
import type { PasswordPassThroughOptions } from '@primevue-ce/primevue/password';
import type { PickListPassThroughOptions } from '@primevue-ce/primevue/picklist';
import type { PopoverPassThroughOptions } from '@primevue-ce/primevue/popover';
import type { ProgressBarPassThroughOptions } from '@primevue-ce/primevue/progressbar';
import type { ProgressSpinnerPassThroughOptions } from '@primevue-ce/primevue/progressspinner';
import type { RadioButtonPassThroughOptions } from '@primevue-ce/primevue/radiobutton';
import type { RadioButtonGroupPassThroughOptions } from '@primevue-ce/primevue/radiobuttongroup';
import type { RatingPassThroughOptions } from '@primevue-ce/primevue/rating';
import type { RippleDirectivePassThroughOptions } from '@primevue-ce/primevue/ripple';
import type { RowPassThroughOptions } from '@primevue-ce/primevue/row';
import type { ScrollPanelPassThroughOptions } from '@primevue-ce/primevue/scrollpanel';
import type { ScrollTopPassThroughOptions } from '@primevue-ce/primevue/scrolltop';
import type { SelectPassThroughOptions } from '@primevue-ce/primevue/select';
import type { SelectButtonPassThroughOptions } from '@primevue-ce/primevue/selectbutton';
import type { SidebarPassThroughOptions } from '@primevue-ce/primevue/sidebar';
import type { SkeletonPassThroughOptions } from '@primevue-ce/primevue/skeleton';
import type { SliderPassThroughOptions } from '@primevue-ce/primevue/slider';
import type { SpeedDialPassThroughOptions } from '@primevue-ce/primevue/speeddial';
import type { SplitButtonPassThroughOptions } from '@primevue-ce/primevue/splitbutton';
import type { SplitterPassThroughOptions } from '@primevue-ce/primevue/splitter';
import type { SplitterPanelPassThroughOptions } from '@primevue-ce/primevue/splitterpanel';
import type { StepPassThroughOptions } from '@primevue-ce/primevue/step';
import type { StepItemPassThroughOptions } from '@primevue-ce/primevue/stepitem';
import type { StepListPassThroughOptions } from '@primevue-ce/primevue/steplist';
import type { StepPanelPassThroughOptions } from '@primevue-ce/primevue/steppanel';
import type { StepPanelsPassThroughOptions } from '@primevue-ce/primevue/steppanels';
import type { StepperPassThroughOptions } from '@primevue-ce/primevue/stepper';
import type { StepsPassThroughOptions } from '@primevue-ce/primevue/steps';
import type { StyleClassDirectivePassThroughOptions } from '@primevue-ce/primevue/styleclass';
import type { TabPassThroughOptions } from '@primevue-ce/primevue/tab';
import type { TabListPassThroughOptions } from '@primevue-ce/primevue/tablist';
import type { TabMenuPassThroughOptions } from '@primevue-ce/primevue/tabmenu';
import type { TabPanelPassThroughOptions } from '@primevue-ce/primevue/tabpanel';
import type { TabPanelsPassThroughOptions } from '@primevue-ce/primevue/tabpanels';
import type { TabsPassThroughOptions } from '@primevue-ce/primevue/tabs';
import type { TabViewPassThroughOptions } from '@primevue-ce/primevue/tabview';
import type { TagPassThroughOptions } from '@primevue-ce/primevue/tag';
import type { TerminalPassThroughOptions } from '@primevue-ce/primevue/terminal';
import type { TextareaPassThroughOptions } from '@primevue-ce/primevue/textarea';
import type { TieredMenuPassThroughOptions } from '@primevue-ce/primevue/tieredmenu';
import type { TimelinePassThroughOptions } from '@primevue-ce/primevue/timeline';
import type { ToastPassThroughOptions } from '@primevue-ce/primevue/toast';
import type { ToggleButtonPassThroughOptions } from '@primevue-ce/primevue/togglebutton';
import type { ToggleSwitchPassThroughOptions } from '@primevue-ce/primevue/toggleswitch';
import type { ToolbarPassThroughOptions } from '@primevue-ce/primevue/toolbar';
import type { TooltipDirectivePassThroughOptions } from '@primevue-ce/primevue/tooltip';
import type { TreePassThroughOptions } from '@primevue-ce/primevue/tree';
import type { TreeSelectPassThroughOptions } from '@primevue-ce/primevue/treeselect';
import type { TreeTablePassThroughOptions } from '@primevue-ce/primevue/treetable';
import type { VirtualScrollerPassThroughOptions } from '@primevue-ce/primevue/virtualscroller';

export * from '@primevue-ce/core/config';
export { default } from '@primevue-ce/core/config';

export interface PrimeVueConfiguration {
    ripple?: boolean;
    /**
     * @deprecated since v4.0. Use 'inputVariant' instead.
     */
    inputStyle?: 'filled' | 'outlined' | undefined;
    inputVariant?: 'filled' | 'outlined' | undefined;
    locale?: PrimeVueLocaleOptions;
    filterMatchModeOptions?: any;
    zIndex?: PrimeVueZIndexOptions;
    theme?: any;
    unstyled?: boolean;
    pt?: PassThrough<PrimeVuePTOptions>;
    ptOptions?: PassThroughOptions;
    csp?: PrimeVueCSPOptions;
    prefix?: string;
}

export interface PrimeVuePTOptions {
    accordion?: DefaultPassThrough<AccordionPassThroughOptions>;
    accordionpanel?: DefaultPassThrough<AccordionPanelPassThroughOptions>;
    accordionheader?: DefaultPassThrough<AccordionHeaderPassThroughOptions>;
    accordioncontent?: DefaultPassThrough<AccordionContentPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of Accordion instead.
     */
    accordiontab?: DefaultPassThrough<AccordionTabPassThroughOptions>;
    autocomplete?: DefaultPassThrough<AutoCompletePassThroughOptions>;
    avatar?: DefaultPassThrough<AvatarPassThroughOptions>;
    avatargroup?: DefaultPassThrough<AvatarGroupPassThroughOptions>;
    badge?: DefaultPassThrough<BadgePassThroughOptions>;
    blockui?: DefaultPassThrough<BlockUIPassThroughOptions>;
    breadcrumb?: DefaultPassThrough<BreadcrumbPassThroughOptions>;
    button?: DefaultPassThrough<ButtonPassThroughOptions>;
    buttongroup?: DefaultPassThrough<ButtonGroupPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of DatePicker instead.
     */
    calendar?: DefaultPassThrough<CalendarPassThroughOptions>;
    card?: DefaultPassThrough<CardPassThroughOptions>;
    carousel?: DefaultPassThrough<CarouselPassThroughOptions>;
    cascadeselect?: DefaultPassThrough<CascadeSelectPassThroughOptions>;
    chart?: DefaultPassThrough<ChartPassThroughOptions>;
    checkbox?: DefaultPassThrough<CheckboxPassThroughOptions>;
    checkboxgroup?: DefaultPassThrough<CheckboxGroupPassThroughOptions>;
    chip?: DefaultPassThrough<ChipPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of InputChips instead.
     */
    chips?: DefaultPassThrough<ChipsPassThroughOptions>;
    colorpicker?: DefaultPassThrough<ColorPickerPassThroughOptions>;
    column?: DefaultPassThrough<ColumnPassThroughOptions>;
    columngroup?: DefaultPassThrough<ColumnGroupPassThroughOptions>;
    confirmdialog?: DefaultPassThrough<ConfirmDialogPassThroughOptions>;
    confirmpopup?: DefaultPassThrough<ConfirmPopupPassThroughOptions>;
    contextmenu?: DefaultPassThrough<ContextMenuPassThroughOptions>;
    datatable?: DefaultPassThrough<DataTablePassThroughOptions>;
    dataview?: DefaultPassThrough<DataViewPassThroughOptions>;
    datepicker?: DefaultPassThrough<DatePickerPassThroughOptions>;
    deferredcontent?: DefaultPassThrough<DeferredContentPassThroughOptions>;
    divider?: DefaultPassThrough<DividerPassThroughOptions>;
    dialog?: DefaultPassThrough<DialogPassThroughOptions>;
    dock?: DefaultPassThrough<DockPassThroughOptions>;
    drawer?: DefaultPassThrough<DrawerPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of Select instead.
     */
    dropdown?: DefaultPassThrough<DropdownPassThroughOptions>;
    dynamicdialog?: DefaultPassThrough<DialogPassThroughOptions>;
    editor?: DefaultPassThrough<EditorPassThroughOptions>;
    fieldset?: DefaultPassThrough<FieldsetPassThroughOptions>;
    fileupload?: DefaultPassThrough<FileUploadPassThroughOptions>;
    floatlabel?: DefaultPassThrough<FloatLabelPassThroughOptions>;
    fluid?: DefaultPassThrough<FluidPassThroughOptions>;
    galleria?: DefaultPassThrough<GalleriaPassThroughOptions>;
    iconfield?: DefaultPassThrough<IconFieldPassThroughOptions>;
    iftalabel?: DefaultPassThrough<IftaLabelPassThroughOptions>;
    image?: DefaultPassThrough<ImagePassThroughOptions>;
    imagecompare?: DefaultPassThrough<ImageComparePassThroughOptions>;
    inlinemessage?: DefaultPassThrough<InlineMessagePassThroughOptions>;
    inplace?: DefaultPassThrough<InplacePassThroughOptions>;
    inputchips?: DefaultPassThrough<InputChipsPassThroughOptions>;
    inputgroup?: DefaultPassThrough<InputGroupPassThroughOptions>;
    inputgroupaddon?: DefaultPassThrough<InputGroupAddonPassThroughOptions>;
    inputicon?: DefaultPassThrough<InputIconPassThroughOptions>;
    inputmask?: DefaultPassThrough<InputMaskPassThroughOptions>;
    inputnumber?: DefaultPassThrough<InputNumberPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of ToggleSwitch instead.
     */
    inputotp?: DefaultPassThrough<InputOtpPassThroughOptions>;
    inputswitch?: DefaultPassThrough<InputSwitchPassThroughOptions>;
    inputtext?: DefaultPassThrough<InputTextPassThroughOptions>;
    knob?: DefaultPassThrough<KnobPassThroughOptions>;
    listbox?: DefaultPassThrough<ListboxPassThroughOptions>;
    megamenu?: DefaultPassThrough<MegaMenuPassThroughOptions>;
    menu?: DefaultPassThrough<MenuPassThroughOptions>;
    menubar?: DefaultPassThrough<MenubarPassThroughOptions>;
    message?: DefaultPassThrough<MessagePassThroughOptions>;
    metergroup?: DefaultPassThrough<MeterGroupPassThroughOptions>;
    multiselect?: DefaultPassThrough<MultiSelectPassThroughOptions>;
    orderlist?: DefaultPassThrough<OrderListPassThroughOptions>;
    organizationchart?: DefaultPassThrough<OrganizationChartPassThroughOptions>;
    overlaybadge?: DefaultPassThrough<OverlayBadgePassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of Popover instead.
     */
    overlaypanel?: DefaultPassThrough<OverlayPanelPassThroughOptions>;
    paginator?: DefaultPassThrough<PaginatorPassThroughOptions>;
    panel?: DefaultPassThrough<PanelPassThroughOptions>;
    panelmenu?: DefaultPassThrough<PanelMenuPassThroughOptions>;
    password?: DefaultPassThrough<PasswordPassThroughOptions>;
    picklist?: DefaultPassThrough<PickListPassThroughOptions>;
    popover?: DefaultPassThrough<PopoverPassThroughOptions>;
    progressbar?: DefaultPassThrough<ProgressBarPassThroughOptions>;
    progressspinner?: DefaultPassThrough<ProgressSpinnerPassThroughOptions>;
    radiobutton?: DefaultPassThrough<RadioButtonPassThroughOptions>;
    radiobuttongroup?: DefaultPassThrough<RadioButtonGroupPassThroughOptions>;
    rating?: DefaultPassThrough<RatingPassThroughOptions>;
    row?: DefaultPassThrough<RowPassThroughOptions>;
    scrollpanel?: DefaultPassThrough<ScrollPanelPassThroughOptions>;
    scrolltop?: DefaultPassThrough<ScrollTopPassThroughOptions>;
    /**
     * @deprecated since v4. Use the new structure of Drawer instead.
     */
    sidebar?: DefaultPassThrough<SidebarPassThroughOptions>;
    skeleton?: DefaultPassThrough<SkeletonPassThroughOptions>;
    slider?: DefaultPassThrough<SliderPassThroughOptions>;
    speeddial?: DefaultPassThrough<SpeedDialPassThroughOptions>;
    selectbutton?: DefaultPassThrough<SelectButtonPassThroughOptions>;
    select?: DefaultPassThrough<SelectPassThroughOptions>;
    splitbutton?: DefaultPassThrough<SplitButtonPassThroughOptions>;
    splitter?: DefaultPassThrough<SplitterPassThroughOptions>;
    splitterpanel?: DefaultPassThrough<SplitterPanelPassThroughOptions>;
    step?: DefaultPassThrough<StepPassThroughOptions>;
    stepitem?: DefaultPassThrough<StepItemPassThroughOptions>;
    steplist?: DefaultPassThrough<StepListPassThroughOptions>;
    steppanel?: DefaultPassThrough<StepPanelPassThroughOptions>;
    steppanels?: DefaultPassThrough<StepPanelsPassThroughOptions>;
    stepper?: DefaultPassThrough<StepperPassThroughOptions>;
    steps?: DefaultPassThrough<StepsPassThroughOptions>;
    tabmenu?: DefaultPassThrough<TabMenuPassThroughOptions>;
    tabs?: DefaultPassThrough<TabsPassThroughOptions>;
    tablist?: DefaultPassThrough<TabListPassThroughOptions>;
    tab?: DefaultPassThrough<TabPassThroughOptions>;
    tabpanels?: DefaultPassThrough<TabPanelsPassThroughOptions>;
    tabpanel?: DefaultPassThrough<TabPanelPassThroughOptions>;
    /**
     * @deprecated since v4. Use tabs instead.
     */
    tabview?: DefaultPassThrough<TabViewPassThroughOptions>;
    tag?: DefaultPassThrough<TagPassThroughOptions>;
    terminal?: DefaultPassThrough<TerminalPassThroughOptions>;
    textarea?: DefaultPassThrough<TextareaPassThroughOptions>;
    tieredmenu?: DefaultPassThrough<TieredMenuPassThroughOptions>;
    timeline?: DefaultPassThrough<TimelinePassThroughOptions>;
    toast?: DefaultPassThrough<ToastPassThroughOptions>;
    togglebutton?: DefaultPassThrough<ToggleButtonPassThroughOptions>;
    toggleswitch?: DefaultPassThrough<ToggleSwitchPassThroughOptions>;
    toolbar?: DefaultPassThrough<ToolbarPassThroughOptions>;
    tree?: DefaultPassThrough<TreePassThroughOptions>;
    treeselect?: DefaultPassThrough<TreeSelectPassThroughOptions>;
    treetable?: DefaultPassThrough<TreeTablePassThroughOptions>;
    virtualscroller?: DefaultPassThrough<VirtualScrollerPassThroughOptions>;
    directives?: {
        animate?: AnimateOnScrollDirectivePassThroughOptions;
        badge?: BadgeDirectivePassThroughOptions;
        focustrap?: FocusTrapDirectivePassThroughOptions;
        keyfilter?: KeyFilterDirectivePassThroughOptions;
        ripple?: RippleDirectivePassThroughOptions;
        styleclass?: StyleClassDirectivePassThroughOptions;
        tooltip?: TooltipDirectivePassThroughOptions;
    };
    global?: {
        css?: ((options: any) => string | undefined) | string | undefined;
    };
}
