@descope/web-components-ui 1.0.102 → 1.0.103

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/README.md +2 -156
  2. package/dist/cjs/index.cjs.js +1 -1
  3. package/dist/cjs/index.cjs.js.map +1 -1
  4. package/dist/index.esm.js +378 -363
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/umd/241.js +1 -0
  7. package/dist/umd/447.js +1 -1
  8. package/dist/umd/878.js +1 -1
  9. package/dist/umd/890.js +1 -1
  10. package/dist/umd/boolean-fields-descope-checkbox-index-js.js +1 -1
  11. package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +1 -1
  12. package/dist/umd/descope-button-index-js.js +1 -1
  13. package/dist/umd/descope-combo-box-index-js.js +1 -1
  14. package/dist/umd/descope-container-index-js.js +1 -1
  15. package/dist/umd/descope-date-picker-index-js.js +1 -1
  16. package/dist/umd/descope-divider-index-js.js +1 -1
  17. package/dist/umd/descope-email-field-index-js.js +1 -1
  18. package/dist/umd/descope-image-index-js.js +1 -1
  19. package/dist/umd/descope-link-index-js.js +1 -1
  20. package/dist/umd/descope-loader-linear-index-js.js +1 -1
  21. package/dist/umd/descope-loader-radial-index-js.js +1 -1
  22. package/dist/umd/descope-logo-index-js.js +1 -1
  23. package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +1 -1
  24. package/dist/umd/descope-number-field-index-js.js +1 -1
  25. package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +1 -1
  26. package/dist/umd/descope-passcode-index-js.js +1 -1
  27. package/dist/umd/descope-phone-field-descope-phone-field-internal-index-js.js +1 -1
  28. package/dist/umd/descope-phone-field-index-js.js +1 -1
  29. package/dist/umd/descope-text-area-index-js.js +1 -1
  30. package/dist/umd/descope-text-field-index-js.js +1 -1
  31. package/dist/umd/descope-text-index-js.js +1 -1
  32. package/dist/umd/index.js +1 -1
  33. package/package.json +1 -1
  34. package/src/components/descope-combo-box/ComboBox.js +1 -1
  35. package/src/components/descope-container/Container.js +2 -1
  36. package/src/components/descope-divider/Divider.js +1 -0
  37. package/src/components/descope-email-field/EmailField.js +6 -8
  38. package/src/components/descope-new-password/NewPassword.js +15 -13
  39. package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +2 -1
  40. package/src/components/descope-number-field/NumberField.js +7 -10
  41. package/src/components/descope-passcode/Passcode.js +83 -67
  42. package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +3 -7
  43. package/src/components/descope-password-field/PasswordField.js +17 -13
  44. package/src/components/descope-phone-field/PhoneField.js +15 -1
  45. package/src/components/descope-phone-field/descope-phone-field-internal/PhoneFieldInternal.js +5 -2
  46. package/src/components/descope-text-area/TextArea.js +6 -7
  47. package/src/components/descope-text-field/TextField.js +4 -10
  48. package/src/components/descope-text-field/textFieldMappings.js +1 -0
  49. package/src/helpers/themeHelpers/index.js +1 -1
  50. package/src/mixins/inputValidationMixin.js +15 -6
  51. package/src/mixins/proxyInputMixin.js +3 -1
  52. package/src/theme/components/comboBox.js +4 -10
  53. package/src/theme/components/logo.js +1 -0
  54. package/src/theme/components/newPassword.js +11 -24
  55. package/src/theme/components/passcode.js +3 -3
  56. package/src/theme/components/passwordField.js +4 -8
  57. package/src/theme/components/phoneField.js +8 -16
  58. package/src/theme/components/textArea.js +9 -2
  59. package/src/theme/components/textField.js +3 -5
  60. package/dist/umd/0.js +0 -1
