@readme/markdown 13.3.0 → 13.5.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.node.js CHANGED
@@ -48515,21 +48515,8 @@ function syntax_tokenizeIndent(effects, ok, nok) {
48515
48515
 
48516
48516
  ;// ./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js
48517
48517
  /**
48518
- * @typedef {import('micromark-util-types').Event} Event
48519
- * @typedef {import('micromark-util-types').Extension} Extension
48520
- * @typedef {import('micromark-util-types').Resolver} Resolver
48521
- * @typedef {import('micromark-util-types').State} State
48522
- * @typedef {import('micromark-util-types').Token} Token
48523
- * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext
48524
- * @typedef {import('micromark-util-types').Tokenizer} Tokenizer
48525
- *
48526
- * @typedef Options
48527
- * Configuration (optional).
48528
- * @property {boolean | null | undefined} [singleTilde=true]
48529
- * Whether to support strikethrough with a single tilde (default: `true`).
48530
- *
48531
- * Single tildes work on github.com, but are technically prohibited by the
48532
- * GFM spec.
48518
+ * @import {Options} from 'micromark-extension-gfm-strikethrough'
48519
+ * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'
48533
48520
  */
48534
48521
 
48535
48522
 
@@ -48545,14 +48532,15 @@ function syntax_tokenizeIndent(effects, ok, nok) {
48545
48532
  * enable GFM strikethrough syntax.
48546
48533
  */
48547
48534
  function gfmStrikethrough(options) {
48548
- const options_ = options || {}
48549
- let single = options_.singleTilde
48535
+ const options_ = options || {};
48536
+ let single = options_.singleTilde;
48550
48537
  const tokenizer = {
48538
+ name: 'strikethrough',
48551
48539
  tokenize: tokenizeStrikethrough,
48552
48540
  resolveAll: resolveAllStrikethrough
48553
- }
48541
+ };
48554
48542
  if (single === null || single === undefined) {
48555
- single = true
48543
+ single = true;
48556
48544
  }
48557
48545
  return {
48558
48546
  text: {
@@ -48564,7 +48552,7 @@ function gfmStrikethrough(options) {
48564
48552
  attentionMarkers: {
48565
48553
  null: [126]
48566
48554
  }
48567
- }
48555
+ };
48568
48556
 
48569
48557
  /**
48570
48558
  * Take events and resolve strikethrough.
@@ -48572,86 +48560,62 @@ function gfmStrikethrough(options) {
48572
48560
  * @type {Resolver}
48573
48561
  */
48574
48562
  function resolveAllStrikethrough(events, context) {
48575
- let index = -1
48563
+ let index = -1;
48576
48564
 
48577
48565
  // Walk through all events.
48578
48566
  while (++index < events.length) {
48579
48567
  // Find a token that can close.
48580
- if (
48581
- events[index][0] === 'enter' &&
48582
- events[index][1].type === 'strikethroughSequenceTemporary' &&
48583
- events[index][1]._close
48584
- ) {
48585
- let open = index
48568
+ if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {
48569
+ let open = index;
48586
48570
 
48587
48571
  // Now walk back to find an opener.
48588
48572
  while (open--) {
48589
48573
  // Find a token that can open the closer.
48590
- if (
48591
- events[open][0] === 'exit' &&
48592
- events[open][1].type === 'strikethroughSequenceTemporary' &&
48593
- events[open][1]._open &&
48594
- // If the sizes are the same:
48595
- events[index][1].end.offset - events[index][1].start.offset ===
48596
- events[open][1].end.offset - events[open][1].start.offset
48597
- ) {
48598
- events[index][1].type = 'strikethroughSequence'
48599
- events[open][1].type = 'strikethroughSequence'
48574
+ if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&
48575
+ // If the sizes are the same:
48576
+ events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {
48577
+ events[index][1].type = 'strikethroughSequence';
48578
+ events[open][1].type = 'strikethroughSequence';
48600
48579
 
48601
48580
  /** @type {Token} */
48602
48581
  const strikethrough = {
48603
48582
  type: 'strikethrough',
48604
48583
  start: Object.assign({}, events[open][1].start),
48605
48584
  end: Object.assign({}, events[index][1].end)
48606
- }
48585
+ };
48607
48586
 
48608
48587
  /** @type {Token} */
48609
48588
  const text = {
48610
48589
  type: 'strikethroughText',
48611
48590
  start: Object.assign({}, events[open][1].end),
48612
48591
  end: Object.assign({}, events[index][1].start)
48613
- }
48592
+ };
48614
48593
 
48615
48594
  // Opening.
48616
48595
  /** @type {Array<Event>} */
48617
- const nextEvents = [
48618
- ['enter', strikethrough, context],
48619
- ['enter', events[open][1], context],
48620
- ['exit', events[open][1], context],
48621
- ['enter', text, context]
48622
- ]
48623
- const insideSpan = context.parser.constructs.insideSpan.null
48596
+ const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];
48597
+ const insideSpan = context.parser.constructs.insideSpan.null;
48624
48598
  if (insideSpan) {
48625
48599
  // Between.
48626
- splice(
48627
- nextEvents,
48628
- nextEvents.length,
48629
- 0,
48630
- resolveAll(insideSpan, events.slice(open + 1, index), context)
48631
- )
48600
+ splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));
48632
48601
  }
48633
48602
 
48634
48603
  // Closing.
48635
- splice(nextEvents, nextEvents.length, 0, [
48636
- ['exit', text, context],
48637
- ['enter', events[index][1], context],
48638
- ['exit', events[index][1], context],
48639
- ['exit', strikethrough, context]
48640
- ])
48641
- splice(events, open - 1, index - open + 3, nextEvents)
48642
- index = open + nextEvents.length - 2
48643
- break
48604
+ splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);
48605
+ splice(events, open - 1, index - open + 3, nextEvents);
48606
+ index = open + nextEvents.length - 2;
48607
+ break;
48644
48608
  }
48645
48609
  }
48646
48610
  }
48647
48611
  }
48648
- index = -1
48612
+ index = -1;
48649
48613
  while (++index < events.length) {
48650
48614
  if (events[index][1].type === 'strikethroughSequenceTemporary') {
48651
- events[index][1].type = 'data'
48615
+ events[index][1].type = "data";
48652
48616
  }
48653
48617
  }
48654
- return events
48618
+ return events;
48655
48619
  }
48656
48620
 
48657
48621
  /**
@@ -48659,43 +48623,39 @@ function gfmStrikethrough(options) {
48659
48623
  * @type {Tokenizer}
48660
48624
  */
