@readme/markdown 13.4.0 → 13.6.0

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/main.js CHANGED
@@ -34347,21 +34347,8 @@ function syntax_tokenizeIndent(effects, ok, nok) {
34347
34347
 
34348
34348
  ;// ./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
34349
34349
  /**
34350
- * @typedef {import('micromark-util-types').Event} Event
34351
- * @typedef {import('micromark-util-types').Extension} Extension
34352
- * @typedef {import('micromark-util-types').Resolver} Resolver
34353
- * @typedef {import('micromark-util-types').State} State
34354
- * @typedef {import('micromark-util-types').Token} Token
34355
- * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
34356
- * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
34357
- *
34358
- * @typedef Options
34359
- * Configuration (optional).
34360
- * @property {boolean | null | undefined} [singleTilde=true]
34361
- * Whether to support strikethrough with a single tilde (default: `true`).
34362
- *
34363
- * Single tildes work on github.com, but are technically prohibited by the
34364
- * GFM spec.
34350
+ * @import {Options} from 'micromark-extension-gfm-strikethrough'
34351
+ * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'
34365
34352
  */
34366
34353
 
34367
34354
 
@@ -34377,14 +34364,15 @@ function syntax_tokenizeIndent(effects, ok, nok) {
34377
34364
  * enable GFM strikethrough syntax.
34378
34365
  */
34379
34366
  function gfmStrikethrough(options) {
34380
- const options_ = options || {}
34381
- let single = options_.singleTilde
34367
+ const options_ = options || {};
34368
+ let single = options_.singleTilde;
34382
34369
  const tokenizer = {
34370
+ name: 'strikethrough',
34383
34371
  tokenize: tokenizeStrikethrough,
34384
34372
  resolveAll: resolveAllStrikethrough
34385
- }
34373
+ };
34386
34374
  if (single === null || single === undefined) {
34387
- single = true
34375
+ single = true;
34388
34376
  }
34389
34377
  return {
34390
34378
  text: {
@@ -34396,7 +34384,7 @@ function gfmStrikethrough(options) {
34396
34384
  attentionMarkers: {
34397
34385
  null: [126]
34398
34386
  }
34399
- }
34387
+ };
34400
34388
 
34401
34389
  /**
34402
34390
  * Take events and resolve strikethrough.
@@ -34404,86 +34392,62 @@ function gfmStrikethrough(options) {
34404
34392
  * @type {Resolver}
34405
34393
  */
34406
34394
  function resolveAllStrikethrough(events, context) {
34407
- let index = -1
34395
+ let index = -1;
34408
34396
 
34409
34397
  // Walk through all events.
34410
34398
  while (++index < events.length) {
34411
34399
  // Find a token that can close.
34412
- if (
34413
- events[index][0] === 'enter' &&
34414
- events[index][1].type === 'strikethroughSequenceTemporary' &&
34415
- events[index][1]._close
34416
- ) {
34417
- let open = index
34400
+ if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {
34401
+ let open = index;
34418
34402
 
34419
34403
  // Now walk back to find an opener.
34420
34404
  while (open--) {
34421
34405
  // Find a token that can open the closer.
34422
- if (
34423
- events[open][0] === 'exit' &&
34424
- events[open][1].type === 'strikethroughSequenceTemporary' &&
34425
- events[open][1]._open &&
34426
- // If the sizes are the same:
34427
- events[index][1].end.offset - events[index][1].start.offset ===
34428
- events[open][1].end.offset - events[open][1].start.offset
34429
- ) {
34430
- events[index][1].type = 'strikethroughSequence'
34431
- events[open][1].type = 'strikethroughSequence'
34406
+ if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&
34407
+ // If the sizes are the same:
34408
+ events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {
34409
+ events[index][1].type = 'strikethroughSequence';
34410
+ events[open][1].type = 'strikethroughSequence';
34432
34411
 
34433
34412
  /** @type {Token} */
34434
34413
  const strikethrough = {
34435
34414
  type: 'strikethrough',
34436
34415
  start: Object.assign({}, events[open][1].start),
34437
34416
  end: Object.assign({}, events[index][1].end)
34438
- }
34417
+ };
34439
34418
 
34440
34419
  /** @type {Token} */
34441
34420
  const text = {
34442
34421
  type: 'strikethroughText',
34443
34422
  start: Object.assign({}, events[open][1].end),
34444
34423
  end: Object.assign({}, events[index][1].start)
34445
- }
34424
+ };
34446
34425
 
34447
34426
  // Opening.
34448
34427
  /** @type {Array<Event>} */
34449
- const nextEvents = [
34450
- ['enter', strikethrough, context],
34451
- ['enter', events[open][1], context],
34452
- ['exit', events[open][1], context],
34453
- ['enter', text, context]
34454
- ]
34455
- const insideSpan = context.parser.constructs.insideSpan.null
34428
+ const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];
34429
+ const insideSpan = context.parser.constructs.insideSpan.null;
34456
34430
  if (insideSpan) {
34457
34431
  // Between.
34458
- splice(
34459
- nextEvents,
34460
- nextEvents.length,
34461
- 0,
34462
- resolveAll(insideSpan, events.slice(open + 1, index), context)
34463
- )
34432
+ splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));
34464
34433
  }
34465
34434
 
34466
34435
  // Closing.
34467
- splice(nextEvents, nextEvents.length, 0, [
34468
- ['exit', text, context],
34469
- ['enter', events[index][1], context],
34470
- ['exit', events[index][1], context],
34471
- ['exit', strikethrough, context]
34472
- ])
34473
- splice(events, open - 1, index - open + 3, nextEvents)
34474
- index = open + nextEvents.length - 2
34475
- break
34436
+ splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);
34437
+ splice(events, open - 1, index - open + 3, nextEvents);
34438
+ index = open + nextEvents.length - 2;
34439
+ break;
34476
34440
  }
34477
34441
  }
34478
34442
  }
34479
34443
  }
34480
- index = -1
34444
+ index = -1;
34481
34445
  while (++index < events.length) {
34482
34446
  if (events[index][1].type === 'strikethroughSequenceTemporary') {
34483
- events[index][1].type = 'data'
34447
+ events[index][1].type = "data";
34484
34448
  }
34485
34449
  }
34486
- return events
34450
+ return events;
34487
34451
  }
34488
34452
 
34489
34453
  /**
@@ -34491,43 +34455,39 @@ function gfmStrikethrough(options) {
34491
34455
  * @type {Tokenizer}
34492
34456
  */
34493
34457
  function tokenizeStrikethrough(effects, ok, nok) {
34494
- const previous = this.previous
34495
- const events = this.events
34496
- let size = 0
34497
- return start
34458
+ const previous = this.previous;
34459
+ const events = this.events;
34460
+ let size = 0;
34461
+ return start;
34498
34462
 
34499
34463
  /** @type {State} */
34500
34464
  function start(code) {
34501
- if (
34502
- previous === 126 &&
34503
- events[events.length - 1][1].type !== 'characterEscape'
34504
- ) {
34505
- return nok(code)
34465
+ if (previous === 126 && events[events.length - 1][1].type !== "characterEscape") {
34466
+ return nok(code);
34506
34467
  }
34507
- effects.enter('strikethroughSequenceTemporary')
34508
- return more(code)
34468
+ effects.enter('strikethroughSequenceTemporary');
34469
+ return more(code);
34509
34470
  }
34510
34471
 
34511
34472
  /** @type {State} */
34512
34473
  function more(code) {
34513
- const before = classifyCharacter(previous)
34474
+ const before = classifyCharacter(previous);
34514
34475
  if (code === 126) {
34515
34476
  // If this is the third marker, exit.
34516
- if (size > 1) return nok(code)
34517
- effects.consume(code)
34518
- size++
34519
- return more
34520
- }
34521
- if (size < 2 && !single) return nok(code)
34522
- const token = effects.exit('strikethroughSequenceTemporary')
34523
- const after = classifyCharacter(code)
34524
- token._open = !after || (after === 2 && Boolean(before))
34525
- token._close = !before || (before === 2 && Boolean(after))
34526
- return ok(code)
34477
+ if (size > 1) return nok(code);
34478
+ effects.consume(code);
34479
+ size++;
34480
+ return more;
34481
+ }
34482
+ if (size < 2 && !single) return nok(code);
34483
+ const token = effects.exit('strikethroughSequenceTemporary');
34484
+ const after = classifyCharacter(code);
34485
+ token._open = !after || after === 2 && Boolean(before);
34486
+ token._close = !before || before === 2 && Boolean(after);
34487
+ return ok(code);
34527
34488
  }
34528
34489
  }
34529
34490
  }
34530
-
34531
34491
  ;// ./node_modules/micromark-extension-gfm-table/lib/edit-map.js
34532
34492
  /**
34533
34493
  * @typedef {import('micromark-util-types').Event} Event
@@ -41068,6 +41028,7 @@ function remarkMdx(options) {
41068
41028
  ;// ./enums.ts
41069
41029
  var NodeTypes;
41070
41030
  (function (NodeTypes) {
41031
+ NodeTypes["anchor"] = "readme-anchor";
41071
41032
  NodeTypes["callout"] = "rdme-callout";
41072
41033
  NodeTypes["codeTabs"] = "code-tabs";
41073
41034
  NodeTypes["embedBlock"] = "embed-block";
@@ -44027,7 +43988,7 @@ var EntityDecoderState;
44027
43988
  EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
44028
43989
  EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
44029
43990
  })(EntityDecoderState || (EntityDecoderState = {}));
44030
- var DecodingMode;
43991
+ var decode_DecodingMode;
44031
43992
  (function (DecodingMode) {
44032
43993
  /** Entities in text nodes that can end with any character. */
