@fusion.dev/helix-code-editor 0.0.0-dev

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Fusion Development Group
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
@@ -0,0 +1,50 @@
1
+ # @fusion.dev/helix-code-editor
2
+
3
+ Connects Helix's `Code Editor` to CodeMirror 6, themed from your tokens:
4
+ highlighting in your theme's syntax colors, line numbers, folding, bracket
5
+ matching and history, diagnostics underlined in their tone with their line
6
+ numbers drawn in it, and the editor's own find bar finding and replacing in
7
+ CodeMirror.
8
+
9
+ ```sh
10
+ bun add @fusion.dev/helix @fusion.dev/helix-code-editor
11
+ ```
12
+
13
+ The element is on the [Code Editor reference](https://fusion.dev/helix/components/code-editor).
14
+ On its own it is a text field in the code face; connected, CodeMirror draws it.
15
+ For a few lines of code in a form, `Code Input` needs no engine.
16
+
17
+ ```js
18
+ import '@fusion.dev/helix/code-editor'
19
+ import { connectCodeEditor } from '@fusion.dev/helix-code-editor'
20
+
21
+ const editor = document.querySelector('helix-code-editor')
22
+ const disconnect = connectCodeEditor(editor)
23
+
24
+ editor.language = 'ts'
25
+ editor.diagnostics = [{ from: 79, to: 83, message: 'Cannot find name totl.' }]
26
+ editor.addEventListener('input', () => save(editor.value))
27
+ ```
28
+
29
+ The value, the form, validation, and the events stay the element's: an edit in
30
+ CodeMirror goes through the element's `requestValue`, so a listener refusing
31
+ `helix-before-change` refuses the keystroke, and `input` follows each edit.
32
+
33
+ ## Languages
34
+
35
+ `language` takes `css`, `html`, `js`, `jsx`, `json`, `md`, `py`, `rs`, `sh`,
36
+ `ts` and `tsx`, and the names they go by, such as `typescript`, `markdown`,
37
+ `python` and `rust`. Each grammar loads the first time an editor asks for it.
38
+ Any other name is plain text.
39
+
40
+ ## More of CodeMirror
41
+
42
+ `connectCodeEditor(editor, { extensions })` adds CodeMirror extensions after
43
+ Helix's own, such as completions or a language server client. To connect
44
+ CodeMirror under your own control, set the element's `engine` to
45
+ `codeMirrorEngine(options)`, or to an engine of your own that answers `mount`.
46
+
47
+ ## Keyboard
48
+
49
+ Tab indents, and Escape then Tab leaves the editor. Command+F, or Control+F on
50
+ Windows and Linux, opens the editor's find bar, and Command+Z undoes.
@@ -0,0 +1,26 @@
1
+ import { type Extension } from '@codemirror/state';
2
+ import type { CodeEditorEngine } from '@fusion.dev/helix-headless/code-editor';
3
+ /** The language a name means, or nothing for plain text and a name no grammar answers. */
4
+ export declare const languageName: (name: string) => string | undefined;
5
+ /** Every name `language` takes, its aliases included. */
6
+ export declare const languageNames: () => string[];
7
+ /** What `codeMirrorEngine` takes beyond what the editor sets. */
8
+ export interface CodeMirrorOptions {
9
+ /** More CodeMirror extensions, such as completions or a language server client, added after Helix's own. */
10
+ extensions?: Extension[];
11
+ }
12
+ /**
13
+ * CodeMirror 6, drawing a Helix Editor: highlighting in the theme's syntax
14
+ * colors, line numbers, folding, bracket matching, search (Command+F, or
15
+ * Control+F elsewhere), history, and diagnostics underlined in their tone.
16
+ * Tab indents, and Escape then Tab leaves the editor.
17
+ */
18
+ export declare const codeMirrorEngine: (options?: CodeMirrorOptions) => CodeEditorEngine;
19
+ /**
20
+ * Connects CodeMirror to an editor, with `codeMirrorEngine(options)`, and
21
+ * returns what takes it away again, leaving the editor a plain text field.
22
+ */
23
+ export declare const connectCodeEditor: (editor: {
24
+ engine: CodeEditorEngine | undefined;
25
+ }, options?: CodeMirrorOptions) => (() => void);
26
+ //# sourceMappingURL=codemirror-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemirror-engine.d.ts","sourceRoot":"","sources":["../../src/codemirror/codemirror-engine.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAwC,KAAK,SAAS,EAAY,MAAM,mBAAmB,CAAA;AAYlG,OAAO,KAAK,EAEV,gBAAgB,EAMjB,MAAM,wCAAwC,CAAA;AA0C/C,0FAA0F;AAC1F,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAAM,GAAG,SAIpD,CAAA;AAED,yDAAyD;AACzD,eAAO,MAAM,aAAa,QAAO,MAAM,EACsB,CAAA;AA0L7D,iEAAiE;AACjE,MAAM,WAAW,iBAAiB;IAChC,4GAA4G;IAC5G,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,aAAa,iBAAiB,KAAQ,gBAuMjE,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,WACpB;IAAE,MAAM,EAAE,gBAAgB,GAAG,SAAS,CAAA;CAAE,YACvC,iBAAiB,KACzB,CAAC,MAAM,IAAI,CAKb,CAAA"}
@@ -0,0 +1,371 @@
1
+ import { defaultKeymap, history, historyKeymap, indentWithTab } from '@codemirror/commands';
2
+ import { bracketMatching, codeFolding, foldGutter, foldKeymap, indentOnInput, indentUnit, StreamLanguage, syntaxHighlighting, } from '@codemirror/language';
3
+ import { setDiagnostics } from '@codemirror/lint';
4
+ import { closeSearchPanel, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, SearchQuery, search, searchPanelOpen, setSearchQuery, } from '@codemirror/search';
5
+ import { Annotation, Compartment, EditorState, RangeSet } from '@codemirror/state';
6
+ import { drawSelection, EditorView, GutterMarker, gutterLineClass, highlightActiveLine, highlightActiveLineGutter, keymap, lineNumbers, placeholder, } from '@codemirror/view';
7
+ import { syntaxHighlighter, syntaxRules } from '@fusion.dev/helix-sandbox/highlight';
8
+ const LANGUAGES = {
9
+ css: async () => (await import('@codemirror/lang-css')).css(),
10
+ html: async () => (await import('@codemirror/lang-html')).html(),
11
+ js: async () => (await import('@codemirror/lang-javascript')).javascript(),
12
+ json: async () => (await import('@codemirror/lang-json')).json(),
13
+ jsx: async () => (await import('@codemirror/lang-javascript')).javascript({ jsx: true }),
14
+ md: async () => (await import('@codemirror/lang-markdown')).markdown(),
15
+ py: async () => (await import('@codemirror/lang-python')).python(),
16
+ rs: async () => (await import('@codemirror/lang-rust')).rust(),
17
+ sh: async () => StreamLanguage.define((await import('@codemirror/legacy-modes/mode/shell')).shell),
18
+ ts: async () => (await import('@codemirror/lang-javascript')).javascript({ typescript: true }),
19
+ tsx: async () => (await import('@codemirror/lang-javascript')).javascript({ jsx: true, typescript: true }),
20
+ };
21
+ const ALIASES = {
22
+ bash: 'sh',
23
+ cjs: 'js',
24
+ htm: 'html',
25
+ javascript: 'js',
26
+ markdown: 'md',
27
+ mjs: 'js',
28
+ python: 'py',
29
+ rust: 'rs',
30
+ shell: 'sh',
31
+ typescript: 'ts',
32
+ zsh: 'sh',
33
+ };
34
+ export const languageName = (name) => {
35
+ const key = name.trim().toLowerCase();
36
+ const known = ALIASES[key] ?? key;
37
+ return known in LANGUAGES ? known : undefined;
38
+ };
39
+ export const languageNames = () => [...Object.keys(LANGUAGES), ...Object.keys(ALIASES)].sort();
40
+ const given = Annotation.define();
41
+ const helixTheme = EditorView.theme({
42
+ '.cm-activeLine, .cm-activeLineGutter': {
43
+ backgroundColor: 'color-mix(in oklab, var(--helix-color-foreground) 5%, transparent)',
44
+ },
45
+ '.cm-content': {
46
+ caretColor: 'var(--helix-color-primary)',
47
+ paddingBlock: 'var(--helix-space-xs)',
48
+ },
49
+ '.cm-cursor': { borderLeftColor: 'var(--helix-color-primary)' },
50
+ '.cm-foldGutter .cm-gutterElement': { paddingInline: 'var(--helix-space-2xs)' },
51
+ '.cm-foldPlaceholder': {
52
+ backgroundColor: 'var(--helix-color-surface-sunken)',
53
+ border: 'none',
54
+ color: 'var(--helix-color-foreground-muted)',
55
+ },
56
+ '.cm-gutterElement.cm-helix-problem-danger': {
57
+ color: 'var(--helix-color-danger)',
58
+ fontWeight: 'var(--helix-weight-semibold)',
59
+ },
60
+ '.cm-gutterElement.cm-helix-problem-info': { color: 'var(--helix-color-info)' },
61
+ '.cm-gutterElement.cm-helix-problem-warning': {
62
+ color: 'var(--helix-color-warning)',
63
+ fontWeight: 'var(--helix-weight-semibold)',
64
+ },
65
+ '.cm-gutters': {
66
+ backgroundColor: 'transparent',
67
+ border: 'none',
68
+ color: 'var(--helix-color-foreground-muted)',
69
+ },
70
+ '.cm-lineNumbers .cm-gutterElement': {
71
+ minInlineSize: '3ch',
72
+ paddingInline: 'var(--helix-space-sm) var(--helix-space-2xs)',
73
+ },
74
+ '.cm-lintRange-error': {
75
+ backgroundImage: 'none',
76
+ textDecoration: 'underline wavy var(--helix-color-danger)',
77
+ },
78
+ '.cm-lintRange-info': {
79
+ backgroundImage: 'none',
80
+ textDecoration: 'underline dotted var(--helix-color-foreground-muted)',
81
+ },
82
+ '.cm-lintRange-warning': {
83
+ backgroundImage: 'none',
84
+ textDecoration: 'underline wavy var(--helix-color-warning)',
85
+ },
86
+ '.cm-panels:has(> .cm-helix-find:only-child)': { display: 'none' },
87
+ '.cm-placeholder': { color: 'var(--helix-color-foreground-muted)' },
88
+ '.cm-scroller': {
89
+ fontFamily: 'inherit',
90
+ fontVariantLigatures: 'none',
91
+ lineHeight: 'var(--helix-leading-normal)',
92
+ scrollbarColor: 'var(--helix-scrollbar-thumb-color) transparent',
93
+ scrollbarWidth: 'thin',
94
+ },
95
+ '.cm-searchMatch': {
96
+ backgroundColor: 'color-mix(in oklab, var(--helix-color-warning) 25%, transparent)',
97
+ },
98
+ '.cm-searchMatch-selected': {
99
+ backgroundColor: 'color-mix(in oklab, var(--helix-color-warning) 50%, transparent)',
100
+ outline: 'var(--helix-border-thin) solid var(--helix-color-warning)',
101
+ },
102
+ '.cm-selectionBackground, &.cm-focused .cm-selectionBackground': {
103
+ backgroundColor: 'var(--helix-color-primary-subtle)',
104
+ },
105
+ '.cm-tooltip': {
106
+ backgroundColor: 'var(--helix-color-surface-overlay)',
107
+ border: 'var(--helix-border-thin) solid var(--helix-color-border)',
108
+ borderRadius: 'var(--helix-radii-sm)',
109
+ },
110
+ '&': { blockSize: '100%', color: 'var(--helix-color-foreground)', fontSize: 'inherit' },
111
+ '&:not(.cm-focused) .cm-activeLine, &:not(.cm-focused) .cm-activeLineGutter': {
112
+ backgroundColor: 'transparent',
113
+ },
114
+ '&.cm-focused': { outline: 'none' },
115
+ });
116
+ const SEVERITY = { danger: 'error', info: 'info', warning: 'warning' };
117
+ const lintOf = (state, length) => state.diagnostics.map((one) => ({
118
+ from: Math.min(Math.max(0, one.from), length),
119
+ message: one.message,
120
+ severity: SEVERITY[one.tone ?? 'danger'],
121
+ to: Math.min(Math.max(one.from, one.to), length),
122
+ }));
123
+ class ProblemLine extends GutterMarker {
124
+ constructor(tone) {
125
+ super();
126
+ this.tone = tone;
127
+ this.elementClass = `cm-helix-problem-${tone}`;
128
+ }
129
+ eq(other) {
130
+ return other.tone === this.tone;
131
+ }
132
+ }
133
+ const RANK = { danger: 2, info: 0, warning: 1 };
134
+ const problemLines = (state, diagnostics) => {
135
+ const worst = new Map();
136
+ for (const one of diagnostics) {
137
+ const line = state.doc.lineAt(Math.min(Math.max(0, one.from), state.doc.length)).from;
138
+ const tone = one.tone ?? 'danger';
139
+ const held = worst.get(line);
140
+ if (!held || RANK[tone] > RANK[held]) {
141
+ worst.set(line, tone);
142
+ }
143
+ }
144
+ const marks = [...worst]
145
+ .sort(([a], [b]) => a - b)
146
+ .map(([from, tone]) => new ProblemLine(tone).range(from));
147
+ return gutterLineClass.of(RangeSet.of(marks));
148
+ };
149
+ const queryOf = (query) => new SearchQuery({
150
+ caseSensitive: query.caseSensitive,
151
+ literal: !query.regex,
152
+ regexp: query.regex,
153
+ replace: query.replace,
154
+ search: query.search,
155
+ wholeWord: query.wholeWord,
156
+ });
157
+ const COUNTED = 10_000;
158
+ const matchesOf = (state, query) => {
159
+ const found = [];
160
+ const cursor = query.getCursor(state);
161
+ for (let next = cursor.next(); !next.done && found.length < COUNTED; next = cursor.next()) {
162
+ if (next.value.to > next.value.from) {
163
+ found.push([next.value.from, next.value.to]);
164
+ }
165
+ }
166
+ return found;
167
+ };
168
+ const standing = (state, query) => {
169
+ const matches = matchesOf(state, query);
170
+ const { from, to } = state.selection.main;
171
+ return {
172
+ count: matches.length,
173
+ index: matches.findIndex(([start, end]) => start === from && end === to),
174
+ };
175
+ };
176
+ const adoptSyntax = (root) => {
177
+ if (typeof CSSStyleSheet !== 'function' || !('adoptedStyleSheets' in root)) {
178
+ return;
179
+ }
180
+ const marked = root;
181
+ if (marked.helixSyntax) {
182
+ return;
183
+ }
184
+ const sheet = new CSSStyleSheet();
185
+ sheet.replaceSync(syntaxRules);
186
+ root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
187
+ marked.helixSyntax = true;
188
+ };
189
+ export const codeMirrorEngine = (options = {}) => ({
190
+ mount(parent, state, listeners) {
191
+ const root = parent.getRootNode();
192
+ adoptSyntax(root);
193
+ const language = new Compartment();
194
+ const numbers = new Compartment();
195
+ const editable = new Compartment();
196
+ const wrapping = new Compartment();
197
+ const words = new Compartment();
198
+ const hint = new Compartment();
199
+ const problems = new Compartment();
200
+ let current = state;
201
+ let asked = '';
202
+ const load = (name, view) => {
203
+ asked = name;
204
+ const known = languageName(name);
205
+ if (!known) {
206
+ view.dispatch({ effects: language.reconfigure([]) });
207
+ return;
208
+ }
209
+ void LANGUAGES[known]?.().then((grammar) => {
210
+ if (asked === name) {
211
+ view.dispatch({ effects: language.reconfigure(grammar) });
212
+ }
213
+ });
214
+ };
215
+ const view = new EditorView({
216
+ parent,
217
+ root,
218
+ state: EditorState.create({
219
+ doc: state.value,
220
+ extensions: [
221
+ numbers.of(state.lineNumbers ? [lineNumbers(), highlightActiveLineGutter(), foldGutter()] : []),
222
+ history(),
223
+ drawSelection(),
224
+ indentOnInput(),
225
+ bracketMatching(),
226
+ codeFolding(),
227
+ highlightActiveLine(),
228
+ highlightSelectionMatches(),
229
+ search({
230
+ createPanel: () => {
231
+ const dom = document.createElement('div');
232
+ dom.className = 'cm-helix-find';
233
+ return { dom, top: true };
234
+ },
235
+ }),
236
+ problems.of(problemLines(EditorState.create({ doc: state.value }), state.diagnostics)),
237
+ indentUnit.of(' '),
238
+ EditorState.tabSize.of(2),
239
+ keymap.of([...defaultKeymap, ...historyKeymap, ...foldKeymap, indentWithTab]),
240
+ syntaxHighlighting(syntaxHighlighter, { fallback: true }),
241
+ helixTheme,
242
+ language.of([]),
243
+ editable.of(EditorState.readOnly.of(state.readOnly)),
244
+ wrapping.of(state.wrap ? EditorView.lineWrapping : []),
245
+ words.of(EditorView.contentAttributes.of({
246
+ 'aria-label': state.label,
247
+ 'aria-multiline': 'true',
248
+ })),
249
+ hint.of(state.placeholder ? placeholder(state.placeholder) : []),
250
+ EditorState.transactionFilter.of((transaction) => {
251
+ if (!transaction.docChanged || transaction.annotation(given)) {
252
+ return transaction;
253
+ }
254
+ return listeners.change(transaction.newDoc.toString()) ? transaction : [];
255
+ }),
256
+ EditorView.updateListener.of((update) => {
257
+ if (update.selectionSet || update.docChanged) {
258
+ const { from, to } = update.state.selection.main;
259
+ listeners.caret?.(from, to);
260
+ }
261
+ }),
262
+ ...(options.extensions ?? []),
263
+ ],
264
+ }),
265
+ });
266
+ load(state.language, view);
267
+ view.dispatch(setDiagnostics(view.state, lintOf(state, view.state.doc.length)));
268
+ const ask = (query) => {
269
+ const asked = queryOf(query);
270
+ if (!searchPanelOpen(view.state)) {
271
+ openSearchPanel(view);
272
+ }
273
+ view.dispatch({ effects: setSearchQuery.of(asked) });
274
+ return asked;
275
+ };
276
+ return {
277
+ destroy: () => view.destroy(),
278
+ find: (query, direction) => {
279
+ const asked = ask(query);
280
+ if (!asked.valid) {
281
+ return { count: 0, index: -1 };
282
+ }
283
+ const matches = matchesOf(view.state, asked);
284
+ if (matches.length === 0) {
285
+ return { count: 0, index: -1 };
286
+ }
287
+ const { from, to } = view.state.selection.main;
288
+ let index = direction === 'previous'
289
+ ? matches.findLastIndex(([start]) => start < from)
290
+ : matches.findIndex(([start]) => (direction === 'first' ? start >= from : start >= to));
291
+ if (index === -1) {
292
+ index = direction === 'previous' ? matches.length - 1 : 0;
293
+ }
294
+ const [anchor, head] = matches[index] ?? [0, 0];
295
+ view.dispatch({ scrollIntoView: true, selection: { anchor, head } });
296
+ return { count: matches.length, index };
297
+ },
298
+ findEnd: () => {
299
+ closeSearchPanel(view);
300
+ },
301
+ focus: () => view.focus(),
302
+ replace: (query, all) => {
303
+ const asked = ask(query);
304
+ if (!asked.valid) {
305
+ return { count: 0, index: -1 };
306
+ }
307
+ if (all) {
308
+ replaceAll(view);
309
+ }
310
+ else {
311
+ replaceNext(view);
312
+ }
313
+ return standing(view.state, asked);
314
+ },
315
+ select: (from, to) => {
316
+ const length = view.state.doc.length;
317
+ view.dispatch({
318
+ scrollIntoView: true,
319
+ selection: { anchor: Math.min(from, length), head: Math.min(to, length) },
320
+ });
321
+ view.focus();
322
+ },
323
+ update: (next) => {
324
+ const effects = [];
325
+ if (next.lineNumbers !== current.lineNumbers) {
326
+ effects.push(numbers.reconfigure(next.lineNumbers ? [lineNumbers(), highlightActiveLineGutter(), foldGutter()] : []));
327
+ }
328
+ if (next.readOnly !== current.readOnly) {
329
+ effects.push(editable.reconfigure(EditorState.readOnly.of(next.readOnly)));
330
+ }
331
+ if (next.wrap !== current.wrap) {
332
+ effects.push(wrapping.reconfigure(next.wrap ? EditorView.lineWrapping : []));
333
+ }
334
+ if (next.label !== current.label) {
335
+ effects.push(words.reconfigure(EditorView.contentAttributes.of({
336
+ 'aria-label': next.label,
337
+ 'aria-multiline': 'true',
338
+ })));
339
+ }
340
+ if (next.placeholder !== current.placeholder) {
341
+ effects.push(hint.reconfigure(next.placeholder ? placeholder(next.placeholder) : []));
342
+ }
343
+ const doc = view.state.doc.toString();
344
+ view.dispatch({
345
+ annotations: given.of(true),
346
+ ...(next.value === doc
347
+ ? {}
348
+ : { changes: { from: 0, insert: next.value, to: doc.length } }),
349
+ effects,
350
+ });
351
+ if (next.diagnostics !== current.diagnostics || next.value !== doc) {
352
+ view.dispatch(setDiagnostics(view.state, lintOf(next, view.state.doc.length)));
353
+ view.dispatch({
354
+ effects: problems.reconfigure(problemLines(view.state, next.diagnostics)),
355
+ });
356
+ }
357
+ if (next.language !== current.language) {
358
+ load(next.language, view);
359
+ }
360
+ current = next;
361
+ },
362
+ };
363
+ },
364
+ });
365
+ export const connectCodeEditor = (editor, options = {}) => {
366
+ editor.engine = codeMirrorEngine(options);
367
+ return () => {
368
+ editor.engine = undefined;
369
+ };
370
+ };
371
+ //# sourceMappingURL=codemirror-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemirror-engine.js","sourceRoot":"","sources":["../../src/codemirror/codemirror-engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAC3F,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,UAAU,EACV,aAAa,EACb,UAAU,EAEV,cAAc,EACd,kBAAkB,GACnB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAmB,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClE,OAAO,EACL,gBAAgB,EAChB,yBAAyB,EACzB,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,MAAM,EACN,eAAe,EACf,cAAc,GACf,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAkB,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,EACL,aAAa,EACb,UAAU,EACV,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,MAAM,EACN,WAAW,EACX,WAAW,GACZ,MAAM,kBAAkB,CAAA;AAUzB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAUpF,MAAM,SAAS,GAA2B;IACxC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,GAAG,EAAE;IAC7D,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE;IAChE,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,EAAE;IAC1E,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE;IAChE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACxF,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtE,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE;IAClE,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC,IAAI,EAAE;IAC9D,EAAE,EAAE,KAAK,IAAI,EAAE,CACb,cAAc,CAAC,MAAM,CAAC,CAAC,MAAM,MAAM,CAAC,qCAAqC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpF,EAAE,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAC9F,GAAG,EAAE,KAAK,IAAI,EAAE,CACd,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;CAC5F,CAAA;AAGD,MAAM,OAAO,GAA2B;IACtC,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,MAAM;IACX,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,IAAI;IACd,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,IAAI;CACV,CAAA;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAsB,EAAE;IAC/D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACrC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAA;IACjC,OAAO,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAA;AAC/C,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,aAAa,GAAG,GAAa,EAAE,CAC1C,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;AAG7D,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAW,CAAA;AAO1C,MAAM,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IAClC,sCAAsC,EAAE;QACtC,eAAe,EAAE,oEAAoE;KACtF;IACD,aAAa,EAAE;QACb,UAAU,EAAE,4BAA4B;QACxC,YAAY,EAAE,uBAAuB;KACtC;IACD,YAAY,EAAE,EAAE,eAAe,EAAE,4BAA4B,EAAE;IAC/D,kCAAkC,EAAE,EAAE,aAAa,EAAE,wBAAwB,EAAE;IAC/E,qBAAqB,EAAE;QACrB,eAAe,EAAE,mCAAmC;QACpD,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,qCAAqC;KAC7C;IACD,2CAA2C,EAAE;QAC3C,KAAK,EAAE,2BAA2B;QAClC,UAAU,EAAE,8BAA8B;KAC3C;IACD,yCAAyC,EAAE,EAAE,KAAK,EAAE,yBAAyB,EAAE;IAC/E,4CAA4C,EAAE;QAC5C,KAAK,EAAE,4BAA4B;QACnC,UAAU,EAAE,8BAA8B;KAC3C;IACD,aAAa,EAAE;QACb,eAAe,EAAE,aAAa;QAC9B,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,qCAAqC;KAC7C;IACD,mCAAmC,EAAE;QACnC,aAAa,EAAE,KAAK;QACpB,aAAa,EAAE,8CAA8C;KAC9D;IACD,qBAAqB,EAAE;QACrB,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,0CAA0C;KAC3D;IACD,oBAAoB,EAAE;QACpB,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,sDAAsD;KACvE;IACD,uBAAuB,EAAE;QACvB,eAAe,EAAE,MAAM;QACvB,cAAc,EAAE,2CAA2C;KAC5D;IAGD,6CAA6C,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;IAClE,iBAAiB,EAAE,EAAE,KAAK,EAAE,qCAAqC,EAAE;IACnE,cAAc,EAAE;QACd,UAAU,EAAE,SAAS;QACrB,oBAAoB,EAAE,MAAM;QAC5B,UAAU,EAAE,6BAA6B;QACzC,cAAc,EAAE,gDAAgD;QAChE,cAAc,EAAE,MAAM;KACvB;IACD,iBAAiB,EAAE;QACjB,eAAe,EAAE,kEAAkE;KACpF;IACD,0BAA0B,EAAE;QAC1B,eAAe,EAAE,kEAAkE;QACnF,OAAO,EAAE,2DAA2D;KACrE;IACD,+DAA+D,EAAE;QAC/D,eAAe,EAAE,mCAAmC;KACrD;IACD,aAAa,EAAE;QACb,eAAe,EAAE,oCAAoC;QACrD,MAAM,EAAE,0DAA0D;QAClE,YAAY,EAAE,uBAAuB;KACtC;IACD,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,+BAA+B,EAAE,QAAQ,EAAE,SAAS,EAAE;IACvF,4EAA4E,EAAE;QAC5E,eAAe,EAAE,aAAa;KAC/B;IACD,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;CACpC,CAAC,CAAA;AAGF,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAW,CAAA;AAG/E,MAAM,MAAM,GAAG,CAAC,KAA4B,EAAE,MAAc,EAAgB,EAAE,CAC5E,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAC7C,OAAO,EAAE,GAAG,CAAC,OAAO;IACpB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC;IACxC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;CACjD,CAAC,CAAC,CAAA;AAGL,MAAM,WAAY,SAAQ,YAAY;IACpC,YAAqB,IAAmC;QACtD,KAAK,EAAE,CAAA;oBADY,IAAI;QAEvB,IAAI,CAAC,YAAY,GAAG,oBAAoB,IAAI,EAAE,CAAA;IAChD,CAAC;IAEQ,EAAE,CAAC,KAAkB;QAC5B,OAAO,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAA;IACjC,CAAC;CACF;AAGD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAW,CAAA;AAGxD,MAAM,YAAY,GAAG,CACnB,KAAkB,EAClB,WAA4C,EACjC,EAAE;IACb,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyC,CAAA;IAC9D,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;QACrF,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAA;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC;SACrB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;IAC3D,OAAO,eAAe,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAGD,MAAM,OAAO,GAAG,CAAC,KAA0B,EAAe,EAAE,CAC1D,IAAI,WAAW,CAAC;IACd,aAAa,EAAE,KAAK,CAAC,aAAa;IAClC,OAAO,EAAE,CAAC,KAAK,CAAC,KAAK;IACrB,MAAM,EAAE,KAAK,CAAC,KAAK;IACnB,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,MAAM,EAAE,KAAK,CAAC,MAAM;IACpB,SAAS,EAAE,KAAK,CAAC,SAAS;CAC3B,CAAC,CAAA;AAGJ,MAAM,OAAO,GAAG,MAAM,CAAA;AAGtB,MAAM,SAAS,GAAG,CAAC,KAAkB,EAAE,KAAkB,EAA2B,EAAE;IACpF,MAAM,KAAK,GAA4B,EAAE,CAAA;IACzC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACrC,KAAK,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1F,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAGD,MAAM,QAAQ,GAAG,CAAC,KAAkB,EAAE,KAAkB,EAAwB,EAAE;IAChF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACvC,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA;IACzC,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,MAAM;QACrB,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;KACzE,CAAA;AACH,CAAC,CAAA;AAGD,MAAM,WAAW,GAAG,CAAC,IAA2B,EAAQ,EAAE;IACxD,IAAI,OAAO,aAAa,KAAK,UAAU,IAAI,CAAC,CAAC,oBAAoB,IAAI,IAAI,CAAC,EAAE,CAAC;QAC3E,OAAM;IACR,CAAC;IACD,MAAM,MAAM,GAAG,IAA2D,CAAA;IAC1E,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAM;IACR,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,aAAa,EAAE,CAAA;IACjC,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;IAC9B,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAA;IAC7D,MAAM,CAAC,WAAW,GAAG,IAAI,CAAA;AAC3B,CAAC,CAAA;AAcD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAO,GAAsB,EAAE,EAAoB,EAAE,CAAC,CAAC;IACtF,KAAK,CACH,MAAmB,EACnB,KAA4B,EAC5B,SAAoC;QAEpC,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,EAA2B,CAAA;QAC1D,WAAW,CAAC,IAAI,CAAC,CAAA;QACjB,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAA;QAC/B,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAA;QAC9B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAA;QAClC,IAAI,OAAO,GAAG,KAAK,CAAA;QAGnB,IAAI,KAAK,GAAG,EAAE,CAAA;QACd,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,IAAgB,EAAQ,EAAE;YACpD,KAAK,GAAG,IAAI,CAAA;YACZ,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;gBACpD,OAAM;YACR,CAAC;YACD,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACzC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,OAA0B,CAAC,EAAE,CAAC,CAAA;gBAC9E,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC,CAAA;QACD,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC;YAC1B,MAAM;YACN,IAAI;YACJ,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;gBACxB,GAAG,EAAE,KAAK,CAAC,KAAK;gBAChB,UAAU,EAAE;oBACV,OAAO,CAAC,EAAE,CACR,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,yBAAyB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CACpF;oBACD,OAAO,EAAE;oBACT,aAAa,EAAE;oBACf,aAAa,EAAE;oBACf,eAAe,EAAE;oBACjB,WAAW,EAAE;oBACb,mBAAmB,EAAE;oBACrB,yBAAyB,EAAE;oBAG3B,MAAM,CAAC;wBACL,WAAW,EAAE,GAAG,EAAE;4BAChB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;4BACzC,GAAG,CAAC,SAAS,GAAG,eAAe,CAAA;4BAC/B,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAA;wBAC3B,CAAC;qBACF,CAAC;oBACF,QAAQ,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;oBACtF,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC;oBACnB,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;oBACzB,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,aAAa,EAAE,GAAG,aAAa,EAAE,GAAG,UAAU,EAAE,aAAa,CAAC,CAAC;oBAC7E,kBAAkB,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACzD,UAAU;oBACV,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACf,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACpD,QAAQ,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;oBACtD,KAAK,CAAC,EAAE,CACN,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBAC9B,YAAY,EAAE,KAAK,CAAC,KAAK;wBACzB,gBAAgB,EAAE,MAAM;qBACzB,CAAC,CACH;oBACD,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;oBAGhE,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE;wBAC/C,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;4BAC7D,OAAO,WAAW,CAAA;wBACpB,CAAC;wBACD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAA;oBAC3E,CAAC,CAAC;oBACF,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;wBACtC,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;4BAC7C,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA;4BAChD,SAAS,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;wBAC7B,CAAC;oBACH,CAAC,CAAC;oBACF,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;iBAC9B;aACF,CAAC;SACH,CAAC,CAAA;QACF,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;QAC1B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;QAG/E,MAAM,GAAG,GAAG,CAAC,KAA0B,EAAe,EAAE;YACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;YAC5B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjC,eAAe,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACpD,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;QACD,OAAO;YACL,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE;YAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;gBACzB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;gBAChC,CAAC;gBACD,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;gBAC5C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;gBAChC,CAAC;gBACD,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAA;gBAC9C,IAAI,KAAK,GACP,SAAS,KAAK,UAAU;oBACtB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClD,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAA;gBAC3F,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;oBACjB,KAAK,GAAG,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC3D,CAAC;gBACD,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC/C,IAAI,CAAC,QAAQ,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;gBACpE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,CAAA;YACzC,CAAC;YACD,OAAO,EAAE,GAAG,EAAE;gBACZ,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACxB,CAAC;YACD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE;YACzB,OAAO,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;gBACtB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAA;gBACxB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACjB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAA;gBAChC,CAAC;gBACD,IAAI,GAAG,EAAE,CAAC;oBACR,UAAU,CAAC,IAAI,CAAC,CAAA;gBAClB,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,CAAC,CAAA;gBACnB,CAAC;gBACD,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACpC,CAAC;YACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAA;gBACpC,IAAI,CAAC,QAAQ,CAAC;oBACZ,cAAc,EAAE,IAAI;oBACpB,SAAS,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE;iBAC1E,CAAC,CAAA;gBACF,IAAI,CAAC,KAAK,EAAE,CAAA;YACd,CAAC;YACD,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;gBACf,MAAM,OAAO,GAAG,EAAE,CAAA;gBAClB,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC7C,OAAO,CAAC,IAAI,CACV,OAAO,CAAC,WAAW,CACjB,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,yBAAyB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CACnF,CACF,CAAA;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACvC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;gBAC5E,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE,CAAC;oBAC/B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBAC9E,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;oBACjC,OAAO,CAAC,IAAI,CACV,KAAK,CAAC,WAAW,CACf,UAAU,CAAC,iBAAiB,CAAC,EAAE,CAAC;wBAC9B,YAAY,EAAE,IAAI,CAAC,KAAK;wBACxB,gBAAgB,EAAE,MAAM;qBACzB,CAAC,CACH,CACF,CAAA;gBACH,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC7C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACvF,CAAC;gBACD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;gBACrC,IAAI,CAAC,QAAQ,CAAC;oBACZ,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC;oBAC3B,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,GAAG;wBACpB,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;oBACjE,OAAO;iBACR,CAAC,CAAA;gBACF,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;oBACnE,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;oBAC9E,IAAI,CAAC,QAAQ,CAAC;wBACZ,OAAO,EAAE,QAAQ,CAAC,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC1E,CAAC,CAAA;gBACJ,CAAC;gBACD,IAAI,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,EAAE,CAAC;oBACvC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAC3B,CAAC;gBACD,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;SACF,CAAA;IACH,CAAC;CACF,CAAC,CAAA;AAMF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,MAAgD,EAChD,OAAO,GAAsB,EAAE,EACjB,EAAE;IAChB,MAAM,CAAC,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACzC,OAAO,GAAG,EAAE;QACV,MAAM,CAAC,MAAM,GAAG,SAAS,CAAA;IAC3B,CAAC,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './codemirror-engine.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/codemirror/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './codemirror-engine.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codemirror/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export { type CodeMirrorOptions, codeMirrorEngine, connectCodeEditor, languageName, languageNames, } from './codemirror/index.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,GACd,MAAM,uBAAuB,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { codeMirrorEngine, connectCodeEditor, languageName, languageNames, } from './codemirror/index.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,GACd,MAAM,uBAAuB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@fusion.dev/helix-code-editor",
3
+ "description": "Connects the Helix Code Editor to CodeMirror, themed with your tokens: highlighting, line numbers, folding, search, and diagnostics.",
4
+ "version": "0.0.0-dev",
5
+ "license": "MIT",
6
+ "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
+ "repository": {
8
+ "directory": "helix/code-editor",
9
+ "type": "git",
10
+ "url": "git+https://github.com/project-fusion/fusion.git"
11
+ },
12
+ "type": "module",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./package.json": "./package.json"
21
+ },
22
+ "files": [
23
+ "dist"
24
+ ],
25
+ "sideEffects": false,
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.build.json && tsc -p tsconfig.types.json",
28
+ "test": "bun run test:pure && bun run test:dom",
29
+ "test:dom": "bun test dom.spec",
30
+ "test:pure": "bun test pure.spec",
31
+ "typecheck": "tsc -p tsconfig.json --noEmit"
32
+ },
33
+ "bugs": "https://github.com/project-fusion/fusion/issues",
34
+ "dependencies": {
35
+ "@codemirror/commands": "^6.11.1",
36
+ "@codemirror/lang-css": "^6.3.1",
37
+ "@codemirror/lang-html": "^6.4.12",
38
+ "@codemirror/lang-javascript": "^6.2.5",
39
+ "@codemirror/lang-json": "^6.0.2",
40
+ "@codemirror/lang-markdown": "^6.3.4",
41
+ "@codemirror/lang-python": "^6.2.1",
42
+ "@codemirror/lang-rust": "^6.0.2",
43
+ "@codemirror/language": "^6.13.1",
44
+ "@codemirror/legacy-modes": "^6.5.5",
45
+ "@codemirror/lint": "^6.9.7",
46
+ "@codemirror/search": "^6.5.11",
47
+ "@codemirror/state": "^6.7.6",
48
+ "@codemirror/view": "^6.43.14",
49
+ "@fusion.dev/helix-headless": "0.220.0",
50
+ "@fusion.dev/helix-sandbox": "0.220.0"
51
+ },
52
+ "devDependencies": {
53
+ "@fusion.dev/helix-testing": "0.220.0",
54
+ "@types/bun": "^1.4.2"
55
+ },
56
+ "homepage": "https://fusion.dev",
57
+ "keywords": [
58
+ "editor",
59
+ "codemirror",
60
+ "code",
61
+ "syntax-highlighting"
62
+ ],
63
+ "publishConfig": {
64
+ "access": "restricted"
65
+ }
66
+ }