@operato/scene-tab 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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,72 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ### [0.1.18](https://github.com/things-scene/operato-scene/compare/v0.1.17...v0.1.18) (2026-01-27)
7
+
8
+ **Note:** Version bump only for package @operato/scene-tab
9
+
10
+
11
+
12
+
13
+
14
+ ### [0.1.17](https://github.com/things-scene/operato-scene/compare/v0.1.16...v0.1.17) (2026-01-27)
15
+
16
+ **Note:** Version bump only for package @operato/scene-tab
17
+
18
+
19
+
20
+
21
+
22
+ ### [0.1.16](https://github.com/things-scene/operato-scene/compare/v0.1.15...v0.1.16) (2026-01-27)
23
+
24
+ **Note:** Version bump only for package @operato/scene-tab
25
+
26
+
27
+
28
+
29
+
30
+ ### [0.1.15](https://github.com/things-scene/operato-scene/compare/v0.1.14...v0.1.15) (2026-01-27)
31
+
32
+ **Note:** Version bump only for package @operato/scene-tab
33
+
34
+
35
+
36
+
37
+
38
+ ### [0.1.14](https://github.com/things-scene/operato-scene/compare/v0.1.13...v0.1.14) (2026-01-27)
39
+
40
+ **Note:** Version bump only for package @operato/scene-tab
41
+
42
+
43
+
44
+
45
+
46
+ ### [0.1.13](https://github.com/things-scene/operato-scene/compare/v0.1.12...v0.1.13) (2026-01-27)
47
+
48
+ **Note:** Version bump only for package @operato/scene-tab
49
+
50
+
51
+
52
+
53
+
54
+ ### [0.1.12](https://github.com/things-scene/operato-scene/compare/v0.1.11...v0.1.12) (2026-01-27)
55
+
56
+
57
+ ### :bug: Bug Fix
58
+
59
+ * TypeScript build errors with @types/node v24 compatibility ([ef33580](https://github.com/things-scene/operato-scene/commit/ef335805bc6af9872fc1de717b4f3841e565b26f))
60
+
61
+
62
+
63
+ ### [0.1.11](https://github.com/things-scene/operato-scene/compare/v0.1.10...v0.1.11) (2022-08-13)
64
+
65
+
66
+ ### :bug: Bug Fix
67
+
68
+ * latest @hatiolab/things-scene@2.8.7 ([597d80e](https://github.com/things-scene/operato-scene/commit/597d80ebb2953d56f3dc61cc6d1cc862ef1bca0b))
69
+
70
+
71
+
6
72
  ### [0.1.10](https://github.com/things-scene/operato-scene/compare/v0.1.9...v0.1.10) (2022-08-12)
7
73
 
8
74
 
@@ -0,0 +1,10 @@
1
+ import { ComponentNature, Container } from '@hatiolab/things-scene';
2
+ export default class TabCard extends Container {
3
+ private _clickPoint?;
4
+ get hasTextProperty(): boolean;
5
+ get showMoveHandle(): boolean;
6
+ get mutable(): boolean;
7
+ get resizable(): boolean;
8
+ get rotatable(): boolean;
9
+ get nature(): ComponentNature;
10
+ }
@@ -0,0 +1,69 @@
1
+ import { __decorate } from "tslib";
2
+ /*
3
+ * Copyright © HatioLab Inc. All rights reserved.
4
+ */
5
+ import { Container, sceneComponent } from '@hatiolab/things-scene';
6
+ const NATURE = {
7
+ mutable: false,
8
+ resizable: true,
9
+ rotatable: true,
10
+ properties: [
11
+ {
12
+ type: 'action',
13
+ label: 'remove',
14
+ name: 'remove',
15
+ property: {
16
+ icon: 'remove_circle',
17
+ action: function (tabCard) {
18
+ let tabContainer = tabCard.parent;
19
+ tabContainer.removeComponent(tabCard);
20
+ tabContainer.set('activeIndex', 0);
21
+ }
22
+ }
23
+ }
24
+ ]
25
+ };
26
+ let TabCard = class TabCard extends Container {
27
+ get hasTextProperty() {
28
+ return false;
29
+ }
30
+ get showMoveHandle() {
31
+ return false;
32
+ }
33
+ /*
34
+ * PATH 리스트를 직접 수정할 수 있는 지를 결정한다.
35
+ *
36
+ * 일반적으로 PATH는 바운드 생성을 위해서 논리적으로 생성되므로, 직접 수정하지 않는다.(return false)
37
+ * 그러나, 각 꼭지점들이 개별로 움직이는 다각형류는 path 라는 모델데이타를 가지므로, 직접수정이 가능할 수 있다.(return true)
38
+ *
39
+ * Immutable 컴포넌트의 형상을 바꾸는 방법은 바운드를 이용한 리사이즈나, 특별한 컨트롤을 통해서 가능하다.
40
+ */
41
+ get mutable() {
42
+ return false;
43
+ }
44
+ /*
45
+ * BOUND를 통해서 리사이즈를 할 수 있는 지를 결정한다.
46
+ *
47
+ * 일반적으로 면적을 갖는 컴포넌트는 대체로 가능하다.(return true)
48
+ * 그러나, LINE 등 면적을 가지지않는 컴포넌트는 가능하지 않도록 정의한다.(return false)
49
+ */
50
+ get resizable() {
51
+ return false;
52
+ }
53
+ /*
54
+ * 회전을 할 수 있는 지를 결정한다.
55
+ *
56
+ * 일반적으로 모든 컴포넌트는 가능하다.(return true)
57
+ */
58
+ get rotatable() {
59
+ return false;
60
+ }
61
+ get nature() {
62
+ return NATURE;
63
+ }
64
+ };
65
+ TabCard = __decorate([
66
+ sceneComponent('tab-card')
67
+ ], TabCard);
68
+ export default TabCard;
69
+ //# sourceMappingURL=tab-card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-card.js","sourceRoot":"","sources":["../src/tab-card.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,OAAO,EAA8B,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI9F,MAAM,MAAM,GAAoB;IAC9B,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,QAAQ;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE;gBACR,IAAI,EAAE,eAAe;gBACrB,MAAM,EAAE,UAAU,OAAgB;oBAChC,IAAI,YAAY,GAAG,OAAO,CAAC,MAAsB,CAAA;oBACjD,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;oBACrC,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;gBACpC,CAAC;aACF;SACF;KACF;CACF,CAAA;AAGc,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,SAAS;IAG5C,IAAI,eAAe;QACjB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;;;OAOG;IACH,IAAI,OAAO;QACT,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;;OAKG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CACF,CAAA;AA7CoB,OAAO;IAD3B,cAAc,CAAC,UAAU,CAAC;GACN,OAAO,CA6C3B;eA7CoB,OAAO","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, ComponentNature, Container, sceneComponent } from '@hatiolab/things-scene'\n\nimport TabContainer from './tab-container.js'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'action',\n label: 'remove',\n name: 'remove',\n property: {\n icon: 'remove_circle',\n action: function (tabCard: TabCard) {\n let tabContainer = tabCard.parent as TabContainer\n tabContainer.removeComponent(tabCard)\n tabContainer.set('activeIndex', 0)\n }\n }\n }\n ]\n}\n\n@sceneComponent('tab-card')\nexport default class TabCard extends Container {\n private _clickPoint?: Component\n\n get hasTextProperty() {\n return false\n }\n\n get showMoveHandle() {\n return false\n }\n\n /*\n * PATH 리스트를 직접 수정할 수 있는 지를 결정한다.\n *\n * 일반적으로 PATH는 바운드 생성을 위해서 논리적으로 생성되므로, 직접 수정하지 않는다.(return false)\n * 그러나, 각 꼭지점들이 개별로 움직이는 다각형류는 path 라는 모델데이타를 가지므로, 직접수정이 가능할 수 있다.(return true)\n *\n * Immutable 컴포넌트의 형상을 바꾸는 방법은 바운드를 이용한 리사이즈나, 특별한 컨트롤을 통해서 가능하다.\n */\n get mutable() {\n return false\n }\n\n /*\n * BOUND를 통해서 리사이즈를 할 수 있는 지를 결정한다.\n *\n * 일반적으로 면적을 갖는 컴포넌트는 대체로 가능하다.(return true)\n * 그러나, LINE 등 면적을 가지지않는 컴포넌트는 가능하지 않도록 정의한다.(return false)\n */\n get resizable() {\n return false\n }\n\n /*\n * 회전을 할 수 있는 지를 결정한다.\n *\n * 일반적으로 모든 컴포넌트는 가능하다.(return true)\n */\n get rotatable() {\n return false\n }\n\n get nature() {\n return NATURE\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { ComponentNature, Container, State } from '@hatiolab/things-scene';
2
+ import TabCard from './tab-card.js';
3
+ export default class TabContainer extends Container {
4
+ private _focused;
5
+ private __down_point?;
6
+ get nature(): ComponentNature;
7
+ get layout(): import("@hatiolab/things-scene").LAYOUT;
8
+ get layoutConfig(): any;
9
+ set layoutConfig(config: any);
10
+ get activeCard(): TabCard;
11
+ get activeIndex(): number;
12
+ set activeIndex(activeIndex: number);
13
+ ready(): void;
14
+ postrender(context: CanvasRenderingContext2D): void;
15
+ contains(x: number, y: number): boolean;
16
+ onchange(after: State): void;
17
+ onmouseup(e: MouseEvent): void;
18
+ onmousedown(e: MouseEvent): void;
19
+ addCard(): void;
20
+ }
@@ -0,0 +1,178 @@
1
+ import { __decorate } from "tslib";
2
+ /*
3
+ * Copyright © HatioLab Inc. All rights reserved.
4
+ */
5
+ import { CardLayout, Container, Model, sceneComponent } from '@hatiolab/things-scene';
6
+ const LABEL_WIDTH = 25;
7
+ const LABEL_HEIGHT = 25;
8
+ function rgba(r, g, b, a) {
9
+ return `rgba(${r}, ${g}, ${b}, ${a})`;
10
+ }
11
+ const NATURE = {
12
+ mutable: false,
13
+ resizable: true,
14
+ rotatable: true,
15
+ properties: [
16
+ {
17
+ type: 'action',
18
+ label: 'add-card',
19
+ name: 'addCard',
20
+ property: {
21
+ icon: 'add_circle',
22
+ action: (tabContainer) => {
23
+ tabContainer.addCard();
24
+ }
25
+ }
26
+ },
27
+ {
28
+ type: 'number',
29
+ label: 'active index',
30
+ name: 'activeIndex'
31
+ }
32
+ ],
33
+ 'value-property': 'activeIndex',
34
+ help: 'scene/component/tab-container'
35
+ };
36
+ let TabContainer = class TabContainer extends Container {
37
+ constructor() {
38
+ super(...arguments);
39
+ this._focused = false;
40
+ }
41
+ get nature() {
42
+ return NATURE;
43
+ }
44
+ get layout() {
45
+ return CardLayout;
46
+ }
47
+ get layoutConfig() {
48
+ return this.getState('layoutConfig');
49
+ }
50
+ set layoutConfig(config) {
51
+ this.setState('layoutConfig', config);
52
+ }
53
+ get activeCard() {
54
+ return this.components[this.getState('layoutConfig').activeIndex || 0];
55
+ }
56
+ get activeIndex() {
57
+ return this.getState('activeIndex') || 0;
58
+ }
59
+ set activeIndex(activeIndex) {
60
+ this.setState('activeIndex', Number(activeIndex));
61
+ }
62
+ ready() {
63
+ super.ready();
64
+ if (this.components.length == 0) {
65
+ this.addCard();
66
+ }
67
+ this.data = this.state.activeIndex;
68
+ }
69
+ postrender(context) {
70
+ if (!this.app.isViewMode && this._focused) {
71
+ var { left, top, width, fillStyle } = this.state;
72
+ // tabCard 선택 탭 그리기
73
+ for (let i = 0; i < this.components.length; i++) {
74
+ context.beginPath();
75
+ context.rect(left - LABEL_WIDTH, top + i * LABEL_HEIGHT, LABEL_WIDTH, LABEL_HEIGHT);
76
+ let color = 255 - ((20 * (i + 1)) % 255);
77
+ context.fillStyle = rgba(color, color, color, 1);
78
+ context.fill();
79
+ context.closePath();
80
+ }
81
+ context.beginPath();
82
+ context.moveTo(left, top);
83
+ context.lineTo(left - LABEL_WIDTH, top);
84
+ context.lineTo(left - LABEL_WIDTH, top + this.components.length * LABEL_HEIGHT);
85
+ context.lineTo(left, top + this.components.length * LABEL_HEIGHT);
86
+ context.strokeStyle = '#ccc';
87
+ context.stroke();
88
+ context.closePath();
89
+ }
90
+ super.postrender(context);
91
+ }
92
+ contains(x, y) {
93
+ var contains = super.contains(x, y);
94
+ if (this.app.isViewMode)
95
+ return contains;
96
+ var { left, top, width } = this.bounds;
97
+ var h = LABEL_HEIGHT;
98
+ contains =
99
+ contains ||
100
+ // card selector 영역에 포함되는지
101
+ (x < Math.max(left - LABEL_WIDTH, left) &&
102
+ x > Math.min(left - LABEL_WIDTH, left) &&
103
+ y < Math.max(top + h * this.size(), top) &&
104
+ y > Math.min(top + h * this.size(), top));
105
+ if (contains)
106
+ this._focused = true;
107
+ else
108
+ this._focused = false;
109
+ this.invalidate();
110
+ return contains;
111
+ }
112
+ onchange(after) {
113
+ if ('activeIndex' in after) {
114
+ this.layoutConfig = {
115
+ ...this.layoutConfig,
116
+ activeIndex: after.activeIndex
117
+ };
118
+ /*
119
+ 자동 data 변경은 반복적인 데이타바인딩을 일으키는 점을 감안하라.
120
+ 즉, 자신의 activeIndex를 데이타바인딩으로 수정하지말아야 한다.
121
+ */
122
+ this.data = after.activeIndex;
123
+ }
124
+ }
125
+ onmouseup(e) {
126
+ var down_point = this.__down_point;
127
+ delete this.__down_point;
128
+ if (!down_point || down_point.x != e.offsetX || down_point.y != e.offsetY) {
129
+ return;
130
+ }
131
+ var point = this.transcoordC2S(e.offsetX, e.offsetY);
132
+ var { left, top } = this.state;
133
+ var x = point.x - left;
134
+ var y = point.y - top;
135
+ if (x > 0)
136
+ return;
137
+ y /= LABEL_HEIGHT;
138
+ y = Math.floor(y);
139
+ if (!this.layoutConfig)
140
+ this.layoutConfig = {};
141
+ if (y >= this.components.length)
142
+ return;
143
+ // /* 생성 버튼이 클릭되면, 새로운 tabCard를 추가한다. */
144
+ // if(y == this.components.length) {
145
+ // this.add(Model.compile({
146
+ // type: 'tab-card',
147
+ // width: 100,
148
+ // height: 100
149
+ // }))
150
+ // }
151
+ this.setState('activeIndex', y);
152
+ }
153
+ onmousedown(e) {
154
+ this.__down_point = {
155
+ x: e.offsetX,
156
+ y: e.offsetY
157
+ };
158
+ }
159
+ addCard() {
160
+ const color = 255 - ((20 * (this.components.length + 1)) % 255);
161
+ const hex = color.toString(16);
162
+ const tabCard = Model.compile({
163
+ type: 'tab-card',
164
+ fillStyle: `#${hex}${hex}${hex}`,
165
+ top: 0,
166
+ left: 0,
167
+ width: 100,
168
+ height: 100
169
+ });
170
+ this.addComponent(tabCard);
171
+ this.setState('activeIndex', this.components.length - 1);
172
+ }
173
+ };
174
+ TabContainer = __decorate([
175
+ sceneComponent('tab-container')
176
+ ], TabContainer);
177
+ export default TabContainer;
178
+ //# sourceMappingURL=tab-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-container.js","sourceRoot":"","sources":["../src/tab-container.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport {\n CardLayout,\n Component,\n ComponentNature,\n Container,\n Model,\n POINT,\n sceneComponent,\n State\n} from '@hatiolab/things-scene'\n\nimport TabCard from './tab-card.js'\n\nconst LABEL_WIDTH = 25\nconst LABEL_HEIGHT = 25\n\nfunction rgba(r: number, g: number, b: number, a: number) {\n return `rgba(${r}, ${g}, ${b}, ${a})`\n}\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'action',\n label: 'add-card',\n name: 'addCard',\n property: {\n icon: 'add_circle',\n action: (tabContainer: TabContainer) => {\n tabContainer.addCard()\n }\n }\n },\n {\n type: 'number',\n label: 'active index',\n name: 'activeIndex'\n }\n ],\n 'value-property': 'activeIndex',\n help: 'scene/component/tab-container'\n}\n\n@sceneComponent('tab-container')\nexport default class TabContainer extends Container {\n private _focused: boolean = false\n private __down_point?: POINT\n\n get nature() {\n return NATURE\n }\n\n get layout() {\n return CardLayout\n }\n\n get layoutConfig() {\n return this.getState('layoutConfig')\n }\n\n set layoutConfig(config) {\n this.setState('layoutConfig', config)\n }\n\n get activeCard(): TabCard {\n return this.components[this.getState('layoutConfig').activeIndex || 0] as TabCard\n }\n\n get activeIndex() {\n return this.getState('activeIndex') || 0\n }\n\n set activeIndex(activeIndex: number) {\n this.setState('activeIndex', Number(activeIndex))\n }\n\n ready() {\n super.ready()\n\n if (this.components.length == 0) {\n this.addCard()\n }\n\n this.data = this.state.activeIndex\n }\n\n postrender(context: CanvasRenderingContext2D) {\n if (!this.app.isViewMode && this._focused) {\n var { left, top, width, fillStyle } = this.state\n\n // tabCard 선택 탭 그리기\n for (let i = 0; i < this.components.length; i++) {\n context.beginPath()\n\n context.rect(left - LABEL_WIDTH, top + i * LABEL_HEIGHT, LABEL_WIDTH, LABEL_HEIGHT)\n\n let color = 255 - ((20 * (i + 1)) % 255)\n context.fillStyle = rgba(color, color, color, 1)\n context.fill()\n\n context.closePath()\n }\n\n context.beginPath()\n\n context.moveTo(left, top)\n context.lineTo(left - LABEL_WIDTH, top)\n context.lineTo(left - LABEL_WIDTH, top + this.components.length * LABEL_HEIGHT)\n context.lineTo(left, top + this.components.length * LABEL_HEIGHT)\n\n context.strokeStyle = '#ccc'\n context.stroke()\n\n context.closePath()\n }\n\n super.postrender(context)\n }\n\n contains(x: number, y: number) {\n var contains = super.contains(x, y)\n\n if (this.app.isViewMode) return contains\n\n var { left, top, width } = this.bounds\n var h = LABEL_HEIGHT\n\n contains =\n contains ||\n // card selector 영역에 포함되는지\n (x < Math.max(left - LABEL_WIDTH, left) &&\n x > Math.min(left - LABEL_WIDTH, left) &&\n y < Math.max(top + h * this.size(), top) &&\n y > Math.min(top + h * this.size(), top))\n\n if (contains) this._focused = true\n else this._focused = false\n\n this.invalidate()\n return contains\n }\n\n onchange(after: State) {\n if ('activeIndex' in after) {\n this.layoutConfig = {\n ...this.layoutConfig,\n activeIndex: after.activeIndex\n }\n\n /* \n 자동 data 변경은 반복적인 데이타바인딩을 일으키는 점을 감안하라.\n 즉, 자신의 activeIndex를 데이타바인딩으로 수정하지말아야 한다.\n */\n this.data = after.activeIndex\n }\n }\n\n onmouseup(e: MouseEvent) {\n var down_point = this.__down_point\n delete this.__down_point\n\n if (!down_point || down_point.x != e.offsetX || down_point.y != e.offsetY) {\n return\n }\n\n var point = this.transcoordC2S(e.offsetX, e.offsetY)\n\n var { left, top } = this.state\n\n var x = point.x - left\n var y = point.y - top\n\n if (x > 0) return\n\n y /= LABEL_HEIGHT\n y = Math.floor(y)\n\n if (!this.layoutConfig) this.layoutConfig = {}\n\n if (y >= this.components.length) return\n\n // /* 생성 버튼이 클릭되면, 새로운 tabCard를 추가한다. */\n // if(y == this.components.length) {\n // this.add(Model.compile({\n // type: 'tab-card',\n // width: 100,\n // height: 100\n // }))\n // }\n this.setState('activeIndex', y)\n }\n\n onmousedown(e: MouseEvent) {\n this.__down_point = {\n x: e.offsetX,\n y: e.offsetY\n }\n }\n\n addCard() {\n const color = 255 - ((20 * (this.components.length + 1)) % 255)\n const hex = color.toString(16)\n\n const tabCard = Model.compile({\n type: 'tab-card',\n fillStyle: `#${hex}${hex}${hex}`,\n top: 0,\n left: 0,\n width: 100,\n height: 100\n })\n\n this.addComponent(tabCard)\n this.setState('activeIndex', this.components.length - 1)\n }\n}\n"]}
@@ -0,0 +1,16 @@
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
+ fontSize: number;
13
+ lineWidth: number;
14
+ };
15
+ };
16
+ export default _default;
@@ -0,0 +1,17 @@
1
+ const icon = new URL('../../icons/tab-container.png', import.meta.url).href;
2
+ export default {
3
+ type: 'tab-container',
4
+ description: 'tab container(card layout)',
5
+ group: 'container' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,
6
+ icon,
7
+ model: {
8
+ type: 'tab-container',
9
+ left: 100,
10
+ top: 100,
11
+ width: 200,
12
+ height: 200,
13
+ fontSize: 80,
14
+ lineWidth: 1
15
+ }
16
+ };
17
+ //# sourceMappingURL=tab-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tab-container.js","sourceRoot":"","sources":["../../src/templates/tab-container.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAE3E,eAAe;IACb,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,4BAA4B;IACzC,KAAK,EAAE,WAAW,CAAC,gGAAgG;IACnH,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,CAAC;KACb;CACF,CAAA","sourcesContent":["const icon = new URL('../../icons/tab-container.png', import.meta.url).href\n\nexport default {\n type: 'tab-container',\n description: 'tab container(card layout)',\n group: 'container' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,\n icon,\n model: {\n type: 'tab-container',\n left: 100,\n top: 100,\n width: 200,\n height: 200,\n fontSize: 80,\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": 1744792578685,
10
+ "name": "logs/application-2025-04-16-17.log",
11
+ "hash": "feffa3637b7ac692e6ea148557819409753ab8e917cca58862b70078bf9c2c5d"
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": 1744792580585,
10
+ "name": "logs/connections-2025-04-16-17.log",
11
+ "hash": "2e94b8702032329dc36b4bbf2e1ae2d539ce80030b18cd3ab0ec6ac528436b37"
12
+ }
13
+ ],
14
+ "hashType": "sha256"
15
+ }
@@ -0,0 +1,41 @@
1
+ 2025-04-16T17:36:20+09:00 info: File Storage is Ready.
2
+ 2025-04-16T17:36:22+09:00 info: Default DataSource established
3
+ 2025-04-16T17:36:23+09:00 info: 🚀 Server ready at http://0.0.0.0:3000/graphql
4
+ 2025-04-16T17:36:23+09:00 info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/graphql
5
+ 2025-04-16T17:38:48+09:00 error: NotFoundError: thumbnail not found
6
+ at Object.throw (/Users/super/Documents/GitHub/operato-scene/node_modules/koa/lib/context.js:97:11)
7
+ at /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/board-service/dist-server/routers/standalone-board-service-router.js:165:22
8
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/routes.js:79:13
9
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/router/path-base-domain-router.js:9:5
10
+ at async domainAuthenticateMiddleware (/Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/domain-authenticate-middleware.js:50:16)
11
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/jwt-authenticate-middleware.js:71:17
12
+ 2025-04-16T17:38:48+09:00 error: NotFoundError: thumbnail not found
13
+ at Object.throw (/Users/super/Documents/GitHub/operato-scene/node_modules/koa/lib/context.js:97:11)
14
+ at /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/board-service/dist-server/routers/standalone-board-service-router.js:165:22
15
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/routes.js:79:13
16
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/router/path-base-domain-router.js:9:5
17
+ at async domainAuthenticateMiddleware (/Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/domain-authenticate-middleware.js:50:16)
18
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/jwt-authenticate-middleware.js:71:17
19
+ 2025-04-16T17:38:48+09:00 error: NotFoundError: thumbnail not found
20
+ at Object.throw (/Users/super/Documents/GitHub/operato-scene/node_modules/koa/lib/context.js:97:11)
21
+ at /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/board-service/dist-server/routers/standalone-board-service-router.js:165:22
22
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/routes.js:79:13
23
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/router/path-base-domain-router.js:9:5
24
+ at async domainAuthenticateMiddleware (/Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/domain-authenticate-middleware.js:50:16)
25
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/jwt-authenticate-middleware.js:71:17
26
+ 2025-04-16T17:38:48+09:00 error: NotFoundError: thumbnail not found
27
+ at Object.throw (/Users/super/Documents/GitHub/operato-scene/node_modules/koa/lib/context.js:97:11)
28
+ at /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/board-service/dist-server/routers/standalone-board-service-router.js:165:22
29
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/routes.js:79:13
30
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/router/path-base-domain-router.js:9:5
31
+ at async domainAuthenticateMiddleware (/Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/domain-authenticate-middleware.js:50:16)
32
+ at async /Users/super/Documents/GitHub/operato-scene/node_modules/@things-factory/auth-base/dist-server/middlewares/jwt-authenticate-middleware.js:71:17
33
+ 2025-04-16T17:38:53+09:00 error: scenario '008_전체 주차장 카메라상태 조회' not found.
34
+ 2025-04-16T17:38:53+09:00 error: scenario '003_전체 주차장 혼잡도 조회' not found.
35
+ 2025-04-16T17:38:53+09:00 error: scenario '006_특정 주차장 이용률 조회' not found.
36
+ 2025-04-16T17:39:53+09:00 error: scenario '008_전체 주차장 카메라상태 조회' not found.
37
+ 2025-04-16T17:39:53+09:00 error: scenario '003_전체 주차장 혼잡도 조회' not found.
38
+ 2025-04-16T17:39:53+09:00 error: scenario '006_특정 주차장 이용률 조회' not found.
39
+ 2025-04-16T17:40:53+09:00 error: scenario '008_전체 주차장 카메라상태 조회' not found.
40
+ 2025-04-16T17:40:53+09:00 error: scenario '003_전체 주차장 혼잡도 조회' not found.
41
+ 2025-04-16T17:40:53+09:00 error: scenario '006_특정 주차장 이용률 조회' not found.
@@ -0,0 +1,56 @@
1
+ 2025-04-16T17:36:23+09:00 info: Initializing ConnectionManager...
2
+ 2025-04-16T17:36:23+09:00 info: Connector 'echo-back-server' started to ready
3
+ 2025-04-16T17:36:23+09:00 info: Connector 'echo-back' started to ready
4
+ 2025-04-16T17:36:23+09:00 info: Connector 'http-connector' started to ready
5
+ 2025-04-16T17:36:23+09:00 info: Connector 'graphql-connector' started to ready
6
+ 2025-04-16T17:36:23+09:00 info: Connector 'sqlite-connector' started to ready
7
+ 2025-04-16T17:36:23+09:00 info: Connector 'postgresql-connector' started to ready
8
+ 2025-04-16T17:36:23+09:00 info: Connector 'mqtt-connector' started to ready
9
+ 2025-04-16T17:36:23+09:00 info: Connector 'mssql-connector' started to ready
10
+ 2025-04-16T17:36:23+09:00 info: Connector 'oracle-connector' started to ready
11
+ 2025-04-16T17:36:23+09:00 info: Connector 'mysql-connector' started to ready
12
+ 2025-04-16T17:36:23+09:00 info: Connector 'socket-server' started to ready
13
+ 2025-04-16T17:36:23+09:00 info: Connector 'operato-connector' started to ready
14
+ 2025-04-16T17:36:23+09:00 info: Connector 'headless-connector' started to ready
15
+ 2025-04-16T17:36:23+09:00 info: Connector 'email-connector' started to ready
16
+ 2025-04-16T17:36:23+09:00 info: Connector 'influxdb-connector' started to ready
17
+ 2025-04-16T17:36:23+09:00 info: Connector 'msgraph-connector' started to ready
18
+ 2025-04-16T17:36:23+09:00 info: Connector 'weather-api-connector' started to ready
19
+ 2025-04-16T17:36:23+09:00 info: Connector 'proxy-connector' started to ready
20
+ 2025-04-16T17:36:23+09:00 info: echo-back-servers are ready
21
+ 2025-04-16T17:36:23+09:00 info: echo-back connections are ready
22
+ 2025-04-16T17:36:23+09:00 info: http-connector connections are ready
23
+ 2025-04-16T17:36:23+09:00 info: graphql-connector connections are ready
24
+ 2025-04-16T17:36:23+09:00 info: sqlite-connector connections are ready
25
+ 2025-04-16T17:36:23+09:00 info: postgresql-connector connections are ready
26
+ 2025-04-16T17:36:23+09:00 info: mqtt-connector connections are ready
27
+ 2025-04-16T17:36:23+09:00 info: mssql-connector connections are ready
28
+ 2025-04-16T17:36:23+09:00 info: oracle-connector connections are ready
29
+ 2025-04-16T17:36:23+09:00 info: mysql-connector connections are ready
30
+ 2025-04-16T17:36:23+09:00 info: socket servers are ready
31
+ 2025-04-16T17:36:23+09:00 info: operato-connector connections are ready
32
+ 2025-04-16T17:36:23+09:00 info: headless-connector connections are ready
33
+ 2025-04-16T17:36:23+09:00 info: email connections are ready
34
+ 2025-04-16T17:36:23+09:00 info: influxdb connections are ready
35
+ 2025-04-16T17:36:23+09:00 info: msgraph-connector connections are ready
36
+ 2025-04-16T17:36:23+09:00 info: Weather API connections are ready
37
+ 2025-04-16T17:36:23+09:00 info: proxy-connector connections are ready
38
+ 2025-04-16T17:36:23+09:00 info: All connector for 'echo-back-server' ready
39
+ 2025-04-16T17:36:23+09:00 info: All connector for 'echo-back' ready
40
+ 2025-04-16T17:36:23+09:00 info: All connector for 'http-connector' ready
41
+ 2025-04-16T17:36:23+09:00 info: All connector for 'graphql-connector' ready
42
+ 2025-04-16T17:36:23+09:00 info: All connector for 'sqlite-connector' ready
43
+ 2025-04-16T17:36:23+09:00 info: All connector for 'postgresql-connector' ready
44
+ 2025-04-16T17:36:23+09:00 info: All connector for 'mqtt-connector' ready
45
+ 2025-04-16T17:36:23+09:00 info: All connector for 'mssql-connector' ready
46
+ 2025-04-16T17:36:23+09:00 info: All connector for 'oracle-connector' ready
47
+ 2025-04-16T17:36:23+09:00 info: All connector for 'mysql-connector' ready
48
+ 2025-04-16T17:36:23+09:00 info: All connector for 'socket-server' ready
49
+ 2025-04-16T17:36:23+09:00 info: All connector for 'operato-connector' ready
50
+ 2025-04-16T17:36:23+09:00 info: All connector for 'headless-connector' ready
51
+ 2025-04-16T17:36:23+09:00 info: All connector for 'email-connector' ready
52
+ 2025-04-16T17:36:23+09:00 info: All connector for 'influxdb-connector' ready
53
+ 2025-04-16T17:36:23+09:00 info: All connector for 'msgraph-connector' ready
54
+ 2025-04-16T17:36:23+09:00 info: All connector for 'weather-api-connector' ready
55
+ 2025-04-16T17:36:23+09:00 info: All connector for 'proxy-connector' ready
56
+ 2025-04-16T17:36:23+09:00 info: ConnectionManager initialization done:
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Tab style container for Things Scene",
4
4
  "license": "MIT",
