markdown-flow-ui 0.2.35 → 0.3.0-dev.1

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 (183) hide show
  1. package/README.md +12 -0
  2. package/dist/_virtual/index.es10.js +2 -2
  3. package/dist/_virtual/index.es3.js +5 -4
  4. package/dist/_virtual/index.es3.js.map +1 -1
  5. package/dist/_virtual/index.es4.js +4 -5
  6. package/dist/_virtual/index.es4.js.map +1 -1
  7. package/dist/_virtual/index.es5.js +5 -5
  8. package/dist/_virtual/index.es6.js +5 -3
  9. package/dist/_virtual/index.es6.js.map +1 -1
  10. package/dist/_virtual/index.es7.js +3 -5
  11. package/dist/_virtual/index.es7.js.map +1 -1
  12. package/dist/_virtual/index.es8.js +2 -2
  13. package/dist/_virtual/index10.cjs +1 -1
  14. package/dist/_virtual/index3.cjs +1 -1
  15. package/dist/_virtual/index4.cjs +1 -1
  16. package/dist/_virtual/index5.cjs +1 -1
  17. package/dist/_virtual/index6.cjs +1 -1
  18. package/dist/_virtual/index7.cjs +1 -1
  19. package/dist/_virtual/index8.cjs +1 -1
  20. package/dist/_virtual/variable-marker.cjs +2 -0
  21. package/dist/_virtual/variable-marker.cjs.map +1 -0
  22. package/dist/_virtual/variable-marker.es.js +5 -0
  23. package/dist/_virtual/variable-marker.es.js.map +1 -0
  24. package/dist/_virtual/variable-name.cjs +2 -0
  25. package/dist/_virtual/variable-name.cjs.map +1 -0
  26. package/dist/_virtual/variable-name.es.js +5 -0
  27. package/dist/_virtual/variable-name.es.js.map +1 -0
  28. package/dist/components/ContentRender/ContentRender.cjs +2 -2
  29. package/dist/components/ContentRender/ContentRender.cjs.map +1 -1
  30. package/dist/components/ContentRender/ContentRender.es.js +206 -205
  31. package/dist/components/ContentRender/ContentRender.es.js.map +1 -1
  32. package/dist/components/ContentRender/plugins/CustomVariable.cjs +1 -1
  33. package/dist/components/ContentRender/plugins/CustomVariable.cjs.map +1 -1
  34. package/dist/components/ContentRender/plugins/CustomVariable.es.js +52 -51
  35. package/dist/components/ContentRender/plugins/CustomVariable.es.js.map +1 -1
  36. package/dist/components/ContentRender/utils/inline-code-ranges.cjs +9 -9
  37. package/dist/components/ContentRender/utils/inline-code-ranges.cjs.map +1 -1
  38. package/dist/components/ContentRender/utils/inline-code-ranges.d.ts +3 -0
  39. package/dist/components/ContentRender/utils/inline-code-ranges.es.js +185 -161
  40. package/dist/components/ContentRender/utils/inline-code-ranges.es.js.map +1 -1
  41. package/dist/components/ContentRender/utils/mermaid-parse.cjs +4 -4
  42. package/dist/components/ContentRender/utils/mermaid-parse.cjs.map +1 -1
  43. package/dist/components/ContentRender/utils/mermaid-parse.es.js +53 -48
  44. package/dist/components/ContentRender/utils/mermaid-parse.es.js.map +1 -1
  45. package/dist/components/ContentRender/utils/split-content.cjs +6 -6
  46. package/dist/components/ContentRender/utils/split-content.cjs.map +1 -1
  47. package/dist/components/ContentRender/utils/split-content.d.ts +1 -0
  48. package/dist/components/ContentRender/utils/split-content.es.js +361 -313
  49. package/dist/components/ContentRender/utils/split-content.es.js.map +1 -1
  50. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs +1 -1
  51. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.map +1 -1
  52. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +286 -290
  53. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
  54. package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs +1 -1
  55. package/dist/components/MarkdownFlowEditor/components/VariableSelect.cjs.map +1 -1
  56. package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js +62 -63
  57. package/dist/components/MarkdownFlowEditor/components/VariableSelect.es.js.map +1 -1
  58. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.cjs +1 -1
  59. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.d.ts +1 -1
  60. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js +1 -1
  61. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.cjs +1 -1
  62. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.d.ts +1 -1
  63. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.es.js +13 -13
  64. package/dist/components/MarkdownFlowEditor/locales/en-US.json.cjs +1 -1
  65. package/dist/components/MarkdownFlowEditor/locales/en-US.json.d.ts +1 -1
  66. package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js +19 -19
  67. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.cjs +1 -1
  68. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.d.ts +1 -1
  69. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.es.js +13 -13
  70. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.cjs +1 -1
  71. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.d.ts +1 -1
  72. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.es.js +16 -16
  73. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.cjs +1 -1
  74. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.d.ts +1 -1
  75. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js +13 -13
  76. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.cjs +1 -1
  77. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.d.ts +1 -1
  78. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.es.js +1 -1
  79. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.cjs +1 -1
  80. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.d.ts +1 -1
  81. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js +1 -1
  82. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.cjs +1 -1
  83. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.d.ts +1 -1
  84. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.es.js +1 -1
  85. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.cjs +1 -1
  86. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.d.ts +1 -1
  87. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.es.js +13 -13
  88. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.cjs +1 -1
  89. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.d.ts +1 -1
  90. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js +1 -1
  91. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs +3 -3
  92. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs.map +1 -1
  93. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js +176 -174
  94. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js.map +1 -1
  95. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.cjs +2 -1
  96. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.cjs.map +1 -1
  97. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.d.ts +3 -1
  98. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.es.js +38 -55
  99. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.es.js.map +1 -1
  100. package/dist/components/MarkdownFlowEditor/plugins/VariablePlaceholder.test.d.ts +1 -0
  101. package/dist/components/MarkdownFlowEditor/utils.cjs +1 -1
  102. package/dist/components/MarkdownFlowEditor/utils.cjs.map +1 -1
  103. package/dist/components/MarkdownFlowEditor/utils.d.ts +2 -3
  104. package/dist/components/MarkdownFlowEditor/utils.es.js +47 -51
  105. package/dist/components/MarkdownFlowEditor/utils.es.js.map +1 -1
  106. package/dist/components/MarkdownFlowEditor/utils.variables.test.d.ts +1 -0
  107. package/dist/components/ui/inputGroup/textarea.cjs +1 -1
  108. package/dist/components/ui/inputGroup/textarea.es.js +1 -1
  109. package/dist/lib/interaction-defaults.cjs +1 -1
  110. package/dist/lib/interaction-defaults.cjs.map +1 -1
  111. package/dist/lib/interaction-defaults.es.js +123 -132
  112. package/dist/lib/interaction-defaults.es.js.map +1 -1
  113. package/dist/lib/interaction-defaults.failure.test.d.ts +1 -0
  114. package/dist/node_modules/@braintree/sanitize-url/dist/index.cjs +1 -1
  115. package/dist/node_modules/@braintree/sanitize-url/dist/index.es.js +1 -1
  116. package/dist/node_modules/classnames/index.cjs +1 -1
  117. package/dist/node_modules/classnames/index.es.js +1 -1
  118. package/dist/node_modules/cose-base/cose-base.cjs +1 -1
  119. package/dist/node_modules/cose-base/cose-base.cjs.map +1 -1
  120. package/dist/node_modules/cose-base/cose-base.es.js +1 -1
  121. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs +1 -1
  122. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.cjs.map +1 -1
  123. package/dist/node_modules/cytoscape-fcose/node_modules/cose-base/cose-base.es.js +1 -1
  124. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs +1 -1
  125. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.cjs.map +1 -1
  126. package/dist/node_modules/cytoscape-fcose/node_modules/layout-base/layout-base.es.js +1 -1
  127. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.cjs +1 -1
  128. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.es.js +1 -1
  129. package/dist/node_modules/layout-base/layout-base.cjs +1 -1
  130. package/dist/node_modules/layout-base/layout-base.cjs.map +1 -1
  131. package/dist/node_modules/layout-base/layout-base.es.js +1 -1
  132. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-AAMF2YG6.cjs +1 -1
  133. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-AAMF2YG6.es.js +1 -1
  134. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-OMD6QJNC.cjs +1 -1
  135. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-OMD6QJNC.es.js +1 -1
  136. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-U37J5Y7L.cjs +1 -1
  137. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-U37J5Y7L.es.js +1 -1
  138. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-WV7ZQ7D5.cjs +1 -1
  139. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-WV7ZQ7D5.es.js +1 -1
  140. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-4MX5Z3NR.cjs +1 -1
  141. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-4MX5Z3NR.es.js +1 -1
  142. package/dist/node_modules/rc-input/es/BaseInput.cjs +1 -1
  143. package/dist/node_modules/rc-input/es/BaseInput.es.js +1 -1
  144. package/dist/node_modules/rc-textarea/es/ResizableTextArea.cjs +1 -1
  145. package/dist/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
  146. package/dist/node_modules/rc-textarea/es/TextArea.cjs +1 -1
  147. package/dist/node_modules/rc-textarea/es/TextArea.es.js +1 -1
  148. package/dist/node_modules/rc-textarea/es/index.cjs +1 -1
  149. package/dist/node_modules/rc-textarea/es/index.es.js +1 -1
  150. package/dist/node_modules/remark-flow/dist/escaping.cjs +2 -2
  151. package/dist/node_modules/remark-flow/dist/escaping.cjs.map +1 -1
  152. package/dist/node_modules/remark-flow/dist/escaping.es.js +128 -63
  153. package/dist/node_modules/remark-flow/dist/escaping.es.js.map +1 -1
  154. package/dist/node_modules/remark-flow/dist/index.cjs +1 -1
  155. package/dist/node_modules/remark-flow/dist/index.cjs.map +1 -1
  156. package/dist/node_modules/remark-flow/dist/index.es.js +62 -33
  157. package/dist/node_modules/remark-flow/dist/index.es.js.map +1 -1
  158. package/dist/node_modules/remark-flow/dist/interaction-parser.cjs +1 -1
  159. package/dist/node_modules/remark-flow/dist/interaction-parser.cjs.map +1 -1
  160. package/dist/node_modules/remark-flow/dist/interaction-parser.es.js +260 -256
  161. package/dist/node_modules/remark-flow/dist/interaction-parser.es.js.map +1 -1
  162. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs +1 -1
  163. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs.map +1 -1
  164. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js +71 -42
  165. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js.map +1 -1
  166. package/dist/node_modules/remark-flow/dist/interaction-syntax.cjs +1 -1
  167. package/dist/node_modules/remark-flow/dist/interaction-syntax.cjs.map +1 -1
  168. package/dist/node_modules/remark-flow/dist/interaction-syntax.es.js +500 -46
  169. package/dist/node_modules/remark-flow/dist/interaction-syntax.es.js.map +1 -1
  170. package/dist/node_modules/remark-flow/dist/variable-marker.cjs +2 -0
  171. package/dist/node_modules/remark-flow/dist/variable-marker.cjs.map +1 -0
  172. package/dist/node_modules/remark-flow/dist/variable-marker.es.js +77 -0
  173. package/dist/node_modules/remark-flow/dist/variable-marker.es.js.map +1 -0
  174. package/dist/node_modules/remark-flow/dist/variable-name.cjs +15 -0
  175. package/dist/node_modules/remark-flow/dist/variable-name.cjs.map +1 -0
  176. package/dist/node_modules/remark-flow/dist/variable-name.es.js +748 -0
  177. package/dist/node_modules/remark-flow/dist/variable-name.es.js.map +1 -0
  178. package/dist/node_modules/style-to-object/cjs/index.cjs +1 -1
  179. package/dist/node_modules/style-to-object/cjs/index.cjs.map +1 -1
  180. package/dist/node_modules/style-to-object/cjs/index.es.js +1 -1
  181. package/dist/node_modules/unified/lib/index.cjs +1 -1
  182. package/dist/node_modules/unified/lib/index.es.js +1 -1
  183. package/package.json +2 -2
