@operato/scene-visualizer 9.2.2 → 10.0.0-beta.1

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 (181) hide show
  1. package/dist/banner.d.ts +232 -3
  2. package/dist/banner.js +1 -2
  3. package/dist/banner.js.map +1 -1
  4. package/dist/camera.d.ts +232 -3
  5. package/dist/camera.js +1 -2
  6. package/dist/camera.js.map +1 -1
  7. package/dist/carrier.d.ts +263 -0
  8. package/dist/carrier.js +272 -0
  9. package/dist/carrier.js.map +1 -0
  10. package/dist/cube.d.ts +232 -4
  11. package/dist/cube.js +1 -2
  12. package/dist/cube.js.map +1 -1
  13. package/dist/cylinder.d.ts +1 -3
  14. package/dist/cylinder.js +1 -2
  15. package/dist/cylinder.js.map +1 -1
  16. package/dist/desk.d.ts +238 -3
  17. package/dist/desk.js +1 -2
  18. package/dist/desk.js.map +1 -1
  19. package/dist/editors/index.d.ts +1 -0
  20. package/dist/editors/index.js +5 -0
  21. package/dist/editors/index.js.map +1 -1
  22. package/dist/editors/property-editor-gltf-fill-targets.d.ts +17 -0
  23. package/dist/editors/property-editor-gltf-fill-targets.js +211 -0
  24. package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
  25. package/dist/editors/property-editor-gltf-info.js +38 -29
  26. package/dist/editors/property-editor-gltf-info.js.map +1 -1
  27. package/dist/editors/property-editor-location-increase-pattern.js +91 -95
  28. package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
  29. package/dist/effects/outline.js +1 -1
  30. package/dist/effects/outline.js.map +1 -1
  31. package/dist/ellipse.js +2 -4
  32. package/dist/ellipse.js.map +1 -1
  33. package/dist/gltf-object.d.ts +232 -3
  34. package/dist/gltf-object.js +1 -2
  35. package/dist/gltf-object.js.map +1 -1
  36. package/dist/html-overlay-element.js +3 -7
  37. package/dist/html-overlay-element.js.map +1 -1
  38. package/dist/index.d.ts +5 -17
  39. package/dist/index.js +7 -17
  40. package/dist/index.js.map +1 -1
  41. package/dist/light.d.ts +1 -2
  42. package/dist/light.js +1 -2
  43. package/dist/light.js.map +1 -1
  44. package/dist/polygon.js +2 -4
  45. package/dist/polygon.js.map +1 -1
  46. package/dist/rack-table-3d.d.ts +16 -0
  47. package/dist/rack-table-3d.js +94 -0
  48. package/dist/rack-table-3d.js.map +1 -0
  49. package/dist/rack-table-cell.d.ts +238 -3
  50. package/dist/rack-table-cell.js +44 -51
  51. package/dist/rack-table-cell.js.map +1 -1
  52. package/dist/rack-table-location.d.ts +37 -0
  53. package/dist/rack-table-location.js +227 -0
  54. package/dist/rack-table-location.js.map +1 -0
  55. package/dist/rack-table.d.ts +13 -29
  56. package/dist/rack-table.js +108 -380
  57. package/dist/rack-table.js.map +1 -1
  58. package/dist/rack.d.ts +3 -5
  59. package/dist/rack.js +7 -9
  60. package/dist/rack.js.map +1 -1
  61. package/dist/rect.js +2 -4
  62. package/dist/rect.js.map +1 -1
  63. package/dist/signal-tower.d.ts +492 -0
  64. package/dist/signal-tower.js +275 -0
  65. package/dist/signal-tower.js.map +1 -0
  66. package/dist/sphere.d.ts +1 -3
  67. package/dist/sphere.js +1 -2
  68. package/dist/sphere.js.map +1 -1
  69. package/dist/sprite.d.ts +232 -3
  70. package/dist/sprite.js +1 -2
  71. package/dist/sprite.js.map +1 -1
  72. package/dist/stock.d.ts +22 -10
  73. package/dist/stock.js +87 -81
  74. package/dist/stock.js.map +1 -1
  75. package/dist/tank.d.ts +492 -0
  76. package/dist/tank.js +312 -0
  77. package/dist/tank.js.map +1 -0
  78. package/dist/templates/carrier.d.ts +19 -0
  79. package/dist/templates/carrier.js +20 -0
  80. package/dist/templates/carrier.js.map +1 -0
  81. package/dist/templates/cube.js +1 -1
  82. package/dist/templates/cube.js.map +1 -1
  83. package/dist/templates/cylinder.js +3 -3
  84. package/dist/templates/cylinder.js.map +1 -1
  85. package/dist/templates/index.d.ts +1 -0
  86. package/dist/templates/index.js +9 -1
  87. package/dist/templates/index.js.map +1 -1
  88. package/dist/templates/signal-tower.d.ts +21 -0
  89. package/dist/templates/signal-tower.js +22 -0
  90. package/dist/templates/signal-tower.js.map +1 -0
  91. package/dist/templates/sphere.d.ts +1 -0
  92. package/dist/templates/sphere.js +5 -4
  93. package/dist/templates/sphere.js.map +1 -1
  94. package/dist/templates/tank.d.ts +21 -0
  95. package/dist/templates/tank.js +22 -0
  96. package/dist/templates/tank.js.map +1 -0
  97. package/dist/templates/vehicle.d.ts +19 -0
  98. package/dist/templates/vehicle.js +20 -0
  99. package/dist/templates/vehicle.js.map +1 -0
  100. package/dist/text.js +2 -4
  101. package/dist/text.js.map +1 -1
  102. package/dist/three-container.d.ts +11 -35
  103. package/dist/three-container.js +128 -322
  104. package/dist/three-container.js.map +1 -1
  105. package/dist/three-controls.d.ts +101 -1
  106. package/dist/three-controls.js +339 -541
  107. package/dist/three-controls.js.map +1 -1
  108. package/dist/three-space.d.ts +6 -83
  109. package/dist/three-space.js +25 -537
  110. package/dist/three-space.js.map +1 -1
  111. package/dist/threed/index.d.ts +1 -0
  112. package/dist/threed/index.js +1 -0
  113. package/dist/threed/index.js.map +1 -1
  114. package/dist/threed/interfaces.d.ts +15 -0
  115. package/dist/threed/interfaces.js +5 -0
  116. package/dist/threed/interfaces.js.map +1 -0
  117. package/dist/threed/managers/camera-manager.d.ts +14 -0
  118. package/dist/threed/managers/camera-manager.js +60 -0
  119. package/dist/threed/managers/camera-manager.js.map +1 -0
  120. package/dist/threed/managers/controls-manager.d.ts +50 -0
  121. package/dist/threed/managers/controls-manager.js +249 -0
  122. package/dist/threed/managers/controls-manager.js.map +1 -0
  123. package/dist/threed/managers/event-manager3d.d.ts +19 -0
  124. package/dist/threed/managers/event-manager3d.js +76 -0
  125. package/dist/threed/managers/event-manager3d.js.map +1 -0
  126. package/dist/threed/managers/index.d.ts +7 -0
  127. package/dist/threed/managers/index.js +7 -0
  128. package/dist/threed/managers/index.js.map +1 -0
  129. package/dist/threed/managers/light-manager.d.ts +7 -0
  130. package/dist/threed/managers/light-manager.js +37 -0
  131. package/dist/threed/managers/light-manager.js.map +1 -0
  132. package/dist/threed/managers/renderer-manager.d.ts +30 -0
  133. package/dist/threed/managers/renderer-manager.js +120 -0
  134. package/dist/threed/managers/renderer-manager.js.map +1 -0
  135. package/dist/threed/managers/scene-manager.d.ts +15 -0
  136. package/dist/threed/managers/scene-manager.js +48 -0
  137. package/dist/threed/managers/scene-manager.js.map +1 -0
  138. package/dist/threed/managers/types.d.ts +36 -0
  139. package/dist/threed/managers/types.js +2 -0
  140. package/dist/threed/managers/types.js.map +1 -0
  141. package/dist/threed/real-object-dom-element.js +11 -3
  142. package/dist/threed/real-object-dom-element.js.map +1 -1
  143. package/dist/threed/real-object-extrude.d.ts +1 -0
  144. package/dist/threed/real-object-extrude.js +7 -0
  145. package/dist/threed/real-object-extrude.js.map +1 -1
  146. package/dist/threed/real-object-gltf.js +6 -2
  147. package/dist/threed/real-object-gltf.js.map +1 -1
  148. package/dist/threed/real-object-mesh.js +4 -6
  149. package/dist/threed/real-object-mesh.js.map +1 -1
  150. package/dist/threed/real-object-registry.d.ts +7 -0
  151. package/dist/threed/real-object-registry.js +32 -0
  152. package/dist/threed/real-object-registry.js.map +1 -0
  153. package/dist/threed/real-object-scene.js +10 -5
  154. package/dist/threed/real-object-scene.js.map +1 -1
  155. package/dist/threed/real-object-sprite-2d.js.map +1 -1
  156. package/dist/threed/real-object-sprite.js +2 -0
  157. package/dist/threed/real-object-sprite.js.map +1 -1
  158. package/dist/threed/real-object-text.js +2 -0
  159. package/dist/threed/real-object-text.js.map +1 -1
  160. package/dist/threed/real-object.d.ts +3 -2
  161. package/dist/threed/real-object.js +7 -16
  162. package/dist/threed/real-object.js.map +1 -1
  163. package/dist/threed/three-dimensional-container.d.ts +1 -2
  164. package/dist/threed/three-dimensional-container.js.map +1 -1
  165. package/dist/threed/utils/dispose.d.ts +2 -0
  166. package/dist/threed/utils/dispose.js +32 -0
  167. package/dist/threed/utils/dispose.js.map +1 -0
  168. package/dist/vehicle.d.ts +248 -0
  169. package/dist/vehicle.js +133 -0
  170. package/dist/vehicle.js.map +1 -0
  171. package/dist/visualizer.d.ts +4 -5
  172. package/dist/visualizer.js +15 -28
  173. package/dist/visualizer.js.map +1 -1
  174. package/dist/wall.d.ts +232 -4
  175. package/dist/wall.js +1 -2
  176. package/dist/wall.js.map +1 -1
  177. package/icons/carrier.png +0 -0
  178. package/icons/signal-tower.png +0 -0
  179. package/icons/tank.png +0 -0
  180. package/icons/vehicle.png +0 -0
  181. package/package.json +16 -18
