@uploadcare/file-uploader
Version: 
Building blocks for Uploadcare products integration
1,562 lines (1,522 loc) • 65.5 kB
TypeScript
import { BaseComponent } from '@symbiotejs/symbiote';
export { BaseComponent, Data, UID } from '@symbiotejs/symbiote';
import * as _uploadcare_upload_client from '@uploadcare/upload-client';
import { UploadcareFile, Metadata, UploadError, NetworkError, UploadcareGroup, FileFromOptions } from '@uploadcare/upload-client';
export { Metadata, NetworkError, UploadError, UploadcareError, UploadcareFile, UploadcareGroup } from '@uploadcare/upload-client';
import { TelemetryRequest } from '@uploadcare/quality-insights';
declare class A11y {
    private _destroyKeyUX;
    private readonly _scopedWindow;
    constructor();
    registerBlock(scope: Block): void;
    destroy(): void;
}
type LocaleChangeCallback = () => void;
declare class LocaleManager {
    private _blockInstance;
    private _localeName;
    private _callbacks;
    private _boundBlocks;
    constructor(blockInstance: Block);
    onLocaleChange(callback: LocaleChangeCallback): () => void;
    bindL10n(block: Block, key: string, resolver: LocaleChangeCallback): void;
    destroyL10nBindings(block: Block): void;
    destroy(): void;
}
declare class Modal extends Block {
    static styleAttrs: string[];
    static StateConsumerScope: string;
    private _mouseDownTarget;
    handleModalOpen: ModalCb;
    handleModalClose: ModalCb;
    handleModalCloseAll: ModalCb;
    constructor();
    _handleBackdropClick: () => void;
    _closeDialog: () => void;
    _handleDialogClose: () => void;
    _handleDialogMouseDown: (e: MouseEvent) => void;
    _handleDialogMouseUp: (e: MouseEvent) => void;
    show(): void;
    hide(): void;
    private _handleModalOpen;
    private _handleModalClose;
    private _handleModalCloseAll;
    initCallback(): void;
    destroyCallback(): void;
}
declare const ModalEvents: Readonly<{
    readonly ADD: "modal:add";
    readonly DELETE: "modal:delete";
    readonly OPEN: "modal:open";
    readonly CLOSE: "modal:close";
    readonly CLOSE_ALL: "modal:closeAll";
    readonly DESTROY: "modal:destroy";
}>;
type ModalId = ActivityType;
type ModalCb = (data: {
    id: ModalId;
    modal: Modal;
}) => void;
type ModalEventType = (typeof ModalEvents)[keyof typeof ModalEvents];
declare class ModalManager {
    private _modals;
    private _activeModals;
    private _subscribers;
    private _block;
    constructor(block: Block);
    private _debugPrint;
    /**
     * Register a modal with the manager
     * @param id Unique identifier for the modal
     * @param modal Modal component instance
     */
    registerModal(id: ModalId, modal: Modal): void;
    /** Remove a modal by ID. */
    deleteModal(id: ModalId): boolean;
    /** Open a modal by its ID. */
    open(id: ModalId): boolean;
    /** Close a specific modal by ID. */
    close(id: ModalId): boolean;
    /** Toggle a modal - open if closed, close if open. */
    toggle(id: ModalId): boolean;
    /** True if there are any active modals. */
    get hasActiveModals(): boolean;
    /** Close the most recently opened modal and return to the previous one. */
    back(): boolean;
    /** Close all open modals. */
    closeAll(): number;
    /**
     * Subscribe to modal events
     * @returns Unsubscribe function
     */
    subscribe(event: ModalEventType, callback: ModalCb): () => void;
    /** Unsubscribe from modal events */
    unsubscribe(event: ModalEventType, callback: ModalCb | undefined): void;
    /** Notify all subscribers of a modal event. */
    private _notify;
    /** Destroy the modal manager, clean up resources */
    destroy(): void;
}
type TelemetryState = TelemetryRequest & {
    eventTimestamp: number;
};
type TelemetryEventBody = Partial<Pick<TelemetryState, 'payload' | 'config'>> & {
    modalId?: string;
    eventType?: EventKey;
};
declare class TelemetryManager {
    private readonly _sessionId;
    private readonly _telemetryInstance;
    private readonly _block;
    private _config;
    private _initialized;
    private _lastPayload;
    private readonly _queue;
    constructor(block: Block);
    private _init;
    private _setConfig;
    private _formattingPayload;
    private _excludedEvents;
    sendEvent(body: TelemetryEventBody): void;
    sendEventError(error: unknown, context?: string): void;
    /**
     * Method to send telemetry event for Cloud Image Editor.
     */
    sendEventCloudImageEditor(e: MouseEvent, tabId: string, options?: Record<string, unknown>): void;
    /**
     * Deeply compares two objects and returns true if they are equal, false otherwise.
     */
    private _checkObj;
    private get _timestamp();
    private get _solution();
    private get _activity();
}
declare class Block extends BaseComponent<any> {
    private __cfgProxy?;
    protected l10nProcessorSubs: Map<string, Set<{
        remove: () => void;
    }>>;
    static StateConsumerScope: string | null;
    static styleAttrs: string[];
    protected requireCtxName: boolean;
    activityType: ActivityType;
    init$: {};
    l10n(str: string, variables?: Record<string, string | number>): string;
    private pluralize;
    protected bindL10n(key: string, resolver: () => void): void;
    constructor();
    emit(type: Parameters<EventEmitter['emit']>[0], payload?: Parameters<EventEmitter['emit']>[1], options?: Parameters<EventEmitter['emit']>[2]): void;
    hasBlockInCtx(callback: (block: Block) => boolean): boolean;
    setOrAddState(prop: string, newVal: any): void;
    connectedCallback(): void;
    disconnectedCallback(): void;
    initCallback(): void;
    get testId(): string;
    get modalManager(): ModalManager | undefined;
    get telemetryManager(): TelemetryManager | {
        sendEvent: () => void;
        sendEventCloudImageEditor: () => void;
        sendEventError: () => void;
    };
    protected get localeManager(): LocaleManager | null;
    protected get a11y(): A11y | null;
    protected get blocksRegistry(): Set<Block>;
    destroyCallback(): void;
    /**
     * Called when the last block is removed from the context. Note that inheritors must run their callback before that.
     */
    protected destroyCtxCallback(): void;
    protected proxyUrl(url: string): Promise<string>;
    get cfg(): ConfigType;
    subConfigValue<T extends keyof ConfigType>(key: T, callback: (value: ConfigType[T]) => void): void;
    debugPrint(...args: unknown[]): void;
    static reg(name?: string): void;
}
declare const EventType: Readonly<{
    readonly INIT_SOLUTION: "init-solution";
    readonly CHANGE_CONFIG: "change-config";
    readonly FILE_ADDED: "file-added";
    readonly FILE_REMOVED: "file-removed";
    readonly FILE_UPLOAD_START: "file-upload-start";
    readonly FILE_UPLOAD_PROGRESS: "file-upload-progress";
    readonly FILE_UPLOAD_SUCCESS: "file-upload-success";
    readonly FILE_UPLOAD_FAILED: "file-upload-failed";
    readonly FILE_URL_CHANGED: "file-url-changed";
    readonly MODAL_OPEN: "modal-open";
    readonly MODAL_CLOSE: "modal-close";
    readonly DONE_CLICK: "done-click";
    readonly UPLOAD_CLICK: "upload-click";
    readonly ACTIVITY_CHANGE: "activity-change";
    readonly COMMON_UPLOAD_START: "common-upload-start";
    readonly COMMON_UPLOAD_PROGRESS: "common-upload-progress";
    readonly COMMON_UPLOAD_SUCCESS: "common-upload-success";
    readonly COMMON_UPLOAD_FAILED: "common-upload-failed";
    readonly CHANGE: "change";
    readonly GROUP_CREATED: "group-created";
}>;
type EventKey = (typeof EventType)[keyof typeof EventType];
type EventPayload = {
    [EventType.FILE_ADDED]: OutputFileEntry<'idle'>;
    [EventType.FILE_REMOVED]: OutputFileEntry<'removed'>;
    [EventType.FILE_UPLOAD_START]: OutputFileEntry<'uploading'>;
    [EventType.FILE_UPLOAD_PROGRESS]: OutputFileEntry<'uploading'>;
    [EventType.FILE_UPLOAD_SUCCESS]: OutputFileEntry<'success'>;
    [EventType.FILE_UPLOAD_FAILED]: OutputFileEntry<'failed'>;
    [EventType.FILE_URL_CHANGED]: OutputFileEntry<'success'>;
    [EventType.MODAL_OPEN]: {
        modalId: ModalId;
    };
    [EventType.MODAL_CLOSE]: {
        modalId: ModalId;
        hasActiveModals: boolean;
    };
    [EventType.ACTIVITY_CHANGE]: {
        activity: ActivityType;
    };
    [EventType.UPLOAD_CLICK]: void;
    [EventType.DONE_CLICK]: OutputCollectionState;
    [EventType.COMMON_UPLOAD_START]: OutputCollectionState<'uploading'>;
    [EventType.COMMON_UPLOAD_PROGRESS]: OutputCollectionState<'uploading'>;
    [EventType.COMMON_UPLOAD_SUCCESS]: OutputCollectionState<'success'>;
    [EventType.COMMON_UPLOAD_FAILED]: OutputCollectionState<'failed'>;
    [EventType.CHANGE]: OutputCollectionState;
    [EventType.GROUP_CREATED]: OutputCollectionState<'success', 'has-group'>;
    [EventType.INIT_SOLUTION]: void;
    [EventType.CHANGE_CONFIG]: void;
};
declare class EventEmitter {
    private _timeoutStore;
    private _targets;
    private _debugPrint;
    constructor(debugPrint: (...args: unknown[]) => void);
    bindTarget(target: Block): void;
    unbindTarget(target: Block): void;
    private _dispatch;
    emit<T extends EventKey, TDebounce extends boolean | number | undefined = undefined>(type: T, payload?: TDebounce extends false | undefined ? EventPayload[T] : () => EventPayload[T], options?: {
        debounce?: TDebounce;
    }): void;
}
type EventMap = {
    [T in keyof EventPayload]: CustomEvent<EventPayload[T]>;
};
type LocaleDefinition = Record<string, string>;
type LocaleDefinitionResolver = () => Promise<LocaleDefinition>;
declare const defineLocale: (localeName: string, definitionOrResolver: LocaleDefinition | LocaleDefinitionResolver) => void;
declare function buildOutputCollectionState<TCollectionStatus extends OutputCollectionStatus, TGroupFlag extends GroupFlag = 'maybe-has-group'>(uploaderBlock: UploaderBlock): OutputCollectionState<TCollectionStatus, TGroupFlag>;
type TypedSchema = Record<string, {
    type: unknown;
    value: unknown;
    nullable?: boolean;
}>;
type Constructor<T = any> = new (...args: any[]) => T;
type ExtractType<T, V> = T extends StringConstructor ? string : T extends BooleanConstructor ? boolean : T extends NumberConstructor ? number : T extends ArrayConstructor ? V : T extends Constructor ? InstanceType<T> : T;
type ExtractDataFromSchema<T extends TypedSchema> = {
    [K in keyof T]: ExtractType<T[K]['type'], T[K]['value']> | (T[K]['nullable'] extends true ? null : never);
};
type ExtractKeysFromSchema<T extends TypedSchema> = Extract<keyof T, string>;
declare class TypedData<T extends TypedSchema> {
    private __typedSchema;
    private __ctxId;
    private __schema;
    private __data;
    constructor(typedSchema: T, ctxName?: string);
    get uid(): string;
    setValue<K extends ExtractKeysFromSchema<T>>(prop: K, value: ExtractDataFromSchema<T>[K]): void;
    setMultipleValues(updObj: Partial<ExtractDataFromSchema<T>>): void;
    getValue<K extends ExtractKeysFromSchema<T>>(prop: K): ExtractDataFromSchema<T>[K];
    subscribe<K extends ExtractKeysFromSchema<T>>(prop: K, handler: (newVal: ExtractDataFromSchema<T>[K]) => void): {
        remove: () => void;
        callback: Function;
    };
    remove(): void;
}
declare const uploadEntrySchema: Readonly<{
    file: Readonly<{
        type: {
            new (fileBits: BlobPart[], fileName: string, options?: FilePropertyBag): File;
            prototype: File;
        };
        value: null;
        nullable: true;
    }>;
    externalUrl: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    fileName: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    fileSize: Readonly<{
        type: NumberConstructor;
        value: null;
        nullable: true;
    }>;
    lastModified: Readonly<{
        type: NumberConstructor;
        value: number;
    }>;
    uploadProgress: Readonly<{
        type: NumberConstructor;
        value: 0;
    }>;
    uuid: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    isImage: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    mimeType: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    ctxName: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    cdnUrl: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    cdnUrlModifiers: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    fileInfo: Readonly<{
        type: typeof UploadcareFile;
        value: null;
        nullable: true;
    }>;
    isUploading: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    abortController: Readonly<{
        type: {
            new (): AbortController;
            prototype: AbortController;
        };
        value: null;
        nullable: true;
    }>;
    thumbUrl: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    silent: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    source: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    fullPath: Readonly<{
        type: StringConstructor;
        value: null;
        nullable: true;
    }>;
    metadata: Readonly<{
        type: ObjectConstructor;
        value: null;
        nullable: true;
    }>;
    errors: Readonly<{
        type: ArrayConstructor;
        value: OutputErrorFile[];
    }>;
    uploadError: Readonly<{
        type: ErrorConstructor;
        value: null;
        nullable: true;
    }>;
    isRemoved: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    isQueuedForUploading: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    isValidationPending: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
    isQueuedForValidation: Readonly<{
        type: BooleanConstructor;
        value: false;
    }>;
}>;
type UploadEntryData = ExtractDataFromSchema<typeof uploadEntrySchema>;
type UploadEntryTypedData = TypedData<typeof uploadEntrySchema>;
type UploadEntryKeys = ExtractKeysFromSchema<typeof uploadEntrySchema>;
type FuncFileValidator = (outputEntry: OutputFileEntry, api: UploaderPublicApi, options?: {
    signal?: AbortSignal;
}) => undefined | OutputErrorFile | Promise<undefined | OutputErrorFile>;
type FileValidatorDescriptor = {
    runOn: 'add' | 'upload' | 'change';
    validator: FuncFileValidator;
};
type FileValidator = FileValidatorDescriptor | FuncFileValidator;
type FuncCollectionValidator = (collection: ReturnType<typeof buildOutputCollectionState<OutputCollectionStatus>>, api: UploaderPublicApi) => undefined | OutputErrorCollection;
declare class ValidationManager {
    private _blockInstance;
    private _uploadCollection;
    private _commonFileValidators;
    private _commonCollectionValidators;
    private _queue;
    private _runQueueDebounced;
    private _entryValidationState;
    constructor(blockInstance: UploaderBlock);
    runFileValidators(runOn: FileValidatorDescriptor['runOn'], entryIds?: string[]): void;
    runCollectionValidators(): void;
    cleanupValidationForEntry(entry: TypedData<typeof uploadEntrySchema>): void;
    private _runFileValidatorsForEntry;
    private _addCustomTypeToValidationError;
    private _getEntryValidationState;
    private _getValidatorDescriptors;
    private _getValidatorDescriptorsForEntry;
}
type CameraMode = 'photo' | 'video';
type CameraStatus = 'shot' | 'retake' | 'accept' | 'play' | 'stop' | 'pause' | 'resume';
declare class CameraSource extends UploaderBlock {
    couldBeCtxOwner: boolean;
    activityType: "camera";
    private _unsubPermissions;
    private _capturing;
    private _chunks;
    private _mediaRecorder;
    private _stream;
    private _selectedAudioId;
    private _selectedCameraId;
    private _activeTab;
    private _options;
    private _canvas;
    private _ctx;
    private _cameraDevices;
    private _audioDevices;
    private _permissionResponses;
    constructor();
    _chooseActionWithCamera: () => void;
    _updateTimer: () => void;
    _startTimer: () => void;
    _stopTimer: () => void;
    _startTimeline: () => void;
    _stopTimeline: () => void;
    _animationFrameId: number | null;
    _startRecording: () => void;
    private _stopRecording;
    /** This method is used to toggle recording pause/resume */
    _toggleRecording: () => void;
    _toggleEnableAudio: () => void;
    /**
     * Previewing the video that was recorded on the camera
     */
    private _previewVideo;
    _retake: () => void;
    _accept: () => void;
    _handlePhoto: (status: CameraStatus) => void;
    _handleVideo: (status: CameraStatus) => void;
    private _setCameraState;
    private _shot;
    private _handleActiveTab;
    private _createFile;
    _guessExtensionByMime(mime: string | undefined): string;
    /**
     * The send file to the server
     */
    _toSend: (file: File) => void;
    private get _cameraModes();
    private _setPermissionsState;
    _makeStreamInactive: () => boolean;
    _stopCapture: () => void;
    _capture: () => Promise<void>;
    _handlePermissionsChange: () => void;
    _permissionAccess: () => Promise<void>;
    _getPermission: () => void;
    _requestDeviceAccess: () => Promise<void>;
    _getDevices: () => Promise<void>;
    _onActivate: () => Promise<void>;
    _onDeactivate: () => Promise<void>;
    _handleCameraModes: (cameraModes: CameraMode[]) => void;
    initCallback(): void;
    _destroy(): void;
    destroyCallback(): Promise<void>;
}
/**
 * Config keys that can't be passed as attribute (because they are object or function)
 */
