import { LitElement } from 'lit';
import { BlockSettingsType } from '../contexts/settings-context';
import { Constructor } from '../types/generic.types';
import { WeavyType } from '../contexts/weavy-context';
import { UserType } from '../types/users.types';
import { ProductFeaturesType, ProductTypes, ProductFeatureProps } from '../types/product.types';
import { AppType } from '../contexts/app-context';
import { ContextualTypes, EntityType } from '../types/app.types';
import { NotificationsAppearanceType, NotificationsBadgeType } from '../types/notifications.types';
import { ConversationTypeGuid } from '../types/conversations.types';
export interface BlockProps {
    /**
     * Any product type for the block.
     */
    productType?: ProductTypes;
    /**
     * Any contextual app type for the block.
     */
    contextualType?: ContextualTypes;
    /**
     * Any conversation types for the block.
     */
    conversationTypes?: ConversationTypeGuid[];
    /**
     * Unique identifier for your app component.
     * The uid should correspond to the uid of the app created using the server-to-server Web API.
     */
    uid?: string;
    /**
     * Optional display name for your app component.
     * The name will be updated on the server or fetched from the server.
     */
    name?: string;
}
export interface BlockSettingProps {
    /**
     * Sets the appearance of the built in notifications.
     */
    notifications: NotificationsAppearanceType;
    /**
     * Sets the appearance of the notifications badge.
     */
    notificationsBadge: NotificationsBadgeType;
}
export interface BlockContextProps {
    /**
     * The app data.
     */
    app: AppType | undefined;
    /**
     * Config for disabling features in the component.
     * *Note: You can't enable any features that aren't available in your license.*
     */
    hasFeatures: ProductFeaturesType | undefined;
    /**
     * Any provided link that should be loaded, shown and highlighted.
     */
    link: EntityType | undefined;
    /**
     * The settings provided as a context on the component.
     */
    settings: BlockSettingsType | undefined;
    /**
     * The current user.
     */
    user: UserType | undefined;
    /**
     * The consumed weavy context.
     */
    weavy: WeavyType | undefined;
}
export interface BlockContextProviderProps {
    /**
     * All block contexts provided in a combined object. Used for convenience when forwarding contexts.
     */
    contexts?: {} & BlockContextProps;
    whenApp: () => Promise<AppType>;
    whenHasFeatures: () => Promise<ProductFeaturesType>;
    whenLink: () => Promise<EntityType>;
    whenSettings: () => Promise<BlockSettingsType>;
    whenUser: () => Promise<UserType>;
    whenWeavy: () => Promise<WeavyType>;
}
export declare const BlockProviderMixin: <T extends Constructor<LitElement>>(Base: T) => Constructor<BlockProps & BlockContextProviderProps & BlockContextProps & BlockSettingProps & ProductFeatureProps> & T;
//# sourceMappingURL=block-mixin.d.ts.map