@@ -0,0 +1,37 @@
1
+ import type { RackTableCell } from './rack-table-cell.js';
2
+ /**
3
+ * Classify cells by their row index.
4
+ */
5
+ export declare function classifyByRow(cells: RackTableCell[]): RackTableCell[][];
6
+ /**
7
+ * Find aisle rows (rows where all cells are empty).
8
+ */
9
+ export declare function findAisle(rows?: RackTableCell[][]): RackTableCell[][];
10
+ /**
11
+ * Get indices of aisle rows.
12
+ */
13
+ export declare function getAisleRowIndices(rows: RackTableCell[][]): number[];
14
+ /**
15
+ * Classify rows into sections separated by aisle rows.
16
+ */
17
+ export declare function classifyCellsBySection(rows: RackTableCell[][], aisleRowIndices: number[]): RackTableCell[][][];
18
+ /**
19
+ * Rearrange cells by aisle direction pattern.
20
+ */
21
+ export declare function rearrangeByAisle(type: string, sections: RackTableCell[][][]): RackTableCell[][][];
22
+ /**
23
+ * Remove empty cells from sections.
24
+ */
25
+ export declare function removeEmptyCells(sections: RackTableCell[][][]): RackTableCell[][][];
26
+ /**
27
+ * Merge section rows into flat arrays.
28
+ */
29
+ export declare function mergeRows(sections: RackTableCell[][][]): RackTableCell[][];
30
+ /**
31
+ * Set section/unit location on cells.
32
+ */
33
+ export declare function setLocations(sections: RackTableCell[][], startSection: number, startUnit: number, sectionDigits: number, unitDigits: number): void;
34
+ /**
35
+ * Run the full location increase flow.
36
+ */
37
+ export declare function increaseLocation(selectedCells: RackTableCell[], type: string, skipNumbering: boolean, startSection: number, startUnit: number, sectionDigits: number, unitDigits: number): void;
@@ -0,0 +1,227 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ *
4
+ * RackTable location management utilities.
5
+ * Extracted from rack-table.ts for separation of concerns.
6
+ */
7
+ /**
8
+ * Classify cells by their row index.
9
+ */
10
+ export function classifyByRow(cells) {
11
+ const classified = [];
12
+ cells.forEach(c => {
13
+ const { row, column } = c.index;
14
+ if (!classified[row]) {
15
+ classified[row] = [];
16
+ }
17
+ classified[row][column] = c;
18
+ });
19
+ return classified;
20
+ }
21
+ /**
22
+ * Find aisle rows (rows where all cells are empty).
23
+ */
24
+ export function findAisle(rows) {
25
+ if (!rows) {
26
+ return [];
27
+ }
28
+ return rows.filter(r => {
29
+ return r[0] && r[0].isAisle;
30
+ });
31
+ }
32
+ /**
33
+ * Get indices of aisle rows.
34
+ */
35
+ export function getAisleRowIndices(rows) {
36
+ const aisles = findAisle(rows);
37
+ const aisleRowIndices = [];
38
+ aisles.forEach(aisle => {
39
+ aisleRowIndices.push(rows.indexOf(aisle));
40
+ });
41
+ return aisleRowIndices;
42
+ }
43
+ /**
44
+ * Classify rows into sections separated by aisle rows.
45
+ */
46
+ export function classifyCellsBySection(rows, aisleRowIndices) {
47
+ const sections = [];
48
+ let wasAisle = false;
49
+ let section;
50
+ rows.forEach((row, i) => {
51
+ const isAisle = aisleRowIndices.indexOf(i) > -1;
52
+ if (!(wasAisle || isAisle)) {
53
+ section = [];
54
+ sections.push(section);
55
+ }
56
+ wasAisle = isAisle;
57
+ section.push(row);
58
+ });
59
+ return sections;
60
+ }
61
+ /**
62
+ * Rearrange cells by aisle direction pattern.
63
+ */
64
+ export function rearrangeByAisle(type, sections) {
65
+ const rearranged = [];
66
+ switch (type.toLowerCase()) {
67
+ case 'cw': {
68
+ let reverse = false;
69
+ sections.forEach(rows => {
70
+ const section = [];
71
+ rearranged.push(section);
72
+ rows.forEach((r, i) => {
73
+ if (reverse)
74
+ r.reverse();
75
+ if (i % 2 === 0) {
76
+ section.push(r);
77
+ reverse = !reverse;
78
+ }
79
+ });
80
+ });
81
+ break;
82
+ }
83
+ case 'ccw': {
84
+ let reverse = true;
85
+ sections.forEach(rows => {
86
+ const section = [];
87
+ rearranged.push(section);
88
+ rows.forEach((r, i) => {
89
+ if (reverse)
90
+ r.reverse();
91
+ if (i % 2 === 0) {
92
+ section.push(r);
93
+ reverse = !reverse;
94
+ }
95
+ });
96
+ });
97
+ break;
98
+ }
99
+ case 'zigzag':
100
+ sections.forEach(rows => {
101
+ const section = [];
102
+ rows.forEach((r, i) => {
103
+ if (i % 2 === 0) {
104
+ section.push(r);
105
+ }
106
+ });
107
+ const sectionLength = section.length;
108
+ const tempRow = [];
109
+ const tempSection = [];
110
+ section.forEach((row, rowIdx) => {
111
+ row.forEach((cell, idx) => {
112
+ tempRow[rowIdx + idx * section.length] = cell;
113
+ });
114
+ });
115
+ const chunkSize = tempRow.length / sectionLength;
116
+ for (let idx = 0; idx < sectionLength; idx++) {
117
+ tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize));
118
+ }
119
+ rearranged.push(tempSection);
120
+ });
121
+ break;
122
+ case 'zigzag-reverse':
123
+ sections.forEach(rows => {
124
+ const section = [];
125
+ rows.forEach((r, i) => {
126
+ if (i % 2 === 0) {
127
+ r.reverse();
128
+ section.push(r);
129
+ }
130
+ });
131
+ const sectionLength = section.length;
132
+ const tempRow = [];
133
+ const tempSection = [];
134
+ section.forEach((row, rowIdx) => {
135
+ row.forEach((cell, idx) => {
136
+ tempRow[rowIdx + idx * section.length] = cell;
137
+ });
138
+ });
139
+ const chunkSize = tempRow.length / sectionLength;
140
+ for (let idx = 0; idx < sectionLength; idx++) {
141
+ tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize));
142
+ }
143
+ rearranged.push(tempSection);
144
+ });
145
+ break;
146
+ }
147
+ return rearranged;
148
+ }
149
+ /**
150
+ * Remove empty cells from sections.
151
+ */
152
+ export function removeEmptyCells(sections) {
153
+ const newSections = [];
154
+ sections.forEach(rows => {
155
+ const newRows = [];
156
+ newSections.push(newRows);
157
+ rows.forEach(row => {
158
+ const newRow = [];
159
+ newRows.push(newRow);
160
+ row.forEach(c => {
161
+ if (!c.isEmpty)
162
+ newRow.push(c);
163
+ });
164
+ });
165
+ });
166
+ return newSections;
167
+ }
168
+ /**
169
+ * Merge section rows into flat arrays.
170
+ */
171
+ export function mergeRows(sections) {
172
+ const merged = [];
173
+ sections.forEach(section => {
174
+ let newSection = [];
175
+ section.forEach(rows => {
176
+ let mergedRow = [];
177
+ rows.forEach(row => {
178
+ mergedRow = mergedRow.concat(row);
179
+ });
180
+ newSection = newSection.concat(mergedRow);
181
+ });
182
+ merged.push(newSection);
183
+ });
184
+ return merged;
185
+ }
186
+ /**
187
+ * Set section/unit location on cells.
188
+ */
189
+ export function setLocations(sections, startSection, startUnit, sectionDigits, unitDigits) {
190
+ let sectionNumber = Number(startSection) || 1;
191
+ sections.forEach(section => {
192
+ let unitNumber = Number(startUnit) || 1;
193
+ section.forEach(c => {
194
+ if (!c.isEmpty) {
195
+ c.set('section', String(sectionNumber).padStart(sectionDigits, '0'));
196
+ c.set('unit', String(unitNumber).padStart(unitDigits, '0'));
197
+ }
198
+ else {
199
+ c.set('section', null);
200
+ c.set('unit', null);
201
+ }
202
+ unitNumber++;
203
+ });
204
+ sectionNumber++;
205
+ });
206
+ }
207
+ /**
208
+ * Run the full location increase flow.
209
+ */
210
+ export function increaseLocation(selectedCells, type, skipNumbering, startSection, startUnit, sectionDigits, unitDigits) {
211
+ // step 1: classify cells by row
212
+ const classified = classifyByRow(selectedCells);
213
+ // step 2: find aisle row indices
214
+ const aisleRowIndices = getAisleRowIndices(classified);
215
+ // step 3: classify cells by section
216
+ const sections = classifyCellsBySection(classified, aisleRowIndices);
217
+ // step 4: rearrange by aisle
218
+ let rearranged = rearrangeByAisle(type, sections);
219
+ // step 5: if skip numbering, remove empty cells
220
+ if (skipNumbering)
221
+ rearranged = removeEmptyCells(rearranged);
222
+ // step 6: merge rows
223
+ const merged = mergeRows(rearranged);
224
+ // step 7: set location
225
+ setLocations(merged, startSection, startUnit, sectionDigits, unitDigits);
226
+ }
227
+ //# sourceMappingURL=rack-table-location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rack-table-location.js","sourceRoot":"","sources":["../src/rack-table-location.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n *\n * RackTable location management utilities.\n * Extracted from rack-table.ts for separation of concerns.\n */\n\nimport type { RackTableCell } from './rack-table-cell.js'\n\n/**\n * Classify cells by their row index.\n */\nexport function classifyByRow(cells: RackTableCell[]): RackTableCell[][] {\n const classified: RackTableCell[][] = []\n\n cells.forEach(c => {\n const { row, column } = c.index\n\n if (!classified[row]) {\n classified[row] = []\n }\n\n classified[row][column] = c\n })\n\n return classified\n}\n\n/**\n * Find aisle rows (rows where all cells are empty).\n */\nexport function findAisle(rows?: RackTableCell[][]): RackTableCell[][] {\n if (!rows) {\n return []\n }\n\n return rows.filter(r => {\n return r[0] && r[0].isAisle\n })\n}\n\n/**\n * Get indices of aisle rows.\n */\nexport function getAisleRowIndices(rows: RackTableCell[][]): number[] {\n const aisles = findAisle(rows)\n const aisleRowIndices: number[] = []\n\n aisles.forEach(aisle => {\n aisleRowIndices.push(rows.indexOf(aisle))\n })\n\n return aisleRowIndices\n}\n\n/**\n * Classify rows into sections separated by aisle rows.\n */\nexport function classifyCellsBySection(\n rows: RackTableCell[][],\n aisleRowIndices: number[]\n): RackTableCell[][][] {\n const sections: RackTableCell[][][] = []\n let wasAisle = false\n let section!: RackTableCell[][]\n\n rows.forEach((row, i) => {\n const isAisle = aisleRowIndices.indexOf(i) > -1\n\n if (!(wasAisle || isAisle)) {\n section = []\n sections.push(section)\n }\n\n wasAisle = isAisle\n\n section.push(row)\n })\n\n return sections\n}\n\n/**\n * Rearrange cells by aisle direction pattern.\n */\nexport function rearrangeByAisle(type: string, sections: RackTableCell[][][]): RackTableCell[][][] {\n const rearranged: RackTableCell[][][] = []\n\n switch (type.toLowerCase()) {\n case 'cw': {\n let reverse = false\n sections.forEach(rows => {\n const section: RackTableCell[][] = []\n rearranged.push(section)\n rows.forEach((r, i) => {\n if (reverse) r.reverse()\n\n if (i % 2 === 0) {\n section.push(r)\n reverse = !reverse\n }\n })\n })\n break\n }\n case 'ccw': {\n let reverse = true\n sections.forEach(rows => {\n const section: RackTableCell[][] = []\n rearranged.push(section)\n rows.forEach((r, i) => {\n if (reverse) r.reverse()\n\n if (i % 2 === 0) {\n section.push(r)\n reverse = !reverse\n }\n })\n })\n break\n }\n case 'zigzag':\n sections.forEach(rows => {\n const section: RackTableCell[][] = []\n\n rows.forEach((r, i) => {\n if (i % 2 === 0) {\n section.push(r)\n }\n })\n\n const sectionLength = section.length\n const tempRow: RackTableCell[] = []\n const tempSection: RackTableCell[][] = []\n\n section.forEach((row, rowIdx) => {\n row.forEach((cell, idx) => {\n tempRow[rowIdx + idx * section.length] = cell\n })\n })\n\n const chunkSize = tempRow.length / sectionLength\n for (let idx = 0; idx < sectionLength; idx++) {\n tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize))\n }\n\n rearranged.push(tempSection)\n })\n break\n case 'zigzag-reverse':\n sections.forEach(rows => {\n const section: RackTableCell[][] = []\n\n rows.forEach((r, i) => {\n if (i % 2 === 0) {\n r.reverse()\n section.push(r)\n }\n })\n\n const sectionLength = section.length\n const tempRow: RackTableCell[] = []\n const tempSection: RackTableCell[][] = []\n\n section.forEach((row, rowIdx) => {\n row.forEach((cell, idx) => {\n tempRow[rowIdx + idx * section.length] = cell\n })\n })\n\n const chunkSize = tempRow.length / sectionLength\n for (let idx = 0; idx < sectionLength; idx++) {\n tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize))\n }\n\n rearranged.push(tempSection)\n })\n break\n }\n\n return rearranged\n}\n\n/**\n * Remove empty cells from sections.\n */\nexport function removeEmptyCells(sections: RackTableCell[][][]): RackTableCell[][][] {\n const newSections: RackTableCell[][][] = []\n sections.forEach(rows => {\n const newRows: RackTableCell[][] = []\n newSections.push(newRows)\n rows.forEach(row => {\n const newRow: RackTableCell[] = []\n newRows.push(newRow)\n row.forEach(c => {\n if (!c.isEmpty) newRow.push(c)\n })\n })\n })\n\n return newSections\n}\n\n/**\n * Merge section rows into flat arrays.\n */\nexport function mergeRows(sections: RackTableCell[][][]): RackTableCell[][] {\n const merged: RackTableCell[][] = []\n\n sections.forEach(section => {\n let newSection: RackTableCell[] = []\n\n section.forEach(rows => {\n let mergedRow: RackTableCell[] = []\n rows.forEach(row => {\n mergedRow = mergedRow.concat(row)\n })\n newSection = newSection.concat(mergedRow)\n })\n merged.push(newSection)\n })\n\n return merged\n}\n\n/**\n * Set section/unit location on cells.\n */\nexport function setLocations(\n sections: RackTableCell[][],\n startSection: number,\n startUnit: number,\n sectionDigits: number,\n unitDigits: number\n) {\n let sectionNumber = Number(startSection) || 1\n\n sections.forEach(section => {\n let unitNumber = Number(startUnit) || 1\n section.forEach(c => {\n if (!c.isEmpty) {\n c.set('section', String(sectionNumber).padStart(sectionDigits, '0'))\n c.set('unit', String(unitNumber).padStart(unitDigits, '0'))\n } else {\n c.set('section', null)\n c.set('unit', null)\n }\n unitNumber++\n })\n sectionNumber++\n })\n}\n\n/**\n * Run the full location increase flow.\n */\nexport function increaseLocation(\n selectedCells: RackTableCell[],\n type: string,\n skipNumbering: boolean,\n startSection: number,\n startUnit: number,\n sectionDigits: number,\n unitDigits: number\n) {\n // step 1: classify cells by row\n const classified = classifyByRow(selectedCells)\n\n // step 2: find aisle row indices\n const aisleRowIndices = getAisleRowIndices(classified)\n\n // step 3: classify cells by section\n const sections = classifyCellsBySection(classified, aisleRowIndices)\n\n // step 4: rearrange by aisle\n let rearranged = rearrangeByAisle(type, sections)\n\n // step 5: if skip numbering, remove empty cells\n if (skipNumbering) rearranged = removeEmptyCells(rearranged)\n\n // step 6: merge rows\n const merged = mergeRows(rearranged)\n\n // step 7: set location\n setLocations(merged, startSection, startUnit, sectionDigits, unitDigits)\n}\n"]}
@@ -1,22 +1,17 @@
1
- import { Component, ComponentNature, ContainerAbstract, Control, Properties } from '@hatiolab/things-scene';
2
- import { Rack } from './rack.js';
1
+ import { Component, ComponentNature, ContainerAbstract, Control, Properties, RealObject } from '@hatiolab/things-scene';
2
+ import * as THREE from 'three';
3
3
  import { RackTableCell } from './rack-table-cell.js';
