🔌 Plugin UI System

API Reference

Complete reference of types, injection tokens, interfaces, and helper functions exported by the Plugin UI packages.

@gauzy/plugin-ui

Core Types

PluginUiDefinition

The main configuration object for a UI plugin.

interface PluginUiDefinition {
  id: string;
  module?: Type<any>;
  loadModule?: () => Promise<Type<any>>;
  bootstrap?: (injector: Injector) => void | Promise<void>;
  location?: string;
  plugins?: PluginUiDefinition[];
  options?: Record<string, unknown>;
  routes?: PluginRouteInput[];
  navMenu?: PluginNavContribution[];
  featureKey?: unknown;
  permissionKeys?: unknown[];
  dependsOn?: string[];
  extensions?: PageExtensionDefinition[];
  tabs?: PluginTabInput[];
  translations?: Record<string, Record<string, any>>;
  translationNamespace?: string;
  settings?: PluginSettingsSchema;
  version?: string;
  peerPlugins?: Record<string, string>;
  loadStrategy?: 'eager' | 'lazy' | 'preload';
}

PluginUiConfig

Application-level plugin configuration.

interface PluginUiConfig {
  defaultLanguage: string;
  defaultLocale: string;
  fallbackLocale?: string;
  availableLanguages: string[];
  availableLocales: string[];
  startWeekOn?: DayOfWeek;
  plugins: PluginUiDefinition[];
}

PageExtensionDefinition

Describes a UI extension contributed to an extension slot.

interface PageExtensionDefinition {
  id: string;
  slotId: string;
  component?: Type<any>;
  loadComponent?: () => Promise<Type<any>>;
  order?: number;
  title?: string;
  description?: string;
  pluginId?: string;
  hidden?: boolean;
  visible?: (context: ExtensionVisibilityContext) => boolean | Promise<boolean>;
  permissions?: string[];
  permissionsAny?: string[];
  featureKey?: string;
  wrapper?: ExtensionWrapperConfig;
  lifecycle?: ExtensionLifecycleHooks;
  metadata?: ExtensionMetadata;
}

DayOfWeek

enum DayOfWeek {
  Sunday = 0,
  Monday = 1,
  Tuesday = 2,
  Wednesday = 3,
  Thursday = 4,
  Friday = 5,
  Saturday = 6
}

PluginUiServices

Passed to PluginUiModule.init() to bridge the plugin system to the host application:

interface PluginUiServices {
  navBuilder?: Type<IDeclarativeNavBuilder>;
  routeRegistry?: Type<IDeclarativePageRouteRegistry>;
  tabRegistry?: Type<IDeclarativePageTabRegistry>;
  translateService?: Type<IPluginTranslateService>;
  permissionChecker?: Type<IPluginPermissionChecker>;
  featureChecker?: Type<IPluginFeatureChecker>;
}

All fields are optional. Values are Angular type references (classes), not instances.

Injection Tokens

TokenTypeDescription
PLUGIN_UI_CONFIGPluginUiConfigThe full plugin configuration
PLUGIN_OPTIONSRecord<string, unknown>Per-plugin options (in plugin's child injector)
PLUGIN_DEFINITIONPluginUiDefinitionThe plugin's own definition (in plugin's child injector)
PLUGIN_ACTIVATION_PREDICATE(def: PluginUiDefinition) => booleanCustom activation filter
PLUGIN_NAV_BUILDERIDeclarativeNavBuilderNavigation menu builder
PLUGIN_ROUTE_REGISTRYIDeclarativePageRouteRegistryRoute registry
PLUGIN_TAB_REGISTRYIDeclarativePageTabRegistryTab registry
PLUGIN_TRANSLATE_SERVICEIPluginTranslateServiceTranslation service
PLUGIN_TRANSLATE_DELEGATETranslateServiceBacking @ngx-translate/core service
PLUGIN_TRANSLATE_STORE_DELEGATETranslateStoreBacking @ngx-translate/core store
PLUGIN_APP_STOREIPluginAppStoreBacking application store (permissions/features)
PLUGIN_PERMISSION_CHECKERIPluginPermissionCheckerPermission checker
PLUGIN_FEATURE_CHECKERIPluginFeatureCheckerFeature flag checker

