@descope/web-components-ui 1.0.38 → 1.0.40

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 (81) hide show
  1. package/dist/cjs/index.cjs.js.map +1 -1
  2. package/dist/index.esm.js +816 -224
  3. package/dist/index.esm.js.map +1 -1
  4. package/dist/umd/101.js +148 -0
  5. package/dist/umd/208.js +2 -0
  6. package/dist/umd/208.js.LICENSE.txt +5 -0
  7. package/dist/umd/211.js +312 -0
  8. package/dist/umd/211.js.LICENSE.txt +5 -0
  9. package/dist/umd/233.js +573 -0
  10. package/dist/umd/{511.js.LICENSE.txt → 233.js.LICENSE.txt} +0 -6
  11. package/dist/umd/422.js +2 -0
  12. package/dist/umd/422.js.LICENSE.txt +5 -0
  13. package/dist/umd/437.js +19 -0
  14. package/dist/umd/437.js.LICENSE.txt +5 -0
  15. package/dist/umd/513.js +1 -0
  16. package/dist/umd/515.js +202 -0
  17. package/dist/umd/515.js.LICENSE.txt +11 -0
  18. package/dist/umd/54.js +4 -4
  19. package/dist/umd/56.js +48 -0
  20. package/dist/umd/56.js.LICENSE.txt +5 -0
  21. package/dist/umd/599.js +1 -1
  22. package/dist/umd/63.js +1 -0
  23. package/dist/umd/725.js +37 -0
  24. package/dist/umd/725.js.LICENSE.txt +11 -0
  25. package/dist/umd/729.js +1 -1
  26. package/dist/umd/767.js +2 -0
  27. package/dist/umd/{9.js.LICENSE.txt → 767.js.LICENSE.txt} +0 -6
  28. package/dist/umd/786.js +2 -0
  29. package/dist/umd/786.js.LICENSE.txt +17 -0
  30. package/dist/umd/789.js +1 -0
  31. package/dist/umd/806.js +109 -0
  32. package/dist/umd/806.js.LICENSE.txt +5 -0
  33. package/dist/umd/938.js +1 -0
  34. package/dist/umd/97.js +1 -1
  35. package/dist/umd/descope-button-index-js.js +1 -1
  36. package/dist/umd/descope-checkbox-index-js.js +1 -0
  37. package/dist/umd/descope-combo-index-js.js +1 -1
  38. package/dist/umd/descope-container-index-js.js +1 -1
  39. package/dist/umd/descope-email-field-index-js.js +1 -0
  40. package/dist/umd/descope-number-field-index-js.js +1 -0
  41. package/dist/umd/descope-password-field-index-js.js +1 -0
  42. package/dist/umd/descope-switch-toggle-index-js.js +1 -0
  43. package/dist/umd/descope-text-area-index-js.js +1 -0
  44. package/dist/umd/descope-text-field-index-js.js +1 -1
  45. package/dist/umd/index.js +1 -1
  46. package/package.json +9 -2
  47. package/src/components/descope-button/Button.js +90 -30
  48. package/src/components/descope-checkbox/Checkbox.js +33 -0
  49. package/src/components/descope-checkbox/index.js +6 -0
  50. package/src/components/descope-email-field/EmailField.js +72 -0
  51. package/src/components/descope-email-field/index.js +6 -0
  52. package/src/components/descope-number-field/NumberField.js +72 -0
  53. package/src/components/descope-number-field/index.js +6 -0
  54. package/src/components/descope-password-field/PasswordField.js +79 -0
  55. package/src/components/descope-password-field/index.js +6 -0
  56. package/src/components/descope-switch-toggle/SwitchToggle.js +81 -0
  57. package/src/components/descope-switch-toggle/index.js +6 -0
  58. package/src/components/descope-text-area/TextArea.js +66 -0
  59. package/src/components/descope-text-area/index.js +6 -0
  60. package/src/components/descope-text-field/TextField.js +98 -28
  61. package/src/componentsHelpers/createProxy/index.js +27 -17
  62. package/src/componentsHelpers/createStyleMixin/index.js +1 -1
  63. package/src/componentsHelpers/index.js +12 -9
  64. package/src/componentsHelpers/inputMixin.js +38 -37
  65. package/src/index.js +11 -3
  66. package/src/theme/components/button.js +45 -34
  67. package/src/theme/components/checkbox.js +9 -0
  68. package/src/theme/components/container.js +32 -27
  69. package/src/theme/components/emailField.js +8 -0
  70. package/src/theme/components/index.js +19 -7
  71. package/src/theme/components/input.js +106 -0
  72. package/src/theme/components/numberField.js +8 -0
  73. package/src/theme/components/passwordField.js +11 -0
  74. package/src/theme/components/switchToggle.js +10 -0
  75. package/src/theme/components/textArea.js +44 -0
  76. package/src/theme/components/textField.js +69 -45
  77. package/src/theme/globals.js +8 -7
  78. package/dist/umd/221.js +0 -37
  79. package/dist/umd/511.js +0 -573
  80. package/dist/umd/9.js +0 -312
  81. /package/dist/umd/{221.js.LICENSE.txt → 101.js.LICENSE.txt} +0 -0
