Extension Points Reference
Work Unit Extension Points
Section titled “Work Unit Extension Points”work-unit.detail.tabs
Section titled “work-unit.detail.tabs”Add custom tabs to work unit detail views.
Context Provided:
workUnit- Full work unit objectworkUnitId- Work unit IDorganizationId- Organization IDbusinessType- Business typestatus- Work unit status
Example:
{ point: 'work-unit.detail.tabs', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.TAB, id: 'my-tab', label: 'My Tab', component: MyTabComponent, }}work-unit.header.actions
Section titled “work-unit.header.actions”Add action buttons to work unit headers.
Context Provided:
workUnit- Full work unit objectworkUnitId- Work unit ID
Example:
{ point: 'work-unit.header.actions', plugin: 'my-plugin', priority: 80, extension: { type: ExtensionType.ACTION, id: 'my-action', label: 'My Action', icon: IconBolt, onClick: async (context) => { await doSomething(context.workUnit); } }}work-unit.list.columns
Section titled “work-unit.list.columns”Add custom columns to work unit list tables.
Context Provided:
workUnits- Array of work unitsorganizationId- Organization ID
Example:
{ point: 'work-unit.list.columns', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.COLUMN, id: 'my-column', header: 'My Column', accessor: 'customField', cell: (row) => <Text>{row.customField}</Text> }}work-unit.list.actions
Section titled “work-unit.list.actions”Add actions to work unit list views.
Context Provided:
selectedWorkUnits- Currently selected work unitsorganizationId- Organization ID
Example:
{ point: 'work-unit.list.actions', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.ACTION, id: 'bulk-action', label: 'Bulk Update', icon: IconEdit, onClick: async (context) => { await bulkUpdate(context.selectedWorkUnits); } }}work-unit.indicators
Section titled “work-unit.indicators”Add status indicators and badges to work units.
Context Provided:
workUnit- Work unit objectworkUnitId- Work unit ID
Example:
{ point: 'work-unit.indicators', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.INDICATOR, id: 'my-indicator', badge: (context) => context.workUnit.isUrgent ? 'Urgent' : null, color: 'error' }}Customer Extension Points
Section titled “Customer Extension Points”customer.detail.tabs
Section titled “customer.detail.tabs”Add custom tabs to customer detail views.
Context Provided:
customer- Full customer objectcustomerId- Customer IDorganizationId- Organization ID
customer.header.actions
Section titled “customer.header.actions”Add action buttons to customer headers.
customer.list.columns
Section titled “customer.list.columns”Add custom columns to customer list tables.
customer.indicators
Section titled “customer.indicators”Add status indicators to customers.
Dashboard Extension Points
Section titled “Dashboard Extension Points”dashboard.widgets
Section titled “dashboard.widgets”Add widgets to the main dashboard.
Context Provided:
organizationId- Organization IDuserId- Current user IDpremiumTier- Organization premium tier
Example:
{ point: 'dashboard.widgets', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.WIDGET, id: 'my-widget', component: MyDashboardWidget, title: 'My Widget', gridSize: { cols: 2, rows: 1 } }}dashboard.header.actions
Section titled “dashboard.header.actions”Add actions to dashboard header.
Sidebar Extension Points
Section titled “Sidebar Extension Points”sidebar.widgets
Section titled “sidebar.widgets”Add components to the global sidebar.
Context Provided:
organizationId- Organization IDuserId- Current user ID
Example:
{ point: 'sidebar.widgets', plugin: 'my-plugin', priority: 90, extension: { type: ExtensionType.WIDGET, id: 'sidebar-widget', component: MySidebarWidget }}sidebar.actions
Section titled “sidebar.actions”Add action buttons to sidebar.
Settings Extension Points
Section titled “Settings Extension Points”settings.tabs
Section titled “settings.tabs”Add custom settings tabs.
Context Provided:
organizationId- Organization IDuserId- Current user IDisAdmin- User admin status
Example:
{ point: 'settings.tabs', plugin: 'my-plugin', priority: 50, extension: { type: ExtensionType.TAB, id: 'plugin-settings', label: 'Plugin Settings', component: MySettingsComponent }}Navigation Extension Points
Section titled “Navigation Extension Points”navigation.primary
Section titled “navigation.primary”Add items to primary navigation menu.
navigation.user-menu
Section titled “navigation.user-menu”Add items to user dropdown menu.
Complete Extension Points List
Section titled “Complete Extension Points List”Work Units
Section titled “Work Units”work-unit.detail.tabswork-unit.header.actionswork-unit.list.columnswork-unit.list.actionswork-unit.indicators
Customers
Section titled “Customers”customer.detail.tabscustomer.header.actionscustomer.list.columnscustomer.indicators
Dashboard
Section titled “Dashboard”dashboard.widgetsdashboard.header.actions
Sidebar
Section titled “Sidebar”sidebar.widgetssidebar.actions
Settings
Section titled “Settings”settings.tabssettings.sections
Navigation
Section titled “Navigation”navigation.primarynavigation.user-menu
Extension Point Naming Convention
Section titled “Extension Point Naming Convention”Extension points follow this pattern:
{entity}.{location}.{type}Examples:
work-unit.detail.tabs- Work unit detail page, tabs sectioncustomer.header.actions- Customer page header, actions sectiondashboard.widgets- Dashboard, widgets section
Priority System
Section titled “Priority System”Extensions are rendered in order of priority:
- 0-30: Core platform extensions
- 31-60: Standard plugin extensions
- 61-90: High-priority plugin extensions
- 91-100: Critical/urgent plugin extensions
Higher numbers appear first/earlier in the UI.