@scrider/formatter 1.4.2 → 1.4.3

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/dist/index.d.cts CHANGED
@@ -1294,8 +1294,12 @@ declare function cloneDelta(delta: Delta): Delta;
1294
1294
 
1295
1295
  /** Per-paragraph line spacing stored on `\n` (Word paste, Settings Apply, toolbar). */
1296
1296
  declare const SCRIDER_LINE_HEIGHT_KEY = "scrider-line-height";
1297
+ /** Space after plain paragraph (`margin-bottom`) on `\n` (Settings Apply). */
1298
+ declare const SCRIDER_MARGIN_AFTER_KEY = "scrider-margin-after";
1297
1299
  /** Block tags that receive line spacing (not headings). */
1298
1300
  declare const LINE_HEIGHT_BLOCK_TAGS: Set<string>;
1301
+ /** Block tags that receive paragraph spacing after (plain `<p>` only). */
1302
+ declare const PARAGRAPH_SPACING_BLOCK_TAGS: Set<string>;
1299
1303
  /**
1300
1304
  * Parse a line-height multiplier from Delta / inline CSS values
1301
1305
  * (`1.5`, `2`, `150%`).
@@ -1305,16 +1309,27 @@ declare function parseScriderLineHeightMultiplier(value: string): number | undef
1305
1309
  * Line-height for a block tag: `scrider-line-height` on the line → documentPresentation → none.
1306
1310
  */
1307
1311
  declare function blockLineHeightStyleParts(tag: string, blockAttributes: AttributeMap | undefined, resolved: ResolvedDocumentPresentation | undefined): string[];
1312
+ /**
1313
+ * Parse `margin-bottom` in em from Delta / inline CSS (`0.5em`, `0.5`).
1314
+ */
1315
+ declare function parseScriderMarginAfterEm(value: string): number | undefined;
1316
+ /**
1317
+ * Paragraph spacing after: `scrider-margin-after` on the line → documentPresentation → none.
1318
+ */
1319
+ declare function blockMarginAfterStyleParts(tag: string, blockAttributes: AttributeMap | undefined, resolved: ResolvedDocumentPresentation | undefined): string[];
1308
1320
 
1309
1321
  /**
1310
1322
  * Document-level HTML presentation for deltaToHtml (clipboard, export).
1311
1323
  * Mirrors editor Settings when block attrs are absent.
1312
1324
  * Per-block line spacing: {@link blockLineHeightStyleParts} (`scrider-line-height` on `\n`).
1325
+ * Per-block paragraph spacing: {@link blockMarginAfterStyleParts} (`scrider-margin-after` on `\n`).
1313
1326
  */
1314
1327
 