44033
43994
  DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
@@ -44035,7 +43996,7 @@ var DecodingMode;
44035
43996
  DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
44036
43997
  /** Entities in attributes have limitations on ending characters. */
44037
43998
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
44038
- })(DecodingMode || (DecodingMode = {}));
43999
+ })(decode_DecodingMode || (decode_DecodingMode = {}));
44039
44000
  /**
44040
44001
  * Token decoder with support of writing partial entities.
44041
44002
  */
@@ -44074,7 +44035,7 @@ class EntityDecoder {
44074
44035
  /** The number of characters that were consumed in excess. */
44075
44036
  this.excess = 1;
44076
44037
  /** The mode in which the decoder is operating. */
44077
- this.decodeMode = DecodingMode.Strict;
44038
+ this.decodeMode = decode_DecodingMode.Strict;
44078
44039
  }
44079
44040
  /** Resets the instance to make it reusable. */
44080
44041
  startEntity(decodeMode) {
@@ -44223,7 +44184,7 @@ class EntityDecoder {
44223
44184
  if (lastCp === CharCodes.SEMI) {
44224
44185
  this.consumed += 1;
44225
44186
  }
44226
- else if (this.decodeMode === DecodingMode.Strict) {
44187
+ else if (this.decodeMode === decode_DecodingMode.Strict) {
44227
44188
  return 0;
44228
44189
  }
44229
44190
  this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
@@ -44255,7 +44216,7 @@ class EntityDecoder {
44255
44216
  if (this.treeIndex < 0) {
44256
44217
  return this.result === 0 ||
44257
44218
  // If we are parsing an attribute
44258
- (this.decodeMode === DecodingMode.Attribute &&
44219
+ (this.decodeMode === decode_DecodingMode.Attribute &&
44259
44220
  // We shouldn't have consumed any characters after the entity,
44260
44221
  (valueLength === 0 ||
44261
44222
  // And there should be no invalid characters.
@@ -44272,7 +44233,7 @@ class EntityDecoder {
44272
44233
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
44273
44234
  }
44274
44235
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
44275
- if (this.decodeMode !== DecodingMode.Strict) {
44236
+ if (this.decodeMode !== decode_DecodingMode.Strict) {
44276
44237
  this.result = this.treeIndex;
44277
44238
  this.consumed += this.excess;
44278
44239
  this.excess = 0;
@@ -44327,7 +44288,7 @@ class EntityDecoder {
44327
44288
  case EntityDecoderState.NamedEntity: {
44328
44289
  // Emit a named entity if we have one.
44329
44290
  return this.result !== 0 &&
44330
- (this.decodeMode !== DecodingMode.Attribute ||
44291
+ (this.decodeMode !== decode_DecodingMode.Attribute ||
44331
44292
  this.result === this.treeIndex)
44332
44293
  ? this.emitNotTerminatedNamedEntity()
44333
44294
  : 0;
@@ -44434,7 +44395,7 @@ const xmlDecoder = getDecoder(decode_data_xml);
44434
44395
  * @param mode The decoding mode.
44435
44396
  * @returns The decoded string.
44436
44397
  */
44437
- function decodeHTML(str, mode = DecodingMode.Legacy) {
44398
+ function decode_decodeHTML(str, mode = decode_DecodingMode.Legacy) {
44438
44399
  return htmlDecoder(str, mode);
44439
44400
  }
44440
44401
  /**
@@ -44444,7 +44405,7 @@ function decodeHTML(str, mode = DecodingMode.Legacy) {
44444
44405
  * @returns The decoded string.
44445
44406
  */
44446
44407
  function decodeHTMLAttribute(str) {
44447
- return htmlDecoder(str, DecodingMode.Attribute);
44408
+ return htmlDecoder(str, decode_DecodingMode.Attribute);
44448
44409
  }
44449
44410
  /**
44450
44411
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
@@ -44453,7 +44414,7 @@ function decodeHTMLAttribute(str) {
44453
44414
  * @returns The decoded string.
44454
44415
  */
44455
44416
  function decodeHTMLStrict(str) {
44456
- return htmlDecoder(str, DecodingMode.Strict);
44417
+ return htmlDecoder(str, decode_DecodingMode.Strict);
44457
44418
  }
44458
44419
  /**
44459
44420
  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
@@ -44461,8 +44422,8 @@ function decodeHTMLStrict(str) {
44461
44422
  * @param str The string to decode.
44462
44423
  * @returns The decoded string.
44463
44424
  */
44464
- function decodeXML(str) {
44465
- return xmlDecoder(str, DecodingMode.Strict);
44425
+ function decode_decodeXML(str) {
44426
+ return xmlDecoder(str, decode_DecodingMode.Strict);
44466
44427
  }
44467
44428
  //# sourceMappingURL=decode.js.map
44468
44429
  ;// ./node_modules/parse5/dist/common/html.js
@@ -52011,7 +51972,7 @@ function endTagInForeignContent(p, token) {
52011
51972
  }
52012
51973
  //# sourceMappingURL=index.js.map
52013
51974
  ;// ./node_modules/entities/lib/esm/escape.js
52014
- const xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
51975
+ const escape_xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
52015
51976
  const xmlCodeMap = new Map([
52016
51977
  [34, "&quot;"],
52017
51978
  [38, "&amp;"],
@@ -52020,7 +51981,7 @@ const xmlCodeMap = new Map([
52020
51981
  [62, "&gt;"],
52021
51982
  ]);
52022
51983
  // For compatibility with node < 4, we wrap `codePointAt`
52023
- const getCodePoint =
51984
+ const escape_getCodePoint =
52024
51985
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
52025
51986
  String.prototype.codePointAt != null
52026
51987
  ? (str, index) => str.codePointAt(index)
@@ -52038,11 +51999,11 @@ String.prototype.codePointAt != null
52038
51999
  * If a character has no equivalent entity, a
52039
52000
  * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
52040
52001
  */
52041
- function encodeXML(str) {
52002
+ function escape_encodeXML(str) {
52042
52003
  let ret = "";
52043
52004
  let lastIdx = 0;
52044
52005
  let match;
52045
- while ((match = xmlReplacer.exec(str)) !== null) {
52006
+ while ((match = escape_xmlReplacer.exec(str)) !== null) {
52046
52007
  const i = match.index;
52047
52008
  const char = str.charCodeAt(i);
52048
52009
  const next = xmlCodeMap.get(char);
@@ -52051,9 +52012,9 @@ function encodeXML(str) {
52051
52012
  lastIdx = i + 1;
52052
52013
  }
52053
52014
  else {
52054
- ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
52015
+ ret += `${str.substring(lastIdx, i)}&#x${escape_getCodePoint(str, i).toString(16)};`;
52055
52016
  // Increase by 1 if we have a surrogate pair
52056
- lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
52017
+ lastIdx = escape_xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
52057
52018
  }
52058
52019
  }
52059
52020
  return ret + str.substr(lastIdx);
@@ -52067,7 +52028,7 @@ function encodeXML(str) {
52067
52028
  *
52068
52029
  * @param data String to escape.
52069
52030
  */
52070
- const escape_escape = (/* unused pure expression or super */ null && (encodeXML));
52031
+ const escape_escape = (/* unused pure expression or super */ null && (escape_encodeXML));
52071
52032
  /**
52072
52033
  * Creates a function that escapes all characters matched by the given regular
52073
52034
  * expression using the given map of characters to escape to their entities.
@@ -52102,7 +52063,7 @@ function getEscaper(regex, map) {
52102
52063
  *
52103
52064
  * @param data String to escape.
52104
52065
  */
52105
- const escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
52066
+ const escape_escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
52106
52067
  /**
52107
52068
  * Encodes all characters that have to be escaped in HTML attributes,
52108
52069
  * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
@@ -53081,6 +53042,13 @@ const extractText = (node) => {
53081
53042
 
53082
53043
 
53083
53044
 
53045
+
53046
+
53047
+
53048
+
53049
+
53050
+ const titleParser = unified().use(remarkParse).use(remarkGfm);
53051
+ const toMarkdownExtensions = [gfmStrikethroughToMarkdown()];
53084
53052
  const callouts_regex = `^(${emoji_regex().source}|⚠)(\\s+|$)`;
53085
53053
  const findFirst = (node) => {
53086
53054
  if ('children' in node)
@@ -53197,31 +53165,65 @@ const processBlockquote = (node, index, parent) => {
53197
53165
  // Example: "> ⚠️ **Bold heading**\nBody text here"
53198
53166
  const bodyChildren = splitParagraphAtNewline(firstParagraph);
53199
53167
  const didSplit = bodyChildren !== null;
53200
- // Extract heading text after removing the icon prefix.
53201
- // Use `plain()` to handle complex markdown structures (bold, inline code, etc.)
53202
- const headingText = lib_plain(firstParagraph)
53203
- .toString()
53204
- .slice(match.length);
53205
- // Clean up the raw AST by removing the icon prefix from the first text node
53206
53168
  removeIconPrefix(firstParagraph, match.length);
53207
- const empty = !headingText.length && firstParagraph.children.length === 1;
53169
+ const firstText = findFirst(firstParagraph);
53170
+ const rawValue = firstText?.value ?? '';
53171
+ const hasContent = rawValue.trim().length > 0 || firstParagraph.children.length > 1;
53172
+ const empty = !hasContent;
53208
53173
  const theme = themes[icon] || 'default';
53209
- // Convert the first paragraph (first children of node) to a heading if it has content or was split
53210
- if (headingText || didSplit) {
53211
- node.children[0] = wrapHeading(node);
53212
- // Adjust position to account for the stripped icon prefix
53213
- node.children[0].position.start.offset += match.length;
53214
- node.children[0].position.start.column += match.length;
53174
+ if (hasContent || didSplit) {
53175
+ const headingMatch = rawValue.match(/^(#{1,6})\s*/);
53176
+ // # heading syntax is handled via direct AST manipulation so we can
53177
+ // set the depth while preserving the original inline children (bold, etc.)
53178
+ if (headingMatch) {
53179
+ firstText.value = rawValue.slice(headingMatch[0].length);
53180
+ const heading = wrapHeading(node);
53181
+ heading.depth = headingMatch[1].length;
53182
+ node.children[0] = heading;
53183
+ node.children[0].position.start.offset += match.length;
53184
+ node.children[0].position.start.column += match.length;
53185
+ }
53186
+ else {
53187
+ const headingText = toMarkdown({ type: 'root', children: [firstParagraph] }, {
53188
+ extensions: toMarkdownExtensions,
53189
+ })
53190
+ .trim()
53191
+ .replace(/^\\(?=[>#+\-*])/, '');
53192
+ const parsedTitle = titleParser.parse(headingText);
53193
+ const parsedFirstChild = parsedTitle.children[0];
53194
+ // Block-level syntax ("> quote", "- list") produces non-paragraph nodes;
53195
+ // inline text parses as a paragraph and falls through to wrapHeading().
53196
+ if (parsedFirstChild && parsedFirstChild.type !== 'paragraph') {
53197
+ // Strip positions from re-parsed nodes since they're relative to the heading text, not the original source
53198
+ visit(parsedTitle, (n) => {
53199
+ delete n.position;
53200
+ });
53201
+ const heading = wrapHeading(node);
53202
+ heading.children = parsedTitle.children;
53203
+ delete heading.position;
53204
+ node.children[0] = heading;
53205
+ }
53206
+ else {
53207
+ node.children[0] = wrapHeading(node);
53208
+ node.children[0].position.start.offset += match.length;
53209
+ node.children[0].position.start.column += match.length;
53210
+ }
53211
+ }
53215
53212
  }
53216
53213
  // Insert body content as a separate paragraph after the heading
53217
53214
  if (bodyChildren) {
53215
+ const headingPosition = node.children[0].position;
53218
53216
  node.children.splice(1, 0, {
53219
53217
  type: 'paragraph',
53220
53218
  children: bodyChildren,
53221
- position: {
53222
- start: node.children[0].position.end,
53223
- end: firstParagraphOriginalEnd,
53224
- },
53219
+ ...(headingPosition && firstParagraphOriginalEnd
53220
+ ? {
53221
+ position: {
53222
+ start: headingPosition.end,
53223
+ end: firstParagraphOriginalEnd,
53224
+ },
53225
+ }
53226
+ : {}),
53225
53227
  });
53226
53228
  }
53227
53229
  Object.assign(node, {
@@ -53238,11 +53240,24 @@ const processBlockquote = (node, index, parent) => {
53238
53240
  }
53239
53241
  };
53240
53242
  const calloutTransformer = () => {
53241
- return (tree) => {
53242
- visit(tree, 'blockquote', (node, index, parent) => {
53243
+ const processNode = (root) => {
53244
+ visit(root, 'blockquote', (node, index, parent) => {
53243
53245
  processBlockquote(node, index, parent);
53246
+ if (node.type === NodeTypes.callout) {
53247
+ // SKIP prevents re-processing synthetic blockquotes in parsed title content
53248
+ // (e.g., blockquotes from "> Quote" titles). Recursively process body children
53249
+ // (index 1+, skipping the heading at 0) to handle nested callouts.
53250
+ for (let i = 1; i < node.children.length; i += 1) {
53251
+ processNode(node.children[i]);
53252
+ }
53253
+ return SKIP;
53254
+ }
53255
+ return undefined;
53244
53256
  });
53245
53257
  };
53258
+ return (tree) => {
53259
+ processNode(tree);
53260
+ };
53246
53261
  };
53247
53262
  /* harmony default export */ const callouts = (calloutTransformer);
53248
53263
 
@@ -53267,8 +53282,18 @@ const codeTabsTransformer = ({ copyButtons } = {}) => (tree) => {
53267
53282
  const sibling = parent.children[walker];
53268
53283
  if (!isCode(sibling))
53269
53284
  break;
53285
+ // Check that the two code blocks are truly adjacent (no blank lines or
53286
+ // other content between them). The `gap` is the number of raw characters
53287
+ // between the end of the previous block and the start of this one.
53288
+ // For a LF-separated pair the gap equals `start.column` (the newline
53289
+ // char(s) plus any indentation). CRLF line endings add one extra byte
53290
+ // (\r) without advancing the line count, so we also accept
53291
+ // `start.column + 1` provided the blocks are still on consecutive lines.
53270
53292
  const olderSibling = parent.children[walker - 1];
53271
- if (olderSibling.position.end.offset + sibling.position.start.column !== sibling.position.start.offset)
53293
+ const gap = sibling.position.start.offset - olderSibling.position.end.offset;
53294
+ const lineDiff = sibling.position.start.line - olderSibling.position.end.line;
53295
+ const isCRLF = gap === sibling.position.start.column + 1 && lineDiff === 1;
53296
+ if (gap !== sibling.position.start.column && !isCRLF)
53272
53297
  break;
53273
53298
  children.push(sibling);
53274
53299
  // eslint-disable-next-line no-plusplus
@@ -53359,7 +53384,7 @@ const divTransformer = () => tree => {
53359
53384
  ;// ./processor/transform/embeds.ts
53360
53385
 
53361
53386
 
53362
- const isEmbed = (node) => 'title' in node && node.title === '@embed';
53387
+ const isEmbed = (node) => Boolean(node && 'title' in node && node.title === '@embed');
53363
53388
  const embedTransformer = () => {
53364
53389
  return (tree) => {
53365
53390
  visit(tree, 'paragraph', (node, i, parent) => {
@@ -53367,7 +53392,7 @@ const embedTransformer = () => {
53367
53392
  if (!isEmbed(child))
53368
53393
  return;
53369
53394
  const { url, title } = child;
53370
- const label = child.children[0].value;
53395
+ const label = child.children[0]?.value;
53371
53396
  const newNode = {
53372
53397
  type: NodeTypes.embedBlock,
53373
53398
  label,
@@ -70844,6 +70869,55 @@ const mdxToHast = () => tree => {
70844
70869
  };
70845
70870
  /* harmony default export */ const mdx_to_hast = (mdxToHast);
70846
70871
 
70872
+ ;// ./lib/mdast-util/empty-task-list-item/index.ts
70873
+ /**
70874
+ * Normalizes list items that are written as only `[ ]` or `[x]` into GFM task
70875
+ * list items during parse, but only when at least one whitespace character
70876
+ * follows the closing bracket (`]`). This matches legacy behaviour for checkboxes
70877
+ *
70878
+ * The issue is `remark-gfm` does not actually classify these as task items when they have no content
70879
+ * after the checkbox, which leaves them as plain text (`"[ ]"`). So a custom extension is needed to
70880
+ * treat these as task items
70881
+ */
70882
+ function exitListItemWithEmptyTaskListItem(token) {
70883
+ const node = this.stack[this.stack.length - 1];
70884
+ if (node &&
70885
+ node.type === 'listItem' &&
70886
+ typeof node.checked !== 'boolean') {
70887
+ const listItem = node;
70888
+ const head = listItem.children[0];
70889
+ if (head && head.type === 'paragraph' && head.children.length === 1) {
70890
+ const text = head.children[0];
70891
+ if (text.type === 'text') {
70892
+ const hasTrailingWhitespace = typeof head.position?.end.offset === 'number' &&
70893
+ typeof text.position?.end.offset === 'number' &&
70894
+ head.position.end.offset > text.position.end.offset;
70895
+ if (!hasTrailingWhitespace) {
70896
+ this.exit(token);
70897
+ return;
70898
+ }
70899
+ const value = text.value;
70900
+ if (value === '[ ]') {
70901
+ listItem.checked = false;
70902
+ head.children = [];
70903
+ }
70904
+ else if (value === '[x]' || value === '[X]') {
70905
+ listItem.checked = true;
70906
+ head.children = [];
70907
+ }
70908
+ }
70909
+ }
70910
+ }
70911
+ this.exit(token);
70912
+ }
70913
+ function emptyTaskListItemFromMarkdown() {
70914
+ return {
70915
+ exit: {
70916
+ listItem: exitListItemWithEmptyTaskListItem,
70917
+ },
70918
+ };
70919
+ }
70920
+
70847
70921
  ;// ./lib/mdast-util/legacy-variable/index.ts
70848
70922
 
70849
70923
  const contextMap = new WeakMap();
@@ -71153,11 +71227,21 @@ function legacyVariable() {
71153
71227
  */
71154
71228
 
71155
71229
 
71230
+ ;// ./processor/transform/mdxish/constants.ts
71231
+ /**
71232
+ * Inline component tags handled by mdxish-inline-components.ts.
71233
+ * Also excluded from block-level handling in mdxish-component-blocks.ts.
71234
+ */
71235
+ const INLINE_COMPONENT_TAGS = new Set(['Anchor']);
71236
+
71156
71237
  ;// ./processor/transform/mdxish/mdxish-component-blocks.ts
71157
71238
 
71158
71239
 
71159
71240
 
71160
71241
 
71242
+
71243
+
71244
+
71161
71245
  const pascalCaseTagPattern = /^<([A-Z][A-Za-z0-9_]*)([^>]*?)(\/?)>([\s\S]*)?$/;
71162
71246
  const tagAttributePattern = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*("[^"]*"|'[^']*'|[^\s"'>]+))?/g;
71163
71247
  /**
@@ -71170,14 +71254,13 @@ const MAX_LOOKAHEAD = 30;
71170
71254
  * These components either have special parsing requirements that the generic component
71171
71255
  * block transformer cannot handle correctly, or are inline components that we don't
71172
71256
  * want to convert to mdxJsxFlowElement which is a block level element.
71173
- *
71174
- * Glossary and Anchor are inline components.
71175
71257
  */
71176
- const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', 'Anchor']);
71258
+ const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', ...INLINE_COMPONENT_TAGS]);
71177
71259
  const inlineMdProcessor = unified()
71178
71260
  .data('micromarkExtensions', [legacyVariable()])
71179
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
71180
- .use(remarkParse);
71261
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown()])
71262
+ .use(remarkParse)
71263
+ .use(remarkGfm);
71181
71264
  const isClosingTag = (value, tag) => value.trim() === `</${tag}>`;
71182
71265
  /**
71183
71266
  * Parse markdown content into mdast children nodes.
@@ -71436,10 +71519,10 @@ const mdxishComponentBlocks = () => tree => {
71436
71519
  const extraChildren = contentAfterTag ? parseMdChildren(contentAfterTag.trimStart()) : [];
71437
71520
  // Collect all intermediate siblings between opening tag and closing tag
71438
71521
  const intermediateChildren = parent.children.slice(index + 1, closingIndex);
71439
- // For paragraph siblings, include the paragraph's children (with closing tag stripped)
71522
+ // For paragraph siblings, include the full paragraph (with closing tag stripped)
71440
71523
  // For HTML siblings, include any content parsed from before the closing tag
71441
71524
  const closingChildren = strippedParagraph
71442
- ? strippedParagraph.children
71525
+ ? (strippedParagraph.children.length > 0 ? [strippedParagraph] : [])
71443
71526
  : extraClosingChildren;
71444
71527
  const componentNode = createComponentNode({
71445
71528
  tag,
@@ -92101,6 +92184,46 @@ ${reformatHTML(html)}
92101
92184
  };
92102
92185
  /* harmony default export */ const html_block = (htmlBlock);
92103
92186
 
92187
+ ;// ./processor/compile/list-item.ts
92188
+
92189
+ // Matches '*', '-', '+', '1.', '2.', '3.', etc. followed by a newline or 1-3 spaces
92190
+ // to be replaced with the marker and a space like `- [ ]`
92191
+ const listMarkerRegex = /^(?:[*+-]|\d+\.)(?:([\r\n]| {1,3})|$)/;
92192
+ /**
92193
+ * List-item serializer intended for checklist items
92194
+ * Uses the default listItem handler for formatting, then patches the output to inject the checkbox and preserve empty items
92195
+ *
92196
+ * The current aim is to ensure checklist items that have no text after the checkbox are serialized
92197
+ * with their checkbox intact (for example, `- [ ]`) instead of dropping it
92198
+ * We can add more adjustments if needed
92199
+ */
92200
+ const compile_list_item_listItem = (node, parent, state, info) => {
92201
+ const head = node.children[0];
92202
+ const isCheckbox = typeof node.checked === 'boolean' && head && head.type === 'paragraph';
92203
+ if (!isCheckbox) {
92204
+ return handle.listItem(node, parent, state, info);
92205
+ }
92206
+ const checkbox = `[${node.checked ? 'x' : ' '}] `;
92207
+ // `tracker` keeps current column/offset for downstream line wrapping/indent
92208
+ // We move it by checkbox length so wrapped lines align after `[ ] ` / `[x] `
92209
+ const tracker = state.createTracker(info);
92210
+ tracker.move(checkbox);
92211
+ // Initialize the checkbox item with the default listItem serializer as the source of truth for spacing,
92212
+ // indentation, ordered marker formatting, and wrapping behavior
92213
+ let value = handle.listItem(node, parent, state, {
92214
+ ...info,
92215
+ ...tracker.current(),
92216
+ });
92217
+ // Patch and inject checkbox after the list marker token
92218
+ value = value.replace(listMarkerRegex, (match, separator) => {
92219
+ const marker = match.trim();
92220
+ const actualSeparator = separator || ' ';
92221
+ return `${marker}${actualSeparator}${checkbox}`;
92222
+ });
92223
+ return value;
92224
+ };
92225
+ /* harmony default export */ const list_item = (compile_list_item_listItem);
92226
+
92104
92227
  ;// ./processor/compile/plain.ts
92105
92228
  const plain_plain = (node) => node.value;
92106
92229
  /* harmony default export */ const compile_plain = (plain_plain);
@@ -92119,6 +92242,7 @@ const variable = (node) => `{user.${node.data?.hProperties?.name || ''}}`;
92119
92242
 
92120
92243
 
92121
92244
 
92245
+
92122
92246
  function compilers(mdxish = false) {
92123
92247
  const data = this.data();
92124
92248
  const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
@@ -92136,6 +92260,7 @@ function compilers(mdxish = false) {
92136
92260
  figure: compile_compatibility,
92137
92261
  html: compile_compatibility,
92138
92262
  i: compile_compatibility,
92263
+ ...(mdxish && { listItem: list_item }),
92139
92264
  plain: compile_plain,
92140
92265
  yaml: compile_compatibility,
92141
92266
  };
@@ -93667,6 +93792,76 @@ function remarkBreaks() {
93667
93792
  }
93668
93793
  }
93669
93794
 
93795
+ ;// ./processor/plugin/flatten-table-cell-paragraphs.ts
93796
+
93797
+ /** List elements that cause margin issues when adjacent to paragraphs */
93798
+ const LIST_ELEMENTS = new Set(['ul', 'ol']);
93799
+ /**
93800
+ * Check if a child is a whitespace-only text node
93801
+ */
93802
+ function isWhitespaceText(child) {
93803
+ return child.type === 'text' && !child.value.trim();
93804
+ }
93805
+ /**
93806
+ * Check if a child is an element with the given tag name
93807
+ */
93808
+ function isElementWithTag(child, tags) {
93809
+ return child.type === 'element' && tags.has(child.tagName);
93810
+ }
93811
+ /**
93812
+ * Rehype plugin that flattens paragraph elements that are adjacent to lists in table cells.
93813
+ *
93814
+ * When markdown content is parsed inside JSX table cells, text before/after lists
93815
+ * gets wrapped in `<p>` tags. This causes unwanted spacing because both `<p>` and
93816
+ * list elements have margins.
93817
+ *
93818
+ * This plugin selectively unwraps only `<p>` elements that are immediately before
93819
+ * or after a list (`<ul>` or `<ol>`), preserving paragraphs in other contexts.
93820
+ */
93821
+ const rehypeFlattenTableCellParagraphs = () => {
93822
+ return (tree) => {
93823
+ visit(tree, 'element', (node) => {
93824
+ // Only process table cells
93825
+ if (node.tagName !== 'td' && node.tagName !== 'th')
93826
+ return;
93827
+ const children = node.children;
93828
+ const newChildren = [];
93829
+ for (let i = 0; i < children.length; i += 1) {
93830
+ const child = children[i];
93831
+ // If not a paragraph, keep as-is
93832
+ if (child.type !== 'element' || child.tagName !== 'p') {
93833
+ newChildren.push(child);
93834
+ }
93835
+ else {
93836
+ // Check if this paragraph is adjacent to a list
93837
+ // Look at previous non-whitespace sibling
93838
+ let prevIndex = i - 1;
93839
+ while (prevIndex >= 0 && isWhitespaceText(children[prevIndex])) {
93840
+ prevIndex -= 1;
93841
+ }
93842
+ const prevIsNewChild = newChildren.length > 0 && newChildren[newChildren.length - 1];
93843
+ const prevIsList = (prevIndex >= 0 && isElementWithTag(children[prevIndex], LIST_ELEMENTS)) ||
93844
+ (prevIsNewChild && prevIsNewChild.type === 'element' && LIST_ELEMENTS.has(prevIsNewChild.tagName));
93845
+ // Look at next non-whitespace sibling
93846
+ let nextIndex = i + 1;
93847
+ while (nextIndex < children.length && isWhitespaceText(children[nextIndex])) {
93848
+ nextIndex += 1;
93849
+ }
93850
+ const nextIsList = nextIndex < children.length && isElementWithTag(children[nextIndex], LIST_ELEMENTS);
93851
+ // If adjacent to a list, flatten the paragraph
93852
+ if (prevIsList || nextIsList) {
93853
+ newChildren.push(...child.children);
93854
+ }
93855
+ else {
93856
+ newChildren.push(child);
93857
+ }
93858
+ }
93859
+ }
93860
+ node.children = newChildren;
93861
+ });
93862
+ };
93863
+ };
93864
+
93670
93865
  ;// ./lib/utils/mdxish/mdxish-get-component-name.ts
93671
93866
  /** Convert a string to PascalCase */
93672
93867
  function toPascalCase(str) {
@@ -93705,7 +93900,7 @@ function getComponentName(componentName, components) {
93705
93900
 
93706
93901
 
93707
93902
 
93708
- const INLINE_COMPONENT_TAGS = new Set(['anchor', 'glossary']);
93903
+ const mdxish_components_INLINE_COMPONENT_TAGS = new Set(['anchor', 'glossary']);
93709
93904
  function isElementContentNode(node) {
93710
93905
  return node.type === 'element' || node.type === 'text' || node.type === 'comment';
93711
93906
  }
@@ -93787,7 +93982,7 @@ function parseTextChildren(node, processMarkdown, components) {
93787
93982
  const hast = processMarkdown(child.value.trim());
93788
93983
  const children = (hast.children ?? []).filter(isElementContentNode);
93789
93984
  // For inline components, preserve plain text instead of wrapping in <p>
93790
- if (INLINE_COMPONENT_TAGS.has(node.tagName.toLowerCase()) && isSingleParagraphTextNode(children)) {
93985
+ if (mdxish_components_INLINE_COMPONENT_TAGS.has(node.tagName.toLowerCase()) && isSingleParagraphTextNode(children)) {
93791
93986
  return [child];
93792
93987
  }
93793
93988
  return children;
@@ -94160,20 +94355,35 @@ function extractBalancedBraces(content, start) {
94160
94355
  return { content: content.slice(start, pos - 1), end: pos };
94161
94356
  }
94162
94357
  /**
94163
- * Escapes unbalanced braces in content to prevent MDX expression parsing errors.
94164
- * Handles: already-escaped braces, string literals inside expressions, nested balanced braces.
94358
+ * Escapes problematic braces in content to prevent MDX expression parsing errors.
94359
+ * Handles three cases:
94360
+ * 1. Unbalanced braces (e.g., `{foo` without closing `}`)
94361
+ * 2. Paragraph-spanning expressions (e.g., `{\n\n}` where blank line splits paragraphs)
94362
+ * 3. Skips HTML elements to prevent backslashes appearing in output
94363
+ *
94165
94364
  */
94166
- function escapeUnbalancedBraces(content) {
94167
- const opens = [];
94168
- const unbalanced = new Set();
94365
+ function escapeProblematicBraces(content) {
94366
+ // Skip HTML elements — their content should never be escaped because
94367
+ // rehypeRaw parses them into hast elements, making `\` literal text in output
94368
+ const htmlElements = [];
94369
+ const safe = content.replace(/<([a-z][a-zA-Z0-9]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g, match => {
94370
+ const idx = htmlElements.length;
94371
+ htmlElements.push(match);
94372
+ return `___HTML_ELEM_${idx}___`;
94373
+ });
94374
+ const toEscape = new Set();
94375
+ // Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
94376
+ const chars = Array.from(safe);
94169
94377
  let strDelim = null;
94170
94378
  let strEscaped = false;
94171
- // Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
94172
- const chars = Array.from(content);
94379
+ // Stack of open braces with their state
94380
+ const openStack = [];
94381
+ // Track position of last newline (outside strings) to detect blank lines
94382
+ let lastNewlinePos = -2; // -2 means no recent newline
94173
94383
  for (let i = 0; i < chars.length; i += 1) {
94174
94384
  const ch = chars[i];
94175
- // Track strings inside expressions to ignore braces within them
94176
- if (opens.length > 0) {
94385
+ // Track string delimiters inside expressions to ignore braces within them
94386
+ if (openStack.length > 0) {
94177
94387
  if (strDelim) {
94178
94388
  if (strEscaped)
94179
94389
  strEscaped = false;
@@ -94189,6 +94399,20 @@ function escapeUnbalancedBraces(content) {
94189
94399
  // eslint-disable-next-line no-continue
94190
94400
  continue;
94191
94401
  }
94402
+ // Track newlines to detect blank lines (paragraph boundaries)
94403
+ if (ch === '\n') {
94404
+ // Check if this newline creates a blank line (only whitespace since last newline)
94405
+ if (lastNewlinePos >= 0) {
94406
+ const between = chars.slice(lastNewlinePos + 1, i).join('');
94407
+ if (/^[ \t]*$/.test(between)) {
94408
+ // This is a blank line - mark all open expressions as paragraph-spanning
94409
+ openStack.forEach(entry => {
94410
+ entry.hasBlankLine = true;
94411
+ });
94412
+ }
94413
+ }
94414
+ lastNewlinePos = i;
94415
+ }
94192
94416
  }
94193
94417
  // Skip already-escaped braces (count preceding backslashes)
94194
94418
  if (ch === '{' || ch === '}') {
@@ -94200,21 +94424,37 @@ function escapeUnbalancedBraces(content) {
94200
94424
  continue;
94201
94425
  }
94202
94426
  }
94203
- if (ch === '{')
94204
- opens.push(i);
94427
+ if (ch === '{') {
94428
+ openStack.push({ pos: i, hasBlankLine: false });
94429
+ lastNewlinePos = -2; // Reset newline tracking for new expression
94430
+ }
94205
94431
  else if (ch === '}') {
94206
- if (opens.length > 0)
94207
- opens.pop();
94208
- else
94209
- unbalanced.add(i);
94432
+ if (openStack.length > 0) {
94433
+ const entry = openStack.pop();
94434
+ // If expression spans paragraph boundary, escape both braces
94435
+ if (entry.hasBlankLine) {
94436
+ toEscape.add(entry.pos);
94437
+ toEscape.add(i);
94438
+ }
94439
+ }
94440
+ else {
94441
+ // Unbalanced closing brace (no matching open)
94442
+ toEscape.add(i);
94443
+ }
94210
94444
  }
94211
94445
  }
94212
- opens.forEach(pos => unbalanced.add(pos));
94213
- if (unbalanced.size === 0)
94214
- return content;
94215
- return chars
94216
- .map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch))
94217
- .join('');
94446
+ // Any remaining open braces are unbalanced
94447
+ openStack.forEach(entry => toEscape.add(entry.pos));
94448
+ // If there are no problematic braces, return safe content as-is;
94449
+ // otherwise, escape each problematic `{` or `}` so MDX doesn't treat them as expressions.
94450
+ let result = toEscape.size === 0
94451
+ ? safe
94452
+ : chars.map((ch, i) => (toEscape.has(i) ? `\\${ch}` : ch)).join('');
94453
+ // Restore HTML elements
94454
+ if (htmlElements.length > 0) {
94455
+ result = result.replace(/___HTML_ELEM_(\d+)___/g, (_m, idx) => htmlElements[parseInt(idx, 10)]);
94456
+ }
94457
+ return result;
94218
94458
  }
94219
94459
  /**
94220
94460
  * Converts JSX attribute expressions (attribute={expression}) to HTML attributes (attribute="value").
@@ -94308,8 +94548,9 @@ function preprocessJSXExpressions(content, context = {}) {
94308
94548
  // For inline expressions, we use a library to parse the expression & evaluate it later
94309
94549
  // For attribute expressions, it was difficult to use a library to parse them, so do it manually
94310
94550
  processed = evaluateAttributeExpressions(protectedContent, context, protectedCode);
94311
- // Step 3: Escape unbalanced braces to prevent MDX expression parsing errors
94312
- processed = escapeUnbalancedBraces(processed);
94551
+ // Step 3: Escape problematic braces to prevent MDX expression parsing errors
94552
+ // This handles both unbalanced braces and paragraph-spanning expressions in one pass
94553
+ processed = escapeProblematicBraces(processed);
94313
94554
  // Step 4: Restore protected code blocks
94314
94555
  processed = restoreCodeBlocks(processed, protectedCode);
94315
94556
  return processed;
@@ -94406,6 +94647,9 @@ const generateSlugForHeadings = () => (tree) => {
94406
94647
  };
94407
94648
  /* harmony default export */ const heading_slugs = (generateSlugForHeadings);
94408
94649
 
94650
+ // EXTERNAL MODULE: external "@readme/variable"
94651
+ var variable_ = __webpack_require__(8167);
94652
+ var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
94409
94653
  ;// ./node_modules/rehype-parse/lib/index.js
94410
94654
  /**
94411
94655
  * @import {Root} from 'hast'
@@ -94471,6 +94715,311 @@ function rehypeParse(options) {
94471
94715
  }
94472
94716
  }
94473
94717
 
94718
+ ;// ./node_modules/entities/lib/esm/generated/encode-html.js
94719
+ // Generated using scripts/write-encode-map.ts
94720
+ function restoreDiff(arr) {
94721
+ for (let i = 1; i < arr.length; i++) {
94722
+ arr[i][0] += arr[i - 1][0] + 1;
94723
+ }
94724
+ return arr;
94725
+ }
94726
+ // prettier-ignore
94727
+ /* harmony default export */ const encode_html = (new Map(/* #__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* #__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* #__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]])));
94728
+ //# sourceMappingURL=encode-html.js.map
94729
+ ;// ./node_modules/entities/lib/esm/encode.js
94730
+
94731
+
94732
+ const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
94733
+ /**
94734
+ * Encodes all characters in the input using HTML entities. This includes
94735
+ * characters that are valid ASCII characters in HTML documents, such as `#`.
94736
+ *
94737
+ * To get a more compact output, consider using the `encodeNonAsciiHTML`
94738
+ * function, which will only encode characters that are not valid in HTML
94739
+ * documents, as well as non-ASCII characters.
94740
+ *
94741
+ * If a character has no equivalent entity, a numeric hexadecimal reference
94742
+ * (eg. `&#xfc;`) will be used.
94743
+ */
94744
+ function encode_encodeHTML(data) {
94745
+ return encodeHTMLTrieRe(htmlReplacer, data);
94746
+ }
94747
+ /**
94748
+ * Encodes all non-ASCII characters, as well as characters not valid in HTML
94749
+ * documents using HTML entities. This function will not encode characters that
94750
+ * are valid in HTML documents, such as `#`.
94751
+ *
94752
+ * If a character has no equivalent entity, a numeric hexadecimal reference
94753
+ * (eg. `&#xfc;`) will be used.
94754
+ */
94755
+ function encode_encodeNonAsciiHTML(data) {
94756
+ return encodeHTMLTrieRe(xmlReplacer, data);
94757
+ }
94758
+ function encodeHTMLTrieRe(regExp, str) {
94759
+ let ret = "";
94760
+ let lastIdx = 0;
94761
+ let match;
94762
+ while ((match = regExp.exec(str)) !== null) {
94763
+ const i = match.index;
94764
+ ret += str.substring(lastIdx, i);
94765
+ const char = str.charCodeAt(i);
94766
+ let next = htmlTrie.get(char);
94767
+ if (typeof next === "object") {
94768
+ // We are in a branch. Try to match the next char.
94769
+ if (i + 1 < str.length) {
94770
+ const nextChar = str.charCodeAt(i + 1);
94771
+ const value = typeof next.n === "number"
94772
+ ? next.n === nextChar
94773
+ ? next.o
94774
+ : undefined
94775
+ : next.n.get(nextChar);
94776
+ if (value !== undefined) {
94777
+ ret += value;
94778
+ lastIdx = regExp.lastIndex += 1;
94779
+ continue;
94780
+ }
94781
+ }
94782
+ next = next.v;
94783
+ }
94784
+ // We might have a tree node without a value; skip and use a numeric entity.
94785
+ if (next !== undefined) {
94786
+ ret += next;
94787
+ lastIdx = i + 1;
94788
+ }
94789
+ else {
94790
+ const cp = getCodePoint(str, i);
94791
+ ret += `&#x${cp.toString(16)};`;
94792
+ // Increase by 1 if we have a surrogate pair
94793
+ lastIdx = regExp.lastIndex += Number(cp !== char);
94794
+ }
94795
+ }
94796
+ return ret + str.substr(lastIdx);
94797
+ }
94798
+ //# sourceMappingURL=encode.js.map
94799
+ ;// ./node_modules/entities/lib/esm/index.js
94800
+
94801
+
94802
+
94803
+ /** The level of entities to support. */
94804
+ var EntityLevel;
94805
+ (function (EntityLevel) {
94806
+ /** Support only XML entities. */
94807
+ EntityLevel[EntityLevel["XML"] = 0] = "XML";
94808
+ /** Support HTML entities, which are a superset of XML entities. */
94809
+ EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
94810
+ })(EntityLevel || (EntityLevel = {}));
94811
+ var EncodingMode;
94812
+ (function (EncodingMode) {
94813
+ /**
94814
+ * The output is UTF-8 encoded. Only characters that need escaping within
94815
+ * XML will be escaped.
94816
+ */
94817
+ EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
94818
+ /**
94819
+ * The output consists only of ASCII characters. Characters that need
94820
+ * escaping within HTML, and characters that aren't ASCII characters will
94821
+ * be escaped.
94822
+ */
94823
+ EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
94824
+ /**
94825
+ * Encode all characters that have an equivalent entity, as well as all
94826
+ * characters that are not ASCII characters.
94827
+ */
94828
+ EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
94829
+ /**
94830
+ * Encode all characters that have to be escaped in HTML attributes,
94831
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
94832
+ */
94833
+ EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
94834
+ /**
94835
+ * Encode all characters that have to be escaped in HTML text,
94836
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
94837
+ */
94838
+ EncodingMode[EncodingMode["Text"] = 4] = "Text";
94839
+ })(EncodingMode || (EncodingMode = {}));
94840
+ /**
94841
+ * Decodes a string with entities.
94842
+ *
94843
+ * @param data String to decode.
94844
+ * @param options Decoding options.
94845
+ */
94846
+ function esm_decode(data, options = EntityLevel.XML) {
94847
+ const level = typeof options === "number" ? options : options.level;
94848
+ if (level === EntityLevel.HTML) {
94849
+ const mode = typeof options === "object" ? options.mode : undefined;
94850
+ return decodeHTML(data, mode);
94851
+ }
94852
+ return decodeXML(data);
94853
+ }
94854
+ /**
94855
+ * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
94856
+ *
94857
+ * @param data String to decode.
94858
+ * @param options Decoding options.
94859
+ * @deprecated Use `decode` with the `mode` set to `Strict`.
94860
+ */
94861
+ function decodeStrict(data, options = EntityLevel.XML) {
94862
+ var _a;
94863
+ const opts = typeof options === "number" ? { level: options } : options;
94864
+ (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);
94865
+ return esm_decode(data, opts);
94866
+ }
94867
+ /**
94868
+ * Encodes a string with entities.
94869
+ *
94870
+ * @param data String to encode.
94871
+ * @param options Encoding options.
94872
+ */
94873
+ function esm_encode(data, options = EntityLevel.XML) {
94874
+ const opts = typeof options === "number" ? { level: options } : options;
94875
+ // Mode `UTF8` just escapes XML entities
94876
+ if (opts.mode === EncodingMode.UTF8)
94877
+ return escapeUTF8(data);
94878
+ if (opts.mode === EncodingMode.Attribute)
94879
+ return escapeAttribute(data);
94880
+ if (opts.mode === EncodingMode.Text)
94881
+ return escapeText(data);
94882
+ if (opts.level === EntityLevel.HTML) {
94883
+ if (opts.mode === EncodingMode.ASCII) {
94884
+ return encodeNonAsciiHTML(data);
94885
+ }
94886
+ return encodeHTML(data);
94887
+ }
94888
+ // ASCII and Extensive are equivalent
94889
+ return encodeXML(data);
94890
+ }
94891
+
94892
+
94893
+
94894
+ //# sourceMappingURL=index.js.map
94895
+ ;// ./lib/micromark/loose-html-entities/syntax.ts
94896
+
94897
+
94898
+
94899
+ const MAX_ENTITY_LENGTH = 32;
94900
+ const looseHtmlEntityConstruct = {
94901
+ name: 'looseHtmlEntity',
94902
+ tokenize: tokenizeLooseHtmlEntity,
94903
+ };
94904
+ function resolveEntity(name) {
94905
+ const input = `&${name};`;
94906
+ const decoded = decodeHTMLStrict(input);
94907
+ return decoded !== input ? decoded : undefined;
94908
+ }
94909
+ function tokenizeLooseHtmlEntity(effects, ok, nok) {
94910
+ let length = 0;
94911
+ const start = (code) => {
94912
+ if (code !== codes.ampersand)
94913
+ return nok(code);
94914
+ effects.enter('looseHtmlEntity');
94915
+ effects.consume(code);
94916
+ return afterAmpersand;
94917
+ };
94918
+ const afterAmpersand = (code) => {
94919
+ if (code === codes.numberSign) {
94920
+ effects.consume(code);
94921
+ return afterHash;
94922
+ }
94923
+ return accumulateNamed(code);
94924
+ };
94925
+ const afterHash = (code) => {
94926
+ if (code === codes.lowercaseX || code === codes.uppercaseX) {
94927
+ effects.consume(code);
94928
+ return accumulateHex;
94929
+ }
94930
+ return accumulateDecimal(code);
94931
+ };
94932
+ const accumulateNamed = (code) => {
94933
+ if (asciiAlphanumeric(code) && length < MAX_ENTITY_LENGTH) {
94934
+ effects.consume(code);
94935
+ length += 1;
94936
+ return accumulateNamed;
94937
+ }
94938
+ if (length === 0)
94939
+ return nok(code);
94940
+ if (code === codes.semicolon)
94941
+ return nok(code);
94942
+ effects.exit('looseHtmlEntity');
94943
+ return ok(code);
94944
+ };
94945
+ const accumulateDecimal = (code) => {
94946
+ if (asciiDigit(code) && length < MAX_ENTITY_LENGTH) {
94947
+ effects.consume(code);
94948
+ length += 1;
94949
+ return accumulateDecimal;
94950
+ }
94951
+ if (length === 0)
94952
+ return nok(code);
94953
+ if (code === codes.semicolon)
94954
+ return nok(code);
94955
+ effects.exit('looseHtmlEntity');
94956
+ return ok(code);
94957
+ };
94958
+ const accumulateHex = (code) => {
94959
+ if (asciiHexDigit(code) && length < MAX_ENTITY_LENGTH) {
94960
+ effects.consume(code);
94961
+ length += 1;
94962
+ return accumulateHex;
94963
+ }
94964
+ if (length === 0)
94965
+ return nok(code);
94966
+ if (code === codes.semicolon)
94967
+ return nok(code);
94968
+ effects.exit('looseHtmlEntity');
94969
+ return ok(code);
94970
+ };
94971
+ return start;
94972
+ }
94973
+ function exitLooseHtmlEntity(token) {
94974
+ const raw = this.sliceSerialize(token);
94975
+ const entityChars = raw.slice(1);
94976
+ if (entityChars.startsWith('#')) {
94977
+ const decoded = resolveEntity(entityChars);
94978
+ if (decoded) {
94979
+ this.enter({ type: 'text', value: decoded }, token);
94980
+ this.exit(token);
94981
+ return;
94982
+ }
94983
+ }
94984
+ else {
94985
+ for (let len = entityChars.length; len >= 2; len -= 1) {
94986
+ const candidate = entityChars.slice(0, len);
94987
+ const decoded = resolveEntity(candidate);
94988
+ if (decoded) {
94989
+ const remainder = entityChars.slice(len);
94990
+ this.enter({ type: 'text', value: decoded + remainder }, token);
94991
+ this.exit(token);
94992
+ return;
94993
+ }
94994
+ }
94995
+ }
94996
+ this.enter({ type: 'text', value: raw }, token);
94997
+ this.exit(token);
94998
+ }
94999
+ function looseHtmlEntity() {
95000
+ return {
95001
+ text: { [codes.ampersand]: looseHtmlEntityConstruct },
95002
+ };
95003
+ }
95004
+ function looseHtmlEntityFromMarkdown() {
95005
+ return {
95006
+ exit: {
95007
+ looseHtmlEntity: exitLooseHtmlEntity,
95008
+ },
95009
+ };
95010
+ }
95011
+
95012
+ ;// ./lib/micromark/loose-html-entities/index.ts
95013
+ /**
95014
+ * Micromark extension for HTML entities without semicolons.
95015
+ *
95016
+ * Handles named entities (e.g. `&nbsp`, `&amp`, `&copy`), decimal numeric
95017
+ * references (e.g. `&#160`, `&#169`), and hex numeric references (e.g. `&#xa0`,
95018
+ * `&#xA0`). Entities that already include the semicolon are left for the
95019
+ * standard parser to handle.
95020
+ */
95021
+
95022
+
94474
95023
  ;// ./processor/transform/mdxish/normalize-malformed-md-syntax.ts
94475
95024
 
94476
95025
  // Marker patterns for multi-node emphasis detection
@@ -94887,6 +95436,11 @@ const EMPTY_CODE_PLACEHOLDER = {
94887
95436
 
94888
95437
 
94889
95438
 
95439
+
95440
+
95441
+
95442
+
95443
+
94890
95444
 
94891
95445
 
94892
95446
  /**
@@ -94928,18 +95482,23 @@ const preprocessBody = (text) => {
94928
95482
  };
94929
95483
  /** Markdown parser */
94930
95484
  const contentParser = unified()
94931
- .data('micromarkExtensions', [legacyVariable()])
94932
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
95485
+ .data('micromarkExtensions', [legacyVariable(), looseHtmlEntity()])
95486
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
94933
95487
  .use(remarkParse)
94934
95488
  .use(remarkBreaks)
94935
95489
  .use(remarkGfm)
94936
95490
  .use(normalize_malformed_md_syntax);
94937
- /** Markdown to HTML processor (mdast → hast → HTML string) */
95491
+ /**
95492
+ * Markdown to HTML processor (mdast → hast → HTML string).
95493
+ *
95494
+ * Uses only strikethrough from GFM instead of the full remarkGfm bundle
95495
+ * since we've had a case where it was causing a stack overflow when parsing HTML blocks containing URLs
95496
+ * such as `<ul><li>https://a</li>\n</ul>` due to subtokenizing recursion for URLs
95497
+ */
94938
95498
  const markdownToHtml = unified()
94939
- .data('micromarkExtensions', [legacyVariable()])
94940
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
95499
+ .data('micromarkExtensions', [gfmStrikethrough(), legacyVariable(), looseHtmlEntity()])
95500
+ .data('fromMarkdownExtensions', [gfmStrikethroughFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
94941
95501
  .use(remarkParse)
94942
- .use(remarkGfm)
94943
95502
  .use(normalize_malformed_md_syntax)
94944
95503
  .use(remarkRehype)
94945
95504
  .use(rehypeStringify);
@@ -94951,7 +95510,12 @@ const htmlStringifier = unified().use(rehypeStringify);
94951
95510
  const processBackslashEscapes = (text) => text.replace(/\\<([^>]*)>/g, '&lt;$1>').replace(/\\([<>|])/g, (_, c) => (c === '<' ? '&lt;' : c === '>' ? '>' : c));
94952
95511
  /** Block-level HTML tags that trigger CommonMark type 6 HTML blocks (condition 6). */
94953
95512
  const BLOCK_LEVEL_TAGS = new Set(htmlBlockNames);
94954
- const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) => {
95513
+ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest, offset, input) => {
95514
+ // Don't escape legacy variable syntax like <<var>> since we want to parse it
95515
+ // with the tokenizer and not want the <var> to get parsed as an HTML tag
95516
+ const isLegacyVariable = offset > 0 && input[offset - 1] === '<' && offset < input.length - 1 && input[offset + match.length] === '>';
95517
+ if (isLegacyVariable)
95518
+ return match;
94955
95519
  const tagName = tag.replace(/^\//, '');
94956
95520
  if (STANDARD_HTML_TAGS.has(tagName.toLowerCase()))
94957
95521
  return match;
@@ -94971,9 +95535,20 @@ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) =
94971
95535
  * (it treats unknown tags as void elements, stripping their children).
94972
95536
  */
94973
95537
  const processMarkdownInHtmlString = (html) => {
95538
+ let htmlContent = html;
95539
+ // Replace all occurrences of legacy variable syntax like <<name>> with placeholders so the inner
95540
+ // <name> doesn't get parsed as an HTML tag and the tokenizer can parse it
95541
+ const legacyVars = {};
95542
+ let legacyCounter = 0;
95543
+ htmlContent = htmlContent.replace(new RegExp(variable_.VARIABLE_REGEXP, 'g'), match => {
95544
+ const id = `RDMX_LEGACY_VAR_${(legacyCounter += 1)}_TOKEN`;
95545
+ legacyVars[id] = match;
95546
+ return id;
95547
+ });
94974
95548
  const placeholders = [];
94975
95549
  let counter = 0;
94976
- const safened = escapeInvalidTags(html).replace(HTML_TAG_RE, match => {
95550
+ // Escape invalid html tags so they don't get parsed as HTML tags
95551
+ const safened = escapeInvalidTags(htmlContent).replace(HTML_TAG_RE, match => {
94977
95552
  if (!/^<\/?[A-Z]/.test(match))
94978
95553
  return match;
94979
95554
  const id = `<!--PC${(counter += 1)}-->`;
@@ -94984,7 +95559,10 @@ const processMarkdownInHtmlString = (html) => {
94984
95559
  const textToHast = (text) => {
94985
95560
  if (!text.trim())
94986
95561
  return [{ type: 'text', value: text }];
94987
- const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(text)));
95562
+ // Restore legacy variables
95563
+ const restoredText = Object.entries(legacyVars).reduce((res, [id, original]) => res.replace(id, original), text);
95564
+ // Cell children might have html that needs to be parsed as markdown
95565
+ const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(restoredText)));
94988
95566
  const nodes = parsed.children.flatMap(n => n.type === 'element' && n.tagName === 'p' ? n.children : [n]);
94989
95567
  const leading = text.match(/^\s+/)?.[0];
94990
95568
  const trailing = text.match(/\s+$/)?.[0];
@@ -95737,10 +96315,82 @@ const mdxishHtmlBlocks = () => tree => {
95737
96315
  };
95738
96316
  /* harmony default export */ const mdxish_html_blocks = (mdxishHtmlBlocks);
95739
96317
 
96318
+ ;// ./processor/transform/mdxish/mdxish-inline-components.ts
96319
+
96320
+
96321
+
96322
+ // Matches any PascalCase inline component opening tag. Groups: (name, attrs).
96323
+ // Uses [A-Za-z0-9_]* to match block version in mdxish-component-blocks.ts
96324
+ const INLINE_COMPONENT_OPEN_RE = /^<([A-Z][A-Za-z0-9_]*)(\s[^>]*)?>$/;
96325
+ function toMdxJsxTextElement(name, attributes, children) {
96326
+ return {
96327
+ type: 'mdxJsxTextElement',
96328
+ name,
96329
+ attributes,
96330
+ children,
96331
+ };
96332
+ }
96333
+ /**
96334
+ * Transforms inline html component nodes (e.g. <Anchor>) into proper MDAST phrasing content.
96335
+ *
96336
+ * Inline components are excluded from mdxishComponentBlocks (which only handles block-level
96337
+ * elements), so they remain as scattered html/text/html sibling nodes inside a paragraph.
96338
+ * This plugin merges them into a single typed MDAST node.
96339
+ */
96340
+ const mdxishInlineComponents = () => tree => {
96341
+ visit(tree, 'html', (node, index, parent) => {
96342
+ if (!parent || index === undefined)
96343
+ return;
96344
+ const match = node.value?.match(INLINE_COMPONENT_OPEN_RE);
96345
+ if (!match)
96346
+ return;
96347
+ const [, name, attrStr] = match;
96348
+ if (!INLINE_COMPONENT_TAGS.has(name))
96349
+ return;
96350
+ // Parse attributes directly - preserves all attribute types (strings, booleans, objects, arrays)
96351
+ const attributes = parseAttributes(attrStr ?? '');
96352
+ // Find closing tag with whitespace-tolerant matching
96353
+ let closeIdx = index + 1;
96354
+ while (closeIdx < parent.children.length) {
96355
+ const sib = parent.children[closeIdx];
96356
+ if (sib.type === 'html' && sib.value?.trim() === `</${name}>`)
96357
+ break;
96358
+ closeIdx += 1;
96359
+ }
96360
+ if (closeIdx >= parent.children.length)
96361
+ return;
96362
+ // Extract all nodes between opening tag (index) and closing tag (closeIdx).
96363
+ // These are the inline component's children (e.g., text, emphasis, links).
96364
+ // Example: "<Anchor>click **here**</Anchor>" → children = [text, strong]
96365
+ const children = parent.children.slice(index + 1, closeIdx);
96366
+ const newNode = toMdxJsxTextElement(name, attributes, children);
96367
+ parent.children.splice(index, closeIdx - index + 1, newNode);
96368
+ });
96369
+ };
96370
+ /* harmony default export */ const mdxish_inline_components = (mdxishInlineComponents);
96371
+
95740
96372
  ;// ./processor/transform/mdxish/mdxish-jsx-to-mdast.ts
95741
96373
 
95742
96374
 
95743
96375
 
96376
+ const transformAnchor = (jsx) => {
96377
+ const attrs = getAttrs(jsx);
96378
+ const { href = '', label, target, title } = attrs;
96379
+ return {
96380
+ type: NodeTypes.anchor,
96381
+ children: jsx.children,
96382
+ data: {
96383
+ hName: 'Anchor',
96384
+ hProperties: {
96385
+ href,
96386
+ ...(label && { label }),
96387
+ ...(target && { target }),
96388
+ ...(title && { title }),
96389
+ },
96390
+ },
96391
+ position: jsx.position,
96392
+ };
96393
+ };
95744
96394
  const transformImage = (jsx) => {
95745
96395
  const attrs = getAttrs(jsx);
95746
96396
  const { align, alt = '', border, caption, className, height, lazy, src = '', title = '', width } = attrs;
@@ -95794,7 +96444,7 @@ const transformCallout = (jsx) => {
95794
96444
  };
95795
96445
  const transformEmbed = (jsx) => {
95796
96446
  const attrs = getAttrs(jsx);
95797
- const { favicon, html, iframe, image, providerName, providerUrl, title = '', url = '' } = attrs;
96447
+ const { favicon, height, html, iframe, image, providerName, providerUrl, title = '', typeOfEmbed, url = '', width } = attrs;
95798
96448
  return {
95799
96449
  type: NodeTypes.embedBlock,
95800
96450
  title,
@@ -95805,11 +96455,14 @@ const transformEmbed = (jsx) => {
95805
96455
  title,
95806
96456
  url,
95807
96457
  ...(favicon && { favicon }),
96458
+ ...(height && { height }),
95808
96459
  ...(html && { html }),
95809
96460
  ...(iframe !== undefined && { iframe }),
95810
96461
  ...(image && { image }),
95811
96462
  ...(providerName && { providerName }),
95812
96463
  ...(providerUrl && { providerUrl }),
96464
+ ...(typeOfEmbed && { typeOfEmbed }),
96465
+ ...(width && { width }),
95813
96466
  },
95814
96467
  },
95815
96468
  position: jsx.position,
@@ -95905,7 +96558,7 @@ const COMPONENT_MAP = {
95905
96558
  * This is controlled by the `newEditorTypes` flag to maintain backwards compatibility.
95906
96559
  */
95907
96560
  const mdxishJsxToMdast = () => tree => {
95908
- // Transform JSX components (Image, Callout, Embed, Recipe)
96561
+ // Block JSX components (Image, Callout, Embed, Recipe)
95909
96562
  visit(tree, 'mdxJsxFlowElement', (node, index, parent) => {
95910
96563
  if (!parent || index === undefined || !node.name)
95911
96564
  return;
@@ -95916,6 +96569,15 @@ const mdxishJsxToMdast = () => tree => {
95916
96569
  // Replace the JSX node with the MDAST node
95917
96570
  parent.children[index] = newNode;
95918
96571
  });
96572
+ // Inline JSX components (Anchor)
96573
+ visit(tree, 'mdxJsxTextElement', (node, index, parent) => {
96574
+ if (!parent || index === undefined || !node.name)
96575
+ return;
96576
+ if (node.name === 'Anchor') {
96577
+ const newNode = transformAnchor(node);
96578
+ parent.children[index] = newNode;
96579
+ }
96580
+ });
95919
96581
  // Transform magic block images (type: 'image') to image-block
95920
96582
  // Note: Standard markdown images are wrapped in paragraphs and handled by imageTransformer
95921
96583
  // Magic block images are direct children of root, so we handle them here
@@ -96277,9 +96939,6 @@ function terminateHtmlFlowBlocks(content) {
96277
96939
  return restoreCodeBlocks(result.join('\n'), protectedCode);
96278
96940
  }
96279
96941
 
96280
- // EXTERNAL MODULE: external "@readme/variable"
96281
- var variable_ = __webpack_require__(8167);
96282
- var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
96283
96942
  ;// ./processor/transform/mdxish/variables-code.ts
96284
96943
 
96285
96944
 
@@ -97506,6 +98165,10 @@ function loadComponents() {
97506
98165
 
97507
98166
 
97508
98167
 
98168
+
98169
+
98170
+
98171
+
97509
98172
 
97510
98173
 
97511
98174
 
@@ -97554,10 +98217,12 @@ function mdxishAstProcessor(mdContent, opts = {}) {
97554
98217
  text: mdxExprExt.text,
97555
98218
  };
97556
98219
  const processor = unified()
97557
- .data('micromarkExtensions', safeMode ? [magicBlock(), legacyVariable()] : [magicBlock(), mdxExprTextOnly, legacyVariable()])
98220
+ .data('micromarkExtensions', safeMode
98221
+ ? [magicBlock(), legacyVariable(), looseHtmlEntity()]
98222
+ : [magicBlock(), mdxExprTextOnly, legacyVariable(), looseHtmlEntity()])
97558
98223
  .data('fromMarkdownExtensions', safeMode
97559
- ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown()]
97560
- : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown()])
98224
+ ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()]
98225
+ : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
97561
98226
  .use(remarkParse)
97562
98227
  .use(remarkFrontmatter)
97563
98228
  .use(normalize_malformed_md_syntax)
@@ -97568,7 +98233,9 @@ function mdxishAstProcessor(mdContent, opts = {}) {
97568
98233
  .use(restore_snake_case_component_name, { mapping: snakeCaseMapping })
97569
98234
  .use(mdxish_tables)
97570
98235
  .use(mdxish_html_blocks)
97571
- .use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert JSX elements to MDAST types
98236
+ .use(newEditorTypes ? mdxish_inline_components : undefined) // Merge inline html components (e.g. <Anchor>) into MDAST nodes
98237
+ .use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert block JSX elements to MDAST types
98238
+ .use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
97572
98239
  .use(variables_text) // Parse {user.*} patterns from text nodes
97573
98240
  .use(useTailwind ? transform_tailwind : undefined, { components: tempComponentsMap })
97574
98241
  .use(remarkGfm);
@@ -97621,6 +98288,7 @@ function mdxish(mdContent, opts = {}) {
97621
98288
  .use(preserveBooleanProperties) // RehypeRaw converts boolean properties to empty strings
97622
98289
  .use(rehypeRaw, { passThrough: ['html-block'] })
97623
98290
  .use(restoreBooleanProperties)
98291
+ .use(rehypeFlattenTableCellParagraphs) // Remove <p> wrappers inside table cells to prevent margin issues
97624
98292
  .use(mdxish_mermaid) // Add mermaid-render className to pre wrappers
97625
98293
  .use(heading_slugs)
97626
98294
  .use(rehypeMdxishComponents, {