import { PropertyValueMap } from 'lit';
import { ShadowPartsController } from '../controllers/shadow-parts-controller';
import { PostType } from '../types/posts.types';
import { AppType } from '../contexts/apps-context';
import { WeavySubTypeComponent } from '../classes/weavy-sub-type-component';
import { RealtimeController } from '../controllers/realtime-controller';
declare global {
    interface HTMLElementTagNameMap {
        "wy-post": WyPost;
    }
}
/**
 * Wrapper component for a single post, delegating rendering to view/edit/trashed subcomponents.
 *
 * **Used sub components:**
 *
 * - [`<wy-post-trashed>`](./wy-post-trashed.ts)
 * - [`<wy-post-edit>`](./wy-post-edit.ts)
 * - [`<wy-post-view>`](./wy-post-view.ts)
 *
 * @fires {PollVoteEventType} vote - Emitted when a poll option is voted.
 * @fires {PostSubscribeEventType} subscribe - Emitted when subscribe/unsubscribe is requested.
 * @fires {PostTrashEventType} trash - Emitted when the post should be trashed.
 * @fires {PostRestoreEventType} restore - Emitted when the post should be restored.
 * @fires {WyActionEventType} wy-action - Emitted when an embed action button is triggered.
 * @fires {WyPreviewOpenEventType} wy-preview-open - Fired when a preview overlay is about to open.
 * @fires {WyPreviewCloseEventType} wy-preview-close - Fired when a preview overlay is closed.
 */
export declare class WyPost extends WeavySubTypeComponent {
    #private;
    static styles: import('lit').CSSResult[];
    /** @internal */
    protected exportParts: ShadowPartsController;
    /**
     * Realtime controller, used when post is out of app context.
     *
     * @internal
     */
    protected postRealtime: RealtimeController;
    /**
     * Post data
     */
    post: PostType;
    /**
     * The app data. Must be directly specified or by using the `uid` property.
     *
     * @type {AppType | undefined}
     */
    app: AppType | undefined;
    /** Optional appId to specify post specific app context */
    uid?: number | string | null;
    /**
     * Resolves when app data is available.
     *
     * @returns {Promise<AppType>}
     */
    whenApp(): Promise<AppType>;
    /**
     * True while the post is displayed in edit mode.
     *
     * @internal
     */
    private editing;
    /**
     * Emit a `vote` event scoped to the post.
     *
     * @internal
     * @param optionId - Identifier of the selected poll option.
     * @returns {boolean} True if the event was not canceled.
     */
    private dispatchVote;
    /**
     * Emit a `subscribe` event toggling post subscription.
     *
     * @internal
     * @param subscribe - Desired subscription state.
     * @returns {boolean} True if the event was not canceled.
     */
    private dispatchSubscribe;
    /**
     * Emit a `trash` event requesting the post to be trashed.
     *
     * @internal
     * @returns {boolean} True if the event was not canceled.
     */
    private dispatchTrash;
    /**
     * Emit a `restore` event requesting the post to be restored.
     *
     * @internal
     * @returns {boolean} True if the event was not canceled.
     */
    private dispatchRestore;
    protected willUpdate(changedProperties: PropertyValueMap<this>): void;
    render(): import('../../node_modules/lit-html/node/lit-html.js').TemplateResult<1>;
    protected updated(changedProperties: PropertyValueMap<this>): void;
}
//# sourceMappingURL=wy-post.d.ts.map