UNPKG

@vaadin/vaadin-lumo-styles

Version:

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

188 lines (159 loc) 5.95 kB
/** * @license * Copyright (c) 2017 - 2026 Vaadin Ltd. * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/ */ @media lumo_mixins_field-base { :host { display: inline-flex; outline: none; --lumo-text-field-size: var(--lumo-size-m); color: var(--vaadin-input-field-value-color, var(--lumo-body-text-color)); font-size: var(--vaadin-input-field-value-font-size, var(--lumo-font-size-m)); font-family: var(--lumo-font-family); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-tap-highlight-color: transparent; padding: var(--lumo-space-xs) 0; --_focus-ring-color: var(--vaadin-focus-ring-color, var(--lumo-primary-color-50pct)); --_focus-ring-width: var(--vaadin-focus-ring-width, 2px); --_input-height: var(--vaadin-input-field-height, var(--lumo-text-field-size)); --_disabled-value-color: var(--vaadin-input-field-disabled-value-color, var(--lumo-disabled-text-color)); } :host::before { content: '\2003'; width: 0; /* Size and position this element on the same vertical position as the input-field element to make vertical align for the host element work as expected */ height: var(--_input-height); box-sizing: border-box; display: inline-flex; align-items: center; } [class$='container'] { display: flex; flex-direction: column; min-width: 100%; max-width: 100%; width: var(--vaadin-field-default-width, 12em); } :host([hidden]) { display: none !important; } :host([focused]) [part='input-field'] ::slotted(:is(input, textarea)) { mask-image: none; } ::slotted(:is(input, textarea):placeholder-shown) { color: var(--vaadin-input-field-placeholder-color, var(--lumo-secondary-text-color)); } /* Hover */ :host(:hover:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after { opacity: var(--vaadin-input-field-hover-highlight-opacity, 0.1); } /* Touch device adjustment */ @media (pointer: coarse) { :host(:hover:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after { opacity: 0; } :host(:active:not([readonly]):not([focused]):not([disabled])) [part='input-field']::after { opacity: 0.2; } } /* Trigger when not focusing using the keyboard */ :host([focused]:not([focus-ring]):not([readonly])) [part='input-field']::after { transform: scaleX(0); transition-duration: 0.15s, 1s; } /* Opt-in focus-ring when using pointer devices */ /* This applies a focus-ring as box-shadow when the element is focused, but the ring is only visible / has a width when the respective CSS property is "enabled" using a value of 1 */ :host([focused]) [part='input-field'] { /* Borders are implemented using box-shadows as well. To avoid overriding the border on focus, even if the pointer focus-ring is disabled, we need to: - Duplicate the border box shadow for this rule - Remove the border (by using width of 0) when the focus-ring is visible, which is the same behavior as for the keyboard focus-ring below - Apply the border when the focus ring is not visible */ --_pointer-focus-visible: clamp(0, var(--lumo-input-field-pointer-focus-visible, 0), 1); --_conditional-border-width: calc(calc(1 - var(--_pointer-focus-visible)) * var(--_input-border-width)); --_conditional-focus-ring-width: calc(var(--_pointer-focus-visible) * var(--_focus-ring-width)); box-shadow: inset 0 0 0 var(--_conditional-border-width) var(--_input-border-color), 0 0 0 var(--_conditional-focus-ring-width) var(--_focus-ring-color); } /* Focus-ring when using keyboard navigation */ :host([focus-ring]) [part='input-field'] { box-shadow: 0 0 0 var(--_focus-ring-width) var(--_focus-ring-color); } /* Read-only and disabled */ :host(:is([readonly], [disabled])) ::slotted(:is(input, textarea):placeholder-shown) { opacity: 0; } /* Read-only style */ :host([readonly]) { --vaadin-input-field-border-color: transparent; } /* Disabled style */ :host([disabled]) { pointer-events: none; --vaadin-input-field-border-color: var(--lumo-contrast-20pct); } :host([disabled]) [part='label'], :host([disabled]) [part='input-field'] ::slotted([slot$='fix']) { color: var(--lumo-disabled-text-color); -webkit-text-fill-color: var(--lumo-disabled-text-color); } :host([disabled]) [part='input-field'] ::slotted(:not([slot$='fix'])) { color: var(--_disabled-value-color); -webkit-text-fill-color: var(--_disabled-value-color); } /* Invalid style */ :host([invalid]) { --vaadin-input-field-border-color: var(--lumo-error-color); --_focus-ring-color: var(--lumo-error-color-50pct); } :host([input-prevented]) [part='input-field'] { animation: shake 0.15s infinite; } @keyframes shake { 25% { transform: translateX(4px); } 75% { transform: translateX(-4px); } } /* Small theme */ :host([theme~='small']) { font-size: var(--lumo-font-size-s); --lumo-text-field-size: var(--lumo-size-s); } :host([theme~='small']) [part='label'] { font-size: var(--lumo-font-size-xs); } :host([theme~='small']) [part='error-message'] { font-size: var(--lumo-font-size-xxs); } /* Slotted content */ [part='input-field'] ::slotted(:not(vaadin-icon):not(input):not(textarea)) { color: var(--lumo-secondary-text-color); font-weight: 400; } [part~='clear-button']::before { content: var(--lumo-icons-cross); } @media (forced-colors: active) { :host(:not([readonly])) [part='input-field'] { outline: 1px solid; outline-offset: -1px; } :host([focused]) [part='input-field'] { outline-width: 2px; } :host([disabled]) [part='input-field'] { outline-color: GrayText; } } }