189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			189 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
|  | import { html } from '@design.estate/dees-element'; | ||
|  | 
 | ||
|  | export const demo = () => { | ||
|  |   const samplePdfs = [ | ||
|  |     'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf', | ||
|  |     'https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf', | ||
|  |   ]; | ||
|  | 
 | ||
|  |   const generateGridItems = (count: number) => { | ||
|  |     const items = []; | ||
|  |     for (let i = 0; i < count; i++) { | ||
|  |       const pdfUrl = samplePdfs[i % samplePdfs.length]; | ||
|  |       items.push(html`
 | ||
|  |         <dees-pdf-preview | ||
|  |           pdfUrl="${pdfUrl}" | ||
|  |           maxPages="3" | ||
|  |           stackOffset="6" | ||
|  |           clickable="true" | ||
|  |           grid-mode | ||
|  |           @pdf-preview-click=${(e: CustomEvent) => { | ||
|  |             console.log('PDF Preview clicked:', e.detail); | ||
|  |             alert(`PDF clicked: ${e.detail.pageCount} pages`); | ||
|  |           }} | ||
|  |         ></dees-pdf-preview> | ||
|  |       `);
 | ||
|  |     } | ||
|  |     return items; | ||
|  |   }; | ||
|  | 
 | ||
|  |   return html`
 | ||
|  |     <style> | ||
|  |       .demo-container { | ||
|  |         padding: 40px; | ||
|  |         background: #f5f5f5; | ||
|  |       } | ||
|  | 
 | ||
|  |       .demo-section { | ||
|  |         margin-bottom: 60px; | ||
|  |       } | ||
|  | 
 | ||
|  |       h3 { | ||
|  |         margin-bottom: 20px; | ||
|  |         font-size: 18px; | ||
|  |         font-weight: 600; | ||
|  |       } | ||
|  | 
 | ||
|  |       .preview-grid { | ||
|  |         display: grid; | ||
|  |         grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); | ||
|  |         gap: 24px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .preview-row { | ||
|  |         display: flex; | ||
|  |         gap: 24px; | ||
|  |         align-items: center; | ||
|  |         margin-bottom: 20px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .preview-label { | ||
|  |         font-size: 14px; | ||
|  |         font-weight: 500; | ||
|  |         min-width: 100px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .performance-stats { | ||
|  |         margin-top: 20px; | ||
|  |         padding: 16px; | ||
|  |         background: white; | ||
|  |         border-radius: 8px; | ||
|  |         font-size: 14px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .stats-grid { | ||
|  |         display: grid; | ||
|  |         grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); | ||
|  |         gap: 12px; | ||
|  |         margin-top: 12px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .stat-item { | ||
|  |         display: flex; | ||
|  |         flex-direction: column; | ||
|  |         gap: 4px; | ||
|  |       } | ||
|  | 
 | ||
|  |       .stat-label { | ||
|  |         font-size: 12px; | ||
|  |         color: #666; | ||
|  |       } | ||
|  | 
 | ||
|  |       .stat-value { | ||
|  |         font-size: 16px; | ||
|  |         font-weight: 600; | ||
|  |       } | ||
|  |     </style> | ||
|  | 
 | ||
|  |     <div class="demo-container"> | ||
|  |       <div class="demo-section"> | ||
|  |         <h3>Single PDF Preview with Stacked Pages</h3> | ||
|  |         <dees-pdf-preview | ||
|  |           pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/web/compressed.tracemonkey-pldi-09.pdf" | ||
|  |           maxPages="3" | ||
|  |           stackOffset="8" | ||
|  |           clickable="true" | ||
|  |         ></dees-pdf-preview> | ||
|  |       </div> | ||
|  | 
 | ||
|  |       <div class="demo-section"> | ||
|  |         <h3>Different Sizes</h3> | ||
|  |         <div class="preview-row"> | ||
|  |           <div class="preview-label">Small:</div> | ||
|  |           <dees-pdf-preview | ||
|  |             size="small" | ||
|  |             pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf" | ||
|  |             maxPages="2" | ||
|  |             stackOffset="6" | ||
|  |             clickable="true" | ||
|  |           ></dees-pdf-preview> | ||
|  |         </div> | ||
|  | 
 | ||
|  |         <div class="preview-row"> | ||
|  |           <div class="preview-label">Default:</div> | ||
|  |           <dees-pdf-preview | ||
|  |             pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf" | ||
|  |             maxPages="3" | ||
|  |             stackOffset="8" | ||
|  |             clickable="true" | ||
|  |           ></dees-pdf-preview> | ||
|  |         </div> | ||
|  | 
 | ||
|  |         <div class="preview-row"> | ||
|  |           <div class="preview-label">Large:</div> | ||
|  |           <dees-pdf-preview | ||
|  |             size="large" | ||
|  |             pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf" | ||
|  |             maxPages="4" | ||
|  |             stackOffset="10" | ||
|  |             clickable="true" | ||
|  |           ></dees-pdf-preview> | ||
|  |         </div> | ||
|  |       </div> | ||
|  | 
 | ||
|  |       <div class="demo-section"> | ||
|  |         <h3>Non-Clickable Preview</h3> | ||
|  |         <dees-pdf-preview | ||
|  |           pdfUrl="https://raw.githubusercontent.com/mozilla/pdf.js/ba2edeae/examples/learning/helloworld.pdf" | ||
|  |           maxPages="3" | ||
|  |           stackOffset="8" | ||
|  |           clickable="false" | ||
|  |         ></dees-pdf-preview> | ||
|  |       </div> | ||
|  | 
 | ||
|  |       <div class="demo-section"> | ||
|  |         <h3>Performance Grid - 50 PDFs with Lazy Loading</h3> | ||
|  |         <p style="margin-bottom: 20px; font-size: 14px; color: #666;"> | ||
|  |           This grid demonstrates the performance optimizations with 50 PDF previews. | ||
|  |           Scroll to see lazy loading in action - previews render only when visible. | ||
|  |         </p> | ||
|  | 
 | ||
|  |         <div class="preview-grid"> | ||
|  |           ${generateGridItems(50)} | ||
|  |         </div> | ||
|  | 
 | ||
|  |         <div class="performance-stats"> | ||
|  |           <h4>Performance Features</h4> | ||
|  |           <div class="stats-grid"> | ||
|  |             <div class="stat-item"> | ||
|  |               <span class="stat-label">Lazy Loading</span> | ||
|  |               <span class="stat-value">✓ Enabled</span> | ||
|  |             </div> | ||
|  |             <div class="stat-item"> | ||
|  |               <span class="stat-label">Canvas Pooling</span> | ||
|  |               <span class="stat-value">✓ Active</span> | ||
|  |             </div> | ||
|  |             <div class="stat-item"> | ||
|  |               <span class="stat-label">Memory Management</span> | ||
|  |               <span class="stat-value">✓ Optimized</span> | ||
|  |             </div> | ||
|  |             <div class="stat-item"> | ||
|  |               <span class="stat-label">Intersection Observer</span> | ||
|  |               <span class="stat-value">200px margin</span> | ||
|  |             </div> | ||
|  |           </div> | ||
|  |         </div> | ||
|  |       </div> | ||
|  |     </div> | ||
|  |   `;
 | ||
|  | }; |