48661
48625
  function tokenizeStrikethrough(effects, ok, nok) {
48662
- const previous = this.previous
48663
- const events = this.events
48664
- let size = 0
48665
- return start
48626
+ const previous = this.previous;
48627
+ const events = this.events;
48628
+ let size = 0;
48629
+ return start;
48666
48630
 
48667
48631
  /** @type {State} */
48668
48632
  function start(code) {
48669
- if (
48670
- previous === 126 &&
48671
- events[events.length - 1][1].type !== 'characterEscape'
48672
- ) {
48673
- return nok(code)
48633
+ if (previous === 126 && events[events.length - 1][1].type !== "characterEscape") {
48634
+ return nok(code);
48674
48635
  }
48675
- effects.enter('strikethroughSequenceTemporary')
48676
- return more(code)
48636
+ effects.enter('strikethroughSequenceTemporary');
48637
+ return more(code);
48677
48638
  }
48678
48639
 
48679
48640
  /** @type {State} */
48680
48641
  function more(code) {
48681
- const before = classifyCharacter(previous)
48642
+ const before = classifyCharacter(previous);
48682
48643
  if (code === 126) {
48683
48644
  // If this is the third marker, exit.
48684
- if (size > 1) return nok(code)
48685
- effects.consume(code)
48686
- size++
48687
- return more
48688
- }
48689
- if (size < 2 && !single) return nok(code)
48690
- const token = effects.exit('strikethroughSequenceTemporary')
48691
- const after = classifyCharacter(code)
48692
- token._open = !after || (after === 2 && Boolean(before))
48693
- token._close = !before || (before === 2 && Boolean(after))
48694
- return ok(code)
48645
+ if (size > 1) return nok(code);
48646
+ effects.consume(code);
48647
+ size++;
48648
+ return more;
48649
+ }
48650
+ if (size < 2 && !single) return nok(code);
48651
+ const token = effects.exit('strikethroughSequenceTemporary');
48652
+ const after = classifyCharacter(code);
48653
+ token._open = !after || after === 2 && Boolean(before);
48654
+ token._close = !before || before === 2 && Boolean(after);
48655
+ return ok(code);
48695
48656
  }
48696
48657
  }
48697
48658
  }
48698
-
48699
48659
  ;// ./node_modules/micromark-extension-gfm-table/lib/edit-map.js
48700
48660
  /**
48701
48661
  * @typedef {import('micromark-util-types').Event} Event
@@ -64231,7 +64191,7 @@ var EntityDecoderState;
64231
64191
  EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
64232
64192
  EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
64233
64193
  })(EntityDecoderState || (EntityDecoderState = {}));
64234
- var DecodingMode;
64194
+ var decode_DecodingMode;
64235
64195
  (function (DecodingMode) {
64236
64196
  /** Entities in text nodes that can end with any character. */
64237
64197
  DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
@@ -64239,7 +64199,7 @@ var DecodingMode;
64239
64199
  DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
64240
64200
  /** Entities in attributes have limitations on ending characters. */
64241
64201
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
64242
- })(DecodingMode || (DecodingMode = {}));
64202
+ })(decode_DecodingMode || (decode_DecodingMode = {}));
64243
64203
  /**
64244
64204
  * Token decoder with support of writing partial entities.
64245
64205
  */
@@ -64278,7 +64238,7 @@ class EntityDecoder {
64278
64238
  /** The number of characters that were consumed in excess. */
64279
64239
  this.excess = 1;
64280
64240
  /** The mode in which the decoder is operating. */
64281
- this.decodeMode = DecodingMode.Strict;
64241
+ this.decodeMode = decode_DecodingMode.Strict;
64282
64242
  }
64283
64243
  /** Resets the instance to make it reusable. */
