markdown-flow-ui 0.3.1 → 0.3.2-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 (115) hide show
  1. package/README.md +13 -0
  2. package/dist/_virtual/index.es3.js +4 -5
  3. package/dist/_virtual/index.es3.js.map +1 -1
  4. package/dist/_virtual/index.es4.js +5 -4
  5. package/dist/_virtual/index.es4.js.map +1 -1
  6. package/dist/_virtual/index.es6.js +5 -3
  7. package/dist/_virtual/index.es6.js.map +1 -1
  8. package/dist/_virtual/index.es7.js +3 -5
  9. package/dist/_virtual/index.es7.js.map +1 -1
  10. package/dist/_virtual/index3.cjs +1 -1
  11. package/dist/_virtual/index4.cjs +1 -1
  12. package/dist/_virtual/index6.cjs +1 -1
  13. package/dist/_virtual/index7.cjs +1 -1
  14. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs +1 -1
  15. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.cjs.map +1 -1
  16. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.d.ts +2 -0
  17. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js +440 -415
  18. package/dist/components/MarkdownFlowEditor/MarkdownFlowEditor.es.js.map +1 -1
  19. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs +1 -1
  20. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.cjs.map +1 -1
  21. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.d.ts +1 -0
  22. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js +71 -68
  23. package/dist/components/MarkdownFlowEditor/components/EditorToolbar.es.js.map +1 -1
  24. package/dist/components/MarkdownFlowEditor/editorI18n.d.ts +22 -0
  25. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.cjs +1 -1
  26. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.d.ts +2 -1
  27. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js +16 -14
  28. package/dist/components/MarkdownFlowEditor/locales/ar-SA.json.es.js.map +1 -1
  29. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.cjs +1 -1
  30. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.d.ts +2 -1
  31. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.es.js +19 -17
  32. package/dist/components/MarkdownFlowEditor/locales/de-DE.json.es.js.map +1 -1
  33. package/dist/components/MarkdownFlowEditor/locales/en-US.json.cjs +1 -1
  34. package/dist/components/MarkdownFlowEditor/locales/en-US.json.d.ts +2 -1
  35. package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js +15 -13
  36. package/dist/components/MarkdownFlowEditor/locales/en-US.json.es.js.map +1 -1
  37. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.cjs +1 -1
  38. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.d.ts +2 -1
  39. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.es.js +21 -19
  40. package/dist/components/MarkdownFlowEditor/locales/es-ES.json.es.js.map +1 -1
  41. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.cjs +1 -1
  42. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.d.ts +2 -1
  43. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.es.js +27 -25
  44. package/dist/components/MarkdownFlowEditor/locales/fil-PH.json.es.js.map +1 -1
  45. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.cjs +1 -1
  46. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.d.ts +2 -1
  47. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js +21 -19
  48. package/dist/components/MarkdownFlowEditor/locales/fr-FR.json.es.js.map +1 -1
  49. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.cjs +1 -1
  50. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.d.ts +2 -1
  51. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.es.js +19 -17
  52. package/dist/components/MarkdownFlowEditor/locales/ja-JP.json.es.js.map +1 -1
  53. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.cjs +1 -1
  54. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.d.ts +2 -1
  55. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js +18 -16
  56. package/dist/components/MarkdownFlowEditor/locales/th-TH.json.es.js.map +1 -1
  57. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.cjs +1 -1
  58. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.d.ts +2 -1
  59. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.es.js +17 -15
  60. package/dist/components/MarkdownFlowEditor/locales/ur-PK.json.es.js.map +1 -1
  61. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.cjs +1 -1
  62. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.d.ts +2 -1
  63. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.es.js +25 -23
  64. package/dist/components/MarkdownFlowEditor/locales/vi-VN.json.es.js.map +1 -1
  65. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.cjs +1 -1
  66. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.d.ts +2 -1
  67. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js +28 -26
  68. package/dist/components/MarkdownFlowEditor/locales/zh-CN.json.es.js.map +1 -1
  69. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs +3 -3
  70. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.cjs.map +1 -1
  71. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.d.ts +5 -1
  72. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js +154 -149
  73. package/dist/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.es.js.map +1 -1
  74. package/dist/components/MarkdownFlowEditor/utils.cjs +1 -1
  75. package/dist/components/MarkdownFlowEditor/utils.cjs.map +1 -1
  76. package/dist/components/MarkdownFlowEditor/utils.d.ts +2 -0
  77. package/dist/components/MarkdownFlowEditor/utils.es.js +54 -52
  78. package/dist/components/MarkdownFlowEditor/utils.es.js.map +1 -1
  79. package/dist/components/ui/inputGroup/textarea.cjs +1 -1
  80. package/dist/components/ui/inputGroup/textarea.es.js +1 -1
  81. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.cjs +1 -1
  82. package/dist/node_modules/hast-util-to-jsx-runtime/lib/index.es.js +1 -1
  83. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-5PPSVZJV.cjs +1 -1
  84. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/c4Diagram-5PPSVZJV.es.js +1 -1
  85. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-2GRJ4B5K.cjs +1 -1
  86. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-2GRJ4B5K.es.js +1 -1
  87. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-NSK5VX7P.cjs +1 -1
  88. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/chunk-NSK5VX7P.es.js +1 -1
  89. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-JCYQIIEL.cjs +1 -1
  90. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-JCYQIIEL.es.js +1 -1
  91. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-OCEON4UE.cjs +1 -1
  92. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/classDiagram-v2-OCEON4UE.es.js +1 -1
  93. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-UKHOOZJN.cjs +1 -1
  94. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/flowDiagram-UKHOOZJN.es.js +1 -1
  95. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-PKOTCBZU.cjs +1 -1
  96. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/ganttDiagram-PKOTCBZU.es.js +1 -1
  97. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-SI44F4Z6.cjs +1 -1
  98. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/sequenceDiagram-SI44F4Z6.es.js +1 -1
  99. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-OKZ733FA.cjs +1 -1
  100. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-OKZ733FA.es.js +1 -1
  101. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-UEYNNEHI.cjs +1 -1
  102. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-UEYNNEHI.es.js +1 -1
  103. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-ULZ7WXOC.cjs +1 -1
  104. package/dist/node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-ULZ7WXOC.es.js +1 -1
  105. package/dist/node_modules/rc-input/es/BaseInput.cjs +1 -1
  106. package/dist/node_modules/rc-input/es/BaseInput.es.js +1 -1
  107. package/dist/node_modules/rc-textarea/es/ResizableTextArea.cjs +1 -1
  108. package/dist/node_modules/rc-textarea/es/ResizableTextArea.es.js +1 -1
  109. package/dist/node_modules/rc-textarea/es/TextArea.cjs +1 -1
  110. package/dist/node_modules/rc-textarea/es/TextArea.es.js +1 -1
  111. package/dist/node_modules/rc-textarea/es/index.cjs +1 -1
  112. package/dist/node_modules/rc-textarea/es/index.es.js +1 -1
  113. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.cjs +1 -1
  114. package/dist/node_modules/remark-flow/dist/interaction-plugin-core.es.js +1 -1
  115. package/package.json +1 -1
@@ -65,7 +65,8 @@ declare const _default: {
65
65
  "toolbarInsertInput": "Chèn ô nhập liệu",
66
66
  "toolbarInputPlaceholder": "Vui lòng nhập",
67
67
  "toolbarInsertImage": "Chèn hình ảnh",
68
- "toolbarInsertVideo": "Chèn video"
68
+ "toolbarInsertVideo": "Chèn video",
69
+ "questionPlaceholder": "Câu hỏi của bạn"
69
70
  }
70
71
  ;
71
72
 
