markdown-flow-ui 0.3.2-dev.1 → 0.3.2-dev.2

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 (35) hide show
  1. package/dist/_virtual/index.es6.js +3 -5
  2. package/dist/_virtual/index.es6.js.map +1 -1
  3. package/dist/_virtual/index.es7.js +5 -3
  4. package/dist/_virtual/index.es7.js.map +1 -1
  5. package/dist/_virtual/index6.cjs +1 -1
  6. package/dist/_virtual/index7.cjs +1 -1
  7. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs +1 -1
  8. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.map +1 -1
  9. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +52 -48
  10. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
  11. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.cjs +1 -1
  12. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.es.js +1 -1
  13. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-5PPSVZJV.cjs +1 -1
  14. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-5PPSVZJV.es.js +1 -1
  15. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-2GRJ4B5K.cjs +1 -1
  16. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-2GRJ4B5K.es.js +1 -1
  17. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-NSK5VX7P.cjs +1 -1
  18. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-NSK5VX7P.es.js +1 -1
  19. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-JCYQIIEL.cjs +1 -1
  20. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-JCYQIIEL.es.js +1 -1
  21. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-OCEON4UE.cjs +1 -1
  22. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-OCEON4UE.es.js +1 -1
  23. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-UKHOOZJN.cjs +1 -1
  24. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-UKHOOZJN.es.js +1 -1
  25. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-PKOTCBZU.cjs +1 -1
  26. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-PKOTCBZU.es.js +1 -1
  27. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-SI44F4Z6.cjs +1 -1
  28. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-SI44F4Z6.es.js +1 -1
  29. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-OKZ733FA.cjs +1 -1
  30. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-OKZ733FA.es.js +1 -1
  31. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-UEYNNEHI.cjs +1 -1
  32. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-UEYNNEHI.es.js +1 -1
  33. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-ULZ7WXOC.cjs +1 -1
  34. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-ULZ7WXOC.es.js +1 -1
  35. package/package.json +1 -1
@@ -30,11 +30,11 @@ import { useResolvedDirection as yt } from "../../lib/useResolvedDirection.es.js
30
30
  import { initReactI18next as Ot } from "../../node_modules/react-i18next/dist/es/initReactI18next.es.js";
31
31
  import { useTranslation as Pt } from "../../node_modules/react-i18next/dist/es/useTranslation.es.js";
32
32
  import { d as N } from "../../_virtual/index.es.js";
