@bfrs/agentic-components 0.3.4 → 0.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -115,11 +115,54 @@ Use native Angular DOM event bindings for interactions. Do not pass React-style
115
115
  <bfrs-paper (click)="openDetails()">Open details</bfrs-paper>
116
116
  ```
117
117
 
118
- Registered tags cover the documented component surface: `bfrs-box`, `bfrs-container`, `bfrs-paper`, `bfrs-stack`, `bfrs-grid`, `bfrs-text`, `bfrs-icon`, `bfrs-button`, `bfrs-icon-button`, `bfrs-form-field`, `bfrs-label`, `bfrs-input`, `bfrs-slider`, `bfrs-color-picker`, `bfrs-color-swatch-group`, `bfrs-textarea`, `bfrs-select`, `bfrs-date-range-picker`, `bfrs-searchable-select`, `bfrs-multi-select`, `bfrs-suggest-input`, `bfrs-option-card-group`, `bfrs-selectable-chip-group`, `bfrs-number-stepper`, `bfrs-file-dropzone`, `bfrs-reveal-field`, `bfrs-checkbox`, `bfrs-radio`, `bfrs-switch`, `bfrs-badge`, `bfrs-chip`, `bfrs-alert`, `bfrs-info-card`, `bfrs-tip`, `bfrs-toast-manager`, `bfrs-spinner`, `bfrs-skeleton`, `bfrs-empty-state`, `bfrs-error-state`, `bfrs-loading-state`, `bfrs-modal`, `bfrs-drawer`, `bfrs-confirm-dialog`, `bfrs-dropdown`, `bfrs-tooltip`, `bfrs-popover`, `bfrs-avatar`, `bfrs-metric-card`, `bfrs-table-pagination`, `bfrs-data-table`, `bfrs-tabs`, `bfrs-breadcrumbs`, `bfrs-action-menu`, `bfrs-page-header`, `bfrs-section-header`, `bfrs-layout-shell`, `bfrs-form-section`, `bfrs-filter-bar`, `bfrs-filter-drawer`, `bfrs-chat-bubble`, `bfrs-chat-composer`, `bfrs-full-page-loader`, `bfrs-business-info-display-card`, `bfrs-collapsible`, `bfrs-accordion`, `bfrs-summary-bar`, `bfrs-entity-display-card`, `bfrs-reveal-and-copy`, and `bfrs-step-progress-card`.
118
+ Registered tags cover the documented component surface, including
119
+ `bfrs-button-group`, `bfrs-toast-provider`, `bfrs-table-toolbar`,
120
+ `bfrs-table-empty-state`, `bfrs-table-error-state`, `bfrs-table-skeleton`,
121
+ `bfrs-table-row-actions`, `bfrs-table-bulk-actions`, and
122
+ `bfrs-table-column-visibility` in addition to the existing component tags.
123
+ Existing form and pattern tags include `bfrs-date-range-picker`,
124
+ `bfrs-multi-select`, `bfrs-step-progress-card`, `bfrs-data-table`,
125
+ `bfrs-modal`, `bfrs-tabs`, and the rest of the documented `bfrs-*` surface.
126
+
127
+ ReactNode-based composition is exposed through native named slots. Angular
128
+ components placed in these slots remain live across the Shadow DOM boundary:
129
+
130
+ ```html
131
+ <bfrs-page-header title="Orders">
132
+ <bfrs-breadcrumbs slot="breadcrumb" [props]="{ items: breadcrumbs }"></bfrs-breadcrumbs>
133
+ <bfrs-button slot="secondary-actions" variant="outline">Export</bfrs-button>
134
+ <bfrs-button slot="actions">Create order</bfrs-button>
135
+ </bfrs-page-header>
136
+
137
+ <bfrs-modal title="Edit order" [attr.open]="open || null">
138
+ <app-order-form></app-order-form>
139
+ <app-modal-actions slot="footer"></app-modal-actions>
140
+ </bfrs-modal>
141
+ ```
142
+
143
+ Supported composition slots include `left-icon`, `right-icon`, `label`,
144
+ `helper-text`, `error-message`, `prefix`, `suffix`, `trigger`, `title`,
145
+ `description`, `footer`, `actions`, `primary-action`, `secondary-actions`,
146
+ `search-input`, `filter-trigger`, `breadcrumb`, `header`, `sidebar`, `brand`,
147
+ `tabs`, `search`, `icon`, `empty-state`, `error`, and `row-actions-header`.
148
+
149
+ `bfrs-tabs` uses item-specific slots named `tab-{value}-label`,
150
+ `tab-{value}-badge`, and `tab-{value}-content`. Menu and navigation item
151
+ schemas additionally accept `iconName`, `iconSlot`, `labelSlot`, `badgeSlot`,
152
+ and related slot-name fields.
153
+
154
+ The React compound tabs API is available as `bfrs-tabs-list`,
155
+ `bfrs-tabs-trigger`, and `bfrs-tabs-content`. The parent `bfrs-tabs` coordinates
156
+ their selected state and emits `value-change`.
157
+
158
+ Mount `bfrs-toast-provider` once when Angular needs the equivalent of
159
+ `ToastProvider` and `useToast`. The element exposes `toast()`, `success()`,
160
+ `warning()`, `danger()`, `info()`, `dismiss()`, and `clear()` methods, and emits
161
+ `toast-change`, `toast-action`, `dismiss`, and `clear`.
119
162
 
120
163
  Use attributes for simple props: `variant`, `size`, `tone`, `label`, `loading`, `disabled`, `required`, `error-message`, `error-text`, `helper-text`, `prefix`, `suffix`, `min`, `max`, `step`, and `value`. Use `[props]` or the `props` JSON attribute for structured props like `options`, palette arrays, `items`, `columns`, `data`, `sections`, `steps`, and `toasts`.
121
164
 
122
- Common component events: `(value-change)`, `(checked-change)`, `(open-change)`, `(reveal-change)`, `(copy)`, `(copy-error)`, `(close)`, `(confirm)`, `(cancel)`, `(cell-action)`, `(row-click)`, `(sort-change)`, `(page-change)`, `(page-size-change)`, `(action-select)`, `(dropdown-select)`, `(date-range-change)`, `(search-change)`, `(open-filters)`, `(apply)`, `(reset)`, and `(submit)`. Payloads are available on `$event.detail`.
165
+ Common component events: `(value-change)`, `(checked-change)`, `(open-change)`, `(reveal-change)`, `(copy)`, `(copy-error)`, `(close)`, `(confirm)`, `(cancel)`, `(cell-action)`, `(cell-event)`, `(row-click)`, `(sort-change)`, `(page-change)`, `(page-size-change)`, `(action-select)`, `(dropdown-select)`, `(date-range-change)`, `(search-change)`, `(open-filters)`, `(apply)`, `(reset)`, and `(submit)`. Payloads are available on `$event.detail`.
123
166
 
124
167
  For validated forms, keep client validation, API validation, and submit side effects in the consuming app. In React, pass field errors through `FormField errorText` and set `Input error`. In Angular, use `bfrs-input` with `[attr.error]` and `[attr.error-message]`, listen to `(value-change)`, and manage success/failure notifications with `bfrs-toast-manager`.
125
168
 
@@ -1318,6 +1361,72 @@ Custom-element DataTable action cells must be declarative because Angular/HTML c
1318
1361
  </bfrs-data-table>
1319
1362
  ```