5
5
  "author": "heartyoh",
6
- "version": "0.1.10",
6
+ "version": "0.1.18",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.js",
9
9
  "things-scene": true,
@@ -26,13 +26,13 @@
26
26
  "migration": "things-factory-migration"
27
27
  },
28
28
  "dependencies": {
29
- "@hatiolab/things-scene": "^2.8.5"
29
+ "@hatiolab/things-scene": "^2.8.7"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@hatiolab/prettier-config": "^1.0.0",
33
33
  "@operato/board": "^0.4.6",
34
- "@things-factory/builder": "^4.3.0-alpha.0",
35
- "@things-factory/operato-board": "^4.3.0-alpha.0",
34
+ "@things-factory/builder": "^4.3.74",
35
+ "@things-factory/operato-board": "^4.3.76",
36
36
  "@typescript-eslint/eslint-plugin": "^4.33.0",
37
37
  "@typescript-eslint/parser": "^4.33.0",
38
38
  "@web/dev-server": "^0.1.28",
@@ -57,5 +57,5 @@
57
57
  "prettier --write"
58
58
  ]
59
59
  },
60
- "gitHead": "fec0663b9dd4e5d0d092ed5b8f29380a1ae9763b"
60
+ "gitHead": "09fac73096902530d84321e121b307006533fe24"
61
61
  }