Files
qbz/crates/qbz-slint/ui/primitives/LoadingSpinner.slint
T
vicrodh e2c0d812fe fix(slint): search refinements — artist card, history, spinner, hover
- ArtistCard rebuilt 1:1 with Tauri SearchView.artist-card: 160x220
  inside a surface-card container, 12px corners, 120px circular avatar
  with a gradient placeholder, hover swaps to surface-elevated. The
  Follow chip (rectangular per ADR-008) sits below the name when the
  user does not follow the artist.
- Search loading state uses a rotating spinner (Lucide LoaderCircle on
  Slint transform-rotation) matching the Tauri spinner — 1s linear
  infinite. The search header (title + tabs + filter radios) collapses
  while the initial load runs so the chrome does not show through.
- Search history: live debounce + submit now use
  nav::push_or_replace_search, so the latest query is the single Search
  entry in history. Back from an opened album lands on that search.
- Track row backgrounds use the OR-d row-hovered (cell / fav / dl /
  more), so hovering the more button no longer drops the row tint.
- replace_category artists arm re-applies the top-result dedupe, so
  filtering does not bring the duplicate back.

cc
2026-05-19 20:37:52 -06:00

23 lines
753 B
Plaintext

// Loading spinner — a rotating 3/4 arc (Lucide LoaderCircle). Matches the
// Tauri `.spinner` (32px, 1s linear infinite). Used for heavy loads where
// `LoadingDots` reads too lightweight.
import { Theme } from "../foundation/semantic-colors.slint";
export component LoadingSpinner inherits Rectangle {
in property <length> size: 32px;
in property <color> tint: Theme.accent;
width: root.size;
height: root.size;
Image {
width: root.size;
height: root.size;
source: @image-url("../assets/icons/loader-circle.svg");
colorize: root.tint;
// Linear 1s/full-turn spin driven by animation-tick (360deg / 1000ms).
transform-rotation: ((animation-tick() / 1ms) * 0.36) * 1deg;
}
}