@forgeroute/ui 0.4.23 → 0.4.25

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forgeroute/ui",
3
- "version": "0.4.23",
3
+ "version": "0.4.25",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -489,6 +489,8 @@ export declare class PaginationComponent {
489
489
  readonly detached: import("@angular/core").InputSignal<boolean>;
490
490
  /** Embedded look for a container that already has its own background and edge (a `ui-detail-card` footer, a panel): transparent, no border, no radius, no padding. Default false: unchanged. Wins over `detached`. */
491
491
  readonly embedded: import("@angular/core").InputSignal<boolean>;
492
+ /** Accessible name of the pager's navigation landmark (default `Pagination`). Give each pager of a page its own name (`Contacts pages`) so assistive tech can tell them apart; empty or blank falls back to the default. */
493
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
492
494
  readonly pageChange: import("@angular/core").OutputEmitterRef<number>;
493
495
  readonly totalPages: import("@angular/core").Signal<number>;
494
496
  readonly startItem: import("@angular/core").Signal<number>;
@@ -522,6 +524,11 @@ export declare class PaginationComponent {
522
524
  "required": false;
523
525
  "isSignal": true;
524
526
  };
527
+ "ariaLabel": {
528
+ "alias": "ariaLabel";
529
+ "required": false;
530
+ "isSignal": true;
531
+ };
525
532
  }, {
526
533
  "pageChange": "pageChange";
527
534
  }, never, never, true, never>;
@@ -1320,6 +1327,12 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
1320
1327
  * tabs are all off, the header row is not rendered at all.
1321
1328
  */
1322
1329
  readonly showQuickTabs: import("@angular/core").InputSignal<boolean>;
1330
+ /**
1331
+ * Keep the Actions column (the row "⋮" menu) pinned to the right edge while the table scrolls sideways, so a wide table never hides it
1332
+ * off-screen. Default false: every existing table is unchanged. Only matters when the table is wider than its container (columns scroll);
1333
+ * phones use the card list, which has no sideways scroll.
1334
+ */
1335
+ readonly stickyActions: import("@angular/core").InputSignal<boolean>;
1323
1336
  /**
1324
1337
  * Optional heading shown at the start of the header row, on the same row as the search box / tabs on the left and the
1325
1338
  * Export / primary buttons on the right (rendered as an `<h3>`, also while the table is loading and when it is empty).
@@ -1859,6 +1872,11 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
1859
1872
  "required": false;
1860
1873
  "isSignal": true;
1861
1874
  };
1875
+ "stickyActions": {
1876
+ "alias": "stickyActions";
1877
+ "required": false;
1878
+ "isSignal": true;
1879
+ };
1862
1880
  "tableTitle": {
1863
1881
  "alias": "tableTitle";
1864
1882
  "required": false;
@@ -6865,6 +6883,9 @@ export interface PanelInfoItem {
6865
6883
  /** Renders a small edit (pencil) `ui-icon` button after the value; `editTooltip` is its tooltip and accessible name (default "Edit"). */
6866
6884
  editAction?: () => void;
6867
6885
  editTooltip?: string;
6886
+ /** Renders a small delete (bin) `ui-icon` button after the edit pencil; the host asks for confirmation and does the deleting. `deleteTooltip` is its tooltip and accessible name (default "Delete"). */
6887
+ deleteAction?: () => void;
6888
+ deleteTooltip?: string;
6868
6889
  muted?: boolean;
6869
6890
  danger?: boolean;
6870
6891
  hidden?: boolean;
@@ -6879,6 +6900,18 @@ export interface PanelInfoSection {
6879
6900
  label: string;
6880
6901
  url: string;
6881
6902
  };