4
- import { RealObjectGroup } from './threed/real-object-group.js';
5
- import { RealObject } from './threed/real-object.js';
6
- export declare class RackTable3d extends RealObjectGroup {
7
- build(): void;
8
- get position(): {
9
- x: number;
10
- y: any;
11
- z: number;
12
- };
13
- createRacks(): void;
14
- mergeAndAddRackCommonObjects(racks: Rack[]): void;
15
- makeShelfString(pattern: string, shelf: number, length: number): string | undefined;
16
- updateAlpha(): void;
17
- }
18
- export declare class RackTable extends ContainerAbstract {
4
+ import type { StockMaterialProvider } from './stock.js';
5
+ export declare class RackTable extends ContainerAbstract implements StockMaterialProvider {
19
6
  _focused_cell?: RackTableCell;
7
+ _stock_materials: THREE.Material[];
8
+ _default_material?: THREE.Material;
9
+ _empty_material?: THREE.Material;
10
+ private _legendTarget?;
11
+ get legendTarget(): Component | undefined;
12
+ get hideEmptyStock(): boolean;
13
+ private _onLegendChanged;
14
+ private _resetMaterials;
20
15
  is3dish(): boolean;
21
16
  buildRealObject(): RealObject | undefined;
22
17
  dispose(): void;
@@ -25,7 +20,7 @@ export declare class RackTable extends ContainerAbstract {
25
20
  get widths(): number[];
26
21
  get heights(): number[];
27
22
  buildCells(newrows: number, newcolumns: number, oldrows: number, oldcolumns: number): void;
28
- get layout(): import("@hatiolab/things-scene").LAYOUT;
23
+ get layout(): any;
29
24
  get rows(): any;
30
25
  setCellsStyle(cells: RackTableCell[], style: any, where: string): void;
31
26
  getRowColumn(cell: RackTableCell): {
@@ -42,18 +37,7 @@ export declare class RackTable extends ContainerAbstract {
42
37
  insertCellsRight(cells: RackTableCell[]): false | undefined;
43
38
  distributeHorizontal(cells: RackTableCell[]): void;
44
39
  distributeVertical(cells: RackTableCell[]): void;
45
- /**
46
- * visualizer location setting functions
47
- */
48
40
  increaseLocation(type: string, skipNumbering: boolean, startSection: number, startUnit: number): void;
49
- classifyByRow(cells: RackTableCell[]): RackTableCell[][];
50
- findAisle(rows?: RackTableCell[][]): RackTableCell[][];
51
- getAisleRowIndices(rows?: RackTableCell[][]): number[];
52
- classifyCellsBySection(rows: RackTableCell[][], aisleRowIndices: number[]): RackTableCell[][][];
53
- rearrangeByAisle(type: string, sections: RackTableCell[][][]): RackTableCell[][][];
54
- removeEmptyCells(sections: RackTableCell[][][]): RackTableCell[][][];
55
- mergeRows(sections: RackTableCell[][][]): RackTableCell[][];
56
- setLocations(sections: RackTableCell[][], startSection: number, startUnit: number): void;
57
41
  get columns(): any;
58
42
  get lefts(): Component[];
59
43
  get centers(): Component[];