From 6d4c8e5942721a317c3dab746d652f06f8fdcdc2 Mon Sep 17 00:00:00 2001 From: Lea Verou Date: Mon, 16 Dec 2024 13:21:27 -0500 Subject: [PATCH 01/41] Simplify Classic theme using the new CSS files --- src/styles/themes/classic.css | 277 ++++++++++++----------- src/styles/themes/classic_components.css | 154 ------------- 2 files changed, 145 insertions(+), 286 deletions(-) delete mode 100644 src/styles/themes/classic_components.css diff --git a/src/styles/themes/classic.css b/src/styles/themes/classic.css index 76534caf9..d0eba8210 100644 --- a/src/styles/themes/classic.css +++ b/src/styles/themes/classic.css @@ -1,4 +1,8 @@ -@import 'classic_components.css'; +@import url('default/typography.css'); +@import url('default/space.css'); +@import url('default/outlines.css'); +@import url('default/shadows.css'); +@import url('default/groups.css'); :root, :host, @@ -203,123 +207,21 @@ --wa-font-family-code: SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace; --wa-font-family-longform: Georgia, 'Times New Roman', serif; - /* The default type scale is roughly based on the Major Second scale (x1.125), - * with each value rounded to the nearest whole pixel based on a 16px root font size. - * For larger font sizes, every other step on the scale is skipped in order to maximize variation. - * A multiplier is provided to uniformly increase or decrease all font sizes. */ - --wa-font-size-scale: 1; - --wa-font-size-2xs: calc(0.6875rem * var(--wa-font-size-scale)); /* 11px */ - --wa-font-size-xs: calc(0.75rem * var(--wa-font-size-scale)); /* 12px */ - --wa-font-size-s: calc(0.875rem * var(--wa-font-size-scale)); /* 14px */ - --wa-font-size-m: calc(1rem * var(--wa-font-size-scale)); /* 16px */ - --wa-font-size-l: calc(1.25rem * var(--wa-font-size-scale)); /* 20px */ - --wa-font-size-xl: calc(1.625rem * var(--wa-font-size-scale)); /* 26px */ - --wa-font-size-2xl: calc(2rem * var(--wa-font-size-scale)); /* 32px */ - --wa-font-size-3xl: calc(2.5625rem * var(--wa-font-size-scale)); /* 41px */ - --wa-font-size-4xl: calc(3.25rem * var(--wa-font-size-scale)); /* 52px */ - - --wa-font-weight-light: 300; - --wa-font-weight-normal: 400; - --wa-font-weight-semibold: 500; - --wa-font-weight-bold: 600; - - --wa-font-weight-body: var(--wa-font-weight-normal); - --wa-font-weight-heading: var(--wa-font-weight-semibold); - --wa-font-weight-action: var(--wa-font-weight-semibold); - - --wa-line-height-condensed: 1.2; - --wa-line-height-normal: 1.6; - --wa-line-height-expanded: 2; - --wa-link-decoration-default: underline color-mix(in oklab, var(--wa-color-text-link) 70%, transparent) dotted; - --wa-link-decoration-hover: underline; - - /** - * Spacing - */ - - /* A multiplier is provided to uniformly increase or decrease all spacing. */ - --wa-space-scale: 1; - --wa-space-3xs: calc(var(--wa-space-scale) * 0.125rem); /* 2px */ - --wa-space-2xs: calc(var(--wa-space-scale) * 0.25rem); /* 4px */ - --wa-space-xs: calc(var(--wa-space-scale) * 0.5rem); /* 8px */ - --wa-space-s: calc(var(--wa-space-scale) * 0.75rem); /* 12px */ - --wa-space-m: calc(var(--wa-space-scale) * 1rem); /* 16px */ - --wa-space-l: calc(var(--wa-space-scale) * 1.25rem); /* 20px */ - --wa-space-xl: calc(var(--wa-space-scale) * 1.5rem); /* 24px */ - --wa-space-2xl: calc(var(--wa-space-scale) * 2rem); /* 32px */ - --wa-space-3xl: calc(var(--wa-space-scale) * 3rem); /* 48px */ - - /** - * Borders - */ - --wa-border-style: solid; - - /* A multiplier is provided to uniformly increase or decrease all border widths. */ - --wa-border-width-scale: 0.0625; - --wa-border-width-s: calc(var(--wa-border-width-scale) * 1rem); - --wa-border-width-m: calc(var(--wa-border-width-scale) * 2rem); - --wa-border-width-l: calc(var(--wa-border-width-scale) * 3rem); - - /* A multiplier is provided to uniformly increase or decrease all border radii. */ - --wa-border-radius-scale: 0.25; - --wa-border-radius-xs: calc(var(--wa-border-radius-scale) * 0.5rem); - --wa-border-radius-s: calc(var(--wa-border-radius-scale) * 1rem); - --wa-border-radius-m: calc(var(--wa-border-radius-scale) * 2rem); - --wa-border-radius-l: calc(var(--wa-border-radius-scale) * 3rem); - - /* These common border radius properties can create specific shapes beyond the theme's preferred corner styles. */ - --wa-border-radius-pill: 9999px; - --wa-border-radius-circle: 50%; - --wa-border-radius-square: 0px; /** * Focus */ - --wa-focus-ring-style: solid; - --wa-focus-ring-width: 0.1875rem; /* 3px */ --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) color-mix(in oklab, var(--wa-color-focus) 60%, transparent); - --wa-focus-ring-offset: 0.0625rem; /* 1px */ /** * Shadows * Shadow properties are highly modular to make it easy to create custom shadow effects or transform elements based on specific shadow qualities. * A multiplier is provided for each shadow quality to uniformly scale all related values. */ - - --wa-shadow-offset-x-scale: 0; - --wa-shadow-offset-x-xs: calc(var(--wa-shadow-offset-x-scale) * 0.5rem); - --wa-shadow-offset-x-s: calc(var(--wa-shadow-offset-x-scale) * 1rem); - --wa-shadow-offset-x-m: calc(var(--wa-shadow-offset-x-scale) * 2rem); - --wa-shadow-offset-x-l: calc(var(--wa-shadow-offset-x-scale) * 4rem); - --wa-shadow-offset-y-scale: 0.0625; - --wa-shadow-offset-y-xs: calc(var(--wa-shadow-offset-y-scale) * 0.5rem); - --wa-shadow-offset-y-s: calc(var(--wa-shadow-offset-y-scale) * 1rem); - --wa-shadow-offset-y-m: calc(var(--wa-shadow-offset-y-scale) * 2rem); - --wa-shadow-offset-y-l: calc(var(--wa-shadow-offset-y-scale) * 4rem); - - --wa-shadow-blur-scale: 0.125; - --wa-shadow-blur-xs: calc(var(--wa-shadow-blur-scale) * 0.5rem); - --wa-shadow-blur-s: calc(var(--wa-shadow-blur-scale) * 1rem); - --wa-shadow-blur-m: calc(var(--wa-shadow-blur-scale) * 2rem); - --wa-shadow-blur-l: calc(var(--wa-shadow-blur-scale) * 4rem); - --wa-shadow-spread-scale: 0; - --wa-shadow-spread-xs: calc(var(--wa-shadow-spread-scale) * 0.5rem); - --wa-shadow-spread-s: calc(var(--wa-shadow-spread-scale) * 1rem); - --wa-shadow-spread-m: calc(var(--wa-shadow-spread-scale) * 2rem); - --wa-shadow-spread-l: calc(var(--wa-shadow-spread-scale) * 4rem); - - --wa-shadow-xs: var(--wa-shadow-offset-x-xs) var(--wa-shadow-offset-y-xs) var(--wa-shadow-blur-xs) - var(--wa-shadow-spread-xs) var(--wa-color-shadow); - --wa-shadow-s: var(--wa-shadow-offset-x-s) var(--wa-shadow-offset-y-s) var(--wa-shadow-blur-s) - var(--wa-shadow-spread-s) var(--wa-color-shadow); - --wa-shadow-m: var(--wa-shadow-offset-x-m) var(--wa-shadow-offset-y-m) var(--wa-shadow-blur-m) - var(--wa-shadow-spread-m) var(--wa-color-shadow); - --wa-shadow-l: var(--wa-shadow-offset-x-l) var(--wa-shadow-offset-y-l) var(--wa-shadow-blur-l) - var(--wa-shadow-spread-l) var(--wa-color-shadow); /** * Transitions @@ -335,48 +237,19 @@ */ /* Form controls */ - --wa-form-control-background-color: var(--wa-color-surface-default); - - --wa-form-control-border-style: var(--wa-border-style); - --wa-form-control-border-width: var(--wa-border-width-s); - --wa-form-control-border-radius: var(--wa-border-radius-s); - - --wa-form-control-activated-color: var(--wa-color-brand-fill-loud); --wa-form-control-resting-color: var(--wa-color-neutral-border-normal); - - --wa-form-control-label-color: var(--wa-color-text-normal); - --wa-form-control-label-font-weight: var(--wa-font-weight-normal); --wa-form-control-label-line-height: var(--wa-line-height-normal); - --wa-form-control-value-color: var(--wa-color-text-normal); - --wa-form-control-value-font-weight: var(--wa-font-weight-body); - --wa-form-control-value-line-height: var(--wa-line-height-condensed); - - --wa-form-control-placeholder-color: var(--wa-color-gray-60); - --wa-form-control-height-s: 1.875rem; --wa-form-control-height-m: 2.5rem; --wa-form-control-height-l: 3.125rem; - --wa-form-control-required-content: '*'; - --wa-form-control-required-content-color: inherit; - --wa-form-control-required-content-offset: -0.1em; - /* Panels */ - --wa-panel-border-style: var(--wa-border-style); - --wa-panel-border-width: var(--wa-border-width-s); --wa-panel-border-radius: var(--wa-border-radius-s); /* Tooltips */ - --wa-tooltip-arrow-size: 0.375rem; - --wa-tooltip-background-color: var(--wa-color-text-normal); - - --wa-tooltip-border-radius: var(--wa-border-radius-s); - --wa-tooltip-content-color: var(--wa-color-surface-default); - --wa-tooltip-font-size: var(--wa-font-size-s); - --wa-tooltip-line-height: var(--wa-line-height-normal); } .wa-theme-classic-dark, @@ -462,3 +335,143 @@ --wa-color-neutral-on-normal: var(--wa-color-gray-70); --wa-color-neutral-on-loud: var(--wa-color-gray-05); } + +/** + * Component style overrides + */ +wa-avatar { + --background-color: var(--wa-color-neutral-fill-loud); + --content-color: var(--wa-color-neutral-on-loud); +} + +wa-button, +wa-radio-button { + &[size='small'] { + font-size: var(--wa-font-size-xs); + } + + &[size='medium'] { + font-size: var(--wa-font-size-s); + } + + &[size='large'] { + font-size: var(--wa-font-size-m); + } +} + +wa-radio-button { + --background-color-active: color-mix(in oklab, var(--background-color-hover), var(--wa-color-mix-active)); + --background-color-hover: var(--wa-form-control-activated-color); + --border-color: var(--wa-form-control-resting-color); + --border-color-active: var(--background-color-active); + --border-color-hover: var(--background-color-hover); + --label-color-active: var(--label-color-hover); + --label-color-hover: var(--wa-color-brand-on-loud); + --indicator-color: var(--wa-background-color); + + &[checked] { + --background-color: var(--wa-form-control-activated-color); + --border-color: var(--background-color); + --label-color: var(--wa-color-brand-on-loud); + } +} + +wa-breadcrumb { + font-size: var(--wa-font-size-s); +} + +/* #region Callouts */ +wa-callout { + --background-color: var(--wa-color-surface-raised); + --border-width: var(--wa-border-width-l) var(--wa-border-width-s) var(--wa-border-width-s) var(--wa-border-width-s); + --content-color: var(--wa-color-text-normal); + --spacing: var(--wa-space-l); + + font-size: var(--wa-font-size-s); + + &[variant='brand'] { + --border-color: var(--wa-color-brand-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-brand-fill-loud); + } + + &[variant='success'] { + --border-color: var(--wa-color-success-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-success-fill-loud); + } + + &[variant='neutral'] { + --border-color: var(--wa-color-neutral-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-neutral-fill-loud); + } + + &[variant='warning'] { + --border-color: var(--wa-color-warning-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-warning-fill-loud); + } + + &[variant='danger'] { + --border-color: var(--wa-color-danger-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) + var(--wa-color-surface-border); + --icon-color: var(--wa-color-danger-fill-loud); + } +} + +wa-card { + --background-color: var(--wa-color-surface-raised); +} + +wa-carousel { + --box-shadow: var(--wa-shadow-xs); + --pagination-color-active: var(--wa-color-neutral-fill-loud); +} + +wa-dialog, +wa-drawer { + --spacing: var(--wa-space-l); +} + +wa-input:not([filled]), +wa-select:not([filled]), +wa-textarea:not([filled]) { + --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) + color-mix(in oklab, var(--wa-color-focus), transparent 50%); + --wa-focus-ring-offset: 0; +} + +wa-radio { + --background-color-checked: var(--border-color-checked); + --checked-icon-color: var(--wa-color-surface-default); + --checked-icon-scale: 0.4; +} + +wa-range { + --thumb-gap: 0; +} + +wa-switch { + --background-color: var(--wa-color-gray-50); + --border-color: var(--background-color); + --height: calc(1em * var(--wa-form-control-value-line-height) - var(--border-width) * 2); + --thumb-color: var(--wa-color-surface-default); + --thumb-size: calc(var(--height) + 4px); + --width: calc(var(--height) * 2); + + &::part(thumb) { + border: var(--wa-border-width-s) var(--wa-border-style) var(--background-color); + } + &[checked]::part(thumb) { + border-color: var(--background-color-checked); + } +} + +wa-progress-bar { + --height: 1rem; +} + +wa-tab { + font-size: var(--wa-font-size-s); +} diff --git a/src/styles/themes/classic_components.css b/src/styles/themes/classic_components.css deleted file mode 100644 index 18fd9883e..000000000 --- a/src/styles/themes/classic_components.css +++ /dev/null @@ -1,154 +0,0 @@ -/* #region Avatars */ -wa-avatar { - --background-color: var(--wa-color-neutral-fill-loud); - --content-color: var(--wa-color-neutral-on-loud); -} -/* #endregion */ - -/* #region Buttons */ -wa-button, -wa-radio-button { - &[size='small'] { - font-size: var(--wa-font-size-xs); - } - - &[size='medium'] { - font-size: var(--wa-font-size-s); - } - - &[size='large'] { - font-size: var(--wa-font-size-m); - } -} - -wa-radio-button { - --background-color-active: color-mix(in oklab, var(--background-color-hover), var(--wa-color-mix-active)); - --background-color-hover: var(--wa-form-control-activated-color); - --border-color: var(--wa-form-control-resting-color); - --border-color-active: var(--background-color-active); - --border-color-hover: var(--background-color-hover); - --label-color-active: var(--label-color-hover); - --label-color-hover: var(--wa-color-brand-on-loud); - --indicator-color: var(--wa-background-color); -} - -wa-radio-button[checked] { - --background-color: var(--wa-form-control-activated-color); - --border-color: var(--background-color); - --label-color: var(--wa-color-brand-on-loud); -} -/* #endregion */ - -/* #region Breadcrumbs */ -wa-breadcrumb { - font-size: var(--wa-font-size-s); -} - -/* #region Callouts */ -wa-callout { - --background-color: var(--wa-color-surface-raised); - --border-width: var(--wa-border-width-l) var(--wa-border-width-s) var(--wa-border-width-s) var(--wa-border-width-s); - --content-color: var(--wa-color-text-normal); - --spacing: var(--wa-space-l); - - font-size: var(--wa-font-size-s); - - &[variant='brand'] { - --border-color: var(--wa-color-brand-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-brand-fill-loud); - } - - &[variant='success'] { - --border-color: var(--wa-color-success-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-success-fill-loud); - } - - &[variant='neutral'] { - --border-color: var(--wa-color-neutral-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-neutral-fill-loud); - } - - &[variant='warning'] { - --border-color: var(--wa-color-warning-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-warning-fill-loud); - } - - &[variant='danger'] { - --border-color: var(--wa-color-danger-fill-loud) var(--wa-color-surface-border) var(--wa-color-surface-border) - var(--wa-color-surface-border); - --icon-color: var(--wa-color-danger-fill-loud); - } -} -/* #endregion */ - -/* #region Cards */ -wa-card { - --background-color: var(--wa-color-surface-raised); -} -/* #endregion */ - -/* #region Carousel */ -wa-carousel { - --box-shadow: var(--wa-shadow-xs); - --pagination-color-active: var(--wa-color-neutral-fill-loud); -} -/* #endregion */ - -/* #region Modals */ -wa-dialog, -wa-drawer { - --spacing: var(--wa-space-l); -} -/* #endregion */ - -/* #region Inputs */ -wa-input:not([filled]), -wa-select:not([filled]), -wa-textarea:not([filled]) { - --wa-focus-ring: var(--wa-focus-ring-style) var(--wa-focus-ring-width) - color-mix(in oklab, var(--wa-color-focus), transparent 50%); - --wa-focus-ring-offset: 0; -} - -wa-radio { - --background-color-checked: var(--border-color-checked); - --checked-icon-color: var(--wa-color-surface-default); - --checked-icon-scale: 0.4; -} - -wa-range { - --thumb-gap: 0; -} - -wa-switch { - --background-color: var(--wa-color-gray-50); - --border-color: var(--background-color); - --height: calc(1em * var(--wa-form-control-value-line-height) - var(--border-width) * 2); - --thumb-color: var(--wa-color-surface-default); - --thumb-size: calc(var(--height) + 4px); - --width: calc(var(--height) * 2); - - &::part(thumb) { - border: var(--wa-border-width-s) var(--wa-border-style) var(--background-color); - } - &[checked]::part(thumb) { - border-color: var(--background-color-checked); - } -} -/* #endregion */ - -/* #region Progress Indicators */ -wa-progress-bar { - --height: 1rem; -} -/* #endregion */ - -/* #region Tabs */ -wa-tab { - font-size: var(--wa-font-size-s); -} -/* #endregion */ From 70fab26e6b72821a8691b2a0b2a6f072a2ac3806 Mon Sep 17 00:00:00 2001 From: Cory LaViska Date: Mon, 16 Dec 2024 14:38:22 -0500 Subject: [PATCH 02/41] empty styles for these components --- src/components/format-bytes/format-bytes.ts | 6 +++++- src/components/format-date/format-date.ts | 6 +++++- src/components/format-number/format-number.ts | 6 +++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/components/format-bytes/format-bytes.ts b/src/components/format-bytes/format-bytes.ts index 71ab333ff..7aecb7902 100644 --- a/src/components/format-bytes/format-bytes.ts +++ b/src/components/format-bytes/format-bytes.ts @@ -10,6 +10,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-bytes') export default class WaFormatBytes extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** The number to format in bytes. */ @@ -36,7 +40,7 @@ export default class WaFormatBytes extends WebAwesomeElement { return this.localize.number(valueToFormat, { style: 'unit', unit, - unitDisplay: this.display, + unitDisplay: this.display }); } } diff --git a/src/components/format-date/format-date.ts b/src/components/format-date/format-date.ts index 91bffd9be..1f6c615d3 100644 --- a/src/components/format-date/format-date.ts +++ b/src/components/format-date/format-date.ts @@ -11,6 +11,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-date') export default class WaFormatDate extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** @@ -75,7 +79,7 @@ export default class WaFormatDate extends WebAwesomeElement { second: this.second, timeZoneName: this.timeZoneName, timeZone: this.timeZone, - hour12: hour12, + hour12: hour12 })} `; diff --git a/src/components/format-number/format-number.ts b/src/components/format-number/format-number.ts index ba527dc4c..9991b4474 100644 --- a/src/components/format-number/format-number.ts +++ b/src/components/format-number/format-number.ts @@ -10,6 +10,10 @@ import { LocalizeController } from '../../utilities/localize.js'; */ @customElement('wa-format-number') export default class WaFormatNumber extends WebAwesomeElement { + static get styles() { + return []; + } + private readonly localize = new LocalizeController(this); /** The number to format. */ @@ -56,7 +60,7 @@ export default class WaFormatNumber extends WebAwesomeElement { minimumFractionDigits: this.minimumFractionDigits, maximumFractionDigits: this.maximumFractionDigits, minimumSignificantDigits: this.minimumSignificantDigits, - maximumSignificantDigits: this.maximumSignificantDigits, + maximumSignificantDigits: this.maximumSignificantDigits }); } } From 6996d175317cff6f6624aaa14888cf0c74b2a264 Mon Sep 17 00:00:00 2001 From: Lea Verou Date: Mon, 16 Dec 2024 15:02:08 -0500 Subject: [PATCH 03/41] Replace font-size variable with `1em` Revert "Replace font-size variable with `1em`" This reverts commit 1ac70f31abe2bab310bbfbdbb3aa5d4498c5648d. Replace font-size vars with 1em when calculating form control height --- docs/docs/experimental/themer.md | 6 +++--- docs/docs/theming/component-groups.md | 8 ++++---- src/styles/themes/active.css | 12 +++--------- src/styles/themes/brutalist.css | 12 +++--------- src/styles/themes/default/groups.css | 12 +++--------- src/styles/themes/fa.css | 21 ++++++--------------- src/styles/themes/glassy.css | 12 +++--------- src/styles/themes/mellow.css | 12 +++--------- src/styles/themes/migration.css | 12 +++--------- src/styles/themes/playful.css | 12 +++--------- src/styles/themes/premium.css | 12 +++--------- 11 files changed, 37 insertions(+), 94 deletions(-) diff --git a/docs/docs/experimental/themer.md b/docs/docs/experimental/themer.md index 4d7412d66..0247e71ad 100644 --- a/docs/docs/experimental/themer.md +++ b/docs/docs/experimental/themer.md @@ -170,13 +170,13 @@ hasOutline: false --wa-form-control-placeholder-color: color-mix(in oklab, var(--wa-color-text-normal), transparent); --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) + var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) + var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) + var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height) ); --wa-form-control-required-content: '*'; diff --git a/docs/docs/theming/component-groups.md b/docs/docs/theming/component-groups.md index d2b55dd1a..2203c11ef 100644 --- a/docs/docs/theming/component-groups.md +++ b/docs/docs/theming/component-groups.md @@ -27,9 +27,9 @@ Not every form control uses all of these custom properties. For example, ` This is a tooltip -``` \ No newline at end of file +``` diff --git a/src/styles/themes/active.css b/src/styles/themes/active.css index 6bb53c736..3e8704c9a 100644 --- a/src/styles/themes/active.css +++ b/src/styles/themes/active.css @@ -327,15 +327,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/brutalist.css b/src/styles/themes/brutalist.css index 74b3a0550..cbceb13f3 100644 --- a/src/styles/themes/brutalist.css +++ b/src/styles/themes/brutalist.css @@ -328,15 +328,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/default/groups.css b/src/styles/themes/default/groups.css index f1fc68ef1..e3b5e7bff 100644 --- a/src/styles/themes/default/groups.css +++ b/src/styles/themes/default/groups.css @@ -23,15 +23,9 @@ --wa-form-control-placeholder-color: var(--wa-color-gray-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/fa.css b/src/styles/themes/fa.css index 8f62b28ff..5f288b55e 100644 --- a/src/styles/themes/fa.css +++ b/src/styles/themes/fa.css @@ -332,15 +332,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-l) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-l) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; @@ -598,16 +592,13 @@ wa-input, wa-select { --wa-form-control-height-s: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); --wa-form-control-height-m: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); --wa-form-control-height-l: calc( - var(--wa-space-l) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) + - var(--wa-shadow-offset-y-s) + var(--wa-space-l) * 2 + 1em * var(--wa-form-control-value-line-height) + var(--wa-shadow-offset-y-s) ); & > wa-icon { diff --git a/src/styles/themes/glassy.css b/src/styles/themes/glassy.css index e44fc2791..dbfaf4557 100644 --- a/src/styles/themes/glassy.css +++ b/src/styles/themes/glassy.css @@ -326,15 +326,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/mellow.css b/src/styles/themes/mellow.css index 9c1d55a5e..076d4049f 100644 --- a/src/styles/themes/mellow.css +++ b/src/styles/themes/mellow.css @@ -326,15 +326,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/migration.css b/src/styles/themes/migration.css index c652e7960..3e155ccdd 100644 --- a/src/styles/themes/migration.css +++ b/src/styles/themes/migration.css @@ -329,15 +329,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/playful.css b/src/styles/themes/playful.css index 9b31bf58c..bd5bfbccd 100644 --- a/src/styles/themes/playful.css +++ b/src/styles/themes/playful.css @@ -341,15 +341,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; diff --git a/src/styles/themes/premium.css b/src/styles/themes/premium.css index 073a121d5..53a74a66b 100644 --- a/src/styles/themes/premium.css +++ b/src/styles/themes/premium.css @@ -329,15 +329,9 @@ --wa-form-control-placeholder-color: var(--wa-color-base-60); - --wa-form-control-height-s: calc( - var(--wa-space-xs) * 2 + var(--wa-font-size-s) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-m: calc( - var(--wa-space-s) * 2 + var(--wa-font-size-m) * var(--wa-form-control-value-line-height) - ); - --wa-form-control-height-l: calc( - var(--wa-space-m) * 2 + var(--wa-font-size-l) * var(--wa-form-control-value-line-height) - ); + --wa-form-control-height-s: calc(var(--wa-space-xs) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-m: calc(var(--wa-space-s) * 2 + 1em * var(--wa-form-control-value-line-height)); + --wa-form-control-height-l: calc(var(--wa-space-m) * 2 + 1em * var(--wa-form-control-value-line-height)); --wa-form-control-required-content: '*'; --wa-form-control-required-content-color: inherit; From 1ffdc1930587cc5c466f7883e3ea4889f30a0ebe Mon Sep 17 00:00:00 2001 From: Lea Verou Date: Mon, 16 Dec 2024 15:28:26 -0500 Subject: [PATCH 04/41] Add `variants.css` (not yet linked from anywhere) --- src/styles/utilities/variants.css | 69 +++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/styles/utilities/variants.css diff --git a/src/styles/utilities/variants.css b/src/styles/utilities/variants.css new file mode 100644 index 000000000..219c2a5a1 --- /dev/null +++ b/src/styles/utilities/variants.css @@ -0,0 +1,69 @@ +.wa-neutral { + --color-fill-loud: var(--wa-color-neutral-fill-loud); + --color-fill-normal: var(--wa-color-neutral-fill-normal); + --color-fill-quiet: var(--wa-color-neutral-fill-quiet); + + --color-border-loud: var(--wa-color-neutral-border-loud); + --color-border-normal: var(--wa-color-neutral-border-normal); + --color-border-quiet: var(--wa-color-neutral-border-quiet); + + --color-on-loud: var(--wa-color-neutral-on-loud); + --color-on-normal: var(--wa-color-neutral-on-normal); + --color-on-quiet: var(--wa-color-neutral-on-quiet); +} + +.wa-brand { + --color-fill-loud: var(--wa-color-brand-fill-loud); + --color-fill-normal: var(--wa-color-brand-fill-normal); + --color-fill-quiet: var(--wa-color-brand-fill-quiet); + + --color-border-loud: var(--wa-color-brand-border-loud); + --color-border-normal: var(--wa-color-brand-border-normal); + --color-border-quiet: var(--wa-color-brand-border-quiet); + + --color-on-loud: var(--wa-color-brand-on-loud); + --color-on-normal: var(--wa-color-brand-on-normal); + --color-on-quiet: var(--wa-color-brand-on-quiet); +} + +.wa-success { + --color-fill-loud: var(--wa-color-success-fill-loud); + --color-fill-normal: var(--wa-color-success-fill-normal); + --color-fill-quiet: var(--wa-color-success-fill-quiet); + + --color-border-loud: var(--wa-color-success-border-loud); + --color-border-normal: var(--wa-color-success-border-normal); + --color-border-quiet: var(--wa-color-success-border-quiet); + + --color-on-loud: var(--wa-color-success-on-loud); + --color-on-normal: var(--wa-color-success-on-normal); + --color-on-quiet: var(--wa-color-success-on-quiet); +} + +.wa-warning { + --color-fill-loud: var(--wa-color-warning-fill-loud); + --color-fill-normal: var(--wa-color-warning-fill-normal); + --color-fill-quiet: var(--wa-color-warning-fill-quiet); + + --color-border-loud: var(--wa-color-warning-border-loud); + --color-border-normal: var(--wa-color-warning-border-normal); + --color-border-quiet: var(--wa-color-warning-border-quiet); + + --color-on-loud: var(--wa-color-warning-on-loud); + --color-on-normal: var(--wa-color-warning-on-normal); + --color-on-quiet: var(--wa-color-warning-on-quiet); +} + +.wa-danger { + --color-fill-loud: var(--wa-color-danger-fill-loud); + --color-fill-normal: var(--wa-color-danger-fill-normal); + --color-fill-quiet: var(--wa-color-danger-fill-quiet); + + --color-border-loud: var(--wa-color-danger-border-loud); + --color-border-normal: var(--wa-color-danger-border-normal); + --color-border-quiet: var(--wa-color-danger-border-quiet); + + --color-on-loud: var(--wa-color-danger-on-loud); + --color-on-normal: var(--wa-color-danger-on-normal); + --color-on-quiet: var(--wa-color-danger-on-quiet); +} From 5e2081451dd53287c95357210c41ab5823e9e3e1 Mon Sep 17 00:00:00 2001 From: Lea Verou Date: Mon, 16 Dec 2024 15:28:46 -0500 Subject: [PATCH 05/41] Add `--space-smaller` to size utility --- src/styles/shadow/size.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/styles/shadow/size.css b/src/styles/shadow/size.css index ad6b4dd6b..9d901234b 100644 --- a/src/styles/shadow/size.css +++ b/src/styles/shadow/size.css @@ -19,6 +19,7 @@ font-size: var(--size-m); --size-smaller: var(--size-s); --space: var(--space-m); + --space-smaller: var(--space-s); } :host([size='small']), @@ -26,6 +27,7 @@ font-size: var(--size-s); --size-smaller: var(--size-xs); --space: var(--space-s); + --space-smaller: var(--space-xs); } :host([size='large']), @@ -33,4 +35,5 @@ font-size: var(--size-l); --size-smaller: var(--size-m); --space: var(--space-l); + --space-smaller: var(--space-m); } From 74ae7588190a3b73c1aae6ca8f3b60f93320c290 Mon Sep 17 00:00:00 2001 From: lindsaym-fa Date: Mon, 16 Dec 2024 19:32:35 -0500 Subject: [PATCH 06/41] Add native input styles and share with `` --- docs/docs/components/input.md | 2 +- docs/docs/experimental/style-guide.md | 33 +++++++-- src/components/input/input.css | 84 +---------------------- src/components/input/input.ts | 19 +++--- src/styles/native.css | 2 + src/styles/native/form-control.css | 13 ++++ src/styles/native/input.css | 98 +++++++++++++++++++++++++++ src/styles/shadow/form-control.css | 6 +- 8 files changed, 158 insertions(+), 99 deletions(-) create mode 100644 src/styles/native/form-control.css create mode 100644 src/styles/native/input.css diff --git a/docs/docs/components/input.md b/docs/docs/components/input.md index 2e6442c7a..1ef889d49 100644 --- a/docs/docs/components/input.md +++ b/docs/docs/components/input.md @@ -157,7 +157,7 @@ Use [CSS parts](#css-parts) to customize the way form controls are drawn. This e text-align: right; } - .label-on-left::part(form-control-hint) { + .label-on-left::part(hint) { grid-column-start: 2; } diff --git a/docs/docs/experimental/style-guide.md b/docs/docs/experimental/style-guide.md index d3c0667ec..559cee802 100644 --- a/docs/docs/experimental/style-guide.md +++ b/docs/docs/experimental/style-guide.md @@ -22,9 +22,9 @@ The styles shown below can be all yours by adding Web Awesome's applied styleshe WA Button - + - + @@ -32,9 +32,34 @@ The styles shown below can be all yours by adding Web Awesome's applied styleshe - + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/components/input/input.css b/src/components/input/input.css index 26e0c360f..4fec1fe57 100644 --- a/src/components/input/input.css +++ b/src/components/input/input.css @@ -1,63 +1,13 @@ :host { - --background-color: var(--wa-form-control-background-color); - --border-color: var(--wa-form-control-resting-color); - --border-radius: var(--wa-form-control-border-radius); - --border-style: var(--wa-form-control-border-style); - --border-width: var(--wa-form-control-border-width); - --box-shadow: initial; - display: block; } -:host([filled]) { - --background-color: var(--wa-color-neutral-fill-quiet); - --border-color: var(--background-color); -} - .input { - background-color: var(--background-color); - border-color: var(--border-color); - border-radius: var(--border-radius); - border-style: var(--border-style); - border-width: var(--border-width); - box-shadow: var(--box-shadow); flex: 1 1 auto; - display: inline-flex; + display: flex; align-items: stretch; justify-content: start; position: relative; - width: 100%; - font: inherit; - vertical-align: middle; - overflow: hidden; - cursor: text; - transition: - background var(--wa-transition-normal) var(--wa-transition-easing), - border var(--wa-transition-normal) var(--wa-transition-easing), - outline var(--wa-transition-fast) var(--wa-transition-easing); -} - -/* Standard inputs */ -.input--standard.input--focused:not(.input--disabled) { - outline: var(--wa-focus-ring); - outline-offset: var(--wa-focus-ring-offset); - border-color: var(--wa-form-control-activated-color); -} - -.input--standard.input--disabled { - opacity: 0.5; - cursor: not-allowed; -} - -/* Filled inputs */ -.input--filled.input--focused:not(.input--disabled) { - outline: var(--wa-focus-ring); - outline-offset: var(--wa-focus-ring-offset); -} - -.input--filled.input--disabled { - opacity: 0.5; - cursor: not-allowed; } .input__control { @@ -65,8 +15,6 @@ min-width: 0; height: 100%; font: inherit; - line-height: var(--wa-form-control-value-line-height); - color: var(--wa-form-control-value-color); border: none; /* prettier-ignore */ background-color: rgb(118 118 118 / 0); /* ensures proper placeholder styles in webkit's date input */ @@ -84,28 +32,6 @@ -webkit-appearance: none; } -.input__control:-webkit-autofill, -.input__control:-webkit-autofill:hover, -.input__control:-webkit-autofill:focus, -.input__control:-webkit-autofill:active { - box-shadow: none; - -webkit-text-fill-color: var(--wa-color-brand-on-normal); - caret-color: var(--wa-form-control-value-color); -} - -.input--filled .input__control:-webkit-autofill, -.input--filled .input__control:-webkit-autofill:hover, -.input--filled .input__control:-webkit-autofill:focus, -.input--filled .input__control:-webkit-autofill:active { - box-shadow: none; -} - -.input__control::placeholder { - color: var(--wa-form-control-placeholder-color); - user-select: none; - -webkit-user-select: none; -} - .input__control:focus { outline: none; } @@ -195,14 +121,6 @@ } } -/* - * Pill modifier - */ - -.input--pill { - border-radius: var(--wa-border-radius-pill); -} - /* * Clearable + Password Toggle */ diff --git a/src/components/input/input.ts b/src/components/input/input.ts index 6ec900581..132c02791 100644 --- a/src/components/input/input.ts +++ b/src/components/input/input.ts @@ -12,6 +12,7 @@ import { HasSlotController } from '../../internal/slot.js'; import { MirrorValidator } from '../../internal/validators/mirror-validator.js'; import { watch } from '../../internal/watch.js'; import { WebAwesomeFormAssociatedElement } from '../../internal/webawesome-element.js'; +import nativeStyles from '../../styles/native/input.css'; import formControlStyles from '../../styles/shadow/form-control.css'; import { LocalizeController } from '../../utilities/localize.js'; import type WaButton from '../button/button.js'; @@ -61,7 +62,7 @@ import styles from './input.css'; */ @customElement('wa-input') export default class WaInput extends WebAwesomeFormAssociatedElement { - static shadowStyle = [formControlStyles, styles]; + static shadowStyle = [formControlStyles, nativeStyles, styles]; static shadowRootOptions = { ...WebAwesomeFormAssociatedElement.shadowRootOptions, delegatesFocus: true }; @@ -206,8 +207,8 @@ export default class WaInput extends WebAwesomeFormAssociatedElement { converter: { // Allow "true|false" attribute values but keep the property boolean fromAttribute: value => (!value || value === 'false' ? false : true), - toAttribute: value => (value ? 'true' : 'false'), - }, + toAttribute: value => (value ? 'true' : 'false') + } }) spellcheck = true; @@ -289,7 +290,7 @@ export default class WaInput extends WebAwesomeFormAssociatedElement { } const button = formElements.find( - (el: HTMLButtonElement) => el.type === 'submit' && !el.matches(':disabled'), + (el: HTMLButtonElement) => el.type === 'submit' && !el.matches(':disabled') ) as undefined | HTMLButtonElement | WaButton; // No button found, don't submit. @@ -339,7 +340,7 @@ export default class WaInput extends WebAwesomeFormAssociatedElement { setSelectionRange( selectionStart: number, selectionEnd: number, - selectionDirection: 'forward' | 'backward' | 'none' = 'none', + selectionDirection: 'forward' | 'backward' | 'none' = 'none' ) { this.input.setSelectionRange(selectionStart, selectionEnd, selectionDirection); } @@ -349,7 +350,7 @@ export default class WaInput extends WebAwesomeFormAssociatedElement { replacement: string, start?: number, end?: number, - selectMode: 'select' | 'start' | 'end' | 'preserve' = 'preserve', + selectMode: 'select' | 'start' | 'end' | 'preserve' = 'preserve' ) { const selectionStart = start ?? this.input.selectionStart!; const selectionEnd = end ?? this.input.selectionEnd!; @@ -410,7 +411,7 @@ export default class WaInput extends WebAwesomeFormAssociatedElement { 'form-control--small': this.size === 'small', 'form-control--medium': this.size === 'medium', 'form-control--large': this.size === 'large', - 'form-control--has-label': hasLabel, + 'form-control--has-label': hasLabel })} >