@descope/web-components-ui 1.0.114 → 1.0.116

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. package/dist/cjs/index.cjs.js +1299 -1305
  2. package/dist/cjs/index.cjs.js.map +1 -1
  3. package/dist/index.d.ts +2 -1
  4. package/dist/index.esm.js +1384 -1390
  5. package/dist/index.esm.js.map +1 -1
  6. package/dist/umd/201.js +1 -0
  7. package/dist/umd/241.js +1 -1
  8. package/dist/umd/447.js +1 -1
  9. package/dist/umd/65.js +1 -1
  10. package/dist/umd/803.js +1 -1
  11. package/dist/umd/boolean-fields-descope-checkbox-index-js.js +1 -1
  12. package/dist/umd/boolean-fields-descope-switch-toggle-index-js.js +1 -1
  13. package/dist/umd/descope-button-index-js.js +1 -1
  14. package/dist/umd/descope-combo-box-index-js.js +1 -1
  15. package/dist/umd/descope-container-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-link-index-js.js +1 -1
  19. package/dist/umd/descope-loader-linear-index-js.js +1 -1
  20. package/dist/umd/descope-loader-radial-index-js.js +1 -1
  21. package/dist/umd/descope-new-password-descope-new-password-internal-index-js.js +1 -1
  22. package/dist/umd/descope-number-field-index-js.js +1 -1
  23. package/dist/umd/descope-passcode-index-js.js +1 -1
  24. package/dist/umd/descope-phone-field-index-js.js +1 -1
  25. package/dist/umd/descope-text-area-index-js.js +1 -1
  26. package/dist/umd/descope-text-field-index-js.js +1 -1
  27. package/dist/umd/descope-text-index-js.js +1 -1
  28. package/dist/umd/index.js +1 -1
  29. package/package.json +1 -1
  30. package/src/components/boolean-fields/commonStyles.js +13 -5
  31. package/src/components/boolean-fields/descope-checkbox/CheckboxClass.js +40 -37
  32. package/src/components/boolean-fields/descope-switch-toggle/SwitchToggleClass.js +43 -37
  33. package/src/components/descope-button/ButtonClass.js +22 -6
  34. package/src/components/descope-combo-box/ComboBoxClass.js +49 -36
  35. package/src/components/descope-container/ContainerClass.js +4 -4
  36. package/src/components/descope-divider/DividerClass.js +74 -55
  37. package/src/components/descope-email-field/EmailFieldClass.js +11 -47
  38. package/src/components/descope-link/LinkClass.js +8 -5
  39. package/src/components/descope-loader-linear/LoaderLinearClass.js +16 -12
  40. package/src/components/descope-loader-radial/LoaderRadialClass.js +12 -11
  41. package/src/components/descope-new-password/NewPasswordClass.js +65 -51
  42. package/src/components/descope-new-password/descope-new-password-internal/NewPasswordInternal.js +1 -1
  43. package/src/components/descope-number-field/NumberFieldClass.js +11 -43
  44. package/src/components/descope-passcode/PasscodeClass.js +36 -29
  45. package/src/components/descope-password-field/PasswordFieldClass.js +52 -41
  46. package/src/components/descope-phone-field/PhoneFieldClass.js +61 -41
  47. package/src/components/descope-text/TextClass.js +8 -8
  48. package/src/components/descope-text-area/TextAreaClass.js +50 -48
  49. package/src/components/descope-text-field/TextFieldClass.js +11 -53
  50. package/src/components/descope-text-field/textFieldMappings.js +66 -38
  51. package/src/helpers/themeHelpers/index.js +10 -8
  52. package/src/helpers/themeHelpers/resetHelpers.js +76 -0
  53. package/src/index.d.ts +2 -1
  54. package/src/mixins/createStyleMixin/index.js +38 -27
  55. package/src/mixins/inputValidationMixin.js +4 -1
  56. package/src/mixins/proxyInputMixin.js +11 -3
  57. package/src/theme/components/button.js +31 -16
  58. package/src/theme/components/checkbox.js +18 -47
  59. package/src/theme/components/comboBox.js +24 -36
  60. package/src/theme/components/container.js +34 -47
  61. package/src/theme/components/divider.js +31 -20
  62. package/src/theme/components/emailField.js +21 -3
  63. package/src/theme/components/image.js +1 -1
  64. package/src/theme/components/index.js +4 -3
  65. package/src/theme/components/inputWrapper.js +72 -0
  66. package/src/theme/components/link.js +15 -22
  67. package/src/theme/components/loader/loaderLinear.js +19 -24
  68. package/src/theme/components/loader/loaderRadial.js +32 -47
  69. package/src/theme/components/logo.js +1 -1
  70. package/src/theme/components/newPassword.js +11 -26
  71. package/src/theme/components/numberField.js +21 -3
  72. package/src/theme/components/passcode.js +17 -28
  73. package/src/theme/components/passwordField.js +19 -65
  74. package/src/theme/components/phoneField.js +18 -57
  75. package/src/theme/components/switchToggle.js +20 -34
  76. package/src/theme/components/text.js +14 -9
  77. package/src/theme/components/textArea.js +20 -37
  78. package/src/theme/components/textField.js +21 -68
