@forgeroute/ui 0.4.32 → 0.4.33

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.32",
3
+ "version": "0.4.33",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -1999,7 +1999,7 @@ export declare class SidePanelComponent implements OnDestroy {
1999
1999
  readonly cancelLabel: import("@angular/core").InputSignal<string>;
2000
2000
  /** Right-aligned primary action button label. Empty string = hidden. */
2001
2001
  readonly primaryLabel: import("@angular/core").InputSignal<string>;
2002
- readonly primaryVariant: import("@angular/core").InputSignal<"primary" | "danger" | "warning">;
2002
+ readonly primaryVariant: import("@angular/core").InputSignal<"danger" | "warning" | "primary">;
2003
2003
  readonly primaryLoading: import("@angular/core").InputSignal<boolean>;
2004
2004
  readonly primaryDisabled: import("@angular/core").InputSignal<boolean>;
2005
2005
  /** `data-testid` of the Cancel button; none when empty (default). */
@@ -2741,7 +2741,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
2741
2741
  * clicking it still toggles the box - e.g. a product name that is both the heading of its card and the label of its checkbox.
2742
2742
  * Default null: plain label text, exactly as before. Single mode only.
2743
2743
  */
2744
- readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
2744
+ readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 6 | 3 | 5 | 4 | null>;
2745
2745
  readonly indeterminate: import("@angular/core").InputSignal<boolean>;
2746
2746
  readonly checked: import("@angular/core").ModelSignal<boolean>;
2747
2747
  /**
@@ -3139,7 +3139,7 @@ export declare class StepperComponent {
3139
3139
  * its circle, one continuous line behind the circles that fills as steps complete; a complete step shows a check, the current step an
3140
3140
  * accent ring with a dot, an upcoming step an empty circle (no numbers). Circles are 40px (32px with `size="sm"`).
3141
3141
  */
3142
- readonly labelPosition: import("@angular/core").InputSignal<"beside" | "below">;
3142
+ readonly labelPosition: import("@angular/core").InputSignal<"below" | "beside">;
3143
3143
  /** Viewport width in px below which a horizontal stepper is drawn vertical (labels beside the circles), e.g. `640`. null (default) = never. */
3144
3144
  readonly stackBelow: import("@angular/core").InputSignal<number | null>;
3145
3145
  /** CSS length (e.g. `10.5rem`): horizontal only - the list gets `min-width: calc(<step count> * <value>)`. Empty (default) = no minimum. */
@@ -3766,7 +3766,7 @@ export declare class ButtonComponent {
3766
3766
  * `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
3767
3767
  * background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
3768
3768
  */
3769
- readonly variant: import("@angular/core").InputSignal<"primary" | "secondary" | "danger" | "warning" | "link" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
3769
+ readonly variant: import("@angular/core").InputSignal<"link" | "danger" | "icon" | "warning" | "primary" | "secondary" | "ghost" | "ghost-start" | "tab" | "icon-danger">;
3770
3770
  /** 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`). */
3771
3771
  readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
3772
3772
  /** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
@@ -3941,10 +3941,31 @@ export declare class ButtonComponent {
3941
3941
  };
3942
3942
  }, {}, never, ["*"], true, never>;
3943
3943
  }
3944
+ /** A small icon button shown inside a toggle badge, after the label (e.g. Configure, Analytics). */
3945
+ export interface ToggleBadgeAction {
3946
+ /** Emitted by `(action)` when the button is clicked. */
3947
+ id: string;
3948
+ /** Accessible name of the button (also used as the tooltip when `tooltip` is empty). */
3949
+ label: string;
3950
+ /** SVG path data (`d`) of a 24x24 stroked icon. Several shapes can be joined in one string (`M..M..`). */
3951
+ icon: string;
3952
+ /** Text of the hover / focus tooltip. */
3953
+ tooltip?: string;
3954
+ disabled?: boolean;
3955
+ }
3956
+ /**
3957
+ * Pill that toggles on / off. Optional `actions` put small icon buttons INSIDE the pill, after the label and a divider, each with its own
3958
+ * tooltip; the label button and the icon buttons are separate buttons (never nested). Clicking an icon button emits `(action)` with its id and
3959
+ * never `(toggle)`. Content projected into the component (an icon) goes before the label, as before.
3960
+ */
3944
3961
  export declare class ToggleBadgeComponent {
3945
3962
  readonly label: import("@angular/core").InputSignal<string>;
3946
3963
  readonly active: import("@angular/core").InputSignal<boolean>;
3964
+ /** Icon buttons shown inside the pill after the label. Empty (default) = a plain pill, exactly as before. */
3965
+ readonly actions: import("@angular/core").InputSignal<ToggleBadgeAction[]>;
3947
3966
  readonly toggle: import("@angular/core").OutputEmitterRef<void>;
3967
+ /** An icon button was clicked: its `id`. Never emits `toggle`. */
3968
+ readonly action: import("@angular/core").OutputEmitterRef<string>;
3948
3969
  static ɵfac: i0.ɵɵFactoryDeclaration<ToggleBadgeComponent, never>;
3949
3970
  static ɵcmp: i0.ɵɵComponentDeclaration<ToggleBadgeComponent, "ui-toggle-badge", never, {
3950
3971
  "label": {
@@ -3957,8 +3978,14 @@ export declare class ToggleBadgeComponent {
3957
3978
  "required": false;
3958
3979
  "isSignal": true;
3959
3980
  };
3981
+ "actions": {
3982
+ "alias": "actions";
3983
+ "required": false;
3984
+ "isSignal": true;
3985
+ };
3960
3986
  }, {
3961
3987
  "toggle": "toggle";
3988
+ "action": "action";
3962
3989
  }, never, ["*"], true, never>;
3963
3990
  }
3964
3991
  export interface PillTab {
@@ -4207,7 +4234,7 @@ export declare class BulkMessagePanelComponent {
4207
4234
  readonly sending: import("@angular/core").InputSignal<boolean>;
4208
4235
  readonly closed: import("@angular/core").OutputEmitterRef<void>;
4209
4236
  readonly send: import("@angular/core").OutputEmitterRef<BulkMessageSendEvent>;
4210
- readonly channel: import("@angular/core").WritableSignal<"text" | "email">;
4237
+ readonly channel: import("@angular/core").WritableSignal<"email" | "text">;
4211
4238
  private readonly _subject;
4212
4239
  private readonly _body;
4213
4240
  get subject(): string;
@@ -4483,7 +4510,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4483
4510
  readonly passwordRequirements: import("@angular/core").InputSignal<boolean>;
4484
4511
  /** Rules for `passwordRequirements`; default = the library's five rules (8+ characters, upper, lower, digit, special). */
4485
4512
  readonly passwordRules: import("@angular/core").InputSignal<readonly PasswordRule[] | undefined>;
4486
- readonly type: import("@angular/core").InputSignal<"number" | "text" | "email" | "tel" | "password" | "url">;
4513
+ readonly type: import("@angular/core").InputSignal<"number" | "email" | "text" | "password" | "tel" | "url">;
4487
4514
  readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
4488
4515
  readonly required: import("@angular/core").InputSignal<boolean>;
4489
4516
  readonly autocomplete: import("@angular/core").InputSignal<string>;
@@ -4492,7 +4519,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4492
4519
  * `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
4493
4520
  * It only picks the keyboard; it does not restrict what can be typed or pasted.
4494
4521
  */
4495
- readonly inputmode: import("@angular/core").InputSignal<"" | "none" | "text" | "search" | "email" | "tel" | "url" | "decimal" | "numeric">;
4522
+ readonly inputmode: import("@angular/core").InputSignal<"" | "email" | "none" | "text" | "tel" | "url" | "decimal" | "numeric" | "search">;
4496
4523
  readonly readonly: import("@angular/core").InputSignal<boolean>;
4497
4524
  readonly hint: import("@angular/core").InputSignal<string>;
4498
4525
  readonly error: import("@angular/core").InputSignal<string>;
@@ -4556,7 +4583,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
4556
4583
  protected readonly _stepAttr: import("@angular/core").Signal<string | null>;
4557
4584
  protected readonly _revealable: import("@angular/core").Signal<boolean>;
4558
4585
  protected readonly _shown: import("@angular/core").WritableSignal<boolean>;
4559
- protected readonly _inputType: import("@angular/core").Signal<"number" | "text" | "email" | "tel" | "password" | "url">;
4586
+ protected readonly _inputType: import("@angular/core").Signal<"number" | "email" | "text" | "password" | "tel" | "url">;
4560
4587
  protected readonly _eyePath: string;
4561
4588
  protected readonly _eyeOffPath: string;
4562
4589
  protected readonly _showRequirements: import("@angular/core").Signal<boolean>;
@@ -6102,7 +6129,7 @@ export declare class FormRowComponent {
6102
6129
  * child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
6103
6130
  */
6104
6131
  export declare class FormColSpanDirective {
6105
- readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" | 2 | 3 | "all">;
6132
+ readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | 3 | "2" | "3" | "all">;
6106
6133
  protected readonly _class: import("@angular/core").Signal<string>;
6107
6134
  static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
6108
6135
  static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
@@ -6152,7 +6179,7 @@ export type ListItemDetail = string | {
6152
6179
  export type ListItemIconColor = 'slate' | 'amber' | 'red' | 'blue' | 'green' | 'purple' | 'teal' | 'orange';
6153
6180
  export declare class ListItemComponent {
6154
6181
  /** Show a radio button, checkbox, or nothing on the left. */
6155
- readonly leading: import("@angular/core").InputSignal<"none" | "checkbox" | "radio">;
6182
+ readonly leading: import("@angular/core").InputSignal<"radio" | "checkbox" | "none">;
6156
6183
  /** `name` attribute for the radio/checkbox (groups radios together). */
6157
6184
  readonly inputName: import("@angular/core").InputSignal<string>;
6158
6185
  /** `id` attribute for the radio/checkbox (links the label). */
@@ -7129,9 +7156,9 @@ export declare class ChipGroupComponent {
7129
7156
  /** Space between each chip. */
7130
7157
  readonly gap: import("@angular/core").InputSignal<"sm" | "md" | "lg">;
7131
7158
  /** Space above the chip group. */
7132
- readonly spaceAbove: import("@angular/core").InputSignal<"none" | "sm" | "md">;
7159
+ readonly spaceAbove: import("@angular/core").InputSignal<"sm" | "md" | "none">;
7133
7160
  /** Space below the chip group. */
7134
- readonly spaceBelow: import("@angular/core").InputSignal<"none" | "sm" | "md">;
7161
+ readonly spaceBelow: import("@angular/core").InputSignal<"sm" | "md" | "none">;
7135
7162
  protected readonly _gap: import("@angular/core").Signal<"6px" | "12px" | "8px">;
7136
7163
  protected readonly _spaceAbove: import("@angular/core").Signal<"0" | "6px" | "12px">;
7137
7164
  protected readonly _spaceBelow: import("@angular/core").Signal<"0" | "6px" | "12px">;
@@ -7436,7 +7463,7 @@ export declare class AlertComponent {
7436
7463
  /** The SVG path (24×24 stroke icon) for an icon key, or undefined when the key is unknown. */
7437
7464
  export declare function iconPath(name: string): string | undefined;
7438
7465
  /** Keys with an icon of their own (the data-table action keys are accepted too — see `builtInActionIcon`). */
7439
- export type IconName = 'add' | 'close' | 'check' | 'upload' | 'image' | 'chevron-up' | 'chevron-down' | 'arrow-left' | 'bell' | 'print' | 'lock' | 'shield' | 'arrow-up' | 'arrow-down' | 'arrow-right' | 'document' | 'grip' | 'card' | 'bank' | 'view' | 'view-off' | 'edit' | 'delete' | 'download' | 'duplicate' | 'archive' | 'restore' | 'share' | 'email' | 'message' | 'call' | 'refund' | 'chevron-right' | 'link' | 'save' | 'chart' | 'clipboard';
7466
+ export type IconName = 'add' | 'close' | 'check' | 'upload' | 'image' | 'chevron-up' | 'chevron-down' | 'arrow-left' | 'bell' | 'print' | 'lock' | 'shield' | 'arrow-up' | 'arrow-down' | 'arrow-right' | 'document' | 'grip' | 'card' | 'bank' | 'view' | 'view-off' | 'edit' | 'delete' | 'download' | 'duplicate' | 'archive' | 'restore' | 'share' | 'email' | 'message' | 'call' | 'refund' | 'chevron-right' | 'link' | 'save' | 'chart' | 'clipboard' | 'unlink' | 'send' | 'refresh';
7440
7467
  /**
7441
7468
  * A clickable icon. The host passes a key (`name="delete"`) and the library draws that icon; clicking it emits
7442
7469
  * `iconClick`, and the host does the actual work (delete the row, open a panel, …).
@@ -7463,7 +7490,7 @@ export declare class IconComponent {
7463
7490
  readonly ariaLabel: import("@angular/core").InputSignal<string>;
7464
7491
  /** Icon size in px. */
7465
7492
  readonly size: import("@angular/core").InputSignal<number>;
7466
- readonly variant: import("@angular/core").InputSignal<"danger" | "default">;
7493
+ readonly variant: import("@angular/core").InputSignal<"default" | "danger">;
7467
7494
  readonly disabled: import("@angular/core").InputSignal<boolean>;
7468
7495
  /** 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. */
7469
7496
  readonly loading: import("@angular/core").InputSignal<boolean>;
@@ -7575,7 +7602,7 @@ export declare class TimelineComponent {
7575
7602
  /** Any CSS length (e.g. `600px`). When set, the list scrolls inside a keyboard-focusable region of at most this height. Empty = no wrapper. */
7576
7603
  readonly maxHeight: import("@angular/core").InputSignal<string>;
7577
7604
  /** `below` (default): the time is under the title / description. `end`: the time sits right-aligned on the title row. */
7578
- readonly timePosition: import("@angular/core").InputSignal<"end" | "below">;
7605
+ readonly timePosition: import("@angular/core").InputSignal<"below" | "end">;
7579
7606
  /**
7580
7607
  * Group the items under a heading per calendar day of `dateTime` ("Today", "Yesterday", "Oct 3", "Oct 3, 2025"). Default false = no headings,
7581
7608
  * DOM unchanged. The given order is kept: consecutive items of one day share a heading, the same day appearing again later starts a new group.
@@ -8905,7 +8932,7 @@ export declare class PdfHotspotComponent {
8905
8932
  /** `ready`: clickable; `blocked`: disabled (a prerequisite is missing); `signed`: shows `image`. */
8906
8933
  readonly state: import("@angular/core").InputSignal<"ready" | "blocked" | "signed">;
8907
8934
  /** `warning` gives the ready state an amber look (e.g. for initials), default is blue. */
8908
- readonly tone: import("@angular/core").InputSignal<"primary" | "warning">;
8935
+ readonly tone: import("@angular/core").InputSignal<"warning" | "primary">;
8909
8936
  /** Text of the ready button (e.g. "Sign Here"). */
8910
8937
  readonly label: import("@angular/core").InputSignal<string>;
8911
8938
  /** Text of the blocked button (e.g. "Add signature above"). */
@@ -9039,7 +9066,7 @@ export declare class DetailCardComponent {
9039
9066
  /** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
9040
9067
  readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
9041
9068
  /** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
9042
- readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 3 | 4 | 5 | 6 | null>;
9069
+ readonly headingLevel: import("@angular/core").InputSignal<1 | 2 | 6 | 3 | 5 | 4 | null>;
9043
9070
  /** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
9044
9071
  readonly titleId: import("@angular/core").InputSignal<string>;
9045
9072
  /** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */