@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.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
@@ -44027,7 +43987,7 @@ var EntityDecoderState;
44027
43987
  EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex";
44028
43988
  EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity";
44029
43989
  })(EntityDecoderState || (EntityDecoderState = {}));
44030
- var DecodingMode;
43990
+ var decode_DecodingMode;
44031
43991
  (function (DecodingMode) {
44032
43992
  /** Entities in text nodes that can end with any character. */
44033
43993
  DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy";
@@ -44035,7 +43995,7 @@ var DecodingMode;
44035
43995
  DecodingMode[DecodingMode["Strict"] = 1] = "Strict";
44036
43996
  /** Entities in attributes have limitations on ending characters. */
44037
43997
  DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute";
44038
- })(DecodingMode || (DecodingMode = {}));
43998
+ })(decode_DecodingMode || (decode_DecodingMode = {}));
44039
43999
  /**
44040
44000
  * Token decoder with support of writing partial entities.
44041
44001
  */
@@ -44074,7 +44034,7 @@ class EntityDecoder {
44074
44034
  /** The number of characters that were consumed in excess. */
44075
44035
  this.excess = 1;
44076
44036
  /** The mode in which the decoder is operating. */
44077
- this.decodeMode = DecodingMode.Strict;
44037
+ this.decodeMode = decode_DecodingMode.Strict;
44078
44038
  }
44079
44039
  /** Resets the instance to make it reusable. */