1320
1363
 
1364
+ Angular/HTML consumers can also render framework-neutral rich cells with
1365
+ `cellType: "text" | "chip" | "chips" | "badge" | "badges" | "image" |
1366
+ "avatar" | "link" | "custom-element"`. Configure them through the serializable
1367
+ `cellConfig` object:
1368
+
1369
+ ```ts
1370
+ columns = [
1371
+ {
1372
+ id: "status",
1373
+ header: "Status",
1374
+ accessorKey: "status",
1375
+ cellType: "chip",
1376
+ cellConfig: {
1377
+ caption: "Current status",
1378
+ labelKey: "status",
1379
+ toneKey: "statusTone"
1380
+ }
1381
+ },
1382
+ {
1383
+ id: "tags",
1384
+ header: "Tags",
1385
+ cellType: "chips",
1386
+ cellConfig: {
1387
+ itemsKey: "tags",
1388
+ itemLabelKey: "label",
1389
+ itemToneKey: "tone"
1390
+ }
1391
+ },
1392
+ {
1393
+ id: "channel",
1394
+ header: "Channel",
1395
+ cellType: "image",
1396
+ cellConfig: {
1397
+ srcKey: "channel.logo",
1398
+ altKey: "channel.name",
1399
+ width: 32,
1400
+ height: 32
1401
+ }
1402
+ },
1403
+ {
1404
+ id: "customer",
1405
+ header: "Customer",
1406
+ cellType: "custom-element",
1407
+ cellConfig: {
1408
+ tagName: "customer-summary",
1409
+ attributeMap: {
1410
+ name: "customer.name",
1411
+ email: "customer.email"
1412
+ },
1413
+ propertyMap: {
1414
+ customerId: "customer.id"
1415
+ },
1416
+ events: ["open", "change"]
1417
+ }
1418
+ }
1419
+ ];
1420
+ ```
1421
+
1422
+ `caption`/`captionKey` adds a small label above any rich cell. Key fields
1423
+ support dot-separated row paths. For custom elements, register the hyphenated
1424
+ tag before the table renders. `attributeMap` sets scalar attributes,
1425
+ `propertyMap` assigns JavaScript properties, and `rowProperty` can pass the
1426
+ complete row when the nested custom element explicitly supports it. Raw HTML is
1427
+ not rendered. Listed custom-element events are re-emitted as `cell-event` with
1428
+ `{ eventName, detail, columnId, row, rowId, rowIndex }`.
1429
+
1321
1430
  ---
1322
1431
 
1323
1432
  ### Navigation
package/README.md CHANGED
@@ -150,7 +150,119 @@ orderColumns = [
150
150
  ];