33
- ne.isInitialized ? Object.entries(Le).forEach(([C, g]) => {
33
+ ne.isInitialized ? Object.entries(Le).forEach(([C, d]) => {
34
34
  ne.addResourceBundle(
35
35
  C,
36
36
  "translation",
37
- g.translation,
37
+ d.translation,
38
38
  !0,
39
39
  !0
40
40
  );
@@ -44,16 +44,16 @@ ne.isInitialized ? Object.entries(Le).forEach(([C, g]) => {
44
44
  fallbackLng: oe,
45
45
  interpolation: { escapeValue: !1 }
46
46
  });
47
- const ke = [], Ee = (C, g) => {
48
- if (!C || g < 0)
47
+ const ke = [], Ee = (C, d) => {
48
+ if (!C || d < 0)
49
49
  return !1;
50
50
  for (const l of N.findDocumentVariableMarkers(C))
51
- if (l.name !== null && g >= l.start + 2 && g <= l.end - 2)
51
+ if (l.name !== null && d >= l.start + 2 && d <= l.end - 2)
52
52
  return !0;
53
53
  return !1;
54
54
  }, xt = (C = "") => C ? N.formatVariableReference(C) : "{{ }}", ur = ({
55
55
  content: C = "",
56
- editMode: g = "codeEdit",
56
+ editMode: d = "codeEdit",
57
57
  questionMode: l = !1,
58
58
  variables: ae,
59
59
  systemVariables: le,
@@ -128,7 +128,7 @@ const ke = [], Ee = (C, g) => {
128
128
  emptyLabel: i("variableNotFound", "No variables found")
129
129
  }),
130
130
  [i]
131
- ), De = g === "quickEdit" ? i("placeholderQuickEdit", {
131
+ ), De = d === "quickEdit" ? i("placeholderQuickEdit", {
132
132
  defaultValue: i("placeholderCodeEdit", {
133
133
  defaultValue: i("placeholder")
134
134
  })
@@ -161,19 +161,23 @@ const ke = [], Ee = (C, g) => {
161
161
  }, [R]);
162
162
  const [v, E] = L(
163
163
  m.Empty
164
- ), [u, F] = L(), a = U(null), G = U(null), Q = U(null), [te, ue] = L(!1), b = s(() => {
164
+ ), [u, F] = L(), a = U(null), G = U(null), Q = U(null), [te, ue] = L(!1), g = s(() => {
165
165
  ue(!1), Q.current = null;
166
- }, []), ze = s(
166
+ }, []);
167
+ I(() => {
168
+ l && g();
169
+ }, [g, l]);
170
+ const ze = s(
167
171
  (e) => {
168
172
  if (!n) {
169
173
  if (te && Q.current === e) {
170
- b();
174
+ g();
171
175
  return;
172
176
  }
173
177
  Q.current = e, ue(!0);
174
178
  }
175
179
  },
176
- [b, n, te]
180
+ [g, n, te]
177
181
  ), Be = {
178
182
  selectedOption: v,
179
183
  setSelectedOption: E,
@@ -185,9 +189,9 @@ const ke = [], Ee = (C, g) => {
185
189
  setPopoverPosition: B
186
190
  };
187
191
  I(() => {
188
- n && (k(!1), y(!1), E(m.Empty), F(null), B(null), b());
192
+ n && (k(!1), y(!1), E(m.Empty), F(null), B(null), g());
189
193
  }, [
190
- b,
194
+ g,
191
195
  n,
192
196
  k,
193
197
  y,
@@ -197,7 +201,7 @@ const ke = [], Ee = (C, g) => {
197
201
  ]);
198
202
  const O = s(
199
203
  (e) => {
200
- if (l || g !== "quickEdit" || !e)
204
+ if (l || d !== "quickEdit" || !e)
201
205
  return;
202
206
  const r = N.extractVariableNames(e);
203
207
  if (!r.length)
@@ -206,14 +210,14 @@ const ke = [], Ee = (C, g) => {
206
210
  _.map((t) => t.name)
207
211
  );
208
212
  ee((t) => {
209
- const c = new Set(t.map((V) => V.name)), h = /* @__PURE__ */ new Set(), d = [];
210
- return r.forEach((V) => {
211
- const w = V;
212
- !V || o.has(w) || c.has(w) || h.has(w) || (d.push({ name: V }), h.add(w));
213
- }), d.length ? [...d, ...t] : t;
213
+ const c = new Set(t.map((b) => b.name)), h = /* @__PURE__ */ new Set(), V = [];
214
+ return r.forEach((b) => {
215
+ const w = b;
216
+ !b || o.has(w) || c.has(w) || h.has(w) || (V.push({ name: b }), h.add(w));
217
+ }), V.length ? [...V, ...t] : t;
214
218
  });
215
219
  },
216
- [g, l, _]
220
+ [d, l, _]
217
221
  );
218
222
  I(() => {
219
223
  O(C);
@@ -221,7 +225,7 @@ const ke = [], Ee = (C, g) => {
221
225
  const re = s(
222
226
  (e) => {
223
227
  if (!(n || l && e === m.Variable))
224
- if (b(), E(e), e === m.Variable) {
228
+ if (g(), E(e), e === m.Variable) {
225
229
  if (a.current) {
226
230
  const { state: r } = a.current, o = r.selection.main.from, t = a.current.coordsAtPos(o);
227
231
  t && B({
@@ -233,7 +237,7 @@ const ke = [], Ee = (C, g) => {
233
237
  } else
234
238
  k(!0);
235
239
  },
236
- [b, n, l]
240
+ [g, n, l]
237
241
  ), P = s(
238
242
  (e) => {
239
243
  if (n || !a.current) return;
@@ -283,24 +287,24 @@ const ke = [], Ee = (C, g) => {
283
287
  (e, r, o = !1) => {
284
288
  if (n || !a.current)
285
289
  return;
286
- const t = a.current, { state: c, dispatch: h } = t, d = r ?? c.selection.main, V = xt(e);
287
- if (!V) return;
288
- const w = N.normalizeVariableName(e) ?? "", Xe = o ? V.length : 3 + w.length;
290
+ const t = a.current, { state: c, dispatch: h } = t, V = r ?? c.selection.main, b = xt(e);
291
+ if (!b) return;
292
+ const w = N.normalizeVariableName(e) ?? "", Xe = o ? b.length : 3 + w.length;
289
293
  h({
290
294
  changes: {
291
- from: d.from,
292
- to: d.to,
293
- insert: V
295
+ from: V.from,
296
+ to: V.to,
297
+ insert: b
294
298
  },
295
299
  selection: {
296
- anchor: d.from + Xe
300
+ anchor: V.from + Xe
297
301
  }
298
302
  }), t.focus();
299
303
  },
300
304
  [n]
301
305
  ), Fe = s(() => {
302
- n || (b(), K(""));
303
- }, [b, n, K]), $e = s(() => {
306
+ n || (g(), K(""));
307
+ }, [g, n, K]), $e = s(() => {
304
308
  if (n || !a.current)
305
309
  return;
306
310
  const e = a.current, { state: r, dispatch: o } = e, t = r.selection.main;
@@ -345,12 +349,12 @@ const ke = [], Ee = (C, g) => {
345
349
  }, [n]), _e = s(() => {
346
350
  if (n || !a.current)
347
351
  return;
348
- const e = a.current, { state: r, dispatch: o } = e, t = r.selection.main, c = S.singleChoiceOption1, h = S.singleChoiceOption2, d = `?[%{{ ${l ? f.questionPlaceholder : ""} }} ${c} | ${h}]`;
352
+ const e = a.current, { state: r, dispatch: o } = e, t = r.selection.main, c = S.singleChoiceOption1, h = S.singleChoiceOption2, V = `?[%{{ ${l ? f.questionPlaceholder : ""} }} ${c} | ${h}]`;
349
353
  o({
350
354
  changes: {
351
355
  from: t.from,
352
356
  to: t.to,
353
- insert: d
357
+ insert: V
354
358
  },
355
359
  selection: {
356
360
  anchor: t.from + 6,
@@ -366,12 +370,12 @@ const ke = [], Ee = (C, g) => {
366
370
  ]), Ge = s(() => {
367
371
  if (n || !a.current)
368
372
  return;
369
- const e = a.current, { state: r, dispatch: o } = e, t = r.selection.main, c = S.singleChoiceOption1, h = S.singleChoiceOption2, d = `?[%{{ ${l ? f.questionPlaceholder : ""} }} ${c} || ${h}]`;
373
+ const e = a.current, { state: r, dispatch: o } = e, t = r.selection.main, c = S.singleChoiceOption1, h = S.singleChoiceOption2, V = `?[%{{ ${l ? f.questionPlaceholder : ""} }} ${c} || ${h}]`;
370
374
  o({
371
375
  changes: {
372
376
  from: t.from,
373
377
  to: t.to,
374
- insert: d
378
+ insert: V
375
379
  },
376
380
  selection: {
377
381
  anchor: t.from + 6,
@@ -451,9 +455,9 @@ const ke = [], Ee = (C, g) => {
451
455
  if (n)
452
456
  return;
453
457
  const r = u?.type === m.Variable ? { from: u.from, to: u.to } : void 0;
454
- K(e.name, r, !0), y(!1), b();
458
+ K(e.name, r, !0), y(!1), g();
455
459
  },
456
- [n, K, u, b]
460
+ [n, K, u, g]
457
461
  ), de = s(() => qe({
458
462
  override: [
459
463
  gt(
@@ -478,7 +482,7 @@ const ke = [], Ee = (C, g) => {
478
482
  l
479
483
  ]), Ve = s(
480
484
  (e) => {
481
- if (a.current = e.view, !l && g === "quickEdit" && G.current && e.selectionSet) {
485
+ if (a.current = e.view, !l && d === "quickEdit" && G.current && e.selectionSet) {
482
486
  const r = e.state.selection.main.head, o = e.state.doc.toString();
483
487
  Ee(
484
488
  o,
@@ -486,27 +490,27 @@ const ke = [], Ee = (C, g) => {
486
490
  ) || (O(o), G.current = null);
487
491
  }
488
492
  },
489
- [O, g, l]
493
+ [O, d, l]
490
494
  ), be = s(
491
495
  (e) => {
492
496
  if (e.stopPropagation(), n)
493
497
  return;
494
498
  const { type: r, from: o, to: t, dataset: c, target: h } = e.detail;
495
499
  if (l && r === m.Variable) return;
496
- const d = dt(r, c);
500
+ const V = dt(r, c);
497
501
  if (F({
498
502
  type: r,
499
- value: d,
503
+ value: V,
500
504
  from: o,
501
505
  to: t
502
506
  }), E(r), r === m.Variable) {
503
507
  if (h) {
504
- const V = h.getBoundingClientRect(), w = h.ownerDocument.defaultView?.getComputedStyle(
508
+ const b = h.getBoundingClientRect(), w = h.ownerDocument.defaultView?.getComputedStyle(
505
509
  j.current ?? h
506
510
  ).direction;
507
511
  B({
508
- x: w === "rtl" ? V.right : V.left,
509
- y: V.bottom
512
+ x: w === "rtl" ? b.right : b.left,
513
+ y: b.bottom
510
514
  });
511
515
  }
512
516
  y(!0);
@@ -540,7 +544,7 @@ const ke = [], Ee = (C, g) => {
540
544
  et(tt),
541
545
  l ? vt : It
542
546
  ];
543
- return n || e.push(de()), g === "quickEdit" && (e.push(
547
+ return n || e.push(de()), d === "quickEdit" && (e.push(
544
548
  Ie,
545
549
  Vt,
546
550
  bt
@@ -553,7 +557,7 @@ const ke = [], Ee = (C, g) => {
553
557
  ), e;
554
558
  }, [
555
559
  n,
556
- g,
560
+ d,
557
561
  de,
558
562
  Ve,
559
563
  Ie,
@@ -663,7 +667,7 @@ const ke = [], Ee = (C, g) => {
663
667
  onSelect: re,
664
668
  onInsertVariablePlaceholder: Fe,
665
669
  onVariableSearchToggle: ze,
666
- onVariableSearchClose: b,
670
+ onVariableSearchClose: g,
667
671
  onInsertConfirmOutput: $e,
668
672
  onInsertLink: He,
669
673
  onInsertButton: je,
@@ -679,7 +683,7 @@ const ke = [], Ee = (C, g) => {
679
683
  {
680
684
  open: ve,
681
685
  anchorElement: Q.current,
682
- onClose: b,
686
+ onClose: g,
683
687
  onSelect: ge,
684
688
  variables: ce,
685
689
  systemVariables: _,
@@ -1 +1 @@
1
- {"version":3,"file":"MarkdownFlowEditor.es.js","sources":["../../../src/components/MarkdownFlowEditor/MarkdownFlowEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { autocompletion } from \"@codemirror/autocomplete\";\nimport { EditorView, ViewUpdate } from \"@codemirror/view\";\nimport { markdown } from \"@codemirror/lang-markdown\";\nimport {\n syntaxHighlighting,\n defaultHighlightStyle,\n} from \"@codemirror/language\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport CustomDialog from \"./components/CustomDialog\";\nimport CustomPopover from \"./components/CustomPopover\";\nimport EditorToolbar from \"./components/EditorToolbar\";\nimport VariableSearchDropdown from \"./components/VariableSearchDropdown\";\nimport EditorContext from \"./editor-context\";\nimport ImageInject from \"./components/ImageInject\";\nimport VideoInject from \"./components/VideoInject\";\nimport VariableSelect from \"./components/VariableSelect\";\nimport {\n SelectedOption,\n IEditorContext,\n Variable,\n SelectContentInfo,\n PopoverPosition,\n EditorAction,\n EditorApi,\n} from \"./types\";\nimport \"./markdownFlowEditor.css\";\n\nimport {\n createSlashCommands,\n parseContentInfo,\n getImageContentToInsert,\n getVideoContentToInsert,\n extractVariableNames,\n findDocumentVariableMarkers,\n formatVariableReference,\n normalizeVariableName,\n} from \"./utils\";\nimport ImgPlaceholder from \"./plugins/ImgPlaceholder\";\nimport VideoPlaceholder from \"./plugins/VideoPlaceholder\";\nimport { mediaPlaceholderLabels } from \"./plugins/mediaPlaceholderLabels\";\nimport VariablePlaceholder from \"./plugins/VariablePlaceholder\";\nimport SyntaxHighlighter, {\n QuestionSyntaxHighlighter,\n} from \"./plugins/SyntaxHighlighter\";\n// import createFixedTextPlaceholder from \"./plugins/FixedTextPlaceholder\";\n// import DividerPlaceholder from \"./plugins/DividerPlaceholder\";\nimport { initReactI18next, useTranslation } from \"react-i18next\";\nimport i18next from \"i18next\";\nimport { UploadProps } from \"./uploadTypes\";\nimport {\n DEFAULT_EDITOR_LOCALE,\n editorLocaleResources,\n getEditorLocaleMessages,\n} from \"./editorI18n\";\nimport {\n getMarkdownFlowDirection,\n getMarkdownFlowLanguage,\n normalizeMarkdownFlowLocale,\n type MarkdownFlowLocale,\n} from \"../../lib/locale\";\nimport { useDetachedLanguage } from \"../../lib/useDetachedLanguage\";\nimport { useResolvedDirection } from \"../../lib/useResolvedDirection\";\n\nif (!i18next.isInitialized) {\n i18next.use(initReactI18next).init({\n resources: editorLocaleResources,\n lng: DEFAULT_EDITOR_LOCALE,\n fallbackLng: DEFAULT_EDITOR_LOCALE,\n interpolation: { escapeValue: false },\n });\n} else {\n Object.entries(editorLocaleResources).forEach(([lng, resource]) => {\n i18next.addResourceBundle(\n lng,\n \"translation\",\n resource.translation,\n true,\n true\n );\n });\n}\n\nexport enum EditMode {\n CodeEdit = \"codeEdit\",\n QuickEdit = \"quickEdit\",\n}\n\ntype EditorProps = {\n content?: string;\n editMode?: EditMode;\n /** Author questions and memory answers without variable authoring controls. */\n questionMode?: boolean;\n variables?: Variable[];\n systemVariables?: Variable[];\n onChange?: (value: string) => void;\n onBlur?: () => void;\n locale?: MarkdownFlowLocale;\n /** Overrides the locale-derived language. */\n lang?: string;\n uploadProps?: UploadProps;\n disabled?: boolean;\n toolbarActionsRight?: EditorAction[];\n onReady?: (api: EditorApi) => void;\n};\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\n// Detect whether cursor is still inside a {{variable}} expression\nconst isCursorInsideVariableExpression = (\n content: string,\n cursorPosition: number\n) => {\n if (!content || cursorPosition < 0) {\n return false;\n }\n for (const marker of findDocumentVariableMarkers(content)) {\n if (\n marker.name !== null &&\n cursorPosition >= marker.start + 2 &&\n cursorPosition <= marker.end - 2\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst buildVariableTemplate = (variableName = \"\") =>\n variableName ? formatVariableReference(variableName) : \"{{ }}\";\n\nconst Editor: React.FC<EditorProps> = ({\n content = \"\",\n editMode = EditMode.CodeEdit,\n questionMode = false,\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n onChange,\n onBlur,\n locale,\n lang,\n uploadProps,\n disabled = false,\n toolbarActionsRight,\n onReady,\n}) => {\n const { t, i18n } = useTranslation();\n const resolvedLocale = normalizeMarkdownFlowLocale(\n locale ?? DEFAULT_EDITOR_LOCALE\n );\n const direction = getMarkdownFlowDirection(locale);\n const language = lang ?? getMarkdownFlowLanguage(locale);\n\n useEffect(() => {\n if (i18n.language !== resolvedLocale) {\n i18n.changeLanguage(resolvedLocale);\n }\n }, [i18n, resolvedLocale]);\n\n const currentStrings = getEditorLocaleMessages(resolvedLocale);\n const toolbarLabels = useMemo(\n () => ({\n image: t(\"toolbarInsertImage\", {\n defaultValue: \"Insert image\",\n }),\n video: t(\"toolbarInsertVideo\", {\n defaultValue: \"Insert video\",\n }),\n variable: t(\"slashVariable\", {\n defaultValue: \"Variable\",\n }),\n addVariable: t(\"toolbarInsertNewVariable\", {\n defaultValue: \"Insert new variable\",\n }),\n search: t(\"toolbarInsertExistingVariable\", {\n defaultValue: \"Insert existing variable\",\n }),\n confirmOutput: t(\"toolbarConfirmOutput\", {\n defaultValue: \"Confirm output\",\n }),\n insertLink: t(\"toolbarInsertLink\", {\n defaultValue: \"Insert link\",\n }),\n insertButton: t(\"toolbarInsertButton\", {\n defaultValue: \"Insert button\",\n }),\n insertSingleChoice: t(\"toolbarInsertSingleChoice\", {\n defaultValue: \"Insert single choice\",\n }),\n insertMultiChoice: t(\"toolbarInsertMultiChoice\", {\n defaultValue: \"Insert multi choice\",\n }),\n insertInput: t(\"toolbarInsertInput\", {\n defaultValue: \"Insert input\",\n }),\n singleChoiceOption1: t(\"toolbarChoiceOption1\", {\n defaultValue: \"Option 1\",\n }),\n singleChoiceOption2: t(\"toolbarChoiceOption2\", {\n defaultValue: \"Option 2\",\n }),\n inputPlaceholder: t(\"toolbarInputPlaceholder\", {\n defaultValue: \"Please enter\",\n }),\n }),\n [t]\n );\n const variableSearchLabels = useMemo(\n () => ({\n searchPlaceholder: t(\"variableSearchPlaceholder\", {\n defaultValue: \"Search variable\",\n }),\n systemLabel: t(\"variableSectionSystem\", \"System Variables\"),\n customLabel: t(\"variableSectionCustom\", \"Custom Variables\"),\n emptyLabel: t(\"variableNotFound\", \"No variables found\"),\n }),\n [t]\n );\n const placeholderText =\n editMode === EditMode.QuickEdit\n ? t(\"placeholderQuickEdit\", {\n defaultValue: t(\"placeholderCodeEdit\", {\n defaultValue: t(\"placeholder\"),\n }),\n })\n : t(\"placeholderCodeEdit\", { defaultValue: t(\"placeholder\") });\n // Only boundary whitespace is normalized; key identity remains case-sensitive.\n const normalizedSystemVariables = useMemo(() => {\n const seen = new Set<string>();\n return (initialSystemVariables ?? EMPTY_VARIABLES).flatMap((variable) => {\n const name =\n typeof variable?.name === \"string\"\n ? normalizeVariableName(variable.name)\n : null;\n if (name === null || seen.has(name)) return [];\n seen.add(name);\n return [{ ...variable, name }];\n });\n }, [initialSystemVariables]);\n\n const normalizedCustomVariables = useMemo(() => {\n const systemNameSet = new Set(\n normalizedSystemVariables.map((variable) => variable.name)\n );\n const seen = new Set<string>();\n return (initialVariables ?? EMPTY_VARIABLES).flatMap((variable) => {\n const name =\n typeof variable?.name === \"string\"\n ? normalizeVariableName(variable.name)\n : null;\n if (name === null || systemNameSet.has(name) || seen.has(name)) return [];\n seen.add(name);\n return [{ ...variable, name }];\n });\n }, [initialVariables, normalizedSystemVariables]);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const editorRootRef = useRef<HTMLDivElement>(null);\n const portalLanguage = useDetachedLanguage(editorRootRef, language);\n const { resolvedDirection: portalDirection } = useResolvedDirection(\n editorRootRef,\n direction\n );\n const [popoverPosition, setPopoverPosition] =\n useState<PopoverPosition | null>(null);\n const [variables, setVariables] = useState<Variable[]>(\n normalizedCustomVariables\n );\n const [systemVariables, setSystemVariables] = useState<Variable[]>(\n normalizedSystemVariables\n );\n\n useEffect(() => {\n setVariables(normalizedCustomVariables);\n }, [normalizedCustomVariables]);\n\n useEffect(() => {\n setSystemVariables(normalizedSystemVariables);\n }, [normalizedSystemVariables]);\n\n const [selectedOption, setSelectedOption] = useState<SelectedOption>(\n SelectedOption.Empty\n );\n const [selectContentInfo, setSelectContentInfo] =\n useState<SelectContentInfo | null>();\n const editorViewRef = useRef<EditorView | null>(null);\n const pendingVariableContentRef = useRef<string | null>(null);\n const variableSearchAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [variableSearchOpen, setVariableSearchOpen] = useState(false);\n const closeVariableSearch = useCallback(() => {\n setVariableSearchOpen(false);\n variableSearchAnchorRef.current = null;\n }, []);\n const handleVariableSearchToggle = useCallback(\n (button: HTMLButtonElement) => {\n if (disabled) {\n return;\n }\n if (variableSearchOpen && variableSearchAnchorRef.current === button) {\n closeVariableSearch();\n return;\n }\n variableSearchAnchorRef.current = button;\n setVariableSearchOpen(true);\n },\n [closeVariableSearch, disabled, variableSearchOpen]\n );\n\n const editorContextValue: IEditorContext = {\n selectedOption,\n setSelectedOption,\n dialogOpen,\n setDialogOpen,\n popoverOpen,\n setPopoverOpen,\n popoverPosition,\n setPopoverPosition,\n };\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n setDialogOpen(false);\n setPopoverOpen(false);\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n setPopoverPosition(null);\n closeVariableSearch();\n }, [\n closeVariableSearch,\n disabled,\n setDialogOpen,\n setPopoverOpen,\n setPopoverPosition,\n setSelectedOption,\n setSelectContentInfo,\n ]);\n\n const addVariablesFromContent = useCallback(\n (text: string) => {\n if (questionMode || editMode !== EditMode.QuickEdit || !text) {\n return;\n }\n\n const names = extractVariableNames(text);\n if (!names.length) {\n return;\n }\n\n const systemNameSet = new Set(\n systemVariables.map((variable) => variable.name)\n );\n\n setVariables((prev) => {\n const existingNames = new Set(prev.map((variable) => variable.name));\n const addedNames = new Set<string>();\n const newVariables: Variable[] = [];\n\n names.forEach((rawName) => {\n const normalized = rawName;\n if (\n !rawName ||\n systemNameSet.has(normalized) ||\n existingNames.has(normalized) ||\n addedNames.has(normalized)\n ) {\n return;\n }\n newVariables.push({ name: rawName });\n addedNames.add(normalized);\n });\n\n if (!newVariables.length) {\n return prev;\n }\n\n return [...newVariables, ...prev];\n });\n },\n [editMode, questionMode, systemVariables]\n );\n\n useEffect(() => {\n addVariablesFromContent(content);\n }, [content, addVariablesFromContent]);\n\n // const insertFixedText = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const selectedText = state.sliceDoc(selection.from, selection.to);\n // const startTag = \"===\";\n // const endTag = \"===\";\n // const insertContent = `${startTag}${selectedText ?? \"\"}${endTag}`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + startTag.length + (selectedText?.length ?? 0),\n // },\n // });\n // view.focus();\n // }, []);\n\n // const insertDivider = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const insertContent = `\\n\\n---\\n\\n`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + insertContent.length,\n // },\n // });\n // view.focus();\n // }, []);\n\n const onSelectedOption = useCallback(\n (option: SelectedOption) => {\n if (disabled || (questionMode && option === SelectedOption.Variable)) {\n return;\n }\n closeVariableSearch();\n // if (option === SelectedOption.FixedText) {\n // insertFixedText();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n // if (option === SelectedOption.Divider) {\n // insertDivider();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n setSelectedOption(option);\n\n if (option === SelectedOption.Variable) {\n if (editorViewRef.current) {\n const { state } = editorViewRef.current;\n const pos = state.selection.main.from;\n const coords = editorViewRef.current.coordsAtPos(pos);\n if (coords) {\n setPopoverPosition({\n x: coords.left,\n y: coords.bottom,\n });\n }\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [closeVariableSearch, disabled, questionMode]\n );\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) return;\n\n const { state, dispatch } = editorViewRef.current;\n const from = state.selection.main.from;\n\n dispatch({\n changes: { from, insert: text },\n selection: { anchor: from + text.length },\n });\n },\n [editorViewRef, disabled]\n );\n\n const replaceSelection = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const { state, dispatch } = editorViewRef.current;\n const selection = state.selection.main;\n dispatch({\n changes: { from: selection.from, to: selection.to, insert: text },\n selection: { anchor: selection.from + text.length },\n });\n },\n [disabled]\n );\n\n const focusEditor = useCallback(() => {\n editorViewRef.current?.focus();\n }, []);\n\n const getContent = useCallback(() => {\n return editorViewRef.current?.state.doc.toString() ?? \"\";\n }, []);\n\n const setContent = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n if (!editorViewRef.current) {\n onChange?.(text);\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n dispatch({\n changes: { from: 0, to: state.doc.length, insert: text },\n selection: { anchor: text.length },\n });\n },\n [disabled, onChange]\n );\n\n const deleteSelectedContent = useCallback(() => {\n if (disabled) {\n return;\n }\n if (\n !selectContentInfo ||\n !editorViewRef.current ||\n selectContentInfo.from === -1\n )\n return;\n\n const { from, to } = selectContentInfo;\n const { dispatch } = editorViewRef.current;\n\n dispatch({\n changes: { from, to, insert: \"\" },\n });\n }, [selectContentInfo, editorViewRef, disabled]);\n\n const insertVariableContent = useCallback(\n (\n variableName: string,\n range?: { from: number; to: number },\n placeCursorAtEnd = false\n ) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = range ?? state.selection.main;\n const template = buildVariableTemplate(variableName);\n if (!template) return;\n const name = normalizeVariableName(variableName) ?? \"\";\n const cursorOffset = placeCursorAtEnd ? template.length : 3 + name.length; // Opening braces and one padding space\n\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + cursorOffset,\n },\n });\n view.focus();\n },\n [disabled]\n );\n\n const insertVariableTemplate = useCallback(() => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n insertVariableContent(\"\");\n }, [closeVariableSearch, disabled, insertVariableContent]);\n\n const insertConfirmOutputMarker = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"======\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 3,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertLinkTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"[]()\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 1,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertButtonTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"?[]\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 2,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertSingleChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }} ${optionLabel1} | ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const insertMultiChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }} ${optionLabel1} || ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const insertInputFieldTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const placeholder = toolbarLabels.inputPlaceholder ?? \"请输入\";\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }}...${placeholder}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.inputPlaceholder,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const handleSelectImage = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n }: {\n resourceUrl?: string;\n resourceTitle?: string;\n scalePercent?: number;\n }) => {\n if (!resourceUrl || disabled) return;\n const textToInsert = getImageContentToInsert({\n resourceUrl,\n resourceTitle,\n scalePercent,\n });\n if (selectContentInfo?.type === SelectedOption.Image) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVideo = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n }: {\n resourceUrl: string;\n resourceTitle: string;\n }) => {\n if (disabled) {\n return;\n }\n const textToInsert = getVideoContentToInsert(resourceUrl, resourceTitle);\n if (selectContentInfo?.type === SelectedOption.Video) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVariable = useCallback(\n (variable: Variable) => {\n if (disabled) {\n return;\n }\n const selectionRange =\n selectContentInfo?.type === SelectedOption.Variable\n ? { from: selectContentInfo.from, to: selectContentInfo.to }\n : undefined;\n insertVariableContent(variable.name, selectionRange, true);\n setPopoverOpen(false);\n closeVariableSearch();\n },\n [disabled, insertVariableContent, selectContentInfo, closeVariableSearch]\n );\n\n const slashCommandsExtension = useCallback(() => {\n return autocompletion({\n override: [\n createSlashCommands(\n onSelectedOption,\n {\n // divider: currentStrings.slashDivider,\n // fixedText: currentStrings.slashFixedText,\n image: currentStrings.slashImage,\n video: currentStrings.slashVideo,\n variable: currentStrings.slashVariable,\n },\n { enableVariables: !questionMode }\n ),\n ],\n });\n }, [\n // currentStrings.slashDivider,\n // currentStrings.slashFixedText,\n currentStrings.slashImage,\n currentStrings.slashVideo,\n currentStrings.slashVariable,\n onSelectedOption,\n questionMode,\n ]);\n\n // const fixedTextPlaceholderExtension = useMemo(\n // () =>\n // createFixedTextPlaceholder(\n // currentStrings.fixedTextPlaceholder ?? \"添加固定文本\",\n // currentStrings.fixedTextTooltip ??\n // currentStrings.slashFixedText ??\n // \"固定文本\"\n // ),\n // [\n // currentStrings.fixedTextPlaceholder,\n // currentStrings.fixedTextTooltip,\n // currentStrings.slashFixedText,\n // ]\n // );\n\n const handleEditorUpdate = useCallback(\n (update: ViewUpdate) => {\n editorViewRef.current = update.view;\n if (\n !questionMode &&\n editMode === EditMode.QuickEdit &&\n pendingVariableContentRef.current &&\n update.selectionSet\n ) {\n const cursorPosition = update.state.selection.main.head;\n const docText = update.state.doc.toString();\n const stillInside = isCursorInsideVariableExpression(\n docText,\n cursorPosition\n );\n if (!stillInside) {\n addVariablesFromContent(docText);\n pendingVariableContentRef.current = null;\n }\n }\n },\n [addVariablesFromContent, editMode, questionMode]\n );\n\n const handleTagClick = useCallback(\n (event: any) => {\n event.stopPropagation();\n if (disabled) {\n return;\n }\n const { type, from, to, dataset, target } = event.detail;\n if (questionMode && type === SelectedOption.Variable) return;\n const value = parseContentInfo(type, dataset);\n setSelectContentInfo({\n type,\n value,\n from,\n to,\n });\n setSelectedOption(type);\n\n if (type === SelectedOption.Variable) {\n if (target) {\n const rect = target.getBoundingClientRect();\n const anchorDirection =\n target.ownerDocument.defaultView?.getComputedStyle(\n editorRootRef.current ?? target\n ).direction;\n setPopoverPosition({\n x: anchorDirection === \"rtl\" ? rect.right : rect.left,\n y: rect.bottom,\n });\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [disabled, questionMode]\n );\n\n useEffect(() => {\n if (!dialogOpen) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [dialogOpen]);\n\n useEffect(() => {\n if (!popoverOpen && selectedOption === SelectedOption.Variable) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [popoverOpen, selectedOption]);\n\n useEffect(() => {\n const handleWrap = (e: any) => {\n if (e.detail.view === editorViewRef.current) {\n handleTagClick(e);\n }\n };\n window.addEventListener(\"globalTagClick\", handleWrap);\n return () => {\n window.removeEventListener(\"globalTagClick\", handleWrap);\n };\n }, [handleTagClick]);\n\n const imagePlaceholderTitle = t(\"imageDefaultTitle\");\n const videoPlaceholderTitle = t(\"videoDefaultTitle\");\n const mediaPlaceholderLabelsExtension = useMemo(\n () =>\n mediaPlaceholderLabels.of({\n image: imagePlaceholderTitle,\n video: videoPlaceholderTitle,\n }),\n [imagePlaceholderTitle, videoPlaceholderTitle]\n );\n\n const editorExtensions = useMemo(() => {\n const extensions = [\n EditorView.lineWrapping,\n markdown(),\n syntaxHighlighting(defaultHighlightStyle),\n questionMode ? QuestionSyntaxHighlighter : SyntaxHighlighter,\n ];\n\n if (!disabled) {\n extensions.push(slashCommandsExtension());\n }\n\n if (editMode === EditMode.QuickEdit) {\n extensions.push(\n mediaPlaceholderLabelsExtension,\n ImgPlaceholder,\n VideoPlaceholder\n // fixedTextPlaceholderExtension,\n // DividerPlaceholder,\n );\n if (!questionMode) extensions.push(VariablePlaceholder);\n }\n\n extensions.push(\n EditorView.updateListener.of((update) => {\n handleEditorUpdate(update);\n })\n );\n\n return extensions;\n }, [\n disabled,\n editMode,\n slashCommandsExtension,\n handleEditorUpdate,\n mediaPlaceholderLabelsExtension,\n questionMode,\n ]);\n\n const handleContentChange = useCallback(\n (value: string) => {\n if (disabled) {\n return;\n }\n if (questionMode) {\n onChange?.(value);\n return;\n }\n const cursorPosition =\n editorViewRef.current?.state.selection.main.head ?? -1;\n const skipAddition = isCursorInsideVariableExpression(\n value,\n cursorPosition\n );\n if (skipAddition) {\n pendingVariableContentRef.current = value;\n } else {\n pendingVariableContentRef.current = null;\n addVariablesFromContent(value);\n }\n onChange?.(value);\n },\n [addVariablesFromContent, onChange, disabled, questionMode]\n );\n\n const isVariableSearchOpen = !questionMode && !disabled && variableSearchOpen;\n const editorApi = useMemo(\n () => ({\n insertTextAtCursor: insertText,\n replaceSelection,\n focus: focusEditor,\n getContent,\n setContent,\n }),\n [focusEditor, getContent, insertText, replaceSelection, setContent]\n );\n\n const handleToolbarActionClick = useCallback(\n (action: EditorAction) => {\n if (disabled || \"render\" in action) {\n return;\n }\n action.onClick?.(editorApi);\n },\n [disabled, editorApi]\n );\n\n const toolbarRightSlot = useMemo(() => {\n if (!toolbarActionsRight?.length) {\n return null;\n }\n return (\n <div className=\"markdown-flow-editor-toolbar-right\">\n {toolbarActionsRight.map((action) => {\n if (\"render\" in action) {\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {action.render(editorApi)}\n </div>\n );\n }\n const ariaLabel = action.label || action.tooltip || undefined;\n const button = (\n <button\n type=\"button\"\n key={action.key}\n disabled={disabled || action.disabled}\n onClick={() => handleToolbarActionClick(action)}\n className=\"markdown-flow-editor-toolbar-right-button\"\n aria-label={ariaLabel}\n title={action.label || action.tooltip}\n >\n {action.icon ? (\n <span className=\"toolbar-right-icon\">{action.icon}</span>\n ) : null}\n {action.label ? (\n <span className=\"toolbar-right-label\">{action.label}</span>\n ) : null}\n </button>\n );\n const wrapped = action.tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"top\"\n dir={portalDirection}\n lang={portalLanguage}\n >\n {action.tooltip}\n </TooltipContent>\n </Tooltip>\n ) : (\n button\n );\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {wrapped}\n </div>\n );\n })}\n </div>\n );\n }, [\n disabled,\n editorApi,\n handleToolbarActionClick,\n portalDirection,\n portalLanguage,\n toolbarActionsRight,\n ]);\n\n useEffect(() => {\n onReady?.(editorApi);\n }, [editorApi]);\n\n return (\n <div\n className=\"markdown-flow-editor\"\n ref={editorRootRef}\n dir={direction}\n lang={language}\n data-disabled={disabled ? \"true\" : undefined}\n aria-disabled={disabled}\n >\n <EditorToolbar\n disabled={disabled}\n enableVariables={!questionMode}\n labels={toolbarLabels}\n tooltipDirection={portalDirection}\n tooltipLanguage={portalLanguage}\n onSelect={onSelectedOption}\n onInsertVariablePlaceholder={insertVariableTemplate}\n onVariableSearchToggle={handleVariableSearchToggle}\n onVariableSearchClose={closeVariableSearch}\n onInsertConfirmOutput={insertConfirmOutputMarker}\n onInsertLink={insertLinkTemplate}\n onInsertButton={insertButtonTemplate}\n onInsertSingleChoice={insertSingleChoiceTemplate}\n onInsertMultiChoice={insertMultiChoiceTemplate}\n onInsertInputField={insertInputFieldTemplate}\n variableSearchActive={isVariableSearchOpen}\n rightSlot={toolbarRightSlot}\n />\n {!questionMode && (\n <VariableSearchDropdown\n open={isVariableSearchOpen}\n anchorElement={variableSearchAnchorRef.current}\n onClose={closeVariableSearch}\n onSelect={handleSelectVariable}\n variables={variables}\n systemVariables={systemVariables}\n labels={variableSearchLabels}\n />\n )}\n <div className=\"markdown-flow-editor-body relative overflow-auto\">\n <EditorContext.Provider value={editorContextValue}>\n <CodeMirror\n extensions={editorExtensions}\n basicSetup={{\n lineNumbers: false,\n searchKeymap: false,\n syntaxHighlighting: true,\n highlightActiveLine: true,\n highlightActiveLineGutter: true,\n foldGutter: false,\n }}\n className=\"rounded-md\"\n placeholder={placeholderText}\n value={content}\n theme=\"light\"\n minHeight=\"2rem\"\n editable={!disabled}\n onChange={handleContentChange}\n onBlur={onBlur}\n />\n {!disabled && (\n <CustomDialog\n dir={portalDirection}\n lang={portalLanguage}\n labels={{\n closeButtonLabel: t(\"dialogCloseLabel\"),\n title:\n selectedOption === SelectedOption.Image\n ? t(\"dialogTitleImage\")\n : selectedOption === SelectedOption.Video\n ? t(\"dialogTitleVideo\")\n : selectedOption === SelectedOption.Variable\n ? t(\"dialogTitleVariable\")\n : t(\"dialogTitle\"),\n }}\n >\n {selectedOption === SelectedOption.Image && (\n <ImageInject\n value={selectContentInfo?.value}\n onSelect={handleSelectImage}\n uploadProps={uploadProps}\n />\n )}\n {selectedOption === SelectedOption.Video && (\n <VideoInject\n value={selectContentInfo?.value}\n onSelect={handleSelectVideo}\n />\n )}\n </CustomDialog>\n )}\n\n {!disabled && !questionMode && (\n <CustomPopover dir={portalDirection} lang={portalLanguage}>\n <VariableSelect\n variables={variables}\n systemVariables={systemVariables}\n selectedName={selectContentInfo?.value?.variableName}\n onSelect={handleSelectVariable}\n onAddVariable={(variable) => {\n setVariables((prev) => {\n const normalized = variable.name;\n const exists = prev.some(\n (item) => item.name === normalized\n );\n if (exists) {\n return prev;\n }\n return [variable, ...prev];\n });\n }}\n />\n </CustomPopover>\n )}\n </EditorContext.Provider>\n </div>\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["i18next","editorLocaleResources","lng","resource","initReactI18next","DEFAULT_EDITOR_LOCALE","EMPTY_VARIABLES","isCursorInsideVariableExpression","content","cursorPosition","marker","findDocumentVariableMarkers","buildVariableTemplate","variableName","formatVariableReference","Editor","editMode","questionMode","initialVariables","initialSystemVariables","onChange","onBlur","locale","lang","uploadProps","disabled","toolbarActionsRight","onReady","t","i18n","useTranslation","resolvedLocale","normalizeMarkdownFlowLocale","direction","getMarkdownFlowDirection","language","getMarkdownFlowLanguage","useEffect","currentStrings","getEditorLocaleMessages","toolbarLabels","useMemo","variableSearchLabels","placeholderText","normalizedSystemVariables","seen","variable","name","normalizeVariableName","normalizedCustomVariables","systemNameSet","dialogOpen","setDialogOpen","useState","popoverOpen","setPopoverOpen","editorRootRef","useRef","portalLanguage","useDetachedLanguage","portalDirection","useResolvedDirection","popoverPosition","setPopoverPosition","variables","setVariables","systemVariables","setSystemVariables","selectedOption","setSelectedOption","SelectedOption","selectContentInfo","setSelectContentInfo","editorViewRef","pendingVariableContentRef","variableSearchAnchorRef","variableSearchOpen","setVariableSearchOpen","closeVariableSearch","useCallback","handleVariableSearchToggle","button","editorContextValue","addVariablesFromContent","text","names","extractVariableNames","prev","existingNames","addedNames","newVariables","rawName","normalized","onSelectedOption","option","state","pos","coords","insertText","dispatch","from","replaceSelection","selection","focusEditor","getContent","setContent","view","deleteSelectedContent","to","insertVariableContent","range","placeCursorAtEnd","template","cursorOffset","insertVariableTemplate","insertConfirmOutputMarker","insertLinkTemplate","insertButtonTemplate","insertSingleChoiceTemplate","optionLabel1","optionLabel2","insertMultiChoiceTemplate","insertInputFieldTemplate","placeholder","handleSelectImage","resourceUrl","resourceTitle","scalePercent","textToInsert","getImageContentToInsert","handleSelectVideo","getVideoContentToInsert","handleSelectVariable","selectionRange","slashCommandsExtension","autocompletion","createSlashCommands","handleEditorUpdate","update","docText","handleTagClick","event","type","dataset","target","value","parseContentInfo","rect","anchorDirection","handleWrap","e","imagePlaceholderTitle","videoPlaceholderTitle","mediaPlaceholderLabelsExtension","mediaPlaceholderLabels","editorExtensions","extensions","EditorView","markdown","syntaxHighlighting","defaultHighlightStyle","QuestionSyntaxHighlighter","SyntaxHighlighter","ImgPlaceholder","VideoPlaceholder","VariablePlaceholder","handleContentChange","isVariableSearchOpen","editorApi","handleToolbarActionClick","action","toolbarRightSlot","jsx","ariaLabel","jsxs","wrapped","Tooltip","TooltipTrigger","TooltipContent","EditorToolbar","VariableSearchDropdown","EditorContext","CodeMirror","CustomDialog","ImageInject","VideoInject","CustomPopover","VariableSelect","item"],"mappings":"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"}
1
+ {"version":3,"file":"MarkdownFlowEditor.es.js","sources":["../../../src/components/MarkdownFlowEditor/MarkdownFlowEditor.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useCallback, useRef, useEffect, useMemo } from \"react\";\nimport CodeMirror from \"@uiw/react-codemirror\";\nimport { autocompletion } from \"@codemirror/autocomplete\";\nimport { EditorView, ViewUpdate } from \"@codemirror/view\";\nimport { markdown } from \"@codemirror/lang-markdown\";\nimport {\n syntaxHighlighting,\n defaultHighlightStyle,\n} from \"@codemirror/language\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../ui/tooltip\";\nimport CustomDialog from \"./components/CustomDialog\";\nimport CustomPopover from \"./components/CustomPopover\";\nimport EditorToolbar from \"./components/EditorToolbar\";\nimport VariableSearchDropdown from \"./components/VariableSearchDropdown\";\nimport EditorContext from \"./editor-context\";\nimport ImageInject from \"./components/ImageInject\";\nimport VideoInject from \"./components/VideoInject\";\nimport VariableSelect from \"./components/VariableSelect\";\nimport {\n SelectedOption,\n IEditorContext,\n Variable,\n SelectContentInfo,\n PopoverPosition,\n EditorAction,\n EditorApi,\n} from \"./types\";\nimport \"./markdownFlowEditor.css\";\n\nimport {\n createSlashCommands,\n parseContentInfo,\n getImageContentToInsert,\n getVideoContentToInsert,\n extractVariableNames,\n findDocumentVariableMarkers,\n formatVariableReference,\n normalizeVariableName,\n} from \"./utils\";\nimport ImgPlaceholder from \"./plugins/ImgPlaceholder\";\nimport VideoPlaceholder from \"./plugins/VideoPlaceholder\";\nimport { mediaPlaceholderLabels } from \"./plugins/mediaPlaceholderLabels\";\nimport VariablePlaceholder from \"./plugins/VariablePlaceholder\";\nimport SyntaxHighlighter, {\n QuestionSyntaxHighlighter,\n} from \"./plugins/SyntaxHighlighter\";\n// import createFixedTextPlaceholder from \"./plugins/FixedTextPlaceholder\";\n// import DividerPlaceholder from \"./plugins/DividerPlaceholder\";\nimport { initReactI18next, useTranslation } from \"react-i18next\";\nimport i18next from \"i18next\";\nimport { UploadProps } from \"./uploadTypes\";\nimport {\n DEFAULT_EDITOR_LOCALE,\n editorLocaleResources,\n getEditorLocaleMessages,\n} from \"./editorI18n\";\nimport {\n getMarkdownFlowDirection,\n getMarkdownFlowLanguage,\n normalizeMarkdownFlowLocale,\n type MarkdownFlowLocale,\n} from \"../../lib/locale\";\nimport { useDetachedLanguage } from \"../../lib/useDetachedLanguage\";\nimport { useResolvedDirection } from \"../../lib/useResolvedDirection\";\n\nif (!i18next.isInitialized) {\n i18next.use(initReactI18next).init({\n resources: editorLocaleResources,\n lng: DEFAULT_EDITOR_LOCALE,\n fallbackLng: DEFAULT_EDITOR_LOCALE,\n interpolation: { escapeValue: false },\n });\n} else {\n Object.entries(editorLocaleResources).forEach(([lng, resource]) => {\n i18next.addResourceBundle(\n lng,\n \"translation\",\n resource.translation,\n true,\n true\n );\n });\n}\n\nexport enum EditMode {\n CodeEdit = \"codeEdit\",\n QuickEdit = \"quickEdit\",\n}\n\ntype EditorProps = {\n content?: string;\n editMode?: EditMode;\n /** Author questions and memory answers without variable authoring controls. */\n questionMode?: boolean;\n variables?: Variable[];\n systemVariables?: Variable[];\n onChange?: (value: string) => void;\n onBlur?: () => void;\n locale?: MarkdownFlowLocale;\n /** Overrides the locale-derived language. */\n lang?: string;\n uploadProps?: UploadProps;\n disabled?: boolean;\n toolbarActionsRight?: EditorAction[];\n onReady?: (api: EditorApi) => void;\n};\n\nconst EMPTY_VARIABLES: Variable[] = [];\n\n// Detect whether cursor is still inside a {{variable}} expression\nconst isCursorInsideVariableExpression = (\n content: string,\n cursorPosition: number\n) => {\n if (!content || cursorPosition < 0) {\n return false;\n }\n for (const marker of findDocumentVariableMarkers(content)) {\n if (\n marker.name !== null &&\n cursorPosition >= marker.start + 2 &&\n cursorPosition <= marker.end - 2\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nconst buildVariableTemplate = (variableName = \"\") =>\n variableName ? formatVariableReference(variableName) : \"{{ }}\";\n\nconst Editor: React.FC<EditorProps> = ({\n content = \"\",\n editMode = EditMode.CodeEdit,\n questionMode = false,\n variables: initialVariables,\n systemVariables: initialSystemVariables,\n onChange,\n onBlur,\n locale,\n lang,\n uploadProps,\n disabled = false,\n toolbarActionsRight,\n onReady,\n}) => {\n const { t, i18n } = useTranslation();\n const resolvedLocale = normalizeMarkdownFlowLocale(\n locale ?? DEFAULT_EDITOR_LOCALE\n );\n const direction = getMarkdownFlowDirection(locale);\n const language = lang ?? getMarkdownFlowLanguage(locale);\n\n useEffect(() => {\n if (i18n.language !== resolvedLocale) {\n i18n.changeLanguage(resolvedLocale);\n }\n }, [i18n, resolvedLocale]);\n\n const currentStrings = getEditorLocaleMessages(resolvedLocale);\n const toolbarLabels = useMemo(\n () => ({\n image: t(\"toolbarInsertImage\", {\n defaultValue: \"Insert image\",\n }),\n video: t(\"toolbarInsertVideo\", {\n defaultValue: \"Insert video\",\n }),\n variable: t(\"slashVariable\", {\n defaultValue: \"Variable\",\n }),\n addVariable: t(\"toolbarInsertNewVariable\", {\n defaultValue: \"Insert new variable\",\n }),\n search: t(\"toolbarInsertExistingVariable\", {\n defaultValue: \"Insert existing variable\",\n }),\n confirmOutput: t(\"toolbarConfirmOutput\", {\n defaultValue: \"Confirm output\",\n }),\n insertLink: t(\"toolbarInsertLink\", {\n defaultValue: \"Insert link\",\n }),\n insertButton: t(\"toolbarInsertButton\", {\n defaultValue: \"Insert button\",\n }),\n insertSingleChoice: t(\"toolbarInsertSingleChoice\", {\n defaultValue: \"Insert single choice\",\n }),\n insertMultiChoice: t(\"toolbarInsertMultiChoice\", {\n defaultValue: \"Insert multi choice\",\n }),\n insertInput: t(\"toolbarInsertInput\", {\n defaultValue: \"Insert input\",\n }),\n singleChoiceOption1: t(\"toolbarChoiceOption1\", {\n defaultValue: \"Option 1\",\n }),\n singleChoiceOption2: t(\"toolbarChoiceOption2\", {\n defaultValue: \"Option 2\",\n }),\n inputPlaceholder: t(\"toolbarInputPlaceholder\", {\n defaultValue: \"Please enter\",\n }),\n }),\n [t]\n );\n const variableSearchLabels = useMemo(\n () => ({\n searchPlaceholder: t(\"variableSearchPlaceholder\", {\n defaultValue: \"Search variable\",\n }),\n systemLabel: t(\"variableSectionSystem\", \"System Variables\"),\n customLabel: t(\"variableSectionCustom\", \"Custom Variables\"),\n emptyLabel: t(\"variableNotFound\", \"No variables found\"),\n }),\n [t]\n );\n const placeholderText =\n editMode === EditMode.QuickEdit\n ? t(\"placeholderQuickEdit\", {\n defaultValue: t(\"placeholderCodeEdit\", {\n defaultValue: t(\"placeholder\"),\n }),\n })\n : t(\"placeholderCodeEdit\", { defaultValue: t(\"placeholder\") });\n // Only boundary whitespace is normalized; key identity remains case-sensitive.\n const normalizedSystemVariables = useMemo(() => {\n const seen = new Set<string>();\n return (initialSystemVariables ?? EMPTY_VARIABLES).flatMap((variable) => {\n const name =\n typeof variable?.name === \"string\"\n ? normalizeVariableName(variable.name)\n : null;\n if (name === null || seen.has(name)) return [];\n seen.add(name);\n return [{ ...variable, name }];\n });\n }, [initialSystemVariables]);\n\n const normalizedCustomVariables = useMemo(() => {\n const systemNameSet = new Set(\n normalizedSystemVariables.map((variable) => variable.name)\n );\n const seen = new Set<string>();\n return (initialVariables ?? EMPTY_VARIABLES).flatMap((variable) => {\n const name =\n typeof variable?.name === \"string\"\n ? normalizeVariableName(variable.name)\n : null;\n if (name === null || systemNameSet.has(name) || seen.has(name)) return [];\n seen.add(name);\n return [{ ...variable, name }];\n });\n }, [initialVariables, normalizedSystemVariables]);\n\n const [dialogOpen, setDialogOpen] = useState(false);\n const [popoverOpen, setPopoverOpen] = useState(false);\n const editorRootRef = useRef<HTMLDivElement>(null);\n const portalLanguage = useDetachedLanguage(editorRootRef, language);\n const { resolvedDirection: portalDirection } = useResolvedDirection(\n editorRootRef,\n direction\n );\n const [popoverPosition, setPopoverPosition] =\n useState<PopoverPosition | null>(null);\n const [variables, setVariables] = useState<Variable[]>(\n normalizedCustomVariables\n );\n const [systemVariables, setSystemVariables] = useState<Variable[]>(\n normalizedSystemVariables\n );\n\n useEffect(() => {\n setVariables(normalizedCustomVariables);\n }, [normalizedCustomVariables]);\n\n useEffect(() => {\n setSystemVariables(normalizedSystemVariables);\n }, [normalizedSystemVariables]);\n\n const [selectedOption, setSelectedOption] = useState<SelectedOption>(\n SelectedOption.Empty\n );\n const [selectContentInfo, setSelectContentInfo] =\n useState<SelectContentInfo | null>();\n const editorViewRef = useRef<EditorView | null>(null);\n const pendingVariableContentRef = useRef<string | null>(null);\n const variableSearchAnchorRef = useRef<HTMLButtonElement | null>(null);\n const [variableSearchOpen, setVariableSearchOpen] = useState(false);\n const closeVariableSearch = useCallback(() => {\n setVariableSearchOpen(false);\n variableSearchAnchorRef.current = null;\n }, []);\n\n useEffect(() => {\n if (questionMode) {\n closeVariableSearch();\n }\n }, [closeVariableSearch, questionMode]);\n const handleVariableSearchToggle = useCallback(\n (button: HTMLButtonElement) => {\n if (disabled) {\n return;\n }\n if (variableSearchOpen && variableSearchAnchorRef.current === button) {\n closeVariableSearch();\n return;\n }\n variableSearchAnchorRef.current = button;\n setVariableSearchOpen(true);\n },\n [closeVariableSearch, disabled, variableSearchOpen]\n );\n\n const editorContextValue: IEditorContext = {\n selectedOption,\n setSelectedOption,\n dialogOpen,\n setDialogOpen,\n popoverOpen,\n setPopoverOpen,\n popoverPosition,\n setPopoverPosition,\n };\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n setDialogOpen(false);\n setPopoverOpen(false);\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n setPopoverPosition(null);\n closeVariableSearch();\n }, [\n closeVariableSearch,\n disabled,\n setDialogOpen,\n setPopoverOpen,\n setPopoverPosition,\n setSelectedOption,\n setSelectContentInfo,\n ]);\n\n const addVariablesFromContent = useCallback(\n (text: string) => {\n if (questionMode || editMode !== EditMode.QuickEdit || !text) {\n return;\n }\n\n const names = extractVariableNames(text);\n if (!names.length) {\n return;\n }\n\n const systemNameSet = new Set(\n systemVariables.map((variable) => variable.name)\n );\n\n setVariables((prev) => {\n const existingNames = new Set(prev.map((variable) => variable.name));\n const addedNames = new Set<string>();\n const newVariables: Variable[] = [];\n\n names.forEach((rawName) => {\n const normalized = rawName;\n if (\n !rawName ||\n systemNameSet.has(normalized) ||\n existingNames.has(normalized) ||\n addedNames.has(normalized)\n ) {\n return;\n }\n newVariables.push({ name: rawName });\n addedNames.add(normalized);\n });\n\n if (!newVariables.length) {\n return prev;\n }\n\n return [...newVariables, ...prev];\n });\n },\n [editMode, questionMode, systemVariables]\n );\n\n useEffect(() => {\n addVariablesFromContent(content);\n }, [content, addVariablesFromContent]);\n\n // const insertFixedText = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const selectedText = state.sliceDoc(selection.from, selection.to);\n // const startTag = \"===\";\n // const endTag = \"===\";\n // const insertContent = `${startTag}${selectedText ?? \"\"}${endTag}`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + startTag.length + (selectedText?.length ?? 0),\n // },\n // });\n // view.focus();\n // }, []);\n\n // const insertDivider = useCallback(() => {\n // if (!editorViewRef.current) return;\n // const view = editorViewRef.current;\n // const { state, dispatch } = view;\n // const selection = state.selection.main;\n // const insertContent = `\\n\\n---\\n\\n`;\n\n // dispatch({\n // changes: {\n // from: selection.from,\n // to: selection.to,\n // insert: insertContent,\n // },\n // selection: {\n // anchor: selection.from + insertContent.length,\n // },\n // });\n // view.focus();\n // }, []);\n\n const onSelectedOption = useCallback(\n (option: SelectedOption) => {\n if (disabled || (questionMode && option === SelectedOption.Variable)) {\n return;\n }\n closeVariableSearch();\n // if (option === SelectedOption.FixedText) {\n // insertFixedText();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n // if (option === SelectedOption.Divider) {\n // insertDivider();\n // setSelectedOption(SelectedOption.Empty);\n // setDialogOpen(false);\n // setPopoverOpen(false);\n // setSelectContentInfo(null);\n // setPopoverPosition(null);\n // return;\n // }\n\n setSelectedOption(option);\n\n if (option === SelectedOption.Variable) {\n if (editorViewRef.current) {\n const { state } = editorViewRef.current;\n const pos = state.selection.main.from;\n const coords = editorViewRef.current.coordsAtPos(pos);\n if (coords) {\n setPopoverPosition({\n x: coords.left,\n y: coords.bottom,\n });\n }\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [closeVariableSearch, disabled, questionMode]\n );\n\n const insertText = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) return;\n\n const { state, dispatch } = editorViewRef.current;\n const from = state.selection.main.from;\n\n dispatch({\n changes: { from, insert: text },\n selection: { anchor: from + text.length },\n });\n },\n [editorViewRef, disabled]\n );\n\n const replaceSelection = useCallback(\n (text: string) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const { state, dispatch } = editorViewRef.current;\n const selection = state.selection.main;\n dispatch({\n changes: { from: selection.from, to: selection.to, insert: text },\n selection: { anchor: selection.from + text.length },\n });\n },\n [disabled]\n );\n\n const focusEditor = useCallback(() => {\n editorViewRef.current?.focus();\n }, []);\n\n const getContent = useCallback(() => {\n return editorViewRef.current?.state.doc.toString() ?? \"\";\n }, []);\n\n const setContent = useCallback(\n (text: string) => {\n if (disabled) {\n return;\n }\n if (!editorViewRef.current) {\n onChange?.(text);\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n dispatch({\n changes: { from: 0, to: state.doc.length, insert: text },\n selection: { anchor: text.length },\n });\n },\n [disabled, onChange]\n );\n\n const deleteSelectedContent = useCallback(() => {\n if (disabled) {\n return;\n }\n if (\n !selectContentInfo ||\n !editorViewRef.current ||\n selectContentInfo.from === -1\n )\n return;\n\n const { from, to } = selectContentInfo;\n const { dispatch } = editorViewRef.current;\n\n dispatch({\n changes: { from, to, insert: \"\" },\n });\n }, [selectContentInfo, editorViewRef, disabled]);\n\n const insertVariableContent = useCallback(\n (\n variableName: string,\n range?: { from: number; to: number },\n placeCursorAtEnd = false\n ) => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = range ?? state.selection.main;\n const template = buildVariableTemplate(variableName);\n if (!template) return;\n const name = normalizeVariableName(variableName) ?? \"\";\n const cursorOffset = placeCursorAtEnd ? template.length : 3 + name.length; // Opening braces and one padding space\n\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + cursorOffset,\n },\n });\n view.focus();\n },\n [disabled]\n );\n\n const insertVariableTemplate = useCallback(() => {\n if (disabled) {\n return;\n }\n closeVariableSearch();\n insertVariableContent(\"\");\n }, [closeVariableSearch, disabled, insertVariableContent]);\n\n const insertConfirmOutputMarker = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"======\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 3,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertLinkTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"[]()\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 1,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertButtonTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const template = \"?[]\";\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 2,\n },\n });\n view.focus();\n }, [disabled]);\n\n const insertSingleChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }} ${optionLabel1} | ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const insertMultiChoiceTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const optionLabel1 = toolbarLabels.singleChoiceOption1;\n const optionLabel2 = toolbarLabels.singleChoiceOption2;\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }} ${optionLabel1} || ${optionLabel2}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.singleChoiceOption1,\n toolbarLabels.singleChoiceOption2,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const insertInputFieldTemplate = useCallback(() => {\n if (disabled || !editorViewRef.current) {\n return;\n }\n const view = editorViewRef.current;\n const { state, dispatch } = view;\n const selection = state.selection.main;\n const placeholder = toolbarLabels.inputPlaceholder ?? \"请输入\";\n const template = `?[%{{ ${questionMode ? currentStrings.questionPlaceholder : \"\"} }}...${placeholder}]`;\n dispatch({\n changes: {\n from: selection.from,\n to: selection.to,\n insert: template,\n },\n selection: {\n anchor: selection.from + 6,\n head:\n selection.from +\n 6 +\n (questionMode ? currentStrings.questionPlaceholder.length : 0),\n },\n });\n view.focus();\n }, [\n disabled,\n toolbarLabels.inputPlaceholder,\n questionMode,\n currentStrings.questionPlaceholder,\n ]);\n\n const handleSelectImage = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n }: {\n resourceUrl?: string;\n resourceTitle?: string;\n scalePercent?: number;\n }) => {\n if (!resourceUrl || disabled) return;\n const textToInsert = getImageContentToInsert({\n resourceUrl,\n resourceTitle,\n scalePercent,\n });\n if (selectContentInfo?.type === SelectedOption.Image) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVideo = useCallback(\n ({\n resourceUrl,\n resourceTitle,\n }: {\n resourceUrl: string;\n resourceTitle: string;\n }) => {\n if (disabled) {\n return;\n }\n const textToInsert = getVideoContentToInsert(resourceUrl, resourceTitle);\n if (selectContentInfo?.type === SelectedOption.Video) {\n deleteSelectedContent();\n if (!editorViewRef.current) return;\n const { dispatch } = editorViewRef.current;\n dispatch({\n changes: { from: selectContentInfo.from, insert: textToInsert },\n });\n } else {\n insertText(textToInsert);\n }\n setDialogOpen(false);\n },\n [deleteSelectedContent, disabled, insertText, selectContentInfo]\n );\n\n const handleSelectVariable = useCallback(\n (variable: Variable) => {\n if (disabled) {\n return;\n }\n const selectionRange =\n selectContentInfo?.type === SelectedOption.Variable\n ? { from: selectContentInfo.from, to: selectContentInfo.to }\n : undefined;\n insertVariableContent(variable.name, selectionRange, true);\n setPopoverOpen(false);\n closeVariableSearch();\n },\n [disabled, insertVariableContent, selectContentInfo, closeVariableSearch]\n );\n\n const slashCommandsExtension = useCallback(() => {\n return autocompletion({\n override: [\n createSlashCommands(\n onSelectedOption,\n {\n // divider: currentStrings.slashDivider,\n // fixedText: currentStrings.slashFixedText,\n image: currentStrings.slashImage,\n video: currentStrings.slashVideo,\n variable: currentStrings.slashVariable,\n },\n { enableVariables: !questionMode }\n ),\n ],\n });\n }, [\n // currentStrings.slashDivider,\n // currentStrings.slashFixedText,\n currentStrings.slashImage,\n currentStrings.slashVideo,\n currentStrings.slashVariable,\n onSelectedOption,\n questionMode,\n ]);\n\n // const fixedTextPlaceholderExtension = useMemo(\n // () =>\n // createFixedTextPlaceholder(\n // currentStrings.fixedTextPlaceholder ?? \"添加固定文本\",\n // currentStrings.fixedTextTooltip ??\n // currentStrings.slashFixedText ??\n // \"固定文本\"\n // ),\n // [\n // currentStrings.fixedTextPlaceholder,\n // currentStrings.fixedTextTooltip,\n // currentStrings.slashFixedText,\n // ]\n // );\n\n const handleEditorUpdate = useCallback(\n (update: ViewUpdate) => {\n editorViewRef.current = update.view;\n if (\n !questionMode &&\n editMode === EditMode.QuickEdit &&\n pendingVariableContentRef.current &&\n update.selectionSet\n ) {\n const cursorPosition = update.state.selection.main.head;\n const docText = update.state.doc.toString();\n const stillInside = isCursorInsideVariableExpression(\n docText,\n cursorPosition\n );\n if (!stillInside) {\n addVariablesFromContent(docText);\n pendingVariableContentRef.current = null;\n }\n }\n },\n [addVariablesFromContent, editMode, questionMode]\n );\n\n const handleTagClick = useCallback(\n (event: any) => {\n event.stopPropagation();\n if (disabled) {\n return;\n }\n const { type, from, to, dataset, target } = event.detail;\n if (questionMode && type === SelectedOption.Variable) return;\n const value = parseContentInfo(type, dataset);\n setSelectContentInfo({\n type,\n value,\n from,\n to,\n });\n setSelectedOption(type);\n\n if (type === SelectedOption.Variable) {\n if (target) {\n const rect = target.getBoundingClientRect();\n const anchorDirection =\n target.ownerDocument.defaultView?.getComputedStyle(\n editorRootRef.current ?? target\n ).direction;\n setPopoverPosition({\n x: anchorDirection === \"rtl\" ? rect.right : rect.left,\n y: rect.bottom,\n });\n }\n setPopoverOpen(true);\n } else {\n setDialogOpen(true);\n }\n },\n [disabled, questionMode]\n );\n\n useEffect(() => {\n if (!dialogOpen) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [dialogOpen]);\n\n useEffect(() => {\n if (!popoverOpen && selectedOption === SelectedOption.Variable) {\n setSelectedOption(SelectedOption.Empty);\n setSelectContentInfo(null);\n }\n }, [popoverOpen, selectedOption]);\n\n useEffect(() => {\n const handleWrap = (e: any) => {\n if (e.detail.view === editorViewRef.current) {\n handleTagClick(e);\n }\n };\n window.addEventListener(\"globalTagClick\", handleWrap);\n return () => {\n window.removeEventListener(\"globalTagClick\", handleWrap);\n };\n }, [handleTagClick]);\n\n const imagePlaceholderTitle = t(\"imageDefaultTitle\");\n const videoPlaceholderTitle = t(\"videoDefaultTitle\");\n const mediaPlaceholderLabelsExtension = useMemo(\n () =>\n mediaPlaceholderLabels.of({\n image: imagePlaceholderTitle,\n video: videoPlaceholderTitle,\n }),\n [imagePlaceholderTitle, videoPlaceholderTitle]\n );\n\n const editorExtensions = useMemo(() => {\n const extensions = [\n EditorView.lineWrapping,\n markdown(),\n syntaxHighlighting(defaultHighlightStyle),\n questionMode ? QuestionSyntaxHighlighter : SyntaxHighlighter,\n ];\n\n if (!disabled) {\n extensions.push(slashCommandsExtension());\n }\n\n if (editMode === EditMode.QuickEdit) {\n extensions.push(\n mediaPlaceholderLabelsExtension,\n ImgPlaceholder,\n VideoPlaceholder\n // fixedTextPlaceholderExtension,\n // DividerPlaceholder,\n );\n if (!questionMode) extensions.push(VariablePlaceholder);\n }\n\n extensions.push(\n EditorView.updateListener.of((update) => {\n handleEditorUpdate(update);\n })\n );\n\n return extensions;\n }, [\n disabled,\n editMode,\n slashCommandsExtension,\n handleEditorUpdate,\n mediaPlaceholderLabelsExtension,\n questionMode,\n ]);\n\n const handleContentChange = useCallback(\n (value: string) => {\n if (disabled) {\n return;\n }\n if (questionMode) {\n onChange?.(value);\n return;\n }\n const cursorPosition =\n editorViewRef.current?.state.selection.main.head ?? -1;\n const skipAddition = isCursorInsideVariableExpression(\n value,\n cursorPosition\n );\n if (skipAddition) {\n pendingVariableContentRef.current = value;\n } else {\n pendingVariableContentRef.current = null;\n addVariablesFromContent(value);\n }\n onChange?.(value);\n },\n [addVariablesFromContent, onChange, disabled, questionMode]\n );\n\n const isVariableSearchOpen = !questionMode && !disabled && variableSearchOpen;\n const editorApi = useMemo(\n () => ({\n insertTextAtCursor: insertText,\n replaceSelection,\n focus: focusEditor,\n getContent,\n setContent,\n }),\n [focusEditor, getContent, insertText, replaceSelection, setContent]\n );\n\n const handleToolbarActionClick = useCallback(\n (action: EditorAction) => {\n if (disabled || \"render\" in action) {\n return;\n }\n action.onClick?.(editorApi);\n },\n [disabled, editorApi]\n );\n\n const toolbarRightSlot = useMemo(() => {\n if (!toolbarActionsRight?.length) {\n return null;\n }\n return (\n <div className=\"markdown-flow-editor-toolbar-right\">\n {toolbarActionsRight.map((action) => {\n if (\"render\" in action) {\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {action.render(editorApi)}\n </div>\n );\n }\n const ariaLabel = action.label || action.tooltip || undefined;\n const button = (\n <button\n type=\"button\"\n key={action.key}\n disabled={disabled || action.disabled}\n onClick={() => handleToolbarActionClick(action)}\n className=\"markdown-flow-editor-toolbar-right-button\"\n aria-label={ariaLabel}\n title={action.label || action.tooltip}\n >\n {action.icon ? (\n <span className=\"toolbar-right-icon\">{action.icon}</span>\n ) : null}\n {action.label ? (\n <span className=\"toolbar-right-label\">{action.label}</span>\n ) : null}\n </button>\n );\n const wrapped = action.tooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent\n side=\"top\"\n dir={portalDirection}\n lang={portalLanguage}\n >\n {action.tooltip}\n </TooltipContent>\n </Tooltip>\n ) : (\n button\n );\n return (\n <div\n className=\"markdown-flow-editor-toolbar-right-item\"\n key={action.key}\n >\n {wrapped}\n </div>\n );\n })}\n </div>\n );\n }, [\n disabled,\n editorApi,\n handleToolbarActionClick,\n portalDirection,\n portalLanguage,\n toolbarActionsRight,\n ]);\n\n useEffect(() => {\n onReady?.(editorApi);\n }, [editorApi]);\n\n return (\n <div\n className=\"markdown-flow-editor\"\n ref={editorRootRef}\n dir={direction}\n lang={language}\n data-disabled={disabled ? \"true\" : undefined}\n aria-disabled={disabled}\n >\n <EditorToolbar\n disabled={disabled}\n enableVariables={!questionMode}\n labels={toolbarLabels}\n tooltipDirection={portalDirection}\n tooltipLanguage={portalLanguage}\n onSelect={onSelectedOption}\n onInsertVariablePlaceholder={insertVariableTemplate}\n onVariableSearchToggle={handleVariableSearchToggle}\n onVariableSearchClose={closeVariableSearch}\n onInsertConfirmOutput={insertConfirmOutputMarker}\n onInsertLink={insertLinkTemplate}\n onInsertButton={insertButtonTemplate}\n onInsertSingleChoice={insertSingleChoiceTemplate}\n onInsertMultiChoice={insertMultiChoiceTemplate}\n onInsertInputField={insertInputFieldTemplate}\n variableSearchActive={isVariableSearchOpen}\n rightSlot={toolbarRightSlot}\n />\n {!questionMode && (\n <VariableSearchDropdown\n open={isVariableSearchOpen}\n anchorElement={variableSearchAnchorRef.current}\n onClose={closeVariableSearch}\n onSelect={handleSelectVariable}\n variables={variables}\n systemVariables={systemVariables}\n labels={variableSearchLabels}\n />\n )}\n <div className=\"markdown-flow-editor-body relative overflow-auto\">\n <EditorContext.Provider value={editorContextValue}>\n <CodeMirror\n extensions={editorExtensions}\n basicSetup={{\n lineNumbers: false,\n searchKeymap: false,\n syntaxHighlighting: true,\n highlightActiveLine: true,\n highlightActiveLineGutter: true,\n foldGutter: false,\n }}\n className=\"rounded-md\"\n placeholder={placeholderText}\n value={content}\n theme=\"light\"\n minHeight=\"2rem\"\n editable={!disabled}\n onChange={handleContentChange}\n onBlur={onBlur}\n />\n {!disabled && (\n <CustomDialog\n dir={portalDirection}\n lang={portalLanguage}\n labels={{\n closeButtonLabel: t(\"dialogCloseLabel\"),\n title:\n selectedOption === SelectedOption.Image\n ? t(\"dialogTitleImage\")\n : selectedOption === SelectedOption.Video\n ? t(\"dialogTitleVideo\")\n : selectedOption === SelectedOption.Variable\n ? t(\"dialogTitleVariable\")\n : t(\"dialogTitle\"),\n }}\n >\n {selectedOption === SelectedOption.Image && (\n <ImageInject\n value={selectContentInfo?.value}\n onSelect={handleSelectImage}\n uploadProps={uploadProps}\n />\n )}\n {selectedOption === SelectedOption.Video && (\n <VideoInject\n value={selectContentInfo?.value}\n onSelect={handleSelectVideo}\n />\n )}\n </CustomDialog>\n )}\n\n {!disabled && !questionMode && (\n <CustomPopover dir={portalDirection} lang={portalLanguage}>\n <VariableSelect\n variables={variables}\n systemVariables={systemVariables}\n selectedName={selectContentInfo?.value?.variableName}\n onSelect={handleSelectVariable}\n onAddVariable={(variable) => {\n setVariables((prev) => {\n const normalized = variable.name;\n const exists = prev.some(\n (item) => item.name === normalized\n );\n if (exists) {\n return prev;\n }\n return [variable, ...prev];\n });\n }}\n />\n </CustomPopover>\n )}\n </EditorContext.Provider>\n </div>\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["i18next","editorLocaleResources","lng","resource","initReactI18next","DEFAULT_EDITOR_LOCALE","EMPTY_VARIABLES","isCursorInsideVariableExpression","content","cursorPosition","marker","findDocumentVariableMarkers","buildVariableTemplate","variableName","formatVariableReference","Editor","editMode","questionMode","initialVariables","initialSystemVariables","onChange","onBlur","locale","lang","uploadProps","disabled","toolbarActionsRight","onReady","t","i18n","useTranslation","resolvedLocale","normalizeMarkdownFlowLocale","direction","getMarkdownFlowDirection","language","getMarkdownFlowLanguage","useEffect","currentStrings","getEditorLocaleMessages","toolbarLabels","useMemo","variableSearchLabels","placeholderText","normalizedSystemVariables","seen","variable","name","normalizeVariableName","normalizedCustomVariables","systemNameSet","dialogOpen","setDialogOpen","useState","popoverOpen","setPopoverOpen","editorRootRef","useRef","portalLanguage","useDetachedLanguage","portalDirection","useResolvedDirection","popoverPosition","setPopoverPosition","variables","setVariables","systemVariables","setSystemVariables","selectedOption","setSelectedOption","SelectedOption","selectContentInfo","setSelectContentInfo","editorViewRef","pendingVariableContentRef","variableSearchAnchorRef","variableSearchOpen","setVariableSearchOpen","closeVariableSearch","useCallback","handleVariableSearchToggle","button","editorContextValue","addVariablesFromContent","text","names","extractVariableNames","prev","existingNames","addedNames","newVariables","rawName","normalized","onSelectedOption","option","state","pos","coords","insertText","dispatch","from","replaceSelection","selection","focusEditor","getContent","setContent","view","deleteSelectedContent","to","insertVariableContent","range","placeCursorAtEnd","template","cursorOffset","insertVariableTemplate","insertConfirmOutputMarker","insertLinkTemplate","insertButtonTemplate","insertSingleChoiceTemplate","optionLabel1","optionLabel2","insertMultiChoiceTemplate","insertInputFieldTemplate","placeholder","handleSelectImage","resourceUrl","resourceTitle","scalePercent","textToInsert","getImageContentToInsert","handleSelectVideo","getVideoContentToInsert","handleSelectVariable","selectionRange","slashCommandsExtension","autocompletion","createSlashCommands","handleEditorUpdate","update","docText","handleTagClick","event","type","dataset","target","value","parseContentInfo","rect","anchorDirection","handleWrap","e","imagePlaceholderTitle","videoPlaceholderTitle","mediaPlaceholderLabelsExtension","mediaPlaceholderLabels","editorExtensions","extensions","EditorView","markdown","syntaxHighlighting","defaultHighlightStyle","QuestionSyntaxHighlighter","SyntaxHighlighter","ImgPlaceholder","VideoPlaceholder","VariablePlaceholder","handleContentChange","isVariableSearchOpen","editorApi","handleToolbarActionClick","action","toolbarRightSlot","jsx","ariaLabel","jsxs","wrapped","Tooltip","TooltipTrigger","TooltipContent","EditorToolbar","VariableSearchDropdown","EditorContext","CodeMirror","CustomDialog","ImageInject","VideoInject","CustomPopover","VariableSelect","item"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../../comma-separated-tokens/index.cjs"),u=require("../../devlop/lib/default.cjs"),f=require("../../property-information/index.cjs"),C=require("../../space-separated-tokens/index.cjs"),S=require("../../../_virtual/index6.cjs"),N=require("../../hast-util-whitespace/lib/index.cjs"),x=require("../../estree-util-is-identifier-name/lib/index.cjs"),h=require("../../vfile-message/lib/index.cjs"),j=require("../../property-information/lib/find.cjs"),A=require("../../property-information/lib/hast-to-react.cjs"),T=require("../../unist-util-position/lib/index.cjs"),m={}.hasOwnProperty,F=new Map,P=/[A-Z]/g,q=new Set(["table","tbody","thead","tfoot","tr"]),J=new Set(["td","th"]),g="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function M(t,e){if(!e||e.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=e.filePath||void 0;let n;if(e.development){if(typeof e.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=K(r,e.jsxDEV)}else{if(typeof e.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof e.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=k(r,e.jsx,e.jsxs)}const s={Fragment:e.Fragment,ancestors:[],components:e.components||{},create:n,elementAttributeNameCase:e.elementAttributeNameCase||"react",evaluater:e.createEvaluater?e.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:e.ignoreInvalidStyle||!1,passKeys:e.passKeys!==!1,passNode:e.passNode||!1,schema:e.space==="svg"?f.svg:f.html,stylePropertyNameCase:e.stylePropertyNameCase||"dom",tableCellAlignToStyle:e.tableCellAlignToStyle!==!1},i=E(s,t,void 0);return i&&typeof i!="string"?i:s.create(t,s.Fragment,{children:i||void 0},void 0)}function E(t,e,r){if(e.type==="element")return I(t,e,r);if(e.type==="mdxFlowExpression"||e.type==="mdxTextExpression")return L(t,e);if(e.type==="mdxJsxFlowElement"||e.type==="mdxJsxTextElement")return V(t,e,r);if(e.type==="mdxjsEsm")return $(t,e);if(e.type==="root")return D(t,e,r);if(e.type==="text")return O(t,e)}function I(t,e,r){const n=t.schema;let s=n;e.tagName.toLowerCase()==="svg"&&n.space==="html"&&(s=f.svg,t.schema=s),t.ancestors.push(e);const i=b(t,e.tagName,!1),a=R(t,e);let o=d(t,e);return q.has(e.tagName)&&(o=o.filter(function(l){return typeof l=="string"?!N.whitespace(l):!0})),v(t,a,i,e),y(a,o),t.ancestors.pop(),t.schema=n,t.create(e,i,a,r)}function L(t,e){if(e.data&&e.data.estree&&t.evaluater){const n=e.data.estree.body[0];return u.ok(n.type==="ExpressionStatement"),t.evaluater.evaluateExpression(n.expression)}p(t,e.position)}function $(t,e){if(e.data&&e.data.estree&&t.evaluater)return t.evaluater.evaluateProgram(e.data.estree);p(t,e.position)}function V(t,e,r){const n=t.schema;let s=n;e.name==="svg"&&n.space==="html"&&(s=f.svg,t.schema=s),t.ancestors.push(e);const i=e.name===null?t.Fragment:b(t,e.name,!0),a=_(t,e),o=d(t,e);return v(t,a,i,e),y(a,o),t.ancestors.pop(),t.schema=n,t.create(e,i,a,r)}function D(t,e,r){const n={};return y(n,d(t,e)),t.create(e,t.Fragment,n,r)}function O(t,e){return e.value}function v(t,e,r,n){typeof r!="string"&&r!==t.Fragment&&t.passNode&&(e.node=n)}function y(t,e){if(e.length>0){const r=e.length>1?e:e[0];r&&(t.children=r)}}function k(t,e,r){return n;function n(s,i,a,o){const c=Array.isArray(a.children)?r:e;return o?c(i,a,o):c(i,a)}}function K(t,e){return r;function r(n,s,i,a){const o=Array.isArray(i.children),l=T.pointStart(n);return e(s,i,a,o,{columnNumber:l?l.column-1:void 0,fileName:t,lineNumber:l?l.line:void 0},void 0)}}function R(t,e){const r={};let n,s;for(s in e.properties)if(s!=="children"&&m.call(e.properties,s)){const i=B(t,s,e.properties[s]);if(i){const[a,o]=i;t.tableCellAlignToStyle&&a==="align"&&typeof o=="string"&&J.has(e.tagName)?n=o:r[a]=o}}if(n){const i=r.style||(r.style={});i[t.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function _(t,e){const r={};for(const n of e.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&t.evaluater){const i=n.data.estree.body[0];u.ok(i.type==="ExpressionStatement");const a=i.expression;u.ok(a.type==="ObjectExpression");const o=a.properties[0];u.ok(o.type==="SpreadElement"),Object.assign(r,t.evaluater.evaluateExpression(o.argument))}else p(t,e.position);else{const s=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&t.evaluater){const o=n.value.data.estree.body[0];u.ok(o.type==="ExpressionStatement"),i=t.evaluater.evaluateExpression(o.expression)}else p(t,e.position);else i=n.value===null?!0:n.value;r[s]=i}return r}function d(t,e){const r=[];let n=-1;const s=t.passKeys?new Map:F;for(;++n<e.children.length;){const i=e.children[n];let a;if(t.passKeys){const l=i.type==="element"?i.tagName:i.type==="mdxJsxFlowElement"||i.type==="mdxJsxTextElement"?i.name:void 0;if(l){const c=s.get(l)||0;a=l+"-"+c,s.set(l,c+1)}}const o=E(t,i,a);o!==void 0&&r.push(o)}return r}function B(t,e,r){const n=j.find(t.schema,e);if(!(r==null||typeof r=="number"&&Number.isNaN(r))){if(Array.isArray(r)&&(r=n.commaSeparated?w.stringify(r):C.stringify(r)),n.property==="style"){let s=typeof r=="object"?r:z(t,String(r));return t.stylePropertyNameCase==="css"&&(s=X(s)),["style",s]}return[t.elementAttributeNameCase==="react"&&n.space?A.hastToReact[n.property]||n.property:n.attribute,r]}}function z(t,e){try{return S.default(e,{reactCompat:!0})}catch(r){if(t.ignoreInvalidStyle)return{};const n=r,s=new h.VFileMessage("Cannot parse `style` attribute",{ancestors:t.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw s.file=t.filePath||void 0,s.url=g+"#cannot-parse-style-attribute",s}}function b(t,e,r){let n;if(!r)n={type:"Literal",value:e};else if(e.includes(".")){const s=e.split(".");let i=-1,a;for(;++i<s.length;){const o=x.name(s[i])?{type:"Identifier",name:s[i]}:{type:"Literal",value:s[i]};a=a?{type:"MemberExpression",object:a,property:o,computed:!!(i&&o.type==="Literal"),optional:!1}:o}n=a}else n=x.name(e)&&!/^[a-z]/.test(e)?{type:"Identifier",name:e}:{type:"Literal",value:e};if(n.type==="Literal"){const s=n.value;return m.call(t.components,s)?t.components[s]:s}if(t.evaluater)return t.evaluater.evaluateExpression(n);p(t)}function p(t,e){const r=new h.VFileMessage("Cannot handle MDX estrees without `createEvaluater`",{ancestors:t.ancestors,place:e,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw r.file=t.filePath||void 0,r.url=g+"#cannot-handle-mdx-estrees-without-createevaluater",r}function X(t){const e={};let r;for(r in t)m.call(t,r)&&(e[Z(r)]=t[r]);return e}function Z(t){let e=t.replace(P,G);return e.slice(0,3)==="ms-"&&(e="-"+e),e}function G(t){return"-"+t.toLowerCase()}exports.toJsxRuntime=M;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const w=require("../../comma-separated-tokens/index.cjs"),u=require("../../devlop/lib/default.cjs"),f=require("../../property-information/index.cjs"),C=require("../../space-separated-tokens/index.cjs"),S=require("../../../_virtual/index7.cjs"),N=require("../../hast-util-whitespace/lib/index.cjs"),x=require("../../estree-util-is-identifier-name/lib/index.cjs"),h=require("../../vfile-message/lib/index.cjs"),j=require("../../property-information/lib/find.cjs"),A=require("../../property-information/lib/hast-to-react.cjs"),T=require("../../unist-util-position/lib/index.cjs"),m={}.hasOwnProperty,F=new Map,P=/[A-Z]/g,q=new Set(["table","tbody","thead","tfoot","tr"]),J=new Set(["td","th"]),g="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function M(t,e){if(!e||e.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=e.filePath||void 0;let n;if(e.development){if(typeof e.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");n=K(r,e.jsxDEV)}else{if(typeof e.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof e.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");n=k(r,e.jsx,e.jsxs)}const s={Fragment:e.Fragment,ancestors:[],components:e.components||{},create:n,elementAttributeNameCase:e.elementAttributeNameCase||"react",evaluater:e.createEvaluater?e.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:e.ignoreInvalidStyle||!1,passKeys:e.passKeys!==!1,passNode:e.passNode||!1,schema:e.space==="svg"?f.svg:f.html,stylePropertyNameCase:e.stylePropertyNameCase||"dom",tableCellAlignToStyle:e.tableCellAlignToStyle!==!1},i=E(s,t,void 0);return i&&typeof i!="string"?i:s.create(t,s.Fragment,{children:i||void 0},void 0)}function E(t,e,r){if(e.type==="element")return I(t,e,r);if(e.type==="mdxFlowExpression"||e.type==="mdxTextExpression")return L(t,e);if(e.type==="mdxJsxFlowElement"||e.type==="mdxJsxTextElement")return V(t,e,r);if(e.type==="mdxjsEsm")return $(t,e);if(e.type==="root")return D(t,e,r);if(e.type==="text")return O(t,e)}function I(t,e,r){const n=t.schema;let s=n;e.tagName.toLowerCase()==="svg"&&n.space==="html"&&(s=f.svg,t.schema=s),t.ancestors.push(e);const i=b(t,e.tagName,!1),a=R(t,e);let o=d(t,e);return q.has(e.tagName)&&(o=o.filter(function(l){return typeof l=="string"?!N.whitespace(l):!0})),v(t,a,i,e),y(a,o),t.ancestors.pop(),t.schema=n,t.create(e,i,a,r)}function L(t,e){if(e.data&&e.data.estree&&t.evaluater){const n=e.data.estree.body[0];return u.ok(n.type==="ExpressionStatement"),t.evaluater.evaluateExpression(n.expression)}p(t,e.position)}function $(t,e){if(e.data&&e.data.estree&&t.evaluater)return t.evaluater.evaluateProgram(e.data.estree);p(t,e.position)}function V(t,e,r){const n=t.schema;let s=n;e.name==="svg"&&n.space==="html"&&(s=f.svg,t.schema=s),t.ancestors.push(e);const i=e.name===null?t.Fragment:b(t,e.name,!0),a=_(t,e),o=d(t,e);return v(t,a,i,e),y(a,o),t.ancestors.pop(),t.schema=n,t.create(e,i,a,r)}function D(t,e,r){const n={};return y(n,d(t,e)),t.create(e,t.Fragment,n,r)}function O(t,e){return e.value}function v(t,e,r,n){typeof r!="string"&&r!==t.Fragment&&t.passNode&&(e.node=n)}function y(t,e){if(e.length>0){const r=e.length>1?e:e[0];r&&(t.children=r)}}function k(t,e,r){return n;function n(s,i,a,o){const c=Array.isArray(a.children)?r:e;return o?c(i,a,o):c(i,a)}}function K(t,e){return r;function r(n,s,i,a){const o=Array.isArray(i.children),l=T.pointStart(n);return e(s,i,a,o,{columnNumber:l?l.column-1:void 0,fileName:t,lineNumber:l?l.line:void 0},void 0)}}function R(t,e){const r={};let n,s;for(s in e.properties)if(s!=="children"&&m.call(e.properties,s)){const i=B(t,s,e.properties[s]);if(i){const[a,o]=i;t.tableCellAlignToStyle&&a==="align"&&typeof o=="string"&&J.has(e.tagName)?n=o:r[a]=o}}if(n){const i=r.style||(r.style={});i[t.stylePropertyNameCase==="css"?"text-align":"textAlign"]=n}return r}function _(t,e){const r={};for(const n of e.attributes)if(n.type==="mdxJsxExpressionAttribute")if(n.data&&n.data.estree&&t.evaluater){const i=n.data.estree.body[0];u.ok(i.type==="ExpressionStatement");const a=i.expression;u.ok(a.type==="ObjectExpression");const o=a.properties[0];u.ok(o.type==="SpreadElement"),Object.assign(r,t.evaluater.evaluateExpression(o.argument))}else p(t,e.position);else{const s=n.name;let i;if(n.value&&typeof n.value=="object")if(n.value.data&&n.value.data.estree&&t.evaluater){const o=n.value.data.estree.body[0];u.ok(o.type==="ExpressionStatement"),i=t.evaluater.evaluateExpression(o.expression)}else p(t,e.position);else i=n.value===null?!0:n.value;r[s]=i}return r}function d(t,e){const r=[];let n=-1;const s=t.passKeys?new Map:F;for(;++n<e.children.length;){const i=e.children[n];let a;if(t.passKeys){const l=i.type==="element"?i.tagName:i.type==="mdxJsxFlowElement"||i.type==="mdxJsxTextElement"?i.name:void 0;if(l){const c=s.get(l)||0;a=l+"-"+c,s.set(l,c+1)}}const o=E(t,i,a);o!==void 0&&r.push(o)}return r}function B(t,e,r){const n=j.find(t.schema,e);if(!(r==null||typeof r=="number"&&Number.isNaN(r))){if(Array.isArray(r)&&(r=n.commaSeparated?w.stringify(r):C.stringify(r)),n.property==="style"){let s=typeof r=="object"?r:z(t,String(r));return t.stylePropertyNameCase==="css"&&(s=X(s)),["style",s]}return[t.elementAttributeNameCase==="react"&&n.space?A.hastToReact[n.property]||n.property:n.attribute,r]}}function z(t,e){try{return S.default(e,{reactCompat:!0})}catch(r){if(t.ignoreInvalidStyle)return{};const n=r,s=new h.VFileMessage("Cannot parse `style` attribute",{ancestors:t.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw s.file=t.filePath||void 0,s.url=g+"#cannot-parse-style-attribute",s}}function b(t,e,r){let n;if(!r)n={type:"Literal",value:e};else if(e.includes(".")){const s=e.split(".");let i=-1,a;for(;++i<s.length;){const o=x.name(s[i])?{type:"Identifier",name:s[i]}:{type:"Literal",value:s[i]};a=a?{type:"MemberExpression",object:a,property:o,computed:!!(i&&o.type==="Literal"),optional:!1}:o}n=a}else n=x.name(e)&&!/^[a-z]/.test(e)?{type:"Identifier",name:e}:{type:"Literal",value:e};if(n.type==="Literal"){const s=n.value;return m.call(t.components,s)?t.components[s]:s}if(t.evaluater)return t.evaluater.evaluateExpression(n);p(t)}function p(t,e){const r=new h.VFileMessage("Cannot handle MDX estrees without `createEvaluater`",{ancestors:t.ancestors,place:e,ruleId:"mdx-estree",source:"hast-util-to-jsx-runtime"});throw r.file=t.filePath||void 0,r.url=g+"#cannot-handle-mdx-estrees-without-createevaluater",r}function X(t){const e={};let r;for(r in t)m.call(t,r)&&(e[Z(r)]=t[r]);return e}function Z(t){let e=t.replace(P,G);return e.slice(0,3)==="ms-"&&(e="-"+e),e}function G(t){return"-"+t.toLowerCase()}exports.toJsxRuntime=M;
2
2
  //# sourceMappingURL=index.cjs.map