declare const complexConfigKeys: readonly ["metadata", "localeDefinitionOverride", "secureUploadsSignatureResolver", "secureDeliveryProxyUrlResolver", "iconHrefResolver", "fileValidators", "collectionValidators", "mediaRecorderOptions"];
/** Mapping of attribute names to state */
declare const attrStateMapping: Record<string, string>;
declare class Config extends Block {
    requireCtxName: boolean;
    constructor();
    private _flushValueToAttribute;
    private _flushValueToState;
    private _setValue;
    private _getValue;
    _assertSameValueDifferentReference(key: string, previousValue: unknown, nextValue: unknown): void;
    initCallback(): void;
    attributeChangedCallback(name: keyof typeof attrStateMapping, oldVal: string, newVal: string): void;
}
interface Config extends ConfigType {
}
type FilesViewMode = 'grid' | 'list';
declare class UploadList extends UploaderBlock {
    couldBeCtxOwner: boolean;
    historyTracked: boolean;
    activityType: "upload-list";
    constructor();
    private _throttledHandleCollectionUpdate;
    private _updateUploadsState;
    private _getHeaderText;
    get couldOpenActivity(): boolean;
    initCallback(): void;
    destroyCallback(): void;
}
declare const ExternalUploadSource: Readonly<{
    readonly FACEBOOK: "facebook";
    readonly DROPBOX: "dropbox";
    readonly GDRIVE: "gdrive";
    readonly GPHOTOS: "gphotos";
    readonly FLICKR: "flickr";
    readonly VK: "vk";
    readonly EVERNOTE: "evernote";
    readonly BOX: "box";
    readonly ONEDRIVE: "onedrive";
    readonly HUDDLE: "huddle";
}>;
declare const UploadSource: Readonly<{
    readonly FACEBOOK: "facebook";
    readonly DROPBOX: "dropbox";
    readonly GDRIVE: "gdrive";
    readonly GPHOTOS: "gphotos";
    readonly FLICKR: "flickr";
    readonly VK: "vk";
    readonly EVERNOTE: "evernote";
    readonly BOX: "box";
    readonly ONEDRIVE: "onedrive";
    readonly HUDDLE: "huddle";
    readonly MOBILE_VIDEO_CAMERA: "mobile-video-camera";
    readonly MOBILE_PHOTO_CAMERA: "mobile-photo-camera";
    readonly LOCAL: "local";
    readonly DROP_AREA: "drop-area";
    readonly CAMERA: "camera";
    readonly EXTERNAL: "external";
    readonly API: "js-api";
    readonly URL: "url";
    readonly DRAW: "draw";
}>;
type SourceTypes = (typeof UploadSource)[keyof typeof UploadSource];
declare const CameraSourceTypes: Readonly<{
    PHOTO: "photo";
    VIDEO: "video";
}>;
type ModeCameraType = (typeof CameraSourceTypes)[keyof typeof CameraSourceTypes];
type ApiAddFileCommonOptions = {
    silent?: boolean;
    fileName?: string;
    source?: string;
};
declare class UploaderPublicApi {
    private _ctx;
    constructor(ctx: UploaderBlock);
    private get _uploadCollection();
    get cfg(): ConfigType;
    get l10n(): (str: string, variables?: Record<string, string | number>) => string;
    /**
     * TODO: Probably we should not allow user to override `source` property
     */
    addFileFromUrl: (url: string, { silent, fileName, source }?: ApiAddFileCommonOptions) => OutputFileEntry<"idle">;
    addFileFromUuid: (uuid: string, { silent, fileName, source }?: ApiAddFileCommonOptions) => OutputFileEntry<"idle">;
    addFileFromCdnUrl: (cdnUrl: string, { silent, fileName, source }?: ApiAddFileCommonOptions) => OutputFileEntry<"idle">;
    addFileFromObject: (file: File, { silent, fileName, source, fullPath, }?: ApiAddFileCommonOptions & {
        fullPath?: string;
    }) => OutputFileEntry<"idle">;
    removeFileByInternalId: (internalId: string) => void;
    removeAllFiles(): void;
    uploadAll: () => void;
    openSystemDialog: (options?: {
        captureCamera?: boolean;
        modeCamera?: ModeCameraType;
    }) => void;
    getOutputItem<TStatus extends OutputFileStatus>(entryId: string): OutputFileEntry<TStatus>;
    getOutputCollectionState<TStatus extends OutputCollectionStatus>(): ReturnType<typeof buildOutputCollectionState<TStatus>>;
    initFlow: (force?: boolean) => void;
    doneFlow: () => void;
    setCurrentActivity: <T extends ActivityType>(activityType: T, ...params: T extends keyof ActivityParamsMap ? [ActivityParamsMap[T]] : T extends RegisteredActivityType ? [undefined?] : [any?]) => void;
    getCurrentActivity: () => ActivityType;
    setModalState: (opened: boolean) => void;
    private get _sourceList();
}
type MetadataCallback = (fileEntry: OutputFileEntry) => Promise<Metadata> | Metadata;
type LocaleDefinitionOverride = Record<string, LocaleDefinition>;
type SecureDeliveryProxyUrlResolver = (previewUrl: string, urlParts: {
    uuid: string;
    cdnUrlModifiers: string;
    fileName: string;
}) => Promise<string> | string;
type SecureUploadsSignatureAndExpire = {
    secureSignature: string;
    secureExpire: string;
};
type SecureUploadsSignatureResolver = () => Promise<SecureUploadsSignatureAndExpire | null>;
type IconHrefResolver = (iconName: string) => string;
type FileValidators = FileValidator[];
type CollectionValidators = FuncCollectionValidator[];
type ConfigType = {
    /**
     * Your project’s Public Key.
     */
    pubkey: string;
    /**
     * Allow multiple file uploads.
     */
    multiple: boolean;
    /**
     * Minimum number of files to upload.
     */
    multipleMin: number;
    /**
     * Maximum number of files to upload.
     */
    multipleMax: number;
    /**
     * Require user confirmation before uploading.
     */
    confirmUpload: boolean;
    /**
     * Allow only image files.
     */
    imgOnly: boolean;
    /**
     * Native file input accept attribute value. Also affects client validation settings.
     */
    accept: string;
    /**
     * Preferred types for external sources.
     * See [here](https://uploadcare.com/docs/file-uploader/options/#external-sources-preferred-types)
     */
    externalSourcesPreferredTypes: string;
    /**
     * Provide custom CSS to the social sources iframe
     */
    externalSourcesEmbedCss: string;
    /**
     * Store uploaded files.
     */
    store: boolean | 'auto';
    /**
     * Mirror the camera view.
     */
    cameraMirror: boolean;
    /**
     * Default camera capture mode.
     */
    cameraCapture: 'user' | 'environment' | '';
    /**
     * List of sources for file uploads.
     */
    sourceList: string;
    /**
     * Top-level origin for the uploader.
     * This is used for Google Drive Picker if there is no access to the origin due to the cross-origin policy.
     */
    topLevelOrigin: string;
    /**
     * Maximum size of local files in bytes.
     */
    maxLocalFileSizeBytes: number;
    /**
     * Thumbnail size.
     */
    thumbSize: number;
    /**
     * Show the upload list even if it is empty.
     */
    showEmptyList: boolean;
    /**
     * Use local image editor.
     */
    useLocalImageEditor: boolean;
    /**
     * Enable cloud image editing.
     */
    useCloudImageEditor: boolean;
    /**
     * Tabs to show in the cloud image editor.
     *
     *  @default 'crop, tuning, filters'
     */
    cloudImageEditorTabs: string;
    /**
     * Remove copyright information.
     */
    removeCopyright: boolean;
    /**
     * Defines the crop behavior. When uploading images, your users can select a crop area with a defined aspect ratio.
     */
    cropPreset: string;
    /**
     * Image shrink options.
     */
    imageShrink: string;
    /**
     * Lock scroll when modal is open.
     */
    modalScrollLock: boolean;
    /**
     * Show strokes on modal backdrop.
     */
    modalBackdropStrokes: boolean;
    /**
     * Wrap the source list.
     */
    sourceListWrap: boolean;
    /**
     * Key to revoke Custom OAuth access. See [OAuth docs](https://uploadcare.com/docs/upload-sources/#oauth) for details.
     */
    remoteTabSessionKey: string;
    /**
     * Set custom CNAME.
     */
    cdnCname: string;
    /**
     * Set CNAME base domain for prefixed CDN URLs.
     */
    cdnCnamePrefixed: string;
    /**
     * Set a custom upload URL.
     */
    baseUrl: string;
    /**
     * Set a custom social sources URL.
     */
    socialBaseUrl: string;
    /**
     * Secure signature for uploads.
     */
    secureSignature: string;
    /**
     * Expiry time for secure uploads.
     */
    secureExpire: string;
    /**
     * Proxy URL for secure delivery.
     */
    secureDeliveryProxy: string;
    /**
     * Maximum number of retry attempts for throttled requests.
     */
    retryThrottledRequestMaxTimes: number;
    /**
     * Maximum number of retry attempts for network errors.
     */
    retryNetworkErrorMaxTimes: number;
    /**
     * Minimum file size for multipart uploads.
     */
    multipartMinFileSize: number;
    /**
     * Chunk size for multipart uploads.
     */
    multipartChunkSize: number;
    /**
     * Maximum number of concurrent requests.
     */
    maxConcurrentRequests: number;
    /**
     * Maximum number of concurrent multipart requests.
     */
    multipartMaxConcurrentRequests: number;
    /**
     * Maximum number of attempts for multipart uploads.
     */
    multipartMaxAttempts: number;
    /**
     * Check for URL duplicates.
     */
    checkForUrlDuplicates: boolean;
    /**
     * Save URL for recurrent uploads.
     */
    saveUrlForRecurrentUploads: boolean;
    /**
     * Group output files.
     */
    groupOutput: boolean;
    /**
     * User agent integration string.
     */
    userAgentIntegration: string;
    /**
     * Enable debug mode.
     */
    debug: boolean;
    /**
     * Locale name for the uploader.
     */
    localeName: string;
    /**
     * Expiry threshold for secure uploads.
     */
    secureUploadsExpireThreshold: number;
    /**
     * Metadata for the file.
     */
    metadata: Metadata | MetadataCallback | null;
    /**
     * Override locale definitions.
     */
    localeDefinitionOverride: LocaleDefinitionOverride | null;
    /**
     * Resolver for secure uploads signature.
     */
    secureUploadsSignatureResolver: SecureUploadsSignatureResolver | null;
    /**
     * Resolver for secure delivery proxy URL.
     */
    secureDeliveryProxyUrlResolver: SecureDeliveryProxyUrlResolver | null;
    /**
     * Resolver for icon href.
     */
    iconHrefResolver: IconHrefResolver | null;
    /**
     * Validators for individual files.
     */
    fileValidators: FileValidators;
    /**
     * Validators for file collections.
     */
    collectionValidators: CollectionValidators;
    /**
     * Timeout for async validation functions, in milliseconds.
     */
    validationTimeout: number;
    /**
     * The number of files to validate concurrently.
     */
    validationConcurrency: number;
    /**
     * The camera modes to enable in the camera modal,
     * it is possible to select photo or video capture.
     * The first mode is the default mode.
     * @default 'photo,video'
     */
    cameraModes: string;
    /**
     * The default tab to open in the camera modal,
     * it is possible to select video or photo capture
     * @default 'null'
     * @deprecated - use `cameraModes` instead
     */
    defaultCameraMode: CameraMode | null;
    /**
     * Enable audio recording.
     * @default true
     */
    enableAudioRecording: boolean;
    /**
     * Enable video recording.
     * @deprecated - use `cameraModes` instead
     * @default null
     */
    enableVideoRecording: boolean | null;
    /**
     * The maximum duration of the video recording in seconds
     * @default null
     */
    maxVideoRecordingDuration: number | null;
    /**
     * A dictionary object that can contain
     * the following properties from MediaRecorderOptions
     */
    mediaRecorderOptions: MediaRecorderOptions | null;
    filesViewMode: FilesViewMode;
    gridShowFileNames: boolean;
    cloudImageEditorAutoOpen: boolean;
    qualityInsights: boolean;
    cloudImageEditorMaskHref: string | null;
    /**
     * Adds data-testid attributes to the each block. Needed for testing purposes.
     * @default false
     */
    testMode: boolean;
};
type ConfigComplexType = Pick<ConfigType, (typeof complexConfigKeys)[number]>;
type ConfigPlainType = Omit<ConfigType, keyof ConfigComplexType>;
type ConfigAttributesType = KebabCaseKeys<ConfigPlainType> & LowerCaseKeys<ConfigPlainType>;
type KebabCase$1<S extends string> = S extends `${infer C}${infer T}` ? T extends Uncapitalize<T> ? `${Uncapitalize<C>}${KebabCase$1<T>}` : `${Uncapitalize<C>}-${KebabCase$1<T>}` : S;
type KebabCaseKeys<T extends Record<string, unknown>> = {
    [Key in keyof T as KebabCase$1<Key & string>]: T[Key];
};
type LowerCase<S extends string> = Lowercase<S>;
type LowerCaseKeys<T extends Record<string, unknown>> = {
    [Key in keyof T as Lowercase<Key & string>]: T[Key];
};
type OutputFileStatus = 'idle' | 'uploading' | 'success' | 'failed' | 'removed';
type OutputCustomErrorType = 'CUSTOM_ERROR';
type OutputFileErrorType = OutputCustomErrorType | 'NOT_AN_IMAGE' | 'FORBIDDEN_FILE_TYPE' | 'FILE_SIZE_EXCEEDED' | 'UPLOAD_ERROR' | 'NETWORK_ERROR' | 'UNKNOWN_ERROR';
type OutputCollectionErrorType = OutputCustomErrorType | 'SOME_FILES_HAS_ERRORS' | 'TOO_MANY_FILES' | 'TOO_FEW_FILES';
type OutputFileErrorPayload = {
    entry: OutputFileEntry;
};
type OutputErrorTypePayload = {
    NOT_AN_IMAGE: OutputFileErrorPayload;
    FORBIDDEN_FILE_TYPE: OutputFileErrorPayload;
    FILE_SIZE_EXCEEDED: OutputFileErrorPayload;
    SOME_FILES_HAS_ERRORS: {};
    TOO_MANY_FILES: {
        min: number;
        max: number;
        total: number;
    };
    TOO_FEW_FILES: {
        min: number;
        max: number;
        total: number;
    };
    UPLOAD_ERROR: OutputFileErrorPayload & {
        error: UploadError;
    };
    NETWORK_ERROR: OutputFileErrorPayload & {
        error: NetworkError;
    };
    UNKNOWN_ERROR: OutputFileErrorPayload & {
        error?: Error;
    };
    CUSTOM_ERROR: Record<string, unknown>;
};
type OutputError<T extends OutputFileErrorType | OutputCollectionErrorType> = T extends OutputCustomErrorType ? {
    type?: T;
    message: string;
    payload?: OutputErrorTypePayload[T];
} : T extends keyof OutputErrorTypePayload ? {
    type: T;
    message: string;
    payload?: OutputErrorTypePayload[T];
} : never;
type OutputErrorFile = OutputError<OutputFileErrorType>;
type OutputErrorCollection = OutputError<OutputCollectionErrorType>;
type OutputFileEntry<TStatus extends OutputFileStatus = OutputFileStatus> = {
    status: TStatus;
    internalId: string;
    name: string;
    size: number;
    isImage: boolean;
    mimeType: string;
    metadata: Metadata | null;
    file: File | Blob | null;
    externalUrl: string | null;
    uploadProgress: number;
    fullPath: string | null;
    source: SourceTypes | null;
    isValidationPending: boolean;
} & ({
    status: 'success';
    fileInfo: UploadcareFile;
    uuid: string;
    cdnUrl: string;
    cdnUrlModifiers: string;
    isUploading: false;
    isSuccess: true;
    isFailed: false;
    isRemoved: false;
    errors: [];
} | {
    status: 'failed';
    fileInfo: UploadcareFile | null;
    uuid: string | null;
    cdnUrl: string | null;
    cdnUrlModifiers: string | null;
    isUploading: false;
    isSuccess: false;
    isFailed: true;
    isRemoved: false;
    errors: OutputError<OutputFileErrorType>[];
} | {
    status: 'uploading';
    fileInfo: null;
    uuid: null;
    cdnUrl: null;
    cdnUrlModifiers: null;
    isUploading: true;
    isSuccess: false;
    isFailed: false;
    isRemoved: false;
    errors: [];
} | {
    status: 'removed';
    fileInfo: UploadcareFile | null;
    uuid: string | null;
    cdnUrl: string | null;
    cdnUrlModifiers: string | null;
    isUploading: false;
    isSuccess: false;
    isFailed: false;
    isRemoved: true;
    errors: OutputError<OutputFileErrorType>[];
} | {
    status: 'idle';
    fileInfo: null;
    uuid: null;
    cdnUrl: null;
    cdnUrlModifiers: null;
    isUploading: false;
    isSuccess: false;
    isFailed: false;
    isRemoved: false;
    errors: [];
});
type OutputCollectionStatus = 'idle' | 'uploading' | 'success' | 'failed';
type GroupFlag = 'has-group' | 'maybe-has-group';
type OutputCollectionState<TStatus extends OutputCollectionStatus = OutputCollectionStatus, TGroupFlag extends GroupFlag = 'maybe-has-group'> = {
    status: TStatus;
    totalCount: number;
    successCount: number;
    failedCount: number;
    uploadingCount: number;
    progress: number;
    successEntries: OutputFileEntry<'success'>[];
    failedEntries: OutputFileEntry<'failed'>[];
    uploadingEntries: OutputFileEntry<'uploading'>[];
    idleEntries: OutputFileEntry<'idle'>[];
} & (TGroupFlag extends 'has-group' ? {
    group: UploadcareGroup;
} : TGroupFlag extends 'maybe-has-group' ? {
    group: UploadcareGroup | null;
} : never) & ({
    status: 'idle';
    isFailed: false;
    isUploading: false;
    isSuccess: false;
    errors: [];
    allEntries: OutputFileEntry<'idle' | 'success'>[];
} | {
    status: 'uploading';
    isFailed: false;
    isUploading: true;
    isSuccess: false;
    errors: [];
    allEntries: OutputFileEntry[];
} | {
    status: 'success';
    isFailed: false;
    isUploading: false;
    isSuccess: true;
    errors: [];
    allEntries: OutputFileEntry<'success'>[];
} | {
    status: 'failed';
    isFailed: true;
    isUploading: false;
    isSuccess: false;
    errors: OutputError<OutputCollectionErrorType>[];
    allEntries: OutputFileEntry[];
});
declare class SecureUploadsManager {
    private readonly _block;
    private _secureToken;
    constructor(block: UploaderBlock);
    private _debugPrint;
    getSecureToken(): Promise<SecureUploadsSignatureAndExpire | null>;
}
type ChangeMap<T extends TypedSchema> = Record<keyof T, Set<string>>;
type TypedCollectionPropertyObserver<T extends TypedSchema> = (changeMap: ChangeMap<T>) => void;
type TypedCollectionObserverHandler<T extends TypedSchema> = (list: string[], added: Set<TypedData<T>>, removed: Set<TypedData<T>>) => void;
type TypedCollectionOptions<T extends TypedSchema> = {
    typedSchema: T;
    watchList?: ExtractKeysFromSchema<T>[];
    handler?: TypedCollectionObserverHandler<T>;
    ctxName?: string;
};
declare class TypedCollection<T extends TypedSchema> {
    private __typedSchema;
    private __ctxId;
    private __data;
    private __watchList;
    private __subsMap;
    private __propertyObservers;
    private __collectionObservers;
    private __items;
    private __removed;
    private __added;
    private __observeTimeout?;
    private __notifyTimeout?;
    private __notifyObservers;
    constructor(options: TypedCollectionOptions<T>);
    notify(): void;
    observeCollection(handler: TypedCollectionObserverHandler<T>): () => void;
    unobserveCollection(handler: TypedCollectionObserverHandler<T>): void;
    add(init: Partial<ExtractDataFromSchema<T>>): string;
    read(id: string): TypedData<T> | null;
    readProp<K extends ExtractKeysFromSchema<T>>(id: string, propName: K): ExtractDataFromSchema<T>[K] | null;
    publishProp<K extends ExtractKeysFromSchema<T>>(id: string, propName: K, value: ExtractDataFromSchema<T>[K]): void;
    remove(id: string): void;
    clearAll(): void;
    observeProperties(handler: TypedCollectionPropertyObserver<T>): () => void;
    unobserveProperties(handler: TypedCollectionPropertyObserver<T>): void;
    findItems(checkFn: (item: TypedData<T>) => boolean): string[];
    items(): string[];
    get size(): number;
    destroy(): void;
}
declare class UploaderBlock extends ActivityBlock {
    static extSrcList: Readonly<typeof ExternalUploadSource>;
    static sourceTypes: Readonly<typeof UploadSource>;
    protected couldBeCtxOwner: boolean;
    private isCtxOwner;
    private _unobserveCollection?;
    private _unobserveCollectionProperties?;
    init$: {
        '*commonProgress': number;
        '*uploadList': never[];
        '*uploadQueue': _uploadcare_upload_client.Queue;
        '*collectionErrors': OutputErrorCollection[];
        '*collectionState': OutputCollectionState | null;
        '*groupInfo': _uploadcare_upload_client.UploadcareGroup | null;
        '*uploadTrigger': Set<string>;
        '*secureUploadsManager': SecureUploadsManager | null;
        '*currentActivity': null;
        '*currentActivityParams': {};
        '*history': never[];
        '*historyBack': null;
        '*closeModal': () => void;
    };
    private get hasCtxOwner();
    initCallback(): void;
    protected get validationManager(): ValidationManager;
    get api(): UploaderPublicApi;
    getAPI(): UploaderPublicApi;
    get uploadCollection(): TypedCollection<typeof uploadEntrySchema>;
    destroyCtxCallback(): void;
    disconnectedCallback(): void;
    connectedCallback(): void;
    destroyCallback(): void;
    private _initCtxOwner;
    private _observeUploadCollection;
    private _unobserveUploadCollection;
    private _createGroup;
    private _flushOutputItems;
    private _handleCollectionUpdate;
    private _handleCollectionPropertiesUpdate;
    private _flushCommonUploadProgress;
    openCloudImageEditor(): void;
    private setInitialCrop;
    protected getMetadataFor(entryId: string): Promise<_uploadcare_upload_client.Metadata | undefined>;
    protected getUploadClientOptions(): Promise<FileFromOptions>;
    getOutputData(): OutputFileEntry[];
}
/**
 * Image size
 */
