@bitforgehq/ui 0.3.2 → 0.3.3

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.
package/llms-full.txt CHANGED
@@ -2982,8 +2982,8 @@ interface Destination {
2982
2982
  * The bf-app-frame overview.
2983
2983
  *
2984
2984
  * Live demo of `bf-app-frame` in a box of fixed height: one destinations array drives the
2985
- * `bf-sidebar` (from `md` up) and the narrow header's `bf-menu-button`; the header also holds the
2986
- * brand and a notifications action. Tab into the frame to reveal its skip link; Enter moves focus
2985
+ * `bf-sidebar` (from `md` up) and the narrow header's `bf-menu-button`, at the header's inline
2986
+ * start; the brand follows it, and a notifications action sits at the end. Tab into the frame to reveal its skip link; Enter moves focus
2987
2987
  * to the content. The result line reports it.
2988
2988
  */
2989
2989
  @Component({
@@ -3023,11 +3023,11 @@ interface Destination {
3023
3023
  }
3024
3024
  </bf-sidebar>
3025
3025
 
3026
- <span bfSlot="brand" class="text-heading">Atlas</span>
3027
3026
  <bf-menu-button bfSlot="menu" variant="text" [menu]="navMenu">
3028
3027
  <bf-icon bfSlot="icon-start" [icon]="menu" />
3029
3028
  Sections
3030
3029
  </bf-menu-button>
3030
+ <span bfSlot="brand" class="text-heading">Atlas</span>
3031
3031
  <bf-icon-button
3032
3032
  bfSlot="actions"
3033
3033
  variant="text"
@@ -3094,7 +3094,7 @@ export class AppFrameOverviewExampleComponent {
3094
3094
  ## Overview
3095
3095
 
3096
3096
  The frame of a desktop web app: a skip link, a sticky full-height sidebar column from the
3097
- breakpoint up, a header bar with the brand, the narrow-screen menu and actions below it, and
3097
+ breakpoint up, a header bar with the narrow-screen menu, the brand and actions below it, and
3098
3098
  the `main` landmark with a content column of a set maximum width.
3099
3099
 
3100
3100
  The frame around a desktop web app's pages: a skip link, a [`bf-sidebar`](https://bitforge-ui.web.app/components/sidebar) column that sticks to the viewport at its full height from a breakpoint up, a header bar below the breakpoint with the brand, the narrow-screen [`bf-menu-button`](https://bitforge-ui.web.app/components/menu-button) and end actions, and the `main` landmark with a content column of a set maximum width. It replaces the `hidden md:flex` sidebar, the `md:hidden` menu button and the padded `main` an app would otherwise build by hand. The frame imports no overlay and never reads the router: the menu is your own `bf-menu-button`, projected into a slot.
@@ -3105,7 +3105,7 @@ Use `bf-app-frame` once, at the root of a desktop web app whose top-level destin
3105
3105
 
3106
3106
  ## Slots and layout
3107
3107
 
3108
- Put the `bf-sidebar` in `bfSlot="sidebar"`, the app's name or logo in `bfSlot="brand"`, the narrow-screen `bf-menu-button` of `a[bfMenuItem]` router links in `bfSlot="menu"` and end actions (the theme menu, the account) in `bfSlot="actions"`; everything else is the page. From the breakpoint up the sidebar column sits at the inline start, `sticky top-0` and `h-dvh` tall, and the `bf-sidebar` inside fills it and scrolls its own destinations; the header bar is hidden. Below it the sidebar column is hidden and the header bar (`surface`, a bottom border, sticky at the top) shows the brand at the start, then the menu, and the actions at the end. Keep the brand in the sidebar's own `header` slot too, for the wide layout.
3108
+ Put the `bf-sidebar` in `bfSlot="sidebar"`, the app's name or logo in `bfSlot="brand"`, the narrow-screen `bf-menu-button` of `a[bfMenuItem]` router links in `bfSlot="menu"` and end actions (the theme menu, the account) in `bfSlot="actions"`; everything else is the page. From the breakpoint up the sidebar column sits at the inline start, `sticky top-0` and `h-dvh` tall, and the `bf-sidebar` inside fills it and scrolls its own destinations; the header bar is hidden. Below it the sidebar column is hidden and the header bar (`surface`, a bottom border, sticky at the top) shows the menu at the inline start, then the brand, and the actions at the end: the top app bar convention, and the menu comes first in the tab order too. The order is fixed, whatever order the slots have in your template. Keep the brand in the sidebar's own `header` slot too, for the wide layout.
3109
3109
 
3110
3110
  ## Breakpoint and content width
3111
3111
 
@@ -3242,8 +3242,8 @@ The skip link is a native `<a>` with an href to the main landmark and is the fir
3242
3242
  ## Slots
3243
3243
 
3244
3244
  - `sidebar`: The `bf-sidebar`, shown from the breakpoint up; it fills the column's height.
3245
- - `brand`: The app's name or logo in the narrow header bar.
3246
- - `menu`: The narrow-screen navigation: a `bf-menu-button` of `a[bfMenuItem]` links.
3245
+ - `menu`: The narrow-screen navigation: a `bf-menu-button` of `a[bfMenuItem]` links, at the header bar's inline start.
3246
+ - `brand`: The app's name or logo in the narrow header bar, after the menu.
3247
3247
  - `actions`: End actions of the narrow header bar, such as the theme menu.
3248
3248
  - `default`: The page: what the router shows, inside the `main` landmark.
3249
3249
 
@@ -3262,6 +3262,13 @@ The skip link is a native `<a>` with an href to the main landmark and is the fir
3262
3262
 
3263
3263
  ## Migration notes
3264
3264
 
3265
+ ### 0.3.3
3266
+
3267
+ Fix: the narrow header bar puts the `menu` slot at the inline start, before the `brand` (0.3.2 put
3268
+ it after the brand), with the actions at the end as before: the top app bar convention. The menu
3269
+ also comes first in the tab order. No API change; an app needs no change unless it relied on the
3270
+ brand coming first.
3271
+
3265
3272
  ### 0.3.2
3266
3273
 
3267
3274
  New `bf-app-frame` in `@bitforgehq/ui`: the frame of a desktop web app. Slots `sidebar` (a
@@ -11636,6 +11643,15 @@ The title is not in the tab order; after a push, `bf-stack-outlet` focuses it wi
11636
11643
 
11637
11644
  ## Migration notes
11638
11645
 
11646
+ ### 0.3.3
11647
+
11648
+ Fix: `bf-header` measures its title and slots in the next animation frame after a resize, not
11649
+ inside the `ResizeObserver` callback. Its measurement writes the title inset and height, which
11650
+ resize the observed elements, and WebKit then reported "ResizeObserver loop completed with
11651
+ undelivered notifications": an error event that an app's global error listener
11652
+ (`provideBrowserGlobalErrorListeners()`) logs as an error. Several resizes in one frame now
11653
+ measure once.
11654
+
11639
11655
  ### 0.3.2
11640
11656
 
11641
11657
  The `## Desktop` docs say `bf-app-frame` supplies the app-level header bar below its breakpoint.
@@ -24488,7 +24504,7 @@ export class TablePagedExampleComponent {
24488
24504
 
24489
24505
  `stack` lets the table itself fit a narrow space. With `stack="narrow"` it stacks while the table is narrower than 36rem (576 px at the default root size, Tailwind's `xl` container size): a container query on the table's own width, so a table in a narrow column or a side panel stacks even on a wide screen. The host is then a size container (`container-type: inline-size`), so give the table its width from its parent (a block or `w-full` / `flex-1`), not from its columns. With `stack="coarse"` it stacks under a coarse pointer at any width (phones, tablets, the Capacitor shell). The default `never` keeps the table as it is.
24490
24506
 
24491
- Stacked, each row is a sunken tile (`surface-sunken`, `rounded-tile`, the tile a raised card holds; a selected row keeps `primary-soft`). Its checkbox and first cell head the tile in bold; every other cell shows its column label at the start and its value at the end. The header row is visually hidden, and a bar above the tiles holds a labelled Select all checkbox (with `selectable`) and a Sort by select of every sortable column, ascending and descending (`tableSortBy`, `tableSortAscending`, `tableSortDescending` labels), since the hidden header's buttons are not shown. Choosing an option sets `sort`, as a header click does.
24507
+ Stacked, each row is a sunken tile (`surface-sunken`, `rounded-tile`, the tile a raised card holds; a selected row keeps `primary-soft`). Its checkbox and first cell head the tile in bold; every other cell shows its column label at the start and its value at the end. The header row is visually hidden, and a bar above the tiles holds a labelled Select all checkbox (with `selectable`) and a Sort by select, since the hidden header's buttons are not shown. Its first option, Not sorted, shows while `sort` is null and sets it back to null; then every sortable column, ascending and descending (`tableSortBy`, `tableSortNone`, `tableSortAscending`, `tableSortDescending` labels). Choosing a column option sets `sort`, as a header click does. In a test, `BfTableHarness.getSortSelect()` returns that select's `BfSelectHarness`.
24492
24508
 
24493
24509
  ```ts
24494
24510
  import { Component, computed, signal } from '@angular/core';
@@ -24523,7 +24539,8 @@ type Width = 'phone' | 'full';
24523
24539
  *
24524
24540
  * `stack="narrow"` turns each row into a tile of label/value pairs while the table is narrower
24525
24541
  * than 36rem: the selection checkbox and the first cell head the tile, and a bar above the tiles
24526
- * holds Select all and a Sort by select. Switch the box between phone width and full width.
24542
+ * holds Select all and a Sort by select, whose first option, Not sorted, shows while `sort` is
24543
+ * null and clears it. Switch the box between phone width and full width.
24527
24544
  */
24528
24545
  @Component({
24529
24546
  selector: 'app-example-table-stacked',
@@ -24670,7 +24687,7 @@ Put the table on a `bf-card` (or another surface) yourself; it has no background
24670
24687
 
24671
24688
  A native `table` with a visually hidden `caption` from `label`, `th scope="col"` headers and one `tr` per row. A sorted column's `th` carries `aria-sort="ascending"` or `"descending"`; the others carry none. A sortable header is a native `button` inside the `th`, so its name is the column label; the arrow is `aria-hidden`. The header checkbox is named by `selectAllLabel`, else `provideBfLabels()`'s `tableSelectAll` ("Select all rows"), and is mixed (`indeterminate`) while some rows are selected. Each row checkbox is named by the row's first data cell through `aria-labelledby`, so it reads as the row's title. The empty row's cell spans every column.
24672
24689
 
24673
- A table that can stack (`stack` other than `never`) sets explicit `table`, `rowgroup`, `row`, `columnheader` and `cell` roles and names the table from its caption with `aria-labelledby`, because Safari and some screen readers drop a table's semantics once CSS changes its display; so a stacked table still reads as a table with its column headers. Stacked, the header row is visually hidden but stays in the accessibility tree; its sort buttons and checkbox are hidden (a plain label takes a sortable header's place), so no control is focusable where nobody can see it, and the bar's Select all checkbox and Sort by select replace them. A cell's visible label is CSS generated content with empty alternative text (`content: attr(data-label) / ""`), so a screen reader reads the column header once, not the label as well.
24690
+ A table that can stack (`stack` other than `never`) sets explicit `table`, `rowgroup`, `row`, `columnheader` and `cell` roles and names the table from its caption with `aria-labelledby`, because Safari and some screen readers drop a table's semantics once CSS changes its display; so a stacked table still reads as a table with its column headers. Stacked, the header row is visually hidden but stays in the accessibility tree; its sort buttons and checkbox are hidden (a plain label takes a sortable header's place), so no control is focusable where nobody can see it, and the bar's Select all checkbox and Sort by select replace them. A cell's visible label is CSS generated content with empty alternative text (`content: attr(data-label) / ""`, the `content-data-label` utility of `theme.css`), so a screen reader reads the column header once, not the label as well.
24674
24691
 
24675
24692
  ### Keyboard
24676
24693
 
@@ -24748,6 +24765,23 @@ Selects or clears one row.
24748
24765
 
24749
24766
  ## Migration notes
24750
24767
 
24768
+ ### 0.3.3
24769
+
24770
+ Fix: stacked rows (`stack="narrow"` and `stack="coarse"`) show their column labels again when the
24771
+ package is installed from npm. 0.3.2 wrote the label as `content-[attr(data-label)_/_""]`; the
24772
+ library build escaped its quotes in the FESM (`\"\"`), so Tailwind built the rule for a class no
24773
+ cell carries and every label `::before` computed to `none`. The cells now carry
24774
+ `before:content-data-label`, a utility `theme.css` defines (below). Apps that added the
24775
+ workaround `@source inline('@max-xl:before:content-[attr(data-label)_/_""] pointer-coarse:before:content-[attr(data-label)_/_""]')`
24776
+ can remove it. consumer-smoke now opens a stacked table built from the packed package in
24777
+ Chromium, under a fine and a coarse pointer, and fails if any FESM class string holds a
24778
+ backslash escape.
24779
+
24780
+ The stacked Sort by select's first option is Not sorted (new label key `tableSortNone`, "Not
24781
+ sorted"): it shows while `sort` is null, so the select is no longer an empty box, and choosing it
24782
+ sets `sort` back to null. New `BfTableHarness.getSortSelect()` returns that select's
24783
+ `BfSelectHarness` (`null` when the table cannot stack or has no sortable column).
24784
+
24751
24785
  ### 0.3.2
24752
24786
 
24753
24787
  New opt-in `stack` input (`BfTableStack`: `'never'` by default, so existing tables do not
@@ -29335,6 +29369,7 @@ import { type BfLabels } from '@bitforgehq/ui';
29335
29369
  | `notifications` | `string` | `'Notifications'` | The desktop toast stack's region name. |
29336
29370
  | `tableSelectAll` | `string` | `'Select all rows'` | bf-table's header checkbox, which selects or clears every row. |
29337
29371
  | `tableSortBy` | `string` | `'Sort by'` | The label of a stacked bf-table's sort select. |
29372
+ | `tableSortNone` | `string` | `'Not sorted'` | A stacked bf-table's first sort option: rows in the order given, no column sorted. |
29338
29373
  | `tableSortAscending` | `(column: string) => string` | `` (column) => `${column}, ascending` `` | A stacked bf-table's sort option for a column in ascending order. |
29339
29374
  | `tableSortDescending` | `(column: string) => string` | `` (column) => `${column}, descending` `` | A stacked bf-table's sort option for a column in descending order. |
29340
29375
  | `theme` | `string` | `'Theme'` | bf-theme-switch's and bf-theme-menu-button's name without a label. |
@@ -30491,7 +30526,7 @@ Replaces built-in strings, merged over the parent's (validation merged key by ke
30491
30526
  out or set to `undefined` keeps the parent's string. In `ApplicationConfig.providers` it covers
30492
30527
  every string. In a component's `providers` it covers that sub-tree's widgets and form controls
30493
30528
  (`loading`, `dismiss`, `tabBar`, `tabBadge`, `back`, `refreshing`, `tableSelectAll`, `tableSortBy`,
30494
- `tableSortAscending`, `tableSortDescending`, `theme`, `themeSystem`, `themeLight`, `themeDark`,
30529
+ `tableSortNone`, `tableSortAscending`, `tableSortDescending`, `theme`, `themeSystem`, `themeLight`, `themeDark`,
30495
30530
  `breadcrumb`, `breadcrumbExpand`, `navigation`, `navBadge`, `sidebarCollapse`, `sidebarExpand`,
30496
30531
  `skipToContent`, `pagination`, `previousPage`, `nextPage`, `pageOf`, `goToPage`, `tabGroup`,
30497
30532
  `calendarPreviousMonth`, `calendarNextMonth`, `calendarChooseMonth`, `calendarChooseYear`,
@@ -37274,6 +37309,10 @@ Focuses the native select.
37274
37309
 
37275
37310
  Blurs the native select, which marks a bound form field touched.
37276
37311
 
37312
+ ## Used by
37313
+
37314
+ - [BfTableHarness](bf-table-harness.md)
37315
+
37277
37316
  ---
37278
37317
 
37279
37318
  # BfSidebarToggleHarness
@@ -37451,6 +37490,11 @@ Throws for an unknown or unsortable column.
37451
37490
 
37452
37491
  The sorted column (its `key`) and direction, from `aria-sort`.
37453
37492
 
37493
+ ### `getSortSelect(): Promise<BfSelectHarness | null>`
37494
+
37495
+ The Sort by select in a stacked table's bar: its first option, Not sorted (`tableSortNone`),
37496
+ sets `sort` to null and shows while it is; then each sortable column ascending and descending.
37497
+
37454
37498
  ### `selectRow(index: number): Promise<void>`
37455
37499
 
37456
37500
  Checks one row's checkbox, as a user would; a selected row stays selected. Throws when the
@@ -37471,6 +37515,7 @@ The number of selected rows (checked row checkboxes).
37471
37515
 
37472
37516
  ## Uses
37473
37517
 
37518
+ - [BfSelectHarness](bf-select-harness.md)
37474
37519
  - [BfTableSort](bf-table-sort.md)
37475
37520
 
37476
37521
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitforgehq/ui",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
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": {
package/theme.css CHANGED
@@ -352,3 +352,16 @@
352
352
  .dark .bf-overlay-backdrop {
353
353
  background: rgb(0 0 0 / 0.6);
354
354
  }
355
+
356
+ /* ---------- Stacked table labels ---------- */
357
+ /*
358
+ * The column label a stacked `bf-table` cell shows before its value (`before:content-data-label`
359
+ * behind a stack variant): the cell's `data-label`, with empty alternative text, so assistive
360
+ * technology reads the header association and not the label twice. A named utility, not
361
+ * `content-[attr(data-label)_/_""]`: the library build escapes the quotes of a class written in a
362
+ * string (`\"\"`), and Tailwind then builds the rule for a class no element carries.
363
+ */
364
+ @utility content-data-label {
365
+ --tw-content: attr(data-label) / '';
366
+ content: var(--tw-content);
367
+ }
@@ -512,6 +512,7 @@ export declare class BfTableHarness extends ComponentHarness {
512
512
  private readonly rows;
513
513
  private readonly selectAllBox;
514
514
  private readonly rowBoxes;
515
+ private readonly sortSelect;
515
516
  /**
516
517
  * A predicate for a table with the given label.
517
518
  * @param filters The label (text or pattern) and the CDK's selector and ancestor filters.
@@ -551,6 +552,19 @@ export declare class BfTableHarness extends ComponentHarness {
551
552
  * @returns The sort, `null` while no column is sorted.
552
553
  */
553
554
  getSort(): Promise<BfTableSort | null>;
555
+ /**
556
+ * The Sort by select in a stacked table's bar: its first option, Not sorted (`tableSortNone`),
557
+ * sets `sort` to null and shows while it is; then each sortable column ascending and descending.
558
+ *
559
+ * @example
560
+ * const sortBy = await tasks.getSortSelect();
561
+ * await sortBy?.selectOption('Hours, descending');
562
+ * expect(await tasks.getSort()).toEqual({ column: 'hours', direction: 'descending' });
563
+ * @returns The select's harness; `null` when the table cannot stack (`stack="never"`) or has no
564
+ * sortable column.
565
+ * @since 0.3.3
566
+ */
567
+ getSortSelect(): Promise<BfSelectHarness | null>;
554
568
  /**
555
569
  * Checks one row's checkbox, as a user would; a selected row stays selected. Throws when the
556
570
  * table is not selectable or the row does not exist.
@@ -241,6 +241,11 @@ interface BfLabels {
241
241
  * @default 'Sort by'
242
242
  */
243
243
  readonly tableSortBy: string;
244
+ /**
245
+ * A stacked bf-table's first sort option: rows in the order given, no column sorted.
246
+ * @default 'Not sorted'
247
+ */
248
+ readonly tableSortNone: string;
244
249
  /**
245
250
  * A stacked bf-table's sort option for a column in ascending order.
246
251
  * @default (column) => `${column}, ascending`
@@ -538,7 +543,7 @@ export declare const BF_LABELS: InjectionToken<BfLabels>;
538
543
  * out or set to `undefined` keeps the parent's string. In `ApplicationConfig.providers` it covers
539
544
  * every string. In a component's `providers` it covers that sub-tree's widgets and form controls
540
545
  * (`loading`, `dismiss`, `tabBar`, `tabBadge`, `back`, `refreshing`, `tableSelectAll`, `tableSortBy`,
541
- * `tableSortAscending`, `tableSortDescending`, `theme`, `themeSystem`, `themeLight`, `themeDark`,
546
+ * `tableSortNone`, `tableSortAscending`, `tableSortDescending`, `theme`, `themeSystem`, `themeLight`, `themeDark`,
542
547
  * `breadcrumb`, `breadcrumbExpand`, `navigation`, `navBadge`, `sidebarCollapse`, `sidebarExpand`,
543
548
  * `skipToContent`, `pagination`, `previousPage`, `nextPage`, `pageOf`, `goToPage`, `tabGroup`,
544
549
  * `calendarPreviousMonth`, `calendarNextMonth`, `calendarChooseMonth`, `calendarChooseYear`,
@@ -4467,10 +4472,11 @@ export declare class BfTableComponent<T = unknown> {
4467
4472
  /** Whether the table can stack its rows (any `stack` but `never`); it then sets explicit
4468
4473
  * table roles, because some browsers drop a table's semantics once its display changes. */
4469
4474
  protected readonly stacks: import("@angular/core").Signal<boolean>;
4470
- /** The Sort by select's options: each sortable column ascending and descending. */
4475
+ /** The Sort by select's options: Not sorted (`''`), then each sortable column ascending and
4476
+ * descending; none without a sortable column. */
4471
4477
  protected readonly sortOptions: import("@angular/core").Signal<BfSelectOption<string>[]>;
4472
- /** The Sort by select's value: the option of `sort`, `null` while unsorted. */
4473
- protected readonly sortValue: import("@angular/core").Signal<string | null>;
4478
+ /** The Sort by select's value: the option of `sort`, Not sorted while `sort` is null. */
4479
+ protected readonly sortValue: import("@angular/core").Signal<string>;
4474
4480
  protected readonly hostClasses: import("@angular/core").Signal<string>;
4475
4481
  protected readonly stackBarClasses: import("@angular/core").Signal<string>;
4476
4482
  protected readonly tableClasses: import("@angular/core").Signal<string>;
@@ -4526,7 +4532,8 @@ export declare class BfTableComponent<T = unknown> {
4526
4532
  */
4527
4533
  sortBy(key: string): void;
4528
4534
  /**
4529
- * Sorts by a Sort by option (`<key>:<direction>`) of a stacked table.
4535
+ * Sorts by a Sort by option (`<key>:<direction>`) of a stacked table; Not sorted sets `sort` to
4536
+ * null.
4530
4537
  * @internal
4531
4538
  */
4532
4539
  sortFromOption(value: string): void;
@@ -5108,22 +5115,23 @@ type BfAppFrameBreakpoint = 'md' | 'lg';
5108
5115
  type BfAppFrameContentWidth = 'md' | 'lg' | 'xl' | 'full';
5109
5116
  /**
5110
5117
  * The frame of a desktop web app: a skip link, a sticky full-height sidebar column from the
5111
- * breakpoint up, a header bar with the brand, the narrow-screen menu and actions below it, and
5118
+ * breakpoint up, a header bar with the narrow-screen menu, the brand and actions below it, and
5112
5119
  * the `main` landmark with a content column of a set maximum width.
5113
5120
  *
5114
5121
  * @example
5115
5122
  * <bf-app-frame>
5116
5123
  * <bf-sidebar bfSlot="sidebar" label="Main">…</bf-sidebar>
5117
- * <span bfSlot="brand" class="text-heading">Atlas</span>
5118
5124
  * <bf-menu-button bfSlot="menu" [menu]="navMenu">Sections</bf-menu-button>
5125
+ * <span bfSlot="brand" class="text-heading">Atlas</span>
5119
5126
  * <router-outlet />
5120
5127
  * </bf-app-frame>
5121
5128
  * @summary Desktop app frame with skip link, sticky sidebar, narrow header and main content
5122
5129
  * @category Navigation
5123
5130
  * @since 0.3.2
5124
5131
  * @slot sidebar The `bf-sidebar`, shown from the breakpoint up; it fills the column's height.
5125
- * @slot brand The app's name or logo in the narrow header bar.
5126
- * @slot menu The narrow-screen navigation: a `bf-menu-button` of `a[bfMenuItem]` links.
5132
+ * @slot brand The app's name or logo in the narrow header bar, after the menu.
5133
+ * @slot menu The narrow-screen navigation: a `bf-menu-button` of `a[bfMenuItem]` links, at the
5134
+ * header bar's inline start.
5127
5135
  * @slot actions End actions of the narrow header bar, such as the theme menu.
5128
5136
  * @slot default The page: what the router shows, inside the `main` landmark.
5129
5137
  */
@@ -5168,7 +5176,7 @@ export declare class BfAppFrameComponent {
5168
5176
  "required": false;
5169
5177
  "isSignal": true;
5170
5178
  };
5171
- }, {}, never, ["[bfSlot=sidebar]", "[bfSlot=brand]", "[bfSlot=menu]", "[bfSlot=actions]", "*"], true, never>;
5179
+ }, {}, never, ["[bfSlot=sidebar]", "[bfSlot=menu]", "[bfSlot=brand]", "[bfSlot=actions]", "*"], true, never>;
5172
5180
  }
5173
5181
  /**
5174
5182
  * The shape of a `bf-skeleton`: text lines, a rectangle (an image, a chart, a field) or a circle