@aiao/code-editor-angular 0.0.20 → 0.0.22
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/README.md
CHANGED
|
@@ -1,33 +1,32 @@
|
|
|
1
1
|
# @aiao/code-editor-angular
|
|
2
2
|
|
|
3
|
-
Angular
|
|
4
|
-
|
|
5
|
-
## 功能特性
|
|
6
|
-
|
|
7
|
-
- **Angular 组件**: 开箱即用的 Angular 组件
|
|
8
|
-
- **双向绑定**: 支持 ngModel 双向绑定
|
|
9
|
-
- **主题支持**: 支持亮色和暗色主题
|
|
3
|
+
基于 CodeMirror 6 的 standalone Angular 代码编辑器,支持 Angular Forms、动态语言、主题与编辑状态配置。
|
|
10
4
|
|
|
11
5
|
## 安装
|
|
12
6
|
|
|
13
7
|
```bash
|
|
14
|
-
npm install @aiao/code-editor @aiao/code-editor-angular
|
|
15
|
-
# 或
|
|
16
8
|
pnpm add @aiao/code-editor @aiao/code-editor-angular
|
|
17
9
|
```
|
|
18
10
|
|
|
19
11
|
## 使用
|
|
20
12
|
|
|
21
|
-
```
|
|
22
|
-
import {
|
|
23
|
-
|
|
24
|
-
@
|
|
25
|
-
|
|
13
|
+
```ts
|
|
14
|
+
import { Component } from '@angular/core';
|
|
15
|
+
import { FormsModule } from '@angular/forms';
|
|
16
|
+
import { CodeEditor } from '@aiao/code-editor-angular';
|
|
17
|
+
|
|
18
|
+
@Component({
|
|
19
|
+
selector: 'app-root',
|
|
20
|
+
imports: [FormsModule, CodeEditor],
|
|
21
|
+
template: `
|
|
22
|
+
<ao-code-editor [(ngModel)]="code" (aoChange)="onCodeChange($event)" language="typescript" theme="dark" />
|
|
23
|
+
`
|
|
26
24
|
})
|
|
27
|
-
export class
|
|
28
|
-
|
|
25
|
+
export class AppComponent {
|
|
26
|
+
code = '';
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
onCodeChange(value: string): void {
|
|
29
|
+
console.log(value);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
32
|
```
|
|
33
|
-
|
|
@@ -10,12 +10,6 @@ import { oneDark } from '@codemirror/theme-one-dark';
|
|
|
10
10
|
import { EditorView, placeholder, keymap, highlightWhitespace } from '@codemirror/view';
|
|
11
11
|
import { basicSetup, minimalSetup } from 'codemirror';
|
|
12
12
|
|
|
13
|
-
/**
|
|
14
|
-
* @file
|
|
15
|
-
* @aiao/code-editor-angular
|
|
16
|
-
*
|
|
17
|
-
* Angular CodeMirror 代码编辑器组件实现
|
|
18
|
-
*/
|
|
19
13
|
/**
|
|
20
14
|
* Annotation to mark external changes that should not trigger onChange
|
|
21
15
|
*/
|
|
@@ -41,6 +35,8 @@ class CodeEditor {
|
|
|
41
35
|
* https://codemirror.net/docs/ref/#view.EditorView
|
|
42
36
|
*/
|
|
43
37
|
#view;
|
|
38
|
+
#pendingValue;
|
|
39
|
+
#languageRequest = 0;
|
|
44
40
|
#elementRef = inject(ElementRef);
|
|
45
41
|
#platformId = inject(PLATFORM_ID);
|
|
46
42
|
#isBrowser = isPlatformBrowser(this.#platformId);
|
|
@@ -64,42 +60,51 @@ class CodeEditor {
|
|
|
64
60
|
}
|
|
65
61
|
});
|
|
66
62
|
// Input properties
|
|
67
|
-
autoFocus = input(false, ...(ngDevMode ?
|
|
68
|
-
disabled = input(false, ...(ngDevMode ?
|
|
63
|
+
autoFocus = input(false, { ...(ngDevMode ? { debugName: "autoFocus" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
64
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
69
65
|
highlightWhitespace = input(false, { ...(ngDevMode ? { debugName: "highlightWhitespace" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
70
|
-
indentUnit = input('',
|
|
66
|
+
indentUnit = input('', /* @ts-ignore */
|
|
67
|
+
...(ngDevMode ? [{ debugName: "indentUnit" }] : /* istanbul ignore next */ []));
|
|
71
68
|
indentWithTab = input(false, { ...(ngDevMode ? { debugName: "indentWithTab" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
72
|
-
language = input('',
|
|
73
|
-
|
|
69
|
+
language = input('', /* @ts-ignore */
|
|
70
|
+
...(ngDevMode ? [{ debugName: "language" }] : /* istanbul ignore next */ []));
|
|
71
|
+
languages = input(SUPPORT_LANGUAGES, /* @ts-ignore */
|
|
72
|
+
...(ngDevMode ? [{ debugName: "languages" }] : /* istanbul ignore next */ []));
|
|
74
73
|
lineWrapping = input(false, { ...(ngDevMode ? { debugName: "lineWrapping" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
75
|
-
placeholder = input('',
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
placeholder = input('', /* @ts-ignore */
|
|
75
|
+
...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
|
|
76
|
+
readonly = input(false, { ...(ngDevMode ? { debugName: "readonly" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
77
|
+
root = input(/* @ts-ignore */
|
|
78
|
+
...(ngDevMode ? [undefined, { debugName: "root" }] : /* istanbul ignore next */ []));
|
|
79
|
+
setup = input('basic', /* @ts-ignore */
|
|
80
|
+
...(ngDevMode ? [{ debugName: "setup" }] : /* istanbul ignore next */ []));
|
|
81
|
+
theme = input('light', /* @ts-ignore */
|
|
82
|
+
...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
83
|
+
value = input('', /* @ts-ignore */
|
|
84
|
+
...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
81
85
|
// Output events
|
|
82
86
|
aoFocus = output();
|
|
83
87
|
aoChange = output();
|
|
84
88
|
aoBlur = output();
|
|
85
89
|
// Linked signal for disabled state
|
|
86
|
-
useDisabled = linkedSignal(() => this.disabled(),
|
|
90
|
+
useDisabled = linkedSignal(() => this.disabled(), /* @ts-ignore */
|
|
91
|
+
...(ngDevMode ? [{ debugName: "useDisabled" }] : /* istanbul ignore next */ []));
|
|
87
92
|
onChange;
|
|
88
93
|
onTouched;
|
|
89
94
|
ngOnInit() {
|
|
90
95
|
if (!this.#isBrowser)
|
|
91
96
|
return;
|
|
92
97
|
const extensions = this._get_all_extensions();
|
|
93
|
-
const state = EditorState.create({ doc: this.value(), extensions });
|
|
98
|
+
const state = EditorState.create({ doc: this.#pendingValue ?? this.value(), extensions });
|
|
94
99
|
this.#view = new EditorView({
|
|
95
100
|
parent: this.#elementRef.nativeElement,
|
|
101
|
+
root: this.root(),
|
|
96
102
|
state
|
|
97
103
|
});
|
|
98
104
|
if (this.autoFocus()) {
|
|
99
105
|
this.#view.focus();
|
|
100
106
|
}
|
|
101
107
|
this.#view.contentDOM.addEventListener('focus', () => {
|
|
102
|
-
this.onTouched?.();
|
|
103
108
|
this.aoFocus.emit();
|
|
104
109
|
});
|
|
105
110
|
this.#view.contentDOM.addEventListener('blur', () => {
|
|
@@ -119,7 +124,7 @@ class CodeEditor {
|
|
|
119
124
|
if (!this.#view)
|
|
120
125
|
return;
|
|
121
126
|
if (changes['value']) {
|
|
122
|
-
this.setValue(this.value());
|
|
127
|
+
this.setValue(this.value(), true);
|
|
123
128
|
}
|
|
124
129
|
if (changes['disabled'] || changes['readonly']) {
|
|
125
130
|
this.#syncAccessState();
|
|
@@ -142,10 +147,7 @@ class CodeEditor {
|
|
|
142
147
|
if (changes['highlightWhitespace']) {
|
|
143
148
|
this.setHighlightWhitespace(this.highlightWhitespace());
|
|
144
149
|
}
|
|
145
|
-
if (changes['language']) {
|
|
146
|
-
this.setLanguage(this.language());
|
|
147
|
-
}
|
|
148
|
-
if (changes['languages']) {
|
|
150
|
+
if (changes['language'] || changes['languages']) {
|
|
149
151
|
this.setLanguage(this.language());
|
|
150
152
|
}
|
|
151
153
|
if (changes['setup']) {
|
|
@@ -153,12 +155,18 @@ class CodeEditor {
|
|
|
153
155
|
}
|
|
154
156
|
}
|
|
155
157
|
ngOnDestroy() {
|
|
156
|
-
this.#
|
|
158
|
+
this.#languageRequest += 1;
|
|
159
|
+
const view = this.#view;
|
|
160
|
+
this.#view = undefined;
|
|
161
|
+
view?.destroy();
|
|
157
162
|
}
|
|
158
163
|
writeValue(value) {
|
|
159
|
-
|
|
160
|
-
|
|
164
|
+
const normalized = value ?? '';
|
|
165
|
+
if (!this.#view) {
|
|
166
|
+
this.#pendingValue = normalized;
|
|
167
|
+
return;
|
|
161
168
|
}
|
|
169
|
+
this.setValue(normalized, true);
|
|
162
170
|
}
|
|
163
171
|
registerOnChange(fn) {
|
|
164
172
|
this.onChange = fn;
|
|
@@ -174,8 +182,11 @@ class CodeEditor {
|
|
|
174
182
|
this._dispatch_effects(StateEffect.reconfigure.of(value));
|
|
175
183
|
}
|
|
176
184
|
setValue(value, external = false) {
|
|
177
|
-
this.#view
|
|
178
|
-
|
|
185
|
+
const view = this.#view;
|
|
186
|
+
if (!view || view.state.doc.toString() === value)
|
|
187
|
+
return;
|
|
188
|
+
view.dispatch({
|
|
189
|
+
changes: { from: 0, to: view.state.doc.length, insert: value },
|
|
179
190
|
annotations: external ? External.of(true) : undefined
|
|
180
191
|
});
|
|
181
192
|
}
|
|
@@ -204,25 +215,29 @@ class CodeEditor {
|
|
|
204
215
|
this._dispatch_effects(this.#highlightWhitespaceConf.reconfigure(value ? highlightWhitespace() : []));
|
|
205
216
|
}
|
|
206
217
|
setLanguage(lang) {
|
|
207
|
-
|
|
208
|
-
|
|
218
|
+
const request = ++this.#languageRequest;
|
|
219
|
+
const view = this.#view;
|
|
220
|
+
if (!view)
|
|
209
221
|
return;
|
|
210
|
-
}
|
|
211
222
|
const languages = this.languages();
|
|
212
|
-
if (languages.length === 0) {
|
|
213
|
-
|
|
223
|
+
if (!lang || lang === 'plaintext' || languages.length === 0) {
|
|
224
|
+
view.dispatch({ effects: this.#languageConf.reconfigure([]) });
|
|
214
225
|
return;
|
|
215
226
|
}
|
|
216
227
|
const langDesc = this._find_language(lang);
|
|
217
228
|
if (!langDesc) {
|
|
218
|
-
|
|
229
|
+
view.dispatch({ effects: this.#languageConf.reconfigure([]) });
|
|
219
230
|
return;
|
|
220
231
|
}
|
|
221
232
|
void langDesc.load().then(languageSupport => {
|
|
222
|
-
|
|
233
|
+
if (request !== this.#languageRequest || this.#view !== view)
|
|
234
|
+
return;
|
|
235
|
+
view.dispatch({ effects: this.#languageConf.reconfigure(languageSupport.extension) });
|
|
223
236
|
}, error => {
|
|
237
|
+
if (request !== this.#languageRequest || this.#view !== view)
|
|
238
|
+
return;
|
|
224
239
|
console.error(`[code-editor-angular] Failed to load language "${lang}":`, error);
|
|
225
|
-
|
|
240
|
+
view.dispatch({ effects: this.#languageConf.reconfigure([]) });
|
|
226
241
|
});
|
|
227
242
|
}
|
|
228
243
|
_get_all_extensions() {
|
|
@@ -265,16 +280,16 @@ class CodeEditor {
|
|
|
265
280
|
this.setReadonly(readonly || disabled);
|
|
266
281
|
this.setEditable(!readonly && !disabled);
|
|
267
282
|
}
|
|
268
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
269
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "
|
|
283
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CodeEditor, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
284
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.5", type: CodeEditor, isStandalone: true, selector: "ao-code-editor", inputs: { autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, highlightWhitespace: { classPropertyName: "highlightWhitespace", publicName: "highlightWhitespace", isSignal: true, isRequired: false, transformFunction: null }, indentUnit: { classPropertyName: "indentUnit", publicName: "indentUnit", isSignal: true, isRequired: false, transformFunction: null }, indentWithTab: { classPropertyName: "indentWithTab", publicName: "indentWithTab", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, languages: { classPropertyName: "languages", publicName: "languages", isSignal: true, isRequired: false, transformFunction: null }, lineWrapping: { classPropertyName: "lineWrapping", publicName: "lineWrapping", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, root: { classPropertyName: "root", publicName: "root", isSignal: true, isRequired: false, transformFunction: null }, setup: { classPropertyName: "setup", publicName: "setup", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { aoFocus: "aoFocus", aoChange: "aoChange", aoBlur: "aoBlur" }, providers: [
|
|
270
285
|
{
|
|
271
286
|
provide: NG_VALUE_ACCESSOR,
|
|
272
287
|
useExisting: forwardRef(() => CodeEditor),
|
|
273
288
|
multi: true
|
|
274
289
|
}
|
|
275
|
-
], usesOnChanges: true, ngImport: i0, template: ``, isInline: true, styles: [":host{display:block;height:100%}:host ::ng-deep .cm-editor{height:100%}:host ::ng-deep .cm-focused{outline:
|
|
290
|
+
], usesOnChanges: true, ngImport: i0, template: ``, isInline: true, styles: [":host{display:block;height:100%}:host ::ng-deep .cm-editor{height:100%}:host ::ng-deep .cm-editor.cm-focused{outline:2px solid Highlight;outline-offset:-2px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
276
291
|
}
|
|
277
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
292
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImport: i0, type: CodeEditor, decorators: [{
|
|
278
293
|
type: Component,
|
|
279
294
|
args: [{ selector: 'ao-code-editor', template: ``, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
280
295
|
{
|
|
@@ -282,7 +297,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.12", ngImpo
|
|
|
282
297
|
useExisting: forwardRef(() => CodeEditor),
|
|
283
298
|
multi: true
|
|
284
299
|
}
|
|
285
|
-
], styles: [":host{display:block;height:100%}:host ::ng-deep .cm-editor{height:100%}:host ::ng-deep .cm-focused{outline:
|
|
300
|
+
], styles: [":host{display:block;height:100%}:host ::ng-deep .cm-editor{height:100%}:host ::ng-deep .cm-editor.cm-focused{outline:2px solid Highlight;outline-offset:-2px}\n"] }]
|
|
286
301
|
}], propDecorators: { autoFocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autoFocus", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], highlightWhitespace: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightWhitespace", required: false }] }], indentUnit: [{ type: i0.Input, args: [{ isSignal: true, alias: "indentUnit", required: false }] }], indentWithTab: [{ type: i0.Input, args: [{ isSignal: true, alias: "indentWithTab", required: false }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], languages: [{ type: i0.Input, args: [{ isSignal: true, alias: "languages", required: false }] }], lineWrapping: [{ type: i0.Input, args: [{ isSignal: true, alias: "lineWrapping", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], root: [{ type: i0.Input, args: [{ isSignal: true, alias: "root", required: false }] }], setup: [{ type: i0.Input, args: [{ isSignal: true, alias: "setup", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], aoFocus: [{ type: i0.Output, args: ["aoFocus"] }], aoChange: [{ type: i0.Output, args: ["aoChange"] }], aoBlur: [{ type: i0.Output, args: ["aoBlur"] }] } });
|
|
287
302
|
|
|
288
303
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aiao-code-editor-angular.mjs","sources":["../../../../packages/code-editor-angular/src/code-editor.ts","../../../../packages/code-editor-angular/src/index.ts","../../../../packages/code-editor-angular/src/aiao-code-editor-angular.ts"],"sourcesContent":["/**\n * @file\n * @aiao/code-editor-angular\n *\n * Angular CodeMirror 代码编辑器组件实现\n */\nimport { findLanguageByName, SUPPORT_LANGUAGES } from '@aiao/code-editor';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n PLATFORM_ID,\n SimpleChanges\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { indentWithTab } from '@codemirror/commands';\nimport { indentUnit, LanguageDescription } from '@codemirror/language';\nimport { Annotation, Compartment, EditorState, Extension, StateEffect } from '@codemirror/state';\nimport { oneDark } from '@codemirror/theme-one-dark';\nimport { EditorView, highlightWhitespace, keymap, placeholder } from '@codemirror/view';\nimport { basicSetup, minimalSetup } from 'codemirror';\n\ntype Setup = 'basic' | 'minimal' | null;\ntype CodeEditorTheme = 'light' | 'dark';\n\n/**\n * Annotation to mark external changes that should not trigger onChange\n */\nexport const External = Annotation.define<boolean>();\n\n/**\n * CodeEditor Angular 组件\n *\n * 基于 CodeMirror 6 的代码编辑器 Angular 组件,支持多种语言和主题\n *\n * @example\n * ```html\n * <ao-code-editor\n * [(ngModel)]=\"code\"\n * language=\"typescript\"\n * theme=\"dark\"\n * (aoChange)=\"onCodeChange($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'ao-code-editor',\n template: ``,\n styleUrl: './code-editor.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodeEditor),\n multi: true\n }\n ]\n})\nexport class CodeEditor implements OnInit, ControlValueAccessor, OnDestroy, OnChanges {\n /**\n * EditorView instance\n * https://codemirror.net/docs/ref/#view.EditorView\n */\n #view?: EditorView;\n\n #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n #platformId = inject(PLATFORM_ID);\n #isBrowser = isPlatformBrowser(this.#platformId);\n\n // Compartments for dynamic reconfiguration\n // https://codemirror.net/docs/ref/#state.Compartment\n #editableConf = new Compartment();\n #readonlyConf = new Compartment();\n #themeConf = new Compartment();\n #placeholderConf = new Compartment();\n #indentWithTabConf = new Compartment();\n #indentUnitConf = new Compartment();\n #lineWrappingConf = new Compartment();\n #highlightWhitespaceConf = new Compartment();\n #languageConf = new Compartment();\n\n // Update listener for content changes\n #updateListener = EditorView.updateListener.of(vu => {\n if (vu.docChanged && !vu.transactions.some(tr => tr.annotation(External))) {\n const value = vu.state.doc.toString();\n this.onChange?.(value);\n this.aoChange.emit(value);\n }\n });\n\n // Input properties\n autoFocus = input<boolean>(false);\n disabled = input<boolean>(false);\n highlightWhitespace = input(false, { transform: booleanAttribute });\n indentUnit = input<string>('');\n indentWithTab = input(false, { transform: booleanAttribute });\n language = input<string>('');\n languages = input<readonly LanguageDescription[]>(SUPPORT_LANGUAGES);\n lineWrapping = input(false, { transform: booleanAttribute });\n placeholder = input<string>('');\n readonly = input<boolean>(false);\n root = input<Document | ShadowRoot>();\n setup = input<Setup>('basic');\n theme = input<CodeEditorTheme>('light');\n value = input<string>('');\n\n // Output events\n aoFocus = output<void>();\n aoChange = output<string>();\n aoBlur = output<void>();\n\n // Linked signal for disabled state\n useDisabled = linkedSignal(() => this.disabled());\n\n onChange?: (value: string) => void;\n onTouched?: () => void;\n\n ngOnInit() {\n if (!this.#isBrowser) return;\n const extensions: Extension[] = this._get_all_extensions();\n const state = EditorState.create({ doc: this.value(), extensions });\n this.#view = new EditorView({\n parent: this.#elementRef.nativeElement,\n state\n });\n\n if (this.autoFocus()) {\n this.#view.focus();\n }\n\n this.#view.contentDOM.addEventListener('focus', () => {\n this.onTouched?.();\n this.aoFocus.emit();\n });\n\n this.#view.contentDOM.addEventListener('blur', () => {\n this.onTouched?.();\n this.aoBlur.emit();\n });\n this.#syncAccessState();\n this.setTheme(this.theme());\n this.setPlaceholder(this.placeholder());\n this.setIndentWithTab(this.indentWithTab());\n this.setIndentUnit(this.indentUnit());\n this.setLineWrapping(this.lineWrapping());\n this.setHighlightWhitespace(this.highlightWhitespace());\n this.setLanguage(this.language());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.#view) return;\n if (changes['value']) {\n this.setValue(this.value());\n }\n if (changes['disabled'] || changes['readonly']) {\n this.#syncAccessState();\n }\n if (changes['theme']) {\n this.setTheme(this.theme());\n }\n if (changes['placeholder']) {\n this.setPlaceholder(this.placeholder());\n }\n if (changes['indentWithTab']) {\n this.setIndentWithTab(this.indentWithTab());\n }\n if (changes['indentUnit']) {\n this.setIndentUnit(this.indentUnit());\n }\n if (changes['lineWrapping']) {\n this.setLineWrapping(this.lineWrapping());\n }\n if (changes['highlightWhitespace']) {\n this.setHighlightWhitespace(this.highlightWhitespace());\n }\n if (changes['language']) {\n this.setLanguage(this.language());\n }\n if (changes['languages']) {\n this.setLanguage(this.language());\n }\n if (changes['setup']) {\n this.setExtensions(this._get_all_extensions());\n }\n }\n\n ngOnDestroy(): void {\n this.#view?.destroy();\n }\n\n public writeValue(value: string): void {\n if (this.#view) {\n this.setValue(value, true);\n }\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.useDisabled.set(isDisabled);\n this.#syncAccessState();\n }\n\n setExtensions(value: Extension[]) {\n this._dispatch_effects(StateEffect.reconfigure.of(value));\n }\n\n setValue(value: string, external = false) {\n this.#view?.dispatch({\n changes: { from: 0, to: this.#view.state.doc.length, insert: value },\n annotations: external ? External.of(true) : undefined\n });\n }\n\n setEditable(value: boolean) {\n this._dispatch_effects(this.#editableConf.reconfigure(EditorView.editable.of(value)));\n }\n\n setReadonly(value: boolean) {\n this._dispatch_effects(this.#readonlyConf.reconfigure(EditorState.readOnly.of(value)));\n }\n\n setTheme(value: CodeEditorTheme) {\n this._dispatch_effects(this.#themeConf.reconfigure(value === 'dark' ? oneDark : []));\n }\n\n setPlaceholder(value: string) {\n this._dispatch_effects(this.#placeholderConf.reconfigure(value ? placeholder(value) : []));\n }\n\n setIndentWithTab(value: boolean) {\n this._dispatch_effects(this.#indentWithTabConf.reconfigure(value ? keymap.of([indentWithTab]) : []));\n }\n\n setIndentUnit(value: string) {\n this._dispatch_effects(this.#indentUnitConf.reconfigure(value ? indentUnit.of(value) : []));\n }\n\n setLineWrapping(value: boolean) {\n this._dispatch_effects(this.#lineWrappingConf.reconfigure(value ? EditorView.lineWrapping : []));\n }\n\n setHighlightWhitespace(value: boolean) {\n this._dispatch_effects(this.#highlightWhitespaceConf.reconfigure(value ? highlightWhitespace() : []));\n }\n\n setLanguage(lang: string) {\n if (!lang || lang === 'plaintext') {\n this._dispatch_effects(this.#languageConf.reconfigure([]));\n return;\n }\n const languages = this.languages();\n if (languages.length === 0) {\n this._dispatch_effects(this.#languageConf.reconfigure([]));\n return;\n }\n const langDesc = this._find_language(lang);\n if (!langDesc) {\n this._dispatch_effects(this.#languageConf.reconfigure([]));\n return;\n }\n void langDesc.load().then(\n languageSupport => {\n this._dispatch_effects(this.#languageConf.reconfigure([languageSupport]));\n },\n error => {\n console.error(`[code-editor-angular] Failed to load language \"${lang}\":`, error);\n this._dispatch_effects(this.#languageConf.reconfigure([]));\n }\n );\n }\n\n protected _get_all_extensions() {\n const extensions: Extension[] = [\n this.#updateListener,\n this.#editableConf.of([]),\n this.#readonlyConf.of([]),\n this.#themeConf.of([]),\n this.#placeholderConf.of([]),\n this.#indentWithTabConf.of([]),\n this.#indentUnitConf.of([]),\n this.#lineWrappingConf.of([]),\n this.#highlightWhitespaceConf.of([]),\n this.#languageConf.of([])\n ];\n const setup = this.setup();\n if (setup === 'basic') {\n extensions.push(basicSetup);\n } else if (setup === 'minimal') {\n extensions.push(minimalSetup);\n }\n return extensions;\n }\n\n protected _find_language(name: string) {\n const languages = this.languages();\n const language = findLanguageByName(name, languages);\n if (language) {\n return language;\n }\n console.error(`Language \"${name}\" not found. Supported: ${languages.map(lang => lang.name).join(', ')}`);\n return null;\n }\n\n protected _dispatch_effects(effects: StateEffect<unknown> | readonly StateEffect<unknown>[]) {\n return this.#view?.dispatch({ effects });\n }\n\n #syncAccessState() {\n const disabled = this.useDisabled();\n const readonly = this.readonly();\n this.setReadonly(readonly || disabled);\n this.setEditable(!readonly && !disabled);\n }\n}\n","/**\n * @aiao/code-editor-angular\n *\n * Angular CodeMirror 代码编辑器组件\n *\n * @example\n * ```ts\n * import { CodeEditor } from '@aiao/code-editor-angular';\n * ```\n */\nexport * from './code-editor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aiao-code-editor-angular.mjs","sources":["../../../../packages/code-editor-angular/src/code-editor.ts","../../../../packages/code-editor-angular/src/index.ts","../../../../packages/code-editor-angular/src/aiao-code-editor-angular.ts"],"sourcesContent":["/**\n * @file\n * @aiao/code-editor-angular\n *\n * Angular CodeMirror 代码编辑器组件实现\n */\nimport type { CodeEditorLanguageDescription, CodeEditorTheme } from '@aiao/code-editor';\nimport { findLanguageByName, SUPPORT_LANGUAGES } from '@aiao/code-editor';\nimport { isPlatformBrowser } from '@angular/common';\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n forwardRef,\n inject,\n input,\n linkedSignal,\n OnChanges,\n OnDestroy,\n OnInit,\n output,\n PLATFORM_ID,\n SimpleChanges\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { indentWithTab } from '@codemirror/commands';\nimport { indentUnit } from '@codemirror/language';\nimport { Annotation, Compartment, EditorState, Extension, StateEffect } from '@codemirror/state';\nimport { oneDark } from '@codemirror/theme-one-dark';\nimport { EditorView, highlightWhitespace, keymap, placeholder } from '@codemirror/view';\nimport { basicSetup, minimalSetup } from 'codemirror';\n\nexport type { CodeEditorTheme } from '@aiao/code-editor';\n\n/** CodeMirror 预设配置。 */\nexport type CodeEditorSetup = 'basic' | 'minimal' | null;\n\n/**\n * Annotation to mark external changes that should not trigger onChange\n */\nexport const External = Annotation.define<boolean>();\n\n/**\n * CodeEditor Angular 组件\n *\n * 基于 CodeMirror 6 的代码编辑器 Angular 组件,支持多种语言和主题\n *\n * @example\n * ```html\n * <ao-code-editor\n * [(ngModel)]=\"code\"\n * language=\"typescript\"\n * theme=\"dark\"\n * (aoChange)=\"onCodeChange($event)\"\n * />\n * ```\n */\n@Component({\n selector: 'ao-code-editor',\n template: ``,\n styleUrl: './code-editor.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CodeEditor),\n multi: true\n }\n ]\n})\nexport class CodeEditor implements OnInit, ControlValueAccessor, OnDestroy, OnChanges {\n /**\n * EditorView instance\n * https://codemirror.net/docs/ref/#view.EditorView\n */\n #view?: EditorView;\n #pendingValue?: string;\n #languageRequest = 0;\n\n #elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n #platformId = inject(PLATFORM_ID);\n #isBrowser = isPlatformBrowser(this.#platformId);\n\n // Compartments for dynamic reconfiguration\n // https://codemirror.net/docs/ref/#state.Compartment\n #editableConf = new Compartment();\n #readonlyConf = new Compartment();\n #themeConf = new Compartment();\n #placeholderConf = new Compartment();\n #indentWithTabConf = new Compartment();\n #indentUnitConf = new Compartment();\n #lineWrappingConf = new Compartment();\n #highlightWhitespaceConf = new Compartment();\n #languageConf = new Compartment();\n\n // Update listener for content changes\n #updateListener = EditorView.updateListener.of(vu => {\n if (vu.docChanged && !vu.transactions.some(tr => tr.annotation(External))) {\n const value = vu.state.doc.toString();\n this.onChange?.(value);\n this.aoChange.emit(value);\n }\n });\n\n // Input properties\n autoFocus = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n highlightWhitespace = input(false, { transform: booleanAttribute });\n indentUnit = input<string>('');\n indentWithTab = input(false, { transform: booleanAttribute });\n language = input<string>('');\n languages = input<readonly CodeEditorLanguageDescription[]>(SUPPORT_LANGUAGES);\n lineWrapping = input(false, { transform: booleanAttribute });\n placeholder = input<string>('');\n readonly = input(false, { transform: booleanAttribute });\n root = input<Document | ShadowRoot>();\n setup = input<CodeEditorSetup>('basic');\n theme = input<CodeEditorTheme>('light');\n value = input<string>('');\n\n // Output events\n aoFocus = output<void>();\n aoChange = output<string>();\n aoBlur = output<void>();\n\n // Linked signal for disabled state\n useDisabled = linkedSignal(() => this.disabled());\n\n onChange?: (value: string) => void;\n onTouched?: () => void;\n\n ngOnInit() {\n if (!this.#isBrowser) return;\n const extensions: Extension[] = this._get_all_extensions();\n const state = EditorState.create({ doc: this.#pendingValue ?? this.value(), extensions });\n this.#view = new EditorView({\n parent: this.#elementRef.nativeElement,\n root: this.root(),\n state\n });\n\n if (this.autoFocus()) {\n this.#view.focus();\n }\n\n this.#view.contentDOM.addEventListener('focus', () => {\n this.aoFocus.emit();\n });\n\n this.#view.contentDOM.addEventListener('blur', () => {\n this.onTouched?.();\n this.aoBlur.emit();\n });\n this.#syncAccessState();\n this.setTheme(this.theme());\n this.setPlaceholder(this.placeholder());\n this.setIndentWithTab(this.indentWithTab());\n this.setIndentUnit(this.indentUnit());\n this.setLineWrapping(this.lineWrapping());\n this.setHighlightWhitespace(this.highlightWhitespace());\n this.setLanguage(this.language());\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (!this.#view) return;\n if (changes['value']) {\n this.setValue(this.value(), true);\n }\n if (changes['disabled'] || changes['readonly']) {\n this.#syncAccessState();\n }\n if (changes['theme']) {\n this.setTheme(this.theme());\n }\n if (changes['placeholder']) {\n this.setPlaceholder(this.placeholder());\n }\n if (changes['indentWithTab']) {\n this.setIndentWithTab(this.indentWithTab());\n }\n if (changes['indentUnit']) {\n this.setIndentUnit(this.indentUnit());\n }\n if (changes['lineWrapping']) {\n this.setLineWrapping(this.lineWrapping());\n }\n if (changes['highlightWhitespace']) {\n this.setHighlightWhitespace(this.highlightWhitespace());\n }\n if (changes['language'] || changes['languages']) {\n this.setLanguage(this.language());\n }\n if (changes['setup']) {\n this.setExtensions(this._get_all_extensions());\n }\n }\n\n ngOnDestroy(): void {\n this.#languageRequest += 1;\n const view = this.#view;\n this.#view = undefined;\n view?.destroy();\n }\n\n public writeValue(value: string | null): void {\n const normalized = value ?? '';\n if (!this.#view) {\n this.#pendingValue = normalized;\n return;\n }\n this.setValue(normalized, true);\n }\n\n public registerOnChange(fn: (value: string) => void): void {\n this.onChange = fn;\n }\n\n public registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n public setDisabledState(isDisabled: boolean): void {\n this.useDisabled.set(isDisabled);\n this.#syncAccessState();\n }\n\n setExtensions(value: Extension[]) {\n this._dispatch_effects(StateEffect.reconfigure.of(value));\n }\n\n setValue(value: string, external = false) {\n const view = this.#view;\n if (!view || view.state.doc.toString() === value) return;\n view.dispatch({\n changes: { from: 0, to: view.state.doc.length, insert: value },\n annotations: external ? External.of(true) : undefined\n });\n }\n\n setEditable(value: boolean) {\n this._dispatch_effects(this.#editableConf.reconfigure(EditorView.editable.of(value)));\n }\n\n setReadonly(value: boolean) {\n this._dispatch_effects(this.#readonlyConf.reconfigure(EditorState.readOnly.of(value)));\n }\n\n setTheme(value: CodeEditorTheme) {\n this._dispatch_effects(this.#themeConf.reconfigure(value === 'dark' ? oneDark : []));\n }\n\n setPlaceholder(value: string) {\n this._dispatch_effects(this.#placeholderConf.reconfigure(value ? placeholder(value) : []));\n }\n\n setIndentWithTab(value: boolean) {\n this._dispatch_effects(this.#indentWithTabConf.reconfigure(value ? keymap.of([indentWithTab]) : []));\n }\n\n setIndentUnit(value: string) {\n this._dispatch_effects(this.#indentUnitConf.reconfigure(value ? indentUnit.of(value) : []));\n }\n\n setLineWrapping(value: boolean) {\n this._dispatch_effects(this.#lineWrappingConf.reconfigure(value ? EditorView.lineWrapping : []));\n }\n\n setHighlightWhitespace(value: boolean) {\n this._dispatch_effects(this.#highlightWhitespaceConf.reconfigure(value ? highlightWhitespace() : []));\n }\n\n setLanguage(lang: string) {\n const request = ++this.#languageRequest;\n const view = this.#view;\n if (!view) return;\n const languages = this.languages();\n if (!lang || lang === 'plaintext' || languages.length === 0) {\n view.dispatch({ effects: this.#languageConf.reconfigure([]) });\n return;\n }\n const langDesc = this._find_language(lang);\n if (!langDesc) {\n view.dispatch({ effects: this.#languageConf.reconfigure([]) });\n return;\n }\n void langDesc.load().then(\n languageSupport => {\n if (request !== this.#languageRequest || this.#view !== view) return;\n view.dispatch({ effects: this.#languageConf.reconfigure(languageSupport.extension as Extension) });\n },\n error => {\n if (request !== this.#languageRequest || this.#view !== view) return;\n console.error(`[code-editor-angular] Failed to load language \"${lang}\":`, error);\n view.dispatch({ effects: this.#languageConf.reconfigure([]) });\n }\n );\n }\n\n protected _get_all_extensions() {\n const extensions: Extension[] = [\n this.#updateListener,\n this.#editableConf.of([]),\n this.#readonlyConf.of([]),\n this.#themeConf.of([]),\n this.#placeholderConf.of([]),\n this.#indentWithTabConf.of([]),\n this.#indentUnitConf.of([]),\n this.#lineWrappingConf.of([]),\n this.#highlightWhitespaceConf.of([]),\n this.#languageConf.of([])\n ];\n const setup = this.setup();\n if (setup === 'basic') {\n extensions.push(basicSetup);\n } else if (setup === 'minimal') {\n extensions.push(minimalSetup);\n }\n return extensions;\n }\n\n protected _find_language(name: string): CodeEditorLanguageDescription | null {\n const languages = this.languages();\n const language = findLanguageByName(name, languages);\n if (language) {\n return language;\n }\n console.error(`Language \"${name}\" not found. Supported: ${languages.map(lang => lang.name).join(', ')}`);\n return null;\n }\n\n protected _dispatch_effects(effects: StateEffect<unknown> | readonly StateEffect<unknown>[]) {\n return this.#view?.dispatch({ effects });\n }\n\n #syncAccessState() {\n const disabled = this.useDisabled();\n const readonly = this.readonly();\n this.setReadonly(readonly || disabled);\n this.setEditable(!readonly && !disabled);\n }\n}\n","/**\n * @aiao/code-editor-angular\n *\n * Angular CodeMirror 代码编辑器组件\n *\n * @example\n * ```ts\n * import { CodeEditor } from '@aiao/code-editor-angular';\n * ```\n */\nexport * from './code-editor';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiao/code-editor-angular",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"dependencies": {
|
|
5
|
-
"@codemirror/commands": "^6.10.
|
|
6
|
-
"@codemirror/language": "^6.12.
|
|
7
|
-
"@codemirror/state": "
|
|
5
|
+
"@codemirror/commands": "^6.10.4",
|
|
6
|
+
"@codemirror/language": "^6.12.4",
|
|
7
|
+
"@codemirror/state": "6.7.1",
|
|
8
8
|
"@codemirror/theme-one-dark": "^6.1.3",
|
|
9
|
-
"@codemirror/view": "6.
|
|
9
|
+
"@codemirror/view": "^6.43.5",
|
|
10
10
|
"codemirror": "^6.0.1",
|
|
11
11
|
"tslib": "^2.3.0"
|
|
12
12
|
},
|
|
13
13
|
"peerDependencies": {
|
|
14
|
-
"@aiao/code-editor": "*"
|
|
14
|
+
"@aiao/code-editor": "*",
|
|
15
|
+
"@angular/common": ">=20.0.0",
|
|
16
|
+
"@angular/core": ">=20.0.0",
|
|
17
|
+
"@angular/forms": ">=20.0.0",
|
|
18
|
+
"@angular/platform-browser": ">=20.0.0"
|
|
15
19
|
},
|
|
16
20
|
"publishConfig": {
|
|
17
21
|
"access": "public"
|
|
@@ -2,11 +2,12 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { OnInit, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';
|
|
3
3
|
import * as _codemirror_state from '@codemirror/state';
|
|
4
4
|
import { Extension, StateEffect } from '@codemirror/state';
|
|
5
|
+
import { CodeEditorLanguageDescription, CodeEditorTheme } from '@aiao/code-editor';
|
|
6
|
+
export { CodeEditorTheme } from '@aiao/code-editor';
|
|
5
7
|
import { ControlValueAccessor } from '@angular/forms';
|
|
6
|
-
import { LanguageDescription } from '@codemirror/language';
|
|
7
8
|
|
|
8
|
-
|
|
9
|
-
type
|
|
9
|
+
/** CodeMirror 预设配置。 */
|
|
10
|
+
type CodeEditorSetup = 'basic' | 'minimal' | null;
|
|
10
11
|
/**
|
|
11
12
|
* Annotation to mark external changes that should not trigger onChange
|
|
12
13
|
*/
|
|
@@ -28,18 +29,18 @@ declare const External: _codemirror_state.AnnotationType<boolean>;
|
|
|
28
29
|
*/
|
|
29
30
|
declare class CodeEditor implements OnInit, ControlValueAccessor, OnDestroy, OnChanges {
|
|
30
31
|
#private;
|
|
31
|
-
autoFocus: _angular_core.
|
|
32
|
-
disabled: _angular_core.
|
|
32
|
+
autoFocus: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
33
|
+
disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
33
34
|
highlightWhitespace: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
34
35
|
indentUnit: _angular_core.InputSignal<string>;
|
|
35
36
|
indentWithTab: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
36
37
|
language: _angular_core.InputSignal<string>;
|
|
37
|
-
languages: _angular_core.InputSignal<readonly
|
|
38
|
+
languages: _angular_core.InputSignal<readonly CodeEditorLanguageDescription[]>;
|
|
38
39
|
lineWrapping: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
39
40
|
placeholder: _angular_core.InputSignal<string>;
|
|
40
|
-
readonly: _angular_core.
|
|
41
|
+
readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
41
42
|
root: _angular_core.InputSignal<Document | ShadowRoot | undefined>;
|
|
42
|
-
setup: _angular_core.InputSignal<
|
|
43
|
+
setup: _angular_core.InputSignal<CodeEditorSetup>;
|
|
43
44
|
theme: _angular_core.InputSignal<CodeEditorTheme>;
|
|
44
45
|
value: _angular_core.InputSignal<string>;
|
|
45
46
|
aoFocus: _angular_core.OutputEmitterRef<void>;
|
|
@@ -51,7 +52,7 @@ declare class CodeEditor implements OnInit, ControlValueAccessor, OnDestroy, OnC
|
|
|
51
52
|
ngOnInit(): void;
|
|
52
53
|
ngOnChanges(changes: SimpleChanges): void;
|
|
53
54
|
ngOnDestroy(): void;
|
|
54
|
-
writeValue(value: string): void;
|
|
55
|
+
writeValue(value: string | null): void;
|
|
55
56
|
registerOnChange(fn: (value: string) => void): void;
|
|
56
57
|
registerOnTouched(fn: () => void): void;
|
|
57
58
|
setDisabledState(isDisabled: boolean): void;
|
|
@@ -67,10 +68,11 @@ declare class CodeEditor implements OnInit, ControlValueAccessor, OnDestroy, OnC
|
|
|
67
68
|
setHighlightWhitespace(value: boolean): void;
|
|
68
69
|
setLanguage(lang: string): void;
|
|
69
70
|
protected _get_all_extensions(): Extension[];
|
|
70
|
-
protected _find_language(name: string):
|
|
71
|
+
protected _find_language(name: string): CodeEditorLanguageDescription | null;
|
|
71
72
|
protected _dispatch_effects(effects: StateEffect<unknown> | readonly StateEffect<unknown>[]): void | undefined;
|
|
72
73
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<CodeEditor, never>;
|
|
73
74
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<CodeEditor, "ao-code-editor", never, { "autoFocus": { "alias": "autoFocus"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "highlightWhitespace": { "alias": "highlightWhitespace"; "required": false; "isSignal": true; }; "indentUnit": { "alias": "indentUnit"; "required": false; "isSignal": true; }; "indentWithTab": { "alias": "indentWithTab"; "required": false; "isSignal": true; }; "language": { "alias": "language"; "required": false; "isSignal": true; }; "languages": { "alias": "languages"; "required": false; "isSignal": true; }; "lineWrapping": { "alias": "lineWrapping"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "root": { "alias": "root"; "required": false; "isSignal": true; }; "setup": { "alias": "setup"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; }, { "aoFocus": "aoFocus"; "aoChange": "aoChange"; "aoBlur": "aoBlur"; }, never, never, true, never>;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
77
|
export { CodeEditor, External };
|
|
78
|
+
export type { CodeEditorSetup };
|