@@ -1,12 +1,12 @@
1
- const n = "Nhập '/' để chèn nội dung", o = "Nhập nội dung của bạn", t = "Nhập nội dung của bạn, gõ '/' để xem thêm tùy chọn", e = "Cài đặt", i = "Đóng", l = "Thêm hình ảnh", a = "Thêm video", c = "Nhập URL hình ảnh", dn = "URL", h = "Xem trước", s = "Nhập tiêu đề hình ảnh", d = "Dùng hình ảnh", r = "Tên hình ảnh", b = "Tải lên", u = "Kéo thả tệp vào đây hoặc nhấp để tải lên", g = "Đang tải lên...", v = "Tải lên thành công", m = "Tải lên thất bại, vui lòng thử lại", p = "Thêm văn bản cố định", T = "Văn bản cố định", C = "Đường phân cách", U = "Tiêu đề hình ảnh", B = "Tỷ lệ", rn = "Hủy", L = "Nhập URL hình ảnh", I = "Nhập URL hình ảnh hợp lệ", N = "Nhập URL video Bilibili hoặc YouTube", bn = "URL", V = "Xem trước", x = "Dùng tài nguyên", P = "Nhập tiêu đề video", y = "Tiêu đề", R = "Tiêu đề video", D = "Video Bilibili", f = "Video YouTube", k = "Nhập URL video Bilibili hoặc YouTube hợp lệ", un = "Hủy", S = "Dùng video", E = "Bản xem trước sẽ xuất hiện ở đây", w = "Xem trước video", Y = "Hình ảnh", H = "Video", O = "Biến", X = "Văn bản cố định", q = "Chọn biến", A = "Tìm biến", F = "Không tìm thấy biến nào", K = "Chưa có biến nào", M = "Tên biến", Q = "Biến đã tồn tại", j = "Dùng tên không rỗng, không có ký tự điều khiển, xuống dòng hoặc }}", z = "Biến hệ thống", G = "Biến tùy chỉnh", J = "Thêm biến", W = "Chèn biến mới", Z = "Chèn biến đã có", _ = "Chèn kết quả xác nhận", $ = "Chèn liên kết", nn = "Chèn nút", on = "Chèn lựa chọn đơn", tn = "Lựa chọn 1", en = "Lựa chọn 2", ln = "Chèn lựa chọn nhiều đáp án", an = "Chèn ô nhập liệu", cn = "Vui lòng nhập", hn = "Chèn hình ảnh", sn = "Chèn video", gn = {
1
+ const n = "Nhập '/' để chèn nội dung", o = "Nhập nội dung của bạn", t = "Nhập nội dung của bạn, gõ '/' để xem thêm tùy chọn", e = "Cài đặt", i = "Đóng", l = "Thêm hình ảnh", c = "Thêm video", a = "Nhập URL hình ảnh", rn = "URL", h = "Xem trước", s = "Nhập tiêu đề hình ảnh", d = "Dùng hình ảnh", r = "Tên hình ảnh", b = "Tải lên", u = "Kéo thả tệp vào đây hoặc nhấp để tải lên", g = "Đang tải lên...", v = "Tải lên thành công", m = "Tải lên thất bại, vui lòng thử lại", p = "Thêm văn bản cố định", T = "Văn bản cố định", C = "Đường phân cách", U = "Tiêu đề hình ảnh", B = "Tỷ lệ", bn = "Hủy", L = "Nhập URL hình ảnh", I = "Nhập URL hình ảnh hợp lệ", N = "Nhập URL video Bilibili hoặc YouTube", un = "URL", V = "Xem trước", x = "Dùng tài nguyên", P = "Nhập tiêu đề video", y = "Tiêu đề", R = "Tiêu đề video", D = "Video Bilibili", f = "Video YouTube", k = "Nhập URL video Bilibili hoặc YouTube hợp lệ", gn = "Hủy", S = "Dùng video", E = "Bản xem trước sẽ xuất hiện ở đây", w = "Xem trước video", Y = "Hình ảnh", q = "Video", H = "Biến", O = "Văn bản cố định", X = "Chọn biến", A = "Tìm biến", F = "Không tìm thấy biến nào", K = "Chưa có biến nào", M = "Tên biến", Q = "Biến đã tồn tại", j = "Dùng tên không rỗng, không có ký tự điều khiển, xuống dòng hoặc }}", z = "Biến hệ thống", G = "Biến tùy chỉnh", J = "Thêm biến", W = "Chèn biến mới", Z = "Chèn biến đã có", _ = "Chèn kết quả xác nhận", $ = "Chèn liên kết", nn = "Chèn nút", on = "Chèn lựa chọn đơn", tn = "Lựa chọn 1", en = "Lựa chọn 2", ln = "Chèn lựa chọn nhiều đáp án", cn = "Chèn ô nhập liệu", an = "Vui lòng nhập", hn = "Chèn hình ảnh", sn = "Chèn video", dn = "Câu hỏi của bạn", vn = {
2
2
  placeholder: n,
3
3
  placeholderCodeEdit: o,
4
4
  placeholderQuickEdit: t,
5
5
  dialogTitle: e,
6
6
  dialogCloseLabel: i,
7
7
  dialogTitleImage: l,
8
- dialogTitleVideo: a,
9
- imageUrlPlaceholder: c,
8
+ dialogTitleVideo: c,
9
+ imageUrlPlaceholder: a,
10
10
  imageUrlLabel: "URL",
11
11
  imageRunButton: h,
12
12
  imageTitlePlaceholder: s,
@@ -40,10 +40,10 @@ const n = "Nhập '/' để chèn nội dung", o = "Nhập nội dung của bạ
40
40
  videoPreviewPlaceholder: E,
41
41
  videoPreviewTitle: w,
42
42
  slashImage: Y,
43
- slashVideo: H,
44
- slashVariable: O,
45
- slashFixedText: X,
46
- dialogTitleVariable: q,
43
+ slashVideo: q,
44
+ slashVariable: H,
45
+ slashFixedText: O,
46
+ dialogTitleVariable: X,
47
47
  variableSearchPlaceholder: A,
48
48
  variableNotFound: F,
49
49
  variableEmpty: K,
@@ -62,21 +62,22 @@ const n = "Nhập '/' để chèn nội dung", o = "Nhập nội dung của bạ
62
62
  toolbarChoiceOption1: tn,
63
63
  toolbarChoiceOption2: en,
64
64
  toolbarInsertMultiChoice: ln,
65
- toolbarInsertInput: an,
66
- toolbarInputPlaceholder: cn,
65
+ toolbarInsertInput: cn,
66
+ toolbarInputPlaceholder: an,
67
67
  toolbarInsertImage: hn,
68
- toolbarInsertVideo: sn
68
+ toolbarInsertVideo: sn,
69
+ questionPlaceholder: dn
69
70
  };
70
71
  export {
71
- gn as default,
72
+ vn as default,
72
73
  i as dialogCloseLabel,
73
74
  e as dialogTitle,
74
75
  l as dialogTitleImage,
75
- q as dialogTitleVariable,
76
- a as dialogTitleVideo,
76
+ X as dialogTitleVariable,
77
+ c as dialogTitleVideo,
77
78
  p as fixedTextPlaceholder,
78
79
  T as fixedTextTooltip,
79
- rn as imageCancelButton,
80
+ bn as imageCancelButton,
80
81
  r as imageDefaultTitle,
81
82
  I as imageInvalidUrl,
82
83
  h as imageRunButton,
@@ -88,26 +89,27 @@ export {
88
89
  u as imageUploadPlaceholder,
89
90
  v as imageUploadSuccess,
90
91
  g as imageUploading,
91
- dn as imageUrlLabel,
92
- c as imageUrlPlaceholder,
92
+ rn as imageUrlLabel,
93
+ a as imageUrlPlaceholder,
93
94
  L as imageUrlRequired,
94
95
  d as imageUseButton,
95
96
  n as placeholder,
96
97
  o as placeholderCodeEdit,
97
98
  t as placeholderQuickEdit,
99
+ dn as questionPlaceholder,
98
100
  C as slashDivider,
99
- X as slashFixedText,
101
+ O as slashFixedText,
100
102
  Y as slashImage,
101
- O as slashVariable,
102
- H as slashVideo,
103
+ H as slashVariable,
104
+ q as slashVideo,
103
105
  tn as toolbarChoiceOption1,
104
106
  en as toolbarChoiceOption2,
105
107
  _ as toolbarConfirmOutput,
106
- cn as toolbarInputPlaceholder,
108
+ an as toolbarInputPlaceholder,
107
109
  nn as toolbarInsertButton,
108
110
  Z as toolbarInsertExistingVariable,
109
111
  hn as toolbarInsertImage,
110
- an as toolbarInsertInput,
112
+ cn as toolbarInsertInput,
111
113
  $ as toolbarInsertLink,
112
114
  ln as toolbarInsertMultiChoice,
113
115
  W as toolbarInsertNewVariable,
@@ -122,7 +124,7 @@ export {
122
124
  A as variableSearchPlaceholder,
123
125
  G as variableSectionCustom,
124
126
  z as variableSectionSystem,
125
- un as videoCancelButton,
127
+ gn as videoCancelButton,
126
128
  R as videoDefaultTitle,
127
129
  D as videoDefaultTitleBilibili,
128
130
  f as videoDefaultTitleYoutube,
@@ -132,7 +134,7 @@ export {
132
134
  V as videoRunButton,
133
135
  y as videoTitleLabel,
134
136
  P as videoTitlePlaceholder,
135
- bn as videoUrlLabel,
137
+ un as videoUrlLabel,
136
138
  N as videoUrlPlaceholder,
137
139
  x as videoUseButton,
138
140
  S as videoUseVideoButton
@@ -1 +1 @@
1
- {"version":3,"file":"vi-VN.json.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"vi-VN.json.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="输入'/'快速插入内容",o="请输入你的内容",t="请输入你的内容,输入 / 唤起更多",l="设置",a="关闭",i="添加图片",n="添加视频",r="请输入图片地址",s="URL",c="预览",d="请输入图片标题",b="使用图片",u="图片名称",v="上传",g="拖拽文件或点击上传",m="正在上传...",h="上传完成",T="上传失败,请重试",I="添加固定文本",U="固定文本",p="分割线",P="图片标题",C="缩放比例",B="取消",L="请输入图片地址",f="请输入有效的图片地址",x="请输入 B 站或 YouTube 视频链接",S="URL",V="预览",E="使用资源",N="请输入视频标题",D="标题",w="视频标题",R="哔哩哔哩视频",y="YouTube 视频",O="请输入有效的 B 站或 YouTube 视频链接",Y="取消",k="使用视频",A="预览将在这里显示",F="视频预览",M="图片",q="视频",Q="变量",_="固定文本",j="选择变量",z="搜索变量",G="未找到变量",H="暂无变量",J="变量名称",K="变量已存在",W="名称不能为空,且不能包含控制字符、换行或连续两个右花括号",X="系统变量",Z="自定义变量",$="添加变量",ee="插入新变量",oe="插入已有变量",te="插入确定内容",le="插入链接",ae="插入按钮",ie="插入单选",ne="选项1",re="选项2",se="插入多选",ce="插入输入框",de="请输入",be="插入图片",ue="插入视频",ve={placeholder:e,placeholderCodeEdit:o,placeholderQuickEdit:t,dialogTitle:l,dialogCloseLabel:a,dialogTitleImage:i,dialogTitleVideo:n,imageUrlPlaceholder:r,imageUrlLabel:s,imageRunButton:c,imageTitlePlaceholder:d,imageUseButton:b,imageDefaultTitle:u,imageUploadLabel:v,imageUploadPlaceholder:g,imageUploading:m,imageUploadSuccess:h,imageUploadError:T,fixedTextPlaceholder:I,fixedTextTooltip:U,slashDivider:p,imageTitleLabel:P,imageScaleLabel:C,imageCancelButton:B,imageUrlRequired:L,imageInvalidUrl:f,videoUrlPlaceholder:x,videoUrlLabel:S,videoRunButton:V,videoUseButton:E,videoTitlePlaceholder:N,videoTitleLabel:D,videoDefaultTitle:w,videoDefaultTitleBilibili:R,videoDefaultTitleYoutube:y,videoInvalidUrl:O,videoCancelButton:Y,videoUseVideoButton:k,videoPreviewPlaceholder:A,videoPreviewTitle:F,slashImage:M,slashVideo:q,slashVariable:Q,slashFixedText:_,dialogTitleVariable:j,variableSearchPlaceholder:z,variableNotFound:G,variableEmpty:H,variableNamePlaceholder:J,variableAlreadyExists:K,variableNameInvalid:W,variableSectionSystem:X,variableSectionCustom:Z,variableAddNew:$,toolbarInsertNewVariable:ee,toolbarInsertExistingVariable:oe,toolbarConfirmOutput:te,toolbarInsertLink:le,toolbarInsertButton:ae,toolbarInsertSingleChoice:ie,toolbarChoiceOption1:ne,toolbarChoiceOption2:re,toolbarInsertMultiChoice:se,toolbarInsertInput:ce,toolbarInputPlaceholder:de,toolbarInsertImage:be,toolbarInsertVideo:ue};exports.default=ve;exports.dialogCloseLabel=a;exports.dialogTitle=l;exports.dialogTitleImage=i;exports.dialogTitleVariable=j;exports.dialogTitleVideo=n;exports.fixedTextPlaceholder=I;exports.fixedTextTooltip=U;exports.imageCancelButton=B;exports.imageDefaultTitle=u;exports.imageInvalidUrl=f;exports.imageRunButton=c;exports.imageScaleLabel=C;exports.imageTitleLabel=P;exports.imageTitlePlaceholder=d;exports.imageUploadError=T;exports.imageUploadLabel=v;exports.imageUploadPlaceholder=g;exports.imageUploadSuccess=h;exports.imageUploading=m;exports.imageUrlLabel=s;exports.imageUrlPlaceholder=r;exports.imageUrlRequired=L;exports.imageUseButton=b;exports.placeholder=e;exports.placeholderCodeEdit=o;exports.placeholderQuickEdit=t;exports.slashDivider=p;exports.slashFixedText=_;exports.slashImage=M;exports.slashVariable=Q;exports.slashVideo=q;exports.toolbarChoiceOption1=ne;exports.toolbarChoiceOption2=re;exports.toolbarConfirmOutput=te;exports.toolbarInputPlaceholder=de;exports.toolbarInsertButton=ae;exports.toolbarInsertExistingVariable=oe;exports.toolbarInsertImage=be;exports.toolbarInsertInput=ce;exports.toolbarInsertLink=le;exports.toolbarInsertMultiChoice=se;exports.toolbarInsertNewVariable=ee;exports.toolbarInsertSingleChoice=ie;exports.toolbarInsertVideo=ue;exports.variableAddNew=$;exports.variableAlreadyExists=K;exports.variableEmpty=H;exports.variableNameInvalid=W;exports.variableNamePlaceholder=J;exports.variableNotFound=G;exports.variableSearchPlaceholder=z;exports.variableSectionCustom=Z;exports.variableSectionSystem=X;exports.videoCancelButton=Y;exports.videoDefaultTitle=w;exports.videoDefaultTitleBilibili=R;exports.videoDefaultTitleYoutube=y;exports.videoInvalidUrl=O;exports.videoPreviewPlaceholder=A;exports.videoPreviewTitle=F;exports.videoRunButton=V;exports.videoTitleLabel=D;exports.videoTitlePlaceholder=N;exports.videoUrlLabel=S;exports.videoUrlPlaceholder=x;exports.videoUseButton=E;exports.videoUseVideoButton=k;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e="输入'/'快速插入内容",o="请输入你的内容",t="请输入你的内容,输入 / 唤起更多",l="设置",a="关闭",i="添加图片",n="添加视频",r="请输入图片地址",s="URL",c="预览",d="请输入图片标题",b="使用图片",u="图片名称",v="上传",g="拖拽文件或点击上传",m="正在上传...",h="上传完成",T="上传失败,请重试",I="添加固定文本",U="固定文本",p="分割线",P="图片标题",C="缩放比例",B="取消",L="请输入图片地址",f="请输入有效的图片地址",x="请输入 B 站或 YouTube 视频链接",S="URL",V="预览",E="使用资源",N="请输入视频标题",D="标题",w="视频标题",R="哔哩哔哩视频",y="YouTube 视频",O="请输入有效的 B 站或 YouTube 视频链接",Y="取消",k="使用视频",q="预览将在这里显示",A="视频预览",F="图片",M="视频",Q="变量",_="固定文本",j="选择变量",z="搜索变量",G="未找到变量",H="暂无变量",J="变量名称",K="变量已存在",W="名称不能为空,且不能包含控制字符、换行或连续两个右花括号",X="系统变量",Z="自定义变量",$="添加变量",ee="插入新变量",oe="插入已有变量",te="插入确定内容",le="插入链接",ae="插入按钮",ie="插入单选",ne="选项1",re="选项2",se="插入多选",ce="插入输入框",de="请输入",be="插入图片",ue="插入视频",ve="你的问题",ge={placeholder:e,placeholderCodeEdit:o,placeholderQuickEdit:t,dialogTitle:l,dialogCloseLabel:a,dialogTitleImage:i,dialogTitleVideo:n,imageUrlPlaceholder:r,imageUrlLabel:s,imageRunButton:c,imageTitlePlaceholder:d,imageUseButton:b,imageDefaultTitle:u,imageUploadLabel:v,imageUploadPlaceholder:g,imageUploading:m,imageUploadSuccess:h,imageUploadError:T,fixedTextPlaceholder:I,fixedTextTooltip:U,slashDivider:p,imageTitleLabel:P,imageScaleLabel:C,imageCancelButton:B,imageUrlRequired:L,imageInvalidUrl:f,videoUrlPlaceholder:x,videoUrlLabel:S,videoRunButton:V,videoUseButton:E,videoTitlePlaceholder:N,videoTitleLabel:D,videoDefaultTitle:w,videoDefaultTitleBilibili:R,videoDefaultTitleYoutube:y,videoInvalidUrl:O,videoCancelButton:Y,videoUseVideoButton:k,videoPreviewPlaceholder:q,videoPreviewTitle:A,slashImage:F,slashVideo:M,slashVariable:Q,slashFixedText:_,dialogTitleVariable:j,variableSearchPlaceholder:z,variableNotFound:G,variableEmpty:H,variableNamePlaceholder:J,variableAlreadyExists:K,variableNameInvalid:W,variableSectionSystem:X,variableSectionCustom:Z,variableAddNew:$,toolbarInsertNewVariable:ee,toolbarInsertExistingVariable:oe,toolbarConfirmOutput:te,toolbarInsertLink:le,toolbarInsertButton:ae,toolbarInsertSingleChoice:ie,toolbarChoiceOption1:ne,toolbarChoiceOption2:re,toolbarInsertMultiChoice:se,toolbarInsertInput:ce,toolbarInputPlaceholder:de,toolbarInsertImage:be,toolbarInsertVideo:ue,questionPlaceholder:ve};exports.default=ge;exports.dialogCloseLabel=a;exports.dialogTitle=l;exports.dialogTitleImage=i;exports.dialogTitleVariable=j;exports.dialogTitleVideo=n;exports.fixedTextPlaceholder=I;exports.fixedTextTooltip=U;exports.imageCancelButton=B;exports.imageDefaultTitle=u;exports.imageInvalidUrl=f;exports.imageRunButton=c;exports.imageScaleLabel=C;exports.imageTitleLabel=P;exports.imageTitlePlaceholder=d;exports.imageUploadError=T;exports.imageUploadLabel=v;exports.imageUploadPlaceholder=g;exports.imageUploadSuccess=h;exports.imageUploading=m;exports.imageUrlLabel=s;exports.imageUrlPlaceholder=r;exports.imageUrlRequired=L;exports.imageUseButton=b;exports.placeholder=e;exports.placeholderCodeEdit=o;exports.placeholderQuickEdit=t;exports.questionPlaceholder=ve;exports.slashDivider=p;exports.slashFixedText=_;exports.slashImage=F;exports.slashVariable=Q;exports.slashVideo=M;exports.toolbarChoiceOption1=ne;exports.toolbarChoiceOption2=re;exports.toolbarConfirmOutput=te;exports.toolbarInputPlaceholder=de;exports.toolbarInsertButton=ae;exports.toolbarInsertExistingVariable=oe;exports.toolbarInsertImage=be;exports.toolbarInsertInput=ce;exports.toolbarInsertLink=le;exports.toolbarInsertMultiChoice=se;exports.toolbarInsertNewVariable=ee;exports.toolbarInsertSingleChoice=ie;exports.toolbarInsertVideo=ue;exports.variableAddNew=$;exports.variableAlreadyExists=K;exports.variableEmpty=H;exports.variableNameInvalid=W;exports.variableNamePlaceholder=J;exports.variableNotFound=G;exports.variableSearchPlaceholder=z;exports.variableSectionCustom=Z;exports.variableSectionSystem=X;exports.videoCancelButton=Y;exports.videoDefaultTitle=w;exports.videoDefaultTitleBilibili=R;exports.videoDefaultTitleYoutube=y;exports.videoInvalidUrl=O;exports.videoPreviewPlaceholder=q;exports.videoPreviewTitle=A;exports.videoRunButton=V;exports.videoTitleLabel=D;exports.videoTitlePlaceholder=N;exports.videoUrlLabel=S;exports.videoUrlPlaceholder=x;exports.videoUseButton=E;exports.videoUseVideoButton=k;
2
2
  //# sourceMappingURL=zh-CN.json.cjs.map
@@ -65,7 +65,8 @@ declare const _default: {
65
65
  "toolbarInsertInput": "插入输入框",
66
66
  "toolbarInputPlaceholder": "请输入",
67
67
  "toolbarInsertImage": "插入图片",
68
- "toolbarInsertVideo": "插入视频"
68
+ "toolbarInsertVideo": "插入视频",
69
+ "questionPlaceholder": "你的问题"
69
70
  }
70
71
  ;
71
72
 
@@ -1,4 +1,4 @@
1
- const o = "输入'/'快速插入内容", e = "请输入你的内容", t = "请输入你的内容,输入 / 唤起更多", X = "设置", Z = "关闭", l = "添加图片", a = "添加视频", i = "请输入图片地址", _ = "URL", $ = "预览", n = "请输入图片标题", s = "使用图片", c = "图片名称", oo = "上传", r = "拖拽文件或点击上传", d = "正在上传...", b = "上传完成", u = "上传失败,请重试", g = "添加固定文本", v = "固定文本", eo = "分割线", h = "图片标题", m = "缩放比例", to = "取消", T = "请输入图片地址", p = "请输入有效的图片地址", U = "请输入 B 站或 YouTube 视频链接", lo = "URL", ao = "预览", I = "使用资源", C = "请输入视频标题", io = "标题", B = "视频标题", L = "哔哩哔哩视频", P = "YouTube 视频", V = "请输入有效的 B 站或 YouTube 视频链接", no = "取消", x = "使用视频", f = "预览将在这里显示", R = "视频预览", so = "图片", co = "视频", ro = "变量", S = "固定文本", D = "选择变量", E = "搜索变量", N = "未找到变量", O = "暂无变量", w = "变量名称", Y = "变量已存在", y = "名称不能为空,且不能包含控制字符、换行或连续两个右花括号", k = "系统变量", A = "自定义变量", F = "添加变量", q = "插入新变量", z = "插入已有变量", M = "插入确定内容", Q = "插入链接", j = "插入按钮", G = "插入单选", bo = "选项1", uo = "选项2", H = "插入多选", J = "插入输入框", go = "请输入", K = "插入图片", W = "插入视频", vo = {
1
+ const o = "输入'/'快速插入内容", e = "请输入你的内容", t = "请输入你的内容,输入 / 唤起更多", Z = "设置", _ = "关闭", l = "添加图片", a = "添加视频", i = "请输入图片地址", $ = "URL", oo = "预览", n = "请输入图片标题", s = "使用图片", c = "图片名称", eo = "上传", r = "拖拽文件或点击上传", d = "正在上传...", b = "上传完成", u = "上传失败,请重试", g = "添加固定文本", v = "固定文本", to = "分割线", h = "图片标题", m = "缩放比例", lo = "取消", T = "请输入图片地址", p = "请输入有效的图片地址", U = "请输入 B 站或 YouTube 视频链接", ao = "URL", io = "预览", I = "使用资源", C = "请输入视频标题", no = "标题", B = "视频标题", L = "哔哩哔哩视频", P = "YouTube 视频", V = "请输入有效的 B 站或 YouTube 视频链接", so = "取消", x = "使用视频", f = "预览将在这里显示", R = "视频预览", co = "图片", ro = "视频", bo = "变量", S = "固定文本", D = "选择变量", E = "搜索变量", N = "未找到变量", O = "暂无变量", w = "变量名称", Y = "变量已存在", y = "名称不能为空,且不能包含控制字符、换行或连续两个右花括号", k = "系统变量", q = "自定义变量", A = "添加变量", F = "插入新变量", z = "插入已有变量", M = "插入确定内容", Q = "插入链接", j = "插入按钮", G = "插入单选", uo = "选项1", go = "选项2", H = "插入多选", J = "插入输入框", vo = "请输入", K = "插入图片", W = "插入视频", X = "你的问题", ho = {
2
2
  placeholder: o,
3
3
  placeholderCodeEdit: e,
4
4
  placeholderQuickEdit: t,
@@ -51,9 +51,9 @@ const o = "输入'/'快速插入内容", e = "请输入你的内容", t = "请
51
51
  variableAlreadyExists: Y,
52
52
  variableNameInvalid: y,
53
53
  variableSectionSystem: k,
54
- variableSectionCustom: A,
55
- variableAddNew: F,
56
- toolbarInsertNewVariable: q,
54
+ variableSectionCustom: q,
55
+ variableAddNew: A,
56
+ toolbarInsertNewVariable: F,
57
57
  toolbarInsertExistingVariable: z,
58
58
  toolbarConfirmOutput: M,
59
59
  toolbarInsertLink: Q,
@@ -65,74 +65,76 @@ const o = "输入'/'快速插入内容", e = "请输入你的内容", t = "请
65
65
  toolbarInsertInput: J,
66
66
  toolbarInputPlaceholder: "请输入",
67
67
  toolbarInsertImage: K,
68
- toolbarInsertVideo: W
68
+ toolbarInsertVideo: W,
69
+ questionPlaceholder: X
69
70
  };
70
71
  export {
71
- vo as default,
72
- Z as dialogCloseLabel,
73
- X as dialogTitle,
72
+ ho as default,
73
+ _ as dialogCloseLabel,
74
+ Z as dialogTitle,
74
75
  l as dialogTitleImage,
75
76
  D as dialogTitleVariable,
76
77
  a as dialogTitleVideo,
77
78
  g as fixedTextPlaceholder,
78
79
  v as fixedTextTooltip,
79
- to as imageCancelButton,
80
+ lo as imageCancelButton,
80
81
  c as imageDefaultTitle,
81
82
  p as imageInvalidUrl,
82
- $ as imageRunButton,
83
+ oo as imageRunButton,
83
84
  m as imageScaleLabel,
84
85
  h as imageTitleLabel,
85
86
  n as imageTitlePlaceholder,
86
87
  u as imageUploadError,
87
- oo as imageUploadLabel,
88
+ eo as imageUploadLabel,
88
89
  r as imageUploadPlaceholder,
89
90
  b as imageUploadSuccess,
90
91
  d as imageUploading,
91
- _ as imageUrlLabel,
92
+ $ as imageUrlLabel,
92
93
  i as imageUrlPlaceholder,
93
94
  T as imageUrlRequired,
94
95
  s as imageUseButton,
95
96
  o as placeholder,
96
97
  e as placeholderCodeEdit,
97
98
  t as placeholderQuickEdit,
98
- eo as slashDivider,
99
+ X as questionPlaceholder,
100
+ to as slashDivider,
99
101
  S as slashFixedText,
100
- so as slashImage,
101
- ro as slashVariable,
102
- co as slashVideo,
103
- bo as toolbarChoiceOption1,
104
- uo as toolbarChoiceOption2,
102
+ co as slashImage,
103
+ bo as slashVariable,
104
+ ro as slashVideo,
105
+ uo as toolbarChoiceOption1,
106
+ go as toolbarChoiceOption2,
105
107
  M as toolbarConfirmOutput,
106
- go as toolbarInputPlaceholder,
108
+ vo as toolbarInputPlaceholder,
107
109
  j as toolbarInsertButton,
108
110
  z as toolbarInsertExistingVariable,
109
111
  K as toolbarInsertImage,
110
112
  J as toolbarInsertInput,
111
113
  Q as toolbarInsertLink,
112
114
  H as toolbarInsertMultiChoice,
113
- q as toolbarInsertNewVariable,
115
+ F as toolbarInsertNewVariable,
114
116
  G as toolbarInsertSingleChoice,
115
117
  W as toolbarInsertVideo,
116
- F as variableAddNew,
118
+ A as variableAddNew,
117
119
  Y as variableAlreadyExists,
118
120
  O as variableEmpty,
119
121
  y as variableNameInvalid,
120
122
  w as variableNamePlaceholder,
121
123
  N as variableNotFound,
122
124
  E as variableSearchPlaceholder,
123
- A as variableSectionCustom,
125
+ q as variableSectionCustom,
124
126
  k as variableSectionSystem,
125
- no as videoCancelButton,
127
+ so as videoCancelButton,
126
128
  B as videoDefaultTitle,
127
129
  L as videoDefaultTitleBilibili,
128
130
  P as videoDefaultTitleYoutube,
129
131
  V as videoInvalidUrl,
130
132
  f as videoPreviewPlaceholder,
131
133
  R as videoPreviewTitle,
132
- ao as videoRunButton,
133
- io as videoTitleLabel,
134
+ io as videoRunButton,
135
+ no as videoTitleLabel,
134
136
  C as videoTitlePlaceholder,
135
- lo as videoUrlLabel,
137
+ ao as videoUrlLabel,
136
138
  U as videoUrlPlaceholder,
137
139
  I as videoUseButton,
138
140
  x as videoUseVideoButton
@@ -1 +1 @@
1
- {"version":3,"file":"zh-CN.json.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"zh-CN.json.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const A=require("../../../node_modules/@codemirror/view/dist/index.cjs"),P=require("../../../node_modules/@codemirror/state/dist/index.cjs"),_=require("../../ContentRender/utils/inline-code-ranges.cjs"),R=require("../../../_virtual/index.cjs"),F=/<!--[\s\S]*?-->/g,W=n=>{const i=R.distExports.findVariableMarkers(n),f=n.indexOf("{{",i.at(-1)?.end??0);return f===-1?i:[...i,{start:f,end:n.length,name:null}]},M=new RegExp(`\\?\\[(${R.distExports.INTERACTION_CONTENT_SOURCE})\\](?!\\()`,"g"),$=n=>_.getMarkdownSourceAnalysis(n).interactions;function L(n,i){const f=[];let l=null,s=0;for(;s<=n.length;){const u=n.indexOf(`
2
- `,s),e=u===-1?n.length:u;if(n.slice(s,e).trim()==="!==="&&!i(s)&&(l===null?l=s:(f.push({from:l,to:e,className:"syntax-fixed"}),l=null)),u===-1)break;s=u+1}return f}function j(n,i,f){const l=[];let s=0;const u=t=>{for(;s<i.length&&i[s].to<=t;)s++;const r=i[s];return!!r&&t>=r.from&&t<r.to};let e=0;for(;e<=n.length;){const t=n.indexOf(`
3
- `,e),r=t===-1?n.length:t,d=n.slice(e,r),x=[];let g=0;for(;g<d.length;){const c=d.indexOf("===",g);if(c===-1)break;const p=e+c;!(p>0&&n[p-1]==="!")&&!u(p)&&!f(p)&&x.push(p),g=c+3}for(let c=0;c+1<x.length;c+=2)l.push({from:x[c],to:x[c+1]+3,className:"syntax-fixed"});if(t===-1)break;e=t+1}return l}function T(n,i){const f=[];let l;for(F.lastIndex=0;(l=F.exec(n))!==null;)i(l.index)||f.push({from:l.index,to:l.index+l[0].length,className:"syntax-comment"});return f}function B(n){const i=R.distExports.findDocumentVariableMarkers(n),f=e=>i.some(t=>e>=t.start&&e<t.end),l=T(n,f),s=[...L(n,f),...j(n,l,f),...l].sort((e,t)=>e.from!==t.from?e.from-t.from:t.to-e.to),u=[];for(const e of s){const t=u[u.length-1];(!t||e.from>=t.to)&&u.push(e)}return u}function D(n,i=()=>!1){const f=[],l=R.distExports.findDocumentVariableMarkers(n),s=[];M.lastIndex=0;const u=(t,r)=>s.some(d=>!(r<=d.from||t>=d.to)),e=(t,r,d)=>t>=r||u(t,r)?!1:(s.push({from:t,to:r}),f.push({from:t,to:r,className:d}),!0);for(const t of B(n))e(t.from,t.to,t.className);for(const t of $(n)){M.lastIndex=t.start;const r=M.exec(n);if(!r||r.index!==t.start||r.index+r[0].length!==t.end)continue;const d=r.index,x=r.index+r[0].length,g=r[1],c=d+2;if(u(d,x)||l.some(b=>b.start<=d&&d<b.end))continue;e(d,d+1,"syntax-keyword"),e(d+1,d+2,"syntax-bracket"),e(x-1,x,"syntax-bracket");const p=W(g),y=p[0],E=y?y.start-1:-1,V=E>=0&&g[E]==="%"&&R.distExports.trimVariablePadding(g.slice(0,E))==="";if(g.startsWith("%")||V){let b="syntax-percent-invalid";if(y&&V){const o=c+y.start,h=c+y.end,I=i(o,h);b=y.name!==null&&!I?"syntax-percent-valid":"syntax-percent-invalid"}const v=c+(V?E:0);e(v,v+1,b);const O=[],S=[],N=[];for(const o of p)S.push({from:c+o.start,to:c+o.end,className:o.name===null?"syntax-variable-invalid":"syntax-variable"});let m=0;for(;m<g.length;){const o=S.find(I=>c+m===I.from);if(o){m=o.to-c;continue}if(R.distExports.isEscape(g,m)){m+=2;continue}const h=g.startsWith("||",m)?"||":g[m]==="|"?"|":g.startsWith("...",m)?"...":null;if(!h){m+=1;continue}O.push({from:c+m,to:c+m+h.length}),m+=h.length}const a=[...O.map(o=>({...o,className:"syntax-keyword"})),...S.map(o=>({...o,className:o.className}))].sort((o,h)=>o.from!==h.from?o.from-h.from:o.to-h.to);for(const o of a)o.className.startsWith("syntax-variable")&&i(o.from,o.to)||e(o.from,o.to,o.className)&&N.push({from:o.from,to:o.to});const w=v+1,C=x-1;let k=w;const H=N.sort((o,h)=>o.from!==h.from?o.from-h.from:o.to-h.to);for(const o of H)k<o.from&&e(k,o.from,"syntax-string"),k=Math.max(k,o.to);k<C&&e(k,C,"syntax-string")}else{const b=[],v=[];for(const a of W(g))b.push({from:c+a.start,to:c+a.end,className:a.name===null?"syntax-variable-invalid":"syntax-variable"});const O=b.sort((a,w)=>a.from!==w.from?a.from-w.from:a.to-w.to);for(const a of O)a.className.startsWith("syntax-variable")&&i(a.from,a.to)||e(a.from,a.to,a.className)&&v.push({from:a.from,to:a.to});const S=c,N=x-1;let m=S;for(const a of v)m<a.from&&e(m,a.from,"syntax-button-text"),m=Math.max(m,a.to);m<N&&e(m,N,"syntax-button-text")}}for(const t of l)t.name!==null&&!i(t.start,t.end)&&e(t.start,t.end,"syntax-variable");return f.sort((t,r)=>t.from!==r.from?t.from-r.from:r.to-t.to),f}function q(n){const i=new P.RangeSetBuilder,f=n.state.doc.toString(),l=D(f,(s,u)=>n.state.selection.ranges.some(e=>e.from>=s&&e.to<=u));for(const s of l)if(s.from<s.to)try{i.add(s.from,s.to,A.Decoration.mark({class:s.className}))}catch(u){console.warn("SyntaxHighlighter: Failed to add decoration",s,u)}return i.finish()}const U=A.ViewPlugin.fromClass(class{constructor(n){this.decorations=q(n)}update(n){(n.docChanged||n.viewportChanged||n.selectionSet)&&(this.decorations=q(n.view))}},{decorations:n=>n.decorations});exports.collectOuterBlockRanges=B;exports.collectSyntaxHighlightRanges=D;exports.default=U;
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const B=require("../../../node_modules/@codemirror/view/dist/index.cjs"),$=require("../../../node_modules/@codemirror/state/dist/index.cjs"),L=require("../../ContentRender/utils/inline-code-ranges.cjs"),k=require("../../../_virtual/index.cjs"),F=/<!--[\s\S]*?-->/g,W=n=>{const s=k.distExports.findVariableMarkers(n),f=n.indexOf("{{",s.at(-1)?.end??0);return f===-1?s:[...s,{start:f,end:n.length,name:null}]},C=new RegExp(`\\?\\[(${k.distExports.INTERACTION_CONTENT_SOURCE})\\](?!\\()`,"g"),Q=n=>L.getMarkdownSourceAnalysis(n).interactions;function j(n,s){const f=[];let i=null,d=0;for(;d<=n.length;){const a=n.indexOf(`
2
+ `,d),r=a===-1?n.length:a;if(n.slice(d,r).trim()==="!==="&&!s(d)&&(i===null?i=d:(f.push({from:i,to:r,className:"syntax-fixed"}),i=null)),a===-1)break;d=a+1}return f}function T(n,s,f){const i=[];let d=0;const a=t=>{for(;d<s.length&&s[d].to<=t;)d++;const o=s[d];return!!o&&t>=o.from&&t<o.to};let r=0;for(;r<=n.length;){const t=n.indexOf(`
3
+ `,r),o=t===-1?n.length:t,l=n.slice(r,o),g=[];let p=0;for(;p<l.length;){const m=l.indexOf("===",p);if(m===-1)break;const h=r+m;!(h>0&&n[h-1]==="!")&&!a(h)&&!f(h)&&g.push(h),p=m+3}for(let m=0;m+1<g.length;m+=2)i.push({from:g[m],to:g[m+1]+3,className:"syntax-fixed"});if(t===-1)break;r=t+1}return i}function U(n,s){const f=[];let i;for(F.lastIndex=0;(i=F.exec(n))!==null;)s(i.index)||f.push({from:i.index,to:i.index+i[0].length,className:"syntax-comment"});return f}function D(n){const s=k.distExports.findDocumentVariableMarkers(n),f=r=>s.some(t=>r>=t.start&&r<t.end),i=U(n,f),d=[...j(n,f),...T(n,i,f),...i].sort((r,t)=>r.from!==t.from?r.from-t.from:t.to-r.to),a=[];for(const r of d){const t=a[a.length-1];(!t||r.from>=t.to)&&a.push(r)}return a}function P(n,s=()=>!1,f=!1){const i=[],d=k.distExports.findDocumentVariableMarkers(n),a=[];C.lastIndex=0;const r=(o,l)=>a.some(g=>!(l<=g.from||o>=g.to)),t=(o,l,g)=>o>=l||r(o,l)?!1:(a.push({from:o,to:l}),i.push({from:o,to:l,className:g}),!0);for(const o of D(n))t(o.from,o.to,o.className);for(const o of Q(n)){C.lastIndex=o.start;const l=C.exec(n);if(!l||l.index!==o.start||l.index+l[0].length!==o.end)continue;const g=l.index,p=l.index+l[0].length,m=l[1],h=g+2;if(r(g,p)||d.some(y=>y.start<=g&&g<y.end))continue;t(g,g+1,"syntax-keyword"),t(g+1,g+2,"syntax-bracket"),t(p-1,p,"syntax-bracket");const V=W(m),b=V[0],E=b?b.start-1:-1,I=E>=0&&m[E]==="%"&&k.distExports.trimVariablePadding(m.slice(0,E))==="";if(m.startsWith("%")||I){let y="syntax-percent-invalid";if(b&&I){const e=h+b.start,x=h+b.end,M=s(e,x);y=b.name!==null&&!M?"syntax-percent-valid":"syntax-percent-invalid"}const v=h+(I?E:0);t(v,v+1,y);const O=[],R=[],N=[];for(const e of V)R.push({from:h+e.start,to:h+e.end,className:e.name===null?"syntax-variable-invalid":"syntax-variable"});let u=0;for(;u<m.length;){const e=R.find(M=>h+u===M.from);if(e){u=e.to-h;continue}if(k.distExports.isEscape(m,u)){u+=2;continue}const x=m.startsWith("||",u)?"||":m[u]==="|"?"|":m.startsWith("...",u)?"...":null;if(!x){u+=1;continue}O.push({from:h+u,to:h+u+x.length}),u+=x.length}const c=[...O.map(e=>({...e,className:"syntax-keyword"})),...R.map(e=>({...e,className:e.className}))].sort((e,x)=>e.from!==x.from?e.from-x.from:e.to-x.to);for(const e of c)e.className.startsWith("syntax-variable")&&s(e.from,e.to)||t(e.from,e.to,e.className)&&N.push({from:e.from,to:e.to});const w=v+1,H=p-1;let S=w;const q=N.sort((e,x)=>e.from!==x.from?e.from-x.from:e.to-x.to);for(const e of q)S<e.from&&t(S,e.from,"syntax-string"),S=Math.max(S,e.to);S<H&&t(S,H,"syntax-string")}else{const y=[],v=[];for(const c of W(m))y.push({from:h+c.start,to:h+c.end,className:c.name===null?"syntax-variable-invalid":"syntax-variable"});const O=y.sort((c,w)=>c.from!==w.from?c.from-w.from:c.to-w.to);for(const c of O)c.className.startsWith("syntax-variable")&&s(c.from,c.to)||t(c.from,c.to,c.className)&&v.push({from:c.from,to:c.to});const R=h,N=p-1;let u=R;for(const c of v)u<c.from&&t(u,c.from,"syntax-button-text"),u=Math.max(u,c.to);u<N&&t(u,N,"syntax-button-text")}}for(const o of f?[]:d)o.name!==null&&!s(o.start,o.end)&&t(o.start,o.end,"syntax-variable");return i.sort((o,l)=>o.from!==l.from?o.from-l.from:l.to-o.to),i}function A(n,s=!1){const f=new $.RangeSetBuilder,i=n.state.doc.toString(),d=P(i,(a,r)=>n.state.selection.ranges.some(t=>t.from>=a&&t.to<=r),s);for(const a of d)if(a.from<a.to)try{f.add(a.from,a.to,B.Decoration.mark({class:a.className}))}catch(r){console.warn("SyntaxHighlighter: Failed to add decoration",a,r)}return f.finish()}const _=(n=!1)=>B.ViewPlugin.fromClass(class{constructor(s){this.decorations=A(s,n)}update(s){(s.docChanged||s.viewportChanged||s.selectionSet)&&(this.decorations=A(s.view,n))}},{decorations:s=>s.decorations}),z=_(),G=_(!0);exports.QuestionSyntaxHighlighter=G;exports.collectOuterBlockRanges=D;exports.collectSyntaxHighlightRanges=P;exports.default=z;
4
4
  //# sourceMappingURL=SyntaxHighlighter.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"SyntaxHighlighter.cjs","sources":["../../../../src/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.ts"],"sourcesContent":["import {\n Decoration,\n DecorationSet,\n EditorView,\n ViewPlugin,\n ViewUpdate,\n} from \"@codemirror/view\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport { getMarkdownSourceAnalysis } from \"../../ContentRender/utils/inline-code-ranges\";\nimport { INTERACTION_CONTENT_SOURCE, isEscape } from \"remark-flow\";\n\nimport {\n findVariableMarkers,\n findDocumentVariableMarkers,\n trimVariablePadding,\n} from \"../utils\";\n\nconst commentRegex = /<!--[\\s\\S]*?-->/g;\n\n// An unfinished marker still owns its tail, so nested syntax stays literal while typing.\nconst interactionVariableRanges = (text: string) => {\n const markers = findVariableMarkers(text);\n const pending = text.indexOf(\"{{\", markers.at(-1)?.end ?? 0);\n return pending === -1\n ? markers\n : [...markers, { start: pending, end: text.length, name: null }];\n};\n// The grammar's own definition of where an interaction ends, so a `\\]` an option escaped does\n// not cut the highlight short, and the same `(?!\\()` the parser uses, so `?[text](url)` stays a\n// markdown link. Taken from remark-flow rather than written again here: the editor and the\n// parser have to agree about what they are looking at.\nconst controlBlockRegex = new RegExp(\n `\\\\?\\\\[(${INTERACTION_CONTENT_SOURCE})\\\\](?!\\\\()`,\n \"g\"\n);\n\nconst documentControlRanges = (text: string) =>\n getMarkdownSourceAnalysis(text).interactions;\n\nexport interface SyntaxHighlightRange {\n from: number;\n to: number;\n className: string;\n}\n\nfunction collectMultilineFixedOutputRanges(\n docText: string,\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let pendingStart: number | null = null;\n let lineStart = 0;\n\n while (lineStart <= docText.length) {\n const newlineIndex = docText.indexOf(\"\\n\", lineStart);\n const lineEnd = newlineIndex === -1 ? docText.length : newlineIndex;\n const lineText = docText.slice(lineStart, lineEnd);\n\n if (lineText.trim() === \"!===\" && !isInsideVariable(lineStart)) {\n if (pendingStart === null) {\n pendingStart = lineStart;\n } else {\n ranges.push({\n from: pendingStart,\n to: lineEnd,\n className: \"syntax-fixed\",\n });\n pendingStart = null;\n }\n }\n\n if (newlineIndex === -1) {\n break;\n }\n\n lineStart = newlineIndex + 1;\n }\n\n return ranges;\n}\n\nfunction collectSingleLineFixedOutputRanges(\n docText: string,\n commentRanges: SyntaxHighlightRange[],\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let commentIndex = 0;\n\n const isInsideComment = (index: number) => {\n while (\n commentIndex < commentRanges.length &&\n commentRanges[commentIndex].to <= index\n ) {\n commentIndex++;\n }\n\n const range = commentRanges[commentIndex];\n return !!range && index >= range.from && index < range.to;\n };\n\n let lineStart = 0;\n while (lineStart <= docText.length) {\n const newlineIndex = docText.indexOf(\"\\n\", lineStart);\n const lineEnd = newlineIndex === -1 ? docText.length : newlineIndex;\n const lineText = docText.slice(lineStart, lineEnd);\n const markerPositions: number[] = [];\n let searchFrom = 0;\n\n while (searchFrom < lineText.length) {\n const markerOffset = lineText.indexOf(\"===\", searchFrom);\n if (markerOffset === -1) {\n break;\n }\n\n const markerIndex = lineStart + markerOffset;\n const isNegated = markerIndex > 0 && docText[markerIndex - 1] === \"!\";\n if (\n !isNegated &&\n !isInsideComment(markerIndex) &&\n !isInsideVariable(markerIndex)\n ) {\n markerPositions.push(markerIndex);\n }\n\n searchFrom = markerOffset + 3;\n }\n\n for (let i = 0; i + 1 < markerPositions.length; i += 2) {\n ranges.push({\n from: markerPositions[i],\n to: markerPositions[i + 1] + 3,\n className: \"syntax-fixed\",\n });\n }\n\n if (newlineIndex === -1) {\n break;\n }\n\n lineStart = newlineIndex + 1;\n }\n\n return ranges;\n}\n\nfunction collectCommentRanges(\n docText: string,\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let match;\n\n commentRegex.lastIndex = 0;\n while ((match = commentRegex.exec(docText)) !== null) {\n if (isInsideVariable(match.index)) continue;\n ranges.push({\n from: match.index,\n to: match.index + match[0].length,\n className: \"syntax-comment\",\n });\n }\n\n return ranges;\n}\n\n/**\n * Collects non-overlapping fixed-output and comment wrapper ranges.\n *\n * @param docText - Document text to scan.\n * @returns Outer syntax highlight ranges sorted by document position.\n */\nexport function collectOuterBlockRanges(\n docText: string\n): SyntaxHighlightRange[] {\n const variables = findDocumentVariableMarkers(docText);\n const isInsideVariable = (position: number) =>\n variables.some(\n (marker) => position >= marker.start && position < marker.end\n );\n const commentRanges = collectCommentRanges(docText, isInsideVariable);\n const blockRanges = [\n ...collectMultilineFixedOutputRanges(docText, isInsideVariable),\n ...collectSingleLineFixedOutputRanges(\n docText,\n commentRanges,\n isInsideVariable\n ),\n ...commentRanges,\n ].sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return b.to - a.to;\n });\n\n const outerRanges: SyntaxHighlightRange[] = [];\n\n for (const range of blockRanges) {\n const lastOuter = outerRanges[outerRanges.length - 1];\n if (!lastOuter || range.from >= lastOuter.to) {\n outerRanges.push(range);\n }\n }\n\n return outerRanges;\n}\n\n/**\n * Collects all custom syntax highlight ranges for editor decorations.\n *\n * @param docText - Document text to scan.\n * @param isCursorInside - Returns true when the current cursor is inside a range.\n * @returns Non-overlapping syntax highlight ranges sorted by document position.\n */\nexport function collectSyntaxHighlightRanges(\n docText: string,\n isCursorInside: (from: number, to: number) => boolean = () => false\n): SyntaxHighlightRange[] {\n const matches: SyntaxHighlightRange[] = [];\n const documentVariables = findDocumentVariableMarkers(docText);\n const occupied: { from: number; to: number }[] = [];\n\n controlBlockRegex.lastIndex = 0;\n\n // Prevent overlapping decorations so styling stays deterministic\n const isOverlapping = (from: number, to: number) =>\n occupied.some((range) => !(to <= range.from || from >= range.to));\n\n const addMatch = (from: number, to: number, className: string) => {\n if (from >= to) return false;\n if (isOverlapping(from, to)) return false;\n occupied.push({ from, to });\n matches.push({ from, to, className });\n return true;\n };\n\n // 1. Outer block ranges win over any syntax inside them.\n for (const range of collectOuterBlockRanges(docText)) {\n addMatch(range.from, range.to, range.className);\n }\n\n // 2. Control Blocks\n for (const control of documentControlRanges(docText)) {\n // Native Markdown owns document boundaries. The shared token grammar still\n // supplies the exact source offsets used for individual editor decorations.\n controlBlockRegex.lastIndex = control.start;\n const match = controlBlockRegex.exec(docText);\n if (\n !match ||\n match.index !== control.start ||\n match.index + match[0].length !== control.end\n )\n continue;\n const fullStart = match.index;\n const fullEnd = match.index + match[0].length;\n const content = match[1];\n const contentStart = fullStart + 2; // after ?[\n if (\n isOverlapping(fullStart, fullEnd) ||\n documentVariables.some(\n (marker) => marker.start <= fullStart && fullStart < marker.end\n )\n ) {\n continue;\n }\n\n // Outer brackets and question mark\n addMatch(fullStart, fullStart + 1, \"syntax-keyword\"); // ?\n addMatch(fullStart + 1, fullStart + 2, \"syntax-bracket\"); // [\n addMatch(fullEnd - 1, fullEnd, \"syntax-bracket\"); // ]\n\n const variables = interactionVariableRanges(content);\n const firstVariable = variables[0];\n const percentIndex = firstVariable ? firstVariable.start - 1 : -1;\n const hasLeadingAssignment =\n percentIndex >= 0 &&\n content[percentIndex] === \"%\" &&\n trimVariablePadding(content.slice(0, percentIndex)) === \"\";\n if (content.startsWith(\"%\") || hasLeadingAssignment) {\n // Input / Select\n let percentClass = \"syntax-percent-invalid\";\n if (firstVariable && hasLeadingAssignment) {\n const varFrom = contentStart + firstVariable.start;\n const varTo = contentStart + firstVariable.end;\n const cursorInsideVar = isCursorInside(varFrom, varTo);\n percentClass =\n firstVariable.name !== null && !cursorInsideVar\n ? \"syntax-percent-valid\"\n : \"syntax-percent-invalid\";\n }\n const percentStart =\n contentStart + (hasLeadingAssignment ? percentIndex : 0);\n addMatch(percentStart, percentStart + 1, percentClass); // %\n\n const operatorRanges: { from: number; to: number }[] = [];\n const variableRanges: { from: number; to: number; className: string }[] =\n [];\n const appliedTokenRanges: { from: number; to: number }[] = [];\n\n // Keep a variable name atomic even when it contains option punctuation.\n for (const variable of variables) {\n variableRanges.push({\n from: contentStart + variable.start,\n to: contentStart + variable.end,\n className:\n variable.name === null\n ? \"syntax-variable-invalid\"\n : \"syntax-variable\",\n });\n }\n\n // Inner operators | || ... -- skipping any an option escaped, the way the parser does.\n // Painted as separators, they told the author the grammar had split an option that it\n // had in fact left whole.\n let scanIndex = 0;\n while (scanIndex < content.length) {\n const variable = variableRanges.find(\n (range) => contentStart + scanIndex === range.from\n );\n if (variable) {\n scanIndex = variable.to - contentStart;\n continue;\n }\n if (isEscape(content, scanIndex)) {\n scanIndex += 2;\n continue;\n }\n const operator = content.startsWith(\"||\", scanIndex)\n ? \"||\"\n : content[scanIndex] === \"|\"\n ? \"|\"\n : content.startsWith(\"...\", scanIndex)\n ? \"...\"\n : null;\n if (!operator) {\n scanIndex += 1;\n continue;\n }\n operatorRanges.push({\n from: contentStart + scanIndex,\n to: contentStart + scanIndex + operator.length,\n });\n scanIndex += operator.length;\n }\n\n const allTokens = [\n ...operatorRanges.map((range) => ({\n ...range,\n className: \"syntax-keyword\",\n })),\n ...variableRanges.map((range) => ({\n ...range,\n className: range.className,\n })),\n ].sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const token of allTokens) {\n if (\n token.className.startsWith(\"syntax-variable\") &&\n isCursorInside(token.from, token.to)\n ) {\n continue;\n }\n if (addMatch(token.from, token.to, token.className)) {\n appliedTokenRanges.push({ from: token.from, to: token.to });\n }\n }\n\n // Content (Dark Blue) for remaining text segments\n const stringStart = percentStart + 1;\n const stringEnd = fullEnd - 1;\n let cursor = stringStart;\n const sortedApplied = appliedTokenRanges.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const token of sortedApplied) {\n if (cursor < token.from) {\n addMatch(cursor, token.from, \"syntax-string\");\n }\n cursor = Math.max(cursor, token.to);\n }\n if (cursor < stringEnd) {\n addMatch(cursor, stringEnd, \"syntax-string\");\n }\n } else {\n // Button ?[text]\n const variableRanges: { from: number; to: number; className: string }[] =\n [];\n const appliedVariableRanges: { from: number; to: number }[] = [];\n\n for (const variable of interactionVariableRanges(content)) {\n variableRanges.push({\n from: contentStart + variable.start,\n to: contentStart + variable.end,\n className:\n variable.name === null\n ? \"syntax-variable-invalid\"\n : \"syntax-variable\",\n });\n }\n\n const sortedVariables = variableRanges.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const variable of sortedVariables) {\n if (\n variable.className.startsWith(\"syntax-variable\") &&\n isCursorInside(variable.from, variable.to)\n ) {\n continue;\n }\n if (addMatch(variable.from, variable.to, variable.className)) {\n appliedVariableRanges.push({ from: variable.from, to: variable.to });\n }\n }\n\n const buttonTextStart = contentStart;\n const buttonTextEnd = fullEnd - 1;\n let cursor = buttonTextStart;\n\n for (const variable of appliedVariableRanges) {\n if (cursor < variable.from) {\n addMatch(cursor, variable.from, \"syntax-button-text\");\n }\n cursor = Math.max(cursor, variable.to);\n }\n if (cursor < buttonTextEnd) {\n addMatch(cursor, buttonTextEnd, \"syntax-button-text\");\n }\n }\n }\n\n // 3. Variables (only if not already decorated; invalid ones stay default outside control blocks)\n for (const variable of documentVariables) {\n if (\n variable.name !== null &&\n !isCursorInside(variable.start, variable.end)\n ) {\n addMatch(variable.start, variable.end, \"syntax-variable\");\n }\n }\n\n // Sort matches by 'from' asc, then 'to' desc (longest first)\n matches.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return b.to - a.to;\n });\n\n return matches;\n}\n\nfunction buildDecorations(view: EditorView): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const docText = view.state.doc.toString();\n const matches = collectSyntaxHighlightRanges(docText, (from, to) => {\n return view.state.selection.ranges.some((range) => {\n return range.from >= from && range.to <= to;\n });\n });\n\n for (const m of matches) {\n if (m.from < m.to) {\n try {\n builder.add(m.from, m.to, Decoration.mark({ class: m.className }));\n } catch (e) {\n console.warn(\"SyntaxHighlighter: Failed to add decoration\", m, e);\n }\n }\n }\n\n return builder.finish();\n}\n\nconst SyntaxHighlighter = ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = buildDecorations(view);\n }\n\n update(update: ViewUpdate) {\n if (update.docChanged || update.viewportChanged || update.selectionSet) {\n this.decorations = buildDecorations(update.view);\n }\n }\n },\n {\n decorations: (instance) => instance.decorations,\n }\n);\n\nexport default SyntaxHighlighter;\n"],"names":["commentRegex","interactionVariableRanges","text","markers","findVariableMarkers","pending","controlBlockRegex","INTERACTION_CONTENT_SOURCE","documentControlRanges","getMarkdownSourceAnalysis","collectMultilineFixedOutputRanges","docText","isInsideVariable","ranges","pendingStart","lineStart","newlineIndex","lineEnd","collectSingleLineFixedOutputRanges","commentRanges","commentIndex","isInsideComment","index","range","lineText","markerPositions","searchFrom","markerOffset","markerIndex","i","collectCommentRanges","match","collectOuterBlockRanges","variables","findDocumentVariableMarkers","position","marker","blockRanges","a","b","outerRanges","lastOuter","collectSyntaxHighlightRanges","isCursorInside","matches","documentVariables","occupied","isOverlapping","from","to","addMatch","className","control","fullStart","fullEnd","content","contentStart","firstVariable","percentIndex","hasLeadingAssignment","trimVariablePadding","percentClass","varFrom","varTo","cursorInsideVar","percentStart","operatorRanges","variableRanges","appliedTokenRanges","variable","scanIndex","isEscape","operator","allTokens","token","stringStart","stringEnd","cursor","sortedApplied","appliedVariableRanges","sortedVariables","buttonTextStart","buttonTextEnd","buildDecorations","view","builder","RangeSetBuilder","m","Decoration","e","SyntaxHighlighter","ViewPlugin","update","instance"],"mappings":"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"}
1
+ {"version":3,"file":"SyntaxHighlighter.cjs","sources":["../../../../src/components/MarkdownFlowEditor/plugins/SyntaxHighlighter.ts"],"sourcesContent":["import {\n Decoration,\n DecorationSet,\n EditorView,\n ViewPlugin,\n ViewUpdate,\n} from \"@codemirror/view\";\nimport { RangeSetBuilder } from \"@codemirror/state\";\nimport { getMarkdownSourceAnalysis } from \"../../ContentRender/utils/inline-code-ranges\";\nimport { INTERACTION_CONTENT_SOURCE, isEscape } from \"remark-flow\";\n\nimport {\n findVariableMarkers,\n findDocumentVariableMarkers,\n trimVariablePadding,\n} from \"../utils\";\n\nconst commentRegex = /<!--[\\s\\S]*?-->/g;\n\n// An unfinished marker still owns its tail, so nested syntax stays literal while typing.\nconst interactionVariableRanges = (text: string) => {\n const markers = findVariableMarkers(text);\n const pending = text.indexOf(\"{{\", markers.at(-1)?.end ?? 0);\n return pending === -1\n ? markers\n : [...markers, { start: pending, end: text.length, name: null }];\n};\n// The grammar's own definition of where an interaction ends, so a `\\]` an option escaped does\n// not cut the highlight short, and the same `(?!\\()` the parser uses, so `?[text](url)` stays a\n// markdown link. Taken from remark-flow rather than written again here: the editor and the\n// parser have to agree about what they are looking at.\nconst controlBlockRegex = new RegExp(\n `\\\\?\\\\[(${INTERACTION_CONTENT_SOURCE})\\\\](?!\\\\()`,\n \"g\"\n);\n\nconst documentControlRanges = (text: string) =>\n getMarkdownSourceAnalysis(text).interactions;\n\nexport interface SyntaxHighlightRange {\n from: number;\n to: number;\n className: string;\n}\n\nfunction collectMultilineFixedOutputRanges(\n docText: string,\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let pendingStart: number | null = null;\n let lineStart = 0;\n\n while (lineStart <= docText.length) {\n const newlineIndex = docText.indexOf(\"\\n\", lineStart);\n const lineEnd = newlineIndex === -1 ? docText.length : newlineIndex;\n const lineText = docText.slice(lineStart, lineEnd);\n\n if (lineText.trim() === \"!===\" && !isInsideVariable(lineStart)) {\n if (pendingStart === null) {\n pendingStart = lineStart;\n } else {\n ranges.push({\n from: pendingStart,\n to: lineEnd,\n className: \"syntax-fixed\",\n });\n pendingStart = null;\n }\n }\n\n if (newlineIndex === -1) {\n break;\n }\n\n lineStart = newlineIndex + 1;\n }\n\n return ranges;\n}\n\nfunction collectSingleLineFixedOutputRanges(\n docText: string,\n commentRanges: SyntaxHighlightRange[],\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let commentIndex = 0;\n\n const isInsideComment = (index: number) => {\n while (\n commentIndex < commentRanges.length &&\n commentRanges[commentIndex].to <= index\n ) {\n commentIndex++;\n }\n\n const range = commentRanges[commentIndex];\n return !!range && index >= range.from && index < range.to;\n };\n\n let lineStart = 0;\n while (lineStart <= docText.length) {\n const newlineIndex = docText.indexOf(\"\\n\", lineStart);\n const lineEnd = newlineIndex === -1 ? docText.length : newlineIndex;\n const lineText = docText.slice(lineStart, lineEnd);\n const markerPositions: number[] = [];\n let searchFrom = 0;\n\n while (searchFrom < lineText.length) {\n const markerOffset = lineText.indexOf(\"===\", searchFrom);\n if (markerOffset === -1) {\n break;\n }\n\n const markerIndex = lineStart + markerOffset;\n const isNegated = markerIndex > 0 && docText[markerIndex - 1] === \"!\";\n if (\n !isNegated &&\n !isInsideComment(markerIndex) &&\n !isInsideVariable(markerIndex)\n ) {\n markerPositions.push(markerIndex);\n }\n\n searchFrom = markerOffset + 3;\n }\n\n for (let i = 0; i + 1 < markerPositions.length; i += 2) {\n ranges.push({\n from: markerPositions[i],\n to: markerPositions[i + 1] + 3,\n className: \"syntax-fixed\",\n });\n }\n\n if (newlineIndex === -1) {\n break;\n }\n\n lineStart = newlineIndex + 1;\n }\n\n return ranges;\n}\n\nfunction collectCommentRanges(\n docText: string,\n isInsideVariable: (position: number) => boolean\n): SyntaxHighlightRange[] {\n const ranges: SyntaxHighlightRange[] = [];\n let match;\n\n commentRegex.lastIndex = 0;\n while ((match = commentRegex.exec(docText)) !== null) {\n if (isInsideVariable(match.index)) continue;\n ranges.push({\n from: match.index,\n to: match.index + match[0].length,\n className: \"syntax-comment\",\n });\n }\n\n return ranges;\n}\n\n/**\n * Collects non-overlapping fixed-output and comment wrapper ranges.\n *\n * @param docText - Document text to scan.\n * @returns Outer syntax highlight ranges sorted by document position.\n */\nexport function collectOuterBlockRanges(\n docText: string\n): SyntaxHighlightRange[] {\n const variables = findDocumentVariableMarkers(docText);\n const isInsideVariable = (position: number) =>\n variables.some(\n (marker) => position >= marker.start && position < marker.end\n );\n const commentRanges = collectCommentRanges(docText, isInsideVariable);\n const blockRanges = [\n ...collectMultilineFixedOutputRanges(docText, isInsideVariable),\n ...collectSingleLineFixedOutputRanges(\n docText,\n commentRanges,\n isInsideVariable\n ),\n ...commentRanges,\n ].sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return b.to - a.to;\n });\n\n const outerRanges: SyntaxHighlightRange[] = [];\n\n for (const range of blockRanges) {\n const lastOuter = outerRanges[outerRanges.length - 1];\n if (!lastOuter || range.from >= lastOuter.to) {\n outerRanges.push(range);\n }\n }\n\n return outerRanges;\n}\n\n/**\n * Collects all custom syntax highlight ranges for editor decorations.\n *\n * @param docText - Document text to scan.\n * @param isCursorInside - Returns true when the current cursor is inside a range.\n * @returns Non-overlapping syntax highlight ranges sorted by document position.\n */\nexport function collectSyntaxHighlightRanges(\n docText: string,\n isCursorInside: (from: number, to: number) => boolean = () => false,\n questionMode = false\n): SyntaxHighlightRange[] {\n const matches: SyntaxHighlightRange[] = [];\n const documentVariables = findDocumentVariableMarkers(docText);\n const occupied: { from: number; to: number }[] = [];\n\n controlBlockRegex.lastIndex = 0;\n\n // Prevent overlapping decorations so styling stays deterministic\n const isOverlapping = (from: number, to: number) =>\n occupied.some((range) => !(to <= range.from || from >= range.to));\n\n const addMatch = (from: number, to: number, className: string) => {\n if (from >= to) return false;\n if (isOverlapping(from, to)) return false;\n occupied.push({ from, to });\n matches.push({ from, to, className });\n return true;\n };\n\n // 1. Outer block ranges win over any syntax inside them.\n for (const range of collectOuterBlockRanges(docText)) {\n addMatch(range.from, range.to, range.className);\n }\n\n // 2. Control Blocks\n for (const control of documentControlRanges(docText)) {\n // Native Markdown owns document boundaries. The shared token grammar still\n // supplies the exact source offsets used for individual editor decorations.\n controlBlockRegex.lastIndex = control.start;\n const match = controlBlockRegex.exec(docText);\n if (\n !match ||\n match.index !== control.start ||\n match.index + match[0].length !== control.end\n )\n continue;\n const fullStart = match.index;\n const fullEnd = match.index + match[0].length;\n const content = match[1];\n const contentStart = fullStart + 2; // after ?[\n if (\n isOverlapping(fullStart, fullEnd) ||\n documentVariables.some(\n (marker) => marker.start <= fullStart && fullStart < marker.end\n )\n ) {\n continue;\n }\n\n // Outer brackets and question mark\n addMatch(fullStart, fullStart + 1, \"syntax-keyword\"); // ?\n addMatch(fullStart + 1, fullStart + 2, \"syntax-bracket\"); // [\n addMatch(fullEnd - 1, fullEnd, \"syntax-bracket\"); // ]\n\n const variables = interactionVariableRanges(content);\n const firstVariable = variables[0];\n const percentIndex = firstVariable ? firstVariable.start - 1 : -1;\n const hasLeadingAssignment =\n percentIndex >= 0 &&\n content[percentIndex] === \"%\" &&\n trimVariablePadding(content.slice(0, percentIndex)) === \"\";\n if (content.startsWith(\"%\") || hasLeadingAssignment) {\n // Input / Select\n let percentClass = \"syntax-percent-invalid\";\n if (firstVariable && hasLeadingAssignment) {\n const varFrom = contentStart + firstVariable.start;\n const varTo = contentStart + firstVariable.end;\n const cursorInsideVar = isCursorInside(varFrom, varTo);\n percentClass =\n firstVariable.name !== null && !cursorInsideVar\n ? \"syntax-percent-valid\"\n : \"syntax-percent-invalid\";\n }\n const percentStart =\n contentStart + (hasLeadingAssignment ? percentIndex : 0);\n addMatch(percentStart, percentStart + 1, percentClass); // %\n\n const operatorRanges: { from: number; to: number }[] = [];\n const variableRanges: { from: number; to: number; className: string }[] =\n [];\n const appliedTokenRanges: { from: number; to: number }[] = [];\n\n // Keep a variable name atomic even when it contains option punctuation.\n for (const variable of variables) {\n variableRanges.push({\n from: contentStart + variable.start,\n to: contentStart + variable.end,\n className:\n variable.name === null\n ? \"syntax-variable-invalid\"\n : \"syntax-variable\",\n });\n }\n\n // Inner operators | || ... -- skipping any an option escaped, the way the parser does.\n // Painted as separators, they told the author the grammar had split an option that it\n // had in fact left whole.\n let scanIndex = 0;\n while (scanIndex < content.length) {\n const variable = variableRanges.find(\n (range) => contentStart + scanIndex === range.from\n );\n if (variable) {\n scanIndex = variable.to - contentStart;\n continue;\n }\n if (isEscape(content, scanIndex)) {\n scanIndex += 2;\n continue;\n }\n const operator = content.startsWith(\"||\", scanIndex)\n ? \"||\"\n : content[scanIndex] === \"|\"\n ? \"|\"\n : content.startsWith(\"...\", scanIndex)\n ? \"...\"\n : null;\n if (!operator) {\n scanIndex += 1;\n continue;\n }\n operatorRanges.push({\n from: contentStart + scanIndex,\n to: contentStart + scanIndex + operator.length,\n });\n scanIndex += operator.length;\n }\n\n const allTokens = [\n ...operatorRanges.map((range) => ({\n ...range,\n className: \"syntax-keyword\",\n })),\n ...variableRanges.map((range) => ({\n ...range,\n className: range.className,\n })),\n ].sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const token of allTokens) {\n if (\n token.className.startsWith(\"syntax-variable\") &&\n isCursorInside(token.from, token.to)\n ) {\n continue;\n }\n if (addMatch(token.from, token.to, token.className)) {\n appliedTokenRanges.push({ from: token.from, to: token.to });\n }\n }\n\n // Content (Dark Blue) for remaining text segments\n const stringStart = percentStart + 1;\n const stringEnd = fullEnd - 1;\n let cursor = stringStart;\n const sortedApplied = appliedTokenRanges.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const token of sortedApplied) {\n if (cursor < token.from) {\n addMatch(cursor, token.from, \"syntax-string\");\n }\n cursor = Math.max(cursor, token.to);\n }\n if (cursor < stringEnd) {\n addMatch(cursor, stringEnd, \"syntax-string\");\n }\n } else {\n // Button ?[text]\n const variableRanges: { from: number; to: number; className: string }[] =\n [];\n const appliedVariableRanges: { from: number; to: number }[] = [];\n\n for (const variable of interactionVariableRanges(content)) {\n variableRanges.push({\n from: contentStart + variable.start,\n to: contentStart + variable.end,\n className:\n variable.name === null\n ? \"syntax-variable-invalid\"\n : \"syntax-variable\",\n });\n }\n\n const sortedVariables = variableRanges.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return a.to - b.to;\n });\n\n for (const variable of sortedVariables) {\n if (\n variable.className.startsWith(\"syntax-variable\") &&\n isCursorInside(variable.from, variable.to)\n ) {\n continue;\n }\n if (addMatch(variable.from, variable.to, variable.className)) {\n appliedVariableRanges.push({ from: variable.from, to: variable.to });\n }\n }\n\n const buttonTextStart = contentStart;\n const buttonTextEnd = fullEnd - 1;\n let cursor = buttonTextStart;\n\n for (const variable of appliedVariableRanges) {\n if (cursor < variable.from) {\n addMatch(cursor, variable.from, \"syntax-button-text\");\n }\n cursor = Math.max(cursor, variable.to);\n }\n if (cursor < buttonTextEnd) {\n addMatch(cursor, buttonTextEnd, \"syntax-button-text\");\n }\n }\n }\n\n // 3. Variables (only if not already decorated; invalid ones stay default outside control blocks)\n for (const variable of questionMode ? [] : documentVariables) {\n if (\n variable.name !== null &&\n !isCursorInside(variable.start, variable.end)\n ) {\n addMatch(variable.start, variable.end, \"syntax-variable\");\n }\n }\n\n // Sort matches by 'from' asc, then 'to' desc (longest first)\n matches.sort((a, b) => {\n if (a.from !== b.from) return a.from - b.from;\n return b.to - a.to;\n });\n\n return matches;\n}\n\nfunction buildDecorations(\n view: EditorView,\n questionMode = false\n): DecorationSet {\n const builder = new RangeSetBuilder<Decoration>();\n const docText = view.state.doc.toString();\n const matches = collectSyntaxHighlightRanges(\n docText,\n (from, to) => {\n return view.state.selection.ranges.some((range) => {\n return range.from >= from && range.to <= to;\n });\n },\n questionMode\n );\n\n for (const m of matches) {\n if (m.from < m.to) {\n try {\n builder.add(m.from, m.to, Decoration.mark({ class: m.className }));\n } catch (e) {\n console.warn(\"SyntaxHighlighter: Failed to add decoration\", m, e);\n }\n }\n }\n\n return builder.finish();\n}\n\nconst createSyntaxHighlighter = (questionMode = false) =>\n ViewPlugin.fromClass(\n class {\n decorations: DecorationSet;\n\n constructor(view: EditorView) {\n this.decorations = buildDecorations(view, questionMode);\n }\n\n update(update: ViewUpdate) {\n if (\n update.docChanged ||\n update.viewportChanged ||\n update.selectionSet\n ) {\n this.decorations = buildDecorations(update.view, questionMode);\n }\n }\n },\n {\n decorations: (instance) => instance.decorations,\n }\n );\n\nconst SyntaxHighlighter = createSyntaxHighlighter();\nexport const QuestionSyntaxHighlighter = createSyntaxHighlighter(true);\n\nexport default SyntaxHighlighter;\n"],"names":["commentRegex","interactionVariableRanges","text","markers","findVariableMarkers","pending","controlBlockRegex","INTERACTION_CONTENT_SOURCE","documentControlRanges","getMarkdownSourceAnalysis","collectMultilineFixedOutputRanges","docText","isInsideVariable","ranges","pendingStart","lineStart","newlineIndex","lineEnd","collectSingleLineFixedOutputRanges","commentRanges","commentIndex","isInsideComment","index","range","lineText","markerPositions","searchFrom","markerOffset","markerIndex","i","collectCommentRanges","match","collectOuterBlockRanges","variables","findDocumentVariableMarkers","position","marker","blockRanges","a","b","outerRanges","lastOuter","collectSyntaxHighlightRanges","isCursorInside","questionMode","matches","documentVariables","occupied","isOverlapping","from","to","addMatch","className","control","fullStart","fullEnd","content","contentStart","firstVariable","percentIndex","hasLeadingAssignment","trimVariablePadding","percentClass","varFrom","varTo","cursorInsideVar","percentStart","operatorRanges","variableRanges","appliedTokenRanges","variable","scanIndex","isEscape","operator","allTokens","token","stringStart","stringEnd","cursor","sortedApplied","appliedVariableRanges","sortedVariables","buttonTextStart","buttonTextEnd","buildDecorations","view","builder","RangeSetBuilder","m","Decoration","e","createSyntaxHighlighter","ViewPlugin","update","instance","SyntaxHighlighter","QuestionSyntaxHighlighter"],"mappings":"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"}
@@ -18,9 +18,13 @@ export declare function collectOuterBlockRanges(docText: string): SyntaxHighligh
18
18
  * @param isCursorInside - Returns true when the current cursor is inside a range.
19
19
  * @returns Non-overlapping syntax highlight ranges sorted by document position.
20
20
  */
21
- export declare function collectSyntaxHighlightRanges(docText: string, isCursorInside?: (from: number, to: number) => boolean): SyntaxHighlightRange[];
21
+ export declare function collectSyntaxHighlightRanges(docText: string, isCursorInside?: (from: number, to: number) => boolean, questionMode?: boolean): SyntaxHighlightRange[];
22
22
  declare const SyntaxHighlighter: ViewPlugin<{
23
23
  decorations: DecorationSet;
24
24
  update(update: ViewUpdate): void;
25
25
  }, undefined>;
26
+ export declare const QuestionSyntaxHighlighter: ViewPlugin<{
27
+ decorations: DecorationSet;
28
+ update(update: ViewUpdate): void;
29
+ }, undefined>;
26
30
  export default SyntaxHighlighter;