64284
64244
  startEntity(decodeMode) {
@@ -64427,7 +64387,7 @@ class EntityDecoder {
64427
64387
  if (lastCp === CharCodes.SEMI) {
64428
64388
  this.consumed += 1;
64429
64389
  }
64430
- else if (this.decodeMode === DecodingMode.Strict) {
64390
+ else if (this.decodeMode === decode_DecodingMode.Strict) {
64431
64391
  return 0;
64432
64392
  }
64433
64393
  this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
@@ -64459,7 +64419,7 @@ class EntityDecoder {
64459
64419
  if (this.treeIndex < 0) {
64460
64420
  return this.result === 0 ||
64461
64421
  // If we are parsing an attribute
64462
- (this.decodeMode === DecodingMode.Attribute &&
64422
+ (this.decodeMode === decode_DecodingMode.Attribute &&
64463
64423
  // We shouldn't have consumed any characters after the entity,
64464
64424
  (valueLength === 0 ||
64465
64425
  // And there should be no invalid characters.
@@ -64476,7 +64436,7 @@ class EntityDecoder {
64476
64436
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
64477
64437
  }
64478
64438
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
64479
- if (this.decodeMode !== DecodingMode.Strict) {
64439
+ if (this.decodeMode !== decode_DecodingMode.Strict) {
64480
64440
  this.result = this.treeIndex;
64481
64441
  this.consumed += this.excess;
64482
64442
  this.excess = 0;
@@ -64531,7 +64491,7 @@ class EntityDecoder {
64531
64491
  case EntityDecoderState.NamedEntity: {
64532
64492
  // Emit a named entity if we have one.
64533
64493
  return this.result !== 0 &&
64534
- (this.decodeMode !== DecodingMode.Attribute ||
64494
+ (this.decodeMode !== decode_DecodingMode.Attribute ||
64535
64495
  this.result === this.treeIndex)
64536
64496
  ? this.emitNotTerminatedNamedEntity()
64537
64497
  : 0;
@@ -64638,7 +64598,7 @@ const xmlDecoder = getDecoder(decode_data_xml);
64638
64598
  * @param mode The decoding mode.
64639
64599
  * @returns The decoded string.
64640
64600
  */
64641
- function decodeHTML(str, mode = DecodingMode.Legacy) {
64601
+ function decode_decodeHTML(str, mode = decode_DecodingMode.Legacy) {
64642
64602
  return htmlDecoder(str, mode);
64643
64603
  }
64644
64604
  /**
@@ -64648,7 +64608,7 @@ function decodeHTML(str, mode = DecodingMode.Legacy) {
64648
64608
  * @returns The decoded string.
64649
64609
  */
64650
64610
  function decodeHTMLAttribute(str) {
64651
- return htmlDecoder(str, DecodingMode.Attribute);
64611
+ return htmlDecoder(str, decode_DecodingMode.Attribute);
64652
64612
  }
64653
64613
  /**
64654
64614
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
@@ -64657,7 +64617,7 @@ function decodeHTMLAttribute(str) {
64657
64617
  * @returns The decoded string.
64658
64618
  */
64659
64619
  function decodeHTMLStrict(str) {
64660
- return htmlDecoder(str, DecodingMode.Strict);
64620
+ return htmlDecoder(str, decode_DecodingMode.Strict);
64661
64621
  }
64662
64622
  /**
64663
64623
  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
@@ -64665,8 +64625,8 @@ function decodeHTMLStrict(str) {
64665
64625
  * @param str The string to decode.
64666
64626
  * @returns The decoded string.
64667
64627
  */
64668
- function decodeXML(str) {
64669
- return xmlDecoder(str, DecodingMode.Strict);
64628
+ function decode_decodeXML(str) {
64629
+ return xmlDecoder(str, decode_DecodingMode.Strict);
64670
64630
  }
64671
64631
  //# sourceMappingURL=decode.js.map
64672
64632
  ;// ./node_modules/parse5/dist/common/html.js
@@ -72215,7 +72175,7 @@ function endTagInForeignContent(p, token) {
72215
72175
  }
72216
72176
  //# sourceMappingURL=index.js.map
72217
72177
  ;// ./node_modules/entities/lib/esm/escape.js
72218
- const xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
72178
+ const escape_xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
72219
72179
  const xmlCodeMap = new Map([
72220
72180
  [34, "&quot;"],
72221
72181
  [38, "&amp;"],
@@ -72224,7 +72184,7 @@ const xmlCodeMap = new Map([
72224
72184
  [62, "&gt;"],
72225
72185
  ]);
72226
72186
  // For compatibility with node < 4, we wrap `codePointAt`
72227
- const getCodePoint =
72187
+ const escape_getCodePoint =
72228
72188
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
72229
72189
  String.prototype.codePointAt != null
72230
72190
  ? (str, index) => str.codePointAt(index)
@@ -72242,11 +72202,11 @@ String.prototype.codePointAt != null
72242
72202
  * If a character has no equivalent entity, a
72243
72203
  * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
72244
72204
  */
72245
- function encodeXML(str) {
72205
+ function escape_encodeXML(str) {
72246
72206
  let ret = "";
72247
72207
  let lastIdx = 0;
72248
72208
  let match;
72249
- while ((match = xmlReplacer.exec(str)) !== null) {
72209
+ while ((match = escape_xmlReplacer.exec(str)) !== null) {
72250
72210
  const i = match.index;
72251
72211
  const char = str.charCodeAt(i);
72252
72212
  const next = xmlCodeMap.get(char);
@@ -72255,9 +72215,9 @@ function encodeXML(str) {
72255
72215
  lastIdx = i + 1;
72256
72216
  }
72257
72217
  else {
72258
- ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
72218
+ ret += `${str.substring(lastIdx, i)}&#x${escape_getCodePoint(str, i).toString(16)};`;
72259
72219
  // Increase by 1 if we have a surrogate pair
72260
- lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
72220
+ lastIdx = escape_xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
72261
72221
  }
72262
72222
  }
72263
72223
  return ret + str.substr(lastIdx);
@@ -72271,7 +72231,7 @@ function encodeXML(str) {
72271
72231
  *
72272
72232
  * @param data String to escape.
72273
72233
  */
72274
- const escape_escape = (/* unused pure expression or super */ null && (encodeXML));
72234
+ const escape_escape = (/* unused pure expression or super */ null && (escape_encodeXML));
72275
72235
  /**
72276
72236
  * Creates a function that escapes all characters matched by the given regular
72277
72237
  * expression using the given map of characters to escape to their entities.
@@ -72306,7 +72266,7 @@ function getEscaper(regex, map) {
72306
72266
  *
72307
72267
  * @param data String to escape.
72308
72268
  */
72309
- const escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
72269
+ const escape_escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
72310
72270
  /**
72311
72271
  * Encodes all characters that have to be escaped in HTML attributes,
72312
72272
  * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
@@ -73132,6 +73092,12 @@ const stripCommentsTransformer = () => {
73132
73092
 
73133
73093
 
73134
73094
  const STRIP_TAGS = ['script', 'style'];
73095
+ /** Valid JS identifier: starts with $, _, or a letter; followed by $, _, letters, digits, etc. */
73096
+ const JS_IDENTIFIER_RE = /^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$/u;
73097
+ /** Format a variable key as MDX syntax, using bracket notation for non-identifier keys (e.g. hyphens). */
73098
+ function toMdxVariableSyntax(key) {
73099
+ return JS_IDENTIFIER_RE.test(key) ? `{user.${key}}` : `{user["${key}"]}`;
73100
+ }
73135
73101
  /**
73136
73102
  * Extract variable key from MDX expression AST (e.g., {user.name} → 'name')
73137
73103
  * Uses ESTree AST inspection, matching the approach in processor/transform/variables.ts
@@ -73190,8 +73156,9 @@ function plain_one(node, opts) {
73190
73156
  case 'variable':
73191
73157
  case 'Variable': {
73192
73158
  const key = node.properties.name.toString();
73193
- if (opts.preserveVariableSyntax)
73194
- return `{user.${key}}`;
73159
+ if (opts.preserveVariableSyntax) {
73160
+ return node.properties.isLegacy ? `<<${key}>>` : toMdxVariableSyntax(key);
73161
+ }
73195
73162
  const val = 'variables' in opts && opts.variables[key];
73196
73163
  return val || key;
73197
73164
  }
@@ -73216,7 +73183,7 @@ function plain_one(node, opts) {
73216
73183
  const key = extractMdxVariableKey(node);
73217
73184
  if (key) {
73218
73185
  if (opts.preserveVariableSyntax)
73219
- return `{user.${key}}`;
73186
+ return toMdxVariableSyntax(key);
73220
73187
  return ('variables' in opts && opts.variables[key]) || key;
73221
73188
  }
73222
73189
  }
@@ -73556,7 +73523,7 @@ const divTransformer = () => tree => {
73556
73523
  ;// ./processor/transform/embeds.ts
73557
73524
 
73558
73525
 
73559
- const isEmbed = (node) => 'title' in node && node.title === '@embed';
73526
+ const isEmbed = (node) => Boolean(node && 'title' in node && node.title === '@embed');
73560
73527
  const embedTransformer = () => {
73561
73528
  return (tree) => {
73562
73529
  visit(tree, 'paragraph', (node, i, parent) => {
@@ -73564,7 +73531,7 @@ const embedTransformer = () => {
73564
73531
  if (!isEmbed(child))
73565
73532
  return;
73566
73533
  const { url, title } = child;
73567
- const label = child.children[0].value;
73534
+ const label = child.children[0]?.value;
73568
73535
  const newNode = {
73569
73536
  type: NodeTypes.embedBlock,
73570
73537
  label,
@@ -91041,6 +91008,55 @@ const mdxToHast = () => tree => {
91041
91008
  };
91042
91009
  /* harmony default export */ const mdx_to_hast = (mdxToHast);
91043
91010
 
91011
+ ;// ./lib/mdast-util/empty-task-list-item/index.ts
91012
+ /**
91013
+ * Normalizes list items that are written as only `[ ]` or `[x]` into GFM task
91014
+ * list items during parse, but only when at least one whitespace character
91015
+ * follows the closing bracket (`]`). This matches legacy behaviour for checkboxes
91016
+ *
91017
+ * The issue is `remark-gfm` does not actually classify these as task items when they have no content
91018
+ * after the checkbox, which leaves them as plain text (`"[ ]"`). So a custom extension is needed to
91019
+ * treat these as task items
91020
+ */
91021
+ function exitListItemWithEmptyTaskListItem(token) {
91022
+ const node = this.stack[this.stack.length - 1];
91023
+ if (node &&
91024
+ node.type === 'listItem' &&
91025
+ typeof node.checked !== 'boolean') {
91026
+ const listItem = node;
91027
+ const head = listItem.children[0];
91028
+ if (head && head.type === 'paragraph' && head.children.length === 1) {
91029
+ const text = head.children[0];
91030
+ if (text.type === 'text') {
91031
+ const hasTrailingWhitespace = typeof head.position?.end.offset === 'number' &&
91032
+ typeof text.position?.end.offset === 'number' &&
91033
+ head.position.end.offset > text.position.end.offset;
91034
+ if (!hasTrailingWhitespace) {
91035
+ this.exit(token);
91036
+ return;
91037
+ }
91038
+ const value = text.value;
91039
+ if (value === '[ ]') {
91040
+ listItem.checked = false;
91041
+ head.children = [];
91042
+ }
91043
+ else if (value === '[x]' || value === '[X]') {
91044
+ listItem.checked = true;
91045
+ head.children = [];
91046
+ }
91047
+ }
91048
+ }
91049
+ }
91050
+ this.exit(token);
91051
+ }
91052
+ function emptyTaskListItemFromMarkdown() {
91053
+ return {
91054
+ exit: {
91055
+ listItem: exitListItemWithEmptyTaskListItem,
91056
+ },
91057
+ };
91058
+ }
91059
+
91044
91060
  ;// ./lib/mdast-util/legacy-variable/index.ts
91045
91061
 
91046
91062
  const contextMap = new WeakMap();
@@ -91355,6 +91371,8 @@ function legacyVariable() {
91355
91371
 
91356
91372
 
91357
91373
 
91374
+
91375
+
91358
91376
  const pascalCaseTagPattern = /^<([A-Z][A-Za-z0-9_]*)([^>]*?)(\/?)>([\s\S]*)?$/;
91359
91377
  const tagAttributePattern = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*("[^"]*"|'[^']*'|[^\s"'>]+))?/g;
91360
91378
  /**
@@ -91373,8 +91391,9 @@ const MAX_LOOKAHEAD = 30;
91373
91391
  const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', 'Anchor']);
91374
91392
  const inlineMdProcessor = unified()
91375
91393
  .data('micromarkExtensions', [legacyVariable()])
91376
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
91377
- .use(remarkParse);
91394
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown()])
91395
+ .use(remarkParse)
91396
+ .use(remarkGfm);
91378
91397
  const isClosingTag = (value, tag) => value.trim() === `</${tag}>`;
91379
91398
  /**
91380
91399
  * Parse markdown content into mdast children nodes.
@@ -112298,6 +112317,46 @@ ${reformatHTML(html)}
112298
112317
  };
112299
112318
  /* harmony default export */ const html_block = (htmlBlock);
112300
112319
 
112320
+ ;// ./processor/compile/list-item.ts
112321
+
112322
+ // Matches '*', '-', '+', '1.', '2.', '3.', etc. followed by a newline or 1-3 spaces
112323
+ // to be replaced with the marker and a space like `- [ ]`
112324
+ const listMarkerRegex = /^(?:[*+-]|\d+\.)(?:([\r\n]| {1,3})|$)/;
112325
+ /**
112326
+ * List-item serializer intended for checklist items
112327
+ * Uses the default listItem handler for formatting, then patches the output to inject the checkbox and preserve empty items
112328
+ *
112329
+ * The current aim is to ensure checklist items that have no text after the checkbox are serialized
112330
+ * with their checkbox intact (for example, `- [ ]`) instead of dropping it
112331
+ * We can add more adjustments if needed
112332
+ */
112333
+ const compile_list_item_listItem = (node, parent, state, info) => {
112334
+ const head = node.children[0];
112335
+ const isCheckbox = typeof node.checked === 'boolean' && head && head.type === 'paragraph';
112336
+ if (!isCheckbox) {
112337
+ return handle.listItem(node, parent, state, info);
112338
+ }
112339
+ const checkbox = `[${node.checked ? 'x' : ' '}] `;
112340
+ // `tracker` keeps current column/offset for downstream line wrapping/indent
112341
+ // We move it by checkbox length so wrapped lines align after `[ ] ` / `[x] `
112342
+ const tracker = state.createTracker(info);
112343
+ tracker.move(checkbox);
112344
+ // Initialize the checkbox item with the default listItem serializer as the source of truth for spacing,
112345
+ // indentation, ordered marker formatting, and wrapping behavior
112346
+ let value = handle.listItem(node, parent, state, {
112347
+ ...info,
112348
+ ...tracker.current(),
112349
+ });
112350
+ // Patch and inject checkbox after the list marker token
112351
+ value = value.replace(listMarkerRegex, (match, separator) => {
112352
+ const marker = match.trim();
112353
+ const actualSeparator = separator || ' ';
112354
+ return `${marker}${actualSeparator}${checkbox}`;
112355
+ });
112356
+ return value;
112357
+ };
112358
+ /* harmony default export */ const list_item = (compile_list_item_listItem);
112359
+
112301
112360
  ;// ./processor/compile/plain.ts
112302
112361
  const plain_plain = (node) => node.value;
112303
112362
  /* harmony default export */ const compile_plain = (plain_plain);
@@ -112316,6 +112375,7 @@ const variable = (node) => `{user.${node.data?.hProperties?.name || ''}}`;
112316
112375
 
112317
112376
 
112318
112377
 
112378
+
112319
112379
  function compilers(mdxish = false) {
112320
112380
  const data = this.data();
112321
112381
  const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
@@ -112333,6 +112393,7 @@ function compilers(mdxish = false) {
112333
112393
  figure: compile_compatibility,
112334
112394
  html: compile_compatibility,
112335
112395
  i: compile_compatibility,
112396
+ ...(mdxish && { listItem: list_item }),
112336
112397
  plain: compile_plain,
112337
112398
  yaml: compile_compatibility,
112338
112399
  };
@@ -113864,6 +113925,76 @@ function remarkBreaks() {
113864
113925
  }
113865
113926
  }
113866
113927
 
113928
+ ;// ./processor/plugin/flatten-table-cell-paragraphs.ts
113929
+
113930
+ /** List elements that cause margin issues when adjacent to paragraphs */
113931
+ const LIST_ELEMENTS = new Set(['ul', 'ol']);
113932
+ /**
113933
+ * Check if a child is a whitespace-only text node
113934
+ */
113935
+ function isWhitespaceText(child) {
113936
+ return child.type === 'text' && !child.value.trim();
113937
+ }
113938
+ /**
113939
+ * Check if a child is an element with the given tag name
113940
+ */
113941
+ function isElementWithTag(child, tags) {
113942
+ return child.type === 'element' && tags.has(child.tagName);
113943
+ }
113944
+ /**
113945
+ * Rehype plugin that flattens paragraph elements that are adjacent to lists in table cells.
113946
+ *
113947
+ * When markdown content is parsed inside JSX table cells, text before/after lists
113948
+ * gets wrapped in `<p>` tags. This causes unwanted spacing because both `<p>` and
113949
+ * list elements have margins.
113950
+ *
113951
+ * This plugin selectively unwraps only `<p>` elements that are immediately before
113952
+ * or after a list (`<ul>` or `<ol>`), preserving paragraphs in other contexts.
113953
+ */
113954
+ const rehypeFlattenTableCellParagraphs = () => {
113955
+ return (tree) => {
113956
+ visit(tree, 'element', (node) => {
113957
+ // Only process table cells
113958
+ if (node.tagName !== 'td' && node.tagName !== 'th')
113959
+ return;
113960
+ const children = node.children;
113961
+ const newChildren = [];
113962
+ for (let i = 0; i < children.length; i += 1) {
113963
+ const child = children[i];
113964
+ // If not a paragraph, keep as-is
113965
+ if (child.type !== 'element' || child.tagName !== 'p') {
113966
+ newChildren.push(child);
113967
+ }
113968
+ else {
113969
+ // Check if this paragraph is adjacent to a list
113970
+ // Look at previous non-whitespace sibling
113971
+ let prevIndex = i - 1;
113972
+ while (prevIndex >= 0 && isWhitespaceText(children[prevIndex])) {
113973
+ prevIndex -= 1;
113974
+ }
113975
+ const prevIsNewChild = newChildren.length > 0 && newChildren[newChildren.length - 1];
113976
+ const prevIsList = (prevIndex >= 0 && isElementWithTag(children[prevIndex], LIST_ELEMENTS)) ||
113977
+ (prevIsNewChild && prevIsNewChild.type === 'element' && LIST_ELEMENTS.has(prevIsNewChild.tagName));
113978
+ // Look at next non-whitespace sibling
113979
+ let nextIndex = i + 1;
113980
+ while (nextIndex < children.length && isWhitespaceText(children[nextIndex])) {
113981
+ nextIndex += 1;
113982
+ }
113983
+ const nextIsList = nextIndex < children.length && isElementWithTag(children[nextIndex], LIST_ELEMENTS);
113984
+ // If adjacent to a list, flatten the paragraph
113985
+ if (prevIsList || nextIsList) {
113986
+ newChildren.push(...child.children);
113987
+ }
113988
+ else {
113989
+ newChildren.push(child);
113990
+ }
113991
+ }
113992
+ }
113993
+ node.children = newChildren;
113994
+ });
113995
+ };
113996
+ };
113997
+
113867
113998
  ;// ./lib/utils/mdxish/mdxish-get-component-name.ts
113868
113999
  /** Convert a string to PascalCase */
113869
114000
  function toPascalCase(str) {
@@ -114361,12 +114492,20 @@ function extractBalancedBraces(content, start) {
114361
114492
  * Handles: already-escaped braces, string literals inside expressions, nested balanced braces.
114362
114493
  */
114363
114494
  function escapeUnbalancedBraces(content) {
114495
+ // Skip HTML elements — their content should never be escaped because
114496
+ // rehypeRaw parses them into hast elements, making `\` literal text in output
114497
+ const htmlElements = [];
114498
+ const safe = content.replace(/<([a-z][a-zA-Z0-9]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g, match => {
114499
+ const idx = htmlElements.length;
114500
+ htmlElements.push(match);
114501
+ return `___HTML_ELEM_${idx}___`;
114502
+ });
114364
114503
  const opens = [];
114365
114504
  const unbalanced = new Set();
114366
114505
  let strDelim = null;
114367
114506
  let strEscaped = false;
114368
114507
  // Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
114369
- const chars = Array.from(content);
114508
+ const chars = Array.from(safe);
114370
114509
  for (let i = 0; i < chars.length; i += 1) {
114371
114510
  const ch = chars[i];
114372
114511
  // Track strings inside expressions to ignore braces within them
@@ -114407,11 +114546,15 @@ function escapeUnbalancedBraces(content) {
114407
114546
  }
114408
114547
  }
114409
114548
  opens.forEach(pos => unbalanced.add(pos));
114410
- if (unbalanced.size === 0)
114411
- return content;
114412
- return chars
114413
- .map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch))
114414
- .join('');
114549
+ // If there are no unbalanced braces, return content as-is;
114550
+ // otherwise, escape each unbalanced `{` or `}` so MDX doesn't treat them as expressions.
114551
+ let result = unbalanced.size === 0
114552
+ ? safe
114553
+ : chars.map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch)).join('');
114554
+ if (htmlElements.length > 0) {
114555
+ result = result.replace(/___HTML_ELEM_(\d+)___/g, (_m, idx) => htmlElements[parseInt(idx, 10)]);
114556
+ }
114557
+ return result;
114415
114558
  }
114416
114559
  /**
114417
114560
  * Converts JSX attribute expressions (attribute={expression}) to HTML attributes (attribute="value").
@@ -114501,15 +114644,13 @@ function preprocessJSXExpressions(content, context = {}) {
114501
114644
  let processed = protectHTMLBlockContent(content);
114502
114645
  // Step 1: Protect code blocks and inline code
114503
114646
  const { protectedCode, protectedContent } = protectCodeBlocks(processed);
114504
- // Step 2: Remove JSX comments
114505
- processed = removeJSXComments(protectedContent);
114506
- // Step 3: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
114647
+ // Step 2: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
114507
114648
  // For inline expressions, we use a library to parse the expression & evaluate it later
114508
114649
  // For attribute expressions, it was difficult to use a library to parse them, so do it manually
114509
- processed = evaluateAttributeExpressions(processed, context, protectedCode);
114510
- // Step 4: Escape unbalanced braces to prevent MDX expression parsing errors
114650
+ processed = evaluateAttributeExpressions(protectedContent, context, protectedCode);
114651
+ // Step 3: Escape unbalanced braces to prevent MDX expression parsing errors
114511
114652
  processed = escapeUnbalancedBraces(processed);
114512
- // Step 5: Restore protected code blocks
114653
+ // Step 4: Restore protected code blocks
114513
114654
  processed = restoreCodeBlocks(processed, protectedCode);
114514
114655
  return processed;
114515
114656
  }
@@ -114605,6 +114746,9 @@ const generateSlugForHeadings = () => (tree) => {
114605
114746
  };
114606
114747
  /* harmony default export */ const heading_slugs = (generateSlugForHeadings);
114607
114748
 
114749
+ // EXTERNAL MODULE: ./node_modules/@readme/variable/dist/index.js
114750
+ var variable_dist = __webpack_require__(4355);
114751
+ var variable_dist_default = /*#__PURE__*/__webpack_require__.n(variable_dist);
114608
114752
  ;// ./node_modules/rehype-parse/lib/index.js
114609
114753
  /**
114610
114754
  * @import {Root} from 'hast'
@@ -114670,6 +114814,311 @@ function rehypeParse(options) {
114670
114814
  }
114671
114815
  }
114672
114816
 
114817
+ ;// ./node_modules/entities/lib/esm/generated/encode-html.js
114818
+ // Generated using scripts/write-encode-map.ts
114819
+ function restoreDiff(arr) {
114820
+ for (let i = 1; i < arr.length; i++) {
114821
+ arr[i][0] += arr[i - 1][0] + 1;
114822
+ }
114823
+ return arr;
114824
+ }
114825
+ // prettier-ignore
114826
+ /* 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;"]])));
114827
+ //# sourceMappingURL=encode-html.js.map
114828
+ ;// ./node_modules/entities/lib/esm/encode.js
114829
+
114830
+
114831
+ const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
114832
+ /**
114833
+ * Encodes all characters in the input using HTML entities. This includes
114834
+ * characters that are valid ASCII characters in HTML documents, such as `#`.
114835
+ *
114836
+ * To get a more compact output, consider using the `encodeNonAsciiHTML`
114837
+ * function, which will only encode characters that are not valid in HTML
114838
+ * documents, as well as non-ASCII characters.
114839
+ *
114840
+ * If a character has no equivalent entity, a numeric hexadecimal reference
114841
+ * (eg. `&#xfc;`) will be used.
114842
+ */
114843
+ function encode_encodeHTML(data) {
114844
+ return encodeHTMLTrieRe(htmlReplacer, data);
114845
+ }
114846
+ /**
114847
+ * Encodes all non-ASCII characters, as well as characters not valid in HTML
114848
+ * documents using HTML entities. This function will not encode characters that
114849
+ * are valid in HTML documents, such as `#`.
114850
+ *
114851
+ * If a character has no equivalent entity, a numeric hexadecimal reference
114852
+ * (eg. `&#xfc;`) will be used.
114853
+ */
114854
+ function encode_encodeNonAsciiHTML(data) {
114855
+ return encodeHTMLTrieRe(xmlReplacer, data);
114856
+ }
114857
+ function encodeHTMLTrieRe(regExp, str) {
114858
+ let ret = "";
114859
+ let lastIdx = 0;
114860
+ let match;
114861
+ while ((match = regExp.exec(str)) !== null) {
114862
+ const i = match.index;
114863
+ ret += str.substring(lastIdx, i);
114864
+ const char = str.charCodeAt(i);
114865
+ let next = htmlTrie.get(char);
114866
+ if (typeof next === "object") {
114867
+ // We are in a branch. Try to match the next char.
114868
+ if (i + 1 < str.length) {
114869
+ const nextChar = str.charCodeAt(i + 1);
114870
+ const value = typeof next.n === "number"
114871
+ ? next.n === nextChar
114872
+ ? next.o
114873
+ : undefined
114874
+ : next.n.get(nextChar);
114875
+ if (value !== undefined) {
114876
+ ret += value;
114877
+ lastIdx = regExp.lastIndex += 1;
114878
+ continue;
114879
+ }
114880
+ }
114881
+ next = next.v;
114882
+ }
114883
+ // We might have a tree node without a value; skip and use a numeric entity.
114884
+ if (next !== undefined) {
114885
+ ret += next;
114886
+ lastIdx = i + 1;
114887
+ }
114888
+ else {
114889
+ const cp = getCodePoint(str, i);
114890
+ ret += `&#x${cp.toString(16)};`;
114891
+ // Increase by 1 if we have a surrogate pair
114892
+ lastIdx = regExp.lastIndex += Number(cp !== char);
114893
+ }
114894
+ }
114895
+ return ret + str.substr(lastIdx);
114896
+ }
114897
+ //# sourceMappingURL=encode.js.map
114898
+ ;// ./node_modules/entities/lib/esm/index.js
114899
+
114900
+
114901
+
114902
+ /** The level of entities to support. */
114903
+ var EntityLevel;
114904
+ (function (EntityLevel) {
114905
+ /** Support only XML entities. */
114906
+ EntityLevel[EntityLevel["XML"] = 0] = "XML";
114907
+ /** Support HTML entities, which are a superset of XML entities. */
114908
+ EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
114909
+ })(EntityLevel || (EntityLevel = {}));
114910
+ var EncodingMode;
114911
+ (function (EncodingMode) {
114912
+ /**
114913
+ * The output is UTF-8 encoded. Only characters that need escaping within
114914
+ * XML will be escaped.
114915
+ */
114916
+ EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
114917
+ /**
114918
+ * The output consists only of ASCII characters. Characters that need
114919
+ * escaping within HTML, and characters that aren't ASCII characters will
114920
+ * be escaped.
114921
+ */
114922
+ EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
114923
+ /**
114924
+ * Encode all characters that have an equivalent entity, as well as all
114925
+ * characters that are not ASCII characters.
114926
+ */
114927
+ EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
114928
+ /**
114929
+ * Encode all characters that have to be escaped in HTML attributes,
114930
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
114931
+ */
114932
+ EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
114933
+ /**
114934
+ * Encode all characters that have to be escaped in HTML text,
114935
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
114936
+ */
114937
+ EncodingMode[EncodingMode["Text"] = 4] = "Text";
114938
+ })(EncodingMode || (EncodingMode = {}));
114939
+ /**
114940
+ * Decodes a string with entities.
114941
+ *
114942
+ * @param data String to decode.
114943
+ * @param options Decoding options.
114944
+ */
114945
+ function esm_decode(data, options = EntityLevel.XML) {
114946
+ const level = typeof options === "number" ? options : options.level;
114947
+ if (level === EntityLevel.HTML) {
114948
+ const mode = typeof options === "object" ? options.mode : undefined;
114949
+ return decodeHTML(data, mode);
114950
+ }
114951
+ return decodeXML(data);
114952
+ }
114953
+ /**
114954
+ * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
114955
+ *
114956
+ * @param data String to decode.
114957
+ * @param options Decoding options.
114958
+ * @deprecated Use `decode` with the `mode` set to `Strict`.
114959
+ */
114960
+ function decodeStrict(data, options = EntityLevel.XML) {
114961
+ var _a;
114962
+ const opts = typeof options === "number" ? { level: options } : options;
114963
+ (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);
114964
+ return esm_decode(data, opts);
114965
+ }
114966
+ /**
114967
+ * Encodes a string with entities.
114968
+ *
114969
+ * @param data String to encode.
114970
+ * @param options Encoding options.
114971
+ */
114972
+ function esm_encode(data, options = EntityLevel.XML) {
114973
+ const opts = typeof options === "number" ? { level: options } : options;
114974
+ // Mode `UTF8` just escapes XML entities
114975
+ if (opts.mode === EncodingMode.UTF8)
114976
+ return escapeUTF8(data);
114977
+ if (opts.mode === EncodingMode.Attribute)
114978
+ return escapeAttribute(data);
114979
+ if (opts.mode === EncodingMode.Text)
114980
+ return escapeText(data);
114981
+ if (opts.level === EntityLevel.HTML) {
114982
+ if (opts.mode === EncodingMode.ASCII) {
114983
+ return encodeNonAsciiHTML(data);
114984
+ }
114985
+ return encodeHTML(data);
114986
+ }
114987
+ // ASCII and Extensive are equivalent
114988
+ return encodeXML(data);
114989
+ }
114990
+
114991
+
114992
+
114993
+ //# sourceMappingURL=index.js.map
114994
+ ;// ./lib/micromark/loose-html-entities/syntax.ts
114995
+
114996
+
114997
+
114998
+ const MAX_ENTITY_LENGTH = 32;
114999
+ const looseHtmlEntityConstruct = {
115000
+ name: 'looseHtmlEntity',
115001
+ tokenize: tokenizeLooseHtmlEntity,
115002
+ };
115003
+ function resolveEntity(name) {
115004
+ const input = `&${name};`;
115005
+ const decoded = decodeHTMLStrict(input);
115006
+ return decoded !== input ? decoded : undefined;
115007
+ }
115008
+ function tokenizeLooseHtmlEntity(effects, ok, nok) {
115009
+ let length = 0;
115010
+ const start = (code) => {
115011
+ if (code !== codes.ampersand)
115012
+ return nok(code);
115013
+ effects.enter('looseHtmlEntity');
115014
+ effects.consume(code);
115015
+ return afterAmpersand;
115016
+ };
115017
+ const afterAmpersand = (code) => {
115018
+ if (code === codes.numberSign) {
115019
+ effects.consume(code);
115020
+ return afterHash;
115021
+ }
115022
+ return accumulateNamed(code);
115023
+ };
115024
+ const afterHash = (code) => {
115025
+ if (code === codes.lowercaseX || code === codes.uppercaseX) {
115026
+ effects.consume(code);
115027
+ return accumulateHex;
115028
+ }
115029
+ return accumulateDecimal(code);
115030
+ };
115031
+ const accumulateNamed = (code) => {
115032
+ if (asciiAlphanumeric(code) && length < MAX_ENTITY_LENGTH) {
115033
+ effects.consume(code);
115034
+ length += 1;
115035
+ return accumulateNamed;
115036
+ }
115037
+ if (length === 0)
115038
+ return nok(code);
115039
+ if (code === codes.semicolon)
115040
+ return nok(code);
115041
+ effects.exit('looseHtmlEntity');
115042
+ return ok(code);
115043
+ };
115044
+ const accumulateDecimal = (code) => {
115045
+ if (asciiDigit(code) && length < MAX_ENTITY_LENGTH) {
115046
+ effects.consume(code);
115047
+ length += 1;
115048
+ return accumulateDecimal;
115049
+ }
115050
+ if (length === 0)
115051
+ return nok(code);
115052
+ if (code === codes.semicolon)
115053
+ return nok(code);
115054
+ effects.exit('looseHtmlEntity');
115055
+ return ok(code);
115056
+ };
115057
+ const accumulateHex = (code) => {
115058
+ if (asciiHexDigit(code) && length < MAX_ENTITY_LENGTH) {
115059
+ effects.consume(code);
115060
+ length += 1;
115061
+ return accumulateHex;
115062
+ }
115063
+ if (length === 0)
115064
+ return nok(code);
115065
+ if (code === codes.semicolon)
115066
+ return nok(code);
115067
+ effects.exit('looseHtmlEntity');
115068
+ return ok(code);
115069
+ };
115070
+ return start;
115071
+ }
115072
+ function exitLooseHtmlEntity(token) {
115073
+ const raw = this.sliceSerialize(token);
115074
+ const entityChars = raw.slice(1);
115075
+ if (entityChars.startsWith('#')) {
115076
+ const decoded = resolveEntity(entityChars);
115077
+ if (decoded) {
115078
+ this.enter({ type: 'text', value: decoded }, token);
115079
+ this.exit(token);
115080
+ return;
115081
+ }
115082
+ }
115083
+ else {
115084
+ for (let len = entityChars.length; len >= 2; len -= 1) {
115085
+ const candidate = entityChars.slice(0, len);
115086
+ const decoded = resolveEntity(candidate);
115087
+ if (decoded) {
115088
+ const remainder = entityChars.slice(len);
115089
+ this.enter({ type: 'text', value: decoded + remainder }, token);
115090
+ this.exit(token);
115091
+ return;
115092
+ }
115093
+ }
115094
+ }
115095
+ this.enter({ type: 'text', value: raw }, token);
115096
+ this.exit(token);
115097
+ }
115098
+ function looseHtmlEntity() {
115099
+ return {
115100
+ text: { [codes.ampersand]: looseHtmlEntityConstruct },
115101
+ };
115102
+ }
115103
+ function looseHtmlEntityFromMarkdown() {
115104
+ return {
115105
+ exit: {
115106
+ looseHtmlEntity: exitLooseHtmlEntity,
115107
+ },
115108
+ };
115109
+ }
115110
+
115111
+ ;// ./lib/micromark/loose-html-entities/index.ts
115112
+ /**
115113
+ * Micromark extension for HTML entities without semicolons.
115114
+ *
115115
+ * Handles named entities (e.g. `&nbsp`, `&amp`, `&copy`), decimal numeric
115116
+ * references (e.g. `&#160`, `&#169`), and hex numeric references (e.g. `&#xa0`,
115117
+ * `&#xA0`). Entities that already include the semicolon are left for the
115118
+ * standard parser to handle.
115119
+ */
115120
+
115121
+
114673
115122
  ;// ./processor/transform/mdxish/normalize-malformed-md-syntax.ts
114674
115123
 
114675
115124
  // Marker patterns for multi-node emphasis detection
@@ -115086,6 +115535,11 @@ const EMPTY_CODE_PLACEHOLDER = {
115086
115535
 
115087
115536
 
115088
115537
 
115538
+
115539
+
115540
+
115541
+
115542
+
115089
115543
 
115090
115544
 
115091
115545
  /**
@@ -115127,18 +115581,23 @@ const preprocessBody = (text) => {
115127
115581
  };
115128
115582
  /** Markdown parser */
115129
115583
  const contentParser = unified()
115130
- .data('micromarkExtensions', [legacyVariable()])
115131
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
115584
+ .data('micromarkExtensions', [legacyVariable(), looseHtmlEntity()])
115585
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
115132
115586
  .use(remarkParse)
115133
115587
  .use(remarkBreaks)
115134
115588
  .use(remarkGfm)
115135
115589
  .use(normalize_malformed_md_syntax);
115136
- /** Markdown to HTML processor (mdast → hast → HTML string) */
115590
+ /**
115591
+ * Markdown to HTML processor (mdast → hast → HTML string).
115592
+ *
115593
+ * Uses only strikethrough from GFM instead of the full remarkGfm bundle
115594
+ * since we've had a case where it was causing a stack overflow when parsing HTML blocks containing URLs
115595
+ * such as `<ul><li>https://a</li>\n</ul>` due to subtokenizing recursion for URLs
115596
+ */
115137
115597
  const markdownToHtml = unified()
115138
- .data('micromarkExtensions', [legacyVariable()])
115139
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
115598
+ .data('micromarkExtensions', [gfmStrikethrough(), legacyVariable(), looseHtmlEntity()])
115599
+ .data('fromMarkdownExtensions', [gfmStrikethroughFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
115140
115600
  .use(remarkParse)
115141
- .use(remarkGfm)
115142
115601
  .use(normalize_malformed_md_syntax)
115143
115602
  .use(remarkRehype)
115144
115603
  .use(rehypeStringify);
@@ -115150,7 +115609,12 @@ const htmlStringifier = unified().use(rehypeStringify);
115150
115609
  const processBackslashEscapes = (text) => text.replace(/\\<([^>]*)>/g, '&lt;$1>').replace(/\\([<>|])/g, (_, c) => (c === '<' ? '&lt;' : c === '>' ? '>' : c));
115151
115610
  /** Block-level HTML tags that trigger CommonMark type 6 HTML blocks (condition 6). */
115152
115611
  const BLOCK_LEVEL_TAGS = new Set(htmlBlockNames);
115153
- const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) => {
115612
+ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest, offset, input) => {
115613
+ // Don't escape legacy variable syntax like <<var>> since we want to parse it
115614
+ // with the tokenizer and not want the <var> to get parsed as an HTML tag
115615
+ const isLegacyVariable = offset > 0 && input[offset - 1] === '<' && offset < input.length - 1 && input[offset + match.length] === '>';
115616
+ if (isLegacyVariable)
115617
+ return match;
115154
115618
  const tagName = tag.replace(/^\//, '');
115155
115619
  if (STANDARD_HTML_TAGS.has(tagName.toLowerCase()))
115156
115620
  return match;
@@ -115170,9 +115634,20 @@ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) =
115170
115634
  * (it treats unknown tags as void elements, stripping their children).
115171
115635
  */
115172
115636
  const processMarkdownInHtmlString = (html) => {
115637
+ let htmlContent = html;
115638
+ // Replace all occurrences of legacy variable syntax like <<name>> with placeholders so the inner
115639
+ // <name> doesn't get parsed as an HTML tag and the tokenizer can parse it
115640
+ const legacyVars = {};
115641
+ let legacyCounter = 0;
115642
+ htmlContent = htmlContent.replace(new RegExp(variable_dist.VARIABLE_REGEXP, 'g'), match => {
115643
+ const id = `RDMX_LEGACY_VAR_${(legacyCounter += 1)}_TOKEN`;
115644
+ legacyVars[id] = match;
115645
+ return id;
115646
+ });
115173
115647
  const placeholders = [];
115174
115648
  let counter = 0;
115175
- const safened = escapeInvalidTags(html).replace(HTML_TAG_RE, match => {
115649
+ // Escape invalid html tags so they don't get parsed as HTML tags
115650
+ const safened = escapeInvalidTags(htmlContent).replace(HTML_TAG_RE, match => {
115176
115651
  if (!/^<\/?[A-Z]/.test(match))
115177
115652
  return match;
115178
115653
  const id = `<!--PC${(counter += 1)}-->`;
@@ -115183,7 +115658,10 @@ const processMarkdownInHtmlString = (html) => {
115183
115658
  const textToHast = (text) => {
115184
115659
  if (!text.trim())
115185
115660
  return [{ type: 'text', value: text }];
115186
- const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(text)));
115661
+ // Restore legacy variables
115662
+ const restoredText = Object.entries(legacyVars).reduce((res, [id, original]) => res.replace(id, original), text);
115663
+ // Cell children might have html that needs to be parsed as markdown
115664
+ const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(restoredText)));
115187
115665
  const nodes = parsed.children.flatMap(n => n.type === 'element' && n.tagName === 'p' ? n.children : [n]);
115188
115666
  const leading = text.match(/^\s+/)?.[0];
115189
115667
  const trailing = text.match(/\s+$/)?.[0];
@@ -116476,9 +116954,6 @@ function terminateHtmlFlowBlocks(content) {
116476
116954
  return restoreCodeBlocks(result.join('\n'), protectedCode);
116477
116955
  }
116478
116956
 
116479
- // EXTERNAL MODULE: ./node_modules/@readme/variable/dist/index.js
116480
- var variable_dist = __webpack_require__(4355);
116481
- var variable_dist_default = /*#__PURE__*/__webpack_require__.n(variable_dist);
116482
116957
  ;// ./processor/transform/mdxish/variables-code.ts
116483
116958
 
116484
116959
 
@@ -116555,13 +117030,38 @@ const variablesCodeResolver = ({ variables } = {}) => tree => {
116555
117030
  * Captures the field name in group 1 (dot notation) or group 2 (bracket notation)
116556
117031
  */
116557
117032
  const USER_VAR_REGEX = /\{user\.(\w+)\}|\{user\[['"](\w+)['"]\]\}/g;
117033
+ function makeVariableNode(varName, rawValue) {
117034
+ return {
117035
+ type: NodeTypes.variable,
117036
+ data: {
117037
+ hName: 'Variable',
117038
+ hProperties: { name: varName },
117039
+ },
117040
+ value: rawValue,
117041
+ };
117042
+ }
116558
117043
  /**
116559
- * A remark plugin that parses {user.<field>} patterns from text nodes
116560
- * without requiring remarkMdx. Creates Variable nodes for runtime resolution.
117044
+ * A remark plugin that parses {user.<field>} patterns from text nodes and
117045
+ * mdxTextExpression nodes, creating Variable nodes for runtime resolution.
117046
+ *
117047
+ * Handles both:
117048
+ * - `text` nodes: when safeMode is true or after expression evaluation
117049
+ * - `mdxTextExpression` nodes: when mdxExpression has parsed {user.*} before evaluation
116561
117050
  *
116562
117051
  * Supports any user field: name, email, email_verified, exp, iat, etc.
116563
117052
  */
116564
117053
  const variablesTextTransformer = () => tree => {
117054
+ // Handle mdxTextExpression nodes (e.g. {user.name} parsed by mdxExpression)
117055
+ visit(tree, 'mdxTextExpression', (node, index, parent) => {
117056
+ if (index === undefined || !parent)
117057
+ return;
117058
+ const wrapped = `{${(node.value ?? '').trim()}}`; // Wrap the expression value in {} to match the USER_VAR_REGEX pattern
117059
+ const matches = [...wrapped.matchAll(USER_VAR_REGEX)];
117060
+ if (matches.length !== 1)
117061
+ return;
117062
+ const varName = matches[0][1] || matches[0][2];
117063
+ parent.children.splice(index, 1, makeVariableNode(varName, wrapped));
117064
+ });
116565
117065
  visit(tree, 'text', (node, index, parent) => {
116566
117066
  if (index === undefined || !parent)
116567
117067
  return;
@@ -116586,15 +117086,7 @@ const variablesTextTransformer = () => tree => {
116586
117086
  }
116587
117087
  // Extract variable name from either capture group (dot or bracket notation)
116588
117088
  const varName = match[1] || match[2];
116589
- // Create Variable node
116590
- parts.push({
116591
- type: NodeTypes.variable,
116592
- data: {
116593
- hName: 'Variable',
116594
- hProperties: { name: varName },
116595
- },
116596
- value: match[0],
116597
- });
117089
+ parts.push(makeVariableNode(varName, match[0]));
116598
117090
  lastIndex = matchIndex + match[0].length;
116599
117091
  });
116600
117092
  // Add remaining text after last match
@@ -117687,6 +118179,10 @@ function loadComponents() {
117687
118179
 
117688
118180
 
117689
118181
 
118182
+
118183
+
118184
+
118185
+
117690
118186
 
117691
118187
 
117692
118188
 
@@ -117735,10 +118231,12 @@ function mdxishAstProcessor(mdContent, opts = {}) {
117735
118231
  text: mdxExprExt.text,
117736
118232
  };
117737
118233
  const processor = unified()
117738
- .data('micromarkExtensions', safeMode ? [magicBlock(), legacyVariable()] : [magicBlock(), mdxExprTextOnly, legacyVariable()])
118234
+ .data('micromarkExtensions', safeMode
118235
+ ? [magicBlock(), legacyVariable(), looseHtmlEntity()]
118236
+ : [magicBlock(), mdxExprTextOnly, legacyVariable(), looseHtmlEntity()])
117739
118237
  .data('fromMarkdownExtensions', safeMode
117740
- ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown()]
117741
- : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown()])
118238
+ ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()]
118239
+ : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
117742
118240
  .use(remarkParse)
117743
118241
  .use(remarkFrontmatter)
117744
118242
  .use(normalize_malformed_md_syntax)
@@ -117750,8 +118248,7 @@ function mdxishAstProcessor(mdContent, opts = {}) {
117750
118248
  .use(mdxish_tables)
117751
118249
  .use(mdxish_html_blocks)
117752
118250
  .use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert JSX elements to MDAST types
117753
- .use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
117754
- .use(variables_text) // Parse {user.*} patterns from text
118251
+ .use(variables_text) // Parse {user.*} patterns from text nodes
117755
118252
  .use(useTailwind ? transform_tailwind : undefined, { components: tempComponentsMap })
117756
118253
  .use(remarkGfm);
117757
118254
  return {
@@ -117785,19 +118282,25 @@ function mdxishMdastToMd(mdast) {
117785
118282
  * @see {@link https://github.com/readmeio/rmdx/blob/main/docs/mdxish-flow.md}
117786
118283
  */
117787
118284
  function mdxish(mdContent, opts = {}) {
117788
- const { components: userComponents = {}, variables } = opts;
118285
+ const { components: userComponents = {}, jsxContext = {}, safeMode = false, variables } = opts;
117789
118286
  const components = {
117790
118287
  ...loadComponents(),
117791
118288
  ...userComponents,
117792
118289
  };
117793
- const { processor, parserReadyContent } = mdxishAstProcessor(mdContent, opts);
118290
+ // Remove JSX comments before processing (protect code blocks first)
118291
+ const { protectedCode, protectedContent } = protectCodeBlocks(mdContent);
118292
+ const withoutComments = removeJSXComments(protectedContent);
118293
+ const contentWithoutComments = restoreCodeBlocks(withoutComments, protectedCode);
118294
+ const { processor, parserReadyContent } = mdxishAstProcessor(contentWithoutComments, opts);
117794
118295
  processor
118296
+ .use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
117795
118297
  .use(remarkBreaks)
117796
118298
  .use(variables_code, { variables }) // Resolve <<...>> and {user.*} inside code and inline code nodes
117797
118299
  .use(remarkRehype, { allowDangerousHtml: true, handlers: mdxComponentHandlers })
117798
118300
  .use(preserveBooleanProperties) // RehypeRaw converts boolean properties to empty strings
117799
118301
  .use(rehypeRaw, { passThrough: ['html-block'] })
117800
118302
  .use(restoreBooleanProperties)
118303
+ .use(rehypeFlattenTableCellParagraphs) // Remove <p> wrappers inside table cells to prevent margin issues
117801
118304
  .use(mdxish_mermaid) // Add mermaid-render className to pre wrappers
117802
118305
  .use(heading_slugs)
117803
118306
  .use(rehypeMdxishComponents, {
@@ -118350,6 +118853,7 @@ function restoreMagicBlocks(replaced, blocks) {
118350
118853
 
118351
118854
 
118352
118855
 
118856
+
118353
118857
  /**
118354
118858
  * Removes Markdown and MDX comments.
118355
118859
  */
@@ -118370,6 +118874,7 @@ async function stripComments(doc, { mdx, mdxish } = {}) {
118370
118874
  .use(normalize_malformed_md_syntax)
118371
118875
  .use(mdx ? remarkMdx : undefined)
118372
118876
  .use(stripCommentsTransformer)
118877
+ .use(remarkGfm)
118373
118878
  .use(remarkStringify, mdx
118374
118879
  ? {}
118375
118880
  : {