@eternalheart/react-file-preview 1.3.10 → 1.3.11

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 (114) hide show
  1. package/lib/RequestContext.d.ts +1 -1
  2. package/lib/RequestContext.d.ts.map +1 -1
  3. package/lib/chunks/RendererError-BH6fzLrN.mjs +15 -0
  4. package/lib/chunks/RendererError-BH6fzLrN.mjs.map +1 -0
  5. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs +56 -0
  6. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs.map +1 -0
  7. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs +37 -0
  8. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs.map +1 -0
  9. package/lib/chunks/index-B57rEPin.mjs +54 -0
  10. package/lib/chunks/index-B57rEPin.mjs.map +1 -0
  11. package/lib/chunks/index-BCuRRLYt.mjs +222 -0
  12. package/lib/chunks/index-BCuRRLYt.mjs.map +1 -0
  13. package/lib/chunks/{index-DSAXdrgU.mjs → index-BJ6vTNxc.mjs} +76 -75
  14. package/lib/chunks/index-BJ6vTNxc.mjs.map +1 -0
  15. package/lib/chunks/{index-C5YHI0Zs.mjs → index-BYdqrqnR.mjs} +52 -51
  16. package/lib/chunks/index-BYdqrqnR.mjs.map +1 -0
  17. package/lib/chunks/index-BiyghBxu.mjs +136 -0
  18. package/lib/chunks/index-BiyghBxu.mjs.map +1 -0
  19. package/lib/chunks/{index-CwmZQ-JO.mjs → index-C8CyS_sj.mjs} +67 -64
  20. package/lib/chunks/index-C8CyS_sj.mjs.map +1 -0
  21. package/lib/chunks/index-C8OrFLd5.mjs +594 -0
  22. package/lib/chunks/index-C8OrFLd5.mjs.map +1 -0
  23. package/lib/chunks/{index-DveR0rOk.mjs → index-CCkHAeLh.mjs} +41 -38
  24. package/lib/chunks/index-CCkHAeLh.mjs.map +1 -0
  25. package/lib/chunks/index-CdmkF0CO.mjs +105 -0
  26. package/lib/chunks/index-CdmkF0CO.mjs.map +1 -0
  27. package/lib/chunks/index-CuAALtwC.mjs +2299 -0
  28. package/lib/chunks/index-CuAALtwC.mjs.map +1 -0
  29. package/lib/chunks/index-D660ENHx.mjs +114 -0
  30. package/lib/chunks/index-D660ENHx.mjs.map +1 -0
  31. package/lib/chunks/{index-DN8BQIqo.mjs → index-DBEG73K1.mjs} +79 -78
  32. package/lib/chunks/index-DBEG73K1.mjs.map +1 -0
  33. package/lib/chunks/index-DaFlk9dd.mjs +13097 -0
  34. package/lib/chunks/index-DaFlk9dd.mjs.map +1 -0
  35. package/lib/chunks/index-_mP0FkqE.mjs +113 -0
  36. package/lib/chunks/index-_mP0FkqE.mjs.map +1 -0
  37. package/lib/chunks/{index-tecGXW2S.mjs → index-nLTQXCV7.mjs} +85 -83
  38. package/lib/chunks/index-nLTQXCV7.mjs.map +1 -0
  39. package/lib/chunks/index-nVblatyi.mjs +55 -0
  40. package/lib/chunks/index-nVblatyi.mjs.map +1 -0
  41. package/lib/chunks/{index-DPpUj8Yy.mjs → index-ow-nGpuu.mjs} +99 -98
  42. package/lib/chunks/index-ow-nGpuu.mjs.map +1 -0
  43. package/lib/chunks/index-qOC5xQyK.mjs +96 -0
  44. package/lib/chunks/index-qOC5xQyK.mjs.map +1 -0
  45. package/lib/chunks/index-rUfsiVR8.mjs +12335 -0
  46. package/lib/chunks/index-rUfsiVR8.mjs.map +1 -0
  47. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs +122 -0
  48. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs.map +1 -0
  49. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs +73 -0
  50. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs.map +1 -0
  51. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs +82 -0
  52. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs.map +1 -0
  53. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs +60 -0
  54. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map +1 -0
  55. package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs → useShikiHighlight-ClbUXJ2p.mjs} +2 -2
  56. package/lib/chunks/{useShikiHighlight-DHFYu0BU.mjs.map → useShikiHighlight-ClbUXJ2p.mjs.map} +1 -1
  57. package/lib/index.cjs +31 -22
  58. package/lib/index.cjs.map +1 -1
  59. package/lib/index.css +1 -1
  60. package/lib/index.mjs +8 -8
  61. package/lib/renderers/Audio/index.d.ts.map +1 -1
  62. package/lib/renderers/Csv/index.d.ts.map +1 -1
  63. package/lib/renderers/Docx/index.d.ts.map +1 -1
  64. package/lib/renderers/Epub/index.d.ts.map +1 -1
  65. package/lib/renderers/Font/index.d.ts.map +1 -1
  66. package/lib/renderers/Image/index.d.ts +2 -0
  67. package/lib/renderers/Image/index.d.ts.map +1 -1
  68. package/lib/renderers/Json/index.d.ts.map +1 -1
  69. package/lib/renderers/Markdown/index.d.ts.map +1 -1
  70. package/lib/renderers/Mobi/index.d.ts.map +1 -1
  71. package/lib/renderers/Msg/index.d.ts.map +1 -1
  72. package/lib/renderers/Pdf/index.d.ts.map +1 -1
  73. package/lib/renderers/Pptx/index.d.ts.map +1 -1
  74. package/lib/renderers/RendererError.d.ts +8 -0
  75. package/lib/renderers/RendererError.d.ts.map +1 -0
  76. package/lib/renderers/Subtitle/index.d.ts.map +1 -1
  77. package/lib/renderers/Text/index.d.ts.map +1 -1
  78. package/lib/renderers/Video/index.d.ts +1 -0
  79. package/lib/renderers/Video/index.d.ts.map +1 -1
  80. package/lib/renderers/Xlsx/index.d.ts.map +1 -1
  81. package/lib/renderers/Xml/index.d.ts.map +1 -1
  82. package/lib/renderers/Zip/index.d.ts.map +1 -1
  83. package/package.json +13 -5
  84. package/lib/chunks/index-B0JUZ5rS.mjs +0 -110
  85. package/lib/chunks/index-B0JUZ5rS.mjs.map +0 -1
  86. package/lib/chunks/index-BAYc4aBz.mjs +0 -129
  87. package/lib/chunks/index-BAYc4aBz.mjs.map +0 -1
  88. package/lib/chunks/index-BOQJNL71.mjs +0 -103
  89. package/lib/chunks/index-BOQJNL71.mjs.map +0 -1
  90. package/lib/chunks/index-BkU8rK-0.mjs +0 -51
  91. package/lib/chunks/index-BkU8rK-0.mjs.map +0 -1
  92. package/lib/chunks/index-BnDoXBnH.mjs +0 -257
  93. package/lib/chunks/index-BnDoXBnH.mjs.map +0 -1
  94. package/lib/chunks/index-C5YHI0Zs.mjs.map +0 -1
  95. package/lib/chunks/index-CGNWXFy3.mjs +0 -2081
  96. package/lib/chunks/index-CGNWXFy3.mjs.map +0 -1
  97. package/lib/chunks/index-CwmZQ-JO.mjs.map +0 -1
  98. package/lib/chunks/index-CzflrElZ.mjs +0 -52
  99. package/lib/chunks/index-CzflrElZ.mjs.map +0 -1
  100. package/lib/chunks/index-CztCCF7q.mjs +0 -116
  101. package/lib/chunks/index-CztCCF7q.mjs.map +0 -1
  102. package/lib/chunks/index-DKEcGewg.mjs +0 -96
  103. package/lib/chunks/index-DKEcGewg.mjs.map +0 -1
  104. package/lib/chunks/index-DN8BQIqo.mjs.map +0 -1
  105. package/lib/chunks/index-DPpUj8Yy.mjs.map +0 -1
  106. package/lib/chunks/index-DSAXdrgU.mjs.map +0 -1
  107. package/lib/chunks/index-DveR0rOk.mjs.map +0 -1
  108. package/lib/chunks/index-QfO-sASN.mjs +0 -152
  109. package/lib/chunks/index-QfO-sASN.mjs.map +0 -1
  110. package/lib/chunks/index-h9bO9wmq.mjs +0 -99
  111. package/lib/chunks/index-h9bO9wmq.mjs.map +0 -1
  112. package/lib/chunks/index-mvSVNKlQ.mjs +0 -228
  113. package/lib/chunks/index-mvSVNKlQ.mjs.map +0 -1
  114. package/lib/chunks/index-tecGXW2S.mjs.map +0 -1
