mirror of
https://github.com/danbulant/monaco-yaml
synced 2026-06-23 16:42:09 +00:00
Merge pull request #86 from remcohaszing/example-typescript
Show problems panel in example
This commit is contained in:
commit
ecd189685e
7 changed files with 131 additions and 8 deletions
|
|
@ -14,6 +14,8 @@
|
||||||
"mini-css-extract-plugin": "^2.2.0",
|
"mini-css-extract-plugin": "^2.2.0",
|
||||||
"monaco-editor": "^0.27.0",
|
"monaco-editor": "^0.27.0",
|
||||||
"monaco-yaml": "file:../..",
|
"monaco-yaml": "file:../..",
|
||||||
|
"ts-loader": "^9.2.5",
|
||||||
|
"typescript": "^4.3.5",
|
||||||
"webpack": "^5.48.0",
|
"webpack": "^5.48.0",
|
||||||
"webpack-cli": "^4.7.2",
|
"webpack-cli": "^4.7.2",
|
||||||
"webpack-dev-server": "^3.11.2"
|
"webpack-dev-server": "^3.11.2"
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,19 @@
|
||||||
:root {
|
:root {
|
||||||
--background-color: hsl(0, 0%, 96%);
|
--background-color: hsl(0, 0%, 96%);
|
||||||
--editor-background: hsl(60, 100%, 100%);
|
--editor-background: hsl(60, 100%, 100%);
|
||||||
|
--foreground-color: hsl(0, 0%, 0%);
|
||||||
--primary-color: hsl(189, 100%, 63%);
|
--primary-color: hsl(189, 100%, 63%);
|
||||||
--shadow-color: hsla(0, 0%, 27%, 0.239);
|
--shadow-color: hsla(0, 0%, 27%, 0.239);
|
||||||
|
--warning-color: hsl(49, 100%, 40%);
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
:root {
|
:root {
|
||||||
--background-color: hsl(0, 0%, 23%);
|
--background-color: hsl(0, 0%, 23%);
|
||||||
--editor-background: hsl(0, 0%, 12%);
|
--editor-background: hsl(0, 0%, 12%);
|
||||||
|
--foreground-color: hsl(0, 0%, 100%);
|
||||||
--shadow-color: hsl(0, 0%, 43%);
|
--shadow-color: hsl(0, 0%, 43%);
|
||||||
|
--warning-color: hsl(49, 100%, 40%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -47,12 +51,40 @@ nav {
|
||||||
}
|
}
|
||||||
|
|
||||||
.editor-wrapper {
|
.editor-wrapper {
|
||||||
|
background: var(--editor-background);
|
||||||
|
box-shadow: 0 0 10px var(--shadow-color);
|
||||||
|
display: flex;
|
||||||
flex: 1 1 auto;
|
flex: 1 1 auto;
|
||||||
padding: 1.5rem;
|
flex-flow: column;
|
||||||
|
margin: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
#editor {
|
#editor {
|
||||||
background: var(--editor-background);
|
flex: 1 1 auto;
|
||||||
height: 100%;
|
}
|
||||||
box-shadow: 0 0 10px var(--shadow-color);
|
|
||||||
|
#problems {
|
||||||
|
border-top: 1px solid var(--shadow-color);
|
||||||
|
flex: 0 0 20vh;
|
||||||
|
color: var(--foreground-color);
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
|
||||||
|
.problem {
|
||||||
|
align-items: center;
|
||||||
|
cursor: pointer;
|
||||||
|
display: flex;
|
||||||
|
padding: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.problem:hover {
|
||||||
|
background-color: var(--shadow-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
.problem-text {
|
||||||
|
margin-left: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.problem .codicon-warning {
|
||||||
|
color: var(--warning-color);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,7 @@
|
||||||
</nav>
|
</nav>
|
||||||
<div class="editor-wrapper">
|
<div class="editor-wrapper">
|
||||||
<div id="editor"></div>
|
<div id="editor"></div>
|
||||||
|
<div id="problems"></div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,18 @@
|
||||||
import './index.css';
|
import './index.css';
|
||||||
|
|
||||||
import { editor } from 'monaco-editor/esm/vs/editor/editor.api';
|
import { editor, Environment } from 'monaco-editor/esm/vs/editor/editor.api';
|
||||||
import { setDiagnosticsOptions } from 'monaco-yaml';
|
import { setDiagnosticsOptions } from 'monaco-yaml';
|
||||||
|
|
||||||
// NOTE: This will give you all editor featues. If you would prefer to limit to only the editor
|
// NOTE: This will give you all editor featues. If you would prefer to limit to only the editor
|
||||||
// features you want to use, import them each individually. See this example: (https://github.com/microsoft/monaco-editor-samples/blob/main/browser-esm-webpack-small/index.js#L1-L91)
|
// features you want to use, import them each individually. See this example: (https://github.com/microsoft/monaco-editor-samples/blob/main/browser-esm-webpack-small/index.js#L1-L91)
|
||||||
import 'monaco-editor';
|
import 'monaco-editor';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
interface Window {
|
||||||
|
MonacoEnvironment: Environment;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
window.MonacoEnvironment = {
|
window.MonacoEnvironment = {
|
||||||
getWorker(moduleId, label) {
|
getWorker(moduleId, label) {
|
||||||
switch (label) {
|
switch (label) {
|
||||||
|
|
@ -128,9 +134,37 @@ formatting: Formatting is supported too! Under the hood this is powered by
|
||||||
|
|
||||||
`.replace(/:$/m, ': ');
|
`.replace(/:$/m, ': ');
|
||||||
|
|
||||||
editor.create(document.getElementById('editor'), {
|
const ed = editor.create(document.getElementById('editor'), {
|
||||||
automaticLayout: true,
|
automaticLayout: true,
|
||||||
value,
|
value,
|
||||||
language: 'yaml',
|
language: 'yaml',
|
||||||
theme: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'vs-dark' : 'vs-light',
|
theme: window.matchMedia('(prefers-color-scheme: dark)').matches ? 'vs-dark' : 'vs-light',
|
||||||
});
|
});
|
||||||
|
|
||||||
|
editor.onDidChangeMarkers(([resource]) => {
|
||||||
|
const problems = document.getElementById('problems');
|
||||||
|
const markers = editor.getModelMarkers({ resource });
|
||||||
|
while (problems.lastChild) {
|
||||||
|
problems.lastChild.remove();
|
||||||
|
}
|
||||||
|
for (const marker of markers) {
|
||||||
|
const wrapper = document.createElement('div');
|
||||||
|
wrapper.setAttribute('role', 'button');
|
||||||
|
const codicon = document.createElement('div');
|
||||||
|
const text = document.createElement('div');
|
||||||
|
wrapper.classList.add('problem');
|
||||||
|
codicon.classList.add('codicon', 'codicon-warning');
|
||||||
|
text.classList.add('problem-text');
|
||||||
|
text.textContent = marker.message;
|
||||||
|
wrapper.append(codicon, text);
|
||||||
|
wrapper.addEventListener(
|
||||||
|
'click',
|
||||||
|
() => {
|
||||||
|
ed.setPosition({ lineNumber: marker.startLineNumber, column: marker.startColumn });
|
||||||
|
ed.focus();
|
||||||
|
},
|
||||||
|
false,
|
||||||
|
);
|
||||||
|
problems.append(wrapper);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -7,6 +7,7 @@ module.exports = {
|
||||||
filename: '[contenthash].js',
|
filename: '[contenthash].js',
|
||||||
},
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
|
extensions: ['.mjs', '.js', '.ts'],
|
||||||
fallback: {
|
fallback: {
|
||||||
// Yaml-ast-parser-custom-tags imports buffer. This can be omitted safely.
|
// Yaml-ast-parser-custom-tags imports buffer. This can be omitted safely.
|
||||||
buffer: false,
|
buffer: false,
|
||||||
|
|
@ -23,6 +24,11 @@ module.exports = {
|
||||||
test: /\.(svg|ttf)$/,
|
test: /\.(svg|ttf)$/,
|
||||||
type: 'asset',
|
type: 'asset',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
test: /\.ts$/,
|
||||||
|
loader: 'ts-loader',
|
||||||
|
options: { transpileOnly: true },
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
optimization: {
|
optimization: {
|
||||||
|
|
|
||||||
50
package-lock.json
generated
50
package-lock.json
generated
|
|
@ -8,7 +8,6 @@
|
||||||
"": {
|
"": {
|
||||||
"name": "monaco-yaml",
|
"name": "monaco-yaml",
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"examples/*"
|
"examples/*"
|
||||||
|
|
@ -46,6 +45,8 @@
|
||||||
"mini-css-extract-plugin": "^2.2.0",
|
"mini-css-extract-plugin": "^2.2.0",
|
||||||
"monaco-editor": "^0.27.0",
|
"monaco-editor": "^0.27.0",
|
||||||
"monaco-yaml": "file:../..",
|
"monaco-yaml": "file:../..",
|
||||||
|
"ts-loader": "^9.2.5",
|
||||||
|
"typescript": "^4.3.5",
|
||||||
"webpack": "^5.48.0",
|
"webpack": "^5.48.0",
|
||||||
"webpack-cli": "^4.7.2",
|
"webpack-cli": "^4.7.2",
|
||||||
"webpack-dev-server": "^3.11.2"
|
"webpack-dev-server": "^3.11.2"
|
||||||
|
|
@ -10492,6 +10493,25 @@
|
||||||
"node": ">=0.6"
|
"node": ">=0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/ts-loader": {
|
||||||
|
"version": "9.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz",
|
||||||
|
"integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==",
|
||||||
|
"dev": true,
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"enhanced-resolve": "^5.0.0",
|
||||||
|
"micromatch": "^4.0.0",
|
||||||
|
"semver": "^7.3.4"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12.0.0"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"typescript": "*",
|
||||||
|
"webpack": "^5.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/tsconfig-paths": {
|
"node_modules/tsconfig-paths": {
|
||||||
"version": "3.10.1",
|
"version": "3.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
||||||
|
|
@ -25134,6 +25154,18 @@
|
||||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
|
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ts-loader": {
|
||||||
|
"version": "9.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz",
|
||||||
|
"integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"enhanced-resolve": "^5.0.0",
|
||||||
|
"micromatch": "^4.0.0",
|
||||||
|
"semver": "^7.3.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tsconfig-paths": {
|
"tsconfig-paths": {
|
||||||
"version": "3.10.1",
|
"version": "3.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
||||||
|
|
@ -25779,6 +25811,8 @@
|
||||||
"mini-css-extract-plugin": "^2.2.0",
|
"mini-css-extract-plugin": "^2.2.0",
|
||||||
"monaco-editor": "^0.27.0",
|
"monaco-editor": "^0.27.0",
|
||||||
"monaco-yaml": "file:../..",
|
"monaco-yaml": "file:../..",
|
||||||
|
"ts-loader": "^9.2.5",
|
||||||
|
"typescript": "^4.3.5",
|
||||||
"webpack": "^5.48.0",
|
"webpack": "^5.48.0",
|
||||||
"webpack-cli": "^4.7.2",
|
"webpack-cli": "^4.7.2",
|
||||||
"webpack-dev-server": "^3.11.2"
|
"webpack-dev-server": "^3.11.2"
|
||||||
|
|
@ -28815,6 +28849,18 @@
|
||||||
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
|
"integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ts-loader": {
|
||||||
|
"version": "9.2.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.5.tgz",
|
||||||
|
"integrity": "sha512-al/ATFEffybdRMUIr5zMEWQdVnCGMUA9d3fXJ8dBVvBlzytPvIszoG9kZoR+94k6/i293RnVOXwMaWbXhNy9pQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"enhanced-resolve": "^5.0.0",
|
||||||
|
"micromatch": "^4.0.0",
|
||||||
|
"semver": "^7.3.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"tsconfig-paths": {
|
"tsconfig-paths": {
|
||||||
"version": "3.10.1",
|
"version": "3.10.1",
|
||||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz",
|
||||||
|
|
@ -29460,6 +29506,8 @@
|
||||||
"mini-css-extract-plugin": "^2.2.0",
|
"mini-css-extract-plugin": "^2.2.0",
|
||||||
"monaco-editor": "^0.27.0",
|
"monaco-editor": "^0.27.0",
|
||||||
"monaco-yaml": "file:../..",
|
"monaco-yaml": "file:../..",
|
||||||
|
"ts-loader": "^9.2.5",
|
||||||
|
"typescript": "^4.3.5",
|
||||||
"webpack": "^5.48.0",
|
"webpack": "^5.48.0",
|
||||||
"webpack-cli": "^4.7.2",
|
"webpack-cli": "^4.7.2",
|
||||||
"webpack-dev-server": "^3.11.2"
|
"webpack-dev-server": "^3.11.2"
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
"declaration": true,
|
"declaration": true,
|
||||||
"forceConsistentCasingInFileNames": true,
|
"forceConsistentCasingInFileNames": true,
|
||||||
"downlevelIteration": true,
|
"downlevelIteration": true,
|
||||||
"lib": ["dom", "es2017"],
|
"lib": ["dom", "dom.iterable", "es2017"],
|
||||||
"module": "esnext",
|
"module": "esnext",
|
||||||
"moduleResolution": "node",
|
"moduleResolution": "node",
|
||||||
"noEmit": true,
|
"noEmit": true,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue