@h-k-dev/angular-email-editor 0.0.3 → 0.0.5

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": "@h-k-dev/angular-email-editor",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "An email editor for Angular on ProseMirror — a visual composer and an HTML source editor over one schema that is the vocabulary of email HTML.",
5
5
  "license": "MIT",
6
6
  "author": "h-k-dev",
@@ -104,6 +104,10 @@
104
104
  "types": "./types/h-k-dev-angular-email-editor-focus.d.ts",
105
105
  "default": "./fesm2022/h-k-dev-angular-email-editor-focus.mjs"
106
106
  },
107
+ "./fonts": {
108
+ "types": "./types/h-k-dev-angular-email-editor-fonts.d.ts",
109
+ "default": "./fesm2022/h-k-dev-angular-email-editor-fonts.mjs"
110
+ },
107
111
  "./image": {
108
112
  "types": "./types/h-k-dev-angular-email-editor-image.d.ts",
109
113
  "default": "./fesm2022/h-k-dev-angular-email-editor-image.mjs"
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The fonts an email is written in — Gmail's set, in Gmail's order — as
3
+ * plain data: no Angular, no ProseMirror. The editor's `textStyle` mark
4
+ * stores and emits only these stacks, the toolbar offers them, and an
5
+ * editor of another kind (summernote's `fontNames`) can offer the same set
6
+ * from the same constant, so a message reads the same font whichever
7
+ * composer wrote it.
8
+ */
9
+ /**
10
+ * A client a font is checked against — the three a writer's recipients
11
+ * mostly read in, the same ids as the library's `RenderingClient`.
12
+ */
13
+ type FontClient = 'gmail' | 'apple-mail' | 'outlook-desktop';
14
+ /** The clients, in the order a picker shows them (G, A, O), with the letter
15
+ and name it shows them by. */
16
+ declare const fontClients: readonly {
17
+ id: FontClient;
18
+ letter: string;
19
+ name: string;
20
+ }[];
21
+ /** A font the editor offers: one of {@link emailFontFamilies}. */
22
+ interface EmailFont {
23
+ /** Stable, for a host's translation key: `sans-serif`, `fixed-width`, … */
24
+ readonly id: string;
25
+ /** The label, in English — Gmail's words. */
26
+ readonly name: string;
27
+ /**
28
+ * The exact `font-family` value emitted — the canonical stored form. A
29
+ * family name of more than one word is double-quoted: the CSSOM (Chrome's
30
+ * and jsdom's alike) quotes it on reserialization, so the stored bytes are
31
+ * already what comes back and a round trip is stable.
32
+ */
33
+ readonly stack: string;
34
+ /** The face the stack is for — its first family, unquoted: what an editor
35
+ that sets a single family (summernote) offers for it. */
36
+ readonly face: string;
37
+ /**
38
+ * The clients that draw the face itself rather than its fallback — the
39
+ * face is on the machine the client runs on:
40
+ *
41
+ * - `gmail`: Gmail on the web, read on Windows or macOS (it draws with
42
+ * the reader's own fonts; one of them lacking the face is a no).
43
+ * - `apple-mail`: Apple Mail on macOS *and* iOS — a phone lacks Arial
44
+ * Black, Comic Sans, Tahoma.
45
+ * - `outlook-desktop`: Outlook on Windows, which brings Office's fonts
46
+ * (Arial Narrow, Garamond).
47
+ *
48
+ * Elsewhere the stack's fallback draws: the email still reads, in a near
49
+ * face. Curated, conservative — a face only some readers have is a no.
50
+ */
51
+ readonly clients: readonly FontClient[];
52
+ }
53
+ /**
54
+ * Gmail's fonts, in its menu's order. A stack is the face, then what a
55
+ * client without it should draw instead, then the generic. Each face leads
56
+ * only its own stack, so a single family read back from another editor
57
+ * (`font-family: 'Arial Black'`) finds its font exactly.
58
+ *
59
+ * The first stack naming a family claims it (see {@link matchEmailFont}):
60
+ * `helvetica` and `sans-serif` read as Sans Serif, `times` and `serif` as
61
+ * Serif, `courier` and `monospace` as Fixed width.
62
+ */
63
+ declare const emailFontFamilies: readonly EmailFont[];
64
+ /**
65
+ * The font a message is written in until the writer picks another — Gmail's
66
+ * Sans Serif, Arial. Nothing is emitted for it: unstyled text is drawn in
67
+ * the client's own default, as Gmail's is. An editor shows it as its
68
+ * surface font, so what is written looks as it will in Gmail; summernote
69
+ * takes its face (`fontName: emailDefaultFont.face`).
70
+ */
71
+ declare const emailDefaultFont: EmailFont;
72
+ /**
73
+ * The faces of {@link emailFontFamilies}, in order — the set for an editor
74
+ * that offers single families. For summernote, both lists: `fontNamesIgnoreCheck`
75
+ * keeps a face this machine lacks (Garamond, Arial Narrow) in the menu.
76
+ *
77
+ * ```ts
78
+ * $('#editor').summernote({ fontNames: emailFontFaces, fontNamesIgnoreCheck: emailFontFaces });
79
+ * ```
80
+ */
81
+ declare const emailFontFaces: readonly string[];
82
+ /** Every size the editor stores, in px. */
83
+ declare const allowedFontSizes: readonly [10, 12, 14, 16, 18, 24, 32];
84
+ type FontSize = (typeof allowedFontSizes)[number];
85
+ /**
86
+ * The sizes a picker offers: the phone-safe subset (≥14px). Below ~13px iOS
87
+ * auto-inflates text and reflows the layout, so they are not *offered* —
88
+ * but every {@link allowedFontSizes} size is still read and kept, because a
89
+ * hand-typed size in the HTML source is the author's own responsibility.
90
+ */
91
+ declare const emailFontSizes: readonly FontSize[];
92
+ /** A `font-family` value as a comparison key: lower-cased, quotes dropped,
93
+ whitespace around commas collapsed — so a hand-typed or CSSOM-reserialized
94
+ stack matches a curated one regardless of cosmetic differences. */
95
+ declare function fontFamilyKey(raw: string): string;
96
+ /** Whether `value` is exactly one of the stacks, give or take quotes, case
97
+ and spacing. */
98
+ declare function isEmailFontStack(value: unknown): value is string;
99
+ /**
100
+ * The font a `font-family` value is. One of the stacks is itself; a stack of
101
+ * someone else's is the font it falls back to — the first of its families a
102
+ * stack names, its generic last: a builder's web font (`Ubuntu, Helvetica,
103
+ * Arial, sans-serif`) is Sans Serif, the face a client without that font
104
+ * draws anyway, and summernote's `'Comic Sans MS'` is Comic Sans MS.
105
+ * Nothing to fall back to, no font.
106
+ */
107
+ declare function matchEmailFont(raw: string | null | undefined): EmailFont | null;
108
+
109
+ export { allowedFontSizes, emailDefaultFont, emailFontFaces, emailFontFamilies, emailFontSizes, fontClients, fontFamilyKey, isEmailFontStack, matchEmailFont };
110
+ export type { EmailFont, FontClient, FontSize };
@@ -4,6 +4,8 @@ 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
6
  import { EditorView } from 'prosemirror-view';
7
+ import { FontSize } from '@h-k-dev/angular-email-editor/fonts';
8
+ export * from '@h-k-dev/angular-email-editor/fonts';
7
9
  import * as i0 from '@angular/core';
8
10
 
9
11
  /** Passed to every extension factory once the schema has been built. */
@@ -2233,8 +2235,12 @@ declare const InlineAtomSelection: _h_k_dev_angular_email_editor.FunctionalExten
2233
2235
  40% of the container, in every client and in the editor alike). The
2234
2236
  offset serializes as `margin-left` — inline margins on tables are what
2235
2237
  Outlook's own Word composer emits, so its engine reads them, and a client
2236
- that strips them degrades the table gracefully to left-aligned. */
2237
- declare const tableStyle: (width: number, offset: number) => string;
2238
+ that strips them degrades the table gracefully to left-aligned.
2239
+ `spacing` (px, or null for none) is the room above and below the table —
2240
+ `margin-top`/`margin-bottom`, block only, never the sides: real space
2241
+ between the table and the lines of text around it, which a client that
2242
+ strips it degrades to a table flush against its neighbours. */
2243
+ declare const tableStyle: (width: number, offset: number, spacing?: number | null) => string;
2238
2244
  /** How a cell's content sits across its width. The same three the rest of the
2239
2245
  editor aligns by (a paragraph's `align`), so one set of buttons drives
2240
2246
  both — and `left` is the default, which canonicalizes to `null` and
@@ -2260,13 +2266,31 @@ declare function parsePadding(dom: HTMLElement): string | null;
2260
2266
  `<td>` is the bulletproof border in email — Outlook's Word engine renders
2261
2267
  it), with `border-collapse` on the table keeping the grid single-lined. */
2262
2268
  declare const TABLE_BORDER_COLOR = "rgb(208, 215, 229)";
2263
- /** The bordered table's *real* cell padding — Excel-style breathing room, so
2264
- the rendered email is readable inside its grid. Deliberately the same
2265
- value as the editor's editorial default spacing (the app's `.aee-editor
2266
- table td` rule): a bordered and a plain table feel identical while
2267
- composing; only what the recipient gets differs — the preset ships its
2268
- padding, the plain table ships none unless authored. */
2269
+ /** The *real* cell padding a bordered or borderless table ships —
2270
+ Excel-style breathing room, so the rendered email is readable. A layout
2271
+ table ships none unless authored, and is drawn flush in the editor too. */
2269
2272
  declare const TABLE_CELL_PADDING = "8px 12px";
2273
+ /** The room a bordered or borderless table keeps above and below itself, in
2274
+ px — real (`margin-top`/`margin-bottom` on the table, see `tableStyle`),
2275
+ so the email sets the table off from the text around it exactly as the
2276
+ editor does. Block only: the sides stay on the text column. */
2277
+ declare const TABLE_BLOCK_SPACING = 16;
2278
+ /**
2279
+ * The three tables the editor inserts — drawn in the editor exactly as the
2280
+ * email draws them:
2281
+ * - `bordered` — the default: a grid line on every cell
2282
+ * (`TABLE_BORDER_COLOR`), real cell padding (`TABLE_CELL_PADDING`) and
2283
+ * real room above and below the table (`TABLE_BLOCK_SPACING`);
2284
+ * - `borderless` — the same real padding and room, no lines;
2285
+ * - `layout` — none of it: the table sits flush against its neighbours and
2286
+ * its content flush in its cells, in the editor and the email alike. For
2287
+ * arranging content side by side, where the author owns every pixel.
2288
+ *
2289
+ * Not a node attr: the kind is just the cells' `border` and `padding` and
2290
+ * the table's `spacing`, which is all the email carries, so a parsed table
2291
+ * needs no hint to come back as the kind it was inserted as.
2292
+ */
2293
+ type TableKind = 'bordered' | 'borderless' | 'layout';
2270
2294
  /** Canonical percentage: one decimal at most, no trailing zero (25%, 33.3%). */
2271
2295
  declare const formatPct: (n: number) => string;
2272
2296
  /** No column below 10%: at 320px that is ~32px — the width where a column
@@ -2424,6 +2448,11 @@ declare const Column: _h_k_dev_angular_email_editor.NodeExtension;
2424
2448
  /** The column container: a plain `<div>` whose direct children are column
2425
2449
  divs. The child check discriminates it from an ordinary paragraph div. */
2426
2450
  declare const Columns: _h_k_dev_angular_email_editor.NodeExtension;
2451
+ /** How many empty lines a fresh column starts with. Two, not one: the block
2452
+ has no padding of the editor's own, so a one-line column is a sliver the
2453
+ eye reads as a stray rule rather than a place to write — two lines give
2454
+ it the shape of a column, the way /table starts with rows to fill. */
2455
+ declare const COLUMN_STARTING_LINES = 2;
2427
2456
  /** Exposed for the app to detect when the cursor is inside a columns block. */
2428
2457
  declare function findColumnsContext(state: EditorState): {
2429
2458
  pos: number;
@@ -2444,6 +2473,14 @@ declare const addColumn: Command;
2444
2473
  declare const removeColumn: Command;
2445
2474
  /** Deletes the whole columns block (the table's `deleteTable` sibling). */
2446
2475
  declare const deleteColumns: Command;
2476
+ /** The `+` pill on the block's right flank: an empty column after the last,
2477
+ up to {@link MAX_COLUMNS}; every cap re-splits evenly. Addressed by the
2478
+ block's position, not the caret — the pill acts on the block it is on. */
2479
+ declare function appendColumn(pos: number): Command;
2480
+ /** The `−` pill on the block's left flank: the last column goes — the `+`'s
2481
+ exact inverse — and the rest re-split evenly. Refuses on the last one
2482
+ left: the block itself goes by selecting it whole and pressing Delete. */
2483
+ declare function removeLastColumn(pos: number): Command;
2447
2484
  /** Sets (or clears) the `background` of the `column` the cursor is in. */
2448
2485
  declare function setColumnBackground(color: string | null): Command;
2449
2486
  /**
@@ -3199,19 +3236,31 @@ interface MenuAnchor {
3199
3236
  top: number;
3200
3237
  bottom: number;
3201
3238
  }
3239
+ /** Where a floating menu goes, in its scroll container's content coordinates. */
3240
+ interface MenuPlacement {
3241
+ left: number;
3242
+ top: number;
3243
+ /** The most the box may be tall there: set only when it fits on neither
3244
+ side of the line at full height, so it is shrunk to the side with more
3245
+ room. Null when it fits as it is. */
3246
+ maxHeight: number | null;
3247
+ }
3202
3248
  /**
3203
3249
  * Where a floating menu goes for an anchor line: under it, clamped to its
3204
3250
  * scroll container, flipped above when below would overflow the visible
3205
- * area. Read-only — it measures and returns, and the caller writes `left` /
3206
- * `top` in its own write phase, so measuring never follows a write in the
3207
- * same task. The element must be `position: absolute` inside a
3251
+ * area. When it fits on neither side it goes to the side with more room and
3252
+ * says how tall it may be there (`maxHeight`) — flip, then size, as Floating
3253
+ * UI does — so the container never clips it.
3254
+ *
3255
+ * Read-only — it measures and returns, and the caller writes `left` / `top`
3256
+ * (and the height cap) in its own write phase, so measuring never follows a
3257
+ * write in the same task. The element must be `position: absolute` inside a
3208
3258
  * `position: relative` scroll container; its size is read as rendered, so
3209
- * call it after its contents are in.
3259
+ * call it after its contents are in. A caller that caps the box itself
3260
+ * passes `height`, the box's height without that cap — a box measured at the
3261
+ * last cap would choose its side by the old room, not its own size.
3210
3262
  */
3211
- declare function measureMenuPlacement(anchor: MenuAnchor, element: HTMLElement, offset: number): {
3212
- left: number;
3213
- top: number;
3214
- } | null;
3263
+ declare function measureMenuPlacement(anchor: MenuAnchor, element: HTMLElement, offset: number, height?: number): MenuPlacement | null;
3215
3264
 
3216
3265
  /**
3217
3266
  * An *expression dialect*: what the `{{…}}` tokens mean. The merge-tag mark
@@ -3413,52 +3462,21 @@ type TextTransform = 'uppercase' | 'lowercase' | 'capitalize';
3413
3462
  /** A `text-transform` the mark takes: the three cases; `none` and the
3414
3463
  rest are the words as written. */
3415
3464
  declare function parseTextTransform(raw: string | null | undefined): TextTransform | null;
3416
- declare const ALLOWED_SIZES: readonly [10, 12, 14, 16, 18, 24, 32];
3417
- type FontSize = (typeof ALLOWED_SIZES)[number];
3465
+
3418
3466
  declare function isSafeFontSize(value: unknown): value is FontSize;
3419
3467
  /**
3420
3468
  * Parse a font-size value from the DOM into one of our allowed sizes.
3421
3469
  * Handles px strings ("16px"), plain numbers, and rejects everything else.
3422
3470
  */
3423
3471
  declare function parseFontSize(raw: string | null | undefined): FontSize | null;
3424
- /**
3425
- * The sizes the toolbar picker offers: the phone-safe subset (≥14px). Below
3426
- * ~13px iOS auto-inflates text and reflows the layout (responsiveness ledger,
3427
- * principle 8), so we don't *offer* those — but {@link parseFontSize} still
3428
- * accepts the full {@link ALLOWED_SIZES} range, because a hand-typed size in
3429
- * the HTML source pane is the author's own responsibility, exactly like a
3430
- * hand-typed hex colour.
3431
- */
3432
- declare const emailFontSizes: FontSize[];
3433
- /** A curated, email-safe font stack the toolbar offers. */
3434
- interface EmailFont {
3435
- /** Toolbar label. */
3436
- name: string;
3437
- /** The exact `font-family` value emitted — the canonical stored form. */
3438
- stack: string;
3439
- }
3440
- /**
3441
- * The curated font stacks — the picker offers only these, no free-form fonts
3442
- * (principle 7: if a mainstream client can't render it, we don't emit it).
3443
- *
3444
- * Deliberately built from *single-word* family identifiers plus a generic
3445
- * fallback: a stack like `Courier New` would round-trip through the CSSOM
3446
- * (serialization builds real elements and re-reads them) and come back quoted
3447
- * as `"Courier New"` in Chrome but unquoted in jsdom — a byte-instability that
3448
- * breaks canonical determinism and makes tests disagree with the runtime (the
3449
- * same trap the longhand/`rgb()` rule guards against). Bare identifiers and
3450
- * generic keywords serialize identically everywhere.
3451
- */
3452
- declare const emailFontFamilies: EmailFont[];
3472
+ /** Whether `value` is one of the curated stacks (`@h-k-dev/angular-email-editor/fonts`). */
3453
3473
  declare function isSafeFontFamily(value: unknown): value is string;
3454
3474
  /**
3455
- * Parse a font-family value from the DOM into one of our curated stacks,
3475
+ * Parse a font-family value from the DOM into one of the curated stacks,
3456
3476
  * returning the *canonical* stack string (so a cosmetically different but
3457
3477
  * equivalent input normalises to the exact bytes we emit). A stack of
3458
- * someone else's reads as the curated one it falls back to — the first of
3459
- * its families a curated stack names, its generic last: a builder's web
3460
- * font (`Ubuntu, Helvetica, Arial, sans-serif`) is Sans-serif, the face a
3461
- * client without that font draws anyway. Nothing to fall back to, no font.
3478
+ * someone else's reads as the curated one it falls back to
3479
+ * ({@link matchEmailFont}). Nothing to fall back to, no font.
3462
3480
  */
3463
3481
  declare function parseFontFamily(raw: string | null | undefined): string | null;
3464
3482
  /**
@@ -3966,5 +3984,5 @@ declare class InlineImages extends InlineImageStore {
3966
3984
  static ɵprov: i0.ɵɵInjectableDeclaration<any>;
3967
3985
  }
3968
3986
 
3969
- 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, 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, LIST_STYLE, 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, SplitKeepingMarks, 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, applyAuthoredAttributes, applyEmailVocabulary, attributeString, authoredAttribute, authoredMarkupOf, authoredViewAttributes, bareButtons, buttonStyle, canonicalHead, canonicalMergeTagInner, canonicalRender, caretCellPos, caretInsideMergeTag, claimedImageFiles, clearCells, clientList, columnCaps, columnWidths, completionContextAt, containerStyle, contrastRatio, correctStoredMistakes, createAngularExpressions, createBlockMenu, createBubbleMenu, createButtonEdit, createContentProposal, createContentStream, createDOMParser, createEditor, createHtmlAutocomplete, createHtmlLanguage, createImageDrag, createInlineImages, createMergeTagResolution, createOffsetMapper, createQuotedHistory, createSchema, createSendIntent, createSourceMarks, createSuggestionMenu, createTableHandles, declarationProperty, declaredBackground, decodeDataUrl, defaultBubbleShouldShow, defineExtension, defineMark, defineNode, deleteColumns, deleteFullySelected, discardProposal, distributePadding, docText, dropDeadOfficeClasses, dropHidden, dropMediaQueries, dropZeroSizedWhitespace, duplicateColumn, duplicateRow, editQuotedHistory, effectiveWidths, emailBackgroundPalette, emailDocument, emailExtensions, emailFontFamilies, emailFontSizes, 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, lowerInlinesAroundBlocks, markAttrsOf, markStackingColumns, marksAcrossBreak, materializeComments, measureMenuPlacement, mediaMatches, mergeTagAt, mergeTagExpressions, mergeTagFields, mergeTagRanges, mergeTagResolutionPending, moveColumn, moveRow, normalizeCommentText, normalizeCss, normalizeHref, normalizeMergeTagText, noteOwnWidths, openFileChooser, openTag, openTags, outlookColumns, paddingOf, parseAngularExpression, parseDocument, parseFontFamily, parseFontSize, parseHTML, parsePadding, parseRules, parseTextTransform, passesDualBackground, passesDualContrast, preserveExtensions, preservedAttributes, promoteInlineImages, promoteMergeTags, proposalRange, proposeContent, quotedHistory, readEnvelope, readImageFile, realizeComments, relativeLuminance, removeColumn, removeQuotedHistory, renderForClient, renderedPath, repairLinkSchemes, repairTables, replaceHTML, replyDocument, replyEnvelope, replyQuote, reviseProposal, rewriteInlineImageSources, richTextExtensions, ruleForScope, ruleScope, sanitizePastedHTML, scanHTML, scanMergeTags, scopeOf, scopedDocumentCss, selectColumn, selectRow, selectedButton, selectedImage, selectedImageAlt, selectedMarkAtom, selectionInsideMergeTag, serializeDocument, serializeToHTML, setCellBackground, setColumnBackground, setColumnBoundary, setColumnsBoundary, setQuotedHistory, setSectionBackground, setSectionImage, setTableBox, setTableWidth, soleInlineAtom, splitDeclarations, splitListItemKeepMarks, starInputRegex, starPasteRegex, stopProposal, streamContent, streamedRange, streamingRange, suggestionSectionTitles, tableStyle, textOffsetAt, textRegions, toEmailSafeColor, toInboundMessage, toggleList, trimInlineBoxes, underscoreInputRegex, underscorePasteRegex, unwrapLayoutTables, unwrapOfficeParagraphMarks, verbatimElement, videoPage, watchMenuScroll, withAttribute, withAuthoredMarkup, withQuoted, withQuotedHistory, withStyleDeclaration, withoutAttribute, withoutStyleDeclaration };
3970
- 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, EmailFont, ExpressionDiagnostic, ExpressionDialect, ExpressionIssue, Extension, ExtensionContext, FontSize, FunctionalExtension, HrefProblem, HtmlDiagnostic, HtmlLanguageOptions, HtmlScan, HtmlTag, HtmlToken, HtmlTokenType, ImageAttrs, ImageDragOptions, ImageDropTarget, ImportLoss, InboundMessage, InlineAtomAt, InlineImage, InlineImageRegistry, InlineImageStoreOptions, LayoutBlock, LayoutBlockType, LinkAttrs, LinkRange, MarkExtension, MenuAnchor, MenuScroll, MenuScrollApi, MergeTagRange, MergeTagResolutionOptions, MergeTagResolutionReport, NodeExtension, PaletteColor, ParagraphAlignment, ParseMode, ParseOptions, ParsedAddressLike, ParsedEmailLike, PromotedInlineImages, QuotedHistoryLabel, QuotedHistoryLabels, QuotedHistoryOptions, RenderingClient, ReplyEnvelope, ReplyEnvelopeOptions, ReplyKind, RuleScope, SendIntent, SendIntentOptions, SizeBudget, SourceMarksOptions, SourceOptions, StreamContentOptions, SuggestionAllowProps, SuggestionCommandItem, SuggestionGroup, SuggestionItem, SuggestionItemLabel, SuggestionMenuOptions, SuggestionMenuState, SuggestionPage, SuggestionRect, SuggestionRequest, SuggestionSource, SuggestionTrigger, TableHandleTarget, TableHandlesOptions, TextTransform };
3987
+ 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, LIST_STYLE, 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, 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, buttonStyle, canonicalHead, canonicalMergeTagInner, canonicalRender, caretCellPos, caretInsideMergeTag, claimedImageFiles, clearCells, clientList, columnCaps, columnWidths, completionContextAt, containerStyle, contrastRatio, correctStoredMistakes, createAngularExpressions, createBlockMenu, createBubbleMenu, createButtonEdit, createContentProposal, createContentStream, createDOMParser, createEditor, createHtmlAutocomplete, createHtmlLanguage, createImageDrag, createInlineImages, createMergeTagResolution, createOffsetMapper, createQuotedHistory, createSchema, createSendIntent, createSourceMarks, createSuggestionMenu, createTableHandles, declarationProperty, declaredBackground, decodeDataUrl, defaultBubbleShouldShow, defineExtension, defineMark, defineNode, deleteColumns, deleteFullySelected, discardProposal, distributePadding, docText, dropDeadOfficeClasses, dropHidden, dropMediaQueries, dropZeroSizedWhitespace, duplicateColumn, duplicateRow, editQuotedHistory, effectiveWidths, emailBackgroundPalette, 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, lowerInlinesAroundBlocks, markAttrsOf, markStackingColumns, marksAcrossBreak, materializeComments, measureMenuPlacement, mediaMatches, mergeTagAt, mergeTagExpressions, mergeTagFields, mergeTagRanges, mergeTagResolutionPending, moveColumn, moveRow, normalizeCommentText, normalizeCss, normalizeHref, normalizeMergeTagText, noteOwnWidths, openFileChooser, openTag, openTags, outlookColumns, paddingOf, parseAngularExpression, parseDocument, parseFontFamily, parseFontSize, parseHTML, parsePadding, parseRules, parseTextTransform, passesDualBackground, passesDualContrast, preserveExtensions, preservedAttributes, promoteInlineImages, promoteMergeTags, proposalRange, proposeContent, quotedHistory, readEnvelope, readImageFile, realizeComments, relativeLuminance, removeColumn, removeLastColumn, removeQuotedHistory, renderForClient, renderedPath, repairLinkSchemes, repairTables, replaceHTML, replyDocument, replyEnvelope, replyQuote, reviseProposal, rewriteInlineImageSources, richTextExtensions, ruleForScope, ruleScope, sanitizePastedHTML, scanHTML, scanMergeTags, scopeOf, scopedDocumentCss, selectColumn, selectRow, selectedButton, selectedImage, selectedImageAlt, selectedMarkAtom, selectionInsideMergeTag, serializeDocument, serializeToHTML, setCellBackground, setColumnBackground, setColumnBoundary, setColumnsBoundary, setQuotedHistory, setSectionBackground, setSectionImage, setTableBox, setTableWidth, soleInlineAtom, splitDeclarations, splitListItemKeepMarks, starInputRegex, starPasteRegex, stopProposal, streamContent, streamedRange, streamingRange, suggestionSectionTitles, tableStyle, textOffsetAt, textRegions, toEmailSafeColor, toInboundMessage, toggleList, trimInlineBoxes, underscoreInputRegex, underscorePasteRegex, unwrapLayoutTables, unwrapOfficeParagraphMarks, verbatimElement, videoPage, watchMenuScroll, withAttribute, withAuthoredMarkup, withQuoted, withQuotedHistory, withStyleDeclaration, withoutAttribute, withoutStyleDeclaration };
3988
+ 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, MarkExtension, MenuAnchor, MenuPlacement, MenuScroll, MenuScrollApi, MergeTagRange, MergeTagResolutionOptions, MergeTagResolutionReport, NodeExtension, PaletteColor, ParagraphAlignment, ParseMode, ParseOptions, ParsedAddressLike, ParsedEmailLike, PromotedInlineImages, QuotedHistoryLabel, QuotedHistoryLabels, QuotedHistoryOptions, RenderingClient, ReplyEnvelope, ReplyEnvelopeOptions, ReplyKind, RuleScope, SendIntent, SendIntentOptions, SizeBudget, SourceMarksOptions, SourceOptions, StreamContentOptions, SuggestionAllowProps, SuggestionCommandItem, SuggestionGroup, SuggestionItem, SuggestionItemLabel, SuggestionMenuOptions, SuggestionMenuState, SuggestionPage, SuggestionRect, SuggestionRequest, SuggestionSource, SuggestionTrigger, TableHandleTarget, TableHandlesOptions, TableKind, TextTransform };