44080
44040
  startEntity(decodeMode) {
@@ -44223,7 +44183,7 @@ class EntityDecoder {
44223
44183
  if (lastCp === CharCodes.SEMI) {
44224
44184
  this.consumed += 1;
44225
44185
  }
44226
- else if (this.decodeMode === DecodingMode.Strict) {
44186
+ else if (this.decodeMode === decode_DecodingMode.Strict) {
44227
44187
  return 0;
44228
44188
  }
44229
44189
  this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
@@ -44255,7 +44215,7 @@ class EntityDecoder {
44255
44215
  if (this.treeIndex < 0) {
44256
44216
  return this.result === 0 ||
44257
44217
  // If we are parsing an attribute
44258
- (this.decodeMode === DecodingMode.Attribute &&
44218
+ (this.decodeMode === decode_DecodingMode.Attribute &&
44259
44219
  // We shouldn't have consumed any characters after the entity,
44260
44220
  (valueLength === 0 ||
44261
44221
  // And there should be no invalid characters.
@@ -44272,7 +44232,7 @@ class EntityDecoder {
44272
44232
  return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
44273
44233
  }
44274
44234
  // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.
44275
- if (this.decodeMode !== DecodingMode.Strict) {
44235
+ if (this.decodeMode !== decode_DecodingMode.Strict) {
44276
44236
  this.result = this.treeIndex;
44277
44237
  this.consumed += this.excess;
44278
44238
  this.excess = 0;
@@ -44327,7 +44287,7 @@ class EntityDecoder {
44327
44287
  case EntityDecoderState.NamedEntity: {
44328
44288
  // Emit a named entity if we have one.
44329
44289
  return this.result !== 0 &&
44330
- (this.decodeMode !== DecodingMode.Attribute ||
44290
+ (this.decodeMode !== decode_DecodingMode.Attribute ||
44331
44291
  this.result === this.treeIndex)
44332
44292
  ? this.emitNotTerminatedNamedEntity()
44333
44293
  : 0;
@@ -44434,7 +44394,7 @@ const xmlDecoder = getDecoder(decode_data_xml);
44434
44394
  * @param mode The decoding mode.
44435
44395
  * @returns The decoded string.
44436
44396
  */
44437
- function decodeHTML(str, mode = DecodingMode.Legacy) {
44397
+ function decode_decodeHTML(str, mode = decode_DecodingMode.Legacy) {
44438
44398
  return htmlDecoder(str, mode);
44439
44399
  }
44440
44400
  /**
@@ -44444,7 +44404,7 @@ function decodeHTML(str, mode = DecodingMode.Legacy) {
44444
44404
  * @returns The decoded string.
44445
44405
  */
44446
44406
  function decodeHTMLAttribute(str) {
44447
- return htmlDecoder(str, DecodingMode.Attribute);
44407
+ return htmlDecoder(str, decode_DecodingMode.Attribute);
44448
44408
  }
44449
44409
  /**
44450
44410
  * Decodes an HTML string, requiring all entities to be terminated by a semicolon.
@@ -44453,7 +44413,7 @@ function decodeHTMLAttribute(str) {
44453
44413
  * @returns The decoded string.
44454
44414
  */
44455
44415
  function decodeHTMLStrict(str) {
44456
- return htmlDecoder(str, DecodingMode.Strict);
44416
+ return htmlDecoder(str, decode_DecodingMode.Strict);
44457
44417
  }
44458
44418
  /**
44459
44419
  * Decodes an XML string, requiring all entities to be terminated by a semicolon.
@@ -44461,8 +44421,8 @@ function decodeHTMLStrict(str) {
44461
44421
  * @param str The string to decode.
44462
44422
  * @returns The decoded string.
44463
44423
  */
44464
- function decodeXML(str) {
44465
- return xmlDecoder(str, DecodingMode.Strict);
44424
+ function decode_decodeXML(str) {
44425
+ return xmlDecoder(str, decode_DecodingMode.Strict);
44466
44426
  }
44467
44427
  //# sourceMappingURL=decode.js.map
44468
44428
  ;// ./node_modules/parse5/dist/common/html.js
@@ -52011,7 +51971,7 @@ function endTagInForeignContent(p, token) {
52011
51971
  }
52012
51972
  //# sourceMappingURL=index.js.map
52013
51973
  ;// ./node_modules/entities/lib/esm/escape.js
52014
- const xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
51974
+ const escape_xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
52015
51975
  const xmlCodeMap = new Map([
52016
51976
  [34, "&quot;"],
52017
51977
  [38, "&amp;"],
@@ -52020,7 +51980,7 @@ const xmlCodeMap = new Map([
52020
51980
  [62, "&gt;"],
52021
51981
  ]);
52022
51982
  // For compatibility with node < 4, we wrap `codePointAt`
52023
- const getCodePoint =
51983
+ const escape_getCodePoint =
52024
51984
  // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
52025
51985
  String.prototype.codePointAt != null
52026
51986
  ? (str, index) => str.codePointAt(index)
@@ -52038,11 +51998,11 @@ String.prototype.codePointAt != null
52038
51998
  * If a character has no equivalent entity, a
52039
51999
  * numeric hexadecimal reference (eg. `&#xfc;`) will be used.
52040
52000
  */
52041
- function encodeXML(str) {
52001
+ function escape_encodeXML(str) {
52042
52002
  let ret = "";
52043
52003
  let lastIdx = 0;
52044
52004
  let match;
52045
- while ((match = xmlReplacer.exec(str)) !== null) {
52005
+ while ((match = escape_xmlReplacer.exec(str)) !== null) {
52046
52006
  const i = match.index;
52047
52007
  const char = str.charCodeAt(i);
52048
52008
  const next = xmlCodeMap.get(char);
@@ -52051,9 +52011,9 @@ function encodeXML(str) {
52051
52011
  lastIdx = i + 1;
52052
52012
  }
52053
52013
  else {
52054
- ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
52014
+ ret += `${str.substring(lastIdx, i)}&#x${escape_getCodePoint(str, i).toString(16)};`;
52055
52015
  // Increase by 1 if we have a surrogate pair
52056
- lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
52016
+ lastIdx = escape_xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);
52057
52017
  }
52058
52018
  }
52059
52019
  return ret + str.substr(lastIdx);
@@ -52067,7 +52027,7 @@ function encodeXML(str) {
52067
52027
  *
52068
52028
  * @param data String to escape.
52069
52029
  */
52070
- const escape_escape = (/* unused pure expression or super */ null && (encodeXML));
52030
+ const escape_escape = (/* unused pure expression or super */ null && (escape_encodeXML));
52071
52031
  /**
52072
52032
  * Creates a function that escapes all characters matched by the given regular
52073
52033
  * expression using the given map of characters to escape to their entities.
@@ -52102,7 +52062,7 @@ function getEscaper(regex, map) {
52102
52062
  *
52103
52063
  * @param data String to escape.
52104
52064
  */
52105
- const escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
52065
+ const escape_escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
52106
52066
  /**
52107
52067
  * Encodes all characters that have to be escaped in HTML attributes,
52108
52068
  * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
@@ -52928,6 +52888,12 @@ const stripCommentsTransformer = () => {
52928
52888
 
52929
52889
 
52930
52890
  const STRIP_TAGS = ['script', 'style'];
52891
+ /** Valid JS identifier: starts with $, _, or a letter; followed by $, _, letters, digits, etc. */
52892
+ const JS_IDENTIFIER_RE = /^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*$/u;
52893
+ /** Format a variable key as MDX syntax, using bracket notation for non-identifier keys (e.g. hyphens). */
52894
+ function toMdxVariableSyntax(key) {
52895
+ return JS_IDENTIFIER_RE.test(key) ? `{user.${key}}` : `{user["${key}"]}`;
52896
+ }
52931
52897
  /**
52932
52898
  * Extract variable key from MDX expression AST (e.g., {user.name} → 'name')
52933
52899
  * Uses ESTree AST inspection, matching the approach in processor/transform/variables.ts
@@ -52986,8 +52952,9 @@ function plain_one(node, opts) {
52986
52952
  case 'variable':
52987
52953
  case 'Variable': {
52988
52954
  const key = node.properties.name.toString();
52989
- if (opts.preserveVariableSyntax)
52990
- return `{user.${key}}`;
52955
+ if (opts.preserveVariableSyntax) {
52956
+ return node.properties.isLegacy ? `<<${key}>>` : toMdxVariableSyntax(key);
52957
+ }
52991
52958
  const val = 'variables' in opts && opts.variables[key];
52992
52959
  return val || key;
52993
52960
  }
@@ -53012,7 +52979,7 @@ function plain_one(node, opts) {
53012
52979
  const key = extractMdxVariableKey(node);
53013
52980
  if (key) {
53014
52981
  if (opts.preserveVariableSyntax)
53015
- return `{user.${key}}`;
52982
+ return toMdxVariableSyntax(key);
53016
52983
  return ('variables' in opts && opts.variables[key]) || key;
53017
52984
  }
53018
52985
  }
@@ -53352,7 +53319,7 @@ const divTransformer = () => tree => {
53352
53319
  ;// ./processor/transform/embeds.ts
53353
53320
 
53354
53321
 
53355
- const isEmbed = (node) => 'title' in node && node.title === '@embed';
53322
+ const isEmbed = (node) => Boolean(node && 'title' in node && node.title === '@embed');
53356
53323
  const embedTransformer = () => {
53357
53324
  return (tree) => {
53358
53325
  visit(tree, 'paragraph', (node, i, parent) => {
@@ -53360,7 +53327,7 @@ const embedTransformer = () => {
53360
53327
  if (!isEmbed(child))
53361
53328
  return;
53362
53329
  const { url, title } = child;
53363
- const label = child.children[0].value;
53330
+ const label = child.children[0]?.value;
53364
53331
  const newNode = {
53365
53332
  type: NodeTypes.embedBlock,
53366
53333
  label,
@@ -70837,6 +70804,55 @@ const mdxToHast = () => tree => {
70837
70804
  };
70838
70805
  /* harmony default export */ const mdx_to_hast = (mdxToHast);
70839
70806
 
70807
+ ;// ./lib/mdast-util/empty-task-list-item/index.ts
70808
+ /**
70809
+ * Normalizes list items that are written as only `[ ]` or `[x]` into GFM task
70810
+ * list items during parse, but only when at least one whitespace character
70811
+ * follows the closing bracket (`]`). This matches legacy behaviour for checkboxes
70812
+ *
70813
+ * The issue is `remark-gfm` does not actually classify these as task items when they have no content
70814
+ * after the checkbox, which leaves them as plain text (`"[ ]"`). So a custom extension is needed to
70815
+ * treat these as task items
70816
+ */
70817
+ function exitListItemWithEmptyTaskListItem(token) {
70818
+ const node = this.stack[this.stack.length - 1];
70819
+ if (node &&
70820
+ node.type === 'listItem' &&
70821
+ typeof node.checked !== 'boolean') {
70822
+ const listItem = node;
70823
+ const head = listItem.children[0];
70824
+ if (head && head.type === 'paragraph' && head.children.length === 1) {
70825
+ const text = head.children[0];
70826
+ if (text.type === 'text') {
70827
+ const hasTrailingWhitespace = typeof head.position?.end.offset === 'number' &&
70828
+ typeof text.position?.end.offset === 'number' &&
70829
+ head.position.end.offset > text.position.end.offset;
70830
+ if (!hasTrailingWhitespace) {
70831
+ this.exit(token);
70832
+ return;
70833
+ }
70834
+ const value = text.value;
70835
+ if (value === '[ ]') {
70836
+ listItem.checked = false;
70837
+ head.children = [];
70838
+ }
70839
+ else if (value === '[x]' || value === '[X]') {
70840
+ listItem.checked = true;
70841
+ head.children = [];
70842
+ }
70843
+ }
70844
+ }
70845
+ }
70846
+ this.exit(token);
70847
+ }
70848
+ function emptyTaskListItemFromMarkdown() {
70849
+ return {
70850
+ exit: {
70851
+ listItem: exitListItemWithEmptyTaskListItem,
70852
+ },
70853
+ };
70854
+ }
70855
+
70840
70856
  ;// ./lib/mdast-util/legacy-variable/index.ts
70841
70857
 
70842
70858
  const contextMap = new WeakMap();
@@ -71151,6 +71167,8 @@ function legacyVariable() {
71151
71167
 
71152
71168
 
71153
71169
 
71170
+
71171
+
71154
71172
  const pascalCaseTagPattern = /^<([A-Z][A-Za-z0-9_]*)([^>]*?)(\/?)>([\s\S]*)?$/;
71155
71173
  const tagAttributePattern = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*("[^"]*"|'[^']*'|[^\s"'>]+))?/g;
71156
71174
  /**
@@ -71169,8 +71187,9 @@ const MAX_LOOKAHEAD = 30;
71169
71187
  const EXCLUDED_TAGS = new Set(['HTMLBlock', 'Table', 'Glossary', 'Anchor']);
71170
71188
  const inlineMdProcessor = unified()
71171
71189
  .data('micromarkExtensions', [legacyVariable()])
71172
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
71173
- .use(remarkParse);
71190
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown()])
71191
+ .use(remarkParse)
71192
+ .use(remarkGfm);
71174
71193
  const isClosingTag = (value, tag) => value.trim() === `</${tag}>`;
71175
71194
  /**
71176
71195
  * Parse markdown content into mdast children nodes.
@@ -92094,6 +92113,46 @@ ${reformatHTML(html)}
92094
92113
  };
92095
92114
  /* harmony default export */ const html_block = (htmlBlock);
92096
92115
 
92116
+ ;// ./processor/compile/list-item.ts
92117
+
92118
+ // Matches '*', '-', '+', '1.', '2.', '3.', etc. followed by a newline or 1-3 spaces
92119
+ // to be replaced with the marker and a space like `- [ ]`
92120
+ const listMarkerRegex = /^(?:[*+-]|\d+\.)(?:([\r\n]| {1,3})|$)/;
92121
+ /**
92122
+ * List-item serializer intended for checklist items
92123
+ * Uses the default listItem handler for formatting, then patches the output to inject the checkbox and preserve empty items
92124
+ *
92125
+ * The current aim is to ensure checklist items that have no text after the checkbox are serialized
92126
+ * with their checkbox intact (for example, `- [ ]`) instead of dropping it
92127
+ * We can add more adjustments if needed
92128
+ */
92129
+ const compile_list_item_listItem = (node, parent, state, info) => {
92130
+ const head = node.children[0];
92131
+ const isCheckbox = typeof node.checked === 'boolean' && head && head.type === 'paragraph';
92132
+ if (!isCheckbox) {
92133
+ return handle.listItem(node, parent, state, info);
92134
+ }
92135
+ const checkbox = `[${node.checked ? 'x' : ' '}] `;
92136
+ // `tracker` keeps current column/offset for downstream line wrapping/indent
92137
+ // We move it by checkbox length so wrapped lines align after `[ ] ` / `[x] `
92138
+ const tracker = state.createTracker(info);
92139
+ tracker.move(checkbox);
92140
+ // Initialize the checkbox item with the default listItem serializer as the source of truth for spacing,
92141
+ // indentation, ordered marker formatting, and wrapping behavior
92142
+ let value = handle.listItem(node, parent, state, {
92143
+ ...info,
92144
+ ...tracker.current(),
92145
+ });
92146
+ // Patch and inject checkbox after the list marker token
92147
+ value = value.replace(listMarkerRegex, (match, separator) => {
92148
+ const marker = match.trim();
92149
+ const actualSeparator = separator || ' ';
92150
+ return `${marker}${actualSeparator}${checkbox}`;
92151
+ });
92152
+ return value;
92153
+ };
92154
+ /* harmony default export */ const list_item = (compile_list_item_listItem);
92155
+
92097
92156
  ;// ./processor/compile/plain.ts
92098
92157
  const plain_plain = (node) => node.value;
92099
92158
  /* harmony default export */ const compile_plain = (plain_plain);
@@ -92112,6 +92171,7 @@ const variable = (node) => `{user.${node.data?.hProperties?.name || ''}}`;
92112
92171
 
92113
92172
 
92114
92173
 
92174
+
92115
92175
  function compilers(mdxish = false) {
92116
92176
  const data = this.data();
92117
92177
  const toMarkdownExtensions = data.toMarkdownExtensions || (data.toMarkdownExtensions = []);
@@ -92129,6 +92189,7 @@ function compilers(mdxish = false) {
92129
92189
  figure: compile_compatibility,
92130
92190
  html: compile_compatibility,
92131
92191
  i: compile_compatibility,
92192
+ ...(mdxish && { listItem: list_item }),
92132
92193
  plain: compile_plain,
92133
92194
  yaml: compile_compatibility,
92134
92195
  };
@@ -93660,6 +93721,76 @@ function remarkBreaks() {
93660
93721
  }
93661
93722
  }
93662
93723
 
93724
+ ;// ./processor/plugin/flatten-table-cell-paragraphs.ts
93725
+
93726
+ /** List elements that cause margin issues when adjacent to paragraphs */
93727
+ const LIST_ELEMENTS = new Set(['ul', 'ol']);
93728
+ /**
93729
+ * Check if a child is a whitespace-only text node
93730
+ */
93731
+ function isWhitespaceText(child) {
93732
+ return child.type === 'text' && !child.value.trim();
93733
+ }
93734
+ /**
93735
+ * Check if a child is an element with the given tag name
93736
+ */
93737
+ function isElementWithTag(child, tags) {
93738
+ return child.type === 'element' && tags.has(child.tagName);
93739
+ }
93740
+ /**
93741
+ * Rehype plugin that flattens paragraph elements that are adjacent to lists in table cells.
93742
+ *
93743
+ * When markdown content is parsed inside JSX table cells, text before/after lists
93744
+ * gets wrapped in `<p>` tags. This causes unwanted spacing because both `<p>` and
93745
+ * list elements have margins.
93746
+ *
93747
+ * This plugin selectively unwraps only `<p>` elements that are immediately before
93748
+ * or after a list (`<ul>` or `<ol>`), preserving paragraphs in other contexts.
93749
+ */
93750
+ const rehypeFlattenTableCellParagraphs = () => {
93751
+ return (tree) => {
93752
+ visit(tree, 'element', (node) => {
93753
+ // Only process table cells
93754
+ if (node.tagName !== 'td' && node.tagName !== 'th')
93755
+ return;
93756
+ const children = node.children;
93757
+ const newChildren = [];
93758
+ for (let i = 0; i < children.length; i += 1) {
93759
+ const child = children[i];
93760
+ // If not a paragraph, keep as-is
93761
+ if (child.type !== 'element' || child.tagName !== 'p') {
93762
+ newChildren.push(child);
93763
+ }
93764
+ else {
93765
+ // Check if this paragraph is adjacent to a list
93766
+ // Look at previous non-whitespace sibling
93767
+ let prevIndex = i - 1;
93768
+ while (prevIndex >= 0 && isWhitespaceText(children[prevIndex])) {
93769
+ prevIndex -= 1;
93770
+ }
93771
+ const prevIsNewChild = newChildren.length > 0 && newChildren[newChildren.length - 1];
93772
+ const prevIsList = (prevIndex >= 0 && isElementWithTag(children[prevIndex], LIST_ELEMENTS)) ||
93773
+ (prevIsNewChild && prevIsNewChild.type === 'element' && LIST_ELEMENTS.has(prevIsNewChild.tagName));
93774
+ // Look at next non-whitespace sibling
93775
+ let nextIndex = i + 1;
93776
+ while (nextIndex < children.length && isWhitespaceText(children[nextIndex])) {
93777
+ nextIndex += 1;
93778
+ }
93779
+ const nextIsList = nextIndex < children.length && isElementWithTag(children[nextIndex], LIST_ELEMENTS);
93780
+ // If adjacent to a list, flatten the paragraph
93781
+ if (prevIsList || nextIsList) {
93782
+ newChildren.push(...child.children);
93783
+ }
93784
+ else {
93785
+ newChildren.push(child);
93786
+ }
93787
+ }
93788
+ }
93789
+ node.children = newChildren;
93790
+ });
93791
+ };
93792
+ };
93793
+
93663
93794
  ;// ./lib/utils/mdxish/mdxish-get-component-name.ts
93664
93795
  /** Convert a string to PascalCase */
93665
93796
  function toPascalCase(str) {
@@ -94157,12 +94288,20 @@ function extractBalancedBraces(content, start) {
94157
94288
  * Handles: already-escaped braces, string literals inside expressions, nested balanced braces.
94158
94289
  */
94159
94290
  function escapeUnbalancedBraces(content) {
94291
+ // Skip HTML elements — their content should never be escaped because
94292
+ // rehypeRaw parses them into hast elements, making `\` literal text in output
94293
+ const htmlElements = [];
94294
+ const safe = content.replace(/<([a-z][a-zA-Z0-9]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g, match => {
94295
+ const idx = htmlElements.length;
94296
+ htmlElements.push(match);
94297
+ return `___HTML_ELEM_${idx}___`;
94298
+ });
94160
94299
  const opens = [];
94161
94300
  const unbalanced = new Set();
94162
94301
  let strDelim = null;
94163
94302
  let strEscaped = false;
94164
94303
  // Convert to array of Unicode code points to handle emojis and multi-byte characters correctly
94165
- const chars = Array.from(content);
94304
+ const chars = Array.from(safe);
94166
94305
  for (let i = 0; i < chars.length; i += 1) {
94167
94306
  const ch = chars[i];
94168
94307
  // Track strings inside expressions to ignore braces within them
@@ -94203,11 +94342,15 @@ function escapeUnbalancedBraces(content) {
94203
94342
  }
94204
94343
  }
94205
94344
  opens.forEach(pos => unbalanced.add(pos));
94206
- if (unbalanced.size === 0)
94207
- return content;
94208
- return chars
94209
- .map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch))
94210
- .join('');
94345
+ // If there are no unbalanced braces, return content as-is;
94346
+ // otherwise, escape each unbalanced `{` or `}` so MDX doesn't treat them as expressions.
94347
+ let result = unbalanced.size === 0
94348
+ ? safe
94349
+ : chars.map((ch, i) => (unbalanced.has(i) ? `\\${ch}` : ch)).join('');
94350
+ if (htmlElements.length > 0) {
94351
+ result = result.replace(/___HTML_ELEM_(\d+)___/g, (_m, idx) => htmlElements[parseInt(idx, 10)]);
94352
+ }
94353
+ return result;
94211
94354
  }
94212
94355
  /**
94213
94356
  * Converts JSX attribute expressions (attribute={expression}) to HTML attributes (attribute="value").
@@ -94297,15 +94440,13 @@ function preprocessJSXExpressions(content, context = {}) {
94297
94440
  let processed = protectHTMLBlockContent(content);
94298
94441
  // Step 1: Protect code blocks and inline code
94299
94442
  const { protectedCode, protectedContent } = protectCodeBlocks(processed);
94300
- // Step 2: Remove JSX comments
94301
- processed = removeJSXComments(protectedContent);
94302
- // Step 3: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
94443
+ // Step 2: Evaluate attribute expressions (JSX attribute syntax: href={baseUrl})
94303
94444
  // For inline expressions, we use a library to parse the expression & evaluate it later
94304
94445
  // For attribute expressions, it was difficult to use a library to parse them, so do it manually
94305
- processed = evaluateAttributeExpressions(processed, context, protectedCode);
94306
- // Step 4: Escape unbalanced braces to prevent MDX expression parsing errors
94446
+ processed = evaluateAttributeExpressions(protectedContent, context, protectedCode);
94447
+ // Step 3: Escape unbalanced braces to prevent MDX expression parsing errors
94307
94448
  processed = escapeUnbalancedBraces(processed);
94308
- // Step 5: Restore protected code blocks
94449
+ // Step 4: Restore protected code blocks
94309
94450
  processed = restoreCodeBlocks(processed, protectedCode);
94310
94451
  return processed;
94311
94452
  }
@@ -94401,6 +94542,9 @@ const generateSlugForHeadings = () => (tree) => {
94401
94542
  };
94402
94543
  /* harmony default export */ const heading_slugs = (generateSlugForHeadings);
94403
94544
 
94545
+ // EXTERNAL MODULE: external "@readme/variable"
94546
+ var variable_ = __webpack_require__(8167);
94547
+ var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
94404
94548
  ;// ./node_modules/rehype-parse/lib/index.js
94405
94549
  /**
94406
94550
  * @import {Root} from 'hast'
@@ -94466,6 +94610,311 @@ function rehypeParse(options) {
94466
94610
  }
94467
94611
  }
94468
94612
 
94613
+ ;// ./node_modules/entities/lib/esm/generated/encode-html.js
94614
+ // Generated using scripts/write-encode-map.ts
94615
+ function restoreDiff(arr) {
94616
+ for (let i = 1; i < arr.length; i++) {
94617
+ arr[i][0] += arr[i - 1][0] + 1;
94618
+ }
94619
+ return arr;
94620
+ }
94621
+ // prettier-ignore
94622
+ /* 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;"]])));
94623
+ //# sourceMappingURL=encode-html.js.map
94624
+ ;// ./node_modules/entities/lib/esm/encode.js
94625
+
94626
+
94627
+ const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g;
94628
+ /**
94629
+ * Encodes all characters in the input using HTML entities. This includes
94630
+ * characters that are valid ASCII characters in HTML documents, such as `#`.
94631
+ *
94632
+ * To get a more compact output, consider using the `encodeNonAsciiHTML`
94633
+ * function, which will only encode characters that are not valid in HTML
94634
+ * documents, as well as non-ASCII characters.
94635
+ *
94636
+ * If a character has no equivalent entity, a numeric hexadecimal reference
94637
+ * (eg. `&#xfc;`) will be used.
94638
+ */
94639
+ function encode_encodeHTML(data) {
94640
+ return encodeHTMLTrieRe(htmlReplacer, data);
94641
+ }
94642
+ /**
94643
+ * Encodes all non-ASCII characters, as well as characters not valid in HTML
94644
+ * documents using HTML entities. This function will not encode characters that
94645
+ * are valid in HTML documents, such as `#`.
94646
+ *
94647
+ * If a character has no equivalent entity, a numeric hexadecimal reference
94648
+ * (eg. `&#xfc;`) will be used.
94649
+ */
94650
+ function encode_encodeNonAsciiHTML(data) {
94651
+ return encodeHTMLTrieRe(xmlReplacer, data);
94652
+ }
94653
+ function encodeHTMLTrieRe(regExp, str) {
94654
+ let ret = "";
94655
+ let lastIdx = 0;
94656
+ let match;
94657
+ while ((match = regExp.exec(str)) !== null) {
94658
+ const i = match.index;
94659
+ ret += str.substring(lastIdx, i);
94660
+ const char = str.charCodeAt(i);
94661
+ let next = htmlTrie.get(char);
94662
+ if (typeof next === "object") {
94663
+ // We are in a branch. Try to match the next char.
94664
+ if (i + 1 < str.length) {
94665
+ const nextChar = str.charCodeAt(i + 1);
94666
+ const value = typeof next.n === "number"
94667
+ ? next.n === nextChar
94668
+ ? next.o
94669
+ : undefined
94670
+ : next.n.get(nextChar);
94671
+ if (value !== undefined) {
94672
+ ret += value;
94673
+ lastIdx = regExp.lastIndex += 1;
94674
+ continue;
94675
+ }
94676
+ }
94677
+ next = next.v;
94678
+ }
94679
+ // We might have a tree node without a value; skip and use a numeric entity.
94680
+ if (next !== undefined) {
94681
+ ret += next;
94682
+ lastIdx = i + 1;
94683
+ }
94684
+ else {
94685
+ const cp = getCodePoint(str, i);
94686
+ ret += `&#x${cp.toString(16)};`;
94687
+ // Increase by 1 if we have a surrogate pair
94688
+ lastIdx = regExp.lastIndex += Number(cp !== char);
94689
+ }
94690
+ }
94691
+ return ret + str.substr(lastIdx);
94692
+ }
94693
+ //# sourceMappingURL=encode.js.map
94694
+ ;// ./node_modules/entities/lib/esm/index.js
94695
+
94696
+
94697
+
94698
+ /** The level of entities to support. */
94699
+ var EntityLevel;
94700
+ (function (EntityLevel) {
94701
+ /** Support only XML entities. */
94702
+ EntityLevel[EntityLevel["XML"] = 0] = "XML";
94703
+ /** Support HTML entities, which are a superset of XML entities. */
94704
+ EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
94705
+ })(EntityLevel || (EntityLevel = {}));
94706
+ var EncodingMode;
94707
+ (function (EncodingMode) {
94708
+ /**
94709
+ * The output is UTF-8 encoded. Only characters that need escaping within
94710
+ * XML will be escaped.
94711
+ */
94712
+ EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
94713
+ /**
94714
+ * The output consists only of ASCII characters. Characters that need
94715
+ * escaping within HTML, and characters that aren't ASCII characters will
94716
+ * be escaped.
94717
+ */
94718
+ EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
94719
+ /**
94720
+ * Encode all characters that have an equivalent entity, as well as all
94721
+ * characters that are not ASCII characters.
94722
+ */
94723
+ EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
94724
+ /**
94725
+ * Encode all characters that have to be escaped in HTML attributes,
94726
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
94727
+ */
94728
+ EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
94729
+ /**
94730
+ * Encode all characters that have to be escaped in HTML text,
94731
+ * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
94732
+ */
94733
+ EncodingMode[EncodingMode["Text"] = 4] = "Text";
94734
+ })(EncodingMode || (EncodingMode = {}));
94735
+ /**
94736
+ * Decodes a string with entities.
94737
+ *
94738
+ * @param data String to decode.
94739
+ * @param options Decoding options.
94740
+ */
94741
+ function esm_decode(data, options = EntityLevel.XML) {
94742
+ const level = typeof options === "number" ? options : options.level;
94743
+ if (level === EntityLevel.HTML) {
94744
+ const mode = typeof options === "object" ? options.mode : undefined;
94745
+ return decodeHTML(data, mode);
94746
+ }
94747
+ return decodeXML(data);
94748
+ }
94749
+ /**
94750
+ * Decodes a string with entities. Does not allow missing trailing semicolons for entities.
94751
+ *
94752
+ * @param data String to decode.
94753
+ * @param options Decoding options.
94754
+ * @deprecated Use `decode` with the `mode` set to `Strict`.
94755
+ */
94756
+ function decodeStrict(data, options = EntityLevel.XML) {
94757
+ var _a;
94758
+ const opts = typeof options === "number" ? { level: options } : options;
94759
+ (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict);
94760
+ return esm_decode(data, opts);
94761
+ }
94762
+ /**
94763
+ * Encodes a string with entities.
94764
+ *
94765
+ * @param data String to encode.
94766
+ * @param options Encoding options.
94767
+ */
94768
+ function esm_encode(data, options = EntityLevel.XML) {
94769
+ const opts = typeof options === "number" ? { level: options } : options;
94770
+ // Mode `UTF8` just escapes XML entities
94771
+ if (opts.mode === EncodingMode.UTF8)
94772
+ return escapeUTF8(data);
94773
+ if (opts.mode === EncodingMode.Attribute)
94774
+ return escapeAttribute(data);
94775
+ if (opts.mode === EncodingMode.Text)
94776
+ return escapeText(data);
94777
+ if (opts.level === EntityLevel.HTML) {
94778
+ if (opts.mode === EncodingMode.ASCII) {
94779
+ return encodeNonAsciiHTML(data);
94780
+ }
94781
+ return encodeHTML(data);
94782
+ }
94783
+ // ASCII and Extensive are equivalent
94784
+ return encodeXML(data);
94785
+ }
94786
+
94787
+
94788
+
94789
+ //# sourceMappingURL=index.js.map
94790
+ ;// ./lib/micromark/loose-html-entities/syntax.ts
94791
+
94792
+
94793
+
94794
+ const MAX_ENTITY_LENGTH = 32;
94795
+ const looseHtmlEntityConstruct = {
94796
+ name: 'looseHtmlEntity',
94797
+ tokenize: tokenizeLooseHtmlEntity,
94798
+ };
94799
+ function resolveEntity(name) {
94800
+ const input = `&${name};`;
94801
+ const decoded = decodeHTMLStrict(input);
94802
+ return decoded !== input ? decoded : undefined;
94803
+ }
94804
+ function tokenizeLooseHtmlEntity(effects, ok, nok) {
94805
+ let length = 0;
94806
+ const start = (code) => {
94807
+ if (code !== codes.ampersand)
94808
+ return nok(code);
94809
+ effects.enter('looseHtmlEntity');
94810
+ effects.consume(code);
94811
+ return afterAmpersand;
94812
+ };
94813
+ const afterAmpersand = (code) => {
94814
+ if (code === codes.numberSign) {
94815
+ effects.consume(code);
94816
+ return afterHash;
94817
+ }
94818
+ return accumulateNamed(code);
94819
+ };
94820
+ const afterHash = (code) => {
94821
+ if (code === codes.lowercaseX || code === codes.uppercaseX) {
94822
+ effects.consume(code);
94823
+ return accumulateHex;
94824
+ }
94825
+ return accumulateDecimal(code);
94826
+ };
94827
+ const accumulateNamed = (code) => {
94828
+ if (asciiAlphanumeric(code) && length < MAX_ENTITY_LENGTH) {
94829
+ effects.consume(code);
94830
+ length += 1;
94831
+ return accumulateNamed;
94832
+ }
94833
+ if (length === 0)
94834
+ return nok(code);
94835
+ if (code === codes.semicolon)
94836
+ return nok(code);
94837
+ effects.exit('looseHtmlEntity');
94838
+ return ok(code);
94839
+ };
94840
+ const accumulateDecimal = (code) => {
94841
+ if (asciiDigit(code) && length < MAX_ENTITY_LENGTH) {
94842
+ effects.consume(code);
94843
+ length += 1;
94844
+ return accumulateDecimal;
94845
+ }
94846
+ if (length === 0)
94847
+ return nok(code);
94848
+ if (code === codes.semicolon)
94849
+ return nok(code);
94850
+ effects.exit('looseHtmlEntity');
94851
+ return ok(code);
94852
+ };
94853
+ const accumulateHex = (code) => {
94854
+ if (asciiHexDigit(code) && length < MAX_ENTITY_LENGTH) {
94855
+ effects.consume(code);
94856
+ length += 1;
94857
+ return accumulateHex;
94858
+ }
94859
+ if (length === 0)
94860
+ return nok(code);
94861
+ if (code === codes.semicolon)
94862
+ return nok(code);
94863
+ effects.exit('looseHtmlEntity');
94864
+ return ok(code);
94865
+ };
94866
+ return start;
94867
+ }
94868
+ function exitLooseHtmlEntity(token) {
94869
+ const raw = this.sliceSerialize(token);
94870
+ const entityChars = raw.slice(1);
94871
+ if (entityChars.startsWith('#')) {
94872
+ const decoded = resolveEntity(entityChars);
94873
+ if (decoded) {
94874
+ this.enter({ type: 'text', value: decoded }, token);
94875
+ this.exit(token);
94876
+ return;
94877
+ }
94878
+ }
94879
+ else {
94880
+ for (let len = entityChars.length; len >= 2; len -= 1) {
94881
+ const candidate = entityChars.slice(0, len);
94882
+ const decoded = resolveEntity(candidate);
94883
+ if (decoded) {
94884
+ const remainder = entityChars.slice(len);
94885
+ this.enter({ type: 'text', value: decoded + remainder }, token);
94886
+ this.exit(token);
94887
+ return;
94888
+ }
94889
+ }
94890
+ }
94891
+ this.enter({ type: 'text', value: raw }, token);
94892
+ this.exit(token);
94893
+ }
94894
+ function looseHtmlEntity() {
94895
+ return {
94896
+ text: { [codes.ampersand]: looseHtmlEntityConstruct },
94897
+ };
94898
+ }
94899
+ function looseHtmlEntityFromMarkdown() {
94900
+ return {
94901
+ exit: {
94902
+ looseHtmlEntity: exitLooseHtmlEntity,
94903
+ },
94904
+ };
94905
+ }
94906
+
94907
+ ;// ./lib/micromark/loose-html-entities/index.ts
94908
+ /**
94909
+ * Micromark extension for HTML entities without semicolons.
94910
+ *
94911
+ * Handles named entities (e.g. `&nbsp`, `&amp`, `&copy`), decimal numeric
94912
+ * references (e.g. `&#160`, `&#169`), and hex numeric references (e.g. `&#xa0`,
94913
+ * `&#xA0`). Entities that already include the semicolon are left for the
94914
+ * standard parser to handle.
94915
+ */
94916
+
94917
+
94469
94918
  ;// ./processor/transform/mdxish/normalize-malformed-md-syntax.ts
94470
94919
 
94471
94920
  // Marker patterns for multi-node emphasis detection
@@ -94882,6 +95331,11 @@ const EMPTY_CODE_PLACEHOLDER = {
94882
95331
 
94883
95332
 
94884
95333
 
95334
+
95335
+
95336
+
95337
+
95338
+
94885
95339
 
94886
95340
 
94887
95341
  /**
@@ -94923,18 +95377,23 @@ const preprocessBody = (text) => {
94923
95377
  };
94924
95378
  /** Markdown parser */
94925
95379
  const contentParser = unified()
94926
- .data('micromarkExtensions', [legacyVariable()])
94927
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
95380
+ .data('micromarkExtensions', [legacyVariable(), looseHtmlEntity()])
95381
+ .data('fromMarkdownExtensions', [legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
94928
95382
  .use(remarkParse)
94929
95383
  .use(remarkBreaks)
94930
95384
  .use(remarkGfm)
94931
95385
  .use(normalize_malformed_md_syntax);
94932
- /** Markdown to HTML processor (mdast → hast → HTML string) */
95386
+ /**
95387
+ * Markdown to HTML processor (mdast → hast → HTML string).
95388
+ *
95389
+ * Uses only strikethrough from GFM instead of the full remarkGfm bundle
95390
+ * since we've had a case where it was causing a stack overflow when parsing HTML blocks containing URLs
95391
+ * such as `<ul><li>https://a</li>\n</ul>` due to subtokenizing recursion for URLs
95392
+ */
94933
95393
  const markdownToHtml = unified()
94934
- .data('micromarkExtensions', [legacyVariable()])
94935
- .data('fromMarkdownExtensions', [legacyVariableFromMarkdown()])
95394
+ .data('micromarkExtensions', [gfmStrikethrough(), legacyVariable(), looseHtmlEntity()])
95395
+ .data('fromMarkdownExtensions', [gfmStrikethroughFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
94936
95396
  .use(remarkParse)
94937
- .use(remarkGfm)
94938
95397
  .use(normalize_malformed_md_syntax)
94939
95398
  .use(remarkRehype)
94940
95399
  .use(rehypeStringify);
@@ -94946,7 +95405,12 @@ const htmlStringifier = unified().use(rehypeStringify);
94946
95405
  const processBackslashEscapes = (text) => text.replace(/\\<([^>]*)>/g, '&lt;$1>').replace(/\\([<>|])/g, (_, c) => (c === '<' ? '&lt;' : c === '>' ? '>' : c));
94947
95406
  /** Block-level HTML tags that trigger CommonMark type 6 HTML blocks (condition 6). */
94948
95407
  const BLOCK_LEVEL_TAGS = new Set(htmlBlockNames);
94949
- const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) => {
95408
+ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest, offset, input) => {
95409
+ // Don't escape legacy variable syntax like <<var>> since we want to parse it
95410
+ // with the tokenizer and not want the <var> to get parsed as an HTML tag
95411
+ const isLegacyVariable = offset > 0 && input[offset - 1] === '<' && offset < input.length - 1 && input[offset + match.length] === '>';
95412
+ if (isLegacyVariable)
95413
+ return match;
94950
95414
  const tagName = tag.replace(/^\//, '');
94951
95415
  if (STANDARD_HTML_TAGS.has(tagName.toLowerCase()))
94952
95416
  return match;
@@ -94966,9 +95430,20 @@ const escapeInvalidTags = (str) => str.replace(HTML_TAG_RE, (match, tag, rest) =
94966
95430
  * (it treats unknown tags as void elements, stripping their children).
94967
95431
  */
94968
95432
  const processMarkdownInHtmlString = (html) => {
95433
+ let htmlContent = html;
95434
+ // Replace all occurrences of legacy variable syntax like <<name>> with placeholders so the inner
95435
+ // <name> doesn't get parsed as an HTML tag and the tokenizer can parse it
95436
+ const legacyVars = {};
95437
+ let legacyCounter = 0;
95438
+ htmlContent = htmlContent.replace(new RegExp(variable_.VARIABLE_REGEXP, 'g'), match => {
95439
+ const id = `RDMX_LEGACY_VAR_${(legacyCounter += 1)}_TOKEN`;
95440
+ legacyVars[id] = match;
95441
+ return id;
95442
+ });
94969
95443
  const placeholders = [];
94970
95444
  let counter = 0;
94971
- const safened = escapeInvalidTags(html).replace(HTML_TAG_RE, match => {
95445
+ // Escape invalid html tags so they don't get parsed as HTML tags
95446
+ const safened = escapeInvalidTags(htmlContent).replace(HTML_TAG_RE, match => {
94972
95447
  if (!/^<\/?[A-Z]/.test(match))
94973
95448
  return match;
94974
95449
  const id = `<!--PC${(counter += 1)}-->`;
@@ -94979,7 +95454,10 @@ const processMarkdownInHtmlString = (html) => {
94979
95454
  const textToHast = (text) => {
94980
95455
  if (!text.trim())
94981
95456
  return [{ type: 'text', value: text }];
94982
- const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(text)));
95457
+ // Restore legacy variables
95458
+ const restoredText = Object.entries(legacyVars).reduce((res, [id, original]) => res.replace(id, original), text);
95459
+ // Cell children might have html that needs to be parsed as markdown
95460
+ const parsed = markdownToHtml.runSync(markdownToHtml.parse(escapeInvalidTags(restoredText)));
94983
95461
  const nodes = parsed.children.flatMap(n => n.type === 'element' && n.tagName === 'p' ? n.children : [n]);
94984
95462
  const leading = text.match(/^\s+/)?.[0];
94985
95463
  const trailing = text.match(/\s+$/)?.[0];
@@ -96272,9 +96750,6 @@ function terminateHtmlFlowBlocks(content) {
96272
96750
  return restoreCodeBlocks(result.join('\n'), protectedCode);
96273
96751
  }
96274
96752
 
96275
- // EXTERNAL MODULE: external "@readme/variable"
96276
- var variable_ = __webpack_require__(8167);
96277
- var variable_default = /*#__PURE__*/__webpack_require__.n(variable_);
96278
96753
  ;// ./processor/transform/mdxish/variables-code.ts
96279
96754
 
96280
96755
 
@@ -96351,13 +96826,38 @@ const variablesCodeResolver = ({ variables } = {}) => tree => {
96351
96826
  * Captures the field name in group 1 (dot notation) or group 2 (bracket notation)
96352
96827
  */
96353
96828
  const USER_VAR_REGEX = /\{user\.(\w+)\}|\{user\[['"](\w+)['"]\]\}/g;
96829
+ function makeVariableNode(varName, rawValue) {
96830
+ return {
96831
+ type: NodeTypes.variable,
96832
+ data: {
96833
+ hName: 'Variable',
96834
+ hProperties: { name: varName },
96835
+ },
96836
+ value: rawValue,
96837
+ };
96838
+ }
96354
96839
  /**
96355
- * A remark plugin that parses {user.<field>} patterns from text nodes
96356
- * without requiring remarkMdx. Creates Variable nodes for runtime resolution.
96840
+ * A remark plugin that parses {user.<field>} patterns from text nodes and
96841
+ * mdxTextExpression nodes, creating Variable nodes for runtime resolution.
96842
+ *
96843
+ * Handles both:
96844
+ * - `text` nodes: when safeMode is true or after expression evaluation
96845
+ * - `mdxTextExpression` nodes: when mdxExpression has parsed {user.*} before evaluation
96357
96846
  *
96358
96847
  * Supports any user field: name, email, email_verified, exp, iat, etc.
96359
96848
  */
96360
96849
  const variablesTextTransformer = () => tree => {
96850
+ // Handle mdxTextExpression nodes (e.g. {user.name} parsed by mdxExpression)
96851
+ visit(tree, 'mdxTextExpression', (node, index, parent) => {
96852
+ if (index === undefined || !parent)
96853
+ return;
96854
+ const wrapped = `{${(node.value ?? '').trim()}}`; // Wrap the expression value in {} to match the USER_VAR_REGEX pattern
96855
+ const matches = [...wrapped.matchAll(USER_VAR_REGEX)];
96856
+ if (matches.length !== 1)
96857
+ return;
96858
+ const varName = matches[0][1] || matches[0][2];
96859
+ parent.children.splice(index, 1, makeVariableNode(varName, wrapped));
96860
+ });
96361
96861
  visit(tree, 'text', (node, index, parent) => {
96362
96862
  if (index === undefined || !parent)
96363
96863
  return;
@@ -96382,15 +96882,7 @@ const variablesTextTransformer = () => tree => {
96382
96882
  }
96383
96883
  // Extract variable name from either capture group (dot or bracket notation)
96384
96884
  const varName = match[1] || match[2];
96385
- // Create Variable node
96386
- parts.push({
96387
- type: NodeTypes.variable,
96388
- data: {
96389
- hName: 'Variable',
96390
- hProperties: { name: varName },
96391
- },
96392
- value: match[0],
96393
- });
96885
+ parts.push(makeVariableNode(varName, match[0]));
96394
96886
  lastIndex = matchIndex + match[0].length;
96395
96887
  });
96396
96888
  // Add remaining text after last match
@@ -97483,6 +97975,10 @@ function loadComponents() {
97483
97975
 
97484
97976
 
97485
97977
 
97978
+
97979
+
97980
+
97981
+
97486
97982
 
97487
97983
 
97488
97984
 
@@ -97531,10 +98027,12 @@ function mdxishAstProcessor(mdContent, opts = {}) {
97531
98027
  text: mdxExprExt.text,
97532
98028
  };
97533
98029
  const processor = unified()
97534
- .data('micromarkExtensions', safeMode ? [magicBlock(), legacyVariable()] : [magicBlock(), mdxExprTextOnly, legacyVariable()])
98030
+ .data('micromarkExtensions', safeMode
98031
+ ? [magicBlock(), legacyVariable(), looseHtmlEntity()]
98032
+ : [magicBlock(), mdxExprTextOnly, legacyVariable(), looseHtmlEntity()])
97535
98033
  .data('fromMarkdownExtensions', safeMode
97536
- ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown()]
97537
- : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown()])
98034
+ ? [magicBlockFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()]
98035
+ : [magicBlockFromMarkdown(), mdxExpressionFromMarkdown(), legacyVariableFromMarkdown(), emptyTaskListItemFromMarkdown(), looseHtmlEntityFromMarkdown()])
97538
98036
  .use(remarkParse)
97539
98037
  .use(remarkFrontmatter)
97540
98038
  .use(normalize_malformed_md_syntax)
@@ -97546,8 +98044,7 @@ function mdxishAstProcessor(mdContent, opts = {}) {
97546
98044
  .use(mdxish_tables)
97547
98045
  .use(mdxish_html_blocks)
97548
98046
  .use(newEditorTypes ? mdxish_jsx_to_mdast : undefined) // Convert JSX elements to MDAST types
97549
- .use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
97550
- .use(variables_text) // Parse {user.*} patterns from text
98047
+ .use(variables_text) // Parse {user.*} patterns from text nodes
97551
98048
  .use(useTailwind ? transform_tailwind : undefined, { components: tempComponentsMap })
97552
98049
  .use(remarkGfm);
97553
98050
  return {
@@ -97581,19 +98078,25 @@ function mdxishMdastToMd(mdast) {
97581
98078
  * @see {@link https://github.com/readmeio/rmdx/blob/main/docs/mdxish-flow.md}
97582
98079
  */
97583
98080
  function mdxish(mdContent, opts = {}) {
97584
- const { components: userComponents = {}, variables } = opts;
98081
+ const { components: userComponents = {}, jsxContext = {}, safeMode = false, variables } = opts;
97585
98082
  const components = {
97586
98083
  ...loadComponents(),
97587
98084
  ...userComponents,
97588
98085
  };
97589
- const { processor, parserReadyContent } = mdxishAstProcessor(mdContent, opts);
98086
+ // Remove JSX comments before processing (protect code blocks first)
98087
+ const { protectedCode, protectedContent } = protectCodeBlocks(mdContent);
98088
+ const withoutComments = removeJSXComments(protectedContent);
98089
+ const contentWithoutComments = restoreCodeBlocks(withoutComments, protectedCode);
98090
+ const { processor, parserReadyContent } = mdxishAstProcessor(contentWithoutComments, opts);
97590
98091
  processor
98092
+ .use(safeMode ? undefined : evaluate_expressions, { context: jsxContext }) // Evaluate MDX expressions using jsxContext
97591
98093
  .use(remarkBreaks)
97592
98094
  .use(variables_code, { variables }) // Resolve <<...>> and {user.*} inside code and inline code nodes
97593
98095
  .use(remarkRehype, { allowDangerousHtml: true, handlers: mdxComponentHandlers })
97594
98096
  .use(preserveBooleanProperties) // RehypeRaw converts boolean properties to empty strings
97595
98097
  .use(rehypeRaw, { passThrough: ['html-block'] })
97596
98098
  .use(restoreBooleanProperties)
98099
+ .use(rehypeFlattenTableCellParagraphs) // Remove <p> wrappers inside table cells to prevent margin issues
97597
98100
  .use(mdxish_mermaid) // Add mermaid-render className to pre wrappers
97598
98101
  .use(heading_slugs)
97599
98102
  .use(rehypeMdxishComponents, {
@@ -98146,6 +98649,7 @@ function restoreMagicBlocks(replaced, blocks) {
98146
98649
 
98147
98650
 
98148
98651
 
98652
+
98149
98653
  /**
98150
98654
  * Removes Markdown and MDX comments.
98151
98655
  */
@@ -98166,6 +98670,7 @@ async function stripComments(doc, { mdx, mdxish } = {}) {
98166
98670
  .use(normalize_malformed_md_syntax)
98167
98671
  .use(mdx ? remarkMdx : undefined)
98168
98672
  .use(stripCommentsTransformer)
98673
+ .use(remarkGfm)
98169
98674
  .use(remarkStringify, mdx
98170
98675
  ? {}
98171
98676
  : {