@uipath/apollo-wind 2.23.0 → 2.24.0

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 (99) hide show
  1. package/dist/components/ui/index.cjs +96 -86
  2. package/dist/components/ui/index.d.ts +1 -0
  3. package/dist/components/ui/index.js +1 -0
  4. package/dist/components/ui/prompt-editor/components/EditorToolbar.cjs +156 -0
  5. package/dist/components/ui/prompt-editor/components/EditorToolbar.d.ts +9 -0
  6. package/dist/components/ui/prompt-editor/components/EditorToolbar.js +122 -0
  7. package/dist/components/ui/prompt-editor/components/MarkdownPreview.cjs +205 -0
  8. package/dist/components/ui/prompt-editor/components/MarkdownPreview.d.ts +14 -0
  9. package/dist/components/ui/prompt-editor/components/MarkdownPreview.js +161 -0
  10. package/dist/components/ui/prompt-editor/components/PromptEditorAutocompleteMenu.cjs +194 -0
  11. package/dist/components/ui/prompt-editor/components/PromptEditorAutocompleteMenu.d.ts +28 -0
  12. package/dist/components/ui/prompt-editor/components/PromptEditorAutocompleteMenu.js +160 -0
  13. package/dist/components/ui/prompt-editor/components/TokenPill.cjs +119 -0
  14. package/dist/components/ui/prompt-editor/components/TokenPill.d.ts +15 -0
  15. package/dist/components/ui/prompt-editor/components/TokenPill.js +85 -0
  16. package/dist/components/ui/prompt-editor/components/TokenPillWithTooltip.cjs +138 -0
  17. package/dist/components/ui/prompt-editor/components/TokenPillWithTooltip.d.ts +13 -0
  18. package/dist/components/ui/prompt-editor/components/TokenPillWithTooltip.js +104 -0
  19. package/dist/components/ui/prompt-editor/components/token-icon-markup.cjs +138 -0
  20. package/dist/components/ui/prompt-editor/components/token-icon-markup.d.ts +16 -0
  21. package/dist/components/ui/prompt-editor/components/token-icon-markup.js +104 -0
  22. package/dist/components/ui/prompt-editor/index.cjs +40 -0
  23. package/dist/components/ui/prompt-editor/index.d.ts +4 -0
  24. package/dist/components/ui/prompt-editor/index.js +3 -0
  25. package/dist/components/ui/prompt-editor/nodes/InputTokenNode.cjs +145 -0
  26. package/dist/components/ui/prompt-editor/nodes/InputTokenNode.d.ts +30 -0
  27. package/dist/components/ui/prompt-editor/nodes/InputTokenNode.js +105 -0
  28. package/dist/components/ui/prompt-editor/nodes/OutputTokenNode.cjs +145 -0
  29. package/dist/components/ui/prompt-editor/nodes/OutputTokenNode.d.ts +30 -0
  30. package/dist/components/ui/prompt-editor/nodes/OutputTokenNode.js +105 -0
  31. package/dist/components/ui/prompt-editor/nodes/ResourceTokenNode.cjs +145 -0
  32. package/dist/components/ui/prompt-editor/nodes/ResourceTokenNode.d.ts +30 -0
  33. package/dist/components/ui/prompt-editor/nodes/ResourceTokenNode.js +105 -0
  34. package/dist/components/ui/prompt-editor/nodes/StateTokenNode.cjs +145 -0
  35. package/dist/components/ui/prompt-editor/nodes/StateTokenNode.d.ts +30 -0
  36. package/dist/components/ui/prompt-editor/nodes/StateTokenNode.js +105 -0
  37. package/dist/components/ui/prompt-editor/nodes/index.cjs +72 -0
  38. package/dist/components/ui/prompt-editor/nodes/index.d.ts +8 -0
  39. package/dist/components/ui/prompt-editor/nodes/index.js +5 -0
  40. package/dist/components/ui/prompt-editor/plugins/AutocompletePlugin.cjs +242 -0
  41. package/dist/components/ui/prompt-editor/plugins/AutocompletePlugin.d.ts +15 -0
  42. package/dist/components/ui/prompt-editor/plugins/AutocompletePlugin.js +208 -0
  43. package/dist/components/ui/prompt-editor/plugins/CopyPastePlugin.cjs +164 -0
  44. package/dist/components/ui/prompt-editor/plugins/CopyPastePlugin.d.ts +1 -0
  45. package/dist/components/ui/prompt-editor/plugins/CopyPastePlugin.js +130 -0
  46. package/dist/components/ui/prompt-editor/plugins/EditorRefPlugin.cjs +50 -0
  47. package/dist/components/ui/prompt-editor/plugins/EditorRefPlugin.d.ts +4 -0
  48. package/dist/components/ui/prompt-editor/plugins/EditorRefPlugin.js +16 -0
  49. package/dist/components/ui/prompt-editor/plugins/MultilinePlugin.cjs +108 -0
  50. package/dist/components/ui/prompt-editor/plugins/MultilinePlugin.d.ts +3 -0
  51. package/dist/components/ui/prompt-editor/plugins/MultilinePlugin.js +74 -0
  52. package/dist/components/ui/prompt-editor/plugins/NodeSelectionFixPlugin.cjs +313 -0
  53. package/dist/components/ui/prompt-editor/plugins/NodeSelectionFixPlugin.d.ts +7 -0
  54. package/dist/components/ui/prompt-editor/plugins/NodeSelectionFixPlugin.js +276 -0
  55. package/dist/components/ui/prompt-editor/plugins/RenameTokensPlugin.cjs +186 -0
  56. package/dist/components/ui/prompt-editor/plugins/RenameTokensPlugin.d.ts +7 -0
  57. package/dist/components/ui/prompt-editor/plugins/RenameTokensPlugin.js +152 -0
  58. package/dist/components/ui/prompt-editor/plugins/ToolbarActionsPlugin.cjs +132 -0
  59. package/dist/components/ui/prompt-editor/plugins/ToolbarActionsPlugin.d.ts +7 -0
  60. package/dist/components/ui/prompt-editor/plugins/ToolbarActionsPlugin.js +98 -0
  61. package/dist/components/ui/prompt-editor/plugins/ValidateTokensPlugin.cjs +85 -0
  62. package/dist/components/ui/prompt-editor/plugins/ValidateTokensPlugin.d.ts +4 -0
  63. package/dist/components/ui/prompt-editor/plugins/ValidateTokensPlugin.js +51 -0
  64. package/dist/components/ui/prompt-editor/plugins/ValueSyncPlugin.cjs +98 -0
  65. package/dist/components/ui/prompt-editor/plugins/ValueSyncPlugin.d.ts +8 -0
  66. package/dist/components/ui/prompt-editor/plugins/ValueSyncPlugin.js +64 -0
  67. package/dist/components/ui/prompt-editor/plugins/VariableDropPlugin.cjs +137 -0
  68. package/dist/components/ui/prompt-editor/plugins/VariableDropPlugin.d.ts +19 -0
  69. package/dist/components/ui/prompt-editor/plugins/VariableDropPlugin.js +100 -0
  70. package/dist/components/ui/prompt-editor/plugins/shared/token-nodes.cjs +49 -0
  71. package/dist/components/ui/prompt-editor/plugins/shared/token-nodes.d.ts +8 -0
  72. package/dist/components/ui/prompt-editor/plugins/shared/token-nodes.js +12 -0
  73. package/dist/components/ui/prompt-editor/prompt-editor.cjs +402 -0
  74. package/dist/components/ui/prompt-editor/prompt-editor.d.ts +35 -0
  75. package/dist/components/ui/prompt-editor/prompt-editor.js +368 -0
  76. package/dist/components/ui/prompt-editor/types.cjs +74 -0
  77. package/dist/components/ui/prompt-editor/types.d.ts +58 -0
  78. package/dist/components/ui/prompt-editor/types.js +31 -0
  79. package/dist/components/ui/prompt-editor/utils/autocomplete-segments.cjs +60 -0
  80. package/dist/components/ui/prompt-editor/utils/autocomplete-segments.d.ts +29 -0
  81. package/dist/components/ui/prompt-editor/utils/autocomplete-segments.js +20 -0
  82. package/dist/components/ui/prompt-editor/utils/comparison.cjs +39 -0
  83. package/dist/components/ui/prompt-editor/utils/comparison.d.ts +3 -0
  84. package/dist/components/ui/prompt-editor/utils/comparison.js +5 -0
  85. package/dist/components/ui/prompt-editor/utils/index.cjs +68 -0
  86. package/dist/components/ui/prompt-editor/utils/index.d.ts +3 -0
  87. package/dist/components/ui/prompt-editor/utils/index.js +4 -0
  88. package/dist/components/ui/prompt-editor/utils/insert-token.cjs +103 -0
  89. package/dist/components/ui/prompt-editor/utils/insert-token.d.ts +12 -0
  90. package/dist/components/ui/prompt-editor/utils/insert-token.js +66 -0
  91. package/dist/components/ui/prompt-editor/utils/serialization.cjs +255 -0
  92. package/dist/components/ui/prompt-editor/utils/serialization.d.ts +16 -0
  93. package/dist/components/ui/prompt-editor/utils/serialization.js +200 -0
  94. package/dist/index.cjs +7 -0
  95. package/dist/index.d.ts +2 -0
  96. package/dist/index.js +2 -1
  97. package/dist/styles.css +42 -0
  98. package/dist/tailwind.utilities.css +1 -1
  99. package/package.json +7 -1
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ registerNodeSelectionFixCommands: ()=>registerNodeSelectionFixCommands,
28
+ NodeSelectionFixPlugin: ()=>NodeSelectionFixPlugin
29
+ });
30
+ const external_react_namespaceObject = require("react");
31
+ const LexicalComposerContext_namespaceObject = require("@lexical/react/LexicalComposerContext");
32
+ const external_lexical_namespaceObject = require("lexical");
33
+ const token_nodes_cjs_namespaceObject = require("./shared/token-nodes.cjs");
34
+ const index_cjs_namespaceObject = require("../utils/index.cjs");
35
+ const $setCollapsedSelection = (key, offset, type)=>{
36
+ const sel = (0, external_lexical_namespaceObject.$createRangeSelection)();
37
+ sel.anchor.set(key, offset, type);
38
+ sel.focus.set(key, offset, type);
39
+ (0, external_lexical_namespaceObject.$setSelection)(sel);
40
+ };
41
+ const getSelectedPromptToken = ()=>{
42
+ const selection = (0, external_lexical_namespaceObject.$getSelection)();
43
+ if (!(0, external_lexical_namespaceObject.$isNodeSelection)(selection)) return null;
44
+ const nodes = selection.getNodes();
45
+ if (1 !== nodes.length) return null;
46
+ const node = nodes[0];
47
+ return (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(node) ? node : null;
48
+ };
49
+ const getCollapsedRangeSelection = ()=>{
50
+ const selection = (0, external_lexical_namespaceObject.$getSelection)();
51
+ if (!(0, external_lexical_namespaceObject.$isRangeSelection)(selection) || !selection.isCollapsed()) return null;
52
+ return selection;
53
+ };
54
+ const getPromptTokenBeforeCursor = ()=>{
55
+ const selection = getCollapsedRangeSelection();
56
+ if (!selection) return null;
57
+ const anchorNode = selection.anchor.getNode();
58
+ if ((0, external_lexical_namespaceObject.$isTextNode)(anchorNode) && 0 === selection.anchor.offset) {
59
+ const prev = anchorNode.getPreviousSibling();
60
+ return (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(prev) ? prev : null;
61
+ }
62
+ if ((0, external_lexical_namespaceObject.$isParagraphNode)(anchorNode)) {
63
+ const offset = selection.anchor.offset;
64
+ if (0 === offset) return null;
65
+ const prev = anchorNode.getChildAtIndex(offset - 1);
66
+ return (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(prev) ? prev : null;
67
+ }
68
+ return null;
69
+ };
70
+ const getPromptTokenAfterCursor = ()=>{
71
+ const selection = getCollapsedRangeSelection();
72
+ if (!selection) return null;
73
+ const anchorNode = selection.anchor.getNode();
74
+ if ((0, external_lexical_namespaceObject.$isTextNode)(anchorNode) && selection.anchor.offset === anchorNode.getTextContentSize()) {
75
+ const next = anchorNode.getNextSibling();
76
+ return (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(next) ? next : null;
77
+ }
78
+ if ((0, external_lexical_namespaceObject.$isParagraphNode)(anchorNode)) {
79
+ const next = anchorNode.getChildAtIndex(selection.anchor.offset);
80
+ return (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(next) ? next : null;
81
+ }
82
+ return null;
83
+ };
84
+ const skipLineBreaks = (node, direction)=>{
85
+ let sibling = 'left' === direction ? node.getPreviousSibling() : node.getNextSibling();
86
+ while(sibling && (0, external_lexical_namespaceObject.$isLineBreakNode)(sibling))sibling = 'left' === direction ? sibling.getPreviousSibling() : sibling.getNextSibling();
87
+ return sibling;
88
+ };
89
+ const skipStandaloneJoiner = (direction)=>{
90
+ const selection = getCollapsedRangeSelection();
91
+ if (!selection) return false;
92
+ const anchorNode = selection.anchor.getNode();
93
+ if (!(0, external_lexical_namespaceObject.$isTextNode)(anchorNode) || anchorNode.getTextContent() !== index_cjs_namespaceObject.WORD_JOINER) return false;
94
+ const sibling = skipLineBreaks(anchorNode, direction);
95
+ if (sibling && (0, token_nodes_cjs_namespaceObject.isPromptTokenNode)(sibling)) {
96
+ focusPromptToken(sibling);
97
+ return true;
98
+ }
99
+ if ((0, external_lexical_namespaceObject.$isTextNode)(sibling)) {
100
+ $setCollapsedSelection(sibling.getKey(), 'left' === direction ? sibling.getTextContentSize() : 0, 'text');
101
+ return true;
102
+ }
103
+ const parent = anchorNode.getParent();
104
+ if (!parent) return false;
105
+ const idx = anchorNode.getIndexWithinParent() + ('left' === direction ? 0 : 1);
106
+ $setCollapsedSelection(parent.getKey(), idx, 'element');
107
+ return true;
108
+ };
109
+ const placeCursorBefore = (node)=>{
110
+ const prev = node.getPreviousSibling();
111
+ if ((0, external_lexical_namespaceObject.$isTextNode)(prev)) {
112
+ const content = prev.getTextContent();
113
+ if (!content.endsWith(index_cjs_namespaceObject.WORD_JOINER)) prev.setTextContent(content + index_cjs_namespaceObject.WORD_JOINER);
114
+ $setCollapsedSelection(prev.getKey(), prev.getTextContentSize(), 'text');
115
+ } else {
116
+ const anchor = (0, external_lexical_namespaceObject.$createTextNode)(index_cjs_namespaceObject.WORD_JOINER);
117
+ node.insertBefore(anchor);
118
+ $setCollapsedSelection(anchor.getKey(), 1, 'text');
119
+ }
120
+ };
121
+ const placeCursorAfter = (node)=>{
122
+ const next = node.getNextSibling();
123
+ if ((0, external_lexical_namespaceObject.$isTextNode)(next)) $setCollapsedSelection(next.getKey(), 0, 'text');
124
+ else {
125
+ const parent = node.getParent();
126
+ if (!parent) return;
127
+ $setCollapsedSelection(parent.getKey(), node.getIndexWithinParent() + 1, 'element');
128
+ }
129
+ };
130
+ const focusPromptToken = (node)=>{
131
+ const newSelection = (0, external_lexical_namespaceObject.$createNodeSelection)();
132
+ newSelection.add(node.getKey());
133
+ (0, external_lexical_namespaceObject.$setSelection)(newSelection);
134
+ };
135
+ const registerNodeSelectionFixCommands = (editor)=>{
136
+ const handleBackspace = (event)=>{
137
+ const selectedToken = getSelectedPromptToken();
138
+ if (selectedToken) {
139
+ const before = (()=>{
140
+ const prev = selectedToken.getPreviousSibling();
141
+ if ((0, external_lexical_namespaceObject.$isTextNode)(prev)) return {
142
+ kind: 'text',
143
+ key: prev.getKey(),
144
+ offset: prev.getTextContentSize()
145
+ };
146
+ const parent = selectedToken.getParent();
147
+ if (parent) return {
148
+ kind: 'element',
149
+ key: parent.getKey(),
150
+ offset: selectedToken.getIndexWithinParent()
151
+ };
152
+ return null;
153
+ })();
154
+ selectedToken.remove();
155
+ if (before) $setCollapsedSelection(before.key, before.offset, before.kind);
156
+ event.preventDefault();
157
+ return true;
158
+ }
159
+ const pillBefore = getPromptTokenBeforeCursor();
160
+ if (pillBefore) {
161
+ focusPromptToken(pillBefore);
162
+ event.preventDefault();
163
+ return true;
164
+ }
165
+ const selection = getCollapsedRangeSelection();
166
+ if (!selection) return false;
167
+ const anchorNode = selection.anchor.getNode();
168
+ let paragraph = null;
169
+ let offset = 0;
170
+ if ('element' === selection.anchor.type && (0, external_lexical_namespaceObject.$isParagraphNode)(anchorNode)) {
171
+ paragraph = anchorNode;
172
+ offset = selection.anchor.offset;
173
+ } else {
174
+ if (!('text' === selection.anchor.type && (0, external_lexical_namespaceObject.$isTextNode)(anchorNode)) || 0 !== selection.anchor.offset) return false;
175
+ const parent = anchorNode.getParent();
176
+ if (!(0, external_lexical_namespaceObject.$isParagraphNode)(parent)) return false;
177
+ paragraph = parent;
178
+ offset = anchorNode.getIndexWithinParent();
179
+ }
180
+ if (offset <= 0) return false;
181
+ const previousNode = paragraph.getChildAtIndex(offset - 1);
182
+ if (!(0, external_lexical_namespaceObject.$isLineBreakNode)(previousNode)) return false;
183
+ const lineStartNode = paragraph.getChildAtIndex(offset);
184
+ previousNode.remove();
185
+ (0, external_lexical_namespaceObject.$isTextNode)(lineStartNode) && lineStartNode.isAttached() ? $setCollapsedSelection(lineStartNode.getKey(), 0, 'text') : $setCollapsedSelection(paragraph.getKey(), Math.max(0, offset - 1), 'element');
186
+ event.preventDefault();
187
+ return true;
188
+ };
189
+ const handleDelete = (event)=>{
190
+ const selectedToken = getSelectedPromptToken();
191
+ if (selectedToken) {
192
+ const after = (()=>{
193
+ const next = selectedToken.getNextSibling();
194
+ if ((0, external_lexical_namespaceObject.$isTextNode)(next)) return {
195
+ kind: 'text',
196
+ key: next.getKey(),
197
+ offset: 0
198
+ };
199
+ const parent = selectedToken.getParent();
200
+ if (parent) return {
201
+ kind: 'element',
202
+ key: parent.getKey(),
203
+ offset: selectedToken.getIndexWithinParent()
204
+ };
205
+ return null;
206
+ })();
207
+ selectedToken.remove();
208
+ if (after) $setCollapsedSelection(after.key, after.offset, after.kind);
209
+ event.preventDefault();
210
+ return true;
211
+ }
212
+ const pillAfter = getPromptTokenAfterCursor();
213
+ if (pillAfter) {
214
+ focusPromptToken(pillAfter);
215
+ event.preventDefault();
216
+ return true;
217
+ }
218
+ return false;
219
+ };
220
+ const handleArrowLeft = (event)=>{
221
+ if (event.shiftKey) return false;
222
+ const selectedToken = getSelectedPromptToken();
223
+ if (selectedToken) {
224
+ placeCursorBefore(selectedToken);
225
+ event.preventDefault();
226
+ return true;
227
+ }
228
+ const pillBefore = getPromptTokenBeforeCursor();
229
+ if (pillBefore) {
230
+ focusPromptToken(pillBefore);
231
+ event.preventDefault();
232
+ return true;
233
+ }
234
+ if (skipStandaloneJoiner('left')) {
235
+ event.preventDefault();
236
+ return true;
237
+ }
238
+ return false;
239
+ };
240
+ const handleArrowRight = (event)=>{
241
+ if (event.shiftKey) return false;
242
+ const selectedToken = getSelectedPromptToken();
243
+ if (selectedToken) {
244
+ placeCursorAfter(selectedToken);
245
+ event.preventDefault();
246
+ return true;
247
+ }
248
+ const pillAfter = getPromptTokenAfterCursor();
249
+ if (pillAfter) {
250
+ focusPromptToken(pillAfter);
251
+ event.preventDefault();
252
+ return true;
253
+ }
254
+ if (skipStandaloneJoiner('right')) {
255
+ event.preventDefault();
256
+ return true;
257
+ }
258
+ return false;
259
+ };
260
+ const handleEscape = (event)=>{
261
+ const selectedToken = getSelectedPromptToken();
262
+ if (!selectedToken) return false;
263
+ placeCursorAfter(selectedToken);
264
+ event.preventDefault();
265
+ return true;
266
+ };
267
+ const handleArrowUp = (event)=>{
268
+ if (!event.shiftKey) {
269
+ const selectedToken = getSelectedPromptToken();
270
+ if (selectedToken) placeCursorBefore(selectedToken);
271
+ }
272
+ return false;
273
+ };
274
+ const handleArrowDown = (event)=>{
275
+ if (!event.shiftKey) {
276
+ const selectedToken = getSelectedPromptToken();
277
+ if (selectedToken) placeCursorAfter(selectedToken);
278
+ }
279
+ return false;
280
+ };
281
+ const unregisterBackspace = editor.registerCommand(external_lexical_namespaceObject.KEY_BACKSPACE_COMMAND, handleBackspace, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
282
+ const unregisterDelete = editor.registerCommand(external_lexical_namespaceObject.KEY_DELETE_COMMAND, handleDelete, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
283
+ const unregisterArrowLeft = editor.registerCommand(external_lexical_namespaceObject.KEY_ARROW_LEFT_COMMAND, handleArrowLeft, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
284
+ const unregisterArrowRight = editor.registerCommand(external_lexical_namespaceObject.KEY_ARROW_RIGHT_COMMAND, handleArrowRight, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
285
+ const unregisterArrowUp = editor.registerCommand(external_lexical_namespaceObject.KEY_ARROW_UP_COMMAND, handleArrowUp, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
286
+ const unregisterArrowDown = editor.registerCommand(external_lexical_namespaceObject.KEY_ARROW_DOWN_COMMAND, handleArrowDown, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
287
+ const unregisterEscape = editor.registerCommand(external_lexical_namespaceObject.KEY_ESCAPE_COMMAND, handleEscape, external_lexical_namespaceObject.COMMAND_PRIORITY_HIGH);
288
+ return ()=>{
289
+ unregisterBackspace();
290
+ unregisterDelete();
291
+ unregisterArrowLeft();
292
+ unregisterArrowRight();
293
+ unregisterArrowUp();
294
+ unregisterArrowDown();
295
+ unregisterEscape();
296
+ };
297
+ };
298
+ const NodeSelectionFixPlugin = ()=>{
299
+ const [editor] = (0, LexicalComposerContext_namespaceObject.useLexicalComposerContext)();
300
+ (0, external_react_namespaceObject.useEffect)(()=>registerNodeSelectionFixCommands(editor), [
301
+ editor
302
+ ]);
303
+ return null;
304
+ };
305
+ exports.NodeSelectionFixPlugin = __webpack_exports__.NodeSelectionFixPlugin;
306
+ exports.registerNodeSelectionFixCommands = __webpack_exports__.registerNodeSelectionFixCommands;
307
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
308
+ "NodeSelectionFixPlugin",
309
+ "registerNodeSelectionFixCommands"
310
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
311
+ Object.defineProperty(exports, '__esModule', {
312
+ value: true
313
+ });
@@ -0,0 +1,7 @@
1
+ import { type LexicalEditor } from 'lexical';
2
+ /**
3
+ * Registers the focus controller commands on a Lexical editor. Exported so tests can drive the
4
+ * exact same logic the React plugin wires up at mount time, against a headless `createEditor()`.
5
+ */
6
+ export declare const registerNodeSelectionFixCommands: (editor: LexicalEditor) => (() => void);
7
+ export declare const NodeSelectionFixPlugin: () => null;
@@ -0,0 +1,276 @@
1
+ import { useEffect } from "react";
2
+ import { useLexicalComposerContext } from "@lexical/react/LexicalComposerContext";
3
+ import { $createNodeSelection, $createRangeSelection, $createTextNode, $getSelection, $isLineBreakNode, $isNodeSelection, $isParagraphNode, $isRangeSelection, $isTextNode, $setSelection, COMMAND_PRIORITY_HIGH, KEY_ARROW_DOWN_COMMAND, KEY_ARROW_LEFT_COMMAND, KEY_ARROW_RIGHT_COMMAND, KEY_ARROW_UP_COMMAND, KEY_BACKSPACE_COMMAND, KEY_DELETE_COMMAND, KEY_ESCAPE_COMMAND } from "lexical";
4
+ import { isPromptTokenNode } from "./shared/token-nodes.js";
5
+ import { WORD_JOINER } from "../utils/index.js";
6
+ const $setCollapsedSelection = (key, offset, type)=>{
7
+ const sel = $createRangeSelection();
8
+ sel.anchor.set(key, offset, type);
9
+ sel.focus.set(key, offset, type);
10
+ $setSelection(sel);
11
+ };
12
+ const getSelectedPromptToken = ()=>{
13
+ const selection = $getSelection();
14
+ if (!$isNodeSelection(selection)) return null;
15
+ const nodes = selection.getNodes();
16
+ if (1 !== nodes.length) return null;
17
+ const node = nodes[0];
18
+ return isPromptTokenNode(node) ? node : null;
19
+ };
20
+ const getCollapsedRangeSelection = ()=>{
21
+ const selection = $getSelection();
22
+ if (!$isRangeSelection(selection) || !selection.isCollapsed()) return null;
23
+ return selection;
24
+ };
25
+ const getPromptTokenBeforeCursor = ()=>{
26
+ const selection = getCollapsedRangeSelection();
27
+ if (!selection) return null;
28
+ const anchorNode = selection.anchor.getNode();
29
+ if ($isTextNode(anchorNode) && 0 === selection.anchor.offset) {
30
+ const prev = anchorNode.getPreviousSibling();
31
+ return isPromptTokenNode(prev) ? prev : null;
32
+ }
33
+ if ($isParagraphNode(anchorNode)) {
34
+ const offset = selection.anchor.offset;
35
+ if (0 === offset) return null;
36
+ const prev = anchorNode.getChildAtIndex(offset - 1);
37
+ return isPromptTokenNode(prev) ? prev : null;
38
+ }
39
+ return null;
40
+ };
41
+ const getPromptTokenAfterCursor = ()=>{
42
+ const selection = getCollapsedRangeSelection();
43
+ if (!selection) return null;
44
+ const anchorNode = selection.anchor.getNode();
45
+ if ($isTextNode(anchorNode) && selection.anchor.offset === anchorNode.getTextContentSize()) {
46
+ const next = anchorNode.getNextSibling();
47
+ return isPromptTokenNode(next) ? next : null;
48
+ }
49
+ if ($isParagraphNode(anchorNode)) {
50
+ const next = anchorNode.getChildAtIndex(selection.anchor.offset);
51
+ return isPromptTokenNode(next) ? next : null;
52
+ }
53
+ return null;
54
+ };
55
+ const skipLineBreaks = (node, direction)=>{
56
+ let sibling = 'left' === direction ? node.getPreviousSibling() : node.getNextSibling();
57
+ while(sibling && $isLineBreakNode(sibling))sibling = 'left' === direction ? sibling.getPreviousSibling() : sibling.getNextSibling();
58
+ return sibling;
59
+ };
60
+ const skipStandaloneJoiner = (direction)=>{
61
+ const selection = getCollapsedRangeSelection();
62
+ if (!selection) return false;
63
+ const anchorNode = selection.anchor.getNode();
64
+ if (!$isTextNode(anchorNode) || anchorNode.getTextContent() !== WORD_JOINER) return false;
65
+ const sibling = skipLineBreaks(anchorNode, direction);
66
+ if (sibling && isPromptTokenNode(sibling)) {
67
+ focusPromptToken(sibling);
68
+ return true;
69
+ }
70
+ if ($isTextNode(sibling)) {
71
+ $setCollapsedSelection(sibling.getKey(), 'left' === direction ? sibling.getTextContentSize() : 0, 'text');
72
+ return true;
73
+ }
74
+ const parent = anchorNode.getParent();
75
+ if (!parent) return false;
76
+ const idx = anchorNode.getIndexWithinParent() + ('left' === direction ? 0 : 1);
77
+ $setCollapsedSelection(parent.getKey(), idx, 'element');
78
+ return true;
79
+ };
80
+ const placeCursorBefore = (node)=>{
81
+ const prev = node.getPreviousSibling();
82
+ if ($isTextNode(prev)) {
83
+ const content = prev.getTextContent();
84
+ if (!content.endsWith(WORD_JOINER)) prev.setTextContent(content + WORD_JOINER);
85
+ $setCollapsedSelection(prev.getKey(), prev.getTextContentSize(), 'text');
86
+ } else {
87
+ const anchor = $createTextNode(WORD_JOINER);
88
+ node.insertBefore(anchor);
89
+ $setCollapsedSelection(anchor.getKey(), 1, 'text');
90
+ }
91
+ };
92
+ const placeCursorAfter = (node)=>{
93
+ const next = node.getNextSibling();
94
+ if ($isTextNode(next)) $setCollapsedSelection(next.getKey(), 0, 'text');
95
+ else {
96
+ const parent = node.getParent();
97
+ if (!parent) return;
98
+ $setCollapsedSelection(parent.getKey(), node.getIndexWithinParent() + 1, 'element');
99
+ }
100
+ };
101
+ const focusPromptToken = (node)=>{
102
+ const newSelection = $createNodeSelection();
103
+ newSelection.add(node.getKey());
104
+ $setSelection(newSelection);
105
+ };
106
+ const registerNodeSelectionFixCommands = (editor)=>{
107
+ const handleBackspace = (event)=>{
108
+ const selectedToken = getSelectedPromptToken();
109
+ if (selectedToken) {
110
+ const before = (()=>{
111
+ const prev = selectedToken.getPreviousSibling();
112
+ if ($isTextNode(prev)) return {
113
+ kind: 'text',
114
+ key: prev.getKey(),
115
+ offset: prev.getTextContentSize()
116
+ };
117
+ const parent = selectedToken.getParent();
118
+ if (parent) return {
119
+ kind: 'element',
120
+ key: parent.getKey(),
121
+ offset: selectedToken.getIndexWithinParent()
122
+ };
123
+ return null;
124
+ })();
125
+ selectedToken.remove();
126
+ if (before) $setCollapsedSelection(before.key, before.offset, before.kind);
127
+ event.preventDefault();
128
+ return true;
129
+ }
130
+ const pillBefore = getPromptTokenBeforeCursor();
131
+ if (pillBefore) {
132
+ focusPromptToken(pillBefore);
133
+ event.preventDefault();
134
+ return true;
135
+ }
136
+ const selection = getCollapsedRangeSelection();
137
+ if (!selection) return false;
138
+ const anchorNode = selection.anchor.getNode();
139
+ let paragraph = null;
140
+ let offset = 0;
141
+ if ('element' === selection.anchor.type && $isParagraphNode(anchorNode)) {
142
+ paragraph = anchorNode;
143
+ offset = selection.anchor.offset;
144
+ } else {
145
+ if (!('text' === selection.anchor.type && $isTextNode(anchorNode)) || 0 !== selection.anchor.offset) return false;
146
+ const parent = anchorNode.getParent();
147
+ if (!$isParagraphNode(parent)) return false;
148
+ paragraph = parent;
149
+ offset = anchorNode.getIndexWithinParent();
150
+ }
151
+ if (offset <= 0) return false;
152
+ const previousNode = paragraph.getChildAtIndex(offset - 1);
153
+ if (!$isLineBreakNode(previousNode)) return false;
154
+ const lineStartNode = paragraph.getChildAtIndex(offset);
155
+ previousNode.remove();
156
+ $isTextNode(lineStartNode) && lineStartNode.isAttached() ? $setCollapsedSelection(lineStartNode.getKey(), 0, 'text') : $setCollapsedSelection(paragraph.getKey(), Math.max(0, offset - 1), 'element');
157
+ event.preventDefault();
158
+ return true;
159
+ };
160
+ const handleDelete = (event)=>{
161
+ const selectedToken = getSelectedPromptToken();
162
+ if (selectedToken) {
163
+ const after = (()=>{
164
+ const next = selectedToken.getNextSibling();
165
+ if ($isTextNode(next)) return {
166
+ kind: 'text',
167
+ key: next.getKey(),
168
+ offset: 0
169
+ };
170
+ const parent = selectedToken.getParent();
171
+ if (parent) return {
172
+ kind: 'element',
173
+ key: parent.getKey(),
174
+ offset: selectedToken.getIndexWithinParent()
175
+ };
176
+ return null;
177
+ })();
178
+ selectedToken.remove();
179
+ if (after) $setCollapsedSelection(after.key, after.offset, after.kind);
180
+ event.preventDefault();
181
+ return true;
182
+ }
183
+ const pillAfter = getPromptTokenAfterCursor();
184
+ if (pillAfter) {
185
+ focusPromptToken(pillAfter);
186
+ event.preventDefault();
187
+ return true;
188
+ }
189
+ return false;
190
+ };
191
+ const handleArrowLeft = (event)=>{
192
+ if (event.shiftKey) return false;
193
+ const selectedToken = getSelectedPromptToken();
194
+ if (selectedToken) {
195
+ placeCursorBefore(selectedToken);
196
+ event.preventDefault();
197
+ return true;
198
+ }
199
+ const pillBefore = getPromptTokenBeforeCursor();
200
+ if (pillBefore) {
201
+ focusPromptToken(pillBefore);
202
+ event.preventDefault();
203
+ return true;
204
+ }
205
+ if (skipStandaloneJoiner('left')) {
206
+ event.preventDefault();
207
+ return true;
208
+ }
209
+ return false;
210
+ };
211
+ const handleArrowRight = (event)=>{
212
+ if (event.shiftKey) return false;
213
+ const selectedToken = getSelectedPromptToken();
214
+ if (selectedToken) {
215
+ placeCursorAfter(selectedToken);
216
+ event.preventDefault();
217
+ return true;
218
+ }
219
+ const pillAfter = getPromptTokenAfterCursor();
220
+ if (pillAfter) {
221
+ focusPromptToken(pillAfter);
222
+ event.preventDefault();
223
+ return true;
224
+ }
225
+ if (skipStandaloneJoiner('right')) {
226
+ event.preventDefault();
227
+ return true;
228
+ }
229
+ return false;
230
+ };
231
+ const handleEscape = (event)=>{
232
+ const selectedToken = getSelectedPromptToken();
233
+ if (!selectedToken) return false;
234
+ placeCursorAfter(selectedToken);
235
+ event.preventDefault();
236
+ return true;
237
+ };
238
+ const handleArrowUp = (event)=>{
239
+ if (!event.shiftKey) {
240
+ const selectedToken = getSelectedPromptToken();
241
+ if (selectedToken) placeCursorBefore(selectedToken);
242
+ }
243
+ return false;
244
+ };
245
+ const handleArrowDown = (event)=>{
246
+ if (!event.shiftKey) {
247
+ const selectedToken = getSelectedPromptToken();
248
+ if (selectedToken) placeCursorAfter(selectedToken);
249
+ }
250
+ return false;
251
+ };
252
+ const unregisterBackspace = editor.registerCommand(KEY_BACKSPACE_COMMAND, handleBackspace, COMMAND_PRIORITY_HIGH);
253
+ const unregisterDelete = editor.registerCommand(KEY_DELETE_COMMAND, handleDelete, COMMAND_PRIORITY_HIGH);
254
+ const unregisterArrowLeft = editor.registerCommand(KEY_ARROW_LEFT_COMMAND, handleArrowLeft, COMMAND_PRIORITY_HIGH);
255
+ const unregisterArrowRight = editor.registerCommand(KEY_ARROW_RIGHT_COMMAND, handleArrowRight, COMMAND_PRIORITY_HIGH);
256
+ const unregisterArrowUp = editor.registerCommand(KEY_ARROW_UP_COMMAND, handleArrowUp, COMMAND_PRIORITY_HIGH);
257
+ const unregisterArrowDown = editor.registerCommand(KEY_ARROW_DOWN_COMMAND, handleArrowDown, COMMAND_PRIORITY_HIGH);
258
+ const unregisterEscape = editor.registerCommand(KEY_ESCAPE_COMMAND, handleEscape, COMMAND_PRIORITY_HIGH);
259
+ return ()=>{
260
+ unregisterBackspace();
261
+ unregisterDelete();
262
+ unregisterArrowLeft();
263
+ unregisterArrowRight();
264
+ unregisterArrowUp();
265
+ unregisterArrowDown();
266
+ unregisterEscape();
267
+ };
268
+ };
269
+ const NodeSelectionFixPlugin = ()=>{
270
+ const [editor] = useLexicalComposerContext();
271
+ useEffect(()=>registerNodeSelectionFixCommands(editor), [
272
+ editor
273
+ ]);
274
+ return null;
275
+ };
276
+ export { NodeSelectionFixPlugin, registerNodeSelectionFixCommands };