diff --git a/sandkasten/angular.json b/sandkasten/angular.json index 58c24f0..ab6ba9f 100644 --- a/sandkasten/angular.json +++ b/sandkasten/angular.json @@ -22,10 +22,21 @@ "tsConfig": "tsconfig.app.json", "assets": [ "src/favicon.ico", - "src/assets" + "src/assets", + { + "glob": "**/*", + "input": "node_modules/monaco-editor/min", + "output": "./assets/monaco/min" + }, + { + "glob": "**/*", + "input": "node_modules/monaco-editor/min-maps", + "output": "./assets/monaco/min-maps" + } ], "styles": [ - "src/styles.css" + "src/styles.css", + "node_modules/monaco-editor/esm/vs/base/browser/ui/actionbar/actionbar.css" ], "scripts": [] }, diff --git a/sandkasten/package-lock.json b/sandkasten/package-lock.json index 751fd8d..e16d73b 100644 --- a/sandkasten/package-lock.json +++ b/sandkasten/package-lock.json @@ -16,6 +16,8 @@ "@angular/platform-browser": "^16.2.0", "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.0", + "monaco-editor": "^0.41.0", + "ngx-monaco-editor-v2": "^16.0.1", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -25,12 +27,14 @@ "@angular/cli": "~16.2.2", "@angular/compiler-cli": "^16.2.0", "@types/jasmine": "~4.3.0", + "css-loader": "^6.8.1", "jasmine-core": "~4.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "style-loader": "^3.3.3", "typescript": "~5.1.3" } }, @@ -48,12 +52,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.2.tgz", - "integrity": "sha512-JFIeKKW7V2+/C8+pTReM6gfQkVU9l1IR1OCb9vvHWTRvuTr7E5h2L1rUInnmLiRWkEvkYfG29B+UPpYlkVl9oQ==", + "version": "0.1602.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.3.tgz", + "integrity": "sha512-7f4U5LzAYRcQcOvRJwunSwLd5/nwbNxY/E4jTgwFxCNvCBSMysNJBi3g9v0t8zm2XYOv4ok5eYqIwriXVypRBg==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.2", + "@angular-devkit/core": "16.2.3", "rxjs": "7.8.1" }, "engines": { @@ -63,15 +67,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.2.tgz", - "integrity": "sha512-j2lni4mN6NaMLT85sJUPSz/pNuaTCAYG3EYUeuMRNkC5keH/f4W0Tiuq6DxY4OLEF1JnEnfkp+k0Z84mEti/xA==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.3.tgz", + "integrity": "sha512-GQo14ui3jGBa3ORslO9AcNLCmLuV6EohFk7KbHMTpTY1267z3kdkJfUXhwPKTYQX4ZvQZK2lHLMrSjpFQ5vtOQ==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.2", - "@angular-devkit/build-webpack": "0.1602.2", - "@angular-devkit/core": "16.2.2", + "@angular-devkit/architect": "0.1602.3", + "@angular-devkit/build-webpack": "0.1602.3", + "@angular-devkit/core": "16.2.3", "@babel/core": "7.22.9", "@babel/generator": "7.22.9", "@babel/helper-annotate-as-pure": "7.22.5", @@ -83,7 +87,7 @@ "@babel/runtime": "7.22.6", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.2", + "@ngtools/webpack": "16.2.3", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -191,12 +195,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.2.tgz", - "integrity": "sha512-V9+tsBgNrXJPeabq9vJzN3Cfz9joaNOxs6l6M4XItcMGmAtzvxxGZ7qS5uRH1RE+SOMpYyh9uPY4QMHRNRD/gA==", + "version": "0.1602.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.3.tgz", + "integrity": "sha512-ls2aC7UvM748f/UqCDNsz9apWb4ArAKHtJ1Jwxx1DUQo+qT4c9/8WpiqxgTNkZTjCZbZZG1Ojub/rviw9Y88lA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.2", + "@angular-devkit/architect": "0.1602.3", "rxjs": "7.8.1" }, "engines": { @@ -210,9 +214,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.2.tgz", - "integrity": "sha512-6H4FsvP3rLJaGiWpIhCFPS7ZeNoM4sSrnFtRhhecu6s7MidzE4aqzuGdzJpzLammw1KL+DuTlN0gpLtM1Bvcwg==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.3.tgz", + "integrity": "sha512-oZLdg2XTx7likYAXRj1CU0XmrsCfe5f2grj3iwuI3OB1LXwwpdbHBztruj03y3yHES+TnO+dIbkvRnvMXs7uAA==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -237,12 +241,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.2.tgz", - "integrity": "sha512-KeXIlibVrQEwIKbR9GViLKc3m1SXi/xuSXgIvSv+22FNu5i91ScsAhYLe65sDUL6m6MM1XQQMS46XN1Z9bRqQw==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.3.tgz", + "integrity": "sha512-+lBiHxi/C9HCfiCbtW25DldwvJDXXXv5oWw+Tg4s18BO/lYZLveGUEaZWu9ZJ5VIJ8GliUi2LohxhDxBkh4Oxg==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.2", + "@angular-devkit/core": "16.2.3", "jsonc-parser": "3.2.0", "magic-string": "0.30.1", "ora": "5.4.1", @@ -255,9 +259,9 @@ } }, "node_modules/@angular/animations": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.5.tgz", - "integrity": "sha512-2reD50S9zWvhewRvwl320iuRICN9s0fI+3nKULlwcyJ0praLRhJ1SnaAK3NEEu7MWo3n9sb3iVTzA6S9qZRJ4g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.6.tgz", + "integrity": "sha512-NHnHdZFKLr1PB8RhscjsE/DMSVHhtjCqc3bhtOiOMYfAgm4nYrSFvp6nAaT5OoMTeAWuM0n8/HvAiFweEQgVQA==", "dependencies": { "tslib": "^2.3.0" }, @@ -265,19 +269,19 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.5" + "@angular/core": "16.2.6" } }, "node_modules/@angular/cli": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.2.tgz", - "integrity": "sha512-PmhR/NMVVCiATXxHLkVCV781Q5aa5DaYye9+plZGX3rdKTilEunRNIfT13w7IuRfa0K/pKZj6PJU1S6yb7sqZg==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.3.tgz", + "integrity": "sha512-XYewIme6CPxgyK9A4aBDUOwv88h8RHwCeLxuBQcOYY2kVhWIiQjFwdkODQPG0WZkRZxtwXk6wErIO80Nz1K8BA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.2", - "@angular-devkit/core": "16.2.2", - "@angular-devkit/schematics": "16.2.2", - "@schematics/angular": "16.2.2", + "@angular-devkit/architect": "0.1602.3", + "@angular-devkit/core": "16.2.3", + "@angular-devkit/schematics": "16.2.3", + "@schematics/angular": "16.2.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -303,9 +307,9 @@ } }, "node_modules/@angular/common": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.5.tgz", - "integrity": "sha512-MCPSZfPXTEqdkswPczivwjqV117YeVjObtyxZsDAwrTZHzYBtfQreQG1XJ1IRRgDncznP6ke0mdH9LyD2LgZKQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.6.tgz", + "integrity": "sha512-BjnahvtJHh2zXfCZjpWit+zMkggl/PrgUtPd02egzLmEKyXIMmQLYNpDZ+Pqgpb7eefU8yBPhL7WA2oKFjHjSg==", "dependencies": { "tslib": "^2.3.0" }, @@ -313,14 +317,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.5", + "@angular/core": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.5.tgz", - "integrity": "sha512-DpLfWWZFk4lbr81W7sLRt15+/nbyyqTvz+UmGcrSfKBTSbV0VSoUjC3XZeIdPWoIgQXiKUCpaC0YXw0BjaOl0g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.6.tgz", + "integrity": "sha512-FKv9isn8BdM9TydyhdqcFhFD8nn11+fGqg3qbIQnOlnLb0ryYign93zBmlx/qFu46PvPtTmhsa4saE2NwvrSbg==", "dependencies": { "tslib": "^2.3.0" }, @@ -328,7 +332,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.5" + "@angular/core": "16.2.6" }, "peerDependenciesMeta": { "@angular/core": { @@ -337,9 +341,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.5.tgz", - "integrity": "sha512-6TtyFxro4iukVXhLlzxz7sVCMfAlNQhSYnizIJRSW31uQ0Uku8rjlUmX1tCAmhW6CacLumiz2tcy04Xn/QFWyw==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.6.tgz", + "integrity": "sha512-rzyI4dKVj8T9dCnZCIffoxZ2PplYLmC9yd65VoaKxOQFxf/95/hgIRdt5kafjnZvzFN1qUbQuEfyviY+KFdQKg==", "dev": true, "dependencies": { "@babel/core": "7.22.5", @@ -360,7 +364,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.2.5", + "@angular/compiler": "16.2.6", "typescript": ">=4.9.3 <5.2" } }, @@ -404,9 +408,9 @@ } }, "node_modules/@angular/core": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.5.tgz", - "integrity": "sha512-Po2LMUnPg23D2qI7EYaoA4x3lRswx9nxfpwROzfFPbMNJ3JVbTK0HkTD2dFPGxRua2UjfJTb1um23tEGO4OGMQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.6.tgz", + "integrity": "sha512-F7kJbkVHLupdVQbwjjEuWp5rtxmfnL571VtqRN/8OJZAI2OjZjnSbL+FRZGEZHDmOZ2cNgPKpYt/d3nbK8hpSw==", "dependencies": { "tslib": "^2.3.0" }, @@ -419,9 +423,9 @@ } }, "node_modules/@angular/forms": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.5.tgz", - "integrity": "sha512-iYJImRji1OiYIcC2mDBcXhtvPfAoEGT+HqZpivu+/ZPLuf+QegC9+ktJw90SQXR+xccmpkUb9MsJ52SN2MgkPA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.6.tgz", + "integrity": "sha512-TsSpV6Oh0Z5WlCmRB6jEsChLA8ChBn8CY1uOkTh4YQEzdMCwvBvc1Q2DugER5iGvZU/hRNgjyHX7VR3ysB3JlQ==", "dependencies": { "tslib": "^2.3.0" }, @@ -429,16 +433,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/platform-browser": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.5.tgz", - "integrity": "sha512-p+1GH/M4Vwoyp7brKkNBcMTxscoZxA1zehetFlNr8kArXWiISgPolyqOVzvT6cycYKu5uSRLnvHOTDss6xrAuA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.6.tgz", + "integrity": "sha512-jXtarSZ/n6ytZQ9+Y0aDuazz5POz4UmLN3GxIWtc4kqPOQp4o3DCM16Ig4ioSm53Z/WSDASVaMwtRWN5SXCKfw==", "dependencies": { "tslib": "^2.3.0" }, @@ -446,9 +450,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "16.2.5", - "@angular/common": "16.2.5", - "@angular/core": "16.2.5" + "@angular/animations": "16.2.6", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6" }, "peerDependenciesMeta": { "@angular/animations": { @@ -457,9 +461,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.5.tgz", - "integrity": "sha512-kzC4z/KmLss8Du9uM1Q16r+3EqDExKKHnrb3G3tuEQ1jTvYCysdWoooVSBmtIlQUw13znpBm1B7XLoyviFvnwA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.6.tgz", + "integrity": "sha512-i3prfdjnOMMemQMLk7vywGueDsjRIcug+jNf4ZdSb4AEaAhv86mzt5z3iNNSSA3bec7oJfrxOayMz3o6zq3QXA==", "dependencies": { "tslib": "^2.3.0" }, @@ -467,16 +471,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/compiler": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5" + "@angular/common": "16.2.6", + "@angular/compiler": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6" } }, "node_modules/@angular/router": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.5.tgz", - "integrity": "sha512-5IXhe6G7zYFUwHSfUgPw+I/q6M1AcfSyaOVcjMFQ94bVSWEMq5KrGCDc8HQtkdw7GqJ4txwbyQKSKp7khpqShQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.6.tgz", + "integrity": "sha512-huORA6D1UriaswbvVgfxpYQJofZ3hSDdJYRMI4lDcu1n6CaCoYnj8E3rqaU5U1Va0OeFmxzOuXG+3WyL+YfZgg==", "dependencies": { "tslib": "^2.3.0" }, @@ -484,9 +488,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.5", - "@angular/core": "16.2.5", - "@angular/platform-browser": "16.2.5", + "@angular/common": "16.2.6", + "@angular/core": "16.2.6", + "@angular/platform-browser": "16.2.6", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -2845,9 +2849,9 @@ "dev": true }, "node_modules/@ngtools/webpack": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.2.tgz", - "integrity": "sha512-BDZ2yyXdzVE8kILOM0lhRpmKlvfLMluuZvqVa1r5dHkjCLbyOo1jXoYTCXvrQ2JU5GXc/MBBLXwmIHgtPWk8/A==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.3.tgz", + "integrity": "sha512-GkMGYMXL2tyxjjh7plKOFptJJPU2arzxLsYZs706InOJKmM9pE9prz//LohSdcXiPAw+S3Qfsc27k/VqNdKJxA==", "dev": true, "engines": { "node": "^16.14.0 || >=18.10.0", @@ -3044,13 +3048,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.2.tgz", - "integrity": "sha512-OqPhpodkQx9pzSz7H2AGeEbf3ut6WOkJFP2YlX2JIGholfG/0FQMJmfTEyRoFXCBeVIDGt3sOmlfK7An0PS8uA==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.3.tgz", + "integrity": "sha512-QZOh6iH3BQo4azmqGIoydW95KuxTGezTXl+cfekr4ru5IJ7FqCwrg4wQKWD8/3FkxakXjAFdqsWhlxn1kGtyqw==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.2", - "@angular-devkit/schematics": "16.2.2", + "@angular-devkit/core": "16.2.3", + "@angular-devkit/schematics": "16.2.3", "jsonc-parser": "3.2.0" }, "engines": { @@ -3305,9 +3309,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", - "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==", + "version": "20.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", "dev": true }, "node_modules/@types/qs": { @@ -4211,9 +4215,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.21.11", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", + "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", "dev": true, "funding": [ { @@ -4230,10 +4234,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001538", + "electron-to-chromium": "^1.4.526", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -4323,9 +4327,9 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", @@ -4409,9 +4413,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001535", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz", - "integrity": "sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg==", + "version": "1.0.30001538", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", + "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", "dev": true, "funding": [ { @@ -5369,9 +5373,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.523", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", - "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==", + "version": "1.4.527", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.527.tgz", + "integrity": "sha512-EafxEiEDzk2aLrdbtVczylHflHdHkNrpGNHIgDyA63sUQLQVS2ayj2hPw3RsVB42qkwURH+T2OxV7kGPUuYszA==", "dev": true }, "node_modules/emoji-regex": { @@ -6089,9 +6093,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -8431,6 +8435,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/monaco-editor": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==" + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -8539,6 +8548,19 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/ngx-monaco-editor-v2": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/ngx-monaco-editor-v2/-/ngx-monaco-editor-v2-16.0.1.tgz", + "integrity": "sha512-fhvqiQUtzEB3o6W1PrMzZkAM7N9owhoXiUF5Go/Bl/nOL90O22el+TUhszTz1o24ZQnPQZeNKhN7O+u/jVAWtg==", + "dependencies": { + "tslib": "^2.1.0" + }, + "peerDependencies": { + "@angular/common": "^16.0.4", + "@angular/core": "^16.0.4", + "monaco-editor": "^0.41.0" + } + }, "node_modules/nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -9774,9 +9796,9 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", @@ -10766,9 +10788,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", "dev": true }, "node_modules/spdy": { @@ -10923,6 +10945,22 @@ "node": ">=6" } }, + "node_modules/style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -11419,9 +11457,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -11806,9 +11844,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -12212,25 +12250,25 @@ } }, "@angular-devkit/architect": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.2.tgz", - "integrity": "sha512-JFIeKKW7V2+/C8+pTReM6gfQkVU9l1IR1OCb9vvHWTRvuTr7E5h2L1rUInnmLiRWkEvkYfG29B+UPpYlkVl9oQ==", + "version": "0.1602.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.3.tgz", + "integrity": "sha512-7f4U5LzAYRcQcOvRJwunSwLd5/nwbNxY/E4jTgwFxCNvCBSMysNJBi3g9v0t8zm2XYOv4ok5eYqIwriXVypRBg==", "dev": true, "requires": { - "@angular-devkit/core": "16.2.2", + "@angular-devkit/core": "16.2.3", "rxjs": "7.8.1" } }, "@angular-devkit/build-angular": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.2.tgz", - "integrity": "sha512-j2lni4mN6NaMLT85sJUPSz/pNuaTCAYG3EYUeuMRNkC5keH/f4W0Tiuq6DxY4OLEF1JnEnfkp+k0Z84mEti/xA==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.3.tgz", + "integrity": "sha512-GQo14ui3jGBa3ORslO9AcNLCmLuV6EohFk7KbHMTpTY1267z3kdkJfUXhwPKTYQX4ZvQZK2lHLMrSjpFQ5vtOQ==", "dev": true, "requires": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.2", - "@angular-devkit/build-webpack": "0.1602.2", - "@angular-devkit/core": "16.2.2", + "@angular-devkit/architect": "0.1602.3", + "@angular-devkit/build-webpack": "0.1602.3", + "@angular-devkit/core": "16.2.3", "@babel/core": "7.22.9", "@babel/generator": "7.22.9", "@babel/helper-annotate-as-pure": "7.22.5", @@ -12242,7 +12280,7 @@ "@babel/runtime": "7.22.6", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.2", + "@ngtools/webpack": "16.2.3", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -12303,19 +12341,19 @@ } }, "@angular-devkit/build-webpack": { - "version": "0.1602.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.2.tgz", - "integrity": "sha512-V9+tsBgNrXJPeabq9vJzN3Cfz9joaNOxs6l6M4XItcMGmAtzvxxGZ7qS5uRH1RE+SOMpYyh9uPY4QMHRNRD/gA==", + "version": "0.1602.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.3.tgz", + "integrity": "sha512-ls2aC7UvM748f/UqCDNsz9apWb4ArAKHtJ1Jwxx1DUQo+qT4c9/8WpiqxgTNkZTjCZbZZG1Ojub/rviw9Y88lA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1602.2", + "@angular-devkit/architect": "0.1602.3", "rxjs": "7.8.1" } }, "@angular-devkit/core": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.2.tgz", - "integrity": "sha512-6H4FsvP3rLJaGiWpIhCFPS7ZeNoM4sSrnFtRhhecu6s7MidzE4aqzuGdzJpzLammw1KL+DuTlN0gpLtM1Bvcwg==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.3.tgz", + "integrity": "sha512-oZLdg2XTx7likYAXRj1CU0XmrsCfe5f2grj3iwuI3OB1LXwwpdbHBztruj03y3yHES+TnO+dIbkvRnvMXs7uAA==", "dev": true, "requires": { "ajv": "8.12.0", @@ -12327,12 +12365,12 @@ } }, "@angular-devkit/schematics": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.2.tgz", - "integrity": "sha512-KeXIlibVrQEwIKbR9GViLKc3m1SXi/xuSXgIvSv+22FNu5i91ScsAhYLe65sDUL6m6MM1XQQMS46XN1Z9bRqQw==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.3.tgz", + "integrity": "sha512-+lBiHxi/C9HCfiCbtW25DldwvJDXXXv5oWw+Tg4s18BO/lYZLveGUEaZWu9ZJ5VIJ8GliUi2LohxhDxBkh4Oxg==", "dev": true, "requires": { - "@angular-devkit/core": "16.2.2", + "@angular-devkit/core": "16.2.3", "jsonc-parser": "3.2.0", "magic-string": "0.30.1", "ora": "5.4.1", @@ -12340,23 +12378,23 @@ } }, "@angular/animations": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.5.tgz", - "integrity": "sha512-2reD50S9zWvhewRvwl320iuRICN9s0fI+3nKULlwcyJ0praLRhJ1SnaAK3NEEu7MWo3n9sb3iVTzA6S9qZRJ4g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.6.tgz", + "integrity": "sha512-NHnHdZFKLr1PB8RhscjsE/DMSVHhtjCqc3bhtOiOMYfAgm4nYrSFvp6nAaT5OoMTeAWuM0n8/HvAiFweEQgVQA==", "requires": { "tslib": "^2.3.0" } }, "@angular/cli": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.2.tgz", - "integrity": "sha512-PmhR/NMVVCiATXxHLkVCV781Q5aa5DaYye9+plZGX3rdKTilEunRNIfT13w7IuRfa0K/pKZj6PJU1S6yb7sqZg==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.3.tgz", + "integrity": "sha512-XYewIme6CPxgyK9A4aBDUOwv88h8RHwCeLxuBQcOYY2kVhWIiQjFwdkODQPG0WZkRZxtwXk6wErIO80Nz1K8BA==", "dev": true, "requires": { - "@angular-devkit/architect": "0.1602.2", - "@angular-devkit/core": "16.2.2", - "@angular-devkit/schematics": "16.2.2", - "@schematics/angular": "16.2.2", + "@angular-devkit/architect": "0.1602.3", + "@angular-devkit/core": "16.2.3", + "@angular-devkit/schematics": "16.2.3", + "@schematics/angular": "16.2.3", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -12374,25 +12412,25 @@ } }, "@angular/common": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.5.tgz", - "integrity": "sha512-MCPSZfPXTEqdkswPczivwjqV117YeVjObtyxZsDAwrTZHzYBtfQreQG1XJ1IRRgDncznP6ke0mdH9LyD2LgZKQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.6.tgz", + "integrity": "sha512-BjnahvtJHh2zXfCZjpWit+zMkggl/PrgUtPd02egzLmEKyXIMmQLYNpDZ+Pqgpb7eefU8yBPhL7WA2oKFjHjSg==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.5.tgz", - "integrity": "sha512-DpLfWWZFk4lbr81W7sLRt15+/nbyyqTvz+UmGcrSfKBTSbV0VSoUjC3XZeIdPWoIgQXiKUCpaC0YXw0BjaOl0g==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.6.tgz", + "integrity": "sha512-FKv9isn8BdM9TydyhdqcFhFD8nn11+fGqg3qbIQnOlnLb0ryYign93zBmlx/qFu46PvPtTmhsa4saE2NwvrSbg==", "requires": { "tslib": "^2.3.0" } }, "@angular/compiler-cli": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.5.tgz", - "integrity": "sha512-6TtyFxro4iukVXhLlzxz7sVCMfAlNQhSYnizIJRSW31uQ0Uku8rjlUmX1tCAmhW6CacLumiz2tcy04Xn/QFWyw==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.6.tgz", + "integrity": "sha512-rzyI4dKVj8T9dCnZCIffoxZ2PplYLmC9yd65VoaKxOQFxf/95/hgIRdt5kafjnZvzFN1qUbQuEfyviY+KFdQKg==", "dev": true, "requires": { "@babel/core": "7.22.5", @@ -12439,41 +12477,41 @@ } }, "@angular/core": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.5.tgz", - "integrity": "sha512-Po2LMUnPg23D2qI7EYaoA4x3lRswx9nxfpwROzfFPbMNJ3JVbTK0HkTD2dFPGxRua2UjfJTb1um23tEGO4OGMQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.6.tgz", + "integrity": "sha512-F7kJbkVHLupdVQbwjjEuWp5rtxmfnL571VtqRN/8OJZAI2OjZjnSbL+FRZGEZHDmOZ2cNgPKpYt/d3nbK8hpSw==", "requires": { "tslib": "^2.3.0" } }, "@angular/forms": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.5.tgz", - "integrity": "sha512-iYJImRji1OiYIcC2mDBcXhtvPfAoEGT+HqZpivu+/ZPLuf+QegC9+ktJw90SQXR+xccmpkUb9MsJ52SN2MgkPA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.6.tgz", + "integrity": "sha512-TsSpV6Oh0Z5WlCmRB6jEsChLA8ChBn8CY1uOkTh4YQEzdMCwvBvc1Q2DugER5iGvZU/hRNgjyHX7VR3ysB3JlQ==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.5.tgz", - "integrity": "sha512-p+1GH/M4Vwoyp7brKkNBcMTxscoZxA1zehetFlNr8kArXWiISgPolyqOVzvT6cycYKu5uSRLnvHOTDss6xrAuA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.6.tgz", + "integrity": "sha512-jXtarSZ/n6ytZQ9+Y0aDuazz5POz4UmLN3GxIWtc4kqPOQp4o3DCM16Ig4ioSm53Z/WSDASVaMwtRWN5SXCKfw==", "requires": { "tslib": "^2.3.0" } }, "@angular/platform-browser-dynamic": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.5.tgz", - "integrity": "sha512-kzC4z/KmLss8Du9uM1Q16r+3EqDExKKHnrb3G3tuEQ1jTvYCysdWoooVSBmtIlQUw13znpBm1B7XLoyviFvnwA==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.6.tgz", + "integrity": "sha512-i3prfdjnOMMemQMLk7vywGueDsjRIcug+jNf4ZdSb4AEaAhv86mzt5z3iNNSSA3bec7oJfrxOayMz3o6zq3QXA==", "requires": { "tslib": "^2.3.0" } }, "@angular/router": { - "version": "16.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.5.tgz", - "integrity": "sha512-5IXhe6G7zYFUwHSfUgPw+I/q6M1AcfSyaOVcjMFQ94bVSWEMq5KrGCDc8HQtkdw7GqJ4txwbyQKSKp7khpqShQ==", + "version": "16.2.6", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.6.tgz", + "integrity": "sha512-huORA6D1UriaswbvVgfxpYQJofZ3hSDdJYRMI4lDcu1n6CaCoYnj8E3rqaU5U1Va0OeFmxzOuXG+3WyL+YfZgg==", "requires": { "tslib": "^2.3.0" } @@ -14044,9 +14082,9 @@ "dev": true }, "@ngtools/webpack": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.2.tgz", - "integrity": "sha512-BDZ2yyXdzVE8kILOM0lhRpmKlvfLMluuZvqVa1r5dHkjCLbyOo1jXoYTCXvrQ2JU5GXc/MBBLXwmIHgtPWk8/A==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.3.tgz", + "integrity": "sha512-GkMGYMXL2tyxjjh7plKOFptJJPU2arzxLsYZs706InOJKmM9pE9prz//LohSdcXiPAw+S3Qfsc27k/VqNdKJxA==", "dev": true, "requires": {} }, @@ -14186,13 +14224,13 @@ "optional": true }, "@schematics/angular": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.2.tgz", - "integrity": "sha512-OqPhpodkQx9pzSz7H2AGeEbf3ut6WOkJFP2YlX2JIGholfG/0FQMJmfTEyRoFXCBeVIDGt3sOmlfK7An0PS8uA==", + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.3.tgz", + "integrity": "sha512-QZOh6iH3BQo4azmqGIoydW95KuxTGezTXl+cfekr4ru5IJ7FqCwrg4wQKWD8/3FkxakXjAFdqsWhlxn1kGtyqw==", "dev": true, "requires": { - "@angular-devkit/core": "16.2.2", - "@angular-devkit/schematics": "16.2.2", + "@angular-devkit/core": "16.2.3", + "@angular-devkit/schematics": "16.2.3", "jsonc-parser": "3.2.0" } }, @@ -14417,9 +14455,9 @@ "dev": true }, "@types/node": { - "version": "20.6.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.2.tgz", - "integrity": "sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==", + "version": "20.6.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", + "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", "dev": true }, "@types/qs": { @@ -15148,15 +15186,15 @@ "dev": true }, "browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.21.11", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.11.tgz", + "integrity": "sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001538", + "electron-to-chromium": "^1.4.526", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" } }, "buffer": { @@ -15220,9 +15258,9 @@ } }, "glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", "dev": true, "requires": { "foreground-child": "^3.1.0", @@ -15278,9 +15316,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001535", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001535.tgz", - "integrity": "sha512-48jLyUkiWFfhm/afF7cQPqPjaUmSraEhK4j+FCTJpgnGGEZHqyLe3hmWH7lIooZdSzXL0ReMvHz0vKDoTBsrwg==", + "version": "1.0.30001538", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001538.tgz", + "integrity": "sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==", "dev": true }, "chalk": { @@ -16005,9 +16043,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.4.523", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.523.tgz", - "integrity": "sha512-9AreocSUWnzNtvLcbpng6N+GkXnCcBR80IQkxRC9Dfdyg4gaWNUPBujAHUpKkiUkoSoR9UlhA4zD/IgBklmhzg==", + "version": "1.4.527", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.527.tgz", + "integrity": "sha512-EafxEiEDzk2aLrdbtVczylHflHdHkNrpGNHIgDyA63sUQLQVS2ayj2hPw3RsVB42qkwURH+T2OxV7kGPUuYszA==", "dev": true }, "emoji-regex": { @@ -16576,9 +16614,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true }, "foreground-child": { @@ -18332,6 +18370,11 @@ "minimist": "^1.2.6" } }, + "monaco-editor": { + "version": "0.41.0", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.41.0.tgz", + "integrity": "sha512-1o4olnZJsiLmv5pwLEAmzHTE/5geLKQ07BrGxlF4Ri/AXAc2yyDGZwHjiTqD8D/ROKUZmwMA28A+yEowLNOEcA==" + }, "mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", @@ -18412,6 +18455,14 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "ngx-monaco-editor-v2": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/ngx-monaco-editor-v2/-/ngx-monaco-editor-v2-16.0.1.tgz", + "integrity": "sha512-fhvqiQUtzEB3o6W1PrMzZkAM7N9owhoXiUF5Go/Bl/nOL90O22el+TUhszTz1o24ZQnPQZeNKhN7O+u/jVAWtg==", + "requires": { + "tslib": "^2.1.0" + } + }, "nice-napi": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", @@ -19286,9 +19337,9 @@ } }, "glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.5.tgz", + "integrity": "sha512-bYUpUD7XDEHI4Q2O5a7PXGvyw4deKR70kHiDxzQbe925wbZknhOzUt2xBgTkYL6RBcVeXYuD9iNYeqoWbBZQnA==", "dev": true, "requires": { "foreground-child": "^3.1.0", @@ -20042,9 +20093,9 @@ } }, "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.15.tgz", + "integrity": "sha512-lpT8hSQp9jAKp9mhtBU4Xjon8LPGBvLIuBiSVhMEtmLecTh2mO0tlqrAMp47tBXzMr13NJMQ2lf7RpQGLJ3HsQ==", "dev": true }, "spdy": { @@ -20169,6 +20220,13 @@ "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, + "style-loader": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz", + "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==", + "dev": true, + "requires": {} + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -20516,9 +20574,9 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "requires": { "escalade": "^3.1.1", @@ -20792,9 +20850,9 @@ } }, "ws": { - "version": "8.14.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.1.tgz", - "integrity": "sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "requires": {} } diff --git a/sandkasten/package.json b/sandkasten/package.json index e2d2ba6..95555fb 100644 --- a/sandkasten/package.json +++ b/sandkasten/package.json @@ -18,6 +18,8 @@ "@angular/platform-browser": "^16.2.0", "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.0", + "monaco-editor": "^0.41.0", + "ngx-monaco-editor-v2": "^16.0.1", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -27,12 +29,14 @@ "@angular/cli": "~16.2.2", "@angular/compiler-cli": "^16.2.0", "@types/jasmine": "~4.3.0", + "css-loader": "^6.8.1", "jasmine-core": "~4.6.0", "karma": "~6.4.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", + "style-loader": "^3.3.3", "typescript": "~5.1.3" } } diff --git a/sandkasten/src/app/app.component.ts b/sandkasten/src/app/app.component.ts index cb3f820..68478a8 100644 --- a/sandkasten/src/app/app.component.ts +++ b/sandkasten/src/app/app.component.ts @@ -6,5 +6,4 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.css'] }) export class AppComponent { - } diff --git a/sandkasten/src/app/app.module.ts b/sandkasten/src/app/app.module.ts index 27535a2..a706588 100644 --- a/sandkasten/src/app/app.module.ts +++ b/sandkasten/src/app/app.module.ts @@ -8,6 +8,52 @@ import { FooterComponent } from './footer/footer.component'; import { EditorComponent } from './editor/editor.component'; import { OutputComponent } from './output/output.component'; import { LandingPageComponent } from './landing-page/landing-page.component'; +import { MonacoEditorModule, NgxMonacoEditorConfig } from 'ngx-monaco-editor-v2'; +import { FormsModule } from '@angular/forms'; +import * as monaco from 'monaco-editor'; + +export function onMonacoLoad() { + + console.log((window as any).monaco); + + const uri = monaco.Uri.parse('a://b/foo.json'); + monaco.languages.json.jsonDefaults.setDiagnosticsOptions({ + validate: true, + schemas: [{ + uri: 'http://myserver/foo-schema.json', + fileMatch: [uri.toString()], + schema: { + type: 'object', + properties: { + p1: { + enum: ['v1', 'v2'] + }, + p2: { + $ref: 'http://myserver/bar-schema.json' + } + } + } + }, { + uri: 'http://myserver/bar-schema.json', + fileMatch: [uri.toString()], + schema: { + type: 'object', + properties: { + q1: { + enum: ['x1', 'x2'] + } + } + } + }] + }); + +} + +const monacoConfig: NgxMonacoEditorConfig = { + baseUrl: 'sandkasten/assets', // configure base path for monaco editor. Starting with version 8.0.0 it defaults to './assets'. Previous releases default to '/assets' + defaultOptions: { scrollBeyondLastLine: false }, // pass default options to be used + onMonacoLoad +}; @NgModule({ declarations: [ @@ -20,7 +66,9 @@ import { LandingPageComponent } from './landing-page/landing-page.component'; ], imports: [ BrowserModule, - AppRoutingModule + AppRoutingModule, + FormsModule, + MonacoEditorModule.forRoot(monacoConfig) ], providers: [], bootstrap: [AppComponent] diff --git a/sandkasten/src/app/editor/editor.component.css b/sandkasten/src/app/editor/editor.component.css index ca8f153..1384ffb 100644 --- a/sandkasten/src/app/editor/editor.component.css +++ b/sandkasten/src/app/editor/editor.component.css @@ -2,4 +2,10 @@ background-color: #cccccc; min-height: 80vh; width: 100%; -} \ No newline at end of file +} + +.my-code-editor { + .editor-container { + height: calc(100vh - 100px); + } + } \ No newline at end of file diff --git a/sandkasten/src/app/editor/editor.component.html b/sandkasten/src/app/editor/editor.component.html index 92d0eec..a42b55a 100644 --- a/sandkasten/src/app/editor/editor.component.html +++ b/sandkasten/src/app/editor/editor.component.html @@ -1,10 +1,17 @@
- + > --> + +
+ +
+ + +

