@pb33f/cowboy-components 0.2.1 → 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.
Files changed (40) hide show
  1. package/dist/components/model-renderer/rendered-node.css.d.ts +2 -0
  2. package/dist/components/model-renderer/rendered-node.css.js +96 -0
  3. package/dist/components/model-renderer/rendered-node.d.ts +8 -0
  4. package/dist/components/model-renderer/rendered-node.js +117 -0
  5. package/dist/components/model-renderer/rendered-property.css.d.ts +2 -0
  6. package/dist/components/model-renderer/rendered-property.css.js +118 -0
  7. package/dist/components/model-renderer/rendered-property.d.ts +14 -0
  8. package/dist/components/model-renderer/rendered-property.js +204 -0
  9. package/dist/components/model-tree/tree-item.d.ts +10 -0
  10. package/dist/components/model-tree/tree-item.js +37 -0
  11. package/dist/components/model-tree/tree.css.d.ts +2 -0
  12. package/dist/components/model-tree/tree.css.js +20 -0
  13. package/dist/components/model-tree/tree.d.ts +16 -0
  14. package/dist/components/model-tree/tree.js +103 -0
  15. package/dist/components/the-doctor/the-doctor.d.ts +2 -1
  16. package/dist/components/the-doctor/the-doctor.js +32 -13
  17. package/dist/components/visualizer/explorer.d.ts +52 -0
  18. package/dist/components/visualizer/explorer.js +296 -0
  19. package/dist/components/visualizer/node.d.ts +11 -0
  20. package/dist/components/visualizer/node.js +27 -0
  21. package/dist/components/visualizer/operation.css.d.ts +2 -0
  22. package/dist/components/visualizer/operation.css.js +53 -0
  23. package/dist/components/visualizer/operation.d.ts +12 -0
  24. package/dist/components/visualizer/operation.js +52 -0
  25. package/dist/components/visualizer/visualizer.css.d.ts +2 -0
  26. package/dist/components/visualizer/visualizer.css.js +157 -0
  27. package/dist/components/visualizer/visualizer.d.ts +60 -0
  28. package/dist/components/visualizer/visualizer.js +137 -0
  29. package/dist/cowboy-components.d.ts +1 -0
  30. package/dist/cowboy-components.js +2 -0
  31. package/dist/cowboy-components.umd.cjs +948 -322
  32. package/dist/css/pb33f-theme.css +1 -1
  33. package/dist/events/doctor.d.ts +5 -0
  34. package/dist/events/doctor.js +2 -0
  35. package/dist/model/graph.d.ts +6 -0
  36. package/dist/model/graph.js +1 -0
  37. package/dist/services/model-service.d.ts +5 -0
  38. package/dist/services/model-service.js +30 -0
  39. package/dist/style.css +1 -1
  40. package/package.json +6 -3
@@ -0,0 +1,12 @@
1
+ import { LitElement } from "lit";
2
+ export declare class OperationGraphNode extends LitElement {
3
+ static styles: import("lit").CSSResult[];
4
+ width: number;
5
+ height: number;
6
+ id: string;
7
+ label: string;
8
+ active: boolean;
9
+ constructor();
10
+ clicked(): void;
11
+ render(): import("lit-html").TemplateResult<1>;
12
+ }
@@ -0,0 +1,52 @@
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 { customElement, property } from "lit/decorators.js";
8
+ import { html, LitElement } from "lit";
9
+ import operationCss from "./operation.css.js";
10
+ import { ExplorerNodeClicked } from "../../events/doctor";
11
+ let OperationGraphNode = class OperationGraphNode extends LitElement {
12
+ constructor() {
13
+ super();
14
+ }
15
+ clicked() {
16
+ this.dispatchEvent(new CustomEvent(ExplorerNodeClicked, {
17
+ bubbles: true,
18
+ composed: true,
19
+ detail: {
20
+ nodeHashId: this.id
21
+ }
22
+ }));
23
+ }
24
+ render() {
25
+ return html `
26
+ <div class="operation-node ${this.active ? 'active' : ''}" style="height: ${this.height}px; width: ${this.width - 2}px" @click="${this.clicked}">
27
+ <sl-icon name="code-slash"></sl-icon> ${this.label}
28
+ ${this.active ? html `<sl-icon name="arrow-up" class="active-icon"></sl-icon>` : html ``}
29
+ </div>
30
+ `;
31
+ }
32
+ };
33
+ OperationGraphNode.styles = [operationCss];
34
+ __decorate([
35
+ property({ type: Number })
36
+ ], OperationGraphNode.prototype, "width", void 0);
37
+ __decorate([
38
+ property({ type: Number })
39
+ ], OperationGraphNode.prototype, "height", void 0);
40
+ __decorate([
41
+ property()
42
+ ], OperationGraphNode.prototype, "id", void 0);
43
+ __decorate([
44
+ property()
45
+ ], OperationGraphNode.prototype, "label", void 0);
46
+ __decorate([
47
+ property({ type: Boolean })
48
+ ], OperationGraphNode.prototype, "active", void 0);
49
+ OperationGraphNode = __decorate([
50
+ customElement('pb33f-operation-graphnode')
51
+ ], OperationGraphNode);
52
+ export { OperationGraphNode };
@@ -0,0 +1,2 @@
1
+ declare const _default: import("lit").CSSResult;
2
+ export default _default;
@@ -0,0 +1,157 @@
1
+ import { css } from 'lit';
2
+ export default css `
3
+ :host {
4
+ display: block;
5
+ overflow: hidden;
6
+ width: 100%;
7
+ height: 100%;
8
+ }
9
+
10
+ .visualizer {
11
+ display: flex;
12
+ }
13
+
14
+ .explorer {
15
+ width: 75%;
16
+ height: 100%;
17
+ }
18
+
19
+ .model {
20
+ width: 25%;
21
+ height: 814px;
22
+ overflow: auto;
23
+ margin-top: 20px;
24
+ }
25
+
26
+ .model > .tree {
27
+ height: 300px;
28
+ overflow-y: auto;
29
+ }
30
+
31
+ .model > .renderer {
32
+ height: 492px;
33
+ margin-left: 10px;
34
+ border: 1px solid var(--primary-color);
35
+ padding: 10px;
36
+ overflow-y: auto;
37
+ }
38
+
39
+
40
+ svg {
41
+ width: 100%;
42
+ height: 100%;
43
+ }
44
+
45
+ .svg-container {
46
+ border: 1px solid var(--primary-color);
47
+ width: 100%;
48
+ height: 800px;
49
+ }
50
+
51
+ .svg-container:active {
52
+ cursor: move;
53
+ }
54
+
55
+ .node {
56
+ fill: var(--background-color);
57
+ transition: opacity 0.3s;
58
+ animation: fadeIn 1s;
59
+ }
60
+
61
+ .node:hover {
62
+ cursor: pointer;
63
+ stroke: var(--warn-color);
64
+ }
65
+
66
+ .node:active {
67
+ cursor: pointer;
68
+ stroke: var(--secondary-color);
69
+ }
70
+
71
+ .fo {
72
+ transition: opacity 0.3s;
73
+ animation: fadeIn 1s;
74
+ }
75
+
76
+ .text {
77
+ font-size: 1.3rem;
78
+ fill: var(--primary-color);
79
+ font-family: var(--font-stack), monospace;
80
+ animation: fadeIn 1.5s;
81
+ }
82
+
83
+ .text:hover {
84
+ cursor: pointer;
85
+ fill: var(--warn-color);
86
+ }
87
+
88
+ .text:active {
89
+ cursor: pointer;
90
+ stroke: var(--secondary-color);
91
+ }
92
+
93
+ .glow {
94
+ filter: url(#glow);
95
+ }
96
+
97
+ .node-body {
98
+ font-size: 0.9rem;
99
+
100
+ }
101
+
102
+ //.arrow {
103
+ // stroke: var(--primary-color);
104
+ // stroke-width: 2;
105
+ // fill: none;
106
+ // animation: fadeIn 1s;
107
+ //}
108
+
109
+ .edge {
110
+ stroke-dasharray: 5;
111
+ stroke-width: 2;
112
+ stroke: var(--secondary-color);
113
+ animation: fadeIn 3s, dashdraw 1500ms linear infinite;
114
+ fill: none;
115
+ }
116
+
117
+ .ref {
118
+ stroke-dasharray: 1 5;
119
+ stroke-width: 2;
120
+ stroke-miterlimit: 1;
121
+ stroke-linejoin: round;
122
+ stroke-linecap: round;
123
+ stroke: var(--terminal-text);
124
+ animation: dashdraw-fast 1200ms linear infinite;
125
+ }
126
+
127
+ .allOf, .oneOf, .anyOf {
128
+ stroke: var(--terminal-yellow);
129
+ }
130
+
131
+
132
+ @keyframes dashdraw {
133
+ from {
134
+ stroke-dashoffset: 10;
135
+ }
136
+ }
137
+
138
+ @keyframes dashdraw-fast {
139
+ from {
140
+ stroke-dashoffset: 30;
141
+ }
142
+ }
143
+
144
+
145
+ @keyframes fadeIn {
146
+ 0% {
147
+ opacity: 0;
148
+ }
149
+ 100% {
150
+ opacity: 1;
151
+ }
152
+ }
153
+
154
+
155
+
156
+
157
+ `;
@@ -0,0 +1,60 @@
1
+ import { LitElement } from "lit";
2
+ import { NodeComponent } from "./node";
3
+ import { ModelTree } from "../model-tree/tree";
4
+ import { NodeClickedEvent } from "../../events/doctor";
5
+ import { RenderedNodeComponent } from "../model-renderer/rendered-node";
6
+ import { ExplorerComponent } from "./explorer";
7
+ export declare enum Direction {
8
+ UP = "UP",
9
+ DOWN = "DOWN",
10
+ LEFT = "LEFT",
11
+ RIGHT = "RIGHT"
12
+ }
13
+ export declare class Node {
14
+ id: string;
15
+ idHash: string;
16
+ nodePath: string;
17
+ parentId: string;
18
+ hash?: string;
19
+ x?: number;
20
+ y?: number;
21
+ width: number;
22
+ height: number;
23
+ expanded?: boolean;
24
+ treeExpanded?: boolean;
25
+ active?: boolean;
26
+ instance: any;
27
+ label: string;
28
+ nodes: Node[];
29
+ line: number;
30
+ type: string;
31
+ }
32
+ export declare class Edge {
33
+ id: string;
34
+ sources: string[];
35
+ targets: string[];
36
+ sections?: any[];
37
+ visible?: boolean;
38
+ ref: string;
39
+ poly?: string;
40
+ }
41
+ export declare class Visualizer extends LitElement {
42
+ static styles: import("lit").CSSResult[];
43
+ ready: boolean;
44
+ svgContainer: HTMLElement;
45
+ direction: Direction;
46
+ private grabbed;
47
+ private grabbedNode;
48
+ nodeComponents: NodeComponent[];
49
+ scale: number;
50
+ renderedNode: RenderedNodeComponent;
51
+ nodeMap: Map<string, Node>;
52
+ renderedNodeMap: Map<string, Node>;
53
+ modelTree: ModelTree;
54
+ explorer: ExplorerComponent;
55
+ constructor();
56
+ explorerNodeClicked(evt: CustomEvent<NodeClickedEvent>): void;
57
+ rotate(): void;
58
+ modelTreeNodeClicked(evt: CustomEvent<NodeClickedEvent>): void;
59
+ render(): import("lit-html").TemplateResult<1>;
60
+ }
@@ -0,0 +1,137 @@
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 { customElement, query, state } from "lit/decorators.js";
8
+ import { html, LitElement } from "lit";
9
+ import visualizerCss from "./visualizer.css.js";
10
+ import { ModelService } from "../../services/model-service";
11
+ import { ModelTree } from "../model-tree/tree";
12
+ import { ExplorerNodeClicked, ModelTreeNodeClicked } from "../../events/doctor";
13
+ import { RenderedNodeComponent } from "../model-renderer/rendered-node";
14
+ import { ExplorerComponent } from "./explorer";
15
+ export var Direction;
16
+ (function (Direction) {
17
+ Direction["UP"] = "UP";
18
+ Direction["DOWN"] = "DOWN";
19
+ Direction["LEFT"] = "LEFT";
20
+ Direction["RIGHT"] = "RIGHT";
21
+ })(Direction || (Direction = {}));
22
+ export class Node {
23
+ }
24
+ export class Edge {
25
+ }
26
+ let Visualizer = class Visualizer extends LitElement {
27
+ constructor() {
28
+ super();
29
+ this.nodeComponents = [];
30
+ this.scale = 1;
31
+ this.direction = Direction.RIGHT;
32
+ this.renderedNode = new RenderedNodeComponent();
33
+ this.nodeMap = new Map();
34
+ this.renderedNodeMap = new Map();
35
+ const targets = new Map();
36
+ this.modelTree = new ModelTree();
37
+ this.explorer = new ExplorerComponent();
38
+ // @ts-ignore
39
+ this.modelTree.addEventListener(ModelTreeNodeClicked, this.modelTreeNodeClicked.bind(this));
40
+ ModelService.doctorEndpoint = 'http://localhost:9090';
41
+ ModelService.createGraph().then((result) => {
42
+ this.modelTree.node = result.nodes[0];
43
+ this.explorer.nodes = result.nodes;
44
+ this.explorer.edges = result.edges;
45
+ this.explorer.models = result.nodesRendered;
46
+ for (let i = 0; i < result.nodesRendered.length; i++) {
47
+ this.renderedNodeMap.set(result.nodesRendered[i].idHash, result.nodesRendered[i]);
48
+ }
49
+ this.explorer.buildGraph();
50
+ this.explorer.buildLayout();
51
+ });
52
+ // @ts-ignore
53
+ this.addEventListener(ExplorerNodeClicked, this.explorerNodeClicked.bind(this));
54
+ }
55
+ explorerNodeClicked(evt) {
56
+ this.explorer.nodes.forEach((node) => {
57
+ if (node.idHash === evt.detail.nodeHashId) {
58
+ const renderedNode = this.renderedNodeMap.get(node.idHash);
59
+ if (renderedNode) {
60
+ this.renderedNode.node = renderedNode;
61
+ }
62
+ node.active = true;
63
+ }
64
+ else {
65
+ node.active = false;
66
+ }
67
+ });
68
+ this.modelTree.explorerClicked(evt.detail.nodeHashId);
69
+ this.explorer.requestUpdate();
70
+ }
71
+ rotate() {
72
+ switch (this.direction) {
73
+ case Direction.UP:
74
+ this.explorer.direction = Direction.RIGHT;
75
+ break;
76
+ case Direction.RIGHT:
77
+ this.explorer.direction = Direction.DOWN;
78
+ break;
79
+ case Direction.DOWN:
80
+ this.explorer.direction = Direction.LEFT;
81
+ break;
82
+ case Direction.LEFT:
83
+ this.explorer.direction = Direction.UP;
84
+ break;
85
+ }
86
+ this.explorer.buildGraph();
87
+ }
88
+ modelTreeNodeClicked(evt) {
89
+ this.explorer.nodes.forEach((node) => {
90
+ if (node.idHash === evt.detail.nodeHashId.replaceAll('model-', '')) {
91
+ // lookup rendered node
92
+ const renderedNode = this.renderedNodeMap.get(node.idHash);
93
+ if (renderedNode) {
94
+ this.renderedNode.node = renderedNode;
95
+ }
96
+ node.active = true;
97
+ }
98
+ else {
99
+ node.active = false;
100
+ }
101
+ });
102
+ this.explorer.requestUpdate();
103
+ }
104
+ render() {
105
+ return html `
106
+ <div class="visualizer">
107
+ <div class="explorer">
108
+ <sl-icon-button name="arrow-90deg-right" @click="${this.rotate}"></sl-icon-button>
109
+ <sl-icon-button name="zoom-in" @click="${this.explorer.zoomIn}"></sl-icon-button>
110
+ <sl-icon-button name="zoom-out" @click="${this.explorer.zoomOut}"></sl-icon-button>
111
+ <sl-icon-button name="arrow-clockwise" @click="${this.explorer.reset}"></sl-icon-button>
112
+ <div class="svg-container">
113
+ ${this.explorer}
114
+ </div>
115
+ </div>
116
+ <div class="model">
117
+ <div class="tree">
118
+ ${this.modelTree}
119
+ </div>
120
+ <div class="renderer">
121
+ ${this.renderedNode}
122
+ </div>
123
+ </div>
124
+ `;
125
+ }
126
+ };
127
+ Visualizer.styles = [visualizerCss];
128
+ __decorate([
129
+ state()
130
+ ], Visualizer.prototype, "ready", void 0);
131
+ __decorate([
132
+ query('.svg-container')
133
+ ], Visualizer.prototype, "svgContainer", void 0);
134
+ Visualizer = __decorate([
135
+ customElement("pb33f-visualizer")
136
+ ], Visualizer);
137
+ export { Visualizer };
@@ -15,6 +15,7 @@ import './components/attention-box/attention-box.js';
15
15
  import './components/render-operation-path/render-operation-path.js';
16
16
  import './components/render-json-path/render-json-path.js';
17
17
  import './components/footer/footer.js';
18
+ import './components/visualizer/visualizer.js';
18
19
  import './components/problem-list/problem-list.js';
19
20
  import './components/problem-list/problem-item.js';
20
21
  import './components/the-doctor/the-doctor.js';
@@ -15,6 +15,8 @@ import './components/attention-box/attention-box.js';
15
15
  import './components/render-operation-path/render-operation-path.js';
16
16
  import './components/render-json-path/render-json-path.js';
17
17
  import './components/footer/footer.js';
18
+ // visualizer
19
+ import './components/visualizer/visualizer.js';
18
20
  // problems
19
21
  import './components/problem-list/problem-list.js';
20
22
  import './components/problem-list/problem-item.js';