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>
|
||
|
`;
|
||
|
};
|