@@ -3,6 +3,7 @@ import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';
33import * as pdfjsViewer from ' pdfjs-dist/web/pdf_viewer' ;
44import workerSrc from ' ./worker.js?raw' ;
55import { range } from ' ./helpers/range.js' ;
6+ import { NSpin } from ' naive-ui' ;
67
78import { storeToRefs } from ' pinia' ;
89import { onMounted , onUnmounted , ref , getCurrentInstance } from ' vue' ;
@@ -18,6 +19,7 @@ const { proxy } = getCurrentInstance();
1819const { activeZoom } = storeToRefs (superdocStore);
1920const totalPages = ref (null );
2021const viewer = ref (null );
22+ const isReady = ref (false );
2123
2224const pdfViewerConfig = proxy .$superdoc .config .pdfViewer ;
2325const textLayerMode = pdfViewerConfig .textLayerMode ?? 0 ;
@@ -79,15 +81,16 @@ async function _renderPages(pdfDocument) {
7981 const firstPage = 1 ;
8082 const pdfjsPages = await getPdfjsPages (pdfDocument, firstPage, numPages);
8183
84+ const pageContainers = [];
8285 for (const [index , page ] of pdfjsPages .entries ()) {
8386 const container = document .createElement (' div' );
8487 container .className = ' pdf-page' ;
8588 container .dataset .pageNumber = index + 1 ;
8689 container .id = ` ${ id} -page-${ index + 1 } ` ;
87- viewer .value .appendChild (container);
90+
91+ pageContainers .push (container);
8892
8993 const { width , height } = getOriginalPageSize (page);
90-
9194 const scale = 1 ;
9295 const eventBus = new pdfjsViewer.EventBus ();
9396 const pdfPageView = new pdfjsViewer.PDFPageView ({
@@ -111,6 +114,9 @@ async function _renderPages(pdfDocument) {
111114 emit (' page-loaded' , id, index, containerBounds);
112115 }
113116
117+ viewer .value .append (... pageContainers);
118+
119+ isReady .value = true ;
114120 emit (' ready' , id, viewer);
115121 } catch (error) {
116122 console .error (' Error loading PDF:' , error);
@@ -208,10 +214,13 @@ onUnmounted(() => {
208214< template>
209215 < div class = " superdoc-pdf-viewer-container" @mousedown= " handlePdfClick" @mouseup= " handleMouseUp" >
210216 < div class = " superdoc-pdf-viewer" ref= " viewer" id= " viewerId" >< / div>
217+
218+ < div v- if = " !isReady" class = " superdoc-pdf-viewer__loader" >
219+ < n- spin class = " superdoc-pdf-viewer__spin" size= " large" / >
220+ < / div>
211221 < / div>
212222< / template>
213223
214-
215224< style lang= " postcss" scoped>
216225.superdoc - pdf- viewer- container {
217226 width: 100 % ;
@@ -223,6 +232,20 @@ onUnmounted(() => {
223232 width: 100 % ;
224233 position: relative;
225234
235+ & __loader {
236+ display: flex;
237+ justify- content: center;
238+ align- items: center;
239+ width: 100 % ;
240+ min- width: 150px ;
241+ min- height: 150px ;
242+
243+ : deep (.n - spin ) {
244+ -- n- color: #1354ff ! important;
245+ -- n- text- color: #1354ff ! important;
246+ }
247+ }
248+
226249 : deep (.pdf - page ) {
227250 border- top: 1px solid #dfdfdf;
228251 border- bottom: 1px solid #dfdfdf;
0 commit comments