@forgeroute/ui 0.4.37 → 0.4.39
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 +246 -143
- package/fesm2022/forgeroute-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/forgeroute-ui.d.ts +52 -27
package/package.json
CHANGED
package/types/forgeroute-ui.d.ts
CHANGED
|
@@ -1056,7 +1056,7 @@ export declare class SelectComponent implements ControlValueAccessor, Validator,
|
|
|
1056
1056
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
1057
1057
|
/** Reveal the built-in error messages now (e.g. after a failed Save click), without waiting for blur. */
|
|
1058
1058
|
readonly showErrors: import("@angular/core").InputSignal<boolean>;
|
|
1059
|
-
readonly size: import("@angular/core").InputSignal<"
|
|
1059
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "default">;
|
|
1060
1060
|
readonly _disabledInput: import("@angular/core").InputSignal<boolean>;
|
|
1061
1061
|
private readonly _cvaDisabled;
|
|
1062
1062
|
protected readonly disabled: import("@angular/core").Signal<boolean>;
|
|
@@ -1210,6 +1210,10 @@ export declare class ImportExportComponent {
|
|
|
1210
1210
|
private readonly apiBase;
|
|
1211
1211
|
private readonly toast;
|
|
1212
1212
|
private readonly cdr;
|
|
1213
|
+
private readonly destroyRef;
|
|
1214
|
+
/** Seconds since the import request started (shown while it runs). */
|
|
1215
|
+
importElapsed: number;
|
|
1216
|
+
private importTimer;
|
|
1213
1217
|
constructor();
|
|
1214
1218
|
exporting: boolean;
|
|
1215
1219
|
exportAll(): void;
|
|
@@ -1237,6 +1241,7 @@ export declare class ImportExportComponent {
|
|
|
1237
1241
|
closeImport(): void;
|
|
1238
1242
|
finishImport(): void;
|
|
1239
1243
|
onFileChange(event: Event): void;
|
|
1244
|
+
private readCsvFile;
|
|
1240
1245
|
private autoMap;
|
|
1241
1246
|
get canSubmit(): boolean;
|
|
1242
1247
|
get unmappedRequiredFields(): string[];
|
|
@@ -1247,6 +1252,7 @@ export declare class ImportExportComponent {
|
|
|
1247
1252
|
goToPreview(): void;
|
|
1248
1253
|
get mappedFields(): ImportFieldDef[];
|
|
1249
1254
|
get previewRows(): Record<string, string>[];
|
|
1255
|
+
private stopImportTimer;
|
|
1250
1256
|
submitImport(): void;
|
|
1251
1257
|
static ɵfac: i0.ɵɵFactoryDeclaration<ImportExportComponent, never>;
|
|
1252
1258
|
static ɵcmp: i0.ɵɵComponentDeclaration<ImportExportComponent, "ui-import-export", never, {
|
|
@@ -2745,7 +2751,7 @@ export declare class CheckboxComponent implements ControlValueAccessor, Validato
|
|
|
2745
2751
|
* 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.
|
|
2746
2752
|
* Default null: plain label text, exactly as before. Single mode only.
|
|
2747
2753
|
*/
|
|
2748
|
-
readonly headingLevel: import("@angular/core").InputSignal<
|
|
2754
|
+
readonly headingLevel: import("@angular/core").InputSignal<2 | 1 | 3 | 4 | 5 | 6 | null>;
|
|
2749
2755
|
readonly indeterminate: import("@angular/core").InputSignal<boolean>;
|
|
2750
2756
|
readonly checked: import("@angular/core").ModelSignal<boolean>;
|
|
2751
2757
|
/**
|
|
@@ -3656,7 +3662,7 @@ export declare class PhoneNumberPickerComponent {
|
|
|
3656
3662
|
protected readonly modeCtl: FormControl<string>;
|
|
3657
3663
|
protected readonly zipCtl: FormControl<string>;
|
|
3658
3664
|
protected readonly areaCtl: FormControl<string>;
|
|
3659
|
-
protected readonly step: import("@angular/core").WritableSignal<
|
|
3665
|
+
protected readonly step: import("@angular/core").WritableSignal<2 | 1 | 3>;
|
|
3660
3666
|
protected readonly mode: import("@angular/core").WritableSignal<PhoneNumberSearchMode>;
|
|
3661
3667
|
private readonly _zip;
|
|
3662
3668
|
private readonly _area;
|
|
@@ -3770,7 +3776,7 @@ export declare class ButtonComponent {
|
|
|
3770
3776
|
* `ghost-start`: a ghost button for list / section toggles - a full-width row with its content aligned to the start, transparent
|
|
3771
3777
|
* background, hover tint and the normal focus ring. Pair it with `ariaExpanded` / `ariaPressed`; the label may contain a heading element.
|
|
3772
3778
|
*/
|
|
3773
|
-
readonly variant: import("@angular/core").InputSignal<"
|
|
3779
|
+
readonly variant: import("@angular/core").InputSignal<"link" | "primary" | "secondary" | "danger" | "warning" | "ghost" | "ghost-start" | "tab" | "icon" | "icon-danger">;
|
|
3774
3780
|
/** 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`). */
|
|
3775
3781
|
readonly routerLink: import("@angular/core").InputSignal<string | readonly unknown[] | null>;
|
|
3776
3782
|
/** Query params of the `routerLink` (e.g. `{ section: 'deal-defaults' }`). */
|
|
@@ -3809,13 +3815,13 @@ export declare class ButtonComponent {
|
|
|
3809
3815
|
* shows when the viewport is narrower than this; from the width itself the long text shows (`640`: >= 640px long, < 640px short, like a
|
|
3810
3816
|
* `min-width: 640px` switch). Tokens are pure CSS; a number is tracked with `matchMedia`. Default `'md'`.
|
|
3811
3817
|
*/
|
|
3812
|
-
readonly shortBelow: import("@angular/core").InputSignal<number | "sm" | "
|
|
3818
|
+
readonly shortBelow: import("@angular/core").InputSignal<number | "sm" | "lg" | "md">;
|
|
3813
3819
|
/** Classes of the two label spans: the token class, or `btn-sl-narrow` while a pixel breakpoint is active. */
|
|
3814
3820
|
protected readonly _slClass: import("@angular/core").Signal<string>;
|
|
3815
3821
|
private readonly _narrow;
|
|
3816
3822
|
readonly color: import("@angular/core").InputSignal<string | undefined>;
|
|
3817
3823
|
readonly active: import("@angular/core").InputSignal<boolean>;
|
|
3818
|
-
readonly size: import("@angular/core").InputSignal<"sm" | "
|
|
3824
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "lg" | "md" | "xs">;
|
|
3819
3825
|
readonly type: import("@angular/core").InputSignal<"reset" | "submit" | "button">;
|
|
3820
3826
|
readonly disabled: import("@angular/core").InputSignal<boolean>;
|
|
3821
3827
|
readonly loading: import("@angular/core").InputSignal<boolean>;
|
|
@@ -4248,7 +4254,7 @@ export declare class BulkMessagePanelComponent {
|
|
|
4248
4254
|
readonly sending: import("@angular/core").InputSignal<boolean>;
|
|
4249
4255
|
readonly closed: import("@angular/core").OutputEmitterRef<void>;
|
|
4250
4256
|
readonly send: import("@angular/core").OutputEmitterRef<BulkMessageSendEvent>;
|
|
4251
|
-
readonly channel: import("@angular/core").WritableSignal<"
|
|
4257
|
+
readonly channel: import("@angular/core").WritableSignal<"email" | "text">;
|
|
4252
4258
|
private readonly _subject;
|
|
4253
4259
|
private readonly _body;
|
|
4254
4260
|
get subject(): string;
|
|
@@ -4612,7 +4618,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4612
4618
|
readonly passwordRequirements: import("@angular/core").InputSignal<boolean>;
|
|
4613
4619
|
/** Rules for `passwordRequirements`; default = the library's five rules (8+ characters, upper, lower, digit, special). */
|
|
4614
4620
|
readonly passwordRules: import("@angular/core").InputSignal<readonly PasswordRule[] | undefined>;
|
|
4615
|
-
readonly type: import("@angular/core").InputSignal<"number" | "
|
|
4621
|
+
readonly type: import("@angular/core").InputSignal<"number" | "email" | "text" | "tel" | "password" | "url">;
|
|
4616
4622
|
readonly maxlength: import("@angular/core").InputSignal<number | undefined>;
|
|
4617
4623
|
readonly required: import("@angular/core").InputSignal<boolean>;
|
|
4618
4624
|
readonly autocomplete: import("@angular/core").InputSignal<string>;
|
|
@@ -4621,7 +4627,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4621
4627
|
* `search`, `text`, `none`). Empty (default) = the browser's default for the field, except `type="tel"`, which keeps `tel`.
|
|
4622
4628
|
* It only picks the keyboard; it does not restrict what can be typed or pasted.
|
|
4623
4629
|
*/
|
|
4624
|
-
readonly inputmode: import("@angular/core").InputSignal<"" | "
|
|
4630
|
+
readonly inputmode: import("@angular/core").InputSignal<"" | "email" | "none" | "text" | "search" | "tel" | "url" | "decimal" | "numeric">;
|
|
4625
4631
|
readonly readonly: import("@angular/core").InputSignal<boolean>;
|
|
4626
4632
|
readonly hint: import("@angular/core").InputSignal<string>;
|
|
4627
4633
|
readonly error: import("@angular/core").InputSignal<string>;
|
|
@@ -4685,7 +4691,7 @@ export declare class TextInputComponent implements ControlValueAccessor, Validat
|
|
|
4685
4691
|
protected readonly _stepAttr: import("@angular/core").Signal<string | null>;
|
|
4686
4692
|
protected readonly _revealable: import("@angular/core").Signal<boolean>;
|
|
4687
4693
|
protected readonly _shown: import("@angular/core").WritableSignal<boolean>;
|
|
4688
|
-
protected readonly _inputType: import("@angular/core").Signal<"number" | "
|
|
4694
|
+
protected readonly _inputType: import("@angular/core").Signal<"number" | "email" | "text" | "tel" | "password" | "url">;
|
|
4689
4695
|
protected readonly _eyePath: string;
|
|
4690
4696
|
protected readonly _eyeOffPath: string;
|
|
4691
4697
|
protected readonly _showRequirements: import("@angular/core").Signal<boolean>;
|
|
@@ -6214,7 +6220,7 @@ export declare class FormSectionComponent {
|
|
|
6214
6220
|
}, {}, never, ["*"], true, never>;
|
|
6215
6221
|
}
|
|
6216
6222
|
export declare class FormRowComponent {
|
|
6217
|
-
readonly cols: import("@angular/core").InputSignal<
|
|
6223
|
+
readonly cols: import("@angular/core").InputSignal<2 | 1 | 3 | 4>;
|
|
6218
6224
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormRowComponent, never>;
|
|
6219
6225
|
static ɵcmp: i0.ɵɵComponentDeclaration<FormRowComponent, "ui-form-row", never, {
|
|
6220
6226
|
"cols": {
|
|
@@ -6231,7 +6237,7 @@ export declare class FormRowComponent {
|
|
|
6231
6237
|
* child simply takes the full width. Keep a numeric span within the row's `cols` (use `all` for the whole row).
|
|
6232
6238
|
*/
|
|
6233
6239
|
export declare class FormColSpanDirective {
|
|
6234
|
-
readonly uiColSpan: import("@angular/core").InputSignal<"" | "2" | "3" |
|
|
6240
|
+
readonly uiColSpan: import("@angular/core").InputSignal<"" | 2 | "2" | "3" | 3 | "all">;
|
|
6235
6241
|
protected readonly _class: import("@angular/core").Signal<string>;
|
|
6236
6242
|
static ɵfac: i0.ɵɵFactoryDeclaration<FormColSpanDirective, never>;
|
|
6237
6243
|
static ɵdir: i0.ɵɵDirectiveDeclaration<FormColSpanDirective, "[uiColSpan]", never, {
|
|
@@ -7169,8 +7175,8 @@ export declare class PanelInfoListComponent {
|
|
|
7169
7175
|
* readers announce it as pressed / not pressed. A dismissible chip is a removable tag, not a toggle, so it carries no
|
|
7170
7176
|
* `aria-pressed` (the ✕ button is named "Remove <label>").
|
|
7171
7177
|
*
|
|
7172
|
-
*
|
|
7173
|
-
* Space, or press Delete / Backspace
|
|
7178
|
+
* A dismissible chip is a wrapper of two sibling native buttons (the label and the ✕), never a button inside a button (axe nested-interactive).
|
|
7179
|
+
* Keyboard removal: Tab to the ✕ (named "Remove <label>") and press Enter or Space, or press Delete / Backspace on either button.
|
|
7174
7180
|
*
|
|
7175
7181
|
* Dismissible (shows an ✕ button — parent removes the chip on dismiss):
|
|
7176
7182
|
* <ui-chip label="Austin" size="sm" [dismissible]="true" (dismiss)="removeCity('Austin')" />
|
|
@@ -7210,10 +7216,7 @@ export declare class ChipComponent implements ControlValueAccessor {
|
|
|
7210
7216
|
protected _onTouched: () => void;
|
|
7211
7217
|
protected onClick(): void;
|
|
7212
7218
|
protected onDismiss(event: Event): void;
|
|
7213
|
-
/**
|
|
7214
|
-
* Keyboard removal: Enter / Space on the focused ✕, or Delete / Backspace on the chip itself (dismissible chips only).
|
|
7215
|
-
* Handled here so the key never also toggles the chip.
|
|
7216
|
-
*/
|
|
7219
|
+
/** Delete / Backspace on either button of a dismissible chip removes it (the ✕ itself is a native button: Enter / Space click it). */
|
|
7217
7220
|
protected onDismissKey(event: Event): void;
|
|
7218
7221
|
writeValue(v: boolean): void;
|
|
7219
7222
|
registerOnChange(fn: (v: boolean) => void): void;
|
|
@@ -7256,11 +7259,11 @@ export declare class ChipComponent implements ControlValueAccessor {
|
|
|
7256
7259
|
*/
|
|
7257
7260
|
export declare class ChipGroupComponent {
|
|
7258
7261
|
/** Space between each chip. */
|
|
7259
|
-
readonly gap: import("@angular/core").InputSignal<"sm" | "
|
|
7262
|
+
readonly gap: import("@angular/core").InputSignal<"sm" | "lg" | "md">;
|
|
7260
7263
|
/** Space above the chip group. */
|
|
7261
|
-
readonly spaceAbove: import("@angular/core").InputSignal<"
|
|
7264
|
+
readonly spaceAbove: import("@angular/core").InputSignal<"sm" | "none" | "md">;
|
|
7262
7265
|
/** Space below the chip group. */
|
|
7263
|
-
readonly spaceBelow: import("@angular/core").InputSignal<"
|
|
7266
|
+
readonly spaceBelow: import("@angular/core").InputSignal<"sm" | "none" | "md">;
|
|
7264
7267
|
protected readonly _gap: import("@angular/core").Signal<"6px" | "12px" | "8px">;
|
|
7265
7268
|
protected readonly _spaceAbove: import("@angular/core").Signal<"0" | "6px" | "12px">;
|
|
7266
7269
|
protected readonly _spaceBelow: import("@angular/core").Signal<"0" | "6px" | "12px">;
|
|
@@ -9168,7 +9171,7 @@ export declare class DetailCardComponent {
|
|
|
9168
9171
|
/** true (default) = the title is displayed in capitals (CSS only); false = shown as written. The text, aria-label and heading name are never changed. */
|
|
9169
9172
|
readonly uppercaseTitle: import("@angular/core").InputSignal<boolean>;
|
|
9170
9173
|
/** 1-6 makes the title a real heading for screen readers (role=heading, aria-level); null keeps it plain text. */
|
|
9171
|
-
readonly headingLevel: import("@angular/core").InputSignal<
|
|
9174
|
+
readonly headingLevel: import("@angular/core").InputSignal<2 | 1 | 3 | 4 | 5 | 6 | null>;
|
|
9172
9175
|
/** Optional id for the title text; the card is then labelled by it. Without it the title is the card's aria-label. */
|
|
9173
9176
|
readonly titleId: import("@angular/core").InputSignal<string>;
|
|
9174
9177
|
/** Accessible name of the card when the header gives none (no header, or no title). A visible title wins; blank = no name. */
|
|
@@ -9918,7 +9921,7 @@ export declare class SectionHeaderComponent {
|
|
|
9918
9921
|
/** 1px border and 10px corners. */
|
|
9919
9922
|
readonly bordered: import("@angular/core").InputSignal<boolean>;
|
|
9920
9923
|
/** Visual size: 'sm', 'md' (default), 'lg' or 'xl'. Independent of `level`; anything else renders as 'md'. */
|
|
9921
|
-
readonly size: import("@angular/core").InputSignal<"sm" | "
|
|
9924
|
+
readonly size: import("@angular/core").InputSignal<"sm" | "lg" | "md" | "xl">;
|
|
9922
9925
|
/** Remove the built-in top padding. */
|
|
9923
9926
|
readonly noPaddingTop: import("@angular/core").InputSignal<boolean>;
|
|
9924
9927
|
/** Remove the built-in left padding. */
|
|
@@ -11002,8 +11005,8 @@ export declare class ShowComponent {
|
|
|
11002
11005
|
readonly from: import("@angular/core").InputSignal<ShowBreakpoint | null>;
|
|
11003
11006
|
readonly below: import("@angular/core").InputSignal<ShowBreakpoint | null>;
|
|
11004
11007
|
private readonly win;
|
|
11005
|
-
protected readonly fromToken: import("@angular/core").Signal<"sm" | "
|
|
11006
|
-
protected readonly belowToken: import("@angular/core").Signal<"sm" | "
|
|
11008
|
+
protected readonly fromToken: import("@angular/core").Signal<"sm" | "lg" | "md" | null>;
|
|
11009
|
+
protected readonly belowToken: import("@angular/core").Signal<"sm" | "lg" | "md" | null>;
|
|
11007
11010
|
protected readonly fromMatch: import("@angular/core").WritableSignal<boolean>;
|
|
11008
11011
|
protected readonly belowMatch: import("@angular/core").WritableSignal<boolean>;
|
|
11009
11012
|
constructor();
|
|
@@ -11286,6 +11289,8 @@ export interface SetupWizardTexts {
|
|
|
11286
11289
|
importErrorsText: (imported: number, errors: number) => string;
|
|
11287
11290
|
importAgain: string;
|
|
11288
11291
|
whatGetsImported: string;
|
|
11292
|
+
/** Title of the card with the summary on the last page. */
|
|
11293
|
+
summaryTitle: string;
|
|
11289
11294
|
doneTitle: string;
|
|
11290
11295
|
doneDescription: string;
|
|
11291
11296
|
doneHint: string;
|
|
@@ -11329,7 +11334,7 @@ export interface SetupStep {
|
|
|
11329
11334
|
skippable?: boolean;
|
|
11330
11335
|
/** `custom`: runs on "Save & Continue". Resolve to continue; throw / error to stay on the step (the message is shown in an alert). */
|
|
11331
11336
|
save?: () => Observable<unknown> | Promise<unknown> | void;
|
|
11332
|
-
/** `custom`: false disables "Save & Continue". */
|
|
11337
|
+
/** `custom` and `integrations`: false disables "Save & Continue" (read on every render, so it can follow signals). */
|
|
11333
11338
|
canContinue?: () => boolean;
|
|
11334
11339
|
/** `custom`: text of the continue button (default "Save & Continue"). */
|
|
11335
11340
|
saveLabel?: string;
|
|
@@ -11460,7 +11465,7 @@ export declare class SetupWizardComponent {
|
|
|
11460
11465
|
/** An import step with `requireImport` keeps Continue off until something came in (a CSV import or `markCompleted`, e.g. a live sync). */
|
|
11461
11466
|
protected readonly importBlocked: import("@angular/core").Signal<boolean>;
|
|
11462
11467
|
/** The step's own two parts (`splitLayout`) show as two tabs, one card at a time; this is the open one (it starts on the app's part on every visit). */
|
|
11463
|
-
protected readonly splitTab: import("@angular/core").WritableSignal<"
|
|
11468
|
+
protected readonly splitTab: import("@angular/core").WritableSignal<"extra" | "main">;
|
|
11464
11469
|
protected readonly splitTabs: import("@angular/core").Signal<{
|
|
11465
11470
|
key: string;
|
|
11466
11471
|
label: string;
|
|
@@ -11522,6 +11527,11 @@ export declare class SetupWizardComponent {
|
|
|
11522
11527
|
protected back(): void;
|
|
11523
11528
|
protected skip(): void;
|
|
11524
11529
|
/** Marks the given steps done (ignoring keys that are not steps of this wizard). */
|
|
11530
|
+
/**
|
|
11531
|
+
* Marks steps as done from outside the step templates (unknown keys are ignored), e.g. when the app finds that a step's data already exists after a
|
|
11532
|
+
* page reload, so the user is not asked to import it a second time. Same effect as `wizard.markCompleted(...)` inside a step template.
|
|
11533
|
+
*/
|
|
11534
|
+
completeSteps(...keys: string[]): void;
|
|
11525
11535
|
private markStepsCompleted;
|
|
11526
11536
|
private markCompleted;
|
|
11527
11537
|
/** "Save & Continue" of a custom or integrations step: runs the step's hook, then moves on. */
|
|
@@ -11753,6 +11763,8 @@ export declare class EmailTemplateEditorComponent {
|
|
|
11753
11763
|
readonly headingOptions: SelectOption<string>[];
|
|
11754
11764
|
readonly fontSizeOptions: SelectOption<string>[];
|
|
11755
11765
|
readonly spacingTabs: PillTab[];
|
|
11766
|
+
/** The grey hint shown in the empty first block. */
|
|
11767
|
+
protected readonly startPlaceholder = "Start writing your email...";
|
|
11756
11768
|
readonly ctaTypeOptions: SelectOption<string>[];
|
|
11757
11769
|
readonly playbackOptions: {
|
|
11758
11770
|
value: string;
|
|
@@ -11787,6 +11799,9 @@ export declare class EmailTemplateEditorComponent {
|
|
|
11787
11799
|
readonly filteredBlockGroups: import("@angular/core").Signal<EmailTemplateBlockGroup[]>;
|
|
11788
11800
|
private readonly serialized;
|
|
11789
11801
|
readonly previewHtml: import("@angular/core").Signal<string>;
|
|
11802
|
+
private readonly sanitizer;
|
|
11803
|
+
/** The Preview / Mobile document: a full page with the email's own styles. It is shown in a sandboxed iframe (no scripts, no popups), so trusting the markup here cannot run anything. */
|
|
11804
|
+
readonly previewDoc: import("@angular/core").Signal<SafeHtml>;
|
|
11790
11805
|
/** Characters in the body as it is saved. */
|
|
11791
11806
|
readonly bodyLength: import("@angular/core").Signal<number>;
|
|
11792
11807
|
readonly bodyHasContent: import("@angular/core").Signal<boolean>;
|
|
@@ -12066,6 +12081,11 @@ export declare const MAX_EMAIL_ADDRESS_LENGTH = 254;
|
|
|
12066
12081
|
export declare const isValidEmailAddress: (address: string) => boolean;
|
|
12067
12082
|
/** An http(s) address with a real host: no spaces or quotes (the address is written into an HTML attribute) and a dot or `localhost`. */
|
|
12068
12083
|
export declare function isWebUrl(raw: string): boolean;
|
|
12084
|
+
/**
|
|
12085
|
+
* How many characters typed text takes once it is saved, i.e. as `innerHTML` writes a TEXT node: `&`, `<` and `>` become entities and a
|
|
12086
|
+
* non-breaking space (what a browser types for a run of spaces) becomes ` `; quotes are not escaped in text, so each counts as one.
|
|
12087
|
+
*/
|
|
12088
|
+
export declare function serializedTextLength(text: string): number;
|
|
12069
12089
|
/** Escapes text for HTML text and double-quoted attribute values. */
|
|
12070
12090
|
export declare function escapeHtml(value: string): string;
|
|
12071
12091
|
/** True when a block's HTML shows something to a reader: an image or other media, or text once tags, non-breaking spaces and whitespace are gone. */
|
|
@@ -12101,4 +12121,9 @@ export declare const DEFAULT_EMAIL_TEMPLATE_VARIABLE_GROUPS: {
|
|
|
12101
12121
|
example: string;
|
|
12102
12122
|
}[];
|
|
12103
12123
|
}[];
|
|
12124
|
+
/**
|
|
12125
|
+
* The document the Preview / Mobile tabs show (inside a sandboxed iframe): the serialised message with the base look of a sent email. A
|
|
12126
|
+
* Content-Security-Policy meta blocks scripts and anything but images / inline styles, and links open nowhere (sandbox, no popups).
|
|
12127
|
+
*/
|
|
12128
|
+
export declare function buildPreviewDocument(bodyHtml: string): string;
|
|
12104
12129
|
export type { CalendarDay, CalendarRange, CalendarViewMode };
|