UNPKG

@vaadin/vaadin-lumo-styles

Version:

Lumo is a design system foundation for modern web applications, used by Vaadin components

114 lines (93 loc) 2.97 kB
/** * @license * Copyright (c) 2017 - 2025 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: 450px), (max-height: 450px) { :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 };