@forgeroute/ui 0.4.30 → 0.4.32

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.30",
3
+ "version": "0.4.32",
4
4
  "peerDependencies": {
5
5
  "@angular/common": ">=22.0.0",
6
6
  "@angular/core": ">=22.0.0",
@@ -4251,6 +4251,62 @@ export declare class BulkMessagePanelComponent {
4251
4251
  "send": "send";
4252
4252
  }, never, never, true, never>;
4253
4253
  }
4254
+ /**
4255
+ * The grid of source cards ("Follow Up Boss", "kvCORE", "Custom CSV" ...) of the import wizard's first step. Used inside the import window and
4256
+ * on its own (the setup wizard shows it inline so the user picks a source without opening the window first).
4257
+ *
4258
+ * <ui-import-source-grid [sources]="sources" [selected]="picked" ariaLabel="Select your Contact source" (sourceSelect)="picked = $event" />
4259
+ */
4260
+ export declare class ImportSourceGridComponent {
4261
+ readonly sources: import("@angular/core").InputSignal<ImportSource[]>;
4262
+ /** The `value` of the picked source (highlighted). `tile` only: the `card` appearance does not keep a selection. */
4263
+ readonly selected: import("@angular/core").InputSignal<string>;
4264
+ /** `tile`: the compact buttons of the import window. `card`: one `ui-detail-card` per source with its own select button (used on a page). */
4265
+ readonly appearance: import("@angular/core").InputSignal<"card" | "tile">;
4266
+ /** `card`: disables every card's button (for example while the page is saving). */
4267
+ readonly disabled: import("@angular/core").InputSignal<boolean>;
4268
+ /** `card`: the text of each card's button. */
4269
+ readonly actionLabel: import("@angular/core").InputSignal<string>;
4270
+ /** Accessible name of the list. */
4271
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
4272
+ /** Emits the `value` of the clicked source. */
4273
+ readonly sourceSelect: import("@angular/core").OutputEmitterRef<string>;
4274
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImportSourceGridComponent, never>;
4275
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImportSourceGridComponent, "ui-import-source-grid", never, {
4276
+ "sources": {
4277
+ "alias": "sources";
4278
+ "required": true;
4279
+ "isSignal": true;
4280
+ };
4281
+ "selected": {
4282
+ "alias": "selected";
4283
+ "required": false;
4284
+ "isSignal": true;
4285
+ };
4286
+ "appearance": {
4287
+ "alias": "appearance";
4288
+ "required": false;
4289
+ "isSignal": true;
4290
+ };
4291
+ "disabled": {
4292
+ "alias": "disabled";
4293
+ "required": false;
4294
+ "isSignal": true;
4295
+ };
4296
+ "actionLabel": {
4297
+ "alias": "actionLabel";
4298
+ "required": false;
4299
+ "isSignal": true;
4300
+ };
4301
+ "ariaLabel": {
4302
+ "alias": "ariaLabel";
4303
+ "required": false;
4304
+ "isSignal": true;
4305
+ };
4306
+ }, {
4307
+ "sourceSelect": "sourceSelect";
4308
+ }, never, never, true, never>;
4309
+ }
4254
4310
  export interface ActiveConfirm {
4255
4311
  title: string;
4256
4312
  message: string;
@@ -11081,6 +11137,8 @@ export interface SetupWizardTexts {
11081
11137
  exit: string;
11082
11138
  connect: string;
11083
11139
  reconnect: string;
11140
+ /** Button on each source card of an import step. */
11141
+ selectSource: string;
11084
11142
  connected: string;
11085
11143
  importMore: string;
11086
11144
  whatGetsImported: string;
@@ -11117,6 +11175,8 @@ export interface SetupStep {
11117
11175
  /** Unique within the list. */
11118
11176
  key: string;
11119
11177
  label: string;
11178
+ /** Title in the header bar of the card around the step. Omit it and the card has no header bar. */
11179
+ cardTitle?: string;
11120
11180
  /** The paragraph under the heading. */
11121
11181
  description?: string;
11122
11182
  /** `custom` shows the app's own `<ng-template uiSetupStep="key">`; `import` and `integrations` are built in. */
@@ -11129,6 +11189,12 @@ export interface SetupStep {
11129
11189
  canContinue?: () => boolean;
11130
11190
  /** `custom`: text of the continue button (default "Save & Continue"). */
11131
11191
  saveLabel?: string;
11192
+ /**
11193
+ * `custom`: the step draws its own continue button (for example in the footer of a `ui-detail-card`), so the wizard does not show its own. The step's
11194
+ * template receives the wizard as `let-wizard` and calls `wizard.saveAndContinue()` (runs `save`, then moves on) and reads `wizard.busy()`.
11195
+ * Back / Skip stay the wizard's.
11196
+ */
11197
+ ownActions?: boolean;
11132
11198
  import?: SetupImportStep;
11133
11199
  integrations?: SetupIntegration[];
11134
11200
  /** `integrations`: runs when the step is left with Continue (e.g. to save sender settings). */
@@ -11136,6 +11202,13 @@ export interface SetupStep {
11136
11202
  /** Called when the step is shown (load data for a custom step). */
11137
11203
  onEnter?: () => void;
11138
11204
  }
11205
+ /** What a custom step's template gets as `let-wizard` when the step draws its own continue button (`ownActions`). */
11206
+ export interface SetupWizardApi {
11207
+ /** Runs the step's `save` hook (and shows its error), then moves to the next step. */
11208
+ saveAndContinue(): Promise<void>;
11209
+ /** True while a save is running. */
11210
+ readonly busy: () => boolean;
11211
+ }
11139
11212
  /**
11140
11213
  * The integrations every app can offer in a setup step. The endpoints follow the convention the apps' backends already use (`GET <x>/status`,
11141
11214
  * `GET <x>/authorize` answering `{ url }`); an app whose routes differ spreads a preset and overrides what differs:
@@ -11150,11 +11223,19 @@ export declare function setupIntegrations(...keys: (keyof typeof SETUP_INTEGRATI
11150
11223
  * <ui-setup-wizard [steps]="steps()">
11151
11224
  * <ng-template uiSetupStep="profile"> …the app's own form… </ng-template>
11152
11225
  * </ui-setup-wizard>
11226
+ *
11227
+ * A step with `ownActions: true` draws its own continue button: `<ng-template uiSetupStep="profile" let-wizard>` … `(click)="wizard.saveAndContinue()"`.
11153
11228
  */
11154
11229
  export declare class SetupWizardStepDirective {
11155
11230
  /** The `key` of the step this template belongs to. */
11156
11231
  readonly key: import("@angular/core").InputSignal<string>;
11157
- readonly template: TemplateRef<unknown>;
11232
+ readonly template: TemplateRef<{
11233
+ $implicit: SetupWizardApi;
11234
+ }>;
11235
+ /** Types `let-wizard` in the step's template as `SetupWizardApi`. */
11236
+ static ngTemplateContextGuard(_dir: SetupWizardStepDirective, _ctx: unknown): _ctx is {
11237
+ $implicit: SetupWizardApi;
11238
+ };
11158
11239
  static ɵfac: i0.ɵɵFactoryDeclaration<SetupWizardStepDirective, never>;
11159
11240
  static ɵdir: i0.ɵɵDirectiveDeclaration<SetupWizardStepDirective, "ng-template[uiSetupStep]", never, {
11160
11241
  "key": {
@@ -11164,6 +11245,33 @@ export declare class SetupWizardStepDirective {
11164
11245
  };
11165
11246
  }, {}, never, never, true, never>;
11166
11247
  }
11248
+ /**
11249
+ * Content for the right side of a step's card header (a search box, a small action): `<ng-template uiSetupStepHeader="key">…</ng-template>`.
11250
+ * It gets the same `let-wizard` as the step's own template. A step with this template shows the card header even without a `cardTitle`.
11251
+ */
11252
+ export declare class SetupWizardStepHeaderDirective {
11253
+ /** The `key` of the step this header content belongs to. */
11254
+ readonly key: import("@angular/core").InputSignal<string>;
11255
+ readonly template: TemplateRef<{
11256
+ $implicit: SetupWizardApi;
11257
+ }>;
11258
+ static ngTemplateContextGuard(_dir: SetupWizardStepHeaderDirective, _ctx: unknown): _ctx is {
11259
+ $implicit: SetupWizardApi;
11260
+ };
11261
+ static ɵfac: i0.ɵɵFactoryDeclaration<SetupWizardStepHeaderDirective, never>;
11262
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SetupWizardStepHeaderDirective, "ng-template[uiSetupStepHeader]", never, {
11263
+ "key": {
11264
+ "alias": "uiSetupStepHeader";
11265
+ "required": true;
11266
+ "isSignal": true;
11267
+ };
11268
+ }, {}, never, never, true, never>;
11269
+ }
11270
+ /** Splits a description into its first sentence (title) and the rest (text). A single sentence is all title. */
11271
+ export declare function splitIntro(description: string): {
11272
+ title: string;
11273
+ text: string;
11274
+ };
11167
11275
  /** The key of the summary step the wizard appends to the app's steps. */
11168
11276
  export declare const SETUP_DONE_KEY = "done";
11169
11277
  /**
@@ -11197,6 +11305,7 @@ export declare class SetupWizardComponent {
11197
11305
  /** The step that was just shown (its key). */
11198
11306
  readonly stepChange: import("@angular/core").OutputEmitterRef<string>;
11199
11307
  protected readonly stepTemplates: import("@angular/core").Signal<readonly SetupWizardStepDirective[]>;
11308
+ protected readonly headerTemplates: import("@angular/core").Signal<readonly SetupWizardStepHeaderDirective[]>;
11200
11309
  protected readonly importers: import("@angular/core").Signal<readonly ImportExportComponent[]>;
11201
11310
  protected readonly t: import("@angular/core").Signal<SetupWizardTexts>;
11202
11311
  protected readonly currentKey: import("@angular/core").WritableSignal<string>;
@@ -11204,7 +11313,9 @@ export declare class SetupWizardComponent {
11204
11313
  private readonly skipped;
11205
11314
  private readonly imports;
11206
11315
  private readonly statuses;
11207
- protected readonly busy: import("@angular/core").WritableSignal<boolean>;
11316
+ readonly busy: import("@angular/core").WritableSignal<boolean>;
11317
+ /** What a custom step's template receives (`let-wizard`). */
11318
+ protected readonly api: SetupWizardApi;
11208
11319
  protected readonly error: import("@angular/core").WritableSignal<string>;
11209
11320
  protected readonly areaCodeOpen: import("@angular/core").WritableSignal<string>;
11210
11321
  protected readonly areaCode: import("@angular/core").WritableSignal<string>;
@@ -11214,12 +11325,22 @@ export declare class SetupWizardComponent {
11214
11325
  protected readonly allSteps: import("@angular/core").Signal<SetupStep[]>;
11215
11326
  protected readonly index: import("@angular/core").Signal<number>;
11216
11327
  protected readonly current: import("@angular/core").Signal<SetupStep>;
11328
+ /** The step's description as a blue header: its first sentence is the title, the rest the text under it. */
11329
+ protected readonly intro: import("@angular/core").Signal<{
11330
+ title: string;
11331
+ text: string;
11332
+ } | null>;
11217
11333
  protected readonly isDone: import("@angular/core").Signal<boolean>;
11218
11334
  protected readonly completedCount: import("@angular/core").Signal<number>;
11219
11335
  protected readonly stepperSteps: import("@angular/core").Signal<StepperStep[]>;
11220
11336
  protected readonly summarySections: import("@angular/core").Signal<PanelInfoSection[]>;
11221
11337
  constructor();
11222
- protected templateFor(key: string): import("@angular/core").TemplateRef<unknown> | null;
11338
+ protected headerTemplateFor(key: string): import("@angular/core").TemplateRef<{
11339
+ $implicit: SetupWizardApi;
11340
+ }> | null;
11341
+ protected templateFor(key: string): import("@angular/core").TemplateRef<{
11342
+ $implicit: SetupWizardApi;
11343
+ }> | null;
11223
11344
  protected goTo(key: string): void;
11224
11345
  private enter;
11225
11346
  private advanceFrom;
@@ -11227,10 +11348,12 @@ export declare class SetupWizardComponent {
11227
11348
  protected skip(): void;
11228
11349
  private markCompleted;
11229
11350
  /** "Save & Continue" of a custom or integrations step: runs the step's hook, then moves on. */
11230
- protected saveAndContinue(): Promise<void>;
11351
+ saveAndContinue(): Promise<void>;
11231
11352
  private run;
11232
11353
  /** The message to show for a failure: the server's own `{ message }` (or a thrown error's message); never the HTTP client's technical text. */
11233
11354
  private messageOf;
11355
+ /** A source card was picked on the step itself: opens the import window already past its source step (at the upload step for that source). */
11356
+ protected startImport(key: string, source: string): void;
11234
11357
  protected openImport(key: string): void;
11235
11358
  protected onImported(key: string): void;
11236
11359
  protected importResult(key: string): number | null;
@@ -11264,7 +11387,7 @@ export declare class SetupWizardComponent {
11264
11387
  "finished": "finished";
11265
11388
  "exited": "exited";
11266
11389
  "stepChange": "stepChange";
11267
- }, ["stepTemplates"], ["[setup-wizard-logo]"], true, never>;
11390
+ }, ["stepTemplates", "headerTemplates"], ["[setup-wizard-logo]"], true, never>;
11268
11391
  }
11269
11392
  /** One automated trigger a template can be assigned to (the host decides which exist). */
11270
11393
  export interface EmailTemplateAssignmentOption {
@@ -11455,7 +11578,7 @@ export declare class EmailTemplateEditorComponent {
11455
11578
  readonly sizeKey: import("@angular/core").WritableSignal<number>;
11456
11579
  readonly headingOptions: SelectOption<string>[];
11457
11580
  readonly fontSizeOptions: SelectOption<string>[];
11458
- readonly spacingOptions: SelectOption<string>[];
11581
+ readonly spacingTabs: PillTab[];
11459
11582
  readonly ctaTypeOptions: SelectOption<string>[];
11460
11583
  readonly playbackOptions: {
11461
11584
  value: string;