@veltra/desktop 1.0.13 → 1.0.14
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.
- package/dist/components/action/action-group.js +110 -3
- package/dist/components/action/action-group.js.map +1 -1
- package/dist/components/action/action-group.vue.d.ts +16 -3
- package/dist/components/action/action.js +26 -13
- package/dist/components/action/action.js.map +1 -1
- package/dist/components/action/action.vue.d.ts +2 -2
- package/dist/components/action/style.js +2 -1
- package/dist/components/action/style2.css +35 -7
- package/dist/components/auto-complete/auto-complete.vue.d.ts +2 -2
- package/dist/components/batch-edit/batch-edit-form.js +106 -42
- package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
- package/dist/components/batch-edit/batch-edit-list.js +84 -47
- package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
- package/dist/components/batch-edit/batch-edit.js +42 -10
- package/dist/components/batch-edit/batch-edit.js.map +1 -1
- package/dist/components/batch-edit/style.js +2 -4
- package/dist/components/batch-edit/style2.css +202 -30
- package/dist/components/batch-edit/use-edit.js +45 -9
- package/dist/components/batch-edit/use-edit.js.map +1 -1
- package/dist/components/cascade/cascade.js +3 -1
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +2 -2
- package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
- package/dist/components/checkbox-group/checkbox-group.vue.d.ts +2 -2
- package/dist/components/code-editor/code-editor.js +145 -49
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/code-editor.vue.d.ts +2 -0
- package/dist/components/code-editor/style2.css +87 -19
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-picker/date-picker.vue.d.ts +2 -2
- package/dist/components/date-range-picker/date-range-picker.vue.d.ts +2 -2
- package/dist/components/dialog/dialog.js +6 -2
- package/dist/components/dialog/dialog.js.map +1 -1
- package/dist/components/dialog/style2.css +2 -3
- package/dist/components/expression-editor/components/path-preview.js +27 -0
- package/dist/components/expression-editor/components/path-preview.js.map +1 -0
- package/dist/components/expression-editor/components/variable-picker.js +199 -153
- package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
- package/dist/components/expression-editor/core/chip.js +54 -0
- package/dist/components/expression-editor/core/chip.js.map +1 -0
- package/dist/components/expression-editor/core/editor.js +424 -0
- package/dist/components/expression-editor/core/editor.js.map +1 -0
- package/dist/components/expression-editor/core/mention.js +91 -0
- package/dist/components/expression-editor/core/mention.js.map +1 -0
- package/dist/components/expression-editor/core/model.js +64 -0
- package/dist/components/expression-editor/core/model.js.map +1 -0
- package/dist/components/expression-editor/di.js +4 -10
- package/dist/components/expression-editor/di.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.js +168 -114
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/expression-editor/expression-editor.vue.d.ts +2 -1
- package/dist/components/expression-editor/style.js +0 -2
- package/dist/components/expression-editor/style2.css +145 -219
- package/dist/components/index.js +54 -54
- package/dist/components/input/input.vue.d.ts +2 -2
- package/dist/components/layout/layout.js +12 -11
- package/dist/components/layout/layout.js.map +1 -1
- package/dist/components/multi-select/multi-select.vue.d.ts +3 -3
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +3 -3
- package/dist/components/notification/notification.vue.d.ts +1 -1
- package/dist/components/number/number.vue.d.ts +1 -1
- package/dist/components/number-input/number-input.js +4 -4
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-input/number-input.vue.d.ts +2 -2
- package/dist/components/number-range-input/number-range-input.vue.d.ts +1 -1
- package/dist/components/password-input/password-input.vue.d.ts +1 -1
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
- package/dist/components/radio-group/radio-group.vue.d.ts +2 -2
- package/dist/components/rich-text-editor/rich-text-editor.js +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.vue.d.ts +1 -1
- package/dist/components/rich-text-editor/toolbar.js +2 -2
- package/dist/components/select/select.vue.d.ts +2 -2
- package/dist/components/steps/steps.vue.d.ts +1 -1
- package/dist/components/table/use-table.js +16 -0
- package/dist/components/table/use-table.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +1 -1
- package/dist/components/tabs/tabs-vertical.vue.d.ts +1 -1
- package/dist/components/tabs/tabs.vue.d.ts +1 -1
- package/dist/components/textarea/textarea.vue.d.ts +2 -2
- package/dist/components/tip/tip.vue.d.ts +1 -1
- package/dist/components/tree/style2.css +18 -12
- package/dist/components/tree/tree-node.js +7 -4
- package/dist/components/tree/tree-node.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +83 -83
- package/dist/style.js +3 -3
- package/dist/types/action.d.ts +38 -4
- package/dist/types/cascade.d.ts +2 -3
- package/dist/types/code-editor.d.ts +9 -2
- package/dist/types/expression-editor.d.ts +9 -1
- package/dist/types/index.d.ts +2 -2
- package/package.json +11 -12
- package/src/components/action/action-group.vue +126 -56
- package/src/components/action/action.vue +35 -12
- package/src/components/action/style.scss +46 -10
- package/src/components/action/style.ts +2 -1
- package/src/components/batch-edit/batch-edit-form.vue +121 -45
- package/src/components/batch-edit/batch-edit-list.vue +56 -39
- package/src/components/batch-edit/batch-edit.vue +57 -6
- package/src/components/batch-edit/style.scss +251 -37
- package/src/components/batch-edit/style.ts +5 -8
- package/src/components/batch-edit/use-edit.ts +58 -11
- package/src/components/cascade/cascade.vue +3 -1
- package/src/components/code-editor/code-editor.vue +198 -63
- package/src/components/code-editor/style.scss +110 -12
- package/src/components/dialog/dialog.vue +6 -2
- package/src/components/dialog/style.scss +4 -4
- package/src/components/expression-editor/__test__/chip.test.ts +86 -0
- package/src/components/expression-editor/__test__/mention.test.ts +122 -0
- package/src/components/expression-editor/__test__/model.test.ts +127 -0
- package/src/components/expression-editor/components/path-preview.vue +32 -0
- package/src/components/expression-editor/components/variable-picker.vue +224 -219
- package/src/components/expression-editor/core/chip.ts +101 -0
- package/src/components/expression-editor/core/editor.ts +513 -0
- package/src/components/expression-editor/core/mention.ts +121 -0
- package/src/components/expression-editor/core/model.ts +109 -0
- package/src/components/expression-editor/di.ts +4 -32
- package/src/components/expression-editor/expression-editor.vue +184 -151
- package/src/components/expression-editor/style.scss +148 -220
- package/src/components/expression-editor/style.ts +0 -2
- package/src/components/layout/layout.vue +17 -19
- package/src/components/number-input/number-input.vue +4 -4
- package/src/components/table/use-table.ts +16 -0
- package/src/components/tree/style.scss +30 -33
- package/src/components/tree/tree-node.vue +4 -2
- package/src/types/action.ts +42 -4
- package/src/types/cascade.ts +4 -3
- package/src/types/code-editor.ts +9 -2
- package/src/types/expression-editor.ts +9 -0
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js +0 -65
- package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +0 -1
- package/dist/components/expression-editor/constants.js +0 -9
- package/dist/components/expression-editor/constants.js.map +0 -1
- package/dist/components/expression-editor/internal/editor-runtime/create-runtime.js +0 -47
- package/dist/components/expression-editor/internal/editor-runtime/create-runtime.js.map +0 -1
- package/dist/components/expression-editor/internal/editor-runtime/model-sync.js +0 -49
- package/dist/components/expression-editor/internal/editor-runtime/model-sync.js.map +0 -1
- package/dist/components/expression-editor/internal/features/commands/register-command-packs.js +0 -215
- package/dist/components/expression-editor/internal/features/commands/register-command-packs.js.map +0 -1
- package/dist/components/expression-editor/internal/features/drag-drop/drag-drop-service.js +0 -33
- package/dist/components/expression-editor/internal/features/drag-drop/drag-drop-service.js.map +0 -1
- package/dist/components/expression-editor/internal/features/insertion/insertion-service.js +0 -33
- package/dist/components/expression-editor/internal/features/insertion/insertion-service.js.map +0 -1
- package/dist/components/expression-editor/nodes/variable-node.js +0 -94
- package/dist/components/expression-editor/nodes/variable-node.js.map +0 -1
- package/dist/components/expression-editor/parser.js +0 -32
- package/dist/components/expression-editor/parser.js.map +0 -1
- package/dist/components/expression-editor/plain-text.js +0 -19
- package/dist/components/expression-editor/plain-text.js.map +0 -1
- package/dist/components/expression-editor/use-context.js +0 -69
- package/dist/components/expression-editor/use-context.js.map +0 -1
- package/dist/components/expression-editor/use-decorators.js +0 -27
- package/dist/components/expression-editor/use-decorators.js.map +0 -1
- package/dist/components/expression-editor/use-expression-drag-drop.js +0 -275
- package/dist/components/expression-editor/use-expression-drag-drop.js.map +0 -1
- package/src/components/batch-edit/batch-edit-new.vue +0 -168
- package/src/components/batch-edit/style-new.scss +0 -35
- package/src/components/batch-edit/use-edit-new.ts +0 -68
- package/src/components/batch-edit/use-tip.ts +0 -47
- package/src/components/expression-editor/__test__/architecture-boundaries.test.ts +0 -103
- package/src/components/expression-editor/__test__/architecture-compatibility.test.ts +0 -52
- package/src/components/expression-editor/__test__/drag-drop.test.ts +0 -171
- package/src/components/expression-editor/__test__/parser.test.ts +0 -62
- package/src/components/expression-editor/constants.ts +0 -6
- package/src/components/expression-editor/internal/contracts/editor-runtime.ts +0 -11
- package/src/components/expression-editor/internal/editor-runtime/create-runtime.ts +0 -64
- package/src/components/expression-editor/internal/editor-runtime/index.ts +0 -1
- package/src/components/expression-editor/internal/editor-runtime/model-sync.ts +0 -68
- package/src/components/expression-editor/internal/features/commands/register-command-packs.ts +0 -517
- package/src/components/expression-editor/internal/features/drag-drop/drag-drop-service.ts +0 -51
- package/src/components/expression-editor/internal/features/insertion/insertion-service.ts +0 -56
- package/src/components/expression-editor/nodes/variable-node.tsx +0 -118
- package/src/components/expression-editor/parser.ts +0 -46
- package/src/components/expression-editor/plain-text.ts +0 -25
- package/src/components/expression-editor/plan.md +0 -22
- package/src/components/expression-editor/use-context.ts +0 -134
- package/src/components/expression-editor/use-decorators.tsx +0 -29
- package/src/components/expression-editor/use-editor.ts +0 -12
- package/src/components/expression-editor/use-expression-drag-drop.ts +0 -396
package/dist/components/expression-editor/internal/features/commands/register-command-packs.js
DELETED
|
@@ -1,215 +0,0 @@
|
|
|
1
|
-
import "../../../constants.js";
|
|
2
|
-
import { autoScrollWhenNearEdge, beginDragVisualState, clearDragVisualState, clearDropIndicator, ensureDropScopeId, getActiveInternalDragPayload, readDragSourceKey, readInternalDragPayload, resolveDropSlot, showDropIndicator, writeInternalDragPayload } from "../../../use-expression-drag-drop.js";
|
|
3
|
-
import { reorderVariable } from "../drag-drop/drag-drop-service.js";
|
|
4
|
-
import { $getSelection, $isRangeSelection, $selectAll, COMMAND_PRIORITY_EDITOR, CONTROLLED_TEXT_INSERTION_COMMAND, COPY_COMMAND, CUT_COMMAND, DELETE_CHARACTER_COMMAND, DELETE_LINE_COMMAND, DELETE_WORD_COMMAND, DRAGOVER_COMMAND, DRAGSTART_COMMAND, DROP_COMMAND, INSERT_LINE_BREAK_COMMAND, INSERT_PARAGRAPH_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND, KEY_ENTER_COMMAND, PASTE_COMMAND, PASTE_TAG, REMOVE_TEXT_COMMAND, SELECT_ALL_COMMAND } from "lexical";
|
|
5
|
-
import { $getHtmlContent, $insertDataTransferForPlainText } from "@lexical/clipboard";
|
|
6
|
-
import { CAN_USE_BEFORE_INPUT, IS_APPLE_WEBKIT, IS_IOS, IS_SAFARI, mergeRegister, objectKlassEquals } from "@lexical/utils";
|
|
7
|
-
//#region src/components/expression-editor/internal/features/commands/register-command-packs.ts
|
|
8
|
-
function onCopyForPlainText(event, editor) {
|
|
9
|
-
editor.update(() => {
|
|
10
|
-
if (event !== null) {
|
|
11
|
-
const clipboardData = objectKlassEquals(event, KeyboardEvent) ? null : event.clipboardData;
|
|
12
|
-
const selection = $getSelection();
|
|
13
|
-
if (selection !== null && clipboardData != null) {
|
|
14
|
-
event.preventDefault();
|
|
15
|
-
const htmlString = $getHtmlContent(editor);
|
|
16
|
-
if (htmlString !== null) clipboardData.setData("text/html", htmlString);
|
|
17
|
-
clipboardData.setData("text/plain", selection.getTextContent());
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
function onPasteForPlainText(event, editor) {
|
|
23
|
-
event.preventDefault();
|
|
24
|
-
editor.update(() => {
|
|
25
|
-
const selection = $getSelection();
|
|
26
|
-
const clipboardData = objectKlassEquals(event, ClipboardEvent) ? event.clipboardData : null;
|
|
27
|
-
if (clipboardData != null && $isRangeSelection(selection)) $insertDataTransferForPlainText(clipboardData, selection);
|
|
28
|
-
}, { tag: PASTE_TAG });
|
|
29
|
-
}
|
|
30
|
-
function onCutForPlainText(event, editor) {
|
|
31
|
-
onCopyForPlainText(event, editor);
|
|
32
|
-
editor.update(() => {
|
|
33
|
-
const selection = $getSelection();
|
|
34
|
-
if ($isRangeSelection(selection)) selection.removeText();
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
function registerTextEditingCommands(editor) {
|
|
38
|
-
return mergeRegister(editor.registerCommand(DELETE_CHARACTER_COMMAND, (isBackward) => {
|
|
39
|
-
const selection = $getSelection();
|
|
40
|
-
if (!$isRangeSelection(selection)) return false;
|
|
41
|
-
selection.deleteCharacter(isBackward);
|
|
42
|
-
return true;
|
|
43
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DELETE_WORD_COMMAND, (isBackward) => {
|
|
44
|
-
const selection = $getSelection();
|
|
45
|
-
if (!$isRangeSelection(selection)) return false;
|
|
46
|
-
selection.deleteWord(isBackward);
|
|
47
|
-
return true;
|
|
48
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DELETE_LINE_COMMAND, (isBackward) => {
|
|
49
|
-
const selection = $getSelection();
|
|
50
|
-
if (!$isRangeSelection(selection)) return false;
|
|
51
|
-
selection.deleteLine(isBackward);
|
|
52
|
-
return true;
|
|
53
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(CONTROLLED_TEXT_INSERTION_COMMAND, (eventOrText) => {
|
|
54
|
-
const selection = $getSelection();
|
|
55
|
-
if (!$isRangeSelection(selection)) return false;
|
|
56
|
-
if (typeof eventOrText === "string") selection.insertText(eventOrText);
|
|
57
|
-
else {
|
|
58
|
-
const dataTransfer = eventOrText.dataTransfer;
|
|
59
|
-
if (dataTransfer != null) $insertDataTransferForPlainText(dataTransfer, selection);
|
|
60
|
-
else {
|
|
61
|
-
const data = eventOrText.data;
|
|
62
|
-
if (data) selection.insertText(data);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return true;
|
|
66
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(REMOVE_TEXT_COMMAND, () => {
|
|
67
|
-
const selection = $getSelection();
|
|
68
|
-
if (!$isRangeSelection(selection)) return false;
|
|
69
|
-
selection.removeText();
|
|
70
|
-
return true;
|
|
71
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_LINE_BREAK_COMMAND, (selectStart) => {
|
|
72
|
-
const selection = $getSelection();
|
|
73
|
-
if (!$isRangeSelection(selection)) return false;
|
|
74
|
-
selection.insertLineBreak(selectStart);
|
|
75
|
-
return true;
|
|
76
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(INSERT_PARAGRAPH_COMMAND, () => {
|
|
77
|
-
const selection = $getSelection();
|
|
78
|
-
if (!$isRangeSelection(selection)) return false;
|
|
79
|
-
selection.insertLineBreak();
|
|
80
|
-
return true;
|
|
81
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_ARROW_LEFT_COMMAND, () => {
|
|
82
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
83
|
-
return false;
|
|
84
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_ARROW_RIGHT_COMMAND, () => {
|
|
85
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
86
|
-
return false;
|
|
87
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_BACKSPACE_COMMAND, (event) => {
|
|
88
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
89
|
-
if (IS_IOS && navigator.language === "ko-KR") return false;
|
|
90
|
-
event.preventDefault();
|
|
91
|
-
return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, true);
|
|
92
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_DELETE_COMMAND, (event) => {
|
|
93
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
94
|
-
event.preventDefault();
|
|
95
|
-
return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, false);
|
|
96
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_ENTER_COMMAND, (event) => {
|
|
97
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
98
|
-
if (event !== null) {
|
|
99
|
-
if ((IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) && CAN_USE_BEFORE_INPUT) return false;
|
|
100
|
-
event.preventDefault();
|
|
101
|
-
}
|
|
102
|
-
return editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false);
|
|
103
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(SELECT_ALL_COMMAND, () => {
|
|
104
|
-
$selectAll();
|
|
105
|
-
return true;
|
|
106
|
-
}, COMMAND_PRIORITY_EDITOR));
|
|
107
|
-
}
|
|
108
|
-
function registerClipboardCommands(editor) {
|
|
109
|
-
return mergeRegister(editor.registerCommand(COPY_COMMAND, (event) => {
|
|
110
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
111
|
-
onCopyForPlainText(event, editor);
|
|
112
|
-
return true;
|
|
113
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(CUT_COMMAND, (event) => {
|
|
114
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
115
|
-
onCutForPlainText(event, editor);
|
|
116
|
-
return true;
|
|
117
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(PASTE_COMMAND, (event) => {
|
|
118
|
-
if (!$isRangeSelection($getSelection())) return false;
|
|
119
|
-
onPasteForPlainText(event, editor);
|
|
120
|
-
return true;
|
|
121
|
-
}, COMMAND_PRIORITY_EDITOR));
|
|
122
|
-
}
|
|
123
|
-
function registerDragDropCommands(editor) {
|
|
124
|
-
return mergeRegister(editor.registerCommand(DRAGSTART_COMMAND, (event) => {
|
|
125
|
-
if (!editor.isEditable()) return false;
|
|
126
|
-
const sourceKey = readDragSourceKey(event.target);
|
|
127
|
-
if (!sourceKey) return false;
|
|
128
|
-
const rootElement = editor.getRootElement();
|
|
129
|
-
if (!rootElement || !(event.target instanceof Node)) return false;
|
|
130
|
-
if (!rootElement.contains(event.target)) return false;
|
|
131
|
-
const scopeId = ensureDropScopeId(editor);
|
|
132
|
-
if (!scopeId || !event.dataTransfer) return false;
|
|
133
|
-
event.dataTransfer.effectAllowed = "move";
|
|
134
|
-
writeInternalDragPayload(event.dataTransfer, {
|
|
135
|
-
action: "move-variable",
|
|
136
|
-
sourceKey,
|
|
137
|
-
scopeId
|
|
138
|
-
});
|
|
139
|
-
event.dataTransfer.setData("text/plain", "{move-variable}");
|
|
140
|
-
beginDragVisualState(editor, rootElement.querySelector(`[data-ultra-expression-variable-key="${sourceKey}"]`), {
|
|
141
|
-
action: "move-variable",
|
|
142
|
-
sourceKey,
|
|
143
|
-
scopeId
|
|
144
|
-
});
|
|
145
|
-
return true;
|
|
146
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DRAGOVER_COMMAND, (event) => {
|
|
147
|
-
const rootElement = editor.getRootElement();
|
|
148
|
-
if (!rootElement || !(event.target instanceof Node)) return false;
|
|
149
|
-
if (!rootElement.contains(event.target)) return false;
|
|
150
|
-
const payload = readInternalDragPayload(event.dataTransfer) ?? getActiveInternalDragPayload(editor);
|
|
151
|
-
if (!payload) {
|
|
152
|
-
clearDropIndicator(editor);
|
|
153
|
-
return false;
|
|
154
|
-
}
|
|
155
|
-
const scopeId = ensureDropScopeId(editor);
|
|
156
|
-
if (payload.scopeId !== scopeId) {
|
|
157
|
-
clearDropIndicator(editor);
|
|
158
|
-
return false;
|
|
159
|
-
}
|
|
160
|
-
const dropSlot = resolveDropSlot(editor, event);
|
|
161
|
-
if (dropSlot === null) {
|
|
162
|
-
clearDropIndicator(editor);
|
|
163
|
-
return false;
|
|
164
|
-
}
|
|
165
|
-
event.preventDefault();
|
|
166
|
-
if (event.dataTransfer) event.dataTransfer.dropEffect = "move";
|
|
167
|
-
showDropIndicator(editor, dropSlot);
|
|
168
|
-
autoScrollWhenNearEdge(rootElement, event.clientY);
|
|
169
|
-
return true;
|
|
170
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(DROP_COMMAND, (event) => {
|
|
171
|
-
const payload = readInternalDragPayload(event.dataTransfer) ?? getActiveInternalDragPayload(editor);
|
|
172
|
-
if (!payload) return false;
|
|
173
|
-
event.preventDefault();
|
|
174
|
-
const rootElement = editor.getRootElement();
|
|
175
|
-
const scopeId = ensureDropScopeId(editor);
|
|
176
|
-
if (!rootElement || !scopeId || !(event.target instanceof Node)) {
|
|
177
|
-
clearDragVisualState(editor);
|
|
178
|
-
return true;
|
|
179
|
-
}
|
|
180
|
-
if (!rootElement.contains(event.target)) {
|
|
181
|
-
clearDragVisualState(editor);
|
|
182
|
-
return true;
|
|
183
|
-
}
|
|
184
|
-
const dropSlot = resolveDropSlot(editor, event);
|
|
185
|
-
if (dropSlot === null) {
|
|
186
|
-
clearDragVisualState(editor);
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
reorderVariable(editor, {
|
|
190
|
-
payloadText: event.dataTransfer?.getData("application/x-ultra-expression-variable") ?? JSON.stringify(payload),
|
|
191
|
-
scopeId,
|
|
192
|
-
targetSlot: dropSlot,
|
|
193
|
-
focusMovedNode: true
|
|
194
|
-
});
|
|
195
|
-
clearDragVisualState(editor);
|
|
196
|
-
return true;
|
|
197
|
-
}, COMMAND_PRIORITY_EDITOR));
|
|
198
|
-
}
|
|
199
|
-
/**
|
|
200
|
-
* Registers all capability command packs for the expression editor.
|
|
201
|
-
* Packs: text-editing, clipboard, drag-drop, and optionally context-keys.
|
|
202
|
-
*/
|
|
203
|
-
function registerCommandPacks(editor, options) {
|
|
204
|
-
const packs = [
|
|
205
|
-
registerTextEditingCommands(editor),
|
|
206
|
-
registerClipboardCommands(editor),
|
|
207
|
-
registerDragDropCommands(editor)
|
|
208
|
-
];
|
|
209
|
-
if (options?.getContextCommands) packs.push(options.getContextCommands());
|
|
210
|
-
return mergeRegister(...packs);
|
|
211
|
-
}
|
|
212
|
-
//#endregion
|
|
213
|
-
export { registerCommandPacks };
|
|
214
|
-
|
|
215
|
-
//# sourceMappingURL=register-command-packs.js.map
|
package/dist/components/expression-editor/internal/features/commands/register-command-packs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"register-command-packs.js","names":[],"sources":["../../../../../../src/components/expression-editor/internal/features/commands/register-command-packs.ts"],"sourcesContent":["import { $getHtmlContent, $insertDataTransferForPlainText } from '@lexical/clipboard'\nimport {\n CAN_USE_BEFORE_INPUT,\n IS_APPLE_WEBKIT,\n IS_IOS,\n IS_SAFARI,\n mergeRegister,\n objectKlassEquals\n} from '@lexical/utils'\nimport type { CommandPayloadType, LexicalEditor } from 'lexical'\nimport {\n $getSelection,\n $isRangeSelection,\n $selectAll,\n COMMAND_PRIORITY_EDITOR,\n CONTROLLED_TEXT_INSERTION_COMMAND,\n COPY_COMMAND,\n CUT_COMMAND,\n DELETE_CHARACTER_COMMAND,\n DELETE_LINE_COMMAND,\n DELETE_WORD_COMMAND,\n DRAGSTART_COMMAND,\n DRAGOVER_COMMAND,\n DROP_COMMAND,\n INSERT_LINE_BREAK_COMMAND,\n INSERT_PARAGRAPH_COMMAND,\n KEY_ARROW_LEFT_COMMAND,\n KEY_ARROW_RIGHT_COMMAND,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n KEY_ENTER_COMMAND,\n PASTE_COMMAND,\n PASTE_TAG,\n REMOVE_TEXT_COMMAND,\n SELECT_ALL_COMMAND\n} from 'lexical'\n\nimport { EXPRESSION_VARIABLE_DRAG_TYPE } from '../../../constants'\nimport {\n autoScrollWhenNearEdge,\n beginDragVisualState,\n clearDropIndicator,\n clearDragVisualState,\n ensureDropScopeId,\n getActiveInternalDragPayload,\n readDragSourceKey,\n readInternalDragPayload,\n resolveDropSlot,\n showDropIndicator,\n writeInternalDragPayload\n} from '../../../use-expression-drag-drop'\nimport { reorderVariable } from '../drag-drop/drag-drop-service'\n\nfunction onCopyForPlainText(\n event: CommandPayloadType<typeof COPY_COMMAND>,\n editor: LexicalEditor\n): void {\n editor.update(() => {\n if (event !== null) {\n const clipboardData = objectKlassEquals(event, KeyboardEvent) ? null : event.clipboardData\n const selection = $getSelection()\n\n if (selection !== null && clipboardData != null) {\n event.preventDefault()\n const htmlString = $getHtmlContent(editor)\n\n if (htmlString !== null) {\n clipboardData.setData('text/html', htmlString)\n }\n\n clipboardData.setData('text/plain', selection.getTextContent())\n }\n }\n })\n}\n\nfunction onPasteForPlainText(\n event: CommandPayloadType<typeof PASTE_COMMAND>,\n editor: LexicalEditor\n): void {\n event.preventDefault()\n editor.update(\n () => {\n const selection = $getSelection()\n const clipboardData = objectKlassEquals(event, ClipboardEvent) ? event.clipboardData : null\n if (clipboardData != null && $isRangeSelection(selection)) {\n $insertDataTransferForPlainText(clipboardData, selection)\n }\n },\n { tag: PASTE_TAG }\n )\n}\n\nfunction onCutForPlainText(\n event: CommandPayloadType<typeof CUT_COMMAND>,\n editor: LexicalEditor\n): void {\n onCopyForPlainText(event, editor)\n editor.update(() => {\n const selection = $getSelection()\n\n if ($isRangeSelection(selection)) {\n selection.removeText()\n }\n })\n}\n\nfunction registerTextEditingCommands(editor: LexicalEditor): () => void {\n return mergeRegister(\n editor.registerCommand<boolean>(\n DELETE_CHARACTER_COMMAND,\n (isBackward) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.deleteCharacter(isBackward)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<boolean>(\n DELETE_WORD_COMMAND,\n (isBackward) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.deleteWord(isBackward)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<boolean>(\n DELETE_LINE_COMMAND,\n (isBackward) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.deleteLine(isBackward)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n\n editor.registerCommand<InputEvent | string>(\n CONTROLLED_TEXT_INSERTION_COMMAND,\n (eventOrText) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n if (typeof eventOrText === 'string') {\n selection.insertText(eventOrText)\n } else {\n const dataTransfer = eventOrText.dataTransfer\n\n if (dataTransfer != null) {\n $insertDataTransferForPlainText(dataTransfer, selection)\n } else {\n const data = eventOrText.data\n\n if (data) {\n selection.insertText(data)\n }\n }\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand(\n REMOVE_TEXT_COMMAND,\n () => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.removeText()\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<boolean>(\n INSERT_LINE_BREAK_COMMAND,\n (selectStart) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.insertLineBreak(selectStart)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand(\n INSERT_PARAGRAPH_COMMAND,\n () => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n selection.insertLineBreak()\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_LEFT_COMMAND,\n () => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n return false\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_ARROW_RIGHT_COMMAND,\n () => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n return false\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_BACKSPACE_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n if (IS_IOS && navigator.language === 'ko-KR') {\n return false\n }\n\n event.preventDefault()\n return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, true)\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<KeyboardEvent>(\n KEY_DELETE_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n event.preventDefault()\n return editor.dispatchCommand(DELETE_CHARACTER_COMMAND, false)\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<KeyboardEvent | null>(\n KEY_ENTER_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n if (event !== null) {\n if ((IS_IOS || IS_SAFARI || IS_APPLE_WEBKIT) && CAN_USE_BEFORE_INPUT) {\n return false\n }\n\n event.preventDefault()\n }\n\n return editor.dispatchCommand(INSERT_LINE_BREAK_COMMAND, false)\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand(\n SELECT_ALL_COMMAND,\n () => {\n $selectAll()\n\n return true\n },\n COMMAND_PRIORITY_EDITOR\n )\n )\n}\n\nfunction registerClipboardCommands(editor: LexicalEditor): () => void {\n return mergeRegister(\n editor.registerCommand(\n COPY_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n onCopyForPlainText(event, editor)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand(\n CUT_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n onCutForPlainText(event, editor)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n const selection = $getSelection()\n\n if (!$isRangeSelection(selection)) {\n return false\n }\n\n onPasteForPlainText(event, editor)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n )\n )\n}\n\nfunction registerDragDropCommands(editor: LexicalEditor): () => void {\n return mergeRegister(\n editor.registerCommand<DragEvent>(\n DRAGSTART_COMMAND,\n (event) => {\n if (!editor.isEditable()) {\n return false\n }\n\n const sourceKey = readDragSourceKey(event.target)\n if (!sourceKey) {\n return false\n }\n\n const rootElement = editor.getRootElement()\n if (!rootElement || !(event.target instanceof Node)) {\n return false\n }\n if (!rootElement.contains(event.target)) {\n return false\n }\n\n const scopeId = ensureDropScopeId(editor)\n if (!scopeId || !event.dataTransfer) {\n return false\n }\n\n event.dataTransfer.effectAllowed = 'move'\n writeInternalDragPayload(event.dataTransfer, {\n action: 'move-variable',\n sourceKey,\n scopeId\n })\n event.dataTransfer.setData('text/plain', '{move-variable}')\n\n const sourceElement = rootElement.querySelector<HTMLElement>(\n `[data-ultra-expression-variable-key=\"${sourceKey}\"]`\n )\n beginDragVisualState(editor, sourceElement, { action: 'move-variable', sourceKey, scopeId })\n\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<DragEvent>(\n DRAGOVER_COMMAND,\n (event) => {\n const rootElement = editor.getRootElement()\n if (!rootElement || !(event.target instanceof Node)) {\n return false\n }\n if (!rootElement.contains(event.target)) {\n return false\n }\n\n const payload =\n readInternalDragPayload(event.dataTransfer) ?? getActiveInternalDragPayload(editor)\n if (!payload) {\n clearDropIndicator(editor)\n return false\n }\n\n const scopeId = ensureDropScopeId(editor)\n if (payload.scopeId !== scopeId) {\n clearDropIndicator(editor)\n return false\n }\n\n const dropSlot = resolveDropSlot(editor, event)\n if (dropSlot === null) {\n clearDropIndicator(editor)\n return false\n }\n\n event.preventDefault()\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = 'move'\n }\n\n showDropIndicator(editor, dropSlot)\n autoScrollWhenNearEdge(rootElement, event.clientY)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n editor.registerCommand<DragEvent>(\n DROP_COMMAND,\n (event) => {\n const payload =\n readInternalDragPayload(event.dataTransfer) ?? getActiveInternalDragPayload(editor)\n if (!payload) {\n return false\n }\n\n event.preventDefault()\n\n const rootElement = editor.getRootElement()\n const scopeId = ensureDropScopeId(editor)\n if (!rootElement || !scopeId || !(event.target instanceof Node)) {\n clearDragVisualState(editor)\n return true\n }\n if (!rootElement.contains(event.target)) {\n clearDragVisualState(editor)\n return true\n }\n\n const dropSlot = resolveDropSlot(editor, event)\n if (dropSlot === null) {\n clearDragVisualState(editor)\n return true\n }\n\n const payloadText =\n event.dataTransfer?.getData(EXPRESSION_VARIABLE_DRAG_TYPE) ?? JSON.stringify(payload)\n\n reorderVariable(editor, {\n payloadText,\n scopeId,\n targetSlot: dropSlot,\n focusMovedNode: true\n })\n\n clearDragVisualState(editor)\n return true\n },\n COMMAND_PRIORITY_EDITOR\n )\n )\n}\n\nexport interface RegisterCommandPacksOptions {\n /** Optional context-key commands registration (e.g. from use-context). Merged when provided. */\n getContextCommands?: () => () => void\n}\n\n/**\n * Registers all capability command packs for the expression editor.\n * Packs: text-editing, clipboard, drag-drop, and optionally context-keys.\n */\nexport function registerCommandPacks(\n editor: LexicalEditor,\n options?: RegisterCommandPacksOptions\n): () => void {\n const packs: Array<() => void> = [\n registerTextEditingCommands(editor),\n registerClipboardCommands(editor),\n registerDragDropCommands(editor)\n ]\n\n if (options?.getContextCommands) {\n packs.push(options.getContextCommands())\n }\n\n return mergeRegister(...packs)\n}\n"],"mappings":";;;;;;;AAqDA,SAAS,mBACP,OACA,QACM;AACN,QAAO,aAAa;AAClB,MAAI,UAAU,MAAM;GAClB,MAAM,gBAAgB,kBAAkB,OAAO,cAAc,GAAG,OAAO,MAAM;GAC7E,MAAM,YAAY,eAAe;AAEjC,OAAI,cAAc,QAAQ,iBAAiB,MAAM;AAC/C,UAAM,gBAAgB;IACtB,MAAM,aAAa,gBAAgB,OAAO;AAE1C,QAAI,eAAe,KACjB,eAAc,QAAQ,aAAa,WAAW;AAGhD,kBAAc,QAAQ,cAAc,UAAU,gBAAgB,CAAC;;;GAGnE;;AAGJ,SAAS,oBACP,OACA,QACM;AACN,OAAM,gBAAgB;AACtB,QAAO,aACC;EACJ,MAAM,YAAY,eAAe;EACjC,MAAM,gBAAgB,kBAAkB,OAAO,eAAe,GAAG,MAAM,gBAAgB;AACvF,MAAI,iBAAiB,QAAQ,kBAAkB,UAAU,CACvD,iCAAgC,eAAe,UAAU;IAG7D,EAAE,KAAK,WAAW,CACnB;;AAGH,SAAS,kBACP,OACA,QACM;AACN,oBAAmB,OAAO,OAAO;AACjC,QAAO,aAAa;EAClB,MAAM,YAAY,eAAe;AAEjC,MAAI,kBAAkB,UAAU,CAC9B,WAAU,YAAY;GAExB;;AAGJ,SAAS,4BAA4B,QAAmC;AACtE,QAAO,cACL,OAAO,gBACL,2BACC,eAAe;EACd,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,gBAAgB,WAAW;AACrC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,sBACC,eAAe;EACd,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,WAAW,WAAW;AAChC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,sBACC,eAAe;EACd,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,WAAW,WAAW;AAChC,SAAO;IAET,wBACD,EAED,OAAO,gBACL,oCACC,gBAAgB;EACf,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,MAAI,OAAO,gBAAgB,SACzB,WAAU,WAAW,YAAY;OAC5B;GACL,MAAM,eAAe,YAAY;AAEjC,OAAI,gBAAgB,KAClB,iCAAgC,cAAc,UAAU;QACnD;IACL,MAAM,OAAO,YAAY;AAEzB,QAAI,KACF,WAAU,WAAW,KAAK;;;AAKhC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,2BACM;EACJ,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,YAAY;AACtB,SAAO;IAET,wBACD,EACD,OAAO,gBACL,4BACC,gBAAgB;EACf,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,gBAAgB,YAAY;AACtC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,gCACM;EACJ,MAAM,YAAY,eAAe;AAEjC,MAAI,CAAC,kBAAkB,UAAU,CAC/B,QAAO;AAGT,YAAU,iBAAiB;AAC3B,SAAO;IAET,wBACD,EACD,OAAO,gBACL,8BACM;AAGJ,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,SAAO;IAET,wBACD,EACD,OAAO,gBACL,+BACM;AAGJ,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,SAAO;IAET,wBACD,EACD,OAAO,gBACL,wBACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,MAAI,UAAU,UAAU,aAAa,QACnC,QAAO;AAGT,QAAM,gBAAgB;AACtB,SAAO,OAAO,gBAAgB,0BAA0B,KAAK;IAE/D,wBACD,EACD,OAAO,gBACL,qBACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,QAAM,gBAAgB;AACtB,SAAO,OAAO,gBAAgB,0BAA0B,MAAM;IAEhE,wBACD,EACD,OAAO,gBACL,oBACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,MAAI,UAAU,MAAM;AAClB,QAAK,UAAU,aAAa,oBAAoB,qBAC9C,QAAO;AAGT,SAAM,gBAAgB;;AAGxB,SAAO,OAAO,gBAAgB,2BAA2B,MAAM;IAEjE,wBACD,EACD,OAAO,gBACL,0BACM;AACJ,cAAY;AAEZ,SAAO;IAET,wBACD,CACF;;AAGH,SAAS,0BAA0B,QAAmC;AACpE,QAAO,cACL,OAAO,gBACL,eACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,qBAAmB,OAAO,OAAO;AACjC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,cACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,oBAAkB,OAAO,OAAO;AAChC,SAAO;IAET,wBACD,EACD,OAAO,gBACL,gBACC,UAAU;AAGT,MAAI,CAAC,kBAFa,eAEc,CAAC,CAC/B,QAAO;AAGT,sBAAoB,OAAO,OAAO;AAClC,SAAO;IAET,wBACD,CACF;;AAGH,SAAS,yBAAyB,QAAmC;AACnE,QAAO,cACL,OAAO,gBACL,oBACC,UAAU;AACT,MAAI,CAAC,OAAO,YAAY,CACtB,QAAO;EAGT,MAAM,YAAY,kBAAkB,MAAM,OAAO;AACjD,MAAI,CAAC,UACH,QAAO;EAGT,MAAM,cAAc,OAAO,gBAAgB;AAC3C,MAAI,CAAC,eAAe,EAAE,MAAM,kBAAkB,MAC5C,QAAO;AAET,MAAI,CAAC,YAAY,SAAS,MAAM,OAAO,CACrC,QAAO;EAGT,MAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,CAAC,WAAW,CAAC,MAAM,aACrB,QAAO;AAGT,QAAM,aAAa,gBAAgB;AACnC,2BAAyB,MAAM,cAAc;GAC3C,QAAQ;GACR;GACA;GACD,CAAC;AACF,QAAM,aAAa,QAAQ,cAAc,kBAAkB;AAK3D,uBAAqB,QAHC,YAAY,cAChC,wCAAwC,UAAU,IAEV,EAAE;GAAE,QAAQ;GAAiB;GAAW;GAAS,CAAC;AAE5F,SAAO;IAET,wBACD,EACD,OAAO,gBACL,mBACC,UAAU;EACT,MAAM,cAAc,OAAO,gBAAgB;AAC3C,MAAI,CAAC,eAAe,EAAE,MAAM,kBAAkB,MAC5C,QAAO;AAET,MAAI,CAAC,YAAY,SAAS,MAAM,OAAO,CACrC,QAAO;EAGT,MAAM,UACJ,wBAAwB,MAAM,aAAa,IAAI,6BAA6B,OAAO;AACrF,MAAI,CAAC,SAAS;AACZ,sBAAmB,OAAO;AAC1B,UAAO;;EAGT,MAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,QAAQ,YAAY,SAAS;AAC/B,sBAAmB,OAAO;AAC1B,UAAO;;EAGT,MAAM,WAAW,gBAAgB,QAAQ,MAAM;AAC/C,MAAI,aAAa,MAAM;AACrB,sBAAmB,OAAO;AAC1B,UAAO;;AAGT,QAAM,gBAAgB;AACtB,MAAI,MAAM,aACR,OAAM,aAAa,aAAa;AAGlC,oBAAkB,QAAQ,SAAS;AACnC,yBAAuB,aAAa,MAAM,QAAQ;AAClD,SAAO;IAET,wBACD,EACD,OAAO,gBACL,eACC,UAAU;EACT,MAAM,UACJ,wBAAwB,MAAM,aAAa,IAAI,6BAA6B,OAAO;AACrF,MAAI,CAAC,QACH,QAAO;AAGT,QAAM,gBAAgB;EAEtB,MAAM,cAAc,OAAO,gBAAgB;EAC3C,MAAM,UAAU,kBAAkB,OAAO;AACzC,MAAI,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,kBAAkB,OAAO;AAC/D,wBAAqB,OAAO;AAC5B,UAAO;;AAET,MAAI,CAAC,YAAY,SAAS,MAAM,OAAO,EAAE;AACvC,wBAAqB,OAAO;AAC5B,UAAO;;EAGT,MAAM,WAAW,gBAAgB,QAAQ,MAAM;AAC/C,MAAI,aAAa,MAAM;AACrB,wBAAqB,OAAO;AAC5B,UAAO;;AAMT,kBAAgB,QAAQ;GACtB,aAHA,MAAM,cAAc,QAAA,0CAAsC,IAAI,KAAK,UAAU,QAAQ;GAIrF;GACA,YAAY;GACZ,gBAAgB;GACjB,CAAC;AAEF,uBAAqB,OAAO;AAC5B,SAAO;IAET,wBACD,CACF;;;;;;AAYH,SAAgB,qBACd,QACA,SACY;CACZ,MAAM,QAA2B;EAC/B,4BAA4B,OAAO;EACnC,0BAA0B,OAAO;EACjC,yBAAyB,OAAO;EACjC;AAED,KAAI,SAAS,mBACX,OAAM,KAAK,QAAQ,oBAAoB,CAAC;AAG1C,QAAO,cAAc,GAAG,MAAM"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { applyDropReorder, moveVariableByDirection as moveVariableByDirection$1 } from "../../../use-expression-drag-drop.js";
|
|
2
|
-
//#region src/components/expression-editor/internal/features/drag-drop/drag-drop-service.ts
|
|
3
|
-
/**
|
|
4
|
-
* Typed mutation gateway for variable reorder via drop payload.
|
|
5
|
-
* Runs update internally; all mutations go through editor.update.
|
|
6
|
-
*/
|
|
7
|
-
function reorderVariable(editor, input) {
|
|
8
|
-
let result = false;
|
|
9
|
-
editor.update(() => {
|
|
10
|
-
result = applyDropReorder({
|
|
11
|
-
payloadText: input.payloadText,
|
|
12
|
-
scopeId: input.scopeId,
|
|
13
|
-
targetSlot: input.targetSlot,
|
|
14
|
-
focusMovedNode: input.focusMovedNode ?? true
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
return result;
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Typed mutation gateway for variable reorder via fallback move up/down.
|
|
21
|
-
* Runs update internally; shares same reorder path as native drop.
|
|
22
|
-
*/
|
|
23
|
-
function moveVariableByDirection(editor, sourceKey, direction, focusMovedNode = true) {
|
|
24
|
-
let result = false;
|
|
25
|
-
editor.update(() => {
|
|
26
|
-
result = moveVariableByDirection$1(sourceKey, direction, focusMovedNode);
|
|
27
|
-
});
|
|
28
|
-
return result;
|
|
29
|
-
}
|
|
30
|
-
//#endregion
|
|
31
|
-
export { moveVariableByDirection, reorderVariable };
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=drag-drop-service.js.map
|
package/dist/components/expression-editor/internal/features/drag-drop/drag-drop-service.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"drag-drop-service.js","names":["moveVariableByDirectionImpl"],"sources":["../../../../../../src/components/expression-editor/internal/features/drag-drop/drag-drop-service.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\n\nimport {\n applyDropReorder,\n moveVariableByDirection as moveVariableByDirectionImpl\n} from '../../../use-expression-drag-drop'\n\nexport interface ReorderVariableInput {\n payloadText: string | null\n scopeId: string\n targetSlot: number\n focusMovedNode?: boolean\n}\n\n/**\n * Typed mutation gateway for variable reorder via drop payload.\n * Runs update internally; all mutations go through editor.update.\n */\nexport function reorderVariable(editor: LexicalEditor, input: ReorderVariableInput): boolean {\n let result = false\n\n editor.update(() => {\n result = applyDropReorder({\n payloadText: input.payloadText,\n scopeId: input.scopeId,\n targetSlot: input.targetSlot,\n focusMovedNode: input.focusMovedNode ?? true\n })\n })\n\n return result\n}\n\n/**\n * Typed mutation gateway for variable reorder via fallback move up/down.\n * Runs update internally; shares same reorder path as native drop.\n */\nexport function moveVariableByDirection(\n editor: LexicalEditor,\n sourceKey: string,\n direction: -1 | 1,\n focusMovedNode = true\n): boolean {\n let result = false\n\n editor.update(() => {\n result = moveVariableByDirectionImpl(sourceKey, direction, focusMovedNode)\n })\n\n return result\n}\n"],"mappings":";;;;;;AAkBA,SAAgB,gBAAgB,QAAuB,OAAsC;CAC3F,IAAI,SAAS;AAEb,QAAO,aAAa;AAClB,WAAS,iBAAiB;GACxB,aAAa,MAAM;GACnB,SAAS,MAAM;GACf,YAAY,MAAM;GAClB,gBAAgB,MAAM,kBAAkB;GACzC,CAAC;GACF;AAEF,QAAO;;;;;;AAOT,SAAgB,wBACd,QACA,WACA,WACA,iBAAiB,MACR;CACT,IAAI,SAAS;AAEb,QAAO,aAAa;AAClB,WAASA,0BAA4B,WAAW,WAAW,eAAe;GAC1E;AAEF,QAAO"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { $createVariableNode } from "../../../nodes/variable-node.js";
|
|
2
|
-
import { $createTextNode, $getNodeByKey, $getSelection, $isRangeSelection } from "lexical";
|
|
3
|
-
//#region src/components/expression-editor/internal/features/insertion/insertion-service.ts
|
|
4
|
-
/**
|
|
5
|
-
* Typed mutation gateway for variable insertion at @ trigger.
|
|
6
|
-
* Must be called inside editor.update or via a gateway that runs updates.
|
|
7
|
-
*/
|
|
8
|
-
function insertVariableAtTrigger(editor, input) {
|
|
9
|
-
let result = false;
|
|
10
|
-
editor.update(() => {
|
|
11
|
-
const targetNode = $getNodeByKey(input.nodeKey);
|
|
12
|
-
if (!targetNode) return;
|
|
13
|
-
const selection = $getSelection();
|
|
14
|
-
if (!$isRangeSelection(selection)) return;
|
|
15
|
-
if (selection.focus.getNode().getKey() !== targetNode.getKey()) return;
|
|
16
|
-
const textContent = targetNode.getTextContent();
|
|
17
|
-
if (!textContent?.includes("@")) return;
|
|
18
|
-
const pos = input.charPosition;
|
|
19
|
-
const newNode = $createVariableNode(input.variable.value, input.variable.label, input.variable.type);
|
|
20
|
-
const nodeBefore = $createTextNode(textContent.slice(0, pos - 1));
|
|
21
|
-
const nodeAfter = $createTextNode(textContent.slice(pos));
|
|
22
|
-
targetNode.replace(nodeBefore);
|
|
23
|
-
nodeBefore.insertAfter(newNode);
|
|
24
|
-
newNode.insertAfter(nodeAfter);
|
|
25
|
-
newNode.selectEnd();
|
|
26
|
-
result = true;
|
|
27
|
-
});
|
|
28
|
-
return result;
|
|
29
|
-
}
|
|
30
|
-
//#endregion
|
|
31
|
-
export { insertVariableAtTrigger };
|
|
32
|
-
|
|
33
|
-
//# sourceMappingURL=insertion-service.js.map
|
package/dist/components/expression-editor/internal/features/insertion/insertion-service.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"insertion-service.js","names":[],"sources":["../../../../../../src/components/expression-editor/internal/features/insertion/insertion-service.ts"],"sourcesContent":["import {\n $createTextNode,\n $getNodeByKey,\n $getSelection,\n $isRangeSelection,\n type LexicalEditor\n} from 'lexical'\n\nimport { $createVariableNode } from '../../../nodes/variable-node'\n\nexport interface InsertVariableInput {\n nodeKey: string\n charPosition: number\n variable: { value: string; label: string; type?: string }\n}\n\n/**\n * Typed mutation gateway for variable insertion at @ trigger.\n * Must be called inside editor.update or via a gateway that runs updates.\n */\nexport function insertVariableAtTrigger(\n editor: LexicalEditor,\n input: InsertVariableInput\n): boolean {\n let result = false\n\n editor.update(() => {\n const targetNode = $getNodeByKey(input.nodeKey)\n if (!targetNode) return\n\n const selection = $getSelection()\n if (!$isRangeSelection(selection)) return\n\n const focusNode = selection.focus.getNode()\n if (focusNode.getKey() !== targetNode.getKey()) return\n\n const textContent = targetNode.getTextContent()\n if (!textContent?.includes('@')) return\n\n const pos = input.charPosition\n const newNode = $createVariableNode(\n input.variable.value,\n input.variable.label,\n input.variable.type\n )\n const nodeBefore = $createTextNode(textContent.slice(0, pos - 1))\n const nodeAfter = $createTextNode(textContent.slice(pos))\n targetNode.replace(nodeBefore)\n nodeBefore.insertAfter(newNode)\n newNode.insertAfter(nodeAfter)\n newNode.selectEnd()\n result = true\n })\n\n return result\n}\n"],"mappings":";;;;;;;AAoBA,SAAgB,wBACd,QACA,OACS;CACT,IAAI,SAAS;AAEb,QAAO,aAAa;EAClB,MAAM,aAAa,cAAc,MAAM,QAAQ;AAC/C,MAAI,CAAC,WAAY;EAEjB,MAAM,YAAY,eAAe;AACjC,MAAI,CAAC,kBAAkB,UAAU,CAAE;AAGnC,MADkB,UAAU,MAAM,SACrB,CAAC,QAAQ,KAAK,WAAW,QAAQ,CAAE;EAEhD,MAAM,cAAc,WAAW,gBAAgB;AAC/C,MAAI,CAAC,aAAa,SAAS,IAAI,CAAE;EAEjC,MAAM,MAAM,MAAM;EAClB,MAAM,UAAU,oBACd,MAAM,SAAS,OACf,MAAM,SAAS,OACf,MAAM,SAAS,KAChB;EACD,MAAM,aAAa,gBAAgB,YAAY,MAAM,GAAG,MAAM,EAAE,CAAC;EACjE,MAAM,YAAY,gBAAgB,YAAY,MAAM,IAAI,CAAC;AACzD,aAAW,QAAQ,WAAW;AAC9B,aAAW,YAAY,QAAQ;AAC/B,UAAQ,YAAY,UAAU;AAC9B,UAAQ,WAAW;AACnB,WAAS;GACT;AAEF,QAAO"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import _sfc_main from "../../tag/tag.js";
|
|
2
|
-
import { EXPRESSION_VARIABLE_DRAG_KEY_ATTR, EXPRESSION_VARIABLE_DRAG_MARKER_ATTR } from "../constants.js";
|
|
3
|
-
import { createVNode, isVNode } from "vue";
|
|
4
|
-
import { DecoratorNode } from "lexical";
|
|
5
|
-
//#region src/components/expression-editor/nodes/variable-node.tsx
|
|
6
|
-
function _isSlot(s) {
|
|
7
|
-
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
|
|
8
|
-
}
|
|
9
|
-
var VariableNode = class VariableNode extends DecoratorNode {
|
|
10
|
-
__variable;
|
|
11
|
-
__label;
|
|
12
|
-
__variableType;
|
|
13
|
-
__text;
|
|
14
|
-
__domNode = null;
|
|
15
|
-
static getType() {
|
|
16
|
-
return "variable";
|
|
17
|
-
}
|
|
18
|
-
static clone(node) {
|
|
19
|
-
return new VariableNode(node.__variable, node.__label, node.__variableType, node.__key);
|
|
20
|
-
}
|
|
21
|
-
static importJSON(serializedNode) {
|
|
22
|
-
const variableNode = serializedNode;
|
|
23
|
-
return new VariableNode(variableNode.variable, variableNode.label || variableNode.variable, variableNode.variableType);
|
|
24
|
-
}
|
|
25
|
-
constructor(variable, label, type, key) {
|
|
26
|
-
super(key);
|
|
27
|
-
this.__variable = variable;
|
|
28
|
-
this.__label = label || variable;
|
|
29
|
-
this.__variableType = type || "";
|
|
30
|
-
this.__text = `{${variable}}`;
|
|
31
|
-
}
|
|
32
|
-
createDOM() {
|
|
33
|
-
const span = document.createElement("span");
|
|
34
|
-
span.style.display = "inline-block";
|
|
35
|
-
span.classList.add("ultra-expression-variable-source");
|
|
36
|
-
span.setAttribute(EXPRESSION_VARIABLE_DRAG_MARKER_ATTR, "true");
|
|
37
|
-
span.setAttribute(EXPRESSION_VARIABLE_DRAG_KEY_ATTR, this.getKey());
|
|
38
|
-
span.draggable = true;
|
|
39
|
-
return span;
|
|
40
|
-
}
|
|
41
|
-
getTextContent() {
|
|
42
|
-
return this.__text;
|
|
43
|
-
}
|
|
44
|
-
updateDOM() {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
decorate() {
|
|
48
|
-
const displayText = this.__variableType ? `${this.__label} (${this.__variableType})` : this.__label;
|
|
49
|
-
return createVNode(_sfc_main, {
|
|
50
|
-
"size": "small",
|
|
51
|
-
"style": "margin: 0 2px",
|
|
52
|
-
"type": "primary",
|
|
53
|
-
"round": true,
|
|
54
|
-
"title": this.__label
|
|
55
|
-
}, _isSlot(displayText) ? displayText : { default: () => [displayText] });
|
|
56
|
-
}
|
|
57
|
-
updateVariable(newVariable, newLabel, newType) {
|
|
58
|
-
const writable = this.getWritable();
|
|
59
|
-
writable.__variable = newVariable;
|
|
60
|
-
writable.__label = newLabel || newVariable;
|
|
61
|
-
writable.__variableType = newType ?? writable.__variableType;
|
|
62
|
-
writable.__text = `{${newVariable}}`;
|
|
63
|
-
}
|
|
64
|
-
getVariable() {
|
|
65
|
-
return this.__variable;
|
|
66
|
-
}
|
|
67
|
-
getLabel() {
|
|
68
|
-
return this.__label;
|
|
69
|
-
}
|
|
70
|
-
getVariableType() {
|
|
71
|
-
return this.__variableType;
|
|
72
|
-
}
|
|
73
|
-
exportJSON() {
|
|
74
|
-
return {
|
|
75
|
-
...super.exportJSON(),
|
|
76
|
-
type: "variable",
|
|
77
|
-
variable: this.__variable,
|
|
78
|
-
label: this.__label,
|
|
79
|
-
variableType: this.__variableType
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
/** 判断是否为变量节点 */
|
|
84
|
-
function $isVariableNode(node) {
|
|
85
|
-
return node instanceof VariableNode;
|
|
86
|
-
}
|
|
87
|
-
/** 创建变量节点 */
|
|
88
|
-
function $createVariableNode(variable, label, type) {
|
|
89
|
-
return new VariableNode(variable, label, type);
|
|
90
|
-
}
|
|
91
|
-
//#endregion
|
|
92
|
-
export { $createVariableNode, $isVariableNode, VariableNode };
|
|
93
|
-
|
|
94
|
-
//# sourceMappingURL=variable-node.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"variable-node.js","names":["DecoratorNode","LexicalNode","SerializedLexicalNode","NodeKey","VNode","UTag","EXPRESSION_VARIABLE_DRAG_KEY_ATTR","EXPRESSION_VARIABLE_DRAG_MARKER_ATTR","_isSlot","s","Object","prototype","toString","call","_isVNode","SerializedVariableNode","type","variable","label","variableType","VariableNode","__variable","__label","__variableType","__text","__domNode","HTMLElement","getType","clone","node","__key","importJSON","serializedNode","variableNode","constructor","key","createDOM","span","document","createElement","style","display","classList","add","setAttribute","getKey","draggable","getTextContent","updateDOM","decorate","displayText","_createVNode","default","updateVariable","newVariable","newLabel","newType","writable","getWritable","getVariable","getLabel","getVariableType","exportJSON","$isVariableNode","$createVariableNode"],"sources":["../../../../src/components/expression-editor/nodes/variable-node.tsx"],"sourcesContent":["import { DecoratorNode, type LexicalNode, type SerializedLexicalNode, type NodeKey } from 'lexical'\nimport type { VNode } from 'vue'\n\nimport { UTag } from '../../tag'\nimport {\n EXPRESSION_VARIABLE_DRAG_KEY_ATTR,\n EXPRESSION_VARIABLE_DRAG_MARKER_ATTR\n} from '../constants'\n\ninterface SerializedVariableNode extends SerializedLexicalNode {\n type: 'variable'\n variable: string\n label?: string\n variableType?: string\n}\n\nexport class VariableNode extends DecoratorNode<VNode> {\n __variable: string\n __label: string\n __variableType: string\n __text: string\n __domNode: HTMLElement | null = null\n\n static override getType(): string {\n return 'variable'\n }\n\n static override clone(node: VariableNode): VariableNode {\n return new VariableNode(node.__variable, node.__label, node.__variableType, node.__key)\n }\n\n static override importJSON(serializedNode: SerializedLexicalNode): VariableNode {\n const variableNode = serializedNode as SerializedVariableNode\n return new VariableNode(\n variableNode.variable,\n variableNode.label || variableNode.variable,\n variableNode.variableType\n )\n }\n\n constructor(variable: string, label?: string, type?: string, key?: NodeKey) {\n super(key)\n\n this.__variable = variable\n this.__label = label || variable\n this.__variableType = type || ''\n this.__text = `{${variable}}`\n }\n\n override createDOM(): HTMLElement {\n const span = document.createElement('span')\n span.style.display = 'inline-block'\n span.classList.add('ultra-expression-variable-source')\n span.setAttribute(EXPRESSION_VARIABLE_DRAG_MARKER_ATTR, 'true')\n span.setAttribute(EXPRESSION_VARIABLE_DRAG_KEY_ATTR, this.getKey())\n span.draggable = true\n return span\n }\n\n override getTextContent(): string {\n return this.__text\n }\n\n override updateDOM(): false {\n return false\n }\n\n override decorate(): VNode {\n const displayText = this.__variableType\n ? `${this.__label} (${this.__variableType})`\n : this.__label\n return (\n <UTag size='small' style='margin: 0 2px' type='primary' round title={this.__label}>\n {displayText}\n </UTag>\n )\n }\n\n updateVariable(newVariable: string, newLabel?: string, newType?: string): void {\n const writable = this.getWritable()\n writable.__variable = newVariable\n writable.__label = newLabel || newVariable\n writable.__variableType = newType ?? writable.__variableType\n writable.__text = `{${newVariable}}`\n }\n\n getVariable(): string {\n return this.__variable\n }\n\n getLabel(): string {\n return this.__label\n }\n\n getVariableType(): string {\n return this.__variableType\n }\n\n override exportJSON(): SerializedVariableNode {\n return {\n ...super.exportJSON(),\n type: 'variable',\n variable: this.__variable,\n label: this.__label,\n variableType: this.__variableType\n }\n }\n}\n\n/** 判断是否为变量节点 */\nexport function $isVariableNode(node: LexicalNode | null | undefined): boolean {\n return node instanceof VariableNode\n}\n\n/** 创建变量节点 */\nexport function $createVariableNode(variable: string, label?: string, type?: string): VariableNode {\n return new VariableNode(variable, label, type)\n}\n"],"mappings":";;;;;AAOqB,SAAAQ,QAAAC,GAAA;AAAA,QAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,EAAA,KAAA,qBAAA,CAAAK,QAAAL,EAAA;;AASrB,IAAaW,eAAb,MAAaA,qBAAqBpB,cAAqB;CACrDqB;CACAC;CACAC;CACAC;CACAC,YAAgC;CAEhC,OAAgBE,UAAkB;AAChC,SAAO;;CAGT,OAAgBC,MAAMC,MAAkC;AACtD,SAAO,IAAIT,aAAaS,KAAKR,YAAYQ,KAAKP,SAASO,KAAKN,gBAAgBM,KAAKC,MAAM;;CAGzF,OAAgBC,WAAWC,gBAAqD;EAC9E,MAAMC,eAAeD;AACrB,SAAO,IAAIZ,aACTa,aAAahB,UACbgB,aAAaf,SAASe,aAAahB,UACnCgB,aAAad,aACd;;CAGHe,YAAYjB,UAAkBC,OAAgBF,MAAemB,KAAe;AAC1E,QAAMA,IAAI;AAEV,OAAKd,aAAaJ;AAClB,OAAKK,UAAUJ,SAASD;AACxB,OAAKM,iBAAiBP,QAAQ;AAC9B,OAAKQ,SAAS,IAAIP,SAAQ;;CAG5B,YAAkC;EAChC,MAAMoB,OAAOC,SAASC,cAAc,OAAO;AAC3CF,OAAKG,MAAMC,UAAU;AACrBJ,OAAKK,UAAUC,IAAI,mCAAmC;AACtDN,OAAKO,aAAarC,sCAAsC,OAAO;AAC/D8B,OAAKO,aAAatC,mCAAmC,KAAKuC,QAAQ,CAAC;AACnER,OAAKS,YAAY;AACjB,SAAOT;;CAGT,iBAAkC;AAChC,SAAO,KAAKb;;CAGd,YAA4B;AAC1B,SAAO;;CAGT,WAA2B;EACzB,MAAM0B,cAAc,KAAK3B,iBACrB,GAAG,KAAKD,QAAO,IAAK,KAAKC,eAAc,KACvC,KAAKD;AACT,SAAA6B,YAAA9C,WAAA;GAAA,QAAA;GAAA,SAAA;GAAA,QAAA;GAAA,SAAA;GAAA,SACuE,KAAKiB;GAAO,EAAAd,QAC9E0C,YAAW,GAAXA,cAAW,EAAAE,eAAA,CAAXF,YAAW,EAAA,CAAA;;CAKlBG,eAAeC,aAAqBC,UAAmBC,SAAwB;EAC7E,MAAMC,WAAW,KAAKC,aAAa;AACnCD,WAASpC,aAAaiC;AACtBG,WAASnC,UAAUiC,YAAYD;AAC/BG,WAASlC,iBAAiBiC,WAAWC,SAASlC;AAC9CkC,WAASjC,SAAS,IAAI8B,YAAW;;CAGnCK,cAAsB;AACpB,SAAO,KAAKtC;;CAGduC,WAAmB;AACjB,SAAO,KAAKtC;;CAGduC,kBAA0B;AACxB,SAAO,KAAKtC;;CAGd,aAA8C;AAC5C,SAAO;GACL,GAAG,MAAMuC,YAAY;GACrB9C,MAAM;GACNC,UAAU,KAAKI;GACfH,OAAO,KAAKI;GACZH,cAAc,KAAKI;GACpB;;;;AAKL,SAAgBwC,gBAAgBlC,MAA+C;AAC7E,QAAOA,gBAAgBT;;;AAIzB,SAAgB4C,oBAAoB/C,UAAkBC,OAAgBF,MAA6B;AACjG,QAAO,IAAII,aAAaH,UAAUC,OAAOF,KAAK"}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import { $createVariableNode } from "./nodes/variable-node.js";
|
|
2
|
-
import { $createTextNode } from "lexical";
|
|
3
|
-
//#region src/components/expression-editor/parser.ts
|
|
4
|
-
/**
|
|
5
|
-
* 解析表达式内容
|
|
6
|
-
* @param content 表达式内容
|
|
7
|
-
* @param variableMap 变量映射表(可选,用于查找 label)
|
|
8
|
-
* @returns 节点列表
|
|
9
|
-
*/
|
|
10
|
-
function parseContent(content, variableMap) {
|
|
11
|
-
const nodes = [];
|
|
12
|
-
let prevItem = null;
|
|
13
|
-
for (const item of content.matchAll(/\{([^}]+)\}/g)) {
|
|
14
|
-
const variable = item[1];
|
|
15
|
-
const startIndex = prevItem ? prevItem.index + prevItem[0].length : 0;
|
|
16
|
-
const endIndex = item.index;
|
|
17
|
-
const text = content.slice(startIndex, endIndex);
|
|
18
|
-
if (text) nodes.push($createTextNode(text));
|
|
19
|
-
prevItem = item;
|
|
20
|
-
const label = variableMap?.get(variable)?.label;
|
|
21
|
-
nodes.push($createVariableNode(variable, label));
|
|
22
|
-
}
|
|
23
|
-
if (prevItem) {
|
|
24
|
-
const tail = content.slice(prevItem.index + prevItem[0].length);
|
|
25
|
-
if (tail) nodes.push($createTextNode(tail));
|
|
26
|
-
} else if (content) nodes.push($createTextNode(content));
|
|
27
|
-
return nodes;
|
|
28
|
-
}
|
|
29
|
-
//#endregion
|
|
30
|
-
export { parseContent };
|
|
31
|
-
|
|
32
|
-
//# sourceMappingURL=parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","names":[],"sources":["../../../src/components/expression-editor/parser.ts"],"sourcesContent":["import { $createTextNode, type LexicalNode } from 'lexical'\n\nimport type { VariableItem } from '../../types'\nimport { $createVariableNode } from './nodes/variable-node'\n\n/**\n * 解析表达式内容\n * @param content 表达式内容\n * @param variableMap 变量映射表(可选,用于查找 label)\n * @returns 节点列表\n */\nexport function parseContent(\n content: string,\n variableMap?: Map<string, VariableItem>\n): LexicalNode[] {\n const nodes: LexicalNode[] = []\n\n let prevItem: null | RegExpExecArray = null\n for (const item of content.matchAll(/\\{([^}]+)\\}/g)) {\n const variable = item[1]!\n\n const startIndex = prevItem ? prevItem.index! + prevItem[0].length : 0\n const endIndex = item.index\n\n const text = content.slice(startIndex, endIndex)\n\n if (text) {\n nodes.push($createTextNode(text))\n }\n\n prevItem = item\n\n // 从映射表中查找对应的 label\n const label = variableMap?.get(variable)?.label\n nodes.push($createVariableNode(variable, label))\n }\n\n if (prevItem) {\n const tail = content.slice(prevItem.index! + prevItem[0].length)\n if (tail) nodes.push($createTextNode(tail))\n } else if (content) {\n nodes.push($createTextNode(content))\n }\n\n return nodes\n}\n"],"mappings":";;;;;;;;;AAWA,SAAgB,aACd,SACA,aACe;CACf,MAAM,QAAuB,EAAE;CAE/B,IAAI,WAAmC;AACvC,MAAK,MAAM,QAAQ,QAAQ,SAAS,eAAe,EAAE;EACnD,MAAM,WAAW,KAAK;EAEtB,MAAM,aAAa,WAAW,SAAS,QAAS,SAAS,GAAG,SAAS;EACrE,MAAM,WAAW,KAAK;EAEtB,MAAM,OAAO,QAAQ,MAAM,YAAY,SAAS;AAEhD,MAAI,KACF,OAAM,KAAK,gBAAgB,KAAK,CAAC;AAGnC,aAAW;EAGX,MAAM,QAAQ,aAAa,IAAI,SAAS,EAAE;AAC1C,QAAM,KAAK,oBAAoB,UAAU,MAAM,CAAC;;AAGlD,KAAI,UAAU;EACZ,MAAM,OAAO,QAAQ,MAAM,SAAS,QAAS,SAAS,GAAG,OAAO;AAChE,MAAI,KAAM,OAAM,KAAK,gBAAgB,KAAK,CAAC;YAClC,QACT,OAAM,KAAK,gBAAgB,QAAQ,CAAC;AAGtC,QAAO"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { clearDragVisualState } from "./use-expression-drag-drop.js";
|
|
2
|
-
import { registerCommandPacks } from "./internal/features/commands/register-command-packs.js";
|
|
3
|
-
import { onBeforeUnmount } from "vue";
|
|
4
|
-
//#region src/components/expression-editor/plain-text.ts
|
|
5
|
-
/**
|
|
6
|
-
* Registers plain-text editing commands for the expression editor.
|
|
7
|
-
* Delegates to capability command packs (text-editing, clipboard, drag-drop, optional context-keys).
|
|
8
|
-
*/
|
|
9
|
-
function registerPlainText(editor, options) {
|
|
10
|
-
const removeListener = registerCommandPacks(editor, { getContextCommands: options?.getContextCommands });
|
|
11
|
-
onBeforeUnmount(() => {
|
|
12
|
-
clearDragVisualState(editor);
|
|
13
|
-
removeListener();
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
//#endregion
|
|
17
|
-
export { registerPlainText };
|
|
18
|
-
|
|
19
|
-
//# sourceMappingURL=plain-text.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plain-text.js","names":[],"sources":["../../../src/components/expression-editor/plain-text.ts"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\nimport { onBeforeUnmount } from 'vue'\n\nimport { registerCommandPacks } from './internal/features/commands/register-command-packs'\nimport { clearDragVisualState } from './use-expression-drag-drop'\n\nexport interface RegisterPlainTextOptions {\n /** Optional context-key commands registration (e.g. from use-context). Merged when provided. */\n getContextCommands?: () => () => void\n}\n\n/**\n * Registers plain-text editing commands for the expression editor.\n * Delegates to capability command packs (text-editing, clipboard, drag-drop, optional context-keys).\n */\nexport function registerPlainText(editor: LexicalEditor, options?: RegisterPlainTextOptions): void {\n const removeListener = registerCommandPacks(editor, {\n getContextCommands: options?.getContextCommands\n })\n\n onBeforeUnmount(() => {\n clearDragVisualState(editor)\n removeListener()\n })\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,kBAAkB,QAAuB,SAA0C;CACjG,MAAM,iBAAiB,qBAAqB,QAAQ,EAClD,oBAAoB,SAAS,oBAC9B,CAAC;AAEF,uBAAsB;AACpB,uBAAqB,OAAO;AAC5B,kBAAgB;GAChB"}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { shallowRef } from "vue";
|
|
2
|
-
import { $getSelection, $isRangeSelection, COMMAND_PRIORITY_EDITOR, COMMAND_PRIORITY_LOW, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_UP_COMMAND, KEY_ENTER_COMMAND, KEY_ESCAPE_COMMAND, SELECTION_CHANGE_COMMAND } from "lexical";
|
|
3
|
-
import { mergeRegister } from "@lexical/utils";
|
|
4
|
-
//#region src/components/expression-editor/use-context.ts
|
|
5
|
-
function useContext(editor) {
|
|
6
|
-
const contextVisible = shallowRef(false);
|
|
7
|
-
const contextTriggerDom = shallowRef();
|
|
8
|
-
const textNode = shallowRef();
|
|
9
|
-
const charPosition = shallowRef(0);
|
|
10
|
-
const pickerKeyHandlerRef = shallowRef(null);
|
|
11
|
-
function registerPickerKeyHandler(handler) {
|
|
12
|
-
pickerKeyHandlerRef.value = handler;
|
|
13
|
-
}
|
|
14
|
-
function openContextMenu(triggerElement) {
|
|
15
|
-
contextVisible.value = true;
|
|
16
|
-
contextTriggerDom.value = triggerElement;
|
|
17
|
-
}
|
|
18
|
-
function closeContextMenu() {
|
|
19
|
-
contextVisible.value = false;
|
|
20
|
-
contextTriggerDom.value = void 0;
|
|
21
|
-
}
|
|
22
|
-
function PreventDefaultListener(event) {
|
|
23
|
-
if (event.isComposing) return false;
|
|
24
|
-
if (contextVisible.value) {
|
|
25
|
-
event.preventDefault();
|
|
26
|
-
pickerKeyHandlerRef.value?.(event);
|
|
27
|
-
return true;
|
|
28
|
-
}
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
function registerContextCommands() {
|
|
32
|
-
return mergeRegister(editor.registerCommand(SELECTION_CHANGE_COMMAND, () => {
|
|
33
|
-
const selection = $getSelection();
|
|
34
|
-
if (contextVisible.value) return true;
|
|
35
|
-
if (!$isRangeSelection(selection) || selection.anchor.offset !== selection.focus.offset) {
|
|
36
|
-
closeContextMenu();
|
|
37
|
-
return false;
|
|
38
|
-
}
|
|
39
|
-
const cursorPosition = selection.focus.offset;
|
|
40
|
-
const node = selection.focus.getNode();
|
|
41
|
-
const textContent = node.getTextContent();
|
|
42
|
-
const isAtTriggerLeft = textContent[cursorPosition - 1] === "@";
|
|
43
|
-
const isAtTriggerRight = textContent[cursorPosition] === "@";
|
|
44
|
-
if (!isAtTriggerLeft && !isAtTriggerRight) {
|
|
45
|
-
closeContextMenu();
|
|
46
|
-
return false;
|
|
47
|
-
}
|
|
48
|
-
textNode.value = node;
|
|
49
|
-
charPosition.value = isAtTriggerLeft ? cursorPosition : cursorPosition + 1;
|
|
50
|
-
const triggerDom = editor.getElementByKey(node.getKey());
|
|
51
|
-
if (contextVisible.value) {
|
|
52
|
-
if (triggerDom && triggerDom !== contextTriggerDom.value) contextTriggerDom.value = triggerDom;
|
|
53
|
-
} else triggerDom && openContextMenu(triggerDom);
|
|
54
|
-
return true;
|
|
55
|
-
}, COMMAND_PRIORITY_EDITOR), editor.registerCommand(KEY_ENTER_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ESCAPE_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_UP_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW), editor.registerCommand(KEY_ARROW_DOWN_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW));
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
contextVisible,
|
|
59
|
-
contextTriggerDom,
|
|
60
|
-
textNode,
|
|
61
|
-
charPosition,
|
|
62
|
-
registerPickerKeyHandler,
|
|
63
|
-
registerContextCommands
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
//#endregion
|
|
67
|
-
export { useContext };
|
|
68
|
-
|
|
69
|
-
//# sourceMappingURL=use-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-context.js","names":[],"sources":["../../../src/components/expression-editor/use-context.ts"],"sourcesContent":["import { mergeRegister } from '@lexical/utils'\nimport {\n $getSelection,\n $isRangeSelection,\n COMMAND_PRIORITY_LOW,\n COMMAND_PRIORITY_EDITOR,\n KEY_ARROW_DOWN_COMMAND,\n KEY_ARROW_UP_COMMAND,\n type LexicalEditor,\n SELECTION_CHANGE_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n TextNode\n} from 'lexical'\nimport { shallowRef, type ShallowRef } from 'vue'\n\nimport { CONTEXT_TRIGGER_CHAR } from './constants'\n\nexport function useContext(editor: LexicalEditor): {\n contextVisible: ShallowRef<boolean>\n contextTriggerDom: ShallowRef<HTMLElement | undefined>\n textNode: ShallowRef<TextNode | undefined>\n charPosition: ShallowRef<number>\n registerPickerKeyHandler: (handler: ((e: KeyboardEvent) => void) | null) => void\n /** Returns cleanup for context-key commands. Injected into registerCommandPacks. */\n registerContextCommands: () => () => void\n} {\n const contextVisible = shallowRef(false)\n const contextTriggerDom = shallowRef<HTMLElement>()\n const textNode = shallowRef<TextNode>()\n const charPosition = shallowRef(0)\n const pickerKeyHandlerRef = shallowRef<((e: KeyboardEvent) => void) | null>(null)\n\n function registerPickerKeyHandler(handler: ((e: KeyboardEvent) => void) | null) {\n pickerKeyHandlerRef.value = handler\n }\n\n function openContextMenu(triggerElement: HTMLElement) {\n contextVisible.value = true\n\n contextTriggerDom.value = triggerElement\n }\n\n function closeContextMenu() {\n contextVisible.value = false\n contextTriggerDom.value = undefined\n }\n\n function PreventDefaultListener(event: KeyboardEvent) {\n if (event.isComposing) return false\n if (contextVisible.value) {\n event.preventDefault()\n pickerKeyHandlerRef.value?.(event)\n return true\n }\n return false\n }\n\n function registerContextCommands(): () => void {\n return mergeRegister(\n // 选取变更命令,实现呼出上下文菜单的核心\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n const selection = $getSelection()\n\n // 如果菜单已经打开,不要因为失焦而关闭(用户可能在输入搜索框)\n if (contextVisible.value) {\n return true\n }\n\n // 选区类型必须为rangeSelection且选取的anchor和focus的offset值必须一致\n // 否则关闭上下文菜单\n if (!$isRangeSelection(selection) || selection.anchor.offset !== selection.focus.offset) {\n closeContextMenu()\n\n return false\n }\n\n const cursorPosition = selection.focus.offset\n const node = selection.focus.getNode()\n const textContent = node.getTextContent()\n\n // 检测光标是否在 '@' 左右\n const isAtTriggerLeft = textContent[cursorPosition - 1] === CONTEXT_TRIGGER_CHAR\n const isAtTriggerRight = textContent[cursorPosition] === CONTEXT_TRIGGER_CHAR\n\n // 光标左右的字符都不是'@'时,关闭上下文菜单\n if (!isAtTriggerLeft && !isAtTriggerRight) {\n closeContextMenu()\n return false\n }\n\n // 更新文本节点和光标位置\n // charPosition: index of first char after '@' (for slice in handleVariableSelect)\n // isAtTriggerLeft: '@' is left of cursor (cursor already after '@') → charPosition = cursorPosition\n // isAtTriggerRight: '@' is right of cursor (cursor before '@') → charPosition = cursorPosition + 1\n textNode.value = node as TextNode\n charPosition.value = isAtTriggerLeft ? cursorPosition : cursorPosition + 1\n\n const triggerDom = editor.getElementByKey(node.getKey())\n\n // 如果弹框已经打开,更新位置;否则打开弹框\n if (contextVisible.value) {\n // 更新触发元素位置(如果变化了)\n if (triggerDom && triggerDom !== contextTriggerDom.value) {\n contextTriggerDom.value = triggerDom\n }\n } else {\n triggerDom && openContextMenu(triggerDom)\n }\n\n return true\n },\n COMMAND_PRIORITY_EDITOR\n ),\n\n // 当上下文菜单显示时,阻止下面的命令的默认行为\n editor.registerCommand(KEY_ENTER_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_ESCAPE_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_ARROW_UP_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_ARROW_DOWN_COMMAND, PreventDefaultListener, COMMAND_PRIORITY_LOW)\n )\n }\n\n return {\n contextVisible,\n contextTriggerDom,\n textNode,\n charPosition,\n registerPickerKeyHandler,\n registerContextCommands\n }\n}\n"],"mappings":";;;;AAkBA,SAAgB,WAAW,QAQzB;CACA,MAAM,iBAAiB,WAAW,MAAM;CACxC,MAAM,oBAAoB,YAAyB;CACnD,MAAM,WAAW,YAAsB;CACvC,MAAM,eAAe,WAAW,EAAE;CAClC,MAAM,sBAAsB,WAAgD,KAAK;CAEjF,SAAS,yBAAyB,SAA8C;AAC9E,sBAAoB,QAAQ;;CAG9B,SAAS,gBAAgB,gBAA6B;AACpD,iBAAe,QAAQ;AAEvB,oBAAkB,QAAQ;;CAG5B,SAAS,mBAAmB;AAC1B,iBAAe,QAAQ;AACvB,oBAAkB,QAAQ,KAAA;;CAG5B,SAAS,uBAAuB,OAAsB;AACpD,MAAI,MAAM,YAAa,QAAO;AAC9B,MAAI,eAAe,OAAO;AACxB,SAAM,gBAAgB;AACtB,uBAAoB,QAAQ,MAAM;AAClC,UAAO;;AAET,SAAO;;CAGT,SAAS,0BAAsC;AAC7C,SAAO,cAEL,OAAO,gBACL,gCACM;GACJ,MAAM,YAAY,eAAe;AAGjC,OAAI,eAAe,MACjB,QAAO;AAKT,OAAI,CAAC,kBAAkB,UAAU,IAAI,UAAU,OAAO,WAAW,UAAU,MAAM,QAAQ;AACvF,sBAAkB;AAElB,WAAO;;GAGT,MAAM,iBAAiB,UAAU,MAAM;GACvC,MAAM,OAAO,UAAU,MAAM,SAAS;GACtC,MAAM,cAAc,KAAK,gBAAgB;GAGzC,MAAM,kBAAkB,YAAY,iBAAiB,OAAA;GACrD,MAAM,mBAAmB,YAAY,oBAAA;AAGrC,OAAI,CAAC,mBAAmB,CAAC,kBAAkB;AACzC,sBAAkB;AAClB,WAAO;;AAOT,YAAS,QAAQ;AACjB,gBAAa,QAAQ,kBAAkB,iBAAiB,iBAAiB;GAEzE,MAAM,aAAa,OAAO,gBAAgB,KAAK,QAAQ,CAAC;AAGxD,OAAI,eAAe;QAEb,cAAc,eAAe,kBAAkB,MACjD,mBAAkB,QAAQ;SAG5B,eAAc,gBAAgB,WAAW;AAG3C,UAAO;KAET,wBACD,EAGD,OAAO,gBAAgB,mBAAmB,wBAAwB,qBAAqB,EACvF,OAAO,gBAAgB,oBAAoB,wBAAwB,qBAAqB,EACxF,OAAO,gBAAgB,sBAAsB,wBAAwB,qBAAqB,EAC1F,OAAO,gBAAgB,wBAAwB,wBAAwB,qBAAqB,CAC7F;;AAGH,QAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACD"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Teleport, computed, createVNode, isVNode, onBeforeUnmount, shallowRef } from "vue";
|
|
2
|
-
//#region src/components/expression-editor/use-decorators.tsx
|
|
3
|
-
function _isSlot(s) {
|
|
4
|
-
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !isVNode(s);
|
|
5
|
-
}
|
|
6
|
-
function useDecorators(editor) {
|
|
7
|
-
const decorators = shallowRef(editor.getDecorators());
|
|
8
|
-
const removeListener = editor.registerDecoratorListener((nextDecorators) => {
|
|
9
|
-
decorators.value = nextDecorators;
|
|
10
|
-
});
|
|
11
|
-
onBeforeUnmount(() => {
|
|
12
|
-
removeListener();
|
|
13
|
-
});
|
|
14
|
-
return computed(() => {
|
|
15
|
-
const decoratedTeleports = [];
|
|
16
|
-
Object.keys(decorators.value).forEach((nodeKey) => {
|
|
17
|
-
const node = decorators.value[nodeKey];
|
|
18
|
-
const element = editor.getElementByKey(nodeKey);
|
|
19
|
-
if (element !== null) decoratedTeleports.push(createVNode(Teleport, { "to": element }, _isSlot(node) ? node : { default: () => [node] }));
|
|
20
|
-
});
|
|
21
|
-
return decoratedTeleports;
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
//#endregion
|
|
25
|
-
export { useDecorators };
|
|
26
|
-
|
|
27
|
-
//# sourceMappingURL=use-decorators.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"use-decorators.js","names":["LexicalEditor","DefineComponent","VNode","Teleport","computed","onBeforeUnmount","shallowRef","ComputedRef","isVNode","_isVNode","createVNode","_createVNode","_isSlot","s","Object","prototype","toString","call","useDecorators","editor","decorators","getDecorators","removeListener","registerDecoratorListener","nextDecorators","value","decoratedTeleports","decoratorKeys","keys","forEach","nodeKey","node","element","getElementByKey","push","default"],"sources":["../../../src/components/expression-editor/use-decorators.tsx"],"sourcesContent":["import type { LexicalEditor } from 'lexical'\nimport type { DefineComponent, VNode } from 'vue'\nimport { Teleport, computed, onBeforeUnmount, shallowRef, type ComputedRef } from 'vue'\n\nexport function useDecorators(editor: LexicalEditor): ComputedRef<VNode[]> {\n const decorators = shallowRef(editor.getDecorators<DefineComponent>())\n\n const removeListener = editor.registerDecoratorListener<DefineComponent>((nextDecorators) => {\n decorators.value = nextDecorators\n })\n\n onBeforeUnmount(() => {\n removeListener()\n })\n\n return computed(() => {\n const decoratedTeleports: VNode[] = []\n const decoratorKeys = Object.keys(decorators.value)\n decoratorKeys.forEach((nodeKey) => {\n const node = decorators.value[nodeKey]!\n const element = editor.getElementByKey(nodeKey)\n if (element !== null) {\n decoratedTeleports.push(<Teleport to={element}>{node}</Teleport>)\n }\n })\n\n return decoratedTeleports\n })\n}\n"],"mappings":";;AAEuF,SAAAY,QAAAC,GAAA;AAAA,QAAA,OAAAA,MAAA,cAAAC,OAAAC,UAAAC,SAAAC,KAAAJ,EAAA,KAAA,qBAAA,CAAAJ,QAAAI,EAAA;;AAEvF,SAAgBK,cAAcC,QAA6C;CACzE,MAAMC,aAAad,WAAWa,OAAOE,eAAgC,CAAC;CAEtE,MAAMC,iBAAiBH,OAAOI,2BAA4CC,mBAAmB;AAC3FJ,aAAWK,QAAQD;GACnB;AAEFnB,uBAAsB;AACpBiB,kBAAgB;GAChB;AAEF,QAAOlB,eAAe;EACpB,MAAMsB,qBAA8B,EAAE;AAChBZ,SAAOc,KAAKR,WAAWK,MAChC,CAACI,SAASC,YAAY;GACjC,MAAMC,OAAOX,WAAWK,MAAMK;GAC9B,MAAME,UAAUb,OAAOc,gBAAgBH,QAAQ;AAC/C,OAAIE,YAAY,KACdN,oBAAmBQ,KAAIvB,YAAAR,UAAA,EAAA,MAAe6B,SAAO,EAAApB,QAAGmB,KAAI,GAAJA,OAAI,EAAAI,eAAA,CAAJJ,KAAI,EAAA,CAAY,CAAC;IAEnE;AAEF,SAAOL;GACP"}
|