This commit is contained in:
@@ -1,8 +1,11 @@
|
|||||||
<button class="sidebar-toggle" (click)="toggle()" [attr.aria-expanded]="!collapsed" aria-label="Sidebar umschalten" mat-icon-button type="button">
|
<button (click)="toggle()" [attr.aria-expanded]="!collapsed" aria-label="Sidebar umschalten" class="sidebar-toggle" mat-icon-button type="button">
|
||||||
<fa-icon [icon]="collapsed ? closedIcon : openIcon"></fa-icon>
|
<fa-icon [icon]="collapsed ? closedIcon : openIcon"></fa-icon>
|
||||||
</button>
|
</button>
|
||||||
|
@if (!collapsed) {
|
||||||
|
<button (click)="close()" aria-label="Sidebar schließen" class="sidebar-backdrop" tabindex="-1" type="button"></button>
|
||||||
|
}
|
||||||
<aside [class.collapsed]="collapsed">
|
<aside [class.collapsed]="collapsed">
|
||||||
<div class="sidebar-toggle-placeholder" aria-hidden="true"></div>
|
<div aria-hidden="true" class="sidebar-toggle-placeholder"></div>
|
||||||
<div class="sidebar-body">
|
<div class="sidebar-body">
|
||||||
<ng-content select="[sidebar]"></ng-content>
|
<ng-content select="[sidebar]"></ng-content>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
--sidebar-width: 300px;
|
--sidebar-width: 300px;
|
||||||
--sidebar-toggle-size: 48px;
|
--sidebar-toggle-size: 48px;
|
||||||
--sidebar-toggle-offset: 12px;
|
--sidebar-toggle-offset: 12px;
|
||||||
|
--sidebar-mobile-width: min(92vw, 360px);
|
||||||
display: grid;
|
display: grid;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
@@ -24,13 +25,14 @@
|
|||||||
left: var(--sidebar-toggle-offset);
|
left: var(--sidebar-toggle-offset);
|
||||||
z-index: 11;
|
z-index: 11;
|
||||||
color: var(--icon-button-color);
|
color: var(--icon-button-color);
|
||||||
background: transparent;
|
background: var(--surface-strong);
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
border-radius: 999px;
|
||||||
}
|
}
|
||||||
|
|
||||||
:host.collapsed .sidebar-toggle {
|
:host.collapsed .sidebar-toggle {
|
||||||
--icon-button-color: var(--text-inverse);
|
--icon-button-color: var(--text);
|
||||||
--icon-button-hover-color: var(--text-inverse);
|
--icon-button-hover-color: var(--primary-active);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-toggle fa-icon {
|
.sidebar-toggle fa-icon {
|
||||||
@@ -41,6 +43,10 @@
|
|||||||
color: var(--icon-button-hover-color);
|
color: var(--icon-button-hover-color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-backdrop {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
aside {
|
aside {
|
||||||
width: var(--sidebar-width);
|
width: var(--sidebar-width);
|
||||||
height: calc(100vh - 50px);
|
height: calc(100vh - 50px);
|
||||||
@@ -76,3 +82,45 @@ aside.collapsed {
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 1100px) {
|
||||||
|
:host,
|
||||||
|
:host.collapsed {
|
||||||
|
display: block;
|
||||||
|
grid-template-columns: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-toggle {
|
||||||
|
top: calc(50px + 8px);
|
||||||
|
left: 12px;
|
||||||
|
right: auto;
|
||||||
|
z-index: 13;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-backdrop {
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
inset: 50px 0 0 0;
|
||||||
|
z-index: 11;
|
||||||
|
border: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: rgba(0, 0, 0, 0.32);
|
||||||
|
}
|
||||||
|
|
||||||
|
aside {
|
||||||
|
width: var(--sidebar-mobile-width);
|
||||||
|
max-width: 100%;
|
||||||
|
z-index: 12;
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
}
|
||||||
|
|
||||||
|
aside.collapsed {
|
||||||
|
transform: translateX(calc(-1 * var(--sidebar-mobile-width)));
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
grid-column: auto;
|
||||||
|
width: 100%;
|
||||||
|
padding-top: calc(var(--sidebar-toggle-size) + 6px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,4 +19,14 @@ describe('SidebarComponent', () => {
|
|||||||
it('should create', () => {
|
it('should create', () => {
|
||||||
expect(component).toBeTruthy();
|
expect(component).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should toggle and close the sidebar', () => {
|
||||||
|
expect(component.collapsed).toBeTrue();
|
||||||
|
|
||||||
|
component.toggle();
|
||||||
|
expect(component.collapsed).toBeFalse();
|
||||||
|
|
||||||
|
component.close();
|
||||||
|
expect(component.collapsed).toBeTrue();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -20,4 +20,8 @@ export class SidebarComponent {
|
|||||||
public toggle(): void {
|
public toggle(): void {
|
||||||
this.collapsed = !this.collapsed;
|
this.collapsed = !this.collapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public close(): void {
|
||||||
|
this.collapsed = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user