6903
+ /**
6904
+ * A small secondary button at the end of the section's header bar (e.g. "Add item" for a list of line items). `action` runs on
6905
+ * click; `ariaLabel` is the accessible name when the visible label is not enough (default: the label). The header bar is shown
6906
+ * for a section with a `headerAction` even when it has no `title`. Not rendered for a section with no visible items unless
6907
+ * `showEmptyState` keeps the section.
6908
+ */
6909
+ headerAction?: {
6910
+ label: string;
6911
+ action: () => void;
6912
+ ariaLabel?: string;
6913
+ disabled?: boolean;
6914
+ };
6882
6915
  items: PanelInfoItem[];
6883
6916
  columns?: 2;
6884
6917
  }
@@ -6951,6 +6984,9 @@ export declare class PanelInfoListComponent {
6951
6984
  * readers announce it as pressed / not pressed. A dismissible chip is a removable tag, not a toggle, so it carries no
6952
6985
  * `aria-pressed` (the ✕ button is named "Remove <label>").
6953
6986
  *
6987
+ * Dismissible chips can be removed from the keyboard: Tab to the ✕ (focusable, named "Remove <label>") and press Enter or
6988
+ * Space, or press Delete / Backspace while the chip itself is focused.
6989
+ *
6954
6990
  * Dismissible (shows an ✕ button — parent removes the chip on dismiss):
6955
6991
  * <ui-chip label="Austin" size="sm" [dismissible]="true" (dismiss)="removeCity('Austin')" />
6956
6992
  *
@@ -6989,6 +7025,11 @@ export declare class ChipComponent implements ControlValueAccessor {
6989
7025
  protected _onTouched: () => void;
6990
7026
  protected onClick(): void;
6991
7027
  protected onDismiss(event: Event): void;
7028
+ /**
7029
+ * Keyboard removal: Enter / Space on the focused ✕, or Delete / Backspace on the chip itself (dismissible chips only).
7030
+ * Handled here so the key never also toggles the chip.
7031
+ */
7032
+ protected onDismissKey(event: Event): void;
6992
7033
  writeValue(v: boolean): void;
6993
7034
  registerOnChange(fn: (v: boolean) => void): void;
6994
7035
  registerOnTouched(fn: () => void): void;
@@ -7256,7 +7297,7 @@ export declare class AppShellComponent implements OnInit, OnDestroy {
7256
7297
  };
7257
7298
  }, {
7258
7299
  "logoutClick": "logoutClick";
7259
- }, never, ["[shell-brand]", "[shell-header-end]", "[shell-banners]", "*"], true, never>;
7300
+ }, never, ["[shell-brand]", "[shell-header-start]", "[shell-header-end]", "[shell-banners]", "*"], true, never>;
7260
7301
  }
7261
7302
  export type AlertVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';
7262
7303
  /**
@@ -7274,6 +7315,11 @@ export declare class AlertComponent {
7274
7315
  readonly variant: import("@angular/core").InputSignal<AlertVariant>;
7275
7316
  readonly title: import("@angular/core").InputSignal<string>;
7276
7317
  readonly dismissible: import("@angular/core").InputSignal<boolean>;
7318
+ /**
7319
+ * Accessible name of the dismiss (X) button. Default "Dismiss". In a list of alerts give each its own name
7320
+ * ("Dismiss Significant alert from Sep 20, 2026") so a screen-reader user can tell the buttons apart.
7321
+ */
7322
+ readonly dismissAriaLabel: import("@angular/core").InputSignal<string>;
7277
7323
  /**
7278
7324
  * Quiet: no live-region role, so a screen reader does NOT announce it when it appears. Use it for an alert that is already on
7279
7325
  * the page when the user gets there, or for each item of a long list of alerts (e.g. one per failed import row — 500 danger
@@ -7307,6 +7353,11 @@ export declare class AlertComponent {
7307
7353
  "required": false;
7308
7354
  "isSignal": true;
7309
7355
  };
7356
+ "dismissAriaLabel": {
7357
+ "alias": "dismissAriaLabel";
7358
+ "required": false;
7359
+ "isSignal": true;
7360
+ };
7310
7361
  "quiet": {
7311
7362
  "alias": "quiet";
7312
7363
  "required": false;