@industry-theme/file-editing-panels 0.2.3 → 0.3.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.
Files changed (46) hide show
  1. package/dist/{index-CqtzDkXg.js → index-B2rZhF0Y.js} +2 -2
  2. package/dist/{index-CqtzDkXg.js.map → index-B2rZhF0Y.js.map} +1 -1
  3. package/dist/{index-BPiU3ZGu.js → index-BDgU-836.js} +2 -2
  4. package/dist/{index-BPiU3ZGu.js.map → index-BDgU-836.js.map} +1 -1
  5. package/dist/{index-BwJ7ysyg.js → index-BE_uqu8N.js} +2 -2
  6. package/dist/{index-BwJ7ysyg.js.map → index-BE_uqu8N.js.map} +1 -1
  7. package/dist/{index-CUxI5QVO.js → index-BO94YI1U.js} +2 -2
  8. package/dist/{index-CUxI5QVO.js.map → index-BO94YI1U.js.map} +1 -1
  9. package/dist/{index-BGYE_9-2.js → index-BQ3COoTI.js} +2 -2
  10. package/dist/{index-BGYE_9-2.js.map → index-BQ3COoTI.js.map} +1 -1
  11. package/dist/{index-DEKx4IQM.js → index-BcJD4K9H.js} +2 -2
  12. package/dist/{index-DEKx4IQM.js.map → index-BcJD4K9H.js.map} +1 -1
  13. package/dist/{index-CLkHiHHg.js → index-BijIiC2T.js} +2 -2
  14. package/dist/{index-CLkHiHHg.js.map → index-BijIiC2T.js.map} +1 -1
  15. package/dist/{index-KaUsXGnl.js → index-Bn3GS5JS.js} +2 -2
  16. package/dist/{index-KaUsXGnl.js.map → index-Bn3GS5JS.js.map} +1 -1
  17. package/dist/{index-ByS7RhLv.js → index-CwwU-P8Y.js} +2 -2
  18. package/dist/{index-ByS7RhLv.js.map → index-CwwU-P8Y.js.map} +1 -1
  19. package/dist/{index-DZEhVUk2.js → index-D4652IGg.js} +2 -2
  20. package/dist/{index-DZEhVUk2.js.map → index-D4652IGg.js.map} +1 -1
  21. package/dist/{index-Dtu7Z_rj.js → index-DHoL-esa.js} +2 -2
  22. package/dist/{index-Dtu7Z_rj.js.map → index-DHoL-esa.js.map} +1 -1
  23. package/dist/{index--PROGPVz.js → index-D_58AKji.js} +2 -2
  24. package/dist/{index--PROGPVz.js.map → index-D_58AKji.js.map} +1 -1
  25. package/dist/{index-n0l3b7yd.js → index-Dj4Q-D3m.js} +2 -2
  26. package/dist/{index-n0l3b7yd.js.map → index-Dj4Q-D3m.js.map} +1 -1
  27. package/dist/{index-MGDZkDQT.js → index-DsOGNrfl.js} +2 -2
  28. package/dist/{index-MGDZkDQT.js.map → index-DsOGNrfl.js.map} +1 -1
  29. package/dist/{index-6w0qQWxe.js → index-TGeUE9Er.js} +471 -758
  30. package/dist/index-TGeUE9Er.js.map +1 -0
  31. package/dist/{index-C8M7XUU3.js → index-WBoaW8wN.js} +2 -2
  32. package/dist/{index-C8M7XUU3.js.map → index-WBoaW8wN.js.map} +1 -1
  33. package/dist/{index-C2ZCh8Gz.js → index-c05jkXcr.js} +2 -2
  34. package/dist/{index-C2ZCh8Gz.js.map → index-c05jkXcr.js.map} +1 -1
  35. package/dist/{index-DQXY2KTD.js → index-kzNBMTqG.js} +2 -2
  36. package/dist/{index-DQXY2KTD.js.map → index-kzNBMTqG.js.map} +1 -1
  37. package/dist/panels/FileEditorPanel/FileEditorPanel.d.ts +6 -0
  38. package/dist/panels/FileEditorPanel/FileEditorPanel.d.ts.map +1 -1
  39. package/dist/panels/GitDiffPanel/GitDiffPanel.d.ts +6 -0
  40. package/dist/panels/GitDiffPanel/GitDiffPanel.d.ts.map +1 -1
  41. package/dist/panels/MDXEditorPanel/MDXEditorPanel.d.ts +1 -0
  42. package/dist/panels/MDXEditorPanel/MDXEditorPanel.d.ts.map +1 -1
  43. package/dist/panels.bundle.css +2280 -0
  44. package/dist/panels.bundle.js +1 -1
  45. package/package.json +2 -3
  46. package/dist/index-6w0qQWxe.js.map +0 -1
@@ -3,7 +3,7 @@ var __defNormalProp = (obj, key, value2) => key in obj ? __defProp(obj, key, { e
3
3
  var __publicField = (obj, key, value2) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value2);
4
4
  import { jsx as jsx$1, jsxs, Fragment } from "react/jsx-runtime";
5
5
  import * as React__default from "react";
6
- import React__default__default, { createContext, useContext, forwardRef, createElement, useState, useRef, useEffect, useCallback, useMemo, useLayoutEffect, Suspense, useReducer, useImperativeHandle } from "react";
6
+ import React__default__default, { createContext, useContext, forwardRef, createElement, useState, useRef, useEffect, useCallback, useMemo, useLayoutEffect, Suspense, useReducer } from "react";
7
7
  import { ThemedMonacoWithProvider, ThemedMonacoDiffEditor } from "@principal-ade/industry-themed-monaco-editor";
8
8
  import * as ReactDOM from "react-dom";
9
9
  import ReactDOM__default, { flushSync, createPortal } from "react-dom";
@@ -217,7 +217,8 @@ const FileEditorPanelContent = ({
217
217
  context,
218
218
  actions: _actions,
219
219
  events,
220
- filePath: filePathProp
220
+ filePath: filePathProp,
221
+ showCloseButton = true
221
222
  }) => {
222
223
  var _a2, _b, _c;
223
224
  const { theme: theme2 } = useTheme();
@@ -542,7 +543,7 @@ const FileEditorPanelContent = ({
542
543
  }
543
544
  )
544
545
  ] }),
