@eternalheart/react-file-preview 1.3.9 → 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 (124) hide show
  1. package/README.md +10 -0
  2. package/README.zh-CN.md +10 -0
  3. package/lib/FilePreviewContent.d.ts.map +1 -1
  4. package/lib/RequestContext.d.ts +1 -1
  5. package/lib/RequestContext.d.ts.map +1 -1
  6. package/lib/chunks/RendererError-BH6fzLrN.mjs +15 -0
  7. package/lib/chunks/RendererError-BH6fzLrN.mjs.map +1 -0
  8. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs +56 -0
  9. package/lib/chunks/avifLoader-BP3fgcMm-BnpxLhxp.mjs.map +1 -0
  10. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs +37 -0
  11. package/lib/chunks/heicLoader-CH_raQNn-1fBLaICM.mjs.map +1 -0
  12. package/lib/chunks/index-B57rEPin.mjs +54 -0
  13. package/lib/chunks/index-B57rEPin.mjs.map +1 -0
  14. package/lib/chunks/index-BCuRRLYt.mjs +222 -0
  15. package/lib/chunks/index-BCuRRLYt.mjs.map +1 -0
  16. package/lib/chunks/{index-BSD3w5eG.mjs → index-BJ6vTNxc.mjs} +76 -75
  17. package/lib/chunks/index-BJ6vTNxc.mjs.map +1 -0
  18. package/lib/chunks/index-BYdqrqnR.mjs +161 -0
  19. package/lib/chunks/index-BYdqrqnR.mjs.map +1 -0
  20. package/lib/chunks/index-BiyghBxu.mjs +136 -0
  21. package/lib/chunks/index-BiyghBxu.mjs.map +1 -0
  22. package/lib/chunks/{index-DdOEWhrk.mjs → index-C8CyS_sj.mjs} +66 -63
  23. package/lib/chunks/index-C8CyS_sj.mjs.map +1 -0
  24. package/lib/chunks/index-C8OrFLd5.mjs +594 -0
  25. package/lib/chunks/index-C8OrFLd5.mjs.map +1 -0
  26. package/lib/chunks/{index-DGuiWJr7.mjs → index-CCkHAeLh.mjs} +40 -37
  27. package/lib/chunks/index-CCkHAeLh.mjs.map +1 -0
  28. package/lib/chunks/index-CdmkF0CO.mjs +105 -0
  29. package/lib/chunks/index-CdmkF0CO.mjs.map +1 -0
  30. package/lib/chunks/index-CuAALtwC.mjs +2299 -0
  31. package/lib/chunks/index-CuAALtwC.mjs.map +1 -0
  32. package/lib/chunks/index-D660ENHx.mjs +114 -0
  33. package/lib/chunks/index-D660ENHx.mjs.map +1 -0
  34. package/lib/chunks/{index-DV5Jd7Qe.mjs → index-DBEG73K1.mjs} +79 -78
  35. package/lib/chunks/index-DBEG73K1.mjs.map +1 -0
  36. package/lib/chunks/index-DaFlk9dd.mjs +13097 -0
  37. package/lib/chunks/index-DaFlk9dd.mjs.map +1 -0
  38. package/lib/chunks/index-_mP0FkqE.mjs +113 -0
  39. package/lib/chunks/index-_mP0FkqE.mjs.map +1 -0
  40. package/lib/chunks/{index-U3w45GW8.mjs → index-nLTQXCV7.mjs} +84 -82
  41. package/lib/chunks/index-nLTQXCV7.mjs.map +1 -0
  42. package/lib/chunks/index-nVblatyi.mjs +55 -0
  43. package/lib/chunks/index-nVblatyi.mjs.map +1 -0
  44. package/lib/chunks/{index-zEVVgWCH.mjs → index-ow-nGpuu.mjs} +99 -98
  45. package/lib/chunks/index-ow-nGpuu.mjs.map +1 -0
  46. package/lib/chunks/index-qOC5xQyK.mjs +96 -0
  47. package/lib/chunks/index-qOC5xQyK.mjs.map +1 -0
  48. package/lib/chunks/index-rUfsiVR8.mjs +12335 -0
  49. package/lib/chunks/index-rUfsiVR8.mjs.map +1 -0
  50. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs +122 -0
  51. package/lib/chunks/jp2Loader-Bn-qPMbD-Bn-qPMbD.mjs.map +1 -0
  52. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs +73 -0
  53. package/lib/chunks/psdLoader-Doxw3mWm-DVOGFSlh.mjs.map +1 -0
  54. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs +82 -0
  55. package/lib/chunks/rawLoader-0mLvxCNp-CJmERiK7.mjs.map +1 -0
  56. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs +60 -0
  57. package/lib/chunks/tiffLoader-CTFKVLqJ-B84NfwhR.mjs.map +1 -0
  58. package/lib/chunks/{useShikiHighlight-DzEAK0S7.mjs → useShikiHighlight-ClbUXJ2p.mjs} +3 -3
  59. package/lib/chunks/{useShikiHighlight-DzEAK0S7.mjs.map → useShikiHighlight-ClbUXJ2p.mjs.map} +1 -1
  60. package/lib/index.cjs +33 -20
  61. package/lib/index.cjs.map +1 -1
  62. package/lib/index.css +1 -1
  63. package/lib/index.d.ts +1 -0
  64. package/lib/index.d.ts.map +1 -1
  65. package/lib/index.mjs +14 -13
  66. package/lib/renderers/Audio/index.d.ts.map +1 -1
  67. package/lib/renderers/Csv/index.d.ts.map +1 -1
  68. package/lib/renderers/Docx/index.d.ts.map +1 -1
  69. package/lib/renderers/Epub/index.d.ts.map +1 -1
  70. package/lib/renderers/Font/index.d.ts +6 -0
  71. package/lib/renderers/Font/index.d.ts.map +1 -0
  72. package/lib/renderers/Image/index.d.ts +2 -0
  73. package/lib/renderers/Image/index.d.ts.map +1 -1
  74. package/lib/renderers/Json/index.d.ts.map +1 -1
  75. package/lib/renderers/Markdown/index.d.ts.map +1 -1
  76. package/lib/renderers/Mobi/index.d.ts.map +1 -1
  77. package/lib/renderers/Msg/index.d.ts.map +1 -1
  78. package/lib/renderers/Pdf/index.d.ts +0 -1
  79. package/lib/renderers/Pdf/index.d.ts.map +1 -1
  80. package/lib/renderers/Pptx/index.d.ts.map +1 -1
  81. package/lib/renderers/RendererError.d.ts +8 -0
  82. package/lib/renderers/RendererError.d.ts.map +1 -0
  83. package/lib/renderers/Subtitle/index.d.ts.map +1 -1
  84. package/lib/renderers/Text/index.d.ts.map +1 -1
  85. package/lib/renderers/Video/index.d.ts +1 -0
  86. package/lib/renderers/Video/index.d.ts.map +1 -1
  87. package/lib/renderers/Xlsx/index.d.ts.map +1 -1
  88. package/lib/renderers/Xml/index.d.ts.map +1 -1
  89. package/lib/renderers/Zip/index.d.ts.map +1 -1
  90. package/lib/renderers/lazy.d.ts +2 -0
  91. package/lib/renderers/lazy.d.ts.map +1 -1
  92. package/lib/utils/pdfConfig.d.ts +2 -2
  93. package/lib/utils/pdfConfig.d.ts.map +1 -1
  94. package/package.json +14 -5
  95. package/lib/chunks/index-B-H9HQiI.mjs +0 -110
  96. package/lib/chunks/index-B-H9HQiI.mjs.map +0 -1
  97. package/lib/chunks/index-BGeyzo6u.mjs +0 -96
  98. package/lib/chunks/index-BGeyzo6u.mjs.map +0 -1
  99. package/lib/chunks/index-BNUiNUWa.mjs +0 -103
  100. package/lib/chunks/index-BNUiNUWa.mjs.map +0 -1
  101. package/lib/chunks/index-BSD3w5eG.mjs.map +0 -1
  102. package/lib/chunks/index-BcBe6KW7.mjs +0 -99
  103. package/lib/chunks/index-BcBe6KW7.mjs.map +0 -1
  104. package/lib/chunks/index-BdYkTSTt.mjs +0 -51
  105. package/lib/chunks/index-BdYkTSTt.mjs.map +0 -1
  106. package/lib/chunks/index-BqEuP_8r.mjs +0 -152
  107. package/lib/chunks/index-BqEuP_8r.mjs.map +0 -1
  108. package/lib/chunks/index-Bv93wiEK.mjs +0 -2031
  109. package/lib/chunks/index-Bv93wiEK.mjs.map +0 -1
  110. package/lib/chunks/index-CKirCT35.mjs +0 -52
  111. package/lib/chunks/index-CKirCT35.mjs.map +0 -1
  112. package/lib/chunks/index-CgV8T0G5.mjs +0 -257
  113. package/lib/chunks/index-CgV8T0G5.mjs.map +0 -1
  114. package/lib/chunks/index-D8GtNeDn.mjs +0 -116
  115. package/lib/chunks/index-D8GtNeDn.mjs.map +0 -1
  116. package/lib/chunks/index-DGuiWJr7.mjs.map +0 -1
  117. package/lib/chunks/index-DV5Jd7Qe.mjs.map +0 -1
  118. package/lib/chunks/index-DdOEWhrk.mjs.map +0 -1
  119. package/lib/chunks/index-DmepcY31.mjs +0 -96
  120. package/lib/chunks/index-DmepcY31.mjs.map +0 -1
  121. package/lib/chunks/index-U3w45GW8.mjs.map +0 -1
  122. package/lib/chunks/index-r3q2xCCI.mjs +0 -129
  123. package/lib/chunks/index-r3q2xCCI.mjs.map +0 -1
  124. package/lib/chunks/index-zEVVgWCH.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,8 +1,8 @@
1
1
  import { useState as l, useEffect as f } from "react";
2
2
  import { codeToHtml as a } from "shiki";
3
- import { c } from "./index-Bv93wiEK.mjs";
3
+ import { b as n } from "./index-CuAALtwC.mjs";
4
4
  function p(s, o) {
5
- const r = c(), [u, i] = l(""), [h, e] = l(!0);
5
+ const r = n(), [u, i] = l(""), [h, e] = l(!0);
6
6
  return f(() => {
7
7
  let t = !1;
8
8
  return e(!0), a(s, {
@@ -20,4 +20,4 @@ function p(s, o) {
20
20
  export {
21
21
  p as u
22
22
  };
23
- //# sourceMappingURL=useShikiHighlight-DzEAK0S7.mjs.map
23
+ //# sourceMappingURL=useShikiHighlight-ClbUXJ2p.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useShikiHighlight-DzEAK0S7.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;"}