@bitforgehq/ui 0.3.3 → 0.4.0

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.
Files changed (39) hide show
  1. package/CHANGELOG.md +91 -0
  2. package/README.md +4 -4
  3. package/ai/MANIFEST.index.json +36 -0
  4. package/ai/MANIFEST.json +414 -14
  5. package/ai/REFERENCE.index.json +35 -0
  6. package/ai/REFERENCE.json +184 -8
  7. package/ai/UI_GUIDE.md +25 -4
  8. package/ai/components/badge.md +39 -2
  9. package/ai/components/list-item.md +105 -9
  10. package/ai/components/step.md +112 -0
  11. package/ai/components/steps.md +124 -0
  12. package/ai/components/table.md +98 -2
  13. package/ai/components/timeline-event.md +144 -0
  14. package/ai/components/timeline.md +201 -0
  15. package/ai/components/toggle.md +11 -1
  16. package/ai/reference/bf-action-directive.md +3 -1
  17. package/ai/reference/bf-badge-emphasis.md +27 -0
  18. package/ai/reference/bf-labels.md +1 -0
  19. package/ai/reference/bf-step-heading-level.md +28 -0
  20. package/ai/reference/bf-table-align.md +1 -1
  21. package/ai/reference/bf-table-column-align.md +33 -0
  22. package/ai/reference/bf-table-column.md +7 -7
  23. package/ai/reference/bf-table-harness.md +12 -0
  24. package/ai/reference/bf-timeline-tone.md +31 -0
  25. package/ai/reference/bf-toggle-harness.md +55 -0
  26. package/ai/reference/provide-bf-labels.md +1 -1
  27. package/dark-ink.css +124 -0
  28. package/fesm2022/bitforgehq-ui-mobile.mjs +2 -1
  29. package/fesm2022/bitforgehq-ui-mobile.mjs.map +1 -1
  30. package/fesm2022/bitforgehq-ui-testing.mjs +51 -2
  31. package/fesm2022/bitforgehq-ui-testing.mjs.map +1 -1
  32. package/fesm2022/bitforgehq-ui.mjs +682 -32
  33. package/fesm2022/bitforgehq-ui.mjs.map +1 -1
  34. package/llms-full.txt +1072 -15
  35. package/llms.txt +9 -0
  36. package/package.json +2 -1
  37. package/theme.css +24 -0
  38. package/types/bitforgehq-ui-testing.d.ts +76 -1
  39. package/types/bitforgehq-ui.d.ts +288 -8