151
151
  ```
152
152
 
153
- Registered tags include `bfrs-box`, `bfrs-container`, `bfrs-paper`, `bfrs-stack`, `bfrs-grid`, `bfrs-text`, `bfrs-icon`, `bfrs-button`, `bfrs-icon-button`, `bfrs-form-field`, `bfrs-label`, `bfrs-input`, `bfrs-slider`, `bfrs-color-picker`, `bfrs-color-swatch-group`, `bfrs-textarea`, `bfrs-select`, `bfrs-date-range-picker`, `bfrs-searchable-select`, `bfrs-multi-select`, `bfrs-suggest-input`, `bfrs-option-card-group`, `bfrs-selectable-chip-group`, `bfrs-number-stepper`, `bfrs-file-dropzone`, `bfrs-reveal-field`, `bfrs-checkbox`, `bfrs-radio`, `bfrs-switch`, `bfrs-badge`, `bfrs-chip`, `bfrs-alert`, `bfrs-info-card`, `bfrs-tip`, `bfrs-toast-manager`, `bfrs-spinner`, `bfrs-skeleton`, `bfrs-empty-state`, `bfrs-error-state`, `bfrs-loading-state`, `bfrs-modal`, `bfrs-drawer`, `bfrs-confirm-dialog`, `bfrs-dropdown`, `bfrs-tooltip`, `bfrs-popover`, `bfrs-avatar`, `bfrs-metric-card`, `bfrs-table-pagination`, `bfrs-data-table`, `bfrs-tabs`, `bfrs-breadcrumbs`, `bfrs-action-menu`, `bfrs-page-header`, `bfrs-section-header`, `bfrs-layout-shell`, `bfrs-form-section`, `bfrs-filter-bar`, `bfrs-filter-drawer`, `bfrs-chat-bubble`, `bfrs-chat-composer`, `bfrs-full-page-loader`, `bfrs-business-info-display-card`, `bfrs-collapsible`, `bfrs-accordion`, `bfrs-summary-bar`, `bfrs-entity-display-card`, `bfrs-reveal-and-copy`, and `bfrs-step-progress-card`.
153
+ Rich Angular/HTML cells use the same serializable column approach. Supported
154
+ `cellType` values are `text`, `chip`, `chips`, `badge`, `badges`, `image`,
155
+ `avatar`, `link`, `custom-element`, `button`, `buttons`, and `actions`.
156
+
157
+ ```ts
158
+ orderColumns = [
159
+ {
160
+ id: "status",
161
+ header: "Status",
162
+ accessorKey: "status",
163
+ cellType: "chip",
164
+ cellConfig: { caption: "Current status", labelKey: "status", toneKey: "statusTone" }
165
+ },
166
+ {
167
+ id: "channel",
168
+ header: "Channel",
169
+ cellType: "image",
170
+ cellConfig: { srcKey: "channelLogo", altKey: "channelName", width: 32, height: 32 }
171
+ },
172
+ {
173
+ id: "customer",
174
+ header: "Customer",
175
+ cellType: "custom-element",
176
+ cellConfig: {
177
+ tagName: "customer-summary",
178
+ attributeMap: { name: "customer.name", email: "customer.email" },
179
+ events: ["open"]
180
+ }
181
+ }
182
+ ];
183
+ ```
184
+
185
+ Registered custom-element events are re-emitted by `bfrs-data-table` as
186
+ `cell-event` with `{ eventName, detail, columnId, row, rowId, rowIndex }`.
187
+
188
+ ReactNode props are exposed to Angular as native named slots. Slotted Angular
189
+ components remain live; they are not converted to static HTML:
190
+
191
+ ```html
192
+ <bfrs-page-header title="Orders">
193
+ <bfrs-breadcrumbs slot="breadcrumb" [props]="{ items: breadcrumbs }"></bfrs-breadcrumbs>
194
+ <bfrs-button slot="secondary-actions" variant="outline">Export</bfrs-button>
195
+ <bfrs-button slot="actions">Create order</bfrs-button>
196
+ </bfrs-page-header>
197
+
198
+ <bfrs-workspace-header toggle (toggle-sidebar)="toggleSidebar()">
199
+ <app-brand slot="brand"></app-brand>
200
+ <app-workspace-tabs slot="tabs"></app-workspace-tabs>
201
+ <app-global-search slot="search"></app-global-search>
202
+ <app-user-actions slot="actions"></app-user-actions>
203
+ </bfrs-workspace-header>
204
+ ```
205
+
206
+ Common named slots include `left-icon`, `right-icon`, `label`, `helper-text`,
207
+ `error-message`, `trigger`, `title`, `description`, `footer`, `actions`,
208
+ `primary-action`, `secondary-actions`, `search-input`, `filter-trigger`,
209
+ `breadcrumb`, `header`, `sidebar`, `brand`, `tabs`, `search`, `icon`,
210
+ `empty-state`, `error`, and `row-actions-header`.
211
+
212
+ Tabs accept serializable items and live slots using the convention
213
+ `tab-{value}-label`, `tab-{value}-badge`, and `tab-{value}-content`:
214
+
215
+ ```html
216
+ <bfrs-tabs [props]="{ items: [{ value: 'open', label: 'Open' }, { value: 'closed', label: 'Closed' }] }">
217
+ <bfrs-badge slot="tab-open-badge" count="4"></bfrs-badge>
218
+ <app-open-orders slot="tab-open-content"></app-open-orders>
219
+ <app-closed-orders slot="tab-closed-content"></app-closed-orders>
220
+ </bfrs-tabs>
221
+ ```
222
+
223
+ Angular can also use the compound API directly:
224
+
225
+ ```html
226
+ <bfrs-tabs value="open" (value-change)="activeTab = $event.detail.value">
227
+ <bfrs-tabs-list>
228
+ <bfrs-tabs-trigger value="open">Open <bfrs-badge slot="badge" count="4"></bfrs-badge></bfrs-tabs-trigger>
229
+ <bfrs-tabs-trigger value="closed">Closed</bfrs-tabs-trigger>
230
+ </bfrs-tabs-list>
231
+ <bfrs-tabs-content value="open"><app-open-orders></app-open-orders></bfrs-tabs-content>
232
+ <bfrs-tabs-content value="closed"><app-closed-orders></app-closed-orders></bfrs-tabs-content>
233
+ </bfrs-tabs>
234
+ ```
235
+
236
+ For imperative notifications, mount one provider and call its public methods
237
+ through `ViewChild`:
238
+
239
+ ```html
240
+ <bfrs-toast-provider #toasts placement="bottom-center"
241
+ (toast-action)="handleToastAction($event.detail)">
242
+ </bfrs-toast-provider>
243
+ ```
244
+
245
+ ```ts
246
+ @ViewChild("toasts") toasts!: ElementRef<HTMLElement & {
247
+ success(input: string | { title: string; description?: string }): string;
248
+ danger(input: string | { title: string; description?: string }): string;
249
+ dismiss(id: string): void;
250
+ clear(): void;
251
+ }>;
252
+
253
+ save() {
254
+ this.toasts.nativeElement.success("Order saved");
255
+ }
256
+ ```
257
+
258
+ DataTable also accepts declarative `leadingColumn`, `rowActions`,
259
+ `rowClassRules`, `rowIdKey`, `accessorPath`, and `sortValueKey` configuration.
260
+ The standalone helpers are available as `bfrs-table-toolbar`,
261
+ `bfrs-table-empty-state`, `bfrs-table-error-state`, `bfrs-table-skeleton`,
262
+ `bfrs-table-row-actions`, `bfrs-table-bulk-actions`, and
263
+ `bfrs-table-column-visibility`.
264
+
265
+ Registered tags include `bfrs-box`, `bfrs-container`, `bfrs-paper`, `bfrs-stack`, `bfrs-grid`, `bfrs-text`, `bfrs-icon`, `bfrs-button`, `bfrs-button-group`, `bfrs-icon-button`, `bfrs-form-field`, `bfrs-label`, `bfrs-input`, `bfrs-slider`, `bfrs-color-picker`, `bfrs-color-swatch-group`, `bfrs-textarea`, `bfrs-select`, `bfrs-date-range-picker`, `bfrs-searchable-select`, `bfrs-multi-select`, `bfrs-suggest-input`, `bfrs-option-card-group`, `bfrs-selectable-chip-group`, `bfrs-number-stepper`, `bfrs-file-dropzone`, `bfrs-reveal-field`, `bfrs-checkbox`, `bfrs-radio`, `bfrs-switch`, `bfrs-badge`, `bfrs-chip`, `bfrs-alert`, `bfrs-info-card`, `bfrs-tip`, `bfrs-toast-manager`, `bfrs-toast-provider`, `bfrs-spinner`, `bfrs-skeleton`, `bfrs-empty-state`, `bfrs-error-state`, `bfrs-loading-state`, `bfrs-modal`, `bfrs-drawer`, `bfrs-confirm-dialog`, `bfrs-dropdown`, `bfrs-tooltip`, `bfrs-popover`, `bfrs-avatar`, `bfrs-metric-card`, `bfrs-table-pagination`, `bfrs-table-toolbar`, `bfrs-table-empty-state`, `bfrs-table-error-state`, `bfrs-table-skeleton`, `bfrs-table-row-actions`, `bfrs-table-bulk-actions`, `bfrs-table-column-visibility`, `bfrs-data-table`, `bfrs-tabs`, `bfrs-tabs-list`, `bfrs-tabs-trigger`, `bfrs-tabs-content`, `bfrs-breadcrumbs`, `bfrs-action-menu`, `bfrs-page-header`, `bfrs-section-header`, `bfrs-layout-shell`, `bfrs-form-section`, `bfrs-filter-bar`, `bfrs-filter-drawer`, `bfrs-chat-bubble`, `bfrs-chat-composer`, `bfrs-full-page-loader`, `bfrs-business-info-display-card`, `bfrs-collapsible`, `bfrs-accordion`, `bfrs-summary-bar`, `bfrs-entity-display-card`, `bfrs-reveal-and-copy`, and `bfrs-step-progress-card`.
154
266
 
155
267
  ## Theme Overrides
156
268
 
@@ -1,2 +1,2 @@
1
1
  import { DataTableProps } from './DataTable.types';
2
- export declare function DataTable<Row>({ data, columns, getRowId, loading, error, emptyState, emptyTitle, emptyDescription, pagination, enableSorting, sorting, defaultSorting, onSortingChange, visibleColumnIds, columnOrder, defaultColumnOrder, onColumnOrderChange, enableColumnPinning, pinnedColumnCount, defaultPinnedColumnCount, onPinnedColumnCountChange, pinLeadingColumn, defaultPinLeadingColumn, onPinLeadingColumnChange, enableColumnReordering, resetKey, showSortIcon, leadingColumn, rowActions, rowActionsHeader, rowActionsWidth, stickyRowActions, selection, selectedRowIds, onSelectedRowIdsChange, stickyHeader, minWidth, density, className, tableClassName, headerClassName, rowClassName, cellClassName, onRowClick, "aria-label": ariaLabel }: DataTableProps<Row>): import("react/jsx-runtime").JSX.Element;
2
+ export declare function DataTable<Row>({ data, columns, getRowId, loading, error, emptyState, emptyTitle, emptyDescription, pagination, enableSorting, sorting, defaultSorting, onSortingChange, visibleColumnIds, columnOrder, defaultColumnOrder, onColumnOrderChange, enableColumnPinning, pinnedColumnCount, defaultPinnedColumnCount, onPinnedColumnCountChange, pinLeadingColumn, defaultPinLeadingColumn, onPinLeadingColumnChange, enableColumnReordering, resetKey, showSortIcon, leadingColumn, rowActions, rowActionsHeader, rowActionsWidth, stickyRowActions, selection, selectedRowIds, onSelectedRowIdsChange, stickyHeader, minWidth, maxHeight, density, className, tableClassName, headerClassName, rowClassName, cellClassName, onRowClick, "aria-label": ariaLabel }: DataTableProps<Row>): import("react/jsx-runtime").JSX.Element;
@@ -60,7 +60,7 @@ export type DataTableProps<Row> = {
60
60
  emptyState?: ReactNode;
61
61
  emptyTitle?: ReactNode;
62
62
  emptyDescription?: ReactNode;
63
- pagination?: DataTablePagination;
63
+ pagination?: TablePaginationProps;
64
64
  enableSorting?: boolean;
65
65
  sorting?: DataTableSorting | null;
66
66
  defaultSorting?: DataTableSorting | null;
@@ -89,6 +89,12 @@ export type DataTableProps<Row> = {
89
89
  onSelectedRowIdsChange?: (ids: string[]) => void;
90
90
  stickyHeader?: boolean;
91
91
  minWidth?: number | string;
92
+ /**
93
+ * Caps the height of the scrollable region so the body scrolls vertically
94
+ * while the sticky header stays fixed at the top. Pair with the `pagination`
95
+ * prop to keep the footer fixed below the scroll area.
96
+ */
97
+ maxHeight?: number | string;
92
98
  density?: TableDensity;
93
99
  className?: string;
94
100
  tableClassName?: string;
@@ -109,7 +115,10 @@ export type TableToolbarProps = {
109
115
  className?: string;
110
116
  };
111
117
  export type TablePaginationProps = DataTablePagination & {
112
- itemLabel?: string;
118
+ /** Suffix shown after the count, e.g. "Orders" -> "15 Orders". Defaults to "items". */
119
+ itemLabel?: ReactNode;
120
+ /** Leading label for the page-size control. Defaults to "Items per page:". */
121
+ itemsPerPageLabel?: ReactNode;
113
122
  className?: string;
114
123
  /**
115
124
  * Page-size control presentation. "select" (default, unchanged) renders a
@@ -1,2 +1,2 @@
1
1
  import { TablePaginationProps } from './DataTable.types';
2
- export declare function TablePagination({ page, totalPages, pageSize, totalItems, pageSizeOptions, onPageChange, onPageSizeChange, itemLabel, className, pageSizeControl, showPageNavigation }: TablePaginationProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function TablePagination({ page, totalPages, pageSize, totalItems, pageSizeOptions, onPageChange, onPageSizeChange, itemLabel, itemsPerPageLabel, className, pageSizeControl, showPageNavigation }: TablePaginationProps): import("react/jsx-runtime").JSX.Element;
@@ -1,4 +1,4 @@
1
- export declare const Input: import('react').ForwardRefExoticComponent<Omit<import('react').InputHTMLAttributes<HTMLInputElement>, "size"> & {
1
+ export declare const Input: import('react').ForwardRefExoticComponent<Omit<import('react').InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> & {
2
2
  size?: import('./Input.types').InputSize;
3
3
  label?: import('react').ReactNode;
4
4
  helperText?: import('react').ReactNode;
@@ -1,6 +1,6 @@
1
1
  import { InputHTMLAttributes, ReactNode } from 'react';
2
2
  export type InputSize = "xs" | "sm" | "md" | "lg";
3
- export type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "size"> & {
3
+ export type InputProps = Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "prefix"> & {
4
4
  size?: InputSize;
5
5
  label?: ReactNode;
6
6
  helperText?: ReactNode;
@@ -3,12 +3,12 @@ import { VariantProps } from 'class-variance-authority';
3
3
  declare const alertVariants: (props?: ({
4
4
  tone?: "success" | "warning" | "danger" | "info" | null | undefined;
5
5
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
- export type AlertProps = HTMLAttributes<HTMLDivElement> & VariantProps<typeof alertVariants> & {
6
+ export type AlertProps = Omit<HTMLAttributes<HTMLDivElement>, "title"> & VariantProps<typeof alertVariants> & {
7
7
  title?: ReactNode;
8
8
  action?: ReactNode;
9
9
  icon?: ReactNode;
10
10
  };
11
- export declare const Alert: import('react').ForwardRefExoticComponent<HTMLAttributes<HTMLDivElement> & VariantProps<(props?: ({
11
+ export declare const Alert: import('react').ForwardRefExoticComponent<Omit<HTMLAttributes<HTMLDivElement>, "title"> & VariantProps<(props?: ({
12
12
  tone?: "success" | "warning" | "danger" | "info" | null | undefined;
13
13
  } & import('class-variance-authority/types').ClassProp) | undefined) => string> & {
14
14
  title?: ReactNode;
@@ -1,7 +1,124 @@
1
+ import { ReactNode } from 'react';
2
+ import { ButtonProps } from './components/primitives/Button';
3
+ import { BadgeProps } from './components/primitives/Badge';
4
+ import { ChipProps } from './components/primitives/Chip';
5
+ import { AvatarProps } from './components/ui/data-display/Avatar';
1
6
  import { ColorSwatchValue } from './components/ui/forms/ColorSwatchGroup';
7
+ import { TableEmptyState, TableErrorState, DataTableColumn, DataTableLeadingColumn } from './components/data-display/DataTable';
8
+ import { ToastTone } from './components/feedback/Toast';
2
9
  import { BfrsColorScheme } from './components/ui/providers/BfrsProvider';
3
10
  type UnknownProps = Record<string, unknown>;
4
11
  type CheckedValue = boolean | "indeterminate";
12
+ export type BfrsToastElementInput = string | {
13
+ id?: string;
14
+ title: string;
15
+ description?: string;
16
+ tone?: ToastTone;
17
+ duration?: number;
18
+ iconName?: string;
19
+ actionId?: string;
20
+ actionLabel?: string;
21
+ dismissible?: boolean;
22
+ className?: string;
23
+ };
24
+ export type DataTableElementRowClassRule = {
25
+ path: string;
26
+ className: string;
27
+ equals?: unknown;
28
+ notEquals?: unknown;
29
+ truthy?: boolean;
30
+ };
31
+ export type DataTableElementLeadingColumn = Omit<DataTableLeadingColumn<UnknownProps>, "cell" | "header"> & {
32
+ header?: string;
33
+ cellType?: DataTableElementCellType;
34
+ cellConfig?: DataTableElementCellConfig;
35
+ action?: DataTableElementCellAction;
36
+ actions?: DataTableElementCellAction[];
37
+ actionsDisplay?: "inline" | "menu";
38
+ };
39
+ export type DataTableElementCellAction = {
40
+ id?: string;
41
+ label?: string;
42
+ labelKey?: string;
43
+ variant?: ButtonProps["variant"];
44
+ size?: ButtonProps["size"];
45
+ display?: "button" | "icon" | "menu";
46
+ iconName?: string;
47
+ iconNameKey?: string;
48
+ ariaLabel?: string;
49
+ disabled?: boolean;
50
+ disabledKey?: string;
51
+ destructive?: boolean;
52
+ };
53
+ export type DataTableElementCellConfig = {
54
+ /** Optional small label rendered above the cell content. */
55
+ caption?: string;
56
+ captionKey?: string;
57
+ /** Main display value. Falls back to the column accessor value. */
58
+ label?: string;
59
+ labelKey?: string;
60
+ valueKey?: string;
61
+ secondary?: string;
62
+ secondaryKey?: string;
63
+ /** Chip / badge presentation. Dynamic keys are resolved from the row. */
64
+ tone?: BadgeProps["tone"] | ChipProps["tone"];
65
+ toneKey?: string;
66
+ variant?: BadgeProps["variant"] | ChipProps["variant"];
67
+ variantKey?: string;
68
+ size?: BadgeProps["size"] | ChipProps["size"] | AvatarProps["size"];
69
+ sizeKey?: string;
70
+ dot?: boolean;
71
+ dotKey?: string;
72
+ /** Use plural cell types with arrays of primitive values or objects. */
73
+ itemsKey?: string;
74
+ itemLabelKey?: string;
75
+ itemValueKey?: string;
76
+ itemToneKey?: string;
77
+ /** Image / avatar presentation. */
78
+ src?: string;
79
+ srcKey?: string;
80
+ alt?: string;
81
+ altKey?: string;
82
+ name?: string;
83
+ nameKey?: string;
84
+ status?: AvatarProps["status"];
85
+ statusKey?: string;
86
+ width?: number | string;
87
+ height?: number | string;
88
+ rounded?: boolean;
89
+ /** Link presentation. */
90
+ href?: string;
91
+ hrefKey?: string;
92
+ target?: "_blank" | "_self" | "_parent" | "_top";
93
+ rel?: string;
94
+ /** Registered custom-element presentation. Native tags are intentionally rejected. */
95
+ tagName?: string;
96
+ properties?: UnknownProps;
97
+ propertyMap?: Record<string, string>;
98
+ attributes?: Record<string, unknown>;
99
+ attributeMap?: Record<string, string>;
100
+ text?: string;
101
+ textKey?: string;
102
+ events?: string[];
103
+ /** Optionally assign the complete row object to this property on the custom element. */
104
+ rowProperty?: string;
105
+ };
106
+ export type DataTableElementCellType = "text" | "chip" | "chips" | "badge" | "badges" | "image" | "avatar" | "link" | "custom-element" | "button" | "buttons" | "actions";
107
+ export type DataTableElementColumn = DataTableColumn<UnknownProps> & {
108
+ accessorPath?: string;
109
+ sortValueKey?: string;
110
+ cellType?: DataTableElementCellType;
111
+ cellConfig?: DataTableElementCellConfig;
112
+ action?: DataTableElementCellAction;
113
+ actions?: DataTableElementCellAction[];
114
+ actionsDisplay?: "inline" | "menu";
115
+ actionId?: string;
116
+ actionLabel?: string;
117
+ actionVariant?: ButtonProps["variant"];
118
+ actionSize?: ButtonProps["size"];
119
+ iconName?: string;
120
+ ariaLabel?: string;
121
+ };
5
122
  export type BfrsCustomElementRegistryOptions = {
6
123
  prefix?: string;
7
124
  };
@@ -14,6 +131,7 @@ declare abstract class ReactCustomElement extends HTMLElement {
14
131
  private hasCapturedInitialContent;
15
132
  private initialRenderQueued;
16
133
  private propertyProps;
134
+ private lightDomObserver;
17
135
  get props(): UnknownProps;
18
136
  set props(value: UnknownProps);
19
137
  connectedCallback(): void;
@@ -27,8 +145,13 @@ declare abstract class ReactCustomElement extends HTMLElement {
27
145
  protected colorSchemeAttribute(): BfrsColorScheme;
28
146
  protected slottedText(fallback?: string): string | undefined;
29
147
  protected htmlContent(fallback?: string): unknown;
148
+ protected hasSlot(name?: string): boolean;
149
+ protected slotNode(name?: string, fallback?: ReactNode): ReactNode;
150
+ protected defaultContentNode(fallback?: string): ReactNode;
30
151
  protected booleanAttribute(name: string, fallback?: boolean): boolean;
152
+ protected booleanValue(attributeName: string, propName: string, fallback?: boolean): boolean;
31
153
  protected numberAttribute(name: string): number | undefined;
154
+ protected numberValue(attributeName: string, propName: string): number | undefined;
32
155
  protected jsonAttribute<Value>(name: string, fallback: Value): Value;
33
156
  protected mergedProps(): {
34
157
  [x: string]: unknown;
@@ -38,6 +161,7 @@ declare abstract class ReactCustomElement extends HTMLElement {
38
161
  protected objectValue<Value extends UnknownProps>(name: string, fallback: Value): Value;
39
162
  protected emit(name: string, detail?: unknown): void;
40
163
  private applyDefaultDisplay;
164
+ private observeLightDom;
41
165
  private ensureMountNode;
42
166
  private scheduleInitialUpdate;
43
167
  private captureInitialContent;
@@ -53,6 +177,11 @@ export declare class BfrsButtonElement extends ReactCustomElement {
53
177
  static get observedAttributes(): string[];
54
178
  protected renderElement(): unknown;
55
179
  }
180
+ export declare class BfrsButtonGroupElement extends ReactCustomElement {
181
+ static readonly tagName = "button-group";
182
+ static get observedAttributes(): string[];
183
+ protected renderElement(): unknown;
184
+ }
56
185
  export declare class BfrsInputElement extends ReactCustomElement {
57
186
  static readonly tagName = "input";
58
187
  static get observedAttributes(): string[];
@@ -364,6 +493,21 @@ export declare class BfrsToastManagerElement extends ReactCustomElement {
364
493
  static get observedAttributes(): string[];
365
494
  protected renderElement(): unknown;
366
495
  }
496
+ export declare class BfrsToastProviderElement extends ReactCustomElement {
497
+ static readonly tagName = "toast-provider";
498
+ static get observedAttributes(): string[];
499
+ private toasts;
500
+ private idCounter;
501
+ protected defaultDisplay(): string;
502
+ toast(input: BfrsToastElementInput): string;
503
+ success(input: string | Omit<Exclude<BfrsToastElementInput, string>, "tone">): string;
504
+ warning(input: string | Omit<Exclude<BfrsToastElementInput, string>, "tone">): string;
505
+ danger(input: string | Omit<Exclude<BfrsToastElementInput, string>, "tone">): string;
506
+ info(input: string | Omit<Exclude<BfrsToastElementInput, string>, "tone">): string;
507
+ dismiss(id: string): void;
508
+ clear(): void;
509
+ protected renderElement(): unknown;
510
+ }
367
511
  export declare class BfrsModalElement extends OpenCustomElement {
368
512
  static readonly tagName = "modal";
369
513
  static get observedAttributes(): string[];
@@ -418,12 +562,60 @@ export declare class BfrsTablePaginationElement extends ReactCustomElement {
418
562
  protected defaultDisplay(): string;
419
563
  protected renderElement(): unknown;
420
564
  }
565
+ export declare class BfrsTableToolbarElement extends ReactCustomElement {
566
+ static readonly tagName = "table-toolbar";
567
+ static get observedAttributes(): string[];
568
+ protected defaultDisplay(): string;
569
+ protected renderElement(): unknown;
570
+ }
571
+ declare abstract class BfrsTableStateElement extends ReactCustomElement {
572
+ protected abstract stateComponent(): typeof TableEmptyState | typeof TableErrorState;
573
+ protected abstract defaultTitle(): string;
574
+ static get observedAttributes(): string[];
575
+ protected defaultDisplay(): string;
576
+ protected renderElement(): unknown;
577
+ }
578
+ export declare class BfrsTableEmptyStateElement extends BfrsTableStateElement {
579
+ static readonly tagName = "table-empty-state";
580
+ protected stateComponent(): typeof TableEmptyState;
581
+ protected defaultTitle(): string;
582
+ }
583
+ export declare class BfrsTableErrorStateElement extends BfrsTableStateElement {
584
+ static readonly tagName = "table-error-state";
585
+ protected stateComponent(): typeof TableErrorState;
586
+ protected defaultTitle(): string;
587
+ }
588
+ export declare class BfrsTableSkeletonElement extends ReactCustomElement {
589
+ static readonly tagName = "table-skeleton";
590
+ static get observedAttributes(): string[];
591
+ protected defaultDisplay(): string;
592
+ protected renderElement(): unknown;
593
+ }
594
+ export declare class BfrsTableRowActionsElement extends ReactCustomElement {
595
+ static readonly tagName = "table-row-actions";
596
+ static get observedAttributes(): string[];
597
+ protected renderElement(): unknown;
598
+ }
599
+ export declare class BfrsTableBulkActionsElement extends ReactCustomElement {
600
+ static readonly tagName = "table-bulk-actions";
601
+ static get observedAttributes(): string[];
602
+ protected defaultDisplay(): string;
603
+ protected renderElement(): unknown;
604
+ }
605
+ export declare class BfrsTableColumnVisibilityElement extends ReactCustomElement {
606
+ static readonly tagName = "table-column-visibility";
607
+ static get observedAttributes(): string[];
608
+ protected renderElement(): unknown;
609
+ }
421
610
  export declare class BfrsDataTableElement extends ReactCustomElement {
422
611
  static readonly tagName = "data-table";
423
612
  static get observedAttributes(): string[];
424
613
  protected defaultDisplay(): string;
425
614
  protected renderElement(): unknown;
426
615
  private normalizeColumn;
616
+ private cellConfigValue;
617
+ private renderCaptionedCell;
618
+ private renderRichCell;
427
619
  private dataTableRowId;
428
620
  private actionDisabled;
429
621
  private emitCellAction;
@@ -431,9 +623,29 @@ export declare class BfrsDataTableElement extends ReactCustomElement {
431
623
  private renderButtonGroupCell;
432
624
  private renderActionMenuCell;
433
625
  }
626
+ export declare class BfrsTabsListElement extends ReactCustomElement {
627
+ static readonly tagName = "tabs-list";
628
+ static get observedAttributes(): string[];
629
+ protected defaultDisplay(): string;
630
+ protected renderElement(): unknown;
631
+ }
632
+ export declare class BfrsTabsTriggerElement extends ReactCustomElement {
633
+ static readonly tagName = "tabs-trigger";
634
+ static get observedAttributes(): string[];
635
+ protected renderElement(): unknown;
636
+ }
637
+ export declare class BfrsTabsContentElement extends ReactCustomElement {
638
+ static readonly tagName = "tabs-content";
639
+ static get observedAttributes(): string[];
640
+ protected defaultDisplay(): string;
641
+ protected renderElement(): unknown;
642
+ }
434
643
  export declare class BfrsTabsElement extends ValueCustomElement {
435
644
  static readonly tagName = "tabs";
436
645
  static get observedAttributes(): string[];
646
+ private readonly handleTabSelect;
647
+ connectedCallback(): void;
648
+ disconnectedCallback(): void;
437
649
  protected renderElement(): unknown;
438
650
  }
439
651
  export declare class BfrsBreadcrumbsElement extends ReactCustomElement {
@@ -604,6 +816,7 @@ declare global {
604
816
  "bfrs-business-info-display-card": BfrsBusinessInfoDisplayCardElement;
605
817
  "bfrs-business-info-display-card-skeleton": BfrsBusinessInfoDisplayCardSkeletonElement;
606
818
  "bfrs-button": BfrsButtonElement;
819
+ "bfrs-button-group": BfrsButtonGroupElement;
607
820
  "bfrs-card": BfrsCardElement;
608
821
  "bfrs-card-content": BfrsCardContentElement;
609
822
  "bfrs-card-footer": BfrsCardFooterElement;
@@ -670,10 +883,21 @@ declare global {
670
883
  "bfrs-summary-bar": BfrsSummaryBarElement;
671
884
  "bfrs-switch": BfrsSwitchElement;
672
885
  "bfrs-table-pagination": BfrsTablePaginationElement;
886
+ "bfrs-table-toolbar": BfrsTableToolbarElement;
887
+ "bfrs-table-empty-state": BfrsTableEmptyStateElement;
888
+ "bfrs-table-error-state": BfrsTableErrorStateElement;
889
+ "bfrs-table-skeleton": BfrsTableSkeletonElement;
890
+ "bfrs-table-row-actions": BfrsTableRowActionsElement;
891
+ "bfrs-table-bulk-actions": BfrsTableBulkActionsElement;
892
+ "bfrs-table-column-visibility": BfrsTableColumnVisibilityElement;
673
893
  "bfrs-tabs": BfrsTabsElement;
894
+ "bfrs-tabs-list": BfrsTabsListElement;
895
+ "bfrs-tabs-trigger": BfrsTabsTriggerElement;
896
+ "bfrs-tabs-content": BfrsTabsContentElement;
674
897
  "bfrs-text": BfrsTextElement;
675
898
  "bfrs-textarea": BfrsTextareaElement;
676
899
  "bfrs-toast-manager": BfrsToastManagerElement;
900
+ "bfrs-toast-provider": BfrsToastProviderElement;
677
901
  "bfrs-tip": BfrsTipElement;
678
902
  "bfrs-tooltip": BfrsTooltipElement;
679
903
  "bfrs-workspace-header": BfrsWorkspaceHeaderElement;