Service Interfaces

IPluginPermissionChecker

interface IPluginPermissionChecker {
  hasAllPermissions(...permissions: string[]): boolean;
}

IPluginFeatureChecker

interface IPluginFeatureChecker {
  isFeatureEnabled(featureKey: string): boolean;
}

IPluginTranslateService

interface IPluginTranslateService {
  instant(key: string, params?: Record<string, any>): string;
  get(key: string, params?: Record<string, any>): Observable<string>;
  onLangChange: EventEmitter<{ lang: string }>;
  currentLang: string;
  setTranslation(lang: string, translations: Record<string, any>, shouldMerge?: boolean): void;
}

IDeclarativeNavBuilder

interface IDeclarativeNavBuilder {
  addNavMenuItem(item: PluginNavItemInput, sectionId?: string): void;
  removeNavMenuItem(itemId: string): void;
}

IDeclarativePageRouteRegistry

interface IDeclarativePageRouteRegistry {
  registerPageRoute(route: PluginRouteInput): void;
}

IDeclarativePageTabRegistry

interface IDeclarativePageTabRegistry {
  registerPageTab(tab: PluginTabInput): void;
}

Lifecycle Interfaces

interface IOnPluginUiBootstrap {
  ngOnPluginBootstrap(): void | Promise<void>;
}

interface IOnPluginUiDestroy {
  ngOnPluginDestroy(): void | Promise<void>;
}

interface IOnPluginAfterBootstrap {
  ngOnPluginAfterBootstrap(): void | Promise<void>;
}

interface IOnPluginBeforeDestroy {
  ngOnPluginBeforeDestroy(): void | Promise<void>;
}

interface IOnPluginBeforeRouteActivate {
  ngOnPluginBeforeRouteActivate(): boolean | Promise<boolean>;
}

interface IOnPluginConfigChange {
  ngOnPluginConfigChange(config: Record<string, unknown>): void;
}

Helper Functions

Plugin Definition

FunctionSignatureDescription
defineDeclarativePlugin(id: string, config: Partial<PluginUiDefinition>) => PluginUiDefinitionCreate a declarative plugin (auto-generates bootstrap callback)
definePlugin(id: string, module: Type | LazyLoader, options?) => PluginUiDefinitionCreate a module-based plugin (smart loader detection via typeof fn === 'function' && !fn.prototype)
definePluginGroup(id: string, module: Type, options: { plugins, ... }) => PluginUiDefinitionCreate a plugin group with .init() method
applyDeclarativeRegistrations(def: PluginUiDefinition, services: { navBuilder?, pageRouteRegistry?, pageTabRegistry?, pageExtensionRegistry? }) => voidRegister routes, nav, tabs, and extensions from a definition
getUIPluginModules(defs: PluginUiDefinition[]) => Type<any>[]Extract Angular modules from definitions
getUIPluginModulesWithDefinitions(defs: PluginUiDefinition[]) => { module, definition }[]Extract modules paired with definitions

Plugin Utilities

FunctionSignatureDescription
orderPluginsByDependencies(defs: PluginUiDefinition[]) => PluginUiDefinition[]Topological sort by dependencies
flattenPlugins(defs: PluginUiDefinition[]) => PluginUiDefinition[]Flatten nested plugin groups
collectPluginIds(defs: PluginUiDefinition[]) => Set<string>Collect all plugin IDs
isPluginActive(def: PluginUiDefinition) => booleanCheck activation status
getPluginsByLocation(defs: PluginUiDefinition[], location: string) => PluginUiDefinition[]Filter by location
getPluginDefinition(defs: PluginUiDefinition[], id: string) => PluginUiDefinition | undefinedFind by ID

Config Management

FunctionSignatureDescription
getPluginUiConfig() => PluginUiConfigGet current config
setPluginUiConfig(config: PluginUiConfig) => voidSet config
resetPluginUiConfig() => voidReset to defaults

Dependency Validation

FunctionSignatureDescription
validatePluginDependencies(defs: PluginUiDefinition[]) => ValidationResultValidate dependency graph
logDependencyValidation(result: ValidationResult) => voidLog validation results
checkVersionCompatibility(defs: PluginUiDefinition[]) => CompatResultCheck peer version ranges

i18n

FunctionSignatureDescription
namespaceTranslations(ns: string, translations: object) => objectWrap translations in namespace
filterNewTranslationKeys(existing: object, incoming: object) => objectStrip existing keys

Events

FunctionSignatureDescription
definePluginEvent<T>(pluginId: string, eventName: string) => PluginEventContract<T>Define a typed event
bindEventToBus(contract: PluginEventContract<T>, bus: PluginEventBusService) => TypedEventHandle<T>Bind event to bus

Services

ServiceDescription
PluginUiRegistryServiceCentral plugin registry
PageExtensionRegistryServiceExtension slot registry
PluginEventBusServiceCross-plugin event bus
PluginEventSchemaRegistryEvent schema documentation
PluginSettingsRegistryServicePlugin settings storage
PluginServiceRegistryServiceCross-plugin service registry
PluginHealthServiceBoot time and error monitoring
PluginDevToolsServiceDebug introspection
DynamicPluginLoaderServiceRuntime plugin load/unload
UiBridgeRegistryServiceFramework bridge registry

Components

ComponentSelectorDescription
PageExtensionSlotComponentgau-page-extension-slotRenders extensions for a slot

Constants

ConstantDescription
PAGE_EXTENSION_SLOTSWell-known slot ID strings

@gauzy/ui-react

Hooks

HookSignatureDescription
useInjector() => InjectorAccess Angular injector
useObservable<T>(obs$: Observable<T>, initial: T) => TSubscribe to Observable
usePluginState<T>(pluginId, key, initial) => [T, (v: T) => void]Shared plugin state
usePluginSettings(pluginId: string) => Record<string, any>All plugin settings
usePluginSetting<T>(pluginId, key, defaultValue) => TSingle setting value
useTranslation() => { t, currentLang }Reactive translations
usePluginEvents() => PluginEventBusServiceRaw event bus access
usePluginEvent(eventName: string) => { emit, on }Basic event handle
useTypedEvent<T>(contract) => TypedEventHandle<T>Type-safe event handle
useTypedEventListener<T>(contract, callback) => voidAuto-subscribed listener
useDynamicPlugin(pluginId) => { load, unload, isLoaded }Dynamic plugin control

Components & Directives

ExportDescription
ReactHostDirective[gaReactHost] — mount React in Angular
LazyReactHostDirective[gaReactLazyHost] — lazy mount React in Angular
PluginErrorBoundaryReact error boundary with recovery
NgContextProviderReact context providing Angular injector
NgBridgeContextReact context object
useBridgeContextAccess bridge context from React

Bridge

ExportDescription
ReactBridgeBridge class with mount/unmount
createReactBridgeFactory function
provideReactBridgeAngular provider helper
REACT_BRIDGEInjection token

Extension Helpers

FunctionDescription
defineReactExtension(config)Create eager React extension definition
defineLazyReactExtension(config)Create lazy React extension definition
isReactExtension(ext)Type guard for React extensions

@gauzy/ui-react-components

Components

ComponentPropsDescription
CardCardProps (variant?: 'default' | 'accent')Card container
CardHeader—Card header section
CardTitle—Card title text
CardDescription—Card description text
CardAction—Card action area
CardContent—Card body content
CardFooter—Card footer section
WidgetCardWidget-specific propsPre-styled stat card
ProgressProgressProps (value: number)Progress bar
ColorDotsColorDotsPropsColor indicator dots

Design Tokens

import { theme } from '@gauzy/ui-react-components';

theme.colors     // { primary, textPrimary, textSecondary, background, border, ... }
theme.shadows    // { card, elevated }
theme.spacing    // { xs, sm, md, lg, xl }
theme.fonts      // { family, sizeBase, sizeSmall, sizeLarge }
theme.radii      // { sm, md, lg }

Utilities

FunctionDescription
formatDuration(seconds: number)Format seconds as "Xh Ym"
currentWeekRange()Get current week start/end dates
todayRange()Get today's start/end timestamps

Edit this page

Copyright © 2023-Present Ever Co. LTD.Docs by Sourcey