package/llms.txt CHANGED
@@ -69,7 +69,11 @@
69
69
  - [bf-progress](https://bitforge-ui.web.app/ai/components/progress.md): Progress bar in two sizes and four tones for completion, quotas and unknown waits ([docs](https://bitforge-ui.web.app/components/progress))
70
70
  - [bf-sparkline](https://bitforge-ui.web.app/ai/components/sparkline.md): Tiny trend line with no axes or legend, for stats and table cells ([docs](https://bitforge-ui.web.app/components/sparkline))
71
71
  - [bf-stat](https://bitforge-ui.web.app/ai/components/stat.md): One labelled figure with an optional icon tile and a supporting line ([docs](https://bitforge-ui.web.app/components/stat))
72
+ - [bf-step](https://bitforge-ui.web.app/ai/components/step.md): One numbered step of an instruction list, with a title and its details ([docs](https://bitforge-ui.web.app/components/step))
73
+ - [bf-steps](https://bitforge-ui.web.app/ai/components/steps.md): Numbered instruction steps a user follows in order, with joined markers ([docs](https://bitforge-ui.web.app/components/steps))
72
74
  - [bf-table](https://bitforge-ui.web.app/ai/components/table.md): Desktop data table with sortable headers, row selection, custom cells and an empty slot ([docs](https://bitforge-ui.web.app/components/table))
75
+ - [bf-timeline](https://bitforge-ui.web.app/ai/components/timeline.md): Dated list of events with who did what and when, on a vertical line ([docs](https://bitforge-ui.web.app/components/timeline))
76
+ - [bf-timeline-event](https://bitforge-ui.web.app/ai/components/timeline-event.md): One timeline event with a coloured marker, its text, actor and time ([docs](https://bitforge-ui.web.app/components/timeline-event))
73
77
 
74
78
  ### Feedback
75
79
 
@@ -151,6 +155,7 @@
151
155
  - [BfAvatarSize](https://bitforge-ui.web.app/ai/reference/bf-avatar-size.md): The three sizes of an avatar, from a list row to a profile header ([docs](https://bitforge-ui.web.app/api/bf-avatar-size))
152
156
  - [BfAvatarVariant](https://bitforge-ui.web.app/ai/reference/bf-avatar-variant.md): The four colour schemes of an avatar behind its initials or icon ([docs](https://bitforge-ui.web.app/api/bf-avatar-variant))
153
157
  - [BfBadgeAppearance](https://bitforge-ui.web.app/ai/reference/bf-badge-appearance.md): Every badge tone, the five variants plus the informational info tone ([docs](https://bitforge-ui.web.app/api/bf-badge-appearance))
158
+ - [BfBadgeEmphasis](https://bitforge-ui.web.app/ai/reference/bf-badge-emphasis.md): The two badge emphases, the soft tint or the solid strong fill ([docs](https://bitforge-ui.web.app/api/bf-badge-emphasis))
154
159
  - [BfBadgeVariant](https://bitforge-ui.web.app/ai/reference/bf-badge-variant.md): The five tones of a badge, from neutral counts to danger states ([docs](https://bitforge-ui.web.app/api/bf-badge-variant))
155
160
  - [BfButtonAppearance](https://bitforge-ui.web.app/ai/reference/bf-button-appearance.md): Every button style, the five variants plus the quiet neutral ghost ([docs](https://bitforge-ui.web.app/api/bf-button-appearance))
156
161
  - [BfButtonSize](https://bitforge-ui.web.app/ai/reference/bf-button-size.md): Former name of the shared size scale for buttons, kept until 1.0.0 ([docs](https://bitforge-ui.web.app/api/bf-button-size))
@@ -198,17 +203,20 @@
198
203
  - [BfStatTrend](https://bitforge-ui.web.app/ai/reference/bf-stat-trend.md): The three directions of a stat's delta pill, up, down or no change ([docs](https://bitforge-ui.web.app/api/bf-stat-trend))
199
204
  - [BfStatTrendIntent](https://bitforge-ui.web.app/ai/reference/bf-stat-trend-intent.md): Whether a rising or a falling figure is the good news for a stat ([docs](https://bitforge-ui.web.app/api/bf-stat-trend-intent))
200
205
  - [BfStatVariant](https://bitforge-ui.web.app/ai/reference/bf-stat-variant.md): The two stat surfaces, plain on its container or an outlined card tile ([docs](https://bitforge-ui.web.app/api/bf-stat-variant))
206
+ - [BfStepHeadingLevel](https://bitforge-ui.web.app/ai/reference/bf-step-heading-level.md): The heading level a step title can take, two, three or four ([docs](https://bitforge-ui.web.app/api/bf-step-heading-level))
201
207
  - [BfTabBarController](https://bitforge-ui.web.app/ai/reference/bf-tab-bar-controller.md): The state a parent that drives a projected tab bar gives it to derive from ([docs](https://bitforge-ui.web.app/api/bf-tab-bar-controller))
202
208
  - [BfTabBarHost](https://bitforge-ui.web.app/ai/reference/bf-tab-bar-host.md): What each tab reads from its tab bar: the selection, tab stop and link mode ([docs](https://bitforge-ui.web.app/api/bf-tab-bar-host))
203
209
  - [BfTableAlign](https://bitforge-ui.web.app/ai/reference/bf-table-align.md): The inline alignment of a table column, start for text or end for numbers ([docs](https://bitforge-ui.web.app/api/bf-table-align))
204
210
  - [BfTableCellContext](https://bitforge-ui.web.app/ai/reference/bf-table-cell-context.md): The row and its index that a custom table cell template receives ([docs](https://bitforge-ui.web.app/api/bf-table-cell-context))
205
211
  - [BfTableCellDirective](https://bitforge-ui.web.app/ai/reference/bf-table-cell-directive.md): Custom template for the cells of one table column, with the row typed ([docs](https://bitforge-ui.web.app/api/bf-table-cell-directive))
206
212
  - [BfTableColumn](https://bitforge-ui.web.app/ai/reference/bf-table-column.md): One table column with its row key, header label, sorting and alignment ([docs](https://bitforge-ui.web.app/api/bf-table-column))
213
+ - [BfTableColumnAlign](https://bitforge-ui.web.app/ai/reference/bf-table-column-align.md): The inline alignment of a table column: start, end, or centred for controls ([docs](https://bitforge-ui.web.app/api/bf-table-column-align))
207
214
  - [BfTableRowKey](https://bitforge-ui.web.app/ai/reference/bf-table-row-key.md): Function that returns the unique string key of one table row ([docs](https://bitforge-ui.web.app/api/bf-table-row-key))
208
215
  - [BfTableSort](https://bitforge-ui.web.app/ai/reference/bf-table-sort.md): The column key and direction a table is sorted by, set by its headers ([docs](https://bitforge-ui.web.app/api/bf-table-sort))
209
216
  - [BfTableSortDirection](https://bitforge-ui.web.app/ai/reference/bf-table-sort-direction.md): The direction a sorted table column is in, ascending or descending ([docs](https://bitforge-ui.web.app/api/bf-table-sort-direction))
210
217
  - [BfTableStack](https://bitforge-ui.web.app/ai/reference/bf-table-stack.md): When a table stacks its rows into cards: never, when narrow, or under touch ([docs](https://bitforge-ui.web.app/api/bf-table-stack))
211
218
  - [BfTabLinks](https://bitforge-ui.web.app/ai/reference/bf-tab-links.md): The URLs a router-aware parent gives a tab bar to render its tabs as links ([docs](https://bitforge-ui.web.app/api/bf-tab-links))
219
+ - [BfTimelineTone](https://bitforge-ui.web.app/ai/reference/bf-timeline-tone.md): The marker colour of a timeline event, neutral, primary or a status ([docs](https://bitforge-ui.web.app/api/bf-timeline-tone))
212
220
  - [BfToggleLabelPosition](https://bitforge-ui.web.app/ai/reference/bf-toggle-label-position.md): Whether a toggle's label sits after or before its switch ([docs](https://bitforge-ui.web.app/api/bf-toggle-label-position))
213
221
  - [bfValidationMessage](https://bitforge-ui.web.app/ai/reference/bf-validation-message.md): Turns one validation error into the text a form field shows under it ([docs](https://bitforge-ui.web.app/api/bf-validation-message))
214
222
  - [BfValidationMessages](https://bitforge-ui.web.app/ai/reference/bf-validation-messages.md): The default error text of each validator kind, shown under a form field ([docs](https://bitforge-ui.web.app/api/bf-validation-messages))
@@ -425,6 +433,7 @@
425
433
  - [BfTableHarness](https://bitforge-ui.web.app/ai/reference/bf-table-harness.md): Test harness for the data table: reads rows and cells, sorts and selects rows ([docs](https://bitforge-ui.web.app/api/bf-table-harness))
426
434
  - [BfTestingOptions](https://bitforge-ui.web.app/ai/reference/bf-testing-options.md): Options of the test providers: the size defaults and labels a spec runs with ([docs](https://bitforge-ui.web.app/api/bf-testing-options))
427
435
  - [BfTimeInputHarness](https://bitforge-ui.web.app/ai/reference/bf-time-input-harness.md): Test harness for the time input: types a time or picks one from its list ([docs](https://bitforge-ui.web.app/api/bf-time-input-harness))
436
+ - [BfToggleHarness](https://bitforge-ui.web.app/ai/reference/bf-toggle-harness.md): Test harness for the toggle: reads its name and state and switches it ([docs](https://bitforge-ui.web.app/api/bf-toggle-harness))
428
437
  - [BfTooltipHarness](https://bitforge-ui.web.app/ai/reference/bf-tooltip-harness.md): Test harness for a tooltip: shows it, reads its text and whether it shows ([docs](https://bitforge-ui.web.app/api/bf-tooltip-harness))
429
438
  - [installBfJsdomShims](https://bitforge-ui.web.app/ai/reference/install-bf-jsdom-shims.md): Installs the browser APIs jsdom lacks and the library needs, only where missing ([docs](https://bitforge-ui.web.app/api/install-bf-jsdom-shims))
430
439
  - [provideBfTesting](https://bitforge-ui.web.app/ai/reference/provide-bf-testing.md): Test providers for the widgets and overlays, with document cleanup after each test ([docs](https://bitforge-ui.web.app/api/provide-bf-testing))
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitforgehq/ui",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
4
4
  "description": "Bitforge UI: Angular 22 widgets (Meadow Sage palette with an indigo default primary to override, Tailwind v4, signals-first) and, from v0.2, a Capacitor app shell.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -56,6 +56,7 @@
56
56
  "sideEffects": false,
57
57
  "exports": {
58
58
  "./theme.css": "./theme.css",
59
+ "./dark-ink.css": "./dark-ink.css",
59
60
  "./ai/*": "./ai/*",
60
61
  "./llms.txt": "./llms.txt",
61
62
  "./llms-full.txt": "./llms-full.txt",
package/theme.css CHANGED
@@ -98,6 +98,18 @@
98
98
  --color-neutral-soft: #efece3;
99
99
  --color-info: #0f4c6b; /* informational badge: 7.7:1 on info-soft */
100
100
  --color-info-soft: #dcecf5;
101
+ /* Strong status fills (badge emphasis="strong"): the family's deep tone, white text >= 6:1,
102
+ the fill >= 3:1 on bg, surface and surface-sunken. Primary's strong fill is primary itself. */
103
+ --color-neutral-strong: #4a5347;
104
+ --color-on-neutral-strong: #ffffff; /* 8.0:1 */
105
+ --color-success-strong: #1f6b43;
106
+ --color-on-success-strong: #ffffff; /* 6.5:1 */
107
+ --color-warning-strong: #8a520f;
108
+ --color-on-warning-strong: #ffffff; /* 6.4:1 */
109
+ --color-danger-strong: #b3261e;
110
+ --color-on-danger-strong: #ffffff; /* 6.5:1 */
111
+ --color-info-strong: #0f5a80;
112
+ --color-on-info-strong: #ffffff; /* 7.5:1 */
101
113
 
102
114
  /* Tooltip: a dark pill in light mode, inverted (light) in dark mode */
103
115
  --color-tooltip: #1f2a22;
@@ -301,6 +313,18 @@
301
313
  --color-danger-border: #d3563f;
302
314
  --color-info: #7cc4ea; /* 7.2:1 on info-soft */
303
315
  --color-info-soft: #14303e;
316
+ /* Strong fills: a saturated mid tone (>= 3:1 on bg, surface and surface-sunken); white text on
317
+ the deep ones, dark text on the light neutral and amber ones. */
318
+ --color-neutral-strong: #9a9da5;
319
+ --color-on-neutral-strong: #111214; /* 6.9:1 */
320
+ --color-success-strong: #26804f;
321
+ --color-on-success-strong: #ffffff; /* 4.9:1 */
322
+ --color-warning-strong: #d99a3c;
323
+ --color-on-warning-strong: #1a1206; /* 7.6:1 */
324
+ --color-danger-strong: #c9372c;
325
+ --color-on-danger-strong: #ffffff; /* 5.2:1 */
326
+ --color-info-strong: #2a7aa8;
327
+ --color-on-info-strong: #ffffff; /* 4.7:1 */
304
328
  --color-tooltip: #ececee;
305
329
  --color-on-tooltip: #1e2024; /* 13.8:1 on tooltip */
306
330
 
@@ -1,6 +1,6 @@
1
1
  import { EnvironmentProviders } from "@angular/core";
2
2
  import { BfTableSort, provideBfDefaults, provideBfLabels } from "@bitforgehq/ui";
3
- import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, LocatorFactory } from "@angular/cdk/testing";
3
+ import { BaseHarnessFilters, ComponentHarness, HarnessPredicate, HarnessQuery, LocatorFactory } from "@angular/cdk/testing";
4
4
  /**
5
5
  * Options of `installBfJsdomShims()`.
6
6
  *
@@ -541,6 +541,21 @@ export declare class BfTableHarness extends ComponentHarness {
541
541
  * @returns The cell's text.
542
542
  */
543
543
  getCellText(row: number, column: string): Promise<string>;
544
+ /**
545
+ * A harness for a control in one cell, such as a `bf-toggle` of a settings matrix or a
546
+ * `bf-select` in a custom cell. Throws for an unknown row or column, or when the cell holds no
547
+ * matching control.
548
+ *
549
+ * @example
550
+ * const push = await alerts.getCellHarness(0, 'Push', BfToggleHarness);
551
+ * await push.check();
552
+ * @param row The row's position, from 0.
553
+ * @param column The column's header text.
554
+ * @param query The harness type, or a predicate from its `with()`.
555
+ * @returns The first matching harness in the cell.
556
+ * @since 0.4.0
557
+ */
558
+ getCellHarness<T extends ComponentHarness>(row: number, column: string, query: HarnessQuery<T>): Promise<T>;
544
559
  /**
545
560
  * Clicks a sortable column's header, as a user would: ascending first, then descending.
546
561
  * Throws for an unknown or unsortable column.
@@ -1287,4 +1302,64 @@ export declare class BfSidebarToggleHarness extends ComponentHarness {
1287
1302
  /** Flips the sidebar with a click. */
1288
1303
  toggle(): Promise<void>;
1289
1304
  }
1305
+ /**
1306
+ * Harness for `bf-toggle`. Its `label` filter matches the switch's name: the text of the elements
1307
+ * `ariaLabelledby` names, else `ariaLabel`, else the visible label, so a label-less switch in a
1308
+ * table cell or a list row is found the same way.
1309
+ *
1310
+ * @example
1311
+ * const email = await loader.getHarness(BfToggleHarness.with({ label: 'E-Mail, Kritisch' }));
1312
+ * await email.check();
1313
+ * expect(await email.isChecked()).toBe(true);
1314
+ * @summary Test harness for the toggle: reads its name and state and switches it
1315
+ * @since 0.4.0
1316
+ */
1317
+ export declare class BfToggleHarness extends ComponentHarness {
1318
+ /** The host element's selector. */
1319
+ static hostSelector: string;
1320
+ private readonly input;
1321
+ private readonly label;
1322
+ private readonly error;
1323
+ /**
1324
+ * A predicate for a toggle with the given name.
1325
+ * @param filters The name (text or pattern) and the CDK's selector and ancestor filters.
1326
+ * @returns The predicate for `getHarness()` and friends.
1327
+ */
1328
+ static with(filters?: BfHarnessFilters): HarnessPredicate<BfToggleHarness>;
1329
+ /**
1330
+ * The switch's name, as the browser computes it: the text of the elements `ariaLabelledby`
1331
+ * names, else `ariaLabel`, else the visible label (the `label` text and the default slot).
1332
+ * @returns The name, `''` without one.
1333
+ */
1334
+ getLabel(): Promise<string>;
1335
+ /**
1336
+ * Whether the switch is on.
1337
+ * @returns True when on.
1338
+ */
1339
+ isChecked(): Promise<boolean>;
1340
+ /**
1341
+ * Whether the switch is disabled.
1342
+ * @returns True when disabled.
1343
+ */
1344
+ isDisabled(): Promise<boolean>;
1345
+ /**
1346
+ * Whether the switch is read-only (`aria-readonly`): it shows its state but a click does nothing.
1347
+ * @returns True when read-only.
1348
+ */
1349
+ isReadonly(): Promise<boolean>;
1350
+ /**
1351
+ * Clicks the switch, as a user would, so it turns on or off. Throws while it is disabled (a
1352
+ * user's click would do nothing); a read-only switch takes the click and stays as it is.
1353
+ */
1354
+ toggle(): Promise<void>;
1355
+ /** Turns the switch on with a click; an on switch stays on. Throws while it is disabled. */
1356
+ check(): Promise<void>;
1357
+ /** Turns the switch off with a click; an off switch stays off. Throws while it is disabled. */
1358
+ uncheck(): Promise<void>;
1359
+ /**
1360
+ * The error text under the switch.
1361
+ * @returns The error text, `''` when there is none.
1362
+ */
1363
+ getErrorText(): Promise<string>;
1364
+ }
1290
1365
  export type { BfHarnessFilters, BfJsdomShimOptions, BfTestingOptions };
@@ -512,6 +512,11 @@ interface BfLabels {
512
512
  * @default 'The data could not be loaded'
513
513
  */
514
514
  readonly chartError: string;
515
+ /**
516
+ * bf-list-item's visually hidden state text before the title of an `unread` row.
517
+ * @default 'Unread'
518
+ */
519
+ readonly listItemUnread: string;
515
520
  /** Default error text per validator kind (see `BfValidationMessages`). */
516
521
  readonly validation: BfValidationMessages;
517
522
  }
@@ -552,7 +557,7 @@ export declare const BF_LABELS: InjectionToken<BfLabels>;
552
557
  * `dateInputUnavailable`, `timeInputHour`, `timeInputMinute`, `timeInputSecond`,
553
558
  * `timeInputDayPeriod`, `timeInputOpenList`, `timeInputInvalid`, `timeInputMin`, `timeInputMax`,
554
559
  * `chart`, `chartLegend`, `chartValues`, `chartShowData`, `chartHideData`, `chartCategory`,
555
- * `chartValue`, `chartEmpty`, `chartError`, `validation`); the overlay services (`ok`, `cancel`,
560
+ * `chartValue`, `chartEmpty`, `chartError`, `listItemUnread`, `validation`); the overlay services (`ok`, `cancel`,
556
561
  * `actions`, `sheet`, `modal`, `close`, `expand`, `collapse`, `sheetPosition`, `dialog`,
557
562
  * `notifications`) are root singletons and pick it up only when the caller passes its injector:
558
563
  * `open(…, { injector: inject(Injector) })`.
@@ -1012,11 +1017,20 @@ type BfBadgeVariant = 'neutral' | 'primary' | 'success' | 'warning' | 'danger';
1012
1017
  * @since 0.3.1
1013
1018
  */
1014
1019
  type BfBadgeAppearance = BfBadgeVariant | 'info';
1020
+ /**
1021
+ * How loud a `bf-badge` is: `soft`, a pale tint with tinted text (the default), or `strong`, a
1022
+ * solid fill with contrasting text for the one state that must stand out, such as "Critical".
1023
+ *
1024
+ * @summary The two badge emphases, the soft tint or the solid strong fill
1025
+ * @since 0.4.0
1026
+ */
1027
+ type BfBadgeEmphasis = 'soft' | 'strong';
1015
1028
  /**
1016
1029
  * Status label ("On track", "At risk") or, with `count`, a compact numeric pill for unread counts.
1017
1030
  *
1018
1031
  * @example
1019
1032
  * <bf-badge variant="warning">At risk</bf-badge>
1033
+ * <bf-badge variant="danger" emphasis="strong">Critical</bf-badge>
1020
1034
  * <bf-badge [count]="unread()" countLabel="unread messages" />
1021
1035
  * @summary Small status label in semantic tones, or a compact numeric pill for counts
1022
1036
  * @category Data display
@@ -1024,9 +1038,12 @@ type BfBadgeAppearance = BfBadgeVariant | 'info';
1024
1038
  * @slot default The badge text, shown when no `count` is set.
1025
1039
  */
1026
1040
  export declare class BfBadgeComponent {
1027
- /** Tint for the label style: neutral, primary, success, warning, danger or info. Ignored when
1028
- * `count` is set. */
1041
+ /** Tint for the label style: neutral, primary, success, warning, danger or info. Ignored by a
1042
+ * soft count pill; a strong one takes its fill from it. */
1029
1043
  readonly variant: import("@angular/core").InputSignal<BfBadgeAppearance>;
1044
+ /** `soft` (a pale tint, the default) or `strong` (a solid fill with contrasting text, also for
1045
+ * the count pill). */
1046
+ readonly emphasis: import("@angular/core").InputSignal<BfBadgeEmphasis>;
1030
1047
  /** Switches to the count pill; values above 99 render as "99+". */
1031
1048
  readonly count: import("@angular/core").InputSignal<number | undefined>;
1032
1049
  /** What the count counts ("unread messages"), read by assistive tech after the number ("99+
@@ -1034,7 +1051,7 @@ export declare class BfBadgeComponent {
1034
1051
  readonly countLabel: import("@angular/core").InputSignal<string>;
1035
1052
  readonly classes: import("@angular/core").Signal<string>;
1036
1053
  readonly countText: import("@angular/core").Signal<string | null>;
1037
- readonly countClasses = "inline-flex h-box min-w-box items-center justify-center rounded-control bg-primary px-1.75 text-micro font-bold leading-none text-on-primary";
1054
+ readonly countClasses: import("@angular/core").Signal<string>;
1038
1055
  static ɵfac: i0.ɵɵFactoryDeclaration<BfBadgeComponent, never>;
1039
1056
  static ɵcmp: i0.ɵɵComponentDeclaration<BfBadgeComponent, "bf-badge", never, {
1040
1057
  "variant": {
@@ -1042,6 +1059,11 @@ export declare class BfBadgeComponent {
1042
1059
  "required": false;
1043
1060
  "isSignal": true;
1044
1061
  };
1062
+ "emphasis": {
1063
+ "alias": "emphasis";
1064
+ "required": false;
1065
+ "isSignal": true;
1066
+ };
1045
1067
  "count": {
1046
1068
  "alias": "count";
1047
1069
  "required": false;
@@ -3173,12 +3195,18 @@ interface BfActionHost {
3173
3195
  registerAction(): () => void;
3174
3196
  /** Whether the surface's action has keyboard focus (`:focus-visible`), for the focus ring. */
3175
3197
  setActionFocusVisible(visible: boolean): void;
3198
+ /**
3199
+ * The id of an element whose text starts the action's accessible name (a list row's visually
3200
+ * hidden "Unread"), or `null`; the action then names itself `aria-labelledby="<id> <own id>"`.
3201
+ */
3202
+ readonly actionLabelPrefix?: Signal<string | null>;
3176
3203
  }
3177
3204
  declare const BF_ACTION_HOST: InjectionToken<BfActionHost>;
3178
3205
  /**
3179
3206
  * One row of a list: leading slot (avatar, icon tile), title and subtitle, trailing slot
3180
3207
  * (time, toggle, badge) and an optional chevron for rows that navigate. A navigation row puts a
3181
3208
  * `bfAction` link in the `title` slot, so the row stays a list item and the link covers it.
3209
+ * `unread` marks a row not yet opened with a dot and a bolder title.
3182
3210
  *
3183
3211
  * @example
3184
3212
  * <bf-list-item subtitle="lena@studio.ch" chevron>
@@ -3210,13 +3238,26 @@ export declare class BfListItemComponent implements BfActionHost {
3210
3238
  * default they wrap, so nothing is lost at large text sizes.
3211
3239
  */
3212
3240
  readonly truncate: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3241
+ /** Mark the row as not yet opened: a dot at the inline start, a bolder title and a visually
3242
+ * hidden state (the `listItemUnread` label) read before the title. */
3243
+ readonly unread: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
3213
3244
  /** Emitted when an interactive row is activated. */
3214
3245
  readonly clicked: import("@angular/core").OutputEmitterRef<Event>;
3215
3246
  /** `listitem` inside a `bf-list`, else no role. */
3216
3247
  protected readonly role: string | null;
3248
+ protected readonly labels: import("@bitforgehq/ui").BfLabels;
3249
+ protected readonly unreadDot = "absolute -start-2.5 mt-[7px] size-1.5 rounded-full bg-primary forced-colors:bg-[CanvasText]";
3217
3250
  private readonly actions;
3218
3251
  private readonly actionFocusVisible;
3219
3252
  private readonly actionState;
3253
+ protected readonly hasAction: import("@angular/core").Signal<boolean>;
3254
+ private unreadIdValue;
3255
+ /** The id of the unread state text, while `unread` is set. */
3256
+ protected readonly unreadId: import("@angular/core").Signal<string | null>;
3257
+ /** @internal The unread state starts the name of the row's `bfAction`. */
3258
+ readonly actionLabelPrefix: import("@angular/core").Signal<string | null>;
3259
+ /** The title weight: bolder on an unread row. */
3260
+ protected readonly titleWeight: import("@angular/core").Signal<"font-extrabold" | "font-bold">;
3220
3261
  /** Wrap or truncate classes of the title, the title slot and the subtitle. */
3221
3262
  protected readonly textClasses: import("@angular/core").Signal<string>;
3222
3263
  readonly classes: import("@angular/core").Signal<string>;
@@ -3256,6 +3297,11 @@ export declare class BfListItemComponent implements BfActionHost {
3256
3297
  "required": false;
3257
3298
  "isSignal": true;
3258
3299
  };
3300
+ "unread": {
3301
+ "alias": "unread";
3302
+ "required": false;
3303
+ "isSignal": true;
3304
+ };
3259
3305
  }, {
3260
3306
  "clicked": "clicked";
3261
3307
  }, never, ["[bfSlot=leading]", "[bfSlot=title]", "*", "[bfSlot=trailing]"], true, never>;
@@ -3982,7 +4028,9 @@ export declare class BfTabBarComponent implements BfTabBarHost {
3982
4028
  * with the nearest card or row, which then draws the pointer, the hover and, while the action has
3983
4029
  * keyboard focus, the focus ring; a card is never lit by the actions of rows nested in it. Give
3984
4030
  * secondary controls inside the surface `class="relative z-1"` so they stay clickable above the
3985
- * stretched area.
4031
+ * stretched area. When the surface marks a state that belongs in the name (an `unread` list
4032
+ * row), the directive names the element `aria-labelledby="<state id> <own id>"`, so the link reads
4033
+ * "Unread, Account", and restores the element's own `aria-labelledby` when the state goes.
3986
4034
  *
3987
4035
  * @example
3988
4036
  * <bf-card>
@@ -4343,6 +4391,15 @@ export declare class BfTableCellDirective<T = unknown> {
4343
4391
  * @since 0.3.1
4344
4392
  */
4345
4393
  type BfTableAlign = 'start' | 'end';
4394
+ /**
4395
+ * Where a `bf-table` column lines up its header and cells: a `BfTableAlign`, or `center` for a
4396
+ * column of controls such as the toggles of a settings matrix. A new type, so `Record`s over the
4397
+ * released `BfTableAlign` keep compiling.
4398
+ *
4399
+ * @summary The inline alignment of a table column: start, end, or centred for controls
4400
+ * @since 0.4.0
4401
+ */
4402
+ type BfTableColumnAlign = BfTableAlign | 'center';
4346
4403
  /**
4347
4404
  * The direction of a sorted `bf-table` column, as `aria-sort` names it.
4348
4405
  *
@@ -4376,10 +4433,11 @@ interface BfTableColumn {
4376
4433
  */
4377
4434
  sortable?: boolean;
4378
4435
  /**
4379
- * The inline alignment of the header and cells; `end` also sets tabular figures.
4436
+ * The inline alignment of the header and cells; `end` also sets tabular figures, `center`
4437
+ * centres a cell's control (a toggle, a checkbox) in the column.
4380
4438
  * @default 'start'
4381
4439
  */
4382
- align?: BfTableAlign;
4440
+ align?: BfTableColumnAlign;
4383
4441
  }
4384
4442
  /**
4385
4443
  * The column a `bf-table` is sorted by and the direction; the consumer sorts the rows.
@@ -4790,6 +4848,132 @@ export declare class BfStatComponent {
4790
4848
  };
4791
4849
  }, {}, never, ["[bfSlot=icon]", "*"], true, never>;
4792
4850
  }
4851
+ /** The default format of an event's time: a medium date and a short time (12 Oct 2026, 14:30). */
4852
+ declare const TIMELINE_TIME_FORMAT: Intl.DateTimeFormatOptions;
4853
+ /** What a `bf-timeline-event` reads from its `bf-timeline`. */
4854
+ interface BfTimelineHost {
4855
+ /** The `Intl.DateTimeFormat` options of the events' times. */
4856
+ readonly timeFormat: Signal<Intl.DateTimeFormatOptions>;
4857
+ /** The locale of the events' times, `''` for the app's `LOCALE_ID`. */
4858
+ readonly locale: Signal<string>;
4859
+ }
4860
+ /**
4861
+ * Provided by `bf-timeline` so each `bf-timeline-event` claims `role="listitem"` and formats its
4862
+ * time with the timeline's options, without `timeline-event.component.ts` importing
4863
+ * `timeline.component.ts`.
4864
+ */
4865
+ declare const BF_TIMELINE: InjectionToken<BfTimelineHost>;
4866
+ /**
4867
+ * A dated history of events, newest first or oldest first as the consumer orders them: who did
4868
+ * what and when, each event a `bf-timeline-event` with a marker on a vertical line.
4869
+ *
4870
+ * @example
4871
+ * <bf-timeline label="History">
4872
+ * <bf-timeline-event actor="Lena Meier" time="2026-10-28T14:30:00Z" tone="success">
4873
+ * Marked the finding as fixed
4874
+ * </bf-timeline-event>
4875
+ * </bf-timeline>
4876
+ * @summary Dated list of events with who did what and when, on a vertical line
4877
+ * @category Data display
4878
+ * @since 0.4.0
4879
+ * @slot default The events, each a `bf-timeline-event`, in the order to show them.
4880
+ */
4881
+ export declare class BfTimelineComponent implements BfTimelineHost {
4882
+ /** The list's accessible name, such as "History"; empty leaves the list unnamed (a visible
4883
+ * heading above it already names the section). */
4884
+ readonly label: import("@angular/core").InputSignal<string>;
4885
+ /** `Intl.DateTimeFormat` options of every event's time; by default a medium date and a short
4886
+ * time (`dateStyle: 'medium'`, `timeStyle: 'short'`). */
4887
+ readonly timeFormat: import("@angular/core").InputSignal<Intl.DateTimeFormatOptions>;
4888
+ /** BCP 47 locale of the times, such as `de-CH`; empty follows the app's `LOCALE_ID`. */
4889
+ readonly locale: import("@angular/core").InputSignal<string>;
4890
+ static ɵfac: i0.ɵɵFactoryDeclaration<BfTimelineComponent, never>;
4891
+ static ɵcmp: i0.ɵɵComponentDeclaration<BfTimelineComponent, "bf-timeline", never, {
4892
+ "label": {
4893
+ "alias": "label";
4894
+ "required": false;
4895
+ "isSignal": true;
4896
+ };
4897
+ "timeFormat": {
4898
+ "alias": "timeFormat";
4899
+ "required": false;
4900
+ "isSignal": true;
4901
+ };
4902
+ "locale": {
4903
+ "alias": "locale";
4904
+ "required": false;
4905
+ "isSignal": true;
4906
+ };
4907
+ }, {}, never, ["*"], true, never>;
4908
+ }
4909
+ /**
4910
+ * The colour of a `bf-timeline-event`'s marker: `neutral` (the default), `primary`, or a status
4911
+ * (`success`, `warning`, `danger`, `info`), such as danger for a failed CI run.
4912
+ *
4913
+ * @summary The marker colour of a timeline event, neutral, primary or a status
4914
+ * @since 0.4.0
4915
+ */
4916
+ type BfTimelineTone = 'neutral' | 'primary' | 'success' | 'warning' | 'danger' | 'info';
4917
+ /**
4918
+ * One event of a `bf-timeline`: a marker coloured by `tone`, the event text (the default slot,
4919
+ * which may hold links), then who did it (`actor`) and when (`time`, in a `time` element).
4920
+ *
4921
+ * @example
4922
+ * <bf-timeline-event actor="CI" time="2026-10-28T09:12:00Z" tone="danger">
4923
+ * CI failed on <a href="/pulls/123">PR #123</a>
4924
+ * </bf-timeline-event>
4925
+ * @summary One timeline event with a coloured marker, its text, actor and time
4926
+ * @category Data display
4927
+ * @since 0.4.0
4928
+ * @slot default The event text; links in it take the link style.
4929
+ * @slot end Content at the inline end on a wide timeline and below the text on a narrow one, such as a button.
4930
+ */
4931
+ export declare class BfTimelineEventComponent {
4932
+ /** Who did it, such as a person or a bot; empty for a system event. */
4933
+ readonly actor: import("@angular/core").InputSignal<string>;
4934
+ /** When it happened: a Date or an ISO 8601 string; empty or invalid shows no time. */
4935
+ readonly time: import("@angular/core").InputSignal<string | Date | null>;
4936
+ /** Shown in place of the formatted time, such as "vor 2 Std."; the `time` element's `datetime`
4937
+ * keeps the exact value. */
4938
+ readonly timeText: import("@angular/core").InputSignal<string>;
4939
+ /** The marker's colour. */
4940
+ readonly tone: import("@angular/core").InputSignal<BfTimelineTone>;
4941
+ private readonly timeline;
4942
+ private readonly appLocale;
4943
+ /** `listitem` inside a `bf-timeline`, else no role. */
4944
+ protected readonly role: string | null;
4945
+ private readonly date;
4946
+ /** The `time` element's machine value: the ISO string as given, a Date's ISO string, else null. */
4947
+ protected readonly datetime: import("@angular/core").Signal<string | null>;
4948
+ /** The visible time: `timeText`, else the date formatted with the timeline's options. */
4949
+ protected readonly timeLabel: import("@angular/core").Signal<string>;
4950
+ protected readonly markerClasses: string;
4951
+ protected readonly textClasses: string;
4952
+ readonly dotClasses: import("@angular/core").Signal<string>;
4953
+ static ɵfac: i0.ɵɵFactoryDeclaration<BfTimelineEventComponent, never>;
4954
+ static ɵcmp: i0.ɵɵComponentDeclaration<BfTimelineEventComponent, "bf-timeline-event", never, {
4955
+ "actor": {
4956
+ "alias": "actor";
4957
+ "required": false;
4958
+ "isSignal": true;
4959
+ };
4960
+ "time": {
4961
+ "alias": "time";
4962
+ "required": false;
4963
+ "isSignal": true;
4964
+ };
4965
+ "timeText": {
4966
+ "alias": "timeText";
4967
+ "required": false;
4968
+ "isSignal": true;
4969
+ };
4970
+ "tone": {
4971
+ "alias": "tone";
4972
+ "required": false;
4973
+ "isSignal": true;
4974
+ };
4975
+ }, {}, never, ["*", "[bfSlot=end]"], true, never>;
4976
+ }
4793
4977
  /**
4794
4978
  * What a `li[bfBreadcrumbItem]` reads from its enclosing `bf-breadcrumb`, provided through an
4795
4979
  * injection token so `breadcrumb.component.ts` and `breadcrumb-item.component.ts` never import each
@@ -5734,6 +5918,102 @@ export declare class BfCalendarComponent implements FormValueControl<string | nu
5734
5918
  "touch": "touch";
5735
5919
  }, never, never, true, never>;
5736
5920
  }
5921
+ /**
5922
+ * Provided by `bf-steps` so each `bf-step` knows its number and may claim `role="listitem"`,
5923
+ * without `step.component.ts` importing `steps.component.ts`.
5924
+ */
5925
+ interface BfStepsHost {
5926
+ /** The number of the first step. */
5927
+ readonly start: Signal<number>;
5928
+ /** How many steps the list holds. */
5929
+ readonly count: Signal<number>;
5930
+ /** The zero-based position of a step among the list's steps, or -1. */
5931
+ indexOf(step: object): number;
5932
+ }
5933
+ declare const BF_STEPS: InjectionToken<BfStepsHost>;
5934
+ /**
5935
+ * Numbered instructions a user follows in order, such as setting up an app on a phone: an
5936
+ * ordered list of `bf-step` items, each with a numbered marker joined to the next by a line.
5937
+ *
5938
+ * @example
5939
+ * <bf-steps>
5940
+ * <bf-step title="Install the app">Download it from the App Store or Google Play.</bf-step>
5941
+ * <bf-step title="Sign in">Use your work email address.</bf-step>
5942
+ * <bf-step title="Turn on notifications">Allow them when the app asks.</bf-step>
5943
+ * </bf-steps>
5944
+ * @summary Numbered instruction steps a user follows in order, with joined markers
5945
+ * @category Data display
5946
+ * @since 0.4.0
5947
+ * @slot default The steps, each a `bf-step`.
5948
+ */
5949
+ export declare class BfStepsComponent implements BfStepsHost {
5950
+ /** The number of the first step, for a list continued from an earlier one. */
5951
+ readonly start: import("@angular/core").InputSignalWithTransform<number, unknown>;
5952
+ private readonly steps;
5953
+ /** @internal How many steps the list holds. */
5954
+ readonly count: import("@angular/core").Signal<number>;
5955
+ /** @internal The zero-based position of a step, read by the step for its number. */
5956
+ indexOf(step: object): number;
5957
+ static ɵfac: i0.ɵɵFactoryDeclaration<BfStepsComponent, never>;
5958
+ static ɵcmp: i0.ɵɵComponentDeclaration<BfStepsComponent, "bf-steps", never, {
5959
+ "start": {
5960
+ "alias": "start";
5961
+ "required": false;
5962
+ "isSignal": true;
5963
+ };
5964
+ }, {}, ["steps"], ["*"], true, never>;
5965
+ }
5966
+ /**
5967
+ * The heading level of a `bf-step` title, for a guide whose steps hold enough content (screenshots,
5968
+ * code) that a screen-reader user moves between them by heading.
5969
+ *
5970
+ * @summary The heading level a step title can take, two, three or four
5971
+ * @since 0.4.0
5972
+ */
5973
+ type BfStepHeadingLevel = 2 | 3 | 4;
5974
+ /**
5975
+ * One step of a `bf-steps` list: a numbered marker, a short instruction as its title and the
5976
+ * step's details in the content.
5977
+ *
5978
+ * @example
5979
+ * <bf-steps>
5980
+ * <bf-step title="Install the app">Download it from the App Store or Google Play.</bf-step>
5981
+ * <bf-step title="Sign in">Use your work email address.</bf-step>
5982
+ * </bf-steps>
5983
+ * @summary One numbered step of an instruction list, with a title and its details
5984
+ * @category Data display
5985
+ * @since 0.4.0
5986
+ * @slot default The step's details: text, a code snippet, an image or a button.
5987
+ */
5988
+ export declare class BfStepComponent {
5989
+ private readonly steps;
5990
+ /** The step's short instruction ("Install the app"), shown next to the number. */
5991
+ readonly title: import("@angular/core").InputSignal<string>;
5992
+ /** Renders the title as a heading of this level instead of text; leave it off for short steps. */
5993
+ readonly headingLevel: import("@angular/core").InputSignal<BfStepHeadingLevel | undefined>;
5994
+ /** `listitem` inside a `bf-steps`, else no role. */
5995
+ protected readonly role: string | null;
5996
+ protected readonly markerClasses = "flex size-6 shrink-0 items-center justify-center rounded-full bg-primary-soft text-label-sm font-bold text-primary-strong forced-colors:outline forced-colors:outline-[CanvasText]";
5997
+ protected readonly lineClasses = "my-1 w-0 flex-1 border-s border-border group-last/bf-step:hidden";
5998
+ protected readonly titleClasses = "pt-0.5 text-label font-bold text-text wrap-anywhere";
5999
+ /** The step's number: the list's `start` plus its position. */
6000
+ protected readonly number: import("@angular/core").Signal<number>;
6001
+ protected readonly positionInSet: import("@angular/core").Signal<number | null>;
6002
+ protected readonly setSize: import("@angular/core").Signal<number | null>;
6003
+ static ɵfac: i0.ɵɵFactoryDeclaration<BfStepComponent, never>;
6004
+ static ɵcmp: i0.ɵɵComponentDeclaration<BfStepComponent, "bf-step", never, {
6005
+ "title": {
6006
+ "alias": "title";
6007
+ "required": false;
6008
+ "isSignal": true;
6009
+ };
6010
+ "headingLevel": {
6011
+ "alias": "headingLevel";
6012
+ "required": false;
6013
+ "isSignal": true;
6014
+ };
6015
+ }, {}, never, ["*"], true, never>;
6016
+ }
5737
6017
  /** An error as a field reads it: its kind and optional message; limit fields (`minLength`,
5738
6018
  * `context.requiredLength`, …) are read through type guards by `bfValidationMessage`. */
5739
6019
  type FieldErrorLike = Pick<ValidationError, 'kind' | 'message'>;
@@ -5852,4 +6132,4 @@ declare const BF_NAV: InjectionToken<BfNavHost>;
5852
6132
  declare function resetBfDocument(document: Document): void;
5853
6133
  /** Runs `resetBfDocument()` when the environment injector that holds it is destroyed. Internal. */
5854
6134
  declare function provideBfDocumentReset(): EnvironmentProviders;
5855
- export { type BfAlertVariant, type BfAppFrameBreakpoint, type BfAppFrameContentWidth, type BfAutocapitalize, type BfAvatarSize, type BfAvatarVariant, type BfBadgeAppearance, type BfBadgeVariant, type BfButtonAppearance, type BfButtonSize, type BfButtonType, type BfButtonVariant, type BfCalendarDisabledDate, type BfCalendarWeekday, type BfCardPadding, type BfCardVariant, type BfChipGroupMode, type BfChipVariant, type BfColorScheme, type BfCompareWith, type BfDefaults, type BfDefaultsOptions, type BfDescriptionListLayout, type BfEmptyStateHeading, type BfEmptyStateHeadingLevel, type BfEnterKeyHint, type BfFieldControlState, type BfFieldSize, type BfIconButtonVariant, type BfInputAutocapitalize, type BfInputEnterKeyHint, type BfInputInputMode, type BfInputMode, type BfInputType, type BfLabels, type BfLabelsOverrides, type BfPageHeaderHeadingLevel, type BfProgressSize, type BfProgressTone, type BfRadioGroupOrientation, type BfRadioOption, type BfSegmentOption, type BfSegmentedSize, type BfSelectOption, type BfSize, type BfSkeletonShape, type BfSpinnerSize, type BfStatAppearance, type BfStatTrend, type BfStatTrendIntent, type BfStatVariant, type BfTabBarController, type BfTabBarHost, type BfTabLinks, type BfTableAlign, type BfTableCellContext, type BfTableColumn, type BfTableRowKey, type BfTableSort, type BfTableSortDirection, type BfTableStack, type BfToggleLabelPosition, type BfValidationMessages, BUTTON_CLASSES as ɵBF_BUTTON_CLASSES, ICON_BUTTON_CLASSES as ɵBF_ICON_BUTTON_CLASSES, BF_NAV as ɵBF_NAV, type BfNavHost as ɵBfNavHost, FIELD_BOX as ɵFIELD_BOX, FIELD_ICON_END as ɵFIELD_ICON_END, FIELD_ICON_START as ɵFIELD_ICON_START, FIELD_PADDING_END as ɵFIELD_PADDING_END, FIELD_PADDING_START as ɵFIELD_PADDING_START, PILL_HIT as ɵPILL_HIT, compareIso as ɵcompareIso, createMemoryColorSchemeStorage as ɵcreateMemoryColorSchemeStorage, daysInMonth as ɵdaysInMonth, fieldDescribedBy as ɵfieldDescribedBy, fieldErrorMessageId as ɵfieldErrorMessageId, fieldErrorText as ɵfieldErrorText, fieldShowsError as ɵfieldShowsError, formatIsoDate as ɵformatIsoDate, localIsoDate as ɵlocalIsoDate, parseIsoDate as ɵparseIsoDate, provideBfDocumentReset as ɵprovideBfDocumentReset, uniqueId as ɵuniqueId, validIsoDate as ɵvalidIsoDate };
6135
+ export { type BfAlertVariant, type BfAppFrameBreakpoint, type BfAppFrameContentWidth, type BfAutocapitalize, type BfAvatarSize, type BfAvatarVariant, type BfBadgeAppearance, type BfBadgeEmphasis, type BfBadgeVariant, type BfButtonAppearance, type BfButtonSize, type BfButtonType, type BfButtonVariant, type BfCalendarDisabledDate, type BfCalendarWeekday, type BfCardPadding, type BfCardVariant, type BfChipGroupMode, type BfChipVariant, type BfColorScheme, type BfCompareWith, type BfDefaults, type BfDefaultsOptions, type BfDescriptionListLayout, type BfEmptyStateHeading, type BfEmptyStateHeadingLevel, type BfEnterKeyHint, type BfFieldControlState, type BfFieldSize, type BfIconButtonVariant, type BfInputAutocapitalize, type BfInputEnterKeyHint, type BfInputInputMode, type BfInputMode, type BfInputType, type BfLabels, type BfLabelsOverrides, type BfPageHeaderHeadingLevel, type BfProgressSize, type BfProgressTone, type BfRadioGroupOrientation, type BfRadioOption, type BfSegmentOption, type BfSegmentedSize, type BfSelectOption, type BfSize, type BfSkeletonShape, type BfSpinnerSize, type BfStatAppearance, type BfStatTrend, type BfStatTrendIntent, type BfStatVariant, type BfStepHeadingLevel, type BfTabBarController, type BfTabBarHost, type BfTabLinks, type BfTableAlign, type BfTableCellContext, type BfTableColumn, type BfTableColumnAlign, type BfTableRowKey, type BfTableSort, type BfTableSortDirection, type BfTableStack, type BfTimelineTone, type BfToggleLabelPosition, type BfValidationMessages, BUTTON_CLASSES as ɵBF_BUTTON_CLASSES, ICON_BUTTON_CLASSES as ɵBF_ICON_BUTTON_CLASSES, BF_NAV as ɵBF_NAV, type BfNavHost as ɵBfNavHost, FIELD_BOX as ɵFIELD_BOX, FIELD_ICON_END as ɵFIELD_ICON_END, FIELD_ICON_START as ɵFIELD_ICON_START, FIELD_PADDING_END as ɵFIELD_PADDING_END, FIELD_PADDING_START as ɵFIELD_PADDING_START, PILL_HIT as ɵPILL_HIT, compareIso as ɵcompareIso, createMemoryColorSchemeStorage as ɵcreateMemoryColorSchemeStorage, daysInMonth as ɵdaysInMonth, fieldDescribedBy as ɵfieldDescribedBy, fieldErrorMessageId as ɵfieldErrorMessageId, fieldErrorText as ɵfieldErrorText, fieldShowsError as ɵfieldShowsError, formatIsoDate as ɵformatIsoDate, localIsoDate as ɵlocalIsoDate, parseIsoDate as ɵparseIsoDate, provideBfDocumentReset as ɵprovideBfDocumentReset, uniqueId as ɵuniqueId, validIsoDate as ɵvalidIsoDate };