Add highlight to open page tab

This commit is contained in:
Andras Schmelczer 2023-05-27 19:50:27 +01:00
commit 68b24effde
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
4 changed files with 111 additions and 39 deletions

View file

@ -22,6 +22,7 @@ h4,
h5, h5,
h6 { h6 {
font-family: 'Comfortaa', sans-serif; font-family: 'Comfortaa', sans-serif;
margin-bottom: var(--small-margin);
} }
p { p {
@ -31,6 +32,7 @@ p {
html { html {
height: 100%; height: 100%;
-webkit-font-smooth: antialiased; -webkit-font-smooth: antialiased;
> body { > body {
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -83,12 +85,13 @@ html {
@include blurred-background(#fff); @include blurred-background(#fff);
display: flex; display: flex;
position: absolute; position: absolute;
overflow: hidden;
@include on-large-screen { @include on-large-screen {
top: 50%; top: 50%;
left: 0; left: 0;
transform: translateY(-50%); transform: translateY(-50%);
height: 400px; max-height: 350px;
} }
@include on-small-screen { @include on-small-screen {
@ -104,31 +107,113 @@ html {
> nav.buttons { > nav.buttons {
@include center-children; @include center-children;
gap: var(--normal-margin); justify-content: space-evenly;
margin: var(--small-margin);
@include on-large-screen { @include on-large-screen {
flex-direction: column; flex-direction: column;
} }
> button.info { > button {
@include image-button(url('../assets/icons/info.svg'), var(--accent-color)); position: relative;
} border: none;
background-color: transparent;
cursor: pointer;
> button.maximize-full-screen { @include square(var(--icon-size));
@include image-button(url('../assets/icons/maximize.svg'), var(--accent-color)); margin: var(--small-margin);
}
> button.minimize-full-screen { &::before,
@include image-button(url('../assets/icons/minimize.svg'), var(--accent-color)); &::after {
} content: '';
position: absolute;
top: 0;
left: 0;
height: 100%;
width: 100%;
}
> button.settings { &::before {
@include image-button(url('../assets/icons/settings.svg'), var(--accent-color)); background-color: var(--accent-color);
}
> button.restart { @include on-large-screen {
@include image-button(url('../assets/icons/restart.svg'), var(--accent-color)); width: 0;
border-radius: 0 var(--border-radius) var(--border-radius) 0;
transition: background-color var(--transition-time),
width var(--transition-time);
left: calc(-1 * var(--small-margin));
height: 140%;
top: 50%;
transform: translateY(-50%);
}
@include on-small-screen {
height: 0;
border-radius: 0 0 var(--border-radius) var(--border-radius);
transition: background-color var(--transition-time),
height var(--transition-time);
top: calc(-1 * var(--small-margin));
width: 140%;
left: 50%;
transform: translateX(-50%);
}
}
&::after {
background-color: var(--accent-color);
transition: transform var(--transition-time),
background-color var(--transition-time);
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
@include square(var(--icon-size));
}
&.active {
&::before {
@include on-large-screen {
width: calc(100% + 2 * var(--small-margin));
}
@include on-small-screen {
height: calc(100% + 2 * var(--small-margin));
}
}
&::after {
background-color: white;
}
}
&:hover::after {
transform: scale(1.15);
}
&.info::after {
-webkit-mask-image: url('../assets/icons/info.svg');
mask-image: url('../assets/icons/info.svg');
}
&.maximize-full-screen::after {
-webkit-mask-image: url('../assets/icons/maximize.svg');
mask-image: url('../assets/icons/maximize.svg');
}
&.minimize-full-screen::after {
-webkit-mask-image: url('../assets/icons/minimize.svg');
mask-image: url('../assets/icons/minimize.svg');
}
&.settings::after {
-webkit-mask-image: url('../assets/icons/settings.svg');
mask-image: url('../assets/icons/settings.svg');
}
&.restart::after {
-webkit-mask-image: url('../assets/icons/restart.svg');
mask-image: url('../assets/icons/restart.svg');
}
} }
} }

View file

@ -5,11 +5,11 @@ export class CollapsiblePanelAnimator {
public onClose: () => unknown = () => {}; public onClose: () => unknown = () => {};
public constructor( public constructor(
infoButton: HTMLButtonElement, private readonly toggleButton: HTMLButtonElement,
private readonly infoPage: HTMLElement, private readonly collapsibleContent: HTMLElement,
ignoreForCloseOnClick: HTMLElement ignoreForCloseOnClick: HTMLElement
) { ) {
infoButton.addEventListener('click', this.toggle.bind(this)); toggleButton.addEventListener('click', this.toggle.bind(this));
window.addEventListener( window.addEventListener(
'click', 'click',
(event) => !ignoreForCloseOnClick.contains(event.target as Node) && this.close() (event) => !ignoreForCloseOnClick.contains(event.target as Node) && this.close()
@ -18,13 +18,15 @@ export class CollapsiblePanelAnimator {
public open() { public open() {
this.isOpen = true; this.isOpen = true;
this.infoPage.classList.remove('hidden'); this.collapsibleContent.classList.remove('hidden');
this.toggleButton.classList.add('active');
this.onOpen(); this.onOpen();
} }
public close() { public close() {
this.isOpen = false; this.isOpen = false;
this.infoPage.classList.add('hidden'); this.collapsibleContent.classList.add('hidden');
this.toggleButton.classList.remove('active');
this.onClose(); this.onClose();
} }

View file

@ -33,22 +33,6 @@ $breakpoint-width: 600px !default;
} }
} }
@mixin image-button($background-image, $background-color) {
@include square(var(--icon-size));
border: none;
cursor: pointer;
background-color: $background-color;
mask-image: $background-image;
-webkit-mask-image: $background-image;
mask-repeat: no-repeat;
transition: transform var(--transition-time), background-color var(--transition-time);
&:hover {
transform: scale(1.15);
}
}
@mixin center-children() { @mixin center-children() {
display: flex; display: flex;
align-items: center; align-items: center;

View file

@ -19,7 +19,7 @@
--normal-margin: 2rem; --normal-margin: 2rem;
--small-margin: 1rem; --small-margin: 1rem;
--shadow: 0 0 5px 2px rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.2); --shadow: 0 0 5px 2px rgba(0, 0, 0, 0.15), 0 0 1px rgba(0, 0, 0, 0.2);
--icon-size: 2.8rem; --icon-size: 2.5rem;
--large-icon-size: 3.75rem; --large-icon-size: 3.75rem;
--body-width: min(80%, 60rem); --body-width: min(80%, 60rem);
} }
@ -29,5 +29,6 @@
--body-width: 90%; --body-width: 90%;
--large-margin: 2.8rem; --large-margin: 2.8rem;
--normal-margin: 2rem; --normal-margin: 2rem;
--icon-size: 2rem;
} }
} }