@@ -35,6 +35,8 @@ const EmailField = compose(
35
35
  overrides = `
36
36
  :host {
37
37
  display: inline-block;
38
+ min-width: 10em;
39
+ max-width: 100%;
38
40
  }
39
41
  vaadin-email-field {
40
42
  margin: 0;
@@ -44,8 +46,12 @@ overrides = `
44
46
  vaadin-email-field::before {
45
47
  height: 0;
46
48
  }
49
+ vaadin-email-field > input {
50
+ -webkit-mask-image: none;
51
+ }
47
52
  vaadin-email-field::part(input-field) {
48
53
  overflow: hidden;
54
+ padding: 0;
49
55
  }
50
56
  vaadin-email-field[readonly] > input:placeholder-shown {
51
57
  opacity: 1;
@@ -58,14 +64,6 @@ overrides = `
58
64
  -webkit-text-fill-color: var(${EmailField.cssVarList.color});
59
65
  box-shadow: 0 0 0 var(${EmailField.cssVarList.height}) var(${EmailField.cssVarList.backgroundColor}) inset;
60
66
  }
61
- vaadin-email-field > label,
62
- vaadin-email-field::part(input-field) {
63
- cursor: pointer;
64
- color: var(${EmailField.cssVarList.color});
65
- }
66
- vaadin-email-field::part(input-field):focus {
67
- cursor: text;
68
- }
69
67
  vaadin-email-field[required]::part(required-indicator)::after {
70
68
  content: "*";
71
69
  color: var(${EmailField.cssVarList.color});
@@ -7,7 +7,7 @@ import {
7
7
  createProxy,
8
8
  } from '../../mixins';
9
9
  import { componentName as descopeInternalComponentName } from './descope-new-password-internal/componentName';
10
- import PasswordField from "../descope-password-field/PasswordField";
10
+ import PasswordField from '../descope-password-field/PasswordField';
11
11
 
12
12
  export const componentName = getComponentName('new-password');
13
13
 
@@ -46,6 +46,7 @@ const customMixin = (superclass) =>
46
46
  'label',
47
47
  'has-confirm',
48
48
  'invalid',
49
+ 'readonly'
49
50
  ]
50
51
  });
51
52
  }
@@ -58,17 +59,16 @@ const { host, internalInputsWrapper } = {
58
59
  const NewPassword = compose(
59
60
  createStyleMixin({
60
61
  mappings: {
62
+ fontSize: [
63
+ host,
64
+ {
65
+ selector: PasswordField.componentName,
66
+ property: PasswordField.cssVarList.fontSize
67
+ }
68
+ ],
61
69
  componentWidth: { ...host, property: 'width' },
62
70
  requiredContent: { ...host, property: 'content' },
63
- inputLabelTextColor: {
64
- selector: PasswordField.componentName,
65
- property: PasswordField.cssVarList.labelTextColor
66
- },
67
- inputTextColor: {
68
- selector: PasswordField.componentName,
69
- property: PasswordField.cssVarList.inputTextColor
70
- },
71
- inputsGap: { ...internalInputsWrapper, property: 'gap' }
71
+ inputsGap: { ...internalInputsWrapper, property: 'gap' },
72
72
  }
73
73
  }),
74
74
  draggableMixin,
@@ -88,6 +88,8 @@ const overrides = `
88
88
  :host {
89
89
  --vaadin-field-default-width: auto;
90
90
  display: inline-block;
91
+ min-width: 10em;
92
+ max-width: 100%;
91
93
  }
92
94
  vaadin-text-field {
93
95
  padding: 0;
@@ -107,16 +109,16 @@ const overrides = `
107
109
  }
108
110
  descope-new-password-internal {
109
111
  -webkit-mask-image: none;
110
- padding: 0;
111
112
  min-height: 0;
112
113
  width: 100%;
113
- height: 100%;
114
+ height: 100%;
115
+ padding: 0;
114
116
  }
115
117
  descope-new-password-internal > .wrapper {
116
118
  width: 100%;
117
119
  height: 100%;
118
120
  display: flex;
119
- flex-direction: column;
121
+ flex-direction: column;
120
122
  }
121
123
  descope-password-field {
122
124
  display: block;
@@ -17,6 +17,7 @@ const commonAttrs = [
17
17
  'full-width',
18
18
  'maxlength',
19
19
  'invalid',
20
+ 'readonly'
20
21
  ];
21
22
 
22
23
  const inputRelatedAttrs = [].concat(commonAttrs, passwordInputAttrs, confirmInputAttrs);
@@ -80,7 +81,7 @@ class NewPasswordInternal extends BaseInputClass {
80
81
  }
81
82
  });
82
83
 
83
- super.init();
84
+ super.init?.();
84
85
  this.renderInputs(this.hasConfirm);
85
86
  }
86
87
 
@@ -35,13 +35,19 @@ const NumberField = compose(
35
35
  overrides = `
36
36
  :host {
37
37
  display: inline-block;
38
+ min-width: 10em;
39
+ max-width: 100%;
38
40
  }
39
41
  vaadin-number-field {
40
42
  margin: 0;
41
43
  padding: 0;
44
+ width: 100%;
45
+ }
46
+ vaadin-number-field > input {
47
+ -webkit-mask-image: none;
42
48
  }
43
49
  vaadin-number-field::part(input-field) {
44
- overflow: hidden;
50
+ padding: 0;
45
51
  }
46
52
  vaadin-number-field[readonly] > input:placeholder-shown {
47
53
  opacity: 1;
@@ -54,16 +60,7 @@ overrides = `
54
60
  -webkit-text-fill-color: var(${NumberField.cssVarList.color});
55
61
  box-shadow: 0 0 0 var(${NumberField.cssVarList.height}) var(${NumberField.cssVarList.backgroundColor}) inset;
56
62
  }
57
- vaadin-number-field > label,
58
- vaadin-number-field::part(input-field) {
59
- cursor: pointer;
60
- color: var(${NumberField.cssVarList.color});
61
- }
62
- vaadin-number-field::part(input-field):focus {
63
- cursor: text;
64
- }
65
63
  vaadin-number-field[required]::part(required-indicator)::after {
66
- font-size: "12px";
67
64
  content: "*";
68
65
  color: var(${NumberField.cssVarList.color});
69
66
  }
@@ -13,8 +13,16 @@ import { forwardAttrs, getComponentName } from '../../helpers/componentHelpers';
13
13
 
14
14
  export const componentName = getComponentName('passcode');
15
15
 
16
+ const observedAttributes = [
17
+ 'digits'
18
+ ];
19
+
16
20
  const customMixin = (superclass) =>
17
21
  class PasscodeClass extends superclass {
22
+ static get observedAttributes() {
23
+ return observedAttributes.concat(superclass.observedAttributes || []);
24
+ }
25
+
18
26
  constructor() {
19
27
  super();
20
28
  }
@@ -42,6 +50,14 @@ const customMixin = (superclass) =>
42
50
 
43
51
  forwardAttrs(this, this.inputElement, { includeAttrs: ['digits', 'size'] })
44
52
  }
53
+
54
+ attributeChangedCallback(attrName, oldValue, newValue) {
55
+ super.attributeChangedCallback?.(attrName, oldValue, newValue);
56
+
57
+ if (attrName === 'digits') {
58
+ this.style.setProperty('--passcode-digits-count', newValue);
59
+ }
60
+ }
45
61
  };
46
62
 
47
63
  const { borderStyle, borderWidth, ...restTextFieldMappings } =
@@ -50,7 +66,7 @@ const { borderStyle, borderWidth, ...restTextFieldMappings } =
50
66
  const { digitField, label, requiredIndicator, internalWrapper, focusedDigitField } = {
51
67
  focusedDigitField: { selector: () => `${TextField.componentName}[focused="true"]` },
52
68
  digitField: { selector: () => TextField.componentName },
53
- label: { selector: '> label' },
69
+ label: { selector: '::part(label)' },
54
70
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
55
71
  internalWrapper: { selector: 'descope-passcode-internal .wrapper' }
56
72
  }
@@ -75,10 +91,7 @@ const Passcode = compose(
75
91
  textAlign: { ...digitField, property: textVars.textAlign },
76
92
  caretColor: { ...digitField, property: textVars.caretColor },
77
93
  digitsGap: { ...internalWrapper, property: 'gap' },
78
- focusedDigitFieldBorderColor: [
79
- { ...focusedDigitField, property: textVars.borderColor },
80
- { ...focusedDigitField, property: textVars.outlineColor }
81
- ]
94
+ focusedDigitFieldOutlineColor: { ...focusedDigitField, property: textVars.outlineColor }
82
95
  },
83
96
  }),
84
97
  draggableMixin,
@@ -90,68 +103,71 @@ const Passcode = compose(
90
103
  slots: [],
91
104
  wrappedEleName: 'vaadin-text-field',
92
105
  style: () => `
93
- :host {
94
- --vaadin-field-default-width: auto;
95
- display: inline-block;
96
- }
97
- :host::after {
98
- background-color: transparent;
99
- }
100
- :host::part(input-field)::after {
101
- background-color: transparent;
102
- }
103
-
104
- descope-passcode-internal {
105
- -webkit-mask-image: none;
106
- padding: 0;
107
- width: 100%;
108
- height: 100%;
109
- min-height: initial;
110
- }
111
-
112
- descope-passcode-internal .wrapper {
113
- box-sizing: border-box;
114
- min-height: initial;
115
- height: 100%;
116
- justify-content: center;
117
- }
118
-
119
- descope-passcode-internal descope-text-field {
120
- width: var(${textVars.height})
121
- }
122
-
123
- vaadin-text-field::part(input-field) {
124
- background-color: transparent;
125
- padding: 0;
126
- overflow: hidden;
127
- -webkit-mask-image: none;
128
- }
129
-
130
- vaadin-text-field {
131
- margin: 0;
132
- padding: 0;
133
- width: 100%
134
- }
135
-
136
- vaadin-text-field::before {
137
- height: 0;
138
- }
139
-
140
- vaadin-text-field[readonly] > input:placeholder-shown {
141
- opacity: 1;
142
- }
143
-
144
- vaadin-text-field::part(input-field):focus {
145
- cursor: text;
146
- }
147
-
148
- vaadin-text-field[required]::part(required-indicator)::after {
149
- content: "*";
150
- }
151
- vaadin-text-field[readonly]::part(input-field)::after {
152
- border: 0 solid;
153
- }
154
- `,
106
+ :host {
107
+ --vaadin-field-default-width: auto;
108
+ display: inline-block;
109
+ max-width: 100%;
110
+ min-width: calc(var(--passcode-digits-count) * 2em);
111
+ }
112
+ :host::after {
113
+ background-color: transparent;
114
+ }
115
+ :host::part(input-field)::after {
116
+ background-color: transparent;
117
+ }
118
+
119
+ descope-passcode-internal {
120
+ -webkit-mask-image: none;
121
+ padding: 0;
122
+ width: 100%;
123
+ height: 100%;
124
+ min-height: initial;
125
+ }
126
+
127
+ descope-passcode-internal .wrapper {
128
+ box-sizing: border-box;
129
+ min-height: initial;
130
+ height: 100%;
131
+ justify-content: space-between;
132
+ }
133
+
134
+ descope-passcode-internal descope-text-field {
135
+ min-width: 2em;
136
+ max-width: var(${textVars.height});
137
+ }
138
+
139
+ vaadin-text-field::part(input-field) {
140
+ background-color: transparent;
141
+ padding: 0;
142
+ overflow: hidden;
143
+ -webkit-mask-image: none;
144
+ }
145
+
146
+ vaadin-text-field {
147
+ margin: 0;
148
+ padding: 0;
149
+ width: 100%
150
+ }
151
+
152
+ vaadin-text-field::before {
153
+ height: 0;
154
+ }
155
+
156
+ vaadin-text-field[readonly] > input:placeholder-shown {
157
+ opacity: 1;
158
+ }
159
+
160
+ vaadin-text-field::part(input-field):focus {
161
+ cursor: text;
162
+ }
163
+
164
+ vaadin-text-field[required]::part(required-indicator)::after {
165
+ content: "*";
166
+ }
167
+ vaadin-text-field[readonly]::part(input-field)::after {
168
+ border: 0 solid;
169
+ }
170
+ `,
155
171
  excludeAttrsSync: ['tabindex'],
156
172
  componentName
157
173
  })
@@ -1,6 +1,5 @@
1
1
  import { createBaseInputClass } from '../../../baseClasses/createBaseInputClass';
2
2
  import { forwardAttrs, getComponentName } from '../../../helpers/componentHelpers';
3
- import { createDispatchEvent } from '../../../helpers/mixinsHelpers';
4
3
  import { getSanitizedCharacters, focusElement } from './helpers';
5
4
 
6
5
  export const componentName = getComponentName('passcode-internal');
@@ -28,9 +27,6 @@ class PasscodeInternal extends BaseInputClass {
28
27
  return componentName;
29
28
  }
30
29
 
31
- #dispatchBlur = createDispatchEvent.bind(this, 'blur')
32
- #dispatchFocus = createDispatchEvent.bind(this, 'focus')
33
-
34
30
  constructor() {
35
31
  super();
36
32
 
@@ -53,7 +49,8 @@ class PasscodeInternal extends BaseInputClass {
53
49
  <descope-text-field
54
50
  data-id=${idx}
55
51
  type="tel"
56
- autocomplete="off"
52
+ autocomplete="one-time-code"
53
+ inputMode="numeric"
57
54
  ></descope-text-field>
58
55
  `)
59
56
 
@@ -108,8 +105,7 @@ class PasscodeInternal extends BaseInputClass {
108
105
 
109
106
  super.init?.();
110
107
 
111
- this.renderInputs()
112
-
108
+ this.renderInputs();
113
109
  }
114
110
 
115
111
  getInputIdx(inputEle) {
@@ -21,20 +21,20 @@ const {
21
21
  label,
22
22
  requiredIndicator
23
23
  } = {
24
- host: () => ':host',
24
+ host: { selector: () => ':host' },
25
25
  inputWrapper: { selector: '::part(input-field)' },
26
26
  inputElement: { selector: '> input' },
27
27
  inputElementPlaceholder: { selector: '> input:placeholder-shown' },
28
28
  revealButton: { selector: 'vaadin-password-field-button' },
29
29
  revealButtonIcon: { selector: () => '::part(reveal-button)::before' },
30
- label: { selector: '> label' },
30
+ label: { selector: '::part(label)' },
31
31
  requiredIndicator: { selector: '::part(required-indicator)::after' },
32
32
  }
33
33
 
34
34
  const PasswordField = compose(
35
35
  createStyleMixin({
36
36
  mappings: {
37
- width: { selector: host },
37
+ width: host,
38
38
  wrapperBorderStyle: { ...inputWrapper, property: 'border-style' },
39
39
  wrapperBorderWidth: { ...inputWrapper, property: 'border-width' },
40
40
  wrapperBorderColor: { ...inputWrapper, property: 'border-color' },
@@ -56,10 +56,10 @@ const PasswordField = compose(
56
56
  { ...label, property: 'cursor' },
57
57
  { ...requiredIndicator, property: 'cursor' }
58
58
  ],
59
- outlineColor: { ...inputWrapper },
60
- outlineStyle: { ...inputWrapper },
59
+ outlineColor: inputWrapper,
60
+ outlineStyle: inputWrapper,
61
61
  outlineWidth: [
62
- { ...inputWrapper },
62
+ inputWrapper,
63
63
  // we need to make sure there is enough space for the outline
64
64
  { property: 'padding' }
65
65
  ],
@@ -76,32 +76,36 @@ const PasswordField = compose(
76
76
  wrappedEleName: 'vaadin-password-field',
77
77
  style: `
78
78
  :host {
79
- display: inline-flex;
79
+ display: inline-block;
80
+ min-width: 10em;
81
+ max-width: 100%;
80
82
  }
81
83
  vaadin-password-field {
82
84
  width: 100%;
85
+ box-sizing: border-box;
83
86
  }
84
87
  vaadin-password-field::part(input-field) {
85
88
  padding: 0;
86
89
  }
87
90
  vaadin-password-field > input {
88
91
  min-height: 0;
92
+ -webkit-mask-image: none;
89
93
  }
90
-
91
94
  vaadin-password-field[readonly] > input:placeholder-shown {
92
95
  opacity: 1;
93
96
  }
94
-
95
- vaadin-password-field::part(input-field)::after {
96
- opacity: 0;
97
- }
98
97
  vaadin-password-field::before {
99
98
  height: initial;
100
99
  }
101
-
100
+ vaadin-password-field::part(input-field)::after {
101
+ opacity: 0;
102
+ }
102
103
  vaadin-password-field[required]::part(required-indicator)::after {
103
104
  content: "*";
104
105
  }
106
+ [readonly] vaadin-password-field-button {
107
+ pointer-events: none;
108
+ }
105
109
  `,
106
110
  excludeAttrsSync: ['tabindex'],
107
111
  componentName
@@ -78,6 +78,18 @@ const {
78
78
  const PhoneField = compose(
79
79
  createStyleMixin({
80
80
  mappings: {
81
+ fontSize: [
82
+ host, inputWrapper,
83
+ {
84
+ selector: TextField.componentName,
85
+ property: TextField.cssVarList.fontSize
86
+ },
87
+ {
88
+ selector: ComboBox.componentName,
89
+ property: ComboBox.cssVarList.fontSize
90
+ }
91
+ ],
92
+
81
93
  componentWidth: { ...host, property: 'width' },
82
94
 
83
95
  wrapperBorderStyle: [
@@ -137,6 +149,8 @@ const PhoneField = compose(
137
149
  :host {
138
150
  --vaadin-field-default-width: auto;
139
151
  display: inline-block;
152
+ max-width: 100%;
153
+ min-width: 15em;
140
154
  }
141
155
  div {
142
156
  display: inline-flex;
@@ -163,7 +177,7 @@ const PhoneField = compose(
163
177
  padding: 0;
164
178
  min-height: 0;
165
179
  width: 100%;
166
- height: 100%;
180
+ height: 100%;
167
181
  }
168
182
  descope-phone-field-internal > div {
169
183
  width: 100%;
@@ -102,7 +102,7 @@ class PhoneFieldInternal extends BaseInputClass {
102
102
  this.inputs[0].focus()
103
103
  })
104
104
 
105
- super.init();
105
+ super.init?.();
106
106
  this.initInputs();
107
107
  this.setComboBoxDescriptor();
108
108
  }
@@ -115,7 +115,10 @@ class PhoneFieldInternal extends BaseInputClass {
115
115
  // Vaadin resets the input's value. We use setTimeout in order to make sure this happens
116
116
  // after the reset.
117
117
  if (countryData) {
118
- setTimeout(() => this.countryCodeInput.value = countryData);
118
+ setTimeout(() => {
119
+ this.countryCodeInput.selectedItem = this.countryCodeInput.items.find(node => node['data-id'] === countryCode);
120
+ });
121
+
119
122
  }
120
123
  }
121
124
  }
@@ -31,6 +31,7 @@ let overrides = ``;
31
31
  const TextArea = compose(
32
32
  createStyleMixin({
33
33
  mappings: {
34
+ fontSize: [host, textArea],
34
35
  resize: textArea,
35
36
  color: textArea,
36
37
  cursor: {},
@@ -45,10 +46,10 @@ const TextArea = compose(
45
46
  borderStyle: input,
46
47
  borderColor: input,
47
48
  borderRadius: input,
48
- outlineWidth: input,
49
+ outlineWidth: [input, { property: 'padding' }],
49
50
  outlineStyle: input,
50
51
  outlineColor: input,
51
- outlineOffset: [input, { property: 'padding' }],
52
+ outlineOffset: input,
52
53
  }
53
54
  }),
54
55
  draggableMixin,
@@ -67,8 +68,9 @@ const TextArea = compose(
67
68
  overrides = `
68
69
  :host {
69
70
  display: inline-block;
71
+ min-width: 10em;
72
+ max-width: 100%;
70
73
  }
71
-
72
74
  vaadin-text-area {
73
75
  margin: 0;
74
76
  width: 100%;
@@ -76,10 +78,7 @@ overrides = `
76
78
  }
77
79
  vaadin-text-area > label,
78
80
  vaadin-text-area::part(input-field) {
79
- cursor: pointer;
80
- }
81
- vaadin-text-area[focused]::part(input-field) {
82
- cursor: text;
81
+ padding: 0;
83
82
  }
84
83
  vaadin-text-area[required]::part(required-indicator)::after {
85
84
  content: "*";
@@ -57,10 +57,12 @@ overrides = `
57
57
  :host {
58
58
  display: inline-block;
59
59
  --vaadin-field-default-width: auto;
60
+ max-width: 100%;
61
+ min-width: 10em;
62
+
60
63
  }
61
64
  vaadin-text-field {
62
65
  margin: 0;
63
- padding: 0;
64
66
  width: 100%;
65
67
  height: 100%;
66
68
  box-sizing: border-box;
@@ -83,18 +85,11 @@ overrides = `
83
85
  box-shadow: 0 0 0 var(${TextField.cssVarList.height}) var(${TextField.cssVarList.backgroundColor}) inset;
84
86
  }
85
87
 
86
- vaadin-text-field input {
88
+ vaadin-text-field > input {
87
89
  -webkit-mask-image: none;
88
90
  min-height: 0;
89
91
  }
90
92
 
91
- vaadin-text-field > label,
92
- vaadin-text-field::part(input-field) {
93
- color: var(${TextField.cssVarList.color});
94
- }
95
- vaadin-text-field::part(input-field):focus {
96
- cursor: text;
97
- }
98
93
  vaadin-text-field[required]::part(required-indicator)::after {
99
94
  content: "*";
100
95
  color: var(${TextField.cssVarList.color});
@@ -103,7 +98,6 @@ overrides = `
103
98
  opacity: 0 !important;
104
99
  }
105
100
 
106
-
107
101
  vaadin-text-field::before {
108
102
  height: unset;
109
103
  }
@@ -9,6 +9,7 @@ const selectors = {
9
9
 
10
10
  export default {
11
11
  backgroundColor: { selector: selectors.inputWrapper },
12
+ labelTextColor: { selector: selectors.label, property: 'color' },
12
13
  color: { selector: selectors.inputWrapper },
13
14
  width: { selector: selectors.host },
14
15
  borderColor: [
@@ -96,7 +96,7 @@ const componentsThemeToStyleObj = (componentsTheme) =>
96
96
  [componentName]: {
97
97
  [themeName]: {
98
98
  [selector]: {
99
- [property]: val
99
+ [property]: getCssVarValue(val)
100
100
  }
101
101
  }
102
102
  }
@@ -46,20 +46,29 @@ export const inputValidationMixin = (superclass) => class InputValidationMixinCl
46
46
  }
47
47
 
48
48
  getErrorMessage(flags) {
49
+ const {
50
+ valueMissing,
51
+ patternMismatch,
52
+ typeMismatch,
53
+ stepMismatch,
54
+ tooShort,
55
+ tooLong,
56
+ customError
57
+ } = flags;
49
58
  switch (true) {
50
- case flags.valueMissing:
59
+ case valueMissing:
51
60
  return this.getAttribute(errorAttributes.valueMissing) ||
52
61
  this.defaultErrorMsgValueMissing
53
- case flags.patternMismatch || flags.typeMismatch:
62
+ case patternMismatch || typeMismatch || stepMismatch:
54
63
  return this.getAttribute(errorAttributes.patternMismatch) ||
55
64
  this.defaultErrorMsgPatternMismatch
56
- case flags.tooShort:
65
+ case tooShort:
57
66
  return this.getAttribute(errorAttributes.tooShort) ||
58
67
  this.defaultErrorMsgTooShort
59
- case flags.tooLong:
68
+ case tooLong:
60
69
  return this.getAttribute(errorAttributes.tooLong) ||
61
70
  this.defaultErrorMsgTooLong
62
- case flags.customError:
71
+ case customError:
63
72
  return this.validationMessage
64
73
  default:
65
74
  return ''
@@ -91,7 +100,7 @@ export const inputValidationMixin = (superclass) => class InputValidationMixinCl
91
100
  return this.#internals.validity
92
101
  }
93
102
 
94
- get validationTarget () {
103
+ get validationTarget() {
95
104
  return this.inputElement
96
105
  }
97
106