@forgeroute/ui 0.4.6 → 0.4.7

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.6",
3
+ "version": "0.4.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -1812,7 +1812,7 @@ export declare class SidePanelComponent implements OnDestroy {
1812
1812
  readonly cancelLabel: import("@angular/core").InputSignal<string>;
1813
1813
  /** Right-aligned primary action button label. Empty string = hidden. */
1814
1814
  readonly primaryLabel: import("@angular/core").InputSignal<string>;
1815
- readonly primaryVariant: import("@angular/core").InputSignal<"primary" | "danger" | "warning">;
1815
+ readonly primaryVariant: import("@angular/core").InputSignal<"warning" | "danger" | "primary">;
1816
1816
  readonly primaryLoading: import("@angular/core").InputSignal<boolean>;
1817
1817
  readonly primaryDisabled: import("@angular/core").InputSignal<boolean>;
1818
1818
  /** `data-testid` of the Cancel button; none when empty (default). */
@@ -3343,7 +3343,7 @@ export declare class ButtonComponent {
3343
3343
  * `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
3344
3344
  * background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
3345
3345
  */
3346
- readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "danger" | "warning" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3346
+ readonly variant: import("@angular/core").InputSignal<"warning" | "danger" | "primary" | "secondary" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3347
3347
  /** Renders an anchor to this route instead of a button (use with `variant="link"` for an inline text link). `['/settings']` or `'/settings'`. While `disabled` or `loading` it renders a non-clickable `<span role="link" aria-disabled>` with no href (like `href`). */
3348
3348
  readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
3349
3349
  /** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
@@ -3746,7 +3746,7 @@ export declare class BulkMessagePanelComponent {
3746
3746
  readonly sending: import("@angular/core").InputSignal<boolean>;
3747
3747
  readonly closed: import("@angular/core").OutputEmitterRef<void>;
3748
3748
  readonly send: import("@angular/core").OutputEmitterRef<BulkMessageSendEvent>;
3749
- readonly channel: import("@angular/core").WritableSignal<"text" | "email">;
3749
+ readonly channel: import("@angular/core").WritableSignal<"email" | "text">;
3750
3750
  private readonly _subject;
3751
3751
  private readonly _body;
3752
3752
  get subject(): string;
@@ -3895,7 +3895,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
3895
3895
  * Meant for a short mark of 1-3 characters.
3896
3896
  */
3897
3897
  readonly prefix: import("@angular/core").InputSignal<string>;
3898
- readonly type: import("@angular/core").InputSignal<"number" | "text" | "email" | "tel" | "password" | "url">;
3898
+ readonly type: import("@angular/core").InputSignal<"number" | "tel" | "email" | "text" | "password" | "url">;
3899
3899
  readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
3900
3900
  readonly required: import("@angular/core").InputSignal<boolean>;
3901
3901
  readonly autocomplete: import("@angular/core").InputSignal<string>;
@@ -3904,7 +3904,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
3904
3904
  * `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
3905
3905
  * It only picks the keyboard; it does not restrict what can be typed or pasted.
3906
3906
  */
3907
- readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "email" | "tel" | "url" | "decimal" | "numeric">;
3907
+ readonly inputmode: import("@angular/core").InputSignal<"" | "tel" | "email" | "none" | "text" | "search" | "url" | "decimal" | "numeric">;
3908
3908
  readonly readonly: import("@angular/core").InputSignal<boolean>;
3909
3909
  readonly hint: import("@angular/core").InputSignal<string>;
3910
3910
  readonly error: import("@angular/core").InputSignal<string>;
@@ -5345,7 +5345,7 @@ export declare class FormSectionComponent {
5345
5345
  }, {}, never, ["*"], true, never>;
5346
5346
  }
