Logo

Component Blueprint

X: 1280 · Y: 720 · Grid: 8px

Table

CDK-backed table primitives with captions, headers, rows, footers, sticky columns, empty states, actions, and virtual scrolling support.

01 Hero Preview

Grid: 8px · Scale: 1:1

Deployment activity from the current workspace.
DeployApplicationStatusRegionMonthly
DEP-2048Atlas StudioReadyEU Central$1,280
DEP-2049Northwind PortalQueuedUS East$860
DEP-2050Signal DeskReadyAP South$1,440
DEP-2051Beacon APIFailedEU West$520
DEP-2052Orbit ConsoleReadyUS West$1,110

02 Usage

TS

import { CurrencyPipe } from '@angular/common';
import { FrBadgeModule } from '@frame-ui-ng/components/badge';
import { FrTableModule } from '@frame-ui-ng/components/table';

columns = ['id', 'app', 'status', 'region', 'cost'];

deployments = [
  { id: 'DEP-2048', app: 'Atlas Studio', owner: 'Mira', status: 'Ready', region: 'EU Central', cost: 1280 },
  { id: 'DEP-2049', app: 'Northwind Portal', owner: 'Rhea', status: 'Queued', region: 'US East', cost: 860 },
  { id: 'DEP-2050', app: 'Signal Desk', owner: 'Nora', status: 'Ready', region: 'AP South', cost: 1440 },
];

badgeVariant(status: string): 'success' | 'secondary' | 'destructive' {
  if (status === 'Failed') {
    return 'destructive';
  }

  return status === 'Queued' ? 'secondary' : 'success';
}

totalCost(): number {
  return this.deployments.reduce((total, deployment) => total + deployment.cost, 0);
}

HTML

<div frTableContainer>
  <table frTable variant="outline" [dataSource]="deployments">
    <caption frTableCaption>Deployment activity from the current workspace.</caption>

    <ng-container frColumnDef="id">
      <th frHeaderCell *frHeaderCellDef>Deploy</th>
      <td frCell *frCellDef="let deployment">{{ deployment.id }}</td>
    </ng-container>

    <ng-container frColumnDef="app">
      <th frHeaderCell *frHeaderCellDef>Application</th>
      <td frCell *frCellDef="let deployment">{{ deployment.app }}</td>
    </ng-container>

    <ng-container frColumnDef="status">
      <th frHeaderCell *frHeaderCellDef>Status</th>
      <td frCell *frCellDef="let deployment">
        <span frBadge [variant]="badgeVariant(deployment.status)">{{ deployment.status }}</span>
      </td>
    </ng-container>

    <ng-container frColumnDef="region">
      <th frHeaderCell *frHeaderCellDef>Region</th>
      <td frCell frTableMuted *frCellDef="let deployment">{{ deployment.region }}</td>
    </ng-container>

    <ng-container frColumnDef="cost">
      <th frHeaderCell frTableNumeric *frHeaderCellDef>Monthly</th>
      <td frCell frTableNumeric *frCellDef="let deployment">{{ deployment.cost | currency }}</td>
    </ng-container>

    <tr frHeaderRow *frHeaderRowDef="columns"></tr>
    <tr frRow *frRowDef="let row; columns: columns"></tr>
  </table>
</div>

03 Examples

Basic

Use CDK column and row definitions for semantic tables with FrameUI styling.

Component Sheet

Grid: 8px · Scale: 1:1

Deployment activity from the current workspace.
DeployApplicationStatusRegionMonthly
DEP-2048Atlas StudioReadyEU Central$1,280
DEP-2049Northwind PortalQueuedUS East$860
DEP-2050Signal DeskReadyAP South$1,440
DEP-2051Beacon APIFailedEU West$520
DEP-2052Orbit ConsoleReadyUS West$1,110

Actions

Place buttons or menus in a trailing action column while keeping the row structure accessible.

Component Sheet

Grid: 8px · Scale: 1:1

DeployApplicationStatusActions
DEP-2048Atlas StudioReady
DEP-2049Northwind PortalQueued
DEP-2050Signal DeskReady
DEP-2051Beacon APIFailed
DEP-2052Orbit ConsoleReady

Dynamic Columns

Drive the row definition from a signal or computed value when columns can be toggled.

Component Sheet

Grid: 8px · Scale: 1:1

DeployApplicationOwnerRegion
DEP-2048Atlas StudioMiraEU Central
DEP-2049Northwind PortalJonasUS East
DEP-2050Signal DeskRheaAP South
DEP-2051Beacon APINoraEU West
DEP-2052Orbit ConsoleTheoUS West

Empty State

Use FrNoDataRow for empty results without special-casing the whole table template.

Component Sheet

Grid: 8px · Scale: 1:1

DeployApplication
No deployments match the current filters.

Sticky Columns

Use CDK sticky column inputs for wide tables that need pinned leading or trailing context.

Component Sheet

Grid: 8px · Scale: 1:1

DeployApplicationOwnerRegionStatusCost
DEP-3000Atlas StudioMiraEU CentralReady$1,280
DEP-3001Northwind PortalJonasUS EastQueued$895
DEP-3002Signal DeskRheaAP SouthReady$1,510
DEP-3003Beacon APINoraEU WestFailed$625
DEP-3004Orbit ConsoleTheoUS WestReady$1,250
DEP-3005Atlas StudioMiraEU CentralReady$1,455
DEP-3006Northwind PortalJonasUS EastQueued$1,070
DEP-3007Signal DeskRheaAP SouthReady$1,685

Sticky Header

Use row-definition sticky microsyntax when the header should remain visible inside a scrollable table container.

Component Sheet

Grid: 8px · Scale: 1:1

DeployApplicationOwnerCost
DEP-3000Atlas StudioMira$1,280
DEP-3001Northwind PortalJonas$895
DEP-3002Signal DeskRhea$1,510
DEP-3003Beacon APINora$625
DEP-3004Orbit ConsoleTheo$1,250
DEP-3005Atlas StudioMira$1,455
DEP-3006Northwind PortalJonas$1,070
DEP-3007Signal DeskRhea$1,685
DEP-3008Beacon APINora$800
DEP-3009Orbit ConsoleTheo$1,425
DEP-3010Atlas StudioMira$1,630
DEP-3011Northwind PortalJonas$1,245
DEP-3012Signal DeskRhea$1,440
DEP-3013Beacon APINora$555
DEP-3014Orbit ConsoleTheo$1,180
DEP-3015Atlas StudioMira$1,385
DEP-3016Northwind PortalJonas$1,000
DEP-3017Signal DeskRhea$1,615

Virtual Scroll

Compose table virtual primitives with FrVirtualScroll for large datasets with fixed row heights.

Component Sheet

Grid: 8px · Scale: 1:1

Deploy
Application
Owner
Region
Cost

RTL

Logical spacing and numeric alignment helpers continue to work in right-to-left layouts.

Component Sheet

Grid: 8px · Scale: 1:1

النشرالتطبيقالتكلفة
DEP-2048Atlas Studio$1,280
DEP-2049Northwind Portal$860
DEP-2050Signal Desk$1,440

04 Custom Styling

Override tokens on the table or a parent wrapper to tune density, surfaces, borders, row hover states, and card treatments locally.

Component Sheet

Grid: 8px · Scale: 1:1

Deployment activity from the current workspace.
DeployApplicationStatusRegionMonthly
DEP-2048Atlas StudioReadyEU Central$1,280
DEP-2049Northwind PortalQueuedUS East$860
DEP-2050Signal DeskReadyAP South$1,440
DEP-2051Beacon APIFailedEU West$520
DEP-2052Orbit ConsoleReadyUS West$1,110

05 Token Inspector

Inspect the container, table root, caption, header cells, body rows, and data cells used by the CDK-backed table.

Token inspection table for deployments.
DeployApplicationMonthly
DEP-2048Atlas Studio$1,280
DEP-2049Northwind Portal$860
DEP-2050Signal Desk$1,440

06 Design Tokens

Use these CSS custom properties to tune table surfaces, captions, header treatment, row states, cell spacing, footers, and sticky columns.

SCSS

--frame-table-bg: var(--frame-background);
--frame-table-color: var(--frame-foreground);
--frame-table-border: var(--frame-border);
--frame-table-radius: var(--frame-radius-md);
--frame-table-shadow: var(--frame-shadow-sm);
--frame-table-caption-color: var(--frame-muted-foreground);
--frame-table-caption-font-size: 0.875rem;
--frame-table-header-bg: transparent;
--frame-table-header-color: var(--frame-muted-foreground);
--frame-table-header-font-size: 0.875rem;
--frame-table-header-font-weight: 500;
--frame-table-row-border: var(--frame-border);
--frame-table-row-hover-bg: var(--frame-accent);
--frame-table-row-selected-bg: color-mix(in srgb, var(--frame-primary) 10%, transparent);
--frame-table-row-striped-bg: color-mix(in srgb, var(--frame-muted) 45%, transparent);
--frame-table-cell-padding-block: 0.75rem;
--frame-table-cell-padding-inline: 1rem;
--frame-table-cell-font-size: 0.875rem;
--frame-table-cell-line-height: 1.5;
--frame-table-footer-bg: transparent;
--frame-table-footer-font-weight: 600;
--frame-table-transition-duration: 150ms;
--frame-table-sticky-shadow: 1px 0 0 var(--frame-table-border);