sun-card-design 1.1.37 → 1.1.38

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 (152) hide show
  1. package/package.json +1 -1
  2. package/dist/mobile/sun-card-design-mobile.es61.js +0 -98
  3. package/dist/mobile/sun-card-design-mobile.es62.js +0 -98
  4. package/dist/public/sun-card-designer.css +0 -1
  5. package/dist/sun-card-designer.es.js +0 -25
  6. package/dist/sun-card-designer.es10.js +0 -167
  7. package/dist/sun-card-designer.es11.js +0 -197
  8. package/dist/sun-card-designer.es12.js +0 -203
  9. package/dist/sun-card-designer.es13.js +0 -130
  10. package/dist/sun-card-designer.es14.js +0 -120
  11. package/dist/sun-card-designer.es151.js +0 -4
  12. package/dist/sun-card-designer.es152.js +0 -4
  13. package/dist/sun-card-designer.es153.js +0 -4
  14. package/dist/sun-card-designer.es154.js +0 -4
  15. package/dist/sun-card-designer.es155.js +0 -82
  16. package/dist/sun-card-designer.es156.js +0 -91
  17. package/dist/sun-card-designer.es157.js +0 -92
  18. package/dist/sun-card-designer.es158.js +0 -191
  19. package/dist/sun-card-designer.es159.js +0 -86
  20. package/dist/sun-card-designer.es16.js +0 -10
  21. package/dist/sun-card-designer.es160.js +0 -238
  22. package/dist/sun-card-designer.es161.js +0 -113
  23. package/dist/sun-card-designer.es162.js +0 -49
  24. package/dist/sun-card-designer.es163.js +0 -43
  25. package/dist/sun-card-designer.es164.js +0 -39
  26. package/dist/sun-card-designer.es165.js +0 -46
  27. package/dist/sun-card-designer.es166.js +0 -58
  28. package/dist/sun-card-designer.es167.js +0 -56
  29. package/dist/sun-card-designer.es168.js +0 -58
  30. package/dist/sun-card-designer.es169.js +0 -73
  31. package/dist/sun-card-designer.es17.js +0 -333
  32. package/dist/sun-card-designer.es170.js +0 -59
  33. package/dist/sun-card-designer.es171.js +0 -69
  34. package/dist/sun-card-designer.es172.js +0 -182
  35. package/dist/sun-card-designer.es173.js +0 -176
  36. package/dist/sun-card-designer.es174.js +0 -184
  37. package/dist/sun-card-designer.es175.js +0 -409
  38. package/dist/sun-card-designer.es176.js +0 -365
  39. package/dist/sun-card-designer.es177.js +0 -70
  40. package/dist/sun-card-designer.es178.js +0 -68
  41. package/dist/sun-card-designer.es179.js +0 -184
  42. package/dist/sun-card-designer.es18.js +0 -68
  43. package/dist/sun-card-designer.es180.js +0 -193
  44. package/dist/sun-card-designer.es181.js +0 -193
  45. package/dist/sun-card-designer.es182.js +0 -193
  46. package/dist/sun-card-designer.es184.js +0 -228
  47. package/dist/sun-card-designer.es185.js +0 -71
  48. package/dist/sun-card-designer.es19.js +0 -611
  49. package/dist/sun-card-designer.es196.js +0 -4
  50. package/dist/sun-card-designer.es20.js +0 -225
  51. package/dist/sun-card-designer.es201.js +0 -125
  52. package/dist/sun-card-designer.es21.js +0 -69
  53. package/dist/sun-card-designer.es22.js +0 -719
  54. package/dist/sun-card-designer.es220.js +0 -63
  55. package/dist/sun-card-designer.es221.js +0 -80
  56. package/dist/sun-card-designer.es222.js +0 -82
  57. package/dist/sun-card-designer.es223.js +0 -94
  58. package/dist/sun-card-designer.es224.js +0 -87
  59. package/dist/sun-card-designer.es225.js +0 -226
  60. package/dist/sun-card-designer.es226.js +0 -105
  61. package/dist/sun-card-designer.es227.js +0 -45
  62. package/dist/sun-card-designer.es228.js +0 -31
  63. package/dist/sun-card-designer.es229.js +0 -29
  64. package/dist/sun-card-designer.es23.js +0 -211
  65. package/dist/sun-card-designer.es230.js +0 -32
  66. package/dist/sun-card-designer.es231.js +0 -46
  67. package/dist/sun-card-designer.es232.js +0 -42
  68. package/dist/sun-card-designer.es233.js +0 -44
  69. package/dist/sun-card-designer.es234.js +0 -61
  70. package/dist/sun-card-designer.es235.js +0 -46
  71. package/dist/sun-card-designer.es236.js +0 -54
  72. package/dist/sun-card-designer.es237.js +0 -130
  73. package/dist/sun-card-designer.es238.js +0 -127
  74. package/dist/sun-card-designer.es239.js +0 -132
  75. package/dist/sun-card-designer.es24.js +0 -265
  76. package/dist/sun-card-designer.es240.js +0 -375
  77. package/dist/sun-card-designer.es241.js +0 -348
  78. package/dist/sun-card-designer.es242.js +0 -69
  79. package/dist/sun-card-designer.es243.js +0 -65
  80. package/dist/sun-card-designer.es244.js +0 -87
  81. package/dist/sun-card-designer.es245.js +0 -98
  82. package/dist/sun-card-designer.es246.js +0 -98
  83. package/dist/sun-card-designer.es247.js +0 -98
  84. package/dist/sun-card-designer.es25.js +0 -857
  85. package/dist/sun-card-designer.es26.js +0 -768
  86. package/dist/sun-card-designer.es260.js +0 -125
  87. package/dist/sun-card-designer.es27.js +0 -264
  88. package/dist/sun-card-designer.es273.js +0 -192
  89. package/dist/sun-card-designer.es28.js +0 -809
  90. package/dist/sun-card-designer.es29.js +0 -220
  91. package/dist/sun-card-designer.es3.js +0 -506
  92. package/dist/sun-card-designer.es30.js +0 -809
  93. package/dist/sun-card-designer.es31.js +0 -220
  94. package/dist/sun-card-designer.es32.js +0 -820
  95. package/dist/sun-card-designer.es33.js +0 -225
  96. package/dist/sun-card-designer.es34.js +0 -69
  97. package/dist/sun-card-designer.es35.js +0 -375
  98. package/dist/sun-card-designer.es36.js +0 -186
  99. package/dist/sun-card-designer.es37.js +0 -119
  100. package/dist/sun-card-designer.es38.js +0 -354
  101. package/dist/sun-card-designer.es39.js +0 -127
  102. package/dist/sun-card-designer.es4.js +0 -365
  103. package/dist/sun-card-designer.es40.js +0 -100
  104. package/dist/sun-card-designer.es41.js +0 -214
  105. package/dist/sun-card-designer.es42.js +0 -119
  106. package/dist/sun-card-designer.es43.js +0 -250
  107. package/dist/sun-card-designer.es44.js +0 -118
  108. package/dist/sun-card-designer.es45.js +0 -64
  109. package/dist/sun-card-designer.es46.js +0 -223
  110. package/dist/sun-card-designer.es47.js +0 -196
  111. package/dist/sun-card-designer.es48.js +0 -77
  112. package/dist/sun-card-designer.es49.js +0 -85
  113. package/dist/sun-card-designer.es5.js +0 -317
  114. package/dist/sun-card-designer.es50.js +0 -85
  115. package/dist/sun-card-designer.es51.js +0 -64
  116. package/dist/sun-card-designer.es52.js +0 -283
  117. package/dist/sun-card-designer.es53.js +0 -64
  118. package/dist/sun-card-designer.es54.js +0 -142
  119. package/dist/sun-card-designer.es55.js +0 -52
  120. package/dist/sun-card-designer.es56.js +0 -85
  121. package/dist/sun-card-designer.es57.js +0 -258
  122. package/dist/sun-card-designer.es58.js +0 -226
  123. package/dist/sun-card-designer.es59.js +0 -169
  124. package/dist/sun-card-designer.es6.js +0 -190
  125. package/dist/sun-card-designer.es60.js +0 -280
  126. package/dist/sun-card-designer.es61.js +0 -168
  127. package/dist/sun-card-designer.es62.js +0 -219
  128. package/dist/sun-card-designer.es63.js +0 -168
  129. package/dist/sun-card-designer.es64.js +0 -275
  130. package/dist/sun-card-designer.es65.js +0 -760
  131. package/dist/sun-card-designer.es66.js +0 -272
  132. package/dist/sun-card-designer.es67.js +0 -559
  133. package/dist/sun-card-designer.es68.js +0 -124
  134. package/dist/sun-card-designer.es69.js +0 -528
  135. package/dist/sun-card-designer.es7.js +0 -65
  136. package/dist/sun-card-designer.es70.js +0 -185
  137. package/dist/sun-card-designer.es71.js +0 -107
  138. package/dist/sun-card-designer.es72.js +0 -153
  139. package/dist/sun-card-designer.es73.js +0 -315
  140. package/dist/sun-card-designer.es74.js +0 -114
  141. package/dist/sun-card-designer.es76.js +0 -4211
  142. package/dist/sun-card-designer.es79.js +0 -4
  143. package/dist/sun-card-designer.es8.js +0 -171
  144. package/dist/sun-card-designer.es80.js +0 -4
  145. package/dist/sun-card-designer.es81.js +0 -4
  146. package/dist/sun-card-designer.es84.js +0 -228
  147. package/dist/sun-card-designer.es87.js +0 -52
  148. package/dist/sun-card-designer.es88.js +0 -52
  149. package/dist/sun-card-designer.es9.js +0 -207
  150. package/dist/sun-card-designer.es91.js +0 -344
  151. package/dist/sun-card-designer.es92.js +0 -199
  152. package/dist/sun-card-designer.es95.js +0 -180
@@ -1,125 +0,0 @@
1
- import { computed, ref, onMounted, onBeforeUnmount, createElementBlock, openBlock, normalizeStyle, createElementVNode, normalizeClass } from "vue";
2
- /* empty css */
3
- import _export_sfc from "./sun-card-designer.es16.js";
4
- const _hoisted_1 = ["src"];
5
- const _hoisted_2 = { class: "controls" };
6
- const _sfc_main = {
7
- __name: "audio",
8
- props: ["src", "playBtnColor", "progressColor"],
9
- setup(__props) {
10
- const props = __props;
11
- const rootStyle = computed(() => ({
12
- "--play-btn-color": props.playBtnColor || "#4a6bff",
13
- "--progress-color": props.progressColor || "#409eff"
14
- }));
15
- const audioRef = ref();
16
- const playBtnRef = ref(null);
17
- const progressContainerRef = ref(null);
18
- const progressBarRef = ref(null);
19
- const isPlaying = ref(false);
20
- const isDragging = ref(false);
21
- const progressPercent = ref(0);
22
- const togglePlay = () => {
23
- if (!audioRef.value) return;
24
- if (audioRef.value.paused) {
25
- audioRef.value.play();
26
- } else {
27
- audioRef.value.pause();
28
- }
29
- };
30
- const updateProgress = () => {
31
- const audio = audioRef.value;
32
- if (!audio || isDragging.value) return;
33
- const duration = audio.duration || 0;
34
- const current = audio.currentTime || 0;
35
- progressPercent.value = duration ? Math.min(100, Math.max(0, current / duration * 100)) : 0;
36
- };
37
- const onSeekClick = (e) => {
38
- seekToClientX(e.clientX);
39
- };
40
- const onSeekStart = (e) => {
41
- isDragging.value = true;
42
- seekToClientX(e.clientX);
43
- window.addEventListener("mousemove", onSeekMove);
44
- window.addEventListener("mouseup", onSeekEnd, { once: true });
45
- };
46
- const onSeekMove = (e) => {
47
- if (!isDragging.value) return;
48
- seekToClientX(e.clientX);
49
- };
50
- const onSeekEnd = () => {
51
- isDragging.value = false;
52
- window.removeEventListener("mousemove", onSeekMove);
53
- };
54
- const seekToClientX = (clientX) => {
55
- const audio = audioRef.value;
56
- const container = progressContainerRef.value;
57
- if (!audio || !container) return;
58
- const rect = container.getBoundingClientRect();
59
- const ratio = rect.width ? Math.min(1, Math.max(0, (clientX - rect.left) / rect.width)) : 0;
60
- const duration = audio.duration || 0;
61
- audio.currentTime = ratio * duration;
62
- progressPercent.value = ratio * 100;
63
- };
64
- onMounted(() => {
65
- const audio = audioRef.value;
66
- if (!audio) return;
67
- audio.addEventListener("timeupdate", updateProgress);
68
- audio.addEventListener("loadedmetadata", updateProgress);
69
- audio.addEventListener("ended", () => {
70
- isPlaying.value = false;
71
- updateProgress();
72
- });
73
- audio.addEventListener("pause", () => {
74
- isPlaying.value = false;
75
- });
76
- audio.addEventListener("play", () => {
77
- isPlaying.value = true;
78
- });
79
- });
80
- onBeforeUnmount(() => {
81
- const audio = audioRef.value;
82
- if (!audio) return;
83
- audio.removeEventListener("timeupdate", updateProgress);
84
- audio.removeEventListener("loadedmetadata", updateProgress);
85
- });
86
- return (_ctx, _cache) => {
87
- return openBlock(), createElementBlock("div", {
88
- class: "custom-player",
89
- style: normalizeStyle(rootStyle.value)
90
- }, [
91
- createElementVNode("audio", {
92
- ref_key: "audioRef",
93
- ref: audioRef,
94
- src: props.src
95
- }, null, 8, _hoisted_1),
96
- createElementVNode("div", _hoisted_2, [
97
- createElementVNode("button", {
98
- class: normalizeClass(["play-btn", { paused: isPlaying.value }]),
99
- ref_key: "playBtnRef",
100
- ref: playBtnRef,
101
- onClick: togglePlay
102
- }, null, 2),
103
- createElementVNode("div", {
104
- class: "progress-container",
105
- ref_key: "progressContainerRef",
106
- ref: progressContainerRef,
107
- onClick: onSeekClick,
108
- onMousedown: onSeekStart
109
- }, [
110
- createElementVNode("div", {
111
- class: "progress-bar",
112
- ref_key: "progressBarRef",
113
- ref: progressBarRef,
114
- style: normalizeStyle({ width: progressPercent.value + "%" })
115
- }, null, 4)
116
- ], 544)
117
- ])
118
- ], 4);
119
- };
120
- }
121
- };
122
- const Audio = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f85fd551"]]);
123
- export {
124
- Audio as default
125
- };
@@ -1,264 +0,0 @@
1
- import { reactive, resolveComponent, createElementBlock, openBlock, createElementVNode, createVNode, createCommentVNode, withCtx, createTextVNode, toDisplayString, unref } from "vue";
2
- import { MinusOutlined, PlusOutlined, DeleteOutlined } from "@ant-design/icons-vue";
3
- import { message } from "ant-design-vue";
4
- import { generateShortUUID } from "./sun-card-designer.es14.js";
5
- import { useCardManageStore } from "./sun-card-designer.es13.js";
6
- /* empty css */
7
- import _export_sfc from "./sun-card-designer.es16.js";
8
- const _hoisted_1 = { class: "grid-base" };
9
- const _hoisted_2 = { key: 0 };
10
- const _hoisted_3 = { class: "slot" };
11
- const _hoisted_4 = { class: "a-item" };
12
- const _hoisted_5 = { style: { "display": "flex" } };
13
- const _hoisted_6 = { key: 1 };
14
- const _sfc_main = {
15
- __name: "multipleColumnBasePes",
16
- props: ["record"],
17
- setup(__props) {
18
- const cardManageStore = useCardManageStore();
19
- const props = __props;
20
- const optionKeys = reactive(["固定格数", "动态格数"]);
21
- const addSlot = () => {
22
- props.record.columns.push({
23
- list: [],
24
- // 栅格中组件列表
25
- flex: 1,
26
- // 占位
27
- type: "columns",
28
- uuid: generateShortUUID(),
29
- options: {
30
- clickEvent: false,
31
- // 是否启用点击事件
32
- clickEventConfig: {
33
- type: "url",
34
- // url event agent tool 点击事件类型
35
- value: "",
36
- // 点击事件值,url event agent
37
- toolItem: null,
38
- // 调用工具值 tool
39
- tooltemParams: []
40
- }
41
- }
42
- });
43
- };
44
- const delSlot = (index) => {
45
- if (props.record.columns.length < 2) {
46
- message.warning("最少为一个");
47
- return;
48
- }
49
- props.record.columns.splice(index, 1);
50
- };
51
- const variableOptions = () => {
52
- const list = cardManageStore.variableList.filter((e) => e.type === "Array");
53
- return list;
54
- };
55
- const onChange = () => {
56
- props.record.options.variableName = null;
57
- props.record.columns = [
58
- {
59
- list: [],
60
- // 栅格中组件列表
61
- flex: 1,
62
- // 占位
63
- type: "columns",
64
- uuid: generateShortUUID(),
65
- options: {
66
- clickEvent: false,
67
- // 是否启用点击事件
68
- clickEventConfig: {
69
- type: "url",
70
- // url event agent tool 点击事件类型
71
- value: "",
72
- // 点击事件值,url event agent
73
- toolItem: null,
74
- // 调用工具值 tool
75
- tooltemParams: []
76
- }
77
- }
78
- },
79
- {
80
- list: [],
81
- // 栅格中组件列表
82
- flex: 1,
83
- // 占位
84
- type: "columns",
85
- uuid: generateShortUUID(),
86
- options: {
87
- clickEvent: false,
88
- // 是否启用点击事件
89
- clickEventConfig: {
90
- type: "url",
91
- // url event agent tool 点击事件类型
92
- value: "",
93
- // 点击事件值,url event agent
94
- toolItem: null,
95
- // 调用工具值 tool
96
- tooltemParams: []
97
- }
98
- }
99
- },
100
- {
101
- list: [],
102
- // 栅格中组件列表
103
- flex: 1,
104
- // 占位
105
- type: "columns",
106
- uuid: generateShortUUID(),
107
- options: {
108
- clickEvent: false,
109
- // 是否启用点击事件
110
- clickEventConfig: {
111
- type: "url",
112
- // url event agent tool 点击事件类型
113
- value: "",
114
- // 点击事件值,url event agent
115
- toolItem: null,
116
- // 调用工具值 tool
117
- tooltemParams: []
118
- }
119
- }
120
- }
121
- ];
122
- };
123
- const selectChange = (val) => {
124
- const list = cardManageStore.variableList.find((e) => e.type === "Array" && val === e.name);
125
- const length = list.defaultValue ? JSON.parse(list.defaultValue).length : [];
126
- props.record.columns = [];
127
- const uuid = generateShortUUID();
128
- const options = {
129
- clickEvent: false,
130
- // 是否启用点击事件
131
- clickEventConfig: {
132
- type: "url",
133
- // url event agent tool 点击事件类型
134
- value: "",
135
- // 点击事件值,url event agent
136
- toolItem: null,
137
- // 调用工具值 tool
138
- tooltemParams: []
139
- }
140
- };
141
- for (let index = 0; index < length; index++) {
142
- props.record.columns.push({
143
- list: [],
144
- // 栅格中组件列表
145
- flex: 1,
146
- // 占位
147
- type: "columns",
148
- uuid,
149
- options
150
- });
151
- }
152
- };
153
- const minusClick = (index) => {
154
- if (props.record.columns[index].flex <= 1) return;
155
- props.record.columns[index].flex--;
156
- };
157
- const plusClick = (index) => {
158
- if (props.record.columns[index].flex >= 12) return;
159
- props.record.columns[index].flex++;
160
- };
161
- return (_ctx, _cache) => {
162
- const _component_a_segmented = resolveComponent("a-segmented");
163
- const _component_a_button = resolveComponent("a-button");
164
- const _component_a_tag = resolveComponent("a-tag");
165
- const _component_a_list_item = resolveComponent("a-list-item");
166
- const _component_a_list = resolveComponent("a-list");
167
- const _component_a_select = resolveComponent("a-select");
168
- const _component_a_form_item = resolveComponent("a-form-item");
169
- const _component_a_form = resolveComponent("a-form");
170
- return openBlock(), createElementBlock("div", _hoisted_1, [
171
- _cache[4] || (_cache[4] = createElementVNode("div", { class: "title" }, "数据", -1)),
172
- createVNode(_component_a_segmented, {
173
- style: { "margin-top": "12px" },
174
- value: props.record.options.dataType,
175
- "onUpdate:value": _cache[0] || (_cache[0] = ($event) => props.record.options.dataType = $event),
176
- block: "",
177
- options: optionKeys,
178
- onChange
179
- }, null, 8, ["value", "options"]),
180
- props.record.options.dataType === "固定格数" ? (openBlock(), createElementBlock("div", _hoisted_2, [
181
- createElementVNode("div", _hoisted_3, [
182
- _cache[3] || (_cache[3] = createElementVNode("span", null, "插槽集合", -1)),
183
- createVNode(_component_a_button, {
184
- size: "small",
185
- style: { "font-size": "13px" },
186
- onClick: addSlot
187
- }, {
188
- default: withCtx(() => [..._cache[2] || (_cache[2] = [
189
- createTextVNode("+添加插槽", -1)
190
- ])]),
191
- _: 1
192
- })
193
- ]),
194
- createVNode(_component_a_list, {
195
- bordered: "",
196
- "data-source": props.record.columns
197
- }, {
198
- renderItem: withCtx(({ index }) => [
199
- createVNode(_component_a_list_item, null, {
200
- default: withCtx(() => [
201
- createElementVNode("div", _hoisted_4, [
202
- createElementVNode("span", null, "插槽 " + toDisplayString(index + 1), 1),
203
- createElementVNode("div", _hoisted_5, [
204
- createElementVNode("div", null, [
205
- createVNode(unref(MinusOutlined), {
206
- onClick: ($event) => minusClick(index)
207
- }, null, 8, ["onClick"]),
208
- createVNode(_component_a_tag, { style: { "margin": "0 10px" } }, {
209
- default: withCtx(() => [
210
- createTextVNode(toDisplayString(props.record.columns[index].flex), 1)
211
- ]),
212
- _: 2
213
- }, 1024),
214
- createVNode(unref(PlusOutlined), {
215
- onClick: ($event) => plusClick(index)
216
- }, null, 8, ["onClick"])
217
- ]),
218
- createVNode(unref(DeleteOutlined), {
219
- style: { "margin-left": "20px" },
220
- onClick: ($event) => delSlot(index)
221
- }, null, 8, ["onClick"])
222
- ])
223
- ])
224
- ]),
225
- _: 2
226
- }, 1024)
227
- ]),
228
- _: 1
229
- }, 8, ["data-source"])
230
- ])) : createCommentVNode("", true),
231
- props.record.options.dataType === "动态格数" ? (openBlock(), createElementBlock("div", _hoisted_6, [
232
- createVNode(_component_a_form, {
233
- layout: "vertical",
234
- style: { "margin-top": "16px" }
235
- }, {
236
- default: withCtx(() => [
237
- createVNode(_component_a_form_item, { label: "绑定数组类型变量" }, {
238
- default: withCtx(() => [
239
- createVNode(_component_a_select, {
240
- value: props.record.options.variableName,
241
- "onUpdate:value": _cache[1] || (_cache[1] = ($event) => props.record.options.variableName = $event),
242
- options: variableOptions(),
243
- style: { "width": "100%" },
244
- "field-names": {
245
- label: "name",
246
- value: "name"
247
- },
248
- onChange: selectChange
249
- }, null, 8, ["value", "options"])
250
- ]),
251
- _: 1
252
- })
253
- ]),
254
- _: 1
255
- })
256
- ])) : createCommentVNode("", true)
257
- ]);
258
- };
259
- }
260
- };
261
- const MultipleColumnBasePes = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-be9018c3"]]);
262
- export {
263
- MultipleColumnBasePes as default
264
- };
@@ -1,192 +0,0 @@
1
- import { ref, onUnmounted, createElementBlock, createCommentVNode, openBlock, createBlock, createElementVNode, unref } from "vue";
2
- import * as THREE from "three";
3
- import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
4
- import TWEEN from "@tweenjs/tween.js";
5
- import { CloseCircleFilled } from "@ant-design/icons-vue";
6
- /* empty css */
7
- import _export_sfc from "./sun-card-designer.es16.js";
8
- const _hoisted_1 = {
9
- key: 0,
10
- class: "canvas"
11
- };
12
- const _sfc_main = {
13
- __name: "panoramaView",
14
- setup(__props, { expose: __expose }) {
15
- const show = ref(false);
16
- const isClose = ref(false);
17
- const containerRef = ref(null);
18
- let imgUrl = null;
19
- let renderer = null;
20
- let scene = null;
21
- let camera = null;
22
- let controls = null;
23
- let sphere = null;
24
- let animationId = null;
25
- let texture = null;
26
- let tween = null;
27
- const openView = () => {
28
- isClose.value = false;
29
- renderer = null;
30
- scene = null;
31
- camera = null;
32
- controls = null;
33
- sphere = null;
34
- animationId = null;
35
- texture = null;
36
- tween = null;
37
- setTimeout(() => {
38
- initThree();
39
- });
40
- };
41
- const closeView = () => {
42
- window.removeEventListener("resize", onResize);
43
- disposeThree();
44
- show.value = false;
45
- };
46
- const onOpen = (src) => {
47
- imgUrl = src;
48
- show.value = true;
49
- openView();
50
- };
51
- function initThree() {
52
- const container = containerRef.value;
53
- if (!container) return;
54
- const { clientWidth, clientHeight } = container;
55
- scene = new THREE.Scene();
56
- camera = new THREE.PerspectiveCamera(170, Math.max(clientWidth, 1) / Math.max(clientHeight, 1), 0.1, 1500);
57
- camera.position.set(0, 500, 0);
58
- camera.lookAt(0, 0, 0);
59
- renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });
60
- renderer.setSize(clientWidth, clientHeight);
61
- renderer.setPixelRatio(Math.min(window.devicePixelRatio || 1, 2));
62
- renderer.outputColorSpace = THREE.SRGBColorSpace;
63
- container.appendChild(renderer.domElement);
64
- const loader = new THREE.TextureLoader();
65
- const jpgUrl = new URL(imgUrl, import.meta.url).href;
66
- texture = loader.load(jpgUrl, () => {
67
- texture.mapping = THREE.EquirectangularReflectionMapping;
68
- texture.colorSpace = THREE.SRGBColorSpace;
69
- const geometry = new THREE.SphereGeometry(500, 64, 64);
70
- geometry.scale(1, 1, 1);
71
- const material = new THREE.MeshBasicMaterial({ map: texture, side: THREE.BackSide });
72
- sphere = new THREE.Mesh(geometry, material);
73
- scene.add(sphere);
74
- let time1 = setTimeout(() => {
75
- clearTimeout(time1);
76
- tween = new TWEEN.Tween({
77
- fov: 170,
78
- ars: 40,
79
- rot: 0
80
- }).to({
81
- fov: 90,
82
- ars: 0,
83
- rot: Math.PI
84
- }, 3e3).easing(TWEEN.Easing.Quadratic.InOut).onComplete(function() {
85
- }).onUpdate(function(t) {
86
- camera.fov = t.fov;
87
- camera.updateProjectionMatrix();
88
- sphere.rotation.y = t.rot;
89
- }).start();
90
- let time2 = setTimeout(() => {
91
- clearTimeout(time2);
92
- tween = new TWEEN.Tween({
93
- fov: camera.fov,
94
- y: camera.position.y,
95
- z: camera.position.z
96
- }).to({
97
- fov: 35,
98
- y: 0,
99
- z: 500
100
- }, 2e3).easing(TWEEN.Easing.Linear.None).onComplete(() => {
101
- isClose.value = true;
102
- }).onUpdate((e) => {
103
- camera.fov = e.fov;
104
- camera.position.y = e.y;
105
- camera.position.z = e.z;
106
- camera.updateProjectionMatrix();
107
- sphere.rotation.y += 0.02;
108
- const target = new THREE.Vector3(0, e.y, e.z);
109
- camera.lookAt(target);
110
- }).start();
111
- }, 2e3);
112
- }, 500);
113
- requestAnimationFrame(animate);
114
- });
115
- controls = new OrbitControls(camera, renderer.domElement);
116
- controls.enableDamping = true;
117
- controls.enableZoom = true;
118
- controls.rotateSpeed = 0.4;
119
- controls.minDistance = 0.01;
120
- controls.maxDistance = 1e3;
121
- controls.enablePan = false;
122
- controls.target.set(0, 0, -1);
123
- controls.update();
124
- window.addEventListener("resize", onResize);
125
- }
126
- function onResize() {
127
- if (!renderer || !camera || !containerRef.value) return;
128
- const { clientWidth, clientHeight } = containerRef.value;
129
- renderer.setSize(clientWidth, clientHeight);
130
- camera.aspect = Math.max(clientWidth, 1) / Math.max(clientHeight, 1);
131
- camera.updateProjectionMatrix();
132
- }
133
- function animate(time) {
134
- if (!!tween?.update) tween.update(time);
135
- animationId = requestAnimationFrame(animate);
136
- controls && controls.update();
137
- renderer && renderer.render(scene, camera);
138
- }
139
- function disposeThree() {
140
- if (animationId) cancelAnimationFrame(animationId);
141
- animationId = null;
142
- window.removeEventListener("resize", onResize);
143
- if (controls) {
144
- controls.dispose();
145
- controls = null;
146
- }
147
- if (sphere) {
148
- if (sphere.geometry) sphere.geometry.dispose();
149
- if (sphere.material) sphere.material.dispose();
150
- sphere = null;
151
- }
152
- if (texture) {
153
- texture.dispose && texture.dispose();
154
- texture = null;
155
- }
156
- if (renderer) {
157
- if (renderer.domElement && renderer.domElement.parentNode) {
158
- renderer.domElement.parentNode.removeChild(renderer.domElement);
159
- }
160
- renderer.dispose();
161
- renderer = null;
162
- }
163
- scene = null;
164
- camera = null;
165
- }
166
- onUnmounted(() => {
167
- window.removeEventListener("resize", onResize);
168
- disposeThree();
169
- });
170
- __expose({
171
- onOpen
172
- });
173
- return (_ctx, _cache) => {
174
- return show.value ? (openBlock(), createElementBlock("div", _hoisted_1, [
175
- isClose.value ? (openBlock(), createBlock(unref(CloseCircleFilled), {
176
- key: 0,
177
- class: "icon",
178
- onClick: closeView
179
- })) : createCommentVNode("", true),
180
- createElementVNode("div", {
181
- ref_key: "containerRef",
182
- ref: containerRef,
183
- class: "canvas-view"
184
- }, null, 512)
185
- ])) : createCommentVNode("", true);
186
- };
187
- }
188
- };
189
- const PanoramaView = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d6ec0f1f"]]);
190
- export {
191
- PanoramaView as default
192
- };