545
- filePath && /* @__PURE__ */ jsx$1(
546
+ filePath && showCloseButton && /* @__PURE__ */ jsx$1(
546
547
  "button",
547
548
  {
548
549
  onClick: handleClose2,
@@ -745,7 +746,8 @@ const GitDiffPanelContent = ({
745
746
  actions: _actions,
746
747
  events,
747
748
  filePath: filePathProp,
748
- gitStatus: gitStatusProp
749
+ gitStatus: gitStatusProp,
750
+ showCloseButton = true
749
751
  }) => {
750
752
  var _a2;
751
753
  const { theme: theme2 } = useTheme();
@@ -946,7 +948,7 @@ const GitDiffPanelContent = ({
946
948
  ]
947
949
  }
948
950
  ),
949
- /* @__PURE__ */ jsx$1(
951
+ showCloseButton && /* @__PURE__ */ jsx$1(
950
952
  "button",
951
953
  {
952
954
  onClick: handleClose2,
@@ -12478,7 +12480,7 @@ function fixWrappingWhitespace(node2, parentChain) {
12478
12480
  if (node2.type === "strong" || node2.type === "emphasis") {
12479
12481
  const lastChild = node2.children.at(-1);
12480
12482
  if ((lastChild == null ? void 0 : lastChild.type) === "text") {
12481
- const trailingWhitespace = lastChild.value.match(TRAILING_WHITESPACE_REGEXP);
12483
+ const trailingWhitespace = TRAILING_WHITESPACE_REGEXP.exec(lastChild.value);
12482
12484
  if (trailingWhitespace) {
12483
12485
  lastChild.value = lastChild.value.replace(TRAILING_WHITESPACE_REGEXP, "");
12484
12486
  const parent = parentChain.at(-1);
@@ -12493,7 +12495,7 @@ function fixWrappingWhitespace(node2, parentChain) {
12493
12495
  }
12494
12496
  const firstChild = node2.children.at(0);
12495
12497
  if ((firstChild == null ? void 0 : firstChild.type) === "text") {
12496
- const leadingWhitespace = firstChild.value.match(LEADING_WHITESPACE_REGEXP);
12498
+ const leadingWhitespace = LEADING_WHITESPACE_REGEXP.exec(firstChild.value);
12497
12499
  if (leadingWhitespace) {
12498
12500
  firstChild.value = firstChild.value.replace(LEADING_WHITESPACE_REGEXP, "");
12499
12501
  const parent = parentChain.at(-1);
@@ -17023,6 +17025,182 @@ function defaultOnError(left, right) {
17023
17025
  }) + ") is still open");
17024
17026
  }
17025
17027
  }
17028
+ const DEFAULT_KNOWN_LANGUAGES = /* @__PURE__ */ new Set([
17029
+ // JavaScript/TypeScript family
17030
+ "javascript",
17031
+ "js",
17032
+ "jsx",
17033
+ "typescript",
17034
+ "ts",
17035
+ "tsx",
17036
+ // Common scripting languages
17037
+ "python",
17038
+ "py",
17039
+ "ruby",
17040
+ "rb",
17041
+ "php",
17042
+ "perl",
17043
+ "bash",
17044
+ "sh",
17045
+ "shell",
17046
+ "powershell",
17047
+ "ps1",
17048
+ // Compiled languages
17049
+ "java",
17050
+ "c",
17051
+ "cpp",
17052
+ "c++",
17053
+ "csharp",
17054
+ "cs",
17055
+ "go",
17056
+ "rust",
17057
+ "rs",
17058
+ "swift",
17059
+ "kotlin",
17060
+ "kt",
17061
+ "scala",
17062
+ "dart",
17063
+ // Web technologies
17064
+ "html",
17065
+ "htm",
17066
+ "css",
17067
+ "scss",
17068
+ "sass",
17069
+ "less",
17070
+ "xml",
17071
+ "svg",
17072
+ // Data formats
17073
+ "json",
17074
+ "json5",
17075
+ "yaml",
17076
+ "yml",
17077
+ "toml",
17078
+ "xml",
17079
+ "csv",
17080
+ // Database & Query
17081
+ "sql",
17082
+ "mysql",
17083
+ "postgresql",
17084
+ "sqlite",
17085
+ "graphql",
17086
+ "gql",
17087
+ // Markup & Documentation
17088
+ "markdown",
17089
+ "md",
17090
+ "latex",
17091
+ "tex",
17092
+ "rst",
17093
+ // Other common languages
17094
+ "r",
17095
+ "matlab",
17096
+ "julia",
17097
+ "lua",
17098
+ "vim",
17099
+ "viml",
17100
+ // Generic/Fallback
17101
+ "text",
17102
+ "txt",
17103
+ "plaintext",
17104
+ "diff",
17105
+ "patch",
17106
+ // Special (diagram tools, etc.)
17107
+ "mermaid",
17108
+ "dot",
17109
+ "graphviz"
17110
+ ]);
17111
+ const DEFAULT_LANGUAGE_MAPPINGS = {
17112
+ "n/a": "",
17113
+ // Map to empty string instead of 'text'
17114
+ "N/A": "",
17115
+ // Map to empty string instead of 'text'
17116
+ "argdown": "markdown",
17117
+ "": ""
17118
+ // Keep empty as empty
17119
+ };
17120
+ function escapeComparisonOperators(markdown2) {
17121
+ let result = markdown2;
17122
+ const codeBlocks = [];
17123
+ let codeBlockIndex = 0;
17124
+ result = result.replace(/(```[\s\S]*?```|`[^`\n]+`)/g, (match) => {
17125
+ const placeholder2 = `___CODE_BLOCK_${codeBlockIndex}___`;
17126
+ codeBlocks.push(match);
17127
+ codeBlockIndex++;
17128
+ return placeholder2;
17129
+ });
17130
+ const validTags = [];
17131
+ let validTagIndex = 0;
17132
+ result = result.replace(/<\/?[a-zA-Z][a-zA-Z0-9]*(?:\s+[^>]*)?\/?>/g, (match) => {
17133
+ const placeholder2 = `___VALID_TAG_${validTagIndex}___`;
17134
+ validTags.push(match);
17135
+ validTagIndex++;
17136
+ return placeholder2;
17137
+ });
17138
+ const comments = [];
17139
+ let commentIndex = 0;
17140
+ result = result.replace(/<!--[\s\S]*?-->/g, (match) => {
17141
+ const placeholder2 = `___HTML_COMMENT_${commentIndex}___`;
17142
+ comments.push(match);
17143
+ commentIndex++;
17144
+ return placeholder2;
17145
+ });
17146
+ result = result.replace(/</g, "&lt;");
17147
+ result = result.replace(new RegExp("(?<!^)>", "gm"), "&gt;");
17148
+ result = result.replace(/___VALID_TAG_(\d+)___/g, (_2, index2) => {
17149
+ return validTags[parseInt(index2)];
17150
+ });
17151
+ result = result.replace(/___HTML_COMMENT_(\d+)___/g, (_2, index2) => {
17152
+ return comments[parseInt(index2)];
17153
+ });
17154
+ result = result.replace(/___CODE_BLOCK_(\d+)___/g, (_2, index2) => {
17155
+ return codeBlocks[parseInt(index2)];
17156
+ });
17157
+ return result;
17158
+ }
17159
+ function normalizeCodeBlockLanguages(markdown2, options) {
17160
+ const { knownLanguages, fallbackLanguage, languageMappings } = options;
17161
+ return markdown2.replace(
17162
+ /^(\s*)```([^\n`]*?)\n/gim,
17163
+ (match, indent2, lang) => {
17164
+ const trimmedLang = lang.trim();
17165
+ const lowerLang = trimmedLang.toLowerCase();
17166
+ if (trimmedLang in languageMappings || lowerLang in languageMappings) {
17167
+ const mapped = trimmedLang in languageMappings ? languageMappings[trimmedLang] : languageMappings[lowerLang];
17168
+ return `${indent2}\`\`\`${mapped}
17169
+ `;
17170
+ }
17171
+ if (knownLanguages.has(lowerLang)) {
17172
+ return match;
17173
+ }
17174
+ if (!trimmedLang) {
17175
+ return `${indent2}\`\`\`${fallbackLanguage}
17176
+ `;
17177
+ }
17178
+ return match;
17179
+ }
17180
+ );
17181
+ }
17182
+ function preprocessMarkdown(markdown2, options = {}) {
17183
+ const {
17184
+ escapeComparisonOperators: shouldEscapeOperators = true,
17185
+ normalizeCodeBlockLanguages: shouldNormalizeLangs = true,
17186
+ knownLanguages = DEFAULT_KNOWN_LANGUAGES,
17187
+ fallbackLanguage = "",
17188
+ // Changed from 'text' to empty string
17189
+ languageMappings = DEFAULT_LANGUAGE_MAPPINGS
17190
+ } = options;
17191
+ let result = markdown2;
17192
+ if (shouldNormalizeLangs) {
17193
+ result = normalizeCodeBlockLanguages(result, {
17194
+ knownLanguages,
17195
+ fallbackLanguage,
17196
+ languageMappings
17197
+ });
17198
+ }
17199
+ if (shouldEscapeOperators) {
17200
+ result = escapeComparisonOperators(result);
17201
+ }
17202
+ return result;
17203
+ }
17026
17204
  function isParent$1(node2) {
17027
17205
  return node2.children instanceof Array;
17028
17206
  }
@@ -17076,7 +17254,8 @@ function importMarkdownToLexical({
17076
17254
  var _a2;
17077
17255
  let mdastRoot;
17078
17256
  try {
17079
- mdastRoot = fromMarkdown(markdown2, {
17257
+ const processedMarkdown = preprocessMarkdown(markdown2);
17258
+ mdastRoot = fromMarkdown(processedMarkdown, {
17080
17259
  extensions: syntaxExtensions,
17081
17260
  mdastExtensions
17082
17261
  });
@@ -17121,7 +17300,7 @@ function importMdastTreeToLexical({ root: root2, mdastRoot, visitors, ...descrip
17121
17300
  if (!visitor) {
17122
17301
  try {
17123
17302
  throw new UnrecognizedMarkdownConstructError(`Unsupported markdown syntax: ${toMarkdown(mdastNode)}`);
17124
- } catch (e2) {
17303
+ } catch (_e2) {
17125
17304
  throw new UnrecognizedMarkdownConstructError(
17126
17305
  `Parsing of the following markdown structure failed: ${JSON.stringify({
17127
17306
  type: mdastNode.type,
@@ -17841,9 +18020,7 @@ const currentSelection$ = $$4(null, (r2) => {
17841
18020
  const parent = e2.getParent();
17842
18021
  return parent !== null && so(parent);
17843
18022
  });
17844
- if (element2 === null) {
17845
- element2 = anchorNode.getTopLevelElementOrThrow();
17846
- }
18023
+ element2 ?? (element2 = anchorNode.getTopLevelElementOrThrow());
17847
18024
  const elementKey = element2.getKey();
17848
18025
  const elementDOM = theEditor.getElementByKey(elementKey);
17849
18026
  if (elementDOM !== null) {
@@ -20143,10 +20320,26 @@ function getSelectedNode(selection2) {
20143
20320
  } else {
20144
20321
  return A$2(anchor) ? anchorNode : focusNode;
20145
20322
  }
20146
- } catch (e2) {
20323
+ } catch {
20147
20324
  return null;
20148
20325
  }
20149
20326
  }
20327
+ const WILL_CHANGE_CONTAINING_BLOCK_PROPS = ["transform", "perspective", "filter", "backdrop-filter", "contain", "container-type"];
20328
+ const CONTAIN_VALUES_CREATING_CONTAINING_BLOCK = ["layout", "paint", "strict", "content"];
20329
+ function getFixedContainingBlock(element2) {
20330
+ let current = element2 == null ? void 0 : element2.parentElement;
20331
+ while (current) {
20332
+ const style = window.getComputedStyle(current);
20333
+ const willChangeProps = style.willChange.split(",").map((v2) => v2.trim());
20334
+ const hasRelevantWillChange = willChangeProps.some((prop) => WILL_CHANGE_CONTAINING_BLOCK_PROPS.includes(prop));
20335
+ const createsContainingBlock = style.transform !== "none" || style.perspective !== "none" || style.filter !== "none" || style.backdropFilter !== "none" || CONTAIN_VALUES_CREATING_CONTAINING_BLOCK.includes(style.contain) || style.containerType !== "normal" || style.contentVisibility === "auto" || hasRelevantWillChange;
20336
+ if (createsContainingBlock) {
20337
+ return current;
20338
+ }
20339
+ current = current.parentElement;
20340
+ }
20341
+ return null;
20342
+ }
20150
20343
  function getSelectionRectangle(editor) {
20151
20344
  const selection2 = wr();
20152
20345
  const nativeSelection = window.getSelection();
@@ -20173,13 +20366,23 @@ function getSelectionRectangle(editor) {
20173
20366
  rect = domRange.getBoundingClientRect();
20174
20367
  }
20175
20368
  }
20369
+ const fixedContainer = getFixedContainingBlock(rootElement);
20370
+ if (fixedContainer) {
20371
+ const containerRect = fixedContainer.getBoundingClientRect();
20372
+ return {
20373
+ top: Math.round(rect.top - containerRect.top),
20374
+ left: Math.round(rect.left - containerRect.left),
20375
+ width: Math.round(rect.width),
20376
+ height: Math.round(rect.height)
20377
+ };
20378
+ }
20176
20379
  return {
20177
20380
  top: Math.round(rect.top),
20178
20381
  left: Math.round(rect.left),
20179
20382
  width: Math.round(rect.width),
20180
20383
  height: Math.round(rect.height)
20181
20384
  };
20182
- } else if (!activeElement || activeElement.className !== "link-input") {
20385
+ } else if ((activeElement == null ? void 0 : activeElement.className) !== "link-input") {
20183
20386
  return null;
20184
20387
  }
20185
20388
  return null;
@@ -20425,8 +20628,140 @@ const MDXEditor = React__default__default.forwardRef((props, ref) => {
20425
20628
  /* @__PURE__ */ React__default__default.createElement(Methods$1, { mdxRef: ref })
20426
20629
  );
20427
20630
  });
20631
+ function themeToCSSVariables(theme2) {
20632
+ return {
20633
+ // Page and base backgrounds
20634
+ "--basePageBg": theme2.colors.background,
20635
+ "--baseBase": theme2.colors.background,
20636
+ "--baseBgSubtle": theme2.colors.backgroundSecondary,
20637
+ "--baseBg": theme2.colors.backgroundTertiary,
20638
+ "--baseBgHover": theme2.colors.backgroundHover,
20639
+ "--baseBgActive": theme2.colors.backgroundLight,
20640
+ // Borders and lines
20641
+ "--baseLine": theme2.colors.border,
20642
+ "--baseBorder": theme2.colors.border,
20643
+ "--baseBorderHover": theme2.colors.border,
20644
+ // Solid colors (non-transparent UI elements)
20645
+ "--baseSolid": theme2.colors.muted,
20646
+ "--baseSolidHover": theme2.colors.muted,
20647
+ // Text colors
20648
+ "--baseText": theme2.colors.text,
20649
+ "--baseTextContrast": theme2.colors.text,
20650
+ // Accent colors (primary interactive elements)
20651
+ "--accentBase": theme2.colors.primary,
20652
+ "--accentBgSubtle": theme2.colors.primary,
20653
+ "--accentBg": theme2.colors.primary,
20654
+ "--accentBgHover": theme2.colors.secondary,
20655
+ "--accentBgActive": theme2.colors.secondary,
20656
+ "--accentLine": theme2.colors.primary,
20657
+ "--accentBorder": theme2.colors.primary,
20658
+ "--accentBorderHover": theme2.colors.secondary,
20659
+ "--accentSolid": theme2.colors.primary,
20660
+ "--accentSolidHover": theme2.colors.secondary,
20661
+ "--accentText": theme2.colors.primary,
20662
+ "--accentTextContrast": theme2.colors.accent,
20663
+ // Status/admonition colors
20664
+ "--admonitionTipBg": theme2.colors.info,
20665
+ "--admonitionTipBorder": theme2.colors.info,
20666
+ "--admonitionInfoBg": theme2.colors.success,
20667
+ "--admonitionInfoBorder": theme2.colors.success,
20668
+ "--admonitionCautionBg": theme2.colors.warning,
20669
+ "--admonitionCautionBorder": theme2.colors.warning,
20670
+ "--admonitionDangerBg": theme2.colors.error,
20671
+ "--admonitionDangerBorder": theme2.colors.error,
20672
+ "--admonitionNoteBg": theme2.colors.muted,
20673
+ "--admonitionNoteBorder": theme2.colors.border,
20674
+ // Error color
20675
+ "--error-color": theme2.colors.error,
20676
+ // Typography
20677
+ "--font-mono": theme2.fonts.monospace,
20678
+ "--font-body": theme2.fonts.body,
20679
+ // Spacing (use theme's spacing scale)
20680
+ "--spacing-0": `${theme2.space[0]}px`,
20681
+ "--spacing-px": "1px",
20682
+ "--spacing-0_5": "0.125rem",
20683
+ "--spacing-1": `${theme2.space[1]}px`,
20684
+ "--spacing-1_5": "0.375rem",
20685
+ "--spacing-2": `${theme2.space[2]}px`,
20686
+ "--spacing-2_5": "0.625rem",
20687
+ "--spacing-3": `${theme2.space[3]}px`,
20688
+ "--spacing-3_5": "0.875rem",
20689
+ "--spacing-4": `${theme2.space[4]}px`,
20690
+ "--spacing-5": `${theme2.space[5]}px`,
20691
+ "--spacing-6": `${theme2.space[6]}px`,
20692
+ "--spacing-7": `${theme2.space[7]}px`,
20693
+ "--spacing-8": `${theme2.space[8]}px`,
20694
+ // Border radius (use theme's radii)
20695
+ "--radius-none": `${theme2.radii[0]}px`,
20696
+ "--radius-small": `${theme2.radii[1]}px`,
20697
+ "--radius-base": `${theme2.radii[2]}px`,
20698
+ "--radius-medium": `${theme2.radii[3]}px`,
20699
+ "--radius-large": `${theme2.radii[4]}px`,
20700
+ "--radius-extra-large": `${theme2.radii[5]}px`,
20701
+ // Font sizes (use theme's fontSizes with scaling)
20702
+ "--text-xxs": `${theme2.fontSizes[0]}px`,
20703
+ "--text-xs": `${theme2.fontSizes[1]}px`,
20704
+ "--text-sm": `${theme2.fontSizes[2]}px`,
20705
+ "--text-base": `${theme2.fontSizes[3]}px`
20706
+ };
20707
+ }
20708
+ function generateStyleId(theme2) {
20709
+ const colorStr = JSON.stringify(theme2.colors);
20710
+ let hash2 = 0;
20711
+ for (let i2 = 0; i2 < colorStr.length; i2++) {
20712
+ hash2 = (hash2 << 5) - hash2 + colorStr.charCodeAt(i2) | 0;
20713
+ }
20714
+ return `themed-mdxeditor-${Math.abs(hash2)}`;
20715
+ }
20716
+ const ThemedMDXEditorInner = React__default__default.forwardRef((props, ref) => {
20717
+ const { theme: theme2 } = useTheme();
20718
+ const cssVars = themeToCSSVariables(theme2);
20719
+ const styleId = React__default__default.useMemo(() => generateStyleId(theme2), [theme2]);
20720
+ React__default__default.useEffect(() => {
20721
+ const existingStyle = document.getElementById(styleId);
20722
+ if (existingStyle) {
20723
+ return;
20724
+ }
20725
+ const styleElement = document.createElement("style");
20726
+ styleElement.id = styleId;
20727
+ const cssRules = Object.entries(cssVars).map(([key, value2]) => ` ${key}: ${value2};`).join("\n");
20728
+ styleElement.textContent = `
20729
+ .themed-mdxeditor.mdxeditor {
20730
+ ${cssRules}
20731
+ }
20732
+ `;
20733
+ document.head.appendChild(styleElement);
20734
+ return () => {
20735
+ const style = document.getElementById(styleId);
20736
+ if (style) {
20737
+ style.remove();
20738
+ }
20739
+ };
20740
+ }, [cssVars, styleId]);
20741
+ const className = props.className ? `${props.className} themed-mdxeditor` : "themed-mdxeditor";
20742
+ return /* @__PURE__ */ React__default__default.createElement(MDXEditor, { ...props, ref, className });
20743
+ });
20744
+ ThemedMDXEditorInner.displayName = "ThemedMDXEditorInner";
20745
+ const ThemedMDXEditor = React__default__default.forwardRef(
20746
+ (props, ref) => {
20747
+ try {
20748
+ const { theme: contextTheme } = useTheme();
20749
+ if (contextTheme) {
20750
+ return /* @__PURE__ */ React__default__default.createElement(ThemedMDXEditorInner, { ...props, ref });
20751
+ }
20752
+ } catch {
20753
+ }
20754
+ const className = props.className ? `${props.className} dark-editor` : "dark-editor";
20755
+ return /* @__PURE__ */ React__default__default.createElement(MDXEditor, { ...props, ref, className });
20756
+ }
20757
+ );
20758
+ ThemedMDXEditor.displayName = "ThemedMDXEditor";
20428
20759
  const CAN_USE_DOM = typeof window !== "undefined" && typeof window.document.createElement !== "undefined";
20429
- const IS_APPLE = CAN_USE_DOM && /Mac|iPod|iPhone|iPad/.test(navigator.platform);
20760
+ const IS_APPLE = CAN_USE_DOM && (() => {
20761
+ var _a2;
20762
+ const platform2 = (_a2 = navigator.userAgentData) == null ? void 0 : _a2.platform;
20763
+ return platform2 ? /mac/i.test(platform2) : /Mac|iPod|iPhone|iPad/.test(navigator.userAgent);
20764
+ })();
20430
20765
  function controlOrMeta(metaKey, ctrlKey) {
20431
20766
  if (IS_APPLE) {
20432
20767
  return metaKey;
@@ -20446,31 +20781,31 @@ const MdastHeadingVisitor = {
20446
20781
  actions.addAndStepInto(At(`h${mdastNode.depth}`));
20447
20782
  }
20448
20783
  };
20449
- const FORMATTING_KEYS = [48, 49, 50, 51, 52, 53, 54];
20784
+ const FORMATTING_KEYS = ["Digit0", "Digit1", "Digit2", "Digit3", "Digit4", "Digit5", "Digit6"];
20450
20785
  const ALL_HEADING_LEVELS = [1, 2, 3, 4, 5, 6];
20451
20786
  const CODE_TO_HEADING_LEVEL_MAP = {
20452
- 49: 1,
20453
- 50: 2,
20454
- 51: 3,
20455
- 52: 4,
20456
- 53: 5,
20457
- 54: 6
20787
+ Digit1: 1,
20788
+ Digit2: 2,
20789
+ Digit3: 3,
20790
+ Digit4: 4,
20791
+ Digit5: 5,
20792
+ Digit6: 6
20458
20793
  };
20459
20794
  const allowedHeadingLevels$ = $$4(ALL_HEADING_LEVELS, (r2) => {
20460
20795
  r2.pub(createRootEditorSubscription$, (theRootEditor) => {
20461
20796
  return theRootEditor.registerCommand(
20462
20797
  Se,
20463
20798
  (event) => {
20464
- const { keyCode, ctrlKey, metaKey, altKey } = event;
20465
- if (FORMATTING_KEYS.includes(keyCode) && controlOrMeta(metaKey, ctrlKey) && altKey) {
20799
+ const { code, ctrlKey, metaKey, altKey } = event;
20800
+ if (FORMATTING_KEYS.includes(code) && controlOrMeta(metaKey, ctrlKey) && altKey) {
20466
20801
  event.preventDefault();
20467
20802
  theRootEditor.update(() => {
20468
- if (keyCode === 48) {
20803
+ if (code === "Digit0") {
20469
20804
  r2.pub(convertSelectionToNode$, () => Fi());
20470
20805
  } else {
20471
20806
  const allowedHeadingLevels = r2.getValue(allowedHeadingLevels$);
20472
- const requestedHeadingLevel = CODE_TO_HEADING_LEVEL_MAP[keyCode];
20473
- if (!allowedHeadingLevels.includes(requestedHeadingLevel)) {
20807
+ const requestedHeadingLevel = CODE_TO_HEADING_LEVEL_MAP[code];
20808
+ if (allowedHeadingLevels.includes(requestedHeadingLevel)) {
20474
20809
  r2.pub(convertSelectionToNode$, () => At(`h${requestedHeadingLevel}`));
20475
20810
  }
20476
20811
  }
@@ -20672,12 +21007,10 @@ const LexicalListItemVisitor = {
20672
21007
  let surroundingParagraph = null;
20673
21008
  for (const child of lexicalNode.getChildren()) {
20674
21009
  if (Zn(child) || Ln(child) || child.isInline() && (hi(child) || pi(child))) {
20675
- if (!surroundingParagraph) {
20676
- surroundingParagraph = actions.appendToParent(listItem2, {
20677
- type: "paragraph",
20678
- children: []
20679
- });
20680
- }
21010
+ surroundingParagraph ?? (surroundingParagraph = actions.appendToParent(listItem2, {
21011
+ type: "paragraph",
21012
+ children: []
21013
+ }));
20681
21014
  actions.visit(child, surroundingParagraph);
20682
21015
  } else {
20683
21016
  surroundingParagraph = null;
@@ -20889,9 +21222,7 @@ const currentListType$ = $$4("", (r2) => {
20889
21222
  const parent = e2.getParent();
20890
21223
  return parent !== null && so(parent);
20891
21224
  });
20892
- if (element2 === null) {
20893
- element2 = anchorNode.getTopLevelElementOrThrow();
20894
- }
21225
+ element2 ?? (element2 = anchorNode.getTopLevelElementOrThrow());
20895
21226
  const elementKey = element2.getKey();
20896
21227
  const elementDOM = theEditor.getElementByKey(elementKey);
20897
21228
  if (elementDOM !== null) {
@@ -26580,9 +26911,7 @@ const TableEditor = ({ mdastNode, parentEditor, lexicalTable }) => {
26580
26911
  const [iconComponentFor, readOnly2] = X$3(iconComponentFor$, readOnly$);
26581
26912
  const getCellKey = React__default__default.useMemo(() => {
26582
26913
  return (cell) => {
26583
- if (!cell.__cacheKey) {
26584
- cell.__cacheKey = uuidv4();
26585
- }
26914
+ cell.__cacheKey ?? (cell.__cacheKey = uuidv4());
26586
26915
  return cell.__cacheKey;
26587
26916
  };
26588
26917
  }, []);
@@ -26870,7 +27199,9 @@ const CellEditor = ({ focus: focus2, setActiveCell, parentEditor, lexicalTable,
26870
27199
  );
26871
27200
  }, [colIndex, editor, rootEditor, rowIndex, saveAndFocus, setActiveCell]);
26872
27201
  React__default__default.useEffect(() => {
26873
- focus2 && editor.focus();
27202
+ if (focus2) {
27203
+ editor.focus();
27204
+ }
26874
27205
  }, [focus2, editor]);
26875
27206
  return /* @__PURE__ */ React__default__default.createElement(h, { initialEditor: editor }, /* @__PURE__ */ React__default__default.createElement(h$4, { contentEditable: /* @__PURE__ */ React__default__default.createElement(x$3, null), placeholder: /* @__PURE__ */ React__default__default.createElement("div", null), ErrorBoundary: a$2 }), nestedEditorChildren.map((Child, index2) => /* @__PURE__ */ React__default__default.createElement(Child, { key: index2 })), /* @__PURE__ */ React__default__default.createElement(a$3, null));
26876
27207
  };
@@ -27174,9 +27505,7 @@ class TableNode extends _i {
27174
27505
  setColumnAlign(colIndex, align) {
27175
27506
  const self2 = this.getWritable();
27176
27507
  const table = self2.__mdastNode;
27177
- if (table.align == null) {
27178
- table.align = [];
27179
- }
27508
+ table.align ?? (table.align = []);
27180
27509
  table.align[colIndex] = align;
27181
27510
  }
27182
27511
  /** @internal */
@@ -27212,7 +27541,7 @@ function $convertTableElement(element2) {
27212
27541
  children: [
27213
27542
  {
27214
27543
  type: "text",
27215
- value: cell.textContent ?? ""
27544
+ value: cell.textContent
27216
27545
  }
27217
27546
  ]
27218
27547
  };
@@ -27570,7 +27899,7 @@ function EditImageToolbar(props) {
27570
27899
  openEditImageDialog({
27571
27900
  nodeKey,
27572
27901
  initialValues: {
27573
- src: !initialImagePath ? imageSource : initialImagePath,
27902
+ src: initialImagePath ?? imageSource,
27574
27903
  title,
27575
27904
  altText: alt,
27576
27905
  width: parseImageDimension(width),
@@ -31554,7 +31883,7 @@ function ImageResizer({
31554
31883
  startY: 0
31555
31884
  });
31556
31885
  const editorRootElement = editor.getRootElement();
31557
- const maxWidthContainer = maxWidth ? maxWidth : editorRootElement !== null ? editorRootElement.getBoundingClientRect().width - 20 : 100;
31886
+ const maxWidthContainer = maxWidth ?? (editorRootElement !== null ? editorRootElement.getBoundingClientRect().width - 20 : 100);
31558
31887
  const maxHeightContainer = editorRootElement !== null ? editorRootElement.getBoundingClientRect().height - 20 : 100;
31559
31888
  const minWidth = 100;
31560
31889
  const minHeight = 100;
@@ -32018,8 +32347,8 @@ class ImageNode extends _i {
32018
32347
  this.__src = src;
32019
32348
  this.__title = title;
32020
32349
  this.__altText = altText;
32021
- this.__width = width ? width : "inherit";
32022
- this.__height = height ? height : "inherit";
32350
+ this.__width = width ?? "inherit";
32351
+ this.__height = height ?? "inherit";
32023
32352
  this.__rest = rest ?? [];
32024
32353
  }
32025
32354
  /** @internal */
@@ -32031,6 +32360,16 @@ class ImageNode extends _i {
32031
32360
  return new ImageNode(node2.__src, node2.__altText, node2.__title, node2.__width, node2.__height, node2.__rest, node2.__key);
32032
32361
  }
32033
32362
  /** @internal */
32363
+ afterCloneFrom(prevNode) {
32364
+ super.afterCloneFrom(prevNode);
32365
+ this.__src = prevNode.__src;
32366
+ this.__altText = prevNode.__altText;
32367
+ this.__title = prevNode.__title;
32368
+ this.__width = prevNode.__width;
32369
+ this.__height = prevNode.__height;
32370
+ this.__rest = prevNode.__rest;
32371
+ }
32372
+ /** @internal */
32034
32373
  static importJSON(serializedNode) {
32035
32374
  const { altText, title, src, width, rest, height } = serializedNode;
32036
32375
  const node2 = $createImageNode({
@@ -32090,7 +32429,7 @@ class ImageNode extends _i {
32090
32429
  writable.__height = height;
32091
32430
  }
32092
32431
  /** @internal */
32093
- createDOM(config2) {
32432
+ createDOM(config2, _editor) {
32094
32433
  const span = document.createElement("span");
32095
32434
  const theme2 = config2.theme;
32096
32435
  const className = theme2.image;
@@ -35981,6 +36320,13 @@ class CodeBlockNode extends _i {
35981
36320
  static clone(node2) {
35982
36321
  return new CodeBlockNode(node2.__code, node2.__language, node2.__meta, node2.__key);
35983
36322
  }
36323
+ afterCloneFrom(prevNode) {
36324
+ super.afterCloneFrom(prevNode);
36325
+ this.__code = prevNode.__code;
36326
+ this.__meta = prevNode.__meta;
36327
+ this.__language = prevNode.__language;
36328
+ this.__focusEmitter = voidEmitter();
36329
+ }
35984
36330
  static importJSON(serializedNode) {
35985
36331
  const { code, meta: meta2, language: language2 } = serializedNode;
35986
36332
  return $createCodeBlockNode({
@@ -36009,7 +36355,7 @@ class CodeBlockNode extends _i {
36009
36355
  };
36010
36356
  }
36011
36357
  // View
36012
- createDOM(_config) {
36358
+ createDOM(_config, _editor) {
36013
36359
  return document.createElement("div");
36014
36360
  }
36015
36361
  updateDOM() {
@@ -36081,9 +36427,7 @@ const CodeBlockEditorContainer = (props) => {
36081
36427
  const codeBlockEditorDescriptors = E$4(codeBlockEditorDescriptors$);
36082
36428
  const defaultCodeBlockLanguage = E$4(defaultCodeBlockLanguage$);
36083
36429
  let descriptor = codeBlockEditorDescriptors.sort((a2, b2) => b2.priority - a2.priority).find((descriptor2) => descriptor2.match(props.language || "", props.meta || ""));
36084
- if (!descriptor) {
36085
- descriptor = codeBlockEditorDescriptors.find((descriptor2) => descriptor2.match(defaultCodeBlockLanguage || "", props.meta || ""));
36086
- }
36430
+ descriptor ?? (descriptor = codeBlockEditorDescriptors.find((descriptor2) => descriptor2.match(defaultCodeBlockLanguage || "", props.meta || "")));
36087
36431
  if (!descriptor) {
36088
36432
  throw new Error(`No CodeBlockEditor registered for language=${props.language} meta=${props.meta}`);
36089
36433
  }
@@ -36100,10 +36444,10 @@ function $isCodeBlockNode(node2) {
36100
36444
  }
36101
36445
  function $convertPreElement(element2) {
36102
36446
  const preElement = element2;
36103
- const code = preElement.textContent ?? "";
36447
+ const code = preElement.textContent;
36104
36448
  const classAttribute = element2.getAttribute("class") ?? "";
36105
36449
  const dataLanguageAttribute = element2.getAttribute("data-language") ?? "";
36106
- const languageMatch = classAttribute.match(/language-(\w+)/);
36450
+ const languageMatch = /language-(\w+)/.exec(classAttribute);
36107
36451
  const language2 = languageMatch ? languageMatch[1] : dataLanguageAttribute;
36108
36452
  const meta2 = preElement.getAttribute("data-meta") ?? "";
36109
36453
  return {
@@ -62278,7 +62622,7 @@ function legacy(parser2) {
62278
62622
  return new LanguageSupport(StreamLanguage.define(parser2));
62279
62623
  }
62280
62624
  function sql(dialectName) {
62281
- return import("./index-MGDZkDQT.js").then((m3) => m3.sql({ dialect: m3[dialectName] }));
62625
+ return import("./index-DsOGNrfl.js").then((m3) => m3.sql({ dialect: m3[dialectName] }));
62282
62626
  }
62283
62627
  const languages = [
62284
62628
  // New-style language modes
@@ -62286,7 +62630,7 @@ const languages = [
62286
62630
  name: "C",
62287
62631
  extensions: ["c", "h", "ino"],
62288
62632
  load() {
62289
- return import("./index-CUxI5QVO.js").then((m3) => m3.cpp());
62633
+ return import("./index-BO94YI1U.js").then((m3) => m3.cpp());
62290
62634
  }
62291
62635
  }),
62292
62636
  /* @__PURE__ */ LanguageDescription.of({
@@ -62294,7 +62638,7 @@ const languages = [
62294
62638
  alias: ["cpp"],
62295
62639
  extensions: ["cpp", "c++", "cc", "cxx", "hpp", "h++", "hh", "hxx"],
62296
62640
  load() {
62297
- return import("./index-CUxI5QVO.js").then((m3) => m3.cpp());
62641
+ return import("./index-BO94YI1U.js").then((m3) => m3.cpp());
62298
62642
  }
62299
62643
  }),
62300
62644
  /* @__PURE__ */ LanguageDescription.of({
@@ -62316,7 +62660,7 @@ const languages = [
62316
62660
  name: "Go",
62317
62661
  extensions: ["go"],
62318
62662
  load() {
62319
- return import("./index-DQXY2KTD.js").then((m3) => m3.go());
62663
+ return import("./index-kzNBMTqG.js").then((m3) => m3.go());
62320
62664
  }
62321
62665
  }),
62322
62666
  /* @__PURE__ */ LanguageDescription.of({
@@ -62331,7 +62675,7 @@ const languages = [
62331
62675
  name: "Java",
62332
62676
  extensions: ["java"],
62333
62677
  load() {
62334
- return import("./index-ByS7RhLv.js").then((m3) => m3.java());
62678
+ return import("./index-CwwU-P8Y.js").then((m3) => m3.java());
62335
62679
  }
62336
62680
  }),
62337
62681
  /* @__PURE__ */ LanguageDescription.of({
@@ -62346,7 +62690,7 @@ const languages = [
62346
62690
  name: "Jinja",
62347
62691
  extensions: ["j2", "jinja", "jinja2"],
62348
62692
  load() {
62349
- return import("./index-BPiU3ZGu.js").then((m3) => m3.jinja());
62693
+ return import("./index-BDgU-836.js").then((m3) => m3.jinja());
62350
62694
  }
62351
62695
  }),
62352
62696
  /* @__PURE__ */ LanguageDescription.of({
@@ -62354,7 +62698,7 @@ const languages = [
62354
62698
  alias: ["json5"],
62355
62699
  extensions: ["json", "map"],
62356
62700
  load() {
62357
- return import("./index-BwJ7ysyg.js").then((m3) => m3.json());
62701
+ return import("./index-BE_uqu8N.js").then((m3) => m3.json());
62358
62702
  }
62359
62703
  }),
62360
62704
  /* @__PURE__ */ LanguageDescription.of({
@@ -62368,14 +62712,14 @@ const languages = [
62368
62712
  name: "LESS",
62369
62713
  extensions: ["less"],
62370
62714
  load() {
62371
- return import("./index-Dtu7Z_rj.js").then((m3) => m3.less());
62715
+ return import("./index-DHoL-esa.js").then((m3) => m3.less());
62372
62716
  }
62373
62717
  }),
62374
62718
  /* @__PURE__ */ LanguageDescription.of({
62375
62719
  name: "Liquid",
62376
62720
  extensions: ["liquid"],
62377
62721
  load() {
62378
- return import("./index-n0l3b7yd.js").then((m3) => m3.liquid());
62722
+ return import("./index-Dj4Q-D3m.js").then((m3) => m3.liquid());
62379
62723
  }
62380
62724
  }),
62381
62725
  /* @__PURE__ */ LanguageDescription.of({
@@ -62407,7 +62751,7 @@ const languages = [
62407
62751
  name: "PHP",
62408
62752
  extensions: ["php", "php3", "php4", "php5", "php7", "phtml"],
62409
62753
  load() {
62410
- return import("./index-CLkHiHHg.js").then((m3) => m3.php());
62754
+ return import("./index-BijIiC2T.js").then((m3) => m3.php());
62411
62755
  }
62412
62756
  }),
62413
62757
  /* @__PURE__ */ LanguageDescription.of({
@@ -62428,28 +62772,28 @@ const languages = [
62428
62772
  extensions: ["BUILD", "bzl", "py", "pyw"],
62429
62773
  filename: /^(BUCK|BUILD)$/,
62430
62774
  load() {
62431
- return import("./index-BGYE_9-2.js").then((m3) => m3.python());
62775
+ return import("./index-BQ3COoTI.js").then((m3) => m3.python());
62432
62776
  }
62433
62777
  }),
62434
62778
  /* @__PURE__ */ LanguageDescription.of({
62435
62779
  name: "Rust",
62436
62780
  extensions: ["rs"],
62437
62781
  load() {
62438
- return import("./index-C8M7XUU3.js").then((m3) => m3.rust());
62782
+ return import("./index-WBoaW8wN.js").then((m3) => m3.rust());
62439
62783
  }
62440
62784
  }),
62441
62785
  /* @__PURE__ */ LanguageDescription.of({
62442
62786
  name: "Sass",
62443
62787
  extensions: ["sass"],
62444
62788
  load() {
62445
- return import("./index-DEKx4IQM.js").then((m3) => m3.sass({ indented: true }));
62789
+ return import("./index-BcJD4K9H.js").then((m3) => m3.sass({ indented: true }));
62446
62790
  }
62447
62791
  }),
62448
62792
  /* @__PURE__ */ LanguageDescription.of({
62449
62793
  name: "SCSS",
62450
62794
  extensions: ["scss"],
62451
62795
  load() {
62452
- return import("./index-DEKx4IQM.js").then((m3) => m3.sass());
62796
+ return import("./index-BcJD4K9H.js").then((m3) => m3.sass());
62453
62797
  }
62454
62798
  }),
62455
62799
  /* @__PURE__ */ LanguageDescription.of({
@@ -62484,7 +62828,7 @@ const languages = [
62484
62828
  name: "WebAssembly",
62485
62829
  extensions: ["wat", "wast"],
62486
62830
  load() {
62487
- return import("./index-KaUsXGnl.js").then((m3) => m3.wast());
62831
+ return import("./index-Bn3GS5JS.js").then((m3) => m3.wast());
62488
62832
  }
62489
62833
  }),
62490
62834
  /* @__PURE__ */ LanguageDescription.of({
@@ -62492,7 +62836,7 @@ const languages = [
62492
62836
  alias: ["rss", "wsdl", "xsd"],
62493
62837
  extensions: ["xml", "xsl", "xsd", "svg"],
62494
62838
  load() {
62495
- return import("./index-DZEhVUk2.js").then((m3) => m3.xml());
62839
+ return import("./index-D4652IGg.js").then((m3) => m3.xml());
62496
62840
  }
62497
62841
  }),
62498
62842
  /* @__PURE__ */ LanguageDescription.of({
@@ -62500,7 +62844,7 @@ const languages = [
62500
62844
  alias: ["yml"],
62501
62845
  extensions: ["yaml", "yml"],
62502
62846
  load() {
62503
- return import("./index--PROGPVz.js").then((m3) => m3.yaml());
62847
+ return import("./index-D_58AKji.js").then((m3) => m3.yaml());
62504
62848
  }
62505
62849
  }),
62506
62850
  // Legacy modes ported from CodeMirror 5
@@ -63289,13 +63633,13 @@ const languages = [
63289
63633
  name: "Vue",
63290
63634
  extensions: ["vue"],
63291
63635
  load() {
63292
- return import("./index-CqtzDkXg.js").then((m3) => m3.vue());
63636
+ return import("./index-B2rZhF0Y.js").then((m3) => m3.vue());
63293
63637
  }
63294
63638
  }),
63295
63639
  /* @__PURE__ */ LanguageDescription.of({
63296
63640
  name: "Angular Template",
63297
63641
  load() {
63298
- return import("./index-C2ZCh8Gz.js").then((m3) => m3.angular());
63642
+ return import("./index-c05jkXcr.js").then((m3) => m3.angular());
63299
63643
  }
63300
63644
  })
63301
63645
  ];
@@ -66948,7 +67292,7 @@ const CodeMirrorEditor = ({ language: language2, nodeKey, code, focusEmitter })
66948
67292
  try {
66949
67293
  const languageSupport = await languageData2.load();
66950
67294
  extensions.push(languageSupport.extension);
66951
- } catch (e2) {
67295
+ } catch (_e2) {
66952
67296
  console.warn("failed to load language support for", language2);
66953
67297
  }
66954
67298
  }
@@ -67050,7 +67394,7 @@ const codeMirrorPlugin = realmPlugin({
67050
67394
  function buildCodeBlockDescriptor(codeBlockLanguages) {
67051
67395
  return {
67052
67396
  match(language2, meta2) {
67053
- return Boolean(Object.hasOwn(codeBlockLanguages, language2 ?? "")) && !meta2;
67397
+ return Object.hasOwn(codeBlockLanguages, language2 ?? "") && !meta2;
67054
67398
  },
67055
67399
  priority: 1,
67056
67400
  Editor: CodeMirrorEditor
@@ -67310,7 +67654,7 @@ const linkDialogState$ = $$4({ type: "inactive" }, (r2) => {
67310
67654
  });
67311
67655
  r2.pub(createActiveEditorSubscription$, (editor) => {
67312
67656
  return editor.registerCommand(
67313
- Xe,
67657
+ Se,
67314
67658
  (event) => {
67315
67659
  if (event.key === "k" && (IS_APPLE ? event.metaKey : event.ctrlKey) && !r2.getValue(readOnly$)) {
67316
67660
  const selection2 = wr();
@@ -67368,9 +67712,16 @@ const linkDialogState$ = $$4({ type: "inactive" }, (r2) => {
67368
67712
  Lr([node2]);
67369
67713
  node2.select();
67370
67714
  } else {
67371
- linkNode.setURL(url);
67372
- linkNode.setTitle(title);
67373
- updateLinkText(linkNode.getFirstChild(), text2);
67715
+ if (O(linkNode)) {
67716
+ const newLinkNode = d$2(url, { title });
67717
+ newLinkNode.append(Qn(text2));
67718
+ linkNode.replace(newLinkNode);
67719
+ newLinkNode.select();
67720
+ } else {
67721
+ linkNode.setURL(url);
67722
+ linkNode.setTitle(title);
67723
+ updateLinkText(linkNode.getFirstChild(), text2);
67724
+ }
67374
67725
  }
67375
67726
  },
67376
67727
  { discrete: true }
@@ -67430,6 +67781,8 @@ const linkDialogState$ = $$4({ type: "inactive" }, (r2) => {
67430
67781
  _$3(([[selection2], activeEditor, _2, readOnly2]) => {
67431
67782
  if (ar(selection2) && activeEditor && !readOnly2) {
67432
67783
  const node2 = getLinkNodeInSelection(selection2);
67784
+ if (!selection2.isCollapsed())
67785
+ return { type: "inactive" };
67433
67786
  if (node2) {
67434
67787
  const rect = getSelectionRectangle(activeEditor);
67435
67788
  if (!rect) {
@@ -75329,641 +75682,6 @@ const UndoRedo = () => {
75329
75682
  }
75330
75683
  );
75331
75684
  };
75332
- (function() {
75333
- if (typeof document === "undefined") return;
75334
- var id2 = "mdxeditor-base-styles-L1VzZXJz";
75335
- if (document.getElementById(id2)) return;
75336
- var style = document.createElement("style");
75337
- style.id = id2;
75338
- style.textContent = ":root, .light, .light-theme {\n --blue-1: #fbfdff;\n --blue-2: #f4faff;\n --blue-3: #e6f4fe;\n --blue-4: #d5efff;\n --blue-5: #c2e5ff;\n --blue-6: #acd8fc;\n --blue-7: #8ec8f6;\n --blue-8: #5eb1ef;\n --blue-9: #0090ff;\n --blue-10: #0588f0;\n --blue-11: #0d74ce;\n --blue-12: #113264;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --blue-1: color(display-p3 0.986 0.992 0.999);\n --blue-2: color(display-p3 0.96 0.979 0.998);\n --blue-3: color(display-p3 0.912 0.956 0.991);\n --blue-4: color(display-p3 0.853 0.932 1);\n --blue-5: color(display-p3 0.788 0.894 0.998);\n --blue-6: color(display-p3 0.709 0.843 0.976);\n --blue-7: color(display-p3 0.606 0.777 0.947);\n --blue-8: color(display-p3 0.451 0.688 0.917);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.234 0.523 0.912);\n --blue-11: color(display-p3 0.15 0.44 0.84);\n --blue-12: color(display-p3 0.102 0.193 0.379);\n }\n }\n}\n\n.dark, .dark-theme {\n --blue-1: #0d1520;\n --blue-2: #111927;\n --blue-3: #0d2847;\n --blue-4: #003362;\n --blue-5: #004074;\n --blue-6: #104d87;\n --blue-7: #205d9e;\n --blue-8: #2870bd;\n --blue-9: #0090ff;\n --blue-10: #3b9eff;\n --blue-11: #70b8ff;\n --blue-12: #c2e6ff;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .dark, .dark-theme {\n --blue-1: color(display-p3 0.057 0.081 0.122);\n --blue-2: color(display-p3 0.072 0.098 0.147);\n --blue-3: color(display-p3 0.078 0.154 0.27);\n --blue-4: color(display-p3 0.033 0.197 0.37);\n --blue-5: color(display-p3 0.08 0.245 0.441);\n --blue-6: color(display-p3 0.14 0.298 0.511);\n --blue-7: color(display-p3 0.195 0.361 0.6);\n --blue-8: color(display-p3 0.239 0.434 0.72);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.344 0.612 0.973);\n --blue-11: color(display-p3 0.49 0.72 1);\n --blue-12: color(display-p3 0.788 0.898 0.99);\n }\n }\n}\n\n:root, .light, .light-theme {\n --slate-1: #fcfcfd;\n --slate-2: #f9f9fb;\n --slate-3: #f0f0f3;\n --slate-4: #e8e8ec;\n --slate-5: #e0e1e6;\n --slate-6: #d9d9e0;\n --slate-7: #cdced6;\n --slate-8: #b9bbc6;\n --slate-9: #8b8d98;\n --slate-10: #80838d;\n --slate-11: #60646c;\n --slate-12: #1c2024;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --slate-1: color(display-p3 0.988 0.988 0.992);\n --slate-2: color(display-p3 0.976 0.976 0.984);\n --slate-3: color(display-p3 0.94 0.941 0.953);\n --slate-4: color(display-p3 0.908 0.909 0.925);\n --slate-5: color(display-p3 0.88 0.881 0.901);\n --slate-6: color(display-p3 0.85 0.852 0.876);\n --slate-7: color(display-p3 0.805 0.808 0.838);\n --slate-8: color(display-p3 0.727 0.733 0.773);\n --slate-9: color(display-p3 0.547 0.553 0.592);\n --slate-10: color(display-p3 0.503 0.512 0.549);\n --slate-11: color(display-p3 0.379 0.392 0.421);\n --slate-12: color(display-p3 0.113 0.125 0.14);\n }\n }\n}\n\n.dark, .dark-theme {\n --slate-1: #111113;\n --slate-2: #18191b;\n --slate-3: #212225;\n --slate-4: #272a2d;\n --slate-5: #2e3135;\n --slate-6: #363a3f;\n --slate-7: #43484e;\n --slate-8: #5a6169;\n --slate-9: #696e77;\n --slate-10: #777b84;\n --slate-11: #b0b4ba;\n --slate-12: #edeef0;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n .dark, .dark-theme {\n --slate-1: color(display-p3 0.067 0.067 0.074);\n --slate-2: color(display-p3 0.095 0.098 0.105);\n --slate-3: color(display-p3 0.13 0.135 0.145);\n --slate-4: color(display-p3 0.156 0.163 0.176);\n --slate-5: color(display-p3 0.183 0.191 0.206);\n --slate-6: color(display-p3 0.215 0.226 0.244);\n --slate-7: color(display-p3 0.265 0.28 0.302);\n --slate-8: color(display-p3 0.357 0.381 0.409);\n --slate-9: color(display-p3 0.415 0.431 0.463);\n --slate-10: color(display-p3 0.469 0.483 0.514);\n --slate-11: color(display-p3 0.692 0.704 0.728);\n --slate-12: color(display-p3 0.93 0.933 0.94);\n }\n }\n}\n\n:root, .light, .light-theme {\n --grass-1: #fbfefb;\n --grass-2: #f5fbf5;\n --grass-3: #e9f6e9;\n --grass-4: #daf1db;\n --grass-5: #c9e8ca;\n --grass-6: #b2ddb5;\n --grass-7: #94ce9a;\n --grass-8: #65ba74;\n --grass-9: #46a758;\n --grass-10: #3e9b4f;\n --grass-11: #2a7e3b;\n --grass-12: #203c25;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --grass-1: color(display-p3 0.986 0.996 0.985);\n --grass-2: color(display-p3 0.966 0.983 0.964);\n --grass-3: color(display-p3 0.923 0.965 0.917);\n --grass-4: color(display-p3 0.872 0.94 0.865);\n --grass-5: color(display-p3 0.811 0.908 0.802);\n --grass-6: color(display-p3 0.733 0.864 0.724);\n --grass-7: color(display-p3 0.628 0.803 0.622);\n --grass-8: color(display-p3 0.477 0.72 0.482);\n --grass-9: color(display-p3 0.38 0.647 0.378);\n --grass-10: color(display-p3 0.344 0.598 0.342);\n --grass-11: color(display-p3 0.263 0.488 0.261);\n --grass-12: color(display-p3 0.151 0.233 0.153);\n }\n }\n}\n\n:root, .light, .light-theme {\n --cyan-1: #fafdfe;\n --cyan-2: #f2fafb;\n --cyan-3: #def7f9;\n --cyan-4: #caf1f6;\n --cyan-5: #b5e9f0;\n --cyan-6: #9ddde7;\n --cyan-7: #7dcedc;\n --cyan-8: #3db9cf;\n --cyan-9: #00a2c7;\n --cyan-10: #0797b9;\n --cyan-11: #107d98;\n --cyan-12: #0d3c48;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --cyan-1: color(display-p3 0.982 0.992 0.996);\n --cyan-2: color(display-p3 0.955 0.981 0.984);\n --cyan-3: color(display-p3 0.888 0.965 0.975);\n --cyan-4: color(display-p3 0.821 0.941 0.959);\n --cyan-5: color(display-p3 0.751 0.907 0.935);\n --cyan-6: color(display-p3 0.671 0.862 0.9);\n --cyan-7: color(display-p3 0.564 0.8 0.854);\n --cyan-8: color(display-p3 0.388 0.715 0.798);\n --cyan-9: color(display-p3 0.282 0.627 0.765);\n --cyan-10: color(display-p3 0.264 0.583 0.71);\n --cyan-11: color(display-p3 0.08 0.48 0.63);\n --cyan-12: color(display-p3 0.108 0.232 0.277);\n }\n }\n}\n\n:root, .light, .light-theme {\n --amber-1: #fefdfb;\n --amber-2: #fefbe9;\n --amber-3: #fff7c2;\n --amber-4: #ffee9c;\n --amber-5: #fbe577;\n --amber-6: #f3d673;\n --amber-7: #e9c162;\n --amber-8: #e2a336;\n --amber-9: #ffc53d;\n --amber-10: #ffba18;\n --amber-11: #ab6400;\n --amber-12: #4f3422;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --amber-1: color(display-p3 0.995 0.992 0.985);\n --amber-2: color(display-p3 0.994 0.986 0.921);\n --amber-3: color(display-p3 0.994 0.969 0.782);\n --amber-4: color(display-p3 0.989 0.937 0.65);\n --amber-5: color(display-p3 0.97 0.902 0.527);\n --amber-6: color(display-p3 0.936 0.844 0.506);\n --amber-7: color(display-p3 0.89 0.762 0.443);\n --amber-8: color(display-p3 0.85 0.65 0.3);\n --amber-9: color(display-p3 1 0.77 0.26);\n --amber-10: color(display-p3 0.959 0.741 0.274);\n --amber-11: color(display-p3 0.64 0.4 0);\n --amber-12: color(display-p3 0.294 0.208 0.145);\n }\n }\n}\n\n:root, .light, .light-theme {\n --red-1: #fffcfc;\n --red-2: #fff7f7;\n --red-3: #feebec;\n --red-4: #ffdbdc;\n --red-5: #ffcdce;\n --red-6: #fdbdbe;\n --red-7: #f4a9aa;\n --red-8: #eb8e90;\n --red-9: #e5484d;\n --red-10: #dc3e42;\n --red-11: #ce2c31;\n --red-12: #641723;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, .light, .light-theme {\n --red-1: color(display-p3 0.998 0.989 0.988);\n --red-2: color(display-p3 0.995 0.971 0.971);\n --red-3: color(display-p3 0.985 0.925 0.925);\n --red-4: color(display-p3 0.999 0.866 0.866);\n --red-5: color(display-p3 0.984 0.812 0.811);\n --red-6: color(display-p3 0.955 0.751 0.749);\n --red-7: color(display-p3 0.915 0.675 0.672);\n --red-8: color(display-p3 0.872 0.575 0.572);\n --red-9: color(display-p3 0.83 0.329 0.324);\n --red-10: color(display-p3 0.798 0.294 0.285);\n --red-11: color(display-p3 0.744 0.234 0.222);\n --red-12: color(display-p3 0.36 0.115 0.143);\n }\n }\n}\n\n/** Code mirror */\n\n.mdxeditor .cm-editor {\n --sp-font-mono: var(--font-mono);\n --sp-font-body: var(--font-body);\n padding: var(--sp-space-4) 0;\n }\n\n.mdxeditor .sp-editor .cm-editor {\n padding-bottom: 0;\n }\n\n.mdxeditor .cm-scroller {\n padding: 0 !important;\n }\n\n.mdxeditor .cm-focused {\n outline: none;\n }\n\n.mdxeditor .sp-wrapper {\n overflow: hidden;\n }\n\n.mdxeditor .sp-layout {\n border: none;\n }\n\n.mdxeditor .sp-cm pre {\n white-space: break-spaces;\n word-break: break-word;\n overflow-wrap: anywhere;\n flex-shrink: 1;\n }\n\n/** Diff viewer */\n\n.mdxeditor .cm-mergeView .cm-scroller {\n font-family: var(--font-mono);\n line-height: 1.3rem;\n font-size: var(--text-xs);\n }\n\n/** Diff viewer */\n\n.mdxeditor .cm-sourceView .cm-scroller {\n font-family: var(--font-mono);\n line-height: 1.3rem;\n font-size: var(--text-xs);\n }\n\n.mdxeditor .cm-gutters {\n background: transparent;\n font-size: var(--text-xxs);\n }\n\n.mdxeditor .cm-activeLine {\n background: transparent;\n }\n\n.mdxeditor .cm-tooltip-autocomplete {\n background: var(--baseBgSubtle);\n }\n\n.mdxeditor hr.selected[data-lexical-decorator=true] {\n outline: 2px solid highlight;\n }\n._editorRoot_1e2ox_53 {\n --accentBase: var(--blue-1);\n --accentBgSubtle: var(--blue-2);\n --accentBg: var(--blue-3);\n --accentBgHover: var(--blue-4);\n --accentBgActive: var(--blue-5);\n --accentLine: var(--blue-6);\n --accentBorder: var(--blue-7);\n --accentBorderHover: var(--blue-8);\n --accentSolid: var(--blue-9);\n --accentSolidHover: var(--blue-10);\n --accentText: var(--blue-11);\n --accentTextContrast: var(--blue-12);\n\n --basePageBg: white;\n --baseBase: var(--slate-1);\n --baseBgSubtle: var(--slate-2);\n --baseBg: var(--slate-3);\n --baseBgHover: var(--slate-4);\n --baseBgActive: var(--slate-5);\n --baseLine: var(--slate-6);\n --baseBorder: var(--slate-7);\n --baseBorderHover: var(--slate-8);\n --baseSolid: var(--slate-9);\n --baseSolidHover: var(--slate-10);\n --baseText: var(--slate-11);\n --baseTextContrast: var(--slate-12);\n\n --admonitionTipBg: var(--cyan-4);\n --admonitionTipBorder: var(--cyan-8);\n\n --admonitionInfoBg: var(--grass-4);\n --admonitionInfoBorder: var(--grass-8);\n\n --admonitionCautionBg: var(--amber-4);\n --admonitionCautionBorder: var(--amber-8);\n\n --admonitionDangerBg: var(--red-4);\n --admonitionDangerBorder: var(--red-8);\n\n --admonitionNoteBg: var(--slate-4);\n --admonitionNoteBorder: var(--slate-8);\n\n --error-color: var(--red-10);\n\n --spacing-0: 0px;\n --spacing-px: 1px;\n --spacing-0_5: 0.125rem;\n --spacing-1: 0.25rem;\n --spacing-1_5: 0.375rem;\n --spacing-2: 0.5rem;\n --spacing-2_5: 0.625rem;\n --spacing-3: 0.75rem;\n --spacing-3_5: 0.875rem;\n --spacing-4: 1rem;\n --spacing-5: 1.25rem;\n --spacing-6: 1.5rem;\n --spacing-7: 1.75rem;\n --spacing-8: 2rem;\n --spacing-9: 2.25rem;\n --spacing-10: 2.5rem;\n --spacing-11: 2.75rem;\n --spacing-12: 3rem;\n --spacing-14: 3.5rem;\n --spacing-16: 4rem;\n --spacing-20: 5rem;\n --spacing-24: 6rem;\n --spacing-28: 7rem;\n --spacing-32: 8rem;\n --spacing-36: 9rem;\n --spacing-40: 10rem;\n --spacing-44: 11rem;\n --spacing-48: 12rem;\n --spacing-52: 13rem;\n --spacing-56: 14rem;\n --spacing-60: 15rem;\n --spacing-64: 16rem;\n --spacing-72: 18rem;\n --spacing-80: 20rem;\n --spacing-96: 24rem;\n\n --radius-none: 0px;\n --radius-small: var(--spacing-0_5);\n --radius-base: var(--spacing-1);\n --radius-medium: var(--spacing-1_5);\n --radius-large: var(--spacing-2);\n --radius-extra-large: var(--spacing-3);\n --radius-full: 9999px;\n\n --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;\n --font-body: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue',\n sans-serif;\n\n --text-base: 1rem;\n --text-sm: 0.875rem;\n --text-xs: 0.75rem;\n --text-xxs: 0.6rem;\n\n font-family: var(--font-body);\n color: var(--baseText);\n}\n\n._editorWrapper_1e2ox_155 {\n}\n\n._nestedListItem_1e2ox_158 {\n list-style: none;\n}\n\n._toolbarRoot_1e2ox_162 {\n z-index: 2;\n display: flex;\n flex-direction: row;\n gap: var(--spacing-1);\n border-radius: var(--radius-medium);\n padding: var(--spacing-1_5);\n align-items: center;\n overflow-x: auto;\n position: sticky;\n top: 0;\n background-color: var(--baseBg);\n width: inherit;\n}\n\n._toolbarRoot_1e2ox_162 div[role='separator'] {\n margin: var(--spacing-2) var(--spacing-1);\n border-left: 1px solid var(--baseBorder);\n border-right: 1px solid var(--baseBase);\n height: var(--spacing-4);\n }\n\n._toolbarRoot_1e2ox_162 svg {\n color: var(--baseTextContrast);\n display: block;\n }\n\n._readOnlyToolbarRoot_1e2ox_189 {\n pointer-events: none;\n background: var(--baseBase);\n}\n\n._readOnlyToolbarRoot_1e2ox_189 > div {\n opacity: 0.5;\n }\n\n._toolbarModeSwitch_1e2ox_198 {\n opacity: 1 !important;\n margin-left: auto;\n align-self: stretch;\n align-items: stretch;\n display: flex;\n border: 1px solid var(--baseBg);\n border-radius: var(--radius-medium);\n font-size: var(--text-xs);\n}\n\n._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208 {\n padding-inline-end: var(--spacing-4);\n padding-inline-start: var(--spacing-4);\n }\n\n._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:active,\n ._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208[data-state='on'] {\n background-color: var(--baseBorder);\n }\n\n._toolbarGroupOfGroups_1e2ox_219 {\n display: flex;\n margin: 0 var(--spacing-1);\n}\n\n._toolbarToggleSingleGroup_1e2ox_224:first-of-type ._toolbarToggleItem_1e2ox_208:only-child,\n._toolbarToggleSingleGroup_1e2ox_224:only-child ._toolbarToggleItem_1e2ox_208:first-child,\n._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:first-child {\n border-top-left-radius: var(--radius-base);\n border-bottom-left-radius: var(--radius-base);\n}\n\n._toolbarToggleSingleGroup_1e2ox_224:last-of-type ._toolbarToggleItem_1e2ox_208:only-child,\n._toolbarToggleSingleGroup_1e2ox_224:only-child ._toolbarToggleItem_1e2ox_208:last-child,\n._toolbarModeSwitch_1e2ox_198 ._toolbarToggleItem_1e2ox_208:last-child {\n border-top-right-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n}\n\n._toolbarToggleItem_1e2ox_208,\n._toolbarButton_1e2ox_239 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-0_5);\n}\n\n@media (hover: hover) {\n ._toolbarToggleItem_1e2ox_208:hover, ._toolbarButton_1e2ox_239:hover {\n background-color: var(--baseBgActive);\n }\n }\n\n._toolbarToggleItem_1e2ox_208:active svg, ._toolbarButton_1e2ox_239:active svg {\n transform: translate(1px, 1px);\n }\n\n._toolbarToggleItem_1e2ox_208[data-state='on'],\n ._toolbarButton_1e2ox_239[data-state='on'],\n ._toolbarToggleItem_1e2ox_208:active,\n ._toolbarButton_1e2ox_239:active {\n color: var(--baseTextContrast);\n background-color: var(--baseBgActive);\n }\n\n._toolbarToggleItem_1e2ox_208[data-disabled], ._toolbarButton_1e2ox_239[data-disabled] {\n pointer-events: none;\n }\n\n._toolbarToggleItem_1e2ox_208[data-disabled] svg, ._toolbarButton_1e2ox_239[data-disabled] svg {\n color: var(--baseBorderHover);\n }\n\n._toolbarButton_1e2ox_239 {\n border-radius: var(--radius-base);\n}\n\n._toolbarButton_1e2ox_239 + ._toolbarButton_1e2ox_239 {\n margin-left: var(--spacing-1);\n}\n\n._activeToolbarButton_1e2ox_275 {\n color: var(--accentText);\n}\n\n._toolbarToggleSingleGroup_1e2ox_224 {\n display: flex;\n align-items: center;\n white-space: nowrap;\n}\n\n._toolbarNodeKindSelectContainer_1e2ox_285,\n._toolbarButtonDropdownContainer_1e2ox_286,\n._toolbarCodeBlockLanguageSelectContent_1e2ox_287,\n._selectContainer_1e2ox_288 {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n z-index: 3;\n width: var(--spacing-36);\n border-bottom-left-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n background-color: var(--basePageBg);\n font-size: var(--text-sm);\n}\n\n._toolbarButtonDropdownContainer_1e2ox_286 {\n border-top-right-radius: var(--radius-base);\n}\n\n._toolbarButtonDropdownContainer_1e2ox_286 ._selectItem_1e2ox_301:first-child {\n border-top-right-radius: var(--radius-base);\n }\n\n._toolbarNodeKindSelectTrigger_1e2ox_306,\n._toolbarButtonSelectTrigger_1e2ox_307,\n._selectTrigger_1e2ox_308 {\n border: 0;\n background-color: transparent;\n display: flex;\n color: inherit;\n align-items: center;\n width: var(--spacing-36);\n padding: var(--spacing-0_5) var(--spacing-1);\n padding-inline-start: var(--spacing-2);\n border-radius: var(--radius-medium);\n white-space: nowrap;\n flex-wrap: nowrap;\n font-size: var(--text-sm);\n background-color: var(--basePageBg);\n margin: 0 var(--spacing-1);\n}\n\n._toolbarNodeKindSelectTrigger_1e2ox_306[data-state='open'], ._toolbarButtonSelectTrigger_1e2ox_307[data-state='open'], ._selectTrigger_1e2ox_308[data-state='open'] {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n border-bottom-right-radius: var(--radius-none);\n border-bottom-left-radius: var(--radius-none);\n }\n\n._selectTrigger_1e2ox_308[data-placeholder] > span:first-child {\n color: var(--baseBorderHover);\n}\n\n/** used in the sandpack */\n._toolbarButtonSelectTrigger_1e2ox_307 {\n width: auto;\n padding-inline-start: var(--spacing-2);\n padding-inline-end: var(--spacing-1);\n padding-block: var(--spacing-0_5);\n}\n\n._toolbarCodeBlockLanguageSelectTrigger_1e2ox_343,\n._toolbarCodeBlockLanguageSelectContent_1e2ox_287 {\n width: var(--spacing-48);\n}\n\n._toolbarNodeKindSelectItem_1e2ox_348,\n._selectItem_1e2ox_301 {\n cursor: default;\n display: flex;\n padding: var(--spacing-2);\n}\n\n._toolbarNodeKindSelectItem_1e2ox_348[data-highlighted], ._selectItem_1e2ox_301[data-highlighted] {\n background-color: var(--baseBg);\n }\n\n._toolbarNodeKindSelectItem_1e2ox_348[data-state='checked'], ._selectItem_1e2ox_301[data-state='checked'] {\n color: var(--baseTextContrast);\n background-color: var(--baseBg);\n }\n\n._toolbarNodeKindSelectItem_1e2ox_348[data-highlighted], ._selectItem_1e2ox_301[data-highlighted] {\n outline: none;\n }\n\n._toolbarNodeKindSelectItem_1e2ox_348:last-child, ._selectItem_1e2ox_301:last-child {\n border-bottom-left-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n }\n\n._toolbarNodeKindSelectDropdownArrow_1e2ox_373,\n._selectDropdownArrow_1e2ox_374 {\n margin-left: auto;\n display: flex;\n align-items: center;\n}\n\n._contentEditable_1e2ox_380 {\n box-sizing: border-box;\n width: 100%;\n color: var(--baseTextContrast);\n\n padding: var(--spacing-3);\n}\n\n._contentEditable_1e2ox_380:focus {\n outline: none;\n }\n\n._codeMirrorWrapper_1e2ox_392 {\n margin-bottom: var(--spacing-5);\n border: 1px solid var(--baseLine);\n border-radius: var(--radius-medium);\n overflow: hidden;\n padding: 0.8rem;\n position: relative;\n}\n\n._sandPackWrapper_1e2ox_401 {\n margin-bottom: var(--spacing-5);\n border: 1px solid var(--baseLine);\n border-radius: var(--radius-medium);\n overflow: hidden;\n position: relative;\n}\n\n._codeMirrorToolbar_1e2ox_409 {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n gap: var(--spacing-1);\n padding: var(--spacing-1);\n z-index: 1;\n background-color: var(--baseBase);\n border-bottom-left-radius: var(--radius-base);\n}\n\n._frontmatterWrapper_1e2ox_413 {\n border-radius: var(--radius-medium);\n padding: var(--spacing-3);\n background-color: var(--baseBgSubtle);\n}\n\n._frontmatterWrapper_1e2ox_413[data-expanded='true'] {\n margin-bottom: var(--spacing-10);\n }\n\n._frontmatterToggleButton_1e2ox_423 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n display: flex;\n align-items: center;\n gap: var(--spacing-1);\n font-size: var(--text-sm);\n}\n\n._propertyPanelTitle_1e2ox_431 {\n font-size: var(--text-xs);\n font-weight: 400;\n margin: 0;\n padding-top: var(--spacing-2);\n padding-left: var(--spacing-2);\n}\n\n._propertyEditorTable_1e2ox_439 {\n table-layout: fixed;\n border-spacing: var(--spacing-2);\n}\n\n._propertyEditorTable_1e2ox_439 th {\n text-align: left;\n font-size: var(--text-sm);\n padding: var(--spacing-2) var(--spacing-3);\n }\n\n._propertyEditorTable_1e2ox_439 col:nth-child(1) {\n width: 30%;\n }\n\n._propertyEditorTable_1e2ox_439 col:nth-child(2) {\n width: 70%;\n }\n\n._propertyEditorTable_1e2ox_439 td:last-child ._iconButton_1e2ox_457 {\n margin-left: var(--spacing-4);\n margin-right: var(--spacing-4);\n }\n\n._propertyEditorTable_1e2ox_439 ._readOnlyColumnCell_1e2ox_462 {\n padding-left: 0;\n }\n\n._propertyEditorLabelCell_1e2ox_467 {\n font-weight: 400;\n}\n\n._readOnlyColumnCell_1e2ox_462 {\n padding-left: 0;\n}\n\n._buttonsFooter_1e2ox_475 {\n display: flex;\n justify-content: flex-end;\n gap: var(--spacing-2);\n}\n\n._propertyEditorInput_1e2ox_481 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 100%;\n padding: var(--spacing-2) var(--spacing-3);\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBase);\n font-size: var(--text-sm);\n}\n\n._iconButton_1e2ox_457 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n color: var(--baseText);\n}\n\n@media (hover: hover) {\n ._iconButton_1e2ox_457:hover {\n color: var(--baseTextContrast);\n }\n }\n\n._iconButton_1e2ox_457:disabled,\n ._iconButton_1e2ox_457:disabled:hover {\n color: var(--baseLine);\n }\n\n._primaryButton_1e2ox_507,\n._secondaryButton_1e2ox_508 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-2) var(--spacing-3);\n border: 1px solid var(--accentBorder);\n background-color: var(--accentSolidHover);\n color: var(--baseBase);\n font-size: var(--text-xs);\n border-radius: var(--radius-medium);\n}\n\n._primaryButton_1e2ox_507:disabled, ._secondaryButton_1e2ox_508:disabled {\n background: var(--accentLine);\n border-color: var(--accentBg);\n }\n\n._smallButton_1e2ox_523 {\n font-size: var(--text-xs);\n padding: var(--spacing-1) var(--spacing-2);\n border-radius: var(--radius-base);\n}\n\n._secondaryButton_1e2ox_508 {\n border: 1px solid var(--baseBorder);\n background-color: var(--baseSolidHover);\n color: var(--baseBase);\n}\n\n._dialogForm_1e2ox_535 {\n display: flex;\n flex-direction: row;\n gap: var(--spacing-2);\n}\n\n._linkDialogEditForm_1e2ox_541 {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n gap: var(--spacing-2);\n padding: 0;\n}\n\n._linkDialogInputContainer_1e2ox_549 {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n._linkDialogInputWrapper_1e2ox_555 {\n display: flex;\n align-items: center;\n background-color: var(--baseBase);\n\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n}\n\n._linkDialogInputWrapper_1e2ox_555[data-visible-dropdown='true'] {\n border-bottom-left-radius: var(--radius-none);\n border-bottom-right-radius: var(--radius-none);\n border-bottom-width: 0;\n }\n\n._linkDialogInputWrapper_1e2ox_555 > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding-right: var(--spacing-2);\n }\n\n._linkDialogInput_1e2ox_549,\n._dialogInput_1e2ox_576 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 20rem;\n padding: var(--spacing-2) var(--spacing-3);\n font-size: var(--text-sm);\n}\n\n._linkDialogInput_1e2ox_549::-moz-placeholder, ._dialogInput_1e2ox_576::-moz-placeholder {\n color: var(--baseBorder);\n }\n\n._linkDialogInput_1e2ox_549::placeholder, ._dialogInput_1e2ox_576::placeholder {\n color: var(--baseBorder);\n }\n\n._linkDialogAnchor_1e2ox_587 {\n position: fixed;\n background-color: highlight;\n z-index: -1;\n}\n\n._linkDialogAnchor_1e2ox_587[data-visible='true'] {\n visibility: visible;\n }\n\n._linkDialogAnchor_1e2ox_587[data-visible='false'] {\n visibility: hidden;\n }\n\n._linkDialogPopoverContent_1e2ox_601,\n._tableColumnEditorPopoverContent_1e2ox_602,\n._dialogContent_1e2ox_603 {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n display: flex;\n align-items: center;\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n border: 1px solid var(--baseBg);\n background-color: var(--basePageBg);\n padding: var(--spacing-1) var(--spacing-1);\n font-size: var(--text-sm);\n}\n\n._largeDialogContent_1e2ox_615 {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBgSubtle);\n padding: var(--spacing-4);\n font-size: var(--text-sm);\n}\n\n._dialogTitle_1e2ox_625 {\n font-size: var(--text-base);\n font-weight: 600;\n padding-left: var(--spacing-2);\n}\n\n._dialogCloseButton_1e2ox_631 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n position: absolute;\n top: 10px;\n right: 10px;\n}\n\n._popoverContent_1e2ox_638 {\n filter: drop-shadow(0 2px 2px rgb(0 0 0 / 0.2));\n display: flex;\n align-items: center;\n gap: var(--spacing-0_5);\n border-radius: var(--radius-medium);\n background-color: var(--baseBgSubtle);\n padding: var(--spacing-2) var(--spacing-2);\n font-size: var(--text-sm);\n z-index: 1;\n}\n\n._popoverArrow_1e2ox_650 {\n fill: var(--basePageBg);\n}\n\n._linkDialogPreviewAnchor_1e2ox_654 {\n margin-right: var(--spacing-1);\n display: flex;\n align-items: center;\n color: var(--accentText);\n text-decoration: none;\n\n border: 1px solid transparent;\n}\n\n@media (hover: hover) {\n ._linkDialogPreviewAnchor_1e2ox_654:hover {\n color: var(--accentSolidHover);\n }\n }\n\n._linkDialogPreviewAnchor_1e2ox_654 span {\n max-width: 14rem;\n overflow-x: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n._tooltipTrigger_1e2ox_677 {\n align-self: center;\n}\n\n._tooltipContent_1e2ox_681 {\n z-index: 2;\n position: relative;\n border-radius: var(--radius-medium);\n padding: var(--spacing-1) var(--spacing-2);\n font-size: var(--text-xs);\n background-color: var(--baseText);\n color: var(--baseBase);\n}\n\n._tooltipContent_1e2ox_681 svg {\n fill: var(--baseText);\n }\n\n._actionButton_1e2ox_695 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n padding: var(--spacing-1) var(--spacing-1);\n border-radius: var(--radius-medium);\n color: var(--baseTextContrast);\n}\n\n._actionButton_1e2ox_695 svg {\n display: block;\n }\n\n@media (hover: hover) {\n ._actionButton_1e2ox_695:hover {\n background-color: var(--baseBg);\n }\n }\n\n._actionButton_1e2ox_695:active svg {\n transform: translate(1px, 1px);\n }\n\n._actionButton_1e2ox_695[data-state='on'],\n ._actionButton_1e2ox_695:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n._primaryActionButton_1e2ox_702 {\n background-color: var(--accentSolid);\n color: var(--baseBase);\n}\n\n@media (hover: hover) {\n ._primaryActionButton_1e2ox_702:hover {\n background-color: var(--accentSolidHover);\n color: var(--baseBase);\n }\n }\n\n._tableEditor_1e2ox_714 {\n table-layout: fixed;\n width: 100%;\n height: 100%;\n border-spacing: 0;\n border-collapse: collapse;\n}\n\n._tableEditor_1e2ox_714 thead > tr > th {\n text-align: right;\n }\n\n._tableEditor_1e2ox_714 > tbody > tr > td:not(._toolCell_1e2ox_725),\n ._tableEditor_1e2ox_714 > tbody > tr > th:not(._toolCell_1e2ox_725):not([data-tool-cell='true']) {\n border: 1px solid var(--baseBgActive);\n padding: var(--spacing-1) var(--spacing-2);\n white-space: normal;\n }\n\n:is(._tableEditor_1e2ox_714 > tbody > tr > td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714 > tbody > tr > th:not(._toolCell_1e2ox_725):not([data-tool-cell='true'])) > div {\n outline: none;\n }\n\n:is(._tableEditor_1e2ox_714 > tbody > tr > td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714 > tbody > tr > th:not(._toolCell_1e2ox_725):not([data-tool-cell='true'])) > div > p {\n margin: 0;\n }\n\n[data-active='true']:is(._tableEditor_1e2ox_714 > tbody > tr > td:not(._toolCell_1e2ox_725),._tableEditor_1e2ox_714 > tbody > tr > th:not(._toolCell_1e2ox_725):not([data-tool-cell='true'])) {\n outline: solid 1px var(--baseSolid);\n }\n\n._tableEditor_1e2ox_714 ._tableColumnEditorTrigger_1e2ox_744,\n ._tableEditor_1e2ox_714 ._tableRowEditorTrigger_1e2ox_745,\n ._tableEditor_1e2ox_714 ._addRowButton_1e2ox_746,\n ._tableEditor_1e2ox_714 ._addColumnButton_1e2ox_747,\n ._tableEditor_1e2ox_714 ._iconButton_1e2ox_457 {\n opacity: 0.15;\n }\n\n@media (hover: hover) {\n ._tableEditor_1e2ox_714:hover ._tableColumnEditorTrigger_1e2ox_744,\n ._tableEditor_1e2ox_714:hover ._tableRowEditorTrigger_1e2ox_745,\n ._tableEditor_1e2ox_714:hover ._addRowButton_1e2ox_746,\n ._tableEditor_1e2ox_714:hover ._addColumnButton_1e2ox_747,\n ._tableEditor_1e2ox_714:hover ._iconButton_1e2ox_457 {\n opacity: 0.3;\n }\n\n ._tableEditor_1e2ox_714:hover ._tableColumnEditorTrigger_1e2ox_744:hover, ._tableEditor_1e2ox_714:hover ._tableRowEditorTrigger_1e2ox_745:hover, ._tableEditor_1e2ox_714:hover ._addRowButton_1e2ox_746:hover, ._tableEditor_1e2ox_714:hover ._addColumnButton_1e2ox_747:hover, ._tableEditor_1e2ox_714:hover ._iconButton_1e2ox_457:hover {\n opacity: 1;\n }\n }\n\n._toolCell_1e2ox_725 {\n text-align: right;\n}\n\n._toolCell_1e2ox_725 button {\n margin: auto;\n display: block;\n }\n\n._tableColumnEditorTrigger_1e2ox_744 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n padding: var(--spacing-1);\n border-radius: var(--radius-full);\n opacity: 0.2;\n}\n\n._tableColumnEditorTrigger_1e2ox_744 svg {\n display: block;\n }\n\n@media (hover: hover) {\n ._tableColumnEditorTrigger_1e2ox_744:hover {\n background-color: var(--baseBg);\n }\n }\n\n._tableColumnEditorTrigger_1e2ox_744:active svg {\n transform: translate(1px, 1px);\n }\n\n._tableColumnEditorTrigger_1e2ox_744[data-state='on'],\n ._tableColumnEditorTrigger_1e2ox_744:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n._tableColumnEditorTrigger_1e2ox_744[data-active='true'] {\n opacity: 1 !important;\n }\n\n._tableColumnEditorToolbar_1e2ox_789 {\n display: flex;\n}\n\n._tableColumnEditorToolbar_1e2ox_789 > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n }\n\n._tableColumnEditorToolbar_1e2ox_789 > button svg {\n display: block;\n }\n\n@media (hover: hover) {\n ._tableColumnEditorToolbar_1e2ox_789 > button:hover {\n background-color: var(--baseBg);\n }\n }\n\n._tableColumnEditorToolbar_1e2ox_789 > button:active svg {\n transform: translate(1px, 1px);\n }\n\n._tableColumnEditorToolbar_1e2ox_789 > button[data-state='on'],\n ._tableColumnEditorToolbar_1e2ox_789 > button:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n._tableColumnEditorToolbar_1e2ox_789 [role='separator'] {\n margin-left: var(--spacing-1);\n margin-right: var(--spacing-1);\n }\n\n._toggleGroupRoot_1e2ox_802 {\n display: inline-flex;\n}\n\n._toggleGroupRoot_1e2ox_802 button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n }\n\n._toggleGroupRoot_1e2ox_802 button svg {\n display: block;\n }\n\n@media (hover: hover) {\n ._toggleGroupRoot_1e2ox_802 button:hover {\n background-color: var(--baseBg);\n }\n }\n\n._toggleGroupRoot_1e2ox_802 button:active svg {\n transform: translate(1px, 1px);\n }\n\n._toggleGroupRoot_1e2ox_802 button[data-state='on'],\n ._toggleGroupRoot_1e2ox_802 button:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n._toggleGroupRoot_1e2ox_802 button:first-child {\n border-top-left-radius: var(--radius-base);\n border-bottom-left-radius: var(--radius-base);\n }\n\n._toggleGroupRoot_1e2ox_802 button:last-child {\n border-top-right-radius: var(--radius-base);\n border-bottom-right-radius: var(--radius-base);\n }\n\n._tableToolsColumn_1e2ox_820 {\n width: 2rem;\n}\n\n._tableToolsColumn_1e2ox_820 button {\n margin: auto;\n display: block;\n }\n\n._leftAlignedCell_1e2ox_829 {\n text-align: left;\n}\n\n._rightAlignedCell_1e2ox_833 {\n text-align: right;\n}\n\n._centeredCell_1e2ox_837 {\n text-align: center;\n}\n\n._addColumnButton_1e2ox_747,\n._addRowButton_1e2ox_746 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding: var(--spacing-1);\n color: var(--baseTextContrast);\n background-color: var(--baseBase);\n\n display: flex;\n align-items: center;\n}\n\n._addColumnButton_1e2ox_747 svg, ._addRowButton_1e2ox_746 svg {\n display: block;\n }\n\n@media (hover: hover) {\n ._addColumnButton_1e2ox_747:hover, ._addRowButton_1e2ox_746:hover {\n background-color: var(--baseBg);\n }\n }\n\n._addColumnButton_1e2ox_747:active svg, ._addRowButton_1e2ox_746:active svg {\n transform: translate(1px, 1px);\n }\n\n._addColumnButton_1e2ox_747[data-state='on'],\n ._addRowButton_1e2ox_746[data-state='on'],\n ._addColumnButton_1e2ox_747:active,\n ._addRowButton_1e2ox_746:active {\n background-color: var(--baseBg);\n color: var(--baseTextContrast);\n }\n\n._addColumnButton_1e2ox_747 svg, ._addRowButton_1e2ox_746 svg {\n margin: auto;\n }\n\n._addRowButton_1e2ox_746 {\n width: 100%;\n margin-top: var(--spacing-px);\n box-sizing: border-box;\n border-bottom-right-radius: var(--radius-medium);\n border-bottom-left-radius: var(--radius-medium);\n}\n\n._addColumnButton_1e2ox_747 {\n margin-left: var(--spacing-px);\n height: 100%;\n border-top-right-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n}\n\n/** Dialog */\n._dialogOverlay_1e2ox_870 {\n position: fixed;\n inset: 0;\n animation: _overlayShow_1e2ox_1 150ms cubic-bezier(0.16, 1, 0.3, 1);\n background-color: var(--baseBase);\n z-index: 51;\n opacity: 0.5;\n}\n\n._dialogContent_1e2ox_603,\n._largeDialogContent_1e2ox_615 {\n position: fixed;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n animation: _contentShow_1e2ox_1 150ms cubic-bezier(0.16, 1, 0.3, 1);\n z-index: 52;\n}\n\n._dialogContent_1e2ox_603:focus,\n._largeDialogContent_1e2ox_615:focus {\n outline: none;\n}\n\n@keyframes _overlayShow_1e2ox_1 {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 0.5;\n }\n}\n\n@keyframes _contentShow_1e2ox_1 {\n from {\n opacity: 0;\n transform: translate(-50%, -48%) scale(0.96);\n }\n\n to {\n opacity: 1;\n transform: translate(-50%, -50%) scale(1);\n }\n}\n\n._focusedImage_1e2ox_916 {\n outline: highlight solid 2px;\n}\n\n._imageWrapper_1e2ox_920 {\n display: inline-block;\n position: relative;\n}\n\n._imageWrapper_1e2ox_920[draggable='true'] {\n cursor: move;\n /* fallback if grab cursor is unsupported */\n cursor: grab;\n cursor: -webkit-grab;\n}\n\n._editImageToolbar_1e2ox_933 {\n position: absolute;\n right: 0;\n top: 0;\n display: flex;\n gap: var(--spacing-1);\n padding: var(--spacing-1);\n z-index: 1;\n background-color: var(--baseBase);\n border-bottom-left-radius: var(--radius-base);\n}\n\n._editImageButton_1e2ox_937 svg {\n display: block;\n }\n\n._inlineEditor_1e2ox_943 {\n display: inline-flex;\n border-radius: var(--radius-medium);\n padding: var(--spacing-1);\n gap: var(--spacing-2);\n align-items: center;\n background: var(--baseBg);\n}\n\n._blockEditor_1e2ox_952 {\n display: flex;\n justify-content: stretch;\n border-radius: var(--radius-medium);\n padding: var(--spacing-2);\n gap: var(--spacing-2);\n align-items: center;\n background: var(--baseBg);\n}\n\n._blockEditor_1e2ox_952 ._nestedEditor_1e2ox_961 {\n flex-grow: 1;\n }\n\n._nestedEditor_1e2ox_961 {\n background: var(--basePageBg);\n padding: var(--spacing-1) var(--spacing-2);\n border-radius: var(--radius-medium);\n}\n\n._nestedEditor_1e2ox_961 > p {\n margin: 0;\n }\n\n._nestedEditor_1e2ox_961:focus {\n outline: none;\n }\n\n._genericComponentName_1e2ox_980 {\n font-size: var(--text-sm);\n color: var(--baseText);\n padding-right: var(--spacing-2);\n}\n\n._diffSourceToggleWrapper_1e2ox_986 {\n margin-left: auto;\n pointer-events: auto;\n opacity: 1;\n position: sticky;\n right: 0;\n}\n\n._ggDiffSourceToggle_1e2ox_994 {\n}\n\n._diffSourceToggle_1e2ox_986 {\n border-radius: var(--radius-medium);\n background-color: var(--baseBase);\n display: flex;\n}\n\n._diffSourceToggle_1e2ox_986 ._toolbarToggleItem_1e2ox_208 {\n padding: 0;\n }\n\n._diffSourceToggle_1e2ox_986 ._toolbarToggleItem_1e2ox_208 > span {\n display: block;\n padding: var(--spacing-1) var(--spacing-1);\n }\n\n._selectWithLabel_1e2ox_1012 {\n display: flex;\n align-items: center;\n gap: var(--spacing-2);\n margin-left: var(--spacing-2);\n}\n\n._selectWithLabel_1e2ox_1012 > label {\n font-size: var(--text-sm);\n }\n\n._selectWithLabel_1e2ox_1012 ._selectTrigger_1e2ox_308 {\n border: 1px solid var(--baseBorder);\n }\n\n._toolbarTitleMode_1e2ox_1027 {\n font-size: var(--text-sm);\n margin-left: var(--spacing-2);\n}\n\n._imageControlWrapperResizing_1e2ox_1032 {\n touch-action: none;\n}\n\n._imageResizer_1e2ox_1036 {\n display: block;\n width: 7px;\n height: 7px;\n position: absolute;\n background-color: var(--accentText);\n border: 1px solid var(--baseBg);\n}\n\n._imageResizer_1e2ox_1036._imageResizerN_1e2ox_1045 {\n top: -6px;\n left: 48%;\n cursor: n-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerNe_1e2ox_1051 {\n top: -6px;\n right: -6px;\n cursor: ne-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerE_1e2ox_1057 {\n bottom: 48%;\n right: -6px;\n cursor: e-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerSe_1e2ox_1063 {\n bottom: -2px;\n right: -6px;\n cursor: nwse-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerS_1e2ox_1063 {\n bottom: -2px;\n left: 48%;\n cursor: s-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerSw_1e2ox_1075 {\n bottom: -2px;\n left: -6px;\n cursor: sw-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerW_1e2ox_1081 {\n bottom: 48%;\n left: -6px;\n cursor: w-resize;\n}\n\n._imageResizer_1e2ox_1036._imageResizerNw_1e2ox_1087 {\n top: -6px;\n left: -6px;\n cursor: nw-resize;\n}\n\n._imagePlaceholder_1e2ox_1093 {\n border: 2px dashed;\n padding: 48px;\n margin: 12px;\n width: -moz-fit-content;\n width: fit-content;\n height: -moz-fit-content;\n height: fit-content;\n}\n\n._imageDimensionsContainer_1e2ox_1101 {\n display: flex;\n gap: var(--spacing-4);\n}\n\n._placeholder_1e2ox_1106 {\n color: var(--baseSolid);\n overflow: hidden;\n position: absolute;\n top: 0;\n padding: var(--spacing-3);\n text-overflow: ellipsis;\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n white-space: nowrap;\n display: inline-block;\n pointer-events: none;\n}\n\n._rootContentEditableWrapper_1e2ox_1119 {\n position: relative;\n}\n\n._downshiftContainer_1e2ox_1123 {\n display: flex;\n flex-direction: column;\n align-items: stretch;\n}\n\n._downshiftInputWrapper_1e2ox_1129 {\n display: flex;\n align-items: center;\n background-color: var(--baseBase);\n\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n}\n\n._downshiftInputWrapper_1e2ox_1129[data-visible-dropdown='true'] {\n border-bottom-left-radius: var(--radius-none);\n border-bottom-right-radius: var(--radius-none);\n border-bottom-width: 0;\n }\n\n._downshiftInputWrapper_1e2ox_1129 > button {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n padding-right: var(--spacing-2);\n }\n\n._downshiftInput_1e2ox_1129 {\n border: 0;\n background-color: transparent;\n font-size: inherit;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n all: unset;\n box-sizing: border-box;\n cursor: default;\n width: 20rem;\n padding: var(--spacing-2) var(--spacing-3);\n font-size: var(--text-sm);\n}\n\n._downshiftInput_1e2ox_1129::-moz-placeholder {\n color: var(--baseBorder);\n }\n\n._downshiftInput_1e2ox_1129::placeholder {\n color: var(--baseBorder);\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 {\n position: relative;\n}\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul {\n all: unset;\n box-sizing: border-box;\n position: absolute;\n font-size: var(--text-sm);\n width: 100%;\n display: none;\n border-bottom-left-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n max-height: var(--spacing-48);\n overflow-x: hidden;\n overflow-y: auto;\n border: 1px solid var(--baseBorder);\n border-top-width: 0;\n background-color: var(--baseBase);\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul[data-visible='true'] {\n display: block;\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul li {\n padding: var(--spacing-2) var(--spacing-3);\n white-space: nowrap;\n margin-bottom: var(--spacing-1);\n overflow-x: hidden;\n text-overflow: ellipsis;\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul li[data-selected='true'] {\n background-color: var(--baseBgSubtle);\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul li[data-highlighted='true'] {\n background-color: var(--baseBgHover);\n }\n\n._downshiftAutocompleteContainer_1e2ox_1160 ul li:last-of-type {\n border-bottom-left-radius: var(--radius-medium);\n border-bottom-right-radius: var(--radius-medium);\n }\n\n._textInput_1e2ox_1206 {\n all: unset;\n border-radius: var(--radius-base);\n border: 1px solid var(--baseBorder);\n background-color: var(--baseBase);\n padding: var(--spacing-2) var(--spacing-3);\n}\n\nform._multiFieldForm_1e2ox_1214 {\n display: flex;\n flex-direction: column;\n padding: var(--spacing-2);\n gap: var(--spacing-2);\n}\n\nform._multiFieldForm_1e2ox_1214 ._formField_1e2ox_1220 {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-2);\n }\n\nform._multiFieldForm_1e2ox_1214 ._formField_1e2ox_1220 label {\n font-size: var(--text-xs);\n }\n\n._markdownParseError_1e2ox_1231 {\n border-radius: var(--radius-base);\n border: 1px solid var(--error-color);\n padding: var(--spacing-2);\n margin-block: var(--spacing-2);\n color: var(--error-color);\n font-size: var(--text-xs);\n}\n\n._popupContainer_1e2ox_1240 {\n position: relative;\n z-index: 2;\n}\n\n._inputSizer_1e2ox_1245 {\n display: inline-grid;\n vertical-align: baseline;\n align-items: center;\n position: relative;\n}\n\n._inputSizer_1e2ox_1245::after,\n ._inputSizer_1e2ox_1245 input {\n width: auto;\n min-width: 1rem;\n grid-area: 1 / 2;\n font: inherit;\n margin: 0;\n padding: 0 2px;\n resize: none;\n background: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n border: none;\n color: inherit;\n }\n\n._inputSizer_1e2ox_1245 span {\n padding: 0.25em;\n }\n\n._inputSizer_1e2ox_1245::after {\n content: attr(data-value);\n white-space: pre-wrap;\n }\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --blue-1: #fbfdff;\n --blue-2: #f4faff;\n --blue-3: #e6f4fe;\n --blue-4: #d5efff;\n --blue-5: #c2e5ff;\n --blue-6: #acd8fc;\n --blue-7: #8ec8f6;\n --blue-8: #5eb1ef;\n --blue-9: #0090ff;\n --blue-10: #0588f0;\n --blue-11: #0d74ce;\n --blue-12: #113264;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --blue-1: color(display-p3 0.986 0.992 0.999);\n --blue-2: color(display-p3 0.96 0.979 0.998);\n --blue-3: color(display-p3 0.912 0.956 0.991);\n --blue-4: color(display-p3 0.853 0.932 1);\n --blue-5: color(display-p3 0.788 0.894 0.998);\n --blue-6: color(display-p3 0.709 0.843 0.976);\n --blue-7: color(display-p3 0.606 0.777 0.947);\n --blue-8: color(display-p3 0.451 0.688 0.917);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.234 0.523 0.912);\n --blue-11: color(display-p3 0.15 0.44 0.84);\n --blue-12: color(display-p3 0.102 0.193 0.379);\n }\n }\n}\n\n._dark_1tncs_1, ._dark-theme_1tncs_1 {\n --blue-1: #0d1520;\n --blue-2: #111927;\n --blue-3: #0d2847;\n --blue-4: #003362;\n --blue-5: #004074;\n --blue-6: #104d87;\n --blue-7: #205d9e;\n --blue-8: #2870bd;\n --blue-9: #0090ff;\n --blue-10: #3b9eff;\n --blue-11: #70b8ff;\n --blue-12: #c2e6ff;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n ._dark_1tncs_1, ._dark-theme_1tncs_1 {\n --blue-1: color(display-p3 0.057 0.081 0.122);\n --blue-2: color(display-p3 0.072 0.098 0.147);\n --blue-3: color(display-p3 0.078 0.154 0.27);\n --blue-4: color(display-p3 0.033 0.197 0.37);\n --blue-5: color(display-p3 0.08 0.245 0.441);\n --blue-6: color(display-p3 0.14 0.298 0.511);\n --blue-7: color(display-p3 0.195 0.361 0.6);\n --blue-8: color(display-p3 0.239 0.434 0.72);\n --blue-9: color(display-p3 0.247 0.556 0.969);\n --blue-10: color(display-p3 0.344 0.612 0.973);\n --blue-11: color(display-p3 0.49 0.72 1);\n --blue-12: color(display-p3 0.788 0.898 0.99);\n }\n }\n}\n\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --slate-1: #fcfcfd;\n --slate-2: #f9f9fb;\n --slate-3: #f0f0f3;\n --slate-4: #e8e8ec;\n --slate-5: #e0e1e6;\n --slate-6: #d9d9e0;\n --slate-7: #cdced6;\n --slate-8: #b9bbc6;\n --slate-9: #8b8d98;\n --slate-10: #80838d;\n --slate-11: #60646c;\n --slate-12: #1c2024;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --slate-1: color(display-p3 0.988 0.988 0.992);\n --slate-2: color(display-p3 0.976 0.976 0.984);\n --slate-3: color(display-p3 0.94 0.941 0.953);\n --slate-4: color(display-p3 0.908 0.909 0.925);\n --slate-5: color(display-p3 0.88 0.881 0.901);\n --slate-6: color(display-p3 0.85 0.852 0.876);\n --slate-7: color(display-p3 0.805 0.808 0.838);\n --slate-8: color(display-p3 0.727 0.733 0.773);\n --slate-9: color(display-p3 0.547 0.553 0.592);\n --slate-10: color(display-p3 0.503 0.512 0.549);\n --slate-11: color(display-p3 0.379 0.392 0.421);\n --slate-12: color(display-p3 0.113 0.125 0.14);\n }\n }\n}\n\n._dark_1tncs_1, ._dark-theme_1tncs_1 {\n --slate-1: #111113;\n --slate-2: #18191b;\n --slate-3: #212225;\n --slate-4: #272a2d;\n --slate-5: #2e3135;\n --slate-6: #363a3f;\n --slate-7: #43484e;\n --slate-8: #5a6169;\n --slate-9: #696e77;\n --slate-10: #777b84;\n --slate-11: #b0b4ba;\n --slate-12: #edeef0;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n ._dark_1tncs_1, ._dark-theme_1tncs_1 {\n --slate-1: color(display-p3 0.067 0.067 0.074);\n --slate-2: color(display-p3 0.095 0.098 0.105);\n --slate-3: color(display-p3 0.13 0.135 0.145);\n --slate-4: color(display-p3 0.156 0.163 0.176);\n --slate-5: color(display-p3 0.183 0.191 0.206);\n --slate-6: color(display-p3 0.215 0.226 0.244);\n --slate-7: color(display-p3 0.265 0.28 0.302);\n --slate-8: color(display-p3 0.357 0.381 0.409);\n --slate-9: color(display-p3 0.415 0.431 0.463);\n --slate-10: color(display-p3 0.469 0.483 0.514);\n --slate-11: color(display-p3 0.692 0.704 0.728);\n --slate-12: color(display-p3 0.93 0.933 0.94);\n }\n }\n}\n\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --grass-1: #fbfefb;\n --grass-2: #f5fbf5;\n --grass-3: #e9f6e9;\n --grass-4: #daf1db;\n --grass-5: #c9e8ca;\n --grass-6: #b2ddb5;\n --grass-7: #94ce9a;\n --grass-8: #65ba74;\n --grass-9: #46a758;\n --grass-10: #3e9b4f;\n --grass-11: #2a7e3b;\n --grass-12: #203c25;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --grass-1: color(display-p3 0.986 0.996 0.985);\n --grass-2: color(display-p3 0.966 0.983 0.964);\n --grass-3: color(display-p3 0.923 0.965 0.917);\n --grass-4: color(display-p3 0.872 0.94 0.865);\n --grass-5: color(display-p3 0.811 0.908 0.802);\n --grass-6: color(display-p3 0.733 0.864 0.724);\n --grass-7: color(display-p3 0.628 0.803 0.622);\n --grass-8: color(display-p3 0.477 0.72 0.482);\n --grass-9: color(display-p3 0.38 0.647 0.378);\n --grass-10: color(display-p3 0.344 0.598 0.342);\n --grass-11: color(display-p3 0.263 0.488 0.261);\n --grass-12: color(display-p3 0.151 0.233 0.153);\n }\n }\n}\n\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --cyan-1: #fafdfe;\n --cyan-2: #f2fafb;\n --cyan-3: #def7f9;\n --cyan-4: #caf1f6;\n --cyan-5: #b5e9f0;\n --cyan-6: #9ddde7;\n --cyan-7: #7dcedc;\n --cyan-8: #3db9cf;\n --cyan-9: #00a2c7;\n --cyan-10: #0797b9;\n --cyan-11: #107d98;\n --cyan-12: #0d3c48;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --cyan-1: color(display-p3 0.982 0.992 0.996);\n --cyan-2: color(display-p3 0.955 0.981 0.984);\n --cyan-3: color(display-p3 0.888 0.965 0.975);\n --cyan-4: color(display-p3 0.821 0.941 0.959);\n --cyan-5: color(display-p3 0.751 0.907 0.935);\n --cyan-6: color(display-p3 0.671 0.862 0.9);\n --cyan-7: color(display-p3 0.564 0.8 0.854);\n --cyan-8: color(display-p3 0.388 0.715 0.798);\n --cyan-9: color(display-p3 0.282 0.627 0.765);\n --cyan-10: color(display-p3 0.264 0.583 0.71);\n --cyan-11: color(display-p3 0.08 0.48 0.63);\n --cyan-12: color(display-p3 0.108 0.232 0.277);\n }\n }\n}\n\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --amber-1: #fefdfb;\n --amber-2: #fefbe9;\n --amber-3: #fff7c2;\n --amber-4: #ffee9c;\n --amber-5: #fbe577;\n --amber-6: #f3d673;\n --amber-7: #e9c162;\n --amber-8: #e2a336;\n --amber-9: #ffc53d;\n --amber-10: #ffba18;\n --amber-11: #ab6400;\n --amber-12: #4f3422;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --amber-1: color(display-p3 0.995 0.992 0.985);\n --amber-2: color(display-p3 0.994 0.986 0.921);\n --amber-3: color(display-p3 0.994 0.969 0.782);\n --amber-4: color(display-p3 0.989 0.937 0.65);\n --amber-5: color(display-p3 0.97 0.902 0.527);\n --amber-6: color(display-p3 0.936 0.844 0.506);\n --amber-7: color(display-p3 0.89 0.762 0.443);\n --amber-8: color(display-p3 0.85 0.65 0.3);\n --amber-9: color(display-p3 1 0.77 0.26);\n --amber-10: color(display-p3 0.959 0.741 0.274);\n --amber-11: color(display-p3 0.64 0.4 0);\n --amber-12: color(display-p3 0.294 0.208 0.145);\n }\n }\n}\n\n:root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --red-1: #fffcfc;\n --red-2: #fff7f7;\n --red-3: #feebec;\n --red-4: #ffdbdc;\n --red-5: #ffcdce;\n --red-6: #fdbdbe;\n --red-7: #f4a9aa;\n --red-8: #eb8e90;\n --red-9: #e5484d;\n --red-10: #dc3e42;\n --red-11: #ce2c31;\n --red-12: #641723;\n}\n\n@supports (color: color(display-p3 1 1 1)) {\n @media (color-gamut: p3) {\n :root, ._light_1tncs_1, ._light-theme_1tncs_1 {\n --red-1: color(display-p3 0.998 0.989 0.988);\n --red-2: color(display-p3 0.995 0.971 0.971);\n --red-3: color(display-p3 0.985 0.925 0.925);\n --red-4: color(display-p3 0.999 0.866 0.866);\n --red-5: color(display-p3 0.984 0.812 0.811);\n --red-6: color(display-p3 0.955 0.751 0.749);\n --red-7: color(display-p3 0.915 0.675 0.672);\n --red-8: color(display-p3 0.872 0.575 0.572);\n --red-9: color(display-p3 0.83 0.329 0.324);\n --red-10: color(display-p3 0.798 0.294 0.285);\n --red-11: color(display-p3 0.744 0.234 0.222);\n --red-12: color(display-p3 0.36 0.115 0.143);\n }\n }\n}\n\n._bold_1tncs_10 {\n font-weight: bold;\n}\n\n._italic_1tncs_14 {\n font-style: italic;\n}\n\n._underline_1tncs_18 {\n text-decoration: underline;\n}\n\n._bold_1tncs_10 {\n font-weight: 700;\n}\n\n._italic_1tncs_14 {\n font-style: italic;\n}\n\n._underline_1tncs_18 {\n text-decoration: underline\n}\n\n._strikethrough_1tncs_34 {\n text-decoration: line-through\n}\n\n._underlineStrikethrough_1tncs_38 {\n text-decoration: underline line-through\n}\n\n._subscript_1tncs_42 {\n font-size: .8em;\n vertical-align: sub !important\n}\n\n._superscript_1tncs_47 {\n font-size: .8em;\n vertical-align: super\n}\n\n._code_1tncs_52 {\n background-color: var(--baseBg);\n padding: 1px .25rem;\n font-family: var(--font-mono);\n font-size: 94%\n}\n\n._nestedListItem_1tncs_59 {\n list-style: none;\n list-style-type: none;\n}\n\n._nestedListItem_1tncs_59:before,\n._nestedListItem_1tncs_59:after {\n display: none;\n}\n\n._listitem_1tncs_69 {\n margin: var(--spacing-2) 0;\n}\n\n._listItemChecked_1tncs_73,\n._listItemUnchecked_1tncs_74 {\n position: relative;\n margin-left: 0;\n margin-right: 0;\n margin-inline-start: -1rem;\n padding-left: var(--spacing-6);\n padding-right: var(--spacing-6);\n list-style-type: none;\n outline: none;\n}\n\n._listItemChecked_1tncs_73 {\n text-decoration: line-through;\n}\n\n._listItemUnchecked_1tncs_74:before,\n._listItemChecked_1tncs_73:before {\n content: '';\n width: var(--spacing-4);\n height: var(--spacing-4);\n top: 0;\n left: 0;\n cursor: pointer;\n display: block;\n background-size: cover;\n position: absolute;\n}\n\n._listItemUnchecked_1tncs_74[dir='rtl']:before,\n._listItemChecked_1tncs_73[dir='rtl']:before {\n left: auto;\n right: 0;\n}\n\n._listItemUnchecked_1tncs_74:focus:before,\n._listItemChecked_1tncs_73:focus:before {\n box-shadow: 0 0 0 2px var(--accentBgActive);\n border-radius: var(--radius-small);\n}\n\n._listItemUnchecked_1tncs_74:before {\n border: 1px solid var(--baseBorder);\n border-radius: var(--radius-small);\n}\n\n._listItemChecked_1tncs_73:before {\n border: 1px solid var(--accentBorder);\n border-radius: var(--radius-small);\n background-color: var(--accentSolid);\n background-repeat: no-repeat;\n}\n\n._listItemChecked_1tncs_73:after {\n content: '';\n cursor: pointer;\n border-color: var(--baseBase);\n border-style: solid;\n position: absolute;\n display: block;\n top: var(--spacing-0_5);\n width: var(--spacing-1);\n left: var(--spacing-1_5);\n right: var(--spacing-1_5);\n height: var(--spacing-2);\n transform: rotate(45deg);\n border-width: 0 var(--spacing-0_5) var(--spacing-0_5) 0;\n}\n\n._nestedListItem_1tncs_59 {\n list-style-type: none;\n}\n\n._nestedListItem_1tncs_59:before,\n._nestedListItem_1tncs_59:after {\n display: none;\n}\n\n._admonitionDanger_1tncs_151,\n._admonitionInfo_1tncs_152,\n._admonitionNote_1tncs_153,\n._admonitionTip_1tncs_154,\n._admonitionCaution_1tncs_155 {\n padding: var(--spacing-2);\n margin-top: var(--spacing-2);\n margin-bottom: var(--spacing-2);\n border-left: 3px solid var(--admonitionBorder);\n background-color: var(--admonitionBg);\n}\n\n._admonitionInfo_1tncs_152 {\n --admonitionBorder: var(--admonitionInfoBorder);\n --admonitionBg: var(--admonitionInfoBg);\n}\n\n._admonitionTip_1tncs_154 {\n --admonitionBorder: var(--admonitionTipBorder);\n --admonitionBg: var(--admonitionTipBg);\n}\n\n._admonitionCaution_1tncs_155 {\n --admonitionBorder: var(--admonitionCautionBorder);\n --admonitionBg: var(--admonitionCautionBg);\n}\n\n._admonitionDanger_1tncs_151 {\n --admonitionBorder: var(--admonitionDangerBorder);\n --admonitionBg: var(--admonitionDangerBg);\n}\n\n._admonitionNote_1tncs_153 {\n --admonitionBorder: var(--admonitionNoteBorder);\n --admonitionBg: var(--admonitionNoteBg);\n}\n\n._mdxExpression_1tncs_188 {\n font-family: var(--font-mono);\n font-size: 84%;\n color: var(--accentText);\n}\n\n._mdxExpression_1tncs_188 input:focus-visible {\n outline: none;\n }\n";
75339
- document.head.appendChild(style);
75340
- })();
75341
- (function() {
75342
- if (typeof document === "undefined") return;
75343
- var id2 = "industry-mdx-editor-styles-L1VzZXJz";
75344
- if (document.getElementById(id2)) return;
75345
- var style = document.createElement("style");
75346
- style.id = id2;
75347
- style.textContent = "/**\n * Industry-themed MDX Editor styles\n * These CSS custom properties integrate MDXEditor with the industry-theme system\n * Based on Radix UI theming system used by MDXEditor\n *\n * Note: All Radix color variables are set directly by the component\n * This file provides additional content styling and customizations\n */\n\n/* Override MDXEditor's default CSS variables with our theme */\n.themed-mdx-editor [class*='editorRoot'] {\n --accentBase: var(--accentBase) !important;\n --accentBgSubtle: var(--accentBgSubtle) !important;\n --accentBg: var(--accentBg) !important;\n --accentBgHover: var(--accentBgHover) !important;\n --accentBgActive: var(--accentBgActive) !important;\n --accentLine: var(--accentLine) !important;\n --accentBorder: var(--accentBorder) !important;\n --accentBorderHover: var(--accentBorderHover) !important;\n --accentSolid: var(--accentSolid) !important;\n --accentSolidHover: var(--accentSolidHover) !important;\n --accentText: var(--accentText) !important;\n --accentTextContrast: var(--accentTextContrast) !important;\n\n --basePageBg: var(--mdx-editor-bg) !important;\n --baseBase: var(--baseBase) !important;\n --baseBgSubtle: var(--baseBgSubtle) !important;\n --baseBg: var(--baseBg) !important;\n --baseBgHover: var(--baseBgHover) !important;\n --baseBgActive: var(--baseBgActive) !important;\n --baseLine: var(--baseLine) !important;\n --baseBorder: var(--baseBorder) !important;\n --baseBorderHover: var(--baseBorderHover) !important;\n --baseSolid: var(--baseSolid) !important;\n --baseSolidHover: var(--baseSolidHover) !important;\n --baseText: var(--baseText) !important;\n --baseTextContrast: var(--baseTextContrast) !important;\n}\n\n/* MDXEditor content styling */\n.themed-mdx-editor .mdx-editor-content {\n font-family: var(--mdx-editor-font-family);\n font-size: var(--mdx-editor-font-size);\n color: var(--mdx-editor-fg);\n line-height: 1.6;\n\n /* Document padding - similar to Google Docs margins */\n padding-top: var(--mdx-editor-padding-top, 0);\n padding-right: var(--mdx-editor-padding-right, 0);\n padding-bottom: var(--mdx-editor-padding-bottom, 0);\n padding-left: var(--mdx-editor-padding-left, 0);\n\n /* Ensure content is properly contained */\n box-sizing: border-box;\n}\n\n/* Headings */\n.themed-mdx-editor .mdx-editor-content h1,\n.themed-mdx-editor .mdx-editor-content h2,\n.themed-mdx-editor .mdx-editor-content h3,\n.themed-mdx-editor .mdx-editor-content h4,\n.themed-mdx-editor .mdx-editor-content h5,\n.themed-mdx-editor .mdx-editor-content h6 {\n color: var(--mdx-editor-heading-color);\n}\n\n/* Links */\n.themed-mdx-editor .mdx-editor-content a {\n color: var(--mdx-editor-link-color);\n}\n\n/* Inline code */\n.themed-mdx-editor .mdx-editor-content code {\n background-color: var(--mdx-editor-code-bg);\n font-family: var(--mdx-editor-font-family);\n padding: 2px 6px;\n border-radius: 3px;\n}\n\n/* Code blocks - target the CodeMirror editor wrapper */\n.themed-mdx-editor .cm-editor {\n background-color: var(--mdx-editor-code-bg) !important;\n}\n\n.themed-mdx-editor .cm-editor .cm-scroller {\n font-family: var(--mdx-editor-font-family);\n background-color: var(--mdx-editor-code-bg);\n}\n\n.themed-mdx-editor .cm-editor .cm-gutters {\n background-color: var(--mdx-editor-code-bg);\n border-right: 1px solid var(--mdx-editor-border);\n color: var(--mdx-editor-fg);\n}\n\n.themed-mdx-editor .cm-editor .cm-content {\n background-color: var(--mdx-editor-code-bg);\n color: var(--mdx-editor-fg);\n}\n\n.themed-mdx-editor .cm-editor .cm-line {\n background-color: var(--mdx-editor-code-bg);\n}\n\n.themed-mdx-editor .cm-editor .cm-activeLineGutter {\n background-color: var(--baseBgHover);\n}\n\n.themed-mdx-editor .cm-editor .cm-activeLine {\n background-color: var(--baseBgHover);\n}\n\n/* Selection */\n.themed-mdx-editor .mdx-editor-content ::selection {\n background-color: var(--mdx-editor-selection-bg);\n}\n\n/* Toolbar container */\n.themed-mdx-editor [class*='toolbarRoot'] {\n background-color: var(--mdx-editor-toolbar-bg);\n border-bottom: 1px solid var(--mdx-editor-border);\n}\n\n/* Toolbar buttons */\n.themed-mdx-editor [class*='toolbarRoot'] button:not([class*='selectTrigger']) {\n color: var(--mdx-editor-fg);\n}\n\n.themed-mdx-editor [class*='toolbarRoot'] button:not([class*='selectTrigger']):hover {\n background-color: var(--mdx-editor-selection-bg);\n}\n\n/* Fix toolbar SVG icon colors - override MDXEditor's baseTextContrast usage */\n.themed-mdx-editor [class*='toolbarRoot'] svg {\n color: var(--baseText) !important;\n}\n\n/* Toolbar select dropdowns (BlockTypeSelect, etc.) */\n.themed-mdx-editor button[role='combobox'][class*='selectTrigger'],\n.themed-mdx-editor [data-toolbar-item='true'][class*='selectTrigger'],\nbutton[role='combobox'][class*='selectTrigger'][data-toolbar-item='true'] {\n background-color: var(--baseBg) !important;\n color: var(--baseText) !important;\n border: 1px solid var(--baseBorder) !important;\n padding: 4px 8px !important;\n border-radius: 4px !important;\n}\n\n.themed-mdx-editor button[role='combobox'][class*='selectTrigger']:hover,\n.themed-mdx-editor [data-toolbar-item='true'][class*='selectTrigger']:hover,\nbutton[role='combobox'][class*='selectTrigger'][data-toolbar-item='true']:hover {\n background-color: var(--baseBgHover) !important;\n border-color: var(--baseBorderHover) !important;\n}\n\n.themed-mdx-editor button[class*='selectTrigger'] span,\nbutton[class*='selectTrigger'][data-toolbar-item='true'] span {\n color: var(--baseText) !important;\n}\n\n.themed-mdx-editor button[class*='selectTrigger'] [class*='selectDropdownArrow'] svg,\nbutton[class*='selectTrigger'][data-toolbar-item='true'] [class*='selectDropdownArrow'] svg {\n color: var(--baseText) !important;\n}\n\n/* Select dropdown content - Note: These are often portaled outside the editor */\n[class*='selectContent'] {\n background-color: var(--baseBg) !important;\n border: 1px solid var(--baseBorder) !important;\n color: var(--baseText) !important;\n z-index: 9999 !important;\n}\n\n[class*='selectItem'] {\n color: var(--baseText) !important;\n}\n\n[class*='selectItem']:hover {\n background-color: var(--baseBgHover) !important;\n}\n\n[class*='selectItem'][data-state='checked'] {\n background-color: var(--accentBg) !important;\n color: var(--accentText) !important;\n}\n\n/* Table borders - use accent color for visibility */\n.themed-mdx-editor [class*='tableEditor'] > tbody > tr > td:not([class*='toolCell']),\n.themed-mdx-editor [class*='tableEditor'] > tbody > tr > th:not([class*='toolCell']):not([data-tool-cell='true']) {\n border: 1px solid var(--mdx-editor-table-border) !important;\n padding: var(--spacing-1) var(--spacing-2);\n white-space: normal;\n}\n\n.themed-mdx-editor [class*='tableEditor'] > thead > tr > th {\n border: 1px solid var(--mdx-editor-table-border) !important;\n}\n\n/* Source mode editor */\n.themed-mdx-editor [class*='sourceEditor'] {\n font-family: var(--mdx-editor-font-family);\n font-size: var(--mdx-editor-font-size);\n background-color: var(--mdx-editor-bg);\n color: var(--mdx-editor-fg);\n}\n\n/* Scrollbars */\n.themed-mdx-editor ::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n}\n\n.themed-mdx-editor ::-webkit-scrollbar-track {\n background: var(--mdx-editor-bg);\n}\n\n.themed-mdx-editor ::-webkit-scrollbar-thumb {\n background: var(--mdx-editor-border);\n border-radius: 6px;\n}\n\n.themed-mdx-editor ::-webkit-scrollbar-thumb:hover {\n background: var(--mdx-editor-fg);\n opacity: 0.5;\n}\n\n/*\n * Tailwind CSS Compatibility Styles\n * Tailwind's Preflight resets all default HTML styles, but MDXEditor expects them.\n * These styles restore necessary defaults for proper content rendering.\n */\n\n/* Restore default heading styles */\n.themed-mdx-editor h1 {\n font-size: 2em;\n font-weight: 700;\n margin-top: 0.67em;\n margin-bottom: 0.67em;\n line-height: 1.2;\n}\n\n.themed-mdx-editor h2 {\n font-size: 1.5em;\n font-weight: 600;\n margin-top: 0.83em;\n margin-bottom: 0.83em;\n line-height: 1.3;\n}\n\n.themed-mdx-editor h3 {\n font-size: 1.17em;\n font-weight: 600;\n margin-top: 1em;\n margin-bottom: 1em;\n line-height: 1.4;\n}\n\n.themed-mdx-editor h4 {\n font-size: 1em;\n font-weight: 600;\n margin-top: 1.33em;\n margin-bottom: 1.33em;\n line-height: 1.5;\n}\n\n.themed-mdx-editor h5 {\n font-size: 0.83em;\n font-weight: 600;\n margin-top: 1.67em;\n margin-bottom: 1.67em;\n line-height: 1.5;\n}\n\n.themed-mdx-editor h6 {\n font-size: 0.67em;\n font-weight: 600;\n margin-top: 2.33em;\n margin-bottom: 2.33em;\n line-height: 1.5;\n}\n\n/* Restore default paragraph spacing */\n.themed-mdx-editor p {\n margin-top: 1em;\n margin-bottom: 1em;\n}\n\n/* Restore default list styles */\n.themed-mdx-editor ul {\n list-style-type: disc;\n margin-top: 1em;\n margin-bottom: 1em;\n padding-left: 2.5em;\n}\n\n.themed-mdx-editor ul ul {\n list-style-type: circle;\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n.themed-mdx-editor ul ul ul {\n list-style-type: square;\n}\n\n.themed-mdx-editor ol {\n list-style-type: decimal;\n margin-top: 1em;\n margin-bottom: 1em;\n padding-left: 2.5em;\n}\n\n.themed-mdx-editor ol ol {\n list-style-type: lower-alpha;\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n.themed-mdx-editor ol ol ol {\n list-style-type: lower-roman;\n}\n\n.themed-mdx-editor li {\n margin-top: 0.25em;\n margin-bottom: 0.25em;\n}\n\n/* Restore default blockquote styles */\n.themed-mdx-editor blockquote {\n margin-top: 1em;\n margin-bottom: 1em;\n margin-left: 2.5em;\n margin-right: 2.5em;\n padding-left: 1em;\n border-left: 4px solid currentColor;\n opacity: 0.8;\n}\n\n/* Restore default code styles */\n.themed-mdx-editor code {\n font-family: monospace;\n font-size: 0.9em;\n}\n\n.themed-mdx-editor pre {\n margin-top: 1em;\n margin-bottom: 1em;\n padding: 1em;\n overflow: auto;\n}\n\n.themed-mdx-editor pre code {\n font-size: inherit;\n}\n\n/* Restore default table styles */\n.themed-mdx-editor table {\n border-collapse: collapse;\n margin-top: 1em;\n margin-bottom: 1em;\n width: 100%;\n}\n\n.themed-mdx-editor th,\n.themed-mdx-editor td {\n padding: 0.5em;\n text-align: left;\n}\n\n.themed-mdx-editor th {\n font-weight: 600;\n}\n\n/* Restore default emphasis styles */\n.themed-mdx-editor strong,\n.themed-mdx-editor b {\n font-weight: 700;\n}\n\n.themed-mdx-editor em,\n.themed-mdx-editor i {\n font-style: italic;\n}\n\n/* Restore default link styles */\n.themed-mdx-editor a {\n text-decoration: underline;\n cursor: pointer;\n}\n\n/* Restore default hr styles */\n.themed-mdx-editor hr {\n margin-top: 1.5em;\n margin-bottom: 1.5em;\n border: 0;\n border-top: 1px solid currentColor;\n opacity: 0.3;\n}\n";
75348
- document.head.appendChild(style);
75349
- })();
75350
- var defaultPreprocessRules = [
75351
- {
75352
- name: "normalize-code-block-language",
75353
- description: "Normalize unknown or missing code block language identifiers",
75354
- pattern: /^(\s*)```([^\n`]*?)\n/gim,
75355
- replacement: (_match, indent2, lang) => {
75356
- const trimmedLang = lang.trim();
75357
- const knownLanguages = [
75358
- "javascript",
75359
- "js",
75360
- "typescript",
75361
- "ts",
75362
- "jsx",
75363
- "tsx",
75364
- "python",
75365
- "py",
75366
- "java",
75367
- "c",
75368
- "cpp",
75369
- "csharp",
75370
- "cs",
75371
- "html",
75372
- "css",
75373
- "scss",
75374
- "sass",
75375
- "less",
75376
- "json",
75377
- "yaml",
75378
- "yml",
75379
- "xml",
75380
- "toml",
75381
- "bash",
75382
- "sh",
75383
- "shell",
75384
- "powershell",
75385
- "sql",
75386
- "graphql",
75387
- "markdown",
75388
- "md",
75389
- "rust",
75390
- "go",
75391
- "ruby",
75392
- "php",
75393
- "swift",
75394
- "kotlin",
75395
- "dart",
75396
- "r",
75397
- "matlab",
75398
- "diff",
75399
- "text",
75400
- "plaintext"
75401
- ];
75402
- if (knownLanguages.includes(trimmedLang.toLowerCase())) {
75403
- return _match;
75404
- }
75405
- if (!trimmedLang || trimmedLang === "") {
75406
- return `${indent2}\`\`\`markdown
75407
- `;
75408
- }
75409
- const langLower = trimmedLang.toLowerCase();
75410
- if (langLower === "n/a") {
75411
- return `${indent2}\`\`\`markdown
75412
- `;
75413
- }
75414
- if (langLower === "argdown") {
75415
- return `${indent2}\`\`\`markdown
75416
- `;
75417
- }
75418
- return _match;
75419
- }
75420
- },
75421
- {
75422
- name: "less-than-digit",
75423
- description: "Escape < followed by digit",
75424
- pattern: /<(?=\d)/g,
75425
- replacement: "&lt;"
75426
- },
75427
- {
75428
- name: "less-than-space-digit",
75429
- description: "Escape < followed by space and digit",
75430
- pattern: /<(\s+)(?=\d)/g,
75431
- replacement: (_match, spaces2) => `&lt;${spaces2}`
75432
- },
75433
- {
75434
- name: "greater-than-digit",
75435
- description: "Escape > followed by digit",
75436
- pattern: new RegExp("(?<![-\\w])>(?=\\s?\\d)", "g"),
75437
- replacement: "&gt;"
75438
- },
75439
- {
75440
- name: "invalid-tag-opening",
75441
- description: "Escape invalid opening tags starting with digit",
75442
- pattern: /<(\/?(?:\d[^>\s]*))/g,
75443
- replacement: (_match, tagContent) => `&lt;${tagContent}`
75444
- },
75445
- {
75446
- name: "numeric-only-tag",
75447
- description: "Escape tags that are only numbers",
75448
- pattern: /<(\d+)>/g,
75449
- replacement: (_match, number2) => `&lt;${number2}>`
75450
- }
75451
- ];
75452
- function preserveCode(markdown2, transform) {
75453
- const parts = [];
75454
- const codeRegex = /(```[\s\S]*?```|`[^`\n]+`)/g;
75455
- let lastIndex = 0;
75456
- let match;
75457
- while ((match = codeRegex.exec(markdown2)) !== null) {
75458
- if (match.index > lastIndex) {
75459
- parts.push({
75460
- type: "text",
75461
- content: markdown2.slice(lastIndex, match.index)
75462
- });
75463
- }
75464
- parts.push({
75465
- type: "code",
75466
- content: match[0]
75467
- });
75468
- lastIndex = match.index + match[0].length;
75469
- }
75470
- if (lastIndex < markdown2.length) {
75471
- parts.push({
75472
- type: "text",
75473
- content: markdown2.slice(lastIndex)
75474
- });
75475
- }
75476
- return parts.map((part) => part.type === "code" ? part.content : transform(part.content)).join("");
75477
- }
75478
- function preprocessMDX(markdown2, options = {}) {
75479
- const {
75480
- rules = defaultPreprocessRules,
75481
- enable,
75482
- disable: disable2,
75483
- preserveCodeBlocks = true,
75484
- onStats,
75485
- debug = false
75486
- } = options;
75487
- let activeRules = rules;
75488
- if (Array.isArray(enable) && enable.length > 0) {
75489
- activeRules = rules.filter((r2) => enable.includes(r2.name));
75490
- }
75491
- if (Array.isArray(disable2) && disable2.length > 0) {
75492
- activeRules = activeRules.filter((r2) => !disable2.includes(r2.name));
75493
- }
75494
- if (debug) {
75495
- console.log("[mdx-auto-fix] Active preprocessing rules:", activeRules.map((r2) => r2.name));
75496
- }
75497
- const stats = {
75498
- totalFixes: 0,
75499
- byTransformer: {}
75500
- };
75501
- let result = markdown2;
75502
- const codeBlockLangRule = activeRules.find((r2) => r2.name === "normalize-code-block-language");
75503
- if (codeBlockLangRule) {
75504
- let fixCount = 0;
75505
- let insideCodeBlock = false;
75506
- if (typeof codeBlockLangRule.replacement === "function") {
75507
- result = result.replace(codeBlockLangRule.pattern, (...args) => {
75508
- if (insideCodeBlock) {
75509
- insideCodeBlock = false;
75510
- return args[0];
75511
- }
75512
- insideCodeBlock = true;
75513
- const originalMatch = args[0];
75514
- const replacement = codeBlockLangRule.replacement(...args);
75515
- if (replacement !== originalMatch) {
75516
- fixCount++;
75517
- }
75518
- return replacement;
75519
- });
75520
- } else {
75521
- result = result.replace(codeBlockLangRule.pattern, (match) => {
75522
- if (insideCodeBlock) {
75523
- insideCodeBlock = false;
75524
- return match;
75525
- }
75526
- insideCodeBlock = true;
75527
- const replacement = codeBlockLangRule.replacement;
75528
- if (replacement !== match) {
75529
- fixCount++;
75530
- }
75531
- return replacement;
75532
- });
75533
- }
75534
- if (fixCount > 0) {
75535
- stats.byTransformer[codeBlockLangRule.name] = fixCount;
75536
- stats.totalFixes += fixCount;
75537
- if (debug) {
75538
- console.log(`[mdx-auto-fix] ${codeBlockLangRule.name}: ${fixCount} fixes`);
75539
- }
75540
- }
75541
- }
75542
- const otherRules = activeRules.filter((r2) => r2.name !== "normalize-code-block-language");
75543
- const transform = (text2) => {
75544
- let transformed = text2;
75545
- for (const rule of otherRules) {
75546
- let fixCount = 0;
75547
- if (typeof rule.replacement === "function") {
75548
- transformed = transformed.replace(rule.pattern, (...args) => {
75549
- fixCount++;
75550
- return rule.replacement(...args);
75551
- });
75552
- } else {
75553
- transformed = transformed.replace(rule.pattern, () => {
75554
- fixCount++;
75555
- return rule.replacement;
75556
- });
75557
- }
75558
- if (fixCount > 0) {
75559
- stats.byTransformer[rule.name] = (stats.byTransformer[rule.name] || 0) + fixCount;
75560
- stats.totalFixes += fixCount;
75561
- if (debug) {
75562
- console.log(`[mdx-auto-fix] ${rule.name}: ${fixCount} fixes`);
75563
- }
75564
- }
75565
- }
75566
- return transformed;
75567
- };
75568
- result = preserveCodeBlocks ? preserveCode(result, transform) : transform(result);
75569
- if (onStats && stats.totalFixes > 0) {
75570
- onStats(stats);
75571
- }
75572
- if (debug && stats.totalFixes > 0) {
75573
- console.log(`[mdx-auto-fix] Total preprocessing fixes: ${stats.totalFixes}`);
75574
- }
75575
- return result;
75576
- }
75577
- function getPaddingStyles(padding) {
75578
- if (!padding) {
75579
- return {};
75580
- }
75581
- const presets = {
75582
- none: "0",
75583
- narrow: "0.5in",
75584
- moderate: "0.75in",
75585
- normal: "1in",
75586
- wide: "2in"
75587
- };
75588
- if (typeof padding === "string" && padding in presets) {
75589
- const value2 = presets[padding];
75590
- return {
75591
- paddingTop: value2,
75592
- paddingRight: value2,
75593
- paddingBottom: value2,
75594
- paddingLeft: value2
75595
- };
75596
- }
75597
- if (typeof padding === "number") {
75598
- return { padding: `${padding}px` };
75599
- }
75600
- if (typeof padding === "string") {
75601
- return { padding };
75602
- }
75603
- const styles2 = {};
75604
- if (padding.top !== void 0) {
75605
- styles2.paddingTop = typeof padding.top === "number" ? `${padding.top}px` : padding.top;
75606
- }
75607
- if (padding.right !== void 0) {
75608
- styles2.paddingRight = typeof padding.right === "number" ? `${padding.right}px` : padding.right;
75609
- }
75610
- if (padding.bottom !== void 0) {
75611
- styles2.paddingBottom = typeof padding.bottom === "number" ? `${padding.bottom}px` : padding.bottom;
75612
- }
75613
- if (padding.left !== void 0) {
75614
- styles2.paddingLeft = typeof padding.left === "number" ? `${padding.left}px` : padding.left;
75615
- }
75616
- return styles2;
75617
- }
75618
- function validateTheme(theme2) {
75619
- const requiredColors = [
75620
- "primary",
75621
- "text",
75622
- "background",
75623
- "backgroundSecondary",
75624
- "border"
75625
- ];
75626
- const missingColors = [];
75627
- for (const colorKey of requiredColors) {
75628
- if (!theme2.colors[colorKey]) {
75629
- missingColors.push(`theme.colors.${colorKey}`);
75630
- }
75631
- }
75632
- if (missingColors.length > 0) {
75633
- throw new Error(
75634
- `ThemedMDXEditor: Missing required theme properties:
75635
- - ${missingColors.join("\n - ")}
75636
-
75637
- Please ensure your theme object includes all required color properties.`
75638
- );
75639
- }
75640
- }
75641
- var ThemedMDXEditor = forwardRef((props, ref) => {
75642
- var _a2, _b, _c, _d, _e2, _f;
75643
- const {
75644
- theme: theme2,
75645
- loadingComponent,
75646
- initialValue,
75647
- onSave,
75648
- filePath,
75649
- enableSaveShortcut = true,
75650
- onDirtyChange,
75651
- hideStatusBar = false,
75652
- containerClassName = "",
75653
- containerStyle = {},
75654
- showLoadingState = false,
75655
- documentPadding = { top: "0.25in", right: "0.5in", bottom: "0.5in", left: "0.5in" },
75656
- autoFixMDX = true,
75657
- markdown: controlledMarkdown,
75658
- onChange: externalOnChange,
75659
- ...restEditorProps
75660
- } = props;
75661
- const editorRef = useRef(null);
75662
- const [isMounted, setIsMounted] = useState(false);
75663
- const [isLoading, setIsLoading] = useState(showLoadingState);
75664
- const prevFilePathRef = useRef(filePath);
75665
- const prevInitialValueRef = useRef(initialValue);
75666
- const isControlled = controlledMarkdown !== void 0;
75667
- const computeInitialValue = useCallback(() => {
75668
- if (initialValue !== void 0) return initialValue;
75669
- if (typeof controlledMarkdown === "string") return controlledMarkdown;
75670
- return "";
75671
- }, [controlledMarkdown, initialValue]);
75672
- const [internalValue, setInternalValue] = useState(() => computeInitialValue());
75673
- const [savedValue, setSavedValue] = useState(() => computeInitialValue());
75674
- const [isDirty, setIsDirty] = useState(false);
75675
- const currentValue = isControlled ? controlledMarkdown ?? "" : internalValue;
75676
- const processedMarkdown = useMemo(() => {
75677
- if (!autoFixMDX) {
75678
- return currentValue;
75679
- }
75680
- return preprocessMDX(currentValue, {
75681
- preserveCodeBlocks: true
75682
- });
75683
- }, [currentValue, autoFixMDX]);
75684
- useEffect(() => {
75685
- setIsMounted(true);
75686
- if (showLoadingState) {
75687
- setIsLoading(false);
75688
- }
75689
- }, [showLoadingState]);
75690
- useImperativeHandle(ref, () => editorRef.current);
75691
- useEffect(() => {
75692
- if (!isControlled && initialValue !== void 0 && initialValue !== prevInitialValueRef.current) {
75693
- setInternalValue(initialValue);
75694
- setSavedValue(initialValue);
75695
- setIsDirty(false);
75696
- prevInitialValueRef.current = initialValue;
75697
- }
75698
- }, [initialValue, isControlled]);
75699
- useEffect(() => {
75700
- if (filePath !== prevFilePathRef.current) {
75701
- const baseline = initialValue ?? currentValue;
75702
- if (!isControlled && initialValue !== void 0) {
75703
- setInternalValue(initialValue);
75704
- }
75705
- setSavedValue(baseline);
75706
- setIsDirty(false);
75707
- prevFilePathRef.current = filePath;
75708
- }
75709
- }, [currentValue, filePath, initialValue, isControlled]);
75710
- useEffect(() => {
75711
- const dirty = currentValue !== savedValue;
75712
- setIsDirty((prev) => prev === dirty ? prev : dirty);
75713
- }, [currentValue, savedValue]);
75714
- useEffect(() => {
75715
- onDirtyChange == null ? void 0 : onDirtyChange(isDirty);
75716
- }, [isDirty, onDirtyChange]);
75717
- const updateSavedState = useCallback(
75718
- (nextSavedValue) => {
75719
- setSavedValue(nextSavedValue);
75720
- setIsDirty(false);
75721
- },
75722
- []
75723
- );
75724
- const handleChange = useCallback(
75725
- (value2, initialMarkdownNormalize) => {
75726
- const nextValue = value2 ?? "";
75727
- if (!isControlled) {
75728
- setInternalValue(nextValue);
75729
- }
75730
- const dirty = nextValue !== savedValue;
75731
- setIsDirty((prev) => prev === dirty ? prev : dirty);
75732
- externalOnChange == null ? void 0 : externalOnChange(value2, initialMarkdownNormalize);
75733
- },
75734
- [externalOnChange, isControlled, savedValue]
75735
- );
75736
- const handleSave = useCallback(async () => {
75737
- var _a3;
75738
- if (onSave) {
75739
- try {
75740
- const latestValue = ((_a3 = editorRef.current) == null ? void 0 : _a3.getMarkdown()) ?? currentValue;
75741
- const result = onSave(latestValue, { filePath });
75742
- if (result && typeof result.then === "function") {
75743
- await result;
75744
- }
75745
- updateSavedState(latestValue);
75746
- } catch (error) {
75747
- console.error("Failed to save editor contents", error);
75748
- }
75749
- }
75750
- }, [onSave, currentValue, filePath, updateSavedState]);
75751
- useEffect(() => {
75752
- if (!enableSaveShortcut || !onSave) return;
75753
- const handleKeyDown = (e2) => {
75754
- if ((e2.metaKey || e2.ctrlKey) && e2.key === "s") {
75755
- e2.preventDefault();
75756
- handleSave();
75757
- }
75758
- };
75759
- window.addEventListener("keydown", handleKeyDown);
75760
- return () => window.removeEventListener("keydown", handleKeyDown);
75761
- }, [enableSaveShortcut, handleSave, onSave]);
75762
- const editorStyles = useMemo(() => {
75763
- var _a3, _b2, _c2, _d2, _e3, _f2, _g;
75764
- validateTheme(theme2);
75765
- const hexToRgba = (hex, alpha) => {
75766
- const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
75767
- if (result) {
75768
- const r2 = parseInt(result[1], 16);
75769
- const g2 = parseInt(result[2], 16);
75770
- const b2 = parseInt(result[3], 16);
75771
- return `rgba(${r2}, ${g2}, ${b2}, ${alpha})`;
75772
- }
75773
- return hex;
75774
- };
75775
- const primaryColor = theme2.colors.primary;
75776
- const textColor = theme2.colors.text;
75777
- const background2 = theme2.colors.background;
75778
- const backgroundSecondary = theme2.colors.backgroundSecondary;
75779
- const border = theme2.colors.border;
75780
- const backgroundTertiary = theme2.colors.backgroundTertiary || backgroundSecondary;
75781
- const accentColor = theme2.colors.accent || textColor;
75782
- const paddingStyles = getPaddingStyles(documentPadding);
75783
- return {
75784
- // Radix Accent Colors (computed from primary color with different opacities)
75785
- // These are used by MDXEditor's internal UI components (toolbar, dialogs, etc.)
75786
- "--accentBase": primaryColor,
75787
- "--accentBgSubtle": hexToRgba(primaryColor, 0.05),
75788
- "--accentBg": hexToRgba(primaryColor, 0.1),
75789
- "--accentBgHover": hexToRgba(primaryColor, 0.15),
75790
- "--accentBgActive": hexToRgba(primaryColor, 0.2),
75791
- "--accentLine": hexToRgba(primaryColor, 0.3),
75792
- "--accentBorder": hexToRgba(primaryColor, 0.4),
75793
- "--accentBorderHover": hexToRgba(primaryColor, 0.5),
75794
- "--accentSolid": primaryColor,
75795
- "--accentSolidHover": primaryColor,
75796
- "--accentText": primaryColor,
75797
- "--accentTextContrast": background2,
75798
- // Radix Base Colors (computed from background/text colors)
75799
- // These are used by MDXEditor's internal UI components (toolbar, dialogs, etc.)
75800
- "--baseBase": background2,
75801
- "--baseBgSubtle": backgroundSecondary,
75802
- "--baseBg": background2,
75803
- "--baseBgHover": backgroundSecondary,
75804
- "--baseBgActive": backgroundTertiary,
75805
- "--baseLine": hexToRgba(textColor, 0.15),
75806
- "--baseBorder": border,
75807
- "--baseBorderHover": hexToRgba(textColor, 0.3),
75808
- "--baseSolid": textColor,
75809
- "--baseSolidHover": textColor,
75810
- "--baseText": textColor,
75811
- "--baseTextContrast": background2,
75812
- // Spacing scale - maps to theme.space array or uses defaults
75813
- "--spacing-0": "0px",
75814
- "--spacing-px": "1px",
75815
- "--spacing-0_5": "0.125rem",
75816
- "--spacing-1": `${((_a3 = theme2.space) == null ? void 0 : _a3[1]) || 4}px`,
75817
- "--spacing-1_5": "0.375rem",
75818
- "--spacing-2": `${((_b2 = theme2.space) == null ? void 0 : _b2[2]) || 8}px`,
75819
- "--spacing-2_5": "0.625rem",
75820
- "--spacing-3": "0.75rem",
75821
- "--spacing-3_5": "0.875rem",
75822
- "--spacing-4": `${((_c2 = theme2.space) == null ? void 0 : _c2[3]) || 16}px`,
75823
- "--spacing-5": "1.25rem",
75824
- "--spacing-6": "1.5rem",
75825
- "--spacing-7": "1.75rem",
75826
- "--spacing-8": `${((_d2 = theme2.space) == null ? void 0 : _d2[4]) || 32}px`,
75827
- "--spacing-9": "2.25rem",
75828
- "--spacing-10": "2.5rem",
75829
- "--spacing-11": "2.75rem",
75830
- "--spacing-12": "3rem",
75831
- "--spacing-14": "3.5rem",
75832
- "--spacing-16": `${((_e3 = theme2.space) == null ? void 0 : _e3[5]) || 64}px`,
75833
- // Our custom variables for content styling (used in mdx-editor-theme.css)
75834
- "--mdx-editor-bg": background2,
75835
- "--mdx-editor-fg": textColor,
75836
- "--mdx-editor-border": border,
75837
- "--mdx-editor-table-border": accentColor,
75838
- "--mdx-editor-toolbar-bg": backgroundSecondary,
75839
- "--mdx-editor-code-bg": backgroundTertiary,
75840
- "--mdx-editor-selection-bg": hexToRgba(primaryColor, 0.2),
75841
- "--mdx-editor-link-color": primaryColor,
75842
- "--mdx-editor-heading-color": textColor,
75843
- "--mdx-editor-font-family": ((_f2 = theme2.fonts) == null ? void 0 : _f2.monospace) || "monospace",
75844
- "--mdx-editor-font-size": `${((_g = theme2.fontSizes) == null ? void 0 : _g[2]) || 14}px`,
75845
- // Document padding CSS variables
75846
- "--mdx-editor-padding-top": paddingStyles.paddingTop || paddingStyles.padding || "0",
75847
- "--mdx-editor-padding-right": paddingStyles.paddingRight || paddingStyles.padding || "0",
75848
- "--mdx-editor-padding-bottom": paddingStyles.paddingBottom || paddingStyles.padding || "0",
75849
- "--mdx-editor-padding-left": paddingStyles.paddingLeft || paddingStyles.padding || "0",
75850
- ...containerStyle
75851
- };
75852
- }, [theme2, containerStyle, documentPadding]);
75853
- useEffect(() => {
75854
- const root2 = document.documentElement;
75855
- const styles2 = editorStyles;
75856
- const originalValues = {};
75857
- Object.entries(styles2).forEach(([key, value2]) => {
75858
- if (key.startsWith("--")) {
75859
- originalValues[key] = root2.style.getPropertyValue(key);
75860
- root2.style.setProperty(key, String(value2));
75861
- }
75862
- });
75863
- return () => {
75864
- Object.entries(originalValues).forEach(([key, value2]) => {
75865
- if (value2) {
75866
- root2.style.setProperty(key, value2);
75867
- } else {
75868
- root2.style.removeProperty(key);
75869
- }
75870
- });
75871
- };
75872
- }, [editorStyles]);
75873
- if (!isMounted || isLoading) {
75874
- const loading = loadingComponent || /* @__PURE__ */ jsx$1(
75875
- "div",
75876
- {
75877
- style: {
75878
- display: "flex",
75879
- alignItems: "center",
75880
- justifyContent: "center",
75881
- height: "100%",
75882
- color: theme2.colors.textSecondary,
75883
- fontFamily: ((_a2 = theme2.fonts) == null ? void 0 : _a2.body) || "system-ui"
75884
- },
75885
- children: "Loading editor..."
75886
- }
75887
- );
75888
- return /* @__PURE__ */ jsx$1("div", { style: { height: "100%", ...containerStyle }, children: loading });
75889
- }
75890
- return /* @__PURE__ */ jsxs(
75891
- "div",
75892
- {
75893
- className: `themed-mdx-editor ${containerClassName}`.trim(),
75894
- style: {
75895
- display: "flex",
75896
- flexDirection: "column",
75897
- height: "100%",
75898
- backgroundColor: theme2.colors.background,
75899
- color: theme2.colors.text,
75900
- fontFamily: ((_b = theme2.fonts) == null ? void 0 : _b.body) || "system-ui",
75901
- ...editorStyles
75902
- },
75903
- children: [
75904
- /* @__PURE__ */ jsx$1("div", { style: { flex: 1, overflow: "auto" }, children: /* @__PURE__ */ jsx$1(
75905
- MDXEditor,
75906
- {
75907
- ref: editorRef,
75908
- markdown: processedMarkdown,
75909
- onChange: handleChange,
75910
- contentEditableClassName: "mdx-editor-content",
75911
- ...restEditorProps
75912
- }
75913
- ) }),
75914
- !hideStatusBar && /* @__PURE__ */ jsxs(
75915
- "div",
75916
- {
75917
- style: {
75918
- display: "flex",
75919
- alignItems: "center",
75920
- gap: "8px",
75921
- padding: "4px 12px",
75922
- backgroundColor: theme2.colors.backgroundSecondary,
75923
- color: theme2.colors.text,
75924
- fontFamily: ((_c = theme2.fonts) == null ? void 0 : _c.monospace) || "monospace",
75925
- fontSize: ((_d = theme2.fontSizes) == null ? void 0 : _d[1]) || 12,
75926
- borderTop: `1px solid ${theme2.colors.border}`
75927
- },
75928
- children: [
75929
- /* @__PURE__ */ jsx$1("div", { style: { flex: 1 }, children: filePath && /* @__PURE__ */ jsx$1(
75930
- "span",
75931
- {
75932
- style: {
75933
- color: theme2.colors.textSecondary,
75934
- fontSize: ((_e2 = theme2.fontSizes) == null ? void 0 : _e2[0]) || 11
75935
- },
75936
- children: filePath
75937
- }
75938
- ) }),
75939
- /* @__PURE__ */ jsx$1(
75940
- "div",
75941
- {
75942
- style: {
75943
- padding: "2px 8px",
75944
- borderRadius: 4,
75945
- border: `1px solid ${isDirty ? theme2.colors.warning : theme2.colors.border}`,
75946
- backgroundColor: isDirty ? theme2.colors.backgroundTertiary || theme2.colors.backgroundSecondary : theme2.colors.background,
75947
- color: isDirty ? theme2.colors.warning : theme2.colors.textSecondary,
75948
- fontWeight: 600,
75949
- fontSize: ((_f = theme2.fontSizes) == null ? void 0 : _f[0]) || 11
75950
- },
75951
- children: isDirty ? "Modified" : "Saved"
75952
- }
75953
- )
75954
- ]
75955
- }
75956
- )
75957
- ]
75958
- }
75959
- );
75960
- });
75961
- ThemedMDXEditor.displayName = "ThemedMDXEditor";
75962
- var ThemedMDXEditorWithProvider = React__default__default.forwardRef((props, ref) => {
75963
- const { theme: theme2 } = useTheme();
75964
- return /* @__PURE__ */ jsx$1(ThemedMDXEditor, { ref, theme: theme2, ...props });
75965
- });
75966
- ThemedMDXEditorWithProvider.displayName = "ThemedMDXEditorWithProvider";
75967
75685
  const MDXEditorPanelContent = ({
75968
75686
  context,
75969
75687
  actions: _actions,
@@ -76062,6 +75780,31 @@ const MDXEditorPanelContent = ({
76062
75780
  });
76063
75781
  return unsubscribe;
76064
75782
  }, [events]);
75783
+ const handleChange = useCallback((value2) => {
75784
+ setMarkdown(value2);
75785
+ setIsDirty(true);
75786
+ setParseError(null);
75787
+ }, []);
75788
+ const handleSave = useCallback(
75789
+ async (content2) => {
75790
+ const contentToSave = content2 || markdown2;
75791
+ if (filePath && (fileSystem == null ? void 0 : fileSystem.writeFile)) {
75792
+ try {
75793
+ await fileSystem.writeFile(filePath, contentToSave);
75794
+ setIsDirty(false);
75795
+ events.emit({
75796
+ type: "file:save",
75797
+ source: "industry-theme.mdx-editor",
75798
+ timestamp: Date.now(),
75799
+ payload: { path: filePath }
75800
+ });
75801
+ } catch (error) {
75802
+ console.error("Error saving file:", error);
75803
+ }
75804
+ }
75805
+ },
75806
+ [markdown2, filePath, fileSystem, events]
75807
+ );
76065
75808
  useEffect(() => {
76066
75809
  const loadFileContent = async () => {
76067
75810
  if (!filePath || !(fileSystem == null ? void 0 : fileSystem.readFile)) {
@@ -76090,30 +75833,17 @@ const MDXEditorPanelContent = ({
76090
75833
  };
76091
75834
  loadFileContent();
76092
75835
  }, [filePath, fileSystem]);
76093
- const handleChange = useCallback((value2) => {
76094
- setMarkdown(value2);
76095
- setParseError(null);
76096
- }, []);
76097
- const handleSave = useCallback(
76098
- async (content2) => {
76099
- const contentToSave = content2 || markdown2;
76100
- if (filePath && (fileSystem == null ? void 0 : fileSystem.writeFile)) {
76101
- try {
76102
- await fileSystem.writeFile(filePath, contentToSave);
76103
- setIsDirty(false);
76104
- events.emit({
76105
- type: "file:save",
76106
- source: "industry-theme.mdx-editor",
76107
- timestamp: Date.now(),
76108
- payload: { path: filePath }
76109
- });
76110
- } catch (error) {
76111
- console.error("Error saving file:", error);
76112
- }
75836
+ useEffect(() => {
75837
+ if (!isEditable) return;
75838
+ const handleKeyDown = (e2) => {
75839
+ if ((e2.metaKey || e2.ctrlKey) && e2.key === "s") {
75840
+ e2.preventDefault();
75841
+ handleSave();
76113
75842
  }
76114
- },
76115
- [markdown2, filePath, fileSystem, events]
76116
- );
75843
+ };
75844
+ window.addEventListener("keydown", handleKeyDown);
75845
+ return () => window.removeEventListener("keydown", handleKeyDown);
75846
+ }, [isEditable, handleSave]);
76117
75847
  if (!isMounted) {
76118
75848
  return /* @__PURE__ */ jsx$1(
76119
75849
  "div",
@@ -76221,29 +75951,12 @@ const MDXEditorPanelContent = ({
76221
75951
  width: "100%"
76222
75952
  },
76223
75953
  children: /* @__PURE__ */ jsx$1(
76224
- ThemedMDXEditorWithProvider,
75954
+ ThemedMDXEditor,
76225
75955
  {
76226
75956
  markdown: safeMarkdown,
76227
- onSave: async (content2) => {
76228
- await handleSave(content2);
76229
- },
76230
75957
  onChange: handleChange,
76231
- onDirtyChange: setIsDirty,
76232
75958
  readOnly: !isEditable,
76233
- filePath: filePath || void 0,
76234
- enableSaveShortcut: isEditable,
76235
- hideStatusBar: false,
76236
- documentPadding: { left: 32, right: 32, top: 0, bottom: 32 },
76237
- onError: (error) => {
76238
- console.error("MDXEditor parsing error:", error);
76239
- setTimeout(() => {
76240
- if (error && typeof error === "object" && "message" in error) {
76241
- setParseError(String(error.message));
76242
- } else {
76243
- setParseError("Markdown parsing error");
76244
- }
76245
- }, 0);
76246
- },
75959
+ contentEditableClassName: "prose",
76247
75960
  plugins
76248
75961
  },
76249
75962
  filePath || "default"
@@ -76561,4 +76274,4 @@ export {
76561
76274
  onPackageUnload as y,
76562
76275
  fileEditingPanelTools as z
76563
76276
  };
76564
- //# sourceMappingURL=index-6w0qQWxe.js.map
76277
+ //# sourceMappingURL=index-TGeUE9Er.js.map