@@ -0,0 +1,72 @@
1
+ import {
2
+ getComponentName,
3
+ createStyleMixin,
4
+ draggableMixin,
5
+ createProxy,
6
+ inputMixin,
7
+ compose,
8
+ componentNameValidationMixin
9
+ } from '../../componentsHelpers';
10
+ import { textFieldMappings } from '../descope-text-field/TextField';
11
+
12
+ export const componentName = getComponentName('number-field');
13
+
14
+ let overrides = ``;
15
+
16
+ const NumberField = compose(
17
+ createStyleMixin({
18
+ mappings: {
19
+ ...textFieldMappings
20
+ }
21
+ }),
22
+ draggableMixin,
23
+ inputMixin,
24
+ componentNameValidationMixin
25
+ )(
26
+ createProxy({
27
+ slots: ['prefix', 'suffix'],
28
+ wrappedEleName: 'vaadin-number-field',
29
+ style: () => overrides,
30
+ excludeAttrsSync: ['tabindex'],
31
+ componentName
32
+ })
33
+ );
34
+
35
+ overrides = `
36
+ vaadin-number-field {
37
+ margin: 0;
38
+ padding: 0;
39
+ }
40
+ vaadin-number-field::part(input-field) {
41
+ overflow: hidden;
42
+ }
43
+ vaadin-number-field[readonly] > input:placeholder-shown {
44
+ opacity: 1;
45
+ }
46
+ vaadin-number-field input:-webkit-autofill,
47
+ vaadin-number-field input:-webkit-autofill::first-line,
48
+ vaadin-number-field input:-webkit-autofill:hover,
49
+ vaadin-number-field input:-webkit-autofill:active,
50
+ vaadin-number-field input:-webkit-autofill:focus {
51
+ -webkit-text-fill-color: var(${NumberField.cssVarList.color});
52
+ box-shadow: 0 0 0 var(${NumberField.cssVarList.height}) var(${NumberField.cssVarList.backgroundColor}) inset;
53
+ }
54
+ vaadin-number-field > label,
55
+ vaadin-number-field::part(input-field) {
56
+ cursor: pointer;
57
+ color: var(${NumberField.cssVarList.color});
58
+ }
59
+ vaadin-number-field::part(input-field):focus {
60
+ cursor: text;
61
+ }
62
+ vaadin-number-field[required]::part(required-indicator)::after {
63
+ font-size: "12px";
64
+ content: "*";
65
+ color: var(${NumberField.cssVarList.color});
66
+ }
67
+ vaadin-number-field[readonly]::part(input-field)::after {
68
+ border: 0 solid;
69
+ }
70
+ `;
71
+
72
+ export default NumberField;
@@ -0,0 +1,6 @@
1
+ import "@vaadin/number-field";
2
+ import NumberField, { componentName } from "./NumberField";
3
+
4
+ customElements.define(componentName, NumberField);
5
+
6
+ export { NumberField };
@@ -0,0 +1,79 @@
1
+ import {
2
+ getComponentName,
3
+ createStyleMixin,
4
+ draggableMixin,
5
+ createProxy,
6
+ inputMixin,
7
+ compose,
8
+ componentNameValidationMixin
9
+ } from '../../componentsHelpers';
10
+ import { textFieldMappings } from '../descope-text-field/TextField';
11
+
12
+ export const componentName = getComponentName('password-field');
13
+
14
+ let overrides = ``;
15
+
16
+ const PasswordField = compose(
17
+ createStyleMixin({
18
+ mappings: {
19
+ ...textFieldMappings,
20
+ // todo: override cursor from lumo
21
+ revealCursor: [
22
+ {
23
+ selector: '::part(reveal-button)::before',
24
+ property: 'cursor'
25
+ }
26
+ ]
27
+ }
28
+ }),
29
+ draggableMixin,
30
+ inputMixin,
31
+ componentNameValidationMixin
32
+ )(
33
+ createProxy({
34
+ slots: ['suffix'],
35
+ wrappedEleName: 'vaadin-password-field',
36
+ style: () => overrides,
37
+ excludeAttrsSync: ['tabindex'],
38
+ componentName
39
+ })
40
+ );
41
+
42
+ overrides = `
43
+ vaadin-password-field {
44
+ margin: 0;
45
+ padding: 0;
46
+ }
47
+ vaadin-password-field::part(input-field) {
48
+ overflow: hidden;
49
+ }
50
+ vaadin-password-field[readonly] > input:placeholder-shown {
51
+ opacity: 1;
52
+ }
53
+ vaadin-password-field input:-webkit-autofill,
54
+ vaadin-password-field input:-webkit-autofill::first-line,
55
+ vaadin-password-field input:-webkit-autofill:hover,
56
+ vaadin-password-field input:-webkit-autofill:active,
57
+ vaadin-password-field input:-webkit-autofill:focus {
58
+ -webkit-text-fill-color: var(${PasswordField.cssVarList.color});
59
+ box-shadow: 0 0 0 var(${PasswordField.cssVarList.height}) var(${PasswordField.cssVarList.backgroundColor}) inset;
60
+ }
61
+ vaadin-password-field > label,
62
+ vaadin-password-field::part(input-field) {
63
+ cursor: pointer;
64
+ color: var(${PasswordField.cssVarList.color});
65
+ }
66
+ vaadin-password-field::part(input-field):focus {
67
+ cursor: text;
68
+ }
69
+ vaadin-password-field[required]::part(required-indicator)::after {
70
+ font-size: "12px";
71
+ content: "*";
72
+ color: var(${PasswordField.cssVarList.color});
73
+ }
74
+ vaadin-password-field[readonly]::part(input-field)::after {
75
+ border: 0 solid;
76
+ }
77
+ `;
78
+
79
+ export default PasswordField;
@@ -0,0 +1,6 @@
1
+ import "@vaadin/password-field";
2
+ import PasswordField, { componentName } from "./PasswordField";
3
+
4
+ customElements.define(componentName, PasswordField);
5
+
6
+ export { PasswordField };
@@ -0,0 +1,81 @@
1
+ import {
2
+ getComponentName,
3
+ createStyleMixin,
4
+ draggableMixin,
5
+ createProxy,
6
+ inputMixin,
7
+ compose,
8
+ componentNameValidationMixin
9
+ } from '../../componentsHelpers';
10
+
11
+ export const componentName = getComponentName('switch-toggle');
12
+
13
+ let overrides = ``;
14
+
15
+ const SwitchToggle = compose(
16
+ createStyleMixin({
17
+ mappings: {
18
+ width: {},
19
+ cursor: [{}, { selector: '> label' }]
20
+ }
21
+ }),
22
+ draggableMixin,
23
+ inputMixin,
24
+ componentNameValidationMixin
25
+ )(
26
+ createProxy({
27
+ slots: [],
28
+ wrappedEleName: 'vaadin-checkbox',
29
+ style: () => overrides,
30
+ excludeAttrsSync: ['tabindex'],
31
+ componentName
32
+ })
33
+ );
34
+
35
+ overrides = `
36
+ :host {
37
+ --margin: 7px;
38
+ --width: var(${SwitchToggle.cssVarList.width});
39
+ --height: calc(var(--width) / 2);
40
+ --radius: var(--height);
41
+ --knobSize: calc(var(--height) - 5px);
42
+ --bgColor: #fff;
43
+ --knobBgColor: #000;
44
+ }
45
+ vaadin-checkbox>label {
46
+ cursor: pointer;
47
+ border: 1px solid;
48
+ text-indent: -99999px;
49
+ display: block;
50
+ position: relative;
51
+ width: var(--width);
52
+ height: var(--height);
53
+ background: var(--bgColor);
54
+ border-radius: var(--radius);
55
+ }
56
+ vaadin-checkbox>label::after {
57
+ content: '';
58
+ position: absolute;
59
+ transition: 0.3s;
60
+ top: var(--margin);
61
+ left: var(--margin);
62
+ width: var(--knobSize);
63
+ height: var(--knobSize);
64
+ background: var(--knobBgColor);
65
+ border-radius: var(--knobSize);
66
+ }
67
+ vaadin-checkbox::part(checkbox) {
68
+ height: 0;
69
+ width: 0;
70
+ visibility: hidden;
71
+ }
72
+ vaadin-checkbox[checked]>label::after {
73
+ transform: translateX(-100%);
74
+ left: calc(100% - var(--margin));
75
+ }
76
+ vaadin-checkbox[active]>label::after {
77
+ width: calc(var(--knobSize) + 15px);
78
+ }
79
+ `;
80
+
81
+ export default SwitchToggle;
@@ -0,0 +1,6 @@
1
+ import "@vaadin/checkbox";
2
+ import SwitchToggle, { componentName } from "./SwitchToggle";
3
+
4
+ customElements.define(componentName, SwitchToggle);
5
+
6
+ export { SwitchToggle };
@@ -0,0 +1,66 @@
1
+ import {
2
+ getComponentName,
3
+ createStyleMixin,
4
+ draggableMixin,
5
+ createProxy,
6
+ inputMixin,
7
+ compose,
8
+ componentNameValidationMixin
9
+ } from '../../componentsHelpers';
10
+
11
+ export const componentName = getComponentName('text-area');
12
+
13
+ const selectors = {
14
+ label: '::part(label)',
15
+ input: ':not([disabled])::part(input-field)',
16
+ required: '::part(required-indicator)::after'
17
+ };
18
+
19
+ let overrides = ``;
20
+
21
+ const TextArea = compose(
22
+ createStyleMixin({
23
+ mappings: {
24
+ resize: { selector: '> textarea' },
25
+ color: { selector: selectors.label },
26
+ cursor: {},
27
+ width: {},
28
+ backgroundColor: { selector: selectors.input },
29
+ borderWidth: { selector: selectors.input },
30
+ borderStyle: { selector: selectors.input },
31
+ borderColor: { selector: selectors.input },
32
+ borderRadius: { selector: selectors.input },
33
+ outline: { selector: selectors.input },
34
+ outlineOffset: { selector: selectors.input }
35
+ }
36
+ }),
37
+ draggableMixin,
38
+ inputMixin,
39
+ componentNameValidationMixin
40
+ )(
41
+ createProxy({
42
+ slots: [],
43
+ wrappedEleName: 'vaadin-text-area',
44
+ style: () => overrides,
45
+ excludeAttrsSync: ['tabindex'],
46
+ componentName
47
+ })
48
+ );
49
+
50
+ overrides = `
51
+ vaadin-text-area {
52
+ margin: 0;
53
+ }
54
+ vaadin-text-area > label,
55
+ vaadin-text-area::part(input-field) {
56
+ cursor: pointer;
57
+ }
58
+ vaadin-text-area[focused] input:focus {
59
+ cursor: text;
60
+ }
61
+ vaadin-text-area::part(required-indicator)::after {
62
+ font-size: "12px";
63
+ content: "*";
64
+ }
65
+ `;
66
+ export default TextArea;
@@ -0,0 +1,6 @@
1
+ import "@vaadin/text-area";
2
+ import TextArea, { componentName } from "./TextArea";
3
+
4
+ customElements.define(componentName, TextArea);
5
+
6
+ export { TextArea };
@@ -1,35 +1,105 @@
1
- import { getComponentName, createStyleMixin, draggableMixin, createProxy, inputMixin, compose, componentNameValidationMixin } from "../../componentsHelpers";
1
+ import {
2
+ getComponentName,
3
+ createStyleMixin,
4
+ draggableMixin,
5
+ createProxy,
6
+ inputMixin,
7
+ compose,
8
+ componentNameValidationMixin
9
+ } from '../../componentsHelpers';
10
+ import { matchHostStyle } from '../../componentsHelpers/createStyleMixin/helpers';
2
11
 