@@ -0,0 +1,73 @@
1
+ class g {
2
+ async needsDecode(a) {
3
+ return a === "image/vnd.adobe.photoshop";
4
+ }
5
+ async decode(a, r) {
6
+ var n;
7
+ try {
8
+ const t = await import("ag-psd"), o = t.readPsd || ((n = t.default) == null ? void 0 : n.readPsd);
9
+ if (typeof o != "function")
10
+ throw new Error("ag-psd 库 API 不符合预期");
11
+ const i = a instanceof Blob ? await a.arrayBuffer() : a, e = o(i, {
12
+ skipLayerImageData: !0,
13
+ // 不需要单独图层数据
14
+ skipCompositeImageData: !1,
15
+ // 需要合并预览
16
+ skipThumbnail: !1
17
+ }), h = e.canvas;
18
+ if (!h) {
19
+ if (e.imageData && e.width && e.height) {
20
+ const s = document.createElement("canvas");
21
+ s.width = e.width, s.height = e.height;
22
+ const m = s.getContext("2d");
23
+ if (!m) throw new Error("无法创建 Canvas 2D 上下文");
24
+ const c = new ImageData(
25
+ new Uint8ClampedArray(e.imageData.data || e.imageData),
26
+ e.width,
27
+ e.height
28
+ );
29
+ return m.putImageData(c, 0, 0), await u(s, (r == null ? void 0 : r.outputFormat) || "image/png");
30
+ }
31
+ throw new Error("PSD 文件不包含合并的预览图像(可能仅含图层数据)");
32
+ }
33
+ return await u(h, (r == null ? void 0 : r.outputFormat) || "image/png");
34
+ } catch (t) {
35
+ throw new Error(`PSD 解码失败: ${(t == null ? void 0 : t.message) || "未知错误"}`);
36
+ }
37
+ }
38
+ async getMetadata(a) {
39
+ var r;
40
+ try {
41
+ const n = await import("ag-psd"), t = n.readPsd || ((r = n.default) == null ? void 0 : r.readPsd);
42
+ if (typeof t != "function")
43
+ return { format: "psd" };
44
+ const o = a instanceof Blob ? await a.arrayBuffer() : a, i = t(o, {
45
+ skipLayerImageData: !0,
46
+ skipCompositeImageData: !0,
47
+ skipThumbnail: !0
48
+ });
49
+ return {
50
+ format: "psd",
51
+ width: i.width,
52
+ height: i.height
53
+ };
54
+ } catch {
55
+ return { format: "psd" };
56
+ }
57
+ }
58
+ }
59
+ function u(d, a) {
60
+ return new Promise((r, n) => {
61
+ d.toBlob(
62
+ (t) => {
63
+ t ? r(t) : n(new Error("PSD Canvas 转换为 Blob 失败"));
64
+ },
65
+ a
66
+ );
67
+ });
68
+ }
69
+ const p = new g();
70
+ export {
71
+ p as default
72
+ };
73
+ //# sourceMappingURL=psdLoader-Doxw3mWm-DVOGFSlh.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psdLoader-Doxw3mWm-DVOGFSlh.mjs","sources":["../../../file-preview-core/lib/psdLoader-Doxw3mWm.js"],"sourcesContent":["class g {\n async needsDecode(t) {\n return t === \"image/vnd.adobe.photoshop\";\n }\n async decode(t, e) {\n var s;\n try {\n const a = await import(\"ag-psd\"), n = a.readPsd || ((s = a.default) == null ? void 0 : s.readPsd);\n if (typeof n != \"function\")\n throw new Error(\"ag-psd 库 API 不符合预期\");\n const d = t instanceof Blob ? await t.arrayBuffer() : t, r = n(d, {\n skipLayerImageData: !0,\n // 不需要单独图层数据\n skipCompositeImageData: !1,\n // 需要合并预览\n skipThumbnail: !1\n }), c = r.canvas;\n if (!c) {\n if (r.imageData && r.width && r.height) {\n const o = document.createElement(\"canvas\");\n o.width = r.width, o.height = r.height;\n const u = o.getContext(\"2d\");\n if (!u) throw new Error(\"无法创建 Canvas 2D 上下文\");\n const h = new ImageData(\n new Uint8ClampedArray(r.imageData.data || r.imageData),\n r.width,\n r.height\n );\n return u.putImageData(h, 0, 0), await m(o, (e == null ? void 0 : e.outputFormat) || \"image/png\");\n }\n throw new Error(\"PSD 文件不包含合并的预览图像(可能仅含图层数据)\");\n }\n return await m(c, (e == null ? void 0 : e.outputFormat) || \"image/png\");\n } catch (a) {\n throw new Error(`PSD 解码失败: ${(a == null ? void 0 : a.message) || \"未知错误\"}`);\n }\n }\n async getMetadata(t) {\n var e;\n try {\n const s = await import(\"ag-psd\"), a = s.readPsd || ((e = s.default) == null ? void 0 : e.readPsd);\n if (typeof a != \"function\")\n return { format: \"psd\" };\n const n = t instanceof Blob ? await t.arrayBuffer() : t, d = a(n, {\n skipLayerImageData: !0,\n skipCompositeImageData: !0,\n skipThumbnail: !0\n });\n return {\n format: \"psd\",\n width: d.width,\n height: d.height\n };\n } catch {\n return { format: \"psd\" };\n }\n }\n}\nfunction m(i, t) {\n return new Promise((e, s) => {\n i.toBlob(\n (a) => {\n a ? e(a) : s(new Error(\"PSD Canvas 转换为 Blob 失败\"));\n },\n t\n );\n });\n}\nconst f = new g();\nexport {\n f as default\n};\n//# sourceMappingURL=psdLoader-Doxw3mWm.js.map\n"],"names":["t","e","s","a","n","d","r","c","o","u","h","m","i","f"],"mappings":"AAAA,MAAM,EAAE;AAAA,EACN,MAAM,YAAYA,GAAG;AACnB,WAAOA,MAAM;AAAA,EACf;AAAA,EACA,MAAM,OAAOA,GAAGC,GAAG;AACjB,QAAIC;AACJ,QAAI;AACF,YAAMC,IAAI,MAAM,OAAO,QAAQ,GAAGC,IAAID,EAAE,aAAaD,IAAIC,EAAE,YAAY,OAAO,SAASD,EAAE;AACzF,UAAI,OAAOE,KAAK;AACd,cAAM,IAAI,MAAM,oBAAoB;AACtC,YAAMC,IAAIL,aAAa,OAAO,MAAMA,EAAE,YAAW,IAAKA,GAAGM,IAAIF,EAAEC,GAAG;AAAA,QAChE,oBAAoB;AAAA;AAAA,QAEpB,wBAAwB;AAAA;AAAA,QAExB,eAAe;AAAA,MACvB,CAAO,GAAGE,IAAID,EAAE;AACV,UAAI,CAACC,GAAG;AACN,YAAID,EAAE,aAAaA,EAAE,SAASA,EAAE,QAAQ;AACtC,gBAAME,IAAI,SAAS,cAAc,QAAQ;AACzC,UAAAA,EAAE,QAAQF,EAAE,OAAOE,EAAE,SAASF,EAAE;AAChC,gBAAMG,IAAID,EAAE,WAAW,IAAI;AAC3B,cAAI,CAACC,EAAG,OAAM,IAAI,MAAM,oBAAoB;AAC5C,gBAAMC,IAAI,IAAI;AAAA,YACZ,IAAI,kBAAkBJ,EAAE,UAAU,QAAQA,EAAE,SAAS;AAAA,YACrDA,EAAE;AAAA,YACFA,EAAE;AAAA,UACd;AACU,iBAAOG,EAAE,aAAaC,GAAG,GAAG,CAAC,GAAG,MAAMC,EAAEH,IAAIP,KAAK,OAAO,SAASA,EAAE,iBAAiB,WAAW;AAAA,QACjG;AACA,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAC9C;AACA,aAAO,MAAMU,EAAEJ,IAAIN,KAAK,OAAO,SAASA,EAAE,iBAAiB,WAAW;AAAA,IACxE,SAASE,GAAG;AACV,YAAM,IAAI,MAAM,cAAcA,KAAK,OAAO,SAASA,EAAE,YAAY,MAAM,EAAE;AAAA,IAC3E;AAAA,EACF;AAAA,EACA,MAAM,YAAYH,GAAG;AACnB,QAAIC;AACJ,QAAI;AACF,YAAMC,IAAI,MAAM,OAAO,QAAQ,GAAGC,IAAID,EAAE,aAAaD,IAAIC,EAAE,YAAY,OAAO,SAASD,EAAE;AACzF,UAAI,OAAOE,KAAK;AACd,eAAO,EAAE,QAAQ,MAAK;AACxB,YAAMC,IAAIJ,aAAa,OAAO,MAAMA,EAAE,YAAW,IAAKA,GAAGK,IAAIF,EAAEC,GAAG;AAAA,QAChE,oBAAoB;AAAA,QACpB,wBAAwB;AAAA,QACxB,eAAe;AAAA,MACvB,CAAO;AACD,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,OAAOC,EAAE;AAAA,QACT,QAAQA,EAAE;AAAA,MAClB;AAAA,IACI,QAAQ;AACN,aAAO,EAAE,QAAQ,MAAK;AAAA,IACxB;AAAA,EACF;AACF;AACA,SAASM,EAAEC,GAAGZ,GAAG;AACf,SAAO,IAAI,QAAQ,CAACC,GAAGC,MAAM;AAC3B,IAAAU,EAAE;AAAA,MACA,CAACT,MAAM;AACL,QAAAA,IAAIF,EAAEE,CAAC,IAAID,EAAE,IAAI,MAAM,wBAAwB,CAAC;AAAA,MAClD;AAAA,MACAF;AAAA,IACN;AAAA,EACE,CAAC;AACH;AACK,MAACa,IAAI,IAAI,EAAC;"}
@@ -0,0 +1,82 @@
1
+ const p = /* @__PURE__ */ new Set([
2
+ "image/x-canon-cr2",
3
+ "image/x-nikon-nef",
4
+ "image/x-sony-arw",
5
+ "image/x-adobe-dng",
6
+ "image/x-fuji-raf",
7
+ "image/x-olympus-orf"
8
+ ]);
9
+ async function x(a) {
10
+ const e = new Uint8Array(a);
11
+ if (e.length < 8) return null;
12
+ let l;
13
+ if (e[0] === 73 && e[1] === 73)
14
+ l = !0;
15
+ else if (e[0] === 77 && e[1] === 77)
16
+ l = !1;
17
+ else
18
+ return y(e);
19
+ const r = new DataView(a), t = (f) => r.getUint16(f, l), o = (f) => r.getUint32(f, l);
20
+ if (t(2) !== 42)
21
+ return y(e);
22
+ let n = o(4), i = 0, s = 0;
23
+ for (let f = 0; f < 10 && n !== 0 && n + 2 < e.length; f++) {
24
+ const h = t(n);
25
+ let c = 0, g = 0;
26
+ for (let u = 0; u < h; u++) {
27
+ const w = n + 2 + u * 12;
28
+ if (w + 12 > e.length) break;
29
+ const d = t(w), b = w + 8;
30
+ d === 513 ? c = o(b) : d === 514 && (g = o(b));
31
+ }
32
+ c > 0 && g > s && c + g <= e.length && (i = c, s = g);
33
+ const m = n + 2 + h * 12;
34
+ if (m + 4 > e.length) break;
35
+ n = o(m);
36
+ }
37
+ return i > 0 && s > 0 ? new Blob([e.slice(i, i + s)], {
38
+ type: "image/jpeg"
39
+ }) : y(e);
40
+ }
41
+ function y(a) {
42
+ let e = -1, l = -1, r = 0;
43
+ for (let t = 0; t < a.length - 4; t++)
44
+ if (a[t] === 255 && a[t + 1] === 216 && a[t + 2] === 255) {
45
+ const o = t;
46
+ for (let n = t + 2; n < a.length - 1; n++)
47
+ if (a[n] === 255 && a[n + 1] === 217) {
48
+ const i = n + 2 - o;
49
+ i > r && (e = o, l = n + 2, r = i), t = n + 2;
50
+ break;
51
+ }
52
+ }
53
+ return e >= 0 && l > e ? new Blob([a.slice(e, l)], { type: "image/jpeg" }) : null;
54
+ }
55
+ class j {
56
+ async needsDecode(e) {
57
+ return p.has(e);
58
+ }
59
+ async decode(e, l) {
60
+ const r = e instanceof Blob ? await e.arrayBuffer() : e;
61
+ if (!(l != null && l.fullQuality)) {
62
+ const o = await x(r);
63
+ if (o)
64
+ return o;
65
+ throw new Error("未在 RAW 文件中找到嵌入的预览图像(该文件可能已被剥离 JPEG 预览)。");
66
+ }
67
+ const t = await x(r);
68
+ if (t)
69
+ return t;
70
+ throw new Error("完整 RAW 解码暂未实现,且无法提取嵌入预览图。");
71
+ }
72
+ async getMetadata(e) {
73
+ return {
74
+ format: "raw"
75
+ };
76
+ }
77
+ }
78
+ const k = new j();
79
+ export {
80
+ k as default
81
+ };
82
+ //# sourceMappingURL=rawLoader-0mLvxCNp-CJmERiK7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rawLoader-0mLvxCNp-CJmERiK7.mjs","sources":["../../../file-preview-core/lib/rawLoader-0mLvxCNp.js"],"sourcesContent":["const p = /* @__PURE__ */ new Set([\n \"image/x-canon-cr2\",\n \"image/x-nikon-nef\",\n \"image/x-sony-arw\",\n \"image/x-adobe-dng\",\n \"image/x-fuji-raf\",\n \"image/x-olympus-orf\"\n]);\nasync function b(r) {\n const e = new Uint8Array(r);\n if (e.length < 8) return null;\n let a;\n if (e[0] === 73 && e[1] === 73)\n a = !0;\n else if (e[0] === 77 && e[1] === 77)\n a = !1;\n else\n return w(e);\n const l = new DataView(r), t = (o) => l.getUint16(o, a), f = (o) => l.getUint32(o, a);\n if (t(2) !== 42)\n return w(e);\n let n = f(4), i = 0, s = 0;\n for (let o = 0; o < 10 && n !== 0 && n + 2 < e.length; o++) {\n const h = t(n);\n let c = 0, g = 0;\n for (let u = 0; u < h; u++) {\n const d = n + 2 + u * 12;\n if (d + 12 > e.length) break;\n const j = t(d), x = d + 8;\n j === 513 ? c = f(x) : j === 514 && (g = f(x));\n }\n c > 0 && g > s && c + g <= e.length && (i = c, s = g);\n const m = n + 2 + h * 12;\n if (m + 4 > e.length) break;\n n = f(m);\n }\n return i > 0 && s > 0 ? new Blob([e.slice(i, i + s)], {\n type: \"image/jpeg\"\n }) : w(e);\n}\nfunction w(r) {\n let e = -1, a = -1, l = 0;\n for (let t = 0; t < r.length - 4; t++)\n if (r[t] === 255 && r[t + 1] === 216 && r[t + 2] === 255) {\n const f = t;\n for (let n = t + 2; n < r.length - 1; n++)\n if (r[n] === 255 && r[n + 1] === 217) {\n const i = n + 2 - f;\n i > l && (e = f, a = n + 2, l = i), t = n + 2;\n break;\n }\n }\n return e >= 0 && a > e ? new Blob([r.slice(e, a)], { type: \"image/jpeg\" }) : null;\n}\nclass y {\n async needsDecode(e) {\n return p.has(e);\n }\n async decode(e, a) {\n const l = e instanceof Blob ? await e.arrayBuffer() : e;\n if (!(a != null && a.fullQuality)) {\n const f = await b(l);\n if (f)\n return f;\n throw new Error(\"未在 RAW 文件中找到嵌入的预览图像(该文件可能已被剥离 JPEG 预览)。\");\n }\n const t = await b(l);\n if (t)\n return t;\n throw new Error(\"完整 RAW 解码暂未实现,且无法提取嵌入预览图。\");\n }\n async getMetadata(e) {\n return {\n format: \"raw\"\n };\n }\n}\nconst E = new y();\nexport {\n E as default\n};\n//# sourceMappingURL=rawLoader-0mLvxCNp.js.map\n"],"names":["b","r","a","w","l","o","f","d","j","x","y","E"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ class m {
2
+ /**
3
+ * TIFF 浏览器均不原生支持(除 Safari 部分版本),始终需要解码
4
+ */
5
+ async needsDecode(t) {
6
+ return t === "image/tiff";
7
+ }
8
+ /**
9
+ * 解码 TIFF 文件为 PNG Blob
10
+ */
11
+ async decode(t, n) {
12
+ try {
13
+ const e = await import("utif"), r = t instanceof Blob ? await t.arrayBuffer() : t, a = e.decode(r);
14
+ if (a.length === 0)
15
+ throw new Error("TIFF 文件不包含任何图像");
16
+ const f = Math.max(0, Math.min(((n == null ? void 0 : n.page) ?? 1) - 1, a.length - 1)), o = a[f];
17
+ e.decodeImage(r, o);
18
+ const g = e.toRGBA8(o), c = o.width, d = o.height, i = document.createElement("canvas");
19
+ i.width = c, i.height = d;
20
+ const h = i.getContext("2d");
21
+ if (!h)
22
+ throw new Error("无法创建 Canvas 2D 上下文");
23
+ const l = new ImageData(new Uint8ClampedArray(g.buffer), c, d);
24
+ return h.putImageData(l, 0, 0), new Promise((w, u) => {
25
+ i.toBlob(
26
+ (s) => {
27
+ s ? w(s) : u(new Error("TIFF Canvas 转换为 PNG 失败"));
28
+ },
29
+ (n == null ? void 0 : n.outputFormat) || "image/png"
30
+ );
31
+ });
32
+ } catch (e) {
33
+ throw new Error(`TIFF 解码失败: ${(e == null ? void 0 : e.message) || "未知错误"}`);
34
+ }
35
+ }
36
+ /**
37
+ * 获取 TIFF 元数据(包括页数)
38
+ */
39
+ async getMetadata(t) {
40
+ try {
41
+ const n = await import("utif"), e = t instanceof Blob ? await t.arrayBuffer() : t, r = n.decode(e), a = r[0];
42
+ return {
43
+ format: "tiff",
44
+ pageCount: r.length,
45
+ width: a == null ? void 0 : a.width,
46
+ height: a == null ? void 0 : a.height
47
+ };
48
+ } catch {
49
+ return {
50
+ format: "tiff",
51
+ pageCount: 1
52
+ };
53
+ }
54
+ }
55
+ }
56
+ const y = new m();
57
+ export {
58
+ y as default
59
+ };
60
+ //# sourceMappingURL=tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tiffLoader-CTFKVLqJ-B84NfwhR.mjs","sources":["../../../file-preview-core/lib/tiffLoader-CTFKVLqJ.js"],"sourcesContent":["class y {\n /**\n * TIFF 浏览器均不原生支持(除 Safari 部分版本),始终需要解码\n */\n async needsDecode(a) {\n return a === \"image/tiff\";\n }\n /**\n * 解码 TIFF 文件为 PNG Blob\n */\n async decode(a, e) {\n try {\n const r = await import(\"utif\"), n = a instanceof Blob ? await a.arrayBuffer() : a, t = r.decode(n);\n if (t.length === 0)\n throw new Error(\"TIFF 文件不包含任何图像\");\n const f = Math.max(0, Math.min(((e == null ? void 0 : e.page) ?? 1) - 1, t.length - 1)), c = t[f];\n r.decodeImage(n, c);\n const w = r.toRGBA8(c), h = c.width, d = c.height, o = document.createElement(\"canvas\");\n o.width = h, o.height = d;\n const g = o.getContext(\"2d\");\n if (!g)\n throw new Error(\"无法创建 Canvas 2D 上下文\");\n const i = new ImageData(new Uint8ClampedArray(w.buffer), h, d);\n return g.putImageData(i, 0, 0), new Promise((m, u) => {\n o.toBlob(\n (s) => {\n s ? m(s) : u(new Error(\"TIFF Canvas 转换为 PNG 失败\"));\n },\n (e == null ? void 0 : e.outputFormat) || \"image/png\"\n );\n });\n } catch (r) {\n throw new Error(`TIFF 解码失败: ${(r == null ? void 0 : r.message) || \"未知错误\"}`);\n }\n }\n /**\n * 获取 TIFF 元数据(包括页数)\n */\n async getMetadata(a) {\n try {\n const e = await import(\"utif\"), r = a instanceof Blob ? await a.arrayBuffer() : a, n = e.decode(r), t = n[0];\n return {\n format: \"tiff\",\n pageCount: n.length,\n width: t == null ? void 0 : t.width,\n height: t == null ? void 0 : t.height\n };\n } catch {\n return {\n format: \"tiff\",\n pageCount: 1\n };\n }\n }\n}\nconst B = new y();\nexport {\n B as default\n};\n//# sourceMappingURL=tiffLoader-CTFKVLqJ.js.map\n"],"names":["y","a","e","r","n","t","c","w","h","o","g","i","m","B"],"mappings":"AAAA,MAAMA,EAAE;AAAA;AAAA;AAAA;AAAA,EAIN,MAAM,YAAYC,GAAG;AACnB,WAAOA,MAAM;AAAA,EACf;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,OAAOA,GAAGC,GAAG;AACjB,QAAI;AACF,YAAMC,IAAI,MAAM,OAAO,MAAM,GAAGC,IAAIH,aAAa,OAAO,MAAMA,EAAE,YAAW,IAAKA,GAAGI,IAAIF,EAAE,OAAOC,CAAC;AACjG,UAAIC,EAAE,WAAW;AACf,cAAM,IAAI,MAAM,gBAAgB;AAClC,YAAM,IAAI,KAAK,IAAI,GAAG,KAAK,MAAMH,KAAK,OAAO,SAASA,EAAE,SAAS,KAAK,GAAGG,EAAE,SAAS,CAAC,CAAC,GAAGC,IAAID,EAAE,CAAC;AAChG,MAAAF,EAAE,YAAYC,GAAGE,CAAC;AAClB,YAAMC,IAAIJ,EAAE,QAAQG,CAAC,GAAGE,IAAIF,EAAE,OAAO,IAAIA,EAAE,QAAQG,IAAI,SAAS,cAAc,QAAQ;AACtF,MAAAA,EAAE,QAAQD,GAAGC,EAAE,SAAS;AACxB,YAAMC,IAAID,EAAE,WAAW,IAAI;AAC3B,UAAI,CAACC;AACH,cAAM,IAAI,MAAM,oBAAoB;AACtC,YAAMC,IAAI,IAAI,UAAU,IAAI,kBAAkBJ,EAAE,MAAM,GAAGC,GAAG,CAAC;AAC7D,aAAOE,EAAE,aAAaC,GAAG,GAAG,CAAC,GAAG,IAAI,QAAQ,CAACC,GAAG,MAAM;AACpD,QAAAH,EAAE;AAAA,UACA,CAAC,MAAM;AACL,gBAAIG,EAAE,CAAC,IAAI,EAAE,IAAI,MAAM,wBAAwB,CAAC;AAAA,UAClD;AAAA,WACCV,KAAK,OAAO,SAASA,EAAE,iBAAiB;AAAA,QACnD;AAAA,MACM,CAAC;AAAA,IACH,SAASC,GAAG;AACV,YAAM,IAAI,MAAM,eAAeA,KAAK,OAAO,SAASA,EAAE,YAAY,MAAM,EAAE;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,YAAYF,GAAG;AACnB,QAAI;AACF,YAAMC,IAAI,MAAM,OAAO,MAAM,GAAGC,IAAIF,aAAa,OAAO,MAAMA,EAAE,YAAW,IAAKA,GAAGG,IAAIF,EAAE,OAAOC,CAAC,GAAGE,IAAID,EAAE,CAAC;AAC3G,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,WAAWA,EAAE;AAAA,QACb,OAAOC,KAAK,OAAO,SAASA,EAAE;AAAA,QAC9B,QAAQA,KAAK,OAAO,SAASA,EAAE;AAAA,MACvC;AAAA,IACI,QAAQ;AACN,aAAO;AAAA,QACL,QAAQ;AAAA,QACR,WAAW;AAAA,MACnB;AAAA,IACI;AAAA,EACF;AACF;AACK,MAACQ,IAAI,IAAIb,EAAC;"}
@@ -1,6 +1,6 @@
1
1
  import { useState as l, useEffect as f } from "react";
