import { RouteComponent, RouteRecordRaw } from 'vue-router';
import { Composer } from 'vue-i18n';
import { DataStore } from '@sereny/datastore';
export declare const DASHBOARD_ROUTE = "dashboard";
export declare const PROTECTED_ROUTE = "protected";
export declare const PROTECTED_PATH = "/protected";
export declare const NAVIGATION = "navigation";
export declare const MENU_SEPARATOR = "--";
export declare const DATA_PAGE_SIZE = 25;
export type MenuCallback = (i18n: Composer) => MenuGroup[];
export type SettingsCallback = (i18n: Composer) => SettingsGroup[];
export type PermissionCallback = (i18n: Composer) => PermissionGroup[];
export interface DataSourceOptions {
    dataStore: DataStore<any>;
    pageSize?: number;
}
export interface MenuGroup {
    text: string;
    items: MenuItem[];
}
export interface MenuItem {
    text: string;
    route: string;
    icon?: string;
    side?: boolean;
}
export interface PermissionGroup {
    text: string;
    items: string[];
}
export interface SettingsGroup {
    text: string;
    items: SettingsItem[];
}
export interface SettingsItem {
    text: string;
    name: string;
    editorType: string;
    editorOptions?: any;
}
export type SettingsOptions = {
    service: SettingService;
    items: SettingsCallback;
};
export interface ResourceRoute {
    component: RouteComponent;
    name: string;
}
export interface AppPlugins {
    i18n: any;
    auth: AuthService;
    menu: MenuCallback;
    permissions: PermissionCallback;
    settings: SettingsOptions;
}
export interface AppOptions {
    resources?: ResourceRoute[];
    routes?: RouteRecordRaw[];
    plugins: AppPlugins;
}
export interface AppLicense {
    quantity: number;
    discount: number;
    price: number;
    total: number;
    usage: number;
    expire_day: number;
}
export interface AuthService {
    signIn(username: string, password: string): Promise<any>;
    register(data: any): Promise<any>;
    verifyEmail(params: any): Promise<any>;
    sendVerifyEmailLink(email: string): Promise<any>;
    sendResetLink(email: string): Promise<any>;
    resetPassword(data: any): Promise<any>;
    validatePassword(data: any): Promise<any>;
    updatePassword(data: any): Promise<any>;
    loadPermissions(): Promise<string[]>;
    loadLicense(): Promise<AppLicense>;
}
export interface SettingService {
    load(): Promise<any>;
    save(data: any): Promise<void>;
}
