@operato/scene-legend 0.1.10 β†’ 0.1.18

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 (30) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/attachments/3c2f6007-c06b-47ca-9508-9bcda9428fd0.svg +425 -0
  3. package/attachments/dcf0e8fe-6c3e-4b36-b3e9-a8e70b4ed590.svg +425 -0
  4. package/dist/editors/editor-legend-status.js +22 -0
  5. package/dist/editors/editor-legend-status.js.map +1 -1
  6. package/dist/editors/property-editor-legend-status.js.map +1 -1
  7. package/dist/editors/property-editor-svg-info.d.ts +15 -0
  8. package/dist/editors/property-editor-svg-info.js +71 -0
  9. package/dist/editors/property-editor-svg-info.js.map +1 -0
  10. package/dist/svg.d.ts +19 -0
  11. package/dist/svg.js +166 -0
  12. package/dist/svg.js.map +1 -0
  13. package/dist/templates/svg.d.ts +18 -0
  14. package/dist/templates/svg.js +19 -0
  15. package/dist/templates/svg.js.map +1 -0
  16. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +15 -0
  17. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +15 -0
  18. package/logs/application-2023-07-13-20.log +10 -0
  19. package/logs/connections-2023-07-13-20.log +80 -0
  20. package/logs/system/.144ddb221a51f7e2afac3fe1fc3dcf306a8de9ef-audit.json +15 -0
  21. package/logs/system/.437ed478d36eef33cb9dfb565b13329b4464783e-audit.json +20 -0
  22. package/logs/system/.a16ac19e6e222b854c699e1f94ae757f5c8db307-audit.json +15 -0
  23. package/logs/system/scenario-/353/260/234/354/240/204/353/237/211 /354/230/210/354/270/241 /353/215/260/354/235/264/355/204/260-2023-05-09-11.log" +16914 -0
  24. package/logs/system/scenario-/353/260/234/354/240/204/353/237/211 /354/230/210/354/270/241 /353/215/260/354/235/264/355/204/260-2023-05-09-12.log" +1382 -0
  25. package/logs/system/scenario-/354/227/220/353/204/210/354/247/200 /353/240/210/354/235/264/354/226/264 /354/203/211/354/203/201-2023-07-13-20.log" +510 -0
  26. package/logs/system/scenario-/354/235/274/354/202/254/353/237/211 /354/230/210/354/270/241 /354/247/200/353/217/204-2023-05-09-12.log" +30 -0
  27. package/package.json +5 -5
  28. package/src/editors/editor-legend-status.ts +19 -0
  29. package/tsconfig.json +1 -0
  30. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,15 @@
1
+ import '@operato/i18n/ox-i18n.js';
2
+ import { PropertyValues, TemplateResult } from 'lit';
3
+ import { OxPropertyEditor, PropertySpec } from '@operato/property-editor';
4
+ import { Component } from '@hatiolab/things-scene';
5
+ export default class SVGInfoEditor extends OxPropertyEditor {
6
+ static styles: import("lit").CSSResult[];
7
+ src?: string;
8
+ ids: SVGPathElement[];
9
+ private fillStyleSaved;
10
+ editorTemplate(value: any, spec: PropertySpec): TemplateResult;
11
+ onEnterEvent(path: SVGPathElement): void;
12
+ onOutEvent(path: SVGPathElement): void;
13
+ updated(changes: PropertyValues<this>): void;
14
+ fetchSourceInfo(component: Component, src: string): Promise<void>;
15
+ }
@@ -0,0 +1,71 @@
1
+ import { __decorate } from "tslib";
2
+ import '@operato/i18n/ox-i18n.js';
3
+ import { css, html } from 'lit';
4
+ import { customElement, property, state } from 'lit/decorators.js';
5
+ import { OxPropertyEditor } from '@operato/property-editor';
6
+ let SVGInfoEditor = class SVGInfoEditor extends OxPropertyEditor {
7
+ constructor() {
8
+ super(...arguments);
9
+ this.ids = [];
10
+ this.fillStyleSaved = [];
11
+ }
12
+ editorTemplate(value, spec) {
13
+ return html `
14
+ <fieldset fullwidth>
15
+ <ul info>
16
+ ${this.ids.map(path => html `<li @mouseenter=${() => this.onEnterEvent(path)} @mouseout=${() => this.onOutEvent(path)}>
17
+ <div style="fillStyle:${path.style.fill}">${path.id}</div>
18
+ </li>`)}
19
+ </ul>
20
+ </fieldset>
21
+ `;
22
+ }
23
+ onEnterEvent(path) {
24
+ this.fillStyleSaved.push(path.style.fill);
25
+ path.style.fill = 'red';
26
+ }
27
+ onOutEvent(path) {
28
+ path.style.fill = this.fillStyleSaved.pop();
29
+ }
30
+ updated(changes) {
31
+ if (changes.has('src')) {
32
+ this.dispatchEvent(new CustomEvent('i-need-selected', {
33
+ bubbles: true,
34
+ composed: true,
35
+ detail: {
36
+ callback: (selected) => {
37
+ this.fetchSourceInfo(selected[0], this.src);
38
+ }
39
+ }
40
+ }));
41
+ }
42
+ }
43
+ async fetchSourceInfo(component, src) {
44
+ if (!src || !src.trim()) {
45
+ return;
46
+ }
47
+ const element = component.element;
48
+ const elements = element.querySelectorAll('path[id]');
49
+ this.ids = Array.from(elements).map(path => path);
50
+ }
51
+ };
52
+ SVGInfoEditor.styles = [
53
+ ...OxPropertyEditor.styles,
54
+ css `
55
+ ul[info] {
56
+ margin: 0;
57
+ font-size: 1em;
58
+ }
59
+ `
60
+ ];
61
+ __decorate([
62
+ property({ type: String })
63
+ ], SVGInfoEditor.prototype, "src", void 0);
64
+ __decorate([
65
+ state()
66
+ ], SVGInfoEditor.prototype, "ids", void 0);
67
+ SVGInfoEditor = __decorate([
68
+ customElement('property-editor-svg-info')
69
+ ], SVGInfoEditor);
70
+ export default SVGInfoEditor;
71
+ //# sourceMappingURL=property-editor-svg-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"property-editor-svg-info.js","sourceRoot":"","sources":["../../src/editors/property-editor-svg-info.ts"],"names":[],"mappings":";AAAA,OAAO,0BAA0B,CAAA;AAEjC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAkC,MAAM,KAAK,CAAA;AAC/D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAElE,OAAO,EAAE,gBAAgB,EAAgB,MAAM,0BAA0B,CAAA;AAI1D,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,gBAAgB;IAA5C;;QAaJ,QAAG,GAAqB,EAAE,CAAA;QAE3B,mBAAc,GAAU,EAAE,CAAA;IAoDpC,CAAC;IAlDC,cAAc,CAAC,KAAU,EAAE,IAAkB;QAC3C,OAAO,IAAI,CAAA;;;YAGH,IAAI,CAAC,GAAG,CAAC,GAAG,CACZ,IAAI,CAAC,EAAE,CACL,IAAI,CAAA,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;wCACnE,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE;oBAC/C,CACT;;;KAGN,CAAA;IACH,CAAC;IAED,YAAY,CAAC,IAAoB;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QACzC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAA;IACzB,CAAC;IAED,UAAU,CAAC,IAAoB;QAC7B,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,CAAA;IAC7C,CAAC;IAED,OAAO,CAAC,OAA6B;QACnC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,aAAa,CAChB,IAAI,WAAW,CAAC,iBAAiB,EAAE;gBACjC,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE;oBACN,QAAQ,EAAE,CAAC,QAAe,EAAE,EAAE;wBAC5B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAI,CAAC,CAAA;oBAC9C,CAAC;iBACF;aACF,CAAC,CACH,CAAA;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,SAAoB,EAAE,GAAW;QACrD,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACxB,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAI,SAAkC,CAAC,OAAyB,CAAA;QAE7E,MAAM,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAA;QACrD,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAQ,CAAA;IAC1D,CAAC;;AAjEM,oBAAM,GAAG;IACd,GAAG,gBAAgB,CAAC,MAAM;IAC1B,GAAG,CAAA;;;;;KAKF;CACF,AARY,CAQZ;AAE2B;IAA3B,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;0CAAa;AAE/B;IAAR,KAAK,EAAE;0CAA2B;AAbhB,aAAa;IADjC,aAAa,CAAC,0BAA0B,CAAC;GACrB,aAAa,CAmEjC;eAnEoB,aAAa","sourcesContent":["import '@operato/i18n/ox-i18n.js'\n\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPropertyEditor, PropertySpec } from '@operato/property-editor'\nimport { Component, HTMLOverlayContainer } from '@hatiolab/things-scene'\n\n@customElement('property-editor-svg-info')\nexport default class SVGInfoEditor extends OxPropertyEditor {\n static styles = [\n ...OxPropertyEditor.styles,\n css`\n ul[info] {\n margin: 0;\n font-size: 1em;\n }\n `\n ]\n\n @property({ type: String }) src?: string\n\n @state() ids: SVGPathElement[] = []\n\n private fillStyleSaved: any[] = []\n\n editorTemplate(value: any, spec: PropertySpec): TemplateResult {\n return html`\n <fieldset fullwidth>\n <ul info>\n ${this.ids.map(\n path =>\n html`<li @mouseenter=${() => this.onEnterEvent(path)} @mouseout=${() => this.onOutEvent(path)}>\n <div style=\"fillStyle:${path.style.fill}\">${path.id}</div>\n </li>`\n )}\n </ul>\n </fieldset>\n `\n }\n\n onEnterEvent(path: SVGPathElement) {\n this.fillStyleSaved.push(path.style.fill)\n path.style.fill = 'red'\n }\n\n onOutEvent(path: SVGPathElement) {\n path.style.fill = this.fillStyleSaved.pop()\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('src')) {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: (selected: any[]) => {\n this.fetchSourceInfo(selected[0], this.src!)\n }\n }\n })\n )\n }\n }\n\n async fetchSourceInfo(component: Component, src: string) {\n if (!src || !src.trim()) {\n return\n }\n\n const element = (component as HTMLOverlayContainer).element as HTMLDivElement\n\n const elements = element.querySelectorAll('path[id]')\n this.ids = Array.from(elements).map(path => path) as any\n }\n}\n"]}
package/dist/svg.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { Component, ComponentNature, HTMLOverlayElement, Properties } from '@hatiolab/things-scene';
2
+ export default class Svg extends HTMLOverlayElement {
3
+ static get nature(): ComponentNature;
4
+ oncreate_element(div: HTMLDivElement): Promise<void>;
5
+ private _value?;
6
+ private _legendTarget?;
7
+ get legendTarget(): Component | undefined;
8
+ loadSVG(div: HTMLElement): Promise<void>;
9
+ setElementProperties(div: HTMLDivElement): Promise<void>;
10
+ get src(): any;
11
+ set src(src: any);
12
+ onchange(after: Properties, before: Properties): void;
13
+ onchangeSrc(src: string): void;
14
+ onchangeValue(value: any): void;
15
+ get tagName(): string;
16
+ get nature(): ComponentNature;
17
+ get value(): any;
18
+ set value(value: any);
19
+ }
package/dist/svg.js ADDED
@@ -0,0 +1,166 @@
1
+ /*
2
+ * Copyright Β© HatioLab Inc. All rights reserved.
3
+ */
4
+ import { __decorate } from "tslib";
5
+ const NATURE = {
6
+ mutable: false,
7
+ resizable: true,
8
+ rotatable: true,
9
+ properties: [
10
+ {
11
+ type: 'image-selector',
12
+ label: 'image-src',
13
+ name: 'src',
14
+ property: {
15
+ displayField: 'id',
16
+ displayFullUrl: true,
17
+ baseUrlAlias: '$base_url',
18
+ defaultStorage: 'scene-image',
19
+ storageFilters: {
20
+ type: Array,
21
+ value: [
22
+ {
23
+ name: 'category',
24
+ value: 'image'
25
+ }
26
+ ]
27
+ },
28
+ useUpload: true
29
+ },
30
+ observe: function (src) {
31
+ const info = this.parentNode.querySelector('[name=svgInfo]');
32
+ info.src = src;
33
+ }
34
+ },
35
+ {
36
+ type: 'svg-info',
37
+ label: 'svg-info',
38
+ name: 'svgInfo',
39
+ readonly: true,
40
+ editor: {
41
+ fullwidth: true
42
+ }
43
+ },
44
+ {
45
+ type: 'id-input',
46
+ label: 'legend-target',
47
+ name: 'legendTarget',
48
+ property: {
49
+ component: 'legend'
50
+ }
51
+ },
52
+ {
53
+ type: 'string',
54
+ label: 'id-field',
55
+ name: 'idField'
56
+ },
57
+ {
58
+ type: 'string',
59
+ label: 'value-field',
60
+ name: 'valueField'
61
+ }
62
+ ]
63
+ };
64
+ import { HTMLOverlayElement, sceneComponent } from '@hatiolab/things-scene';
65
+ let Svg = class Svg extends HTMLOverlayElement {
66
+ static get nature() {
67
+ return NATURE;
68
+ }
69
+ async oncreate_element(div) {
70
+ await this.loadSVG(div);
71
+ }
72
+ get legendTarget() {
73
+ var { legendTarget } = this.state;
74
+ if (!this._legendTarget && legendTarget) {
75
+ this._legendTarget = this.root.findById(legendTarget);
76
+ this._legendTarget && this._legendTarget.on('change', this.onchangeData, this);
77
+ }
78
+ return this._legendTarget;
79
+ }
80
+ async loadSVG(div) {
81
+ try {
82
+ const parser = new DOMParser();
83
+ const response = await fetch(this.src);
84
+ div.innerHTML = '';
85
+ if (response.ok) {
86
+ const text = await response.text();
87
+ const doc = await parser.parseFromString(text, 'image/svg+xml');
88
+ const element = doc.querySelector('svg');
89
+ element && div.appendChild(element);
90
+ }
91
+ else {
92
+ const error = await response.text();
93
+ console.error('load SVG error', error);
94
+ }
95
+ }
96
+ catch (error) {
97
+ console.error(error);
98
+ }
99
+ }
100
+ async setElementProperties(div) { }
101
+ get src() {
102
+ return this.getState('src');
103
+ }
104
+ set src(src) {
105
+ this.setState('src', src);
106
+ }
107
+ onchange(after, before) {
108
+ 'src' in after && this.onchangeSrc(after.src);
109
+ 'value' in after && this.onchangeValue(after.value);
110
+ }
111
+ onchangeSrc(src) {
112
+ this.loadSVG(this.element);
113
+ }
114
+ onchangeValue(value) {
115
+ if (typeof this.value !== 'object' || !Array.isArray(this.value)) {
116
+ return;
117
+ }
118
+ const { idField, valueField } = this.state;
119
+ const legendTarget = this.legendTarget;
120
+ if (!legendTarget) {
121
+ return;
122
+ }
123
+ const { field: statusField, defaultColor, ranges } = legendTarget.getState('status');
124
+ if (!(statusField && ranges)) {
125
+ return;
126
+ }
127
+ this.value.forEach(item => {
128
+ if (!(idField in item) || !(valueField in item)) {
129
+ return;
130
+ }
131
+ var id = item[idField];
132
+ var status = Number(item[valueField]);
133
+ var range = ranges.find((range, index) => {
134
+ let { min: minValue, max: maxValue } = range;
135
+ var min = minValue !== undefined && minValue !== null && minValue !== '' ? Number(minValue) : undefined;
136
+ var max = maxValue !== undefined && maxValue !== null && maxValue !== '' ? Number(maxValue) : undefined;
137
+ // If max is not set, treat it as infinity
138
+ var maxCheck = max === undefined ? true : max > status;
139
+ var minCheck = min === undefined ? true : min <= status;
140
+ return maxCheck && minCheck;
141
+ });
142
+ const paths = this.element.querySelectorAll(`path[id="${String(id)}"]`);
143
+ paths.forEach(path => {
144
+ path.style.fill = (range === null || range === void 0 ? void 0 : range.color) || defaultColor || 'transparent';
145
+ });
146
+ });
147
+ }
148
+ get tagName() {
149
+ return 'div';
150
+ }
151
+ get nature() {
152
+ return NATURE;
153
+ }
154
+ get value() {
155
+ return this._value;
156
+ }
157
+ set value(value) {
158
+ this._value = value;
159
+ this.onchangeValue(value);
160
+ }
161
+ };
162
+ Svg = __decorate([
163
+ sceneComponent('svg')
164
+ ], Svg);
165
+ export default Svg;
166
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright Β© HatioLab Inc. All rights reserved.\n */\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'image-selector',\n label: 'image-src',\n name: 'src',\n property: {\n displayField: 'id',\n displayFullUrl: true,\n baseUrlAlias: '$base_url',\n defaultStorage: 'scene-image',\n storageFilters: {\n type: Array,\n value: [\n {\n name: 'category',\n value: 'image'\n }\n ]\n },\n useUpload: true\n },\n observe: function (this: HTMLElement, src: string) {\n const info: any = this.parentNode!.querySelector('[name=svgInfo]')\n info.src = src\n }\n },\n {\n type: 'svg-info',\n label: 'svg-info',\n name: 'svgInfo',\n readonly: true,\n editor: {\n fullwidth: true\n }\n },\n {\n type: 'id-input',\n label: 'legend-target',\n name: 'legendTarget',\n property: {\n component: 'legend'\n }\n },\n {\n type: 'string',\n label: 'id-field',\n name: 'idField'\n },\n {\n type: 'string',\n label: 'value-field',\n name: 'valueField'\n }\n ]\n}\n\nimport { Component, ComponentNature, HTMLOverlayElement, Properties, sceneComponent } from '@hatiolab/things-scene'\nimport Legend from './legend.js'\n\n@sceneComponent('svg')\nexport default class Svg extends HTMLOverlayElement {\n static get nature() {\n return NATURE\n }\n\n async oncreate_element(div: HTMLDivElement) {\n await this.loadSVG(div)\n }\n\n private _value?: any\n private _legendTarget?: Component\n\n get legendTarget() {\n var { legendTarget } = this.state\n\n if (!this._legendTarget && legendTarget) {\n this._legendTarget = this.root.findById(legendTarget)\n this._legendTarget && this._legendTarget.on('change', this.onchangeData, this)\n }\n\n return this._legendTarget\n }\n\n async loadSVG(div: HTMLElement) {\n try {\n const parser = new DOMParser()\n\n const response = await fetch(this.src)\n\n div.innerHTML = ''\n\n if (response.ok) {\n const text = await response.text()\n const doc = await parser.parseFromString(text, 'image/svg+xml')\n const element = doc.querySelector('svg')\n\n element && div.appendChild(element)\n } else {\n const error = await response.text()\n console.error('load SVG error', error)\n }\n } catch (error) {\n console.error(error)\n }\n }\n\n async setElementProperties(div: HTMLDivElement) {}\n\n get src() {\n return this.getState('src')\n }\n\n set src(src) {\n this.setState('src', src)\n }\n\n onchange(after: Properties, before: Properties) {\n 'src' in after && this.onchangeSrc(after.src)\n 'value' in after && this.onchangeValue(after.value)\n }\n\n onchangeSrc(src: string) {\n this.loadSVG(this.element)\n }\n\n onchangeValue(value: any): void {\n if (typeof this.value !== 'object' || !Array.isArray(this.value)) {\n return\n }\n\n const { idField, valueField } = this.state\n const legendTarget = this.legendTarget\n\n if (!legendTarget) {\n return\n }\n\n const {\n field: statusField,\n defaultColor,\n ranges\n } = legendTarget.getState('status') as {\n field: string\n defaultColor: string\n ranges: { min?: string | number; max?: string | number; color: string }[]\n }\n\n if (!(statusField && ranges)) {\n return\n }\n\n this.value.forEach(item => {\n if (!(idField in item) || !(valueField in item)) {\n return\n }\n\n var id = item[idField]\n var status = Number(item[valueField])\n\n var range = ranges.find((range, index) => {\n let { min: minValue, max: maxValue } = range\n\n var min: number | undefined =\n minValue !== undefined && minValue !== null && minValue !== '' ? Number(minValue) : undefined\n var max: number | undefined =\n maxValue !== undefined && maxValue !== null && maxValue !== '' ? Number(maxValue) : undefined\n\n // If max is not set, treat it as infinity\n var maxCheck = max === undefined ? true : max > status\n var minCheck = min === undefined ? true : min <= status\n\n return maxCheck && minCheck\n })\n\n const paths = this.element.querySelectorAll(`path[id=\"${String(id)}\"]`) as NodeListOf<SVGPathElement>\n paths.forEach(path => {\n path.style.fill = range?.color || defaultColor || 'transparent'\n })\n })\n }\n\n get tagName() {\n return 'div'\n }\n\n get nature() {\n return NATURE\n }\n\n get value() {\n return this._value\n }\n\n set value(value) {\n this._value = value\n this.onchangeValue(value)\n }\n}\n"]}
@@ -0,0 +1,18 @@
1
+ declare const _default: {
2
+ type: string;
3
+ description: string;
4
+ group: string;
5
+ icon: string;
6
+ model: {
7
+ type: string;
8
+ left: number;
9
+ top: number;
10
+ width: number;
11
+ height: number;
12
+ fillStyle: string;
13
+ direction: string;
14
+ strokeStyle: string;
15
+ lineWidth: number;
16
+ };
17
+ };
18
+ export default _default;
@@ -0,0 +1,19 @@
1
+ const icon = new URL('../../icons/svg.png', import.meta.url).href;
2
+ export default {
3
+ type: 'svg',
4
+ description: 'svg for visualizer',
5
+ group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,
6
+ icon,
7
+ model: {
8
+ type: 'svg',
9
+ left: 100,
10
+ top: 100,
11
+ width: 400,
12
+ height: 300,
13
+ fillStyle: '#efefef',
14
+ direction: 'vertical',
15
+ strokeStyle: 'rgba(0, 0, 0, 0.3)',
16
+ lineWidth: 1
17
+ }
18
+ };
19
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../../src/templates/svg.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAEjE,eAAe;IACb,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,oBAAoB;IACjC,KAAK,EAAE,WAAW,CAAC,gGAAgG;IACnH,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,SAAS,EAAE,SAAS;QACpB,SAAS,EAAE,UAAU;QACrB,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE,CAAC;KACb;CACF,CAAA","sourcesContent":["const icon = new URL('../../icons/svg.png', import.meta.url).href\n\nexport default {\n type: 'svg',\n description: 'svg for visualizer',\n group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,\n icon,\n model: {\n type: 'svg',\n left: 100,\n top: 100,\n width: 400,\n height: 300,\n fillStyle: '#efefef',\n direction: 'vertical',\n strokeStyle: 'rgba(0, 0, 0, 0.3)',\n lineWidth: 1\n }\n}\n"]}
@@ -0,0 +1,15 @@
1
+ {
2
+ "keep": {
3
+ "days": true,
4
+ "amount": 2
5
+ },
6
+ "auditLog": "logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json",
7
+ "files": [
8
+ {
9
+ "date": 1689248179100,
10
+ "name": "logs/application-2023-07-13-20.log",
11
+ "hash": "89d17538c1898ddce7ba4c309d7b1ea2d91a9a582682878e950f50fd29fbc298"
12
+ }
13
+ ],
14
+ "hashType": "sha256"
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "keep": {
3
+ "days": true,
4
+ "amount": 14
5
+ },
6
+ "auditLog": "logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json",
7
+ "files": [
8
+ {
9
+ "date": 1689248180358,
10
+ "name": "logs/connections-2023-07-13-20.log",
11
+ "hash": "a0dac8996e3b70e357e8b668557260ea5be9055a21ade4693e6f0fde6b02ad2e"
12
+ }
13
+ ],
14
+ "hashType": "sha256"
15
+ }
@@ -0,0 +1,10 @@
1
+ 2023-07-13T20:36:19+09:00 info: File Storage is Ready.
2
+ 2023-07-13T20:36:20+09:00 error: oracledb module loading failed
3
+ 2023-07-13T20:36:21+09:00 info: Default DataSource established
4
+ 2023-07-13T20:36:22+09:00 info: πŸš€ Server ready at http://0.0.0.0:3000/graphql
5
+ 2023-07-13T20:36:22+09:00 info: πŸš€ Subscriptions ready at ws://0.0.0.0:3000/graphql
6
+ 2023-07-13T20:52:49+09:00 info: File Storage is Ready.
7
+ 2023-07-13T20:52:50+09:00 error: oracledb module loading failed
8
+ 2023-07-13T20:52:51+09:00 info: Default DataSource established
9
+ 2023-07-13T20:52:52+09:00 info: πŸš€ Server ready at http://0.0.0.0:3000/graphql
10
+ 2023-07-13T20:52:52+09:00 info: πŸš€ Subscriptions ready at ws://0.0.0.0:3000/graphql
@@ -0,0 +1,80 @@
1
+ 2023-07-13T20:36:22+09:00 info: Initializing ConnectionManager...
2
+ 2023-07-13T20:36:22+09:00 info: Connector 'echo-back-server' started to ready
3
+ 2023-07-13T20:36:22+09:00 info: Connector 'echo-back' started to ready
4
+ 2023-07-13T20:36:22+09:00 info: Connector 'http-connector' started to ready
5
+ 2023-07-13T20:36:22+09:00 info: http-connector connection(λ‚ μ”¨λ§ˆλ£¨:https://bd.kma.go.kr) is connected
6
+ 2023-07-13T20:36:22+09:00 info: Connector 'graphql-connector' started to ready
7
+ 2023-07-13T20:36:22+09:00 info: Connector 'sqlite-connector' started to ready
8
+ 2023-07-13T20:36:22+09:00 info: Connector 'postgresql-connector' started to ready
9
+ 2023-07-13T20:36:22+09:00 info: Connector 'mqtt-connector' started to ready
10
+ 2023-07-13T20:36:22+09:00 info: Connector 'mssql-connector' started to ready
11
+ 2023-07-13T20:36:22+09:00 info: Connector 'oracle-connector' started to ready
12
+ 2023-07-13T20:36:22+09:00 info: Connector 'mysql-connector' started to ready
13
+ 2023-07-13T20:36:22+09:00 info: Connector 'socket-server' started to ready
14
+ 2023-07-13T20:36:22+09:00 info: Connector 'msgraph-connector' started to ready
15
+ 2023-07-13T20:36:22+09:00 info: echo-back-servers are ready
16
+ 2023-07-13T20:36:22+09:00 info: echo-back connections are ready
17
+ 2023-07-13T20:36:22+09:00 info: graphql-connector connections are ready
18
+ 2023-07-13T20:36:22+09:00 info: sqlite-connector connections are ready
19
+ 2023-07-13T20:36:22+09:00 info: postgresql-connector connections are ready
20
+ 2023-07-13T20:36:22+09:00 info: mqtt-connector connections are ready
21
+ 2023-07-13T20:36:22+09:00 info: mssql-connector connections are ready
22
+ 2023-07-13T20:36:22+09:00 info: oracle-connector connections are ready
23
+ 2023-07-13T20:36:22+09:00 info: mysql-connector connections are ready
24
+ 2023-07-13T20:36:22+09:00 info: socket servers are ready
25
+ 2023-07-13T20:36:22+09:00 info: msgraph-connector connections are ready
26
+ 2023-07-13T20:36:22+09:00 info: http-connector connections are ready
27
+ 2023-07-13T20:36:22+09:00 info: All connector for 'echo-back-server' ready
28
+ 2023-07-13T20:36:22+09:00 info: All connector for 'echo-back' ready
29
+ 2023-07-13T20:36:22+09:00 info: All connector for 'graphql-connector' ready
30
+ 2023-07-13T20:36:22+09:00 info: All connector for 'sqlite-connector' ready
31
+ 2023-07-13T20:36:22+09:00 info: All connector for 'postgresql-connector' ready
32
+ 2023-07-13T20:36:22+09:00 info: All connector for 'mqtt-connector' ready
33
+ 2023-07-13T20:36:22+09:00 info: All connector for 'mssql-connector' ready
34
+ 2023-07-13T20:36:22+09:00 info: All connector for 'oracle-connector' ready
35
+ 2023-07-13T20:36:22+09:00 info: All connector for 'mysql-connector' ready
36
+ 2023-07-13T20:36:22+09:00 info: All connector for 'socket-server' ready
37
+ 2023-07-13T20:36:22+09:00 info: All connector for 'msgraph-connector' ready
38
+ 2023-07-13T20:36:22+09:00 info: All connector for 'http-connector' ready
39
+ 2023-07-13T20:36:22+09:00 info: ConnectionManager initialization done:
40
+ 2023-07-13T20:36:22+09:00 info: For domain(61dc2a70-e0b2-4e30-95c3-c66cf47ddee2) : ["λ‚ μ”¨λ§ˆλ£¨"]
41
+ 2023-07-13T20:52:52+09:00 info: Initializing ConnectionManager...
42
+ 2023-07-13T20:52:52+09:00 info: Connector 'echo-back-server' started to ready
43
+ 2023-07-13T20:52:52+09:00 info: Connector 'echo-back' started to ready
44
+ 2023-07-13T20:52:52+09:00 info: Connector 'http-connector' started to ready
45
+ 2023-07-13T20:52:52+09:00 info: http-connector connection(λ‚ μ”¨λ§ˆλ£¨:https://bd.kma.go.kr) is connected
46
+ 2023-07-13T20:52:52+09:00 info: Connector 'graphql-connector' started to ready
47
+ 2023-07-13T20:52:52+09:00 info: Connector 'sqlite-connector' started to ready
48
+ 2023-07-13T20:52:52+09:00 info: Connector 'postgresql-connector' started to ready
49
+ 2023-07-13T20:52:52+09:00 info: Connector 'mqtt-connector' started to ready
50
+ 2023-07-13T20:52:52+09:00 info: Connector 'mssql-connector' started to ready
51
+ 2023-07-13T20:52:52+09:00 info: Connector 'oracle-connector' started to ready
52
+ 2023-07-13T20:52:52+09:00 info: Connector 'mysql-connector' started to ready
53
+ 2023-07-13T20:52:52+09:00 info: Connector 'socket-server' started to ready
54
+ 2023-07-13T20:52:52+09:00 info: Connector 'msgraph-connector' started to ready
55
+ 2023-07-13T20:52:52+09:00 info: echo-back-servers are ready
56
+ 2023-07-13T20:52:52+09:00 info: echo-back connections are ready
57
+ 2023-07-13T20:52:52+09:00 info: graphql-connector connections are ready
58
+ 2023-07-13T20:52:52+09:00 info: sqlite-connector connections are ready
59
+ 2023-07-13T20:52:52+09:00 info: postgresql-connector connections are ready
60
+ 2023-07-13T20:52:52+09:00 info: mqtt-connector connections are ready
61
+ 2023-07-13T20:52:52+09:00 info: mssql-connector connections are ready
62
+ 2023-07-13T20:52:52+09:00 info: oracle-connector connections are ready
63
+ 2023-07-13T20:52:52+09:00 info: mysql-connector connections are ready
64
+ 2023-07-13T20:52:52+09:00 info: socket servers are ready
65
+ 2023-07-13T20:52:52+09:00 info: msgraph-connector connections are ready
66
+ 2023-07-13T20:52:52+09:00 info: http-connector connections are ready
67
+ 2023-07-13T20:52:52+09:00 info: All connector for 'echo-back-server' ready
68
+ 2023-07-13T20:52:52+09:00 info: All connector for 'echo-back' ready
69
+ 2023-07-13T20:52:52+09:00 info: All connector for 'graphql-connector' ready
70
+ 2023-07-13T20:52:52+09:00 info: All connector for 'sqlite-connector' ready
71
+ 2023-07-13T20:52:52+09:00 info: All connector for 'postgresql-connector' ready
72
+ 2023-07-13T20:52:52+09:00 info: All connector for 'mqtt-connector' ready
73
+ 2023-07-13T20:52:52+09:00 info: All connector for 'mssql-connector' ready
74
+ 2023-07-13T20:52:52+09:00 info: All connector for 'oracle-connector' ready
75
+ 2023-07-13T20:52:52+09:00 info: All connector for 'mysql-connector' ready
76
+ 2023-07-13T20:52:52+09:00 info: All connector for 'socket-server' ready
77
+ 2023-07-13T20:52:52+09:00 info: All connector for 'msgraph-connector' ready
78
+ 2023-07-13T20:52:52+09:00 info: All connector for 'http-connector' ready
79
+ 2023-07-13T20:52:52+09:00 info: ConnectionManager initialization done:
80
+ 2023-07-13T20:52:52+09:00 info: For domain(61dc2a70-e0b2-4e30-95c3-c66cf47ddee2) : ["λ‚ μ”¨λ§ˆλ£¨"]
@@ -0,0 +1,15 @@
1
+ {
2
+ "keep": {
3
+ "days": true,
4
+ "amount": 14
5
+ },
6
+ "auditLog": "logs/system/.144ddb221a51f7e2afac3fe1fc3dcf306a8de9ef-audit.json",
7
+ "files": [
8
+ {
9
+ "date": 1689248235070,
10
+ "name": "logs/system/scenario-μ—λ„ˆμ§€ λ ˆμ΄μ–΄ 색상-2023-07-13-20.log",
11
+ "hash": "8509c7d861880c0931ec87feae7d3833b828ef059038c240e1132ae26baf4c6e"
12
+ }
13
+ ],
14
+ "hashType": "sha256"
15
+ }
@@ -0,0 +1,20 @@
1
+ {
2
+ "keep": {
3
+ "days": true,
4
+ "amount": 14
5
+ },
6
+ "auditLog": "logs/system/.437ed478d36eef33cb9dfb565b13329b4464783e-audit.json",
7
+ "files": [
8
+ {
9
+ "date": 1683599346648,
10
+ "name": "logs/system/scenario-λ°œμ „λŸ‰ 예츑 데이터-2023-05-09-11.log",
11
+ "hash": "f7fa1a6df91294365d1b393045434891d9ea1a63afb428db4dea208c9b8bc12e"
12
+ },
13
+ {
14
+ "date": 1683601398986,
15
+ "name": "logs/system/scenario-λ°œμ „λŸ‰ 예츑 데이터-2023-05-09-12.log",
16
+ "hash": "798ae42f4efbc44a7d3ddd9e863c126d687fd1e7f790db7a627b64f5ac02e4a9"
17
+ }
18
+ ],
19
+ "hashType": "sha256"
20
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "keep": {
3
+ "days": true,
4
+ "amount": 14
5
+ },
6
+ "auditLog": "logs/system/.a16ac19e6e222b854c699e1f94ae757f5c8db307-audit.json",
7
+ "files": [
8
+ {
9
+ "date": 1683601372061,
10
+ "name": "logs/system/scenario-μΌμ‚¬λŸ‰ 예츑 지도-2023-05-09-12.log",
11
+ "hash": "93d606c9b51d26ada4839c94902f0d4d5efeb0a91708f754302cd1a24d747686"
12
+ }
13
+ ],
14
+ "hashType": "sha256"
15
+ }