vaadin-lumo-stylespackage.mixins.menu-overlay.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of vaadin-webcomponents Show documentation
Show all versions of vaadin-webcomponents Show documentation
Mvnpm composite: Vaadin webcomponents
The newest version!
/**
* @license
* Copyright (c) 2017 - 2024 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
import '../spacing.js';
import '../style.js';
import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js';
import { overlay } from './overlay.js';
const menuOverlayCore = css`
:host([opening]),
:host([closing]) {
animation: 0.14s lumo-overlay-dummy-animation;
}
[part='overlay'] {
will-change: opacity, transform;
}
:host([opening]) [part='overlay'] {
animation: 0.1s lumo-menu-overlay-enter ease-out both;
}
@keyframes lumo-menu-overlay-enter {
0% {
opacity: 0;
transform: translateY(-4px);
}
}
:host([closing]) [part='overlay'] {
animation: 0.1s lumo-menu-overlay-exit both;
}
@keyframes lumo-menu-overlay-exit {
100% {
opacity: 0;
}
}
`;
registerStyles('', menuOverlayCore, { moduleId: 'lumo-menu-overlay-core' });
const menuOverlayExt = css`
/* Small viewport (bottom sheet) styles */
/* Use direct media queries instead of the state attributes ([phone] and [fullscreen]) provided by the elements */
@media (max-width: 420px), (max-height: 420px) {
:host {
top: 0 !important;
right: 0 !important;
bottom: var(--vaadin-overlay-viewport-bottom, 0) !important;
left: 0 !important;
align-items: stretch !important;
justify-content: flex-end !important;
}
[part='overlay'] {
max-height: 50vh;
width: 100vw;
border-radius: 0;
box-shadow: var(--lumo-box-shadow-xl);
}
/* The content part scrolls instead of the overlay part, because of the gradient fade-out */
[part='content'] {
padding: 30px var(--lumo-space-m);
max-height: inherit;
box-sizing: border-box;
-webkit-overflow-scrolling: touch;
overflow: auto;
-webkit-mask-image: linear-gradient(transparent, #000 40px, #000 calc(100% - 40px), transparent);
mask-image: linear-gradient(transparent, #000 40px, #000 calc(100% - 40px), transparent);
}
[part='backdrop'] {
display: block;
}
/* Animations */
:host([opening]) [part='overlay'] {
animation: 0.2s lumo-mobile-menu-overlay-enter cubic-bezier(0.215, 0.61, 0.355, 1) both;
}
:host([closing]),
:host([closing]) [part='backdrop'] {
animation-delay: 0.14s;
}
:host([closing]) [part='overlay'] {
animation: 0.14s 0.14s lumo-mobile-menu-overlay-exit cubic-bezier(0.55, 0.055, 0.675, 0.19) both;
}
}
@keyframes lumo-mobile-menu-overlay-enter {
0% {
transform: translateY(150%);
}
}
@keyframes lumo-mobile-menu-overlay-exit {
100% {
transform: translateY(150%);
}
}
`;
const menuOverlay = [overlay, menuOverlayCore, menuOverlayExt];
registerStyles('', menuOverlay, { moduleId: 'lumo-menu-overlay' });
export { menuOverlayCore, menuOverlay };