@forgeroute/ui 0.4.52 → 0.4.54

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.52",
3
+ "version": "0.4.54",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -115,7 +115,7 @@ export declare class TemplatePickerComponent {
115
115
  private readonly host;
116
116
  private readonly search$;
117
117
  /** Filter results to a specific channel: 'email', 'text', or omit for all. */
118
- readonly channel: import("@angular/core").InputSignal<"" | "text" | "email">;
118
+ readonly channel: import("@angular/core").InputSignal<"" | "email" | "text">;
119
119
  readonly selectedId: import("@angular/core").InputSignal<string | null>;
120
120
  readonly label: import("@angular/core").InputSignal<string>;
121
121
  /** Shows the red required asterisk (same as the library inputs) — e.g. when a template must be picked to send. */
@@ -543,7 +543,7 @@ export declare class DocumentSendOptionsComponent implements UiFieldValidity {
543
543
  /** API root from FORGEROUTE_CONFIG (e.g. a cross-origin prod API); falls back to same-origin `/api`. */
544
544
  private readonly apiBase;
545
545
  /** `email` → purpose select + attachment allowed; `text` → link only (purpose fixed to e-signature). */
546
- readonly channel: import("@angular/core").InputSignal<"text" | "email">;
546
+ readonly channel: import("@angular/core").InputSignal<"email" | "text">;
547
547
  readonly label: import("@angular/core").InputSignal<string>;
548
548
  /** When true, at least one document must be chosen. The message forms leave it false: documents are optional there. */
549
549
  readonly required: import("@angular/core").InputSignal<boolean>;
@@ -608,7 +608,7 @@ export declare class DocumentSendOptionsComponent implements UiFieldValidity {
608
608
  /** Roles of documents whose row had no `signerRoles` and that the host resolves (`signers().resolveRoles`). */
609
609
  readonly roleStates: import("@angular/core").WritableSignal<Record<string, RoleState>>;
610
610
  /** The envelope's documents: `loading` / `error` while the panel reads them (`loadDocuments`), `ready` once known. */
611
- readonly envelopeStatus: import("@angular/core").WritableSignal<"error" | "loading" | "ready" | "idle">;
611
+ readonly envelopeStatus: import("@angular/core").WritableSignal<"idle" | "loading" | "ready" | "error">;
612
612
  private envelopeSub;
613
613
  private readonly roleSubs;
614
614
  /** The sender opened the collapsed "Signing options" line. */
@@ -1997,7 +1997,7 @@ export declare class SendMessagePanelComponent {
1997
1997
  readonly activeContact: import("@angular/core").WritableSignal<MessageContact | null>;
1998
1998
  /** What the sender should know about the picked contact before sending (why a channel is missing, what to add). */
1999
1999
  readonly contactNotices: import("@angular/core").Signal<string[]>;
2000
- readonly channel: import("@angular/core").WritableSignal<"text" | "email">;
2000
+ readonly channel: import("@angular/core").WritableSignal<"email" | "text">;
2001
2001
  readonly valid: import("@angular/core").WritableSignal<boolean>;
2002
2002
  /** Bumped on every fresh open / new contact — re-creates the email and text forms so no draft carries over. */
2003
2003
  readonly formEpoch: import("@angular/core").WritableSignal<number>;
@@ -1300,7 +1300,7 @@ export declare class StripeConnectComponent {
1300
1300
  readonly navigateTab: import("@angular/core").InputSignal<((url: string) => void) | null>;
1301
1301
  protected readonly visible: import("@angular/core").Signal<boolean>;
1302
1302
  /** Which screen the card shows. */
1303
- protected readonly state: import("@angular/core").Signal<"complete" | "verifying" | "incomplete" | "none">;
1303
+ protected readonly state: import("@angular/core").Signal<"none" | "complete" | "verifying" | "incomplete">;
1304
1304
  /** What the persistent status region says: the current state, plus "Loading." while a request runs. Empty while nothing is shown. */
1305
1305
  protected readonly liveText: import("@angular/core").Signal<string>;
1306
1306
  /** The user pressed a button that started a request: when the screen then changes, focus moves to the new screen (the pressed button is gone). */
@@ -1424,6 +1424,8 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
1424
1424
  * tabs are all off, the header row is not rendered at all.
1425
1425
  */
1426
1426
  readonly showQuickTabs: import("@angular/core").InputSignal<boolean>;
1427
+ /** `false` hides the pager under the rows: the table shows only the first `pageSize` rows (a dashboard card that links to the full list instead). Default `true`. */
1428
+ readonly showPagination: import("@angular/core").InputSignal<boolean>;
1427
1429
  /**
1428
1430
  * Keep the Actions column (the row "⋮" menu) pinned to the right edge while the table scrolls sideways, so a wide table never hides it
1429
1431
  * off-screen. Default false: every existing table is unchanged. Only matters when the table is wider than its container (columns scroll);
@@ -1998,6 +2000,11 @@ export declare class DataTableComponent<T extends Record<string, any>> implement
1998
2000
  "required": false;
1999
2001
  "isSignal": true;
2000
2002
  };
2003
+ "showPagination": {
2004
+ "alias": "showPagination";
2005
+ "required": false;
2006
+ "isSignal": true;
2007
+ };
2001
2008
  "stickyActions": {
2002
2009
  "alias": "stickyActions";
2003
2010
  "required": false;
@@ -5144,7 +5151,7 @@ export declare class TextareaInputComponent implements ControlValueAccessor, Val
5144
5151
  };
5145
5152
  }, {
5146
5153
  "invalidChange": "invalidChange";
5147
- }, never, never, true, never>;
5154
+ }, never, ["[uiLabelEnd]"], true, never>;
5148
5155
  }
5149
5156
  export type TextSize = 'sm' | 'md' | 'lg';
5150
5157
  export type TextTone = 'default' | 'muted' | 'accent';
@@ -6361,6 +6368,8 @@ export declare class TextTemplatePickerComponent {
6361
6368
  protected readonly _matches: import("@angular/core").Signal<TextTemplateVariable[]>;
6362
6369
  /** Display rows: group headers (when variables carry a `group`) followed by their options, each option numbered for keyboard navigation. */
6363
6370
  protected readonly _rows: import("@angular/core").Signal<Row$1[]>;
6371
+ /** The highlighted row, kept inside the current matches (the list can shrink while open). */
6372
+ protected readonly _activeIndex: import("@angular/core").Signal<number>;
6364
6373
  protected readonly _activeId: import("@angular/core").Signal<string | null>;
6365
6374
  protected readonly _status: import("@angular/core").Signal<string>;
6366
6375
  protected toggle(): void;
@@ -6368,6 +6377,8 @@ export declare class TextTemplatePickerComponent {
6368
6377
  private openList;
6369
6378
  /** Measures the trigger against the viewport: the list goes below it, or above when the room below is smaller, and never grows past the room it has. */
6370
6379
  private place;
6380
+ /** A click on the list's chrome (a group header, the empty text, the padding) must not take the focus from the search box: the keys and Escape depend on it. */
6381
+ protected onPanelMouseDown(event: MouseEvent): void;
6371
6382
  protected onQuery(value: string): void;
6372
6383
  protected onSearchKey(event: KeyboardEvent): void;
6373
6384
  protected pick(variable: TextTemplateVariable): void;
@@ -6376,9 +6387,12 @@ export declare class TextTemplatePickerComponent {
6376
6387
  private close;
6377
6388
  private scrollActive;
6378
6389
  protected onDocumentClick(event: Event): void;
6379
- /** A fixed list would drift from its button when the page resizes (or scrolls, see onAnyScroll); close it instead. */
6390
+ /** The list is fixed to the screen, so it is placed again when the page resizes or scrolls (also the soft keyboard of a phone moves the viewport, which must not close it); it closes only once its button has left the screen. */
6380
6391
  protected onResize(): void;
6381
6392
  private readonly onAnyScroll;
6393
+ private readonly onViewport;
6394
+ private unlisten;
6395
+ private follow;
6382
6396
  static ɵfac: i0.ɵɵFactoryDeclaration<TextTemplatePickerComponent, never>;
6383
6397
  static ɵcmp: i0.ɵɵComponentDeclaration<TextTemplatePickerComponent, "ui-text-template-picker", never, {
6384
6398
  "variables": {
@@ -6734,6 +6748,8 @@ export declare class CardListItemComponent {
6734
6748
  readonly indicator: import("@angular/core").InputSignal<CardListIndicator>;
6735
6749
  /** Round icon on the left (wins over `indicator`). */
6736
6750
  readonly icon: import("@angular/core").InputSignal<CardListIcon | undefined>;
6751
+ /** A type badge or a status badge (with its variant) shows: they sit in the card's upper right corner. */
6752
+ protected readonly hasBadges: import("@angular/core").Signal<boolean>;
6737
6753
  /** Built-in "Edit" chip button -> `editClick`. */
6738
6754
  readonly editButton: import("@angular/core").InputSignal<boolean>;
6739
6755
  /** Built-in "View" chip button -> `viewClick`. */
@@ -11849,7 +11865,7 @@ export declare function splitIntro(description: string): {
11849
11865
  export declare const SETUP_DONE_KEY = "done";
11850
11866
  /**
11851
11867
  * `ui-setup-wizard` — the first-run setup wizard every app plugs into. A left stepper with progress, one step at a time on the right, Back / Skip /
11852
- * Save & Continue, and a final summary. The app gives it the list of steps (in the order that user type walks them) and the wording; the library
11868
+ * Save & Continue, and a final summary. The sidebar only reopens an earlier step; later steps and the summary are reached with Continue / Skip. The app gives it the list of steps (in the order that user type walks them) and the wording; the library
11853
11869
  * does the rest:
11854
11870
  *
11855
11871
  * - `kind: 'import'` steps open the library import window (CSV, pasted data, competitor sources) and show the result;
@@ -11944,6 +11960,8 @@ export declare class SetupWizardComponent {
11944
11960
  protected templateFor(key: string): import("@angular/core").TemplateRef<{
11945
11961
  $implicit: SetupWizardApi;
11946
11962
  }> | null;
11963
+ /** The sidebar only reopens a step BEFORE the current one (to look at it again); a later step is reached with Continue or Skip. */
11964
+ protected goToPast(key: string): void;
11947
11965
  protected goTo(key: string): void;
11948
11966
  private enter;
11949
11967
  private advanceFrom;