import * as astro from 'astro';
import * as _devprotocol_clubs_core from '@devprotocol/clubs-core';
import { ClubsGeneralUnit, ClubsSlotName, ClubsPluginCategory } from '@devprotocol/clubs-core';
import { UndefinedOr } from '@devprotocol/util-ts';

type Option = {
    readonly key: 'posts';
    readonly value: readonly OptionsDatabase[];
};
type TokenURIWithId = {
    readonly id: number;
    readonly image: string;
};
type PostPrimitives = {
    readonly title: string;
    readonly content: string;
    readonly options: readonly PostOption[];
};
type Posts = PostPrimitives & {
    readonly id: string;
    readonly created_by: string;
    readonly created_at: Date;
    readonly updated_at: Date;
    readonly comments: readonly Comment[];
    readonly reactions: Reactions;
    readonly masked?: boolean;
};
type PostOption = {
    readonly key: string;
    readonly value: ClubsGeneralUnit;
};
type CommentPrimitives = {
    readonly content: string;
    readonly options: readonly PostOption[];
};
type Comment = CommentPrimitives & {
    readonly id: string;
    readonly created_by: string;
    readonly created_at: Date;
    readonly updated_at: Date;
};
declare const PageContentHomeBeforeContent: ClubsSlotName;
type OptionsDatabase = {
    readonly id: string;
    readonly slug?: string;
    readonly title?: string;
    readonly roles?: {
        readonly write: {
            readonly memberships: readonly [] | readonly Uint8Array[];
        };
    };
    readonly slots?: {
        readonly [PageContentHomeBeforeContent]?: {
            readonly enabled: boolean;
            readonly title: string;
            readonly items: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
        };
    };
    readonly database: {
        readonly key: string;
    };
};
/**
 * Reaction is a map of emoji to users who reacted to a post
 * An emoji as the key, and an array of addresses as the users who reacted to the post
 * @example
 * {'🦜': ['0x0', '0x2']}
 */
type Reactions = {
    readonly [emoji: string]: readonly string[];
};
declare enum SlotName {
    PostsEditAfterContentForm = "posts:edit:after:content-form",
    PostsEditToolbarButton = "posts:edit:toolbar:button",
    PostsFeedAfterPostContent = "posts:feed:after:post-content"
}
declare enum Event {
    PostCreated = "posts:event::post_created",
    RegisterOnUpdateHandler = "posts:event::register_on_update_handler",
    RegisterOnSetupHandler = "posts:event::register_on_setup_handler",
    ClickToolbar = "posts:event::click_toolbar"
}

declare const getPagePaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], { propertyAddress, adminRolePoints, rpcUrl }: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: "public" | "private" | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<{
    paths: (string | RegExp)[];
    component: any;
    props: {
        feedId: string;
        options: readonly Readonly<{
            readonly key: string;
            readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        }>[];
        propertyAddress: string;
        memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        adminRolePoints: number;
        emojiAllowList: UndefinedOr<readonly string[]>;
        rpcUrl: string;
    };
}[]>;
declare const getAdminPaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], config: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: "public" | "private" | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<({
    paths: string[];
    component: any;
    props: {
        feeds: readonly OptionsDatabase[];
        url: string;
        edit: OptionsDatabase;
        memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    };
} | {
    paths: string[];
    component: any;
    props: {
        options: readonly Readonly<{
            readonly key: string;
            readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        }>[];
        feeds?: undefined;
        url?: undefined;
        memberships?: undefined;
    };
} | {
    paths: string[];
    component: any;
    props: {
        feeds: readonly OptionsDatabase[];
        url: string;
        memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        options?: undefined;
    };
})[]>;
declare const meta: {
    id: string;
    displayName: string;
    description: string;
    category: ClubsPluginCategory;
    previewImages: string[];
    readme: any;
    icon: string;
};
declare const getApiPaths: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], config: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: "public" | "private" | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<({
    paths: string[];
    method: "POST";
    handler: ({ request }: {
        readonly request: Request;
    }) => Promise<Response>;
} | {
    paths: (string | RegExp)[];
    method: "GET";
    handler: astro.APIRoute;
})[]>;
declare const getSlots: (options: readonly Readonly<{
    readonly key: string;
    readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
}>[], __: Readonly<{
    readonly name: string;
    readonly adminPageVisibility?: "public" | "private" | undefined;
    readonly twitterHandle: string;
    readonly description: string;
    readonly url: string;
    readonly propertyAddress: string;
    readonly adminRolePoints: number;
    readonly chainId: number;
    readonly rpcUrl: string;
    readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
    readonly plugins: readonly Readonly<{
        readonly id: string;
        readonly name?: string | undefined;
        readonly enable?: boolean | undefined;
        readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
    }>[];
}>, { paths, factory }: _devprotocol_clubs_core.ClubsSlotsFactoryUtils) => Promise<({
    slot: ClubsSlotName;
    component: any;
    props: {
        scope: string;
        feedId: string;
        slots: {
            readonly "page:content:home:before-content"?: {
                readonly enabled: boolean;
                readonly title: string;
                readonly items: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
            } | undefined;
        } | undefined;
    };
} | {
    slot: string;
    component: any;
    props: {
        createNavigation: {
            label: string;
            link: {
                display: string;
                path: string;
            };
        };
    };
} | {
    slot: string;
    component: any;
    props: {
        navigation: {
            display: string;
            path: string;
        };
    };
})[]>;
declare const _default: {
    getPagePaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], { propertyAddress, adminRolePoints, rpcUrl }: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: "public" | "private" | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<{
        paths: (string | RegExp)[];
        component: any;
        props: {
            feedId: string;
            options: readonly Readonly<{
                readonly key: string;
                readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            }>[];
            propertyAddress: string;
            memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            adminRolePoints: number;
            emojiAllowList: UndefinedOr<readonly string[]>;
            rpcUrl: string;
        };
    }[]>;
    getAdminPaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], config: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: "public" | "private" | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<({
        paths: string[];
        component: any;
        props: {
            feeds: readonly OptionsDatabase[];
            url: string;
            edit: OptionsDatabase;
            memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
        };
    } | {
        paths: string[];
        component: any;
        props: {
            options: readonly Readonly<{
                readonly key: string;
                readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            }>[];
            feeds?: undefined;
            url?: undefined;
            memberships?: undefined;
        };
    } | {
        paths: string[];
        component: any;
        props: {
            feeds: readonly OptionsDatabase[];
            url: string;
            memberships: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
            options?: undefined;
        };
    })[]>;
    getApiPaths: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], config: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: "public" | "private" | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { getPluginConfigById }: _devprotocol_clubs_core.ClubsFactoryUtils) => Promise<({
        paths: string[];
        method: "POST";
        handler: ({ request }: {
            readonly request: Request;
        }) => Promise<Response>;
    } | {
        paths: (string | RegExp)[];
        method: "GET";
        handler: astro.APIRoute;
    })[]>;
    getSlots: (options: readonly Readonly<{
        readonly key: string;
        readonly value?: _devprotocol_clubs_core.ClubsGeneralUnit | undefined;
    }>[], __: Readonly<{
        readonly name: string;
        readonly adminPageVisibility?: "public" | "private" | undefined;
        readonly twitterHandle: string;
        readonly description: string;
        readonly url: string;
        readonly propertyAddress: string;
        readonly adminRolePoints: number;
        readonly chainId: number;
        readonly rpcUrl: string;
        readonly options?: _devprotocol_clubs_core.ClubsPluginOptions | undefined;
        readonly plugins: readonly Readonly<{
            readonly id: string;
            readonly name?: string | undefined;
            readonly enable?: boolean | undefined;
            readonly options: _devprotocol_clubs_core.ClubsPluginOptions;
        }>[];
    }>, { paths, factory }: _devprotocol_clubs_core.ClubsSlotsFactoryUtils) => Promise<({
        slot: ClubsSlotName;
        component: any;
        props: {
            scope: string;
            feedId: string;
            slots: {
                readonly "page:content:home:before-content"?: {
                    readonly enabled: boolean;
                    readonly title: string;
                    readonly items: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
                } | undefined;
            } | undefined;
        };
    } | {
        slot: string;
        component: any;
        props: {
            createNavigation: {
                label: string;
                link: {
                    display: string;
                    path: string;
                };
            };
        };
    } | {
        slot: string;
        component: any;
        props: {
            navigation: {
                display: string;
                path: string;
            };
        };
    })[]>;
    meta: {
        id: string;
        displayName: string;
        description: string;
        category: ClubsPluginCategory;
        previewImages: string[];
        readme: any;
        icon: string;
    };
};

export { type Comment, type CommentPrimitives, Event, type Option, type OptionsDatabase, type PostOption, type PostPrimitives, type Posts, type Reactions, SlotName, type TokenURIWithId, _default as default, getAdminPaths, getApiPaths, getPagePaths, getSlots, meta };
