fix: mobile sizing
This commit is contained in:
parent
9d1e4871e2
commit
85d198c8c3
3 changed files with 74 additions and 6 deletions
|
|
@ -15,6 +15,17 @@ export class SidePanelManager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
emitChange() {
|
||||||
|
window.dispatchEvent(
|
||||||
|
new CustomEvent('side-panel-changed', {
|
||||||
|
detail: {
|
||||||
|
active: this.panel.classList.contains('active'),
|
||||||
|
view: this.currentView,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
initResizer() {
|
initResizer() {
|
||||||
this.resizerElement.addEventListener('mousedown', this.startResize.bind(this));
|
this.resizerElement.addEventListener('mousedown', this.startResize.bind(this));
|
||||||
|
|
||||||
|
|
@ -86,6 +97,7 @@ export class SidePanelManager {
|
||||||
if (renderContentCallback) renderContentCallback(this.contentElement);
|
if (renderContentCallback) renderContentCallback(this.contentElement);
|
||||||
|
|
||||||
this.panel.classList.add('active');
|
this.panel.classList.add('active');
|
||||||
|
this.emitChange();
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close() {
|
||||||
|
|
@ -105,6 +117,7 @@ export class SidePanelManager {
|
||||||
|
|
||||||
this.panel.classList.remove('active');
|
this.panel.classList.remove('active');
|
||||||
this.currentView = null;
|
this.currentView = null;
|
||||||
|
this.emitChange();
|
||||||
// Optionally clear content after transition
|
// Optionally clear content after transition
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
if (!this.panel.classList.contains('active')) {
|
if (!this.panel.classList.contains('active')) {
|
||||||
|
|
|
||||||
31
js/ui.js
31
js/ui.js
|
|
@ -1352,6 +1352,7 @@ export class UIRenderer {
|
||||||
// Setup UI toggle button
|
// Setup UI toggle button
|
||||||
this.setupUIToggleButton(overlay);
|
this.setupUIToggleButton(overlay);
|
||||||
this.setupControlsAutoHide(overlay);
|
this.setupControlsAutoHide(overlay);
|
||||||
|
this.setupFullscreenSidePanelSync(overlay);
|
||||||
await this.refreshFullscreenVisualizerState(activeElement);
|
await this.refreshFullscreenVisualizerState(activeElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1418,6 +1419,16 @@ export class UIRenderer {
|
||||||
clearTimeout(this.uiToggleMouseTimer);
|
clearTimeout(this.uiToggleMouseTimer);
|
||||||
this.uiToggleMouseTimer = null;
|
this.uiToggleMouseTimer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.controlsIdleCleanup) {
|
||||||
|
this.controlsIdleCleanup();
|
||||||
|
this.controlsIdleCleanup = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.fullscreenSidePanelSyncCleanup) {
|
||||||
|
this.fullscreenSidePanelSyncCleanup();
|
||||||
|
this.fullscreenSidePanelSyncCleanup = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async startFullscreenVisualizer(activeElement, overlay) {
|
async startFullscreenVisualizer(activeElement, overlay) {
|
||||||
|
|
@ -1623,6 +1634,26 @@ export class UIRenderer {
|
||||||
overlay.classList.remove('controls-idle');
|
overlay.classList.remove('controls-idle');
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setupFullscreenSidePanelSync(overlay) {
|
||||||
|
if (this.fullscreenSidePanelSyncCleanup) {
|
||||||
|
this.fullscreenSidePanelSyncCleanup();
|
||||||
|
}
|
||||||
|
|
||||||
|
const syncState = () => {
|
||||||
|
overlay.classList.toggle('queue-panel-active', sidePanelManager.isActive('queue'));
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleChange = () => syncState();
|
||||||
|
window.addEventListener('side-panel-changed', handleChange);
|
||||||
|
syncState();
|
||||||
|
|
||||||
|
this.fullscreenSidePanelSyncCleanup = () => {
|
||||||
|
window.removeEventListener('side-panel-changed', handleChange);
|
||||||
|
overlay.classList.remove('queue-panel-active');
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
setupFullscreenControls() {
|
setupFullscreenControls() {
|
||||||
const playBtn = document.getElementById('fs-play-pause-btn');
|
const playBtn = document.getElementById('fs-play-pause-btn');
|
||||||
const prevBtn = document.getElementById('fs-prev-btn');
|
const prevBtn = document.getElementById('fs-prev-btn');
|
||||||
|
|
|
||||||
36
styles.css
36
styles.css
|
|
@ -10700,6 +10700,20 @@ body:has(#side-panel.active) #close-fullscreen-cover-btn {
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#fullscreen-cover-overlay.queue-panel-active .fullscreen-main-view {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
width: min(760px, 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#fullscreen-cover-overlay.queue-panel-active .fullscreen-media-column {
|
||||||
|
justify-self: center;
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#fullscreen-cover-overlay.queue-panel-active .fullscreen-lyrics-pane {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 980px) {
|
@media (max-width: 980px) {
|
||||||
#fullscreen-cover-overlay .fullscreen-main-view {
|
#fullscreen-cover-overlay .fullscreen-main-view {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|
@ -10724,33 +10738,43 @@ body:has(#side-panel.active) #close-fullscreen-cover-btn {
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
|
#fullscreen-cover-overlay {
|
||||||
|
--fs-mobile-top-btn-size: 44px;
|
||||||
|
--fs-mobile-top-btn-gap: 0.6rem;
|
||||||
|
--fs-mobile-top-btn-left: calc(1rem + env(safe-area-inset-left));
|
||||||
|
}
|
||||||
|
|
||||||
#fullscreen-cover-overlay .fullscreen-cover-content {
|
#fullscreen-cover-overlay .fullscreen-cover-content {
|
||||||
padding: 0.75rem 0.75rem calc(0.75rem + env(safe-area-inset-bottom));
|
padding: 0.75rem 0.75rem calc(0.75rem + env(safe-area-inset-bottom));
|
||||||
}
|
}
|
||||||
|
|
||||||
#fullscreen-cover-overlay .fullscreen-top-actions {
|
#fullscreen-cover-overlay .fullscreen-top-actions {
|
||||||
top: calc(0.75rem + env(safe-area-inset-top));
|
top: calc(0.75rem + env(safe-area-inset-top));
|
||||||
left: calc(1rem + env(safe-area-inset-left));
|
left: var(--fs-mobile-top-btn-left);
|
||||||
gap: 0.35rem;
|
gap: var(--fs-mobile-top-btn-gap);
|
||||||
}
|
}
|
||||||
|
|
||||||
#fullscreen-cover-overlay .fullscreen-top-actions button,
|
#fullscreen-cover-overlay .fullscreen-top-actions button,
|
||||||
#fullscreen-cover-overlay #toggle-ui-btn {
|
#fullscreen-cover-overlay #toggle-ui-btn {
|
||||||
width: 44px;
|
width: var(--fs-mobile-top-btn-size);
|
||||||
height: 44px;
|
height: var(--fs-mobile-top-btn-size);
|
||||||
background: rgb(9 12 18 / 0.5);
|
background: rgb(9 12 18 / 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
#fullscreen-cover-overlay #toggle-ui-btn {
|
#fullscreen-cover-overlay #toggle-ui-btn {
|
||||||
top: calc(0.75rem + env(safe-area-inset-top));
|
top: calc(0.75rem + env(safe-area-inset-top));
|
||||||
left: calc(88px + 1.25rem + env(safe-area-inset-left));
|
left: calc(
|
||||||
|
var(--fs-mobile-top-btn-left) +
|
||||||
|
(var(--fs-mobile-top-btn-size) * 2) +
|
||||||
|
(var(--fs-mobile-top-btn-gap) * 2)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#fullscreen-cover-overlay .fullscreen-main-view {
|
#fullscreen-cover-overlay .fullscreen-main-view {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
gap: 0.85rem;
|
gap: 0.85rem;
|
||||||
padding:
|
padding:
|
||||||
calc(4.25rem + env(safe-area-inset-top))
|
calc(7.25rem + env(safe-area-inset-top))
|
||||||
0.75rem
|
0.75rem
|
||||||
calc(1.5rem + env(safe-area-inset-bottom))
|
calc(1.5rem + env(safe-area-inset-bottom))
|
||||||
0.75rem;
|
0.75rem;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue