@forgeroute/ui 0.4.35 → 0.4.36

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.35",
3
+ "version": "0.4.36",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -4348,6 +4348,94 @@ export declare class ImportSourceGridComponent {
4348
4348
  "sourceSelect": "sourceSelect";
4349
4349
  }, never, never, true, never>;
4350
4350
  }
4351
+ /**
4352
+ * One option the user can pick or connect: a coloured tile (a letter, or a library icon), a title, a short description and a small action button.
4353
+ * The same card is used for the source cards of an import step, the provider cards of the setup wizard (calendar, email, tools) and a CRM
4354
+ * live-sync option, so they all look and behave alike. Anything inside the tag is shown under the row (an expanding form, a result).
4355
+ *
4356
+ * <ui-option-card title="Gmail" letter="G" color="#ea4335" description="Connect your Google account" actionLabel="Connect" (action)="connect()" />
4357
+ * <ui-option-card title="Follow Up Boss" letter="F" actionLabel="Sync live" (action)="open()"> <form>…</form> </ui-option-card>
4358
+ *
4359
+ * Inputs: `title` (required), `description`, `letter` (one character in the tile) or `icon` (a library icon name, used when there is no letter),
4360
+ * `color` (tile background, default slate), `actionLabel` (no label = no button), `actionVariant` (default secondary), `actionAriaLabel`,
4361
+ * `actionTestId`, `actionLoading`, `disabled`. Output: `action`.
4362
+ */
4363
+ export declare class OptionCardComponent {
4364
+ readonly title: import("@angular/core").InputSignal<string>;
4365
+ readonly description: import("@angular/core").InputSignal<string>;
4366
+ readonly letter: import("@angular/core").InputSignal<string>;
4367
+ readonly icon: import("@angular/core").InputSignal<string>;
4368
+ readonly color: import("@angular/core").InputSignal<string>;
4369
+ readonly actionLabel: import("@angular/core").InputSignal<string>;
4370
+ readonly actionVariant: import("@angular/core").InputSignal<"primary" | "secondary">;
4371
+ readonly actionAriaLabel: import("@angular/core").InputSignal<string>;
4372
+ readonly actionTestId: import("@angular/core").InputSignal<string>;
4373
+ readonly actionLoading: import("@angular/core").InputSignal<boolean>;
4374
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
4375
+ /** The action button was pressed. */
4376
+ readonly action: import("@angular/core").OutputEmitterRef<void>;
4377
+ protected iconD(): string | null;
4378
+ static ɵfac: i0.ɵɵFactoryDeclaration<OptionCardComponent, never>;
4379
+ static ɵcmp: i0.ɵɵComponentDeclaration<OptionCardComponent, "ui-option-card", never, {
4380
+ "title": {
4381
+ "alias": "title";
4382
+ "required": true;
4383
+ "isSignal": true;
4384
+ };
4385
+ "description": {
4386
+ "alias": "description";
4387
+ "required": false;
4388
+ "isSignal": true;
4389
+ };
4390
+ "letter": {
4391
+ "alias": "letter";
4392
+ "required": false;
4393
+ "isSignal": true;
4394
+ };
4395
+ "icon": {
4396
+ "alias": "icon";
4397
+ "required": false;
4398
+ "isSignal": true;
4399
+ };
4400
+ "color": {
4401
+ "alias": "color";
4402
+ "required": false;
4403
+ "isSignal": true;
4404
+ };
4405
+ "actionLabel": {
4406
+ "alias": "actionLabel";
4407
+ "required": false;
4408
+ "isSignal": true;
4409
+ };
4410
+ "actionVariant": {
4411
+ "alias": "actionVariant";
4412
+ "required": false;
4413
+ "isSignal": true;
4414
+ };
4415
+ "actionAriaLabel": {
4416
+ "alias": "actionAriaLabel";
4417
+ "required": false;
4418
+ "isSignal": true;
4419
+ };
4420
+ "actionTestId": {
4421
+ "alias": "actionTestId";
4422
+ "required": false;
4423
+ "isSignal": true;
4424
+ };
4425
+ "actionLoading": {
4426
+ "alias": "actionLoading";
4427
+ "required": false;
4428
+ "isSignal": true;
4429
+ };
4430
+ "disabled": {
4431
+ "alias": "disabled";
4432
+ "required": false;
4433
+ "isSignal": true;
4434
+ };
4435
+ }, {
4436
+ "action": "action";
4437
+ }, never, ["*"], true, never>;
4438
+ }
4351
4439
  export interface ActiveConfirm {
4352
4440
  title: string;
4353
4441
  message: string;
@@ -11169,6 +11257,11 @@ export interface SetupIntegration {
11169
11257
  /** The "Connected — …" detail built from the status payload (default: just "Connected"). */
11170
11258
  connectedDetail?: (status: Record<string, unknown>) => string;
11171
11259
  connect: SetupIntegrationConnect;
11260
+ /**
11261
+ * Runs when the user presses Connect, before anything else (before the redirect to the provider, or before the area-code box opens): save what the
11262
+ * step collected so the redirect does not lose it. Resolve to go on; throw / error to stop (the message is shown in the step's alert).
11263
+ */
11264
+ beforeConnect?: () => Observable<unknown> | Promise<unknown> | void;
11172
11265
  }
11173
11266
  /** Texts of the built-in controls; every one has an English default and every one can be replaced by the app. */
11174
11267
  export interface SetupWizardTexts {
@@ -11239,6 +11332,9 @@ export interface SetupStep {
11239
11332
  * template receives the wizard as `let-wizard` and calls `wizard.saveAndContinue()` (runs `save`, then moves on) and reads `wizard.busy()`.
11240
11333
  * Back / Skip stay the wizard's.
11241
11334
  */
11335
+ /** Import / integrations steps with app content: show that content in its own card (titled `extraTitle`) beside the step card on a wide screen, stacked on a phone. */
11336
+ splitLayout?: boolean;
11337
+ extraTitle?: string;
11242
11338
  ownActions?: boolean;
11243
11339
  import?: SetupImportStep;
11244
11340
  integrations?: SetupIntegration[];
@@ -11343,6 +11439,10 @@ export declare class SetupWizardComponent {
11343
11439
  private readonly http;
11344
11440
  private readonly apiBase;
11345
11441
  private readonly destroyRef;
11442
+ /** Phone layout: the step's Back / Skip / Continue buttons fill the width and stack (primary on top). */
11443
+ protected readonly narrow: import("@angular/core").WritableSignal<boolean>;
11444
+ /** A step with `splitLayout`: the app's own content gets its own card, side by side with the step card on a wide screen. */
11445
+ protected readonly split: import("@angular/core").Signal<boolean>;
11346
11446
  /** The steps in walking order. A `done` summary step is appended automatically. */
11347
11447
  readonly steps: import("@angular/core").InputSignal<SetupStep[]>;
11348
11448
  /** Replaces any of the built-in texts. */
@@ -11355,6 +11455,8 @@ export declare class SetupWizardComponent {
11355
11455
  readonly stepChange: import("@angular/core").OutputEmitterRef<string>;
11356
11456
  protected readonly stepTemplates: import("@angular/core").Signal<readonly SetupWizardStepDirective[]>;
11357
11457
  protected readonly headerTemplates: import("@angular/core").Signal<readonly SetupWizardStepHeaderDirective[]>;
11458
+ private readonly injector;
11459
+ private readonly stepTitle;
11358
11460
  protected readonly importers: import("@angular/core").Signal<readonly ImportExportComponent[]>;
11359
11461
  protected readonly t: import("@angular/core").Signal<SetupWizardTexts>;
11360
11462
  protected readonly currentKey: import("@angular/core").WritableSignal<string>;
@@ -11416,6 +11518,7 @@ export declare class SetupWizardComponent {
11416
11518
  protected isConnected(i: SetupIntegration): boolean;
11417
11519
  protected detailFor(i: SetupIntegration): string;
11418
11520
  protected connect(i: SetupIntegration): void;
11521
+ private startConnect;
11419
11522
  /** SVG path of a library icon (the buttons' leading / trailing glyph). */
11420
11523
  protected iconD(name: string): string;
11421
11524
  protected areaCodeLabelFor(i: SetupIntegration): string;
@@ -11492,6 +11595,8 @@ export interface EmailTemplateVariable {
11492
11595
  key: string;
11493
11596
  label: string;
11494
11597
  example: string;
11598
+ /** Optional one-line explanation of what the variable is filled with; shown under the example. */
11599
+ description?: string;
11495
11600
  }
11496
11601
  export interface EmailTemplateVariableGroup {
11497
11602
  name: string;