import { ReactNode } from 'react'; /** * Navigation item for shell integration */ export interface NavItem { id: string; label: string; icon?: ReactNode; path: string; badge?: number; order?: number; group?: string; visible?: boolean; children?: NavItem[]; /** * When sidebar is collapsed and this parent item is clicked, * navigate to this path instead of the parent's path. * If not specified, defaults to the first child's path (if children exist). */ homePath?: string; } /** * Footer item for shell integration */ export interface FooterItem { id: string; label: string; icon?: string; onClick?: () => void; type?: 'status' | 'action' | 'info'; order?: number; badge?: string; section?: 'left' | 'center' | 'right'; visible?: boolean; } /** * Footer section type */ export type FooterSection = 'left' | 'center' | 'right'; /** * Base user type * Note: firstName and lastName are optional for compatibility with auth API responses * that may not always include these fields */ export interface User { id: string; email: string; firstName?: string; lastName?: string; avatar?: string; /** Optional username for display */ username?: string; /** Optional full name */ name?: string; /** User role */ role?: string; } /** * Base microfrontend root props */ export interface MicrofrontendRootProps { /** * Base path for the microfrontend (e.g., '/tags', '/workflows') */ basePath: string; /** * Navigation function injected by the host shell */ navigate: (path: string) => void; /** * Current authenticated user */ currentUser?: User; /** * Current tenant ID (for tenant modules) */ tenantId?: string; /** * Current organization ID (for workspace modules that need org context) */ organizationId?: string; /** * Current workspace ID (for workspace modules) */ workspaceId?: string; /** * Current project ID (for project-scoped workspace modules) */ projectId?: string; /** * API Gateway URL */ apiGatewayUrl?: string; /** * Authentication token */ authToken?: string; /** * Product name for branding (e.g., "Burdenoff Workspaces", "FluidGrids", "Botlit") * Injected by the host shell to ensure consistent branding across all MFEs */ productName?: string; /** * Product ID for branding (e.g., "workspaces", "fluidgrids", "botlit") * Injected by the host shell to identify which app shell is rendering */ productId?: string; /** * Optional function to register navigation items with the shell * Injected by the shell app * @returns Cleanup function to unregister the items */ registerNavItems?: (items: NavItem | NavItem[]) => () => void; /** * Optional function to register footer items with the shell * Injected by the shell app * @returns Cleanup function to unregister the items */ registerFooterItems?: (items: FooterItem | FooterItem[]) => () => void; } /** * Represents a single search result item */ export interface SearchResult { readonly id: string; readonly title: string; readonly description?: string; readonly category: string; readonly entityType?: string; readonly productSource?: string; readonly icon?: React.ComponentType<{ className?: string; }>; readonly href: string; /** Graph relevance score from search engine */ readonly score?: number; /** Workspace this result belongs to */ readonly workspaceId?: string; /** Actor who created this entity */ readonly createdBy?: string; /** Actor who last updated this entity */ readonly updatedBy?: string; readonly metadata?: Readonly<{ createdAt?: Date; author?: string; tags?: readonly string[]; [key: string]: unknown; }>; } /** * Faceted search counts for filtering UI */ export interface SearchFacets { readonly byType: ReadonlyArray<{ type: string; count: number; }>; readonly byProduct: ReadonlyArray<{ product: string; count: number; }>; readonly byWorkspace: ReadonlyArray<{ workspaceId: string; count: number; }>; } /** * Full search response including pagination and facets */ export interface SearchResponse { readonly results: readonly SearchResult[]; readonly total: number; readonly hasMore: boolean; readonly facets?: SearchFacets; readonly searchTimeMs?: number; readonly error?: 'NO_WORKSPACE_CONTEXT' | string; } /** * Search category configuration */ export interface SearchCategory { readonly name: string; readonly label: string; readonly icon: React.ComponentType<{ className?: string; }>; readonly entityTypes?: readonly string[]; } //# sourceMappingURL=index.d.ts.map