import { RouteRecordRaw, RouteRecordName } from 'vue-router'; import { Component, ComputedRef } from 'vue'; declare namespace FG_Plugin { /** * Interface defining a Flaschengeist plugin */ interface Plugin { name: string; version: string; widgets: Widget[]; /** Pther frontend modules needed for this plugin to work correctly */ requiredModules: string[]; /** Backend modules needed for this plugin to work correctly */ requiredBackendModules: string[]; /** Menu entries for authenticated users */ innerRoutes?: MenuRoute[]; /** Public menu entries (without authentification) */ outerRoutes?: MenuRoute[]; /** Routes without menu links, for internal usage */ internalRoutes?: NamedRouteRecordRaw[]; } /** * Defines the loaded state of the Flaschengeist */ interface Flaschengeist { /** All loaded plugins */ plugins: LoadedPlugin[]; /** All routes, combined from all plugins */ routes: RouteRecordRaw[]; /** All menu entries */ menuLinks: MenuLink[]; /** All inner shortcuts */ shortcuts: Shortcut[]; /** All outer shortcuts */ outerShortcuts: Shortcut[]; /** All widgets */ widgets: Widget[]; } /** * Loaded Flaschengeist plugin */ interface LoadedPlugin { name: string; version: string; } /** * Defines a shortcut link */ interface Shortcut { link: RouteRecordName; icon: string; permissions?: string[]; } /** * Defines a main menu entry along with the route * Used when defining a plugin */ interface MenuRoute extends MenuEntry { route: NamedRouteRecordRaw; shortcut?: boolean; children?: this[]; } type NamedRouteRecordRaw = RouteRecordRaw & { name: RouteRecordName; }; /** * Defines a menu entry in the main menu */ interface MenuLink extends MenuEntry { /** Name of the target route */ link: RouteRecordName; } /** * Base interface for internal use */ interface MenuEntry { title: string | ComputedRef; icon: string; permissions?: string[]; children?: this[]; } /** * Widget object for the dashboard */ interface Widget { name: string; priority: number; permissions: FG.Permission[]; widget: Component; } }