2
2
  import { codeToHtml as a } from "shiki";
3
- import { b as n } from "./index-CGNWXFy3.mjs";
3
+ import { b as n } from "./index-CuAALtwC.mjs";
4
4
  function p(s, o) {
5
5
  const r = n(), [u, i] = l(""), [h, e] = l(!0);
6
6
  return f(() => {
@@ -20,4 +20,4 @@ function p(s, o) {
20
20
  export {
21
21
  p as u
22
22
  };
23
- //# sourceMappingURL=useShikiHighlight-DHFYu0BU.mjs.map
23
+ //# sourceMappingURL=useShikiHighlight-ClbUXJ2p.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useShikiHighlight-DHFYu0BU.mjs","sources":["../../src/hooks/useShikiHighlight.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { codeToHtml } from 'shiki';\nimport { useResolvedTheme } from '../ThemeContext';\n\n/**\n * 用 shiki 把代码高亮成 HTML(与 vue-file-preview 同引擎、同主题,保证两端视觉一致)。\n *\n * - dark 主题用 `dark-plus`(VSCode Dark Plus)\n * - light 主题用 `github-light`(GitHub Light)\n *\n * shiki 输出的 <pre> 自带 inline 背景/前景色,主题切换时必须重新高亮,\n * 因此 resolvedTheme 进入依赖数组。\n *\n * @returns\n * - `html`: 高亮后的 HTML 字符串(失败或加载中为 '')\n * - `loading`: 是否正在高亮\n */\nexport function useShikiHighlight(code: string, lang: string): { html: string; loading: boolean } {\n const resolvedTheme = useResolvedTheme();\n const [html, setHtml] = useState('');\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n codeToHtml(code, {\n lang,\n theme: resolvedTheme === 'light' ? 'github-light' : 'dark-plus',\n })\n .then((out) => {\n if (!cancelled) {\n setHtml(out);\n setLoading(false);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setHtml('');\n setLoading(false);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [code, lang, resolvedTheme]);\n\n return { html, loading };\n}\n"],"names":["useShikiHighlight","code","lang","resolvedTheme","useResolvedTheme","html","setHtml","useState","loading","setLoading","useEffect","cancelled","codeToHtml","out"],"mappings":";;;AAiBO,SAASA,EAAkBC,GAAcC,GAAkD;AAChG,QAAMC,IAAgBC,EAAA,GAChB,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAE,GAC7B,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAI;AAE3C,SAAAG,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,WAAAF,EAAW,EAAI,GACfG,EAAWX,GAAM;AAAA,MACf,MAAAC;AAAA,MACA,OAAOC,MAAkB,UAAU,iBAAiB;AAAA,IAAA,CACrD,EACE,KAAK,CAACU,MAAQ;AACb,MAAKF,MACHL,EAAQO,CAAG,GACXJ,EAAW,EAAK;AAAA,IAEpB,CAAC,EACA,MAAM,MAAM;AACX,MAAKE,MACHL,EAAQ,EAAE,GACVG,EAAW,EAAK;AAAA,IAEpB,CAAC,GACI,MAAM;AACX,MAAAE,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACV,GAAMC,GAAMC,CAAa,CAAC,GAEvB,EAAE,MAAAE,GAAM,SAAAG,EAAA;AACjB;"}
1
+ {"version":3,"file":"useShikiHighlight-ClbUXJ2p.mjs","sources":["../../src/hooks/useShikiHighlight.ts"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { codeToHtml } from 'shiki';\nimport { useResolvedTheme } from '../ThemeContext';\n\n/**\n * 用 shiki 把代码高亮成 HTML(与 vue-file-preview 同引擎、同主题,保证两端视觉一致)。\n *\n * - dark 主题用 `dark-plus`(VSCode Dark Plus)\n * - light 主题用 `github-light`(GitHub Light)\n *\n * shiki 输出的 <pre> 自带 inline 背景/前景色,主题切换时必须重新高亮,\n * 因此 resolvedTheme 进入依赖数组。\n *\n * @returns\n * - `html`: 高亮后的 HTML 字符串(失败或加载中为 '')\n * - `loading`: 是否正在高亮\n */\nexport function useShikiHighlight(code: string, lang: string): { html: string; loading: boolean } {\n const resolvedTheme = useResolvedTheme();\n const [html, setHtml] = useState('');\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n codeToHtml(code, {\n lang,\n theme: resolvedTheme === 'light' ? 'github-light' : 'dark-plus',\n })\n .then((out) => {\n if (!cancelled) {\n setHtml(out);\n setLoading(false);\n }\n })\n .catch(() => {\n if (!cancelled) {\n setHtml('');\n setLoading(false);\n }\n });\n return () => {\n cancelled = true;\n };\n }, [code, lang, resolvedTheme]);\n\n return { html, loading };\n}\n"],"names":["useShikiHighlight","code","lang","resolvedTheme","useResolvedTheme","html","setHtml","useState","loading","setLoading","useEffect","cancelled","codeToHtml","out"],"mappings":";;;AAiBO,SAASA,EAAkBC,GAAcC,GAAkD;AAChG,QAAMC,IAAgBC,EAAA,GAChB,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAE,GAC7B,CAACC,GAASC,CAAU,IAAIF,EAAS,EAAI;AAE3C,SAAAG,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,WAAAF,EAAW,EAAI,GACfG,EAAWX,GAAM;AAAA,MACf,MAAAC;AAAA,MACA,OAAOC,MAAkB,UAAU,iBAAiB;AAAA,IAAA,CACrD,EACE,KAAK,CAACU,MAAQ;AACb,MAAKF,MACHL,EAAQO,CAAG,GACXJ,EAAW,EAAK;AAAA,IAEpB,CAAC,EACA,MAAM,MAAM;AACX,MAAKE,MACHL,EAAQ,EAAE,GACVG,EAAW,EAAK;AAAA,IAEpB,CAAC,GACI,MAAM;AACX,MAAAE,IAAY;AAAA,IACd;AAAA,EACF,GAAG,CAACV,GAAMC,GAAMC,CAAa,CAAC,GAEvB,EAAE,MAAAE,GAAM,SAAAG,EAAA;AACjB;"}