mejoras de UI 2

This commit is contained in:
2025-08-10 00:58:31 -06:00
parent 493d236dc4
commit d3d0811a9f
4 changed files with 49 additions and 10 deletions

View File

@@ -8,6 +8,7 @@
:class="[
'icon-button',
{
'xsmall': size === 'xsmall',
'large': size === 'large',
'small': size === 'small'
}
@@ -43,7 +44,7 @@ const props = defineProps({
size: {
type: String,
default: 'normal',
validator: (value) => ['small', 'normal', 'large'].includes(value)
validator: (value) => ['xsmall', 'small', 'normal', 'large'].includes(value)
},
badge: {
type: [String, Number],
@@ -55,6 +56,7 @@ defineEmits(['click'])
const iconSize = computed(() => {
switch (props.size) {
case 'xsmall': return 16
case 'small': return 18
case 'large': return 28
default: return 20
@@ -67,6 +69,12 @@ const iconSize = computed(() => {
position: relative;
}
.icon-button.xsmall {
width: 28px;
height: 28px;
font-size: 0.8rem;
}
.icon-button.small {
width: 36px;
height: 36px;
@@ -135,4 +143,4 @@ const iconSize = computed(() => {
50% { transform: scale(1.2); }
100% { transform: scale(1); }
}
</style>
</style>

View File

@@ -58,7 +58,7 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
.main-container {
/* Parametrized viewport sizing */
--app-vertical-margin: 10px; /* Top/bottom margin between both components */
--playback-controls-height: 60px; /* Adjustable height for PlaybackControls */
--playback-controls-height: 40px; /* Compact but not tiny */
--tracklist-height: calc(100vh - (var(--app-vertical-margin) * 2) - var(--playback-controls-height));
/* Container takes full viewport minus vertical margins */
@@ -109,10 +109,13 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: nowrap;
column-gap: 12px;
}
.app-title {
flex: 1;
flex: 1 1 auto;
min-width: 0; /* allow text ellipsis */
}
.title-text {
@@ -127,6 +130,9 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
display: flex;
align-items: center;
gap: 12px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.title-icon {
@@ -144,8 +150,16 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
.header-controls {
display: flex;
gap: 16px;
gap: 10px;
align-items: center;
flex: 0 0 auto;
}
/* Avoid hover transforms causing layout shifts in header controls */
.header-controls :deep(.base-button.icon:hover),
.header-controls :deep(.theme-toggle:hover),
.header-controls :deep(.icon-button:hover .icon) {
transform: none !important;
}
.main-content {
@@ -192,7 +206,14 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
}
/* Responsive Design */
@media (max-width: 768px) {
@media (max-width: 680px) {
/* Hide subtitle to keep header inline on narrow screens */
.subtitle {
display: none;
}
}
@media (max-width: 520px) {
.main-container {
padding: 15px;
padding-bottom: 0;
@@ -202,8 +223,8 @@ const hasActiveTrack = computed(() => !!props.currentTrack)
.header-content {
flex-direction: column;
gap: 16px;
padding: 16px;
gap: 12px;
padding: 12px 16px;
text-align: center;
}

View File

@@ -68,8 +68,10 @@ const cycleRepeat = () => {
/* Allow parent to control overall height budget */
height: var(--playback-controls-height, auto);
display: flex;
gap: 10px;
gap: 4px;
align-items: center;
flex-wrap: nowrap;
white-space: nowrap;
}
.shuffle-btn:hover {
@@ -97,10 +99,18 @@ const cycleRepeat = () => {
box-shadow: 0 0 20px var(--accent-primary);
}
/* Keep layout from expanding on hover transforms */
.playback-controls :deep(.base-button.icon:hover) {
transform: none !important;
}
.playback-controls :deep(.icon-button:hover .icon) {
transform: none !important;
}
/* Responsive design */
@media (max-width: 768px) {
.playback-controls {
gap: 8px;
gap: 4px;
}
}
</style>