1315
1328
  interface DocumentPresentation {
1316
1329
  /** Line spacing multiplier, e.g. 1.5 */
1317
1330
  lineSpacing?: number;
1331
+ /** Space after plain paragraphs in em, e.g. 0.5 */
1332
+ paragraphSpacingAfterEm?: number;
1318
1333
  /** First-line indent in cm on `<p>` only (lists: use listBlockIndentCm). */
1319
1334
  textIndentCm?: number;
1320
1335
  /** Extra left padding on top-level `<ul>`/`<ol>` — shifts marker + text as a block. */
@@ -1322,6 +1337,7 @@ interface DocumentPresentation {
1322
1337
  }
1323
1338
  interface ResolvedDocumentPresentation {
1324
1339
  lineSpacing: number | undefined;
1340
+ paragraphSpacingAfterEm: number | undefined;
1325
1341
  textIndentCm: number | undefined;
1326
1342
  listBlockIndentCm: number | undefined;
1327
1343
  }
@@ -1909,4 +1925,4 @@ declare function isTableNewlineOp(op: Op | undefined): boolean;
1909
1925
  */
1910
1926
  declare function extractTableRegion(ops: readonly Op[], hintOpIdx: number): TableRegion | null;
1911
1927
 
1912
- export { ALERT_TYPES, type AlertBlockData, type AlertType, type AlignType, BOX_FLOAT_VALUES, BOX_OVERFLOW_VALUES, type BlockContext, type BlockHandler, BlockHandlerRegistry, type BlockRenderOptions, type BoxBlockData, type BoxFloat, type BoxOpAttributes, type BoxOverflow, BrowserDOMAdapter, type CellAlign, type CellData, type ColumnsBlockData, type DOMAdapter, type DOMDocument, type DOMDocumentFragment, type DOMElement, type DOMNode, type DOMNodeList, type DeltaToHtmlOptions, type DeltaToMarkdownOptions, type DocumentPresentation, type FootnotesBlockData, type Format, type FormatDefinition, type FormatMatchResult, type FormatScope, type HtmlToDeltaOptions, LINE_HEIGHT_BLOCK_TAGS, type ListType, type MarkdownToDeltaOptions, NODE_TYPE, NodeDOMAdapter, Registry, type ResolvedDocumentPresentation, type ResolvedTablePresentation, SCRIDER_LINE_HEIGHT_KEY, type SanitizeOptions, type TableBlockData, type TableCellAlign, type TableColAlignType, type TablePresentation, type TableRegion, alertBlockHandler, alignFormat, backgroundFormat, blockFormat, blockLineHeightStyleParts, blockPresentationStyleParts, blockquoteFormat, boldFormat, boxBlockHandler, browserAdapter, cloneDelta, codeBlockFormat, codeFormat, colorFormat, columnsBlockHandler, createDefaultBlockHandlers, createDefaultRegistry, defaultBlockFormats, defaultEmbedFormats, defaultFormats, defaultInlineFormats, deltaToHtml, deltaToMarkdown, dividerFormat, documentPresentationStyleParts, escapeHtml, extractBoxOpAttributes, extractTableRegion, fontFormat, footnoteRefFormat, footnotesBlockHandler, formulaFormat, getAdapter, getNamedColors, headerFormat, headerIdFormat, htmlToDelta, imageFormat, indentFormat, isAdapterAvailable, isElement, isRemarkAvailable, isTableNewlineOp, isTextNode, isValidColor, isValidHexColor, isZebraBodyRow, italicFormat, kbdFormat, linkFormat, listFormat, markFormat, markdownToDelta, markdownToDeltaSync, nodeAdapter, normalizeDelta, parseScriderLineHeightMultiplier, preloadRemark, resolveDocumentPresentation, resolveTablePresentation, sanitizeDelta, sizeFormat, slugify, slugifyWithDedup, softBreakFormat, strikeFormat, subscriptFormat, superscriptFormat, tableBlockHandler, tableColAlignFormat, tableColFormat, tableHeaderFormat, tableRowFormat, toHexColor, underlineFormat, unescapeHtml, validateDelta, videoFormat };
1928
+ export { ALERT_TYPES, type AlertBlockData, type AlertType, type AlignType, BOX_FLOAT_VALUES, BOX_OVERFLOW_VALUES, type BlockContext, type BlockHandler, BlockHandlerRegistry, type BlockRenderOptions, type BoxBlockData, type BoxFloat, type BoxOpAttributes, type BoxOverflow, BrowserDOMAdapter, type CellAlign, type CellData, type ColumnsBlockData, type DOMAdapter, type DOMDocument, type DOMDocumentFragment, type DOMElement, type DOMNode, type DOMNodeList, type DeltaToHtmlOptions, type DeltaToMarkdownOptions, type DocumentPresentation, type FootnotesBlockData, type Format, type FormatDefinition, type FormatMatchResult, type FormatScope, type HtmlToDeltaOptions, LINE_HEIGHT_BLOCK_TAGS, type ListType, type MarkdownToDeltaOptions, NODE_TYPE, NodeDOMAdapter, PARAGRAPH_SPACING_BLOCK_TAGS, Registry, type ResolvedDocumentPresentation, type ResolvedTablePresentation, SCRIDER_LINE_HEIGHT_KEY, SCRIDER_MARGIN_AFTER_KEY, type SanitizeOptions, type TableBlockData, type TableCellAlign, type TableColAlignType, type TablePresentation, type TableRegion, alertBlockHandler, alignFormat, backgroundFormat, blockFormat, blockLineHeightStyleParts, blockMarginAfterStyleParts, blockPresentationStyleParts, blockquoteFormat, boldFormat, boxBlockHandler, browserAdapter, cloneDelta, codeBlockFormat, codeFormat, colorFormat, columnsBlockHandler, createDefaultBlockHandlers, createDefaultRegistry, defaultBlockFormats, defaultEmbedFormats, defaultFormats, defaultInlineFormats, deltaToHtml, deltaToMarkdown, dividerFormat, documentPresentationStyleParts, escapeHtml, extractBoxOpAttributes, extractTableRegion, fontFormat, footnoteRefFormat, footnotesBlockHandler, formulaFormat, getAdapter, getNamedColors, headerFormat, headerIdFormat, htmlToDelta, imageFormat, indentFormat, isAdapterAvailable, isElement, isRemarkAvailable, isTableNewlineOp, isTextNode, isValidColor, isValidHexColor, isZebraBodyRow, italicFormat, kbdFormat, linkFormat, listFormat, markFormat, markdownToDelta, markdownToDeltaSync, nodeAdapter, normalizeDelta, parseScriderLineHeightMultiplier, parseScriderMarginAfterEm, preloadRemark, resolveDocumentPresentation, resolveTablePresentation, sanitizeDelta, sizeFormat, slugify, slugifyWithDedup, softBreakFormat, strikeFormat, subscriptFormat, superscriptFormat, tableBlockHandler, tableColAlignFormat, tableColFormat, tableHeaderFormat, tableRowFormat, toHexColor, underlineFormat, unescapeHtml, validateDelta, videoFormat };
package/dist/index.d.ts CHANGED
@@ -1294,8 +1294,12 @@ declare function cloneDelta(delta: Delta): Delta;
1294
1294
 
1295
1295
  /** Per-paragraph line spacing stored on `\n` (Word paste, Settings Apply, toolbar). */
1296
1296
  declare const SCRIDER_LINE_HEIGHT_KEY = "scrider-line-height";
1297
+ /** Space after plain paragraph (`margin-bottom`) on `\n` (Settings Apply). */
1298
+ declare const SCRIDER_MARGIN_AFTER_KEY = "scrider-margin-after";
1297
1299
  /** Block tags that receive line spacing (not headings). */
1298
1300
  declare const LINE_HEIGHT_BLOCK_TAGS: Set<string>;
1301
+ /** Block tags that receive paragraph spacing after (plain `<p>` only). */
1302
+ declare const PARAGRAPH_SPACING_BLOCK_TAGS: Set<string>;
1299
1303
  /**
1300
1304
  * Parse a line-height multiplier from Delta / inline CSS values
1301
1305
  * (`1.5`, `2`, `150%`).
@@ -1305,16 +1309,27 @@ declare function parseScriderLineHeightMultiplier(value: string): number | undef
1305
1309
  * Line-height for a block tag: `scrider-line-height` on the line → documentPresentation → none.
1306
1310
  */
1307
1311
  declare function blockLineHeightStyleParts(tag: string, blockAttributes: AttributeMap | undefined, resolved: ResolvedDocumentPresentation | undefined): string[];
1312
+ /**
1313
+ * Parse `margin-bottom` in em from Delta / inline CSS (`0.5em`, `0.5`).
1314
+ */
1315
+ declare function parseScriderMarginAfterEm(value: string): number | undefined;
1316
+ /**
1317
+ * Paragraph spacing after: `scrider-margin-after` on the line → documentPresentation → none.
1318
+ */
1319
+ declare function blockMarginAfterStyleParts(tag: string, blockAttributes: AttributeMap | undefined, resolved: ResolvedDocumentPresentation | undefined): string[];
1308
1320
 
1309
1321
  /**
1310
1322
  * Document-level HTML presentation for deltaToHtml (clipboard, export).
1311
1323
  * Mirrors editor Settings when block attrs are absent.
1312
1324
  * Per-block line spacing: {@link blockLineHeightStyleParts} (`scrider-line-height` on `\n`).
1325
+ * Per-block paragraph spacing: {@link blockMarginAfterStyleParts} (`scrider-margin-after` on `\n`).
1313
1326
  */
1314
1327
 
1315
1328
  interface DocumentPresentation {
1316
1329
  /** Line spacing multiplier, e.g. 1.5 */
1317
1330
  lineSpacing?: number;
1331
+ /** Space after plain paragraphs in em, e.g. 0.5 */
1332
+ paragraphSpacingAfterEm?: number;
1318
1333
  /** First-line indent in cm on `<p>` only (lists: use listBlockIndentCm). */
1319
1334
  textIndentCm?: number;
1320
1335
  /** Extra left padding on top-level `<ul>`/`<ol>` — shifts marker + text as a block. */
@@ -1322,6 +1337,7 @@ interface DocumentPresentation {
1322
1337
  }
1323
1338
  interface ResolvedDocumentPresentation {
1324
1339
  lineSpacing: number | undefined;
1340
+ paragraphSpacingAfterEm: number | undefined;
1325
1341
  textIndentCm: number | undefined;
1326
1342
  listBlockIndentCm: number | undefined;
1327
1343
  }
@@ -1909,4 +1925,4 @@ declare function isTableNewlineOp(op: Op | undefined): boolean;
1909
1925
  */
1910
1926
  declare function extractTableRegion(ops: readonly Op[], hintOpIdx: number): TableRegion | null;
1911
1927
 
1912
- export { ALERT_TYPES, type AlertBlockData, type AlertType, type AlignType, BOX_FLOAT_VALUES, BOX_OVERFLOW_VALUES, type BlockContext, type BlockHandler, BlockHandlerRegistry, type BlockRenderOptions, type BoxBlockData, type BoxFloat, type BoxOpAttributes, type BoxOverflow, BrowserDOMAdapter, type CellAlign, type CellData, type ColumnsBlockData, type DOMAdapter, type DOMDocument, type DOMDocumentFragment, type DOMElement, type DOMNode, type DOMNodeList, type DeltaToHtmlOptions, type DeltaToMarkdownOptions, type DocumentPresentation, type FootnotesBlockData, type Format, type FormatDefinition, type FormatMatchResult, type FormatScope, type HtmlToDeltaOptions, LINE_HEIGHT_BLOCK_TAGS, type ListType, type MarkdownToDeltaOptions, NODE_TYPE, NodeDOMAdapter, Registry, type ResolvedDocumentPresentation, type ResolvedTablePresentation, SCRIDER_LINE_HEIGHT_KEY, type SanitizeOptions, type TableBlockData, type TableCellAlign, type TableColAlignType, type TablePresentation, type TableRegion, alertBlockHandler, alignFormat, backgroundFormat, blockFormat, blockLineHeightStyleParts, blockPresentationStyleParts, blockquoteFormat, boldFormat, boxBlockHandler, browserAdapter, cloneDelta, codeBlockFormat, codeFormat, colorFormat, columnsBlockHandler, createDefaultBlockHandlers, createDefaultRegistry, defaultBlockFormats, defaultEmbedFormats, defaultFormats, defaultInlineFormats, deltaToHtml, deltaToMarkdown, dividerFormat, documentPresentationStyleParts, escapeHtml, extractBoxOpAttributes, extractTableRegion, fontFormat, footnoteRefFormat, footnotesBlockHandler, formulaFormat, getAdapter, getNamedColors, headerFormat, headerIdFormat, htmlToDelta, imageFormat, indentFormat, isAdapterAvailable, isElement, isRemarkAvailable, isTableNewlineOp, isTextNode, isValidColor, isValidHexColor, isZebraBodyRow, italicFormat, kbdFormat, linkFormat, listFormat, markFormat, markdownToDelta, markdownToDeltaSync, nodeAdapter, normalizeDelta, parseScriderLineHeightMultiplier, preloadRemark, resolveDocumentPresentation, resolveTablePresentation, sanitizeDelta, sizeFormat, slugify, slugifyWithDedup, softBreakFormat, strikeFormat, subscriptFormat, superscriptFormat, tableBlockHandler, tableColAlignFormat, tableColFormat, tableHeaderFormat, tableRowFormat, toHexColor, underlineFormat, unescapeHtml, validateDelta, videoFormat };
1928
+ export { ALERT_TYPES, type AlertBlockData, type AlertType, type AlignType, BOX_FLOAT_VALUES, BOX_OVERFLOW_VALUES, type BlockContext, type BlockHandler, BlockHandlerRegistry, type BlockRenderOptions, type BoxBlockData, type BoxFloat, type BoxOpAttributes, type BoxOverflow, BrowserDOMAdapter, type CellAlign, type CellData, type ColumnsBlockData, type DOMAdapter, type DOMDocument, type DOMDocumentFragment, type DOMElement, type DOMNode, type DOMNodeList, type DeltaToHtmlOptions, type DeltaToMarkdownOptions, type DocumentPresentation, type FootnotesBlockData, type Format, type FormatDefinition, type FormatMatchResult, type FormatScope, type HtmlToDeltaOptions, LINE_HEIGHT_BLOCK_TAGS, type ListType, type MarkdownToDeltaOptions, NODE_TYPE, NodeDOMAdapter, PARAGRAPH_SPACING_BLOCK_TAGS, Registry, type ResolvedDocumentPresentation, type ResolvedTablePresentation, SCRIDER_LINE_HEIGHT_KEY, SCRIDER_MARGIN_AFTER_KEY, type SanitizeOptions, type TableBlockData, type TableCellAlign, type TableColAlignType, type TablePresentation, type TableRegion, alertBlockHandler, alignFormat, backgroundFormat, blockFormat, blockLineHeightStyleParts, blockMarginAfterStyleParts, blockPresentationStyleParts, blockquoteFormat, boldFormat, boxBlockHandler, browserAdapter, cloneDelta, codeBlockFormat, codeFormat, colorFormat, columnsBlockHandler, createDefaultBlockHandlers, createDefaultRegistry, defaultBlockFormats, defaultEmbedFormats, defaultFormats, defaultInlineFormats, deltaToHtml, deltaToMarkdown, dividerFormat, documentPresentationStyleParts, escapeHtml, extractBoxOpAttributes, extractTableRegion, fontFormat, footnoteRefFormat, footnotesBlockHandler, formulaFormat, getAdapter, getNamedColors, headerFormat, headerIdFormat, htmlToDelta, imageFormat, indentFormat, isAdapterAvailable, isElement, isRemarkAvailable, isTableNewlineOp, isTextNode, isValidColor, isValidHexColor, isZebraBodyRow, italicFormat, kbdFormat, linkFormat, listFormat, markFormat, markdownToDelta, markdownToDeltaSync, nodeAdapter, normalizeDelta, parseScriderLineHeightMultiplier, parseScriderMarginAfterEm, preloadRemark, resolveDocumentPresentation, resolveTablePresentation, sanitizeDelta, sizeFormat, slugify, slugifyWithDedup, softBreakFormat, strikeFormat, subscriptFormat, superscriptFormat, tableBlockHandler, tableColAlignFormat, tableColFormat, tableHeaderFormat, tableRowFormat, toHexColor, underlineFormat, unescapeHtml, validateDelta, videoFormat };
package/dist/index.js CHANGED
@@ -2495,7 +2495,9 @@ function slugifyWithDedup(text, usedSlugs) {
2495
2495
 
2496
2496
  // src/conversion/html/block-presentation.ts
2497
2497
  var SCRIDER_LINE_HEIGHT_KEY = "scrider-line-height";
2498
+ var SCRIDER_MARGIN_AFTER_KEY = "scrider-margin-after";
2498
2499
  var LINE_HEIGHT_BLOCK_TAGS = /* @__PURE__ */ new Set(["p", "li", "blockquote"]);
2500
+ var PARAGRAPH_SPACING_BLOCK_TAGS = /* @__PURE__ */ new Set(["p"]);
2499
2501
  function parseScriderLineHeightMultiplier(value) {
2500
2502
  const trimmed = value.trim();
2501
2503
  if (!trimmed) return void 0;
@@ -2524,6 +2526,34 @@ function blockLineHeightStyleParts(tag, blockAttributes, resolved) {
2524
2526
  }
2525
2527
  return [];
2526
2528
  }
2529
+ function parseScriderMarginAfterEm(value) {
2530
+ const trimmed = value.trim();
2531
+ if (!trimmed) return void 0;
2532
+ const emMatch = trimmed.match(/^(-?\d+(?:\.\d+)?)\s*em$/i);
2533
+ if (emMatch) {
2534
+ const n2 = Number.parseFloat(emMatch[1]);
2535
+ if (Number.isFinite(n2) && n2 >= 0) return n2;
2536
+ return void 0;
2537
+ }
2538
+ const n = Number.parseFloat(trimmed);
2539
+ if (Number.isFinite(n) && n >= 0) return n;
2540
+ return void 0;
2541
+ }
2542
+ function marginAfterStyleParts(em) {
2543
+ return [`margin-top:0`, `margin-bottom:${em}em`];
2544
+ }
2545
+ function blockMarginAfterStyleParts(tag, blockAttributes, resolved) {
2546
+ if (!PARAGRAPH_SPACING_BLOCK_TAGS.has(tag)) return [];
2547
+ const raw = blockAttributes?.[SCRIDER_MARGIN_AFTER_KEY];
2548
+ if (typeof raw === "string") {
2549
+ const fromBlock = parseScriderMarginAfterEm(raw);
2550
+ if (fromBlock !== void 0) return marginAfterStyleParts(fromBlock);
2551
+ }
2552
+ if (resolved?.paragraphSpacingAfterEm !== void 0) {
2553
+ return marginAfterStyleParts(resolved.paragraphSpacingAfterEm);
2554
+ }
2555
+ return [];
2556
+ }
2527
2557
 
2528
2558
  // src/conversion/html/document-presentation.ts
2529
2559
  function resolveDocumentPresentation(presentation) {
@@ -2531,10 +2561,11 @@ function resolveDocumentPresentation(presentation) {
2531
2561
  const lineSpacing = typeof presentation.lineSpacing === "number" && presentation.lineSpacing > 0 ? presentation.lineSpacing : void 0;
2532
2562
  const textIndentCm = typeof presentation.textIndentCm === "number" && presentation.textIndentCm > 0 ? presentation.textIndentCm : void 0;
2533
2563
  const listBlockIndentCm = typeof presentation.listBlockIndentCm === "number" && presentation.listBlockIndentCm > 0 ? presentation.listBlockIndentCm : void 0;
2534
- if (lineSpacing === void 0 && textIndentCm === void 0 && listBlockIndentCm === void 0) {
2564
+ const paragraphSpacingAfterEm = typeof presentation.paragraphSpacingAfterEm === "number" && Number.isFinite(presentation.paragraphSpacingAfterEm) && presentation.paragraphSpacingAfterEm >= 0 ? presentation.paragraphSpacingAfterEm : void 0;
2565
+ if (lineSpacing === void 0 && paragraphSpacingAfterEm === void 0 && textIndentCm === void 0 && listBlockIndentCm === void 0) {
2535
2566
  return void 0;
2536
2567
  }
2537
- return { lineSpacing, textIndentCm, listBlockIndentCm };
2568
+ return { lineSpacing, paragraphSpacingAfterEm, textIndentCm, listBlockIndentCm };
2538
2569
  }
2539
2570
  var TEXT_INDENT_TAGS = /* @__PURE__ */ new Set(["p"]);
2540
2571
  function documentPresentationListWrapperStyleParts(resolved) {
@@ -2552,6 +2583,7 @@ function documentPresentationStyleParts(tag, resolved) {
2552
2583
  function blockPresentationStyleParts(tag, blockAttributes, resolved) {
2553
2584
  return [
2554
2585
  ...blockLineHeightStyleParts(tag, blockAttributes, resolved),
2586
+ ...blockMarginAfterStyleParts(tag, blockAttributes, resolved),
2555
2587
  ...documentPresentationStyleParts(tag, resolved)
2556
2588
  ];
2557
2589
  }
@@ -5186,13 +5218,16 @@ export {
5186
5218
  LINE_HEIGHT_BLOCK_TAGS,
5187
5219
  NODE_TYPE,
5188
5220
  NodeDOMAdapter,
5221
+ PARAGRAPH_SPACING_BLOCK_TAGS,
5189
5222
  Registry,
5190
5223
  SCRIDER_LINE_HEIGHT_KEY,
5224
+ SCRIDER_MARGIN_AFTER_KEY,
5191
5225
  alertBlockHandler,
5192
5226
  alignFormat,
5193
5227
  backgroundFormat,
5194
5228
  blockFormat,
5195
5229
  blockLineHeightStyleParts,
5230
+ blockMarginAfterStyleParts,
5196
5231
  blockPresentationStyleParts,
5197
5232
  blockquoteFormat,
5198
5233
  boldFormat,
@@ -5245,6 +5280,7 @@ export {
5245
5280
  nodeAdapter,
5246
5281
  normalizeDelta,
5247
5282
  parseScriderLineHeightMultiplier,
5283
+ parseScriderMarginAfterEm,
5248
5284
  preloadRemark,
5249
5285
  resolveDocumentPresentation,
5250
5286
  resolveTablePresentation,