199 lines
3.3 KiB
SCSS
199 lines
3.3 KiB
SCSS
|
attachment-preview {
|
||
|
width: 100%;
|
||
|
padding: 0px;
|
||
|
display: flex;
|
||
|
flex-direction: column;
|
||
|
align-items: center;
|
||
|
transition: height 0.2s ease-in-out, opacity 0.2s ease-in-out;
|
||
|
// This is set in JS
|
||
|
// Suppose it's A4 size
|
||
|
--width-height-ratio: 0.7070707071;
|
||
|
--min-height: 56px;
|
||
|
--max-height: 600px;
|
||
|
// This is set in JS
|
||
|
--preview-width: 400;
|
||
|
--preview-height: calc(min(var(--preview-width) / var(--width-height-ratio), var(--max-height)));
|
||
|
max-height: var(--max-height);
|
||
|
|
||
|
&[hidden] {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
#preview {
|
||
|
display: inline-block;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
// Make sure minimal height before loading
|
||
|
min-height: var(--preview-height);
|
||
|
border-radius: 5px;
|
||
|
border: var(--material-border-quarternary);
|
||
|
pointer-events: none;
|
||
|
}
|
||
|
|
||
|
#next-preview {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
.icon {
|
||
|
// Force the image to load, otherwise the first dragging will not show a drag image
|
||
|
display: inline-block;
|
||
|
opacity: 0;
|
||
|
width: 100%;
|
||
|
height: 1px;
|
||
|
max-height: 1px;
|
||
|
margin-bottom: -1px;
|
||
|
}
|
||
|
|
||
|
$preview-icons: (
|
||
|
file: "document",
|
||
|
pdf: "attachment-pdf",
|
||
|
snapshot: "attachment-snapshot",
|
||
|
epub: "attachment-epub",
|
||
|
);
|
||
|
|
||
|
@each $cls, $icon in $preview-icons {
|
||
|
&[data-preview-type="#{$cls}"] {
|
||
|
.icon {
|
||
|
@include focus-states using ($color) {
|
||
|
@include svgicon($icon, $color, "28", "item-type");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.btn-container {
|
||
|
display: flex;
|
||
|
justify-content: center;
|
||
|
gap: 6px;
|
||
|
position: relative;
|
||
|
margin-top: -28px;
|
||
|
bottom: 6px;
|
||
|
|
||
|
toolbarbutton {
|
||
|
padding: 4px;
|
||
|
background-color: rgba(0,0,0,0.5);
|
||
|
|
||
|
&:hover {
|
||
|
background-color: rgba(0,0,0,0.4);
|
||
|
}
|
||
|
|
||
|
&:active, &[selected] {
|
||
|
background-color: rgba(0,0,0,0.3);
|
||
|
}
|
||
|
|
||
|
&:disabled,
|
||
|
&[disabled="true"] {
|
||
|
background-color: rgba(0,0,0,0.2);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.btn-prev {
|
||
|
@include svgicon-menu("arrow-left", "universal", "20", false, false, (#fff, #fff));
|
||
|
}
|
||
|
|
||
|
.btn-next {
|
||
|
@include svgicon-menu("arrow-right", "universal", "20", false, false, (#fff, #fff));
|
||
|
}
|
||
|
|
||
|
.drag-container {
|
||
|
width: 64px;
|
||
|
height: 64px;
|
||
|
position: absolute;
|
||
|
top: -10000px;
|
||
|
|
||
|
.icon {
|
||
|
opacity: 1;
|
||
|
height: 56px;
|
||
|
max-height: 56px;
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&[data-preview-type=pdf] {
|
||
|
#preview {
|
||
|
border: 0;
|
||
|
}
|
||
|
|
||
|
.btn-container {
|
||
|
// PDF page has 3px vertical padding so we offset 6px more
|
||
|
bottom: 12px;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&[data-preview-type=snapshot] {
|
||
|
#preview {
|
||
|
pointer-events: all;
|
||
|
}
|
||
|
|
||
|
.btn-container {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$other-preview-types: (
|
||
|
image,
|
||
|
video,
|
||
|
audio,
|
||
|
);
|
||
|
|
||
|
@each $cls in $other-preview-types {
|
||
|
##{$cls}-preview {
|
||
|
display: none;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
object-fit: contain;
|
||
|
border-radius: 5px;
|
||
|
border: var(--material-border-quarternary);
|
||
|
max-height: var(--preview-height);
|
||
|
min-height: var(--min-height);
|
||
|
max-width: calc((var(--preview-height) - 2px) * var(--width-height-ratio));
|
||
|
}
|
||
|
|
||
|
&[data-preview-type="#{$cls}"] {
|
||
|
#preview {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
.btn-container {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
##{$cls}-preview {
|
||
|
display: inline-block;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&:not(:hover) {
|
||
|
.btn-container {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&[data-preview-status=fail] {
|
||
|
#preview {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
.icon {
|
||
|
display: inline-block;
|
||
|
opacity: 1;
|
||
|
height: 56px;
|
||
|
max-height: 56px;
|
||
|
margin-bottom: 0px;
|
||
|
}
|
||
|
|
||
|
.btn-container {
|
||
|
display: none;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&[data-preview-status=loading] {
|
||
|
opacity: 0;
|
||
|
#preview {
|
||
|
opacity: 0;
|
||
|
}
|
||
|
}
|
||
|
}
|