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,18 +1,19 @@
1
1
  import { jsxs as w, jsx as r } from "react/jsx-runtime";
2
2
  import v from "react";
3
- import { Button as J } from "../../ui/button.es.js";
4
- import { Checkbox as U } from "../../ui/checkbox.es.js";
3
+ import { d as J } from "../../../_virtual/index.es.js";
4
+ import { Button as U } from "../../ui/button.es.js";
5
+ import { Checkbox as q } from "../../ui/checkbox.es.js";
5
6
  import O from "../MarkdownFlowInput.es.js";
6
- import { InputGroup as q, InputGroupTextarea as A } from "../../ui/inputGroup/input-group.es.js";
7
+ import { InputGroup as A, InputGroupTextarea as H } from "../../ui/inputGroup/input-group.es.js";
7
8
  import { cn as j } from "../../../lib/utils.es.js";
8
- import { getContentRenderLocaleTexts as H } from "../contentRenderI18n.es.js";
9
- const P = ({
9
+ import { getContentRenderLocaleTexts as P } from "../contentRenderI18n.es.js";
10
+ const Q = ({
10
11
  node: c,
11
12
  readonly: i,
12
13
  selectedValues: e,
13
14
  inputValue: s,
14
15
  confirmButtonText: o,
15
- handleCheckboxChange: n,
16
+ handleCheckboxChange: l,
16
17
  handleInputChange: m,
17
18
  handleKeyDown: f,
18
19
  handleConfirmClick: h
@@ -38,23 +39,23 @@ const P = ({
38
39
  }
39
40
  );
40
41
  return /* @__PURE__ */ w("span", { className: "multi-select-container flex w-full flex-col", children: [
41
- /* @__PURE__ */ r("span", { className: "flex flex-wrap gap-y-[9px] gap-x-6", children: c.properties?.buttonTexts?.map((u, l) => {
42
- const N = c.properties?.buttonValues?.[l], d = N !== void 0 ? N : u;
42
+ /* @__PURE__ */ r("span", { className: "flex flex-wrap gap-y-[9px] gap-x-6", children: c.properties?.buttonTexts?.map((u, n) => {
43
+ const N = c.properties?.buttonValues?.[n], d = N !== void 0 ? N : u;
43
44
  return /* @__PURE__ */ r(
44
- U,
45
+ q,
45
46
  {
46
47
  label: u,
47
48
  disabled: i,
48
49
  checked: e.includes(d),
49
- onCheckedChange: (k) => n(d, k),
50
+ onCheckedChange: (k) => l(d, k),
50
51
  className: "text-sm"
51
52
  },
52
- l
53
+ n
53
54
  );
54
55
  }) }),
55
56
  b ? /* @__PURE__ */ r("span", { className: "block mb-1 w-full max-w-[500px]", children: /* @__PURE__ */ w("span", { className: "multi-select-input-row flex w-full items-end gap-3", children: [
56
- /* @__PURE__ */ r(q, { "data-disabled": i, className: "flex-1", children: /* @__PURE__ */ r(
57
- A,
57
+ /* @__PURE__ */ r(A, { "data-disabled": i, className: "flex-1", children: /* @__PURE__ */ r(
58
+ H,
58
59
  {
59
60
  disabled: i,
60
61
  placeholder: b,
@@ -68,32 +69,32 @@ const P = ({
68
69
  x("shrink-0")
69
70
  ] }) }) : x("self-start multi-select-confirm-wrapper--stacked")
70
71
  ] });
71
- }, Q = ({
72
+ }, W = ({
72
73
  dir: c,
73
74
  lang: i,
74
75
  node: e,
75
76
  readonly: s,
76
77
  locale: o,
77
- resolvedDefaultButtonText: n,
78
+ resolvedDefaultButtonText: l,
78
79
  handleButtonClick: m,
79
80
  inputValue: f,
80
81
  handleInputChange: h,
81
82
  handleSendClick: b
82
83
  }) => /* @__PURE__ */ w("span", { className: "single-select-container inline-flex w-full flex-col", children: [
83
84
  /* @__PURE__ */ r("span", { className: "flex flex-wrap gap-y-[9px] gap-x-2", children: e.properties?.buttonTexts?.map((p, x) => {
84
- const u = e.properties?.buttonValues?.[x], l = u !== void 0 ? u : p;
85
+ const u = e.properties?.buttonValues?.[x], n = u !== void 0 ? u : p;
85
86
  return /* @__PURE__ */ r(
86
- J,
87
+ U,
87
88
  {
88
89
  disabled: s,
89
90
  variant: "outline",
90
91
  type: "button",
91
92
  size: "sm",
92
- onClick: () => m(l),
93
+ onClick: () => m(n),
93
94
  className: j(
94
95
  "max-w-full shrink whitespace-normal break-words text-start leading-5 h-auto min-h-8 px-3 py-1.5",
95
96
  "hover:bg-gray-200",
96
- n === p && "select"
97
+ l === p && "select"
97
98
  ),
98
99
  children: p
99
100
  },
@@ -114,13 +115,13 @@ const P = ({
114
115
  title: e.properties.placeholder
115
116
  }
116
117
  ) })
117
- ] }), W = ({
118
+ ] }), X = ({
118
119
  dir: c,
119
120
  lang: i,
120
121
  readonly: e,
121
122
  locale: s,
122
123
  placeholder: o,
123
- value: n,
124
+ value: l,
124
125
  onChange: m,
125
126
  onSend: f
126
127
  }) => o ? /* @__PURE__ */ r(
@@ -131,25 +132,25 @@ const P = ({
131
132
  disabled: e,
132
133
  locale: s,
133
134
  placeholder: o,
134
- value: n,
135
+ value: l,
135
136
  onChange: m,
136
137
  onSend: f,
137
138
  title: o
138
139
  }
139
- ) : null, ne = ({
140
+ ) : null, ie = ({
140
141
  dir: c,
141
142
  lang: i,
142
143
  node: e,
143
144
  readonly: s,
144
145
  locale: o,
145
- defaultButtonText: n,
146
+ defaultButtonText: l,
146
147
  defaultInputText: m,
147
148
  defaultSelectedValues: f,
148
149
  onSend: h,
149
150
  confirmButtonText: b,
150
151
  beforeSend: p = () => !0
151
152
  }) => {
152
- const x = H(o), u = b || x.confirmButtonText, [l, N] = v.useState(m || ""), [d, k] = v.useState(
153
+ const x = P(o), u = b || x.confirmButtonText, [n, N] = v.useState(m || ""), [d, k] = v.useState(
153
154
  f || []
154
155
  ), B = JSON.stringify({
155
156
  buttonTexts: e.properties?.buttonTexts,
@@ -157,91 +158,91 @@ const P = ({
157
158
  isMultiSelect: e.properties?.isMultiSelect,
158
159
  placeholder: e.properties?.placeholder,
159
160
  variableName: e.properties?.variableName
160
- }), g = e.properties?.isMultiSelect ?? !1, F = e.properties?.buttonTexts || [], M = !g && F.length === 0 && !e.properties?.placeholder, S = e.properties?.variableName?.trim() || n || u, T = v.useMemo(() => M ? {
161
+ }), g = e.properties?.isMultiSelect ?? !1, z = e.properties?.buttonTexts || [], M = !g && z.length === 0 && !e.properties?.placeholder, S = J.normalizeVariableName(e.properties?.variableName || "") || l || u, T = v.useMemo(() => M ? {
161
162
  ...e,
162
163
  properties: {
163
164
  ...e.properties || {},
164
165
  buttonTexts: [S],
165
166
  buttonValues: [S]
166
167
  }
167
- } : e, [S, e, M]), C = T.properties?.buttonTexts || [], I = T.properties?.buttonValues || [], D = !g && C.length > 0, G = (t) => {
168
+ } : e, [S, e, M]), C = T.properties?.buttonTexts || [], I = T.properties?.buttonValues || [], D = !g && C.length > 0, F = (t) => {
168
169
  const a = {
169
170
  variableName: e.properties?.variableName || "",
170
171
  buttonText: t
171
172
  };
172
173
  p?.(a) && h?.(a);
173
- }, L = (t, a) => {
174
- k((K) => a ? [...K, t] : K.filter((z) => z !== t));
174
+ }, G = (t, a) => {
175
+ k((K) => a ? [...K, t] : K.filter((_) => _ !== t));
175
176
  }, E = () => {
176
- const t = d.length === 0 && !l?.trim(), a = {
177
+ const t = d.length === 0 && !n?.trim(), a = {
177
178
  variableName: e.properties?.variableName || "",
178
179
  selectedValues: d,
179
- inputText: l?.trim() || void 0
180
+ inputText: n?.trim() || void 0
180
181
  };
181
182
  s || t || p?.(a) && h?.(a);
182
183
  }, V = (t) => {
183
184
  N(t.target.value);
184
- }, R = (t) => {
185
- t.nativeEvent.isComposing || t.keyCode === 229 || t.key === "Enter" && !t.shiftKey && (t.preventDefault(), g ? d.length === 0 && !l.trim() || E() : y());
185
+ }, L = (t) => {
186
+ t.nativeEvent.isComposing || t.keyCode === 229 || t.key === "Enter" && !t.shiftKey && (t.preventDefault(), g ? d.length === 0 && !n.trim() || E() : y());
186
187
  }, y = () => {
187
188
  const t = {
188
189
  variableName: e.properties?.variableName || "",
189
- inputText: l
190
+ inputText: n
190
191
  };
191
192
  p?.(t) && h?.(t);
192
- }, _ = v.useMemo(() => {
193
- if (!n)
193
+ }, R = v.useMemo(() => {
194
+ if (!l)
194
195
  return;
195
- const t = I.indexOf(n);
196
+ const t = I.indexOf(l);
196
197
  if (t > -1)
197
- return C[t] ?? n;
198
- const a = C.indexOf(n);
198
+ return C[t] ?? l;
199
+ const a = C.indexOf(l);
199
200
  if (a > -1)
200
201
  return C[a];
201
- }, [n, C, I]);
202
+ }, [l, C, I]);
202
203
  return v.useEffect(() => {
203
204
  N(m || "");
204
205
  }, [m, B]), v.useEffect(() => {
205
206
  k(f || []);
206
207
  }, [f, B]), /* @__PURE__ */ w("span", { className: "custom-variable-container inline-flex items-center flex-wrap", children: [
207
208
  g && /* @__PURE__ */ r(
208
- P,
209
+ Q,
209
210
  {
210
211
  node: e,
211
212
  readonly: s,
212
213
  selectedValues: d,
213
- inputValue: l,
214
+ inputValue: n,
214
215
  confirmButtonText: u,
215
- handleCheckboxChange: L,
216
+ handleCheckboxChange: G,
216
217
  handleInputChange: V,
217
- handleKeyDown: R,
218
+ handleKeyDown: L,
218
219
  handleConfirmClick: E
219
220
  }
220
221
  ),
221
222
  !g && D && /* @__PURE__ */ r(
222
- Q,
223
+ W,
223
224
  {
224
225
  dir: c,
225
226
  lang: i,
226
227
  node: T,
227
228
  readonly: s,
228
229
  locale: o,
229
- resolvedDefaultButtonText: _,
230
- handleButtonClick: G,
231
- inputValue: l,
230
+ resolvedDefaultButtonText: R,
231
+ handleButtonClick: F,
232
+ inputValue: n,
232
233
  handleInputChange: V,
233
234
  handleSendClick: y
234
235
  }
235
236
  ),
236
237
  !g && !D && e.properties?.placeholder && /* @__PURE__ */ r(
237
- W,
238
+ X,
238
239
  {
239
240
  dir: c,
240
241
  lang: i,
241
242
  readonly: s,
242
243
  locale: o,
243
244
  placeholder: e.properties.placeholder,
244
- value: l,
245
+ value: n,
245
246
  onChange: V,
246
247
  onSend: y
247
248
  }
@@ -249,6 +250,6 @@ const P = ({
249
250
  ] });
250
251
  };
251
252
  export {
252
- ne as default
253
+ ie as default
253
254
  };
254
255
  //# sourceMappingURL=CustomVariable.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CustomVariable.es.js","sources":["../../../../src/components/ContentRender/plugins/CustomVariable.tsx"],"sourcesContent":["import React from \"react\";\nimport type { Components } from \"react-markdown\";\nimport { OnSendContentParams } from \"../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Checkbox } from \"../../ui/checkbox\";\nimport MarkdownFlowInput from \"../MarkdownFlowInput\";\nimport {\n InputGroup,\n InputGroupTextarea,\n} from \"../../ui/inputGroup/input-group\";\nimport type { MarkdownFlowLocale } from \"../../../lib/locale\";\nimport { cn } from \"../../../lib/utils\";\nimport { getContentRenderLocaleTexts } from \"../contentRenderI18n\";\n\n// Define custom variable node type\ninterface CustomVariableNode {\n tagName: \"custom-variable\";\n properties?: {\n variableName?: string;\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n isMultiSelect?: boolean;\n };\n}\n\n// Define custom variable component Props type\ninterface CustomVariableProps {\n /** Explicit direction for nested input controls. */\n dir?: React.HTMLAttributes<HTMLDivElement>[\"dir\"];\n /** Explicit language for nested input controls. */\n lang?: string;\n node: CustomVariableNode;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n locale?: MarkdownFlowLocale;\n readonly?: boolean;\n onSend?: (content: OnSendContentParams) => void;\n // Multi-select confirm button text (i18n support)\n confirmButtonText?: string;\n beforeSend?: (param: OnSendContentParams) => boolean;\n}\n\ninterface ComponentsWithCustomVariable extends Components {\n \"custom-variable\"?: React.ComponentType<CustomVariableProps>;\n}\n\n// Multi select section( with checkboxes and input)\ninterface MultiSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n selectedValues: string[];\n inputValue: string;\n confirmButtonText: string;\n handleCheckboxChange: (value: string, checked: boolean) => void;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n handleConfirmClick: () => void;\n}\n\nconst MultiSelectSection = ({\n node,\n readonly,\n selectedValues,\n inputValue,\n confirmButtonText,\n handleCheckboxChange,\n handleInputChange,\n handleKeyDown,\n handleConfirmClick,\n}: MultiSelectSectionProps) => {\n const placeholder = node.properties?.placeholder;\n const confirmDisabled =\n readonly || (selectedValues.length === 0 && !inputValue?.trim());\n\n const renderConfirmButton = (extraWrapperClassName?: string) => (\n <span\n className={cn(\n \"multi-select-confirm-wrapper flex flex-col items-center\",\n confirmDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n extraWrapperClassName\n )}\n >\n <button\n type=\"button\"\n className=\"multi-select-confirm-button text-sm font-medium text-primary\"\n disabled={confirmDisabled}\n onClick={handleConfirmClick}\n >\n {confirmButtonText}\n </button>\n </span>\n );\n\n return (\n <span className=\"multi-select-container flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-6\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Checkbox\n key={index}\n label={text}\n disabled={readonly}\n checked={selectedValues.includes(buttonValue)}\n onCheckedChange={(checked) =>\n handleCheckboxChange(buttonValue, checked)\n }\n className=\"text-sm\"\n />\n );\n })}\n </span>\n {placeholder ? (\n <span className=\"block mb-1 w-full max-w-[500px]\">\n <span className=\"multi-select-input-row flex w-full items-end gap-3\">\n <InputGroup data-disabled={readonly} className=\"flex-1\">\n <InputGroupTextarea\n disabled={readonly}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className=\"text-sm px-3\"\n title={placeholder}\n />\n </InputGroup>\n {renderConfirmButton(\"shrink-0\")}\n </span>\n </span>\n ) : (\n renderConfirmButton(\"self-start multi-select-confirm-wrapper--stacked\")\n )}\n </span>\n );\n};\n\n// Single select section( with buttons and input)\ninterface SingleSelectSectionProps {\n dir?: CustomVariableProps[\"dir\"];\n lang?: string;\n node: CustomVariableNode;\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n resolvedDefaultButtonText?: string;\n handleButtonClick: (value: string) => void;\n inputValue: string;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSendClick: () => void;\n}\n\nconst SingleSelectSection = ({\n dir,\n lang,\n node,\n readonly,\n locale,\n resolvedDefaultButtonText,\n handleButtonClick,\n inputValue,\n handleInputChange,\n handleSendClick,\n}: SingleSelectSectionProps) => (\n <span className=\"single-select-container inline-flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-2\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Button\n key={index}\n disabled={readonly}\n variant=\"outline\"\n type=\"button\"\n size=\"sm\"\n onClick={() => handleButtonClick(buttonValue)}\n className={cn(\n \"max-w-full shrink whitespace-normal break-words text-start leading-5 h-auto min-h-8 px-3 py-1.5\",\n \"hover:bg-gray-200\",\n resolvedDefaultButtonText === text && \"select\"\n )}\n >\n {text}\n </Button>\n );\n })}\n </span>\n {node.properties?.placeholder && (\n <span className=\"mt-[9px] mb-1\">\n <MarkdownFlowInput\n dir={dir}\n lang={lang}\n disabled={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n title={node.properties.placeholder}\n />\n </span>\n )}\n </span>\n);\n\n// Pure input\ninterface InputSectionProps {\n dir?: CustomVariableProps[\"dir\"];\n lang?: string;\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n placeholder?: string;\n value: string;\n onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSend: () => void;\n}\n\nconst InputSection = ({\n dir,\n lang,\n readonly,\n locale,\n placeholder,\n value,\n onChange,\n onSend,\n}: InputSectionProps) => {\n if (!placeholder) {\n return null;\n }\n\n return (\n <MarkdownFlowInput\n dir={dir}\n lang={lang}\n disabled={readonly}\n locale={locale}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onSend={onSend}\n title={placeholder}\n />\n );\n};\n\n// Define custom variable component\nconst CustomButtonInputVariable = ({\n dir,\n lang,\n node,\n readonly,\n locale,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n onSend,\n confirmButtonText,\n beforeSend = () => true,\n}: CustomVariableProps) => {\n const localeTexts = getContentRenderLocaleTexts(locale);\n const resolvedConfirmButtonText =\n confirmButtonText || localeTexts.confirmButtonText;\n const [inputValue, setInputValue] = React.useState(defaultInputText || \"\");\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n defaultSelectedValues || []\n );\n const interactionDefinitionKey = JSON.stringify({\n buttonTexts: node.properties?.buttonTexts,\n buttonValues: node.properties?.buttonValues,\n isMultiSelect: node.properties?.isMultiSelect,\n placeholder: node.properties?.placeholder,\n variableName: node.properties?.variableName,\n });\n const isMultiSelect = node.properties?.isMultiSelect ?? false;\n const baseButtonTexts = node.properties?.buttonTexts || [];\n const shouldUseFallbackButton =\n !isMultiSelect &&\n baseButtonTexts.length === 0 &&\n !node.properties?.placeholder;\n const fallbackButtonLabel =\n node.properties?.variableName?.trim() ||\n defaultButtonText ||\n resolvedConfirmButtonText;\n\n const singleSelectNode = React.useMemo<CustomVariableNode>(() => {\n if (!shouldUseFallbackButton) {\n return node;\n }\n return {\n ...node,\n properties: {\n ...(node.properties || {}),\n buttonTexts: [fallbackButtonLabel],\n buttonValues: [fallbackButtonLabel],\n },\n };\n }, [fallbackButtonLabel, node, shouldUseFallbackButton]);\n\n const singleSelectButtonTexts =\n singleSelectNode.properties?.buttonTexts || [];\n const singleSelectButtonValues =\n singleSelectNode.properties?.buttonValues || [];\n const isSingleSelect = !isMultiSelect && singleSelectButtonTexts.length > 0;\n\n const handleButtonClick = (value: string) => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n buttonText: value,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleCheckboxChange = (value: string, checked: boolean) => {\n setSelectedValues((prev) => {\n if (checked) {\n return [...prev, value];\n } else {\n return prev.filter((v) => v !== value);\n }\n });\n };\n\n const handleConfirmClick = () => {\n const noSelection = selectedValues.length === 0 && !inputValue?.trim();\n const param = {\n variableName: node.properties?.variableName || \"\",\n selectedValues,\n inputText: inputValue?.trim() || undefined,\n };\n if (readonly || noSelection) return;\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.nativeEvent.isComposing || e.keyCode === 229) {\n return;\n }\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isMultiSelect) {\n const noSelection = selectedValues.length === 0 && !inputValue.trim();\n if (!noSelection) handleConfirmClick();\n } else {\n handleSendClick();\n }\n }\n };\n const handleSendClick = () => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n inputText: inputValue,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const resolvedDefaultButtonText = React.useMemo(() => {\n if (!defaultButtonText) {\n return undefined;\n }\n const valueIndex = singleSelectButtonValues.indexOf(defaultButtonText);\n if (valueIndex > -1) {\n return singleSelectButtonTexts[valueIndex] ?? defaultButtonText;\n }\n const textIndex = singleSelectButtonTexts.indexOf(defaultButtonText);\n if (textIndex > -1) {\n return singleSelectButtonTexts[textIndex];\n }\n return undefined;\n }, [defaultButtonText, singleSelectButtonTexts, singleSelectButtonValues]);\n\n React.useEffect(() => {\n setInputValue(defaultInputText || \"\");\n }, [defaultInputText, interactionDefinitionKey]);\n\n React.useEffect(() => {\n setSelectedValues(defaultSelectedValues || []);\n }, [defaultSelectedValues, interactionDefinitionKey]);\n\n return (\n <span className=\"custom-variable-container inline-flex items-center flex-wrap\">\n {isMultiSelect && (\n <MultiSelectSection\n node={node}\n readonly={readonly}\n selectedValues={selectedValues}\n inputValue={inputValue}\n confirmButtonText={resolvedConfirmButtonText}\n handleCheckboxChange={handleCheckboxChange}\n handleInputChange={handleInputChange}\n handleKeyDown={handleKeyDown}\n handleConfirmClick={handleConfirmClick}\n />\n )}\n\n {!isMultiSelect && isSingleSelect && (\n <SingleSelectSection\n dir={dir}\n lang={lang}\n node={singleSelectNode}\n readonly={readonly}\n locale={locale}\n resolvedDefaultButtonText={resolvedDefaultButtonText}\n handleButtonClick={handleButtonClick}\n inputValue={inputValue}\n handleInputChange={handleInputChange}\n handleSendClick={handleSendClick}\n />\n )}\n\n {!isMultiSelect && !isSingleSelect && node.properties?.placeholder && (\n <InputSection\n dir={dir}\n lang={lang}\n readonly={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n />\n )}\n </span>\n );\n};\n\nexport default CustomButtonInputVariable;\nexport type {\n ComponentsWithCustomVariable,\n CustomVariableNode,\n CustomVariableProps,\n};\n"],"names":["MultiSelectSection","node","readonly","selectedValues","inputValue","confirmButtonText","handleCheckboxChange","handleInputChange","handleKeyDown","handleConfirmClick","placeholder","confirmDisabled","renderConfirmButton","extraWrapperClassName","jsx","cn","jsxs","text","index","value","buttonValue","Checkbox","checked","InputGroup","InputGroupTextarea","SingleSelectSection","dir","lang","locale","resolvedDefaultButtonText","handleButtonClick","handleSendClick","Button","MarkdownFlowInput","InputSection","onChange","onSend","CustomButtonInputVariable","defaultButtonText","defaultInputText","defaultSelectedValues","beforeSend","localeTexts","getContentRenderLocaleTexts","resolvedConfirmButtonText","setInputValue","React","setSelectedValues","interactionDefinitionKey","isMultiSelect","baseButtonTexts","shouldUseFallbackButton","fallbackButtonLabel","singleSelectNode","singleSelectButtonTexts","singleSelectButtonValues","isSingleSelect","param","prev","v","noSelection","e","valueIndex","textIndex"],"mappings":"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"}
1
+ {"version":3,"file":"CustomVariable.es.js","sources":["../../../../src/components/ContentRender/plugins/CustomVariable.tsx"],"sourcesContent":["import React from \"react\";\nimport { normalizeVariableName } from \"remark-flow\";\nimport type { Components } from \"react-markdown\";\nimport { OnSendContentParams } from \"../../types\";\nimport { Button } from \"../../ui/button\";\nimport { Checkbox } from \"../../ui/checkbox\";\nimport MarkdownFlowInput from \"../MarkdownFlowInput\";\nimport {\n InputGroup,\n InputGroupTextarea,\n} from \"../../ui/inputGroup/input-group\";\nimport type { MarkdownFlowLocale } from \"../../../lib/locale\";\nimport { cn } from \"../../../lib/utils\";\nimport { getContentRenderLocaleTexts } from \"../contentRenderI18n\";\n\n// Define custom variable node type\ninterface CustomVariableNode {\n tagName: \"custom-variable\";\n properties?: {\n variableName?: string;\n buttonTexts?: string[];\n buttonValues?: string[];\n placeholder?: string;\n isMultiSelect?: boolean;\n };\n}\n\n// Define custom variable component Props type\ninterface CustomVariableProps {\n /** Explicit direction for nested input controls. */\n dir?: React.HTMLAttributes<HTMLDivElement>[\"dir\"];\n /** Explicit language for nested input controls. */\n lang?: string;\n node: CustomVariableNode;\n defaultButtonText?: string;\n defaultInputText?: string;\n defaultSelectedValues?: string[];\n locale?: MarkdownFlowLocale;\n readonly?: boolean;\n onSend?: (content: OnSendContentParams) => void;\n // Multi-select confirm button text (i18n support)\n confirmButtonText?: string;\n beforeSend?: (param: OnSendContentParams) => boolean;\n}\n\ninterface ComponentsWithCustomVariable extends Components {\n \"custom-variable\"?: React.ComponentType<CustomVariableProps>;\n}\n\n// Multi select section( with checkboxes and input)\ninterface MultiSelectSectionProps {\n node: CustomVariableNode;\n readonly?: boolean;\n selectedValues: string[];\n inputValue: string;\n confirmButtonText: string;\n handleCheckboxChange: (value: string, checked: boolean) => void;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleKeyDown: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n handleConfirmClick: () => void;\n}\n\nconst MultiSelectSection = ({\n node,\n readonly,\n selectedValues,\n inputValue,\n confirmButtonText,\n handleCheckboxChange,\n handleInputChange,\n handleKeyDown,\n handleConfirmClick,\n}: MultiSelectSectionProps) => {\n const placeholder = node.properties?.placeholder;\n const confirmDisabled =\n readonly || (selectedValues.length === 0 && !inputValue?.trim());\n\n const renderConfirmButton = (extraWrapperClassName?: string) => (\n <span\n className={cn(\n \"multi-select-confirm-wrapper flex flex-col items-center\",\n confirmDisabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n extraWrapperClassName\n )}\n >\n <button\n type=\"button\"\n className=\"multi-select-confirm-button text-sm font-medium text-primary\"\n disabled={confirmDisabled}\n onClick={handleConfirmClick}\n >\n {confirmButtonText}\n </button>\n </span>\n );\n\n return (\n <span className=\"multi-select-container flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-6\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Checkbox\n key={index}\n label={text}\n disabled={readonly}\n checked={selectedValues.includes(buttonValue)}\n onCheckedChange={(checked) =>\n handleCheckboxChange(buttonValue, checked)\n }\n className=\"text-sm\"\n />\n );\n })}\n </span>\n {placeholder ? (\n <span className=\"block mb-1 w-full max-w-[500px]\">\n <span className=\"multi-select-input-row flex w-full items-end gap-3\">\n <InputGroup data-disabled={readonly} className=\"flex-1\">\n <InputGroupTextarea\n disabled={readonly}\n placeholder={placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n className=\"text-sm px-3\"\n title={placeholder}\n />\n </InputGroup>\n {renderConfirmButton(\"shrink-0\")}\n </span>\n </span>\n ) : (\n renderConfirmButton(\"self-start multi-select-confirm-wrapper--stacked\")\n )}\n </span>\n );\n};\n\n// Single select section( with buttons and input)\ninterface SingleSelectSectionProps {\n dir?: CustomVariableProps[\"dir\"];\n lang?: string;\n node: CustomVariableNode;\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n resolvedDefaultButtonText?: string;\n handleButtonClick: (value: string) => void;\n inputValue: string;\n handleInputChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n handleSendClick: () => void;\n}\n\nconst SingleSelectSection = ({\n dir,\n lang,\n node,\n readonly,\n locale,\n resolvedDefaultButtonText,\n handleButtonClick,\n inputValue,\n handleInputChange,\n handleSendClick,\n}: SingleSelectSectionProps) => (\n <span className=\"single-select-container inline-flex w-full flex-col\">\n <span className=\"flex flex-wrap gap-y-[9px] gap-x-2\">\n {node.properties?.buttonTexts?.map((text, index) => {\n const value = node.properties?.buttonValues?.[index];\n const buttonValue = value !== undefined ? value : text;\n return (\n <Button\n key={index}\n disabled={readonly}\n variant=\"outline\"\n type=\"button\"\n size=\"sm\"\n onClick={() => handleButtonClick(buttonValue)}\n className={cn(\n \"max-w-full shrink whitespace-normal break-words text-start leading-5 h-auto min-h-8 px-3 py-1.5\",\n \"hover:bg-gray-200\",\n resolvedDefaultButtonText === text && \"select\"\n )}\n >\n {text}\n </Button>\n );\n })}\n </span>\n {node.properties?.placeholder && (\n <span className=\"mt-[9px] mb-1\">\n <MarkdownFlowInput\n dir={dir}\n lang={lang}\n disabled={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n title={node.properties.placeholder}\n />\n </span>\n )}\n </span>\n);\n\n// Pure input\ninterface InputSectionProps {\n dir?: CustomVariableProps[\"dir\"];\n lang?: string;\n readonly?: boolean;\n locale?: MarkdownFlowLocale;\n placeholder?: string;\n value: string;\n onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;\n onSend: () => void;\n}\n\nconst InputSection = ({\n dir,\n lang,\n readonly,\n locale,\n placeholder,\n value,\n onChange,\n onSend,\n}: InputSectionProps) => {\n if (!placeholder) {\n return null;\n }\n\n return (\n <MarkdownFlowInput\n dir={dir}\n lang={lang}\n disabled={readonly}\n locale={locale}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n onSend={onSend}\n title={placeholder}\n />\n );\n};\n\n// Define custom variable component\nconst CustomButtonInputVariable = ({\n dir,\n lang,\n node,\n readonly,\n locale,\n defaultButtonText,\n defaultInputText,\n defaultSelectedValues,\n onSend,\n confirmButtonText,\n beforeSend = () => true,\n}: CustomVariableProps) => {\n const localeTexts = getContentRenderLocaleTexts(locale);\n const resolvedConfirmButtonText =\n confirmButtonText || localeTexts.confirmButtonText;\n const [inputValue, setInputValue] = React.useState(defaultInputText || \"\");\n const [selectedValues, setSelectedValues] = React.useState<string[]>(\n defaultSelectedValues || []\n );\n const interactionDefinitionKey = JSON.stringify({\n buttonTexts: node.properties?.buttonTexts,\n buttonValues: node.properties?.buttonValues,\n isMultiSelect: node.properties?.isMultiSelect,\n placeholder: node.properties?.placeholder,\n variableName: node.properties?.variableName,\n });\n const isMultiSelect = node.properties?.isMultiSelect ?? false;\n const baseButtonTexts = node.properties?.buttonTexts || [];\n const shouldUseFallbackButton =\n !isMultiSelect &&\n baseButtonTexts.length === 0 &&\n !node.properties?.placeholder;\n const fallbackButtonLabel =\n normalizeVariableName(node.properties?.variableName || \"\") ||\n defaultButtonText ||\n resolvedConfirmButtonText;\n\n const singleSelectNode = React.useMemo<CustomVariableNode>(() => {\n if (!shouldUseFallbackButton) {\n return node;\n }\n return {\n ...node,\n properties: {\n ...(node.properties || {}),\n buttonTexts: [fallbackButtonLabel],\n buttonValues: [fallbackButtonLabel],\n },\n };\n }, [fallbackButtonLabel, node, shouldUseFallbackButton]);\n\n const singleSelectButtonTexts =\n singleSelectNode.properties?.buttonTexts || [];\n const singleSelectButtonValues =\n singleSelectNode.properties?.buttonValues || [];\n const isSingleSelect = !isMultiSelect && singleSelectButtonTexts.length > 0;\n\n const handleButtonClick = (value: string) => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n buttonText: value,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleCheckboxChange = (value: string, checked: boolean) => {\n setSelectedValues((prev) => {\n if (checked) {\n return [...prev, value];\n } else {\n return prev.filter((v) => v !== value);\n }\n });\n };\n\n const handleConfirmClick = () => {\n const noSelection = selectedValues.length === 0 && !inputValue?.trim();\n const param = {\n variableName: node.properties?.variableName || \"\",\n selectedValues,\n inputText: inputValue?.trim() || undefined,\n };\n if (readonly || noSelection) return;\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n setInputValue(e.target.value);\n };\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.nativeEvent.isComposing || e.keyCode === 229) {\n return;\n }\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n if (isMultiSelect) {\n const noSelection = selectedValues.length === 0 && !inputValue.trim();\n if (!noSelection) handleConfirmClick();\n } else {\n handleSendClick();\n }\n }\n };\n const handleSendClick = () => {\n const param = {\n variableName: node.properties?.variableName || \"\",\n inputText: inputValue,\n };\n if (!beforeSend?.(param)) return;\n onSend?.(param);\n };\n\n const resolvedDefaultButtonText = React.useMemo(() => {\n if (!defaultButtonText) {\n return undefined;\n }\n const valueIndex = singleSelectButtonValues.indexOf(defaultButtonText);\n if (valueIndex > -1) {\n return singleSelectButtonTexts[valueIndex] ?? defaultButtonText;\n }\n const textIndex = singleSelectButtonTexts.indexOf(defaultButtonText);\n if (textIndex > -1) {\n return singleSelectButtonTexts[textIndex];\n }\n return undefined;\n }, [defaultButtonText, singleSelectButtonTexts, singleSelectButtonValues]);\n\n React.useEffect(() => {\n setInputValue(defaultInputText || \"\");\n }, [defaultInputText, interactionDefinitionKey]);\n\n React.useEffect(() => {\n setSelectedValues(defaultSelectedValues || []);\n }, [defaultSelectedValues, interactionDefinitionKey]);\n\n return (\n <span className=\"custom-variable-container inline-flex items-center flex-wrap\">\n {isMultiSelect && (\n <MultiSelectSection\n node={node}\n readonly={readonly}\n selectedValues={selectedValues}\n inputValue={inputValue}\n confirmButtonText={resolvedConfirmButtonText}\n handleCheckboxChange={handleCheckboxChange}\n handleInputChange={handleInputChange}\n handleKeyDown={handleKeyDown}\n handleConfirmClick={handleConfirmClick}\n />\n )}\n\n {!isMultiSelect && isSingleSelect && (\n <SingleSelectSection\n dir={dir}\n lang={lang}\n node={singleSelectNode}\n readonly={readonly}\n locale={locale}\n resolvedDefaultButtonText={resolvedDefaultButtonText}\n handleButtonClick={handleButtonClick}\n inputValue={inputValue}\n handleInputChange={handleInputChange}\n handleSendClick={handleSendClick}\n />\n )}\n\n {!isMultiSelect && !isSingleSelect && node.properties?.placeholder && (\n <InputSection\n dir={dir}\n lang={lang}\n readonly={readonly}\n locale={locale}\n placeholder={node.properties.placeholder}\n value={inputValue}\n onChange={handleInputChange}\n onSend={handleSendClick}\n />\n )}\n </span>\n );\n};\n\nexport default CustomButtonInputVariable;\nexport type {\n ComponentsWithCustomVariable,\n CustomVariableNode,\n CustomVariableProps,\n};\n"],"names":["MultiSelectSection","node","readonly","selectedValues","inputValue","confirmButtonText","handleCheckboxChange","handleInputChange","handleKeyDown","handleConfirmClick","placeholder","confirmDisabled","renderConfirmButton","extraWrapperClassName","jsx","cn","jsxs","text","index","value","buttonValue","Checkbox","checked","InputGroup","InputGroupTextarea","SingleSelectSection","dir","lang","locale","resolvedDefaultButtonText","handleButtonClick","handleSendClick","Button","MarkdownFlowInput","InputSection","onChange","onSend","CustomButtonInputVariable","defaultButtonText","defaultInputText","defaultSelectedValues","beforeSend","localeTexts","getContentRenderLocaleTexts","resolvedConfirmButtonText","setInputValue","React","setSelectedValues","interactionDefinitionKey","isMultiSelect","baseButtonTexts","shouldUseFallbackButton","fallbackButtonLabel","normalizeVariableName","singleSelectNode","singleSelectButtonTexts","singleSelectButtonValues","isSingleSelect","param","prev","v","noSelection","e","valueIndex","textIndex"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const H=require("./markdown-plugins.cjs"),L=require("./resumed-prose-fence.cjs"),C=require("./html-block-end.cjs"),D=require("../../../node_modules/unified/lib/index.cjs"),$=require("../../../node_modules/remark-parse/lib/index.cjs"),B=require("../../../node_modules/unist-util-visit/lib/index.cjs"),N=D.unified().use($.default).use(H.remarkPlugins),F=16,z=256*1024,X=Object.freeze([]),R=new Map;let S=0;const P=e=>{if(e&&typeof e=="object"){for(const o of Object.values(e))P(o);Object.freeze(e)}return e},I=(e,o)=>{let s=0,t="",r=!1,u=!1,c="destination",n=-1;for(let a=o+1;a<e.length;a+=1){const l=e[a],h=/[ \t\r\n]/.test(l);if(l===`
2
- `){if(n>=0)return{end:n,pending:!0};n=a}else/[ \t\r]/.test(l)||(n=-1);if(t)l==="\\"?a+=1:l===t&&(t="",c="close");else if(c==="destination")if(l==="\\")u=!0,a+=1;else if(r){if(l===">")r=!1,c="after-angle";else if(l==="<"||/[\r\n]/.test(l))return}else if(h){if(s)return;u&&(c="title")}else if(!u&&l==="<")r=!0,u=!0;else{if(l===")"&&s===0)return{end:a+1};l==="("?s+=1:l===")"&&(s-=1),u=!0}else if(h)c==="after-angle"&&(c="title");else{if(l===")")return{end:a+1};if(c==="title"&&(l==='"'||l==="'"||l==="("))t=l==="("?")":l;else return}}return{end:e.length,pending:!0}},T=(e,o,s)=>{let t=o;if(!s){for(;e[t]===" "||e[t]===" ";)t+=1;if(e[t]==="<"){for(t+=1;t<e.length&&e[t]!==">";){if(e[t]==="<"||/[\r\n]/.test(e[t]))return;t+=e[t]==="\\"?2:1}if(e[t]!==">")return;t+=1}else{const h=t;for(;t<e.length&&!/\s/.test(e[t]);){if(e[t]==="<"||e[t]===">")return;t+=e[t]==="\\"?2:1}if(t===h)return}}let r=0;const u=t;for(;t<e.length&&/\s/.test(e[t]);){if(e[t]===`
3
- `&&++r>1)return;t+=1}const c=e[t];if(t===u||c!=='"'&&c!=="'"&&c!=="(")return;const n=t,a=c==="("?")":c;let l=-1;for(t+=1;t<e.length;t+=1){const h=e[t];if(h===`
4
- `){if(l>=0)return{start:n,end:l,pending:!0};l=t}else/[ \t\r]/.test(h)||(l=-1);if(h==="\\")t+=1;else if(h===a)return}return{start:n,end:e.length,pending:!0}},G=(e,o)=>{let s=o-1;for(;s>=0&&e[s]===" "&&o-s<=3;)s-=1;return s<0||e[s]===`
5
- `},U=(e,o,s,t)=>{const r=[],u=[],c=[];let n=0,a=0,l=0,h=0,M=-1;const k=p=>{for(const g of c)g.image&&u.push({start:g.start+1,end:p,imageAltEnd:p,pending:!0})};for(;n<e.length;){for(;o[a]?.end<=n;)a+=1;const p=o[a];if(p&&p.start<=n){t.has(p.start)&&c[c.length-1]?.start===p.start-1&&c.pop(),n=p.end;continue}if(n>=l&&n<h){const d=L.findResumedProseFence(e,n);if(d){c.length=0,n=d.end;continue}}if(e[n]==="\\"){n+=2;continue}if(e[n]==="!"&&e[n+1]==="["&&(M=n+1),n>=l&&e[n]==="[")c.push({start:n,image:n===M});else if(n>=l&&e[n]==="]"){const d=c.pop();if(d!==void 0){if(d.image){let i;if(e[n+1]==="(")i=I(e,n+1);else if(n+1===e.length)i={end:e.length,pending:!0};else if(e[n+1]==="["){let f=n+2;for(;f<e.length&&e[f]!=="]"&&e[f]!=="["&&e[f]!==`
6
- `;)f+=e[f]==="\\"?2:1;(f===e.length||e[f]==="]")&&(i={end:e[f]==="]"?f+1:e.length,pending:!0})}if(i){u.push({start:d.start+1,imageAltEnd:n,...i}),n=i.end;continue}}if(!d.image&&e[n+1]==="("&&p?.start!==n+1){const i=I(e,n+1);if(i){u.push({start:n+1,...i}),n=i.end;continue}}if(e[n+1]===":"&&G(e,d.start)){const i=T(e,n+2,!1);if(i){u.push({...i,start:n+1}),n=i.end;continue}}}}else if(e[n]===`
7
- `){let d=n-1;for(;/[ \t\r]/.test(e[d]??"");)d-=1;e[d]===`
8
- `&&(k(d),c.length=0)}if(e[n]!=="<"){n+=1;continue}const g=C.readHtmlMarkup(e,n);if(e.startsWith("<!--",n)){const d=g.kind==="comment"?g.end:e.length;r.push(Object.freeze({start:n,end:d})),n=d}else if(g.kind==="tag"){if(!g.closing&&n>=l&&s.has(n)&&(l=C.findStreamingHtmlBlockEnd(e,n),h=s.get(n),c.length=0),n=g.end,!g.closing&&C.isHtmlRawTextTag(g.name)){const d=new RegExp(`</${g.name}(?=[\\s/>])`,"gi");d.lastIndex=n,n=d.exec(e)?.index??e.length}}else if(g.kind==="declaration")n=g.end;else{if(g.kind==="incomplete")break;n+=1}}return k(e.length),{comments:r,metadata:u}},W=e=>{e.sort((s,t)=>s.start-t.start);const o=[];for(const s of e){const t=o[o.length-1];t&&s.start<t.end?o[o.length-1]=Object.freeze({start:t.start,end:Math.max(t.end,s.end),...t.pending||s.pending?{pending:!0}:{},...t.imageAltEnd!==void 0||s.imageAltEnd!==void 0?{imageAltEnd:Math.max(t.imageAltEnd??0,s.imageAltEnd??0)}:{},...t.imageResolveEnd!==void 0||s.imageResolveEnd!==void 0?{imageResolveEnd:Math.max(t.imageResolveEnd??0,s.imageResolveEnd??0)}:{}}):o.push(Object.freeze(s))}return o},Y=(e,o,s)=>{let t=1;for(let r=o+2;r<s;r+=1)if(e[r]==="\\")r+=1;else if(e[r]==="[")t+=1;else if(e[r]==="]"&&--t===0)return r+1;return s},J=e=>{const o=N.parse(e),s=[],t=[],r=[],u=[],c=[],n=new Map,a=new Map,l=new Map;B.visit(o,(i,f,m)=>{const y=i.position?.start.offset,E=i.position?.end.offset;if(y===void 0||E===void 0)return;if(i.type==="definition"&&!a.has(i.identifier)&&a.set(i.identifier,E),i.type==="definition"||i.type==="link"||i.type==="linkReference"||i.type==="image"||i.type==="imageReference"){let b=y,x;if(i.type==="image"||i.type==="imageReference")b=y+2,x=Y(e,y,E)-1;else if(i.type!=="definition"&&e[y]==="["){const v=i.children[i.children.length-1]?.position?.end.offset??y+1;if(b=e.indexOf("]",v)+1,b<=v||b>E)return}if(b<E){const v=i.type==="definition"&&!i.title?T(e,E,!0):void 0,A={start:b,end:v?.end??E,...v?{pending:!0}:{},...x===void 0?{}:{imageAltEnd:x}};u.push(A),i.type==="imageReference"&&l.set(A,i.identifier)}return}const j=i.type==="inlineCode"||i.type==="code";if(!j&&i.type!=="inlineMath"&&i.type!=="math"&&i.type!=="html")return;const O=Object.freeze({start:y,end:E});if(i.type==="html"){c.push(O),m&&m.type!=="paragraph"&&m.type!=="heading"&&m.type!=="tableCell"&&m.type!=="link"&&m.type!=="linkReference"&&m.type!=="emphasis"&&m.type!=="strong"&&m.type!=="delete"&&n.set(y,E);return}r.push(O),j&&t.push(O),i.type==="inlineCode"&&s.push(O)});const h=u.map(i=>{const f=l.get(i);return f===void 0?i:{...i,imageResolveEnd:Math.max(i.end,a.get(f)??i.end)}}),M=[...r,...h].sort((i,f)=>i.start-f.start),k=U(e,M,n,new Set(h.filter(i=>i.imageAltEnd!==void 0).map(i=>i.start))),p=W([...h,...k.metadata]),g=k.comments;r.push(...p,...g),r.sort((i,f)=>i.start-f.start);const d=[];for(const i of o.children){const f=i.position?.start.offset,m=i.position?.end.offset;if(i.type!=="code"||f===void 0||m===void 0)continue;const y=e.lastIndexOf(`
9
- `,f-1)+1;/^[ \t]{0,3}$/.test(e.slice(y,f))&&/^(?:`{3,}|~{3,})/.test(e.slice(f))&&d.push(Object.freeze({start:y,end:m}))}return Object.freeze({tree:P(o),inline:Object.freeze(s),markdown:Object.freeze(t),literal:Object.freeze(r),metadata:Object.freeze(p),comments:Object.freeze(g),fences:Object.freeze(d),html:Object.freeze(c)})},q=e=>{const o=R.get(e);if(o)return R.delete(e),R.set(e,o),o;const s=J(e);if(e.length>z)return s;for(;R.size>=F||S+e.length>z;){const t=R.keys().next().value;if(t===void 0)break;S-=t.length,R.delete(t)}return R.set(e,s),S+=e.length,s},_=(e,o)=>{const s=q(e);return o?s.inline:s.markdown},K=e=>e.includes("`")?_(e,!0):X,Q=e=>_(e,!1);exports.getInlineCodeRanges=K;exports.getMarkdownCodeRanges=Q;exports.getMarkdownSourceAnalysis=q;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const B=require("../../../_virtual/index.cjs"),N=require("./markdown-plugins.cjs"),F=require("./resumed-prose-fence.cjs"),S=require("./html-block-end.cjs"),X=require("../../../node_modules/unified/lib/index.cjs"),G=require("../../../node_modules/remark-parse/lib/index.cjs"),U=require("../../../node_modules/unist-util-visit/lib/index.cjs"),W=X.unified().use(G.default).use(N.remarkPlugins),Y=16,_=256*1024,J=Object.freeze([]),v=new Map;let C=0;const D=e=>{if(e&&typeof e=="object"){for(const o of Object.values(e))D(o);Object.freeze(e)}return e},H=(e,o)=>{let s=0,t="",r=!1,g=!1,c="destination",n=-1;for(let a=o+1;a<e.length;a+=1){const l=e[a],p=/[ \t\r\n]/.test(l);if(l===`
2
+ `){if(n>=0)return{end:n,pending:!0};n=a}else/[ \t\r]/.test(l)||(n=-1);if(t)l==="\\"?a+=1:l===t&&(t="",c="close");else if(c==="destination")if(l==="\\")g=!0,a+=1;else if(r){if(l===">")r=!1,c="after-angle";else if(l==="<"||/[\r\n]/.test(l))return}else if(p){if(s)return;g&&(c="title")}else if(!g&&l==="<")r=!0,g=!0;else{if(l===")"&&s===0)return{end:a+1};l==="("?s+=1:l===")"&&(s-=1),g=!0}else if(p)c==="after-angle"&&(c="title");else{if(l===")")return{end:a+1};if(c==="title"&&(l==='"'||l==="'"||l==="("))t=l==="("?")":l;else return}}return{end:e.length,pending:!0}},L=(e,o,s)=>{let t=o;if(!s){for(;e[t]===" "||e[t]===" ";)t+=1;if(e[t]==="<"){for(t+=1;t<e.length&&e[t]!==">";){if(e[t]==="<"||/[\r\n]/.test(e[t]))return;t+=e[t]==="\\"?2:1}if(e[t]!==">")return;t+=1}else{const p=t;for(;t<e.length&&!/\s/.test(e[t]);){if(e[t]==="<"||e[t]===">")return;t+=e[t]==="\\"?2:1}if(t===p)return}}let r=0;const g=t;for(;t<e.length&&/\s/.test(e[t]);){if(e[t]===`
3
+ `&&++r>1)return;t+=1}const c=e[t];if(t===g||c!=='"'&&c!=="'"&&c!=="(")return;const n=t,a=c==="("?")":c;let l=-1;for(t+=1;t<e.length;t+=1){const p=e[t];if(p===`
4
+ `){if(l>=0)return{start:n,end:l,pending:!0};l=t}else/[ \t\r]/.test(p)||(l=-1);if(p==="\\")t+=1;else if(p===a)return}return{start:n,end:e.length,pending:!0}},K=(e,o)=>{let s=o-1;for(;s>=0&&e[s]===" "&&o-s<=3;)s-=1;return s<0||e[s]===`
5
+ `},Q=(e,o,s,t)=>{const r=[],g=[],c=[];let n=0,a=0,l=0,p=0,j=-1;const k=E=>{for(const u of c)u.image&&g.push({start:u.start+1,end:E,imageAltEnd:E,pending:!0})};for(;n<e.length;){for(;o[a]?.end<=n;)a+=1;const E=o[a];if(E&&E.start<=n){t.has(E.start)&&c[c.length-1]?.start===E.start-1&&c.pop(),n=E.end;continue}if(n>=l&&n<p){const f=F.findResumedProseFence(e,n);if(f){c.length=0,n=f.end;continue}}if(e[n]==="\\"){n+=2;continue}if(e[n]==="!"&&e[n+1]==="["&&(j=n+1),n>=l&&e[n]==="[")c.push({start:n,image:n===j});else if(n>=l&&e[n]==="]"){const f=c.pop();if(f!==void 0){if(f.image){let h;if(e[n+1]==="(")h=H(e,n+1);else if(n+1===e.length)h={end:e.length,pending:!0};else if(e[n+1]==="["){let m=n+2;for(;m<e.length&&e[m]!=="]"&&e[m]!=="["&&e[m]!==`
6
+ `;)m+=e[m]==="\\"?2:1;(m===e.length||e[m]==="]")&&(h={end:e[m]==="]"?m+1:e.length,pending:!0})}if(h){g.push({start:f.start+1,imageAltEnd:n,...h}),n=h.end;continue}}if(!f.image&&e[n+1]==="("&&E?.start!==n+1){const h=H(e,n+1);if(h){g.push({start:n+1,...h}),n=h.end;continue}}if(e[n+1]===":"&&K(e,f.start)){const h=L(e,n+2,!1);if(h){g.push({...h,start:n+1}),n=h.end;continue}}}}else if(e[n]===`
7
+ `){let f=n-1;for(;/[ \t\r]/.test(e[f]??"");)f-=1;e[f]===`
8
+ `&&(k(f),c.length=0)}if(e[n]!=="<"){n+=1;continue}const u=S.readHtmlMarkup(e,n);if(e.startsWith("<!--",n)){const f=u.kind==="comment"?u.end:e.length;r.push(Object.freeze({start:n,end:f})),n=f}else if(u.kind==="tag"){if(!u.closing&&n>=l&&s.has(n)&&(l=S.findStreamingHtmlBlockEnd(e,n),p=s.get(n),c.length=0),n=u.end,!u.closing&&S.isHtmlRawTextTag(u.name)){const f=new RegExp(`</${u.name}(?=[\\s/>])`,"gi");f.lastIndex=n,n=f.exec(e)?.index??e.length}}else if(u.kind==="declaration")n=u.end;else{if(u.kind==="incomplete")break;n+=1}}return k(e.length),{comments:r,metadata:g}},Z=e=>{e.sort((s,t)=>s.start-t.start);const o=[];for(const s of e){const t=o[o.length-1];t&&s.start<t.end?o[o.length-1]=Object.freeze({start:t.start,end:Math.max(t.end,s.end),...t.pending||s.pending?{pending:!0}:{},...t.imageAltEnd!==void 0||s.imageAltEnd!==void 0?{imageAltEnd:Math.max(t.imageAltEnd??0,s.imageAltEnd??0)}:{},...t.imageResolveEnd!==void 0||s.imageResolveEnd!==void 0?{imageResolveEnd:Math.max(t.imageResolveEnd??0,s.imageResolveEnd??0)}:{}}):o.push(Object.freeze(s))}return o},w=(e,o,s)=>{let t=1;for(let r=o+2;r<s;r+=1)if(e[r]==="\\")r+=1;else if(e[r]==="[")t+=1;else if(e[r]==="]"&&--t===0)return r+1;return s},ee=e=>{const o=W.parse(e),s=[],t=[],r=[],g=[],c=[],n=[],a=[],l=new Map,p=new Map,j=new Map;U.visit(o,(i,d,b)=>{const y=i.position?.start.offset,R=i.position?.end.offset;if(y===void 0||R===void 0)return;if(["flowInteraction","flowVariableMarker"].includes(i.type)){const O=Object.freeze({start:y,end:R});g.push(O),String(i.type)==="flowInteraction"&&c.push(O);return}if(i.type==="definition"&&!p.has(i.identifier)&&p.set(i.identifier,R),i.type==="definition"||i.type==="link"||i.type==="linkReference"||i.type==="image"||i.type==="imageReference"){let O=y,x;if(i.type==="image"||i.type==="imageReference")O=y+2,x=w(e,y,R)-1;else if(i.type!=="definition"&&e[y]==="["){const M=i.children[i.children.length-1]?.position?.end.offset??y+1;if(O=e.indexOf("]",M)+1,O<=M||O>R)return}if(O<R){const M=i.type==="definition"&&!i.title?L(e,R,!0):void 0,T={start:O,end:M?.end??R,...M?{pending:!0}:{},...x===void 0?{}:{imageAltEnd:x}};n.push(T),i.type==="imageReference"&&j.set(T,i.identifier)}return}const P=i.type==="inlineCode"||i.type==="code";if(!P&&i.type!=="inlineMath"&&i.type!=="math"&&i.type!=="html")return;const z=Object.freeze({start:y,end:R});if(i.type==="html"){a.push(z),b&&b.type!=="paragraph"&&b.type!=="heading"&&b.type!=="tableCell"&&b.type!=="link"&&b.type!=="linkReference"&&b.type!=="emphasis"&&b.type!=="strong"&&b.type!=="delete"&&l.set(y,R);return}r.push(z),P&&t.push(z),i.type==="inlineCode"&&s.push(z)});const k=n.map(i=>{const d=j.get(i);return d===void 0?i:{...i,imageResolveEnd:Math.max(i.end,p.get(d)??i.end)}}),E=[...r,...k,...a],u=B.distExports.findDocumentVariableMarkers(e).map(({start:i,end:d})=>Object.freeze({start:i,end:d})),f=u.filter(i=>!E.some(d=>d.start<=i.start&&i.start<d.end));r.push(...f.filter(i=>!g.some(d=>d.start<=i.start&&i.end<=d.end)),...g);const h=[...r,...k].sort((i,d)=>i.start-d.start),m=Q(e,h,l,new Set(k.filter(i=>i.imageAltEnd!==void 0).map(i=>i.start))),A=Z([...k,...m.metadata]),I=m.comments;r.push(...A,...I),r.sort((i,d)=>i.start-d.start);const q=[];for(const i of o.children){const d=i.position?.start.offset,b=i.position?.end.offset;if(i.type!=="code"||d===void 0||b===void 0)continue;const y=e.lastIndexOf(`
9
+ `,d-1)+1;/^[ \t]{0,3}$/.test(e.slice(y,d))&&/^(?:`{3,}|~{3,})/.test(e.slice(d))&&q.push(Object.freeze({start:y,end:b}))}return Object.freeze({tree:D(o),inline:Object.freeze(s),markdown:Object.freeze(t),literal:Object.freeze(r),variables:Object.freeze(f.map(i=>Object.freeze(i))),documentVariables:Object.freeze(u),interactions:Object.freeze(c),metadata:Object.freeze(A),comments:Object.freeze(I),fences:Object.freeze(q),html:Object.freeze(a)})},$=e=>{const o=v.get(e);if(o)return v.delete(e),v.set(e,o),o;const s=ee(e);if(e.length>_)return s;for(;v.size>=Y||C+e.length>_;){const t=v.keys().next().value;if(t===void 0)break;C-=t.length,v.delete(t)}return v.set(e,s),C+=e.length,s},V=(e,o)=>{const s=$(e);return o?s.inline:s.markdown},te=e=>e.includes("`")?V(e,!0):J,ne=e=>V(e,!1);exports.getInlineCodeRanges=te;exports.getMarkdownCodeRanges=ne;exports.getMarkdownSourceAnalysis=$;
10
10
  //# sourceMappingURL=inline-code-ranges.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"inline-code-ranges.cjs","sources":["../../../../src/components/ContentRender/utils/inline-code-ranges.ts"],"sourcesContent":["import { unified } from \"unified\";\nimport remarkParse from \"remark-parse\";\nimport { visit } from \"unist-util-visit\";\nimport { remarkPlugins } from \"./markdown-plugins\";\nimport { findResumedProseFence } from \"./resumed-prose-fence\";\nimport {\n findStreamingHtmlBlockEnd,\n isHtmlRawTextTag,\n readHtmlMarkup,\n} from \"./html-block-end\";\n\nconst parser = unified().use(remarkParse).use(remarkPlugins);\n\nconst MAX_CACHE_ENTRIES = 16;\nconst MAX_CACHED_SOURCE_CHARACTERS = 256 * 1024;\n\ntype CodeRange = Readonly<{ start: number; end: number }>;\ntype MetadataRange = CodeRange &\n Readonly<{\n pending?: true;\n // Alt text is always literal. Resolution may depend on a later definition,\n // but its classification mask must stop at the image's own source end.\n imageAltEnd?: number;\n imageResolveEnd?: number;\n }>;\ntype Immutable<T> = T extends object\n ? { readonly [Key in keyof T]: Immutable<T[Key]> }\n : T;\nexport type MarkdownSourceTree = Immutable<ReturnType<typeof parser.parse>>;\nexport type MarkdownSourceAnalysis = {\n tree: MarkdownSourceTree;\n inline: readonly CodeRange[];\n markdown: readonly CodeRange[];\n literal: readonly CodeRange[];\n metadata: readonly MetadataRange[];\n comments: readonly CodeRange[];\n fences: readonly CodeRange[];\n html: readonly CodeRange[];\n};\n\nconst EMPTY_RANGES: readonly CodeRange[] = Object.freeze([]);\nconst sourceRangesCache = new Map<string, MarkdownSourceAnalysis>();\nlet cachedSourceCharacters = 0;\n\nconst freezeTree = <T>(value: T): Immutable<T> => {\n if (value && typeof value === \"object\") {\n for (const child of Object.values(value)) freezeTree(child);\n Object.freeze(value);\n }\n return value as Immutable<T>;\n};\n\n// An unfinished link has no MDAST link node yet. Its received destination/title\n// stays inert until Markdown can resolve the construct or a blank line ends it.\nconst findPendingLinkMetadataEnd = (raw: string, start: number) => {\n let depth = 0;\n let quote = \"\";\n let angle = false;\n let hasDestination = false;\n let stage: \"destination\" | \"after-angle\" | \"title\" | \"close\" = \"destination\";\n let newline = -1;\n for (let position = start + 1; position < raw.length; position += 1) {\n const character = raw[position];\n const whitespace = /[ \\t\\r\\n]/.test(character);\n if (character === \"\\n\") {\n if (newline >= 0) return { end: newline, pending: true as const };\n newline = position;\n } else if (!/[ \\t\\r]/.test(character)) {\n newline = -1;\n }\n if (quote) {\n if (character === \"\\\\\") position += 1;\n else if (character === quote) {\n quote = \"\";\n stage = \"close\";\n }\n } else if (stage === \"destination\") {\n if (character === \"\\\\\") {\n hasDestination = true;\n position += 1;\n } else if (angle) {\n if (character === \">\") {\n angle = false;\n stage = \"after-angle\";\n } else if (character === \"<\" || /[\\r\\n]/.test(character)) return;\n } else if (whitespace) {\n if (depth) return;\n if (hasDestination) stage = \"title\";\n } else if (!hasDestination && character === \"<\") {\n angle = true;\n hasDestination = true;\n } else if (character === \")\" && depth === 0) return { end: position + 1 };\n else {\n if (character === \"(\") depth += 1;\n else if (character === \")\") depth -= 1;\n hasDestination = true;\n }\n } else if (whitespace) {\n if (stage === \"after-angle\") stage = \"title\";\n } else if (character === \")\") {\n return { end: position + 1 };\n } else if (\n stage === \"title\" &&\n (character === '\"' || character === \"'\" || character === \"(\")\n ) {\n quote = character === \"(\" ? \")\" : character;\n } else {\n // Once a destination ends, only a title opener or the link closer can\n // follow. Other prose makes the construct invalid, so keep scanning HTML.\n return;\n }\n }\n return { end: raw.length, pending: true as const };\n};\n\nconst findPendingDefinitionTitle = (\n raw: string,\n start: number,\n hasDestination: boolean\n): MetadataRange | undefined => {\n let position = start;\n if (!hasDestination) {\n while (raw[position] === \" \" || raw[position] === \"\\t\") position += 1;\n if (raw[position] === \"<\") {\n position += 1;\n while (position < raw.length && raw[position] !== \">\") {\n if (raw[position] === \"<\" || /[\\r\\n]/.test(raw[position])) return;\n position += raw[position] === \"\\\\\" ? 2 : 1;\n }\n if (raw[position] !== \">\") return;\n position += 1;\n } else {\n const destinationStart = position;\n while (position < raw.length && !/\\s/.test(raw[position])) {\n if (raw[position] === \"<\" || raw[position] === \">\") return;\n position += raw[position] === \"\\\\\" ? 2 : 1;\n }\n if (position === destinationStart) return;\n }\n }\n let newlines = 0;\n const whitespaceStart = position;\n while (position < raw.length && /\\s/.test(raw[position])) {\n if (raw[position] === \"\\n\" && ++newlines > 1) return;\n position += 1;\n }\n const opener = raw[position];\n if (\n position === whitespaceStart ||\n (opener !== '\"' && opener !== \"'\" && opener !== \"(\")\n )\n return;\n const titleStart = position;\n const closer = opener === \"(\" ? \")\" : opener;\n let newline = -1;\n for (position += 1; position < raw.length; position += 1) {\n const character = raw[position];\n if (character === \"\\n\") {\n if (newline >= 0)\n return { start: titleStart, end: newline, pending: true };\n newline = position;\n } else if (!/[ \\t\\r]/.test(character)) {\n newline = -1;\n }\n if (character === \"\\\\\") position += 1;\n else if (character === closer) return;\n }\n return { start: titleStart, end: raw.length, pending: true };\n};\n\nconst isDefinitionLabelStart = (raw: string, start: number) => {\n let position = start - 1;\n while (position >= 0 && raw[position] === \" \" && start - position <= 3)\n position -= 1;\n return position < 0 || raw[position] === \"\\n\";\n};\n\nconst collectLexicalRanges = (\n raw: string,\n literals: readonly CodeRange[],\n htmlBlocks: ReadonlyMap<number, number>,\n imageStarts: ReadonlySet<number>\n) => {\n const comments: CodeRange[] = [];\n const metadata: MetadataRange[] = [];\n const labels: Array<{ start: number; image: boolean }> = [];\n let position = 0;\n let literalIndex = 0;\n let htmlBodyEnd = 0;\n let htmlNodeEnd = 0;\n let imageLabelStart = -1;\n const pendingImages = (end: number) => {\n for (const label of labels)\n if (label.image)\n metadata.push({\n start: label.start + 1,\n end,\n imageAltEnd: end,\n pending: true,\n });\n };\n while (position < raw.length) {\n while (literals[literalIndex]?.end <= position) literalIndex += 1;\n const literal = literals[literalIndex];\n if (literal && literal.start <= position) {\n if (\n imageStarts.has(literal.start) &&\n labels[labels.length - 1]?.start === literal.start - 1\n )\n labels.pop();\n position = literal.end;\n continue;\n }\n if (position >= htmlBodyEnd && position < htmlNodeEnd) {\n const fence = findResumedProseFence(raw, position);\n if (fence) {\n // The original HTML node can outlive its closed root. A resumed code\n // fence has its own lexical scope, including unfinished examples.\n labels.length = 0;\n position = fence.end;\n continue;\n }\n }\n if (raw[position] === \"\\\\\") {\n position += 2;\n continue;\n }\n if (raw[position] === \"!\" && raw[position + 1] === \"[\")\n imageLabelStart = position + 1;\n if (position >= htmlBodyEnd && raw[position] === \"[\")\n labels.push({ start: position, image: position === imageLabelStart });\n else if (position >= htmlBodyEnd && raw[position] === \"]\") {\n const label = labels.pop();\n if (label !== undefined) {\n if (label.image) {\n let tail: { end: number; pending?: true } | undefined;\n if (raw[position + 1] === \"(\")\n tail = findPendingLinkMetadataEnd(raw, position + 1);\n else if (position + 1 === raw.length)\n tail = { end: raw.length, pending: true };\n else if (raw[position + 1] === \"[\") {\n let end = position + 2;\n while (\n end < raw.length &&\n raw[end] !== \"]\" &&\n raw[end] !== \"[\" &&\n raw[end] !== \"\\n\"\n )\n end += raw[end] === \"\\\\\" ? 2 : 1;\n if (end === raw.length || raw[end] === \"]\")\n tail = {\n end: raw[end] === \"]\" ? end + 1 : raw.length,\n pending: true,\n };\n }\n if (tail) {\n metadata.push({\n start: label.start + 1,\n imageAltEnd: position,\n ...tail,\n });\n position = tail.end;\n continue;\n }\n }\n if (\n !label.image &&\n raw[position + 1] === \"(\" &&\n literal?.start !== position + 1\n ) {\n const tail = findPendingLinkMetadataEnd(raw, position + 1);\n if (tail) {\n metadata.push({ start: position + 1, ...tail });\n position = tail.end;\n continue;\n }\n }\n if (\n raw[position + 1] === \":\" &&\n isDefinitionLabelStart(raw, label.start)\n ) {\n const title = findPendingDefinitionTitle(raw, position + 2, false);\n if (title) {\n metadata.push({ ...title, start: position + 1 });\n position = title.end;\n continue;\n }\n }\n }\n } else if (raw[position] === \"\\n\") {\n let previous = position - 1;\n while (/[ \\t\\r]/.test(raw[previous] ?? \"\")) previous -= 1;\n if (raw[previous] === \"\\n\") {\n pendingImages(previous);\n labels.length = 0;\n }\n }\n if (raw[position] !== \"<\") {\n position += 1;\n continue;\n }\n const markup = readHtmlMarkup(raw, position);\n if (raw.startsWith(\"<!--\", position)) {\n const end = markup.kind === \"comment\" ? markup.end : raw.length;\n comments.push(Object.freeze({ start: position, end }));\n position = end;\n } else if (markup.kind === \"tag\") {\n if (\n !markup.closing &&\n position >= htmlBodyEnd &&\n htmlBlocks.has(position)\n ) {\n // Block HTML bodies retain HTML semantics. Resume Markdown only after\n // adjacent roots end, even if their MDAST HTML node extends farther.\n htmlBodyEnd = findStreamingHtmlBlockEnd(raw, position);\n htmlNodeEnd = htmlBlocks.get(position)!;\n labels.length = 0;\n }\n position = markup.end;\n if (!markup.closing && isHtmlRawTextTag(markup.name)) {\n const close = new RegExp(`</${markup.name}(?=[\\\\s/>])`, \"gi\");\n close.lastIndex = position;\n position = close.exec(raw)?.index ?? raw.length;\n }\n } else if (markup.kind === \"declaration\") {\n position = markup.end;\n } else if (markup.kind === \"incomplete\") {\n break;\n } else {\n position += 1;\n }\n }\n pendingImages(raw.length);\n return { comments, metadata };\n};\n\nconst mergeMetadataRanges = (ranges: MetadataRange[]) => {\n ranges.sort((left, right) => left.start - right.start);\n const merged: MetadataRange[] = [];\n for (const range of ranges) {\n const previous = merged[merged.length - 1];\n if (previous && range.start < previous.end) {\n merged[merged.length - 1] = Object.freeze({\n start: previous.start,\n end: Math.max(previous.end, range.end),\n ...(previous.pending || range.pending\n ? { pending: true as const }\n : {}),\n ...(previous.imageAltEnd !== undefined ||\n range.imageAltEnd !== undefined\n ? {\n imageAltEnd: Math.max(\n previous.imageAltEnd ?? 0,\n range.imageAltEnd ?? 0\n ),\n }\n : {}),\n ...(previous.imageResolveEnd !== undefined ||\n range.imageResolveEnd !== undefined\n ? {\n imageResolveEnd: Math.max(\n previous.imageResolveEnd ?? 0,\n range.imageResolveEnd ?? 0\n ),\n }\n : {}),\n });\n } else merged.push(Object.freeze(range));\n }\n return merged;\n};\n\nconst findImageLabelEnd = (raw: string, start: number, end: number) => {\n let depth = 1;\n for (let position = start + 2; position < end; position += 1) {\n if (raw[position] === \"\\\\\") position += 1;\n else if (raw[position] === \"[\") depth += 1;\n else if (raw[position] === \"]\" && --depth === 0) return position + 1;\n }\n return end;\n};\n\nconst parseCodeRanges = (raw: string): MarkdownSourceAnalysis => {\n const tree = parser.parse(raw);\n const inline: CodeRange[] = [];\n const markdown: CodeRange[] = [];\n const literal: CodeRange[] = [];\n const metadata: MetadataRange[] = [];\n const html: CodeRange[] = [];\n const htmlBlocks = new Map<number, number>();\n const definitionEnds = new Map<string, number>();\n const imageReferences = new Map<MetadataRange, string>();\n\n // Use the renderer's Markdown grammar, including HTML paragraph boundaries.\n visit(tree, (node, _index, parent) => {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n if (start === undefined || end === undefined) return;\n if (node.type === \"definition\" && !definitionEnds.has(node.identifier))\n definitionEnds.set(node.identifier, end);\n if (\n node.type === \"definition\" ||\n node.type === \"link\" ||\n node.type === \"linkReference\" ||\n node.type === \"image\" ||\n node.type === \"imageReference\"\n ) {\n let metadataStart = start;\n let imageAltEnd: number | undefined;\n if (node.type === \"image\" || node.type === \"imageReference\") {\n metadataStart = start + 2;\n imageAltEnd = findImageLabelEnd(raw, start, end) - 1;\n } else if (node.type !== \"definition\" && raw[start] === \"[\") {\n // Preserve label HTML, including real videos. Only destinations,\n // titles and reference identifiers after the label are inert.\n const labelEnd =\n node.children[node.children.length - 1]?.position?.end.offset ??\n start + 1;\n metadataStart = raw.indexOf(\"]\", labelEnd) + 1;\n if (metadataStart <= labelEnd || metadataStart > end) return;\n }\n if (metadataStart < end) {\n const title =\n node.type === \"definition\" && !node.title\n ? findPendingDefinitionTitle(raw, end, true)\n : undefined;\n const range: MetadataRange = {\n start: metadataStart,\n end: title?.end ?? end,\n ...(title ? { pending: true as const } : {}),\n ...(imageAltEnd === undefined ? {} : { imageAltEnd }),\n };\n metadata.push(range);\n if (node.type === \"imageReference\")\n imageReferences.set(range, node.identifier);\n }\n return;\n }\n const isCode = node.type === \"inlineCode\" || node.type === \"code\";\n if (\n !isCode &&\n node.type !== \"inlineMath\" &&\n node.type !== \"math\" &&\n node.type !== \"html\"\n )\n return;\n const range = Object.freeze({ start, end });\n if (node.type === \"html\") {\n html.push(range);\n if (\n parent &&\n parent.type !== \"paragraph\" &&\n parent.type !== \"heading\" &&\n parent.type !== \"tableCell\" &&\n parent.type !== \"link\" &&\n parent.type !== \"linkReference\" &&\n parent.type !== \"emphasis\" &&\n parent.type !== \"strong\" &&\n parent.type !== \"delete\"\n )\n htmlBlocks.set(start, end);\n return;\n }\n literal.push(range);\n if (isCode) markdown.push(range);\n if (node.type === \"inlineCode\") inline.push(range);\n });\n\n // Parent link metadata follows its child label ranges in source order.\n const resolvedMetadata = metadata.map((range) => {\n const reference = imageReferences.get(range);\n return reference === undefined\n ? range\n : {\n ...range,\n imageResolveEnd: Math.max(\n range.end,\n definitionEnds.get(reference) ?? range.end\n ),\n };\n });\n const protectedRanges = [...literal, ...resolvedMetadata].sort(\n (left, right) => left.start - right.start\n );\n const lexical = collectLexicalRanges(\n raw,\n protectedRanges,\n htmlBlocks,\n new Set(\n resolvedMetadata\n .filter((range) => range.imageAltEnd !== undefined)\n .map((range) => range.start)\n )\n );\n const allMetadata = mergeMetadataRanges([\n ...resolvedMetadata,\n ...lexical.metadata,\n ]);\n const comments = lexical.comments;\n literal.push(...allMetadata, ...comments);\n literal.sort((left, right) => left.start - right.start);\n const fences: CodeRange[] = [];\n for (const node of tree.children) {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n if (node.type !== \"code\" || start === undefined || end === undefined)\n continue;\n const lineStart = raw.lastIndexOf(\"\\n\", start - 1) + 1;\n if (\n /^[ \\t]{0,3}$/.test(raw.slice(lineStart, start)) &&\n /^(?:`{3,}|~{3,})/.test(raw.slice(start))\n )\n fences.push(Object.freeze({ start: lineStart, end }));\n }\n\n // Cached trees are immutable: renderers clone before running transforms.\n return Object.freeze({\n tree: freezeTree(tree),\n inline: Object.freeze(inline),\n markdown: Object.freeze(markdown),\n literal: Object.freeze(literal),\n metadata: Object.freeze(allMetadata),\n comments: Object.freeze(comments),\n fences: Object.freeze(fences),\n html: Object.freeze(html),\n });\n};\n\nexport const getMarkdownSourceAnalysis = (\n raw: string\n): MarkdownSourceAnalysis => {\n const cached = sourceRangesCache.get(raw);\n if (cached) {\n sourceRangesCache.delete(raw);\n sourceRangesCache.set(raw, cached);\n return cached;\n }\n\n const ranges = parseCodeRanges(raw);\n // Large individual messages must not displace the bounded working set.\n if (raw.length > MAX_CACHED_SOURCE_CHARACTERS) return ranges;\n\n while (\n sourceRangesCache.size >= MAX_CACHE_ENTRIES ||\n cachedSourceCharacters + raw.length > MAX_CACHED_SOURCE_CHARACTERS\n ) {\n const oldestSource = sourceRangesCache.keys().next().value;\n if (oldestSource === undefined) break;\n cachedSourceCharacters -= oldestSource.length;\n sourceRangesCache.delete(oldestSource);\n }\n\n sourceRangesCache.set(raw, ranges);\n cachedSourceCharacters += raw.length;\n return ranges;\n};\n\nconst collectCodeRanges = (raw: string, inlineOnly: boolean) => {\n const ranges = getMarkdownSourceAnalysis(raw);\n return inlineOnly ? ranges.inline : ranges.markdown;\n};\n\nexport const getInlineCodeRanges = (raw: string) =>\n raw.includes(\"`\") ? collectCodeRanges(raw, true) : EMPTY_RANGES;\n\nexport const getMarkdownCodeRanges = (raw: string) =>\n collectCodeRanges(raw, false);\n\n// Native HTML stays inert inside code, math, comments, image alt and metadata.\nexport const getMarkdownLiteralRanges = (raw: string) =>\n getMarkdownSourceAnalysis(raw).literal;\n\nexport const getMarkdownSourceTree = (raw: string): MarkdownSourceTree =>\n getMarkdownSourceAnalysis(raw).tree;\n"],"names":["parser","unified","remarkParse","remarkPlugins","MAX_CACHE_ENTRIES","MAX_CACHED_SOURCE_CHARACTERS","EMPTY_RANGES","sourceRangesCache","cachedSourceCharacters","freezeTree","value","child","findPendingLinkMetadataEnd","raw","start","depth","quote","angle","hasDestination","stage","newline","position","character","whitespace","findPendingDefinitionTitle","destinationStart","newlines","whitespaceStart","opener","titleStart","closer","isDefinitionLabelStart","collectLexicalRanges","literals","htmlBlocks","imageStarts","comments","metadata","labels","literalIndex","htmlBodyEnd","htmlNodeEnd","imageLabelStart","pendingImages","end","label","literal","fence","findResumedProseFence","tail","title","previous","markup","readHtmlMarkup","findStreamingHtmlBlockEnd","isHtmlRawTextTag","close","mergeMetadataRanges","ranges","left","right","merged","range","findImageLabelEnd","parseCodeRanges","tree","inline","markdown","html","definitionEnds","imageReferences","visit","node","_index","parent","metadataStart","imageAltEnd","labelEnd","isCode","resolvedMetadata","reference","protectedRanges","lexical","allMetadata","fences","lineStart","getMarkdownSourceAnalysis","cached","oldestSource","collectCodeRanges","inlineOnly","getInlineCodeRanges","getMarkdownCodeRanges"],"mappings":"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"}
1
+ {"version":3,"file":"inline-code-ranges.cjs","sources":["../../../../src/components/ContentRender/utils/inline-code-ranges.ts"],"sourcesContent":["import { unified } from \"unified\";\nimport { findDocumentVariableMarkers } from \"remark-flow\";\nimport remarkParse from \"remark-parse\";\nimport { visit } from \"unist-util-visit\";\nimport { remarkPlugins } from \"./markdown-plugins\";\nimport { findResumedProseFence } from \"./resumed-prose-fence\";\nimport {\n findStreamingHtmlBlockEnd,\n isHtmlRawTextTag,\n readHtmlMarkup,\n} from \"./html-block-end\";\n\nconst parser = unified().use(remarkParse).use(remarkPlugins);\n\nconst MAX_CACHE_ENTRIES = 16;\nconst MAX_CACHED_SOURCE_CHARACTERS = 256 * 1024;\n\ntype CodeRange = Readonly<{ start: number; end: number }>;\ntype MetadataRange = CodeRange &\n Readonly<{\n pending?: true;\n // Alt text is always literal. Resolution may depend on a later definition,\n // but its classification mask must stop at the image's own source end.\n imageAltEnd?: number;\n imageResolveEnd?: number;\n }>;\ntype Immutable<T> = T extends object\n ? { readonly [Key in keyof T]: Immutable<T[Key]> }\n : T;\nexport type MarkdownSourceTree = Immutable<ReturnType<typeof parser.parse>>;\nexport type MarkdownSourceAnalysis = {\n tree: MarkdownSourceTree;\n inline: readonly CodeRange[];\n markdown: readonly CodeRange[];\n literal: readonly CodeRange[];\n variables: readonly CodeRange[];\n documentVariables: readonly CodeRange[];\n interactions: readonly CodeRange[];\n metadata: readonly MetadataRange[];\n comments: readonly CodeRange[];\n fences: readonly CodeRange[];\n html: readonly CodeRange[];\n};\n\nconst EMPTY_RANGES: readonly CodeRange[] = Object.freeze([]);\nconst sourceRangesCache = new Map<string, MarkdownSourceAnalysis>();\nlet cachedSourceCharacters = 0;\n\nconst freezeTree = <T>(value: T): Immutable<T> => {\n if (value && typeof value === \"object\") {\n for (const child of Object.values(value)) freezeTree(child);\n Object.freeze(value);\n }\n return value as Immutable<T>;\n};\n\n// An unfinished link has no MDAST link node yet. Its received destination/title\n// stays inert until Markdown can resolve the construct or a blank line ends it.\nconst findPendingLinkMetadataEnd = (raw: string, start: number) => {\n let depth = 0;\n let quote = \"\";\n let angle = false;\n let hasDestination = false;\n let stage: \"destination\" | \"after-angle\" | \"title\" | \"close\" = \"destination\";\n let newline = -1;\n for (let position = start + 1; position < raw.length; position += 1) {\n const character = raw[position];\n const whitespace = /[ \\t\\r\\n]/.test(character);\n if (character === \"\\n\") {\n if (newline >= 0) return { end: newline, pending: true as const };\n newline = position;\n } else if (!/[ \\t\\r]/.test(character)) {\n newline = -1;\n }\n if (quote) {\n if (character === \"\\\\\") position += 1;\n else if (character === quote) {\n quote = \"\";\n stage = \"close\";\n }\n } else if (stage === \"destination\") {\n if (character === \"\\\\\") {\n hasDestination = true;\n position += 1;\n } else if (angle) {\n if (character === \">\") {\n angle = false;\n stage = \"after-angle\";\n } else if (character === \"<\" || /[\\r\\n]/.test(character)) return;\n } else if (whitespace) {\n if (depth) return;\n if (hasDestination) stage = \"title\";\n } else if (!hasDestination && character === \"<\") {\n angle = true;\n hasDestination = true;\n } else if (character === \")\" && depth === 0) return { end: position + 1 };\n else {\n if (character === \"(\") depth += 1;\n else if (character === \")\") depth -= 1;\n hasDestination = true;\n }\n } else if (whitespace) {\n if (stage === \"after-angle\") stage = \"title\";\n } else if (character === \")\") {\n return { end: position + 1 };\n } else if (\n stage === \"title\" &&\n (character === '\"' || character === \"'\" || character === \"(\")\n ) {\n quote = character === \"(\" ? \")\" : character;\n } else {\n // Once a destination ends, only a title opener or the link closer can\n // follow. Other prose makes the construct invalid, so keep scanning HTML.\n return;\n }\n }\n return { end: raw.length, pending: true as const };\n};\n\nconst findPendingDefinitionTitle = (\n raw: string,\n start: number,\n hasDestination: boolean\n): MetadataRange | undefined => {\n let position = start;\n if (!hasDestination) {\n while (raw[position] === \" \" || raw[position] === \"\\t\") position += 1;\n if (raw[position] === \"<\") {\n position += 1;\n while (position < raw.length && raw[position] !== \">\") {\n if (raw[position] === \"<\" || /[\\r\\n]/.test(raw[position])) return;\n position += raw[position] === \"\\\\\" ? 2 : 1;\n }\n if (raw[position] !== \">\") return;\n position += 1;\n } else {\n const destinationStart = position;\n while (position < raw.length && !/\\s/.test(raw[position])) {\n if (raw[position] === \"<\" || raw[position] === \">\") return;\n position += raw[position] === \"\\\\\" ? 2 : 1;\n }\n if (position === destinationStart) return;\n }\n }\n let newlines = 0;\n const whitespaceStart = position;\n while (position < raw.length && /\\s/.test(raw[position])) {\n if (raw[position] === \"\\n\" && ++newlines > 1) return;\n position += 1;\n }\n const opener = raw[position];\n if (\n position === whitespaceStart ||\n (opener !== '\"' && opener !== \"'\" && opener !== \"(\")\n )\n return;\n const titleStart = position;\n const closer = opener === \"(\" ? \")\" : opener;\n let newline = -1;\n for (position += 1; position < raw.length; position += 1) {\n const character = raw[position];\n if (character === \"\\n\") {\n if (newline >= 0)\n return { start: titleStart, end: newline, pending: true };\n newline = position;\n } else if (!/[ \\t\\r]/.test(character)) {\n newline = -1;\n }\n if (character === \"\\\\\") position += 1;\n else if (character === closer) return;\n }\n return { start: titleStart, end: raw.length, pending: true };\n};\n\nconst isDefinitionLabelStart = (raw: string, start: number) => {\n let position = start - 1;\n while (position >= 0 && raw[position] === \" \" && start - position <= 3)\n position -= 1;\n return position < 0 || raw[position] === \"\\n\";\n};\n\nconst collectLexicalRanges = (\n raw: string,\n literals: readonly CodeRange[],\n htmlBlocks: ReadonlyMap<number, number>,\n imageStarts: ReadonlySet<number>\n) => {\n const comments: CodeRange[] = [];\n const metadata: MetadataRange[] = [];\n const labels: Array<{ start: number; image: boolean }> = [];\n let position = 0;\n let literalIndex = 0;\n let htmlBodyEnd = 0;\n let htmlNodeEnd = 0;\n let imageLabelStart = -1;\n const pendingImages = (end: number) => {\n for (const label of labels)\n if (label.image)\n metadata.push({\n start: label.start + 1,\n end,\n imageAltEnd: end,\n pending: true,\n });\n };\n while (position < raw.length) {\n while (literals[literalIndex]?.end <= position) literalIndex += 1;\n const literal = literals[literalIndex];\n if (literal && literal.start <= position) {\n if (\n imageStarts.has(literal.start) &&\n labels[labels.length - 1]?.start === literal.start - 1\n )\n labels.pop();\n position = literal.end;\n continue;\n }\n if (position >= htmlBodyEnd && position < htmlNodeEnd) {\n const fence = findResumedProseFence(raw, position);\n if (fence) {\n // The original HTML node can outlive its closed root. A resumed code\n // fence has its own lexical scope, including unfinished examples.\n labels.length = 0;\n position = fence.end;\n continue;\n }\n }\n if (raw[position] === \"\\\\\") {\n position += 2;\n continue;\n }\n if (raw[position] === \"!\" && raw[position + 1] === \"[\")\n imageLabelStart = position + 1;\n if (position >= htmlBodyEnd && raw[position] === \"[\")\n labels.push({ start: position, image: position === imageLabelStart });\n else if (position >= htmlBodyEnd && raw[position] === \"]\") {\n const label = labels.pop();\n if (label !== undefined) {\n if (label.image) {\n let tail: { end: number; pending?: true } | undefined;\n if (raw[position + 1] === \"(\")\n tail = findPendingLinkMetadataEnd(raw, position + 1);\n else if (position + 1 === raw.length)\n tail = { end: raw.length, pending: true };\n else if (raw[position + 1] === \"[\") {\n let end = position + 2;\n while (\n end < raw.length &&\n raw[end] !== \"]\" &&\n raw[end] !== \"[\" &&\n raw[end] !== \"\\n\"\n )\n end += raw[end] === \"\\\\\" ? 2 : 1;\n if (end === raw.length || raw[end] === \"]\")\n tail = {\n end: raw[end] === \"]\" ? end + 1 : raw.length,\n pending: true,\n };\n }\n if (tail) {\n metadata.push({\n start: label.start + 1,\n imageAltEnd: position,\n ...tail,\n });\n position = tail.end;\n continue;\n }\n }\n if (\n !label.image &&\n raw[position + 1] === \"(\" &&\n literal?.start !== position + 1\n ) {\n const tail = findPendingLinkMetadataEnd(raw, position + 1);\n if (tail) {\n metadata.push({ start: position + 1, ...tail });\n position = tail.end;\n continue;\n }\n }\n if (\n raw[position + 1] === \":\" &&\n isDefinitionLabelStart(raw, label.start)\n ) {\n const title = findPendingDefinitionTitle(raw, position + 2, false);\n if (title) {\n metadata.push({ ...title, start: position + 1 });\n position = title.end;\n continue;\n }\n }\n }\n } else if (raw[position] === \"\\n\") {\n let previous = position - 1;\n while (/[ \\t\\r]/.test(raw[previous] ?? \"\")) previous -= 1;\n if (raw[previous] === \"\\n\") {\n pendingImages(previous);\n labels.length = 0;\n }\n }\n if (raw[position] !== \"<\") {\n position += 1;\n continue;\n }\n const markup = readHtmlMarkup(raw, position);\n if (raw.startsWith(\"<!--\", position)) {\n const end = markup.kind === \"comment\" ? markup.end : raw.length;\n comments.push(Object.freeze({ start: position, end }));\n position = end;\n } else if (markup.kind === \"tag\") {\n if (\n !markup.closing &&\n position >= htmlBodyEnd &&\n htmlBlocks.has(position)\n ) {\n // Block HTML bodies retain HTML semantics. Resume Markdown only after\n // adjacent roots end, even if their MDAST HTML node extends farther.\n htmlBodyEnd = findStreamingHtmlBlockEnd(raw, position);\n htmlNodeEnd = htmlBlocks.get(position)!;\n labels.length = 0;\n }\n position = markup.end;\n if (!markup.closing && isHtmlRawTextTag(markup.name)) {\n const close = new RegExp(`</${markup.name}(?=[\\\\s/>])`, \"gi\");\n close.lastIndex = position;\n position = close.exec(raw)?.index ?? raw.length;\n }\n } else if (markup.kind === \"declaration\") {\n position = markup.end;\n } else if (markup.kind === \"incomplete\") {\n break;\n } else {\n position += 1;\n }\n }\n pendingImages(raw.length);\n return { comments, metadata };\n};\n\nconst mergeMetadataRanges = (ranges: MetadataRange[]) => {\n ranges.sort((left, right) => left.start - right.start);\n const merged: MetadataRange[] = [];\n for (const range of ranges) {\n const previous = merged[merged.length - 1];\n if (previous && range.start < previous.end) {\n merged[merged.length - 1] = Object.freeze({\n start: previous.start,\n end: Math.max(previous.end, range.end),\n ...(previous.pending || range.pending\n ? { pending: true as const }\n : {}),\n ...(previous.imageAltEnd !== undefined ||\n range.imageAltEnd !== undefined\n ? {\n imageAltEnd: Math.max(\n previous.imageAltEnd ?? 0,\n range.imageAltEnd ?? 0\n ),\n }\n : {}),\n ...(previous.imageResolveEnd !== undefined ||\n range.imageResolveEnd !== undefined\n ? {\n imageResolveEnd: Math.max(\n previous.imageResolveEnd ?? 0,\n range.imageResolveEnd ?? 0\n ),\n }\n : {}),\n });\n } else merged.push(Object.freeze(range));\n }\n return merged;\n};\n\nconst findImageLabelEnd = (raw: string, start: number, end: number) => {\n let depth = 1;\n for (let position = start + 2; position < end; position += 1) {\n if (raw[position] === \"\\\\\") position += 1;\n else if (raw[position] === \"[\") depth += 1;\n else if (raw[position] === \"]\" && --depth === 0) return position + 1;\n }\n return end;\n};\n\nconst parseCodeRanges = (raw: string): MarkdownSourceAnalysis => {\n const tree = parser.parse(raw);\n const inline: CodeRange[] = [];\n const markdown: CodeRange[] = [];\n const literal: CodeRange[] = [];\n const flowRanges: CodeRange[] = [];\n const interactions: CodeRange[] = [];\n const metadata: MetadataRange[] = [];\n const html: CodeRange[] = [];\n const htmlBlocks = new Map<number, number>();\n const definitionEnds = new Map<string, number>();\n const imageReferences = new Map<MetadataRange, string>();\n\n // Use the renderer's Markdown grammar, including HTML paragraph boundaries.\n visit(tree, (node, _index, parent) => {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n if (start === undefined || end === undefined) return;\n // Flow tokens own their source before HTML, links or code inside a marker.\n if ([\"flowInteraction\", \"flowVariableMarker\"].includes(node.type)) {\n const range = Object.freeze({ start, end });\n flowRanges.push(range);\n if (String(node.type) === \"flowInteraction\") interactions.push(range);\n return;\n }\n if (node.type === \"definition\" && !definitionEnds.has(node.identifier))\n definitionEnds.set(node.identifier, end);\n if (\n node.type === \"definition\" ||\n node.type === \"link\" ||\n node.type === \"linkReference\" ||\n node.type === \"image\" ||\n node.type === \"imageReference\"\n ) {\n let metadataStart = start;\n let imageAltEnd: number | undefined;\n if (node.type === \"image\" || node.type === \"imageReference\") {\n metadataStart = start + 2;\n imageAltEnd = findImageLabelEnd(raw, start, end) - 1;\n } else if (node.type !== \"definition\" && raw[start] === \"[\") {\n // Preserve label HTML, including real videos. Only destinations,\n // titles and reference identifiers after the label are inert.\n const labelEnd =\n node.children[node.children.length - 1]?.position?.end.offset ??\n start + 1;\n metadataStart = raw.indexOf(\"]\", labelEnd) + 1;\n if (metadataStart <= labelEnd || metadataStart > end) return;\n }\n if (metadataStart < end) {\n const title =\n node.type === \"definition\" && !node.title\n ? findPendingDefinitionTitle(raw, end, true)\n : undefined;\n const range: MetadataRange = {\n start: metadataStart,\n end: title?.end ?? end,\n ...(title ? { pending: true as const } : {}),\n ...(imageAltEnd === undefined ? {} : { imageAltEnd }),\n };\n metadata.push(range);\n if (node.type === \"imageReference\")\n imageReferences.set(range, node.identifier);\n }\n return;\n }\n const isCode = node.type === \"inlineCode\" || node.type === \"code\";\n if (\n !isCode &&\n node.type !== \"inlineMath\" &&\n node.type !== \"math\" &&\n node.type !== \"html\"\n )\n return;\n const range = Object.freeze({ start, end });\n if (node.type === \"html\") {\n html.push(range);\n if (\n parent &&\n parent.type !== \"paragraph\" &&\n parent.type !== \"heading\" &&\n parent.type !== \"tableCell\" &&\n parent.type !== \"link\" &&\n parent.type !== \"linkReference\" &&\n parent.type !== \"emphasis\" &&\n parent.type !== \"strong\" &&\n parent.type !== \"delete\"\n )\n htmlBlocks.set(start, end);\n return;\n }\n literal.push(range);\n if (isCode) markdown.push(range);\n if (node.type === \"inlineCode\") inline.push(range);\n });\n\n // Parent link metadata follows its child label ranges in source order.\n const resolvedMetadata = metadata.map((range) => {\n const reference = imageReferences.get(range);\n return reference === undefined\n ? range\n : {\n ...range,\n imageResolveEnd: Math.max(\n range.end,\n definitionEnds.get(reference) ?? range.end\n ),\n };\n });\n // Document scanning bounds syntax examples to their code/HTML context while\n // preserving real marker bodies, including incomplete streamed markers.\n const ownedRanges = [...literal, ...resolvedMetadata, ...html];\n const documentVariables = findDocumentVariableMarkers(raw).map(\n ({ start, end }) => Object.freeze({ start, end })\n );\n const variables: CodeRange[] = documentVariables.filter(\n (marker) =>\n !ownedRanges.some(\n (range) => range.start <= marker.start && marker.start < range.end\n )\n );\n literal.push(\n ...variables.filter(\n (marker) =>\n !flowRanges.some(\n (range) => range.start <= marker.start && marker.end <= range.end\n )\n ),\n ...flowRanges\n );\n const protectedRanges = [...literal, ...resolvedMetadata].sort(\n (left, right) => left.start - right.start\n );\n const lexical = collectLexicalRanges(\n raw,\n protectedRanges,\n htmlBlocks,\n new Set(\n resolvedMetadata\n .filter((range) => range.imageAltEnd !== undefined)\n .map((range) => range.start)\n )\n );\n const allMetadata = mergeMetadataRanges([\n ...resolvedMetadata,\n ...lexical.metadata,\n ]);\n const comments = lexical.comments;\n literal.push(...allMetadata, ...comments);\n literal.sort((left, right) => left.start - right.start);\n const fences: CodeRange[] = [];\n for (const node of tree.children) {\n const start = node.position?.start.offset;\n const end = node.position?.end.offset;\n if (node.type !== \"code\" || start === undefined || end === undefined)\n continue;\n const lineStart = raw.lastIndexOf(\"\\n\", start - 1) + 1;\n if (\n /^[ \\t]{0,3}$/.test(raw.slice(lineStart, start)) &&\n /^(?:`{3,}|~{3,})/.test(raw.slice(start))\n )\n fences.push(Object.freeze({ start: lineStart, end }));\n }\n\n // Cached trees are immutable: renderers clone before running transforms.\n return Object.freeze({\n tree: freezeTree(tree),\n inline: Object.freeze(inline),\n markdown: Object.freeze(markdown),\n literal: Object.freeze(literal),\n variables: Object.freeze(variables.map((range) => Object.freeze(range))),\n documentVariables: Object.freeze(documentVariables),\n interactions: Object.freeze(interactions),\n metadata: Object.freeze(allMetadata),\n comments: Object.freeze(comments),\n fences: Object.freeze(fences),\n html: Object.freeze(html),\n });\n};\n\nexport const getMarkdownSourceAnalysis = (\n raw: string\n): MarkdownSourceAnalysis => {\n const cached = sourceRangesCache.get(raw);\n if (cached) {\n sourceRangesCache.delete(raw);\n sourceRangesCache.set(raw, cached);\n return cached;\n }\n\n const ranges = parseCodeRanges(raw);\n // Large individual messages must not displace the bounded working set.\n if (raw.length > MAX_CACHED_SOURCE_CHARACTERS) return ranges;\n\n while (\n sourceRangesCache.size >= MAX_CACHE_ENTRIES ||\n cachedSourceCharacters + raw.length > MAX_CACHED_SOURCE_CHARACTERS\n ) {\n const oldestSource = sourceRangesCache.keys().next().value;\n if (oldestSource === undefined) break;\n cachedSourceCharacters -= oldestSource.length;\n sourceRangesCache.delete(oldestSource);\n }\n\n sourceRangesCache.set(raw, ranges);\n cachedSourceCharacters += raw.length;\n return ranges;\n};\n\nconst collectCodeRanges = (raw: string, inlineOnly: boolean) => {\n const ranges = getMarkdownSourceAnalysis(raw);\n return inlineOnly ? ranges.inline : ranges.markdown;\n};\n\nexport const getInlineCodeRanges = (raw: string) =>\n raw.includes(\"`\") ? collectCodeRanges(raw, true) : EMPTY_RANGES;\n\nexport const getMarkdownCodeRanges = (raw: string) =>\n collectCodeRanges(raw, false);\n\n// Native HTML stays inert inside code, math, comments, image alt and metadata.\nexport const getMarkdownLiteralRanges = (raw: string) =>\n getMarkdownSourceAnalysis(raw).literal;\n\nexport const getMarkdownSourceTree = (raw: string): MarkdownSourceTree =>\n getMarkdownSourceAnalysis(raw).tree;\n"],"names":["parser","unified","remarkParse","remarkPlugins","MAX_CACHE_ENTRIES","MAX_CACHED_SOURCE_CHARACTERS","EMPTY_RANGES","sourceRangesCache","cachedSourceCharacters","freezeTree","value","child","findPendingLinkMetadataEnd","raw","start","depth","quote","angle","hasDestination","stage","newline","position","character","whitespace","findPendingDefinitionTitle","destinationStart","newlines","whitespaceStart","opener","titleStart","closer","isDefinitionLabelStart","collectLexicalRanges","literals","htmlBlocks","imageStarts","comments","metadata","labels","literalIndex","htmlBodyEnd","htmlNodeEnd","imageLabelStart","pendingImages","end","label","literal","fence","findResumedProseFence","tail","title","previous","markup","readHtmlMarkup","findStreamingHtmlBlockEnd","isHtmlRawTextTag","close","mergeMetadataRanges","ranges","left","right","merged","range","findImageLabelEnd","parseCodeRanges","tree","inline","markdown","flowRanges","interactions","html","definitionEnds","imageReferences","visit","node","_index","parent","metadataStart","imageAltEnd","labelEnd","isCode","resolvedMetadata","reference","ownedRanges","documentVariables","findDocumentVariableMarkers","variables","marker","protectedRanges","lexical","allMetadata","fences","lineStart","getMarkdownSourceAnalysis","cached","oldestSource","collectCodeRanges","inlineOnly","getInlineCodeRanges","getMarkdownCodeRanges"],"mappings":"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"}
@@ -17,6 +17,9 @@ export type MarkdownSourceAnalysis = {
17
17
  inline: readonly CodeRange[];
18
18
  markdown: readonly CodeRange[];
19
19
  literal: readonly CodeRange[];
20
+ variables: readonly CodeRange[];
21
+ documentVariables: readonly CodeRange[];
22
+ interactions: readonly CodeRange[];
20
23
  metadata: readonly MetadataRange[];
21
24
  comments: readonly CodeRange[];
22
25
  fences: readonly CodeRange[];