svelte-pdf-view 0.1.10 → 0.1.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.
@@ -166,7 +166,7 @@
166
166
  viewerState.searchTotal = 0;
167
167
  }
168
168
  },
169
- download: () => {} // Download is handled by PdfViewer, not renderer
169
+ download: async () => {} // Download is handled by PdfViewer, not renderer
170
170
  };
171
171
 
172
172
  onMount(async () => {
@@ -52,46 +52,44 @@
52
52
  let rendererActions: PdfViewerActions | null = null;
53
53
 
54
54
  // Download helper function
55
- function downloadPdf(filenameOverride?: string) {
55
+ async function downloadPdf(filenameOverride?: string) {
56
56
  const downloadName =
57
57
  filenameOverride ||
58
58
  downloadFilename ||
59
59
  (typeof src === 'string' ? src.split('/').pop() : 'document.pdf') ||
60
60
  'document.pdf';
61
61
 
62
+ let blob: Blob;
63
+
62
64
  if (typeof src === 'string') {
63
- // URL - fetch and download
64
- const link = document.createElement('a');
65
- link.href = src;
66
- link.download = downloadName;
67
- link.click();
65
+ // URL - fetch first to handle cross-origin URLs (e.g., Firebase Storage)
66
+ // The download attribute is ignored for cross-origin URLs
67
+ try {
68
+ const response = await fetch(src);
69
+ blob = await response.blob();
70
+ } catch {
71
+ // Fallback for same-origin URLs if fetch fails
72
+ const link = document.createElement('a');
73
+ link.href = src;
74
+ link.download = downloadName;
75
+ link.click();
76
+ return;
77
+ }
68
78
  } else if (src instanceof Blob) {
69
- // Blob - create object URL
70
- const url = URL.createObjectURL(src);
71
- const link = document.createElement('a');
72
- link.href = url;
73
- link.download = downloadName;
74
- link.click();
75
- URL.revokeObjectURL(url);
79
+ blob = src;
76
80
  } else if (src instanceof ArrayBuffer) {
77
- // ArrayBuffer
78
- const blob = new Blob([src], { type: 'application/pdf' });
79
- const url = URL.createObjectURL(blob);
80
- const link = document.createElement('a');
81
- link.href = url;
82
- link.download = downloadName;
83
- link.click();
84
- URL.revokeObjectURL(url);
81
+ blob = new Blob([src], { type: 'application/pdf' });
85
82
  } else {
86
- // Uint8Array - create a copy as ArrayBuffer
87
- const blob = new Blob([new Uint8Array(src)], { type: 'application/pdf' });
88
- const url = URL.createObjectURL(blob);
89
- const link = document.createElement('a');
90
- link.href = url;
91
- link.download = downloadName;
92
- link.click();
93
- URL.revokeObjectURL(url);
83
+ // Uint8Array
84
+ blob = new Blob([new Uint8Array(src)], { type: 'application/pdf' });
94
85
  }
86
+
87
+ const url = URL.createObjectURL(blob);
88
+ const link = document.createElement('a');
89
+ link.href = url;
90
+ link.download = downloadName;
91
+ link.click();
92
+ URL.revokeObjectURL(url);
95
93
  }
96
94
 
97
95
  // Actions that proxy to the renderer
@@ -23,7 +23,7 @@ export interface PdfViewerActions {
23
23
  searchNext: () => void;
24
24
  searchPrevious: () => void;
25
25
  clearSearch: () => void;
26
- download: (filename?: string) => void;
26
+ download: (filename?: string) => Promise<void>;
27
27
  }
28
28
  export interface PdfViewerContext {
29
29
  state: PdfViewerState;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelte-pdf-view",
3
- "version": "0.1.10",
3
+ "version": "0.1.11",
4
4
  "description": "A modern, modular PDF viewer component for Svelte 5. Built on PDF.js with TypeScript support",
5
5
  "author": "Louis Li",
6
6
  "license": "Apache-2.0",