import * as i0 from '@angular/core';
import { OnInit, OnChanges, EventEmitter, SimpleChanges } from '@angular/core';
import { PlatformConfig, BaseComponent } from '@fundamental-ngx/platform/shared';
import { ContentDensity, Nullable } from '@fundamental-ngx/cdk/utils';
import * as i4 from '@fundamental-ngx/core/content-density';
import { ContentDensityObserver } from '@fundamental-ngx/core/content-density';
import { PanelTitleDirective } from '@fundamental-ngx/core/panel';

declare class PanelActionsComponent {
    static ɵfac: i0.ɵɵFactoryDeclaration<PanelActionsComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PanelActionsComponent, "fdp-panel-actions", never, {}, {}, never, ["*"], true, never>;
}

declare class PanelContentComponent {
    /**
     * @harmful Potentially bad approach to hardcode css related properties
     * Custom height of the content container.
     */
    contentHeight: string;
    /** Id of the host element. */
    id: string;
    static ɵfac: i0.ɵɵFactoryDeclaration<PanelContentComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PanelContentComponent, "fdp-panel-content", never, { "contentHeight": { "alias": "contentHeight"; "required": false; }; "id": { "alias": "id"; "required": false; }; }, {}, never, ["*"], true, never>;
}

/**
 * Default options for platform panel
 */
declare class PanelConfig {
    /**
     * ARIA label for button when the Panel is collapsed
     */
    expandLabel: string;
    /**
     * ARIA label for button when the Panel is expanded
     */
    collapseLabel: string;
    /**
     * Content Density of element. 'cozy' | 'compact'
     */
    contentDensity: ContentDensity;
    /** @hidden */
    constructor(platformConfig: PlatformConfig);
    /**
     * Create Provider factory function
     */
    static createProviderFactory(obj: Partial<PanelConfig>): (platformConfig: PlatformConfig) => PanelConfig;
    static ɵfac: i0.ɵɵFactoryDeclaration<PanelConfig, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<PanelConfig>;
}

/** Panel change event instance */
declare class PanelExpandChangeEvent {
    source: PanelComponent;
    payload: boolean;
    /**
     * Panel expand change event
     * @param source Panel component
     * @param payload Panel expand state
     */
    constructor(source: PanelComponent, payload: boolean);
}
/**
 * Fundamental Panel component
 *
 * ```html
 * <fdp-panel title="Panel Header">
 *     <fdp-panel-content>
 *        Panel Content
 *     </fdp-panel-content>
 * </fdp-panel>
 * ```
 *
 * */
declare class PanelComponent extends BaseComponent implements OnInit, OnChanges {
    protected _panelConfig: PanelConfig;
    readonly contentDensityObserver: ContentDensityObserver;
    /**
     * sets Panel title.
     */
    title: string;
    /**
     * Whether the Panel Content is expanded
     */
    expanded: boolean;
    /**
     * Whether the Panel is expandable
     */
    expandable: boolean;
    /**
     * ARIA label for button when the Panel is collapsed
     */
    expandLabel: string;
    /**
     * ARIA label for button when the Panel is expanded
     */
    collapseLabel: string;
    /** Output event triggered when the Expand button is clicked */
    panelExpandChange: EventEmitter<PanelExpandChangeEvent>;
    /** @hidden */
    _panelContentComponent: Nullable<PanelContentComponent>;
    /** @hidden */
    _panelTitleDirective: Nullable<PanelTitleDirective>;
    /**
     * @hidden
     * Button label based on the current state
     */
    _expandAriaLabel: string;
    /** @hidden id of the title element */
    _titleId: string;
    /** @hidden */
    constructor(_panelConfig: PanelConfig, contentDensityObserver: ContentDensityObserver);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    ngOnChanges(changes: SimpleChanges): void;
    /** Handles expanded/collapsed event */
    onExpandedChange(expanded: boolean): void;
    /**
     * @hidden
     * Calculate expandAriaLabel based on panel state
     */
    private _calculateExpandAriaLabel;
    static ɵfac: i0.ɵɵFactoryDeclaration<PanelComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<PanelComponent, "fdp-panel", never, { "title": { "alias": "title"; "required": false; }; "expanded": { "alias": "expanded"; "required": false; }; "expandable": { "alias": "expandable"; "required": false; }; "expandLabel": { "alias": "expandLabel"; "required": false; }; "collapseLabel": { "alias": "collapseLabel"; "required": false; }; }, { "panelExpandChange": "panelExpandChange"; }, ["_panelContentComponent"], ["fdp-panel-actions", "fdp-panel-content"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class PlatformPanelModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<PlatformPanelModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<PlatformPanelModule, never, [typeof PanelComponent, typeof PanelContentComponent, typeof PanelActionsComponent, typeof i4.ContentDensityModule], [typeof PanelComponent, typeof PanelContentComponent, typeof PanelActionsComponent, typeof i4.ContentDensityModule]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<PlatformPanelModule>;
}

export { PanelActionsComponent, PanelComponent, PanelConfig, PanelContentComponent, PanelExpandChangeEvent, PlatformPanelModule };