3
- export const componentName = getComponentName("text-field")
12
+ export const componentName = getComponentName('text-field');
13
+
14
+ const selectors = {
15
+ label: '::part(label)',
16
+ input: '::part(input-field)',
17
+ readOnlyInput: '[readonly]::part(input-field)::after',
18
+ placeholder: '> input:placeholder-shown'
19
+ };
20
+
21
+ let overrides = ``;
22
+
23
+ export const textFieldMappings = {
24
+ color: { selector: selectors.input },
25
+ backgroundColor: { selector: selectors.input },
26
+ width: [matchHostStyle()],
27
+ color: { selector: selectors.input },
28
+ borderColor: [
29
+ { selector: selectors.input },
30
+ { selector: selectors.readOnlyInput }
31
+ ],
32
+ borderWidth: [
33
+ { selector: selectors.input },
34
+ { selector: selectors.readOnlyInput }
35
+ ],
36
+ borderStyle: [
37
+ { selector: selectors.input },
38
+ { selector: selectors.readOnlyInput }
39
+ ],
40
+ borderRadius: { selector: selectors.input },
41
+ boxShadow: { selector: selectors.input },
42
+ fontSize: {},
43
+ height: { selector: selectors.input },
44
+ padding: { selector: selectors.input },
45
+ outline: { selector: selectors.input },
46
+ outlineOffset: { selector: selectors.input },
47
+
48
+ placeholderColor: { selector: selectors.placeholder, property: 'color' }
49
+ };
4
50
 