Loading: {{ loadingProgress }}%

diff --git a/sandkasten/src/app/editor/editor.component.ts b/sandkasten/src/app/editor/editor.component.ts index ed58f23..1d670a9 100644 --- a/sandkasten/src/app/editor/editor.component.ts +++ b/sandkasten/src/app/editor/editor.component.ts @@ -1,5 +1,7 @@ import { Component, OnInit } from '@angular/core'; import { Router } from '@angular/router'; +import { DiffEditorModel } from 'ngx-monaco-editor-v2'; +import * as monacoEditor from 'monaco-editor'; @Component({ selector: 'app-editor', @@ -32,4 +34,26 @@ export class EditorComponent implements OnInit{ } }, 50); // Augmenter la valeur pour ralentir la progression du chargement si nécessaire } + + editorOptions = {theme: 'vs-dark', language: 'javascript'}; + code: string= 'function x() {\nconsole.log("Hello world!");\n}'; + + options = { + theme: 'vs-dark' + }; + originalModel: DiffEditorModel = { + code: 'heLLo world!', + language: 'text/plain' + }; + + modifiedModel: DiffEditorModel = { + code: 'hello orlando!', + language: 'text/plain' + }; + + onInit(editor: monacoEditor.editor.IStandaloneCodeEditor) { + let line = editor.getPosition(); + console.log(line); + } + } diff --git a/sandkasten/webpack.config.js b/sandkasten/webpack.config.js new file mode 100644 index 0000000..b9503ce --- /dev/null +++ b/sandkasten/webpack.config.js @@ -0,0 +1,10 @@ +module.exports = { + module: { + rules: [ + { + test: /\.css$/, + use: ['style-loader', 'css-loader'], + }, + ], + }, + };