@@ -10,6 +10,7 @@ import {
10
10
  import { TextFieldClass } from '../descope-text-field/TextFieldClass';
11
11
  import { ComboBoxClass } from '../descope-combo-box/ComboBoxClass';
12
12
  import CountryCodes from './CountryCodes';
13
+ import { resetInputCursor, resetInputFieldDefaultWidth } from '../../helpers/themeHelpers/resetHelpers';
13
14
 
14
15
  const textVars = TextFieldClass.cssVarList;
15
16
  const comboVars = ComboBoxClass.cssVarList;
@@ -59,27 +60,32 @@ const customMixin = (superclass) =>
59
60
 
60
61
  const {
61
62
  host,
62
- inputWrapper,
63
- countryCodeInput,
64
- phoneInput,
65
63
  label,
66
64
  requiredIndicator,
67
- separator
65
+ inputField,
66
+ countryCodeInput,
67
+ phoneInput,
68
+ separator,
69
+ errorMessage,
70
+ helperText
68
71
  } = {
69
72
  host: { selector: () => ':host' },
70
- inputWrapper: { selector: '::part(input-field)' },
71
- phoneInput: { selector: () => 'descope-text-field' },
72
- countryCodeInput: { selector: () => 'descope-combo-box' },
73
73
  label: { selector: '::part(label)' },
74
74
  requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
75
- separator: { selector: 'descope-phone-field-internal .separator' }
75
+ inputField: { selector: '::part(input-field)' },
76
+ phoneInput: { selector: () => 'descope-text-field' },
77
+ countryCodeInput: { selector: () => 'descope-combo-box' },
78
+ separator: { selector: 'descope-phone-field-internal .separator' },
79
+ helperText: { selector: '::part(helper-text)' },
80
+ errorMessage: { selector: '::part(error-message)' }
76
81
  };
77
82
 
78
83
  export const PhoneFieldClass = compose(
79
84
  createStyleMixin({
80
85
  mappings: {
81
86
  fontSize: [
82
- host, inputWrapper,
87
+ { ...host, property: 'font-size' },
88
+ { ...inputField, property: 'font-size' },
83
89
  {
84
90
  selector: TextFieldClass.componentName,
85
91
  property: TextFieldClass.cssVarList.fontSize
@@ -89,53 +95,62 @@ export const PhoneFieldClass = compose(
89
95
  property: ComboBoxClass.cssVarList.fontSize
90
96
  }
91
97
  ],
98
+ fontFamily: [
99
+ label,
100
+ errorMessage,
101
+ helperText
102
+ ],
103
+ hostWidth: [
104
+ { ...host, property: 'width' },
105
+ { ...phoneInput, property: 'width' },
106
+ { ...countryCodeInput, property: '--vaadin-combo-box-overlay-width' }
107
+ ],
92
108
 
93
- componentWidth: { ...host, property: 'width' },
94
-
95
- wrapperBorderStyle: [
96
- { ...inputWrapper, property: 'border-style' },
109
+ inputBorderStyle: [
110
+ { ...inputField, property: 'border-style' },
97
111
  { ...separator, property: 'border-left-style' }
98
112
  ],
99
- wrapperBorderWidth: [
100
- { ...inputWrapper, property: 'border-width' },
113
+ inputBorderWidth: [
114
+ { ...inputField, property: 'border-width' },
101
115
  { ...separator, property: 'border-left-width' }
102
116
  ],
103
- wrapperBorderColor: [
104
- { ...inputWrapper, property: 'border-color' },
117
+ inputBorderColor: [
118
+ { ...inputField, property: 'border-color' },
105
119
  { ...separator, property: 'border-left-color' }
106
120
  ],
107
- wrapperBorderRadius: { ...inputWrapper, property: 'border-radius' },
121
+ inputBorderRadius: { ...inputField, property: 'border-radius' },
108
122
 
109
- inputHeight: { ...inputWrapper, property: 'height' },
123
+ inputHeight: { ...inputField, property: 'height' },
110
124
 
111
- countryCodeInputWidth: { ...countryCodeInput, property: comboVars.width },
125
+ countryCodeInputWidth: { ...countryCodeInput, property: comboVars.hostWidth },
112
126
  countryCodeDropdownWidth: {
113
127
  ...countryCodeInput,
114
128
  property: '--vaadin-combo-box-overlay-width'
115
129
  },
116
-
117
130
  phoneInputWidth: { ...phoneInput, property: 'width' },
118
131
 
119
- color: [
120
- label,
121
- requiredIndicator,
122
- { ...phoneInput, property: textVars.color },
123
- { ...countryCodeInput, property: comboVars.color }
132
+ labelTextColor: [
133
+ { ...label, property: 'color' },
134
+ { ...requiredIndicator, property: 'color' },
124
135
  ],
136
+ labelRequiredIndicator: { ...requiredIndicator, property: 'content' },
125
137
 
126
- placeholderColor: {
127
- ...phoneInput,
128
- property: textVars.placeholderColor
129
- },
138
+ inputValueTextColor: [
139
+ { ...phoneInput, property: textVars.inputValueTextColor },
140
+ { ...countryCodeInput, property: comboVars.inputValueTextColor }
141
+ ],
142
+
143
+ inputPlaceholderTextColor: { ...phoneInput, property: textVars.inputPlaceholderColor },
130
144
 
131
145
  overlayItemBackgroundColor: {
132
146
  selector: 'descope-combo-box',
133
147
  property: comboVars.overlayItemBackgroundColor
134
148
  },
135
149
 
136
- outlineStyle: inputWrapper,
137
- outlineWidth: [inputWrapper, { property: 'padding' }],
138
- outlineColor: inputWrapper,
150
+ inputOutlineStyle: { ...inputField, property: 'outline-style' },
151
+ inputOutlineColor: { ...inputField, property: 'outline-color' },
152
+ inputOutlineWidth: { ...inputField, property: 'outline-width' },
153
+ inputOutlineOffset: { ...inputField, property: 'outline-offset' },
139
154
  },
140
155
  }),
141
156
  draggableMixin,
@@ -147,10 +162,11 @@ export const PhoneFieldClass = compose(
147
162
  wrappedEleName: 'vaadin-text-field',
148
163
  style: () => `
149
164
  :host {
150
- --vaadin-field-default-width: auto;
151
165
  display: inline-block;
152
166
  max-width: 100%;
153
167
  min-width: 15em;
168
+ box-sizing: border-box;
169
+ padding: calc(var(${PhoneFieldClass.cssVarList.inputOutlineWidth}) + var(${PhoneFieldClass.cssVarList.inputOutlineOffset}))
154
170
  }
155
171
  div {
156
172
  display: inline-flex;
@@ -159,6 +175,7 @@ export const PhoneFieldClass = compose(
159
175
  width: 100%;
160
176
  height: 100%;
161
177
  box-sizing: border-box;
178
+ padding: 0;
162
179
  }
163
180
  vaadin-text-field[focus-ring]::part(input-field) {
164
181
  box-shadow: none;
@@ -190,18 +207,18 @@ export const PhoneFieldClass = compose(
190
207
  descope-combo-box {
191
208
  flex-shrink: 0;
192
209
  height: 100%;
193
- ${comboVars.borderWidth}: 0;
210
+ ${comboVars.inputOutlineWidth}: 0;
211
+ ${comboVars.inputOutlineOffset}: 0;
212
+ ${comboVars.inputBorderWidth}: 0;
213
+ ${comboVars.inputBorderRadius}: 0;
194
214
  }
195
215
  descope-text-field {
196
216
  flex-grow: 1;
197
217
  min-height: 0;
198
218
  height: 100%;
199
- ${textVars.outlineWidth}: 0;
200
- ${textVars.borderWidth}: 0;
201
- ${textVars.borderRadius}: 0;
202
- }
203
- vaadin-text-field[required]::part(required-indicator)::after {
204
- content: "*";
219
+ ${textVars.inputOutlineWidth}: 0;
220
+ ${textVars.inputBorderWidth}: 0;
221
+ ${textVars.inputBorderRadius}: 0;
205
222
  }
206
223
  vaadin-text-field[readonly] > input:placeholder-shown {
207
224
  opacity: 1;
@@ -209,6 +226,9 @@ export const PhoneFieldClass = compose(
209
226
  vaadin-text-field::part(input-field)::after {
210
227
  border: none;
211
228
  }
229
+
230
+ ${resetInputFieldDefaultWidth()}
231
+ ${resetInputCursor('vaadin-text-field')}
212
232
  `,
213
233
  excludeAttrsSync: ['tabindex'],
214
234
  componentName
@@ -31,20 +31,20 @@ class RawText extends createBaseClass({ componentName, baseSelector: ':host > sl
31
31
  export const TextClass = compose(
32
32
  createStyleMixin({
33
33
  mappings: {
34
+ hostWidth: { selector: () => ':host', property: 'width' },
35
+ fontSize: { property: 'font-size' },
36
+ textColor: { property: 'color' },
37
+ textLineHeight: { property: 'line-height' },
38
+ textLetterSpacing: { property: 'letter-spacing' },
39
+ textShadow: {},
40
+ textAlign: {},
41
+ textTransform: {},
34
42
  fontFamily: {},
35
- lineHeight: {},
36
43
  fontStyle: {},
37
- fontSize: {},
38
44
  fontWeight: {},
39
- width: { selector: () => ':host' },
40
- color: {},
41
- letterSpacing: {},
42
- textShadow: {},
43
45
  borderWidth: {},
44
46
  borderStyle: {},
45
47
  borderColor: {},
46
- textTransform: {},
47
- textAlign: {},
48
48
  },
49
49
  }),
50
50
  draggableMixin,
@@ -7,49 +7,61 @@ import {
7
7
  } from '../../mixins';
8
8
  import { compose } from '../../helpers';
9
9
  import { getComponentName } from '../../helpers/componentHelpers';
10
+ import { resetInputContainer, resetInputCursor, resetInputField, resetInputPlaceholder } from '../../helpers/themeHelpers/resetHelpers';
10
11
 
11
12
  export const componentName = getComponentName('text-area');
12
13
 
13
14
  const {
14
15
  host,
16
+ label,
15
17
  placeholder,
16
- input,
18
+ inputField,
17
19
  textArea,
18
- label,
19
- requiredIndicator
20
+ requiredIndicator,
21
+ helperText,
22
+ errorMessage
20
23
  } = {
21
24
  host: { selector: () => ':host' },
22
- textArea: { selector: '> textarea' },
23
25
  label: { selector: '::part(label)' },
24
- input: { selector: '::part(input-field)' },
25
26
  placeholder: { selector: 'textarea:placeholder-shown' },
26
- requiredIndicator: { selector: '::part(required-indicator)::after' },
27
+ inputField: { selector: '::part(input-field)' },
28
+ textArea: { selector: '> textarea' },
29
+ requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
30
+ helperText: { selector: '::part(helper-text)' },
31
+ errorMessage: { selector: '::part(error-message)' }
27
32
  };
28
33
 
29
- let overrides = ``;
30
-
31
34
  export const TextAreaClass = compose(
32
35
  createStyleMixin({
33
36
  mappings: {
34
- fontSize: [host, textArea],
35
- resize: textArea,
36
- color: textArea,
37
- cursor: {},
38
- labelColor: [
37
+ hostWidth: { ...host, property: 'width' },
38
+ fontSize: [
39
+ { ...host, property: 'font-size' },
40
+ { ...textArea, property: 'font-size' }
41
+ ],
42
+ fontFamily: [
43
+ { ...label, property: 'font-family' },
44
+ { ...inputField, property: 'font-family' },
45
+ { ...helperText, property: 'font-family' },
46
+ { ...errorMessage, property: 'font-family' }
47
+ ],
48
+ labelTextColor: [
39
49
  { ...label, property: 'color' },
40
50
  { ...requiredIndicator, property: 'color' }
41
51
  ],
42
- placeholderColor: { ...placeholder, property: 'color' },
43
- width: host,
44
- backgroundColor: input,
45
- borderWidth: input,
46
- borderStyle: input,
47
- borderColor: input,
48
- borderRadius: input,
49
- outlineWidth: [input, { property: 'padding' }],
50
- outlineStyle: input,
51
- outlineColor: input,
52
- outlineOffset: input,
52
+ labelRequiredIndicator: { ...requiredIndicator, property: 'content' },
53
+ inputBackgroundColor: { ...inputField, property: 'background-color' },
54
+ inputValueTextColor: { ...textArea, property: 'color' },
55
+ inputPlaceholderTextColor: { ...placeholder, property: 'color' },
56
+ inputBorderWidth: { ...inputField, property: 'border-width' },
57
+ inputBorderStyle: { ...inputField, property: 'border-style' },
58
+ inputBorderColor: { ...inputField, property: 'border-color' },
59
+ inputBorderRadius: { ...inputField, property: 'border-radius' },
60
+ inputOutlineStyle: { ...inputField, property: 'outline-Style' },
61
+ inputOutlineColor: { ...inputField, property: 'outline-color' },
62
+ inputOutlineOffset: { ...inputField, property: 'outline-offset' },
63
+ inputOutlineWidth: { ...inputField, property: 'outline-width' },
64
+ inputResizeType: { ...textArea, property: 'resize' },
53
65
  }
54
66
  }),
55
67
  draggableMixin,
@@ -59,32 +71,22 @@ export const TextAreaClass = compose(
59
71
  createProxy({
60
72
  slots: [],
61
73
  wrappedEleName: 'vaadin-text-area',
62
- style: () => overrides,
74
+ style: () => `
75
+ :host {
76
+ display: inline-block;
77
+ min-width: 10em;
78
+ max-width: 100%;
79
+ padding: calc(var(${TextAreaClass.cssVarList.inputOutlineWidth}) + var(${TextAreaClass.cssVarList.inputOutlineOffset}));
80
+ }
81
+
82
+ ${resetInputContainer('vaadin-text-area')}
83
+ ${resetInputField('vaadin-text-area')}
84
+ ${resetInputPlaceholder('vaadin-text-area', 'textarea')}
85
+ ${resetInputCursor('vaadin-text-area')}
86
+ `,
63
87
  excludeAttrsSync: ['tabindex'],
64
88
  componentName
65
89
  })
66
90
  );
67
91
 
68
- overrides = `
69
- :host {
70
- display: inline-block;
71
- min-width: 10em;
72
- max-width: 100%;
73
- }
74
- vaadin-text-area {
75
- margin: 0;
76
- width: 100%;
77
- box-sizing: border-box;
78
- }
79
- vaadin-text-area > label,
80
- vaadin-text-area::part(input-field) {
81
- padding: 0;
82
- }
83
- vaadin-text-area[required]::part(required-indicator)::after {
84
- content: "*";
85
- }
86
- vaadin-text-area[disabled] > textarea:placeholder-shown,
87
- vaadin-text-area[readonly] > textarea:placeholder-shown {
88
- opacity: 1;
89
- }
90
- `;
92
+
@@ -8,11 +8,10 @@ import {
8
8
  import textFieldMappings from './textFieldMappings';
9
9
  import { compose } from '../../helpers';
10
10
  import { getComponentName } from '../../helpers/componentHelpers';
11
+ import { resetInputFieldDefaultWidth, resetInputOverrides } from '../../helpers/themeHelpers/resetHelpers';
11
12
 
12
13
  export const componentName = getComponentName('text-field');
13
14
 
14
- let overrides = ``;
15
-
16
15
  const observedAttrs = ['type'];
17
16
 
18
17
  const customMixin = (superclass) =>
@@ -47,58 +46,17 @@ export const TextFieldClass = compose(
47
46
  createProxy({
48
47
  slots: ['prefix', 'suffix'],
49
48
  wrappedEleName: 'vaadin-text-field',
50
- style: () => overrides,
49
+ style: () => `
50
+ :host {
51
+ display: inline-block;
52
+ max-width: 100%;
53
+ min-width: 10em;
54
+ padding: calc(var(${TextFieldClass.cssVarList.inputOutlineWidth}) + var(${TextFieldClass.cssVarList.inputOutlineOffset}));
55
+ }
56
+ ${resetInputFieldDefaultWidth()}
57
+ ${resetInputOverrides('vaadin-text-field', TextFieldClass.cssVarList)}
58
+ `,
51
59
  excludeAttrsSync: ['tabindex'],
52
60
  componentName
53
61
  })
54
62
  );
55
-
56
- overrides = `
57
- :host {
58
- display: inline-block;
59
- --vaadin-field-default-width: auto;
60
- max-width: 100%;
61
- min-width: 10em;
62
-
63
- }
64
- vaadin-text-field {
65
- margin: 0;
66
- width: 100%;
67
- height: 100%;
68
- box-sizing: border-box;
69
- }
70
-
71
- vaadin-text-field::part(input-field) {
72
- overflow: hidden;
73
- padding: 0;
74
- }
75
- vaadin-text-field[disabled] > input:placeholder-shown,
76
- vaadin-text-field[readonly] > input:placeholder-shown {
77
- opacity: 1;
78
- }
79
- vaadin-text-field input:-webkit-autofill,
80
- vaadin-text-field input:-webkit-autofill::first-line,
81
- vaadin-text-field input:-webkit-autofill:hover,
82
- vaadin-text-field input:-webkit-autofill:active,
83
- vaadin-text-field input:-webkit-autofill:focus {
84
- -webkit-text-fill-color: var(${TextFieldClass.cssVarList.color});
85
- box-shadow: 0 0 0 var(${TextFieldClass.cssVarList.height}) var(${TextFieldClass.cssVarList.backgroundColor}) inset;
86
- }
87
-
88
- vaadin-text-field > input {
89
- -webkit-mask-image: none;
90
- min-height: 0;
91
- }
92
-
93
- vaadin-text-field[required]::part(required-indicator)::after {
94
- content: "*";
95
- color: var(${TextFieldClass.cssVarList.color});
96
- }
97
- vaadin-text-field::part(input-field)::after {
98
- opacity: 0 !important;
99
- }
100
-
101
- vaadin-text-field::before {
102
- height: unset;
103
- }
104
- `;
@@ -1,47 +1,75 @@
1
- const selectors = {
2
- label: '::part(label)',
3
- inputWrapper: '::part(input-field)',
4
- readOnlyInput: '[readonly]::part(input-field)::after',
5
- placeholder: '> input:placeholder-shown',
6
- host: () => ':host',
7
- input: 'input'
1
+ const {
2
+ host,
3
+ label,
4
+ placeholder,
5
+ requiredIndicator,
6
+ inputField,
7
+ input,
8
+ readOnlyInput,
9
+ helperText,
10
+ errorMessage
11
+ } = {
12
+ host: { selector: () => ':host' },
13
+ label: { selector: '::part(label)' },
14
+ requiredIndicator: { selector: '[required]::part(required-indicator)::after' },
15
+ placeholder: { selector: '> input:placeholder-shown' },
16
+ inputField: { selector: '::part(input-field)' },
17
+ input: { selector: 'input' },
18
+ readOnlyInput: { selector: '[readonly]::part(input-field)::after' },
19
+ helperText: { selector: '::part(helper-text)' },
20
+ errorMessage: { selector: '::part(error-message)' }
8
21
  };
9
22
 
10
23
  export default {
11
- backgroundColor: { selector: selectors.inputWrapper },
12
- labelTextColor: { selector: selectors.label, property: 'color' },
13
- color: { selector: selectors.inputWrapper },
14
- width: { selector: selectors.host },
15
- borderColor: [
16
- { selector: selectors.inputWrapper },
17
- { selector: selectors.readOnlyInput }
24
+ // we apply font-size also on the host so we can set its width with em
25
+ fontSize: [
26
+ { property: 'font-size' },
27
+ { ...host, property: 'font-size' }
18
28
  ],
19
- borderWidth: [
20
- { selector: selectors.inputWrapper },
21
- { selector: selectors.readOnlyInput }
29
+ fontFamily: [
30
+ { ...label, property: 'font-family' },
31
+ { ...inputField, property: 'font-family' },
32
+ { ...helperText, property: 'font-family' },
33
+ { ...errorMessage, property: 'font-family' }
22
34
  ],
23
- borderStyle: [
24
- { selector: selectors.inputWrapper },
25
- { selector: selectors.readOnlyInput }
35
+
36
+ hostWidth: { ...host, property: 'width' },
37
+
38
+ inputBackgroundColor: { ...inputField, property: 'background-color' },
39
+
40
+ labelTextColor: [
41
+ { ...label, property: 'color' },
42
+ { ...requiredIndicator, property: 'color' }
26
43
  ],
27
- borderRadius: { selector: selectors.inputWrapper },
28
- boxShadow: { selector: selectors.inputWrapper },
29
44
 
30
- // we apply font-size also on the host so we can set its width with em
31
- fontSize: [{}, { selector: selectors.host }],
32
-
33
- height: { selector: selectors.inputWrapper },
34
- padding: { selector: selectors.inputWrapper },
35
- margin: { selector: selectors.inputWrapper },
36
- caretColor: { selector: selectors.input },
37
- outlineColor: { selector: selectors.inputWrapper },
38
- outlineStyle: { selector: selectors.inputWrapper },
39
- outlineWidth: [
40
- { selector: selectors.inputWrapper },
41
- // we need to make sure there is enough space for the outline
42
- { property: 'padding' }
45
+ inputValueTextColor: { ...inputField, property: 'color' },
46
+ inputCaretTextColor: { ...input, property: 'color' },
47
+
48
+ labelRequiredIndicator: { ...requiredIndicator, property: 'content' },
49
+
50
+ inputBorderColor: [
51
+ { ...inputField, property: 'border-color' },
52
+ { ...readOnlyInput, property: 'border-color' }
43
53
  ],
44
- outlineOffset: { selector: selectors.inputWrapper },
45
- textAlign: { selector: selectors.input },
46
- placeholderColor: { selector: selectors.placeholder, property: 'color' }
54
+ inputBorderWidth: [
55
+ { ...inputField, property: 'border-width' },
56
+ { ...readOnlyInput, property: 'border-width' }
57
+ ],
58
+ inputBorderStyle: [
59
+ { ...inputField, property: 'border-style' },
60
+ { ...readOnlyInput, property: 'border-style' }
61
+ ],
62
+ inputBorderRadius: { ...inputField, property: 'border-radius' },
63
+
64
+ inputHeight: { ...inputField, property: 'height' },
65
+ inputPadding: { ...inputField, property: 'padding' },
66
+
67
+ inputOutlineColor: { ...inputField, property: 'outline-color' },
68
+ inputOutlineStyle: { ...inputField, property: 'outline-style' },
69
+ inputOutlineWidth: { ...inputField, property: 'outline-width' },
70
+ inputOutlineOffset: { ...inputField, property: 'outline-offset' },
71
+
72
+ inputTextAlign: { ...input, property: 'text-align' },
73
+
74
+ inputPlaceholderColor: { ...placeholder, property: 'color' }
47
75
  };
@@ -45,14 +45,16 @@ export const getThemeVars = (theme, prefix) =>
45
45
  set({}, path, getVarName(prefix ? [prefix, ...path] : path))
46
46
  );
47
47
 
48
- export const globalsThemeToStyle = (theme, themeName = '') => `
49
- *[data-theme="${themeName}"] {
50
- ${Object.entries(themeToCSSVarsObj(theme)).reduce(
51
- (acc, entry) => (acc += `${entry.join(':')};\n`),
52
- ''
53
- )}
54
- }
55
- `;
48
+ export const globalsThemeToStyle = (theme, themeName = '') => {
49
+ const style = Object.entries(themeToCSSVarsObj(theme)).reduce(
50
+ (acc, entry) => (acc += `${entry.join(':')};\n`),
51
+ ''
52
+ );
53
+
54
+ if(!themeName) return style
55
+
56
+ return `*[data-theme="${themeName}"] {${style}}`
57
+ };
56
58
 
57
59
  const componentsThemeToStyleObj = (componentsTheme) =>
58
60
  transformTheme(componentsTheme, [], (path, val) => {
@@ -0,0 +1,76 @@
1
+ export const resetInputOverrides = (name, cssVarList) => `
2
+ ${resetInputContainer(name)}
3
+ ${resetInputCursor(name)}
4
+ ${resetInputPlaceholder(name)}
5
+ ${resetInputField(name)}
6
+ ${resetInputAutoFill(name, cssVarList)}
7
+
8
+ ${name}::before {
9
+ height: unset;
10
+ }
11
+
12
+ ${name} > input {
13
+ -webkit-mask-image: none;
14
+ min-height: 0;
15
+ }
16
+
17
+ ${name}::part(input-field)::after {
18
+ opacity: 0 !important;
19
+ }
20
+ `;
21
+
22
+ export const resetInputContainer = (name) => `
23
+ ${name} {
24
+ margin: 0;
25
+ padding: 0;
26
+ width: 100%;
27
+ height: 100%;
28
+ box-sizing: border-box;
29
+ }
30
+ `;
31
+
32
+ export const resetInputField = (name) => `
33
+ ${name}::part(input-field) {
34
+ overflow: hidden;
35
+ padding: 0;
36
+ box-shadow: none;
37
+ }
38
+ `;
39
+
40
+ export const resetInputCursor = (name) => `
41
+ ${name} > label,
42
+ ${name}::part(label),
43
+ ${name}::part(required-indicator) {
44
+ cursor: pointer;
45
+ }
46
+ `;
47
+
48
+ export const resetInputPlaceholder = (name, ele = 'input') => `
49
+ ${name}[disabled] > ${ele}:placeholder-shown,
50
+ ${name}[readonly] > ${ele}:placeholder-shown {
51
+ opacity: 1;
52
+ }
53
+ `;
54
+
55
+ export const resetInputAutoFill = (name, cssVarList) => `
56
+ ${name} input:-webkit-autofill,
57
+ ${name} input:-webkit-autofill::first-line,
58
+ ${name} input:-webkit-autofill:hover,
59
+ ${name} input:-webkit-autofill:active,
60
+ ${name} input:-webkit-autofill:focus {
61
+ -webkit-text-fill-color: var(${cssVarList.inputValueTextColor});
62
+ box-shadow: 0 0 0 var(${cssVarList.inputHeight}) var(${cssVarList.inputBackgroundColor}) inset;
63
+ }
64
+ `;
65
+
66
+ export const resetInputFieldDefaultWidth = () => `
67
+ :host {
68
+ --vaadin-field-default-width: auto;
69
+ }
70
+ `;
71
+
72
+ export const resetInputReadonlyStyle = (name) => `
73
+ ${name}::part(input-field)::after {
74
+ opacity: 0;
75
+ }
76
+ `;
package/src/index.d.ts CHANGED
@@ -4,7 +4,7 @@ export {
4
4
  globalsThemeToStyle,
5
5
  createComponentsTheme,
6
6
  themeToStyle,
7
- componentsThemeManager,
7
+ componentsThemeManager
8
8
  } from './helpers/themeHelpers';
9
9
  export { genColor } from './helpers/themeHelpers/colorsHelpers';
10
10
  export { defaultTheme, themeVars } from './theme';
@@ -45,5 +45,6 @@ export type Theme = {
45
45
  link: Record<string, any>;
46
46
  button: Record<string, any>;
47
47
  text: Record<string, any>;
48
+ inputWrapper: Record<string, any>;
48
49
  };
49
50
  };