# Communication — Component Map

## Shell & layout

| Component | Path | Role |
| --- | --- | --- |
| CommunicationRootLayout | `components/createPortalLayout.tsx` | Auth + tenant gate |
| CommunicationPortalShell | `components/CommunicationPortalShell.tsx` | Sidebar nav, dark mode, lock icons |
| CommunicationBreadcrumbs | `components/CommunicationBreadcrumbs.tsx` | RTL breadcrumbs |
| CommunicationFeatureLock | `components/CommunicationFeatureLock.tsx` | Locked module premium UI |

## Data & CRUD

| Component | Path | Role |
| --- | --- | --- |
| createCommunicationListPage | `components/CommunicationListCrudPage.tsx` | CRUD factory (providers, templates, contacts) |
| CommunicationTablePage | `design-system/CommunicationTablePage.tsx` | Search, pagination, toolbar |
| CommunicationStatGrid | `design-system/CommunicationStatGrid.tsx` | KPI cards |
| CommunicationStatusChip | `design-system/CommunicationStatusChip.tsx` | Message/provider status |

## Shared (reused)

| Source | Used for |
| --- | --- |
| `@/components/ds` | Button, Card, Dialog, Drawer, FormField, StatCard, DataTable |
| `@/src/shared/ui` | PageLoader, PermissionDeniedState, Timeline, DetailDrawer |
| `@/src/shared/hooks` | useDebouncedValue (available) |

## Hooks

| Hook | Path |
| --- | --- |
| useCommunicationCapabilities | `hooks/useCommunicationCapabilities.ts` |
| useCommunicationPermissions | `hooks/useCommunicationPermissions.ts` |

## API

| Module | Path |
| --- | --- |
| communicationApi | `services/communication-api.ts` |
| normalizeCapabilities | same |

## Constants

| File | Contents |
| --- | --- |
| portals.ts | Full nav tree (locked items visible) |
| featureRegistry.ts | FUTURE_MODULE_REGISTRY |
| resourceRegistry.ts | SMS CRUD configs |
| permissions.ts | communication.* tree |
