refactor(ui): trash: show action buttons in grid view
This commit is contained in:
@@ -708,13 +708,35 @@
|
|||||||
outline-offset: 2px;
|
outline-offset: 2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* More actions button (three dots) — top-right of the thumbnail on a scrim. */
|
/* ── Grid card action cluster ─────────────────────────────────────
|
||||||
/* Grid cards surface actions through the corner kebab (.file-actions) + the
|
Every action a row can surface — favorite star, `.file-actions`
|
||||||
favorite star, both absolutely positioned below. The inline per-row action
|
kebab, per-section `.btn-action` icons (e.g. trash's Restore /
|
||||||
buttons (share/move/rename/delete) belong to the list view only — hide them
|
Delete permanently) — lives in a single `.action-cell` container
|
||||||
here so they don't stack up along the bottom edge of the card. */
|
pinned to the top-right of the card. The container carries the
|
||||||
.files-grid-view .file-item .action-cell .btn-action {
|
position + hover-reveal + gap; its children just supply their
|
||||||
display: none;
|
own chip visuals (30x30 scrim pill, etc.), no more one-off
|
||||||
|
absolute positioning per child.
|
||||||
|
|
||||||
|
Old rules put `.file-actions` and `.favorite-star` at hand-crafted
|
||||||
|
absolute coordinates and hid `.btn-action` entirely — that made
|
||||||
|
trash's per-item buttons invisible in grid view. The unified
|
||||||
|
container reads as one design pattern and takes whatever children
|
||||||
|
the row template hands it. */
|
||||||
|
.files-grid-view .file-item .action-cell {
|
||||||
|
position: absolute;
|
||||||
|
top: calc(var(--space-3) + 8px);
|
||||||
|
right: calc(var(--space-3) + 8px);
|
||||||
|
z-index: 10;
|
||||||
|
display: flex;
|
||||||
|
gap: var(--space-1);
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity var(--motion-fast) var(--ease-standard);
|
||||||
|
}
|
||||||
|
|
||||||
|
.files-grid-view .file-item:hover .action-cell,
|
||||||
|
.files-grid-view .file-item:focus-within .action-cell,
|
||||||
|
.files-grid-view .file-item .action-cell:has(.favorite-star.active) {
|
||||||
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The favorite state is already shown by the corner star button, so the inline
|
/* The favorite state is already shown by the corner star button, so the inline
|
||||||
@@ -723,34 +745,32 @@
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.files-grid-view .file-item .file-actions {
|
/* Chip visuals for anything inside the corner cluster — the kebab, the star,
|
||||||
position: absolute;
|
any `.btn-action`. Uniform 30x30 scrim pill so they line up in the flex row. */
|
||||||
top: calc(var(--space-3) + 8px);
|
.files-grid-view .file-item .action-cell .file-actions,
|
||||||
right: calc(var(--space-3) + 8px);
|
.files-grid-view .file-item .action-cell .favorite-star,
|
||||||
|
.files-grid-view .file-item .action-cell .btn-action {
|
||||||
|
position: static;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
height: 30px;
|
height: 30px;
|
||||||
border-radius: var(--radius-full);
|
padding: 0;
|
||||||
border: none;
|
border: none;
|
||||||
|
border-radius: var(--radius-full);
|
||||||
background: var(--color-scrim-control);
|
background: var(--color-scrim-control);
|
||||||
backdrop-filter: blur(6px);
|
backdrop-filter: blur(6px);
|
||||||
-webkit-backdrop-filter: blur(6px);
|
-webkit-backdrop-filter: blur(6px);
|
||||||
box-shadow: 0 1px 3px var(--color-shadow-sm);
|
box-shadow: 0 1px 3px var(--color-shadow-sm);
|
||||||
display: flex;
|
display: inline-flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
opacity: 0;
|
|
||||||
z-index: 10;
|
|
||||||
cursor: pointer;
|
|
||||||
color: var(--color-text);
|
color: var(--color-text);
|
||||||
font-size: var(--text-md);
|
font-size: var(--text-md);
|
||||||
transition: opacity var(--motion-fast) var(--ease-standard);
|
cursor: pointer;
|
||||||
}
|
/* Opacity/hover-reveal moves up to `.action-cell` — children stay opaque. */
|
||||||
|
|
||||||
.files-grid-view .file-item:hover .file-actions {
|
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
.files-grid-view .file-item .file-actions:hover {
|
.files-grid-view .file-item .action-cell .file-actions:hover {
|
||||||
color: var(--color-accent);
|
color: var(--color-accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -782,34 +802,16 @@
|
|||||||
line-height: var(--leading-none);
|
line-height: var(--leading-none);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Favorite star — top-right of the thumbnail, left of the kebab, on a scrim. */
|
/* Favorite star — visual overrides only. Position, hover-reveal, chip
|
||||||
|
geometry all come from the shared corner-cluster rule on
|
||||||
|
`.files-grid-view .file-item .action-cell`. What's left here is just
|
||||||
|
the star's per-state colour: subtle at rest, active-gold when the
|
||||||
|
item is a favorite. `.active` still bumps the parent cluster's
|
||||||
|
opacity so an unhovered card can still show its star. */
|
||||||
.files-grid-view .file-item button.favorite-star {
|
.files-grid-view .file-item button.favorite-star {
|
||||||
position: absolute;
|
|
||||||
top: calc(var(--space-3) + 8px);
|
|
||||||
right: calc(var(--space-3) + 8px + 34px);
|
|
||||||
width: 30px;
|
|
||||||
height: 30px;
|
|
||||||
border-radius: var(--radius-full);
|
|
||||||
border: none;
|
|
||||||
background: var(--color-scrim-control);
|
|
||||||
backdrop-filter: blur(6px);
|
|
||||||
-webkit-backdrop-filter: blur(6px);
|
|
||||||
box-shadow: 0 1px 3px var(--color-shadow-sm);
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
opacity: 0;
|
|
||||||
z-index: 12;
|
|
||||||
cursor: pointer;
|
|
||||||
color: var(--color-text-subtle);
|
color: var(--color-text-subtle);
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
padding: 0;
|
|
||||||
line-height: var(--leading-none);
|
line-height: var(--leading-none);
|
||||||
transition: opacity var(--motion-fast) var(--ease-standard);
|
|
||||||
}
|
|
||||||
|
|
||||||
.files-grid-view .file-item:hover button.favorite-star {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.files-grid-view .file-item button.favorite-star:hover {
|
.files-grid-view .file-item button.favorite-star:hover {
|
||||||
@@ -817,7 +819,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.files-grid-view .file-item button.favorite-star.active {
|
.files-grid-view .file-item button.favorite-star.active {
|
||||||
opacity: 1;
|
|
||||||
color: var(--color-star-text-hover);
|
color: var(--color-star-text-hover);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -400,4 +400,14 @@
|
|||||||
color: var(--color-danger-text);
|
color: var(--color-danger-text);
|
||||||
font-weight: var(--weight-semibold);
|
font-weight: var(--weight-semibold);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Grid-corner action-cell layout + chip visuals now live in the
|
||||||
|
shared `ported/resourceList.css`; every section using ResourceList
|
||||||
|
picks them up. What stays here is only the trash-specific danger
|
||||||
|
red on the "Delete permanently" button — `--color-error-text` is
|
||||||
|
the right red-text token (the shared `.file-actions:hover` accent
|
||||||
|
colour still lands on the plain `.btn-action` restore button). */
|
||||||
|
:global(.files-grid-view .file-item .action-cell .btn-action--delete:hover) {
|
||||||
|
color: var(--color-error-text);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user