@flowgram.ai/form-materials 0.4.5 → 0.4.7

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 (57) hide show
  1. package/dist/esm/chunk-727SU246.js +13 -0
  2. package/dist/esm/chunk-727SU246.js.map +1 -0
  3. package/dist/esm/chunk-DEZUEMUM.js +284 -0
  4. package/dist/esm/chunk-DEZUEMUM.js.map +1 -0
  5. package/dist/esm/chunk-MFDEE4HB.js +440 -0
  6. package/dist/esm/chunk-MFDEE4HB.js.map +1 -0
  7. package/dist/esm/editor-2YHACGQ2.js +282 -0
  8. package/dist/esm/editor-2YHACGQ2.js.map +1 -0
  9. package/dist/esm/editor-6UMULJYB.js +180 -0
  10. package/dist/esm/editor-6UMULJYB.js.map +1 -0
  11. package/dist/esm/editor-E2BQTPCD.js +388 -0
  12. package/dist/esm/editor-E2BQTPCD.js.map +1 -0
  13. package/dist/esm/editor-G63XGWH2.js +249 -0
  14. package/dist/esm/editor-G63XGWH2.js.map +1 -0
  15. package/dist/esm/editor-OXPGKPF5.js +167 -0
  16. package/dist/esm/editor-OXPGKPF5.js.map +1 -0
  17. package/dist/esm/index.js +607 -2300
  18. package/dist/esm/index.js.map +1 -1
  19. package/dist/index.d.mts +141 -51
  20. package/dist/index.d.ts +141 -51
  21. package/dist/index.js +3545 -2825
  22. package/dist/index.js.map +1 -1
  23. package/package.json +8 -8
  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-mini/index.tsx +2 -2
  27. package/src/components/condition-row/index.tsx +4 -0
  28. package/src/components/db-condition-row/hooks/use-left.tsx +66 -0
  29. package/src/components/db-condition-row/hooks/use-op.tsx +59 -0
  30. package/src/components/db-condition-row/index.tsx +93 -0
  31. package/src/components/db-condition-row/styles.tsx +43 -0
  32. package/src/components/db-condition-row/types.ts +34 -0
  33. package/src/components/display-inputs-values/index.tsx +1 -1
  34. package/src/components/dynamic-value-input/hooks.ts +1 -1
  35. package/src/components/index.ts +1 -0
  36. package/src/components/inputs-values-tree/hooks/use-child-list.tsx +1 -1
  37. package/src/components/json-editor-with-variables/editor.tsx +69 -0
  38. package/src/components/json-editor-with-variables/extensions/variable-tag.tsx +1 -1
  39. package/src/components/json-editor-with-variables/index.tsx +5 -60
  40. package/src/components/json-schema-editor/hooks.tsx +1 -1
  41. package/src/components/prompt-editor/editor.tsx +81 -0
  42. package/src/components/prompt-editor/index.tsx +5 -69
  43. package/src/components/prompt-editor-with-inputs/editor.tsx +25 -0
  44. package/src/components/prompt-editor-with-inputs/index.tsx +5 -15
  45. package/src/components/prompt-editor-with-inputs/inputs-picker.tsx +1 -1
  46. package/src/components/prompt-editor-with-variables/editor.tsx +22 -0
  47. package/src/components/prompt-editor-with-variables/extensions/variable-tag.tsx +1 -1
  48. package/src/components/prompt-editor-with-variables/index.tsx +5 -13
  49. package/src/effects/validate-when-variable-sync/index.ts +1 -1
  50. package/src/form-plugins/infer-assign-plugin/index.ts +1 -1
  51. package/src/form-plugins/infer-inputs-plugin/index.ts +1 -1
  52. package/src/hooks/use-object-list/index.tsx +1 -1
  53. package/src/shared/flow-value/utils.ts +1 -1
  54. package/src/shared/format-legacy-refs/index.ts +1 -1
  55. package/src/shared/index.ts +1 -0
  56. package/src/shared/lazy-suspense/index.tsx +28 -0
  57. package/src/validate/validate-flow-value/index.tsx +1 -1
@@ -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,249 @@
1
+ import {
2
+ PromptEditor
3
+ } from "./chunk-727SU246.js";
4
+ import {
5
+ useVariableTree
6
+ } from "./chunk-MFDEE4HB.js";
7
+ import {
8
+ polyfillCreateRoot
9
+ } from "./chunk-DEZUEMUM.js";
10
+
11
+ // src/components/prompt-editor-with-variables/editor.tsx
12
+ import React3 from "react";
13
+
14
+ // src/components/prompt-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
+ let { from, to } = range;
34
+ while (editor.$view.state.doc.sliceString(from - 1, from) === "{") {
35
+ from--;
36
+ }
37
+ while (editor.$view.state.doc.sliceString(to, to + 1) === "}") {
38
+ to++;
39
+ }
40
+ editor.replaceText({
41
+ from,
42
+ to,
43
+ text: "{{" + variablePath + "}}"
44
+ });
45
+ setVisible(false);
46
+ }
47
+ function handleOpenChange(e) {
48
+ setPosition(e.state.selection.main.head);
49
+ setVisible(e.value);
50
+ }
51
+ useEffect(() => {
52
+ if (!editor) {
53
+ return;
54
+ }
55
+ }, [editor, visible]);
56
+ const treeData = useVariableTree({});
57
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Mention, { triggerCharacters: ["{", "{}", "@"], onOpenChange: handleOpenChange }), /* @__PURE__ */ React.createElement(
58
+ Popover,
59
+ {
60
+ visible,
61
+ trigger: "custom",
62
+ position: "topLeft",
63
+ rePosKey: posKey,
64
+ content: /* @__PURE__ */ React.createElement("div", { style: { width: 300 } }, /* @__PURE__ */ React.createElement(
65
+ Tree,
66
+ {
67
+ treeData,
68
+ onSelect: (v) => {
69
+ insert(v);
70
+ }
71
+ }
72
+ ))
73
+ },
74
+ /* @__PURE__ */ React.createElement(
75
+ PositionMirror,
76
+ {
77
+ position,
78
+ onChange: () => setPosKey(String(Math.random()))
79
+ }
80
+ )
81
+ ));
82
+ }
83
+
84
+ // src/components/prompt-editor-with-variables/extensions/variable-tag.tsx
85
+ import React2, { useLayoutEffect } from "react";
86
+ import { isEqual, last } from "lodash-es";
87
+ import {
88
+ Disposable,
89
+ DisposableCollection,
90
+ useCurrentScope
91
+ } from "@flowgram.ai/editor";
92
+ import { Popover as Popover2 } from "@douyinfe/semi-ui";
93
+ import { IconIssueStroked } from "@douyinfe/semi-icons";
94
+ import { useInjector } from "@coze-editor/editor/react";
95
+ import {
96
+ Decoration,
97
+ EditorView,
98
+ MatchDecorator,
99
+ ViewPlugin,
100
+ WidgetType
101
+ } from "@codemirror/view";
102
+
103
+ // src/components/prompt-editor-with-variables/styles.tsx
104
+ import styled from "styled-components";
105
+ import { Tag } from "@douyinfe/semi-ui";
106
+ var UIRootTitle = styled.div`
107
+ margin-right: 4px;
108
+ min-width: 20px;
109
+ overflow: hidden;
110
+ text-overflow: ellipsis;
111
+ white-space: nowrap;
112
+ color: var(--semi-color-text-2);
113
+ `;
114
+ var UIVarName = styled.div`
115
+ overflow: hidden;
116
+ text-overflow: ellipsis;
117
+ white-space: nowrap;
118
+ `;
119
+ var UITag = styled(Tag)`
120
+ display: inline-flex;
121
+ align-items: center;
122
+ justify-content: flex-start;
123
+ max-width: 300px;
124
+
125
+ & .semi-tag-content-center {
126
+ justify-content: flex-start;
127
+ }
128
+
129
+ &.semi-tag {
130
+ margin: 0 5px;
131
+ }
132
+ `;
133
+ var UIPopoverContent = styled.div`
134
+ padding: 10px;
135
+ display: inline-flex;
136
+ align-items: center;
137
+ justify-content: flex-start;
138
+ `;
139
+
140
+ // src/components/prompt-editor-with-variables/extensions/variable-tag.tsx
141
+ var VariableTagWidget = class extends WidgetType {
142
+ constructor({ keyPath, scope }) {
143
+ super();
144
+ this.toDispose = new DisposableCollection();
145
+ this.renderIcon = (icon) => {
146
+ if (typeof icon === "string") {
147
+ return /* @__PURE__ */ React2.createElement("img", { style: { marginRight: 8 }, width: 12, height: 12, src: icon });
148
+ }
149
+ return icon;
150
+ };
151
+ this.keyPath = keyPath;
152
+ this.scope = scope;
153
+ }
154
+ renderVariable(v) {
155
+ if (!v) {
156
+ this.root.render(
157
+ /* @__PURE__ */ React2.createElement(UITag, { prefixIcon: /* @__PURE__ */ React2.createElement(IconIssueStroked, null), color: "amber" }, "Unknown")
158
+ );
159
+ return;
160
+ }
161
+ const rootField = last(v.parentFields);
162
+ const rootTitle = /* @__PURE__ */ React2.createElement(UIRootTitle, null, rootField?.meta.title ? `${rootField.meta.title} -` : "");
163
+ const rootIcon = this.renderIcon(rootField?.meta.icon);
164
+ this.root.render(
165
+ /* @__PURE__ */ React2.createElement(
166
+ Popover2,
167
+ {
168
+ content: /* @__PURE__ */ React2.createElement(UIPopoverContent, null, rootIcon, rootTitle, /* @__PURE__ */ React2.createElement(UIVarName, null, v?.keyPath.slice(1).join(".")))
169
+ },
170
+ /* @__PURE__ */ React2.createElement(UITag, { prefixIcon: rootIcon }, rootTitle, /* @__PURE__ */ React2.createElement(UIVarName, null, v?.key))
171
+ )
172
+ );
173
+ }
174
+ toDOM(view) {
175
+ const dom = document.createElement("span");
176
+ this.root = polyfillCreateRoot(dom);
177
+ this.toDispose.push(
178
+ Disposable.create(() => {
179
+ this.root.unmount();
180
+ })
181
+ );
182
+ this.toDispose.push(
183
+ this.scope.available.trackByKeyPath(
184
+ this.keyPath,
185
+ (v) => {
186
+ this.renderVariable(v);
187
+ },
188
+ { triggerOnInit: false }
189
+ )
190
+ );
191
+ this.renderVariable(this.scope.available.getByKeyPath(this.keyPath));
192
+ return dom;
193
+ }
194
+ eq(other) {
195
+ return isEqual(this.keyPath, other.keyPath);
196
+ }
197
+ ignoreEvent() {
198
+ return false;
199
+ }
200
+ destroy(dom) {
201
+ this.toDispose.dispose();
202
+ }
203
+ };
204
+ function VariableTagInject() {
205
+ const injector = useInjector();
206
+ const scope = useCurrentScope();
207
+ useLayoutEffect(() => {
208
+ const atMatcher = new MatchDecorator({
209
+ regexp: /\{\{([^\}\{]+)\}\}/g,
210
+ decoration: (match) => Decoration.replace({
211
+ widget: new VariableTagWidget({
212
+ keyPath: match[1]?.split(".") ?? [],
213
+ scope
214
+ })
215
+ })
216
+ });
217
+ return injector.inject([
218
+ ViewPlugin.fromClass(
219
+ class {
220
+ constructor(view) {
221
+ this.view = view;
222
+ this.decorations = atMatcher.createDeco(view);
223
+ }
224
+ update() {
225
+ this.decorations = atMatcher.createDeco(this.view);
226
+ }
227
+ },
228
+ {
229
+ decorations: (p) => p.decorations,
230
+ provide(p) {
231
+ return EditorView.atomicRanges.of(
232
+ (view) => view.plugin(p)?.decorations ?? Decoration.none
233
+ );
234
+ }
235
+ }
236
+ )
237
+ ]);
238
+ }, [injector]);
239
+ return null;
240
+ }
241
+
242
+ // src/components/prompt-editor-with-variables/editor.tsx
243
+ function PromptEditorWithVariables(props) {
244
+ return /* @__PURE__ */ React3.createElement(PromptEditor, { ...props }, /* @__PURE__ */ React3.createElement(VariableTree, null), /* @__PURE__ */ React3.createElement(VariableTagInject, null));
245
+ }
246
+ export {
247
+ PromptEditorWithVariables
248
+ };
249
+ //# sourceMappingURL=editor-G63XGWH2.js.map