@@ -1,70 +1,53 @@
1
- import { MatchDecorator as f, Decoration as l, ViewPlugin as u, EditorView as x } from "../../../node_modules/@codemirror/view/dist/index.es.js";
2
- import { SelectedOption as g } from "../types.es.js";
3
- import b from "./PlaceholderWidget.es.js";
4
- import { createVariableExpressionRegexp as c } from "../utils.es.js";
5
- const m = c(), a = (e) => {
6
- const t = e.state.doc.toString();
7
- if (!t) return !1;
8
- const n = c();
9
- let r;
10
- for (; (r = n.exec(t)) !== null; ) {
11
- const o = r.index ?? 0, i = o + r[0].length;
12
- if (d(e, o, i))
13
- return !0;
14
- n.lastIndex === r.index && n.lastIndex++;
15
- }
16
- return !1;
17
- }, d = (e, t, n) => {
18
- const r = t + 2, o = n - 2;
19
- return o < r ? !1 : e.state.selection.ranges.some((i) => {
20
- const h = i.anchor >= r && i.anchor <= o, p = i.head >= r && i.head <= o;
21
- return h || p;
1
+ import { ViewPlugin as g, EditorView as u, Decoration as o } from "../../../node_modules/@codemirror/view/dist/index.es.js";
2
+ import { SelectedOption as m } from "../types.es.js";
3
+ import p from "./PlaceholderWidget.es.js";
4
+ import { d as a } from "../../../_virtual/index.es.js";
5
+ const d = (e, s, r) => {
6
+ const t = s + 2, n = r - 2;
7
+ return n < t ? !1 : e.state.selection.ranges.some((i) => {
8
+ const h = i.anchor >= t && i.anchor <= n, f = i.head >= t && i.head <= n;
9
+ return h || f;
22
10
  });
23
- }, s = new f({
24
- regexp: m,
25
- decoration: (e, t, n) => {
26
- const r = e?.[0];
27
- if (!r)
28
- return null;
29
- const o = n + r.length;
30
- return d(t, n, o) ? null : l.replace({
31
- widget: new b(
32
- r,
33
- {
34
- tag: "variable",
35
- title: e?.[1]
36
- },
37
- "tag-variable",
38
- g.Variable,
39
- t
40
- )
41
- });
42
- }
43
- }), v = u.fromClass(
11
+ }, c = (e, s) => {
12
+ const r = e.state.doc.toString();
13
+ return o.set(
14
+ s.flatMap((t) => {
15
+ const n = r.slice(t.start, t.end);
16
+ return t.name === null || // CodeMirror inline widgets cannot replace line breaks in marker padding.
17
+ n.includes(`
18
+ `) || d(e, t.start, t.end) ? [] : [
19
+ o.replace({
20
+ widget: new p(
21
+ n,
22
+ { tag: "variable", title: t.name },
23
+ "tag-variable",
24
+ m.Variable,
25
+ e
26
+ )
27
+ }).range(t.start, t.end)
28
+ ];
29
+ })
30
+ );
31
+ }, l = (e, s) => s.filter(
32
+ (r) => d(e, r.start, r.end)
33
+ ).map((r) => r.start).join(","), x = g.fromClass(
44
34
  class {
45
35
  constructor(e) {
46
- this.selectionInsideVariable = a(e), this.placeholders = s.createDeco(e);
36
+ this.markers = a.findDocumentVariableMarkers(e.state.doc.toString()), this.selectionSignature = l(e, this.markers), this.placeholders = c(e, this.markers);
47
37
  }
48
38
  update(e) {
49
- if (e.selectionSet || e.docChanged) {
50
- const t = a(e.view);
51
- if (t !== this.selectionInsideVariable) {
52
- this.selectionInsideVariable = t, this.placeholders = s.createDeco(e.view);
53
- return;
54
- }
39
+ if (e.docChanged && (this.markers = a.findDocumentVariableMarkers(e.state.doc.toString())), e.docChanged || e.selectionSet) {
40
+ const s = l(e.view, this.markers);
41
+ (e.docChanged || s !== this.selectionSignature) && (this.selectionSignature = s, this.placeholders = c(e.view, this.markers));
55
42
  }
56
- this.placeholders = s.updateDeco(
57
- e,
58
- this.placeholders
59
- );
60
43
  }
61
44
  },
62
45
  {
63
46
  decorations: (e) => e.placeholders,
64
- provide: (e) => x.atomicRanges.of((t) => t.plugin(e)?.placeholders || l.none)
47
+ provide: (e) => u.atomicRanges.of((s) => s.plugin(e)?.placeholders || o.none)
65
48
  }
66
49
  );
67
50
  export {
68
- v as default
51
+ x as default
69
52
  };
70
53
  //# sourceMappingURL=VariablePlaceholder.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"VariablePlaceholder.es.js","sources":["../../../../src/components/MarkdownFlowEditor/plugins/VariablePlaceholder.ts"],"sourcesContent":["import {\n EditorView,\n Decoration,\n DecorationSet,\n ViewPlugin,\n ViewUpdate,\n MatchDecorator,\n} from \"@codemirror/view\";\nimport { SelectedOption } from \"../types\";\nimport PlaceholderWidget from \"./PlaceholderWidget\";\nimport { createVariableExpressionRegexp } from \"../utils\";\n\nconst variableContextRegexp = createVariableExpressionRegexp();\n\nconst selectionInsideAnyVariable = (view: EditorView) => {\n const docText = view.state.doc.toString();\n if (!docText) return false;\n const regexp = createVariableExpressionRegexp();\n let match: RegExpExecArray | null;\n while ((match = regexp.exec(docText)) !== null) {\n const from = match.index ?? 0;\n const to = from + match[0].length;\n if (selectionInsideVariableExpression(view, from, to)) {\n return true;\n }\n if (regexp.lastIndex === match.index) {\n regexp.lastIndex++;\n }\n }\n return false;\n};\n\nconst selectionInsideVariableExpression = (\n view: EditorView,\n from: number,\n to: number\n) => {\n const innerStart = from + 2;\n const innerEnd = to - 2;\n if (innerEnd < innerStart) {\n return false;\n }\n return view.state.selection.ranges.some((range) => {\n const isAnchorInside =\n range.anchor >= innerStart && range.anchor <= innerEnd;\n const isHeadInside = range.head >= innerStart && range.head <= innerEnd;\n return isAnchorInside || isHeadInside;\n });\n};\n\nconst variableUrlMatcher = new MatchDecorator({\n regexp: variableContextRegexp,\n decoration: (match, view, from) => {\n const rawMatch = match?.[0];\n if (!rawMatch) {\n return null;\n }\n const to = from + rawMatch.length;\n if (selectionInsideVariableExpression(view, from, to)) {\n return null;\n }\n return Decoration.replace({\n widget: new PlaceholderWidget(\n rawMatch,\n {\n tag: \"variable\",\n title: match?.[1],\n },\n \"tag-variable\",\n SelectedOption.Variable,\n view\n ),\n });\n },\n});\n\nconst VariablePlaceholder = ViewPlugin.fromClass(\n class {\n placeholders: DecorationSet;\n selectionInsideVariable: boolean;\n constructor(view: EditorView) {\n this.selectionInsideVariable = selectionInsideAnyVariable(view);\n this.placeholders = variableUrlMatcher.createDeco(view);\n }\n update(update: ViewUpdate) {\n if (update.selectionSet || update.docChanged) {\n const insideNow = selectionInsideAnyVariable(update.view);\n if (insideNow !== this.selectionInsideVariable) {\n this.selectionInsideVariable = insideNow;\n this.placeholders = variableUrlMatcher.createDeco(update.view);\n return;\n }\n }\n this.placeholders = variableUrlMatcher.updateDeco(\n update,\n this.placeholders\n );\n }\n },\n {\n decorations: (instance) => instance.placeholders,\n provide: (plugin) =>\n EditorView.atomicRanges.of((view) => {\n return view.plugin(plugin)?.placeholders || Decoration.none;\n }),\n }\n);\n\nexport default VariablePlaceholder;\n"],"names":["variableContextRegexp","createVariableExpressionRegexp","selectionInsideAnyVariable","view","docText","regexp","match","from","to","selectionInsideVariableExpression","innerStart","innerEnd","range","isAnchorInside","isHeadInside","variableUrlMatcher","MatchDecorator","rawMatch","Decoration","PlaceholderWidget","SelectedOption","VariablePlaceholder","ViewPlugin","update","insideNow","instance","plugin","EditorView"],"mappings":";;;;AAYA,MAAMA,IAAwBC,EAAA,GAExBC,IAA6B,CAACC,MAAqB;AACvD,QAAMC,IAAUD,EAAK,MAAM,IAAI,SAAA;AAC/B,MAAI,CAACC,EAAS,QAAO;AACrB,QAAMC,IAASJ,EAAA;AACf,MAAIK;AACJ,UAAQA,IAAQD,EAAO,KAAKD,CAAO,OAAO,QAAM;AAC9C,UAAMG,IAAOD,EAAM,SAAS,GACtBE,IAAKD,IAAOD,EAAM,CAAC,EAAE;AAC3B,QAAIG,EAAkCN,GAAMI,GAAMC,CAAE;AAClD,aAAO;AAET,IAAIH,EAAO,cAAcC,EAAM,SAC7BD,EAAO;AAAA,EAEX;AACA,SAAO;AACT,GAEMI,IAAoC,CACxCN,GACAI,GACAC,MACG;AACH,QAAME,IAAaH,IAAO,GACpBI,IAAWH,IAAK;AACtB,SAAIG,IAAWD,IACN,KAEFP,EAAK,MAAM,UAAU,OAAO,KAAK,CAACS,MAAU;AACjD,UAAMC,IACJD,EAAM,UAAUF,KAAcE,EAAM,UAAUD,GAC1CG,IAAeF,EAAM,QAAQF,KAAcE,EAAM,QAAQD;AAC/D,WAAOE,KAAkBC;AAAA,EAC3B,CAAC;AACH,GAEMC,IAAqB,IAAIC,EAAe;AAAA,EAC5C,QAAQhB;AAAA,EACR,YAAY,CAACM,GAAOH,GAAMI,MAAS;AACjC,UAAMU,IAAWX,IAAQ,CAAC;AAC1B,QAAI,CAACW;AACH,aAAO;AAET,UAAMT,IAAKD,IAAOU,EAAS;AAC3B,WAAIR,EAAkCN,GAAMI,GAAMC,CAAE,IAC3C,OAEFU,EAAW,QAAQ;AAAA,MACxB,QAAQ,IAAIC;AAAA,QACVF;AAAA,QACA;AAAA,UACE,KAAK;AAAA,UACL,OAAOX,IAAQ,CAAC;AAAA,QAAA;AAAA,QAElB;AAAA,QACAc,EAAe;AAAA,QACfjB;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EACH;AACF,CAAC,GAEKkB,IAAsBC,EAAW;AAAA,EACrC,MAAM;AAAA,IAGJ,YAAYnB,GAAkB;AAC5B,WAAK,0BAA0BD,EAA2BC,CAAI,GAC9D,KAAK,eAAeY,EAAmB,WAAWZ,CAAI;AAAA,IACxD;AAAA,IACA,OAAOoB,GAAoB;AACzB,UAAIA,EAAO,gBAAgBA,EAAO,YAAY;AAC5C,cAAMC,IAAYtB,EAA2BqB,EAAO,IAAI;AACxD,YAAIC,MAAc,KAAK,yBAAyB;AAC9C,eAAK,0BAA0BA,GAC/B,KAAK,eAAeT,EAAmB,WAAWQ,EAAO,IAAI;AAC7D;AAAA,QACF;AAAA,MACF;AACA,WAAK,eAAeR,EAAmB;AAAA,QACrCQ;AAAA,QACA,KAAK;AAAA,MAAA;AAAA,IAET;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,aAAa,CAACE,MAAaA,EAAS;AAAA,IACpC,SAAS,CAACC,MACRC,EAAW,aAAa,GAAG,CAACxB,MACnBA,EAAK,OAAOuB,CAAM,GAAG,gBAAgBR,EAAW,IACxD;AAAA,EAAA;AAEP;"}
1
+ {"version":3,"file":"VariablePlaceholder.es.js","sources":["../../../../src/components/MarkdownFlowEditor/plugins/VariablePlaceholder.ts"],"sourcesContent":["import {\n EditorView,\n Decoration,\n DecorationSet,\n ViewPlugin,\n ViewUpdate,\n} from \"@codemirror/view\";\nimport { SelectedOption } from \"../types\";\nimport PlaceholderWidget from \"./PlaceholderWidget\";\nimport { findDocumentVariableMarkers } from \"../utils\";\n\nconst selectionInsideVariableExpression = (\n view: EditorView,\n from: number,\n to: number\n) => {\n const innerStart = from + 2;\n const innerEnd = to - 2;\n if (innerEnd < innerStart) {\n return false;\n }\n return view.state.selection.ranges.some((range) => {\n const isAnchorInside =\n range.anchor >= innerStart && range.anchor <= innerEnd;\n const isHeadInside = range.head >= innerStart && range.head <= innerEnd;\n return isAnchorInside || isHeadInside;\n });\n};\n\nconst buildPlaceholders = (\n view: EditorView,\n markers: ReturnType<typeof findDocumentVariableMarkers>\n): DecorationSet => {\n const text = view.state.doc.toString();\n return Decoration.set(\n markers.flatMap((marker) => {\n const rawMarker = text.slice(marker.start, marker.end);\n if (\n marker.name === null ||\n // CodeMirror inline widgets cannot replace line breaks in marker padding.\n rawMarker.includes(\"\\n\") ||\n selectionInsideVariableExpression(view, marker.start, marker.end)\n ) {\n return [];\n }\n return [\n Decoration.replace({\n widget: new PlaceholderWidget(\n rawMarker,\n { tag: \"variable\", title: marker.name },\n \"tag-variable\",\n SelectedOption.Variable,\n view\n ),\n }).range(marker.start, marker.end),\n ];\n })\n );\n};\n\nconst selectedMarkers = (\n view: EditorView,\n markers: ReturnType<typeof findDocumentVariableMarkers>\n) =>\n markers\n .filter((marker) =>\n selectionInsideVariableExpression(view, marker.start, marker.end)\n )\n .map((marker) => marker.start)\n .join(\",\");\n\nconst VariablePlaceholder = ViewPlugin.fromClass(\n class {\n placeholders: DecorationSet;\n markers: ReturnType<typeof findDocumentVariableMarkers>;\n selectionSignature: string;\n constructor(view: EditorView) {\n this.markers = findDocumentVariableMarkers(view.state.doc.toString());\n this.selectionSignature = selectedMarkers(view, this.markers);\n this.placeholders = buildPlaceholders(view, this.markers);\n }\n update(update: ViewUpdate) {\n if (update.docChanged)\n this.markers = findDocumentVariableMarkers(update.state.doc.toString());\n if (update.docChanged || update.selectionSet) {\n const signature = selectedMarkers(update.view, this.markers);\n if (update.docChanged || signature !== this.selectionSignature) {\n this.selectionSignature = signature;\n this.placeholders = buildPlaceholders(update.view, this.markers);\n }\n }\n }\n },\n {\n decorations: (instance) => instance.placeholders,\n provide: (plugin) =>\n EditorView.atomicRanges.of((view) => {\n return view.plugin(plugin)?.placeholders || Decoration.none;\n }),\n }\n);\n\nexport default VariablePlaceholder;\n"],"names":["selectionInsideVariableExpression","view","from","to","innerStart","innerEnd","range","isAnchorInside","isHeadInside","buildPlaceholders","markers","text","Decoration","marker","rawMarker","PlaceholderWidget","SelectedOption","selectedMarkers","VariablePlaceholder","ViewPlugin","findDocumentVariableMarkers","update","signature","instance","plugin","EditorView"],"mappings":";;;;AAWA,MAAMA,IAAoC,CACxCC,GACAC,GACAC,MACG;AACH,QAAMC,IAAaF,IAAO,GACpBG,IAAWF,IAAK;AACtB,SAAIE,IAAWD,IACN,KAEFH,EAAK,MAAM,UAAU,OAAO,KAAK,CAACK,MAAU;AACjD,UAAMC,IACJD,EAAM,UAAUF,KAAcE,EAAM,UAAUD,GAC1CG,IAAeF,EAAM,QAAQF,KAAcE,EAAM,QAAQD;AAC/D,WAAOE,KAAkBC;AAAA,EAC3B,CAAC;AACH,GAEMC,IAAoB,CACxBR,GACAS,MACkB;AAClB,QAAMC,IAAOV,EAAK,MAAM,IAAI,SAAA;AAC5B,SAAOW,EAAW;AAAA,IAChBF,EAAQ,QAAQ,CAACG,MAAW;AAC1B,YAAMC,IAAYH,EAAK,MAAME,EAAO,OAAOA,EAAO,GAAG;AACrD,aACEA,EAAO,SAAS;AAAA,MAEhBC,EAAU,SAAS;AAAA,CAAI,KACvBd,EAAkCC,GAAMY,EAAO,OAAOA,EAAO,GAAG,IAEzD,CAAA,IAEF;AAAA,QACLD,EAAW,QAAQ;AAAA,UACjB,QAAQ,IAAIG;AAAA,YACVD;AAAA,YACA,EAAE,KAAK,YAAY,OAAOD,EAAO,KAAA;AAAA,YACjC;AAAA,YACAG,EAAe;AAAA,YACff;AAAA,UAAA;AAAA,QACF,CACD,EAAE,MAAMY,EAAO,OAAOA,EAAO,GAAG;AAAA,MAAA;AAAA,IAErC,CAAC;AAAA,EAAA;AAEL,GAEMI,IAAkB,CACtBhB,GACAS,MAEAA,EACG;AAAA,EAAO,CAACG,MACPb,EAAkCC,GAAMY,EAAO,OAAOA,EAAO,GAAG;AAClE,EACC,IAAI,CAACA,MAAWA,EAAO,KAAK,EAC5B,KAAK,GAAG,GAEPK,IAAsBC,EAAW;AAAA,EACrC,MAAM;AAAA,IAIJ,YAAYlB,GAAkB;AAC5B,WAAK,UAAUmB,8BAA4BnB,EAAK,MAAM,IAAI,UAAU,GACpE,KAAK,qBAAqBgB,EAAgBhB,GAAM,KAAK,OAAO,GAC5D,KAAK,eAAeQ,EAAkBR,GAAM,KAAK,OAAO;AAAA,IAC1D;AAAA,IACA,OAAOoB,GAAoB;AAGzB,UAFIA,EAAO,eACT,KAAK,UAAUD,8BAA4BC,EAAO,MAAM,IAAI,UAAU,IACpEA,EAAO,cAAcA,EAAO,cAAc;AAC5C,cAAMC,IAAYL,EAAgBI,EAAO,MAAM,KAAK,OAAO;AAC3D,SAAIA,EAAO,cAAcC,MAAc,KAAK,wBAC1C,KAAK,qBAAqBA,GAC1B,KAAK,eAAeb,EAAkBY,EAAO,MAAM,KAAK,OAAO;AAAA,MAEnE;AAAA,IACF;AAAA,EAAA;AAAA,EAEF;AAAA,IACE,aAAa,CAACE,MAAaA,EAAS;AAAA,IACpC,SAAS,CAACC,MACRC,EAAW,aAAa,GAAG,CAACxB,MACnBA,EAAK,OAAOuB,CAAM,GAAG,gBAAgBZ,EAAW,IACxD;AAAA,EAAA;AAEP;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./types.cjs"),E=require("./utils/video.cjs"),g="[\\p{L}\\p{N}_]+",h=new RegExp(`^${g}$`,"u"),w=`\\{\\{(${g})\\}\\}`,c="===",$=()=>new RegExp(w,"gu"),f=t=>typeof t=="string"&&h.test(t),V=t=>{if(!t)return[];const e=[],a=$();let r;for(;(r=a.exec(t))!==null;)e.push(r[1]);return e},x=(t,e)=>{switch(t){case p.SelectedOption.Image:return{resourceUrl:e.url,resourceTitle:e.title,scalePercent:e.scalePercent};case p.SelectedOption.Video:return{resourceUrl:e.url,resourceTitle:e.title};case p.SelectedOption.Variable:return{variableName:e.title};default:return{resourceUrl:e.url??"",resourceTitle:e.title??""}}};function S(t,e){return a=>{const r=a.matchBefore(/\/(\w*)$/);if(!r)return null;const l=(n,o,i,s,d)=>{n.dispatch({changes:{from:i,to:s,insert:""}}),t(d)};return{from:r.from,to:r.to,options:[{label:e?.variable??"Variable",apply:(n,o,i,s)=>{l(n,o,i,s,p.SelectedOption.Variable)}},{label:e?.image??"Image",apply:(n,o,i,s)=>{l(n,o,i,s,p.SelectedOption.Image)}},{label:e?.video??"Video",apply:(n,o,i,s)=>{l(n,o,i,s,p.SelectedOption.Video)}}],filter:!1}}}const b=t=>E.getVideoEmbedUrl(t),u=t=>t.replace(/&/g,"&amp;").replace(/"/g,"&quot;"),I=t=>t.replace(/([\[\]\\])/g,"\\$1"),R=t=>Math.max(1,Math.min(1e3,Math.round(t))),m=t=>{const e=t.trim();return e?new RegExp(`^${c}\\s*[\\s\\S]*?\\s*${c}$`).test(e)?e:`${c} ${e} ${c}`:`${c}${c}`},O=t=>{const e=t.trim(),a=new RegExp(`^${c}\\s*([\\s\\S]*?)\\s*${c}$`);return(e.match(a)?.[1]??e).trim()},A=({resourceUrl:t,resourceTitle:e,scalePercent:a})=>{const r=typeof a=="number"?R(a):void 0,l=u(t),n=e?u(e):void 0,o=e?I(e):"",i=typeof r=="number"&&r!==100?` width="${r}%"`:"",s=n?` alt="${n}" title="${n}"`:"",d=!r||r===100?`![${o}](${t})`:`<img src="${l}"${s}${i} />`;return m(d)},T=(t,e)=>{const a=b(t),r=e?u(e):"",l=u(t),n=u(a),o=`<iframe data-tag="video" data-title="${r}" data-url="${l}" class="w-full aspect-video rounded-lg border-0" src="${n}" allowfullscreen="" allow="autoplay; encrypted-media"></iframe>`;return m(o)};exports.createSlashCommands=S;exports.createVariableExpressionRegexp=$;exports.extractVariableNames=V;exports.getEmbedUrl=b;exports.getImageContentToInsert=A;exports.getVideoContentToInsert=T;exports.isValidVariableName=f;exports.parseContentInfo=x;exports.unwrapFixedOutput=O;exports.wrapWithFixedOutput=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const m=require("./types.cjs"),g=require("./utils/video.cjs"),d=require("../../_virtual/index.cjs"),s="===",$=(t,e)=>{switch(t){case m.SelectedOption.Image:return{resourceUrl:e.url,resourceTitle:e.title,scalePercent:e.scalePercent};case m.SelectedOption.Video:return{resourceUrl:e.url,resourceTitle:e.title};case m.SelectedOption.Variable:return{variableName:d.distExports.normalizeVariableName(e.title??"")??void 0};default:return{resourceUrl:e.url??"",resourceTitle:e.title??""}}};function V(t,e){return i=>{const a=i.matchBefore(/\/(\w*)$/);if(!a)return null;const c=(r,n,o,l,u)=>{r.dispatch({changes:{from:o,to:l,insert:""}}),t(u)};return{from:a.from,to:a.to,options:[{label:e?.variable??"Variable",apply:(r,n,o,l)=>{c(r,n,o,l,m.SelectedOption.Variable)}},{label:e?.image??"Image",apply:(r,n,o,l)=>{c(r,n,o,l,m.SelectedOption.Image)}},{label:e?.video??"Video",apply:(r,n,o,l)=>{c(r,n,o,l,m.SelectedOption.Video)}}],filter:!1}}}const f=t=>g.getVideoEmbedUrl(t),p=t=>t.replace(/&/g,"&amp;").replace(/"/g,"&quot;"),w=t=>t.replace(/([\[\]\\])/g,"\\$1"),h=t=>Math.max(1,Math.min(1e3,Math.round(t))),b=t=>{const e=t.trim();return e?new RegExp(`^${s}\\s*[\\s\\S]*?\\s*${s}$`).test(e)?e:`${s} ${e} ${s}`:`${s}${s}`},x=t=>{const e=t.trim(),i=new RegExp(`^${s}\\s*([\\s\\S]*?)\\s*${s}$`);return(e.match(i)?.[1]??e).trim()},E=({resourceUrl:t,resourceTitle:e,scalePercent:i})=>{const a=typeof i=="number"?h(i):void 0,c=p(t),r=e?p(e):void 0,n=e?w(e):"",o=typeof a=="number"&&a!==100?` width="${a}%"`:"",l=r?` alt="${r}" title="${r}"`:"",u=!a||a===100?`![${n}](${t})`:`<img src="${c}"${l}${o} />`;return b(u)},S=(t,e)=>{const i=f(t),a=e?p(e):"",c=p(t),r=p(i),n=`<iframe data-tag="video" data-title="${a}" data-url="${c}" class="w-full aspect-video rounded-lg border-0" src="${r}" allowfullscreen="" allow="autoplay; encrypted-media"></iframe>`;return b(n)};exports.createSlashCommands=V;exports.extractVariableNames=d.distExports.extractVariableNames;exports.findDocumentVariableMarkers=d.distExports.findDocumentVariableMarkers;exports.findVariableMarkers=d.distExports.findVariableMarkers;exports.formatVariableReference=d.distExports.formatVariableReference;exports.getEmbedUrl=f;exports.getImageContentToInsert=E;exports.getVideoContentToInsert=S;exports.normalizeVariableName=d.distExports.normalizeVariableName;exports.parseContentInfo=$;exports.trimVariablePadding=d.distExports.trimVariablePadding;exports.unwrapFixedOutput=x;exports.wrapWithFixedOutput=b;
2
2
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","sources":["../../../src/components/MarkdownFlowEditor/utils.ts"],"sourcesContent":["import {\n type CompletionContext,\n type CompletionResult,\n} from \"@codemirror/autocomplete\";\nimport { EditorView } from \"@codemirror/view\";\nimport { SelectedOption } from \"./types\";\nimport { getVideoEmbedUrl } from \"./utils/video\";\n\nconst VARIABLE_NAME_SOURCE = \"[\\\\p{L}\\\\p{N}_]+\";\nconst VARIABLE_NAME_REGEXP = new RegExp(`^${VARIABLE_NAME_SOURCE}$`, \"u\");\nconst VARIABLE_EXPRESSION_PATTERN = `\\\\{\\\\{(${VARIABLE_NAME_SOURCE})\\\\}\\\\}`;\nconst FIXED_OUTPUT_MARKER = \"===\";\n\nconst createVariableExpressionRegexp = () =>\n new RegExp(VARIABLE_EXPRESSION_PATTERN, \"gu\");\n\nconst isValidVariableName = (name: string) =>\n typeof name === \"string\" && VARIABLE_NAME_REGEXP.test(name);\n\nconst extractVariableNames = (content: string) => {\n if (!content) {\n return [];\n }\n const matches: string[] = [];\n const regexp = createVariableExpressionRegexp();\n let match: RegExpExecArray | null;\n\n while ((match = regexp.exec(content)) !== null) {\n matches.push(match[1]);\n }\n\n return matches;\n};\n\nconst parseContentInfo = (\n type: SelectedOption,\n dataset: { title?: string; url?: string; scalePercent?: number }\n) => {\n switch (type) {\n case SelectedOption.Image:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n scalePercent: dataset.scalePercent,\n };\n\n case SelectedOption.Video:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n };\n case SelectedOption.Variable:\n return {\n variableName: dataset.title,\n };\n default:\n return {\n resourceUrl: dataset.url ?? \"\",\n resourceTitle: dataset.title ?? \"\",\n };\n }\n};\n\nfunction createSlashCommands(\n onSelectOption: (selectedOption: SelectedOption) => void,\n labels?: {\n divider?: string;\n fixedText?: string;\n image?: string;\n video?: string;\n variable?: string;\n }\n) {\n return (context: CompletionContext): CompletionResult | null => {\n const word = context.matchBefore(/\\/(\\w*)$/);\n if (!word) return null;\n\n const handleSelect = (\n view: EditorView,\n _: any,\n from: number,\n to: number,\n selectedOption: SelectedOption\n ) => {\n view.dispatch({\n changes: { from, to, insert: \"\" },\n });\n onSelectOption(selectedOption);\n };\n\n return {\n from: word.from,\n to: word.to,\n options: [\n // {\n // label: labels?.divider ?? \"Divider\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.Divider);\n // },\n // },\n // {\n // label: labels?.fixedText ?? \"Fixed Text\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.FixedText);\n // },\n // },\n {\n label: labels?.variable ?? \"Variable\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Variable);\n },\n },\n {\n label: labels?.image ?? \"Image\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Image);\n },\n },\n {\n label: labels?.video ?? \"Video\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Video);\n },\n },\n ],\n filter: false,\n };\n };\n}\n\nconst getEmbedUrl = (url: string) => {\n return getVideoEmbedUrl(url);\n};\n\nconst escapeHtmlAttribute = (value: string) =>\n value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n\nconst escapeMarkdownText = (text: string) =>\n text.replace(/([\\[\\]\\\\])/g, \"\\\\$1\");\n\nconst clampScalePercent = (value: number) =>\n Math.max(1, Math.min(1000, Math.round(value)));\n\nconst wrapWithFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n if (!normalizedContent) {\n return `${FIXED_OUTPUT_MARKER}${FIXED_OUTPUT_MARKER}`;\n }\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*[\\\\s\\\\S]*?\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n if (wrappedPattern.test(normalizedContent)) {\n return normalizedContent;\n }\n return `${FIXED_OUTPUT_MARKER} ${normalizedContent} ${FIXED_OUTPUT_MARKER}`;\n};\n\nconst unwrapFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*([\\\\s\\\\S]*?)\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n const match = normalizedContent.match(wrappedPattern);\n return (match?.[1] ?? normalizedContent).trim();\n};\n\nconst getImageContentToInsert = ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n}: {\n resourceUrl: string;\n resourceTitle?: string;\n scalePercent?: number;\n}) => {\n const clampedScale =\n typeof scalePercent === \"number\"\n ? clampScalePercent(scalePercent)\n : undefined;\n const sanitizedHtmlUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : undefined;\n const markdownTitle = resourceTitle ? escapeMarkdownText(resourceTitle) : \"\";\n const widthAttribute =\n typeof clampedScale === \"number\" && clampedScale !== 100\n ? ` width=\"${clampedScale}%\"`\n : \"\";\n const htmlTitleAttributes = sanitizedTitle\n ? ` alt=\"${sanitizedTitle}\" title=\"${sanitizedTitle}\"`\n : \"\";\n const imageMarkup =\n !clampedScale || clampedScale === 100\n ? `![${markdownTitle}](${resourceUrl})`\n : `<img src=\"${sanitizedHtmlUrl}\"${htmlTitleAttributes}${widthAttribute} />`;\n\n return wrapWithFixedOutput(imageMarkup);\n};\n\nconst getVideoContentToInsert = (\n resourceUrl: string,\n resourceTitle: string\n) => {\n const embedUrl = getEmbedUrl(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : \"\";\n const sanitizedResourceUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedEmbedUrl = escapeHtmlAttribute(embedUrl);\n const videoMarkup = `<iframe data-tag=\"video\" data-title=\"${sanitizedTitle}\" data-url=\"${sanitizedResourceUrl}\" class=\"w-full aspect-video rounded-lg border-0\" src=\"${sanitizedEmbedUrl}\" allowfullscreen=\"\" allow=\"autoplay; encrypted-media\"></iframe>`;\n\n return wrapWithFixedOutput(videoMarkup);\n};\n\nexport {\n createSlashCommands,\n parseContentInfo,\n getEmbedUrl,\n getImageContentToInsert,\n getVideoContentToInsert,\n isValidVariableName,\n extractVariableNames,\n createVariableExpressionRegexp,\n wrapWithFixedOutput,\n unwrapFixedOutput,\n};\n"],"names":["VARIABLE_NAME_SOURCE","VARIABLE_NAME_REGEXP","VARIABLE_EXPRESSION_PATTERN","FIXED_OUTPUT_MARKER","createVariableExpressionRegexp","isValidVariableName","name","extractVariableNames","content","matches","regexp","match","parseContentInfo","type","dataset","SelectedOption","createSlashCommands","onSelectOption","labels","context","word","handleSelect","view","_","from","to","selectedOption","getEmbedUrl","url","getVideoEmbedUrl","escapeHtmlAttribute","value","escapeMarkdownText","text","clampScalePercent","wrapWithFixedOutput","normalizedContent","unwrapFixedOutput","wrappedPattern","getImageContentToInsert","resourceUrl","resourceTitle","scalePercent","clampedScale","sanitizedHtmlUrl","sanitizedTitle","markdownTitle","widthAttribute","htmlTitleAttributes","imageMarkup","getVideoContentToInsert","embedUrl","sanitizedResourceUrl","sanitizedEmbedUrl","videoMarkup"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","sources":["../../../src/components/MarkdownFlowEditor/utils.ts"],"sourcesContent":["import {\n type CompletionContext,\n type CompletionResult,\n} from \"@codemirror/autocomplete\";\nimport { EditorView } from \"@codemirror/view\";\nimport { SelectedOption } from \"./types\";\nimport { getVideoEmbedUrl } from \"./utils/video\";\n\nimport {\n createVariableExpressionRegex,\n extractVariableNames,\n findVariableMarkers,\n findDocumentVariableMarkers,\n formatVariableReference,\n formatVariableAssignment,\n isValidVariableName,\n normalizeVariableName,\n trimVariablePadding,\n} from \"remark-flow\";\n\nconst FIXED_OUTPUT_MARKER = \"===\";\nconst createVariableExpressionRegexp = () =>\n createVariableExpressionRegex(\"gu\");\n\nconst parseContentInfo = (\n type: SelectedOption,\n dataset: { title?: string; url?: string; scalePercent?: number }\n) => {\n switch (type) {\n case SelectedOption.Image:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n scalePercent: dataset.scalePercent,\n };\n\n case SelectedOption.Video:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n };\n case SelectedOption.Variable:\n return {\n variableName: normalizeVariableName(dataset.title ?? \"\") ?? undefined,\n };\n default:\n return {\n resourceUrl: dataset.url ?? \"\",\n resourceTitle: dataset.title ?? \"\",\n };\n }\n};\n\nfunction createSlashCommands(\n onSelectOption: (selectedOption: SelectedOption) => void,\n labels?: {\n divider?: string;\n fixedText?: string;\n image?: string;\n video?: string;\n variable?: string;\n }\n) {\n return (context: CompletionContext): CompletionResult | null => {\n const word = context.matchBefore(/\\/(\\w*)$/);\n if (!word) return null;\n\n const handleSelect = (\n view: EditorView,\n _: any,\n from: number,\n to: number,\n selectedOption: SelectedOption\n ) => {\n view.dispatch({\n changes: { from, to, insert: \"\" },\n });\n onSelectOption(selectedOption);\n };\n\n return {\n from: word.from,\n to: word.to,\n options: [\n // {\n // label: labels?.divider ?? \"Divider\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.Divider);\n // },\n // },\n // {\n // label: labels?.fixedText ?? \"Fixed Text\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.FixedText);\n // },\n // },\n {\n label: labels?.variable ?? \"Variable\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Variable);\n },\n },\n {\n label: labels?.image ?? \"Image\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Image);\n },\n },\n {\n label: labels?.video ?? \"Video\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Video);\n },\n },\n ],\n filter: false,\n };\n };\n}\n\nconst getEmbedUrl = (url: string) => {\n return getVideoEmbedUrl(url);\n};\n\nconst escapeHtmlAttribute = (value: string) =>\n value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n\nconst escapeMarkdownText = (text: string) =>\n text.replace(/([\\[\\]\\\\])/g, \"\\\\$1\");\n\nconst clampScalePercent = (value: number) =>\n Math.max(1, Math.min(1000, Math.round(value)));\n\nconst wrapWithFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n if (!normalizedContent) {\n return `${FIXED_OUTPUT_MARKER}${FIXED_OUTPUT_MARKER}`;\n }\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*[\\\\s\\\\S]*?\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n if (wrappedPattern.test(normalizedContent)) {\n return normalizedContent;\n }\n return `${FIXED_OUTPUT_MARKER} ${normalizedContent} ${FIXED_OUTPUT_MARKER}`;\n};\n\nconst unwrapFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*([\\\\s\\\\S]*?)\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n const match = normalizedContent.match(wrappedPattern);\n return (match?.[1] ?? normalizedContent).trim();\n};\n\nconst getImageContentToInsert = ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n}: {\n resourceUrl: string;\n resourceTitle?: string;\n scalePercent?: number;\n}) => {\n const clampedScale =\n typeof scalePercent === \"number\"\n ? clampScalePercent(scalePercent)\n : undefined;\n const sanitizedHtmlUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : undefined;\n const markdownTitle = resourceTitle ? escapeMarkdownText(resourceTitle) : \"\";\n const widthAttribute =\n typeof clampedScale === \"number\" && clampedScale !== 100\n ? ` width=\"${clampedScale}%\"`\n : \"\";\n const htmlTitleAttributes = sanitizedTitle\n ? ` alt=\"${sanitizedTitle}\" title=\"${sanitizedTitle}\"`\n : \"\";\n const imageMarkup =\n !clampedScale || clampedScale === 100\n ? `![${markdownTitle}](${resourceUrl})`\n : `<img src=\"${sanitizedHtmlUrl}\"${htmlTitleAttributes}${widthAttribute} />`;\n\n return wrapWithFixedOutput(imageMarkup);\n};\n\nconst getVideoContentToInsert = (\n resourceUrl: string,\n resourceTitle: string\n) => {\n const embedUrl = getEmbedUrl(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : \"\";\n const sanitizedResourceUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedEmbedUrl = escapeHtmlAttribute(embedUrl);\n const videoMarkup = `<iframe data-tag=\"video\" data-title=\"${sanitizedTitle}\" data-url=\"${sanitizedResourceUrl}\" class=\"w-full aspect-video rounded-lg border-0\" src=\"${sanitizedEmbedUrl}\" allowfullscreen=\"\" allow=\"autoplay; encrypted-media\"></iframe>`;\n\n return wrapWithFixedOutput(videoMarkup);\n};\n\nexport {\n createSlashCommands,\n parseContentInfo,\n getEmbedUrl,\n getImageContentToInsert,\n getVideoContentToInsert,\n isValidVariableName,\n normalizeVariableName,\n trimVariablePadding,\n extractVariableNames,\n findVariableMarkers,\n findDocumentVariableMarkers,\n formatVariableReference,\n formatVariableAssignment,\n createVariableExpressionRegexp,\n wrapWithFixedOutput,\n unwrapFixedOutput,\n};\n"],"names":["FIXED_OUTPUT_MARKER","parseContentInfo","type","dataset","SelectedOption","normalizeVariableName","createSlashCommands","onSelectOption","labels","context","word","handleSelect","view","_","from","to","selectedOption","getEmbedUrl","url","getVideoEmbedUrl","escapeHtmlAttribute","value","escapeMarkdownText","text","clampScalePercent","wrapWithFixedOutput","content","normalizedContent","unwrapFixedOutput","wrappedPattern","getImageContentToInsert","resourceUrl","resourceTitle","scalePercent","clampedScale","sanitizedHtmlUrl","sanitizedTitle","markdownTitle","widthAttribute","htmlTitleAttributes","imageMarkup","getVideoContentToInsert","embedUrl","sanitizedResourceUrl","sanitizedEmbedUrl","videoMarkup"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
1
  import { CompletionContext, CompletionResult } from '@codemirror/autocomplete';
2
2
  import { SelectedOption } from './types.js';
3
+ import { extractVariableNames, findVariableMarkers, findDocumentVariableMarkers, formatVariableReference, formatVariableAssignment, isValidVariableName, normalizeVariableName, trimVariablePadding } from 'remark-flow';
3
4
  declare const createVariableExpressionRegexp: () => RegExp;
4
- declare const isValidVariableName: (name: string) => boolean;
5
- declare const extractVariableNames: (content: string) => string[];
6
5
  declare const parseContentInfo: (type: SelectedOption, dataset: {
7
6
  title?: string;
8
7
  url?: string;
@@ -39,4 +38,4 @@ declare const getImageContentToInsert: ({ resourceUrl, resourceTitle, scalePerce
39
38
  scalePercent?: number;
40
39
  }) => string;
41
40
  declare const getVideoContentToInsert: (resourceUrl: string, resourceTitle: string) => string;
42
- export { createSlashCommands, parseContentInfo, getEmbedUrl, getImageContentToInsert, getVideoContentToInsert, isValidVariableName, extractVariableNames, createVariableExpressionRegexp, wrapWithFixedOutput, unwrapFixedOutput, };
41
+ export { createSlashCommands, parseContentInfo, getEmbedUrl, getImageContentToInsert, getVideoContentToInsert, isValidVariableName, normalizeVariableName, trimVariablePadding, extractVariableNames, findVariableMarkers, findDocumentVariableMarkers, formatVariableReference, formatVariableAssignment, createVariableExpressionRegexp, wrapWithFixedOutput, unwrapFixedOutput, };
@@ -1,29 +1,22 @@
1
- import { SelectedOption as p } from "./types.es.js";
2
- import { getVideoEmbedUrl as g } from "./utils/video.es.js";
3
- const d = "[\\p{L}\\p{N}_]+", f = new RegExp(`^${d}$`, "u"), E = `\\{\\{(${d})\\}\\}`, s = "===", h = () => new RegExp(E, "gu"), A = (t) => typeof t == "string" && f.test(t), I = (t) => {
4
- if (!t)
5
- return [];
6
- const e = [], o = h();
7
- let r;
8
- for (; (r = o.exec(t)) !== null; )
9
- e.push(r[1]);
10
- return e;
11
- }, S = (t, e) => {
1
+ import { SelectedOption as d } from "./types.es.js";
2
+ import { getVideoEmbedUrl as f } from "./utils/video.es.js";
3
+ import { d as m } from "../../_virtual/index.es.js";
4
+ const c = "===", x = (t, e) => {
12
5
  switch (t) {
13
- case p.Image:
6
+ case d.Image:
14
7
  return {
15
8
  resourceUrl: e.url,
16
9
  resourceTitle: e.title,
17
10
  scalePercent: e.scalePercent
18
11
  };
19
- case p.Video:
12
+ case d.Video:
20
13
  return {
21
14
  resourceUrl: e.url,
22
15
  resourceTitle: e.title
23
16
  };
24
- case p.Variable:
17
+ case d.Variable:
25
18
  return {
26
- variableName: e.title
19
+ variableName: m.normalizeVariableName(e.title ?? "") ?? void 0
27
20
  };
28
21
  default:
29
22
  return {
@@ -32,18 +25,18 @@ const d = "[\\p{L}\\p{N}_]+", f = new RegExp(`^${d}$`, "u"), E = `\\{\\{(${d})\\
32
25
  };
33
26
  }
34
27
  };
35
- function T(t, e) {
28
+ function z(t, e) {
36
29
  return (o) => {
37
- const r = o.matchBefore(/\/(\w*)$/);
38
- if (!r) return null;
39
- const l = (n, a, i, c, u) => {
40
- n.dispatch({
41
- changes: { from: i, to: c, insert: "" }
30
+ const a = o.matchBefore(/\/(\w*)$/);
31
+ if (!a) return null;
32
+ const s = (r, n, i, l, u) => {
33
+ r.dispatch({
34
+ changes: { from: i, to: l, insert: "" }
42
35
  }), t(u);
43
36
  };
44
37
  return {
45
- from: r.from,
46
- to: r.to,
38
+ from: a.from,
39
+ to: a.to,
47
40
  options: [
48
41
  // {
49
42
  // label: labels?.divider ?? "Divider",
@@ -59,20 +52,20 @@ function T(t, e) {
59
52
  // },
60
53
  {
61
54
  label: e?.variable ?? "Variable",
62
- apply: (n, a, i, c) => {
63
- l(n, a, i, c, p.Variable);
55
+ apply: (r, n, i, l) => {
56
+ s(r, n, i, l, d.Variable);
64
57
  }
65
58
  },
66
59
  {
67
60
  label: e?.image ?? "Image",
68
- apply: (n, a, i, c) => {
69
- l(n, a, i, c, p.Image);
61
+ apply: (r, n, i, l) => {
62
+ s(r, n, i, l, d.Image);
70
63
  }
71
64
  },
72
65
  {
73
66
  label: e?.video ?? "Video",
74
- apply: (n, a, i, c) => {
75
- l(n, a, i, c, p.Video);
67
+ apply: (r, n, i, l) => {
68
+ s(r, n, i, l, d.Video);
76
69
  }
77
70
  }
78
71
  ],
@@ -80,37 +73,40 @@ function T(t, e) {
80
73
  };
81
74
  };
82
75
  }
83
- const w = (t) => g(t), m = (t) => t.replace(/&/g, "&amp;").replace(/"/g, "&quot;"), b = (t) => t.replace(/([\[\]\\])/g, "\\$1"), R = (t) => Math.max(1, Math.min(1e3, Math.round(t))), $ = (t) => {
76
+ const $ = (t) => f(t), p = (t) => t.replace(/&/g, "&amp;").replace(/"/g, "&quot;"), g = (t) => t.replace(/([\[\]\\])/g, "\\$1"), V = (t) => Math.max(1, Math.min(1e3, Math.round(t))), b = (t) => {
84
77
  const e = t.trim();
85
78
  return e ? new RegExp(
86
- `^${s}\\s*[\\s\\S]*?\\s*${s}$`
87
- ).test(e) ? e : `${s} ${e} ${s}` : `${s}${s}`;
88
- }, U = (t) => {
79
+ `^${c}\\s*[\\s\\S]*?\\s*${c}$`
80
+ ).test(e) ? e : `${c} ${e} ${c}` : `${c}${c}`;
81
+ }, v = (t) => {
89
82
  const e = t.trim(), o = new RegExp(
90
- `^${s}\\s*([\\s\\S]*?)\\s*${s}$`
83
+ `^${c}\\s*([\\s\\S]*?)\\s*${c}$`
91
84
  );
92
85
  return (e.match(o)?.[1] ?? e).trim();
93
- }, _ = ({
86
+ }, U = ({
94
87
  resourceUrl: t,
95
88
  resourceTitle: e,
96
89
  scalePercent: o
97
90
  }) => {
98
- const r = typeof o == "number" ? R(o) : void 0, l = m(t), n = e ? m(e) : void 0, a = e ? b(e) : "", i = typeof r == "number" && r !== 100 ? ` width="${r}%"` : "", c = n ? ` alt="${n}" title="${n}"` : "", u = !r || r === 100 ? `![${a}](${t})` : `<img src="${l}"${c}${i} />`;
99
- return $(u);
100
- }, M = (t, e) => {
101
- const o = w(t), r = e ? m(e) : "", l = m(t), n = m(o), a = `<iframe data-tag="video" data-title="${r}" data-url="${l}" class="w-full aspect-video rounded-lg border-0" src="${n}" allowfullscreen="" allow="autoplay; encrypted-media"></iframe>`;
102
- return $(a);
103
- };
91
+ const a = typeof o == "number" ? V(o) : void 0, s = p(t), r = e ? p(e) : void 0, n = e ? g(e) : "", i = typeof a == "number" && a !== 100 ? ` width="${a}%"` : "", l = r ? ` alt="${r}" title="${r}"` : "", u = !a || a === 100 ? `![${n}](${t})` : `<img src="${s}"${l}${i} />`;
92
+ return b(u);
93
+ }, k = (t, e) => {
94
+ const o = $(t), a = e ? p(e) : "", s = p(t), r = p(o), n = `<iframe data-tag="video" data-title="${a}" data-url="${s}" class="w-full aspect-video rounded-lg border-0" src="${r}" allowfullscreen="" allow="autoplay; encrypted-media"></iframe>`;
95
+ return b(n);
96
+ }, E = m.extractVariableNames, I = m.findDocumentVariableMarkers, P = m.findVariableMarkers, T = m.formatVariableReference, y = m.normalizeVariableName, R = m.trimVariablePadding;
104
97
  export {
105
- T as createSlashCommands,
106
- h as createVariableExpressionRegexp,
107
- I as extractVariableNames,
108
- w as getEmbedUrl,
109
- _ as getImageContentToInsert,
110
- M as getVideoContentToInsert,
111
- A as isValidVariableName,
112
- S as parseContentInfo,
113
- U as unwrapFixedOutput,
114
- $ as wrapWithFixedOutput
98
+ z as createSlashCommands,
99
+ E as extractVariableNames,
100
+ I as findDocumentVariableMarkers,
101
+ P as findVariableMarkers,
102
+ T as formatVariableReference,
103
+ $ as getEmbedUrl,
104
+ U as getImageContentToInsert,
105
+ k as getVideoContentToInsert,
106
+ y as normalizeVariableName,
107
+ x as parseContentInfo,
108
+ R as trimVariablePadding,
109
+ v as unwrapFixedOutput,
110
+ b as wrapWithFixedOutput
115
111
  };
116
112
  //# sourceMappingURL=utils.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.es.js","sources":["../../../src/components/MarkdownFlowEditor/utils.ts"],"sourcesContent":["import {\n type CompletionContext,\n type CompletionResult,\n} from \"@codemirror/autocomplete\";\nimport { EditorView } from \"@codemirror/view\";\nimport { SelectedOption } from \"./types\";\nimport { getVideoEmbedUrl } from \"./utils/video\";\n\nconst VARIABLE_NAME_SOURCE = \"[\\\\p{L}\\\\p{N}_]+\";\nconst VARIABLE_NAME_REGEXP = new RegExp(`^${VARIABLE_NAME_SOURCE}$`, \"u\");\nconst VARIABLE_EXPRESSION_PATTERN = `\\\\{\\\\{(${VARIABLE_NAME_SOURCE})\\\\}\\\\}`;\nconst FIXED_OUTPUT_MARKER = \"===\";\n\nconst createVariableExpressionRegexp = () =>\n new RegExp(VARIABLE_EXPRESSION_PATTERN, \"gu\");\n\nconst isValidVariableName = (name: string) =>\n typeof name === \"string\" && VARIABLE_NAME_REGEXP.test(name);\n\nconst extractVariableNames = (content: string) => {\n if (!content) {\n return [];\n }\n const matches: string[] = [];\n const regexp = createVariableExpressionRegexp();\n let match: RegExpExecArray | null;\n\n while ((match = regexp.exec(content)) !== null) {\n matches.push(match[1]);\n }\n\n return matches;\n};\n\nconst parseContentInfo = (\n type: SelectedOption,\n dataset: { title?: string; url?: string; scalePercent?: number }\n) => {\n switch (type) {\n case SelectedOption.Image:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n scalePercent: dataset.scalePercent,\n };\n\n case SelectedOption.Video:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n };\n case SelectedOption.Variable:\n return {\n variableName: dataset.title,\n };\n default:\n return {\n resourceUrl: dataset.url ?? \"\",\n resourceTitle: dataset.title ?? \"\",\n };\n }\n};\n\nfunction createSlashCommands(\n onSelectOption: (selectedOption: SelectedOption) => void,\n labels?: {\n divider?: string;\n fixedText?: string;\n image?: string;\n video?: string;\n variable?: string;\n }\n) {\n return (context: CompletionContext): CompletionResult | null => {\n const word = context.matchBefore(/\\/(\\w*)$/);\n if (!word) return null;\n\n const handleSelect = (\n view: EditorView,\n _: any,\n from: number,\n to: number,\n selectedOption: SelectedOption\n ) => {\n view.dispatch({\n changes: { from, to, insert: \"\" },\n });\n onSelectOption(selectedOption);\n };\n\n return {\n from: word.from,\n to: word.to,\n options: [\n // {\n // label: labels?.divider ?? \"Divider\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.Divider);\n // },\n // },\n // {\n // label: labels?.fixedText ?? \"Fixed Text\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.FixedText);\n // },\n // },\n {\n label: labels?.variable ?? \"Variable\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Variable);\n },\n },\n {\n label: labels?.image ?? \"Image\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Image);\n },\n },\n {\n label: labels?.video ?? \"Video\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Video);\n },\n },\n ],\n filter: false,\n };\n };\n}\n\nconst getEmbedUrl = (url: string) => {\n return getVideoEmbedUrl(url);\n};\n\nconst escapeHtmlAttribute = (value: string) =>\n value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n\nconst escapeMarkdownText = (text: string) =>\n text.replace(/([\\[\\]\\\\])/g, \"\\\\$1\");\n\nconst clampScalePercent = (value: number) =>\n Math.max(1, Math.min(1000, Math.round(value)));\n\nconst wrapWithFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n if (!normalizedContent) {\n return `${FIXED_OUTPUT_MARKER}${FIXED_OUTPUT_MARKER}`;\n }\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*[\\\\s\\\\S]*?\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n if (wrappedPattern.test(normalizedContent)) {\n return normalizedContent;\n }\n return `${FIXED_OUTPUT_MARKER} ${normalizedContent} ${FIXED_OUTPUT_MARKER}`;\n};\n\nconst unwrapFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*([\\\\s\\\\S]*?)\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n const match = normalizedContent.match(wrappedPattern);\n return (match?.[1] ?? normalizedContent).trim();\n};\n\nconst getImageContentToInsert = ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n}: {\n resourceUrl: string;\n resourceTitle?: string;\n scalePercent?: number;\n}) => {\n const clampedScale =\n typeof scalePercent === \"number\"\n ? clampScalePercent(scalePercent)\n : undefined;\n const sanitizedHtmlUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : undefined;\n const markdownTitle = resourceTitle ? escapeMarkdownText(resourceTitle) : \"\";\n const widthAttribute =\n typeof clampedScale === \"number\" && clampedScale !== 100\n ? ` width=\"${clampedScale}%\"`\n : \"\";\n const htmlTitleAttributes = sanitizedTitle\n ? ` alt=\"${sanitizedTitle}\" title=\"${sanitizedTitle}\"`\n : \"\";\n const imageMarkup =\n !clampedScale || clampedScale === 100\n ? `![${markdownTitle}](${resourceUrl})`\n : `<img src=\"${sanitizedHtmlUrl}\"${htmlTitleAttributes}${widthAttribute} />`;\n\n return wrapWithFixedOutput(imageMarkup);\n};\n\nconst getVideoContentToInsert = (\n resourceUrl: string,\n resourceTitle: string\n) => {\n const embedUrl = getEmbedUrl(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : \"\";\n const sanitizedResourceUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedEmbedUrl = escapeHtmlAttribute(embedUrl);\n const videoMarkup = `<iframe data-tag=\"video\" data-title=\"${sanitizedTitle}\" data-url=\"${sanitizedResourceUrl}\" class=\"w-full aspect-video rounded-lg border-0\" src=\"${sanitizedEmbedUrl}\" allowfullscreen=\"\" allow=\"autoplay; encrypted-media\"></iframe>`;\n\n return wrapWithFixedOutput(videoMarkup);\n};\n\nexport {\n createSlashCommands,\n parseContentInfo,\n getEmbedUrl,\n getImageContentToInsert,\n getVideoContentToInsert,\n isValidVariableName,\n extractVariableNames,\n createVariableExpressionRegexp,\n wrapWithFixedOutput,\n unwrapFixedOutput,\n};\n"],"names":["VARIABLE_NAME_SOURCE","VARIABLE_NAME_REGEXP","VARIABLE_EXPRESSION_PATTERN","FIXED_OUTPUT_MARKER","createVariableExpressionRegexp","isValidVariableName","name","extractVariableNames","content","matches","regexp","match","parseContentInfo","type","dataset","SelectedOption","createSlashCommands","onSelectOption","labels","context","word","handleSelect","view","_","from","to","selectedOption","getEmbedUrl","url","getVideoEmbedUrl","escapeHtmlAttribute","value","escapeMarkdownText","text","clampScalePercent","wrapWithFixedOutput","normalizedContent","unwrapFixedOutput","wrappedPattern","getImageContentToInsert","resourceUrl","resourceTitle","scalePercent","clampedScale","sanitizedHtmlUrl","sanitizedTitle","markdownTitle","widthAttribute","htmlTitleAttributes","imageMarkup","getVideoContentToInsert","embedUrl","sanitizedResourceUrl","sanitizedEmbedUrl","videoMarkup"],"mappings":"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"}
1
+ {"version":3,"file":"utils.es.js","sources":["../../../src/components/MarkdownFlowEditor/utils.ts"],"sourcesContent":["import {\n type CompletionContext,\n type CompletionResult,\n} from \"@codemirror/autocomplete\";\nimport { EditorView } from \"@codemirror/view\";\nimport { SelectedOption } from \"./types\";\nimport { getVideoEmbedUrl } from \"./utils/video\";\n\nimport {\n createVariableExpressionRegex,\n extractVariableNames,\n findVariableMarkers,\n findDocumentVariableMarkers,\n formatVariableReference,\n formatVariableAssignment,\n isValidVariableName,\n normalizeVariableName,\n trimVariablePadding,\n} from \"remark-flow\";\n\nconst FIXED_OUTPUT_MARKER = \"===\";\nconst createVariableExpressionRegexp = () =>\n createVariableExpressionRegex(\"gu\");\n\nconst parseContentInfo = (\n type: SelectedOption,\n dataset: { title?: string; url?: string; scalePercent?: number }\n) => {\n switch (type) {\n case SelectedOption.Image:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n scalePercent: dataset.scalePercent,\n };\n\n case SelectedOption.Video:\n return {\n resourceUrl: dataset.url,\n resourceTitle: dataset.title,\n };\n case SelectedOption.Variable:\n return {\n variableName: normalizeVariableName(dataset.title ?? \"\") ?? undefined,\n };\n default:\n return {\n resourceUrl: dataset.url ?? \"\",\n resourceTitle: dataset.title ?? \"\",\n };\n }\n};\n\nfunction createSlashCommands(\n onSelectOption: (selectedOption: SelectedOption) => void,\n labels?: {\n divider?: string;\n fixedText?: string;\n image?: string;\n video?: string;\n variable?: string;\n }\n) {\n return (context: CompletionContext): CompletionResult | null => {\n const word = context.matchBefore(/\\/(\\w*)$/);\n if (!word) return null;\n\n const handleSelect = (\n view: EditorView,\n _: any,\n from: number,\n to: number,\n selectedOption: SelectedOption\n ) => {\n view.dispatch({\n changes: { from, to, insert: \"\" },\n });\n onSelectOption(selectedOption);\n };\n\n return {\n from: word.from,\n to: word.to,\n options: [\n // {\n // label: labels?.divider ?? \"Divider\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.Divider);\n // },\n // },\n // {\n // label: labels?.fixedText ?? \"Fixed Text\",\n // apply: (view, _, from, to) => {\n // handleSelect(view, _, from, to, SelectedOption.FixedText);\n // },\n // },\n {\n label: labels?.variable ?? \"Variable\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Variable);\n },\n },\n {\n label: labels?.image ?? \"Image\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Image);\n },\n },\n {\n label: labels?.video ?? \"Video\",\n apply: (view, _, from, to) => {\n handleSelect(view, _, from, to, SelectedOption.Video);\n },\n },\n ],\n filter: false,\n };\n };\n}\n\nconst getEmbedUrl = (url: string) => {\n return getVideoEmbedUrl(url);\n};\n\nconst escapeHtmlAttribute = (value: string) =>\n value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n\nconst escapeMarkdownText = (text: string) =>\n text.replace(/([\\[\\]\\\\])/g, \"\\\\$1\");\n\nconst clampScalePercent = (value: number) =>\n Math.max(1, Math.min(1000, Math.round(value)));\n\nconst wrapWithFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n if (!normalizedContent) {\n return `${FIXED_OUTPUT_MARKER}${FIXED_OUTPUT_MARKER}`;\n }\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*[\\\\s\\\\S]*?\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n if (wrappedPattern.test(normalizedContent)) {\n return normalizedContent;\n }\n return `${FIXED_OUTPUT_MARKER} ${normalizedContent} ${FIXED_OUTPUT_MARKER}`;\n};\n\nconst unwrapFixedOutput = (content: string) => {\n const normalizedContent = content.trim();\n const wrappedPattern = new RegExp(\n `^${FIXED_OUTPUT_MARKER}\\\\s*([\\\\s\\\\S]*?)\\\\s*${FIXED_OUTPUT_MARKER}$`\n );\n const match = normalizedContent.match(wrappedPattern);\n return (match?.[1] ?? normalizedContent).trim();\n};\n\nconst getImageContentToInsert = ({\n resourceUrl,\n resourceTitle,\n scalePercent,\n}: {\n resourceUrl: string;\n resourceTitle?: string;\n scalePercent?: number;\n}) => {\n const clampedScale =\n typeof scalePercent === \"number\"\n ? clampScalePercent(scalePercent)\n : undefined;\n const sanitizedHtmlUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : undefined;\n const markdownTitle = resourceTitle ? escapeMarkdownText(resourceTitle) : \"\";\n const widthAttribute =\n typeof clampedScale === \"number\" && clampedScale !== 100\n ? ` width=\"${clampedScale}%\"`\n : \"\";\n const htmlTitleAttributes = sanitizedTitle\n ? ` alt=\"${sanitizedTitle}\" title=\"${sanitizedTitle}\"`\n : \"\";\n const imageMarkup =\n !clampedScale || clampedScale === 100\n ? `![${markdownTitle}](${resourceUrl})`\n : `<img src=\"${sanitizedHtmlUrl}\"${htmlTitleAttributes}${widthAttribute} />`;\n\n return wrapWithFixedOutput(imageMarkup);\n};\n\nconst getVideoContentToInsert = (\n resourceUrl: string,\n resourceTitle: string\n) => {\n const embedUrl = getEmbedUrl(resourceUrl);\n const sanitizedTitle = resourceTitle\n ? escapeHtmlAttribute(resourceTitle)\n : \"\";\n const sanitizedResourceUrl = escapeHtmlAttribute(resourceUrl);\n const sanitizedEmbedUrl = escapeHtmlAttribute(embedUrl);\n const videoMarkup = `<iframe data-tag=\"video\" data-title=\"${sanitizedTitle}\" data-url=\"${sanitizedResourceUrl}\" class=\"w-full aspect-video rounded-lg border-0\" src=\"${sanitizedEmbedUrl}\" allowfullscreen=\"\" allow=\"autoplay; encrypted-media\"></iframe>`;\n\n return wrapWithFixedOutput(videoMarkup);\n};\n\nexport {\n createSlashCommands,\n parseContentInfo,\n getEmbedUrl,\n getImageContentToInsert,\n getVideoContentToInsert,\n isValidVariableName,\n normalizeVariableName,\n trimVariablePadding,\n extractVariableNames,\n findVariableMarkers,\n findDocumentVariableMarkers,\n formatVariableReference,\n formatVariableAssignment,\n createVariableExpressionRegexp,\n wrapWithFixedOutput,\n unwrapFixedOutput,\n};\n"],"names":["FIXED_OUTPUT_MARKER","parseContentInfo","type","dataset","SelectedOption","normalizeVariableName","createSlashCommands","onSelectOption","labels","context","word","handleSelect","view","_","from","to","selectedOption","getEmbedUrl","url","getVideoEmbedUrl","escapeHtmlAttribute","value","escapeMarkdownText","text","clampScalePercent","wrapWithFixedOutput","content","normalizedContent","unwrapFixedOutput","wrappedPattern","getImageContentToInsert","resourceUrl","resourceTitle","scalePercent","clampedScale","sanitizedHtmlUrl","sanitizedTitle","markdownTitle","widthAttribute","htmlTitleAttributes","imageMarkup","getVideoContentToInsert","embedUrl","sanitizedResourceUrl","sanitizedEmbedUrl","videoMarkup"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),d=require("react"),u=require("../../../node_modules/rc-textarea/es/TextArea.cjs");require("../../../_virtual/index4.cjs");require("../../../node_modules/rc-resize-observer/es/index.cjs");require("../../../node_modules/rc-util/es/hooks/useLayoutEffect.cjs");require("../../../node_modules/rc-util/es/raf.cjs");const s=require("../../../lib/utils.cjs");function c(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const l=c(d),i=l.forwardRef(({className:e,autoSize:t={minRows:1},style:r,...a},n)=>o.jsx(u.default,{ref:n,autoSize:t,className:s.cn("border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50","resize-none",e),style:{whiteSpace:"pre-wrap",wordBreak:"break-word",...r},...a}));i.displayName="Textarea";exports.Textarea=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),d=require("react"),u=require("../../../node_modules/rc-textarea/es/TextArea.cjs");require("../../../_virtual/index5.cjs");require("../../../node_modules/rc-resize-observer/es/index.cjs");require("../../../node_modules/rc-util/es/hooks/useLayoutEffect.cjs");require("../../../node_modules/rc-util/es/raf.cjs");const s=require("../../../lib/utils.cjs");function c(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const r in e)if(r!=="default"){const a=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>e[r]})}}return t.default=e,Object.freeze(t)}const l=c(d),i=l.forwardRef(({className:e,autoSize:t={minRows:1},style:r,...a},n)=>o.jsx(u.default,{ref:n,autoSize:t,className:s.cn("border-input placeholder:text-muted-foreground aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 w-full rounded-md border bg-transparent pl-3 py-1.5 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:cursor-not-allowed disabled:opacity-50","resize-none",e),style:{whiteSpace:"pre-wrap",wordBreak:"break-word",...r},...a}));i.displayName="Textarea";exports.Textarea=i;
2
2
  //# sourceMappingURL=textarea.cjs.map
@@ -1,7 +1,7 @@
1
1
  import { jsx as i } from "react/jsx-runtime";
2
2
  import * as d from "react";
3
3
  import n from "../../../node_modules/rc-textarea/es/TextArea.es.js";
4
- import "../../../_virtual/index.es4.js";
4
+ import "../../../_virtual/index.es5.js";
5
5
  import "../../../node_modules/rc-resize-observer/es/index.es.js";
6
6
  import "../../../node_modules/rc-util/es/hooks/useLayoutEffect.es.js";
7
7
  import "../../../node_modules/rc-util/es/raf.es.js";
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../_virtual/index.cjs"),b=p.distExports.createInteractionParser(),I=/<custom-variable\b/i,T=new RegExp(`\\?\\[(?:%\\{\\{([^}]+)\\}\\})?(${p.distExports.INTERACTION_CONTENT_SOURCE})\\]`),g=/^[\[{]/,v=/^[\s,,\n]+/,E=t=>{if(!t)return null;const n=t.match(T),s=n?.[1]?.trim(),e=n?.[2]?.trim();if(!e)return null;const r=e.includes("||"),l=r?"||":"|",u=e.split(l).map(a=>a.trim()).filter(Boolean);if(!u.length)return null;const i=[],o=[];let c;return u.forEach(a=>{if(a.startsWith("...")){const f=a.replace(/^\.\.\./,"").trim();f&&(c=f);return}i.push(a),o.push(a)}),{variableName:s,buttonTexts:i.length?i:void 0,buttonValues:o.length?o:void 0,placeholder:c,isMultiSelect:r}},V=t=>{if(!t)return null;try{return b.parseToRemarkFormat(t)}catch(n){console.warn("Failed to parse interaction block",n)}return E(t)},h=(t,n)=>{if(!t)return null;const s=t.trim(),e=n.buttonValues||[],r=n.buttonTexts||[],l=e.indexOf(s);if(l>-1)return{value:e[l],display:r[l]};const u=r.indexOf(s);return u>-1?{value:e[u]||r[u],display:r[u]}:null},S=t=>t.split(/[,,\n]/).map(n=>n.trim()).filter(Boolean),d=t=>t.replace(v,""),R=t=>{const n=t.buttonValues||[],s=t.buttonTexts||[],e=[],r=new Set;return n.forEach((l,u)=>{const i=`${l??""}`.trim(),o=`${s[u]??""}`.trim();[i,o].forEach(c=>{if(!c)return;const a=`${c}::${i||c}`;r.has(a)||(r.add(a),e.push({token:c,value:i||c}))})}),e.sort((l,u)=>u.token.length-l.token.length)},A=(t,n)=>{const s=d(t),e=R(n);for(const r of e){if(!s.startsWith(r.token))continue;const l=s[r.token.length];if(!(l&&!/[\s,,\n]/.test(l)))return r}return null},N=(t,n)=>{const s=S(t);if(!s.length)return{};const e=[],r=[];return s.forEach(l=>{const u=h(l,n);if(u){e.push(u.value);return}if(n.placeholder){r.push(l);return}e.push(l)}),{selectedValues:e.length?e:void 0,inputText:r.length?r.join(", "):void 0}},O=(t,n)=>{const s=[];let e=t.trim();for(;e;){const l=A(e,n);if(!l)break;s.push(l.value);const u=d(e);e=d(u.slice(l.token.length))}if(s.length>0)return{selectedValues:s,inputText:n.placeholder&&e.trim()?e.trim():void 0};const r=N(t,n);return r.selectedValues?.length?r:n.placeholder?{inputText:t.trim()}:r},D=t=>{if(!t||Array.isArray(t))return null;const n=Array.isArray(t.selectedValues)?t.selectedValues.map(r=>`${r??""}`.trim()).filter(Boolean):void 0,s=`${t.buttonText??""}`.trim(),e=typeof t.inputText=="string"?t.inputText:void 0;return!n?.length&&!s&&!e?null:{buttonText:s||void 0,inputText:e,selectedValues:n?.length?n:void 0}},C=t=>{if(!t||!g.test(t.trim()))return null;try{const n=JSON.parse(t);return D(n)}catch{return null}},P=t=>!!(t&&(I.test(t)||T.test(t))),m=(t,n,s,e)=>e?.resolveDefaultValues?.({content:t,rawValue:n,interactionInfo:s})??null,x=(t,n,s)=>{const e=n?.toString().trim();if(!e)return{};const r=C(e);if(r)return r;const l=m(t,e,null,s);if(l)return l;if(!P(t))return{buttonText:e,inputText:e};const u=V(t),i=m(t,e,u,s);if(i)return i;if(!u)return{buttonText:e,inputText:e};if(u.isMultiSelect)return O(e,u);const o=h(e,u);return o?{buttonText:o.value||o.display||e}:u.placeholder?{inputText:e}:{buttonText:e,inputText:e}},_=(t,n,s)=>{const e=x(t,n,s);return e.selectedValues?e.selectedValues:n?n.split(",").map(r=>r.trim()).filter(Boolean):void 0};exports.getInteractionDefaultSelectedValues=_;exports.getInteractionDefaultValues=x;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("../_virtual/index.cjs"),b=require("../components/ContentRender/utils/inline-code-ranges.cjs"),p=u.distExports.createInteractionParser(),g=/<custom-variable\b/i,E=new RegExp(`\\?\\[(${u.distExports.INTERACTION_CONTENT_SOURCE})\\](?!\\()`),V=/^[\[{]/,m=t=>{if(t.type==="flowInteraction"&&"value"in t)return typeof t.value=="string"?t.value:null;if(t.children)for(const e of t.children){const r=m(e);if(r!==null)return r}return null},I=t=>{if(!t)return null;try{const e=m(b.getMarkdownSourceAnalysis(t).tree)??(g.test(t)?t:null);return e===null||p.parse(e).error?null:p.parseToRemarkFormat(e)}catch(e){console.warn("Failed to parse interaction block",e)}return null},T=(t,e)=>{if(!t)return null;const r=u.distExports.trimVariablePadding(t),n=e.buttonValues||[],i=e.buttonTexts||[],s=n.indexOf(r);if(s>-1)return{value:n[s],display:i[s]};const l=i.indexOf(r);return l>-1?{value:n[l]||i[l],display:i[l]}:null},v=t=>t.split(/[,,\n]/).map(e=>u.distExports.trimVariablePadding(e)).filter(Boolean),d=t=>{let e=0;for(;e<t.length&&(t[e]===","||t[e]===","||u.distExports.trimVariablePadding(t[e])==="");)e+=1;return t.slice(e)},P=t=>{const e=t.buttonValues||[],r=t.buttonTexts||[],n=[],i=new Set;return e.forEach((s,l)=>{const a=u.distExports.trimVariablePadding(`${s??""}`),o=u.distExports.trimVariablePadding(`${r[l]??""}`);[a,o].forEach(c=>{if(!c)return;const f=`${c}::${a||c}`;i.has(f)||(i.add(f),n.push({token:c,value:a||c}))})}),n.sort((s,l)=>l.token.length-s.token.length)},S=(t,e)=>{const r=d(t),n=P(e);for(const i of n){if(!r.startsWith(i.token))continue;const s=r[i.token.length];if(!(s&&s!==","&&s!==","&&u.distExports.trimVariablePadding(s)!==""))return i}return null},D=(t,e)=>{const r=v(t);if(!r.length)return{};const n=[],i=[];return r.forEach(s=>{const l=T(s,e);if(l){n.push(l.value);return}if(e.placeholder){i.push(s);return}n.push(s)}),{selectedValues:n.length?n:void 0,inputText:i.length?i.join(", "):void 0}},R=(t,e)=>{const r=[];let n=u.distExports.trimVariablePadding(t);for(;n;){const s=S(n,e);if(!s)break;r.push(s.value);const l=d(n);n=d(l.slice(s.token.length))}if(r.length>0)return{selectedValues:r,inputText:e.placeholder&&n.trim()?n.trim():void 0};const i=D(t,e);return i.selectedValues?.length?i:e.placeholder?{inputText:t.trim()}:i},O=t=>{if(!t||Array.isArray(t))return null;const e=Array.isArray(t.selectedValues)?t.selectedValues.map(i=>u.distExports.trimVariablePadding(`${i??""}`)).filter(Boolean):void 0,r=u.distExports.trimVariablePadding(`${t.buttonText??""}`),n=typeof t.inputText=="string"?t.inputText:void 0;return!e?.length&&!r&&!n?null:{buttonText:r||void 0,inputText:n,selectedValues:e?.length?e:void 0}},A=t=>{if(!t||!V.test(u.distExports.trimVariablePadding(t)))return null;try{const e=JSON.parse(t);return O(e)}catch{return null}},N=t=>!!(t&&(g.test(t)||E.test(t))),x=(t,e,r,n)=>n?.resolveDefaultValues?.({content:t,rawValue:e,interactionInfo:r})??null,h=(t,e,r)=>{const n=e==null?void 0:u.distExports.trimVariablePadding(e.toString());if(!n)return{};const i=A(n);if(i)return i;const s=x(t,n,null,r);if(s)return s;if(!N(t))return{buttonText:n,inputText:n};const l=I(t),a=x(t,n,l,r);if(a)return a;if(!l)return{buttonText:n,inputText:n};if(l.isMultiSelect)return R(n,l);const o=T(n,l);return o?{buttonText:o.value||o.display||n}:l.placeholder?{inputText:n}:{buttonText:n,inputText:n}},C=(t,e,r)=>{const n=h(t,e,r);return n.selectedValues?n.selectedValues:e?e.split(",").map(i=>u.distExports.trimVariablePadding(i)).filter(Boolean):void 0};exports.getInteractionDefaultSelectedValues=C;exports.getInteractionDefaultValues=h;
2
2
  //# sourceMappingURL=interaction-defaults.cjs.map