UNPKG

@vaadin/custom-field

Version:
98 lines (82 loc) 3.02 kB
/** * @license * Copyright (c) 2019 - 2025 Vaadin Ltd. * This program is available under Apache License Version 2.0, available at https://vaadin.com/license/ */ import '@vaadin/vaadin-lumo-styles/color.js'; import '@vaadin/vaadin-lumo-styles/sizing.js'; import '@vaadin/vaadin-lumo-styles/spacing.js'; import '@vaadin/vaadin-lumo-styles/typography.js'; import { helper } from '@vaadin/vaadin-lumo-styles/mixins/helper.js'; import { requiredField } from '@vaadin/vaadin-lumo-styles/mixins/required-field.js'; import { css, registerStyles } from '@vaadin/vaadin-themable-mixin/vaadin-themable-mixin.js'; const customField = css` :host { --lumo-text-field-size: var(--lumo-size-m); color: var(--lumo-body-text-color); font-size: var(--lumo-font-size-m); /* align with text-field height + vertical paddings */ line-height: calc(var(--lumo-text-field-size) + 2 * var(--lumo-space-xs)); font-family: var(--lumo-font-family); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-tap-highlight-color: transparent; padding: 0; } :host::before { margin-top: var(--lumo-space-xs); height: var(--lumo-text-field-size); box-sizing: border-box; display: inline-flex; align-items: center; } /* align with text-field label */ :host([has-label]) [part='label'] { padding-bottom: calc(0.5em - var(--lumo-space-xs)); } :host(:not([has-label])) [part='label'], :host(:not([has-label]))::before { display: none; } /* align with text-field error message */ :host([has-error-message]) [part='error-message']::before { height: calc(0.4em - var(--lumo-space-xs)); } :host([focused]:not([readonly]):not([disabled])) [part='label'] { color: var(--lumo-primary-text-color); } :host(:hover:not([readonly]):not([disabled]):not([focused])) [part='label'], :host(:hover:not([readonly]):not([disabled]):not([focused])) [part='helper-text'] { color: var(--lumo-body-text-color); } /* Touch device adjustment */ @media (pointer: coarse) { :host(:hover:not([readonly]):not([disabled]):not([focused])) [part='label'] { color: var(--lumo-secondary-text-color); } } /* Disabled */ :host([disabled]) [part='label'] { color: var(--lumo-disabled-text-color); -webkit-text-fill-color: var(--lumo-disabled-text-color); } /* Small theme */ :host([theme~='small']) { font-size: var(--lumo-font-size-s); --lumo-text-field-size: var(--lumo-size-s); } :host([theme~='small'][has-label]) [part='label'] { font-size: var(--lumo-font-size-xs); } :host([theme~='small'][has-label]) [part='error-message'] { font-size: var(--lumo-font-size-xxs); } /* When custom-field is used with components without outer margin */ :host([theme~='whitespace'][has-label]) [part='label'] { padding-bottom: 0.5em; } `; registerStyles('vaadin-custom-field', [requiredField, helper, customField], { moduleId: 'lumo-custom-field', }); export { customField };