@kroy665/code-editor-engine 1.0.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 (39) hide show
  1. package/README.md +127 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/__tests__/editor.spec.d.ts +2 -0
  4. package/dist/__tests__/editor.spec.d.ts.map +1 -0
  5. package/dist/__tests__/editor.spec.js +141 -0
  6. package/dist/__tests__/editor.spec.js.map +1 -0
  7. package/dist/core/CodeEditor.d.ts +70 -0
  8. package/dist/core/CodeEditor.d.ts.map +1 -0
  9. package/dist/core/CodeEditor.js +392 -0
  10. package/dist/core/CodeEditor.js.map +1 -0
  11. package/dist/core/CommandSystem.d.ts +158 -0
  12. package/dist/core/CommandSystem.d.ts.map +1 -0
  13. package/dist/core/CommandSystem.js +358 -0
  14. package/dist/core/CommandSystem.js.map +1 -0
  15. package/dist/core/EventSystem.d.ts +87 -0
  16. package/dist/core/EventSystem.d.ts.map +1 -0
  17. package/dist/core/EventSystem.js +330 -0
  18. package/dist/core/EventSystem.js.map +1 -0
  19. package/dist/core/TextDocument.d.ts +110 -0
  20. package/dist/core/TextDocument.d.ts.map +1 -0
  21. package/dist/core/TextDocument.js +340 -0
  22. package/dist/core/TextDocument.js.map +1 -0
  23. package/dist/index.d.ts +178 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +302 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/language/Extensions.d.ts +280 -0
  28. package/dist/language/Extensions.d.ts.map +1 -0
  29. package/dist/language/Extensions.js +368 -0
  30. package/dist/language/Extensions.js.map +1 -0
  31. package/dist/language/Tokenizer.d.ts +108 -0
  32. package/dist/language/Tokenizer.d.ts.map +1 -0
  33. package/dist/language/Tokenizer.js +630 -0
  34. package/dist/language/Tokenizer.js.map +1 -0
  35. package/dist/types/core.d.ts +355 -0
  36. package/dist/types/core.d.ts.map +1 -0
  37. package/dist/types/core.js +93 -0
  38. package/dist/types/core.js.map +1 -0
  39. package/package.json +82 -0
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExtensibleEditor = exports.BuiltInExtensions = exports.ExtensionLoader = exports.ExtensionHost = exports.ActivationEvent = void 0;
4
+ const EventSystem_1 = require("../core/EventSystem");
5
+ const CodeEditor_1 = require("../core/CodeEditor");
6
+ /**
7
+ * Extension activation events
8
+ */
9
+ var ActivationEvent;
10
+ (function (ActivationEvent) {
11
+ ActivationEvent["OnStartup"] = "onStartup";
12
+ ActivationEvent["OnLanguage"] = "onLanguage";
13
+ ActivationEvent["OnCommand"] = "onCommand";
14
+ ActivationEvent["OnFileSystem"] = "onFileSystem";
15
+ ActivationEvent["OnDebug"] = "onDebug";
16
+ ActivationEvent["OnView"] = "onView";
17
+ })(ActivationEvent || (exports.ActivationEvent = ActivationEvent = {}));
18
+ /**
19
+ * Extension state storage
20
+ */
21
+ class ExtensionMemento {
22
+ constructor() {
23
+ this.storage = new Map();
24
+ }
25
+ get(key, defaultValue) {
26
+ const value = this.storage.get(key);
27
+ return value !== undefined ? value : defaultValue;
28
+ }
29
+ async update(key, value) {
30
+ if (value === undefined) {
31
+ this.storage.delete(key);
32
+ }
33
+ else {
34
+ this.storage.set(key, value);
35
+ }
36
+ }
37
+ keys() {
38
+ return Array.from(this.storage.keys());
39
+ }
40
+ clear() {
41
+ this.storage.clear();
42
+ }
43
+ }
44
+ /**
45
+ * Extension context implementation
46
+ */
47
+ class ExtensionContextImpl {
48
+ constructor(extensionId, editor) {
49
+ this.extensionId = extensionId;
50
+ this.editor = editor;
51
+ this.disposables = new EventSystem_1.CompositeDisposable();
52
+ this.globalState = new ExtensionMemento();
53
+ this.workspaceState = new ExtensionMemento();
54
+ }
55
+ registerCommand(_commandId, command) {
56
+ const disposable = this.editor.registerCommand(command);
57
+ this.disposables.add(disposable);
58
+ return disposable;
59
+ }
60
+ registerLanguageService(service) {
61
+ const disposable = this.editor.registerLanguageService(service);
62
+ this.disposables.add(disposable);
63
+ return disposable;
64
+ }
65
+ registerTextDocumentProvider(_scheme, _provider) {
66
+ // In a full implementation, this would register with a document provider registry
67
+ const disposable = new EventSystem_1.DisposableImpl(() => {
68
+ // Cleanup provider registration
69
+ });
70
+ this.disposables.add(disposable);
71
+ return disposable;
72
+ }
73
+ dispose() {
74
+ this.disposables.dispose();
75
+ }
76
+ }
77
+ /**
78
+ * Extension host for managing extension lifecycle
79
+ */
80
+ class ExtensionHost extends EventSystem_1.TypedEventEmitter {
81
+ constructor(editor) {
82
+ super();
83
+ this.editor = editor;
84
+ this.extensions = new Map();
85
+ this.contexts = new Map();
86
+ this.activatedExtensions = new Set();
87
+ this.disposables = new EventSystem_1.CompositeDisposable();
88
+ }
89
+ /**
90
+ * Register an extension
91
+ */
92
+ async registerExtension(extension) {
93
+ if (this.extensions.has(extension.id)) {
94
+ throw new Error(`Extension with id '${extension.id}' is already registered`);
95
+ }
96
+ this.extensions.set(extension.id, extension);
97
+ // Create extension context
98
+ const context = new ExtensionContextImpl(extension.id, this.editor);
99
+ this.contexts.set(extension.id, context);
100
+ // Auto-activate if no activation events specified
101
+ if (!extension.activationEvents || extension.activationEvents.length === 0) {
102
+ await this.activateExtension(extension.id);
103
+ }
104
+ }
105
+ /**
106
+ * Activate an extension
107
+ */
108
+ async activateExtension(extensionId) {
109
+ if (this.activatedExtensions.has(extensionId)) {
110
+ return; // Already activated
111
+ }
112
+ const extension = this.extensions.get(extensionId);
113
+ if (!extension) {
114
+ throw new Error(`Extension '${extensionId}' not found`);
115
+ }
116
+ const context = this.contexts.get(extensionId);
117
+ if (!context) {
118
+ throw new Error(`Context for extension '${extensionId}' not found`);
119
+ }
120
+ try {
121
+ await extension.activate(context);
122
+ this.activatedExtensions.add(extensionId);
123
+ this.emit('extension-activated', { extension });
124
+ }
125
+ catch (error) {
126
+ this.emit('extension-error', { extension, error: error });
127
+ throw error;
128
+ }
129
+ }
130
+ /**
131
+ * Deactivate an extension
132
+ */
133
+ async deactivateExtension(extensionId) {
134
+ if (!this.activatedExtensions.has(extensionId)) {
135
+ return; // Not activated
136
+ }
137
+ const extension = this.extensions.get(extensionId);
138
+ if (!extension) {
139
+ return;
140
+ }
141
+ const context = this.contexts.get(extensionId);
142
+ if (context) {
143
+ context.dispose();
144
+ }
145
+ try {
146
+ if (extension.deactivate) {
147
+ await extension.deactivate();
148
+ }
149
+ this.activatedExtensions.delete(extensionId);
150
+ this.emit('extension-deactivated', { extension });
151
+ }
152
+ catch (error) {
153
+ this.emit('extension-error', { extension, error: error });
154
+ throw error;
155
+ }
156
+ }
157
+ /**
158
+ * Get an extension by ID
159
+ */
160
+ getExtension(extensionId) {
161
+ return this.extensions.get(extensionId);
162
+ }
163
+ /**
164
+ * Get all registered extensions
165
+ */
166
+ getAllExtensions() {
167
+ return Array.from(this.extensions.values());
168
+ }
169
+ /**
170
+ * Get all activated extensions
171
+ */
172
+ getActivatedExtensions() {
173
+ return Array.from(this.activatedExtensions)
174
+ .map((id) => this.extensions.get(id))
175
+ .filter((ext) => ext !== undefined);
176
+ }
177
+ /**
178
+ * Check if an extension is activated
179
+ */
180
+ isActivated(extensionId) {
181
+ return this.activatedExtensions.has(extensionId);
182
+ }
183
+ /**
184
+ * Activate extensions based on event
185
+ */
186
+ async activateByEvent(event) {
187
+ const toActivate = [];
188
+ for (const [id, extension] of this.extensions) {
189
+ if (this.activatedExtensions.has(id)) {
190
+ continue; // Already activated
191
+ }
192
+ if (extension.activationEvents?.includes(event)) {
193
+ toActivate.push(id);
194
+ }
195
+ }
196
+ // Activate extensions in parallel
197
+ await Promise.allSettled(toActivate.map((id) => this.activateExtension(id)));
198
+ }
199
+ /**
200
+ * Dispose the extension host
201
+ */
202
+ dispose() {
203
+ // Deactivate all extensions
204
+ const activatedIds = Array.from(this.activatedExtensions);
205
+ for (const id of activatedIds) {
206
+ try {
207
+ this.deactivateExtension(id);
208
+ }
209
+ catch (error) {
210
+ console.error(`Error deactivating extension ${id}:`, error);
211
+ }
212
+ }
213
+ this.disposables.dispose();
214
+ super.dispose();
215
+ }
216
+ }
217
+ exports.ExtensionHost = ExtensionHost;
218
+ /**
219
+ * Extension loader for loading extensions from manifests
220
+ */
221
+ class ExtensionLoader {
222
+ constructor(extensionHost) {
223
+ this.extensionHost = extensionHost;
224
+ } // eslint-disable-line @typescript-eslint/no-unused-vars
225
+ /**
226
+ * Load extension from manifest
227
+ */
228
+ async loadFromManifest(manifest, extensionCode) {
229
+ // Validate manifest
230
+ this.validateManifest(manifest);
231
+ // Enhance extension with manifest data
232
+ const enhancedExtension = {
233
+ ...extensionCode,
234
+ id: manifest.id,
235
+ name: manifest.name,
236
+ version: manifest.version,
237
+ ...(manifest.description && { description: manifest.description }),
238
+ ...(manifest.activationEvents && { activationEvents: manifest.activationEvents }),
239
+ };
240
+ // Register with extension host
241
+ await this.extensionHost.registerExtension(enhancedExtension);
242
+ }
243
+ /**
244
+ * Load multiple extensions
245
+ */
246
+ async loadExtensions(extensions) {
247
+ // Sort by dependencies (simplified - in production you'd need proper dependency resolution)
248
+ const sorted = this.sortByDependencies(extensions);
249
+ for (const { manifest, code } of sorted) {
250
+ try {
251
+ await this.loadFromManifest(manifest, code);
252
+ }
253
+ catch (error) {
254
+ console.error(`Failed to load extension ${manifest.id}:`, error);
255
+ }
256
+ }
257
+ }
258
+ validateManifest(manifest) {
259
+ if (!manifest.id) {
260
+ throw new Error('Extension manifest must have an id');
261
+ }
262
+ if (!manifest.name) {
263
+ throw new Error('Extension manifest must have a name');
264
+ }
265
+ if (!manifest.version) {
266
+ throw new Error('Extension manifest must have a version');
267
+ }
268
+ // Validate semver
269
+ if (!/^\d+\.\d+\.\d+/.test(manifest.version)) {
270
+ throw new Error('Extension version must be a valid semver');
271
+ }
272
+ }
273
+ sortByDependencies(extensions) {
274
+ // Simplified dependency sorting - in production you'd implement proper topological sort
275
+ return extensions.sort((a, b) => {
276
+ const aDeps = Object.keys(a.manifest.dependencies || {}).length;
277
+ const bDeps = Object.keys(b.manifest.dependencies || {}).length;
278
+ return aDeps - bDeps;
279
+ });
280
+ }
281
+ }
282
+ exports.ExtensionLoader = ExtensionLoader;
283
+ /**
284
+ * Built-in extensions
285
+ */
286
+ class BuiltInExtensions {
287
+ /**
288
+ * Create a basic language support extension
289
+ */
290
+ static createLanguageExtension(languageId, languageName, languageService) {
291
+ return {
292
+ id: `builtin.${languageId}`,
293
+ name: `${languageName} Language Support`,
294
+ version: '1.0.0',
295
+ description: `Built-in ${languageName} language support`,
296
+ activationEvents: [`onLanguage:${languageId}`],
297
+ async activate(context) {
298
+ context.registerLanguageService(languageService);
299
+ },
300
+ };
301
+ }
302
+ /**
303
+ * Create a basic commands extension
304
+ */
305
+ static createCommandsExtension(commands) {
306
+ return {
307
+ id: 'builtin.commands',
308
+ name: 'Built-in Commands',
309
+ version: '1.0.0',
310
+ description: 'Essential editor commands',
311
+ async activate(context) {
312
+ for (const command of commands) {
313
+ context.registerCommand(command.id, command);
314
+ }
315
+ },
316
+ };
317
+ }
318
+ /**
319
+ * Create a basic themes extension
320
+ */
321
+ static createThemesExtension() {
322
+ return {
323
+ id: 'builtin.themes',
324
+ name: 'Built-in Themes',
325
+ version: '1.0.0',
326
+ description: 'Default editor themes',
327
+ async activate(_context) {
328
+ // In a full implementation, this would register theme providers
329
+ console.log('Themes extension activated');
330
+ },
331
+ };
332
+ }
333
+ }
334
+ exports.BuiltInExtensions = BuiltInExtensions;
335
+ /**
336
+ * Factory for creating extension-enabled editors
337
+ */
338
+ class ExtensibleEditor {
339
+ static create(options = {}) {
340
+ const editor = new CodeEditor_1.CodeEditorEngine(options.editorOptions);
341
+ const extensionHost = new ExtensionHost(editor);
342
+ // Load built-in extensions if requested
343
+ if (options.builtInExtensions !== false) {
344
+ ExtensibleEditor.loadBuiltInExtensions(extensionHost);
345
+ }
346
+ // Load provided extensions
347
+ if (options.extensions) {
348
+ for (const extension of options.extensions) {
349
+ extensionHost.registerExtension(extension);
350
+ }
351
+ }
352
+ return { editor, extensionHost };
353
+ }
354
+ static async loadBuiltInExtensions(extensionHost) {
355
+ // Load built-in language extensions
356
+ const { TokenizerLanguageService } = require('./Tokenizer');
357
+ const jsExtension = BuiltInExtensions.createLanguageExtension('javascript', 'JavaScript', new TokenizerLanguageService('javascript'));
358
+ const tsExtension = BuiltInExtensions.createLanguageExtension('typescript', 'TypeScript', new TokenizerLanguageService('typescript'));
359
+ const pyExtension = BuiltInExtensions.createLanguageExtension('python', 'Python', new TokenizerLanguageService('python'));
360
+ await extensionHost.registerExtension(jsExtension);
361
+ await extensionHost.registerExtension(tsExtension);
362
+ await extensionHost.registerExtension(pyExtension);
363
+ // Activate language extensions
364
+ await extensionHost.activateByEvent('onStartup');
365
+ }
366
+ }
367
+ exports.ExtensibleEditor = ExtensibleEditor;
368
+ //# sourceMappingURL=Extensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Extensions.js","sourceRoot":"","sources":["../../src/language/Extensions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import { Token, TokenType, Range, TextDocument, LanguageService } from '../types/core';
2
+ /**
3
+ * Token with additional metadata for highlighting
4
+ */
5
+ export interface EnhancedToken extends Token {
6
+ readonly priority: number;
7
+ readonly scopes: string[];
8
+ }
9
+ /**
10
+ * Tokenization rule
11
+ */
12
+ export interface TokenRule {
13
+ readonly pattern: RegExp;
14
+ readonly type: TokenType;
15
+ readonly priority?: number;
16
+ readonly scopes?: string[];
17
+ readonly push?: string;
18
+ readonly pop?: boolean;
19
+ readonly set?: string;
20
+ }
21
+ /**
22
+ * Language tokenization definition
23
+ */
24
+ export interface LanguageDefinition {
25
+ readonly languageId: string;
26
+ readonly name: string;
27
+ readonly extensions: string[];
28
+ readonly states: Record<string, TokenRule[]>;
29
+ readonly defaultState: string;
30
+ readonly brackets?: BracketDefinition[];
31
+ readonly comments?: CommentDefinition;
32
+ readonly strings?: StringDefinition[];
33
+ readonly keywords?: string[];
34
+ readonly builtins?: string[];
35
+ readonly operators?: string[];
36
+ }
37
+ export interface BracketDefinition {
38
+ readonly open: string;
39
+ readonly close: string;
40
+ readonly type?: 'round' | 'square' | 'curly' | 'angle';
41
+ }
42
+ export interface CommentDefinition {
43
+ readonly line?: string;
44
+ readonly block?: {
45
+ start: string;
46
+ end: string;
47
+ };
48
+ }
49
+ export interface StringDefinition {
50
+ readonly delimiter: string;
51
+ readonly escape?: string;
52
+ readonly multiline?: boolean;
53
+ readonly raw?: boolean;
54
+ }
55
+ /**
56
+ * Fast, incremental tokenizer
57
+ */
58
+ export declare class Tokenizer {
59
+ private readonly languageDefinitions;
60
+ private readonly tokenCache;
61
+ private readonly stateStack;
62
+ /**
63
+ * Register a language definition
64
+ */
65
+ registerLanguage(definition: LanguageDefinition): void;
66
+ /**
67
+ * Get language definition
68
+ */
69
+ getLanguage(languageId: string): LanguageDefinition | undefined;
70
+ /**
71
+ * Tokenize a document
72
+ */
73
+ tokenize(document: TextDocument, range?: Range): EnhancedToken[];
74
+ /**
75
+ * Tokenize incrementally after a change
76
+ */
77
+ tokenizeIncremental(document: TextDocument, _previousTokens: EnhancedToken[], _change: {
78
+ range: Range;
79
+ text: string;
80
+ }): EnhancedToken[];
81
+ private tokenizeWithLanguage;
82
+ private tokenizeLine;
83
+ private resolveTokenType;
84
+ private getTokenModifiers;
85
+ private tokenizeAsPlainText;
86
+ private getCacheKey;
87
+ private clearCacheForLanguage;
88
+ private clearCacheForDocument;
89
+ }
90
+ /**
91
+ * Built-in language definitions
92
+ */
93
+ export declare class BuiltInLanguages {
94
+ static javascript(): LanguageDefinition;
95
+ static typescript(): LanguageDefinition;
96
+ static python(): LanguageDefinition;
97
+ }
98
+ /**
99
+ * Language service that provides tokenization
100
+ */
101
+ export declare class TokenizerLanguageService implements LanguageService {
102
+ readonly languageId: string;
103
+ private tokenizer;
104
+ constructor(languageId: string);
105
+ tokenize(document: TextDocument, range?: Range): Promise<Token[]>;
106
+ registerLanguage(definition: LanguageDefinition): void;
107
+ }
108
+ //# sourceMappingURL=Tokenizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tokenizer.d.ts","sourceRoot":"","sources":["../../src/language/Tokenizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,KAAK;IACxC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACtC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAC;CAC1D;AAED,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACnD;AAED,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;CAC1B;AAYD;;GAEG;AACH,qBAAa,SAAS;IAClB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAyC;IAC7E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAsC;IACjE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;IAEnD;;OAEG;IACH,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;IAOtD;;OAEG;IACH,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAI/D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,aAAa,EAAE;IAkBhE;;OAEG;IACH,mBAAmB,CACf,QAAQ,EAAE,YAAY,EACtB,eAAe,EAAE,aAAa,EAAE,EAChC,OAAO,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACxC,aAAa,EAAE;IAOlB,OAAO,CAAC,oBAAoB;IA6B5B,OAAO,CAAC,YAAY;IA0FpB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,iBAAiB;IAuBzB,OAAO,CAAC,mBAAmB;IAoB3B,OAAO,CAAC,WAAW;IAOnB,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,qBAAqB;CAOhC;AAED;;GAEG;AACH,qBAAa,gBAAgB;IACzB,MAAM,CAAC,UAAU,IAAI,kBAAkB;IAoKvC,MAAM,CAAC,UAAU,IAAI,kBAAkB;IAiCvC,MAAM,CAAC,MAAM,IAAI,kBAAkB;CA6MtC;AAED;;GAEG;AACH,qBAAa,wBAAyB,YAAW,eAAe;aAGhC,UAAU,EAAE,MAAM;IAF9C,OAAO,CAAC,SAAS,CAAmB;gBAER,UAAU,EAAE,MAAM;IAOxC,QAAQ,CAAC,QAAQ,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAIvE,gBAAgB,CAAC,UAAU,EAAE,kBAAkB,GAAG,IAAI;CAGzD"}