import * as i0 from '@angular/core';
import { InjectionToken, AfterViewInit, OnChanges, OnDestroy, OnInit, TemplateRef, EventEmitter, SimpleChanges, ModuleWithProviders, Provider } from '@angular/core';

declare const ONE_COLUMN_START_FULL_SCREEN = "OneColumnStartFullScreen";
declare const ONE_COLUMN_MID_FULL_SCREEN = "OneColumnMidFullScreen";
declare const ONE_COLUMN_END_FULL_SCREEN = "OneColumnEndFullScreen";
declare const TWO_COLUMNS_START_EXPANDED = "TwoColumnsStartExpanded";
declare const TWO_COLUMNS_MID_EXPANDED = "TwoColumnsMidExpanded";
declare const TWO_COLUMNS_END_EXPANDED = "TwoColumnsEndExpanded";
declare const THREE_COLUMNS_MID_EXPANDED = "ThreeColumnsMidExpanded";
declare const THREE_COLUMNS_END_EXPANDED = "ThreeColumnsEndExpanded";
declare const THREE_COLUMNS_START_MINIMIZED = "ThreeColumnsStartMinimized";
declare const THREE_COLUMNS_END_MINIMIZED = "ThreeColumnsEndMinimized";
declare const SM_SCREEN_SIZE = "sm";
declare const MD_SCREEN_SIZE = "md";
declare const LG_SCREEN_SIZE = "lg";
type ScreenSize = 'sm' | 'md' | 'lg';
type FlexibleColumnLayout = 'OneColumnStartFullScreen' | 'OneColumnMidFullScreen' | 'OneColumnEndFullScreen' | 'TwoColumnsStartExpanded' | 'TwoColumnsMidExpanded' | 'TwoColumnsEndExpanded' | 'ThreeColumnsMidExpanded' | 'ThreeColumnsEndExpanded' | 'ThreeColumnsStartMinimized' | 'ThreeColumnsEndMinimized';
type ColumnSeparatorValue = 'right' | 'left' | null;
interface FlexibleColumnSettings {
    start: number;
    mid: number;
    end: number;
}
type FlexibleColumnLayoutDefinition = {
    [key in FlexibleColumnLayout]: FlexibleColumnSettings;
};
interface FlexibleLayoutConfig {
    layouts: FlexibleColumnLayoutDefinition;
}
declare const DEFAULT_FLEXIBLE_LAYOUT_CONFIG: FlexibleLayoutConfig;
declare const FD_FLEXIBLE_LAYOUT_CONFIG: InjectionToken<FlexibleLayoutConfig>;

