export function clearComposerSaveErrorCallback(): void;
export function addComposerSaveErrorCallback(callback: any): void;
export default class ComposerService extends Service {
    appEvents: any;
    capabilities: any;
    currentUser: any;
    dialog: any;
    keyValueStore: any;
    messageBus: any;
    modal: any;
    router: any;
    site: any;
    siteSettings: any;
    store: any;
    toasts: any;
    allowPreview: boolean;
    selectedTranslationLocale: any;
    checkedMessages: boolean;
    messageCount: any;
    showEditReason: boolean;
    editReason: any;
    scopedCategoryId: any;
    prioritizedCategoryId: any;
    readOnlyCategoryId: any;
    lastValidatedAt: any;
    isUploading: boolean;
    isProcessingUpload: boolean;
    isCancellable: any;
    uploadProgress: any;
    topic: any;
    linkLookup: any;
    composerHeight: any;
    forcePreview: any;
    categories: any;
    topicModel: any;
    isStaffUser: any;
    whisperer: any;
    canUnlistTopic: any;
    isWhispering: any;
    _showPreview: any;
    set showPreview(value: any);
    get showPreview(): any;
    /**
     * @returns {import("discourse/controllers/topic").default};
     */
    get topicController(): import("discourse/controllers/topic").default;
    get isPreviewVisible(): boolean;
    previewVisibilityChanged(): void;
    get isOpen(): boolean;
    get topicDraftKey(): string;
    get privateMessageDraftKey(): string;
    set disableSubmit(value: any);
    get disableSubmit(): any;
    get formTemplateIds(): any;
    get hasFormTemplate(): boolean;
    get replyingToUserId(): any;
    set formTemplateInitialValues(values: any);
    get formTemplateInitialValues(): any;
    onSelectFormTemplate(formTemplate: any): void;
    selectedFormTemplate: any;
    toggleText(showPreview: any): any;
    showPreviewChanged(): void;
    focusTarget(replyingToTopic: any, creatingPM: any, usernames: any, composeState: any): "title" | "reply" | "usernames" | "editor";
    set showToolbar(val: any);
    get showToolbar(): any;
    _toolbarEnabled: any;
    canEditTags(canEditTitle: any, creatingPrivateMessage: any): any;
    disableCategoryChooser(editingPost: any, canEditTopic: any): boolean;
    disableTagsChooser(editingPost: any, canEditTags: any): boolean;
    showWhisperToggle(canWhisper: any, replyingToWhisper: any): boolean;
    replyingToWhisper(repliedToPost: any): boolean;
    saveIcon(modelAction: any, isWhispering: any, privateMessage: any): any;
    saveLabel(modelAction: any, isWhispering: any, editConflict: any, privateMessage: any): any;
    canWhisper(whisperer: any, modelAction: any): boolean;
    _setupPopupMenuOption(option: any): any;
    disableTextarea(requiredCategoryMissing: any, replyLength: any): boolean;
    popupMenuOptions(composeState: any): any[];
    showWarning(creatingPrivateMessage: any, usernames: any, warningsDisabled: any): any;
    draftTitle(topicTitle: any): any;
    allowUpload(): any;
    uploadIcon(): "upload" | "far-image";
    ariaLabel(modelAction: any, isWhispering: any, privateMessage: any, postUsername: any): any;
    /**
     * Opens the composer when uncertain if it's already open or has a draft.
     * Supports appending text once the composer is open.
     *
     * @param {Object} opts - Configuration options
     * @param {Object} [opts.topic] - If provided, opens composer with reply action,
     *   using the current topic key and draft sequence
     * @param {boolean} [opts.fallbackToNewTopic] - If true and no draft/topic exists,
     *   opens composer with create_topic action and new topic draft key
     * @param {string} [opts.insertText] - Text to append to the composer after opening
     * @param {Object} [opts.openOpts] - Additional options passed to this.open when
     *   fallbackToNewTopic is true or topic is provided
     * @returns {Promise<void>}
     */
    focusComposer(opts?: {
        topic?: any;
        fallbackToNewTopic?: boolean;
        insertText?: string;
        openOpts?: any;
    }): Promise<void>;
    _openComposerForFocus(opts: any): globalThis.Promise<void>;
    _focusAndInsertText(insertText: any): void;
    updateCategory(categoryId: any): void;
    openIfDraft(event: any): boolean;
    removeFullScreenExitPrompt(): void;
    saveAndClose(event: any): globalThis.Promise<void>;
    cancel(event: any): globalThis.Promise<void>;
    cancelUpload(event: any): void;
    togglePreview(event: any): void;
    viewNewReply(event: any): void;
    closeComposer(): void;
    onPopupMenuAction(menuItem: any, toolbarEvent: any): any;
    storeToolbarState(toolbarEvent: any): void;
    typed(): void;
    cancelled(): void;
    addLinkLookup(linkLookup: any): void;
    afterRefresh(preview: any): void;
    toggleWhisper(): void;
    toggleSpreadsheet(): void;
    toggleWrap(toolbarEvent: any): void;
    toggleToolbar(): void;
    toggle(): globalThis.Promise<void>;
    fullscreenComposer(): boolean;
    importQuote(toolbarEvent: any): globalThis.Promise<void>;
    saveAction(ignore: any, event: any): void;
    displayEditReason(): void;
    hitEsc(): void;
    groupsMentioned({ name, userCount, maxMentions }: {
        name: any;
        userCount: any;
        maxMentions: any;
    }): void;
    cannotSeeMention({ name, reason, notifiedCount, isGroup }: {
        name: any;
        reason: any;
        notifiedCount: any;
        isGroup: any;
    }): void;
    hereMention(count: any): void;
    applyFormatCode(): void;
    applyUnorderedList(): void;
    applyOrderedList(): void;
    save(force: any, options?: {}): any;
    skipAutoSave: boolean;
    saveTranslation(): globalThis.Promise<void>;
    postWasEnqueued(details: any): void;
    checkReplyLength(): void;
    /**
     Open the composer view
  
     @method open
     @param {Object} opts Options for creating a post
     @param {String} opts.action The action we're performing: edit, reply, createTopic, createSharedDraft, privateMessage, addTranslation
     @param {String} opts.draftKey
     @param {Post} [opts.post] The post we're replying to
     @param {Topic} [opts.topic] The topic we're replying to
     @param {String} [opts.quote] If we're opening a reply from a quote, the quote we're making
     @param {Boolean} [opts.ignoreIfChanged]
     @param {Boolean} [opts.disableScopedCategory]
     @param {Number} [opts.categoryId] Sets `scopedCategoryId` and `categoryId` on the Composer model
     @param {Number} [opts.prioritizedCategoryId]
     @param {Number} [opts.readOnlyCategoryId] Shows category as read-only in category chooser, with a read-only badge
     @param {Number} [opts.formTemplateId]
     @param {String} [opts.draftSequence]
     @param {Boolean} [opts.skipJumpOnSave] Option to skip navigating to the post when saved in this composer session
     @param {Boolean} [opts.skipFormTemplate] Option to skip the form template even if configured for the category
     @param {String} [opts.hijackPreview] Option to hijack the preview with a custom component, you must pass { component: CustomPreviewComponent, model: { ... } }
     @param {String} [opts.selectedTranslationLocale] The locale to use for the translation
     **/
    open(opts?: {
        action: string;
        draftKey: string;
        post?: Post;
        topic?: Topic;
        quote?: string;
        ignoreIfChanged?: boolean;
        disableScopedCategory?: boolean;
        categoryId?: number;
        prioritizedCategoryId?: number;
        readOnlyCategoryId?: number;
        formTemplateId?: number;
        draftSequence?: string;
        skipJumpOnSave?: boolean;
        skipFormTemplate?: boolean;
        hijackPreview?: string;
        selectedTranslationLocale?: string;
    }): globalThis.Promise<void>;
    openNewTopic({ title, body, category, tags, formTemplate }?: {}): globalThis.Promise<void>;
    openNewMessage({ title, body, recipients, hasGroups, tags }: {
        title: any;
        body: any;
        recipients: any;
        hasGroups: any;
        tags: any;
    }): globalThis.Promise<void>;
    filterTags(tags: any): globalThis.Promise<any>;
    _setModel(optionalComposerModel: any, opts: any): globalThis.Promise<void>;
    _getDefaultComposerHeight(): any;
    destroyDraft(draftSequence?: any): any;
    cancelComposer(): import("rsvp").default.Promise<any>;
    saveAndCloseComposer(): true | import("rsvp").default.Promise<any>;
    unshrink(): void;
    shrink(): void;
    _saveDraft(showToast?: boolean): void;
    _saveDraftDebounce: any;
    _saveDraftPromise: any;
    _lastDraftSaved: number;
    _shouldSaveDraft(): void;
    categoryValidation(categoryId: any, lastValidatedAt: any): EmberObject;
    tagValidation(category: any, tags: any, lastValidatedAt: any): EmberObject;
    collapse(): void;
    toggleFullscreen(): void;
    showFullScreenPrompt(isFullscreen: any, showExitPrompt: any): boolean;
    close(): void;
    canEdit(modelAction: any): any;
    visible(state: any): boolean;
    clearLastValidatedAt(): void;
    _initialLocale(opts: any): any;
    mergedProperties: string[];
}
import Service from "@ember/service";
import { Promise } from "rsvp";
import EmberObject from "@ember/object";
//# sourceMappingURL=composer.d.ts.map