interface ImageSize {
    width: number;
    height: number;
}
interface Transformations {
    enhance?: number;
    brightness?: number;
    exposure?: number;
    gamma?: number;
    contrast?: number;
    saturation?: number;
    vibrance?: number;
    warmth?: number;
    rotate?: number;
    mirror?: boolean;
    flip?: boolean;
    filter?: {
        name: string;
        amount: number;
    };
    crop?: {
        dimensions: [number, number];
        coords: [number, number];
    };
}
interface ApplyResult {
    originalUrl: string;
    cdnUrlModifiers: string;
    cdnUrl: string;
    transformations: Transformations;
}
interface CropAspectRatio {
    type: 'aspect-ratio';
    width: number;
    height: number;
    id: string;
    hasFreeform?: boolean;
}
type ActivityParams$1 = {
    internalId: string;
};
declare class CloudImageEditorActivity extends UploaderBlock {
    couldBeCtxOwner: boolean;
    activityType: "cloud-image-edit";
    private _entry?;
    private _instance?;
    get activityParams(): ActivityParams$1;
    initCallback(): void;
    handleApply(e: CustomEvent<ApplyResult>): void;
    handleCancel(): void;
    mountEditor(): void;
    unmountEditor(): void;
}
type ActivityParams = {
    externalSourceType: string;
};
declare class ExternalSource extends UploaderBlock {
    couldBeCtxOwner: boolean;
    activityType: "external";
    private _messageBridge?;
    constructor();
    get activityParams(): ActivityParams;
    initCallback(): void;
    private extractUrlFromSelectedFile;
    private handleToolbarStateChange;
    private handleSelectedFilesChange;
    private handleIframeLoad;
    private applyTheme;
    private applyEmbedCss;
    private setupL10n;
    private remoteUrl;
    private mountIframe;
    private unmountIframe;
    private resetSelectionStatus;
}
declare const ACTIVE_PROP = "___ACTIVITY_IS_ACTIVE___";
type ActivityParamsMap = {
    'cloud-image-edit': ActivityParams$1;
    external: ActivityParams;
};
declare class ActivityBlock extends Block {
    protected historyTracked: boolean;
    private [ACTIVE_PROP]?;
    init$: {
        '*currentActivity': null;
        '*currentActivityParams': {};
        '*history': never[];
        '*historyBack': null;
        '*closeModal': () => void;
    };
    _debouncedHistoryFlush: (() => void) & {
        cancel: () => void;
    };
    private _deactivate;
    private _activate;
    initCallback(): void;
    private _historyFlush;
    private _isActivityRegistered;
    private static _activityCallbacks;
    static activities: Readonly<{
        START_FROM: 'start-from';
        CAMERA: 'camera';
        DRAW: 'draw';
        UPLOAD_LIST: 'upload-list';
        URL: 'url';
        CLOUD_IMG_EDIT: 'cloud-image-edit';
        EXTERNAL: 'external';
    }>;
    get isActivityActive(): boolean;
    get couldOpenActivity(): boolean;
    /** TODO: remove name argument */
    registerActivity(_name: string, options?: {
        onActivate?: () => void;
        onDeactivate?: () => void;
    }): void;
    unregisterActivity(): void;
    destroyCallback(): void;
    get activityKey(): string;
    get activityParams(): ActivityParamsMap[keyof ActivityParamsMap];
    get initActivity(): string;
    get doneActivity(): string;
    historyBack(): void;
}
type RegisteredActivityType = (typeof ActivityBlock)['activities'][keyof (typeof ActivityBlock)['activities']];
type ActivityType = RegisteredActivityType | (string & {}) | null;
declare function defineComponents(blockExports: Record<string, any>): void;
declare const UC_WINDOW_KEY = "UC";
type IndexModule = Record<string, any>;
declare global {
    interface Window {
        [UC_WINDOW_KEY]?: IndexModule;
    }
}
/**
 * @param url File Uploader pack url
 * @param [register] Register connected package, if it not registered yet
 */
