feat(08-04): convert sidebar em-based spacing to px and apply icon/type tokens

- Sidebar: convert all em-based padding/gap to px values, icon sizes to --yj-icon-md
- Now-playing: cover placeholder icon to --yj-icon-lg, text sizes to type tokens
- Search-bar: search icon to --yj-icon-sm, input font to --yj-text-md
- Audio-player: convert em-based gap/padding/margin to px values
- Seek-bar: tooltip font to --yj-text-lg, margin from em to px
- Volume-control: padding/margin from em to px, thumb sizes from em to px
- All components import designTokens and include in static styles
This commit is contained in:
2026-03-04 23:23:25 -05:00
parent 62f41c2491
commit aed90d7b17
7 changed files with 48 additions and 37 deletions
@@ -3,20 +3,21 @@ import { customElement } from 'lit/decorators.js';
import './controls/player-controls';
import './seekbar/seek-bar';
import './volume-control/volume-control';
import { designTokens } from '../../styles/tokens.css';
@customElement('audio-player')
export class AudioPlayer extends LitElement {
static override styles = css`
static override styles = [designTokens, css`
.audio-player-container {
display: flex;
align-items: center;
gap: 0.5em;
gap: 8px;
}
.player-main {
flex: 1;
}
`;
`];
override render() {
return html`
@@ -4,6 +4,7 @@ import '@awesome.me/webawesome/dist/components/icon/icon.js';
import { PlayerController } from '@store/controllers/player-controller';
import { queueStore } from '@store/queue-store';
import type { RepeatMode } from '@store/queue-store';
import { designTokens } from '../../../styles/tokens.css';
@customElement('player-controls')
export class PlayerControls extends LitElement {
@@ -38,7 +39,7 @@ export class PlayerControls extends LitElement {
this.unsubscribeQueue?.();
}
static override styles = css`
static override styles = [designTokens, css`
#player-control-buttons {
display: flex;
justify-content: center;
@@ -77,7 +78,7 @@ export class PlayerControls extends LitElement {
bottom: 2px;
right: 2px;
}
`;
`];
private handlePlayClick = () => {
queueStore.play();
@@ -4,6 +4,7 @@ import { ref, createRef } from 'lit/directives/ref.js';
import WaSlider from '@awesome.me/webawesome/dist/components/slider/slider.js';
import { formatSeconds } from '@utils/time';
import { PlayerController } from '@store/controllers/player-controller';
import { designTokens } from '../../../styles/tokens.css';
const ProgressIntervalMillis = 1000;
@@ -17,16 +18,16 @@ export class SeekBar extends LitElement {
@state()
private seekValue: number = 0;
static override styles = css`
static override styles = [designTokens, css`
wa-slider {
--track-size: 6px;
flex: 1;
margin: 0 1em;
margin: 0 16px;
--wa-tooltip-background-color: var(--yj-bg-elevated, #343a40);
--wa-tooltip-content-color: var(--yj-text-primary, white);
--wa-tooltip-border-color: var(--yj-bg-elevated, #343a40);
--wa-tooltip-border-radius: 4px;
--wa-tooltip-font-size: 0.875em;
--wa-tooltip-font-size: var(--yj-text-lg);
}
wa-slider::part(track) {
@@ -46,7 +47,7 @@ export class SeekBar extends LitElement {
justify-content: space-between;
align-items: center;
}
`;
`];
// ===================================================================
// DERIVED STATE
@@ -4,6 +4,7 @@ import '@awesome.me/webawesome/dist/components/icon/icon.js';
import '@awesome.me/webawesome/dist/components/slider/slider.js';
import type WaSlider from '@awesome.me/webawesome/dist/components/slider/slider.js';
import { PlayerController } from '@store/controllers/player-controller';
import { designTokens } from '../../../styles/tokens.css';
@customElement('volume-control')
export class VolumeControl extends LitElement {
@@ -13,7 +14,7 @@ export class VolumeControl extends LitElement {
@state()
private showSlider = false;
static override styles = css`
static override styles = [designTokens, css`
:host {
position: relative;
display: inline-flex;
@@ -25,7 +26,7 @@ export class VolumeControl extends LitElement {
border: none;
cursor: pointer;
color: inherit;
padding: 0.25em;
padding: 4px;
display: flex;
align-items: center;
}
@@ -38,8 +39,8 @@ export class VolumeControl extends LitElement {
background: var(--yj-bg-surface, #1a1a1a);
border: 1px solid var(--yj-border-subtle, #333);
border-radius: 8px;
padding: 1em 0.5em;
margin-bottom: 0.5em;
padding: 16px 8px;
margin-bottom: 8px;
display: flex;
justify-content: center;
z-index: 100;
@@ -47,8 +48,8 @@ export class VolumeControl extends LitElement {
wa-slider {
--track-size: 6px;
--thumb-width: 1em;
--thumb-height: 1em;
--thumb-width: 16px;
--thumb-height: 16px;
}
wa-slider::part(track) {
@@ -63,7 +64,7 @@ export class VolumeControl extends LitElement {
wa-slider::part(thumb) {
background: var(--yj-bg-base, black);
}
`;
`];
// ===================================================================
// DERIVED STATE