5
51
  const TextField = compose(
6
- createStyleMixin({
7
- mappings: {
8
- 'placeholderColor': { selector: '> input:placeholder-shown', property: 'color' },
9
- 'color': {},
10
- 'borderColor': { selector: '::part(input-field)' },
11
- 'borderWidth': { selector: '::part(input-field)' },
12
- 'borderStyle': { selector: '::part(input-field)' },
13
- 'borderRadius': { selector: '::part(input-field)' },
14
- 'boxShadow': { selector: '::part(input-field)' },
15
- 'height': { selector: '::part(input-field)' },
16
- 'padding': { selector: '::part(input-field)' },
17
- 'backgroundColor': { selector: '::part(input-field)' },
18
- 'labelColor': { selector: '::part(label)', property: 'color' },
19
- },
20
- }),
21
- draggableMixin,
22
- inputMixin,
23
- componentNameValidationMixin
52
+ createStyleMixin({
53
+ mappings: textFieldMappings
54
+ }),
55
+ draggableMixin,
56
+ inputMixin,
57
+ componentNameValidationMixin
24
58
  )(
25
- createProxy({
26
- slots: ["prefix", "suffix"],
27
- wrappedEleName: "vaadin-text-field",
28
- style: ``,
29
- excludeAttrsSync: ['tabindex'],
30
- componentName
31
- })
59
+ createProxy({
60
+ slots: ['prefix', 'suffix'],
61
+ wrappedEleName: 'vaadin-text-field',
62
+ style: () => overrides,
63
+ excludeAttrsSync: ['tabindex'],
64
+ componentName
65
+ })
32
66
  );
