@flowgram.ai/form-materials 0.4.4 → 0.4.6

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 (47) hide show
  1. package/dist/esm/chunk-6OZSB6PD.js +10 -0
  2. package/dist/esm/chunk-6OZSB6PD.js.map +1 -0
  3. package/dist/esm/chunk-G4HQ7OSI.js +440 -0
  4. package/dist/esm/chunk-G4HQ7OSI.js.map +1 -0
  5. package/dist/esm/chunk-QIJ4QVB2.js +271 -0
  6. package/dist/esm/chunk-QIJ4QVB2.js.map +1 -0
  7. package/dist/esm/editor-6UMULJYB.js +180 -0
  8. package/dist/esm/editor-6UMULJYB.js.map +1 -0
  9. package/dist/esm/editor-E2BQTPCD.js +388 -0
  10. package/dist/esm/editor-E2BQTPCD.js.map +1 -0
  11. package/dist/esm/editor-H2R7JJLO.js +282 -0
  12. package/dist/esm/editor-H2R7JJLO.js.map +1 -0
  13. package/dist/esm/editor-JX42GFAZ.js +249 -0
  14. package/dist/esm/editor-JX42GFAZ.js.map +1 -0
  15. package/dist/esm/editor-YMNCDGUR.js +167 -0
  16. package/dist/esm/editor-YMNCDGUR.js.map +1 -0
  17. package/dist/esm/index.js +1388 -3029
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/index.d.mts +144 -51
  20. package/dist/index.d.ts +144 -51
  21. package/dist/index.js +3511 -2759
  22. package/dist/index.js.map +1 -1
  23. package/package.json +6 -6
  24. package/src/components/code-editor/editor.tsx +96 -0
  25. package/src/components/code-editor/index.tsx +5 -89
  26. package/src/components/code-editor/theme/dark.ts +49 -30
  27. package/src/components/code-editor/theme/light.ts +56 -32
  28. package/src/components/code-editor-mini/index.tsx +2 -2
  29. package/src/components/condition-row/index.tsx +4 -0
  30. package/src/components/db-condition-row/hooks/use-left.tsx +66 -0
  31. package/src/components/db-condition-row/hooks/use-op.tsx +59 -0
  32. package/src/components/db-condition-row/index.tsx +93 -0
  33. package/src/components/db-condition-row/styles.tsx +43 -0
  34. package/src/components/db-condition-row/types.ts +34 -0
  35. package/src/components/index.ts +1 -0
  36. package/src/components/json-editor-with-variables/editor.tsx +69 -0
  37. package/src/components/json-editor-with-variables/extensions/variable-tag.tsx +4 -3
  38. package/src/components/json-editor-with-variables/index.tsx +5 -60
  39. package/src/components/prompt-editor/editor.tsx +81 -0
  40. package/src/components/prompt-editor/index.tsx +5 -69
  41. package/src/components/prompt-editor-with-inputs/editor.tsx +25 -0
  42. package/src/components/prompt-editor-with-inputs/index.tsx +5 -15
  43. package/src/components/prompt-editor-with-variables/editor.tsx +22 -0
  44. package/src/components/prompt-editor-with-variables/extensions/variable-tag.tsx +10 -18
  45. package/src/components/prompt-editor-with-variables/index.tsx +5 -13
  46. package/src/shared/index.ts +1 -0
  47. package/src/shared/polyfill-create-root/index.tsx +33 -0
@@ -0,0 +1,388 @@
1
+ // src/components/code-editor/editor.tsx
2
+ import React, { useEffect, useRef } from "react";
3
+ import {
4
+ ActiveLinePlaceholder,
5
+ createRenderer,
6
+ EditorProvider
7
+ } from "@coze-editor/editor/react";
8
+ import preset from "@coze-editor/editor/preset-code";
9
+ import { EditorView } from "@codemirror/view";
10
+
11
+ // src/components/code-editor/utils.ts
12
+ function getSuffixByLanguageId(languageId) {
13
+ if (languageId === "python") {
14
+ return ".py";
15
+ }
16
+ if (languageId === "typescript") {
17
+ return ".ts";
18
+ }
19
+ if (languageId === "shell") {
20
+ return ".sh";
21
+ }
22
+ if (languageId === "json") {
23
+ return ".json";
24
+ }
25
+ return "";
26
+ }
27
+
28
+ // src/components/code-editor/language-features.ts
29
+ import { languages } from "@coze-editor/editor/preset-code";
30
+ import { typescript } from "@coze-editor/editor/language-typescript";
31
+ import { shell } from "@coze-editor/editor/language-shell";
32
+ import { python } from "@coze-editor/editor/language-python";
33
+ import { json } from "@coze-editor/editor/language-json";
34
+ import { mixLanguages } from "@coze-editor/editor";
35
+ languages.register("python", python);
36
+ languages.register("shell", shell);
37
+ languages.register("typescript", typescript);
38
+ languages.register("json", {
39
+ // mixLanguages is used to solve the problem that interpolation also uses parentheses, which causes incorrect highlighting
40
+ language: mixLanguages({
41
+ outerLanguage: json.language
42
+ }),
43
+ languageService: json.languageService
44
+ });
45
+ var tsWorkerInit = false;
46
+ var initTsWorker = () => {
47
+ if (tsWorkerInit) {
48
+ return;
49
+ }
50
+ tsWorkerInit = true;
51
+ const tsWorker = new Worker(
52
+ new URL(`@coze-editor/editor/language-typescript/worker`, import.meta.url),
53
+ { type: "module" }
54
+ );
55
+ typescript.languageService.initialize(tsWorker, {
56
+ compilerOptions: {
57
+ // eliminate Promise error
58
+ lib: ["es2015", "dom"],
59
+ noImplicitAny: false
60
+ }
61
+ });
62
+ };
63
+
64
+ // src/components/code-editor/theme/index.ts
65
+ import { themes } from "@coze-editor/editor/preset-code";
66
+
67
+ // src/components/code-editor/theme/light.ts
68
+ import { createTheme, tags as t } from "@coze-editor/editor/preset-code";
69
+ var colors = {
70
+ background: "#FFFFFF",
71
+ comment: "#6B7280",
72
+ key: "#2563EB",
73
+ variable: "#DC2626",
74
+ string: "#059669",
75
+ number: "#EA580C",
76
+ boolean: "#7C3AED",
77
+ null: "#7C3AED",
78
+ separator: "#374151"
79
+ };
80
+ var lightTheme = createTheme({
81
+ variant: "light",
82
+ settings: {
83
+ background: "#FFFFFF",
84
+ foreground: "#1F2937",
85
+ caret: "#2563EB",
86
+ selection: "#E5E7EB",
87
+ gutterBackground: "#F9FAFB",
88
+ gutterForeground: "#6B7280",
89
+ gutterBorderColor: "transparent",
90
+ gutterBorderWidth: 0,
91
+ lineHighlight: "#F3F4F680",
92
+ bracketColors: ["#F59E0B", "#8B5CF6", "#06B6D4"],
93
+ tooltip: {
94
+ backgroundColor: "#FFFFFF",
95
+ color: "#1F2937",
96
+ border: "1px solid #E5E7EB",
97
+ boxShadow: "0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)"
98
+ },
99
+ link: {
100
+ color: "#2563EB"
101
+ },
102
+ completionItemHover: {
103
+ backgroundColor: "#F3F4F6"
104
+ },
105
+ completionItemSelected: {
106
+ backgroundColor: "#E5E7EB"
107
+ },
108
+ completionItemIcon: {
109
+ color: "#4B5563"
110
+ },
111
+ completionItemLabel: {
112
+ color: "#1F2937"
113
+ },
114
+ completionItemInfo: {
115
+ color: "#4B5563"
116
+ },
117
+ completionItemDetail: {
118
+ color: "#6B7280"
119
+ }
120
+ },
121
+ styles: [
122
+ // JSON
123
+ {
124
+ tag: t.comment,
125
+ color: colors.comment
126
+ },
127
+ {
128
+ tag: [t.propertyName],
129
+ color: colors.key
130
+ },
131
+ {
132
+ tag: [t.variableName],
133
+ color: colors.variable
134
+ },
135
+ {
136
+ tag: [t.string],
137
+ color: colors.string
138
+ },
139
+ {
140
+ tag: [t.number],
141
+ color: colors.number
142
+ },
143
+ {
144
+ tag: [t.bool],
145
+ color: colors.boolean
146
+ },
147
+ {
148
+ tag: [t.null],
149
+ color: colors.null
150
+ },
151
+ {
152
+ tag: [t.separator],
153
+ color: colors.separator
154
+ },
155
+ // markdown
156
+ {
157
+ tag: [t.heading],
158
+ color: "#2563EB"
159
+ },
160
+ {
161
+ tag: [t.processingInstruction],
162
+ color: "#2563EB"
163
+ },
164
+ // js
165
+ {
166
+ tag: [t.definitionKeyword],
167
+ color: "#9333EA"
168
+ },
169
+ {
170
+ tag: [t.modifier],
171
+ color: "#9333EA"
172
+ },
173
+ {
174
+ tag: [t.controlKeyword],
175
+ color: "#9333EA"
176
+ },
177
+ {
178
+ tag: [t.operatorKeyword],
179
+ color: "#9333EA"
180
+ },
181
+ // shell
182
+ // curl
183
+ {
184
+ tag: [t.standard(t.variableName)],
185
+ color: "#059669"
186
+ },
187
+ // -X
188
+ {
189
+ tag: [t.attributeName],
190
+ color: "#EA580C"
191
+ },
192
+ // url in string (includes quotes), e.g. "https://..."
193
+ {
194
+ tag: [t.special(t.string)],
195
+ color: "#2563EB"
196
+ }
197
+ ]
198
+ });
199
+
200
+ // src/components/code-editor/theme/dark.ts
201
+ import { createTheme as createTheme2, tags as t2 } from "@coze-editor/editor/preset-code";
202
+ var colors2 = {
203
+ background: "#0D1117",
204
+ // syntax - 现代化暗色主题配色
205
+ comment: "#8B949E",
206
+ key: "#7DD3FC",
207
+ variable: "#F472B6",
208
+ string: "#34D399",
209
+ number: "#FBBF24",
210
+ boolean: "#A78BFA",
211
+ null: "#A78BFA",
212
+ separator: "#E6EDF3"
213
+ };
214
+ var darkTheme = createTheme2({
215
+ variant: "dark",
216
+ settings: {
217
+ background: colors2.background,
218
+ foreground: "#E6EDF3",
219
+ caret: "#7DD3FC",
220
+ selection: "#264F7833",
221
+ gutterBackground: colors2.background,
222
+ gutterForeground: "#6E7681",
223
+ gutterBorderColor: "transparent",
224
+ gutterBorderWidth: 0,
225
+ lineHighlight: "#21262D",
226
+ bracketColors: ["#FBBF24", "#A78BFA", "#7DD3FC"],
227
+ tooltip: {
228
+ backgroundColor: "#21262D",
229
+ color: "#E6EDF3",
230
+ border: "1px solid #30363D"
231
+ },
232
+ link: {
233
+ color: "#58A6FF"
234
+ },
235
+ completionItemHover: {
236
+ backgroundColor: "#21262D"
237
+ },
238
+ completionItemSelected: {
239
+ backgroundColor: "#1F6EEB"
240
+ },
241
+ completionItemIcon: {
242
+ color: "#8B949E"
243
+ },
244
+ completionItemLabel: {
245
+ color: "#E6EDF3"
246
+ },
247
+ completionItemInfo: {
248
+ color: "#8B949E"
249
+ },
250
+ completionItemDetail: {
251
+ color: "#6E7681"
252
+ }
253
+ },
254
+ styles: [
255
+ // json
256
+ {
257
+ tag: t2.comment,
258
+ color: colors2.comment
259
+ },
260
+ {
261
+ tag: [t2.propertyName],
262
+ color: colors2.key
263
+ },
264
+ {
265
+ tag: [t2.string],
266
+ color: colors2.string
267
+ },
268
+ {
269
+ tag: [t2.number],
270
+ color: colors2.number
271
+ },
272
+ {
273
+ tag: [t2.bool],
274
+ color: colors2.boolean
275
+ },
276
+ {
277
+ tag: [t2.null],
278
+ color: colors2.null
279
+ },
280
+ {
281
+ tag: [t2.separator],
282
+ color: colors2.separator
283
+ },
284
+ // js
285
+ {
286
+ tag: [t2.definitionKeyword],
287
+ color: "#C084FC"
288
+ },
289
+ {
290
+ tag: [t2.modifier],
291
+ color: "#C084FC"
292
+ },
293
+ {
294
+ tag: [t2.controlKeyword],
295
+ color: "#C084FC"
296
+ },
297
+ {
298
+ tag: [t2.operatorKeyword],
299
+ color: "#C084FC"
300
+ },
301
+ // markdown
302
+ {
303
+ tag: [t2.heading],
304
+ color: "#7DD3FC"
305
+ },
306
+ {
307
+ tag: [t2.processingInstruction],
308
+ color: "#7DD3FC"
309
+ },
310
+ // shell
311
+ // curl
312
+ {
313
+ tag: [t2.standard(t2.variableName)],
314
+ color: "#34D399"
315
+ },
316
+ // -X
317
+ {
318
+ tag: [t2.attributeName],
319
+ color: "#FBBF24"
320
+ },
321
+ // url in string (includes quotes), e.g. "https://..."
322
+ {
323
+ tag: [t2.special(t2.string)],
324
+ color: "#7DD3FC"
325
+ }
326
+ ]
327
+ });
328
+
329
+ // src/components/code-editor/theme/index.ts
330
+ themes.register("dark", darkTheme);
331
+ themes.register("light", lightTheme);
332
+
333
+ // src/components/code-editor/editor.tsx
334
+ var OriginCodeEditor = createRenderer(preset, [
335
+ EditorView.theme({
336
+ "&.cm-focused": {
337
+ outline: "none"
338
+ }
339
+ })
340
+ ]);
341
+ function CodeEditor({
342
+ value,
343
+ onChange,
344
+ languageId = "python",
345
+ theme = "light",
346
+ children,
347
+ placeholder,
348
+ activeLinePlaceholder,
349
+ options,
350
+ readonly
351
+ }) {
352
+ const editorRef = useRef(null);
353
+ useEffect(() => {
354
+ if (languageId === "typescript") {
355
+ initTsWorker();
356
+ }
357
+ }, [languageId]);
358
+ useEffect(() => {
359
+ if (editorRef.current?.getValue() !== value) {
360
+ editorRef.current?.setValue(String(value || ""));
361
+ }
362
+ }, [value]);
363
+ return /* @__PURE__ */ React.createElement(EditorProvider, null, /* @__PURE__ */ React.createElement(
364
+ OriginCodeEditor,
365
+ {
366
+ defaultValue: String(value || ""),
367
+ options: {
368
+ uri: `file:///untitled${getSuffixByLanguageId(languageId)}`,
369
+ languageId,
370
+ theme,
371
+ placeholder,
372
+ readOnly: readonly,
373
+ editable: !readonly,
374
+ ...options || {}
375
+ },
376
+ didMount: (editor) => {
377
+ editorRef.current = editor;
378
+ },
379
+ onChange: (e) => onChange?.(e.value)
380
+ },
381
+ activeLinePlaceholder && /* @__PURE__ */ React.createElement(ActiveLinePlaceholder, null, activeLinePlaceholder),
382
+ children
383
+ ));
384
+ }
385
+ export {
386
+ CodeEditor
387
+ };
388
+ //# sourceMappingURL=editor-E2BQTPCD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/code-editor/editor.tsx","../../src/components/code-editor/utils.ts","../../src/components/code-editor/language-features.ts","../../src/components/code-editor/theme/index.ts","../../src/components/code-editor/theme/light.ts","../../src/components/code-editor/theme/dark.ts"],"sourcesContent":["/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport React, { useEffect, useRef } from 'react';\n\nimport {\n ActiveLinePlaceholder,\n createRenderer,\n EditorProvider,\n InferValues,\n} from '@coze-editor/editor/react';\nimport preset, { type EditorAPI } from '@coze-editor/editor/preset-code';\nimport { EditorView } from '@codemirror/view';\n\nimport { getSuffixByLanguageId } from './utils';\nimport { initTsWorker } from './language-features';\n\nimport './theme';\nimport './language-features';\n\nconst OriginCodeEditor = createRenderer(preset, [\n EditorView.theme({\n '&.cm-focused': {\n outline: 'none',\n },\n }),\n]);\n\ntype Preset = typeof preset;\ntype Options = Partial<InferValues<Preset[number]>>;\n\nexport interface CodeEditorPropsType extends React.PropsWithChildren<{}> {\n value?: string;\n onChange?: (value: string) => void;\n languageId: 'python' | 'typescript' | 'shell' | 'json';\n theme?: 'dark' | 'light';\n placeholder?: string;\n activeLinePlaceholder?: string;\n readonly?: boolean;\n options?: Options;\n}\n\nexport function CodeEditor({\n value,\n onChange,\n languageId = 'python',\n theme = 'light',\n children,\n placeholder,\n activeLinePlaceholder,\n options,\n readonly,\n}: CodeEditorPropsType) {\n const editorRef = useRef<EditorAPI | null>(null);\n\n useEffect(() => {\n if (languageId === 'typescript') {\n initTsWorker();\n }\n }, [languageId]);\n\n useEffect(() => {\n // listen to value change\n if (editorRef.current?.getValue() !== value) {\n editorRef.current?.setValue(String(value || ''));\n }\n }, [value]);\n\n return (\n <EditorProvider>\n <OriginCodeEditor\n defaultValue={String(value || '')}\n options={{\n uri: `file:///untitled${getSuffixByLanguageId(languageId)}`,\n languageId,\n theme,\n placeholder,\n readOnly: readonly,\n editable: !readonly,\n ...(options || {}),\n }}\n didMount={(editor: EditorAPI) => {\n editorRef.current = editor;\n }}\n onChange={(e) => onChange?.(e.value)}\n >\n {activeLinePlaceholder && (\n <ActiveLinePlaceholder>{activeLinePlaceholder}</ActiveLinePlaceholder>\n )}\n {children}\n </OriginCodeEditor>\n </EditorProvider>\n );\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nexport function getSuffixByLanguageId(languageId: string) {\n if (languageId === 'python') {\n return '.py';\n }\n if (languageId === 'typescript') {\n return '.ts';\n }\n if (languageId === 'shell') {\n return '.sh';\n }\n if (languageId === 'json') {\n return '.json';\n }\n return '';\n}\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { languages } from '@coze-editor/editor/preset-code';\nimport { typescript } from '@coze-editor/editor/language-typescript';\nimport { shell } from '@coze-editor/editor/language-shell';\nimport { python } from '@coze-editor/editor/language-python';\nimport { json } from '@coze-editor/editor/language-json';\nimport { mixLanguages } from '@coze-editor/editor';\n\nlanguages.register('python', python);\nlanguages.register('shell', shell);\nlanguages.register('typescript', typescript);\n\nlanguages.register('json', {\n // mixLanguages is used to solve the problem that interpolation also uses parentheses, which causes incorrect highlighting\n language: mixLanguages({\n outerLanguage: json.language,\n }),\n languageService: json.languageService,\n});\n\nlet tsWorkerInit = false;\n\nexport const initTsWorker = () => {\n if (tsWorkerInit) {\n return;\n }\n tsWorkerInit = true;\n\n const tsWorker = new Worker(\n new URL(`@coze-editor/editor/language-typescript/worker`, import.meta.url),\n { type: 'module' }\n );\n typescript.languageService.initialize(tsWorker, {\n compilerOptions: {\n // eliminate Promise error\n lib: ['es2015', 'dom'],\n noImplicitAny: false,\n },\n });\n};\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { themes } from '@coze-editor/editor/preset-code';\n\nimport { lightTheme } from './light';\nimport { darkTheme } from './dark';\n\nthemes.register('dark', darkTheme);\nthemes.register('light', lightTheme);\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { createTheme, tags as t } from '@coze-editor/editor/preset-code';\nimport { type Extension } from '@codemirror/state';\n\nconst colors = {\n background: '#FFFFFF',\n comment: '#6B7280',\n key: '#2563EB',\n variable: '#DC2626',\n string: '#059669',\n number: '#EA580C',\n boolean: '#7C3AED',\n null: '#7C3AED',\n separator: '#374151',\n};\n\nexport const lightTheme: Extension = createTheme({\n variant: 'light',\n settings: {\n background: '#FFFFFF',\n foreground: '#1F2937',\n caret: '#2563EB',\n selection: '#E5E7EB',\n gutterBackground: '#F9FAFB',\n gutterForeground: '#6B7280',\n gutterBorderColor: 'transparent',\n gutterBorderWidth: 0,\n lineHighlight: '#F3F4F680',\n bracketColors: ['#F59E0B', '#8B5CF6', '#06B6D4'],\n tooltip: {\n backgroundColor: '#FFFFFF',\n color: '#1F2937',\n border: '1px solid #E5E7EB',\n boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06)',\n },\n link: {\n color: '#2563EB',\n },\n completionItemHover: {\n backgroundColor: '#F3F4F6',\n },\n completionItemSelected: {\n backgroundColor: '#E5E7EB',\n },\n completionItemIcon: {\n color: '#4B5563',\n },\n completionItemLabel: {\n color: '#1F2937',\n },\n completionItemInfo: {\n color: '#4B5563',\n },\n completionItemDetail: {\n color: '#6B7280',\n },\n },\n styles: [\n // JSON\n {\n tag: t.comment,\n color: colors.comment,\n },\n {\n tag: [t.propertyName],\n color: colors.key,\n },\n {\n tag: [t.variableName],\n color: colors.variable,\n },\n\n {\n tag: [t.string],\n color: colors.string,\n },\n {\n tag: [t.number],\n color: colors.number,\n },\n {\n tag: [t.bool],\n color: colors.boolean,\n },\n {\n tag: [t.null],\n color: colors.null,\n },\n {\n tag: [t.separator],\n color: colors.separator,\n },\n\n // markdown\n {\n tag: [t.heading],\n color: '#2563EB',\n },\n {\n tag: [t.processingInstruction],\n color: '#2563EB',\n },\n\n // js\n {\n tag: [t.definitionKeyword],\n color: '#9333EA',\n },\n {\n tag: [t.modifier],\n color: '#9333EA',\n },\n {\n tag: [t.controlKeyword],\n color: '#9333EA',\n },\n {\n tag: [t.operatorKeyword],\n color: '#9333EA',\n },\n\n // shell\n // curl\n {\n tag: [t.standard(t.variableName)],\n color: '#059669',\n },\n // -X\n {\n tag: [t.attributeName],\n color: '#EA580C',\n },\n // url in string (includes quotes), e.g. \"https://...\"\n {\n tag: [t.special(t.string)],\n color: '#2563EB',\n },\n ],\n});\n","/**\n * Copyright (c) 2025 Bytedance Ltd. and/or its affiliates\n * SPDX-License-Identifier: MIT\n */\n\nimport { createTheme, tags as t } from '@coze-editor/editor/preset-code';\nimport { type Extension } from '@codemirror/state';\n\nconst colors = {\n background: '#0D1117',\n // syntax - 现代化暗色主题配色\n comment: '#8B949E',\n key: '#7DD3FC',\n variable: '#F472B6',\n string: '#34D399',\n number: '#FBBF24',\n boolean: '#A78BFA',\n null: '#A78BFA',\n separator: '#E6EDF3',\n};\n\nexport const darkTheme: Extension = createTheme({\n variant: 'dark',\n settings: {\n background: colors.background,\n foreground: '#E6EDF3',\n caret: '#7DD3FC',\n selection: '#264F7833',\n gutterBackground: colors.background,\n gutterForeground: '#6E7681',\n gutterBorderColor: 'transparent',\n gutterBorderWidth: 0,\n lineHighlight: '#21262D',\n bracketColors: ['#FBBF24', '#A78BFA', '#7DD3FC'],\n tooltip: {\n backgroundColor: '#21262D',\n color: '#E6EDF3',\n border: '1px solid #30363D',\n },\n link: {\n color: '#58A6FF',\n },\n completionItemHover: {\n backgroundColor: '#21262D',\n },\n completionItemSelected: {\n backgroundColor: '#1F6EEB',\n },\n completionItemIcon: {\n color: '#8B949E',\n },\n completionItemLabel: {\n color: '#E6EDF3',\n },\n completionItemInfo: {\n color: '#8B949E',\n },\n completionItemDetail: {\n color: '#6E7681',\n },\n },\n styles: [\n // json\n {\n tag: t.comment,\n color: colors.comment,\n },\n {\n tag: [t.propertyName],\n color: colors.key,\n },\n {\n tag: [t.string],\n color: colors.string,\n },\n {\n tag: [t.number],\n color: colors.number,\n },\n {\n tag: [t.bool],\n color: colors.boolean,\n },\n {\n tag: [t.null],\n color: colors.null,\n },\n {\n tag: [t.separator],\n color: colors.separator,\n },\n\n // js\n {\n tag: [t.definitionKeyword],\n color: '#C084FC',\n },\n {\n tag: [t.modifier],\n color: '#C084FC',\n },\n {\n tag: [t.controlKeyword],\n color: '#C084FC',\n },\n {\n tag: [t.operatorKeyword],\n color: '#C084FC',\n },\n\n // markdown\n {\n tag: [t.heading],\n color: '#7DD3FC',\n },\n {\n tag: [t.processingInstruction],\n color: '#7DD3FC',\n },\n\n // shell\n // curl\n {\n tag: [t.standard(t.variableName)],\n color: '#34D399',\n },\n // -X\n {\n tag: [t.attributeName],\n color: '#FBBF24',\n },\n // url in string (includes quotes), e.g. \"https://...\"\n {\n tag: [t.special(t.string)],\n color: '#7DD3FC',\n },\n ],\n});\n"],"mappings":"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","names":["createTheme","t","colors"]}
@@ -0,0 +1,282 @@
1
+ import {
2
+ CodeEditor,
3
+ useVariableTree
4
+ } from "./chunk-G4HQ7OSI.js";
5
+ import {
6
+ polyfillCreateRoot
7
+ } from "./chunk-QIJ4QVB2.js";
8
+
9
+ // src/components/json-editor-with-variables/editor.tsx
10
+ import React3 from "react";
11
+ import { I18n } from "@flowgram.ai/editor";
12
+ import { transformerCreator } from "@coze-editor/editor/preset-code";
13
+
14
+ // src/components/json-editor-with-variables/extensions/variable-tree.tsx
15
+ import React, { useEffect, useState } from "react";
16
+ import { Popover, Tree } from "@douyinfe/semi-ui";
17
+ import {
18
+ Mention,
19
+ getCurrentMentionReplaceRange,
20
+ useEditor,
21
+ PositionMirror
22
+ } from "@coze-editor/editor/react";
23
+ function VariableTree() {
24
+ const [posKey, setPosKey] = useState("");
25
+ const [visible, setVisible] = useState(false);
26
+ const [position, setPosition] = useState(-1);
27
+ const editor = useEditor();
28
+ function insert(variablePath) {
29
+ const range = getCurrentMentionReplaceRange(editor.$view.state);
30
+ if (!range) {
31
+ return;
32
+ }
33
+ editor.replaceText({
34
+ ...range,
35
+ text: "{{" + variablePath + "}}"
36
+ });
37
+ setVisible(false);
38
+ }
39
+ function handleOpenChange(e) {
40
+ setPosition(e.state.selection.main.head);
41
+ setVisible(e.value);
42
+ }
43
+ useEffect(() => {
44
+ if (!editor) {
45
+ return;
46
+ }
47
+ }, [editor, visible]);
48
+ const treeData = useVariableTree({});
49
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Mention, { triggerCharacters: ["@"], onOpenChange: handleOpenChange }), /* @__PURE__ */ React.createElement(
50
+ Popover,
51
+ {
52
+ visible,
53
+ trigger: "custom",
54
+ position: "topLeft",
55
+ rePosKey: posKey,
56
+ content: /* @__PURE__ */ React.createElement("div", { style: { width: 300 } }, /* @__PURE__ */ React.createElement(
57
+ Tree,
58
+ {
59
+ treeData,
60
+ onSelect: (v) => {
61
+ insert(v);
62
+ }
63
+ }
64
+ ))
65
+ },
66
+ /* @__PURE__ */ React.createElement(
67
+ PositionMirror,
68
+ {
69
+ position,
70
+ onChange: () => setPosKey(String(Math.random()))
71
+ }
72
+ )
73
+ ));
74
+ }
75
+
76
+ // src/components/json-editor-with-variables/extensions/variable-tag.tsx
77
+ import React2, { useLayoutEffect } from "react";
78
+ import { isEqual, last } from "lodash";
79
+ import {
80
+ Disposable,
81
+ DisposableCollection,
82
+ useCurrentScope
83
+ } from "@flowgram.ai/editor";
84
+ import { Popover as Popover2 } from "@douyinfe/semi-ui";
85
+ import { IconIssueStroked } from "@douyinfe/semi-icons";
86
+ import { useInjector } from "@coze-editor/editor/react";
87
+ import {
88
+ Decoration,
89
+ EditorView,
90
+ MatchDecorator,
91
+ ViewPlugin,
92
+ WidgetType
93
+ } from "@codemirror/view";
94
+
95
+ // src/components/json-editor-with-variables/styles.tsx
96
+ import styled from "styled-components";
97
+ import { Tag } from "@douyinfe/semi-ui";
98
+ var UIRootTitle = styled.div`
99
+ margin-right: 4px;
100
+ min-width: 20px;
101
+ overflow: hidden;
102
+ text-overflow: ellipsis;
103
+ white-space: nowrap;
104
+ color: var(--semi-color-text-2);
105
+ `;
106
+ var UIVarName = styled.div`
107
+ overflow: hidden;
108
+ text-overflow: ellipsis;
109
+ white-space: nowrap;
110
+ `;
111
+ var UITag = styled(Tag)`
112
+ display: inline-flex;
113
+ align-items: center;
114
+ justify-content: flex-start;
115
+ max-width: 300px;
116
+
117
+ & .semi-tag-content-center {
118
+ justify-content: flex-start;
119
+ }
120
+
121
+ &.semi-tag {
122
+ margin: 0 5px;
123
+ }
124
+ `;
125
+ var UIPopoverContent = styled.div`
126
+ padding: 10px;
127
+ display: inline-flex;
128
+ align-items: center;
129
+ justify-content: flex-start;
130
+ `;
131
+
132
+ // src/components/json-editor-with-variables/extensions/variable-tag.tsx
133
+ var VariableTagWidget = class extends WidgetType {
134
+ constructor({ keyPath, scope }) {
135
+ super();
136
+ this.toDispose = new DisposableCollection();
137
+ this.renderIcon = (icon) => {
138
+ if (typeof icon === "string") {
139
+ return /* @__PURE__ */ React2.createElement("img", { style: { marginRight: 8 }, width: 12, height: 12, src: icon });
140
+ }
141
+ return icon;
142
+ };
143
+ this.keyPath = keyPath;
144
+ this.scope = scope;
145
+ }
146
+ renderVariable(v) {
147
+ if (!v) {
148
+ this.root.render(
149
+ /* @__PURE__ */ React2.createElement(UITag, { prefixIcon: /* @__PURE__ */ React2.createElement(IconIssueStroked, null), color: "amber" }, "Unknown")
150
+ );
151
+ return;
152
+ }
153
+ const rootField = last(v.parentFields);
154
+ const rootTitle = /* @__PURE__ */ React2.createElement(UIRootTitle, null, rootField?.meta.title ? `${rootField.meta.title} -` : "");
155
+ const rootIcon = this.renderIcon(rootField?.meta.icon);
156
+ this.root.render(
157
+ /* @__PURE__ */ React2.createElement(
158
+ Popover2,
159
+ {
160
+ content: /* @__PURE__ */ React2.createElement(UIPopoverContent, null, rootIcon, rootTitle, /* @__PURE__ */ React2.createElement(UIVarName, null, v?.keyPath.slice(1).join(".")))
161
+ },
162
+ /* @__PURE__ */ React2.createElement(UITag, { prefixIcon: rootIcon }, rootTitle, /* @__PURE__ */ React2.createElement(UIVarName, null, v?.key))
163
+ )
164
+ );
165
+ }
166
+ toDOM(view) {
167
+ const dom = document.createElement("span");
168
+ this.root = polyfillCreateRoot(dom);
169
+ this.toDispose.push(
170
+ Disposable.create(() => {
171
+ this.root.unmount();
172
+ })
173
+ );
174
+ this.toDispose.push(
175
+ this.scope.available.trackByKeyPath(
176
+ this.keyPath,
177
+ (v) => {
178
+ this.renderVariable(v);
179
+ },
180
+ { triggerOnInit: false }
181
+ )
182
+ );
183
+ this.renderVariable(this.scope.available.getByKeyPath(this.keyPath));
184
+ return dom;
185
+ }
186
+ eq(other) {
187
+ return isEqual(this.keyPath, other.keyPath);
188
+ }
189
+ ignoreEvent() {
190
+ return false;
191
+ }
192
+ destroy(dom) {
193
+ this.toDispose.dispose();
194
+ }
195
+ };
196
+ function VariableTagInject() {
197
+ const injector = useInjector();
198
+ const scope = useCurrentScope();
199
+ useLayoutEffect(() => {
200
+ const atMatcher = new MatchDecorator({
201
+ regexp: /\{\{([^\}\{]+)\}\}/g,
202
+ decoration: (match) => Decoration.replace({
203
+ widget: new VariableTagWidget({
204
+ keyPath: match[1]?.split(".") ?? [],
205
+ scope
206
+ })
207
+ })
208
+ });
209
+ return injector.inject([
210
+ ViewPlugin.fromClass(
211
+ class {
212
+ constructor(view) {
213
+ this.view = view;
214
+ this.decorations = atMatcher.createDeco(view);
215
+ }
216
+ update() {
217
+ this.decorations = atMatcher.createDeco(this.view);
218
+ }
219
+ },
220
+ {
221
+ decorations: (p) => p.decorations,
222
+ provide(p) {
223
+ return EditorView.atomicRanges.of(
224
+ (view) => view.plugin(p)?.decorations ?? Decoration.none
225
+ );
226
+ }
227
+ }
228
+ )
229
+ ]);
230
+ }, [injector]);
231
+ return null;
232
+ }
233
+
234
+ // src/components/json-editor-with-variables/editor.tsx
235
+ function findAllMatches(inputString, regex) {
236
+ const globalRegex = new RegExp(
237
+ regex,
238
+ regex.flags.includes("g") ? regex.flags : regex.flags + "g"
239
+ );
240
+ let match;
241
+ const matches = [];
242
+ while ((match = globalRegex.exec(inputString)) !== null) {
243
+ if (match.index === globalRegex.lastIndex) {
244
+ globalRegex.lastIndex++;
245
+ }
246
+ matches.push({
247
+ match: match[0],
248
+ range: [match.index, match.index + match[0].length]
249
+ });
250
+ }
251
+ return matches;
252
+ }
253
+ var transformer = transformerCreator((text) => {
254
+ const originalSource = text.toString();
255
+ const matches = findAllMatches(originalSource, /\{\{([^\}]*)\}\}/g);
256
+ if (matches.length > 0) {
257
+ matches.forEach(({ range }) => {
258
+ text.replaceRange(range[0], range[1], "null");
259
+ });
260
+ }
261
+ return text;
262
+ });
263
+ function JsonEditorWithVariables(props) {
264
+ return /* @__PURE__ */ React3.createElement(
265
+ CodeEditor,
266
+ {
267
+ languageId: "json",
268
+ activeLinePlaceholder: I18n.t("Press '@' to Select variable"),
269
+ ...props,
270
+ options: {
271
+ transformer,
272
+ ...props.options || {}
273
+ }
274
+ },
275
+ /* @__PURE__ */ React3.createElement(VariableTree, null),
276
+ /* @__PURE__ */ React3.createElement(VariableTagInject, null)
277
+ );
278
+ }
279
+ export {
280
+ JsonEditorWithVariables
281
+ };
282
+ //# sourceMappingURL=editor-H2R7JJLO.js.map