@h-k-dev/angular-email-editor 0.0.6 → 0.0.8
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/README.md +2 -1
- package/fesm2022/h-k-dev-angular-email-editor-toggle-button-group.mjs +342 -0
- package/fesm2022/h-k-dev-angular-email-editor-toggle-button-group.mjs.map +1 -0
- package/fesm2022/h-k-dev-angular-email-editor.mjs +1591 -110
- package/fesm2022/h-k-dev-angular-email-editor.mjs.map +1 -1
- package/package.json +5 -1
- package/types/h-k-dev-angular-email-editor-toggle-button-group.d.ts +172 -0
- package/types/h-k-dev-angular-email-editor.d.ts +502 -23
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Schema, NodeSpec, MarkSpec, ParseRule, TagParseRule, Node, DOMParser, Mark, MarkType, NodeType, ResolvedPos } from 'prosemirror-model';
|
|
2
|
-
import { Command, EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';
|
|
2
|
+
import { Command, EditorState, Plugin, PluginKey, Selection, SelectionBookmark, Transaction } from 'prosemirror-state';
|
|
3
3
|
import { InputRule } from 'prosemirror-inputrules';
|
|
4
4
|
import * as _h_k_dev_angular_email_editor from '@h-k-dev/angular-email-editor';
|
|
5
5
|
import { AddressRules } from '@h-k-dev/angular-email-editor/address';
|
|
6
|
-
import { EditorView } from 'prosemirror-view';
|
|
6
|
+
import { EditorView, DecorationSet } from 'prosemirror-view';
|
|
7
|
+
import { Mappable } from 'prosemirror-transform';
|
|
7
8
|
import { FontSize } from '@h-k-dev/angular-email-editor/fonts';
|
|
8
9
|
export * from '@h-k-dev/angular-email-editor/fonts';
|
|
9
10
|
import * as i0 from '@angular/core';
|
|
@@ -889,9 +890,23 @@ declare function relativeLuminance(hex: string): number;
|
|
|
889
890
|
declare function contrastRatio(a: string, b: string): number;
|
|
890
891
|
/** Whether a color reads against both the light and the dark reference. */
|
|
891
892
|
declare function passesDualContrast(hex: string): boolean;
|
|
893
|
+
/**
|
|
894
|
+
* The dark surfaces the dark variants are held to: Apple Mail's reading pane
|
|
895
|
+
* and Outlook's (new Outlook for Windows, Outlook.com) — the clients that
|
|
896
|
+
* read the email's own dark-mode styles (dark-mode.ts). AA (4.5:1) for a
|
|
897
|
+
* colour on each, and AAA (7:1) for the body's black on each.
|
|
898
|
+
*/
|
|
899
|
+
declare const DARK_MODE_SURFACES: readonly string[];
|
|
892
900
|
interface PaletteColor {
|
|
893
901
|
name: string;
|
|
894
902
|
value: string;
|
|
903
|
+
/** What the colour turns into where a client reads the email's dark-mode
|
|
904
|
+
styles (Apple Mail, Outlook): the same hue, lit for a dark page — a
|
|
905
|
+
text colour reads on {@link DARK_MODE_SURFACES} and on every fill's
|
|
906
|
+
dark variant, a fill goes dark under its paired text's dark variant.
|
|
907
|
+
None, and the colour stays as it is in dark mode too (white text, the
|
|
908
|
+
black fill). */
|
|
909
|
+
dark?: string;
|
|
895
910
|
/** Offered although it fails its palette's rule — and why. The palette
|
|
896
911
|
tests hold every other swatch to the rule, and this one to failing it,
|
|
897
912
|
so an exception is always a decision on record, never an accident. */
|
|
@@ -932,6 +947,9 @@ declare const FILL_TEXT_COLOR_RGB = "rgb(32, 33, 36)";
|
|
|
932
947
|
/** The text colour a dark fill carries: white — the mirror of
|
|
933
948
|
{@link FILL_TEXT_COLOR}, for the same two dark-mode reasons. */
|
|
934
949
|
declare const FILL_TEXT_COLOR_LIGHT = "#ffffff";
|
|
950
|
+
/** A `#rgb`, `#rrggbb` or CSSOM `rgb()` / `rgba()` colour as `#rrggbb`, or
|
|
951
|
+
null for anything else (a keyword, a function this does not read). */
|
|
952
|
+
declare function cssColorToHex(raw: string): string | null;
|
|
935
953
|
/** The text a fill is paired with: white on a dark fill, near-black on
|
|
936
954
|
anything else (a colour this cannot read included). */
|
|
937
955
|
declare function fillTextColor(background: string): string;
|
|
@@ -948,6 +966,11 @@ declare function passesDualBackground(hex: string): boolean;
|
|
|
948
966
|
* passing {@link passesDualBackground} — proven by test. Shared by every
|
|
949
967
|
* background affordance (text highlight, table cells, column panels) so fills
|
|
950
968
|
* read the same everywhere and survive inversion. Black carries white text.
|
|
969
|
+
*
|
|
970
|
+
* Each pale fill has a dark variant (dark-mode.ts): the same hue at about
|
|
971
|
+
* the luminance of a dark client's page, so its paired text's variant reads
|
|
972
|
+
* on it at AAA and every text colour's variant at AA. Black has none: white
|
|
973
|
+
* on it already reads on a dark page.
|
|
951
974
|
*/
|
|
952
975
|
declare const emailBackgroundPalette: PaletteColor[];
|
|
953
976
|
/**
|
|
@@ -955,13 +978,96 @@ declare const emailBackgroundPalette: PaletteColor[];
|
|
|
955
978
|
* — proven by test, not by promise. This is what a color picker should offer
|
|
956
979
|
* instead of an arbitrary hex input.
|
|
957
980
|
*
|
|
958
|
-
*
|
|
959
|
-
*
|
|
960
|
-
*
|
|
961
|
-
*
|
|
981
|
+
* Every colour reads at AA (4.5:1) on white and on every pale fill, and so
|
|
982
|
+
* does its inversion on black (Gmail's dark mode). Its dark variant reads at
|
|
983
|
+
* AA on {@link DARK_MODE_SURFACES} and on every fill's dark variant — what
|
|
984
|
+
* Apple Mail and Outlook show, where the email's dark-mode styles are read
|
|
985
|
+
* (dark-mode.ts). The tones are each hue's lightest that holds on the
|
|
986
|
+
* palest-but-one fill; the variants are the same hue, lit just enough.
|
|
987
|
+
*
|
|
988
|
+
* Black and white are the two exceptions to the mid-tone rule (no neutral
|
|
989
|
+
* near either end passes: the band runs from #616161 to #949494), offered
|
|
990
|
+
* because a writer needs them — black to take coloured text back to plain,
|
|
991
|
+
* white for text on a dark fill. Black is the body's text, so it is held to
|
|
992
|
+
* AAA (7:1) in both modes.
|
|
962
993
|
*/
|
|
963
994
|
declare const emailTextPalette: PaletteColor[];
|
|
964
995
|
|
|
996
|
+
/**
|
|
997
|
+
* Dark mode, written into the email: the palette's own dark variants
|
|
998
|
+
* ({@link PaletteColor.dark}) for the clients that read an email's dark-mode
|
|
999
|
+
* styles, so a curated colour reads at AA there too — which no single value
|
|
1000
|
+
* can do on a white page and a dark one at once (dual-contrast.ts).
|
|
1001
|
+
*
|
|
1002
|
+
* - **Apple Mail** (macOS, iOS) and **new Outlook / Outlook.com**: the
|
|
1003
|
+
* document says it is drawn for both schemes (`color-scheme: light dark`),
|
|
1004
|
+
* and each palette colour it carries takes its variant — through
|
|
1005
|
+
* `@media (prefers-color-scheme: dark)` for Apple, `[data-ogsc]` /
|
|
1006
|
+
* `[data-ogsb]` for Outlook, which marks a message it darkens that way.
|
|
1007
|
+
* - **Gmail** and **classic Outlook for Windows** read neither and invert
|
|
1008
|
+
* the colours themselves; the light values are chosen to read after that
|
|
1009
|
+
* inversion, and the rules sit in a `<style>` of their own, so a client
|
|
1010
|
+
* that throws the block away keeps every other rule.
|
|
1011
|
+
*
|
|
1012
|
+
* Only the palette's colours move, and only where the move reads: a fill
|
|
1013
|
+
* goes dark when nothing in it wears a colour outside the palette (dark text
|
|
1014
|
+
* on it would vanish), and a text colour lights up when no background over
|
|
1015
|
+
* it stays light. A colour typed into the HTML source is the author's own,
|
|
1016
|
+
* as everywhere (principle 9) — it stays, and so does what holds it.
|
|
1017
|
+
*
|
|
1018
|
+
* The canonical HTML never carries any of this: {@link markDarkMode} works
|
|
1019
|
+
* on the email document only (`emailDocument`), and the editor shows the
|
|
1020
|
+
* same rendering through {@link darkModeEditorCss} — one set of selectors,
|
|
1021
|
+
* so the two cannot drift.
|
|
1022
|
+
*/
|
|
1023
|
+
|
|
1024
|
+
/** The colours that move in dark mode — each one's `dark` variant. */
|
|
1025
|
+
interface DarkModePalette {
|
|
1026
|
+
readonly text: readonly PaletteColor[];
|
|
1027
|
+
readonly background: readonly PaletteColor[];
|
|
1028
|
+
}
|
|
1029
|
+
/** The library's palette, both sides. */
|
|
1030
|
+
declare const emailDarkModePalette: DarkModePalette;
|
|
1031
|
+
/** The class a text colour's element wears in the email: `aee-dt-c5221f`. */
|
|
1032
|
+
declare const DARK_TEXT_CLASS = "aee-dt-";
|
|
1033
|
+
/** The class a fill's element wears in the email: `aee-db-fce8e6`. */
|
|
1034
|
+
declare const DARK_FILL_CLASS = "aee-db-";
|
|
1035
|
+
/** What a document says to be drawn in both schemes: Apple Mail then reads
|
|
1036
|
+
its dark-mode rules (and leaves its own recolouring be). */
|
|
1037
|
+
declare const COLOR_SCHEME_META: string;
|
|
1038
|
+
/** The same, for the stylesheet. */
|
|
1039
|
+
declare const COLOR_SCHEME_RULE = ":root { color-scheme: light dark; supported-color-schemes: light dark; }";
|
|
1040
|
+
interface DarkModeMarking {
|
|
1041
|
+
/** The HTML with each moving colour's element wearing its class — the
|
|
1042
|
+
input itself, byte for byte, when nothing moves. */
|
|
1043
|
+
readonly html: string;
|
|
1044
|
+
/** The rules for the classes used: Apple's media query and Outlook's
|
|
1045
|
+
markers. Empty when nothing moves. */
|
|
1046
|
+
readonly css: string;
|
|
1047
|
+
}
|
|
1048
|
+
/**
|
|
1049
|
+
* Marks the palette's colours in an email body for dark mode: a fill that
|
|
1050
|
+
* goes dark wears `aee-db-<hex>`, a text colour that lights up wears
|
|
1051
|
+
* `aee-dt-<hex>`, and `css` holds the rules for exactly those classes.
|
|
1052
|
+
*
|
|
1053
|
+
* A fill goes dark when it is the palette's, nothing in it (itself
|
|
1054
|
+
* included) wears a colour outside the palette, and every background round
|
|
1055
|
+
* it goes dark too. A text colour lights up when it is the palette's and
|
|
1056
|
+
* every background over it (its own included) goes dark — so lit text never
|
|
1057
|
+
* stands on a light fill, nor dark text on a dark one.
|
|
1058
|
+
*/
|
|
1059
|
+
declare function markDarkMode(html: string, palette?: DarkModePalette): DarkModeMarking;
|
|
1060
|
+
/**
|
|
1061
|
+
* The same dark rendering for the editor's own surface: every rule of
|
|
1062
|
+
* {@link markDarkMode}, as a stylesheet over the live text under `scope`
|
|
1063
|
+
* (the editor root while it shows dark) — the editor's markup is never
|
|
1064
|
+
* touched. Each colour hands its variant over in a custom property; two
|
|
1065
|
+
* rules then apply them where the email's classes would go.
|
|
1066
|
+
*
|
|
1067
|
+
* darkModeEditorCss(palette, '.paper[data-color-scheme="dark"] > .aee-editor')
|
|
1068
|
+
*/
|
|
1069
|
+
declare function darkModeEditorCss(scope: string, palette?: DarkModePalette): string;
|
|
1070
|
+
|
|
965
1071
|
/**
|
|
966
1072
|
* The client-support data module (M3): a curated, versioned subset of what
|
|
967
1073
|
* caniemail documents about our floor clients. Pure data + lookups — the
|
|
@@ -1013,13 +1119,18 @@ declare function emailSizeBudget(html: string): SizeBudget;
|
|
|
1013
1119
|
type RenderingClient = 'apple-mail' | 'gmail' | 'outlook-desktop';
|
|
1014
1120
|
declare const RENDERING_CLIENTS: readonly RenderingClient[];
|
|
1015
1121
|
interface ClientRenderingOptions {
|
|
1016
|
-
/** Draw the client's dark mode:
|
|
1017
|
-
|
|
1122
|
+
/** Draw the client's dark mode: Apple Mail's dark surface under the
|
|
1123
|
+
email's own dark-mode rules, Gmail's and classic Outlook's forced
|
|
1124
|
+
inversion. */
|
|
1018
1125
|
dark?: boolean;
|
|
1019
1126
|
/** The reading pane: a phone draws the message edge to edge (iOS Mail,
|
|
1020
1127
|
the Gmail app), a desktop pane keeps a margin round it. Default
|
|
1021
1128
|
desktop. */
|
|
1022
1129
|
pane?: 'phone' | 'desktop';
|
|
1130
|
+
/** The palette a fragment's dark variants come from — what
|
|
1131
|
+
`emailDocument` sends it with (dark-mode.ts); the library's by
|
|
1132
|
+
default, `false` for none. A whole document is drawn as it is. */
|
|
1133
|
+
darkMode?: DarkModePalette | false;
|
|
1023
1134
|
}
|
|
1024
1135
|
/**
|
|
1025
1136
|
* The email as a client would draw it — a simulation, in a browser, of what
|
|
@@ -1029,12 +1140,15 @@ interface ClientRenderingOptions {
|
|
|
1029
1140
|
* put in, and the client's own surface (its default face, size and colours)
|
|
1030
1141
|
* is laid underneath. The result is a whole document for a sandboxed frame.
|
|
1031
1142
|
*
|
|
1032
|
-
* - **Apple Mail** reads it all: the document as it is, on Apple's surface
|
|
1143
|
+
* - **Apple Mail** reads it all: the document as it is, on Apple's surface;
|
|
1144
|
+
* in dark mode its `prefers-color-scheme: dark` rules apply, so a
|
|
1145
|
+
* fragment's palette colours take their dark variants (dark-mode.ts).
|
|
1033
1146
|
* - **Gmail** drops the comments, the form controls (a hamburger's
|
|
1034
1147
|
* checkbox and label), every `<style>` rule whose selector it cannot
|
|
1035
1148
|
* match (pseudo-classes, attribute selectors, sibling combinators), and
|
|
1036
1149
|
* the declarations the data marks as ignored there (position, flex and
|
|
1037
|
-
* grid, transforms, animation).
|
|
1150
|
+
* grid, transforms, animation). It reads no `prefers-color-scheme`,
|
|
1151
|
+
* and its dark mode inverts the colours.
|
|
1038
1152
|
* - **Outlook on Windows** reads what the Word engine reads: the
|
|
1039
1153
|
* conditional comments meant for it are opened (`[if mso]`, `[if mso |
|
|
1040
1154
|
* IE]`, `[if gte mso 9]`) and the parts kept from it are taken out
|
|
@@ -1044,12 +1158,22 @@ interface ClientRenderingOptions {
|
|
|
1044
1158
|
* shadows, and the rest), and an `inline-block` block stacks. VML is left
|
|
1045
1159
|
* standing — a browser draws none of it, so a picture behind text shows
|
|
1046
1160
|
* as the colour beneath, which is what an Outlook without VML shows too.
|
|
1161
|
+
* Its dark mode (classic Outlook; the new one is Outlook.com's) recolours
|
|
1162
|
+
* the message itself, as Gmail's does, onto its own dark surface.
|
|
1047
1163
|
*
|
|
1048
1164
|
* Takes a fragment (the editor's canonical HTML) or a whole document (an
|
|
1049
1165
|
* import as it was pasted): a document keeps its head — its `<style>`,
|
|
1050
|
-
* subject to the client — with the client's surface laid before it.
|
|
1166
|
+
* subject to the client — with the client's surface laid before it. A
|
|
1167
|
+
* fragment is drawn as `emailDocument` sends it: its dark-mode classes
|
|
1168
|
+
* and rules put in. Outlook.com's markers (`[data-ogsc]`) are set by none
|
|
1169
|
+
* of the three, so their rules never apply here.
|
|
1051
1170
|
*/
|
|
1052
1171
|
declare function renderForClient(html: string, client: RenderingClient, options?: ClientRenderingOptions): string;
|
|
1172
|
+
/** `prefers-color-scheme` answered for the frame: `dark` true where the
|
|
1173
|
+
client is drawn dark and reads the query (Apple Mail), false everywhere
|
|
1174
|
+
else — a client that reads no such query never matches it, whatever
|
|
1175
|
+
the viewer's own scheme. */
|
|
1176
|
+
declare function resolveColorScheme(css: string, dark: boolean): string;
|
|
1053
1177
|
/** Gmail keeps a rule whose selector it can match — elements, classes,
|
|
1054
1178
|
ids, descendants — and drops one with a pseudo-class, an attribute
|
|
1055
1179
|
selector or a sibling combinator; media queries it keeps. */
|
|
@@ -1064,6 +1188,19 @@ declare function dropMediaQueries(css: string): string;
|
|
|
1064
1188
|
* `1. `, links keep their URL, images fall back to their alt text.
|
|
1065
1189
|
*/
|
|
1066
1190
|
declare function emailPlainText(html: string): string;
|
|
1191
|
+
/**
|
|
1192
|
+
* Text as a plain-text message's document — the way back from
|
|
1193
|
+
* {@link emailPlainText}: one email line (`<div>`) per line of text, an
|
|
1194
|
+
* empty line as `<div><br></div>`, every character escaped. What an editor
|
|
1195
|
+
* on `plainTextExtensions` takes when a message turns to plain text:
|
|
1196
|
+
*
|
|
1197
|
+
* ```ts
|
|
1198
|
+
* editor.setContent(plainTextHTML(emailPlainText(html)));
|
|
1199
|
+
* ```
|
|
1200
|
+
*
|
|
1201
|
+
* and `emailPlainText` reads it back as the same lines.
|
|
1202
|
+
*/
|
|
1203
|
+
declare function plainTextHTML(text: string): string;
|
|
1067
1204
|
|
|
1068
1205
|
interface EmailDocumentOptions {
|
|
1069
1206
|
/** The body's language (`en`, `ja`, `de`, …) — screen readers pick their
|
|
@@ -1080,6 +1217,11 @@ interface EmailDocumentOptions {
|
|
|
1080
1217
|
/** The inbox snippet shown next to the subject. Without it the client
|
|
1081
1218
|
takes the first text it finds — often an image's alt or a greeting. */
|
|
1082
1219
|
previewText?: string;
|
|
1220
|
+
/** The colours that take a dark variant where a client reads the
|
|
1221
|
+
email's dark-mode styles (dark-mode.ts) — the library's palette by
|
|
1222
|
+
default; a host with its own palette passes it. `false` leaves dark
|
|
1223
|
+
mode to the client: no `color-scheme`, no variants. */
|
|
1224
|
+
darkMode?: DarkModePalette | false;
|
|
1083
1225
|
}
|
|
1084
1226
|
/**
|
|
1085
1227
|
* The body's head and shell: the fixes every mail client needs, none of which
|
|
@@ -1102,6 +1244,12 @@ interface EmailDocumentOptions {
|
|
|
1102
1244
|
* keeps the cap — narrower, still whole — and loses nothing else, which is
|
|
1103
1245
|
* the same rule the canonical HTML already keeps.
|
|
1104
1246
|
*
|
|
1247
|
+
* Dark mode is the other enhancement (dark-mode.ts): the document says it
|
|
1248
|
+
* is drawn for both schemes, and the palette's colours in it wear a class
|
|
1249
|
+
* that their dark variant hangs on, in a `<style>` of its own — a client
|
|
1250
|
+
* that reads none of it (Gmail, classic Outlook) inverts the light colours,
|
|
1251
|
+
* which are chosen to read inverted.
|
|
1252
|
+
*
|
|
1105
1253
|
* The result is for the transport, not for the editor: parse and
|
|
1106
1254
|
* `emailPlainText` take the fragment `serializeToHTML` returns (the preview
|
|
1107
1255
|
* text would otherwise read as body text).
|
|
@@ -1435,6 +1583,21 @@ declare const richTextExtensions: Extension[];
|
|
|
1435
1583
|
* paragraph margins as double spacing) and empty lines as `<div><br></div>`.
|
|
1436
1584
|
*/
|
|
1437
1585
|
declare const emailExtensions: Extension[];
|
|
1586
|
+
/**
|
|
1587
|
+
* Plain text — a mail client's plain-text mode: the message as lines and
|
|
1588
|
+
* nothing else. No marks, no blocks, no images, no tokens in the schema, so
|
|
1589
|
+
* neither a shortcut (Mod-B has nothing to toggle) nor a paste (HTML is
|
|
1590
|
+
* read down to its text) can bring formatting in. Lines are the email
|
|
1591
|
+
* kit's `<div>` lines, Shift-Enter a `<br>` inside one, so what the editor
|
|
1592
|
+
* publishes is still email HTML — `emailPlainText` reads it back as exactly
|
|
1593
|
+
* the text written, the `text/plain` a plain-text message sends. The
|
|
1594
|
+
* quoted history is kept beside it, as in the email kit.
|
|
1595
|
+
*
|
|
1596
|
+
* A host switches a message between the two by mounting a new editor on
|
|
1597
|
+
* the other kit (a schema is fixed for an editor's life) with the content
|
|
1598
|
+
* carried over: `plainTextHTML(emailPlainText(html))` on the way in.
|
|
1599
|
+
*/
|
|
1600
|
+
declare const plainTextExtensions: Extension[];
|
|
1438
1601
|
/**
|
|
1439
1602
|
* The parallel source-editor kit: the document is HTML source text, one
|
|
1440
1603
|
* `codeLine` per line, with highlighting, linting and formatting instead of
|
|
@@ -1740,14 +1903,32 @@ declare const MergeTag: _h_k_dev_angular_email_editor.MarkExtension;
|
|
|
1740
1903
|
*/
|
|
1741
1904
|
declare function mergeTagFields(doc: Node): string[];
|
|
1742
1905
|
|
|
1906
|
+
/** The levels the schema knows. No h5 or h6: an imported one is a plain
|
|
1907
|
+
line, and `##### ` stays the text it is. */
|
|
1908
|
+
declare const HEADING_LEVELS: readonly [1, 2, 3, 4];
|
|
1743
1909
|
/** The ledger's conservative scale: reads at 320px and on a desktop alike. */
|
|
1744
1910
|
declare const HEADING_SIZES: Record<number, number>;
|
|
1745
|
-
/**
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1911
|
+
/** The space above a heading, by level: its size less {@link HEADING_SPACE_BELOW}. */
|
|
1912
|
+
declare const HEADING_SPACE_ABOVE: Record<number, number>;
|
|
1913
|
+
/** The space below every heading. */
|
|
1914
|
+
declare const HEADING_SPACE_BELOW = 4;
|
|
1915
|
+
/**
|
|
1916
|
+
* A heading's canonical inline style. A heading sits nearer the words it
|
|
1917
|
+
* opens than the words before it (proximity): a margin above, a small one
|
|
1918
|
+
* below — an exception to principle 3, with a list's (lists.ts). Positive px
|
|
1919
|
+
* margins render in Gmail, Outlook's Word engine and Apple Mail alike
|
|
1920
|
+
* (caniemail, 2026-09). Body lines carry none, so two margins meet only
|
|
1921
|
+
* between headings and lists, where a browser collapses the pair and Word
|
|
1922
|
+
* may add it: the space below is one constant 4px, and the space above is
|
|
1923
|
+
* the size less it, so heading after heading Outlook's worst case lands on
|
|
1924
|
+
* the size itself (24/20/18/16), never more than 4px off. A
|
|
1925
|
+
* **layout** heading — a band's title, a column's — sits flush: `margin: 0`,
|
|
1926
|
+
* spacing left to the layout around it. No `line-height` — Outlook
|
|
1927
|
+
* substitutes its own (the client-support module says so) and our output
|
|
1928
|
+
* stays lint-clean. Incoming heading styles never survive: the scale is the
|
|
1929
|
+
* schema's, not the author's.
|
|
1930
|
+
*/
|
|
1931
|
+
declare const headingStyle: (level: number, layout?: boolean) => string;
|
|
1751
1932
|
declare const Heading: _h_k_dev_angular_email_editor.NodeExtension;
|
|
1752
1933
|
|
|
1753
1934
|
/** The ledger's answer to reply chains whose margins stack until text is one
|
|
@@ -2201,6 +2382,167 @@ declare const IN_SELECTION_CLASS = "aee-atom--in-selection";
|
|
|
2201
2382
|
*/
|
|
2202
2383
|
declare const InlineAtomSelection: _h_k_dev_angular_email_editor.FunctionalExtension;
|
|
2203
2384
|
|
|
2385
|
+
/** The class every block of a {@link BlockSelection} wears — the wash the
|
|
2386
|
+
app paints over it, since the selection itself draws nothing. */
|
|
2387
|
+
declare const BLOCK_SELECTED_CLASS = "aee-block--selected";
|
|
2388
|
+
/** The class the blocks of a {@link BlockSelection} just let go of wear, for
|
|
2389
|
+
as long as an animation the app gives it runs — the wash fading out
|
|
2390
|
+
instead of vanishing. Gone once the animation ends, at once with none. */
|
|
2391
|
+
declare const BLOCK_RELEASING_CLASS = "aee-block--releasing";
|
|
2392
|
+
/**
|
|
2393
|
+
* Whole top-level blocks selected as blocks — Notion's block selection: the
|
|
2394
|
+
* marquee's ({@link createBlockMarquee}) and the second `Mod-a`'s.
|
|
2395
|
+
*
|
|
2396
|
+
* Its ends are seams between top-level blocks (depth 0), so it always holds
|
|
2397
|
+
* whole blocks, one or more, in a run: an email is one column of them, and
|
|
2398
|
+
* a box dragged down it covers a run. A columns block or a table is one
|
|
2399
|
+
* block — selected whole, never cell by cell (that is `CellSelection`).
|
|
2400
|
+
*
|
|
2401
|
+
* It copies, cuts, deletes and is pasted over as the blocks (ProseMirror's
|
|
2402
|
+
* own handling, through its range), and draws nothing itself: `visible` is
|
|
2403
|
+
* false, so the browser's highlight is hidden, and every block in it wears
|
|
2404
|
+
* {@link BLOCK_SELECTED_CLASS} for the app to paint (see {@link SelectedBlocks}).
|
|
2405
|
+
*/
|
|
2406
|
+
declare class BlockSelection extends Selection {
|
|
2407
|
+
/** The blocks from `anchorBlock` to `headBlock`, both the positions where
|
|
2408
|
+
a top-level block starts; the head is the end Shift-arrows move. */
|
|
2409
|
+
static create(doc: Node, anchorBlock: number, headBlock?: number): BlockSelection;
|
|
2410
|
+
/** Every block of the document. */
|
|
2411
|
+
static all(doc: Node): BlockSelection;
|
|
2412
|
+
constructor($anchor: ResolvedPos, $head: ResolvedPos);
|
|
2413
|
+
/** The selected blocks, top to bottom. */
|
|
2414
|
+
get blocks(): {
|
|
2415
|
+
node: Node;
|
|
2416
|
+
pos: number;
|
|
2417
|
+
}[];
|
|
2418
|
+
/** The first block's index and the last's among the document's blocks. */
|
|
2419
|
+
get indices(): {
|
|
2420
|
+
first: number;
|
|
2421
|
+
last: number;
|
|
2422
|
+
};
|
|
2423
|
+
/** The block at the head's end: the one Shift-arrows grow or shrink from. */
|
|
2424
|
+
get headIndex(): number;
|
|
2425
|
+
/** The block at the anchor's end, which stays while Shift-arrows move. */
|
|
2426
|
+
get anchorIndex(): number;
|
|
2427
|
+
map(doc: Node, mapping: Mappable): Selection;
|
|
2428
|
+
eq(other: Selection): boolean;
|
|
2429
|
+
toJSON(): {
|
|
2430
|
+
type: string;
|
|
2431
|
+
anchor: number;
|
|
2432
|
+
head: number;
|
|
2433
|
+
};
|
|
2434
|
+
static fromJSON(doc: Node, json: {
|
|
2435
|
+
anchor: unknown;
|
|
2436
|
+
head: unknown;
|
|
2437
|
+
}): BlockSelection;
|
|
2438
|
+
getBookmark(): SelectionBookmark;
|
|
2439
|
+
}
|
|
2440
|
+
/**
|
|
2441
|
+
* Lets a block selection go — the caret at the head's end of its block, as
|
|
2442
|
+
* Escape leaves it, but not scrolled to: the press that let go is elsewhere.
|
|
2443
|
+
* Whether the view holds one or not, nothing else changes; `true` if it did.
|
|
2444
|
+
*/
|
|
2445
|
+
declare function releaseBlockSelection(view: EditorView): boolean;
|
|
2446
|
+
/**
|
|
2447
|
+
* What a {@link BlockSelection} does once there is one: every block in it
|
|
2448
|
+
* lit ({@link BLOCK_SELECTED_CLASS}), and Notion's keys — ArrowUp / ArrowDown
|
|
2449
|
+
* walk to the block above or below, Shift-ArrowUp / -Down grow or shrink the
|
|
2450
|
+
* run, ArrowLeft / ArrowRight leave to the caret at its start or end, Enter
|
|
2451
|
+
* and Escape to the caret in the head's block, Backspace / Delete remove the
|
|
2452
|
+
* blocks; a second `Mod-a` selects every block. Typing does nothing; a
|
|
2453
|
+
* paste replaces the blocks.
|
|
2454
|
+
*
|
|
2455
|
+
* The next press anywhere lets the blocks go, as Notion's do — in the editor
|
|
2456
|
+
* the press is ProseMirror's (or the marquee's) and replaces the selection
|
|
2457
|
+
* itself; outside it, a press that takes focus from the editor (another
|
|
2458
|
+
* field, a title bar, the page) leaves the caret at the head's block
|
|
2459
|
+
* ({@link releaseBlockSelection}). A control that keeps the editor focused —
|
|
2460
|
+
* a formatting toolbar acting on the selection — keeps the blocks. However
|
|
2461
|
+
* they go, the blocks let go wear {@link BLOCK_RELEASING_CLASS} while the
|
|
2462
|
+
* app's fade runs, so the wash eases out rather than vanishing.
|
|
2463
|
+
*
|
|
2464
|
+
* In the kits: the selection is reachable by keyboard alone. The pointer's
|
|
2465
|
+
* way in, the marquee, is the host's to opt into ({@link createBlockMarquee}),
|
|
2466
|
+
* since it needs a surface around the editor to start from.
|
|
2467
|
+
*/
|
|
2468
|
+
declare const SelectedBlocks: _h_k_dev_angular_email_editor.FunctionalExtension;
|
|
2469
|
+
|
|
2470
|
+
/** The class of the box a drag draws — the host paints it, in the same wash
|
|
2471
|
+
as the blocks it lights ({@link BLOCK_SELECTED_CLASS}). */
|
|
2472
|
+
declare const BLOCK_MARQUEE_CLASS = "aee-marquee";
|
|
2473
|
+
interface BlockMarqueeOptions {
|
|
2474
|
+
/**
|
|
2475
|
+
* Where a press may start the box: the margin around the editor, and the
|
|
2476
|
+
* editor's own room between and below its blocks. The editor's parent
|
|
2477
|
+
* element, by default — the composer's scrolling paper. Only the blocks
|
|
2478
|
+
* the box covers *inside* the surface's viewport are selected, and held
|
|
2479
|
+
* near its scroller's edge the drag scrolls it.
|
|
2480
|
+
*/
|
|
2481
|
+
surface?: (view: EditorView) => HTMLElement;
|
|
2482
|
+
/**
|
|
2483
|
+
* What the box is drawn in, once the press has started it — any ancestor
|
|
2484
|
+
* of the surface, or the surface itself (the default). Notion's way: the
|
|
2485
|
+
* drag can only start in the editor's room, but the box follows the
|
|
2486
|
+
* pointer anywhere on the canvas — over a header, the fields above the
|
|
2487
|
+
* text, a side bar — while it still selects only the editor's blocks. The
|
|
2488
|
+
* pointer is clipped to the canvas's viewport.
|
|
2489
|
+
*
|
|
2490
|
+
* The box is absolutely positioned against its containing block, so give
|
|
2491
|
+
* the canvas a `position`; its `overflow` clips the box. The box wears the
|
|
2492
|
+
* editor's `color-scheme`, wherever it is drawn, so its wash is the one
|
|
2493
|
+
* the blocks it lights wear.
|
|
2494
|
+
*/
|
|
2495
|
+
canvas?: (view: EditorView) => HTMLElement;
|
|
2496
|
+
/** How far, in px, a press moves before it is a box and not a click.
|
|
2497
|
+
4, by default: a hand at rest still moves a pixel or two. */
|
|
2498
|
+
threshold?: number;
|
|
2499
|
+
}
|
|
2500
|
+
/**
|
|
2501
|
+
* Notion's marquee: a drag from the empty room around the text draws a box,
|
|
2502
|
+
* and every top-level block it touches is selected — a {@link BlockSelection},
|
|
2503
|
+
* lit block by block in the box's own wash. Opt-in, with
|
|
2504
|
+
* {@link SelectedBlocks} in the kit (which this needs for the keys and the
|
|
2505
|
+
* lit blocks).
|
|
2506
|
+
*
|
|
2507
|
+
* **Where it starts.** A press on the surface outside the editor (its
|
|
2508
|
+
* margin), or on the editor's own box between and below its blocks — never
|
|
2509
|
+
* on a block: a press on text is the text's, and a drag across lines stays a
|
|
2510
|
+
* text selection, as email users expect. Nor on a control of the surface's,
|
|
2511
|
+
* a scrollbar, or with a modifier held. The press is kept from the browser
|
|
2512
|
+
* and ProseMirror alike (no caret jump, no native selection), so a press
|
|
2513
|
+
* released in place is placed here: the caret at the nearest spot in the
|
|
2514
|
+
* text, as a click in the margin of a page puts it in Google Docs.
|
|
2515
|
+
*
|
|
2516
|
+
* **While it drags.** The box is a `div` ({@link BLOCK_MARQUEE_CLASS}) in the
|
|
2517
|
+
* canvas — the surface, unless the host gives a larger one — against the
|
|
2518
|
+
* pointer, clipped to the canvas's viewport, so it may reach over whatever
|
|
2519
|
+
* frames the editor; held near the scroller's edge (or past it) it scrolls,
|
|
2520
|
+
* and the box keeps its origin in the content. Each move hit-tests the
|
|
2521
|
+
* top-level blocks' boxes (the one measured thing — a box drawn by a pointer
|
|
2522
|
+
* has no other geometry) against what the box covers of the surface, and
|
|
2523
|
+
* selects the run it touches; touching none, the selection the press found
|
|
2524
|
+
* comes back. Only blocks are ever selected, wherever the box reaches.
|
|
2525
|
+
* Escape cancels the drag.
|
|
2526
|
+
*/
|
|
2527
|
+
declare const createBlockMarquee: (options?: BlockMarqueeOptions) => FunctionalExtension;
|
|
2528
|
+
/**
|
|
2529
|
+
* Starts the editor's marquee from a press anywhere else — a start point of
|
|
2530
|
+
* the host's own: the room beside a page's text column, the empty room round
|
|
2531
|
+
* a form — as Notion lets a drag start in a page's margins. The host decides
|
|
2532
|
+
* the press is one (its own empty room, not a control); from there it is the
|
|
2533
|
+
* surface's gesture in every way: the box on the canvas, the blocks it
|
|
2534
|
+
* covers of the surface, the scroll, Escape. Released in place it puts no
|
|
2535
|
+
* caret on a line (only the editor's own room does) — it only lets selected
|
|
2536
|
+
* blocks go, as any press outside the editor does.
|
|
2537
|
+
*
|
|
2538
|
+
* Call it from the start point's `mousedown`. It returns whether the box
|
|
2539
|
+
* started (and then took the press: `preventDefault`); `false` without
|
|
2540
|
+
* {@link createBlockMarquee} in the editor, while one is already drawn, in a
|
|
2541
|
+
* read-only editor, and for a press that is not a plain primary one (another
|
|
2542
|
+
* button, a double click, a modifier held).
|
|
2543
|
+
*/
|
|
2544
|
+
declare function beginBlockMarquee(view: EditorView, event: MouseEvent): boolean;
|
|
2545
|
+
|
|
2204
2546
|
/**
|
|
2205
2547
|
* Email data tables: a real `<table>` (the most client-compatible layout there
|
|
2206
2548
|
* is), driven by **prosemirror-tables** — the same model Tiptap and friends
|
|
@@ -2576,15 +2918,31 @@ declare const findListDepth: ($from: ResolvedPos) => number | null;
|
|
|
2576
2918
|
* or converts the list in place when it is of the other flavour.
|
|
2577
2919
|
*/
|
|
2578
2920
|
declare const toggleList: (listType: NodeType, itemType: NodeType) => Command;
|
|
2921
|
+
/**
|
|
2922
|
+
* The layout list's toggle: wraps the selection in a layout list, makes the
|
|
2923
|
+
* list it is in one (either flavour, kept flush), or lifts out of it when it
|
|
2924
|
+
* is one already.
|
|
2925
|
+
*/
|
|
2926
|
+
declare const toggleLayoutList: (listType: NodeType, itemType: NodeType) => Command;
|
|
2579
2927
|
/**
|
|
2580
2928
|
* Tiptap-inspired helper: Intercepts the default splitListItem transaction
|
|
2581
2929
|
* and ensures marks (bold, italic, etc.) are carried over to the new list item.
|
|
2582
2930
|
*/
|
|
2583
2931
|
declare const splitListItemKeepMarks: (itemType: NodeType) => Command;
|
|
2584
|
-
/** The
|
|
2585
|
-
|
|
2586
|
-
|
|
2587
|
-
|
|
2932
|
+
/** The space above and below a list: Gmail's own. */
|
|
2933
|
+
declare const LIST_SPACE = 12;
|
|
2934
|
+
/**
|
|
2935
|
+
* A list's canonical inline style. The indent is the ledger's answer to the
|
|
2936
|
+
* 40px-per-level default that eats a third of a phone screen: 24px, nested
|
|
2937
|
+
* lists compounding it, readable at 320px. A list keeps 12px above and below
|
|
2938
|
+
* — Gmail's spacing, the margins the schema writes besides a heading's
|
|
2939
|
+
* (positive px margins render in Gmail, Outlook's Word engine and Apple Mail
|
|
2940
|
+
* alike; where one meets a heading's or another list's, Outlook may add the
|
|
2941
|
+
* two, up to 12px past what a browser shows). A **layout** list sits flush,
|
|
2942
|
+
* `margin: 0`, spacing left to the layout around it — and so does every
|
|
2943
|
+
* nested list, which belongs to its item's line (see {@link listRepair}).
|
|
2944
|
+
*/
|
|
2945
|
+
declare const listStyle: (layout?: boolean) => string;
|
|
2588
2946
|
declare const ListItem: _h_k_dev_angular_email_editor.NodeExtension;
|
|
2589
2947
|
declare const BulletList: _h_k_dev_angular_email_editor.NodeExtension;
|
|
2590
2948
|
declare const OrderedList: _h_k_dev_angular_email_editor.NodeExtension;
|
|
@@ -3907,6 +4265,127 @@ interface SendIntentOptions {
|
|
|
3907
4265
|
*/
|
|
3908
4266
|
declare const createSendIntent: (options: SendIntentOptions) => FunctionalExtension;
|
|
3909
4267
|
|
|
4268
|
+
/**
|
|
4269
|
+
* What an empty line is, as the placeholder words it — Notion's blocks that
|
|
4270
|
+
* carry words of their own, read from where the line stands:
|
|
4271
|
+
* - `'heading'` — a heading, any level.
|
|
4272
|
+
* - `'quote'` — a line directly in a blockquote.
|
|
4273
|
+
* - `'bulletList'` / `'orderedList'` — a list item's own line (its first).
|
|
4274
|
+
* - `'tableCell'` — a table cell.
|
|
4275
|
+
* - `'line'` — any other line: a paragraph, a column's, a section's.
|
|
4276
|
+
*/
|
|
4277
|
+
type PlaceholderKind = 'line' | 'heading' | 'quote' | 'bulletList' | 'orderedList' | 'tableCell';
|
|
4278
|
+
/** An empty line the placeholder may speak on — what a function-form
|
|
4279
|
+
{@link PlaceholderText} is asked with. */
|
|
4280
|
+
interface PlaceholderLine {
|
|
4281
|
+
/** The empty textblock: a paragraph, a heading, a list item's line. */
|
|
4282
|
+
node: Node;
|
|
4283
|
+
/** Its position in the document. */
|
|
4284
|
+
pos: number;
|
|
4285
|
+
/** What it is — see {@link PlaceholderKind}. */
|
|
4286
|
+
kind: PlaceholderKind;
|
|
4287
|
+
/** Whether it is the whole document's only line — the body is empty. */
|
|
4288
|
+
docEmpty: boolean;
|
|
4289
|
+
state: EditorState;
|
|
4290
|
+
}
|
|
4291
|
+
/**
|
|
4292
|
+
* The words by what is empty, Notion's set. A block kind's words show on
|
|
4293
|
+
* every empty block of that kind, focused or not — an empty heading still
|
|
4294
|
+
* reads as a heading; `line` is the hint under the caret. A kind left out
|
|
4295
|
+
* (`undefined`) is a plain line and takes the hint; `''` leaves it bare.
|
|
4296
|
+
*/
|
|
4297
|
+
interface PlaceholderWords {
|
|
4298
|
+
/** A plain line under the caret: Notion's "Type '/' for commands". */
|
|
4299
|
+
line?: string;
|
|
4300
|
+
/** The whole body while it is empty. Default {@link line}. */
|
|
4301
|
+
empty?: string;
|
|
4302
|
+
/** A heading — one string for every level, or one per level (index 0 is
|
|
4303
|
+
level 1; a level past the end takes the last). */
|
|
4304
|
+
heading?: string | readonly string[];
|
|
4305
|
+
/** A line in a quote: Notion's "Empty quote". */
|
|
4306
|
+
quote?: string;
|
|
4307
|
+
/** A bulleted list item: Notion's "List". */
|
|
4308
|
+
bulletList?: string;
|
|
4309
|
+
/** A numbered list item: Notion's "List". */
|
|
4310
|
+
orderedList?: string;
|
|
4311
|
+
/** A table cell — Notion's cells say nothing, so `''` follows it. */
|
|
4312
|
+
tableCell?: string;
|
|
4313
|
+
/** An image with no file yet: Notion's "Add an image". The frame keeps
|
|
4314
|
+
its own words without it. */
|
|
4315
|
+
image?: string;
|
|
4316
|
+
}
|
|
4317
|
+
/**
|
|
4318
|
+
* The words on an empty line:
|
|
4319
|
+
* - a string — the hint under the caret, the same words everywhere: what a
|
|
4320
|
+
* host's template hands in through its translate pipe.
|
|
4321
|
+
* - {@link PlaceholderWords} — words by kind, Notion's way. Build it once per
|
|
4322
|
+
* language (a `computed`), never per line.
|
|
4323
|
+
* - a function of the line — anything else; asked for each empty line when
|
|
4324
|
+
* it changes. Its words on a block kind show always, on a plain line under
|
|
4325
|
+
* the caret; `null` or `''` leaves the line bare.
|
|
4326
|
+
*/
|
|
4327
|
+
type PlaceholderText = string | PlaceholderWords | ((line: PlaceholderLine) => string | null | undefined);
|
|
4328
|
+
interface PlaceholderOptions {
|
|
4329
|
+
/** The words — see {@link PlaceholderText}. Replaced later with the
|
|
4330
|
+
`setPlaceholder` command, which is how a host follows a language
|
|
4331
|
+
switch. Default none: the editor shows nothing until it is given words. */
|
|
4332
|
+
text?: PlaceholderText;
|
|
4333
|
+
/**
|
|
4334
|
+
* Which plain empty lines show the hint, while the editor is editable:
|
|
4335
|
+
* - `'caret'` (default) — the one the caret is on, while the editor has
|
|
4336
|
+
* focus: Notion's. Moving on hides it.
|
|
4337
|
+
* - `'all'` — every empty line, focused or not.
|
|
4338
|
+
*
|
|
4339
|
+
* A block kind with words of its own shows them either way, and an empty
|
|
4340
|
+
* body shows its words on its one line, focused or not: the field says
|
|
4341
|
+
* what it is for, as a textarea's placeholder does.
|
|
4342
|
+
*/
|
|
4343
|
+
show?: 'caret' | 'all';
|
|
4344
|
+
}
|
|
4345
|
+
interface PlaceholderState {
|
|
4346
|
+
text: PlaceholderText | undefined;
|
|
4347
|
+
/** What shows without the caret: block kinds, every line under `'all'`,
|
|
4348
|
+
an empty body, image frames. Kept across transactions and redone only
|
|
4349
|
+
where the document changed — the caret's hint is added per draw. */
|
|
4350
|
+
set: DecorationSet;
|
|
4351
|
+
}
|
|
4352
|
+
declare const placeholderKey: PluginKey<PlaceholderState>;
|
|
4353
|
+
/** Replaces the placeholder's words — every empty line redraws at once.
|
|
4354
|
+
Nothing enters the undo history. */
|
|
4355
|
+
declare const setPlaceholder: (text: PlaceholderText | undefined) => Command;
|
|
4356
|
+
/**
|
|
4357
|
+
* A placeholder on empty lines, Notion's way: the line the caret is on says
|
|
4358
|
+
* what can be done there ("Type / for commands") and the hint goes as soon as
|
|
4359
|
+
* a character is typed or the caret moves on, while an empty block of a kind
|
|
4360
|
+
* says what it is ("Heading 1", "List", "Empty quote") wherever the caret is.
|
|
4361
|
+
* Nothing of it is in the document — a node decoration puts a class and the
|
|
4362
|
+
* words on the line:
|
|
4363
|
+
*
|
|
4364
|
+
* <div class="aee-placeholder" data-placeholder="Type / for commands">
|
|
4365
|
+
*
|
|
4366
|
+
* and the host's stylesheet paints them (`content: attr(data-placeholder)`),
|
|
4367
|
+
* so the look stays the host's. An empty body is also marked with
|
|
4368
|
+
* `aee-placeholder-doc`, and the editable element carries the words as
|
|
4369
|
+
* `aria-placeholder`, so a screen reader hears what the field is for. An
|
|
4370
|
+
* image waiting for its file gets its words through a node decoration whose
|
|
4371
|
+
* spec carries `placeholder`, which the image's node view puts in its frame.
|
|
4372
|
+
*
|
|
4373
|
+
* The words are the host's, in its language — the library words nothing.
|
|
4374
|
+
* Hand them in as {@link PlaceholderOptions.text} and replace them with the
|
|
4375
|
+
* `setPlaceholder` command whenever they change:
|
|
4376
|
+
*
|
|
4377
|
+
* effect(() => editor.commands.setPlaceholder(this.placeholders()));
|
|
4378
|
+
*
|
|
4379
|
+
* Typing costs only the lines it touched: the decorations live in the
|
|
4380
|
+
* plugin's state, mapped through each change and redone where it landed;
|
|
4381
|
+
* new words redo them once.
|
|
4382
|
+
*
|
|
4383
|
+
* Code lines never show it: an empty line of source is just that. Neither
|
|
4384
|
+
* does a read-only editor (an image frame keeps its words), nor the line
|
|
4385
|
+
* mid-composition (an IME's text is not in the document yet).
|
|
4386
|
+
*/
|
|
4387
|
+
declare const createPlaceholder: (options?: PlaceholderOptions) => FunctionalExtension;
|
|
4388
|
+
|
|
3910
4389
|
/**
|
|
3911
4390
|
* Fills the document's placeholders in with their values — the step a CRM
|
|
3912
4391
|
* runs before a templated mail goes out ("Platzhalter einsetzen").
|
|
@@ -4051,5 +4530,5 @@ declare class InlineImages extends InlineImageStore {
|
|
|
4051
4530
|
static ɵprov: i0.ɵɵInjectableDeclaration<any>;
|
|
4052
4531
|
}
|
|
4053
4532
|
|
|
4054
|
-
export { AUTHORED_ATTR, AUTHORED_SPEC_KEY, AUTHORED_STYLE_DEFAULTS_KEY, AuthoredEnter, BLOCKQUOTE_STYLE, BLOCK_MENU_FOCUS_KEY, BUTTON_FILL, BUTTON_STYLE, BaseKeymap, Blockquote, Bold, BulletList, Button, CARET_ROOM, CLIENT_LABELS, COLUMN_STARTING_LINES, COMMENT_TAG, CONTENT_ATTRS, CSS_SUPPORT, ClearFormatting, CodeLine, CodeLineIndent, Column, ColumnResize, Columns, ColumnsResize, DOCUMENT_CLASS, DOCUMENT_TAGS, DUAL_BACKGROUND_MIN_RATIO, DUAL_CONTRAST_DARK, DUAL_CONTRAST_LIGHT, DUAL_CONTRAST_MIN_RATIO, Divider, Document$1 as Document, DocumentStyles, EMAIL_ATTRIBUTES, EMAIL_CSS_PROPERTIES, EMAIL_SAFE_STYLE_PROPERTIES, EMAIL_SAFE_TAGS, EMAIL_TAGS, EMAIL_TAG_ATTRIBUTES, EmailParagraph, FILE_CHOOSER_POINTER_WAIT, FILL_TEXT_COLOR, FILL_TEXT_COLOR_LIGHT, FILL_TEXT_COLOR_RGB, FOLD_WIDTH, FORMAT_WIDTH, GMAIL_CLIP_BYTES, GUIDES_ACTIVE_CLASS, GUIDES_PEEK_CLASS, GUIDES_PEEK_DELAY_MS, Gapcursor, HEADING_SIZES, HardBreak, Heading, History, HtmlComment, HtmlCommentInline, HtmlElement, HtmlInline, HtmlLanguage, HtmlRaw, HtmlTextElement, HtmlVoid, HtmlVoidBlock, IMPORT_VIEWPORT_WIDTH, INDENT_MAX, INDENT_STEP, INLINE_TAGS, INLINE_VOID_TAGS, IN_SELECTION_CLASS, Image, InlineAtomSelection, InlineImageStore, InlineImages, Italic,
|
|
4055
|
-
export type { AngularExpressionsOptions, AngularNode, AttributePairs, AuthoredElement, AuthoredMarkup, AutocompleteItem, AutocompleteOptions, AutocompleteState, BlockMenuOptions, BlockMenuState, BubbleMenuOptions, BubbleMenuState, ButtonEditOptions, ButtonEditTarget, CellAlignment, CellVerticalAlignment, ClientRenderingOptions, CommandFactory, CompletionContext, ComposeSeedLabels, ComposeSeedOptions, ContentProposalOptions, ContentProposalState, ContentStreamOptions, ContentStreamRange, ContentStreamReveal, ContentStreamRun, ContentStreamState, ContentStreamWriter, CssSupportIssue, DocumentEnvelope, Editor, EditorAction, EditorOptions, EmailClient, EmailDocumentOptions, ExpressionDiagnostic, ExpressionDialect, ExpressionIssue, Extension, ExtensionContext, FunctionalExtension, HrefProblem, HtmlDiagnostic, HtmlLanguageOptions, HtmlScan, HtmlTag, HtmlToken, HtmlTokenType, ImageAttrs, ImageDragOptions, ImageDropTarget, ImportLoss, InboundMessage, InlineAtomAt, InlineImage, InlineImageRegistry, InlineImageStoreOptions, LayoutBlock, LayoutBlockType, LinkAttrs, LinkRange, ListedSuggestion, MarkExtension, MenuAnchor, MenuPlacement, MenuScroll, MenuScrollApi, MergeTagRange, MergeTagResolutionOptions, MergeTagResolutionReport, NodeExtension, PagedSourceOptions, PaletteColor, ParagraphAlignment, ParseMode, ParseOptions, ParsedAddressLike, ParsedEmailLike, PromotedInlineImages, QuotedHistoryLabel, QuotedHistoryLabels, QuotedHistoryOptions, RenderingClient, ReplyEnvelope, ReplyEnvelopeOptions, ReplyKind, RuleScope, SendIntent, SendIntentOptions, SizeBudget, SourceMarksOptions, SourceOptions, StreamContentOptions, SuggestionAllowProps, SuggestionCommandItem, SuggestionFrom, SuggestionGroup, SuggestionItem, SuggestionItemLabel, SuggestionMenuOptions, SuggestionMenuState, SuggestionPage, SuggestionPageRequest, SuggestionRect, SuggestionRequest, SuggestionSource, SuggestionTrigger, TableHandleTarget, TableHandlesOptions, TableKind, TextTransform };
|
|
4533
|
+
export { AUTHORED_ATTR, AUTHORED_SPEC_KEY, AUTHORED_STYLE_DEFAULTS_KEY, AuthoredEnter, BLOCKQUOTE_STYLE, BLOCK_MARQUEE_CLASS, BLOCK_MENU_FOCUS_KEY, BLOCK_RELEASING_CLASS, BLOCK_SELECTED_CLASS, BUTTON_FILL, BUTTON_STYLE, BaseKeymap, BlockSelection, Blockquote, Bold, BulletList, Button, CARET_ROOM, CLIENT_LABELS, COLOR_SCHEME_META, COLOR_SCHEME_RULE, COLUMN_STARTING_LINES, COMMENT_TAG, CONTENT_ATTRS, CSS_SUPPORT, ClearFormatting, CodeLine, CodeLineIndent, Column, ColumnResize, Columns, ColumnsResize, DARK_FILL_CLASS, DARK_MODE_SURFACES, DARK_TEXT_CLASS, DOCUMENT_CLASS, DOCUMENT_TAGS, DUAL_BACKGROUND_MIN_RATIO, DUAL_CONTRAST_DARK, DUAL_CONTRAST_LIGHT, DUAL_CONTRAST_MIN_RATIO, Divider, Document$1 as Document, DocumentStyles, EMAIL_ATTRIBUTES, EMAIL_CSS_PROPERTIES, EMAIL_SAFE_STYLE_PROPERTIES, EMAIL_SAFE_TAGS, EMAIL_TAGS, EMAIL_TAG_ATTRIBUTES, EmailParagraph, FILE_CHOOSER_POINTER_WAIT, FILL_TEXT_COLOR, FILL_TEXT_COLOR_LIGHT, FILL_TEXT_COLOR_RGB, FOLD_WIDTH, FORMAT_WIDTH, GMAIL_CLIP_BYTES, GUIDES_ACTIVE_CLASS, GUIDES_PEEK_CLASS, GUIDES_PEEK_DELAY_MS, Gapcursor, HEADING_LEVELS, HEADING_SIZES, HEADING_SPACE_ABOVE, HEADING_SPACE_BELOW, HardBreak, Heading, History, HtmlComment, HtmlCommentInline, HtmlElement, HtmlInline, HtmlLanguage, HtmlRaw, HtmlTextElement, HtmlVoid, HtmlVoidBlock, IMPORT_VIEWPORT_WIDTH, INDENT_MAX, INDENT_STEP, INLINE_TAGS, INLINE_VOID_TAGS, IN_SELECTION_CLASS, Image, InlineAtomSelection, InlineImageStore, InlineImages, Italic, LIST_SPACE, LayoutGuides, Link, ListItem, MAX_COLUMNS, MAX_IMAGE_WIDTH, MAX_MERGE_TAG_LENGTH, MAX_UNBROKEN_RUN, MIN_COLUMN_CAP, MIN_COLUMN_PCT, MIN_FONT_SIZE, MIN_IMAGE_WIDTH, MIN_TABLE_PCT, MJML_WORLDLY_HTML, MergeTag, NoTextDrag, OrderedList, PARSE_SCOPE_KEY, PLACEHOLDER_WIDTH, Paragraph, PasteHygiene, QuotedHistory, REFUSED_TAGS, RENDERING_CLIENTS, SECTION_CONTENT_MAX, SECTION_INSET, SECTION_PADDING, STACK_CLASS, STACK_RULE, Section, SelectedBlocks, SplitKeepingMarks, TABLE_BLOCK_SPACING, TABLE_BORDER_COLOR, TABLE_CELL_PADDING, TABLE_SECTION_TAGS, TYPING_REST, Table, TableCell, TableRow, Text, TextStyle, UNSET_BUTTON_HREF, Underline, VOID_TAGS, acceptProposal, addColumn, addColumnAtEnd, addRowAtEnd, analyzeAngularExpression, angularDialect, angularRequiredFields, appendColumn, applyAuthoredAttributes, applyEmailVocabulary, attributeString, authoredAttribute, authoredMarkupOf, authoredViewAttributes, bareButtons, beginBlockMarquee, buttonStyle, canonicalHead, canonicalMergeTagInner, canonicalRender, caretCellPos, caretInsideMergeTag, claimedImageFiles, clearCells, clientList, columnCaps, columnWidths, completionContextAt, containerStyle, contrastRatio, correctStoredMistakes, createAngularExpressions, createBlockMarquee, createBlockMenu, createBubbleMenu, createButtonEdit, createContentProposal, createContentStream, createDOMParser, createEditor, createHtmlAutocomplete, createHtmlLanguage, createImageDrag, createInlineImages, createMergeTagResolution, createOffsetMapper, createPlaceholder, createQuotedHistory, createSchema, createSendIntent, createSourceMarks, createSuggestionMenu, createTableHandles, cssColorToHex, darkModeEditorCss, declarationProperty, declaredBackground, decodeDataUrl, defaultBubbleShouldShow, defineExtension, defineMark, defineNode, deleteColumns, deleteFullySelected, discardProposal, distributePadding, docText, dropDeadOfficeClasses, dropHidden, dropMediaQueries, dropZeroSizedWhitespace, duplicateColumn, duplicateRow, editQuotedHistory, effectiveWidths, emailBackgroundPalette, emailDarkModePalette, emailDocument, emailExtensions, emailPlainText, emailSizeBudget, emailTextPalette, embedsAsLinks, entitySpans, escapeAttribute, escapeText, expressionDialect, expressionDialectKey, extensionActions, extensionSuggestions, fillTextColor, filledPlaceholderAttrs, filterEmailStyle, findColumnContext, findColumnsContext, findCssIssues, findListDepth, findSectionContext, findTableContext, fitImageWidth, foldHTML, formatHTML, formatPct, forwardDocument, forwardQuote, hasBlockChildren, hasDocumentEnvelope, headingStyle, holdsBlock, holdsColumn, hrefProblem, htmlSourceExtensions, imageDropTarget, importLoss, importedDocument, inheritTextStyles, inheritedMarkup, inlineBootstrapTableBorders, inlineImageCids, inlineImageRegistry, inlineImagesKey, inlineStyles, insertHTML, insertMergeTag, isActionEnabled, isBlock, isBlockLevel, isBlockish, isBooleanAttribute, isEmailAttribute, isEmailCssProperty, isEmailTag, isFillTextColor, isInlineAtom, isMarkActive, isMergeTagExpression, isMergeTagPath, isNodeActive, isPadded, isProposing, isQuotedHistoryFolded, isSafeColor, isSafeFontFamily, isSafeFontSize, isSafeUrl, isSectionImageUrl, isStreaming, italicStarInputRegex, italicStarPasteRegex, italicUnderscoreInputRegex, italicUnderscorePasteRegex, keepGmailRules, layoutBlockAt, linkClickPlugin, linkPastePlugin, linkRangeAt, lintHTML, listStyle, lowerInlinesAroundBlocks, markAttrsOf, markDarkMode, markStackingColumns, marksAcrossBreak, materializeComments, measureMenuPlacement, mediaMatches, mergeTagAt, mergeTagExpressions, mergeTagFields, mergeTagRanges, mergeTagResolutionPending, moveColumn, moveRow, normalizeCommentText, normalizeCss, normalizeHref, normalizeMergeTagText, noteOwnWidths, openFileChooser, openTag, openTags, outlookColumns, paddingOf, pagedSource, parseAngularExpression, parseDocument, parseFontFamily, parseFontSize, parseHTML, parsePadding, parseRules, parseTextTransform, passesDualBackground, passesDualContrast, placeholderKey, plainTextExtensions, plainTextHTML, preserveExtensions, preservedAttributes, promoteInlineImages, promoteMergeTags, proposalRange, proposeContent, quotedHistory, readEnvelope, readImageFile, realizeComments, relativeLuminance, releaseBlockSelection, removeColumn, removeLastColumn, removeQuotedHistory, renderForClient, renderedPath, repairLinkSchemes, repairTables, replaceHTML, replyDocument, replyEnvelope, replyQuote, resolveColorScheme, reviseProposal, rewriteInlineImageSources, richTextExtensions, ruleForScope, ruleScope, sanitizePastedHTML, scanHTML, scanMergeTags, scopeOf, scopedDocumentCss, selectColumn, selectRow, selectedButton, selectedImage, selectedImageAlt, selectedMarkAtom, selectionInsideMergeTag, serializeDocument, serializeToHTML, setCellBackground, setColumnBackground, setColumnBoundary, setColumnsBoundary, setPlaceholder, setQuotedHistory, setSectionBackground, setSectionImage, setTableBox, setTableWidth, soleInlineAtom, splitDeclarations, splitListItemKeepMarks, starInputRegex, starPasteRegex, stopProposal, streamContent, streamedRange, streamingRange, suggestionSectionTitles, tableStyle, textOffsetAt, textRegions, toEmailSafeColor, toInboundMessage, toggleLayoutList, toggleList, trimInlineBoxes, underscoreInputRegex, underscorePasteRegex, unwrapLayoutTables, unwrapOfficeParagraphMarks, verbatimElement, videoPage, watchMenuScroll, withAttribute, withAuthoredMarkup, withQuoted, withQuotedHistory, withStyleDeclaration, withoutAttribute, withoutStyleDeclaration };
|
|
4534
|
+
export type { AngularExpressionsOptions, AngularNode, AttributePairs, AuthoredElement, AuthoredMarkup, AutocompleteItem, AutocompleteOptions, AutocompleteState, BlockMarqueeOptions, BlockMenuOptions, BlockMenuState, BubbleMenuOptions, BubbleMenuState, ButtonEditOptions, ButtonEditTarget, CellAlignment, CellVerticalAlignment, ClientRenderingOptions, CommandFactory, CompletionContext, ComposeSeedLabels, ComposeSeedOptions, ContentProposalOptions, ContentProposalState, ContentStreamOptions, ContentStreamRange, ContentStreamReveal, ContentStreamRun, ContentStreamState, ContentStreamWriter, CssSupportIssue, DarkModeMarking, DarkModePalette, DocumentEnvelope, Editor, EditorAction, EditorOptions, EmailClient, EmailDocumentOptions, ExpressionDiagnostic, ExpressionDialect, ExpressionIssue, Extension, ExtensionContext, FunctionalExtension, HrefProblem, HtmlDiagnostic, HtmlLanguageOptions, HtmlScan, HtmlTag, HtmlToken, HtmlTokenType, ImageAttrs, ImageDragOptions, ImageDropTarget, ImportLoss, InboundMessage, InlineAtomAt, InlineImage, InlineImageRegistry, InlineImageStoreOptions, LayoutBlock, LayoutBlockType, LinkAttrs, LinkRange, ListedSuggestion, MarkExtension, MenuAnchor, MenuPlacement, MenuScroll, MenuScrollApi, MergeTagRange, MergeTagResolutionOptions, MergeTagResolutionReport, NodeExtension, PagedSourceOptions, PaletteColor, ParagraphAlignment, ParseMode, ParseOptions, ParsedAddressLike, ParsedEmailLike, PlaceholderKind, PlaceholderLine, PlaceholderOptions, PlaceholderText, PlaceholderWords, PromotedInlineImages, QuotedHistoryLabel, QuotedHistoryLabels, QuotedHistoryOptions, RenderingClient, ReplyEnvelope, ReplyEnvelopeOptions, ReplyKind, RuleScope, SendIntent, SendIntentOptions, SizeBudget, SourceMarksOptions, SourceOptions, StreamContentOptions, SuggestionAllowProps, SuggestionCommandItem, SuggestionFrom, SuggestionGroup, SuggestionItem, SuggestionItemLabel, SuggestionMenuOptions, SuggestionMenuState, SuggestionPage, SuggestionPageRequest, SuggestionRect, SuggestionRequest, SuggestionSource, SuggestionTrigger, TableHandleTarget, TableHandlesOptions, TableKind, TextTransform };
|