33
67
 
68
+ overrides = `
69
+ vaadin-text-field {
70
+ margin: 0;
71
+ padding: 0;
72
+ }
73
+ vaadin-text-field::part(input-field) {
74
+ overflow: hidden;
75
+ }
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(${TextField.cssVarList.color});
85
+ box-shadow: 0 0 0 var(${TextField.cssVarList.height}) var(${TextField.cssVarList.backgroundColor}) inset;
86
+ }
87
+ vaadin-text-field > label,
88
+ vaadin-text-field::part(input-field) {
89
+ cursor: pointer;
90
+ color: var(${TextField.cssVarList.color});
91
+ }
92
+ vaadin-text-field::part(input-field):focus {
93
+ cursor: text;
94
+ }
95
+ vaadin-text-field[required]::part(required-indicator)::after {
96
+ font-size: "12px";
97
+ content: "*";
98
+ color: var(${TextField.cssVarList.color});
99
+ }
100
+ vaadin-text-field[readonly]::part(input-field)::after {
101
+ border: 0 solid;
102
+ }
103
+ `;
34
104
 
35
- export default TextField
105
+ export default TextField;
@@ -1,12 +1,17 @@
1
- import { syncAttrs } from "./helpers";
2
-
3
- export const createProxy = ({ componentName, wrappedEleName, slots = [], style, excludeAttrsSync = [] }) => {
1
+ import { syncAttrs } from './helpers';
4
2
 
3
+ export const createProxy = ({
4
+ componentName,
5
+ wrappedEleName,
6
+ slots = [],
7
+ style,
8
+ excludeAttrsSync = []
9
+ }) => {
5
10
  const template = `
6
- ${style ? `<style id="create-proxy">${style}</style>` : ''}
11
+ <style id="create-proxy"></style>
7
12
  <${wrappedEleName}>
8
13
  <slot></slot>
9
- ${slots.map((slot) => `<slot name="${slot}" slot="${slot}"></slot>`).join("")}
14
+ ${slots.map((slot) => `<slot name="${slot}" slot="${slot}"></slot>`).join('')}
10
15
  </${wrappedEleName}>
11
16
  `;
12
17
 
@@ -16,21 +21,23 @@ export const createProxy = ({ componentName, wrappedEleName, slots = [], style,
16
21
  }
17
22
 
18
23
  constructor() {
19
- super().attachShadow({ mode: "open" }).innerHTML = template;
24
+ super().attachShadow({ mode: 'open' }).innerHTML = template;
20
25
  this.hostElement = this.shadowRoot.host;
21
- this.componentName = this.hostElement.tagName.toLowerCase()
22
- this.baseSelector = wrappedEleName
26
+ this.componentName = this.hostElement.tagName.toLowerCase();
27
+ this.baseSelector = wrappedEleName;
28
+ this.shadowRoot.getElementById('create-proxy').innerHTML =
29
+ typeof style === 'function' ? style() : style;
23
30
  }
24
31
 
25
32
  connectedCallback() {
26
33
  if (this.shadowRoot.isConnected) {
27
34
  this.proxyElement = this.shadowRoot.querySelector(wrappedEleName);
28
35
  this.setAttribute('tabindex', '0');
29
-
36
+
30
37
  // we want to focus on the proxy element when focusing our WC
31
38
  this.onfocus = (e) => {
32
- this.proxyElement.focus()
33
- }
39
+ this.proxyElement.focus();
40
+ };
34
41
 
35
42
  // `onkeydown` is set on `proxyElement` support proper tab-index navigation
36
43
  // this support is needed since both proxy host and element catch `focus`/`blur` event
@@ -40,15 +47,18 @@ export const createProxy = ({ componentName, wrappedEleName, slots = [], style,
40
47
  this.removeAttribute('tabindex');
41
48
  // We want to defer the action of setting the tab index back
42
49
  // so it will happen after focusing the previous element
43
- setTimeout(() => this.setAttribute('tabindex', '0'), 0)
50
+ setTimeout(() => this.setAttribute('tabindex', '0'), 0);
44
51
  }
45
- }
52
+ };
46
53
 
47
54
  this.mouseoverCbRef = () => {
48
55
  this.proxyElement.setAttribute('hover', '');
49
- this.proxyElement.addEventListener('mouseleave', () =>
50
- this.proxyElement.removeAttribute('hover'), { once: true })
51
- }
56
+ this.proxyElement.addEventListener(
57
+ 'mouseleave',
58
+ () => this.proxyElement.removeAttribute('hover'),
59
+ { once: true }
60
+ );
61
+ };
52
62
 
53
63
  this.proxyElement.addEventListener('mouseover', this.mouseoverCbRef);
54
64
 
@@ -60,7 +70,7 @@ export const createProxy = ({ componentName, wrappedEleName, slots = [], style,
60
70
  }
61
71
 
62
72
  disconnectedCallback() {
63
- this.proxyElement.removeEventListener('mouseover', this.mouseoverCbRef)
73
+ this.proxyElement.removeEventListener('mouseover', this.mouseoverCbRef);
64
74
  }
65
75
 
66
76
  attributeChangedCallback() {
@@ -43,7 +43,7 @@ export const createStyleMixin = ({ mappings = {} }) => (superclass) => {
43
43
  #createComponentStyle() {
44
44
  const themeStyle = document.createElement('style');
45
45
  themeStyle.id = 'style-mixin-component'
46
- themeStyle.innerHTML = createStyle(superclass.componentName, baseSelector, mappings)
46
+ themeStyle.innerHTML = createStyle(superclass.componentName, this.baseSelector, mappings)
47
47
  this.shadowRoot.prepend(themeStyle);
48
48
  }
49
49
 
@@ -1,12 +1,15 @@
1
- import { DESCOPE_PREFIX } from "../constants";
2
- import { kebabCaseJoin } from "../helpers";
1
+ import { DESCOPE_PREFIX } from '../constants';
2
+ import { kebabCaseJoin } from '../helpers';
3
3
 
4
- export const getComponentName = (name) => kebabCaseJoin(DESCOPE_PREFIX, name)
4
+ export const getComponentName = (name) => kebabCaseJoin(DESCOPE_PREFIX, name);
5
5
 
6
- export const compose = (...fns) => (val) => fns.reduceRight((res, fn) => fn(res), val);
6
+ export const compose =
7
+ (...fns) =>
8
+ (val) =>
9
+ fns.reduceRight((res, fn) => fn(res), val);
7
10
 
8
- export { createStyleMixin } from './createStyleMixin'
9
- export { draggableMixin } from './draggableMixin'
10
- export { createProxy } from './createProxy'
11
- export { inputMixin } from './inputMixin'
12
- export { componentNameValidationMixin } from './componentNameValidationMixin'
11
+ export { createStyleMixin } from './createStyleMixin';
12
+ export { draggableMixin } from './draggableMixin';
13
+ export { createProxy } from './createProxy';
14
+ export { inputMixin } from './inputMixin';
15
+ export { componentNameValidationMixin } from './componentNameValidationMixin';
@@ -1,46 +1,47 @@
1
1
  export const inputMixin = (superclass) =>
2
- class InputMixinClass extends superclass {
2
+ class InputMixinClass extends superclass {
3
3
  static get formAssociated() {
4
4
  return true;
5
5
  }
6
-
7
- #internals
8
6
 
9
- constructor() {
10
- super();
7
+ #internals;
11
8
 
12
- this.#internals = this.attachInternals();
9
+ constructor() {
10
+ super();
13
11
 
14
- // this is needed in order to make sure the form input validation is working
15
- if (!this.hasAttribute('tabindex')) {
16
- this.setAttribute('tabindex', 0);
17
- }
18
- }
19
-
20
- formAssociatedCallback() {
21
- this.setValidity?.();
22
- }
23
-
24
- connectedCallback() {
25
- super.connectedCallback?.();
26
-
27
- // vaadin does not expose all those validation attributes so we need to take it from the input
28
- // https://github.com/vaadin/web-components/issues/1177
29
- const input = this.proxyElement.querySelector('input')
30
- if (!input) throw Error('no input was found')
31
-
32
- this.checkValidity = () => input.checkValidity()
33
- this.reportValidity = () => input.reportValidity()
34
- this.validity = input.validity
35
-
36
- this.setValidity = () => {
37
- this.#internals.setValidity(input.validity, input.validationMessage);
38
- }
12
+ this.#internals = this.attachInternals();
13
+ }
39
14
 
40
- input.oninput = () => {
41
- this.value = input.value
42
- this.setValidity()
43
- }
15
+ formAssociatedCallback() {
16
+ this.setValidity?.();
17
+ }
44
18
 
45
- }
46
- }
19
+ connectedCallback() {
20
+ super.connectedCallback?.();
21
+
22
+ // this is needed in order to make sure the form input validation is working
23
+ if (!this.hasAttribute('tabindex')) {
24
+ this.setAttribute('tabindex', 0);
25
+ }
26
+
27
+ // vaadin does not expose all those validation attributes so we need to take it from the input
28
+ // https://github.com/vaadin/web-components/issues/1177
29
+ const input =
30
+ this.proxyElement.querySelector('input') ||
31
+ this.proxyElement.querySelector('textarea');
32
+ if (!input) throw Error('no input was found');
33
+
34
+ this.checkValidity = () => input.checkValidity();
35
+ this.reportValidity = () => input.reportValidity();
36
+ this.validity = input.validity;
37
+
38
+ this.setValidity = () => {
39
+ this.#internals.setValidity(input.validity, input.validationMessage);
40
+ };
41
+
42
+ input.oninput = () => {
43
+ this.value = input.value;
44
+ this.setValidity();
45
+ };
46
+ }
47
+ };
package/src/index.js CHANGED
@@ -1,9 +1,17 @@
1
1
  import "./components/descope-button";
2
2
  import "./components/descope-combo";
3
3
  import "./components/descope-text-field";
4
+ import "./components/descope-number-field";
5
+ import "./components/descope-email-field";
6
+ import "./components/descope-password-field";
7
+ import "./components/descope-text-area";
4
8
  import "./components/descope-date-picker";
5
9
  import "./components/descope-container";
6
10
 
7
- export { globalsThemeToStyle, componentsThemeToStyle, themeToStyle } from './themeHelpers'
8
- export { genColor } from './themeHelpers/processColors'
9
- export { default as defaultTheme } from './theme'
11
+ export {
12
+ globalsThemeToStyle,
13
+ componentsThemeToStyle,
14
+ themeToStyle,
15
+ } from "./themeHelpers";
16
+ export { genColor } from "./themeHelpers/processColors";
17
+ export { default as defaultTheme } from "./theme";