sun-card-design 1.1.37 → 1.1.39

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 (162) hide show
  1. package/README.md +114 -112
  2. package/dist/mobile/sun-card-design-mobile.es11.js +3 -3
  3. package/dist/mobile/sun-card-design-mobile.es3.js +4 -4
  4. package/dist/mobile/sun-card-design-mobile.es4.js +5 -5
  5. package/dist/mobile/sun-card-design-mobile.es56.js +3 -4
  6. package/dist/mobile/sun-card-design-mobile.es6.js +2 -10
  7. package/dist/pc/sun-card-design-pc.es11.js +3 -3
  8. package/dist/pc/sun-card-design-pc.es3.js +4 -4
  9. package/dist/pc/sun-card-design-pc.es4.js +5 -5
  10. package/dist/pc/sun-card-design-pc.es56.js +3 -4
  11. package/dist/pc/sun-card-design-pc.es6.js +2 -10
  12. package/dist/public/sun-card-design.css +1 -1
  13. package/package.json +98 -96
  14. package/dist/public/sun-card-designer.css +0 -1
  15. package/dist/sun-card-designer.es.js +0 -25
  16. package/dist/sun-card-designer.es10.js +0 -167
  17. package/dist/sun-card-designer.es11.js +0 -197
  18. package/dist/sun-card-designer.es12.js +0 -203
  19. package/dist/sun-card-designer.es13.js +0 -130
  20. package/dist/sun-card-designer.es14.js +0 -120
  21. package/dist/sun-card-designer.es151.js +0 -4
  22. package/dist/sun-card-designer.es152.js +0 -4
  23. package/dist/sun-card-designer.es153.js +0 -4
  24. package/dist/sun-card-designer.es154.js +0 -4
  25. package/dist/sun-card-designer.es155.js +0 -82
  26. package/dist/sun-card-designer.es156.js +0 -91
  27. package/dist/sun-card-designer.es157.js +0 -92
  28. package/dist/sun-card-designer.es158.js +0 -191
  29. package/dist/sun-card-designer.es159.js +0 -86
  30. package/dist/sun-card-designer.es16.js +0 -10
  31. package/dist/sun-card-designer.es160.js +0 -238
  32. package/dist/sun-card-designer.es161.js +0 -113
  33. package/dist/sun-card-designer.es162.js +0 -49
  34. package/dist/sun-card-designer.es163.js +0 -43
  35. package/dist/sun-card-designer.es164.js +0 -39
  36. package/dist/sun-card-designer.es165.js +0 -46
  37. package/dist/sun-card-designer.es166.js +0 -58
  38. package/dist/sun-card-designer.es167.js +0 -56
  39. package/dist/sun-card-designer.es168.js +0 -58
  40. package/dist/sun-card-designer.es169.js +0 -73
  41. package/dist/sun-card-designer.es17.js +0 -333
  42. package/dist/sun-card-designer.es170.js +0 -59
  43. package/dist/sun-card-designer.es171.js +0 -69
  44. package/dist/sun-card-designer.es172.js +0 -182
  45. package/dist/sun-card-designer.es173.js +0 -176
  46. package/dist/sun-card-designer.es174.js +0 -184
  47. package/dist/sun-card-designer.es175.js +0 -409
  48. package/dist/sun-card-designer.es176.js +0 -365
  49. package/dist/sun-card-designer.es177.js +0 -70
  50. package/dist/sun-card-designer.es178.js +0 -68
  51. package/dist/sun-card-designer.es179.js +0 -184
  52. package/dist/sun-card-designer.es18.js +0 -68
  53. package/dist/sun-card-designer.es180.js +0 -193
  54. package/dist/sun-card-designer.es181.js +0 -193
  55. package/dist/sun-card-designer.es182.js +0 -193
  56. package/dist/sun-card-designer.es184.js +0 -228
  57. package/dist/sun-card-designer.es185.js +0 -71
  58. package/dist/sun-card-designer.es19.js +0 -611
  59. package/dist/sun-card-designer.es196.js +0 -4
  60. package/dist/sun-card-designer.es20.js +0 -225
  61. package/dist/sun-card-designer.es201.js +0 -125
  62. package/dist/sun-card-designer.es21.js +0 -69
  63. package/dist/sun-card-designer.es22.js +0 -719
  64. package/dist/sun-card-designer.es220.js +0 -63
  65. package/dist/sun-card-designer.es221.js +0 -80
  66. package/dist/sun-card-designer.es222.js +0 -82
  67. package/dist/sun-card-designer.es223.js +0 -94
  68. package/dist/sun-card-designer.es224.js +0 -87
  69. package/dist/sun-card-designer.es225.js +0 -226
  70. package/dist/sun-card-designer.es226.js +0 -105
  71. package/dist/sun-card-designer.es227.js +0 -45
  72. package/dist/sun-card-designer.es228.js +0 -31
  73. package/dist/sun-card-designer.es229.js +0 -29
  74. package/dist/sun-card-designer.es23.js +0 -211
  75. package/dist/sun-card-designer.es230.js +0 -32
  76. package/dist/sun-card-designer.es231.js +0 -46
  77. package/dist/sun-card-designer.es232.js +0 -42
  78. package/dist/sun-card-designer.es233.js +0 -44
  79. package/dist/sun-card-designer.es234.js +0 -61
  80. package/dist/sun-card-designer.es235.js +0 -46
  81. package/dist/sun-card-designer.es236.js +0 -54
  82. package/dist/sun-card-designer.es237.js +0 -130
  83. package/dist/sun-card-designer.es238.js +0 -127
  84. package/dist/sun-card-designer.es239.js +0 -132
  85. package/dist/sun-card-designer.es24.js +0 -265
  86. package/dist/sun-card-designer.es240.js +0 -375
  87. package/dist/sun-card-designer.es241.js +0 -348
  88. package/dist/sun-card-designer.es242.js +0 -69
  89. package/dist/sun-card-designer.es243.js +0 -65
  90. package/dist/sun-card-designer.es244.js +0 -87
  91. package/dist/sun-card-designer.es245.js +0 -98
  92. package/dist/sun-card-designer.es246.js +0 -98
  93. package/dist/sun-card-designer.es247.js +0 -98
  94. package/dist/sun-card-designer.es25.js +0 -857
  95. package/dist/sun-card-designer.es26.js +0 -768
  96. package/dist/sun-card-designer.es260.js +0 -125
  97. package/dist/sun-card-designer.es27.js +0 -264
  98. package/dist/sun-card-designer.es273.js +0 -192
  99. package/dist/sun-card-designer.es28.js +0 -809
  100. package/dist/sun-card-designer.es29.js +0 -220
  101. package/dist/sun-card-designer.es3.js +0 -506
  102. package/dist/sun-card-designer.es30.js +0 -809
  103. package/dist/sun-card-designer.es31.js +0 -220
  104. package/dist/sun-card-designer.es32.js +0 -820
  105. package/dist/sun-card-designer.es33.js +0 -225
  106. package/dist/sun-card-designer.es34.js +0 -69
  107. package/dist/sun-card-designer.es35.js +0 -375
  108. package/dist/sun-card-designer.es36.js +0 -186
  109. package/dist/sun-card-designer.es37.js +0 -119
  110. package/dist/sun-card-designer.es38.js +0 -354
  111. package/dist/sun-card-designer.es39.js +0 -127
  112. package/dist/sun-card-designer.es4.js +0 -365
  113. package/dist/sun-card-designer.es40.js +0 -100
  114. package/dist/sun-card-designer.es41.js +0 -214
  115. package/dist/sun-card-designer.es42.js +0 -119
  116. package/dist/sun-card-designer.es43.js +0 -250
  117. package/dist/sun-card-designer.es44.js +0 -118
  118. package/dist/sun-card-designer.es45.js +0 -64
  119. package/dist/sun-card-designer.es46.js +0 -223
  120. package/dist/sun-card-designer.es47.js +0 -196
  121. package/dist/sun-card-designer.es48.js +0 -77
  122. package/dist/sun-card-designer.es49.js +0 -85
  123. package/dist/sun-card-designer.es5.js +0 -317
  124. package/dist/sun-card-designer.es50.js +0 -85
  125. package/dist/sun-card-designer.es51.js +0 -64
  126. package/dist/sun-card-designer.es52.js +0 -283
  127. package/dist/sun-card-designer.es53.js +0 -64
  128. package/dist/sun-card-designer.es54.js +0 -142
  129. package/dist/sun-card-designer.es55.js +0 -52
  130. package/dist/sun-card-designer.es56.js +0 -85
  131. package/dist/sun-card-designer.es57.js +0 -258
  132. package/dist/sun-card-designer.es58.js +0 -226
  133. package/dist/sun-card-designer.es59.js +0 -169
  134. package/dist/sun-card-designer.es6.js +0 -190
  135. package/dist/sun-card-designer.es60.js +0 -280
  136. package/dist/sun-card-designer.es61.js +0 -168
  137. package/dist/sun-card-designer.es62.js +0 -219
  138. package/dist/sun-card-designer.es63.js +0 -168
  139. package/dist/sun-card-designer.es64.js +0 -275
  140. package/dist/sun-card-designer.es65.js +0 -760
  141. package/dist/sun-card-designer.es66.js +0 -272
  142. package/dist/sun-card-designer.es67.js +0 -559
  143. package/dist/sun-card-designer.es68.js +0 -124
  144. package/dist/sun-card-designer.es69.js +0 -528
  145. package/dist/sun-card-designer.es7.js +0 -65
  146. package/dist/sun-card-designer.es70.js +0 -185
  147. package/dist/sun-card-designer.es71.js +0 -107
  148. package/dist/sun-card-designer.es72.js +0 -153
  149. package/dist/sun-card-designer.es73.js +0 -315
  150. package/dist/sun-card-designer.es74.js +0 -114
  151. package/dist/sun-card-designer.es76.js +0 -4211
  152. package/dist/sun-card-designer.es79.js +0 -4
  153. package/dist/sun-card-designer.es8.js +0 -171
  154. package/dist/sun-card-designer.es80.js +0 -4
  155. package/dist/sun-card-designer.es81.js +0 -4
  156. package/dist/sun-card-designer.es84.js +0 -228
  157. package/dist/sun-card-designer.es87.js +0 -52
  158. package/dist/sun-card-designer.es88.js +0 -52
  159. package/dist/sun-card-designer.es9.js +0 -207
  160. package/dist/sun-card-designer.es91.js +0 -344
  161. package/dist/sun-card-designer.es92.js +0 -199
  162. package/dist/sun-card-designer.es95.js +0 -180
@@ -1,409 +0,0 @@
1
- import { ref, watch, computed, onMounted, onUnmounted, createElementBlock, openBlock, normalizeStyle, normalizeClass } from "vue";
2
- import * as THREE from "three";
3
- import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
4
- import { CSS2DObject, CSS2DRenderer } from "three/examples/jsm/renderers/CSS2DRenderer.js";
5
- import { ColorList } from "./sun-card-designer.es76.js";
6
- import { useCardManageStore } from "./sun-card-designer.es13.js";
7
- /* empty css */
8
- import _export_sfc from "./sun-card-designer.es16.js";
9
- const _sfc_main = {
10
- __name: "barChart3dComp",
11
- props: ["record"],
12
- setup(__props) {
13
- const props = __props;
14
- const currentUuid = ref(null);
15
- const cardManageStore = useCardManageStore();
16
- watch(
17
- () => cardManageStore.currentSelectUuid,
18
- (val) => {
19
- currentUuid.value = val;
20
- }
21
- );
22
- const containerRef = ref(null);
23
- let renderer = null;
24
- let labelRenderer = null;
25
- let scene = null;
26
- let camera = null;
27
- let animationId = null;
28
- let resizeObserver = null;
29
- let barsGroup = null;
30
- let controls = null;
31
- let hasFramedView = false;
32
- let defaultBarColor = null;
33
- let envTexture = null;
34
- const chartStyle = computed(() => {
35
- const style = props.record?.options?.style || {};
36
- return {
37
- width: style.width || "100%",
38
- height: style.height || "260px"
39
- };
40
- });
41
- function getChartConfig() {
42
- const options = props.record?.options || {};
43
- const xAxis = Array.isArray(options?.xAxisConfig) && options.xAxisConfig[0] ? options.xAxisConfig[0] : { data: ["A", "B", "C", "D", "E"] };
44
- const series = Array.isArray(options?.seriesConfig) && options.seriesConfig[0] ? options.seriesConfig[0] : { data: [12, 20, 8, 16, 10], itemStyle: { colorType: "solid", color: getRandomColor() } };
45
- const colorType = series?.itemStyle?.colorType || (typeof series?.itemStyle?.color === "object" ? "gradient" : "solid");
46
- if (!defaultBarColor) {
47
- defaultBarColor = typeof series?.itemStyle?.color === "string" && series.itemStyle.color !== "auto" ? series.itemStyle.color : getRandomColor();
48
- }
49
- const color = !series?.itemStyle?.color || series?.itemStyle?.color === "auto" ? defaultBarColor : series.itemStyle.color;
50
- const data = Array.isArray(series?.data) ? series.data : [];
51
- const labels = Array.isArray(xAxis?.data) ? xAxis.data : data.map((_, i) => String(i + 1));
52
- return { data, labels, color, colorType };
53
- }
54
- function getRandomColor() {
55
- const list = Array.isArray(ColorList) && ColorList.length ? ColorList : ["#2b7fff"];
56
- const idx = Math.floor(Math.random() * list.length);
57
- return list[idx];
58
- }
59
- function initScene() {
60
- if (!containerRef.value) return;
61
- const { clientWidth, clientHeight } = containerRef.value;
62
- scene = new THREE.Scene();
63
- scene.background = null;
64
- const aspect = Math.max(clientWidth, 1) / Math.max(clientHeight, 1);
65
- camera = new THREE.PerspectiveCamera(40, aspect, 0.1, 1e3);
66
- const { data } = getChartConfig();
67
- const barWidth = 0.8;
68
- const gap = 1.6;
69
- const totalWidth = data.length * (barWidth + gap);
70
- const centerX = totalWidth / 2;
71
- const maxBarHeight = 8;
72
- const centerY = maxBarHeight / 2;
73
- renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
74
- renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
75
- renderer.setSize(clientWidth, clientHeight);
76
- renderer.toneMapping = THREE.LinearToneMapping;
77
- renderer.toneMappingExposure = 1.6;
78
- renderer.outputColorSpace = THREE.SRGBColorSpace;
79
- containerRef.value.appendChild(renderer.domElement);
80
- try {
81
- const jpgUrl = new URL("/assets/pic1.jpg", import.meta.url).href;
82
- const textureLoader = new THREE.TextureLoader();
83
- textureLoader.load(
84
- jpgUrl,
85
- (tex) => {
86
- tex.mapping = THREE.EquirectangularReflectionMapping;
87
- tex.colorSpace = THREE.SRGBColorSpace;
88
- tex.userData = { brightness: 1.6, contrast: 1.2 };
89
- envTexture = tex;
90
- if (scene) {
91
- scene.background = envTexture;
92
- scene.environment = envTexture;
93
- } else {
94
- envTexture.dispose();
95
- envTexture = null;
96
- }
97
- },
98
- void 0,
99
- () => {
100
- }
101
- );
102
- } catch (e) {
103
- return e;
104
- }
105
- labelRenderer = new CSS2DRenderer();
106
- labelRenderer.setSize(clientWidth, clientHeight);
107
- labelRenderer.domElement.style.position = "absolute";
108
- labelRenderer.domElement.style.top = "0px";
109
- labelRenderer.domElement.style.pointerEvents = "none";
110
- containerRef.value.appendChild(labelRenderer.domElement);
111
- addXYAxes();
112
- barsGroup = new THREE.Group();
113
- scene.add(barsGroup);
114
- buildBars();
115
- controls = new OrbitControls(camera, renderer.domElement);
116
- controls.enableDamping = true;
117
- controls.enablePan = true;
118
- controls.enableRotate = true;
119
- controls.enableZoom = true;
120
- controls.screenSpacePanning = true;
121
- controls.panSpeed = 1;
122
- controls.rotateSpeed = 0.5;
123
- controls.zoomSpeed = 1;
124
- controls.autoRotate = false;
125
- controls.target.set(centerX, centerY, 0);
126
- camera.position.set(centerX, centerY, 20);
127
- camera.lookAt(centerX, centerY, 0);
128
- camera.rotation.set(0, 0, 0);
129
- controls.update();
130
- startAnimate();
131
- observeResize();
132
- }
133
- function clearGroup(group) {
134
- if (!group) return;
135
- for (let i = group.children.length - 1; i >= 0; i--) {
136
- const child = group.children[i];
137
- if (child.children && child.children.length) {
138
- clearGroup(child);
139
- }
140
- if (child.isCSS2DObject && child.element && child.element.parentNode) {
141
- child.element.parentNode.removeChild(child.element);
142
- }
143
- group.remove(child);
144
- if (child.geometry) child.geometry.dispose();
145
- if (child.material) {
146
- if (Array.isArray(child.material)) child.material.forEach((m) => m.dispose());
147
- else child.material.dispose();
148
- }
149
- }
150
- }
151
- function buildBars() {
152
- if (!barsGroup) return;
153
- clearGroup(barsGroup);
154
- const { data, color, colorType } = getChartConfig();
155
- if (!Array.isArray(data) || data.length === 0) return;
156
- const maxValue = Math.max(...data.map((v) => Number.isFinite(v) ? v : 0), 1);
157
- const maxBarHeight = 8;
158
- const barWidth = 0.8;
159
- const gap = 1.6;
160
- const totalWidth = data.length * (barWidth + gap);
161
- const startX = barWidth / 2;
162
- const materialFactory = (() => {
163
- if (colorType === "gradient" && typeof color === "object" && Array.isArray(color.colorStops)) {
164
- const tex = createVerticalGradientTexture(color);
165
- const mat = new THREE.MeshStandardMaterial({ color: 16777215, map: tex, transparent: false });
166
- mat.needsUpdate = true;
167
- return () => mat;
168
- }
169
- return () => new THREE.MeshStandardMaterial({ color: new THREE.Color(typeof color === "string" ? color : defaultBarColor) });
170
- })();
171
- data.forEach((v, idx) => {
172
- const value = Number(v) || 0;
173
- const height = value / maxValue * maxBarHeight;
174
- const geometry = new THREE.BoxGeometry(barWidth, Math.max(height, 0.01), barWidth);
175
- const mesh = new THREE.Mesh(geometry, materialFactory());
176
- mesh.position.set(startX + idx * (barWidth + gap), height / 2, 0);
177
- mesh.castShadow = false;
178
- mesh.receiveShadow = false;
179
- barsGroup.add(mesh);
180
- const valueDiv = document.createElement("div");
181
- valueDiv.className = "bar-value-label";
182
- valueDiv.textContent = String(value);
183
- valueDiv.style.color = "#ffffff";
184
- valueDiv.style.fontSize = "12px";
185
- valueDiv.style.fontFamily = "Arial, sans-serif";
186
- valueDiv.style.textAlign = "center";
187
- valueDiv.style.pointerEvents = "none";
188
- const valueObj = new CSS2DObject(valueDiv);
189
- valueObj.position.set(startX + idx * (barWidth + gap), Math.max(height, 0.01) + 0.4, 0);
190
- barsGroup.add(valueObj);
191
- });
192
- if (!hasFramedView) {
193
- const zDistance = Math.max(14, totalWidth * 1.2);
194
- const anchorX = -totalWidth * 0.5;
195
- const yCenter = 10 / 2;
196
- camera.position.set(anchorX, yCenter, zDistance);
197
- controls && controls.target.set(anchorX, yCenter, 0);
198
- camera.lookAt(anchorX, yCenter, 0);
199
- hasFramedView = true;
200
- }
201
- }
202
- function addXYAxes() {
203
- const axisGroup = new THREE.Group();
204
- axisGroup.name = "xy-axis-group";
205
- const old = scene.getObjectByName("xy-axis-group");
206
- if (old) {
207
- clearGroup(old);
208
- scene.remove(old);
209
- }
210
- const materialX = new THREE.MeshBasicMaterial({ color: 16777215 });
211
- const materialY = new THREE.MeshBasicMaterial({ color: 16777215 });
212
- const materialTick = new THREE.MeshBasicMaterial({ color: 16777215 });
213
- const { data, labels } = getChartConfig();
214
- const maxValue = Math.max(...data.map((v) => Number.isFinite(v) ? v : 0), 1);
215
- const xLen = Math.max(20, data.length * 1.5);
216
- const yLen = 10;
217
- const xCylinderGeom = new THREE.CylinderGeometry(0.05, 0.05, xLen, 8);
218
- const xCylinder = new THREE.Mesh(xCylinderGeom, materialX);
219
- xCylinder.rotation.z = Math.PI / 2;
220
- xCylinder.position.set(xLen / 2, 0, 0);
221
- axisGroup.add(xCylinder);
222
- const xArrowGeom = new THREE.ConeGeometry(0.2, 0.8, 8);
223
- const xArrow = new THREE.Mesh(xArrowGeom, materialX);
224
- xArrow.rotation.z = -Math.PI / 2;
225
- xArrow.position.set(xLen, 0, 0);
226
- axisGroup.add(xArrow);
227
- const barWidth = 0.8;
228
- const gap = 1.6;
229
- const startX = barWidth / 2;
230
- labels.forEach((label, idx) => {
231
- const x = startX + idx * (barWidth + gap);
232
- const tickGeom = new THREE.CylinderGeometry(0.05, 0.05, 0.3, 6);
233
- const tick = new THREE.Mesh(tickGeom, materialTick);
234
- tick.position.set(x, -0.15, 0);
235
- axisGroup.add(tick);
236
- const labelDiv = document.createElement("div");
237
- labelDiv.className = "axis-label";
238
- labelDiv.textContent = label;
239
- labelDiv.style.color = "#ffffff";
240
- labelDiv.style.fontSize = "14px";
241
- labelDiv.style.fontFamily = "Arial, sans-serif";
242
- labelDiv.style.textAlign = "center";
243
- labelDiv.style.pointerEvents = "none";
244
- const labelObject = new CSS2DObject(labelDiv);
245
- labelObject.position.set(x, -2, 0);
246
- axisGroup.add(labelObject);
247
- });
248
- const yCylinderGeom = new THREE.CylinderGeometry(0.05, 0.05, yLen, 8);
249
- const yCylinder = new THREE.Mesh(yCylinderGeom, materialY);
250
- yCylinder.position.set(0, yLen / 2, 0);
251
- axisGroup.add(yCylinder);
252
- const yArrowGeom = new THREE.ConeGeometry(0.2, 0.8, 8);
253
- const yArrow = new THREE.Mesh(yArrowGeom, materialY);
254
- yArrow.position.set(0, yLen, 0);
255
- axisGroup.add(yArrow);
256
- const tickCount = 5;
257
- for (let i = 0; i <= tickCount; i++) {
258
- const value = maxValue / tickCount * i;
259
- const y = yLen / tickCount * i;
260
- const tickGeom = new THREE.CylinderGeometry(0.01, 0.01, 0.3, 6);
261
- const tick = new THREE.Mesh(tickGeom, materialTick);
262
- tick.rotation.z = Math.PI / 2;
263
- tick.position.set(-0.15, y, 0);
264
- axisGroup.add(tick);
265
- const labelDiv = document.createElement("div");
266
- labelDiv.className = "axis-label";
267
- labelDiv.textContent = Math.round(value).toString();
268
- labelDiv.style.color = "#ffffff";
269
- labelDiv.style.fontSize = "12px";
270
- labelDiv.style.fontFamily = "Arial, sans-serif";
271
- labelDiv.style.textAlign = "right";
272
- labelDiv.style.pointerEvents = "none";
273
- const labelObject = new CSS2DObject(labelDiv);
274
- labelObject.position.set(-1, y, 0);
275
- axisGroup.add(labelObject);
276
- }
277
- scene.add(axisGroup);
278
- }
279
- function createVerticalGradientTexture(gradient) {
280
- const size = 128;
281
- const canvas = document.createElement("canvas");
282
- canvas.width = 1;
283
- canvas.height = size;
284
- const ctx = canvas.getContext("2d");
285
- const grd = ctx.createLinearGradient(0, 0, 0, size);
286
- const stops = Array.isArray(gradient.colorStops) ? gradient.colorStops : [];
287
- if (stops.length === 0) {
288
- grd.addColorStop(0, "#83bff6");
289
- grd.addColorStop(1, "#188df0");
290
- } else {
291
- stops.forEach((s) => {
292
- const off = typeof s.offset === "number" ? Math.min(Math.max(s.offset, 0), 1) : 0;
293
- grd.addColorStop(off, s.color || "#ffffff");
294
- });
295
- }
296
- ctx.fillStyle = grd;
297
- ctx.fillRect(0, 0, 1, size);
298
- const texture = new THREE.CanvasTexture(canvas);
299
- texture.wrapS = THREE.ClampToEdgeWrapping;
300
- texture.wrapT = THREE.ClampToEdgeWrapping;
301
- texture.needsUpdate = true;
302
- return texture;
303
- }
304
- function startAnimate() {
305
- stopAnimate();
306
- const animate = () => {
307
- animationId = requestAnimationFrame(animate);
308
- if (controls) controls.update();
309
- renderer && renderer.render(scene, camera);
310
- labelRenderer && labelRenderer.render(scene, camera);
311
- };
312
- animate();
313
- }
314
- function stopAnimate() {
315
- if (animationId) {
316
- cancelAnimationFrame(animationId);
317
- animationId = null;
318
- }
319
- }
320
- function observeResize() {
321
- if (!containerRef.value) return;
322
- if (resizeObserver) resizeObserver.disconnect();
323
- resizeObserver = new ResizeObserver((entries) => {
324
- for (const entry of entries) {
325
- const cr = entry.contentRect;
326
- onResize(Math.max(cr.width, 1), Math.max(cr.height, 1));
327
- }
328
- });
329
- resizeObserver.observe(containerRef.value);
330
- }
331
- function onResize(width, height) {
332
- if (!renderer || !camera) return;
333
- renderer.setSize(width, height);
334
- labelRenderer && labelRenderer.setSize(width, height);
335
- camera.aspect = width / height;
336
- camera.updateProjectionMatrix();
337
- }
338
- watch(
339
- () => [props.record?.options?.seriesConfig, props.record?.options?.xAxisConfig],
340
- () => {
341
- addXYAxes();
342
- buildBars();
343
- const { data } = getChartConfig();
344
- const barWidth = 0.8;
345
- const gap = 1.6;
346
- const totalWidth = data.length * (barWidth + gap);
347
- const centerX = totalWidth / 2;
348
- const maxBarHeight = 8;
349
- const centerY = maxBarHeight / 2;
350
- controls && controls.target.set(centerX, centerY, 0);
351
- controls && controls.update();
352
- },
353
- { deep: true }
354
- );
355
- onMounted(() => {
356
- initScene();
357
- });
358
- onUnmounted(() => {
359
- stopAnimate();
360
- if (resizeObserver) {
361
- resizeObserver.disconnect();
362
- resizeObserver = null;
363
- }
364
- if (barsGroup) {
365
- clearGroup(barsGroup);
366
- barsGroup = null;
367
- }
368
- if (renderer) {
369
- renderer.dispose();
370
- if (renderer.domElement && renderer.domElement.parentNode) {
371
- renderer.domElement.parentNode.removeChild(renderer.domElement);
372
- }
373
- renderer = null;
374
- }
375
- if (labelRenderer) {
376
- if (labelRenderer.domElement && labelRenderer.domElement.parentNode) {
377
- labelRenderer.domElement.parentNode.removeChild(labelRenderer.domElement);
378
- }
379
- labelRenderer = null;
380
- }
381
- if (envTexture) {
382
- envTexture.dispose();
383
- envTexture = null;
384
- }
385
- if (controls) {
386
- controls.dispose();
387
- controls = null;
388
- }
389
- camera = null;
390
- scene = null;
391
- });
392
- return (_ctx, _cache) => {
393
- return openBlock(), createElementBlock("div", {
394
- class: normalizeClass(["mian-barChart3d", { active: currentUuid.value === props.record.uuid }]),
395
- ref_key: "containerRef",
396
- ref: containerRef,
397
- style: normalizeStyle({
398
- width: chartStyle.value.width,
399
- height: chartStyle.value.height,
400
- padding: `${props.record.options?.style?.tbPadding || 0}px ${props.record.options?.style?.lrPadding || 0}px`
401
- })
402
- }, null, 6);
403
- };
404
- }
405
- };
406
- const BarChart3D = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a51ec53a"]]);
407
- export {
408
- BarChart3D as default
409
- };