declare class FlexibleColumnLayoutComponent implements AfterViewInit, OnChanges, OnDestroy, OnInit {
    /**
     * The template that provides the content of the first/start/left column
     */
    startColumn: TemplateRef<any>;
    /**
     * The template that provides the content of the middle column
     */
    midColumn: TemplateRef<any>;
    /**
     * The template that provides the content of the last/end/right column
     */
    endColumn: TemplateRef<any>;
    /**
     * The background design of the component
     * Options include: 'solid' | 'translucent' | 'transparent'
     * The default is set to 'solid'
     */
    backgroundDesign: 'solid' | 'translucent' | 'transparent';
    /**
     * The layout of the component
     * Options include: 'OneColumnStartFullScreen' | 'OneColumnMidFullScreen' |
     * 'OneColumnEndFullScreen' | 'TwoColumnsStartExpanded' | 'TwoColumnsMidExpanded' |
     * 'TwoColumnsEndExpanded' | 'ThreeColumnsMidExpanded' | 'ThreeColumnsEndExpanded' |
     * 'ThreeColumnsStartMinimized' | 'ThreeColumnsEndMinimized'
     */
    layout: FlexibleColumnLayout;
    /**
     * Mapping of the layout name and the column layout in %
     */
    layoutDefinitions: FlexibleColumnLayoutDefinition;
    /**
     * The event emitted on layout value change.
     */
    layoutChange: EventEmitter<FlexibleColumnLayout>;
    /**
     * User defined break point for SM screens
     * Default (Fiori 3) value is 960
     */
    smBreakPoint: number;
    /**
     * User-defined break point for LG screens
     * the default (Fiori 3) value is 1280
     */
    lgBreakPoint: number;
    /**
     * User-defined onResize function
     */
    customOnResizeFunction: () => void;
    /** aria-label for separator */
    separatorAriaLabel: string;
    /** title for expanded button */
    expandTitle: string;
    /** title for collapsed button */
    collapseTitle: string;
    /** title for expanded state of the button between start and mid column */
    expandTitleStartBtn: string;
    /** title for collapsed state of the button between start and mid column */
    collapseTitleStartBtn: string;
    /** title for expanded state of the button between mid and end column */
    expandTitleEndBtn: string;
    /** title for collapsed state of the button between mid and end column */
    collapseTitleEndBtn: string;
    /**
     * @hidden
     * left column separator value (between start and middle columns)
     * that specifies the direction of the arrow and
     * if the separator is visible
     * Options include: 'left', 'right' and null
     */
    _leftColumnSeparator: ColumnSeparatorValue;
    /**
     * @hidden
     * right column separator value (between middle and end columns)
     * that specifies the direction of the arrow and
     * if the separator is visible
     * Options include: 'left', 'right' and null
     */
    _rightColumnSeparator: ColumnSeparatorValue;
    /**
     * @hidden
     * the column layout representing the distribution of the width
     * between the first (start), the middle and the last(end) column
     */
    _columnLayout: {
        start: number;
        mid: number;
        end: number;
    };
    /**
     * @hidden
     * allows to keep track of the previos layout
     * so we can go back to it on window resize
     */
    private _previousLayout;
    /** @hidden */
    private _screenSize;
    /** @hidden */
    private _subscriptions;
    /**
     * @hidden
     * set to 'true' if the layout is changed to fullscreen on window resize
     * this will allow the layout to switch to previous mode on SM->MD transition
     * if a layout is set by the user to fullscreen, it should persist on window resize
     */
    private _responsiveFullscreenLayout;
    /**
     * @hidden
     * function that handles the click events on the left separator
     * and updates the layout
     */
    _handleLeftColumnSeparatorClick(): void;
    /**
     * @hidden
     * function that handles the click events on the right separator
     * and updates the layout
     */
    _handleRightColumnSeparatorClick(): void;
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** @hidden */
    ngOnDestroy(): void;
    /**
     * @hidden
     * function to determine the screen size in 'sm' | 'md' | 'lg' | 'xl'
     * format depending on the window size in px
     */
    private _getScreenSize;
    /**
     * @hidden
     * handles the change of the layouts on reaching a break point
     */
    private _responsiveLayoutChangeHandler;
    /**
     * @hidden
     * Listen on window resize and update the layout
     * call user defined custom function if provided
     */
    private _listenOnWindowResize;
    /**
     * @hidden
     * determines if the left separator should be visible
     * and the value that will specify the direction of the arrow
     */
    private _getLeftColumnSeparatorValue;
    /**
     * @hidden
     * determines if the right separator should be visible
     * and the value that will specify the direction of the arrow
     */
    private _getRightColumnSeparatorValue;
    /**
     * @hidden
     * updates the column layout based on the layout name
     * makes a call to determine the new value of the left separator
     * makes a call to determine the new value of the right separator
     */
    private _updateColumnLayoutParameters;
    /**
     * @hidden
     * updates the layout
     * emits an event
     * makes a call to the helper function that will update the column layout and the separators
     */
    private _updateCurrentLayout;
    static ɵfac: i0.ɵɵFactoryDeclaration<FlexibleColumnLayoutComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FlexibleColumnLayoutComponent, "fd-flexible-column-layout", never, { "backgroundDesign": { "alias": "backgroundDesign"; "required": false; }; "layout": { "alias": "layout"; "required": false; }; "layoutDefinitions": { "alias": "layoutDefinitions"; "required": false; }; "smBreakPoint": { "alias": "smBreakPoint"; "required": false; }; "lgBreakPoint": { "alias": "lgBreakPoint"; "required": false; }; "customOnResizeFunction": { "alias": "customOnResizeFunction"; "required": false; }; "separatorAriaLabel": { "alias": "separatorAriaLabel"; "required": false; }; "expandTitle": { "alias": "expandTitle"; "required": false; }; "collapseTitle": { "alias": "collapseTitle"; "required": false; }; "expandTitleStartBtn": { "alias": "expandTitleStartBtn"; "required": false; }; "collapseTitleStartBtn": { "alias": "collapseTitleStartBtn"; "required": false; }; "expandTitleEndBtn": { "alias": "expandTitleEndBtn"; "required": false; }; "collapseTitleEndBtn": { "alias": "collapseTitleEndBtn"; "required": false; }; }, { "layoutChange": "layoutChange"; }, ["startColumn", "midColumn", "endColumn"], never, true, never>;
}

/**
 * Adds Flexible Column Layout functionality to your application.
 *
 * Can be imported in two ways:
 * * Plain `FlexibleColumnLayoutModule` with default configuration
 * * With `withConfig()` method which allows passing custom default configuration.
 */
/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class FlexibleColumnLayoutModule {
    /**
     * Allows configuring module on a global level with custom configuration.
     * @param config User's custom configuration.
     */
    static withConfig(config: Partial<FlexibleLayoutConfig>): ModuleWithProviders<FlexibleColumnLayoutModule>;
    static ɵfac: i0.ɵɵFactoryDeclaration<FlexibleColumnLayoutModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<FlexibleColumnLayoutModule, never, [typeof FlexibleColumnLayoutComponent], [typeof FlexibleColumnLayoutComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<FlexibleColumnLayoutModule>;
}

/**
 * Helper function to provide custom configuration for Flexible Column Layout component.
 * @param config
 * @returns
 */
declare function provideFlexibleColumnLayoutConfig(config: Partial<FlexibleLayoutConfig>): Provider[];

declare const FD_FLEXIBLE_COLUMN_LAYOUT_COMPONENT: InjectionToken<unknown>;

export { DEFAULT_FLEXIBLE_LAYOUT_CONFIG, FD_FLEXIBLE_COLUMN_LAYOUT_COMPONENT, FD_FLEXIBLE_LAYOUT_CONFIG, FlexibleColumnLayoutComponent, FlexibleColumnLayoutModule, LG_SCREEN_SIZE, MD_SCREEN_SIZE, ONE_COLUMN_END_FULL_SCREEN, ONE_COLUMN_MID_FULL_SCREEN, ONE_COLUMN_START_FULL_SCREEN, SM_SCREEN_SIZE, THREE_COLUMNS_END_EXPANDED, THREE_COLUMNS_END_MINIMIZED, THREE_COLUMNS_MID_EXPANDED, THREE_COLUMNS_START_MINIMIZED, TWO_COLUMNS_END_EXPANDED, TWO_COLUMNS_MID_EXPANDED, TWO_COLUMNS_START_EXPANDED, provideFlexibleColumnLayoutConfig };
export type { ColumnSeparatorValue, FlexibleColumnLayout, FlexibleColumnLayoutDefinition, FlexibleColumnSettings, FlexibleLayoutConfig, ScreenSize };
