@forgeroute/ui 0.4.34 → 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/fesm2022/forgeroute-ui.mjs +506 -151
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +115 -1
package/package.json
CHANGED
package/types/forgeroute-ui.d.ts
CHANGED
|
@@ -2583,6 +2583,8 @@ export declare class TooltipDirective {
|
|
|
2583
2583
|
private readonly host;
|
|
2584
2584
|
private readonly doc;
|
|
2585
2585
|
private bubble;
|
|
2586
|
+
/** The host's own `aria-describedby` (e.g. an error id) before the tooltip was added, put back when it closes. */
|
|
2587
|
+
private previousDescribedBy;
|
|
2586
2588
|
private readonly id;
|
|
2587
2589
|
constructor();
|
|
2588
2590
|
protected show(): void;
|
|
@@ -4346,6 +4348,94 @@ export declare class ImportSourceGridComponent {
|
|
|
4346
4348
|
"sourceSelect": "sourceSelect";
|
|
4347
4349
|
}, never, never, true, never>;
|
|
4348
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
|
+
}
|
|
4349
4439
|
export interface ActiveConfirm {
|
|
4350
4440
|
title: string;
|
|
4351
4441
|
message: string;
|
|
@@ -11167,6 +11257,11 @@ export interface SetupIntegration {
|
|
|
11167
11257
|
/** The "Connected — …" detail built from the status payload (default: just "Connected"). */
|
|
11168
11258
|
connectedDetail?: (status: Record<string, unknown>) => string;
|
|
11169
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;
|
|
11170
11265
|
}
|
|
11171
11266
|
/** Texts of the built-in controls; every one has an English default and every one can be replaced by the app. */
|
|
11172
11267
|
export interface SetupWizardTexts {
|
|
@@ -11237,6 +11332,9 @@ export interface SetupStep {
|
|
|
11237
11332
|
* template receives the wizard as `let-wizard` and calls `wizard.saveAndContinue()` (runs `save`, then moves on) and reads `wizard.busy()`.
|
|
11238
11333
|
* Back / Skip stay the wizard's.
|
|
11239
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;
|
|
11240
11338
|
ownActions?: boolean;
|
|
11241
11339
|
import?: SetupImportStep;
|
|
11242
11340
|
integrations?: SetupIntegration[];
|
|
@@ -11341,6 +11439,10 @@ export declare class SetupWizardComponent {
|
|
|
11341
11439
|
private readonly http;
|
|
11342
11440
|
private readonly apiBase;
|
|
11343
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>;
|
|
11344
11446
|
/** The steps in walking order. A `done` summary step is appended automatically. */
|
|
11345
11447
|
readonly steps: import("@angular/core").InputSignal<SetupStep[]>;
|
|
11346
11448
|
/** Replaces any of the built-in texts. */
|
|
@@ -11353,6 +11455,8 @@ export declare class SetupWizardComponent {
|
|
|
11353
11455
|
readonly stepChange: import("@angular/core").OutputEmitterRef<string>;
|
|
11354
11456
|
protected readonly stepTemplates: import("@angular/core").Signal<readonly SetupWizardStepDirective[]>;
|
|
11355
11457
|
protected readonly headerTemplates: import("@angular/core").Signal<readonly SetupWizardStepHeaderDirective[]>;
|
|
11458
|
+
private readonly injector;
|
|
11459
|
+
private readonly stepTitle;
|
|
11356
11460
|
protected readonly importers: import("@angular/core").Signal<readonly ImportExportComponent[]>;
|
|
11357
11461
|
protected readonly t: import("@angular/core").Signal<SetupWizardTexts>;
|
|
11358
11462
|
protected readonly currentKey: import("@angular/core").WritableSignal<string>;
|
|
@@ -11414,6 +11518,7 @@ export declare class SetupWizardComponent {
|
|
|
11414
11518
|
protected isConnected(i: SetupIntegration): boolean;
|
|
11415
11519
|
protected detailFor(i: SetupIntegration): string;
|
|
11416
11520
|
protected connect(i: SetupIntegration): void;
|
|
11521
|
+
private startConnect;
|
|
11417
11522
|
/** SVG path of a library icon (the buttons' leading / trailing glyph). */
|
|
11418
11523
|
protected iconD(name: string): string;
|
|
11419
11524
|
protected areaCodeLabelFor(i: SetupIntegration): string;
|
|
@@ -11490,6 +11595,8 @@ export interface EmailTemplateVariable {
|
|
|
11490
11595
|
key: string;
|
|
11491
11596
|
label: string;
|
|
11492
11597
|
example: string;
|
|
11598
|
+
/** Optional one-line explanation of what the variable is filled with; shown under the example. */
|
|
11599
|
+
description?: string;
|
|
11493
11600
|
}
|
|
11494
11601
|
export interface EmailTemplateVariableGroup {
|
|
11495
11602
|
name: string;
|
|
@@ -11672,9 +11779,16 @@ export declare class EmailTemplateEditorComponent {
|
|
|
11672
11779
|
readonly nameErrorShown: import("@angular/core").Signal<string>;
|
|
11673
11780
|
readonly subjectErrorShown: import("@angular/core").Signal<string>;
|
|
11674
11781
|
readonly bodyErrorShown: import("@angular/core").Signal<string>;
|
|
11782
|
+
/** A template must be assigned to at least one automation (only in an app that offers assignments at all). */
|
|
11783
|
+
readonly assignmentError: import("@angular/core").Signal<"" | "Assign this template to at least one automation.">;
|
|
11784
|
+
/** True once the user has changed an assignment (or tried to save), so the message never shows on a page nobody has touched yet. */
|
|
11785
|
+
readonly assignmentsTouched: import("@angular/core").WritableSignal<boolean>;
|
|
11786
|
+
readonly assignmentErrorShown: import("@angular/core").Signal<"" | "Assign this template to at least one automation.">;
|
|
11675
11787
|
readonly canSave: import("@angular/core").Signal<boolean>;
|
|
11676
|
-
/** Save is offered to members who can write
|
|
11788
|
+
/** Save is offered to members who can write and stays disabled until every rule passes: a name, a subject, a message with some design (text or an image) and at least one assignment. */
|
|
11677
11789
|
readonly saveDisabled: import("@angular/core").Signal<boolean>;
|
|
11790
|
+
/** What is still missing, shown as the tooltip of the disabled Save button ('' when Save is available or the member cannot write). */
|
|
11791
|
+
readonly saveHint: import("@angular/core").Signal<string>;
|
|
11678
11792
|
private normalizedLink;
|
|
11679
11793
|
/** Why Insert is disabled: nothing for an empty field, a message for an address that is not a link. */
|
|
11680
11794
|
readonly linkUrlError: import("@angular/core").Signal<"" | "Enter a valid email address." | "Enter a valid web address, like https://example.com.">;
|