@difizen/libro-codemirror 0.0.2-alpha.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 (126) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +0 -0
  3. package/es/auto-complete/closebrackets.d.ts +12 -0
  4. package/es/auto-complete/closebrackets.d.ts.map +1 -0
  5. package/es/auto-complete/closebrackets.js +408 -0
  6. package/es/auto-complete/completion.d.ts +57 -0
  7. package/es/auto-complete/completion.d.ts.map +1 -0
  8. package/es/auto-complete/completion.js +265 -0
  9. package/es/auto-complete/config.d.ts +22 -0
  10. package/es/auto-complete/config.d.ts.map +1 -0
  11. package/es/auto-complete/config.js +44 -0
  12. package/es/auto-complete/filter.d.ts +13 -0
  13. package/es/auto-complete/filter.d.ts.map +1 -0
  14. package/es/auto-complete/filter.js +191 -0
  15. package/es/auto-complete/index.d.ts +17 -0
  16. package/es/auto-complete/index.d.ts.map +1 -0
  17. package/es/auto-complete/index.js +107 -0
  18. package/es/auto-complete/snippet.d.ts +14 -0
  19. package/es/auto-complete/snippet.d.ts.map +1 -0
  20. package/es/auto-complete/snippet.js +447 -0
  21. package/es/auto-complete/state.d.ts +63 -0
  22. package/es/auto-complete/state.d.ts.map +1 -0
  23. package/es/auto-complete/state.js +452 -0
  24. package/es/auto-complete/theme.d.ts +6 -0
  25. package/es/auto-complete/theme.d.ts.map +1 -0
  26. package/es/auto-complete/theme.js +151 -0
  27. package/es/auto-complete/tooltip.d.ts +5 -0
  28. package/es/auto-complete/tooltip.d.ts.map +1 -0
  29. package/es/auto-complete/tooltip.js +365 -0
  30. package/es/auto-complete/view.d.ts +43 -0
  31. package/es/auto-complete/view.d.ts.map +1 -0
  32. package/es/auto-complete/view.js +372 -0
  33. package/es/auto-complete/word.d.ts +3 -0
  34. package/es/auto-complete/word.d.ts.map +1 -0
  35. package/es/auto-complete/word.js +119 -0
  36. package/es/completion.d.ts +6 -0
  37. package/es/completion.d.ts.map +1 -0
  38. package/es/completion.js +84 -0
  39. package/es/config.d.ts +184 -0
  40. package/es/config.d.ts.map +1 -0
  41. package/es/config.js +473 -0
  42. package/es/editor.d.ts +361 -0
  43. package/es/editor.d.ts.map +1 -0
  44. package/es/editor.js +1126 -0
  45. package/es/factory.d.ts +3 -0
  46. package/es/factory.d.ts.map +1 -0
  47. package/es/factory.js +12 -0
  48. package/es/hyperlink.d.ts +15 -0
  49. package/es/hyperlink.d.ts.map +1 -0
  50. package/es/hyperlink.js +120 -0
  51. package/es/indent.d.ts +8 -0
  52. package/es/indent.d.ts.map +1 -0
  53. package/es/indent.js +58 -0
  54. package/es/indentation-markers/config.d.ts +17 -0
  55. package/es/indentation-markers/config.d.ts.map +1 -0
  56. package/es/indentation-markers/config.js +10 -0
  57. package/es/indentation-markers/index.d.ts +3 -0
  58. package/es/indentation-markers/index.d.ts.map +1 -0
  59. package/es/indentation-markers/index.js +160 -0
  60. package/es/indentation-markers/map.d.ts +77 -0
  61. package/es/indentation-markers/map.d.ts.map +1 -0
  62. package/es/indentation-markers/map.js +265 -0
  63. package/es/indentation-markers/utils.d.ts +27 -0
  64. package/es/indentation-markers/utils.d.ts.map +1 -0
  65. package/es/indentation-markers/utils.js +91 -0
  66. package/es/index.d.ts +11 -0
  67. package/es/index.d.ts.map +1 -0
  68. package/es/index.js +10 -0
  69. package/es/libro-icon.d.ts +3 -0
  70. package/es/libro-icon.d.ts.map +1 -0
  71. package/es/libro-icon.js +2 -0
  72. package/es/mimetype.d.ts +22 -0
  73. package/es/mimetype.d.ts.map +1 -0
  74. package/es/mimetype.js +59 -0
  75. package/es/mode.d.ts +86 -0
  76. package/es/mode.d.ts.map +1 -0
  77. package/es/mode.js +284 -0
  78. package/es/monitor.d.ts +32 -0
  79. package/es/monitor.d.ts.map +1 -0
  80. package/es/monitor.js +129 -0
  81. package/es/python-lang.d.ts +3 -0
  82. package/es/python-lang.d.ts.map +1 -0
  83. package/es/python-lang.js +7 -0
  84. package/es/style/base.css +131 -0
  85. package/es/style/theme.css +12 -0
  86. package/es/style/variables.css +403 -0
  87. package/es/theme.d.ts +35 -0
  88. package/es/theme.d.ts.map +1 -0
  89. package/es/theme.js +225 -0
  90. package/es/tooltip.d.ts +10 -0
  91. package/es/tooltip.d.ts.map +1 -0
  92. package/es/tooltip.js +170 -0
  93. package/package.json +74 -0
  94. package/src/auto-complete/README.md +71 -0
  95. package/src/auto-complete/closebrackets.ts +423 -0
  96. package/src/auto-complete/completion.ts +345 -0
  97. package/src/auto-complete/config.ts +101 -0
  98. package/src/auto-complete/filter.ts +215 -0
  99. package/src/auto-complete/index.ts +112 -0
  100. package/src/auto-complete/snippet.ts +394 -0
  101. package/src/auto-complete/state.ts +472 -0
  102. package/src/auto-complete/theme.ts +126 -0
  103. package/src/auto-complete/tooltip.ts +386 -0
  104. package/src/auto-complete/view.ts +343 -0
  105. package/src/auto-complete/word.ts +118 -0
  106. package/src/completion.ts +61 -0
  107. package/src/config.ts +689 -0
  108. package/src/editor.ts +1078 -0
  109. package/src/factory.ts +10 -0
  110. package/src/hyperlink.ts +95 -0
  111. package/src/indent.ts +69 -0
  112. package/src/indentation-markers/config.ts +31 -0
  113. package/src/indentation-markers/index.ts +192 -0
  114. package/src/indentation-markers/map.ts +273 -0
  115. package/src/indentation-markers/utils.ts +84 -0
  116. package/src/index.ts +11 -0
  117. package/src/libro-icon.ts +4 -0
  118. package/src/mimetype.ts +49 -0
  119. package/src/mode.ts +269 -0
  120. package/src/monitor.ts +105 -0
  121. package/src/python-lang.ts +7 -0
  122. package/src/style/base.css +129 -0
  123. package/src/style/theme.css +12 -0
  124. package/src/style/variables.css +405 -0
  125. package/src/theme.ts +231 -0
  126. package/src/tooltip.ts +145 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023-present Difizen Team
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
File without changes
@@ -0,0 +1,12 @@
1
+ import type { EditorState, Transaction, Extension, StateCommand } from '@codemirror/state';
2
+ import type { KeyBinding } from '@codemirror/view';
3
+ export interface CloseBracketConfig {
4
+ brackets?: string[];
5
+ before?: string;
6
+ stringPrefixes?: string[];
7
+ }
8
+ export declare function closeBrackets(): Extension;
9
+ export declare const deleteBracketPair: StateCommand;
10
+ export declare const closeBracketsKeymap: readonly KeyBinding[];
11
+ export declare function insertBracket(state: EditorState, bracket: string): Transaction | null;
12
+ //# sourceMappingURL=closebrackets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"closebrackets.d.ts","sourceRoot":"","sources":["../../src/auto-complete/closebrackets.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EAEb,MAAM,mBAAmB,CAAC;AAa3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnD,MAAM,WAAW,kBAAkB;IAIjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAIpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAGhB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAyDD,wBAAgB,aAAa,IAAI,SAAS,CAEzC;AA0CD,eAAO,MAAM,iBAAiB,EAAE,YAiC/B,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,SAAS,UAAU,EAEpD,CAAC;AAWF,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAerF"}
@@ -0,0 +1,408 @@
1
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
2
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
3
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
4
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
5
+ function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
6
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
7
+ function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
8
+ function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
9
+ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
10
+ function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
11
+ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
12
+ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
13
+ function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
14
+ function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
15
+ function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
16
+ function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
17
+ import { syntaxTree } from '@codemirror/language';
18
+ import { EditorSelection, StateField, StateEffect, MapMode, CharCategory, codePointAt, fromCodePoint, codePointSize, RangeSet, RangeValue } from '@codemirror/state';
19
+ import { EditorView } from '@codemirror/view';
20
+
21
+ /// Configures bracket closing behavior for a syntax (via
22
+ /// [language data](#state.EditorState.languageDataAt)) using the `"closeBrackets"`
23
+ /// identifier.
24
+ var defaults = {
25
+ brackets: ['(', '[', '{', "'", '"'],
26
+ before: ')]}:;>',
27
+ stringPrefixes: []
28
+ };
29
+ var closeBracketEffect = StateEffect.define({
30
+ map: function map(value, mapping) {
31
+ var mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);
32
+ return mapped === null ? undefined : mapped;
33
+ }
34
+ });
35
+ var skipBracketEffect = StateEffect.define({
36
+ map: function map(value, mapping) {
37
+ return mapping.mapPos(value);
38
+ }
39
+ });
40
+ var closedBracket = new ( /*#__PURE__*/function (_RangeValue) {
41
+ _inherits(_class, _RangeValue);
42
+ var _super = _createSuper(_class);
43
+ function _class() {
44
+ _classCallCheck(this, _class);
45
+ return _super.apply(this, arguments);
46
+ }
47
+ return _createClass(_class);
48
+ }(RangeValue))();
49
+ closedBracket.startSide = 1;
50
+ closedBracket.endSide = -1;
51
+ var bracketState = StateField.define({
52
+ create: function create() {
53
+ return RangeSet.empty;
54
+ },
55
+ update: function update(value, tr) {
56
+ if (tr.selection) {
57
+ var lineStart = tr.state.doc.lineAt(tr.selection.main.head).from;
58
+ var prevLineStart = tr.startState.doc.lineAt(tr.startState.selection.main.head).from;
59
+ if (lineStart !== tr.changes.mapPos(prevLineStart, -1)) {
60
+ value = RangeSet.empty;
61
+ }
62
+ }
63
+ value = value.map(tr.changes);
64
+ var _iterator = _createForOfIteratorHelper(tr.effects),
65
+ _step;
66
+ try {
67
+ var _loop = function _loop() {
68
+ var effect = _step.value;
69
+ if (effect.is(closeBracketEffect)) {
70
+ value = value.update({
71
+ add: [closedBracket.range(effect.value, effect.value + 1)]
72
+ });
73
+ } else if (effect.is(skipBracketEffect)) {
74
+ value = value.update({
75
+ filter: function filter(from) {
76
+ return from !== effect.value;
77
+ }
78
+ });
79
+ }
80
+ };
81
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
82
+ _loop();
83
+ }
84
+ } catch (err) {
85
+ _iterator.e(err);
86
+ } finally {
87
+ _iterator.f();
88
+ }
89
+ return value;
90
+ }
91
+ });
92
+
93
+ /// Extension to enable bracket-closing behavior. When a closeable
94
+ /// bracket is typed, its closing bracket is immediately inserted
95
+ /// after the cursor. When closing a bracket directly in front of a
96
+ /// closing bracket inserted by the extension, the cursor moves over
97
+ /// that bracket.
98
+ export function closeBrackets() {
99
+ return [inputHandler, bracketState];
100
+ }
101
+ var definedClosing = '()[]{}<>';
102
+ function closing(ch) {
103
+ for (var i = 0; i < definedClosing.length; i += 2) {
104
+ if (definedClosing.charCodeAt(i) === ch) {
105
+ return definedClosing.charAt(i + 1);
106
+ }
107
+ }
108
+ return fromCodePoint(ch < 128 ? ch : ch + 1);
109
+ }
110
+ function config(state, pos) {
111
+ return state.languageDataAt('closeBrackets', pos)[0] || defaults;
112
+ }
113
+ var android = (typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) === 'object' && /Android\b/.test(navigator.userAgent);
114
+ var inputHandler = EditorView.inputHandler.of(function (view, from, to, insert) {
115
+ if ((android ? view.composing : view.compositionStarted) || view.state.readOnly) {
116
+ return false;
117
+ }
118
+ var sel = view.state.selection.main;
119
+ if (insert.length > 2 || insert.length === 2 && codePointSize(codePointAt(insert, 0)) === 1 || from !== sel.from || to !== sel.to) {
120
+ return false;
121
+ }
122
+ var tr = insertBracket(view.state, insert);
123
+ if (!tr) {
124
+ return false;
125
+ }
126
+ view.dispatch(tr);
127
+ return true;
128
+ });
129
+
130
+ /// Command that implements deleting a pair of matching brackets when
131
+ /// the cursor is between them.
132
+ export var deleteBracketPair = function deleteBracketPair(_ref) {
133
+ var state = _ref.state,
134
+ dispatch = _ref.dispatch;
135
+ if (state.readOnly) {
136
+ return false;
137
+ }
138
+ var conf = config(state, state.selection.main.head);
139
+ var tokens = conf.brackets || defaults.brackets;
140
+ var dont = null;
141
+ var changes = state.changeByRange(function (range) {
142
+ if (range.empty) {
143
+ var before = prevChar(state.doc, range.head);
144
+ var _iterator2 = _createForOfIteratorHelper(tokens),
145
+ _step2;
146
+ try {
147
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
148
+ var token = _step2.value;
149
+ if (token === before && nextChar(state.doc, range.head) === closing(codePointAt(token, 0))) {
150
+ return {
151
+ changes: {
152
+ from: range.head - token.length,
153
+ to: range.head + token.length
154
+ },
155
+ range: EditorSelection.cursor(range.head - token.length)
156
+ };
157
+ }
158
+ }
159
+ } catch (err) {
160
+ _iterator2.e(err);
161
+ } finally {
162
+ _iterator2.f();
163
+ }
164
+ }
165
+ return {
166
+ range: dont = range
167
+ };
168
+ });
169
+ if (!dont) {
170
+ dispatch(state.update(changes, {
171
+ scrollIntoView: true,
172
+ userEvent: 'delete.backward'
173
+ }));
174
+ }
175
+ return !dont;
176
+ };
177
+
178
+ /// Close-brackets related key bindings. Binds Backspace to
179
+ /// [`deleteBracketPair`](#autocomplete.deleteBracketPair).
180
+ export var closeBracketsKeymap = [{
181
+ key: 'Backspace',
182
+ run: deleteBracketPair
183
+ }];
184
+
185
+ /// Implements the extension's behavior on text insertion. If the
186
+ /// given string counts as a bracket in the language around the
187
+ /// selection, and replacing the selection with it requires custom
188
+ /// behavior (inserting a closing version or skipping past a
189
+ /// previously-closed bracket), this function returns a transaction
190
+ /// representing that custom behavior. (You only need this if you want
191
+ /// to programmatically insert brackets—the
192
+ /// [`closeBrackets`](#autocomplete.closeBrackets) extension will
193
+ /// take care of running this for user input.)
194
+ export function insertBracket(state, bracket) {
195
+ var conf = config(state, state.selection.main.head);
196
+ var tokens = conf.brackets || defaults.brackets;
197
+ var _iterator3 = _createForOfIteratorHelper(tokens),
198
+ _step3;
199
+ try {
200
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
201
+ var tok = _step3.value;
202
+ var closed = closing(codePointAt(tok, 0));
203
+ if (bracket === tok) {
204
+ return closed === tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf) : handleOpen(state, tok, closed, conf.before || defaults.before);
205
+ }
206
+ if (bracket === closed && closedBracketAt(state, state.selection.main.from)) {
207
+ return handleClose(state, tok, closed);
208
+ }
209
+ }
210
+ } catch (err) {
211
+ _iterator3.e(err);
212
+ } finally {
213
+ _iterator3.f();
214
+ }
215
+ return null;
216
+ }
217
+ function closedBracketAt(state, pos) {
218
+ var found = false;
219
+ state.field(bracketState).between(0, state.doc.length, function (from) {
220
+ if (from === pos) {
221
+ found = true;
222
+ }
223
+ });
224
+ return found;
225
+ }
226
+ function nextChar(doc, pos) {
227
+ var next = doc.sliceString(pos, pos + 2);
228
+ return next.slice(0, codePointSize(codePointAt(next, 0)));
229
+ }
230
+ function prevChar(doc, pos) {
231
+ var prev = doc.sliceString(pos - 2, pos);
232
+ return codePointSize(codePointAt(prev, 0)) === prev.length ? prev : prev.slice(1);
233
+ }
234
+ function handleOpen(state, open, close, closeBefore) {
235
+ var dont = null;
236
+ var changes = state.changeByRange(function (range) {
237
+ if (!range.empty) {
238
+ return {
239
+ changes: [{
240
+ insert: open,
241
+ from: range.from
242
+ }, {
243
+ insert: close,
244
+ from: range.to
245
+ }],
246
+ effects: closeBracketEffect.of(range.to + open.length),
247
+ range: EditorSelection.range(range.anchor + open.length, range.head + open.length)
248
+ };
249
+ }
250
+ var next = nextChar(state.doc, range.head);
251
+ if (!next || /\s/.test(next) || closeBefore.indexOf(next) > -1) {
252
+ return {
253
+ changes: {
254
+ insert: open + close,
255
+ from: range.head
256
+ },
257
+ effects: closeBracketEffect.of(range.head + open.length),
258
+ range: EditorSelection.cursor(range.head + open.length)
259
+ };
260
+ }
261
+ return {
262
+ range: dont = range
263
+ };
264
+ });
265
+ return dont ? null : state.update(changes, {
266
+ scrollIntoView: true,
267
+ userEvent: 'input.type'
268
+ });
269
+ }
270
+ function handleClose(state, _open, close) {
271
+ var dont = null;
272
+ var moved = state.selection.ranges.map(function (range) {
273
+ if (range.empty && nextChar(state.doc, range.head) === close) {
274
+ return EditorSelection.cursor(range.head + close.length);
275
+ }
276
+ return dont = range;
277
+ });
278
+ return dont ? null : state.update({
279
+ selection: EditorSelection.create(moved, state.selection.mainIndex),
280
+ scrollIntoView: true,
281
+ effects: state.selection.ranges.map(function (_ref2) {
282
+ var from = _ref2.from;
283
+ return skipBracketEffect.of(from);
284
+ })
285
+ });
286
+ }
287
+
288
+ // Handles cases where the open and close token are the same, and
289
+ // possibly triple quotes (as in `"""abc"""`-style quoting).
290
+ function handleSame(state, token, allowTriple, config) {
291
+ var stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;
292
+ var dont = null;
293
+ var changes = state.changeByRange(function (range) {
294
+ if (!range.empty) {
295
+ return {
296
+ changes: [{
297
+ insert: token,
298
+ from: range.from
299
+ }, {
300
+ insert: token,
301
+ from: range.to
302
+ }],
303
+ effects: closeBracketEffect.of(range.to + token.length),
304
+ range: EditorSelection.range(range.anchor + token.length, range.head + token.length)
305
+ };
306
+ }
307
+ var pos = range.head;
308
+ var start;
309
+ var next = nextChar(state.doc, pos);
310
+ if (next === token) {
311
+ if (nodeStart(state, pos)) {
312
+ return {
313
+ changes: {
314
+ insert: token + token,
315
+ from: pos
316
+ },
317
+ effects: closeBracketEffect.of(pos + token.length),
318
+ range: EditorSelection.cursor(pos + token.length)
319
+ };
320
+ } else if (closedBracketAt(state, pos)) {
321
+ var isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) === token + token + token;
322
+ return {
323
+ range: EditorSelection.cursor(pos + token.length * (isTriple ? 3 : 1)),
324
+ effects: skipBracketEffect.of(pos)
325
+ };
326
+ }
327
+ } else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) === token + token && (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 && nodeStart(state, start)) {
328
+ return {
329
+ changes: {
330
+ insert: token + token + token + token,
331
+ from: pos
332
+ },
333
+ effects: closeBracketEffect.of(pos + token.length),
334
+ range: EditorSelection.cursor(pos + token.length)
335
+ };
336
+ } else if (state.charCategorizer(pos)(next) !== CharCategory.Word) {
337
+ if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes)) {
338
+ return {
339
+ changes: {
340
+ insert: token + token,
341
+ from: pos
342
+ },
343
+ effects: closeBracketEffect.of(pos + token.length),
344
+ range: EditorSelection.cursor(pos + token.length)
345
+ };
346
+ }
347
+ }
348
+ return {
349
+ range: dont = range
350
+ };
351
+ });
352
+ return dont ? null : state.update(changes, {
353
+ scrollIntoView: true,
354
+ userEvent: 'input.type'
355
+ });
356
+ }
357
+ function nodeStart(state, pos) {
358
+ var tree = syntaxTree(state).resolveInner(pos + 1);
359
+ return tree.parent && tree.from === pos;
360
+ }
361
+ function probablyInString(state, pos, quoteToken, prefixes) {
362
+ var node = syntaxTree(state).resolveInner(pos, -1);
363
+ var maxPrefix = prefixes.reduce(function (m, p) {
364
+ return Math.max(m, p.length);
365
+ }, 0);
366
+ for (var i = 0; i < 5; i++) {
367
+ var start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));
368
+ var quotePos = start.indexOf(quoteToken);
369
+ if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {
370
+ var first = node.firstChild;
371
+ while (first && first.from === node.from && first.to - first.from > quoteToken.length + quotePos) {
372
+ if (state.sliceDoc(first.to - quoteToken.length, first.to) === quoteToken) {
373
+ return false;
374
+ }
375
+ first = first.firstChild;
376
+ }
377
+ return true;
378
+ }
379
+ var parent = node.to === pos && node.parent;
380
+ if (!parent) {
381
+ break;
382
+ }
383
+ node = parent;
384
+ }
385
+ return false;
386
+ }
387
+ function canStartStringAt(state, pos, prefixes) {
388
+ var charCat = state.charCategorizer(pos);
389
+ if (charCat(state.sliceDoc(pos - 1, pos)) !== CharCategory.Word) {
390
+ return pos;
391
+ }
392
+ var _iterator4 = _createForOfIteratorHelper(prefixes),
393
+ _step4;
394
+ try {
395
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
396
+ var prefix = _step4.value;
397
+ var start = pos - prefix.length;
398
+ if (state.sliceDoc(start, pos) === prefix && charCat(state.sliceDoc(start - 1, start)) !== CharCategory.Word) {
399
+ return start;
400
+ }
401
+ }
402
+ } catch (err) {
403
+ _iterator4.e(err);
404
+ } finally {
405
+ _iterator4.f();
406
+ }
407
+ return -1;
408
+ }
@@ -0,0 +1,57 @@
1
+ import type { EditorState, TransactionSpec } from '@codemirror/state';
2
+ import type { EditorView } from '@codemirror/view';
3
+ import type { ActiveResult } from './state.js';
4
+ export interface Completion {
5
+ label: string;
6
+ detail?: string;
7
+ info?: string | ((completion: Completion) => Node | null | Promise<Node | null>);
8
+ apply?: string | ((view: EditorView, completion: Completion, from: number, to: number) => void);
9
+ type?: string;
10
+ boost?: number;
11
+ }
12
+ export declare class CompletionContext {
13
+ readonly state: EditorState;
14
+ readonly pos: number;
15
+ readonly explicit: boolean;
16
+ abortListeners: (() => void)[] | null;
17
+ constructor(state: EditorState, pos: number, explicit: boolean);
18
+ tokenBefore(types: readonly string[]): {
19
+ from: number;
20
+ to: number;
21
+ text: string;
22
+ type: import("@lezer/common").NodeType;
23
+ } | null;
24
+ matchBefore(expr: RegExp): {
25
+ from: number;
26
+ to: number;
27
+ text: string;
28
+ } | null;
29
+ get aborted(): boolean;
30
+ addEventListener(type: 'abort', listener: () => void): void;
31
+ }
32
+ export declare function completeFromList(list: readonly (string | Completion)[]): CompletionSource;
33
+ export declare function ifIn(nodes: readonly string[], source: CompletionSource): CompletionSource;
34
+ export declare function ifNotIn(nodes: readonly string[], source: CompletionSource): CompletionSource;
35
+ export type CompletionSource = (context: CompletionContext) => CompletionResult | null | Promise<CompletionResult | null>;
36
+ export interface CompletionResult {
37
+ from: number;
38
+ to?: number;
39
+ options: readonly Completion[];
40
+ validFor?: RegExp | ((text: string, from: number, to: number, state: EditorState) => boolean);
41
+ filter?: boolean;
42
+ getMatch?: (completion: Completion) => readonly number[];
43
+ update?: (current: CompletionResult, from: number, to: number, context: CompletionContext) => CompletionResult | null;
44
+ }
45
+ export declare class Option {
46
+ readonly completion: Completion;
47
+ readonly source: ActiveResult;
48
+ readonly match: readonly number[];
49
+ constructor(completion: Completion, source: ActiveResult, match: readonly number[]);
50
+ }
51
+ export declare function cur(state: EditorState): number;
52
+ export declare function ensureAnchor(expr: RegExp, start: boolean): RegExp;
53
+ export declare const pickedCompletion: import("@codemirror/state").AnnotationType<Completion>;
54
+ export declare function insertCompletionText(state: EditorState, text: string, from: number, to: number): TransactionSpec;
55
+ export declare function applyCompletion(view: EditorView, option: Option): void;
56
+ export declare function asSource(source: CompletionSource | readonly (string | Completion)[]): CompletionSource;
57
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/auto-complete/completion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,WAAW,UAAU;IAIzB,KAAK,EAAE,MAAM,CAAC;IAGd,MAAM,CAAC,EAAE,MAAM,CAAC;IAIhB,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAQjF,KAAK,CAAC,EACF,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IAUnF,IAAI,CAAC,EAAE,MAAM,CAAC;IAKd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,qBAAa,iBAAiB;IAS1B,QAAQ,CAAC,KAAK,EAAE,WAAW;IAE3B,QAAQ,CAAC,GAAG,EAAE,MAAM;IAKpB,QAAQ,CAAC,QAAQ,EAAE,OAAO;IAd5B,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,IAAI,CAAM;gBAOhC,KAAK,EAAE,WAAW,EAElB,GAAG,EAAE,MAAM,EAKX,QAAQ,EAAE,OAAO;IAK5B,WAAW,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE;;;;;;IAiBpC,WAAW,CAAC,IAAI,EAAE,MAAM;;;;;IAYxB,IAAI,OAAO,YAEV;IAKD,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI;CAKrD;AA0BD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,GACrC,gBAAgB,CAWlB;AAID,wBAAgB,IAAI,CAClB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAgBlB;AAID,wBAAgB,OAAO,CACrB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,CAgBlB;AAMD,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,iBAAiB,KACvB,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;AAGhE,MAAM,WAAW,gBAAgB;IAE/B,IAAI,EAAE,MAAM,CAAC;IAGb,EAAE,CAAC,EAAE,MAAM,CAAC;IAKZ,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IAO/B,QAAQ,CAAC,EACL,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC;IAO9E,MAAM,CAAC,EAAE,OAAO,CAAC;IAMjB,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,SAAS,MAAM,EAAE,CAAC;IAOzD,MAAM,CAAC,EAAE,CACP,OAAO,EAAE,gBAAgB,EACzB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,iBAAiB,KACvB,gBAAgB,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,MAAM;IAEf,QAAQ,CAAC,UAAU,EAAE,UAAU;IAC/B,QAAQ,CAAC,MAAM,EAAE,YAAY;IAC7B,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE;gBAFxB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,SAAS,MAAM,EAAE;CAEpC;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,WAAW,UAErC;AAID,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,UAWxD;AAID,eAAO,MAAM,gBAAgB,wDAAkC,CAAC;AAKhE,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT,eAAe,CAwBjB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAQ/D;AAID,wBAAgB,QAAQ,CACtB,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,GAC1D,gBAAgB,CASlB"}