@pb33f/cowboy-components 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/css.worker-CTSQecos.js +84 -0
- package/dist/assets/editor.worker-CYC0jP-p.js +12 -0
- package/dist/assets/equalizer.worker-CdIiiqfH.js +1 -0
- package/dist/assets/html.worker-C1BIaUKh.js +461 -0
- package/dist/assets/json.worker-BCyBlh8h.js +49 -0
- package/dist/assets/rule-documentation.worker-B7xOWY5M.js +1 -0
- package/dist/components/credit-ticker/credit-ticker.css.d.ts +2 -0
- package/dist/components/credit-ticker/credit-ticker.css.js +36 -0
- package/dist/components/credit-ticker/credit-ticker.d.ts +14 -0
- package/dist/components/credit-ticker/credit-ticker.js +88 -0
- package/dist/components/editor/editor-breadcrumb.css.d.ts +2 -0
- package/dist/components/editor/editor-breadcrumb.css.js +49 -0
- package/dist/components/editor/editor-breadcrumb.d.ts +9 -0
- package/dist/components/editor/editor-breadcrumb.js +60 -0
- package/dist/components/editor/editor.css.d.ts +2 -0
- package/dist/components/editor/editor.css.js +62 -0
- package/dist/components/editor/editor.d.ts +25 -4
- package/dist/components/editor/editor.js +412 -76
- package/dist/components/manage-ruleset/manage-ruleset.css.js +5 -0
- package/dist/components/manage-ruleset/manage-ruleset.js +8 -6
- package/dist/components/model-icon/model-icon.d.ts +7 -0
- package/dist/components/model-icon/model-icon.js +56 -7
- package/dist/components/model-renderer/clickable-ref.d.ts +2 -2
- package/dist/components/model-renderer/clickable-ref.js +5 -4
- package/dist/components/model-renderer/header.js +10 -10
- package/dist/components/model-renderer/operation.js +2 -2
- package/dist/components/model-renderer/rendered-node.css.js +1 -1
- package/dist/components/model-renderer/schema.js +1 -1
- package/dist/components/model-tree/tree.css.js +1 -0
- package/dist/components/model-tree/tree.d.ts +8 -0
- package/dist/components/model-tree/tree.js +232 -24
- package/dist/components/paginator/paginator.css.js +6 -2
- package/dist/components/paginator/paginator.d.ts +1 -0
- package/dist/components/paginator/paginator.js +8 -4
- package/dist/components/problem-list/details-drawer.css.js +1 -1
- package/dist/components/problem-list/problem-item.js +6 -3
- package/dist/components/problem-list/problem-label-view-filter.d.ts +2 -1
- package/dist/components/problem-list/problem-label-view-filter.js +1 -0
- package/dist/components/problem-list/problem-list.d.ts +1 -0
- package/dist/components/problem-list/problem-list.js +19 -1
- package/dist/components/problem-list/problem-mainview.css.js +1 -1
- package/dist/components/problem-list/problem-mainview.js +6 -0
- package/dist/components/problem-list/problem-sort-filter.d.ts +2 -1
- package/dist/components/problem-list/problem-sort-filter.js +1 -0
- package/dist/components/problems-overview/diagnostic-evaluation.css.js +14 -4
- package/dist/components/problems-overview/diagnostic-evaluation.js +42 -1
- package/dist/components/problems-overview/problems-overview.css.js +1 -0
- package/dist/components/the-doctor/nuke-workspace.d.ts +13 -0
- package/dist/components/the-doctor/nuke-workspace.js +70 -0
- package/dist/components/the-doctor/sparks.d.ts +1 -0
- package/dist/components/the-doctor/sparks.js +11 -2
- package/dist/components/the-doctor/status-bar.css.js +6 -5
- package/dist/components/the-doctor/the-doctor.css.js +117 -16
- package/dist/components/the-doctor/the-doctor.d.ts +70 -21
- package/dist/components/the-doctor/the-doctor.js +1026 -169
- package/dist/components/the-doctor/upload-archive.css.d.ts +2 -0
- package/dist/components/the-doctor/upload-archive.css.js +98 -0
- package/dist/components/the-doctor/upload-archive.d.ts +33 -0
- package/dist/components/the-doctor/upload-archive.js +281 -0
- package/dist/components/visualizer/equalizer.d.ts +3 -1
- package/dist/components/visualizer/equalizer.js +55 -31
- package/dist/components/visualizer/explorer.js +6 -5
- package/dist/cowboy-components.umd.cjs +1846 -1273
- package/dist/css/hr.css.d.ts +2 -0
- package/dist/css/hr.css.js +12 -0
- package/dist/css/pb33f-theme.css +1 -0
- package/dist/events/doctor.d.ts +19 -1
- package/dist/events/doctor.js +5 -0
- package/dist/model/channels.d.ts +1 -0
- package/dist/model/channels.js +1 -0
- package/dist/model/graph.d.ts +17 -0
- package/dist/model/graph.js +17 -1
- package/dist/model/link.d.ts +8 -0
- package/dist/model/node_type.d.ts +22 -1
- package/dist/model/node_type.js +22 -0
- package/dist/model/panel-state.d.ts +5 -0
- package/dist/model/panel-state.js +1 -0
- package/dist/model/problem.d.ts +3 -1
- package/dist/model/problem.js +4 -2
- package/dist/model/rolodex.d.ts +34 -0
- package/dist/model/rolodex.js +1 -0
- package/dist/services/linting-service.d.ts +1 -1
- package/dist/services/linting-service.js +23 -11
- package/dist/services/model-service.d.ts +8 -1
- package/dist/services/model-service.js +127 -0
- package/dist/style.css +1 -1
- package/dist/workers/equalizer.worker.js +4 -3
- package/dist/workers/rule-documentation.worker.d.ts +2 -2
- package/dist/workers/rule-documentation.worker.js +26 -15
- package/package.json +3 -3
- package/dist/assets/css.worker-B_qZXUzt.js +0 -84
- package/dist/assets/editor.worker-HEmB0D7P.js +0 -11
- package/dist/assets/equalizer.worker-icLzyXQ7.js +0 -1
- package/dist/assets/html.worker-D3WUrk8Q.js +0 -458
- package/dist/assets/json.worker-CAhUaBo4.js +0 -42
- package/dist/assets/rule-documentation.worker-D39NS8Lx.js +0 -1
|
@@ -4,14 +4,12 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import {
|
|
8
|
-
import { customElement, property } from "lit/decorators.js";
|
|
7
|
+
import { html, LitElement } from "lit";
|
|
8
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
9
9
|
import { createRef, ref } from "lit/directives/ref.js";
|
|
10
10
|
// -- Monaco Editor Imports --
|
|
11
11
|
import * as monaco from "monaco-editor";
|
|
12
12
|
// @ts-ignore
|
|
13
|
-
import styles from "monaco-editor/min/vs/editor/editor.main.css?inline";
|
|
14
|
-
// @ts-ignore
|
|
15
13
|
import editorWorker from "monaco-editor/esm/vs/editor/editor.worker.js?worker";
|
|
16
14
|
// @ts-ignore
|
|
17
15
|
import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker.js?worker";
|
|
@@ -19,7 +17,9 @@ import htmlWorker from "monaco-editor/esm/vs/language/html/html.worker.js?worker
|
|
|
19
17
|
import cssWorker from "monaco-editor/esm/vs/language/css/css.worker.js?worker";
|
|
20
18
|
// @ts-ignore
|
|
21
19
|
import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker.js?worker";
|
|
22
|
-
import { EditorClicked, EditorUpdated } from "../../events/doctor.js";
|
|
20
|
+
import { DocumentReferenceClicked, EditorClicked, EditorUpdated } from "../../events/doctor.js";
|
|
21
|
+
import { SpecEditorBreadcrumb } from "./editor-breadcrumb.js";
|
|
22
|
+
import editorCss from "./editor.css.js";
|
|
23
23
|
// @ts-ignore
|
|
24
24
|
self.MonacoEnvironment = {
|
|
25
25
|
getWorker(_, label) {
|
|
@@ -35,18 +35,202 @@ self.MonacoEnvironment = {
|
|
|
35
35
|
return new editorWorker();
|
|
36
36
|
},
|
|
37
37
|
};
|
|
38
|
+
const editorGreen = '#00FF00FF';
|
|
39
|
+
const editorGreenDim = '#008a00';
|
|
40
|
+
const editorRed = '#ff3c74';
|
|
41
|
+
const editorBrown = '#004f0d';
|
|
42
|
+
const editorBlue = '#62C4FFFF';
|
|
43
|
+
const editorPink = '#E400FB';
|
|
44
|
+
const Alive = 'pb33f';
|
|
45
|
+
const Dead = 'dead';
|
|
46
|
+
function generatePb33fTheme() {
|
|
47
|
+
return {
|
|
48
|
+
base: 'vs-dark',
|
|
49
|
+
renderSideBySide: false,
|
|
50
|
+
inherit: true,
|
|
51
|
+
rules: [
|
|
52
|
+
{
|
|
53
|
+
"foreground": "E400FB",
|
|
54
|
+
"token": "string"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"foreground": "fddb00",
|
|
58
|
+
"token": "number"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"foreground": "62C4FF",
|
|
62
|
+
"token": "type"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"foreground": "fddb00",
|
|
66
|
+
"token": "keyword"
|
|
67
|
+
},
|
|
68
|
+
{ token: 'constant', foreground: 'ff0000' },
|
|
69
|
+
{
|
|
70
|
+
"foreground": "787878",
|
|
71
|
+
"token": "comment",
|
|
72
|
+
"fontStyle": "italic"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"foreground": "787878",
|
|
76
|
+
"token": "delimiter.curly",
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"foreground": "787878",
|
|
80
|
+
"token": "delimiter.parenthesis",
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"foreground": "787878",
|
|
84
|
+
"token": "delimiter.square",
|
|
85
|
+
},
|
|
86
|
+
],
|
|
87
|
+
colors: {
|
|
88
|
+
'editor.foreground': editorBlue,
|
|
89
|
+
'editor.background': '#0d1117',
|
|
90
|
+
'editorCursor.foreground': editorBlue,
|
|
91
|
+
'editor.lineHighlightBackground': '#E400FB30',
|
|
92
|
+
'editorLineNumber.foreground': '#6368747F',
|
|
93
|
+
'editorLineNumber.activeForeground': editorPink,
|
|
94
|
+
'editor.inactiveSelectionBackground': '#FF3C742D',
|
|
95
|
+
'diffEditor.removedTextBackground': '#FF3C741A',
|
|
96
|
+
'diffEditor.insertedTextBackground': '#62C4FF1A',
|
|
97
|
+
'editorLink.activeForeground': editorRed,
|
|
98
|
+
'editorHoverWidget.background': '#0d1117',
|
|
99
|
+
'editorHoverWidget.border': editorPink,
|
|
100
|
+
'peekView.border': editorRed,
|
|
101
|
+
'editorStickyScroll.border': '#F83AFF72', // Red bottom border
|
|
102
|
+
'editorBracketMatch.border': editorGreen, // Green border for matching brackets
|
|
103
|
+
'editorBracketMatch.background': '#004400',
|
|
104
|
+
'editorBracketHighlight.foreground1': editorGreen, // Red for the first pair
|
|
105
|
+
'editorBracketHighlight.foreground2': editorGreen, // Green for the second pair
|
|
106
|
+
'editorBracketHighlight.foreground3': editorGreen, // Green for the second pair
|
|
107
|
+
'editorBracketHighlight.foreground4': editorGreen, // Green for the second pair
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
function generateDeadTheme() {
|
|
112
|
+
return {
|
|
113
|
+
base: 'vs-dark',
|
|
114
|
+
renderSideBySide: false,
|
|
115
|
+
inherit: true,
|
|
116
|
+
rules: [
|
|
117
|
+
{
|
|
118
|
+
"foreground": "9A6D9A", // Muted purple for strings
|
|
119
|
+
"token": "string"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"foreground": "D3A300", // Muted gold for numbers
|
|
123
|
+
"token": "number"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"foreground": "75A9C6", // Muted blue for types
|
|
127
|
+
"token": "type"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"foreground": "D3A300", // Muted gold for keywords
|
|
131
|
+
"token": "keyword"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"token": "constant",
|
|
135
|
+
"foreground": "A66161" // Muted red for constants
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"foreground": "8A8A8A", // Gray with slight vibrance for comments
|
|
139
|
+
"token": "comment",
|
|
140
|
+
"fontStyle": "italic"
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"foreground": "8A8A8A", // Gray for curly braces
|
|
144
|
+
"token": "delimiter.curly",
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
"foreground": "8A8A8A", // Gray for parentheses
|
|
148
|
+
"token": "delimiter.parenthesis",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
"foreground": "8A8A8A", // Gray for square brackets
|
|
152
|
+
"token": "delimiter.square",
|
|
153
|
+
},
|
|
154
|
+
],
|
|
155
|
+
colors: {
|
|
156
|
+
'editor.foreground': '#909090', // Slightly muted text
|
|
157
|
+
'editor.background': '#0d1117', // Keeps the dark background
|
|
158
|
+
'editorCursor.foreground': '#A8A8A8', // Subtle but noticeable cursor
|
|
159
|
+
'editor.lineHighlightBackground': '#2A2A2A', // Subtle line highlight
|
|
160
|
+
'editorLineNumber.foreground': '#5A5A5A', // Dimmed but distinguishable line numbers
|
|
161
|
+
'editorLineNumber.activeForeground': '#858585', // Slightly brighter active line number
|
|
162
|
+
'editor.inactiveSelectionBackground': '#464646', // Subtle selection background
|
|
163
|
+
'diffEditor.removedTextBackground': '#9A2B2B1A', // Muted red for removed text
|
|
164
|
+
'diffEditor.insertedTextBackground': '#2B9A6B1A', // Muted green for inserted text
|
|
165
|
+
'editorLink.activeForeground': '#7D7D7D', // Subtle color for active links
|
|
166
|
+
'editorHoverWidget.background': '#191919', // Slightly lighter hover widget background
|
|
167
|
+
'editorHoverWidget.border': '#6F6F6F', // Subtle border for hover widget
|
|
168
|
+
'peekView.border': '#5F5F5F', // Subtle border for peek view
|
|
169
|
+
'editorStickyScroll.border': '#707070', // Slightly noticeable border
|
|
170
|
+
'editorBracketMatch.border': '#4D4D4D', // Slightly brighter gray for matching brackets
|
|
171
|
+
'editorBracketMatch.background': '#292929', // Slightly brighter background for matching brackets
|
|
172
|
+
'editorBracketHighlight.foreground1': '#857B85', // Muted tones for brackets
|
|
173
|
+
'editorBracketHighlight.foreground2': '#768A76',
|
|
174
|
+
'editorBracketHighlight.foreground3': '#798A79',
|
|
175
|
+
'editorBracketHighlight.foreground4': '#858A85',
|
|
176
|
+
}
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
let monacoConfigured = false;
|
|
180
|
+
function setupMonaco() {
|
|
181
|
+
if (!monacoConfigured) {
|
|
182
|
+
const options = generatePb33fTheme();
|
|
183
|
+
const deadOptions = generateDeadTheme();
|
|
184
|
+
// @ts-ignore
|
|
185
|
+
monaco.editor.defineTheme(Dead, deadOptions);
|
|
186
|
+
// @ts-ignore
|
|
187
|
+
monaco.editor.defineTheme(Alive, options);
|
|
188
|
+
monaco.editor.setTheme(Alive);
|
|
189
|
+
monacoConfigured = true;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
38
192
|
let SpecEditor = class SpecEditor extends LitElement {
|
|
39
193
|
constructor(id = "spec") {
|
|
40
194
|
super();
|
|
41
195
|
this.container = createRef();
|
|
196
|
+
this.decorationIdToLinkTarget = new Map();
|
|
42
197
|
this.id = id;
|
|
198
|
+
this.links = [];
|
|
199
|
+
this.decorationIdToLinkTarget = new Map();
|
|
200
|
+
this.minimapVisible = true;
|
|
201
|
+
this.breadcumb = new SpecEditorBreadcrumb();
|
|
202
|
+
this.breadcumb.currentPath = this.currentPath;
|
|
203
|
+
this.showBreadcrumb = false;
|
|
204
|
+
this.isActive = true;
|
|
205
|
+
}
|
|
206
|
+
createRenderRoot() {
|
|
207
|
+
return this;
|
|
208
|
+
}
|
|
209
|
+
revive() {
|
|
210
|
+
if (!this.isActive) {
|
|
211
|
+
this.isActive = true;
|
|
212
|
+
monaco.editor.setTheme(Alive);
|
|
213
|
+
this.breadcumb.isInvalid = false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
dead() {
|
|
217
|
+
if (this.isActive) {
|
|
218
|
+
this.isActive = false;
|
|
219
|
+
this.links = [];
|
|
220
|
+
this.applyLinkDecorations();
|
|
221
|
+
monaco.editor.setTheme(Dead);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
setCurrentPath(path) {
|
|
225
|
+
this.currentPath = path;
|
|
226
|
+
this.breadcumb.currentPath = path;
|
|
43
227
|
}
|
|
44
228
|
render() {
|
|
45
229
|
return html `
|
|
46
|
-
<style
|
|
47
|
-
|
|
48
|
-
</
|
|
49
|
-
|
|
230
|
+
<div style="width: 100%; height: calc(100vh - ${this.showBreadcrumb ? '155px' : '129px'});"
|
|
231
|
+
${ref(this.container)}>
|
|
232
|
+
</div>
|
|
233
|
+
${this.showBreadcrumb ? this.breadcumb : null}
|
|
50
234
|
`;
|
|
51
235
|
}
|
|
52
236
|
getFile() {
|
|
@@ -69,90 +253,148 @@ let SpecEditor = class SpecEditor extends LitElement {
|
|
|
69
253
|
return "vs-dark";
|
|
70
254
|
return "vs-light";
|
|
71
255
|
}
|
|
256
|
+
switchLanguage(language) {
|
|
257
|
+
if (this.editor) {
|
|
258
|
+
const model = this.editor.getModel(); // Get the current model
|
|
259
|
+
if (model) {
|
|
260
|
+
monaco.editor.setModelLanguage(model, language);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
72
264
|
isDark() {
|
|
73
265
|
return (window.matchMedia &&
|
|
74
266
|
window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
75
267
|
}
|
|
76
|
-
setValue(value,
|
|
77
|
-
if (
|
|
78
|
-
this.firstboot =
|
|
268
|
+
setValue(value, firstBoot = false) {
|
|
269
|
+
if (firstBoot) {
|
|
270
|
+
this.firstboot = firstBoot;
|
|
79
271
|
}
|
|
80
|
-
this.editor
|
|
272
|
+
this.editor?.setValue(value);
|
|
81
273
|
}
|
|
82
274
|
getValue() {
|
|
83
|
-
return this.editor
|
|
275
|
+
return this.editor?.getValue();
|
|
276
|
+
}
|
|
277
|
+
clearDecorations() {
|
|
278
|
+
this.linkDecorations.clear();
|
|
279
|
+
this.editor?.deltaDecorations([], []);
|
|
280
|
+
}
|
|
281
|
+
clearAllMarkers() {
|
|
282
|
+
monaco.editor.removeAllMarkers("owner-" + this.id);
|
|
84
283
|
}
|
|
85
284
|
setMarkers(markers) {
|
|
86
|
-
monaco.editor.removeAllMarkers("owner");
|
|
87
|
-
monaco.editor.setModelMarkers(this.model, "owner", markers);
|
|
285
|
+
monaco.editor.removeAllMarkers("owner-" + this.id);
|
|
286
|
+
monaco.editor.setModelMarkers(this.model, "owner-" + this.id, markers);
|
|
88
287
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
rules: [
|
|
95
|
-
{
|
|
96
|
-
"foreground": "E400FB",
|
|
97
|
-
"token": "string"
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
"foreground": "E400FB",
|
|
101
|
-
"token": "number"
|
|
102
|
-
},
|
|
103
|
-
{
|
|
104
|
-
"foreground": "62C4FFFF",
|
|
105
|
-
"token": "type"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"foreground": "787878",
|
|
109
|
-
"token": "comment",
|
|
110
|
-
"fontStyle": "italic"
|
|
111
|
-
},
|
|
112
|
-
{
|
|
113
|
-
"foreground": "787878",
|
|
114
|
-
"token": "delimiter.curly",
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"foreground": "787878",
|
|
118
|
-
"token": "delimiter.square",
|
|
119
|
-
},
|
|
120
|
-
],
|
|
121
|
-
colors: {
|
|
122
|
-
'editor.fontFamily': 'arial',
|
|
123
|
-
'editor.foreground': '#ffffff',
|
|
124
|
-
'editor.background': '#0d1117',
|
|
125
|
-
'editorCursor.foreground': '#62C4FFFF',
|
|
126
|
-
'editor.lineHighlightBackground': '#E400FB30',
|
|
127
|
-
'editorLineNumber.foreground': '#6368747F',
|
|
128
|
-
'editorLineNumber.activeForeground': '#E400FB',
|
|
129
|
-
'editor.inactiveSelectionBackground': '#FF3C742D',
|
|
130
|
-
'diffEditor.removedTextBackground': '#FF3C741A',
|
|
131
|
-
'diffEditor.insertedTextBackground': '#62C4FF1A',
|
|
132
|
-
'editorBracketMatch.border': '#787878'
|
|
288
|
+
toggleMinimap() {
|
|
289
|
+
this.minimapVisible = !this.minimapVisible;
|
|
290
|
+
this.editor?.updateOptions({
|
|
291
|
+
minimap: {
|
|
292
|
+
enabled: this.minimapVisible
|
|
133
293
|
}
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
firstUpdated() {
|
|
297
|
+
setupMonaco();
|
|
138
298
|
const uri = monaco.Uri.parse("inmemory://doc-" + this.id);
|
|
139
299
|
const value = this.getCode();
|
|
140
300
|
this.model = monaco.editor.createModel(value, "yaml", uri);
|
|
141
301
|
this.editor = monaco.editor.create(this.container.value, {
|
|
142
302
|
model: this.model,
|
|
143
|
-
language: '
|
|
303
|
+
language: 'json',
|
|
144
304
|
theme: 'pb33f',
|
|
305
|
+
glyphMargin: true,
|
|
145
306
|
readOnly: this.readOnly,
|
|
146
307
|
automaticLayout: true,
|
|
147
308
|
fontFamily: 'BerkeleyMono-Regular',
|
|
148
309
|
fontSize: 14,
|
|
149
310
|
minimap: {
|
|
150
|
-
enabled:
|
|
311
|
+
enabled: this.minimapVisible
|
|
151
312
|
},
|
|
152
313
|
hover: {
|
|
153
|
-
enabled: true
|
|
154
|
-
|
|
314
|
+
enabled: true,
|
|
315
|
+
delay: 100,
|
|
316
|
+
above: false,
|
|
317
|
+
sticky: true,
|
|
318
|
+
},
|
|
319
|
+
});
|
|
320
|
+
monaco.languages.registerLinkProvider('yaml', { provideLinks: this.provideLinks.bind(this) });
|
|
321
|
+
monaco.editor.registerLinkOpener({ open: this.open.bind(this) });
|
|
322
|
+
// monaco.languages.registerCodeActionProvider("yaml", {
|
|
323
|
+
// provideCodeActions: (
|
|
324
|
+
// model /**ITextModel*/,
|
|
325
|
+
// range /**Range*/,
|
|
326
|
+
// context /**CodeActionContext*/,
|
|
327
|
+
// token /**CancellationToken*/
|
|
328
|
+
// ) => {
|
|
329
|
+
//
|
|
330
|
+
// const actions = context.markers.map(error => {
|
|
331
|
+
// return {
|
|
332
|
+
// title: `Example quick fix`,
|
|
333
|
+
// diagnostics: [error],
|
|
334
|
+
// kind: "quickfix",
|
|
335
|
+
// edit: {
|
|
336
|
+
// edits: [
|
|
337
|
+
// {
|
|
338
|
+
// resource: model.uri,
|
|
339
|
+
// edits: [
|
|
340
|
+
// {
|
|
341
|
+
// range: error,
|
|
342
|
+
// text: "This text replaces the text with the error"
|
|
343
|
+
// }
|
|
344
|
+
// ]
|
|
345
|
+
// }
|
|
346
|
+
// ]
|
|
347
|
+
// },
|
|
348
|
+
// isPreferred: true
|
|
349
|
+
// };
|
|
350
|
+
// });
|
|
351
|
+
// return {
|
|
352
|
+
// actions: actions,
|
|
353
|
+
// dispose: () => {}
|
|
354
|
+
// }
|
|
355
|
+
// }
|
|
356
|
+
// });
|
|
357
|
+
monaco.languages.registerHoverProvider('yaml', {
|
|
358
|
+
provideHover: (_model, position) => {
|
|
359
|
+
const link = this.links.find((link) => {
|
|
360
|
+
const range = new monaco.Range(link.line, link.startColumn, link.line, link.endColumn);
|
|
361
|
+
return range.containsPosition(position);
|
|
362
|
+
});
|
|
363
|
+
let linkMeta = new Array();
|
|
364
|
+
if (link) {
|
|
365
|
+
const name = link.fullDefinition.split('/').pop();
|
|
366
|
+
linkMeta = [
|
|
367
|
+
{ value: `#### **→ ${name}**` },
|
|
368
|
+
{ value: `XPath: _${link.definition}_` },
|
|
369
|
+
];
|
|
370
|
+
if (link.isPolymorphic) {
|
|
371
|
+
linkMeta.push({ value: '`Polymorphic Pointer`' });
|
|
372
|
+
}
|
|
373
|
+
if (link.jsonPath) {
|
|
374
|
+
linkMeta.push({ value: `JSON Pointer: __${link.jsonPath}__` });
|
|
375
|
+
}
|
|
376
|
+
const uri = link.fullDefinition.split("#/");
|
|
377
|
+
if (uri.length == 2) {
|
|
378
|
+
if (uri[0] !== '/')
|
|
379
|
+
linkMeta.push({ value: `File: **${uri[0]}**` });
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
linkMeta.push({ value: `Location: **${link.fullDefinition}**` });
|
|
383
|
+
}
|
|
384
|
+
if (link.targetLine && link.targetColumn) {
|
|
385
|
+
linkMeta.push({ value: `Target: Line [**${link.targetLine}]**, Column **[${link.targetColumn}]**` });
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (link) {
|
|
389
|
+
return {
|
|
390
|
+
range: new monaco.Range(link.line, link.startColumn, link.line, link.endColumn),
|
|
391
|
+
contents: linkMeta,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
return null;
|
|
395
|
+
},
|
|
155
396
|
});
|
|
397
|
+
this.linkDecorations = this.editor.createDecorationsCollection();
|
|
156
398
|
this.model.onDidChangeContent(() => {
|
|
157
399
|
if (!this.firstboot) {
|
|
158
400
|
this.dispatchEvent(new CustomEvent(EditorUpdated, {
|
|
@@ -178,21 +420,100 @@ let SpecEditor = class SpecEditor extends LitElement {
|
|
|
178
420
|
}
|
|
179
421
|
}));
|
|
180
422
|
});
|
|
423
|
+
// handle link clicks
|
|
424
|
+
//this.editor.onMouseUp((e) => {
|
|
425
|
+
// const position = e.target.position;
|
|
426
|
+
// if (position && this.editor) {
|
|
427
|
+
// const model = this.editor.getModel();
|
|
428
|
+
// if (model) {
|
|
429
|
+
// const range = new monaco.Range(
|
|
430
|
+
// position.lineNumber,
|
|
431
|
+
// position.column,
|
|
432
|
+
// position.lineNumber,
|
|
433
|
+
// position.column
|
|
434
|
+
// );
|
|
435
|
+
// const decorations = model.getDecorationsInRange(range);
|
|
436
|
+
// if (decorations) {
|
|
437
|
+
// for (const decoration of decorations) {
|
|
438
|
+
// const linkTarget = this.decorationIdToLinkTarget.get(decoration.id);
|
|
439
|
+
// if (linkTarget) {
|
|
440
|
+
// this.dispatchEvent(new CustomEvent<DocumentReference>(DocumentReferenceClicked, {
|
|
441
|
+
// bubbles: true,
|
|
442
|
+
// composed: true,
|
|
443
|
+
// detail: {
|
|
444
|
+
// jsonPath: linkTarget
|
|
445
|
+
// }
|
|
446
|
+
// }))
|
|
447
|
+
// break; // Stop after handling the first matching link
|
|
448
|
+
// }
|
|
449
|
+
// }
|
|
450
|
+
// }
|
|
451
|
+
// }
|
|
452
|
+
// }
|
|
453
|
+
//})
|
|
181
454
|
window
|
|
182
455
|
.matchMedia("(prefers-color-scheme: dark)")
|
|
183
456
|
.addEventListener("change", () => {
|
|
184
457
|
monaco.editor.setTheme(this.getTheme());
|
|
185
458
|
});
|
|
186
459
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
460
|
+
open(uri) {
|
|
461
|
+
if (uri.scheme == 'doctor') {
|
|
462
|
+
this.dispatchEvent(new CustomEvent(DocumentReferenceClicked, {
|
|
463
|
+
bubbles: true,
|
|
464
|
+
composed: true,
|
|
465
|
+
detail: {
|
|
466
|
+
jsonPath: uri.authority
|
|
467
|
+
}
|
|
468
|
+
}));
|
|
194
469
|
}
|
|
195
|
-
|
|
470
|
+
return Promise.resolve(true);
|
|
471
|
+
}
|
|
472
|
+
applyLinkDecorations() {
|
|
473
|
+
if (this.editor) {
|
|
474
|
+
this.linkDecorations.clear();
|
|
475
|
+
const newDecorations = this.links.map((link) => {
|
|
476
|
+
let inlineClassName = 'ref';
|
|
477
|
+
let glyphClassName = 'ref-margin';
|
|
478
|
+
let hoverMessage = { value: "Reference (_JSON Pointer_) to: **" + link.fullDefinition + "**" };
|
|
479
|
+
let minimap = editorGreenDim;
|
|
480
|
+
if (link.isPolymorphic) {
|
|
481
|
+
inlineClassName = 'ref-poly';
|
|
482
|
+
glyphClassName = 'ref-poly-margin';
|
|
483
|
+
hoverMessage = { value: "Polymorphic Reference (_JSON Pointer_) to: **" + link.fullDefinition + "**" };
|
|
484
|
+
minimap = editorBrown;
|
|
485
|
+
}
|
|
486
|
+
return {
|
|
487
|
+
range: new monaco.Range(link.line, link.startColumn, link.line, link.endColumn),
|
|
488
|
+
options: {
|
|
489
|
+
inlineClassName: inlineClassName,
|
|
490
|
+
glyphMarginClassName: glyphClassName,
|
|
491
|
+
glyphMarginHoverMessage: hoverMessage,
|
|
492
|
+
minimap: { color: minimap, position: monaco.editor.MinimapPosition.Inline }
|
|
493
|
+
},
|
|
494
|
+
};
|
|
495
|
+
});
|
|
496
|
+
const decorationIds = this.linkDecorations.set(newDecorations);
|
|
497
|
+
this.decorationIdToLinkTarget.clear();
|
|
498
|
+
decorationIds.forEach((decorationId, index) => {
|
|
499
|
+
const target = this.links[index].jsonPath + '||' + this.links[index].targetLine + ':' + this.links[index].targetColumn + "||" + this.links[index].fullDefinition + "||" + this.links[index].rolodexIdHash;
|
|
500
|
+
this.decorationIdToLinkTarget.set(decorationId, target);
|
|
501
|
+
});
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
provideLinks(_model, _token) {
|
|
505
|
+
const links = this.links.map((link) => {
|
|
506
|
+
const range = new monaco.Range(link.line, link.startColumn, link.line, link.endColumn);
|
|
507
|
+
const linkString = link.jsonPath + '||' + link.targetLine + ':' + link.targetColumn + "||" + link.fullDefinition + "||" + link.rolodexIdHash;
|
|
508
|
+
return {
|
|
509
|
+
range: range,
|
|
510
|
+
url: monaco.Uri.parse(`doctor://${encodeURIComponent(linkString)}`),
|
|
511
|
+
};
|
|
512
|
+
});
|
|
513
|
+
return { links };
|
|
514
|
+
}
|
|
515
|
+
};
|
|
516
|
+
SpecEditor.styles = [editorCss];
|
|
196
517
|
__decorate([
|
|
197
518
|
property({ type: Boolean, attribute: "readonly" })
|
|
198
519
|
], SpecEditor.prototype, "readOnly", void 0);
|
|
@@ -205,6 +526,21 @@ __decorate([
|
|
|
205
526
|
__decorate([
|
|
206
527
|
property()
|
|
207
528
|
], SpecEditor.prototype, "code", void 0);
|
|
529
|
+
__decorate([
|
|
530
|
+
state()
|
|
531
|
+
], SpecEditor.prototype, "links", void 0);
|
|
532
|
+
__decorate([
|
|
533
|
+
property()
|
|
534
|
+
], SpecEditor.prototype, "minimapVisible", void 0);
|
|
535
|
+
__decorate([
|
|
536
|
+
property()
|
|
537
|
+
], SpecEditor.prototype, "currentPath", void 0);
|
|
538
|
+
__decorate([
|
|
539
|
+
property()
|
|
540
|
+
], SpecEditor.prototype, "id", void 0);
|
|
541
|
+
__decorate([
|
|
542
|
+
state()
|
|
543
|
+
], SpecEditor.prototype, "showBreadcrumb", void 0);
|
|
208
544
|
SpecEditor = __decorate([
|
|
209
545
|
customElement("pb33f-editor")
|
|
210
546
|
], SpecEditor);
|
|
@@ -309,8 +309,10 @@ let ManageRuleset = class ManageRuleset extends LitElement {
|
|
|
309
309
|
});
|
|
310
310
|
}
|
|
311
311
|
else {
|
|
312
|
-
this.
|
|
313
|
-
|
|
312
|
+
if (this.currentRuleset !== button.value) {
|
|
313
|
+
this.switchRuleset(button.value);
|
|
314
|
+
this.requestUpdate();
|
|
315
|
+
}
|
|
314
316
|
}
|
|
315
317
|
}
|
|
316
318
|
cancelCustomOverride() {
|
|
@@ -593,14 +595,14 @@ let ManageRuleset = class ManageRuleset extends LitElement {
|
|
|
593
595
|
<div class="ruleset">
|
|
594
596
|
<div class="ruleset-header">
|
|
595
597
|
<sl-radio-group label="Select a ruleset" name="ruleset" value="default">
|
|
596
|
-
<sl-radio-button value=${defaultRuleset} @
|
|
598
|
+
<sl-radio-button value=${defaultRuleset} @click="${this.changeActiveRuleset}">Default
|
|
597
599
|
</sl-radio-button>
|
|
598
|
-
<sl-radio-button value=${owaspRuleset} @
|
|
600
|
+
<sl-radio-button value=${owaspRuleset} @click="${this.changeActiveRuleset}">OWASP
|
|
599
601
|
</sl-radio-button>
|
|
600
|
-
<sl-radio-button value=${allRuleset} @
|
|
602
|
+
<sl-radio-button value=${allRuleset} @click="${this.changeActiveRuleset}">All
|
|
601
603
|
</sl-radio-button>
|
|
602
604
|
<sl-radio-button value=${customRuleset} disabled id="custom-ruleset"
|
|
603
|
-
@
|
|
605
|
+
@click="${this.changeActiveRuleset}">Custom
|
|
604
606
|
</sl-radio-button>
|
|
605
607
|
</sl-radio-group>
|
|
606
608
|
<div class="ruleset-controls">
|
|
@@ -30,5 +30,12 @@ export declare class ModelIconComponent extends LitElement {
|
|
|
30
30
|
constructor();
|
|
31
31
|
getNodeTypeFromIcon(icon: string): NodeType;
|
|
32
32
|
static getIconForType(nodeType: NodeType): string;
|
|
33
|
+
openapiIcon(): string;
|
|
34
|
+
goIcon(): string;
|
|
35
|
+
typescriptIcon(): string;
|
|
36
|
+
csIcon(): string;
|
|
37
|
+
cIcon(): string;
|
|
38
|
+
cppIcon(): string;
|
|
39
|
+
zigLogo(): string;
|
|
33
40
|
render(): import("lit-html").TemplateResult<1>;
|
|
34
41
|
}
|