qidian-vue-ui 1.5.2 → 1.5.3
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.
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
.qd-file-viewer[data-v-
|
|
2
|
-
.qd-file-viewer__content[data-v-
|
|
1
|
+
.qd-file-viewer[data-v-a1dee402],
|
|
2
|
+
.qd-file-viewer__content[data-v-a1dee402] {
|
|
3
3
|
width: 100%;
|
|
4
4
|
height: 100%;
|
|
5
5
|
}
|
|
6
|
-
.qd-file-viewer--image[data-v-
|
|
6
|
+
.qd-file-viewer--image[data-v-a1dee402] {
|
|
7
7
|
transform: translate3d(0, 0, 0);
|
|
8
8
|
}
|
|
9
|
-
.qd-file-viewer--image[data-v-
|
|
9
|
+
.qd-file-viewer--image[data-v-a1dee402] .t-image-viewer__trigger {
|
|
10
10
|
display: none;
|
|
11
11
|
}
|
|
12
|
-
.qd-file-viewer--image[data-v-
|
|
13
|
-
.qd-file-viewer--image[data-v-
|
|
12
|
+
.qd-file-viewer--image[data-v-a1dee402] .t-image-viewer__modal-box,
|
|
13
|
+
.qd-file-viewer--image[data-v-a1dee402] .t-image-viewer-preview-image {
|
|
14
14
|
animation: none;
|
|
15
15
|
}
|
|
16
|
-
.qd-file-viewer--image[data-v-
|
|
16
|
+
.qd-file-viewer--image[data-v-a1dee402] .t-image-viewer__modal-mask {
|
|
17
17
|
transition: none;
|
|
18
18
|
}
|
|
@@ -2,7 +2,7 @@ import './index.css'
|
|
|
2
2
|
import _sfc_main from "./index.vue2.mjs";
|
|
3
3
|
/* empty css */
|
|
4
4
|
import _export_sfc from "../../_virtual/_plugin-vue_export-helper.mjs";
|
|
5
|
-
const QdFileViewer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
5
|
+
const QdFileViewer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-a1dee402"]]);
|
|
6
6
|
export {
|
|
7
7
|
QdFileViewer as default
|
|
8
8
|
};
|
|
@@ -4,7 +4,6 @@ import { allRenderers } from "@file-viewer/preset-all";
|
|
|
4
4
|
import { FileViewer } from "@file-viewer/vue3";
|
|
5
5
|
import { ImageViewer } from "tdesign-vue-next";
|
|
6
6
|
import { isImage } from "../../utils/tools.mjs";
|
|
7
|
-
import { useConfig } from "../config-provider/useConfig.mjs";
|
|
8
7
|
import { useTheme } from "../../hooks/useTheme.mjs";
|
|
9
8
|
import QdOfficePdf from "../office/pdf/index.vue.mjs";
|
|
10
9
|
import merge from "../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.mjs";
|
|
@@ -20,9 +19,16 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
20
19
|
setup(__props) {
|
|
21
20
|
const props = __props;
|
|
22
21
|
const tdTheme = useTheme();
|
|
23
|
-
const
|
|
22
|
+
const SVG_PLACEHOLDER_PNG = (() => {
|
|
23
|
+
if (typeof document === "undefined") return "";
|
|
24
|
+
const canvas = document.createElement("canvas");
|
|
25
|
+
canvas.width = 800;
|
|
26
|
+
canvas.height = 600;
|
|
27
|
+
return canvas.toDataURL("image/png");
|
|
28
|
+
})();
|
|
24
29
|
const rootRef = ref();
|
|
25
30
|
const imageViewerVisible = ref(false);
|
|
31
|
+
const svgReady = ref(false);
|
|
26
32
|
const isPdf = computed(() => {
|
|
27
33
|
const { file, src } = props;
|
|
28
34
|
if (file) {
|
|
@@ -35,6 +41,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
35
41
|
}
|
|
36
42
|
return false;
|
|
37
43
|
});
|
|
44
|
+
const isSvg = computed(() => {
|
|
45
|
+
const { file, src } = props;
|
|
46
|
+
if (file) {
|
|
47
|
+
if ("type" in file && file.type === "image/svg+xml") return true;
|
|
48
|
+
if ("name" in file && file.name.endsWith(".svg")) return true;
|
|
49
|
+
}
|
|
50
|
+
if (src) {
|
|
51
|
+
const pathname = new URL(src, "https://x").pathname;
|
|
52
|
+
if (pathname.endsWith(".svg")) return true;
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
});
|
|
38
56
|
const fileType = computed(() => {
|
|
39
57
|
const { file, src } = props;
|
|
40
58
|
if (file && "type" in file && file.type) return file.type;
|
|
@@ -48,23 +66,33 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
48
66
|
if (src) return src;
|
|
49
67
|
return void 0;
|
|
50
68
|
});
|
|
51
|
-
const imageViewerImages = computed(
|
|
52
|
-
|
|
53
|
-
|
|
69
|
+
const imageViewerImages = computed(() => {
|
|
70
|
+
const source = imageViewerSource.value;
|
|
71
|
+
if (!source) return [];
|
|
72
|
+
if (isSvg.value) {
|
|
73
|
+
return svgReady.value ? [{ mainImage: source, thumbnail: source, isSvg: true }] : [SVG_PLACEHOLDER_PNG];
|
|
74
|
+
}
|
|
75
|
+
return [source];
|
|
76
|
+
});
|
|
54
77
|
const useImageViewer = computed(() => isImageFile.value && !!imageViewerSource.value);
|
|
55
78
|
const resolvedAttach = computed(() => {
|
|
56
79
|
if (rootRef.value) return () => rootRef.value;
|
|
57
80
|
return "body";
|
|
58
81
|
});
|
|
59
82
|
watch(
|
|
60
|
-
useImageViewer,
|
|
61
|
-
(
|
|
62
|
-
if (!
|
|
83
|
+
[useImageViewer, imageViewerSource],
|
|
84
|
+
() => {
|
|
85
|
+
if (!useImageViewer.value) {
|
|
63
86
|
imageViewerVisible.value = false;
|
|
87
|
+
svgReady.value = false;
|
|
64
88
|
return;
|
|
65
89
|
}
|
|
90
|
+
svgReady.value = false;
|
|
66
91
|
nextTick(() => {
|
|
67
92
|
imageViewerVisible.value = true;
|
|
93
|
+
nextTick(() => {
|
|
94
|
+
svgReady.value = true;
|
|
95
|
+
});
|
|
68
96
|
});
|
|
69
97
|
},
|
|
70
98
|
{ immediate: true }
|
|
@@ -32,6 +32,14 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
32
32
|
const imageViewerIndex = ref(0);
|
|
33
33
|
const { t } = useConfig("multiFileViewer");
|
|
34
34
|
const { t: wrapperT } = useConfig("wrapper");
|
|
35
|
+
const SVG_PLACEHOLDER_PNG = (() => {
|
|
36
|
+
if (typeof document === "undefined") return "";
|
|
37
|
+
const canvas = document.createElement("canvas");
|
|
38
|
+
canvas.width = 800;
|
|
39
|
+
canvas.height = 600;
|
|
40
|
+
return canvas.toDataURL("image/png");
|
|
41
|
+
})();
|
|
42
|
+
const svgReady = ref(false);
|
|
35
43
|
const mergedProps = computed(() => ({
|
|
36
44
|
...props,
|
|
37
45
|
...runtimeOverrides.value
|
|
@@ -64,7 +72,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
64
72
|
);
|
|
65
73
|
const useImageViewer = computed(() => allFilesAreImages.value && !fileViewerOnly.value);
|
|
66
74
|
const imageViewerImages = computed(
|
|
67
|
-
() => (mergedProps.value.files ?? []).map((item) =>
|
|
75
|
+
() => (mergedProps.value.files ?? []).map((item) => {
|
|
76
|
+
const source = resolveImageViewerSource(item);
|
|
77
|
+
if (isSvgItem(item) && source) {
|
|
78
|
+
return svgReady.value ? { mainImage: source, thumbnail: source, isSvg: true } : SVG_PLACEHOLDER_PNG;
|
|
79
|
+
}
|
|
80
|
+
return source ?? "";
|
|
81
|
+
})
|
|
68
82
|
);
|
|
69
83
|
const resolvedAttach = computed(() => mergedProps.value.attach ?? wrapperT("attach") ?? "body");
|
|
70
84
|
const isDialog = computed(() => mergedProps.value.wrapper !== false && !useImageViewer.value);
|
|
@@ -92,6 +106,18 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
92
106
|
if (item.src) return item.src;
|
|
93
107
|
return void 0;
|
|
94
108
|
}
|
|
109
|
+
function isSvgItem(item) {
|
|
110
|
+
const file = item.file;
|
|
111
|
+
if (file) {
|
|
112
|
+
if ("type" in file && file.type === "image/svg+xml") return true;
|
|
113
|
+
if ("name" in file && file.name.endsWith(".svg")) return true;
|
|
114
|
+
}
|
|
115
|
+
if (item.src) {
|
|
116
|
+
const pathname = new URL(item.src, "https://x").pathname;
|
|
117
|
+
if (pathname.endsWith(".svg")) return true;
|
|
118
|
+
}
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
95
121
|
function normalizeIndex(index, files) {
|
|
96
122
|
if (!files?.length) return 0;
|
|
97
123
|
if (index === void 0 || index < 0 || index >= files.length) return 0;
|
|
@@ -121,9 +147,13 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
121
147
|
activeIndex.value = normalizeIndex(mergedProps.value.index, mergedProps.value.files);
|
|
122
148
|
if (useImageViewer.value) {
|
|
123
149
|
imageViewerIndex.value = activeIndex.value;
|
|
150
|
+
svgReady.value = false;
|
|
124
151
|
imageViewerVisible.value = false;
|
|
125
152
|
nextTick(() => {
|
|
126
153
|
imageViewerVisible.value = true;
|
|
154
|
+
nextTick(() => {
|
|
155
|
+
svgReady.value = true;
|
|
156
|
+
});
|
|
127
157
|
});
|
|
128
158
|
return;
|
|
129
159
|
}
|
|
@@ -131,6 +161,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
131
161
|
nextTick(() => dialogRef.value?.show());
|
|
132
162
|
}
|
|
133
163
|
function hide() {
|
|
164
|
+
svgReady.value = false;
|
|
134
165
|
if (imageViewerVisible.value) imageViewerVisible.value = false;
|
|
135
166
|
if (!isDialog.value) return;
|
|
136
167
|
dialogRef.value?.hide();
|