import { EventEmitter } from '../../stencil-public-runtime';
import { GlobalSlimmers } from '../../vega-slimmer/vega-slimmer-core';
import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
import { VegaFileUploaderFile, VegaFileUploaderFiles, VegaFileUploaderType } from './types';
import { VegaFileUploaderRenderer } from './slimmers/renderers/vega-file-uploader-renderer';
import { VegaFileUploaderContainerRenderer } from './slimmers/renderers/vega-file-uploader-container-renderer';
import { VegaFileUploaderFileListRenderer } from './slimmers/renderers/vega-file-uploader-file-list-renderer';
import { VegaFileUploaderFileStatusRenderer } from './slimmers/renderers/vega-file-uploader-file-status-renderer';
import { EventEmitSlimmerBase } from '../../helpers/event-manager/slimmers/event-emit-slimmer';
import { VegaFileUploaderValueController } from './slimmers/controllers/vega-file-uploader-value-controller';
import { FormFieldValidationRule } from '../../helpers/validator/rules/form-field-validation-rule';
import { FormFieldControllerSlimmer } from '../../helpers/slimmers/form-field-controller-slimmer';
import { DropFileAcceptFilterSlimmer } from '../../helpers/slimmers/drop-file-accept-filter-slimmer';
import { TranslationSlimmer } from '../../helpers/slimmers/translation';
import { VegaFileUploaderFileLimitController } from './slimmers/controllers/vega-file-uploader-file-limit-controller';
/**
 * @vegaVersion 2.25.0
 */
export declare class VegaFileUploader {
  protected readonly globalSlimmers: GlobalSlimmers;
  protected translationSlimmer: TranslationSlimmer<HTMLVegaFileUploaderElement>;
  protected vegaComponentUsageRuntimeMetricsSlimmer: VegaComponentUsageRuntimeMetricsSlimmer<HTMLVegaFileUploaderElement>;
  protected formFieldController: FormFieldControllerSlimmer<VegaFileUploaderFiles>;
  protected vegaFileUploaderRenderer: VegaFileUploaderRenderer;
  protected vegaFileUploaderContainerRenderer: VegaFileUploaderContainerRenderer;
  protected vegaFileUploaderFileListRenderer: VegaFileUploaderFileListRenderer;
  protected vegaFileUploaderFileStatusRenderer: VegaFileUploaderFileStatusRenderer;
  protected vegaFileUploaderValueController: VegaFileUploaderValueController;
  protected dropFileFilterController: DropFileAcceptFilterSlimmer;
  protected fileLimitController: VegaFileUploaderFileLimitController;
  protected changeEventEmitter: EventEmitSlimmerBase;
  protected selectFileChangeEventEmitter: EventEmitSlimmerBase;
  protected removeEventEmitter: EventEmitSlimmerBase;
  protected retryEventEmitter: EventEmitSlimmerBase;
  protected previewEventEmitter: EventEmitSlimmerBase;
  host: HTMLVegaFileUploaderElement;
  /**
   * Specifies the label or title for the field.
   *
   * It provides descriptive text that helps identify the
   *    purpose or content expected in the field.
   *
   * @vegaVersion 2.25.0
   */
  label: string;
  /**
   * Specifies the uploader type that activates when clicked
   *    or when a file is dragged, determining how users
   *    interact with the file uploader.
   *
   * @vegaVersion 2.25.0
   */
  variant: VegaFileUploaderType;
  /**
   * Provides a supplementary prompt message that assists users in
   *    understanding the expected value for the file uploader field.
   *
   * @vegaVersion 2.25.0
   */
  hint: string;
  /**
   * Specifies the initial file content to display, enabling a preview
   *    of the uploaded file or a default placeholder.
   *
   * @vegaVersion 2.25.0
   */
  value: VegaFileUploaderFile[] | null;
  /**
   * Watches the value change.
   *
   * @param {VegaFileUploaderFile[]} newValue The new value
   */
  watchValue(newValue: VegaFileUploaderFile[]): void;
  /**
   * Specifies whether the File Uploader field is disabled.
   *
   * @vegaVersion 2.25.0
   */
  disabled: boolean;
  /**
   * Specifies the maximum number of files that can be uploaded using the File Uploader. The value must be a positive integer.
   *
   * @vegaVersion 2.36.0
   */
  maxCount: number | null;
  /**
   * Watches the maxCount change.
   */
  watchMaxCount(): void;
  /**
   * Specifies whether uploading a file is mandatory.
   *
   * @vegaVersion 2.25.0
   */
  required: boolean;
  /**
   * Defines custom validation rules for the File Uploader field.
   *
   * @vegaVersion 2.25.0
   */
  validationRules: FormFieldValidationRule<unknown>[];
  watchValidationRules(): void;
  /**
   * Determines whether the input field should undergo automatic validation
   *    during the user's input.
   *
   * @vegaVersion 2.25.0
   */
  autoValidation: boolean;
  /**
   * Specifies the validation status of the file uploader component.
   *
   * @vegaVersion 2.25.0
   */
  isValid: boolean | null;
  /**
   * Specifies the allowed file types for upload.
   *
   * @vegaVersion 2.25.0
   * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/accept
   */
  accept: string;
  /**
   * An event emitter notifying a change in the file list.
   *
   * @vegaVersion 2.25.0
   */
  vegaChange: EventEmitter<VegaFileUploaderFiles>;
  /**
   * An event emitter notifying a change in the file list.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.25.0
   */
  change: EventEmitter<VegaFileUploaderFiles>;
  /**
   * An event emitter notifying a file selection change. By default, the component value
   *   is updated, but this behavior can be prevented.
   *
   * @vegaVersion 2.25.0
   */
  vegaSelectedFileChange: EventEmitter<VegaFileUploaderFiles>;
  /**
   * An event emitter notifying a file selection change. By default, the component value
   *   is updated, but this behavior can be prevented.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.25.0
   */
  selectedFileChange: EventEmitter<VegaFileUploaderFiles>;
  /**
   * An event emitter notifying that a selected file will be removed. By default, the component value
   *   is updated, but this behavior can be prevented.
   *
   * @vegaVersion 2.25.0
   */
  vegaRemove: EventEmitter<VegaFileUploaderFile>;
  /**
   * An event emitter notifying that a selected file will be removed. By default, the component value
   *   is updated, but this behavior can be prevented.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.25.0
   */
  remove: EventEmitter<VegaFileUploaderFile>;
  /**
   * An event emitter notifying that a file will be re-uploaded.
   *
   * @vegaVersion 2.25.0
   */
  vegaRetry: EventEmitter<VegaFileUploaderFile>;
  /**
   * An event emitter notifying that a file will be re-uploaded.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.25.0
   */
  retry: EventEmitter<VegaFileUploaderFile>;
  /**
   * An event emitter notifying that a file will be opened for preview.
   *
   * @vegaVersion 2.25.0
   */
  vegaPreview: EventEmitter<VegaFileUploaderFile>;
  /**
   * An event emitter notifying that a file will be opened for preview.
   *
   * @eventSemantics namespace:native
   * @vegaVersion 2.25.0
   */
  preview: EventEmitter<VegaFileUploaderFile>;
  render(): VegaFileUploader;
}
