import * as i0 from '@angular/core';
import { EventEmitter, ElementRef, QueryList, OnInit, AfterContentInit, OnDestroy, AfterViewInit } from '@angular/core';
import { ButtonComponent } from '@fundamental-ngx/core/button';
import { ControlValueAccessor } from '@angular/forms';
import { HasElementRef } from '@fundamental-ngx/cdk/utils';
import { ObjectMarkerComponent } from '@fundamental-ngx/core/object-marker';
import { ObjectStatusComponent } from '@fundamental-ngx/core/object-status';

declare class UploadCollectionButtonGroupComponent {
    /** Event emitted when the user clicks the edit button. */
    readonly editClicked: EventEmitter<boolean>;
    /** Event emitted when the user clicks the OK button to conform a file name change. */
    readonly okClicked: EventEmitter<any>;
    /** Event emitted when the user clicks the delete button. */
    readonly deleteClicked: EventEmitter<any>;
    /** Whether or not to allow file name editing. Default is true. */
    allowFileNameEdit: boolean;
    /** Whether or not to show the delete button. Default is true. */
    allowFileDeletion: boolean;
    /** Whether or not to disable the file name edit button. Default is false. */
    disableFileNameEdit: boolean;
    /** Whether or not to disable the delete button. Default is false. */
    disableFileDeletion: boolean;
    /** @hidden */
    _okButton: ButtonComponent;
    /** @hidden */
    _editMode: boolean;
    /** @hidden */
    _editButtonClicked(event?: MouseEvent): void;
    /** @hidden */
    _deleteButtonClicked(event?: MouseEvent): void;
    /** @hidden */
    _okButtonClicked(event?: MouseEvent): void;
    /** @hidden */
    _cancelButtonClicked(event?: MouseEvent): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionButtonGroupComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<UploadCollectionButtonGroupComponent, "fd-upload-collection-button-group", never, { "allowFileNameEdit": { "alias": "allowFileNameEdit"; "required": false; }; "allowFileDeletion": { "alias": "allowFileDeletion"; "required": false; }; "disableFileNameEdit": { "alias": "disableFileNameEdit"; "required": false; }; "disableFileDeletion": { "alias": "disableFileDeletion"; "required": false; }; }, { "editClicked": "editClicked"; "okClicked": "okClicked"; "deleteClicked": "deleteClicked"; }, never, never, true, never>;
}

declare class UploadCollectionFormItemComponent implements ControlValueAccessor {
    /** @hidden */
    _editMode: boolean;
    /** Event emitted when the dragged file exits the dropzone. */
    readonly fileNameChanged: EventEmitter<string>;
    /** @hidden */
    _fileNameValue: string;
    /** @hidden */
    _extension: string;
    /** Value of the text input. */
    set fileName(value: string);
    get fileName(): string;
    /** @hidden */
    onChange: (value: string) => void;
    /** @hidden */
    onTouched: () => void;
    /** @hidden */
    writeValue(value: string): void;
    /** @hidden */
    registerOnChange(fn: (value: string) => void): void;
    /** @hidden */
    registerOnTouched(fn: () => void): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionFormItemComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<UploadCollectionFormItemComponent, "fd-upload-collection-form-item", never, { "_editMode": { "alias": "_editMode"; "required": false; }; }, { "fileNameChanged": "fileNameChanged"; }, never, never, true, never>;
}

declare class UploadCollectionThumbnailDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionThumbnailDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionThumbnailDirective, "[fd-upload-collection-thumbnail]", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionTitleDirective {
    /** @hidden */
    readonly elRef: ElementRef<any>;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionTitleDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionTitleDirective, "[fd-upload-collection-title]", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionDescriptionDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionDescriptionDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionDescriptionDirective, "[fd-upload-collection-description]", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionTextSeparatorDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionTextSeparatorDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionTextSeparatorDirective, "[fd-upload-collection-text-separator], fd-upload-collection-text-separator", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionStatusGroupDirective {
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionStatusGroupDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionStatusGroupDirective, "[fd-upload-collection-status-group]", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionStatusItemDirective implements OnInit {
    private _objectStatus;
    /** @hidden */
    constructor(_objectStatus: ObjectStatusComponent);
    /** @hidden */
    ngOnInit(): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionStatusItemDirective, [{ optional: true; }]>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionStatusItemDirective, "[fd-upload-collection-status-item]", never, {}, {}, never, never, true, never>;
}
declare class UploadCollectionTitleContainerDirective {
    /** @hidden */
    _objectMarkerComponents: QueryList<ObjectMarkerComponent>;
    /** Whether or not this is in edit mode. */
    applyContainerClass: boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionTitleContainerDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionTitleContainerDirective, "[fd-upload-collection-title-container]", never, {}, {}, ["_objectMarkerComponents"], never, true, never>;
}

declare class UploadCollectionItemDirective implements AfterContentInit, OnDestroy, AfterViewInit, HasElementRef {
    /** The name of the file, not including the type extension. */
    fileName: string;
    /** The file type extension. */
    extension: string;
    /** @hidden */
    _formItemComponent: UploadCollectionFormItemComponent;
    /** @hidden */
    _titleDirective: UploadCollectionTitleDirective;
    /** @hidden */
    _buttonGroupComponent: UploadCollectionButtonGroupComponent;
    /** @hidden */
    _titleContainerDirective: UploadCollectionTitleContainerDirective;
    /** Event emitted when the user changes a file name. */
    readonly fileNameChanged: EventEmitter<any>;
    /** Event emitted when presses the delete button. */
    readonly deleteClicked: EventEmitter<any>;
    /** @hidden */
    fileNameFull: string;
    /** @hidden */
    titleWidth: number;
    /** @hidden used to compare to the current width to know whether to collapse or expand title */
    previousContainerWidth: number;
    /** @hidden */
    containerWidth: number;
    /** @hidden */
    readonly elementRef: ElementRef<any>;
    /** @hidden */
    private _subscriptions;
    /** @hidden */
    onResize(): void;
    /** @hidden */
    ngAfterContentInit(): void;
    /** @hidden */
    ngAfterViewInit(): void;
    /** @hidden */
    ngOnDestroy(): void;
    /** @hidden */
    private _handleOkClickedSubscription;
    /** @hidden */
    private _handleEditClickedSubscription;
    /** @hidden */
    private _handleDeleteClickedSubscription;
    /** @hidden */
    private _handleFormItemInputChangedSubscription;
    /** @hidden */
    private getTitleWidth;
    /** @hidden */
    private getContainerWidth;
    /**
     * @hidden
     *
     * truncates the string by cutting out excess length in the middle and replacing with '...'
     */
    private truncateTitle;
    /**
     * @hidden
     *
     * determines if file title needs to be truncated given container constraint.
     */
    private resizeFileTitle;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionItemDirective, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<UploadCollectionItemDirective, "[fd-upload-collection-item]", never, { "fileName": { "alias": "fileName"; "required": false; }; "extension": { "alias": "extension"; "required": false; }; }, { "fileNameChanged": "fileNameChanged"; "deleteClicked": "deleteClicked"; }, ["_formItemComponent", "_titleDirective", "_buttonGroupComponent", "_titleContainerDirective"], never, true, never>;
}

declare class UploadCollectionComponent {
    /** Whether or not this is the small upload collection. */
    small: boolean;
    /** Whether or not this upload collection supports selection. */
    selection: boolean;
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<UploadCollectionComponent, "fd-upload-collection", never, { "small": { "alias": "small"; "required": false; }; "selection": { "alias": "selection"; "required": false; }; }, {}, never, ["*"], true, never>;
}

/**
 * @deprecated
 * Use direct imports of components and directives.
 */
declare class UploadCollectionModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<UploadCollectionModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<UploadCollectionModule, never, [typeof UploadCollectionComponent, typeof UploadCollectionItemDirective, typeof UploadCollectionThumbnailDirective, typeof UploadCollectionTitleDirective, typeof UploadCollectionDescriptionDirective, typeof UploadCollectionTextSeparatorDirective, typeof UploadCollectionStatusGroupDirective, typeof UploadCollectionStatusItemDirective, typeof UploadCollectionButtonGroupComponent, typeof UploadCollectionFormItemComponent, typeof UploadCollectionTitleContainerDirective], [typeof UploadCollectionComponent, typeof UploadCollectionItemDirective, typeof UploadCollectionThumbnailDirective, typeof UploadCollectionTitleDirective, typeof UploadCollectionDescriptionDirective, typeof UploadCollectionTextSeparatorDirective, typeof UploadCollectionStatusGroupDirective, typeof UploadCollectionStatusItemDirective, typeof UploadCollectionButtonGroupComponent, typeof UploadCollectionFormItemComponent, typeof UploadCollectionTitleContainerDirective]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<UploadCollectionModule>;
}

export { UploadCollectionButtonGroupComponent, UploadCollectionComponent, UploadCollectionDescriptionDirective, UploadCollectionFormItemComponent, UploadCollectionItemDirective, UploadCollectionModule, UploadCollectionStatusGroupDirective, UploadCollectionStatusItemDirective, UploadCollectionTextSeparatorDirective, UploadCollectionThumbnailDirective, UploadCollectionTitleContainerDirective, UploadCollectionTitleDirective };
