@eternalheart/vue-file-preview 1.3.6 → 1.3.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/lib/FilePreviewContent.vue.d.ts.map +1 -1
- package/lib/FilePreviewEmbed.vue.d.ts.map +1 -1
- package/lib/FilePreviewModal.vue.d.ts.map +1 -1
- package/lib/chunks/index-BI0dSTSM.mjs +77 -0
- package/lib/chunks/index-BI0dSTSM.mjs.map +1 -0
- package/lib/chunks/index-BW61ZRev.mjs +111 -0
- package/lib/chunks/index-BW61ZRev.mjs.map +1 -0
- package/lib/chunks/index-C8ZF84WX.mjs +113 -0
- package/lib/chunks/index-C8ZF84WX.mjs.map +1 -0
- package/lib/chunks/index-CB0zCxJb.mjs +353 -0
- package/lib/chunks/index-CB0zCxJb.mjs.map +1 -0
- package/lib/chunks/index-CBCQs1ZC.mjs +116 -0
- package/lib/chunks/index-CBCQs1ZC.mjs.map +1 -0
- package/lib/chunks/index-CbKSdAt_.mjs +391 -0
- package/lib/chunks/index-CbKSdAt_.mjs.map +1 -0
- package/lib/chunks/index-CcJ5NmY1.mjs +152 -0
- package/lib/chunks/index-CcJ5NmY1.mjs.map +1 -0
- package/lib/chunks/index-ClxBxmPR.mjs +249 -0
- package/lib/chunks/index-ClxBxmPR.mjs.map +1 -0
- package/lib/chunks/index-D9lByoJw.mjs +111 -0
- package/lib/chunks/index-D9lByoJw.mjs.map +1 -0
- package/lib/chunks/index-DTLDLOGO.mjs +129 -0
- package/lib/chunks/index-DTLDLOGO.mjs.map +1 -0
- package/lib/chunks/index-DUUsS_T4.mjs +134 -0
- package/lib/chunks/index-DUUsS_T4.mjs.map +1 -0
- package/lib/chunks/index-Doy0FvQW.mjs +136 -0
- package/lib/chunks/index-Doy0FvQW.mjs.map +1 -0
- package/lib/chunks/index-DpAxU2JM.mjs +2017 -0
- package/lib/chunks/index-DpAxU2JM.mjs.map +1 -0
- package/lib/chunks/index-DsznjwsH.mjs +103 -0
- package/lib/chunks/index-DsznjwsH.mjs.map +1 -0
- package/lib/chunks/index-SAfVQyNJ.mjs +281 -0
- package/lib/chunks/index-SAfVQyNJ.mjs.map +1 -0
- package/lib/chunks/index-S_kGRh6H.mjs +203 -0
- package/lib/chunks/index-S_kGRh6H.mjs.map +1 -0
- package/lib/chunks/index-kBPb_OKm.mjs +139 -0
- package/lib/chunks/index-kBPb_OKm.mjs.map +1 -0
- package/lib/chunks/index-yMb1JUC4.mjs +84 -0
- package/lib/chunks/index-yMb1JUC4.mjs.map +1 -0
- package/lib/composables/useResolvedTheme.d.ts +15 -0
- package/lib/composables/useResolvedTheme.d.ts.map +1 -0
- package/lib/index.cjs +24 -499
- package/lib/index.cjs.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.mjs +12 -44597
- package/lib/index.mjs.map +1 -1
- package/lib/renderers/Audio/index.vue.d.ts.map +1 -1
- package/lib/renderers/Csv/index.vue.d.ts.map +1 -1
- package/lib/renderers/Json/index.vue.d.ts.map +1 -1
- package/lib/renderers/Markdown/index.vue.d.ts.map +1 -1
- package/lib/renderers/Pptx/index.vue.d.ts.map +1 -1
- package/lib/renderers/RendererLoading.vue.d.ts +3 -0
- package/lib/renderers/RendererLoading.vue.d.ts.map +1 -0
- package/lib/renderers/Text/index.vue.d.ts.map +1 -1
- package/lib/renderers/Video/index.vue.d.ts.map +1 -1
- package/lib/renderers/Xlsx/index.vue.d.ts.map +1 -1
- package/lib/renderers/Xml/index.vue.d.ts.map +1 -1
- package/lib/renderers/Zip/index.vue.d.ts.map +1 -1
- package/lib/renderers/lazy.d.ts +19 -0
- package/lib/renderers/lazy.d.ts.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { defineComponent as k, ref as f, watch as x, openBlock as h, createElementBlock as g, createElementVNode as m, toDisplayString as $, createVNode as E, unref as L, h as t, inject as N, computed as _ } from "vue";
|
|
2
|
+
import { u as C, h as O, L as S, M as J, b as R } from "./index-DpAxU2JM.mjs";
|
|
3
|
+
import { ChevronDown as A, ChevronRight as T } from "lucide-vue-next";
|
|
4
|
+
const B = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
|
|
7
|
+
}, D = {
|
|
8
|
+
key: 1,
|
|
9
|
+
class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
|
|
10
|
+
}, V = { class: "vfp-text-fg-secondary vfp-text-center" }, q = { class: "vfp-text-lg" }, F = {
|
|
11
|
+
key: 2,
|
|
12
|
+
class: "vfp-w-full vfp-h-full vfp-overflow-auto vfp-bg-code-bg vfp-py-3 vfp-pr-4"
|
|
13
|
+
}, K = k({ name: "JsonRenderer" }), M = {
|
|
14
|
+
key: "#9cdcfe",
|
|
15
|
+
string: "#ce9178",
|
|
16
|
+
number: "#b5cea8",
|
|
17
|
+
keyword: "#569cd6",
|
|
18
|
+
bracket: "#d4d4d4",
|
|
19
|
+
colon: "rgb(255 255 255 / 0.6)",
|
|
20
|
+
collapsed: "rgb(255 255 255 / 0.4)",
|
|
21
|
+
arrow: "rgb(255 255 255 / 0.5)"
|
|
22
|
+
}, z = {
|
|
23
|
+
key: "#005cc5",
|
|
24
|
+
string: "#032f62",
|
|
25
|
+
number: "#005cc5",
|
|
26
|
+
keyword: "#d73a49",
|
|
27
|
+
bracket: "#24292e",
|
|
28
|
+
colon: "rgb(23 23 23 / 0.6)",
|
|
29
|
+
collapsed: "rgb(23 23 23 / 0.45)",
|
|
30
|
+
arrow: "rgb(23 23 23 / 0.55)"
|
|
31
|
+
};
|
|
32
|
+
function G(n) {
|
|
33
|
+
return n === "light" ? z : M;
|
|
34
|
+
}
|
|
35
|
+
function H(n, e) {
|
|
36
|
+
return n === null ? t("span", { class: "json-null", style: { color: e.keyword } }, "null") : n === void 0 ? t("span", { class: "json-null", style: { color: e.keyword } }, "undefined") : typeof n == "boolean" ? t("span", { style: { color: e.keyword } }, String(n)) : typeof n == "number" ? t("span", { style: { color: e.number } }, String(n)) : typeof n == "string" ? t("span", { style: { color: e.string } }, `"${n}"`) : t("span", { style: { color: e.bracket } }, String(n));
|
|
37
|
+
}
|
|
38
|
+
function j(n, e, l, o, r) {
|
|
39
|
+
return t("div", { class: "json-row", style: { paddingLeft: `${l}px` } }, [
|
|
40
|
+
t("span", { class: "json-arrow-placeholder" }),
|
|
41
|
+
n !== void 0 ? t("span", { class: "json-key", style: { color: o.key } }, [
|
|
42
|
+
`"${n}"`,
|
|
43
|
+
t("span", { style: { color: o.colon } }, ": ")
|
|
44
|
+
]) : null,
|
|
45
|
+
r ? t("span", { style: { color: o.bracket } }, r) : H(e, o)
|
|
46
|
+
]);
|
|
47
|
+
}
|
|
48
|
+
const b = k({
|
|
49
|
+
name: "JsonNode",
|
|
50
|
+
props: {
|
|
51
|
+
keyName: { type: String, default: void 0 },
|
|
52
|
+
value: { type: null, required: !0 },
|
|
53
|
+
depth: { type: Number, required: !0 },
|
|
54
|
+
defaultExpanded: { type: Boolean, default: !1 }
|
|
55
|
+
},
|
|
56
|
+
setup(n) {
|
|
57
|
+
const e = f(n.defaultExpanded), l = () => {
|
|
58
|
+
e.value = !e.value;
|
|
59
|
+
}, o = N(S, null), r = _(() => (o == null ? void 0 : o.t.value) ?? J({ locale: "zh-CN" })), a = R(), s = _(() => G(a.value));
|
|
60
|
+
return { expanded: e, toggle: l, tFunc: r, colors: s };
|
|
61
|
+
},
|
|
62
|
+
render() {
|
|
63
|
+
const { keyName: n, value: e, depth: l, expanded: o, toggle: r, tFunc: a, colors: s } = this, c = l * 20;
|
|
64
|
+
if (e == null || typeof e != "object")
|
|
65
|
+
return j(n, e, c, s);
|
|
66
|
+
const p = Array.isArray(e), i = (p ? e : Object.entries(e)).length, w = p ? "[" : "{", v = p ? "]" : "}";
|
|
67
|
+
if (i === 0)
|
|
68
|
+
return j(n, null, c, s, `${w}${v}`);
|
|
69
|
+
const d = [];
|
|
70
|
+
return d.push(
|
|
71
|
+
t("div", {
|
|
72
|
+
class: "json-row json-toggle",
|
|
73
|
+
style: { paddingLeft: `${c}px` },
|
|
74
|
+
onClick: r
|
|
75
|
+
}, [
|
|
76
|
+
t("span", { class: "json-arrow", style: { color: s.arrow } }, [
|
|
77
|
+
t(o ? A : T, { class: "vfp-w-3.5 vfp-h-3.5" })
|
|
78
|
+
]),
|
|
79
|
+
n !== void 0 ? t("span", { class: "json-key", style: { color: s.key } }, [
|
|
80
|
+
`"${n}"`,
|
|
81
|
+
t("span", { style: { color: s.colon } }, ": ")
|
|
82
|
+
]) : null,
|
|
83
|
+
t("span", { style: { color: s.bracket } }, w),
|
|
84
|
+
o ? null : t("span", { class: "json-collapsed", style: { color: s.collapsed } }, [
|
|
85
|
+
p ? `${i} ${a("json.items")}` : `${i} ${a("json.keys")}`,
|
|
86
|
+
t("span", { style: { color: s.bracket } }, ` ${v}`)
|
|
87
|
+
])
|
|
88
|
+
])
|
|
89
|
+
), o && (p ? e.forEach((u, y) => {
|
|
90
|
+
d.push(
|
|
91
|
+
t(b, { key: y, value: u, depth: l + 1, defaultExpanded: l < 1 })
|
|
92
|
+
);
|
|
93
|
+
}) : Object.entries(e).forEach(([u, y]) => {
|
|
94
|
+
d.push(
|
|
95
|
+
t(b, { key: u, keyName: u, value: y, depth: l + 1, defaultExpanded: l < 1 })
|
|
96
|
+
);
|
|
97
|
+
}), d.push(
|
|
98
|
+
t("div", { class: "json-row", style: { paddingLeft: `${c + 20}px` } }, [
|
|
99
|
+
t("span", { style: { color: s.bracket } }, v)
|
|
100
|
+
])
|
|
101
|
+
)), t("div", null, d);
|
|
102
|
+
}
|
|
103
|
+
}), U = /* @__PURE__ */ k({
|
|
104
|
+
...K,
|
|
105
|
+
props: {
|
|
106
|
+
url: {},
|
|
107
|
+
fileName: {}
|
|
108
|
+
},
|
|
109
|
+
setup(n) {
|
|
110
|
+
const e = n, { t: l } = C(), o = f(null), r = f(!0), a = f(null);
|
|
111
|
+
return x(() => e.url, async () => {
|
|
112
|
+
r.value = !0, a.value = null;
|
|
113
|
+
try {
|
|
114
|
+
const c = await O(e.url);
|
|
115
|
+
o.value = JSON.parse(c);
|
|
116
|
+
} catch (c) {
|
|
117
|
+
console.error(c), a.value = l.value("json.load_failed");
|
|
118
|
+
} finally {
|
|
119
|
+
r.value = !1;
|
|
120
|
+
}
|
|
121
|
+
}, { immediate: !0 }), (c, p) => r.value ? (h(), g("div", B, [...p[0] || (p[0] = [
|
|
122
|
+
m("div", { class: "vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin" }, null, -1)
|
|
123
|
+
])])) : a.value ? (h(), g("div", D, [
|
|
124
|
+
m("div", V, [
|
|
125
|
+
m("p", q, $(a.value), 1)
|
|
126
|
+
])
|
|
127
|
+
])) : (h(), g("div", F, [
|
|
128
|
+
E(L(b), {
|
|
129
|
+
value: o.value,
|
|
130
|
+
depth: 0,
|
|
131
|
+
"default-expanded": !0
|
|
132
|
+
}, null, 8, ["value"])
|
|
133
|
+
]));
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
export {
|
|
137
|
+
U as default
|
|
138
|
+
};
|
|
139
|
+
//# sourceMappingURL=index-kBPb_OKm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-kBPb_OKm.mjs","sources":["../../src/renderers/Json/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { useTranslator } from '../../composables/useTranslator';\n\nconst props = defineProps<{\n url: string;\n fileName: string;\n}>();\n\nconst { t } = useTranslator();\n\nconst data = ref<unknown>(null);\nconst loading = ref(true);\nconst error = ref<string | null>(null);\n\nconst loadJson = async () => {\n loading.value = true;\n error.value = null;\n try {\n const text = await fetchTextUtf8(props.url);\n data.value = JSON.parse(text);\n } catch (err) {\n console.error(err);\n error.value = t.value('json.load_failed');\n } finally {\n loading.value = false;\n }\n};\n\nwatch(() => props.url, loadJson, { immediate: true });\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\" />\n </div>\n\n <div v-else-if=\"error\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-text-fg-secondary vfp-text-center\">\n <p class=\"vfp-text-lg\">{{ error }}</p>\n </div>\n </div>\n\n <div v-else class=\"vfp-w-full vfp-h-full vfp-overflow-auto vfp-bg-code-bg vfp-py-3 vfp-pr-4\">\n <JsonNode :value=\"data\" :depth=\"0\" :default-expanded=\"true\" />\n </div>\n</template>\n\n<!-- 递归 JSON 节点组件 -->\n<script lang=\"ts\">\nimport { defineComponent, h, inject, computed, type PropType } from 'vue';\nimport { ChevronRight, ChevronDown } from 'lucide-vue-next';\nimport { createTranslator, type Translator } from '@eternalheart/file-preview-core';\nimport { LOCALE_KEY } from '../../i18n/localeKey';\nimport { useResolvedTheme, type ResolvedTheme } from '../../composables/useResolvedTheme';\n\nexport default defineComponent({ name: 'JsonRenderer' });\n\ninterface JsonColors {\n key: string;\n string: string;\n number: string;\n keyword: string;\n bracket: string; // { } [ ]\n colon: string; // :\n collapsed: string; // \"N items / N keys\" 折叠提示\n arrow: string; // 折叠箭头\n}\n\n// VSCode Dark Plus / GitHub Light 两套配色,与 shiki 的 dark-plus / github-light 主题保持一致\nconst DARK_COLORS: JsonColors = {\n key: '#9cdcfe',\n string: '#ce9178',\n number: '#b5cea8',\n keyword: '#569cd6',\n bracket: '#d4d4d4',\n colon: 'rgb(255 255 255 / 0.6)',\n collapsed: 'rgb(255 255 255 / 0.4)',\n arrow: 'rgb(255 255 255 / 0.5)',\n};\n\nconst LIGHT_COLORS: JsonColors = {\n key: '#005cc5',\n string: '#032f62',\n number: '#005cc5',\n keyword: '#d73a49',\n bracket: '#24292e',\n colon: 'rgb(23 23 23 / 0.6)',\n collapsed: 'rgb(23 23 23 / 0.45)',\n arrow: 'rgb(23 23 23 / 0.55)',\n};\n\nfunction pickColors(theme: ResolvedTheme): JsonColors {\n return theme === 'light' ? LIGHT_COLORS : DARK_COLORS;\n}\n\nfunction renderValue(value: unknown, colors: JsonColors) {\n if (value === null) return h('span', { class: 'json-null', style: { color: colors.keyword } }, 'null');\n if (value === undefined) return h('span', { class: 'json-null', style: { color: colors.keyword } }, 'undefined');\n if (typeof value === 'boolean') return h('span', { style: { color: colors.keyword } }, String(value));\n if (typeof value === 'number') return h('span', { style: { color: colors.number } }, String(value));\n if (typeof value === 'string') return h('span', { style: { color: colors.string } }, `\"${value}\"`);\n return h('span', { style: { color: colors.bracket } }, String(value));\n}\n\nfunction renderPrimitiveLine(\n keyName: string | undefined,\n value: unknown,\n indent: number,\n colors: JsonColors,\n override?: string,\n) {\n return h('div', { class: 'json-row', style: { paddingLeft: `${indent}px` } }, [\n h('span', { class: 'json-arrow-placeholder' }),\n keyName !== undefined\n ? h('span', { class: 'json-key', style: { color: colors.key } }, [\n `\"${keyName}\"`,\n h('span', { style: { color: colors.colon } }, ': '),\n ])\n : null,\n override\n ? h('span', { style: { color: colors.bracket } }, override)\n : renderValue(value, colors),\n ]);\n}\n\nconst JsonNode = defineComponent({\n name: 'JsonNode',\n props: {\n keyName: { type: String, default: undefined },\n value: { type: null as unknown as PropType<unknown>, required: true },\n depth: { type: Number, required: true },\n defaultExpanded: { type: Boolean, default: false },\n },\n setup(props) {\n const expanded = ref(props.defaultExpanded);\n const toggle = () => { expanded.value = !expanded.value; };\n const injected = inject(LOCALE_KEY, null);\n const tFunc = computed<Translator>(() => injected?.t.value ?? createTranslator({ locale: 'zh-CN' }));\n const resolvedTheme = useResolvedTheme();\n const colors = computed<JsonColors>(() => pickColors(resolvedTheme.value));\n return { expanded, toggle, tFunc, colors };\n },\n render() {\n const { keyName, value, depth, expanded, toggle, tFunc, colors } = this;\n const indent = depth * 20;\n\n // 基本类型\n if (value === null || value === undefined || typeof value !== 'object') {\n return renderPrimitiveLine(keyName, value, indent, colors);\n }\n\n const isArr = Array.isArray(value);\n const entries = isArr ? (value as unknown[]) : Object.entries(value as Record<string, unknown>);\n const count = entries.length;\n const open = isArr ? '[' : '{';\n const close = isArr ? ']' : '}';\n\n // 空对象/数组\n if (count === 0) {\n return renderPrimitiveLine(keyName, null, indent, colors, `${open}${close}`);\n }\n\n const children = [];\n\n // 折叠行\n children.push(\n h('div', {\n class: 'json-row json-toggle',\n style: { paddingLeft: `${indent}px` },\n onClick: toggle,\n }, [\n h('span', { class: 'json-arrow', style: { color: colors.arrow } }, [\n h(expanded ? ChevronDown : ChevronRight, { class: 'vfp-w-3.5 vfp-h-3.5' }),\n ]),\n keyName !== undefined\n ? h('span', { class: 'json-key', style: { color: colors.key } }, [\n `\"${keyName}\"`,\n h('span', { style: { color: colors.colon } }, ': '),\n ])\n : null,\n h('span', { style: { color: colors.bracket } }, open),\n !expanded\n ? h('span', { class: 'json-collapsed', style: { color: colors.collapsed } }, [\n isArr ? `${count} ${tFunc('json.items')}` : `${count} ${tFunc('json.keys')}`,\n h('span', { style: { color: colors.bracket } }, ` ${close}`),\n ])\n : null,\n ])\n );\n\n // 子节点\n if (expanded) {\n if (isArr) {\n (value as unknown[]).forEach((item, i) => {\n children.push(\n h(JsonNode, { key: i, value: item, depth: depth + 1, defaultExpanded: depth < 1 })\n );\n });\n } else {\n Object.entries(value as Record<string, unknown>).forEach(([k, v]) => {\n children.push(\n h(JsonNode, { key: k, keyName: k, value: v, depth: depth + 1, defaultExpanded: depth < 1 })\n );\n });\n }\n children.push(\n h('div', { class: 'json-row', style: { paddingLeft: `${indent + 20}px` } }, [\n h('span', { style: { color: colors.bracket } }, close),\n ])\n );\n }\n\n return h('div', null, children);\n },\n});\n</script>\n\n<style>\n.vfp-root .json-row {\n display: flex;\n align-items: flex-start;\n padding-top: 1px;\n padding-bottom: 1px;\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n font-size: 0.875rem;\n line-height: 1.4;\n}\n.vfp-root .json-toggle {\n cursor: pointer;\n user-select: none;\n}\n.vfp-root .json-toggle:hover {\n background: var(--fp-surface-1);\n}\n.vfp-root .json-arrow {\n width: 16px;\n height: 20px;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.vfp-root .json-arrow-placeholder {\n width: 16px;\n height: 20px;\n flex-shrink: 0;\n}\n.vfp-root .json-key {\n flex-shrink: 0;\n}\n.vfp-root .json-collapsed {\n margin-left: 4px;\n}\n.vfp-root .json-null {\n font-style: italic;\n}\n</style>\n"],"names":["__default__","defineComponent","DARK_COLORS","LIGHT_COLORS","pickColors","theme","renderValue","value","colors","h","renderPrimitiveLine","keyName","indent","override","JsonNode","props","expanded","ref","toggle","injected","inject","LOCALE_KEY","tFunc","computed","createTranslator","resolvedTheme","useResolvedTheme","depth","isArr","count","open","close","children","ChevronDown","ChevronRight","item","i","k","v","__props","t","useTranslator","data","loading","error","watch","text","fetchTextUtf8","err","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_createVNode","_unref"],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { defineComponent as z, ref as c, watch as g, openBlock as s, createElementBlock as a, createElementVNode as v, toDisplayString as y } from "vue";
|
|
2
|
+
import { u as M, b as S, h as $, _ as D } from "./index-DpAxU2JM.mjs";
|
|
3
|
+
import { codeToHtml as j } from "shiki";
|
|
4
|
+
const H = {
|
|
5
|
+
key: 0,
|
|
6
|
+
class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
|
|
7
|
+
}, L = {
|
|
8
|
+
key: 1,
|
|
9
|
+
class: "vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full"
|
|
10
|
+
}, N = { class: "vfp-text-fg-secondary vfp-text-center" }, P = { class: "vfp-text-lg" }, X = {
|
|
11
|
+
key: 2,
|
|
12
|
+
class: "vfp-w-full vfp-h-full vfp-overflow-auto",
|
|
13
|
+
style: { background: "var(--fp-code-bg)" }
|
|
14
|
+
}, B = {
|
|
15
|
+
key: 0,
|
|
16
|
+
class: "vfp-p-6 vfp-text-fg-primary vfp-font-mono vfp-text-sm vfp-whitespace-pre-wrap vfp-break-words"
|
|
17
|
+
}, E = ["innerHTML"], I = /* @__PURE__ */ z({
|
|
18
|
+
__name: "index",
|
|
19
|
+
props: {
|
|
20
|
+
url: {},
|
|
21
|
+
fileName: {}
|
|
22
|
+
},
|
|
23
|
+
setup(w) {
|
|
24
|
+
const u = w, { t: x } = M(), d = S(), l = c(""), n = c(""), f = c(!0), o = c(null), k = (e) => {
|
|
25
|
+
const r = " ", i = /(>)(<)(\/*)/g, h = e.replace(i, `$1
|
|
26
|
+
$2$3`);
|
|
27
|
+
let t = 0;
|
|
28
|
+
return h.split(`
|
|
29
|
+
`).map((p) => {
|
|
30
|
+
let _ = 0;
|
|
31
|
+
/^<\/\w/.test(p) ? t = Math.max(t - 1, 0) : /^<\w[^>]*[^/]>.*$/.test(p) && !/<.+<\/.+>$/.test(p) && (_ = 1);
|
|
32
|
+
const T = r.repeat(t) + p;
|
|
33
|
+
return t += _, T;
|
|
34
|
+
}).join(`
|
|
35
|
+
`);
|
|
36
|
+
}, b = (e) => {
|
|
37
|
+
try {
|
|
38
|
+
const i = new DOMParser().parseFromString(e, "application/xml");
|
|
39
|
+
if (i.querySelector("parsererror")) return e;
|
|
40
|
+
const t = new XMLSerializer().serializeToString(i);
|
|
41
|
+
return k(t);
|
|
42
|
+
} catch {
|
|
43
|
+
return e;
|
|
44
|
+
}
|
|
45
|
+
}, m = async () => {
|
|
46
|
+
f.value = !0, o.value = null;
|
|
47
|
+
try {
|
|
48
|
+
const e = await $(u.url);
|
|
49
|
+
l.value = b(e);
|
|
50
|
+
try {
|
|
51
|
+
n.value = await j(l.value, {
|
|
52
|
+
lang: "xml",
|
|
53
|
+
theme: d.value === "light" ? "github-light" : "dark-plus"
|
|
54
|
+
});
|
|
55
|
+
} catch {
|
|
56
|
+
n.value = "";
|
|
57
|
+
}
|
|
58
|
+
} catch (e) {
|
|
59
|
+
console.error(e), o.value = x.value("xml.load_failed");
|
|
60
|
+
} finally {
|
|
61
|
+
f.value = !1;
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
return g(() => u.url, m, { immediate: !0 }), g(d, () => {
|
|
65
|
+
l.value && m();
|
|
66
|
+
}), (e, r) => f.value ? (s(), a("div", H, [...r[0] || (r[0] = [
|
|
67
|
+
v("div", { class: "vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin" }, null, -1)
|
|
68
|
+
])])) : o.value ? (s(), a("div", L, [
|
|
69
|
+
v("div", N, [
|
|
70
|
+
v("p", P, y(o.value), 1)
|
|
71
|
+
])
|
|
72
|
+
])) : (s(), a("div", X, [
|
|
73
|
+
n.value ? (s(), a("div", {
|
|
74
|
+
key: 1,
|
|
75
|
+
class: "shiki-wrapper",
|
|
76
|
+
innerHTML: n.value
|
|
77
|
+
}, null, 8, E)) : (s(), a("pre", B, y(l.value), 1))
|
|
78
|
+
]));
|
|
79
|
+
}
|
|
80
|
+
}), F = /* @__PURE__ */ D(I, [["__scopeId", "data-v-3249ae32"]]);
|
|
81
|
+
export {
|
|
82
|
+
F as default
|
|
83
|
+
};
|
|
84
|
+
//# sourceMappingURL=index-yMb1JUC4.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-yMb1JUC4.mjs","sources":["../../src/renderers/Xml/index.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport { fetchTextUtf8 } from '@eternalheart/file-preview-core';\nimport { codeToHtml } from 'shiki';\nimport { useTranslator } from '../../composables/useTranslator';\nimport { useResolvedTheme } from '../../composables/useResolvedTheme';\n\nconst props = defineProps<{\n url: string;\n fileName: string;\n}>();\n\nconst { t } = useTranslator();\nconst resolvedTheme = useResolvedTheme();\n\nconst content = ref<string>('');\nconst highlighted = ref<string>('');\nconst loading = ref(true);\nconst error = ref<string | null>(null);\n\nconst indentXml = (xml: string): string => {\n const PADDING = ' ';\n const reg = /(>)(<)(\\/*)/g;\n const formatted = xml.replace(reg, '$1\\n$2$3');\n let pad = 0;\n return formatted\n .split('\\n')\n .map((line) => {\n let indent = 0;\n if (/^<\\/\\w/.test(line)) {\n pad = Math.max(pad - 1, 0);\n } else if (/^<\\w[^>]*[^/]>.*$/.test(line) && !/<.+<\\/.+>$/.test(line)) {\n indent = 1;\n }\n const padded = PADDING.repeat(pad) + line;\n pad += indent;\n return padded;\n })\n .join('\\n');\n};\n\nconst prettyPrintXml = (xml: string): string => {\n try {\n const parser = new DOMParser();\n const doc = parser.parseFromString(xml, 'application/xml');\n if (doc.querySelector('parsererror')) return xml;\n const serializer = new XMLSerializer();\n const serialized = serializer.serializeToString(doc);\n return indentXml(serialized);\n } catch {\n return xml;\n }\n};\n\nconst load = async () => {\n loading.value = true;\n error.value = null;\n try {\n const raw = await fetchTextUtf8(props.url);\n content.value = prettyPrintXml(raw);\n try {\n highlighted.value = await codeToHtml(content.value, {\n lang: 'xml',\n theme: resolvedTheme.value === 'light' ? 'github-light' : 'dark-plus',\n });\n } catch {\n highlighted.value = '';\n }\n } catch (err) {\n console.error(err);\n error.value = t.value('xml.load_failed');\n } finally {\n loading.value = false;\n }\n};\n\nwatch(() => props.url, load, { immediate: true });\nwatch(resolvedTheme, () => {\n if (content.value) load();\n});\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div\n class=\"vfp-w-12 vfp-h-12 vfp-border-4 vfp-border-line-strong vfp-border-t-spinner-head vfp-rounded-full vfp-animate-spin\"\n />\n </div>\n\n <div v-else-if=\"error\" class=\"vfp-flex vfp-items-center vfp-justify-center vfp-w-full vfp-h-full\">\n <div class=\"vfp-text-fg-secondary vfp-text-center\">\n <p class=\"vfp-text-lg\">{{ error }}</p>\n </div>\n </div>\n\n <div v-else class=\"vfp-w-full vfp-h-full vfp-overflow-auto\" style=\"background: var(--fp-code-bg);\">\n <pre\n v-if=\"!highlighted\"\n class=\"vfp-p-6 vfp-text-fg-primary vfp-font-mono vfp-text-sm vfp-whitespace-pre-wrap vfp-break-words\"\n >{{ content }}</pre\n >\n <div v-else class=\"shiki-wrapper\" v-html=\"highlighted\" />\n </div>\n</template>\n\n<style scoped>\n.shiki-wrapper :deep(pre) {\n margin: 0;\n padding: 1.5rem;\n background: transparent !important;\n font-size: 0.875rem;\n overflow-x: auto;\n}\n.shiki-wrapper :deep(code) {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;\n}\n</style>\n"],"names":["props","__props","t","useTranslator","resolvedTheme","useResolvedTheme","content","ref","highlighted","loading","error","indentXml","xml","PADDING","reg","formatted","pad","line","indent","padded","prettyPrintXml","doc","serialized","load","raw","fetchTextUtf8","codeToHtml","err","watch","_openBlock","_createElementBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAKR,EAAE,GAAAC,EAAA,IAAMC,EAAA,GACRC,IAAgBC,EAAA,GAEhBC,IAAUC,EAAY,EAAE,GACxBC,IAAcD,EAAY,EAAE,GAC5BE,IAAUF,EAAI,EAAI,GAClBG,IAAQH,EAAmB,IAAI,GAE/BI,IAAY,CAACC,MAAwB;AACzC,YAAMC,IAAU,MACVC,IAAM,gBACNC,IAAYH,EAAI,QAAQE,GAAK;AAAA,KAAU;AAC7C,UAAIE,IAAM;AACV,aAAOD,EACJ,MAAM;AAAA,CAAI,EACV,IAAI,CAACE,MAAS;AACb,YAAIC,IAAS;AACb,QAAI,SAAS,KAAKD,CAAI,IACpBD,IAAM,KAAK,IAAIA,IAAM,GAAG,CAAC,IAChB,oBAAoB,KAAKC,CAAI,KAAK,CAAC,aAAa,KAAKA,CAAI,MAClEC,IAAS;AAEX,cAAMC,IAASN,EAAQ,OAAOG,CAAG,IAAIC;AACrC,eAAAD,KAAOE,GACAC;AAAA,MACT,CAAC,EACA,KAAK;AAAA,CAAI;AAAA,IACd,GAEMC,IAAiB,CAACR,MAAwB;AAC9C,UAAI;AAEF,cAAMS,IADS,IAAI,UAAA,EACA,gBAAgBT,GAAK,iBAAiB;AACzD,YAAIS,EAAI,cAAc,aAAa,EAAG,QAAOT;AAE7C,cAAMU,IADa,IAAI,cAAA,EACO,kBAAkBD,CAAG;AACnD,eAAOV,EAAUW,CAAU;AAAA,MAC7B,QAAQ;AACN,eAAOV;AAAA,MACT;AAAA,IACF,GAEMW,IAAO,YAAY;AACvB,MAAAd,EAAQ,QAAQ,IAChBC,EAAM,QAAQ;AACd,UAAI;AACF,cAAMc,IAAM,MAAMC,EAAczB,EAAM,GAAG;AACzC,QAAAM,EAAQ,QAAQc,EAAeI,CAAG;AAClC,YAAI;AACF,UAAAhB,EAAY,QAAQ,MAAMkB,EAAWpB,EAAQ,OAAO;AAAA,YAClD,MAAM;AAAA,YACN,OAAOF,EAAc,UAAU,UAAU,iBAAiB;AAAA,UAAA,CAC3D;AAAA,QACH,QAAQ;AACN,UAAAI,EAAY,QAAQ;AAAA,QACtB;AAAA,MACF,SAASmB,GAAK;AACZ,gBAAQ,MAAMA,CAAG,GACjBjB,EAAM,QAAQR,EAAE,MAAM,iBAAiB;AAAA,MACzC,UAAA;AACE,QAAAO,EAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAEA,WAAAmB,EAAM,MAAM5B,EAAM,KAAKuB,GAAM,EAAE,WAAW,IAAM,GAChDK,EAAMxB,GAAe,MAAM;AACzB,MAAIE,EAAQ,SAAOiB,EAAA;AAAA,IACrB,CAAC,aAIYd,EAAA,SAAXoB,EAAA,GAAAC,EAIM,OAJNC,GAIM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MAHJC,EAEE,OAAA,EADA,OAAM,oHAAA,GAAmH,MAAA,EAAA;AAAA,IAAA,QAI7GvB,EAAA,SAAhBmB,EAAA,GAAAC,EAIM,OAJNI,GAIM;AAAA,MAHJD,EAEM,OAFNE,GAEM;AAAA,QADJF,EAAsC,KAAtCG,GAAsCC,EAAZ3B,EAAA,KAAK,GAAA,CAAA;AAAA,MAAA;WAInCmB,EAAA,GAAAC,EAOM,OAPNQ,GAOM;AAAA,MALK9B,EAAA,cAITsB,EAAyD,OAAA;AAAA;QAA7C,OAAM;AAAA,QAAgB,WAAQtB,EAAA;AAAA,MAAA,wBAL1CsB,EAIC,OAJDS,GAICF,EADK/B,EAAA,KAAO,GAAA,CAAA;AAAA;;;"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type MaybeRef, type ComputedRef } from 'vue';
|
|
2
|
+
export type ResolvedTheme = 'dark' | 'light';
|
|
3
|
+
/**
|
|
4
|
+
* 在主组件中调用,向子树注入已解析的主题('dark' | 'light')
|
|
5
|
+
*/
|
|
6
|
+
export declare function provideResolvedTheme(theme: MaybeRef<ResolvedTheme>): void;
|
|
7
|
+
/**
|
|
8
|
+
* 获取已解析的主题('dark' | 'light')。
|
|
9
|
+
* Provider 之外默认 'dark'。
|
|
10
|
+
*
|
|
11
|
+
* renderer 需要切第三方库的 theme 选项(如 shiki 的 theme)时使用;
|
|
12
|
+
* 不要用它做 className 分支 —— class 由 CSS 变量通过根容器 [data-theme] 自动切换。
|
|
13
|
+
*/
|
|
14
|
+
export declare function useResolvedTheme(): ComputedRef<ResolvedTheme>;
|
|
15
|
+
//# sourceMappingURL=useResolvedTheme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResolvedTheme.d.ts","sourceRoot":"","sources":["../../src/composables/useResolvedTheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuD,KAAK,QAAQ,EAAE,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAE3G,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAI7C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAGzE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,WAAW,CAAC,aAAa,CAAC,CAI7D"}
|