Media dashboard (real total/images/SVG/logos/unused/storage/alt-coverage, computed from actual assets + a bootstrap usage scan, no fabricated stats); gallery gets grid/list toggle, type filter, sort, drag-and-drop + multi-file upload with cancel/retry and friendly error mapping, lazy thumbnails, multi-select with bulk delete/download/export-metadata; asset details drawer shows real dimensions/size/format/date/usage locations (walks bootstrap config for exact URL matches, reports not-used rather than guessing) plus editable alt text/caption/description/decorative flag with missing-alt warning; shared MediaPickerComponent (already the one reusable picker used by content management) gains type filter, a recent shortcut, and keyboard grid navigation.
56 lines
1.0 KiB
SCSS
56 lines
1.0 KiB
SCSS
.media-picker {
|
|
display: grid;
|
|
gap: 14px;
|
|
}
|
|
|
|
.media-picker__toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.media-picker__grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
|
|
gap: 10px;
|
|
}
|
|
|
|
.media-picker__preview {
|
|
width: 100%;
|
|
height: 90px;
|
|
object-fit: cover;
|
|
border-radius: var(--radius-md, 6px);
|
|
background: var(--bg-secondary, #f4f4f5);
|
|
margin-bottom: 6px;
|
|
}
|
|
|
|
.media-picker__preview--file {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 0.6875rem;
|
|
color: var(--text-secondary, #6b7280);
|
|
text-align: center;
|
|
padding: 6px;
|
|
}
|
|
|
|
.media-picker__error {
|
|
color: var(--color-danger, #d9433c);
|
|
font-size: 0.85rem;
|
|
margin: 0;
|
|
}
|
|
|
|
.media-picker__card--focused {
|
|
outline: 2px solid var(--brand-primary, #1e8a6e);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
.media-picker__filename {
|
|
display: block;
|
|
font-size: 0.75rem;
|
|
color: var(--text-primary, #1f322d);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|