declare function loadFileUploaderFrom(url: string, register?: boolean): Promise<IndexModule | null>;
declare class SolutionBlock extends Block {
    static styleAttrs: string[];
    protected requireCtxName: boolean;
    init$: {
        '*solution': string | null;
        '*commonProgress': number;
        '*uploadList': never[];
        '*uploadQueue': _uploadcare_upload_client.Queue;
        '*collectionErrors': OutputErrorCollection[];
        '*collectionState': OutputCollectionState | null;
        '*groupInfo': _uploadcare_upload_client.UploadcareGroup | null;
        '*uploadTrigger': Set<string>;
        '*secureUploadsManager': SecureUploadsManager | null;
        '*currentActivity': null;
        '*currentActivityParams': {};
        '*history': never[];
        '*historyBack': null;
        '*closeModal': () => void;
    };
    private static _template;
    initCallback(): void;
    static set template(value: string);
    static get template(): string;
}
declare class ActivityHeader extends ActivityBlock {
}
declare class CloudImageEditorBlock extends Block {
    ctxOwner: boolean;
    static styleAttrs: string[];
    private _debouncedShowLoader;
    constructor();
    private _showLoader;
    /**
     * To proper work, we need non-zero size the element. So, we'll wait for it.
     */
    private _waitForSize;
    initCallback(): void;
    updateImage(): Promise<void>;
    initEditor(): Promise<void>;
}
declare class CropFrame extends Block {
    private readonly _handlePointerUp;
    private readonly _handlePointerMove;
    private readonly _handleSvgPointerMove;
    private _backdropMask?;
    private _backdropMaskInner?;
    private _frameThumbs?;
    private _frameGuides?;
    private _draggingThumb?;
    private _hoverThumb?;
    private _dragStartPoint?;
    private _dragStartCrop?;
    private _frameImage?;
    private _guidesHidden;
    constructor();
    private _shouldThumbBeDisabled;
    private _createBackdrop;
    /**
     * @private Super Tricky workaround for the chromium bug See
     *   https://bugs.chromium.org/p/chromium/issues/detail?id=330815
     */
    private _resizeBackdrop;
    private _updateBackdrop;
    private _updateFrame;
    private _createThumb;
    private _createThumbs;
    private _createGuides;
    private _createFrame;
    private _handlePointerDown;
    private _handlePointerUp_;
    private _handlePointerMove_;
    private _calcCropBox;
    private _handleSvgPointerMove_;
    private _updateCursor;
    private _createMask;
    private _updateMask;
    private _render;
    toggleThumbs(visible: boolean): void;
    initCallback(): void;
    destroyCallback(): void;
}
declare class EditorButtonControl extends Block {
    private _titleEl?;
    constructor();
    initCallback(): void;
}
declare class EditorFreeformButtonControl extends EditorButtonControl {
    initCallback(): void;
    handleClick(): void;
}
interface EditorAspectRatioButtonControl {
    get aspectRatio(): CropAspectRatio | undefined;
    set aspectRatio(value: CropAspectRatio | undefined);
}
declare class EditorAspectRatioButtonControl extends EditorButtonControl {
    constructor();
    initCallback(): void;
    handleClick(): void;
    private _renderRectBasedOnAspectRatio;
    private _aspectRatio?;
}
declare const ALL_COLOR_OPERATIONS: readonly ["brightness", "exposure", "gamma", "contrast", "saturation", "vibrance", "warmth", "enhance"];
type ColorOperation = (typeof ALL_COLOR_OPERATIONS)[number];
declare const ALL_FILTERS: readonly ["adaris", "briaril", "calarel", "carris", "cynarel", "cyren", "elmet", "elonni", "enzana", "erydark", "fenralan", "ferand", "galen", "gavin", "gethriel", "iorill", "iothari", "iselva", "jadis", "lavra", "misiara", "namala", "nerion", "nethari", "pamaya", "sarnar", "sedis", "sewen", "sorahel", "sorlen", "tarian", "thellassan", "varriel", "varven", "vevera", "virkas", "yedis", "yllara", "zatvel", "zevcen"];
type FilterId = (typeof ALL_FILTERS)[number];
declare const ALL_CROP_OPERATIONS: readonly ["rotate", "mirror", "flip"];
type CropOperation = (typeof ALL_CROP_OPERATIONS)[number];
/** KeypointsNumber is the number of keypoints loaded from each side of zero, not total number */
declare const COLOR_OPERATIONS_CONFIG: Readonly<{
    brightness: {
        zero: number;
        range: readonly [-100, 100];
        keypointsNumber: number;
    };
    exposure: {
        zero: number;
        range: readonly [-500, 500];
        keypointsNumber: number;
    };
    gamma: {
        zero: number;
        range: readonly [0, 1000];
        keypointsNumber: number;
    };
    contrast: {
        zero: number;
        range: readonly [-100, 500];
        keypointsNumber: number;
    };
    saturation: {
        zero: number;
        range: readonly [-100, 500];
        keypointsNumber: number;
    };
    vibrance: {
        zero: number;
        range: readonly [-100, 500];
        keypointsNumber: number;
    };
    warmth: {
        zero: number;
        range: readonly [-100, 100];
        keypointsNumber: number;
    };
    enhance: {
        zero: number;
        range: readonly [0, 100];
        keypointsNumber: number;
    };
    filter: {
        zero: number;
        range: readonly [0, 100];
        keypointsNumber: number;
    };
}>;
interface EditorCropButtonControl {
    get operation(): CropOperation | undefined;
    set operation(value: CropOperation | undefined);
}
declare class EditorCropButtonControl extends EditorButtonControl {
    private _operation;
    initCallback(): void;
}
declare class EditorFilterControl extends EditorButtonControl {
    private _operation;
    private _filter;
    private _originalUrl;
    private _observer?;
    private _cancelPreload?;
    constructor();
    private _previewSrc;
    private _observerCallback;
    initCallback(): void;
    destroyCallback(): void;
}
type Operations = {
    flip: boolean;
    mirror: boolean;
    rotate: number;
};
declare class EditorImageCropper extends Block {
    ctxOwner: boolean;
    private _commitDebounced;
    private _handleResizeThrottled;
    private _imageSize;
    private _canvas?;
    private _ctx;
    private _isActive;
    private _observer?;
    private _cancelPreload?;
    constructor();
    private _handleResize;
    private _syncTransformations;
    private _initCanvas;
    private _alignImage;
    private _alignCrop;
    private _drawImage;
    private _draw;
    private _animateIn;
    private _getCropDimensions;
    private _getCropTransformation;
    private _commit;
    setValue<K extends keyof Operations>(operation: K, value: Operations[K]): void;
    getValue<K extends keyof Operations>(operation: K): Operations[K];
    activate(imageSize: ImageSize, { fromViewer }?: {
        fromViewer?: boolean;
    }): Promise<void>;
    deactivate({ reset }?: {
        reset?: boolean;
    }): void;
    private _transitionToCrop;
    private _transitionToImage;
    private _reset;
    private _waitForImage;
    private _handleImageLoading;
    initCallback(): void;
    destroyCallback(): void;
}
type OperationKey = keyof typeof COLOR_OPERATIONS_CONFIG;
declare cl