5347
5347
  export declare class FormRowComponent {
5348
- readonly cols: import("@angular/core").InputSignal<1 | 2 | 3>;
5348
+ readonly cols: import("@angular/core").InputSignal<1 | 2 | 3 | 4>;
5349
5349
  static ɵfac: i0.ɵɵFactoryDeclaration<FormRowComponent, never>;
5350
5350
  static ɵcmp: i0.ɵɵComponentDeclaration<FormRowComponent, "ui-form-row", never, {
5351
5351
  "cols": {
@@ -5362,7 +5362,7 @@ export declare class FormRowComponent {
5362
5362
  * child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
5363
5363
  */
5364
5364
  export declare class FormColSpanDirective {
5365
- readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" | 2 | 3 | "all">;
5365
+ readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "2" | "3" | "all">;
5366
5366
  protected readonly _class: import("@angular/core").Signal<string>;
5367
5367
  static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
5368
5368
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
@@ -5965,6 +5965,12 @@ export interface PanelInfoSection {
5965
5965
  export declare class PanelInfoListComponent {
5966
5966
  readonly sections: import("@angular/core").InputSignal<PanelInfoSection[]>;
5967
5967
  readonly showEmptyState: import("@angular/core").InputSignal<boolean>;
5968
+ /**
5969
+ * true = each row reads "Label: value" (a colon after the label and a real space, so `textContent` is "Label: value") with the value
5970
+ * next to the label instead of pushed to the right edge. Works with plain values, links (href / email / phone / link) and badges.
5971
+ * Default false = the label and value as before.
5972
+ */
5973
+ readonly labelColon: import("@angular/core").InputSignal<boolean>;
5968
5974
  readonly displaySections: import("@angular/core").Signal<PanelInfoSection[]>;
5969
5975
  /**
5970
5976
  * The safe href of an item, or null: `href` first, else `mailto:`/`tel:` built from `email`/`phone`. Only mailto, tel, http and https
@@ -5987,6 +5993,11 @@ export declare class PanelInfoListComponent {
5987
5993
  "required": false;
5988
5994
  "isSignal": true;
5989
5995
  };
5996
+ "labelColon": {
5997
+ "alias": "labelColon";
5998
+ "required": false;
5999
+ "isSignal": true;
6000
+ };
5990
6001
  }, {}, never, never, true, never>;
5991
6002
  }
5992
6003
  /**
@@ -6393,7 +6404,7 @@ export declare class IconComponent {
6393
6404
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
6394
6405
  /** Icon size in px. */
6395
6406
  readonly size: import("@angular/core").InputSignal<number>;
6396
- readonly variant: import("@angular/core").InputSignal<"danger" | "default">;
6407
+ readonly variant: import("@angular/core").InputSignal<"default" | "danger">;
6397
6408
  readonly disabled: import("@angular/core").InputSignal<boolean>;
6398
6409
  /** The host is running the request this icon started: a spinner replaces the picture and the button is disabled (no click) until it is false again. */
6399
6410
  readonly loading: import("@angular/core").InputSignal<boolean>;
@@ -6451,23 +6462,36 @@ export declare class IconComponent {
6451
6462
  }, never, never, true, never>;
6452
6463
  }
6453
6464
  export type TimelineTone = 'default' | 'success' | 'warning' | 'danger';
6465
+ /** A badge of a timeline item. `tooltip` shows on hover and keyboard focus (the badge becomes focusable); `testId` is its `data-testid`. */
6466
+ export interface TimelineBadge {
6467
+ label: string;
6468
+ variant: BadgeVariant;
6469
+ tooltip?: string;
6470
+ testId?: string;
6471
+ }
6454
6472
  export interface TimelineItem {
6455
6473
  /** Stable id used for `track`; the index is used when absent. */
6456
6474
  id?: string;
6475
+ /** `data-testid` of the `<li>`. */
6476
+ testId?: string;
6457
6477
  title: string;
6458
6478
  description?: string;
6459
6479
  /** Pre-formatted time text shown to the reader, e.g. "Oct 20, 2026, 3:15 PM". */
6460
6480
  time?: string;
6461
6481
  /** ISO date / date-time for the `datetime` attribute of the `<time>` element (machine-readable). */
6462
6482
  dateTime?: string;
6463
- badge?: {
6464
- label: string;
6465
- variant: BadgeVariant;
6466
- };
6483
+ badge?: TimelineBadge;
6484
+ /** Any number of badges, shown after `badge` (if also set), in order. They wrap onto the next line when the row is narrow. */
6485
+ badges?: TimelineBadge[];
6467
6486
  /** Icon drawn inside the dot (static, decorative). Unknown names draw nothing. */
6468
6487
  icon?: IconName | (string & {});
6469
6488
  /** Colour of the dot / icon. Default `default`. */
6470
6489
  tone?: TimelineTone;
6490
+ /**
6491
+ * Colours the dot / icon with a badge colour (any `BadgeVariant`): the solid dot is the badge's own dark shade (`BADGE_VARIANT_STYLES[v].color`,
6492
+ * at least 3:1 on white, so the dot and a white icon on it are readable). Overrides `tone`; without it `tone` works as before.
6493
+ */
6494
+ dotVariant?: BadgeVariant;
6471
6495
  }
6472
6496
  /**
6473
6497
  * Vertical activity feed: an ordered list of events joined by a line, each with a dot (or icon), title, optional badge,
@@ -6487,6 +6511,12 @@ export declare class TimelineComponent {
6487
6511
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
6488
6512
  /** Shown (as a hint) when there are no items. Empty = render nothing. */
6489
6513
  readonly emptyMessage: import("@angular/core").InputSignal<string>;
6514
+ /** Any CSS length (e.g. `600px`). When set, the list scrolls inside a keyboard-focusable region of at most this height. Empty = no wrapper. */
6515
+ readonly maxHeight: import("@angular/core").InputSignal<string>;
6516
+ /** `below` (default): the time is under the title / description. `end`: the time sits right-aligned on the title row. */
6517
+ readonly timePosition: import("@angular/core").InputSignal<"below" | "end">;
6518
+ /** Solid dot colour of an item's `dotVariant`, or null (then `tone` colours it). */
6519
+ dotColor(item: TimelineItem): string | null;
6490
6520
  static ɵfac: i0.ɵɵFactoryDeclaration<TimelineComponent, never>;
6491
6521
  static ɵcmp: i0.ɵɵComponentDeclaration<TimelineComponent, "ui-timeline", never, {
6492
6522
  "items": {
@@ -6504,6 +6534,16 @@ export declare class TimelineComponent {
6504
6534
  "required": false;
6505
6535
  "isSignal": true;
6506
6536
  };
6537
+ "maxHeight": {
6538
+ "alias": "maxHeight";
6539
+ "required": false;
6540
+ "isSignal": true;
6541
+ };
6542
+ "timePosition": {
6543
+ "alias": "timePosition";
6544
+ "required": false;
6545
+ "isSignal": true;
6546
+ };
6507
6547
  }, {}, never, never, true, never>;
6508
6548
  }
6509
6549
  /**
@@ -7447,7 +7487,7 @@ export declare class PdfHotspotComponent {
7447
7487
  /** `ready`: clickable; `blocked`: disabled (a prerequisite is missing); `signed`: shows `image`. */
7448
7488
  readonly state: import("@angular/core").InputSignal<"ready" | "blocked" | "signed">;
7449
7489
  /** `warning` gives the ready state an amber look (e.g. for initials), default is blue. */
7450
- readonly tone: import("@angular/core").InputSignal<"primary" | "warning">;
7490
+ readonly tone: import("@angular/core").InputSignal<"warning" | "primary">;
7451
7491
  /** Text of the ready button (e.g. "Sign Here"). */
7452
7492
  readonly label: import("@angular/core").InputSignal<string>;
7453
7493
  /** Text of the blocked button (e.g. "Add signature above"). */
@@ -7565,7 +7605,7 @@ export declare class DetailCardComponent {
7565
7605
  /** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
7566
7606
  readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
7567
7607
  /** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
7568
- readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
7608
+ readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 6 | 5 | null>;
7569
7609
  /** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
7570
7610
  readonly titleId: import("@angular/core").InputSignal<string>;
7571
7611
  /** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */