import * as i0 from '@angular/core';
import { OnInit, ElementRef, Renderer2, AfterViewInit } from '@angular/core';
import { Nullable } from '@fundamental-ngx/cdk/utils';
import { HeadingLevel } from '@fundamental-ngx/core/shared';

declare const FACET_CLASS_NAME: {
    readonly facetContainer: "fd-facet__container";
    readonly facetRatingIndicatorContainer: "fd-facet__rating-container";
    readonly facetRatingIndicatorDynamicText: "fd-facet__rating-dynamic-text";
    readonly facetObjectStatus: "fd-facet__object-status";
    readonly facetObjectStatusText: "fd-facet__object-status-text";
    readonly marginTopTiny: "fd-margin-top--tiny";
    readonly marginBottomTiny: "fd-margin-bottom--tiny";
    readonly marginEndTiny: "fd-margin-end--tiny";
    readonly paddingNone: "fd-padding--none";
};
type FacetType = 'form' | 'key-value' | 'image' | 'rating-indicator' | 'custom';

declare class FacetContentComponent implements OnInit {
    readonly elementRef: ElementRef<HTMLElement>;
    private _renderer;
    /** @hidden */
    constructor(elementRef: ElementRef<HTMLElement>, _renderer: Renderer2);
    /** @hidden */
    ngOnInit(): void;
    /** @hidden */
    private _addClassNameToHostElement;
    static ɵfac: i0.ɵɵFactoryDeclaration<FacetContentComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FacetContentComponent, "fd-facet-content", never, {}, {}, never, ["*"], true, never>;
}

type ContainerFlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
type ContainerFlexJustify = 'start' | 'center' | 'end' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch';
type ContainerFlexAlign = 'start' | 'center' | 'end' | 'flex-start' | 'flex-end' | 'space-between' | 'space-around' | 'space-evenly' | 'stretch' | 'self-start' | 'self-end' | 'baseline';
declare class FacetContainerComponent {
    /**
     * Value for the direction of the flex container.
     * Possible values: 'row' | 'row-reverse' | 'column' | 'column-reverse'
     * Default: 'column'
     */
    flexDirection: i0.InputSignal<ContainerFlexDirection>;
    /**
     * Value for align-items of the flex container.
     * Possible values:
     * 'start', 'center', 'end', 'flex-start', 'flex-end', 'space-between', 'space-around',
     * 'space-evenly', 'stretch', 'self-start', 'self-end', 'baseline'
     * Default: 'start'
     */
    alignItems: i0.InputSignal<ContainerFlexJustify>;
    /**
     * Value for justify-content of the flex container.
     * Possible values:
     * 'start', 'center', 'end', 'flex-start', 'flex-end', 'space-between', 'space-around',
     * 'space-evenly', 'stretch'
     * Default: 'start'
     */
    justifyContent: i0.InputSignal<ContainerFlexAlign>;
    /**
     * Value for the flex container gap in rem.
     * An integer number
     * Default: 1
     */
    flexGap: i0.InputSignal<number>;
    static ɵfac: i0.ɵɵFactoryDeclaration<FacetContainerComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FacetContainerComponent, "fd-facet-container", never, { "flexDirection": { "alias": "flexDirection"; "required": false; "isSignal": true; }; "alignItems": { "alias": "alignItems"; "required": false; "isSignal": true; }; "justifyContent": { "alias": "justifyContent"; "required": false; "isSignal": true; }; "flexGap": { "alias": "flexGap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
}

declare class FacetGroupComponent {
    /**
     * the aria label for the facet group
     */
    ariaLabel: Nullable<string>;
    static ɵfac: i0.ɵɵFactoryDeclaration<FacetGroupComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FacetGroupComponent, "fd-facet-group", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, {}, never, ["fd-facet"], true, never>;
}

declare class FacetComponent implements AfterViewInit {
    readonly elementRef: ElementRef<HTMLElement>;
    private _renderer;
    /** the type of Facet: form, key-value, image, rating-indicator */
    type: FacetType;
    /** The facet title.
     * For eg: for key-value facet, facetTitle is the key and the underlying object status or object number
     * component is the value.
     */
    facetTitle: string;
    /** An optional subtitle to display in the rating-indicator facet */
    subtitle: string;
    /**
     * Heading level of the facet title.
     */
    set headingLevel(level: Nullable<HeadingLevel>);
    /**
     * id for the facet
     */
    id: string;
    /**
     * property that allows the facet to be aligned to the end of the facet group, right-aligned.
     */
    alignEnd: boolean;
    /** @hidden
     * the appropriate role for each facet type
     */
    get role(): string;
    /** @hidden
     * the appropriate aria-labelledby to associate with the role
     */
    get ariaLabelledby(): string;
    /** @hidden */
    _headingLevel: number;
    /** @hidden
     * the internal id for the title to be associated with the aria-labelledby
     */
    titleId: string;
    /** @hidden */
    constructor(elementRef: ElementRef<HTMLElement>, _renderer: Renderer2);
    /** @hidden */
    ngAfterViewInit(): void;
    /**
     * @hidden
     * set up common styles and specific styles based on each facet type
     */
    private _setupAdditionalStyles;
    /** @hidden
     * adds the logic for `alignEnd` modifier
     */
    private _addAlignmentModifier;
    /** @hidden */
    private _setStyleToHostElement;
    /** @hidden */
    private _addClassNameToCustomElement;
    static ɵfac: i0.ɵɵFactoryDeclaration<FacetComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<FacetComponent, "fd-facet", never, { "type": { "alias": "type"; "required": false; }; "facetTitle": { "alias": "facetTitle"; "required": false; }; "subtitle": { "alias": "subtitle"; "required": false; }; "headingLevel": { "alias": "headingLevel"; "required": false; }; "id": { "alias": "id"; "required": false; }; "alignEnd": { "alias": "alignEnd"; "required": false; }; }, {}, never, ["fd-facet-content", "*"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class FacetModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<FacetModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<FacetModule, never, [typeof FacetComponent, typeof FacetGroupComponent, typeof FacetContentComponent, typeof FacetContainerComponent], [typeof FacetComponent, typeof FacetGroupComponent, typeof FacetContentComponent, typeof FacetContainerComponent]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<FacetModule>;
}

declare const addClassNameToFacetElement: (renderer: Renderer2, element: Element, className: string) => void;

export { FACET_CLASS_NAME, FacetComponent, FacetContainerComponent, FacetContentComponent, FacetGroupComponent, FacetModule, addClassNameToFacetElement };
export type { ContainerFlexAlign, ContainerFlexDirection, ContainerFlexJustify, FacetType };
