@truenas/ui-components 0.7.7 → 0.7.9

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": "@truenas/ui-components",
3
- "version": "0.7.7",
3
+ "version": "0.7.9",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org",
6
6
  "access": "public"
@@ -54,8 +54,8 @@ declare function kebabTestSegment(part: string | number): string;
54
54
  * re-implemented at each call site.
55
55
  *
56
56
  * Note this is *base-first*: the suffix trails the base. Fixed chrome whose role
57
- * should lead (e.g. `tn-dialog-shell`'s `button-close-<base>`) prepends the role
58
- * manually instead of calling this.
57
+ * should lead (e.g. `tn-dialog-shell`'s `button-close-<base>` and
58
+ * `dialog-title-<base>`) prepends the role manually instead of calling this.
59
59
  *
60
60
  * Falsy segments are preserved here (not filtered) so `composeTestId` can apply
61
61
  * its own drop/scoping rules — `scopeTestId(undefined, 'edit')` yields
@@ -1840,6 +1840,16 @@ declare class TnBannerComponent {
1840
1840
  message: _angular_core.InputSignal<string | undefined>;
1841
1841
  type: _angular_core.InputSignal<TnBannerType>;
1842
1842
  bordered: _angular_core.InputSignal<boolean>;
1843
+ /**
1844
+ * Semantic base for the banner's test id, rendered onto the banner root as
1845
+ * `banner-<testId>` through {@link TnTestIdDirective} — so the value follows
1846
+ * the library's own naming and honours `TN_TEST_ATTR`.
1847
+ *
1848
+ * The root, rather than the host element, because that is what carries the
1849
+ * live-region role: the element a test asserts a warning on is the same one
1850
+ * assistive tech announces.
1851
+ */
1852
+ testId: _angular_core.InputSignal<TnTestIdValue>;
1843
1853
  constructor();
1844
1854
  /**
1845
1855
  * Register all MDI icons used by the banner component
@@ -1865,7 +1875,7 @@ declare class TnBannerComponent {
1865
1875
  */
1866
1876
  classes: _angular_core.Signal<string[]>;
1867
1877
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnBannerComponent, never>;
1868
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnBannerComponent, "tn-banner", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; }, {}, ["actionContent"], ["*", "[tnBannerAction]"], true, never>;
1878
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnBannerComponent, "tn-banner", never, { "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "message": { "alias": "message"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "bordered": { "alias": "bordered"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; }, {}, ["actionContent"], ["*", "[tnBannerAction]"], true, never>;
1869
1879
  }
1870
1880
 
1871
1881
  /**
@@ -8819,6 +8829,14 @@ declare class TnListComponent {
8819
8829
  * The primary-text slot is the deliberate exception — it has no gate, so
8820
8830
  * `[tnListItemTitle]` and `[tnListItemPrimary]` render either way. See the
8821
8831
  * comment in `list-item.component.html` for why the asymmetry is there.
8832
+ *
8833
+ * `[testId]` names the row for automation. It lands on the host, which is both
8834
+ * the click target (`(click)` is a host binding) and the `listitem` — so one id
8835
+ * addresses the row whether a suite clicks it or reads what it renders. The
8836
+ * value is written verbatim, with no element-type prefix, matching the other
8837
+ * components whose host *is* the target (`tn-tree-node`, `tn-table`): a row of
8838
+ * a list is not a control whose type the library can name, and its meaning
8839
+ * comes from the list it sits in, which only the consumer knows.
8822
8840
  */
8823
8841
  declare class TnListItemComponent {
8824
8842
  disabled: _angular_core.InputSignal<boolean>;
@@ -8843,7 +8861,7 @@ declare class TnListItemComponent {
8843
8861
  hasThirdText: _angular_core.Signal<boolean>;
8844
8862
  onClick(event: Event): void;
8845
8863
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TnListItemComponent, never>;
8846
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnListItemComponent, "tn-list-item", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "dense": { "alias": "dense"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, ["leadingIcons", "leadingAvatars", "secondaryLines", "secondaryTexts", "trailing"], ["[tnListIcon], [tnListAvatar]", "[tnListItemTitle], [tnListItemPrimary]", "*", "[tnListItemLine], [tnListItemSecondary]", "[tnListItemTrailing]"], true, never>;
8864
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TnListItemComponent, "tn-list-item", never, { "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clickable": { "alias": "clickable"; "required": false; "isSignal": true; }; "dense": { "alias": "dense"; "required": false; "isSignal": true; }; "wrap": { "alias": "wrap"; "required": false; "isSignal": true; }; }, { "itemClick": "itemClick"; }, ["leadingIcons", "leadingAvatars", "secondaryLines", "secondaryTexts", "trailing"], ["[tnListIcon], [tnListAvatar]", "[tnListItemTitle], [tnListItemPrimary]", "*", "[tnListItemLine], [tnListItemSecondary]", "[tnListItemTrailing]"], true, [{ directive: typeof TnTestIdDirective; inputs: { "tnTestId": "testId"; }; outputs: {}; }]>;
8847
8865
  }
8848
8866
 
8849
8867
  /**
@@ -14432,9 +14450,10 @@ declare class TnDialogShellComponent implements OnInit {
14432
14450
  /** Hide the actions footer. Same wrapper-case rationale as {@link hideContent}. */
14433
14451
  hideActions: _angular_core.InputSignal<boolean>;
14434
14452
  /**
14435
- * Optional semantic base that scopes the shell's chrome buttons. The close
14436
- * and fullscreen buttons emit `button-close` / `button-fullscreen` by default,
14437
- * or `button-close-<testId>` / `button-fullscreen-<testId>` when a base is
14453
+ * Optional semantic base that scopes the shell's chrome. The close and
14454
+ * fullscreen buttons emit `button-close` / `button-fullscreen` by default, and
14455
+ * the title heading `dialog-title`, or `button-close-<testId>` /
14456
+ * `button-fullscreen-<testId>` / `dialog-title-<testId>` when a base is
14438
14457
  * provided (useful when more than one dialog can be open).
14439
14458
  */
14440
14459
  testId: _angular_core.InputSignal<TnTestIdValue>;
@@ -14473,6 +14492,19 @@ declare class TnDialogShellComponent implements OnInit {
14473
14492
  protected closeTestId: Signal<(string | number | null | undefined)[]>;
14474
14493
  /** Role-first test-id segments for the fullscreen button: `button-fullscreen[-<base>]`. */
14475
14494
  protected fullscreenTestId: Signal<(string | number | null | undefined)[]>;
14495
+ /**
14496
+ * Role-first test-id segments for the title heading: `dialog-title[-<base>]`.
14497
+ *
14498
+ * The heading is fixed chrome like the two buttons, so it follows the same
14499
+ * role-first shape — and a test that knows a dialog's base knows its title's
14500
+ * id without being told separately, which is the point: dialogs raised
14501
+ * through one generic error path are otherwise indistinguishable by id, and
14502
+ * the only remaining handle is a match on their prose.
14503
+ *
14504
+ * There is no id when there is no title: the heading is not rendered at all
14505
+ * (see the template), so nothing is left behind to select.
14506
+ */
14507
+ protected titleTestId: Signal<(string | number | null | undefined)[]>;
14476
14508
  /** Stable id for the title heading, referenced by the dialog's aria-labelledby. */
14477
14509
  readonly titleId: string;
14478
14510
  isFullscreen: _angular_core.WritableSignal<boolean>;