Skip to content

Commit 8034043

Browse files
authored
standalone editor component (#1502)
1 parent aa78e1f commit 8034043

25 files changed

+163
-201
lines changed

.prettierrc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
22
"singleQuote": true,
3-
"trailingComma": "none"
3+
"trailingComma": "none",
4+
"printWidth": 150
45
}

README.md

Lines changed: 39 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,38 @@ that powers [VS Code](https://github.com/Microsoft/vscode).
1515
npm install @ngstack/code-editor
1616
```
1717

18-
## Integrating with Angular CLI project
18+
## Integrating with Standalone Angular Project
19+
20+
Update the `app.config.ts` file to provide the code editor configuration:
21+
22+
```ts
23+
export const appConfig: ApplicationConfig = {
24+
providers: [
25+
provideZoneChangeDetection({ eventCoalescing: true }),
26+
provideRouter(routes),
27+
provideAnimationsAsync(),
28+
29+
// Configure Code Editor
30+
provideCodeEditor({
31+
// editorVersion: '0.46.0',
32+
// use local Monaco installation
33+
baseUrl: 'assets/monaco',
34+
// use local Typings Worker
35+
typingsWorkerUrl: 'assets/workers/typings-worker.js'
36+
})
37+
]
38+
};
39+
```
40+
41+
## Integrating with Modules-based Angular Project
1942

2043
Import `CodeEditorModule` into your main application module:
2144

2245
```ts
23-
import { CodeEditorModule } from '@ngstack/code-editor';
46+
import { provideCodeEditor } from '@ngstack/code-editor';
2447

2548
@NgModule({
26-
imports: [CodeEditorModule.forRoot()]
49+
providers: [provideCodeEditor()]
2750
})
2851
export class AppModule {}
2952
```
@@ -34,9 +57,11 @@ If not provided, the component is always going to use the `latest` version.
3457
> For a full list of Monaco versions and changes, please refer to the official [CHANGELOG.md](https://github.com/microsoft/monaco-editor/blob/main/CHANGELOG.md) file
3558
3659
```ts
60+
import { provideCodeEditor } from '@ngstack/code-editor';
61+
3762
@NgModule({
38-
imports: [
39-
CodeEditorModule.forRoot({
63+
providers: [
64+
provideCodeEditor({
4065
editorVersion: '0.44.0'
4166
})
4267
]
@@ -78,7 +103,7 @@ export class AppComponent {
78103
## Input Properties
79104

80105
| Name | Type | Default Value | Description |
81-
| --------- | --------- | ------------- | -------------------------------------------------------------- |
106+
|-----------|-----------|---------------|----------------------------------------------------------------|
82107
| theme | string | vs | Editor theme. Supported values: `vs`, `vs-dark` or `hc-black`. |
83108
| options | Object | {...} | Editor options. |
84109
| readOnly | boolean | false | Toggles readonly state of the editor. |
@@ -297,11 +322,11 @@ Update the `angular.json` file and append the following asset rule:
297322
Update the main application module and setup the service to use the custom `baseUrl` when application starts:
298323

299324
```ts
300-
import { CodeEditorModule } from '@ngstack/code-editor';
325+
import { provideCodeEditor } from '@ngstack/code-editor';
301326

302327
@NgModule({
303-
imports: [
304-
CodeEditorModule.forRoot({
328+
providers: [
329+
provideCodeEditor({
305330
baseUrl: 'assets/monaco'
306331
})
307332
]
@@ -324,9 +349,11 @@ Update the `angular.json` file and append the following asset rule:
324349
Then update the `CodeEditorService` configuration at the application startup:
325350

326351
```ts
352+
import { provideCodeEditor } from '@ngstack/code-editor';
353+
327354
@NgModule({
328-
imports: [
329-
CodeEditorModule.forRoot({
355+
providers: [
356+
provideCodeEditor({
330357
typingsWorkerUrl: 'assets/workers/typings-worker.js'
331358
})
332359
]
@@ -338,6 +365,6 @@ export class AppModule {}
338365

339366
To enable Lazy Loading
340367
use `CodeEditorModule.forRoot()` in the main application,
341-
and `CodeEditorModule.forChild()` in all lazy-loaded feature modules.
368+
and `CodeEditorModule` in all lazy-loaded feature modules.
342369

343370
For more details please refer to [Lazy Loading Feature Modules](https://angular.io/guide/lazy-loading-ngmodules)

angular.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@
5757
"budgets": [
5858
{
5959
"type": "initial",
60-
"maximumWarning": "2.41MB",
61-
"maximumError": "2.5MB"
60+
"maximumWarning": "2.8MB",
61+
"maximumError": "3MB"
6262
},
6363
{
6464
"type": "anyComponentStyle",

package-lock.json

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
"karma-jasmine": "~5.1.0",
5252
"karma-jasmine-html-reporter": "^2.1.0",
5353
"ng-packagr": "^18.1.0",
54+
"prettier": "^3.3.3",
5455
"typescript": "5.5.4"
5556
}
5657
}

projects/code-editor/src/lib/code-editor.module.spec.ts

Lines changed: 0 additions & 7 deletions
This file was deleted.
Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
1-
import { NgModule, ModuleWithProviders, APP_INITIALIZER } from '@angular/core';
1+
import { APP_INITIALIZER, ModuleWithProviders, NgModule, Provider } from '@angular/core';
22
import { CommonModule } from '@angular/common';
33
import { CodeEditorComponent } from './code-editor/code-editor.component';
4-
import {
5-
CodeEditorService,
6-
EDITOR_SETTINGS,
7-
} from './services/code-editor.service';
4+
import { CodeEditorService, EDITOR_SETTINGS } from './services/code-editor.service';
5+
import { CodeEditorSettings } from './editor-settings';
86
import { TypescriptDefaultsService } from './services/typescript-defaults.service';
97
import { JavascriptDefaultsService } from './services/javascript-defaults.service';
10-
import { CodeEditorSettings } from './editor-settings';
118
import { JsonDefaultsService } from './services/json-defaults.service';
129

1310
export function setupEditorService(service: CodeEditorService) {
14-
const result = () => service.loadEditor();
15-
return result;
11+
return () => service.loadEditor();
1612
}
1713

14+
export function provideCodeEditor(settings?: CodeEditorSettings): Provider[] {
15+
return [
16+
{ provide: EDITOR_SETTINGS, useValue: settings },
17+
CodeEditorService,
18+
TypescriptDefaultsService,
19+
JavascriptDefaultsService,
20+
JsonDefaultsService,
21+
{
22+
provide: APP_INITIALIZER,
23+
useFactory: setupEditorService,
24+
deps: [CodeEditorService],
25+
multi: true,
26+
},
27+
];
28+
}
29+
30+
/** @deprecated use `provideCodeEditor(settings)` instead */
1831
@NgModule({
19-
imports: [CommonModule],
20-
declarations: [CodeEditorComponent],
32+
imports: [CommonModule, CodeEditorComponent],
2133
exports: [CodeEditorComponent],
2234
})
2335
export class CodeEditorModule {
@@ -29,9 +41,6 @@ export class CodeEditorModule {
2941
providers: [
3042
{ provide: EDITOR_SETTINGS, useValue: settings },
3143
CodeEditorService,
32-
TypescriptDefaultsService,
33-
JavascriptDefaultsService,
34-
JsonDefaultsService,
3544
{
3645
provide: APP_INITIALIZER,
3746
useFactory: setupEditorService,
@@ -41,10 +50,4 @@ export class CodeEditorModule {
4150
],
4251
};
4352
}
44-
45-
static forChild(): ModuleWithProviders<CodeEditorModule> {
46-
return {
47-
ngModule: CodeEditorModule,
48-
};
49-
}
5053
}

projects/code-editor/src/lib/code-editor/code-editor.component.spec.ts

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ import { ComponentFixture, TestBed, fakeAsync } from '@angular/core/testing';
22

33
import { CodeEditorComponent } from './code-editor.component';
44
import { CodeEditorService } from '../services/code-editor.service';
5-
import { TypescriptDefaultsService } from '../services/typescript-defaults.service';
6-
import { JavascriptDefaultsService } from '../services/javascript-defaults.service';
7-
import { CodeEditorModule } from '../code-editor.module';
5+
import { provideCodeEditor } from '../code-editor.module';
86

97
describe('CodeEditorComponent', () => {
108
let component: CodeEditorComponent;
@@ -13,12 +11,8 @@ describe('CodeEditorComponent', () => {
1311

1412
beforeEach(() => {
1513
TestBed.configureTestingModule({
16-
imports: [CodeEditorModule.forRoot({ baseUrl: 'assets/monaco' })],
17-
providers: [
18-
CodeEditorService,
19-
TypescriptDefaultsService,
20-
JavascriptDefaultsService
21-
]
14+
imports: [CodeEditorComponent],
15+
providers: [provideCodeEditor({ baseUrl: 'assets/monaco' })]
2216
});
2317

2418
codeEditorService = TestBed.inject(CodeEditorService);

projects/code-editor/src/lib/code-editor/code-editor.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export interface CodeModelChangedEvent {
2929
@Component({
3030
// eslint-disable-next-line @angular-eslint/component-selector
3131
selector: 'ngs-code-editor',
32+
standalone: true,
3233
templateUrl: './code-editor.component.html',
3334
styleUrls: ['./code-editor.component.css'],
3435
changeDetection: ChangeDetectionStrategy.OnPush,
Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,24 @@
11
import { Component } from '@angular/core';
2-
import { CodeModel } from '@ngstack/code-editor';
2+
import { CodeEditorComponent, CodeModel } from '@ngstack/code-editor';
3+
import { RouterOutlet } from '@angular/router';
34

45
@Component({
56
selector: 'app-root',
7+
standalone: true,
8+
imports: [RouterOutlet, CodeEditorComponent],
69
templateUrl: './app.component.html',
7-
styleUrls: ['./app.component.css'],
10+
styleUrls: ['./app.component.css']
811
})
912
export class AppComponent {
1013
file1: CodeModel = {
1114
language: 'text',
1215
value: 'left editor',
13-
uri: 'left.txt',
16+
uri: 'left.txt'
1417
};
1518

1619
file2: CodeModel = {
1720
language: 'text',
1821
value: 'right editor',
19-
uri: 'right.txt',
22+
uri: 'right.txt'
2023
};
2124
}

0 commit comments

Comments
 (0)