@pb33f/cowboy-components 0.2.0 → 0.2.2
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/components/manage-ruleset/manage-ruleset.d.ts +5 -1
- package/dist/components/manage-ruleset/manage-ruleset.js +27 -5
- package/dist/components/model-renderer/rendered-node.css.d.ts +2 -0
- package/dist/components/model-renderer/rendered-node.css.js +96 -0
- package/dist/components/model-renderer/rendered-node.d.ts +8 -0
- package/dist/components/model-renderer/rendered-node.js +117 -0
- package/dist/components/model-renderer/rendered-property.css.d.ts +2 -0
- package/dist/components/model-renderer/rendered-property.css.js +118 -0
- package/dist/components/model-renderer/rendered-property.d.ts +14 -0
- package/dist/components/model-renderer/rendered-property.js +204 -0
- package/dist/components/model-tree/tree-item.d.ts +10 -0
- package/dist/components/model-tree/tree-item.js +37 -0
- package/dist/components/model-tree/tree.css.d.ts +2 -0
- package/dist/components/model-tree/tree.css.js +20 -0
- package/dist/components/model-tree/tree.d.ts +16 -0
- package/dist/components/model-tree/tree.js +103 -0
- package/dist/components/the-doctor/the-doctor.css.js +2 -2
- package/dist/components/the-doctor/the-doctor.d.ts +4 -2
- package/dist/components/the-doctor/the-doctor.js +42 -18
- package/dist/components/visualizer/explorer.d.ts +52 -0
- package/dist/components/visualizer/explorer.js +296 -0
- package/dist/components/visualizer/node.d.ts +11 -0
- package/dist/components/visualizer/node.js +27 -0
- package/dist/components/visualizer/operation.css.d.ts +2 -0
- package/dist/components/visualizer/operation.css.js +53 -0
- package/dist/components/visualizer/operation.d.ts +12 -0
- package/dist/components/visualizer/operation.js +52 -0
- package/dist/components/visualizer/visualizer.css.d.ts +2 -0
- package/dist/components/visualizer/visualizer.css.js +157 -0
- package/dist/components/visualizer/visualizer.d.ts +60 -0
- package/dist/components/visualizer/visualizer.js +137 -0
- package/dist/cowboy-components.d.ts +1 -0
- package/dist/cowboy-components.js +2 -0
- package/dist/cowboy-components.umd.cjs +950 -324
- package/dist/css/pb33f-theme.css +1 -1
- package/dist/events/doctor.d.ts +9 -0
- package/dist/events/doctor.js +3 -0
- package/dist/model/graph.d.ts +6 -0
- package/dist/model/graph.js +1 -0
- package/dist/services/model-service.d.ts +5 -0
- package/dist/services/model-service.js +30 -0
- package/dist/style.css +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import '@shoelace-style/shoelace/dist/components/tree-item/tree-item.js';
|
|
8
|
+
import { customElement, property } from "lit/decorators.js";
|
|
9
|
+
import { html } from "lit";
|
|
10
|
+
import { SlTreeItem } from "@shoelace-style/shoelace";
|
|
11
|
+
let ModelTreeItem = class ModelTreeItem extends SlTreeItem {
|
|
12
|
+
constructor(node, results) {
|
|
13
|
+
super();
|
|
14
|
+
this.node = node;
|
|
15
|
+
this.results = results;
|
|
16
|
+
}
|
|
17
|
+
render() {
|
|
18
|
+
return html `
|
|
19
|
+
<sl-tree-item expanded>
|
|
20
|
+
<sl-icon name="plus-square" slot="expand-icon"></sl-icon>
|
|
21
|
+
<sl-icon name="dash-square" slot="collapse-icon"></sl-icon>
|
|
22
|
+
${this.node.label} (${this.node.nodePath})
|
|
23
|
+
${this.results}
|
|
24
|
+
</sl-tree-item>
|
|
25
|
+
`;
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
__decorate([
|
|
29
|
+
property()
|
|
30
|
+
], ModelTreeItem.prototype, "node", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
property()
|
|
33
|
+
], ModelTreeItem.prototype, "results", void 0);
|
|
34
|
+
ModelTreeItem = __decorate([
|
|
35
|
+
customElement("pb33f-model-treeitem")
|
|
36
|
+
], ModelTreeItem);
|
|
37
|
+
export { ModelTreeItem };
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { css } from "lit";
|
|
2
|
+
export default css `
|
|
3
|
+
|
|
4
|
+
sl-tree {
|
|
5
|
+
--indent-guide-width: 1px;
|
|
6
|
+
--indent-guide-color: var(--secondary-color);
|
|
7
|
+
--indent-guide-style: dashed;
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
}
|
|
11
|
+
sl-tree-item {
|
|
12
|
+
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
sl-tree-item::part(expand-button) {
|
|
17
|
+
rotate: none;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
`;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import '@shoelace-style/shoelace/dist/components/tree/tree.js';
|
|
2
|
+
import '@shoelace-style/shoelace/dist/components/tree-item/tree-item.js';
|
|
3
|
+
import { LitElement, TemplateResult } from "lit";
|
|
4
|
+
import { Node } from "../visualizer/visualizer.js";
|
|
5
|
+
import { SlTreeItem } from "@shoelace-style/shoelace";
|
|
6
|
+
export declare class ModelTree extends LitElement {
|
|
7
|
+
static styles: import("lit").CSSResult[];
|
|
8
|
+
node: Node;
|
|
9
|
+
nodeClicked(nodeHashId: string): void;
|
|
10
|
+
explorerClicked(nodeHashId: string): void;
|
|
11
|
+
collapse(evt: Event, node: Node): void;
|
|
12
|
+
expanded(evt: Event, node: Node): void;
|
|
13
|
+
buildTree(node: Node, depth: number): TemplateResult;
|
|
14
|
+
nodesSelected(treeItems: SlTreeItem[]): void;
|
|
15
|
+
render(): TemplateResult<1>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
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
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import '@shoelace-style/shoelace/dist/components/tree/tree.js';
|
|
8
|
+
import '@shoelace-style/shoelace/dist/components/tree-item/tree-item.js';
|
|
9
|
+
import { customElement, property } from "lit/decorators.js";
|
|
10
|
+
import { html, LitElement } from "lit";
|
|
11
|
+
import treeCss from "./tree.css.js";
|
|
12
|
+
import { ModelTreeNodeClicked } from "../../events/doctor";
|
|
13
|
+
let ModelTree = class ModelTree extends LitElement {
|
|
14
|
+
nodeClicked(nodeHashId) {
|
|
15
|
+
this.dispatchEvent(new CustomEvent(ModelTreeNodeClicked, {
|
|
16
|
+
bubbles: true,
|
|
17
|
+
composed: true,
|
|
18
|
+
detail: {
|
|
19
|
+
nodeHashId: nodeHashId
|
|
20
|
+
}
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
explorerClicked(nodeHashId) {
|
|
24
|
+
const treeItems = this.renderRoot.querySelectorAll(`sl-tree-item`);
|
|
25
|
+
let selected = null;
|
|
26
|
+
for (let i = 0; i < treeItems.length; i++) {
|
|
27
|
+
const item = treeItems[i];
|
|
28
|
+
item.selected = item.id === `model-${nodeHashId}`;
|
|
29
|
+
item.expanded = true;
|
|
30
|
+
if (item.selected) {
|
|
31
|
+
selected = item;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (selected) {
|
|
35
|
+
requestAnimationFrame(() => {
|
|
36
|
+
selected?.scrollIntoView({ behavior: "smooth", block: "center", inline: "center" });
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
collapse(evt, node) {
|
|
41
|
+
evt.stopPropagation();
|
|
42
|
+
node.treeExpanded = false;
|
|
43
|
+
}
|
|
44
|
+
expanded(evt, node) {
|
|
45
|
+
evt.stopPropagation();
|
|
46
|
+
node.treeExpanded = true;
|
|
47
|
+
}
|
|
48
|
+
buildTree(node, depth) {
|
|
49
|
+
let results = [];
|
|
50
|
+
if (node.nodes && node.nodes.length > 0) {
|
|
51
|
+
for (let i = 0; i < node.nodes.length; i++) {
|
|
52
|
+
depth++;
|
|
53
|
+
results.push(this.buildTree(node.nodes[i], depth));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
let expanded = node.treeExpanded;
|
|
57
|
+
if (depth < 2) {
|
|
58
|
+
expanded = true;
|
|
59
|
+
}
|
|
60
|
+
return html `
|
|
61
|
+
<sl-tree-item id="model-${node.idHash}" ?expanded="${expanded}"
|
|
62
|
+
@sl-expand="${(evt) => {
|
|
63
|
+
this.expanded(evt, node);
|
|
64
|
+
}}"
|
|
65
|
+
@sl-collapse="${(evt) => {
|
|
66
|
+
this.collapse(evt, node);
|
|
67
|
+
}}">
|
|
68
|
+
<sl-icon name="plus-square" slot="expand-icon"></sl-icon>
|
|
69
|
+
<sl-icon name="dash-square" slot="collapse-icon"></sl-icon>
|
|
70
|
+
<span >${node.label}</span>
|
|
71
|
+
${results}
|
|
72
|
+
</sl-tree-item>
|
|
73
|
+
`;
|
|
74
|
+
}
|
|
75
|
+
nodesSelected(treeItems) {
|
|
76
|
+
for (let i = 0; i < treeItems.length; i++) {
|
|
77
|
+
this.nodeClicked(treeItems[i].id);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
render() {
|
|
81
|
+
if (!this.node) {
|
|
82
|
+
return html ``;
|
|
83
|
+
}
|
|
84
|
+
return html `
|
|
85
|
+
<sl-tree @sl-selection-change="${(evt) => {
|
|
86
|
+
{
|
|
87
|
+
const selected = evt.detail.selection;
|
|
88
|
+
this.nodesSelected(selected);
|
|
89
|
+
}
|
|
90
|
+
}}">
|
|
91
|
+
${this.buildTree(this.node, 0)}
|
|
92
|
+
</sl-tree>
|
|
93
|
+
`;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
ModelTree.styles = [treeCss];
|
|
97
|
+
__decorate([
|
|
98
|
+
property()
|
|
99
|
+
], ModelTree.prototype, "node", void 0);
|
|
100
|
+
ModelTree = __decorate([
|
|
101
|
+
customElement("pb33f-model-tree")
|
|
102
|
+
], ModelTree);
|
|
103
|
+
export { ModelTree };
|
|
@@ -177,7 +177,7 @@ export default css `
|
|
|
177
177
|
|
|
178
178
|
.spinner-draw-closed {
|
|
179
179
|
top: 35px;
|
|
180
|
-
right:
|
|
180
|
+
right: 8px;
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
pb33f-toast-manager {
|
|
@@ -219,7 +219,7 @@ export default css `
|
|
|
219
219
|
}
|
|
220
220
|
.collapse-side {
|
|
221
221
|
position: absolute;
|
|
222
|
-
right:
|
|
222
|
+
right: 5px;
|
|
223
223
|
top: 0;
|
|
224
224
|
padding: 0;
|
|
225
225
|
color: var(--secondary-color);
|
|
@@ -7,7 +7,7 @@ import '@shoelace-style/shoelace/dist/components/dialog/dialog.js';
|
|
|
7
7
|
import '@shoelace-style/shoelace/dist/components/alert/alert.js';
|
|
8
8
|
import '@shoelace-style/shoelace/dist/components/badge/badge.js';
|
|
9
9
|
import { LitElement } from "lit";
|
|
10
|
-
import { AddToastEvent, EditorUpdatedEvent, ProblemRuleFilterChangedEvent, RulesetSavedEvent, RuleClickedEvent } from "../../events/doctor.js";
|
|
10
|
+
import { AddToastEvent, EditorUpdatedEvent, ProblemRuleFilterChangedEvent, RulesetSavedEvent, RuleClickedEvent, NodeClickedEvent } from "../../events/doctor.js";
|
|
11
11
|
import { ProblemDrawerEvent } from "../problem-list/details-drawer.js";
|
|
12
12
|
import { SlDialog, SlIcon, SlRadioGroup, SlTab, SlTabGroup } from "@shoelace-style/shoelace";
|
|
13
13
|
import { AttentionBox } from "../attention-box/attention-box.js";
|
|
@@ -87,6 +87,7 @@ export declare class TheDoctor extends LitElement {
|
|
|
87
87
|
private selectedEditorTab;
|
|
88
88
|
private sidebarClosed;
|
|
89
89
|
constructor(doctorEndpoint?: string);
|
|
90
|
+
modelTreeNodeClicked(evt: CustomEvent<NodeClickedEvent>): void;
|
|
90
91
|
exportRuleset(): void;
|
|
91
92
|
addToastEvent(event: CustomEvent<AddToastEvent>): void;
|
|
92
93
|
sendToast(toast: Toast): void;
|
|
@@ -108,7 +109,8 @@ export declare class TheDoctor extends LitElement {
|
|
|
108
109
|
private fetchDocs;
|
|
109
110
|
fetchRulesetMap(): void;
|
|
110
111
|
ruleClicked(evt: CustomEvent<RuleClickedEvent>): void;
|
|
111
|
-
|
|
112
|
+
builtInRulesetSelected(): void;
|
|
113
|
+
rulesetManuallyChanged(): void;
|
|
112
114
|
specChanged(event: CustomEvent<EditorUpdatedEvent>): void;
|
|
113
115
|
boostrap(): void;
|
|
114
116
|
exportJSON(): void;
|
|
@@ -15,7 +15,7 @@ import '@shoelace-style/shoelace/dist/components/badge/badge.js';
|
|
|
15
15
|
import { customElement, property, query, state } from "lit/decorators.js";
|
|
16
16
|
import { html, LitElement } from "lit";
|
|
17
17
|
import { SpecEditor } from "../editor/editor.js";
|
|
18
|
-
import { ActiveView, AddToast, CustomRulesetEnabled, EditorClicked, EditorUpdated, ExportRuleset, OpenProblemDrawer, ProblemClicked, ProblemRuleFilterChangedManual, RuleViolationClicked, RulesetSaved, RuleClicked } from "../../events/doctor.js";
|
|
18
|
+
import { ActiveView, AddToast, CustomRulesetEnabled, EditorClicked, EditorUpdated, ExportRuleset, OpenProblemDrawer, ProblemClicked, ProblemRuleFilterChangedManual, RuleViolationClicked, RulesetSaved, RuleClicked, BuiltInRulesetChanged, } from "../../events/doctor.js";
|
|
19
19
|
import { ProblemDetailsDrawer, ProblemDrawerEventType } from "../problem-list/details-drawer.js";
|
|
20
20
|
import { CreateBagManager } from "@pb33f/saddlebag";
|
|
21
21
|
import { LintingService } from "../../services/linting-service.js";
|
|
@@ -38,6 +38,7 @@ import dialogCss from "../../css/dialog.css.js";
|
|
|
38
38
|
import buttonCss from "../../css/button.css.js";
|
|
39
39
|
import radioGroupsCss from "../../css/radiogroups.css.js";
|
|
40
40
|
import { MarkerSeverity } from "monaco-editor";
|
|
41
|
+
import { ModelService } from "../../services/model-service";
|
|
41
42
|
export const DoctorDocumentBag = "pb33f-doctor-editor";
|
|
42
43
|
export const HowToFixBag = "pb33f-doctor-howtofix";
|
|
43
44
|
export const FunctionDocumentationBag = "pb33f-doctor-funcdocs";
|
|
@@ -110,6 +111,10 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
110
111
|
this.addEventListener(ExportRuleset, this.exportRuleset);
|
|
111
112
|
// @ts-ignore
|
|
112
113
|
this.addEventListener(RuleClicked, this.ruleClicked);
|
|
114
|
+
// @ts-ignore
|
|
115
|
+
this.addEventListener(BuiltInRulesetChanged, this.builtInRulesetSelected);
|
|
116
|
+
// @ts-ignore
|
|
117
|
+
//this.addEventListener(ModelTreeNodeClicked, this.modelTreeNodeClicked)
|
|
113
118
|
// hijack navigation buttons.
|
|
114
119
|
window.addEventListener('popstate', (e) => {
|
|
115
120
|
const state = e.state;
|
|
@@ -126,6 +131,10 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
126
131
|
});
|
|
127
132
|
//history.pushState({view: ActiveView.Overview}, "", ActiveView.Overview);
|
|
128
133
|
}
|
|
134
|
+
modelTreeNodeClicked(evt) {
|
|
135
|
+
// TODO: this is a placeholder for now
|
|
136
|
+
console.log(evt);
|
|
137
|
+
}
|
|
129
138
|
exportRuleset() {
|
|
130
139
|
this.exportRulesetDialog.show();
|
|
131
140
|
}
|
|
@@ -281,6 +290,13 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
281
290
|
});
|
|
282
291
|
}
|
|
283
292
|
}
|
|
293
|
+
// update visualization
|
|
294
|
+
// TODO: this is a placeholder for now
|
|
295
|
+
// ModelService.createGraph(value).then((result) => {
|
|
296
|
+
// this.vis
|
|
297
|
+
//
|
|
298
|
+
//
|
|
299
|
+
// })
|
|
284
300
|
}).catch((e) => {
|
|
285
301
|
console.error("statistics service is down", e);
|
|
286
302
|
this.platformUnavailable(e);
|
|
@@ -305,6 +321,8 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
305
321
|
}
|
|
306
322
|
platformUnavailable(error) {
|
|
307
323
|
if (!this.unavailable) {
|
|
324
|
+
this.loadingOverlay.hide();
|
|
325
|
+
this.activitySpinner.hide();
|
|
308
326
|
this.errorBanner.errorTitle = "The doctor is out.";
|
|
309
327
|
if (!error) {
|
|
310
328
|
this.errorBanner.errorMessage = "The clinic is <strong>closed!</strong> " +
|
|
@@ -371,6 +389,7 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
371
389
|
LintingService.doctorEndpoint = this.doctorEndpoint;
|
|
372
390
|
FeedbackService.doctorEndpoint = this.doctorEndpoint;
|
|
373
391
|
RulesetService.doctorEndpoint = this.doctorEndpoint;
|
|
392
|
+
ModelService.doctorEndpoint = this.doctorEndpoint;
|
|
374
393
|
this.docBag = this.bagManager.getBag(DoctorDocumentBag);
|
|
375
394
|
if (this.docBag) {
|
|
376
395
|
const doc = this.docBag.get(DefaultDocument);
|
|
@@ -459,6 +478,7 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
459
478
|
this.sessionRulesetMapBag = this.bagManager.getBag(SessionRulesetMapBag);
|
|
460
479
|
// fire off all network requests, then configure the ruleset management.
|
|
461
480
|
Promise.all(promises).then(() => {
|
|
481
|
+
this.loadingOverlay.hide();
|
|
462
482
|
// configure rule management
|
|
463
483
|
this.manageRuleset.defaultRuleset = this.defaultRuleset;
|
|
464
484
|
this.manageRuleset.owaspRuleset = this.OWASPRuleset;
|
|
@@ -471,17 +491,18 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
471
491
|
else {
|
|
472
492
|
this.manageRuleset.rulesetConfig = { ruleMapping: new Map(), allRulesSwitch: true };
|
|
473
493
|
}
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
this.
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
494
|
+
setTimeout(() => {
|
|
495
|
+
this.manageRuleset.buildRulesets();
|
|
496
|
+
if (this.CustomRuleset && this.CustomRuleset.rules.size > 0) {
|
|
497
|
+
this.manageRuleset.customRuleset = this.CustomRuleset;
|
|
498
|
+
}
|
|
499
|
+
this.fetchSessionRulesetAsYaml().then((result) => {
|
|
500
|
+
this.rulesetEditor?.setValue(result, true);
|
|
501
|
+
this.fetchRulesetMap();
|
|
502
|
+
}).catch((e) => {
|
|
503
|
+
this.platformUnavailable(e);
|
|
504
|
+
});
|
|
505
|
+
}, 50);
|
|
485
506
|
});
|
|
486
507
|
// refresh state for how to fix.
|
|
487
508
|
this.fetchDocs();
|
|
@@ -535,12 +556,12 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
535
556
|
}
|
|
536
557
|
}
|
|
537
558
|
async fetchSessionRulesetAsYaml() {
|
|
538
|
-
return new Promise(async (resolve) => {
|
|
559
|
+
return new Promise(async (resolve, reject) => {
|
|
539
560
|
RulesetService.getSessionRulesetAsYAML().then((result) => {
|
|
540
561
|
resolve(result);
|
|
541
562
|
}).catch((e) => {
|
|
542
563
|
console.error("cannot fetch session ruleset: ", e.title);
|
|
543
|
-
|
|
564
|
+
reject(e);
|
|
544
565
|
});
|
|
545
566
|
});
|
|
546
567
|
}
|
|
@@ -668,7 +689,10 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
668
689
|
}
|
|
669
690
|
}
|
|
670
691
|
}
|
|
671
|
-
|
|
692
|
+
builtInRulesetSelected() {
|
|
693
|
+
// todo
|
|
694
|
+
}
|
|
695
|
+
rulesetManuallyChanged() {
|
|
672
696
|
clearTimeout(this.bounceId);
|
|
673
697
|
this.bounceId = window.setTimeout(() => {
|
|
674
698
|
const ruleset = this.rulesetEditor.editor?.getValue();
|
|
@@ -747,7 +771,7 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
747
771
|
specChanged(event) {
|
|
748
772
|
const editor = this.editorMap.get(event.detail.id);
|
|
749
773
|
if (editor && event.detail.id === 'ruleset') {
|
|
750
|
-
this.
|
|
774
|
+
this.rulesetManuallyChanged();
|
|
751
775
|
return;
|
|
752
776
|
}
|
|
753
777
|
if (this.docBag) {
|
|
@@ -844,8 +868,8 @@ let TheDoctor = class TheDoctor extends LitElement {
|
|
|
844
868
|
if (splitPanel) {
|
|
845
869
|
this.collapseButton.name = "chevron-bar-left";
|
|
846
870
|
this.problemsDataDiv.style.display = "none";
|
|
847
|
-
splitPanel.style.setProperty('--min', '
|
|
848
|
-
splitPanel.style.setProperty('--max', 'calc(100vw -
|
|
871
|
+
splitPanel.style.setProperty('--min', '40px');
|
|
872
|
+
splitPanel.style.setProperty('--max', 'calc(100vw - 40px)');
|
|
849
873
|
splitPanel.position = 100;
|
|
850
874
|
splitPanel.disabled = true;
|
|
851
875
|
this.splitDivider.style.display = "none";
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
import { Direction, Edge, Node } from "./visualizer";
|
|
3
|
+
import { NodeComponent } from "./node";
|
|
4
|
+
export declare class ExplorerComponent extends LitElement {
|
|
5
|
+
static styles: import("lit").CSSResult[];
|
|
6
|
+
svgItem: SVGSVGElement;
|
|
7
|
+
svgGroup: SVGSVGElement;
|
|
8
|
+
ready: boolean;
|
|
9
|
+
elk: any;
|
|
10
|
+
graph: any;
|
|
11
|
+
nodes: Node[];
|
|
12
|
+
models: Node[];
|
|
13
|
+
edges: Edge[];
|
|
14
|
+
direction: Direction;
|
|
15
|
+
nodeComponents: NodeComponent[];
|
|
16
|
+
scale: number;
|
|
17
|
+
private grabbed;
|
|
18
|
+
nodeMap: Map<string, Node>;
|
|
19
|
+
private startX;
|
|
20
|
+
private startY;
|
|
21
|
+
private translateX;
|
|
22
|
+
private translateY;
|
|
23
|
+
constructor();
|
|
24
|
+
mouseMove(evt: MouseEvent): void;
|
|
25
|
+
mouseDown(evt: MouseEvent): void;
|
|
26
|
+
mouseUp(): void;
|
|
27
|
+
onWheel(evt: MouseEvent): void;
|
|
28
|
+
buildLayout(): void;
|
|
29
|
+
buildGraph(): any;
|
|
30
|
+
readyGo(): void;
|
|
31
|
+
reset(): void;
|
|
32
|
+
zoomIn(): void;
|
|
33
|
+
zoomOut(): void;
|
|
34
|
+
generateOptions(): {
|
|
35
|
+
'spacing.nodeNodeBetweenLayers': number;
|
|
36
|
+
'spacing.nodeNode': number;
|
|
37
|
+
'elk.nodeLabels.placement': string;
|
|
38
|
+
'elk.algorithm': string;
|
|
39
|
+
'elk.direction': Direction;
|
|
40
|
+
'org.eclipse.elk.edgeRouting': string;
|
|
41
|
+
'elk.layered.unnecessaryBendpoints': string;
|
|
42
|
+
'elk.layered.spacing.edgeNodeBetweenLayers': number;
|
|
43
|
+
'org.eclipse.elk.layered.nodePlacement.bk.fixedAlignment': string;
|
|
44
|
+
'org.eclipse.elk.layered.cycleBreaking.strategy': string;
|
|
45
|
+
'nodePlacement.strategy': string;
|
|
46
|
+
'org.eclipse.elk.spacing.edgeLabel': string;
|
|
47
|
+
'org.eclipse.elk.spacing.edgeNode': string;
|
|
48
|
+
'org.eclipse.elk.layered.edgeLabels.sideSelection': string;
|
|
49
|
+
'org.eclipse.elk.spacing.portPort': string;
|
|
50
|
+
};
|
|
51
|
+
render(): import("lit-html").TemplateResult<1> | import("lit-html").TemplateResult<2>;
|
|
52
|
+
}
|