@operato/scene-visualizer 10.0.0-beta.3 → 10.0.0-beta.7
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/editors/property-editor-gltf-fill-targets.d.ts +1 -1
- package/dist/editors/property-editor-gltf-fill-targets.js +5 -7
- package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -1
- package/dist/editors/property-editor-location-increase-pattern.js +0 -4
- package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/rack-table-3d.js +1 -0
- package/dist/rack-table-3d.js.map +1 -1
- package/dist/rack-table.js +13 -0
- package/dist/rack-table.js.map +1 -1
- package/dist/rack.d.ts +6 -0
- package/dist/rack.js +10 -1
- package/dist/rack.js.map +1 -1
- package/dist/stock-hub.d.ts +25 -0
- package/dist/stock-hub.js +147 -0
- package/dist/stock-hub.js.map +1 -0
- package/dist/stock.d.ts +2 -0
- package/dist/stock.js +22 -33
- package/dist/stock.js.map +1 -1
- package/dist/templates/index.d.ts +0 -41
- package/dist/templates/index.js +2 -0
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/rack-table.d.ts +2 -0
- package/dist/templates/rack-table.js +4 -2
- package/dist/templates/rack-table.js.map +1 -1
- package/dist/templates/stock-hub.d.ts +14 -0
- package/dist/templates/stock-hub.js +15 -0
- package/dist/templates/stock-hub.js.map +1 -0
- package/dist/templates/visualizer.js +1 -1
- package/dist/templates/visualizer.js.map +1 -1
- package/dist/visualizer.d.ts +2 -1
- package/dist/visualizer.js +47 -48
- package/dist/visualizer.js.map +1 -1
- package/icons/stock-hub.png +0 -0
- package/package.json +2 -2
package/dist/rack.d.ts
CHANGED
|
@@ -9,6 +9,12 @@ export declare class Rack extends RealObject {
|
|
|
9
9
|
static boardGeometry: THREE.PlaneGeometry;
|
|
10
10
|
private static _boardMaterial?;
|
|
11
11
|
get visualizer(): Visualizer | undefined;
|
|
12
|
+
/**
|
|
13
|
+
* Stock 등록 대상: 1순위 조상 Visualizer(하위호환), 2순위 서비스 레지스트리의 stock-hub
|
|
14
|
+
*/
|
|
15
|
+
get stockRegistry(): {
|
|
16
|
+
putObject(id: string, obj: RealObject): void;
|
|
17
|
+
} | undefined;
|
|
12
18
|
get rackTable(): RackTable | undefined;
|
|
13
19
|
get cz(): number;
|
|
14
20
|
static get boardMaterial(): THREE.MeshStandardMaterial;
|
package/dist/rack.js
CHANGED
|
@@ -20,6 +20,15 @@ export class Rack extends RealObject {
|
|
|
20
20
|
component = component.parent;
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Stock 등록 대상: 1순위 조상 Visualizer(하위호환), 2순위 서비스 레지스트리의 stock-hub
|
|
25
|
+
*/
|
|
26
|
+
get stockRegistry() {
|
|
27
|
+
const vis = this.visualizer;
|
|
28
|
+
if (vis)
|
|
29
|
+
return vis;
|
|
30
|
+
return this.component.root?.getService?.('stock');
|
|
31
|
+
}
|
|
23
32
|
get rackTable() {
|
|
24
33
|
var component = this.component;
|
|
25
34
|
while (component) {
|
|
@@ -87,7 +96,7 @@ export class Rack extends RealObject {
|
|
|
87
96
|
var binCode = (bins[b] || '').replace('.', '');
|
|
88
97
|
stock.object3d.name = `${this.makeLocationString(shelfLocIds[i])}${binCode}`;
|
|
89
98
|
this.object3d.add(stock.object3d);
|
|
90
|
-
this.
|
|
99
|
+
this.stockRegistry?.putObject(stock.object3d.name, stock);
|
|
91
100
|
}
|
|
92
101
|
}
|
|
93
102
|
}
|
package/dist/rack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rack.js","sourceRoot":"","sources":["../src/rack.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'\n\nimport { RealObject } from '@hatiolab/things-scene'\nimport { Stock } from './stock.js'\nimport { RackTable } from './rack-table.js'\nimport { Visualizer } from './visualizer.js'\n\nexport class Rack extends RealObject {\n private _frame?: THREE.BufferGeometry\n private _board?: THREE.BufferGeometry\n\n static rackFrameGeometry = new THREE.BoxGeometry(1, 1, 1)\n static boardGeometry = new THREE.PlaneGeometry(1, 1, 1, 1)\n\n private static _boardMaterial?: THREE.MeshStandardMaterial\n\n get visualizer(): Visualizer | undefined {\n var component = this.component\n\n while (component) {\n if (component.state.type == 'visualizer') {\n return component as unknown as Visualizer\n }\n component = component.parent\n }\n }\n\n get rackTable(): RackTable | undefined {\n var component = this.component\n\n while (component) {\n if (component.state.type == 'rack-table') {\n return component as unknown as RackTable\n }\n component = component.parent\n }\n }\n\n get cz() {\n var { shelves = 1, depth = 1 } = this.rackTable!.state\n\n return 0.5 * depth * shelves\n }\n\n static get boardMaterial() {\n if (!Rack._boardMaterial) {\n Rack._boardMaterial = new THREE.MeshStandardMaterial({\n color: '#dedede',\n side: THREE.DoubleSide,\n polygonOffset: true,\n polygonOffsetFactor: -0.1\n })\n }\n\n return Rack._boardMaterial\n }\n\n get frame() {\n return this._frame\n }\n\n get board() {\n return this._board\n }\n\n build() {\n super.build()\n\n var { depth, hideRackFrame, shelves, shelfLocations: commonShelfLocation, stockScale = 0.7 } = this.rackTable!.state\n\n var { width, height, shelfLocations = commonShelfLocation, binLocations = '' } = this.component.state\n\n let scale = stockScale\n\n var shelfLocIds\n\n if (!shelfLocations) {\n shelfLocIds = []\n for (var i = 0; i < shelves; i++) shelfLocIds.push(i + 1)\n } else shelfLocIds = shelfLocations.split(/\\s*,\\s*/)\n\n var shelfBins = binLocations.trim().split('\\n').reverse()\n\n if (!hideRackFrame) {\n this._frame = this.createRackFrame(width, height, depth * shelves)\n this._board = this.createRackBoards(shelves, width, height, depth, shelfLocIds)\n }\n\n for (var i = 0; i < shelves; i++) {\n let bottom = -depth * shelves * 0.5\n if (shelfLocIds[i] == '') {\n continue\n }\n\n var bins = (shelfBins[i] || '').trim().split(/\\s*,\\s*/)\n\n var binWidth = width / (bins.length || 1)\n for (var b = 0; b < bins.length; b++) {\n let stock = new Stock(this.component, {\n width: binWidth * scale,\n height: height * scale,\n depth: depth * scale\n })\n stock.update()\n\n let stockDepth = depth * scale\n\n stock.object3d.position.set(\n (width / 2) * ((2 * b - (bins.length - 1)) / bins.length),\n bottom + depth * i + stockDepth * 0.5,\n 0\n )\n var binCode = (bins[b] || '').replace('.', '')\n stock.object3d.name = `${this.makeLocationString(shelfLocIds[i])}${binCode}`\n\n this.object3d.add(stock.object3d)\n this.visualizer?.putObject(stock.object3d.name, stock)\n }\n }\n }\n\n createRackFrame(w: number, h: number, d: number): THREE.BufferGeometry {\n const frameWeight = Math.round(Math.min(w, h) / 10)\n const geometries = []\n\n for (let i = 0; i < 4; i++) {\n const geometry = Rack.rackFrameGeometry.clone()\n geometry.scale(frameWeight, d, frameWeight)\n\n switch (i) {\n case 0:\n geometry.translate(w / 2, 0, h / 2)\n break\n case 1:\n geometry.translate(w / 2, 0, -h / 2)\n break\n case 2:\n geometry.translate(-w / 2, 0, h / 2)\n break\n case 3:\n geometry.translate(-w / 2, 0, -h / 2)\n break\n }\n\n geometries.push(geometry)\n }\n\n return BufferGeometryUtils.mergeGeometries(geometries)\n }\n\n createRackBoards(\n shelves: number,\n width: number,\n height: number,\n depth: number,\n shelfLocIds: string[]\n ): THREE.BufferGeometry {\n let bottom = -depth * shelves * 0.5\n const geometries = []\n\n for (let i = 1; i < shelves; i++) {\n if (shelfLocIds[i] === '') {\n continue\n }\n\n const geometry = Rack.boardGeometry.clone()\n\n geometry.scale(width, height, 1)\n geometry.rotateX(Math.PI / 2)\n geometry.translate(0, bottom + depth * i, 0)\n\n geometries.push(geometry)\n }\n\n return BufferGeometryUtils.mergeGeometries(geometries)\n }\n\n makeLocationString(shelfString: string) {\n var { section = '', unit = '' } = this.component.state\n var { locPattern = '{z}{s}-{u}-{sh}', zone = '' } = this.rackTable!.state\n\n var locationString = locPattern\n\n locationString = locationString.replace(/{z}/i, zone)\n locationString = locationString.replace(/{s}/i, section)\n locationString = locationString.replace(/{u}/i, unit)\n locationString = locationString.replace(/{sh}/i, shelfString)\n\n return locationString\n }\n\n makeShelfString(pattern: string, shelf: number, length: number) {\n /**\n * pattern #: 숫자\n * pattern 0: 고정 자리수\n * pattern -: 역순\n */\n\n if (!pattern || !shelf || !length) return\n\n var isReverse = /^\\-/.test(pattern)\n pattern = pattern.replace(/#+/, '#')\n\n var fixedLength = (pattern.match(/0/g) || []).length || 0\n var shelfString = String(isReverse ? length - shelf + 1 : shelf)\n\n if (shelfString.length > fixedLength && fixedLength > 0) {\n shelfString = shelfString.substring(shelfString.length - fixedLength)\n } else {\n var prefix = ''\n for (var i = 0; i < fixedLength - shelfString.length; i++) {\n prefix += '0'\n }\n shelfString = prefix + shelfString\n }\n\n return shelfString\n }\n\n updateAlpha() {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"rack.js","sourceRoot":"","sources":["../src/rack.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js'\n\nimport { RealObject } from '@hatiolab/things-scene'\nimport { Stock } from './stock.js'\nimport { RackTable } from './rack-table.js'\nimport { Visualizer } from './visualizer.js'\n\nexport class Rack extends RealObject {\n private _frame?: THREE.BufferGeometry\n private _board?: THREE.BufferGeometry\n\n static rackFrameGeometry = new THREE.BoxGeometry(1, 1, 1)\n static boardGeometry = new THREE.PlaneGeometry(1, 1, 1, 1)\n\n private static _boardMaterial?: THREE.MeshStandardMaterial\n\n get visualizer(): Visualizer | undefined {\n var component = this.component\n\n while (component) {\n if (component.state.type == 'visualizer') {\n return component as unknown as Visualizer\n }\n component = component.parent\n }\n }\n\n /**\n * Stock 등록 대상: 1순위 조상 Visualizer(하위호환), 2순위 서비스 레지스트리의 stock-hub\n */\n get stockRegistry(): { putObject(id: string, obj: RealObject): void } | undefined {\n const vis = this.visualizer\n if (vis) return vis\n return (this.component.root as any)?.getService?.('stock')\n }\n\n get rackTable(): RackTable | undefined {\n var component = this.component\n\n while (component) {\n if (component.state.type == 'rack-table') {\n return component as unknown as RackTable\n }\n component = component.parent\n }\n }\n\n get cz() {\n var { shelves = 1, depth = 1 } = this.rackTable!.state\n\n return 0.5 * depth * shelves\n }\n\n static get boardMaterial() {\n if (!Rack._boardMaterial) {\n Rack._boardMaterial = new THREE.MeshStandardMaterial({\n color: '#dedede',\n side: THREE.DoubleSide,\n polygonOffset: true,\n polygonOffsetFactor: -0.1\n })\n }\n\n return Rack._boardMaterial\n }\n\n get frame() {\n return this._frame\n }\n\n get board() {\n return this._board\n }\n\n build() {\n super.build()\n\n var { depth, hideRackFrame, shelves, shelfLocations: commonShelfLocation, stockScale = 0.7 } = this.rackTable!.state\n\n var { width, height, shelfLocations = commonShelfLocation, binLocations = '' } = this.component.state\n\n let scale = stockScale\n\n var shelfLocIds\n\n if (!shelfLocations) {\n shelfLocIds = []\n for (var i = 0; i < shelves; i++) shelfLocIds.push(i + 1)\n } else shelfLocIds = shelfLocations.split(/\\s*,\\s*/)\n\n var shelfBins = binLocations.trim().split('\\n').reverse()\n\n if (!hideRackFrame) {\n this._frame = this.createRackFrame(width, height, depth * shelves)\n this._board = this.createRackBoards(shelves, width, height, depth, shelfLocIds)\n }\n\n for (var i = 0; i < shelves; i++) {\n let bottom = -depth * shelves * 0.5\n if (shelfLocIds[i] == '') {\n continue\n }\n\n var bins = (shelfBins[i] || '').trim().split(/\\s*,\\s*/)\n\n var binWidth = width / (bins.length || 1)\n for (var b = 0; b < bins.length; b++) {\n let stock = new Stock(this.component, {\n width: binWidth * scale,\n height: height * scale,\n depth: depth * scale\n })\n stock.update()\n\n let stockDepth = depth * scale\n\n stock.object3d.position.set(\n (width / 2) * ((2 * b - (bins.length - 1)) / bins.length),\n bottom + depth * i + stockDepth * 0.5,\n 0\n )\n var binCode = (bins[b] || '').replace('.', '')\n stock.object3d.name = `${this.makeLocationString(shelfLocIds[i])}${binCode}`\n\n this.object3d.add(stock.object3d)\n this.stockRegistry?.putObject(stock.object3d.name, stock)\n }\n }\n }\n\n createRackFrame(w: number, h: number, d: number): THREE.BufferGeometry {\n const frameWeight = Math.round(Math.min(w, h) / 10)\n const geometries = []\n\n for (let i = 0; i < 4; i++) {\n const geometry = Rack.rackFrameGeometry.clone()\n geometry.scale(frameWeight, d, frameWeight)\n\n switch (i) {\n case 0:\n geometry.translate(w / 2, 0, h / 2)\n break\n case 1:\n geometry.translate(w / 2, 0, -h / 2)\n break\n case 2:\n geometry.translate(-w / 2, 0, h / 2)\n break\n case 3:\n geometry.translate(-w / 2, 0, -h / 2)\n break\n }\n\n geometries.push(geometry)\n }\n\n return BufferGeometryUtils.mergeGeometries(geometries)\n }\n\n createRackBoards(\n shelves: number,\n width: number,\n height: number,\n depth: number,\n shelfLocIds: string[]\n ): THREE.BufferGeometry {\n let bottom = -depth * shelves * 0.5\n const geometries = []\n\n for (let i = 1; i < shelves; i++) {\n if (shelfLocIds[i] === '') {\n continue\n }\n\n const geometry = Rack.boardGeometry.clone()\n\n geometry.scale(width, height, 1)\n geometry.rotateX(Math.PI / 2)\n geometry.translate(0, bottom + depth * i, 0)\n\n geometries.push(geometry)\n }\n\n return BufferGeometryUtils.mergeGeometries(geometries)\n }\n\n makeLocationString(shelfString: string) {\n var { section = '', unit = '' } = this.component.state\n var { locPattern = '{z}{s}-{u}-{sh}', zone = '' } = this.rackTable!.state\n\n var locationString = locPattern\n\n locationString = locationString.replace(/{z}/i, zone)\n locationString = locationString.replace(/{s}/i, section)\n locationString = locationString.replace(/{u}/i, unit)\n locationString = locationString.replace(/{sh}/i, shelfString)\n\n return locationString\n }\n\n makeShelfString(pattern: string, shelf: number, length: number) {\n /**\n * pattern #: 숫자\n * pattern 0: 고정 자리수\n * pattern -: 역순\n */\n\n if (!pattern || !shelf || !length) return\n\n var isReverse = /^\\-/.test(pattern)\n pattern = pattern.replace(/#+/, '#')\n\n var fixedLength = (pattern.match(/0/g) || []).length || 0\n var shelfString = String(isReverse ? length - shelf + 1 : shelf)\n\n if (shelfString.length > fixedLength && fixedLength > 0) {\n shelfString = shelfString.substring(shelfString.length - fixedLength)\n } else {\n var prefix = ''\n for (var i = 0; i < fixedLength - shelfString.length; i++) {\n prefix += '0'\n }\n shelfString = prefix + shelfString\n }\n\n return shelfString\n }\n\n updateAlpha() {}\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Component, ComponentNature, Properties, RealObject, ServiceComponent } from '@hatiolab/things-scene';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { type StockMaterialProvider } from './stock.js';
|
|
4
|
+
export declare class StockHub extends ServiceComponent implements StockMaterialProvider {
|
|
5
|
+
static _icon?: HTMLImageElement;
|
|
6
|
+
static get icon(): HTMLImageElement;
|
|
7
|
+
_stock_materials: THREE.Material[];
|
|
8
|
+
_default_material?: THREE.Material;
|
|
9
|
+
_empty_material?: THREE.Material;
|
|
10
|
+
private _legendTarget?;
|
|
11
|
+
_objects: {
|
|
12
|
+
[id: string]: RealObject;
|
|
13
|
+
};
|
|
14
|
+
get nature(): ComponentNature;
|
|
15
|
+
get serviceName(): string;
|
|
16
|
+
get hideEmptyStock(): boolean;
|
|
17
|
+
get legendTarget(): Component | undefined;
|
|
18
|
+
putObject(id: string, object: RealObject): void;
|
|
19
|
+
getObject(id: string): RealObject;
|
|
20
|
+
dispose(): void;
|
|
21
|
+
onchangeData(): void;
|
|
22
|
+
onchange(after: Properties, before: Properties): void;
|
|
23
|
+
private _onLegendChanged;
|
|
24
|
+
private _resetMaterials;
|
|
25
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
var StockHub_1;
|
|
5
|
+
import { __decorate } from "tslib";
|
|
6
|
+
import { ServiceComponent, sceneComponent } from '@hatiolab/things-scene';
|
|
7
|
+
const STOCK_HUB_ICON_SRC = 'data:image/svg+xml;base64,' +
|
|
8
|
+
btoa(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="#d09050">
|
|
9
|
+
<rect x="8" y="28" width="18" height="28" rx="2" opacity="0.8"/>
|
|
10
|
+
<rect x="23" y="18" width="18" height="38" rx="2" opacity="0.6"/>
|
|
11
|
+
<rect x="38" y="8" width="18" height="48" rx="2" opacity="0.9"/>
|
|
12
|
+
<rect x="4" y="56" width="56" height="4" rx="1"/>
|
|
13
|
+
</svg>`);
|
|
14
|
+
const NATURE = {
|
|
15
|
+
mutable: false,
|
|
16
|
+
resizable: true,
|
|
17
|
+
rotatable: true,
|
|
18
|
+
properties: [
|
|
19
|
+
{
|
|
20
|
+
type: 'string',
|
|
21
|
+
label: 'location-field',
|
|
22
|
+
name: 'locationField',
|
|
23
|
+
placeholder: 'location'
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
type: 'id-input',
|
|
27
|
+
label: 'legend-target',
|
|
28
|
+
name: 'legendTarget',
|
|
29
|
+
property: {
|
|
30
|
+
component: 'legend'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
type: 'checkbox',
|
|
35
|
+
label: 'hide-empty-stock',
|
|
36
|
+
name: 'hideEmptyStock'
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
help: 'scene/component/stock-hub'
|
|
40
|
+
};
|
|
41
|
+
let StockHub = class StockHub extends ServiceComponent {
|
|
42
|
+
static { StockHub_1 = this; }
|
|
43
|
+
static _icon;
|
|
44
|
+
static get icon() {
|
|
45
|
+
if (!StockHub_1._icon) {
|
|
46
|
+
StockHub_1._icon = new Image();
|
|
47
|
+
StockHub_1._icon.src = STOCK_HUB_ICON_SRC;
|
|
48
|
+
}
|
|
49
|
+
return StockHub_1._icon;
|
|
50
|
+
}
|
|
51
|
+
// === StockMaterialProvider ===
|
|
52
|
+
_stock_materials = [];
|
|
53
|
+
_default_material;
|
|
54
|
+
_empty_material;
|
|
55
|
+
_legendTarget;
|
|
56
|
+
// === Stock 레지스트리 ===
|
|
57
|
+
_objects = {};
|
|
58
|
+
get nature() {
|
|
59
|
+
return NATURE;
|
|
60
|
+
}
|
|
61
|
+
get serviceName() {
|
|
62
|
+
return 'stock';
|
|
63
|
+
}
|
|
64
|
+
get hideEmptyStock() {
|
|
65
|
+
return !!this.getState('hideEmptyStock');
|
|
66
|
+
}
|
|
67
|
+
get legendTarget() {
|
|
68
|
+
const { legendTarget } = this.state;
|
|
69
|
+
if (!this._legendTarget && legendTarget) {
|
|
70
|
+
this._legendTarget = this.root.findById?.(legendTarget);
|
|
71
|
+
this._legendTarget?.on('change', this._onLegendChanged, this);
|
|
72
|
+
}
|
|
73
|
+
return this._legendTarget;
|
|
74
|
+
}
|
|
75
|
+
/* === Stock 레지스트리 메서드 === */
|
|
76
|
+
putObject(id, object) {
|
|
77
|
+
id && (this._objects[id] = object);
|
|
78
|
+
}
|
|
79
|
+
getObject(id) {
|
|
80
|
+
return this._objects[id];
|
|
81
|
+
}
|
|
82
|
+
/* === 라이프사이클 === */
|
|
83
|
+
dispose() {
|
|
84
|
+
this._legendTarget?.off('change', this._onLegendChanged, this);
|
|
85
|
+
delete this._legendTarget;
|
|
86
|
+
this._resetMaterials();
|
|
87
|
+
this._objects = {};
|
|
88
|
+
super.dispose();
|
|
89
|
+
}
|
|
90
|
+
/* === 데이터 분배 === */
|
|
91
|
+
onchangeData() {
|
|
92
|
+
if (typeof this.data !== 'object') {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
let data = this.data;
|
|
96
|
+
const locationField = this.getState('locationField') || 'location';
|
|
97
|
+
if (data instanceof Array) {
|
|
98
|
+
data = data.reduce((acc, value) => {
|
|
99
|
+
const location = value[locationField];
|
|
100
|
+
if (!location) {
|
|
101
|
+
return acc;
|
|
102
|
+
}
|
|
103
|
+
if (acc[location]) {
|
|
104
|
+
acc[location]['items'].push(value);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
acc[location] = { items: [value] };
|
|
108
|
+
}
|
|
109
|
+
return acc;
|
|
110
|
+
}, {});
|
|
111
|
+
}
|
|
112
|
+
for (const key in data) {
|
|
113
|
+
if (data.hasOwnProperty(key)) {
|
|
114
|
+
const d = data[key];
|
|
115
|
+
const object = this.getObject(key);
|
|
116
|
+
if (object) {
|
|
117
|
+
;
|
|
118
|
+
object.onchangeStockData(d);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/* === 이벤트 핸들러 === */
|
|
124
|
+
onchange(after, before) {
|
|
125
|
+
if ('legendTarget' in before || 'legendTarget' in after) {
|
|
126
|
+
this._legendTarget?.off('change', this._onLegendChanged, this);
|
|
127
|
+
delete this._legendTarget;
|
|
128
|
+
this._resetMaterials();
|
|
129
|
+
}
|
|
130
|
+
this.invalidate();
|
|
131
|
+
}
|
|
132
|
+
_onLegendChanged() {
|
|
133
|
+
this._resetMaterials();
|
|
134
|
+
this.invalidate();
|
|
135
|
+
}
|
|
136
|
+
_resetMaterials() {
|
|
137
|
+
this._stock_materials.forEach(m => m.dispose?.());
|
|
138
|
+
this._stock_materials = [];
|
|
139
|
+
delete this._default_material;
|
|
140
|
+
delete this._empty_material;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
StockHub = StockHub_1 = __decorate([
|
|
144
|
+
sceneComponent('stock-hub')
|
|
145
|
+
], StockHub);
|
|
146
|
+
export { StockHub };
|
|
147
|
+
//# sourceMappingURL=stock-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-hub.js","sourceRoot":"","sources":["../src/stock-hub.ts"],"names":[],"mappings":"AAAA;;GAEG;;;AAEH,OAAO,EAKL,gBAAgB,EAChB,cAAc,EACf,MAAM,wBAAwB,CAAA;AAI/B,MAAM,kBAAkB,GACtB,4BAA4B;IAC5B,IAAI,CACF;;;;;OAKG,CACJ,CAAA;AAEH,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,gBAAgB;YACvB,IAAI,EAAE,eAAe;YACrB,WAAW,EAAE,UAAU;SACxB;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,eAAe;YACtB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE;gBACR,SAAS,EAAE,QAAQ;aACpB;SACF;QACD;YACE,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,kBAAkB;YACzB,IAAI,EAAE,gBAAgB;SACvB;KACF;IACD,IAAI,EAAE,2BAA2B;CAClC,CAAA;AAGM,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,gBAAgB;;IAC5C,MAAM,CAAC,KAAK,CAAmB;IAE/B,MAAM,KAAK,IAAI;QACb,IAAI,CAAC,UAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,UAAQ,CAAC,KAAK,GAAG,IAAI,KAAK,EAAE,CAAA;YAC5B,UAAQ,CAAC,KAAK,CAAC,GAAG,GAAG,kBAAkB,CAAA;QACzC,CAAC;QACD,OAAO,UAAQ,CAAC,KAAK,CAAA;IACvB,CAAC;IAED,gCAAgC;IAChC,gBAAgB,GAAqB,EAAE,CAAA;IACvC,iBAAiB,CAAiB;IAClC,eAAe,CAAiB;IACxB,aAAa,CAAY;IAEjC,sBAAsB;IACtB,QAAQ,GAAiC,EAAE,CAAA;IAE3C,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;IAED,IAAI,WAAW;QACb,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,YAAY;QACd,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,KAAK,CAAA;QAEnC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,YAAY,EAAE,CAAC;YACxC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,YAAY,CAAC,CAAA;YACvD,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,6BAA6B;IAE7B,SAAS,CAAC,EAAU,EAAE,MAAkB;QACtC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,SAAS,CAAC,EAAU;QAClB,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC1B,CAAC;IAED,oBAAoB;IAEpB,OAAO;QACL,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;QAC9D,OAAO,IAAI,CAAC,aAAa,CAAA;QACzB,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAA;QAElB,KAAK,CAAC,OAAO,EAAE,CAAA;IACjB,CAAC;IAED,oBAAoB;IAEpB,YAAY;QACV,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAM;QACR,CAAC;QAED,IAAI,IAAI,GAAG,IAAI,CAAC,IAAW,CAAA;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,UAAU,CAAA;QAElE,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,KAAU,EAAE,EAAE;gBAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;gBAErC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,GAAG,CAAA;gBACZ,CAAC;gBAED,IAAI,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAClB,GAAG,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpC,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,CAAA;gBACpC,CAAC;gBAED,OAAO,GAAG,CAAA;YACZ,CAAC,EAAE,EAAE,CAAC,CAAA;QACR,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAA;gBACnB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAClC,IAAI,MAAM,EAAE,CAAC;oBACX,CAAC;oBAAC,MAAgB,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAA;gBACzC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,qBAAqB;IAErB,QAAQ,CAAC,KAAiB,EAAE,MAAkB;QAC5C,IAAI,cAAc,IAAI,MAAM,IAAI,cAAc,IAAI,KAAK,EAAE,CAAC;YACxD,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;YAC9D,OAAO,IAAI,CAAC,aAAa,CAAA;YACzB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;QAED,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,eAAe,EAAE,CAAA;QACtB,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAA;QAC1B,OAAO,IAAI,CAAC,iBAAiB,CAAA;QAC7B,OAAO,IAAI,CAAC,eAAe,CAAA;IAC7B,CAAC;CACF,CAAA;AA9HY,QAAQ;IADpB,cAAc,CAAC,WAAW,CAAC;GACf,QAAQ,CA8HpB","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport {\n Component,\n ComponentNature,\n Properties,\n RealObject,\n ServiceComponent,\n sceneComponent\n} from '@hatiolab/things-scene'\nimport * as THREE from 'three'\nimport { Stock, type StockMaterialProvider } from './stock.js'\n\nconst STOCK_HUB_ICON_SRC =\n 'data:image/svg+xml;base64,' +\n btoa(\n `<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 64 64\" fill=\"#d09050\">\n <rect x=\"8\" y=\"28\" width=\"18\" height=\"28\" rx=\"2\" opacity=\"0.8\"/>\n <rect x=\"23\" y=\"18\" width=\"18\" height=\"38\" rx=\"2\" opacity=\"0.6\"/>\n <rect x=\"38\" y=\"8\" width=\"18\" height=\"48\" rx=\"2\" opacity=\"0.9\"/>\n <rect x=\"4\" y=\"56\" width=\"56\" height=\"4\" rx=\"1\"/>\n</svg>`\n )\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'string',\n label: 'location-field',\n name: 'locationField',\n placeholder: 'location'\n },\n {\n type: 'id-input',\n label: 'legend-target',\n name: 'legendTarget',\n property: {\n component: 'legend'\n }\n },\n {\n type: 'checkbox',\n label: 'hide-empty-stock',\n name: 'hideEmptyStock'\n }\n ],\n help: 'scene/component/stock-hub'\n}\n\n@sceneComponent('stock-hub')\nexport class StockHub extends ServiceComponent implements StockMaterialProvider {\n static _icon?: HTMLImageElement\n\n static get icon(): HTMLImageElement {\n if (!StockHub._icon) {\n StockHub._icon = new Image()\n StockHub._icon.src = STOCK_HUB_ICON_SRC\n }\n return StockHub._icon\n }\n\n // === StockMaterialProvider ===\n _stock_materials: THREE.Material[] = []\n _default_material?: THREE.Material\n _empty_material?: THREE.Material\n private _legendTarget?: Component\n\n // === Stock 레지스트리 ===\n _objects: { [id: string]: RealObject } = {}\n\n get nature(): ComponentNature {\n return NATURE\n }\n\n get serviceName(): string {\n return 'stock'\n }\n\n get hideEmptyStock(): boolean {\n return !!this.getState('hideEmptyStock')\n }\n\n get legendTarget(): Component | undefined {\n const { legendTarget } = this.state\n\n if (!this._legendTarget && legendTarget) {\n this._legendTarget = this.root.findById?.(legendTarget)\n this._legendTarget?.on('change', this._onLegendChanged, this)\n }\n\n return this._legendTarget\n }\n\n /* === Stock 레지스트리 메서드 === */\n\n putObject(id: string, object: RealObject): void {\n id && (this._objects[id] = object)\n }\n\n getObject(id: string): RealObject {\n return this._objects[id]\n }\n\n /* === 라이프사이클 === */\n\n dispose(): void {\n this._legendTarget?.off('change', this._onLegendChanged, this)\n delete this._legendTarget\n this._resetMaterials()\n this._objects = {}\n\n super.dispose()\n }\n\n /* === 데이터 분배 === */\n\n onchangeData(): void {\n if (typeof this.data !== 'object') {\n return\n }\n\n let data = this.data as any\n const locationField = this.getState('locationField') || 'location'\n\n if (data instanceof Array) {\n data = data.reduce((acc: any, value: any) => {\n const location = value[locationField]\n\n if (!location) {\n return acc\n }\n\n if (acc[location]) {\n acc[location]['items'].push(value)\n } else {\n acc[location] = { items: [value] }\n }\n\n return acc\n }, {})\n }\n\n for (const key in data) {\n if (data.hasOwnProperty(key)) {\n const d = data[key]\n const object = this.getObject(key)\n if (object) {\n ;(object as Stock).onchangeStockData(d)\n }\n }\n }\n }\n\n /* === 이벤트 핸들러 === */\n\n onchange(after: Properties, before: Properties): void {\n if ('legendTarget' in before || 'legendTarget' in after) {\n this._legendTarget?.off('change', this._onLegendChanged, this)\n delete this._legendTarget\n this._resetMaterials()\n }\n\n this.invalidate()\n }\n\n private _onLegendChanged(): void {\n this._resetMaterials()\n this.invalidate()\n }\n\n private _resetMaterials(): void {\n this._stock_materials.forEach(m => m.dispose?.())\n this._stock_materials = []\n delete this._default_material\n delete this._empty_material\n }\n}\n"]}
|
package/dist/stock.d.ts
CHANGED
|
@@ -16,6 +16,8 @@ export declare class Stock extends RealObject<THREE.Mesh> {
|
|
|
16
16
|
static defaultEmptyMaterial: THREE.MeshStandardMaterial;
|
|
17
17
|
static stockGeometry: THREE.BoxGeometry;
|
|
18
18
|
_hideEmptyStock: boolean;
|
|
19
|
+
_focused: boolean;
|
|
20
|
+
_focusedAt?: number;
|
|
19
21
|
model: any;
|
|
20
22
|
constructor(component: Component, model: any);
|
|
21
23
|
protected getObject3dInstance(): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>;
|
package/dist/stock.js
CHANGED
|
@@ -4,19 +4,26 @@
|
|
|
4
4
|
import { RealObject } from '@hatiolab/things-scene';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
const STOCK_COLOR = '#ccaa76';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
color
|
|
7
|
+
function createStockMaterial(color, opts) {
|
|
8
|
+
const mat = new THREE.MeshStandardMaterial({
|
|
9
|
+
color,
|
|
10
10
|
side: THREE.FrontSide,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
color: STOCK_COLOR,
|
|
15
|
-
opacity: 0.33,
|
|
16
|
-
transparent: true
|
|
11
|
+
metalness: 0,
|
|
12
|
+
roughness: 1,
|
|
13
|
+
envMapIntensity: 0
|
|
17
14
|
});
|
|
15
|
+
if (opts?.opacity !== undefined) {
|
|
16
|
+
mat.opacity = opts.opacity;
|
|
17
|
+
mat.transparent = opts.transparent ?? true;
|
|
18
|
+
}
|
|
19
|
+
return mat;
|
|
20
|
+
}
|
|
21
|
+
export class Stock extends RealObject {
|
|
22
|
+
static defaultMaterial = createStockMaterial(STOCK_COLOR);
|
|
23
|
+
static defaultEmptyMaterial = createStockMaterial(STOCK_COLOR, { opacity: 0.33, transparent: true });
|
|
18
24
|
static stockGeometry = new THREE.BoxGeometry(1, 1, 1);
|
|
19
25
|
_hideEmptyStock = false;
|
|
26
|
+
_focused = false;
|
|
20
27
|
model;
|
|
21
28
|
constructor(component, model) {
|
|
22
29
|
super(component);
|
|
@@ -49,11 +56,7 @@ export class Stock extends RealObject {
|
|
|
49
56
|
this.stockMaterials[index] = this.userDefineDefaultMaterial;
|
|
50
57
|
}
|
|
51
58
|
if (!this.stockMaterials[index]) {
|
|
52
|
-
this.stockMaterials[index] =
|
|
53
|
-
color: range.color,
|
|
54
|
-
side: THREE.FrontSide,
|
|
55
|
-
roughness: 0.7
|
|
56
|
-
});
|
|
59
|
+
this.stockMaterials[index] = createStockMaterial(range.color);
|
|
57
60
|
}
|
|
58
61
|
var alpha = range.color.replace(/^.*,(.+)\)/, '$1');
|
|
59
62
|
if (alpha > 0 && alpha < 1) {
|
|
@@ -73,16 +76,9 @@ export class Stock extends RealObject {
|
|
|
73
76
|
const defaultColor = status?.defaultColor;
|
|
74
77
|
if (!defaultColor)
|
|
75
78
|
return Stock.defaultMaterial;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
roughness: 0.7
|
|
80
|
-
});
|
|
81
|
-
var alpha = defaultColor.replace(/^.*,(.+)\)/, '$1');
|
|
82
|
-
if (alpha > 0 && alpha < 1) {
|
|
83
|
-
p._default_material.opacity = alpha;
|
|
84
|
-
p._default_material.transparent = true;
|
|
85
|
-
}
|
|
79
|
+
var alpha = Number(defaultColor.replace(/^.*,(.+)\)/, '$1'));
|
|
80
|
+
var hasAlpha = alpha > 0 && alpha < 1;
|
|
81
|
+
p._default_material = createStockMaterial(defaultColor, hasAlpha ? { opacity: alpha, transparent: true } : undefined);
|
|
86
82
|
}
|
|
87
83
|
return p._default_material;
|
|
88
84
|
}
|
|
@@ -94,16 +90,9 @@ export class Stock extends RealObject {
|
|
|
94
90
|
if (!p._empty_material) {
|
|
95
91
|
const status = this._legendStatus;
|
|
96
92
|
const defaultColor = status?.defaultColor || STOCK_COLOR;
|
|
97
|
-
p._empty_material = new THREE.MeshStandardMaterial({ color: defaultColor });
|
|
98
93
|
var alpha = Number(defaultColor.replace(/^.*,(.+)\)/, '$1'));
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
p._empty_material.transparent = true;
|
|
102
|
-
}
|
|
103
|
-
else {
|
|
104
|
-
p._empty_material.opacity = 0.33;
|
|
105
|
-
p._empty_material.transparent = true;
|
|
106
|
-
}
|
|
94
|
+
var opacity = (alpha > 0 && alpha < 1) ? alpha : 0.33;
|
|
95
|
+
p._empty_material = createStockMaterial(defaultColor, { opacity, transparent: true });
|
|
107
96
|
}
|
|
108
97
|
return p._empty_material;
|
|
109
98
|
}
|
package/dist/stock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../src/stock.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Model, RealObject } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\n\nconst STOCK_COLOR = '#ccaa76'\n\n/**\n * Stock material/legend 정보를 제공하는 컴포넌트 인터페이스.\n * Visualizer와 RackTable 모두 이를 구현한다.\n */\nexport interface StockMaterialProvider {\n _stock_materials: THREE.Material[]\n _default_material?: THREE.Material\n _empty_material?: THREE.Material\n legendTarget?: Component\n hideEmptyStock?: boolean\n}\n\nexport class Stock extends RealObject<THREE.Mesh> {\n static defaultMaterial = new THREE.MeshStandardMaterial({\n color: STOCK_COLOR,\n side: THREE.FrontSide,\n roughness: 0.7\n })\n static defaultEmptyMaterial = new THREE.MeshStandardMaterial({\n color: STOCK_COLOR,\n opacity: 0.33,\n transparent: true\n })\n static stockGeometry = new THREE.BoxGeometry(1, 1, 1)\n\n _hideEmptyStock: boolean = false\n\n model: any\n\n constructor(component: Component, model: any) {\n super(component)\n this.model = model\n }\n\n protected getObject3dInstance() {\n return new THREE.Mesh()\n }\n\n /**\n * 가장 가까운 StockMaterialProvider 조상을 찾는다 (RackTable 또는 Visualizer).\n */\n get provider(): StockMaterialProvider | undefined {\n let component = this.component\n\n while (component) {\n if ('_stock_materials' in component) {\n return component as unknown as StockMaterialProvider\n }\n component = component.parent\n }\n }\n\n private get _legendStatus(): any | undefined {\n return this.provider?.legendTarget?.getState('status') || undefined\n }\n\n getMaterial(index: number) {\n const status = this._legendStatus\n if (!status) return this.userDefineDefaultMaterial\n\n const range = status.ranges?.[index]\n if (!(range && range.color)) {\n this.stockMaterials[index] = this.userDefineDefaultMaterial\n }\n\n if (!this.stockMaterials[index]) {\n this.stockMaterials[index] = new THREE.MeshStandardMaterial({\n color: range.color,\n side: THREE.FrontSide,\n roughness: 0.7\n })\n }\n\n var alpha = range.color.replace(/^.*,(.+)\\)/, '$1')\n if (alpha > 0 && alpha < 1) {\n this.stockMaterials[index].opacity = alpha\n this.stockMaterials[index].transparent = true\n }\n\n return this.stockMaterials[index]\n }\n\n get stockMaterials(): THREE.Material[] {\n return this.provider?._stock_materials ?? []\n }\n\n get userDefineDefaultMaterial(): THREE.Material {\n const p = this.provider\n\n if (p) {\n if (!p._default_material) {\n const status = this._legendStatus\n const defaultColor = status?.defaultColor\n if (!defaultColor) return Stock.defaultMaterial\n\n p._default_material = new THREE.MeshStandardMaterial({\n color: defaultColor,\n side: THREE.FrontSide,\n roughness: 0.7\n })\n var alpha = defaultColor.replace(/^.*,(.+)\\)/, '$1')\n if (alpha > 0 && alpha < 1) {\n p._default_material.opacity = alpha\n p._default_material.transparent = true\n }\n }\n return p._default_material\n }\n\n return Stock.defaultMaterial\n }\n\n get emptyMaterial(): THREE.Material {\n const p = this.provider\n\n if (p) {\n if (!p._empty_material) {\n const status = this._legendStatus\n const defaultColor = status?.defaultColor || STOCK_COLOR\n\n p._empty_material = new THREE.MeshStandardMaterial({ color: defaultColor })\n var alpha = Number(defaultColor.replace(/^.*,(.+)\\)/, '$1'))\n if (alpha > 0 && alpha < 1) {\n p._empty_material.opacity = alpha\n p._empty_material.transparent = true\n } else {\n p._empty_material.opacity = 0.33\n p._empty_material.transparent = true\n }\n }\n return p._empty_material\n }\n\n return Stock.defaultEmptyMaterial\n }\n\n build() {\n super.build()\n\n var { width, height, depth } = this.model\n\n this._hideEmptyStock = !!this.provider?.hideEmptyStock\n\n this.createStock(width, height, depth)\n }\n\n createStock(w: number, h: number, d: number) {\n this.object3d.geometry = Stock.stockGeometry\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n\n this.object3d.scale.set(w, d, h)\n\n this.object3d.receiveShadow = true\n\n this.object3d.castShadow = true\n this.object3d.onBeforeRender = () => {\n this.onBeforeRender()\n }\n }\n\n onchangeStockData(data: any) {\n this.object3d.userData = {\n ...this.object3d.userData,\n data\n }\n\n const stockStatus = this._legendStatus as\n | { field: string; aggregation?: string; ranges: { min?: string | number; max?: string | number }[] }\n | undefined\n if (!stockStatus) return\n\n var statusField = stockStatus.field\n var aggregation = stockStatus.aggregation || 'sum'\n var ranges = stockStatus.ranges\n\n if (!(statusField && ranges)) return\n\n var items = data.items\n\n if (!items) {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return\n }\n\n // Collect all status values from items\n var statusValues: any[] = items\n .map((item: any) => item && item[statusField])\n .filter((value: any) => value !== undefined && value !== null)\n\n if (statusValues.length === 0) {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return\n }\n\n // Apply aggregation function\n var status: number\n switch (aggregation) {\n case 'sum':\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0)\n break\n case 'avg':\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0) / statusValues.length\n break\n case 'min':\n status = Math.min(...statusValues.map((val: any) => Number(val)))\n break\n case 'max':\n status = Math.max(...statusValues.map((val: any) => Number(val)))\n break\n default:\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0)\n }\n\n var isInRanges = ranges.some((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 if (maxCheck && minCheck) {\n this.object3d.material = this.getMaterial(index)\n return true\n } else {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return false\n }\n })\n if (!isInRanges) {\n this.object3d.material = this.userDefineDefaultMaterial\n }\n }\n\n onBeforeRender = () => {\n if (this._focused) {\n var lastTime = performance.now() - this._focusedAt!\n var progress = lastTime / 2000\n\n this.object3d.rotation.y = 2 * Math.PI * progress\n this.component.invalidate()\n } else if (this._focusedAt) {\n delete this._focusedAt\n this.object3d.rotation.y = 0\n this.component.invalidate()\n }\n }\n\n onmouseup(e: MouseEvent, _context: unknown, callback: (arg: { data: any; location: string }) => void) {\n if (!this.object3d.visible) return\n\n if (!this.object3d.userData || !this.object3d.userData.data)\n this.object3d.userData = {\n ...this.object3d.userData,\n data: {\n loc: this.object3d.name,\n items: [\n {\n loc: this.object3d.name\n }\n ]\n }\n }\n\n if (callback && typeof callback == 'function') {\n callback({\n ...this.object3d.userData.data,\n color: '#' + (this.object3d.material as any).color?.getHexString()\n })\n }\n }\n\n // all update functions should be intentionally empty. important!\n updateTransform() {}\n updateDimension() {}\n updateAlpha() {}\n updateFillStyle() {}\n updateStrokeStyle() {}\n updateHidden() {}\n updateText() {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"stock.js","sourceRoot":"","sources":["../src/stock.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport { Component, Model, RealObject } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\n\nconst STOCK_COLOR = '#ccaa76'\n\nfunction createStockMaterial(color: string | number, opts?: { opacity?: number; transparent?: boolean }): THREE.MeshStandardMaterial {\n const mat = new THREE.MeshStandardMaterial({\n color,\n side: THREE.FrontSide,\n metalness: 0,\n roughness: 1,\n envMapIntensity: 0\n })\n if (opts?.opacity !== undefined) {\n mat.opacity = opts.opacity\n mat.transparent = opts.transparent ?? true\n }\n return mat\n}\n\n/**\n * Stock material/legend 정보를 제공하는 컴포넌트 인터페이스.\n * Visualizer와 RackTable 모두 이를 구현한다.\n */\nexport interface StockMaterialProvider {\n _stock_materials: THREE.Material[]\n _default_material?: THREE.Material\n _empty_material?: THREE.Material\n legendTarget?: Component\n hideEmptyStock?: boolean\n}\n\nexport class Stock extends RealObject<THREE.Mesh> {\n static defaultMaterial = createStockMaterial(STOCK_COLOR)\n static defaultEmptyMaterial = createStockMaterial(STOCK_COLOR, { opacity: 0.33, transparent: true })\n static stockGeometry = new THREE.BoxGeometry(1, 1, 1)\n\n _hideEmptyStock: boolean = false\n _focused: boolean = false\n declare _focusedAt?: number\n\n model: any\n\n constructor(component: Component, model: any) {\n super(component)\n this.model = model\n }\n\n protected getObject3dInstance() {\n return new THREE.Mesh()\n }\n\n /**\n * 가장 가까운 StockMaterialProvider 조상을 찾는다 (RackTable 또는 Visualizer).\n */\n get provider(): StockMaterialProvider | undefined {\n let component = this.component\n\n while (component) {\n if ('_stock_materials' in component) {\n return component as unknown as StockMaterialProvider\n }\n component = component.parent\n }\n }\n\n private get _legendStatus(): any | undefined {\n return this.provider?.legendTarget?.getState('status') || undefined\n }\n\n getMaterial(index: number) {\n const status = this._legendStatus\n if (!status) return this.userDefineDefaultMaterial\n\n const range = status.ranges?.[index]\n if (!(range && range.color)) {\n this.stockMaterials[index] = this.userDefineDefaultMaterial\n }\n\n if (!this.stockMaterials[index]) {\n this.stockMaterials[index] = createStockMaterial(range.color)\n }\n\n var alpha = range.color.replace(/^.*,(.+)\\)/, '$1')\n if (alpha > 0 && alpha < 1) {\n this.stockMaterials[index].opacity = alpha\n this.stockMaterials[index].transparent = true\n }\n\n return this.stockMaterials[index]\n }\n\n get stockMaterials(): THREE.Material[] {\n return this.provider?._stock_materials ?? []\n }\n\n get userDefineDefaultMaterial(): THREE.Material {\n const p = this.provider\n\n if (p) {\n if (!p._default_material) {\n const status = this._legendStatus\n const defaultColor = status?.defaultColor\n if (!defaultColor) return Stock.defaultMaterial\n\n var alpha = Number(defaultColor.replace(/^.*,(.+)\\)/, '$1'))\n var hasAlpha = alpha > 0 && alpha < 1\n p._default_material = createStockMaterial(defaultColor, hasAlpha ? { opacity: alpha, transparent: true } : undefined)\n }\n return p._default_material\n }\n\n return Stock.defaultMaterial\n }\n\n get emptyMaterial(): THREE.Material {\n const p = this.provider\n\n if (p) {\n if (!p._empty_material) {\n const status = this._legendStatus\n const defaultColor = status?.defaultColor || STOCK_COLOR\n\n var alpha = Number(defaultColor.replace(/^.*,(.+)\\)/, '$1'))\n var opacity = (alpha > 0 && alpha < 1) ? alpha : 0.33\n p._empty_material = createStockMaterial(defaultColor, { opacity, transparent: true })\n }\n return p._empty_material\n }\n\n return Stock.defaultEmptyMaterial\n }\n\n build() {\n super.build()\n\n var { width, height, depth } = this.model\n\n this._hideEmptyStock = !!this.provider?.hideEmptyStock\n\n this.createStock(width, height, depth)\n }\n\n createStock(w: number, h: number, d: number) {\n this.object3d.geometry = Stock.stockGeometry\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n\n this.object3d.scale.set(w, d, h)\n\n this.object3d.receiveShadow = true\n\n this.object3d.castShadow = true\n this.object3d.onBeforeRender = () => {\n this.onBeforeRender()\n }\n }\n\n onchangeStockData(data: any) {\n this.object3d.userData = {\n ...this.object3d.userData,\n data\n }\n\n const stockStatus = this._legendStatus as\n | { field: string; aggregation?: string; ranges: { min?: string | number; max?: string | number }[] }\n | undefined\n if (!stockStatus) return\n\n var statusField = stockStatus.field\n var aggregation = stockStatus.aggregation || 'sum'\n var ranges = stockStatus.ranges\n\n if (!(statusField && ranges)) return\n\n var items = data.items\n\n if (!items) {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return\n }\n\n // Collect all status values from items\n var statusValues: any[] = items\n .map((item: any) => item && item[statusField])\n .filter((value: any) => value !== undefined && value !== null)\n\n if (statusValues.length === 0) {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return\n }\n\n // Apply aggregation function\n var status: number\n switch (aggregation) {\n case 'sum':\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0)\n break\n case 'avg':\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0) / statusValues.length\n break\n case 'min':\n status = Math.min(...statusValues.map((val: any) => Number(val)))\n break\n case 'max':\n status = Math.max(...statusValues.map((val: any) => Number(val)))\n break\n default:\n status = statusValues.reduce((sum: number, val: any) => sum + Number(val), 0)\n }\n\n var isInRanges = ranges.some((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 if (maxCheck && minCheck) {\n this.object3d.material = this.getMaterial(index)\n return true\n } else {\n this.object3d.material = this._hideEmptyStock ? this.emptyMaterial : this.userDefineDefaultMaterial\n return false\n }\n })\n if (!isInRanges) {\n this.object3d.material = this.userDefineDefaultMaterial\n }\n }\n\n onBeforeRender = () => {\n if (this._focused) {\n var lastTime = performance.now() - this._focusedAt!\n var progress = lastTime / 2000\n\n this.object3d.rotation.y = 2 * Math.PI * progress\n this.component.invalidate()\n } else if (this._focusedAt) {\n delete this._focusedAt\n this.object3d.rotation.y = 0\n this.component.invalidate()\n }\n }\n\n onmouseup(e: MouseEvent, _context: unknown, callback: (arg: { data: any; location: string }) => void) {\n if (!this.object3d.visible) return\n\n if (!this.object3d.userData || !this.object3d.userData.data)\n this.object3d.userData = {\n ...this.object3d.userData,\n data: {\n loc: this.object3d.name,\n items: [\n {\n loc: this.object3d.name\n }\n ]\n }\n }\n\n if (callback && typeof callback == 'function') {\n callback({\n ...this.object3d.userData.data,\n color: '#' + (this.object3d.material as any).color?.getHexString()\n })\n }\n }\n\n // all update functions should be intentionally empty. important!\n updateTransform() {}\n updateDimension() {}\n updateAlpha() {}\n updateFillStyle() {}\n updateStrokeStyle() {}\n updateHidden() {}\n updateText() {}\n}\n"]}
|
|
@@ -9,30 +9,6 @@ declare const _default: ({
|
|
|
9
9
|
top: number;
|
|
10
10
|
width: number;
|
|
11
11
|
height: number;
|
|
12
|
-
fillStyle: string;
|
|
13
|
-
fov: number;
|
|
14
|
-
near: number;
|
|
15
|
-
far: number;
|
|
16
|
-
zoom: number;
|
|
17
|
-
threed: boolean;
|
|
18
|
-
};
|
|
19
|
-
} | {
|
|
20
|
-
type: string;
|
|
21
|
-
description: string;
|
|
22
|
-
group: string;
|
|
23
|
-
icon: string;
|
|
24
|
-
model: {
|
|
25
|
-
type: string;
|
|
26
|
-
top: number;
|
|
27
|
-
left: number;
|
|
28
|
-
width: number;
|
|
29
|
-
height: number;
|
|
30
|
-
locPattern: string;
|
|
31
|
-
increasePattern: string;
|
|
32
|
-
strokeStyle: string;
|
|
33
|
-
lineWidth: number;
|
|
34
|
-
rows: number;
|
|
35
|
-
columns: number;
|
|
36
12
|
};
|
|
37
13
|
} | {
|
|
38
14
|
type: string;
|
|
@@ -54,23 +30,6 @@ declare const _default: ({
|
|
|
54
30
|
lineDash: string;
|
|
55
31
|
lineCap: string;
|
|
56
32
|
};
|
|
57
|
-
} | {
|
|
58
|
-
type: string;
|
|
59
|
-
description: string;
|
|
60
|
-
group: string;
|
|
61
|
-
icon: string;
|
|
62
|
-
model: {
|
|
63
|
-
type: string;
|
|
64
|
-
left: number;
|
|
65
|
-
top: number;
|
|
66
|
-
width: number;
|
|
67
|
-
height: number;
|
|
68
|
-
depth: number;
|
|
69
|
-
fillStyle: string;
|
|
70
|
-
strokeStyle: string;
|
|
71
|
-
lineWidth: number;
|
|
72
|
-
alpha: number;
|
|
73
|
-
};
|
|
74
33
|
} | {
|
|
75
34
|
type: string;
|
|
76
35
|
description: string;
|
package/dist/templates/index.js
CHANGED
|
@@ -15,9 +15,11 @@ import signalTower from './signal-tower.js';
|
|
|
15
15
|
import tank from './tank.js';
|
|
16
16
|
import vehicle from './vehicle.js';
|
|
17
17
|
import carrier from './carrier.js';
|
|
18
|
+
import stockHub from './stock-hub.js';
|
|
18
19
|
export default [
|
|
19
20
|
threeContainer,
|
|
20
21
|
visualizer,
|
|
22
|
+
stockHub,
|
|
21
23
|
rackTable,
|
|
22
24
|
camera,
|
|
23
25
|
light,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,OAAO,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/templates/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mBAAmB,CAAA;AAC9C,OAAO,UAAU,MAAM,iBAAiB,CAAA;AACxC,OAAO,SAAS,MAAM,iBAAiB,CAAA;AACvC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,QAAQ,MAAM,eAAe,CAAA;AACpC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,KAAK,MAAM,YAAY,CAAA;AAC9B,OAAO,UAAU,MAAM,kBAAkB,CAAA;AACzC,OAAO,WAAW,MAAM,mBAAmB,CAAA;AAC3C,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,OAAO,MAAM,cAAc,CAAA;AAClC,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AAErC,eAAe;IACb,cAAc;IACd,UAAU;IACV,QAAQ;IACR,SAAS;IACT,MAAM;IACN,KAAK;IACL,IAAI;IACJ,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,UAAU;IACV,WAAW;IACX,IAAI;IACJ,OAAO;IACP,OAAO;CACR,CAAA","sourcesContent":["import threeContainer from './3d-container.js'\nimport visualizer from './visualizer.js'\nimport rackTable from './rack-table.js'\nimport cube from './cube.js'\nimport cylinder from './cylinder.js'\nimport sphere from './sphere.js'\nimport banner from './banner.js'\nimport sprite from './sprite.js'\nimport wall from './wall.js'\nimport desk from './desk.js'\nimport camera from './camera.js'\nimport light from './light.js'\nimport GLTFObject from './gltf-object.js'\nimport signalTower from './signal-tower.js'\nimport tank from './tank.js'\nimport vehicle from './vehicle.js'\nimport carrier from './carrier.js'\nimport stockHub from './stock-hub.js'\n\nexport default [\n threeContainer,\n visualizer,\n stockHub,\n rackTable,\n camera,\n light,\n cube,\n cylinder,\n sphere,\n sprite,\n banner,\n wall,\n desk,\n GLTFObject,\n signalTower,\n tank,\n vehicle,\n carrier\n]\n"]}
|
|
@@ -2,7 +2,7 @@ const icon = new URL('../../icons/rack-table.png', import.meta.url).href;
|
|
|
2
2
|
export default {
|
|
3
3
|
type: 'rack-table',
|
|
4
4
|
description: '3D rack-table',
|
|
5
|
-
group: '
|
|
5
|
+
group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,
|
|
6
6
|
icon,
|
|
7
7
|
model: {
|
|
8
8
|
type: 'rack-table',
|
|
@@ -15,7 +15,9 @@ export default {
|
|
|
15
15
|
strokeStyle: '#999',
|
|
16
16
|
lineWidth: 2,
|
|
17
17
|
rows: 5,
|
|
18
|
-
columns: 5
|
|
18
|
+
columns: 5,
|
|
19
|
+
shelves: 6,
|
|
20
|
+
depth: 12
|
|
19
21
|
}
|
|
20
22
|
};
|
|
21
23
|
//# sourceMappingURL=rack-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rack-table.js","sourceRoot":"","sources":["../../src/templates/rack-table.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAExE,eAAe;IACb,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,eAAe;IAC5B,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"rack-table.js","sourceRoot":"","sources":["../../src/templates/rack-table.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAExE,eAAe;IACb,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,eAAe;IAC5B,KAAK,EAAE,WAAW,CAAC,gGAAgG;IACnH,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,YAAY;QAClB,GAAG,EAAE,GAAG;QACR,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,MAAM;QACvB,WAAW,EAAE,MAAM;QACnB,SAAS,EAAE,CAAC;QACZ,IAAI,EAAE,CAAC;QACP,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,KAAK,EAAE,EAAE;KACV;CACF,CAAA","sourcesContent":["const icon = new URL('../../icons/rack-table.png', import.meta.url).href\n\nexport default {\n type: 'rack-table',\n description: '3D rack-table',\n group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,\n icon,\n model: {\n type: 'rack-table',\n top: 100,\n left: 100,\n width: 500,\n height: 200,\n locPattern: '{z}{s}-{u}{sh}',\n increasePattern: '+u+s',\n strokeStyle: '#999',\n lineWidth: 2,\n rows: 5,\n columns: 5,\n shelves: 6,\n depth: 12\n }\n}\n"]}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
const icon = new URL('../../icons/stock-hub.png', import.meta.url).href;
|
|
2
|
+
export default {
|
|
3
|
+
type: 'stock-hub',
|
|
4
|
+
description: 'stock data hub',
|
|
5
|
+
group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,
|
|
6
|
+
icon,
|
|
7
|
+
model: {
|
|
8
|
+
type: 'stock-hub',
|
|
9
|
+
left: 100,
|
|
10
|
+
top: 100,
|
|
11
|
+
width: 60,
|
|
12
|
+
height: 60
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=stock-hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stock-hub.js","sourceRoot":"","sources":["../../src/templates/stock-hub.ts"],"names":[],"mappings":"AAAA,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,2BAA2B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA;AAEvE,eAAe;IACb,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,gBAAgB;IAC7B,KAAK,EAAE,WAAW,CAAC,gGAAgG;IACnH,IAAI;IACJ,KAAK,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,IAAI,EAAE,GAAG;QACT,GAAG,EAAE,GAAG;QACR,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;KACX;CACF,CAAA","sourcesContent":["const icon = new URL('../../icons/stock-hub.png', import.meta.url).href\n\nexport default {\n type: 'stock-hub',\n description: 'stock data hub',\n group: 'warehouse' /* line|shape|textAndMedia|chartAndGauge|table|container|dataSource|IoT|3D|warehouse|form|etc */,\n icon,\n model: {\n type: 'stock-hub',\n left: 100,\n top: 100,\n width: 60,\n height: 60\n }\n}\n"]}
|