- Implemented DeesPdfViewer for full-featured PDF viewing with toolbar and sidebar navigation. - Created DeesPdfPreview for lightweight PDF previews. - Introduced PdfManager for managing PDF document loading and caching. - Added CanvasPool for efficient canvas management. - Developed utility functions for performance monitoring and file size formatting. - Established styles for viewer and preview components to enhance UI/UX. - Included demo examples for showcasing PDF viewer capabilities.
177 lines
4.2 KiB
TypeScript
177 lines
4.2 KiB
TypeScript
import { css, cssManager } from '@design.estate/dees-element';
|
|
|
|
export const previewStyles = [
|
|
cssManager.defaultStyles,
|
|
css`
|
|
:host {
|
|
display: inline-block;
|
|
position: relative;
|
|
}
|
|
|
|
.preview-container {
|
|
position: relative;
|
|
width: 200px;
|
|
height: 260px;
|
|
background: ${cssManager.bdTheme('hsl(0 0% 100%)', 'hsl(215 20% 16%)')};
|
|
border: 1px solid ${cssManager.bdTheme('hsl(214 31% 91%)', 'hsl(217 25% 26%)')};
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
|
}
|
|
|
|
.preview-container.clickable {
|
|
cursor: pointer;
|
|
}
|
|
|
|
.preview-container.clickable:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 8px 24px ${cssManager.bdTheme('rgba(0, 0, 0, 0.12)', 'rgba(0, 0, 0, 0.3)')};
|
|
}
|
|
|
|
.preview-container.clickable:hover .preview-overlay {
|
|
opacity: 1;
|
|
}
|
|
|
|
.preview-stack {
|
|
position: relative;
|
|
width: 100%;
|
|
height: 100%;
|
|
padding: 20px;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.preview-canvas {
|
|
position: absolute;
|
|
background: white;
|
|
border: 1px solid ${cssManager.bdTheme('hsl(214 31% 88%)', 'hsl(217 25% 30%)')};
|
|
border-radius: 4px;
|
|
display: block;
|
|
image-rendering: -webkit-optimize-contrast;
|
|
image-rendering: crisp-edges;
|
|
}
|
|
|
|
.preview-info {
|
|
position: absolute;
|
|
bottom: 12px;
|
|
left: 12px;
|
|
right: 12px;
|
|
padding: 8px 12px;
|
|
background: ${cssManager.bdTheme('hsl(0 0% 100% / 0.95)', 'hsl(215 20% 12% / 0.95)')};
|
|
border: 1px solid ${cssManager.bdTheme('hsl(214 31% 91%)', 'hsl(217 25% 26%)')};
|
|
border-radius: 8px;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
font-size: 13px;
|
|
color: ${cssManager.bdTheme('hsl(215 16% 45%)', 'hsl(215 16% 75%)')};
|
|
backdrop-filter: blur(8px);
|
|
z-index: 10;
|
|
}
|
|
|
|
.preview-info dees-icon {
|
|
font-size: 14px;
|
|
color: ${cssManager.bdTheme('hsl(217 91% 60%)', 'hsl(213 93% 68%)')};
|
|
}
|
|
|
|
.preview-pages {
|
|
font-weight: 500;
|
|
}
|
|
|
|
.preview-overlay {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: ${cssManager.bdTheme('rgba(0, 0, 0, 0.7)', 'rgba(0, 0, 0, 0.8)')};
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
opacity: 0;
|
|
transition: opacity 0.2s ease;
|
|
z-index: 20;
|
|
}
|
|
|
|
.preview-overlay dees-icon {
|
|
font-size: 24px;
|
|
color: white;
|
|
}
|
|
|
|
.preview-overlay span {
|
|
font-size: 14px;
|
|
font-weight: 500;
|
|
color: white;
|
|
}
|
|
|
|
.preview-loading,
|
|
.preview-error {
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 12px;
|
|
color: ${cssManager.bdTheme('hsl(215 16% 45%)', 'hsl(215 16% 75%)')};
|
|
}
|
|
|
|
.preview-loading {
|
|
background: ${cssManager.bdTheme('hsl(0 0% 99%)', 'hsl(215 20% 14%)')};
|
|
}
|
|
|
|
.preview-error {
|
|
background: ${cssManager.bdTheme('hsl(0 72% 98%)', 'hsl(0 62% 20%)')};
|
|
color: ${cssManager.bdTheme('hsl(0 72% 40%)', 'hsl(0 70% 68%)')};
|
|
}
|
|
|
|
.preview-spinner {
|
|
width: 24px;
|
|
height: 24px;
|
|
border-radius: 50%;
|
|
border: 2px solid ${cssManager.bdTheme('hsl(214 31% 86%)', 'hsl(217 25% 28%)')};
|
|
border-top-color: ${cssManager.bdTheme('hsl(217 91% 60%)', 'hsl(213 93% 68%)')};
|
|
animation: spin 0.8s linear infinite;
|
|
}
|
|
|
|
@keyframes spin {
|
|
to {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
|
|
.preview-text {
|
|
font-size: 13px;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.preview-error dees-icon {
|
|
font-size: 32px;
|
|
}
|
|
|
|
/* Responsive sizes */
|
|
:host([size="small"]) .preview-container {
|
|
width: 150px;
|
|
height: 195px;
|
|
}
|
|
|
|
:host([size="large"]) .preview-container {
|
|
width: 250px;
|
|
height: 325px;
|
|
}
|
|
|
|
/* Grid optimizations */
|
|
:host([grid-mode]) .preview-container {
|
|
will-change: auto;
|
|
}
|
|
|
|
:host([grid-mode]) .preview-canvas {
|
|
image-rendering: -webkit-optimize-contrast;
|
|
image-rendering: crisp-edges;
|
|
}
|
|
`,
|
|
]; |