@descope/web-components-ui 1.0.66 → 1.0.68
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.
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.esm.js +481 -377
- package/dist/index.esm.js.map +1 -1
- package/dist/umd/135.js +1 -0
- package/dist/umd/descope-button-index-js.js +1 -1
- package/dist/umd/descope-checkbox-index-js.js +1 -1
- package/dist/umd/descope-combo-box-index-js.js +1 -1
- package/dist/umd/descope-container-index-js.js +1 -1
- package/dist/umd/descope-date-picker-index-js.js +1 -1
- package/dist/umd/descope-divider-index-js.js +1 -1
- package/dist/umd/descope-email-field-index-js.js +1 -1
- package/dist/umd/descope-link-index-js.js +1 -1
- package/dist/umd/descope-loader-linear-index-js.js +1 -1
- package/dist/umd/descope-loader-radial-index-js.js +1 -1
- package/dist/umd/descope-logo-index-js.js +1 -1
- package/dist/umd/descope-number-field-index-js.js +1 -1
- package/dist/umd/descope-passcode-descope-passcode-internal-index-js.js +1 -1
- package/dist/umd/descope-passcode-index-js.js +1 -1
- package/dist/umd/descope-password-field-index-js.js +1 -1
- package/dist/umd/descope-switch-toggle-index-js.js +1 -1
- package/dist/umd/descope-text-area-index-js.js +1 -1
- package/dist/umd/descope-text-field-index-js.js +1 -1
- package/dist/umd/descope-text-index-js.js +1 -1
- package/dist/umd/index.js +1 -1
- package/package.json +1 -1
- package/src/baseClasses/BaseInputClass.js +3 -2
- package/src/baseClasses/createBaseClass.js +29 -0
- package/src/components/descope-container/Container.js +17 -25
- package/src/components/descope-divider/Divider.js +32 -40
- package/src/components/descope-link/Link.js +8 -17
- package/src/components/descope-loader-linear/LoaderLinear.js +24 -29
- package/src/components/descope-loader-radial/LoaderRadial.js +18 -26
- package/src/components/descope-logo/Logo.js +4 -12
- package/src/components/descope-passcode/Passcode.js +4 -11
- package/src/components/descope-passcode/descope-passcode-internal/PasscodeInternal.js +41 -53
- package/src/components/descope-text/Text.js +4 -12
- package/src/helpers/index.js +2 -0
- package/src/helpers/mixinsHelpers.js +18 -0
- package/src/mixins/changeMixin.js +47 -0
- package/src/mixins/componentNameValidationMixin.js +1 -1
- package/src/mixins/createProxy.js +26 -28
- package/src/mixins/createStyleMixin/helpers.js +3 -3
- package/src/mixins/createStyleMixin/index.js +10 -9
- package/src/mixins/draggableMixin.js +1 -1
- package/src/mixins/focusMixin.js +130 -0
- package/src/mixins/hoverableMixin.js +14 -13
- package/src/mixins/index.js +3 -1
- package/src/mixins/{inputMixin.js → inputValidationMixin.js} +17 -58
- package/src/mixins/proxyInputMixin.js +50 -45
- package/dist/umd/860.js +0 -1
- package/src/baseClasses/DescopeBaseClass.js +0 -1
@@ -11,7 +11,7 @@ export const draggableMixin = (superclass) =>
|
|
11
11
|
super();
|
12
12
|
|
13
13
|
this.#styleEle = document.createElement('style');
|
14
|
-
this.#styleEle.innerText =
|
14
|
+
this.#styleEle.innerText = `* { cursor: inherit!important }`;
|
15
15
|
}
|
16
16
|
|
17
17
|
#handleDraggableStyle(isDraggable) {
|
@@ -0,0 +1,130 @@
|
|
1
|
+
import { upperFirst } from "../helpers";
|
2
|
+
|
3
|
+
const events = [
|
4
|
+
'blur',
|
5
|
+
'focus',
|
6
|
+
'focusin',
|
7
|
+
'focusout',
|
8
|
+
]
|
9
|
+
|
10
|
+
export const focusMixin = (superclass) => class FocusMixinClass extends superclass {
|
11
|
+
#isFocused = false
|
12
|
+
#setFocusTimer
|
13
|
+
|
14
|
+
#boundedHandleFocus
|
15
|
+
#boundedHandleBlur
|
16
|
+
#boundedHandleFocusIn
|
17
|
+
#boundedHandleFocusOut
|
18
|
+
|
19
|
+
constructor() {
|
20
|
+
super();
|
21
|
+
|
22
|
+
for (const event of events) {
|
23
|
+
this[`dispatch${upperFirst(event)}`] = function () {
|
24
|
+
this.dispatchInputEvent(event)
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
this.#boundedHandleFocus = this.#handleFocus.bind(this);
|
29
|
+
this.#boundedHandleBlur = this.#handleBlur.bind(this);
|
30
|
+
this.#boundedHandleFocusIn = this.#handleFocusIn.bind(this);
|
31
|
+
this.#boundedHandleFocusOut = this.#handleFocusOut.bind(this);
|
32
|
+
}
|
33
|
+
|
34
|
+
#handleFocus(e) {
|
35
|
+
if (this.isReadOnly) {
|
36
|
+
e.stopPropagation()
|
37
|
+
return
|
38
|
+
}
|
39
|
+
// we want to listen only to browser events
|
40
|
+
// and not to events we are dispatching
|
41
|
+
if (e.isTrusted) { // TODO: check if this is needed, because Vaadin is also dispatching events
|
42
|
+
// we want to control the focus events that dispatched by the component
|
43
|
+
// so we are stopping propagation and handling it in setFocus
|
44
|
+
e.stopPropagation()
|
45
|
+
this.setFocus(true)
|
46
|
+
|
47
|
+
// if the focus event is on the root component (and not on the inner components)
|
48
|
+
// we want to notify the component and let it decide what to do with it
|
49
|
+
if (e.target === this) {
|
50
|
+
this.onFocus(e)
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
#handleFocusOut(e) {
|
56
|
+
// we want to listen only to browser events
|
57
|
+
// and not to events we are dispatching
|
58
|
+
if (e.isTrusted) {
|
59
|
+
// we want to control the focus events that dispatched by the component
|
60
|
+
// so we are stopping propagation and handling it in setFocus
|
61
|
+
e.stopPropagation()
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
#handleFocusIn(e) {
|
66
|
+
// we want to listen only to browser events
|
67
|
+
// and not to events we are dispatching
|
68
|
+
if (e.isTrusted) {
|
69
|
+
// we want to control the focus events that dispatched by the component
|
70
|
+
// so we are stopping propagation and handling it in setFocus
|
71
|
+
e.stopPropagation()
|
72
|
+
}
|
73
|
+
}
|
74
|
+
|
75
|
+
#handleBlur(e) {
|
76
|
+
if (e.isTrusted) {
|
77
|
+
e.stopPropagation()
|
78
|
+
this.setFocus(false)
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
get isReadOnly() {
|
83
|
+
return this.hasAttribute('readonly') && this.getAttribute('readonly') !== 'false'
|
84
|
+
}
|
85
|
+
|
86
|
+
// we want to debounce the calls to this fn
|
87
|
+
// so we can support input like components with multiple inputs inside
|
88
|
+
setFocus(isFocused) {
|
89
|
+
clearTimeout(this.#setFocusTimer)
|
90
|
+
|
91
|
+
this.#setFocusTimer = setTimeout(() => {
|
92
|
+
if (this.#isFocused !== isFocused) {
|
93
|
+
this.#isFocused = isFocused
|
94
|
+
if (isFocused) {
|
95
|
+
this.dispatchFocus();
|
96
|
+
this.dispatchFocusin();
|
97
|
+
}
|
98
|
+
else {
|
99
|
+
this.dispatchBlur()
|
100
|
+
this.dispatchFocusout();
|
101
|
+
}
|
102
|
+
}
|
103
|
+
})
|
104
|
+
}
|
105
|
+
|
106
|
+
onFocus() {
|
107
|
+
console.warn('onFocus', 'is not implemented')
|
108
|
+
}
|
109
|
+
|
110
|
+
dispatchInputEvent(eventName) {
|
111
|
+
this[`on${eventName}`]?.(); // in case we got an event callback as property
|
112
|
+
this.dispatchEvent(new InputEvent(eventName));
|
113
|
+
}
|
114
|
+
|
115
|
+
connectedCallback() {
|
116
|
+
super.connectedCallback?.();
|
117
|
+
|
118
|
+
this.addEventListener('focus', this.#boundedHandleFocus, true)
|
119
|
+
this.addEventListener('blur', this.#boundedHandleBlur, true)
|
120
|
+
this.addEventListener('focusin', this.#boundedHandleFocusIn)
|
121
|
+
this.addEventListener('focusout', this.#boundedHandleFocusOut)
|
122
|
+
}
|
123
|
+
|
124
|
+
disconnectedCallback() {
|
125
|
+
this.removeEventListener('focus', this.#boundedHandleFocus)
|
126
|
+
this.removeEventListener('blur', this.#boundedHandleBlur)
|
127
|
+
this.removeEventListener('focusin', this.#boundedHandleFocusIn)
|
128
|
+
this.removeEventListener('focusout', this.#boundedHandleFocusOut)
|
129
|
+
}
|
130
|
+
}
|
@@ -1,23 +1,24 @@
|
|
1
1
|
export const hoverableMixin =
|
2
|
-
(relativeSelector = '') =>
|
3
2
|
(superclass) =>
|
4
|
-
class
|
3
|
+
class HoverableMixinClass extends superclass {
|
4
|
+
#boundOnMouseOver = this.#onMouseOver.bind(this)
|
5
|
+
|
6
|
+
#onMouseOver(e) {
|
7
|
+
this.setAttribute('hover', 'true');
|
8
|
+
e.target.addEventListener(
|
9
|
+
'mouseleave',
|
10
|
+
() => this.shadowRoot.host.removeAttribute('hover'),
|
11
|
+
{ once: true }
|
12
|
+
);
|
13
|
+
}
|
14
|
+
|
5
15
|
connectedCallback() {
|
6
16
|
super.connectedCallback?.();
|
7
17
|
|
8
|
-
const onMouseOver = (e) => {
|
9
|
-
this.shadowRoot.host.setAttribute('hover', 'true');
|
10
|
-
e.target.addEventListener(
|
11
|
-
'mouseleave',
|
12
|
-
() => this.shadowRoot.host.removeAttribute('hover'),
|
13
|
-
{ once: true }
|
14
|
-
);
|
15
|
-
};
|
16
|
-
|
17
18
|
const baseElement = this.shadowRoot.querySelector(
|
18
|
-
this.baseSelector
|
19
|
+
this.baseSelector
|
19
20
|
);
|
20
21
|
|
21
|
-
baseElement.addEventListener('mouseover',
|
22
|
+
baseElement.addEventListener('mouseover', this.#boundOnMouseOver);
|
22
23
|
}
|
23
24
|
};
|
package/src/mixins/index.js
CHANGED
@@ -4,5 +4,7 @@ export { createProxy } from './createProxy';
|
|
4
4
|
export { proxyInputMixin } from './proxyInputMixin';
|
5
5
|
export { componentNameValidationMixin } from './componentNameValidationMixin';
|
6
6
|
export { hoverableMixin } from './hoverableMixin';
|
7
|
-
export {
|
7
|
+
export { focusMixin } from './focusMixin'
|
8
|
+
export { inputValidationMixin } from './inputValidationMixin'
|
8
9
|
export { portalMixin } from './portalMixin'
|
10
|
+
export { changeMixin } from './changeMixin'
|
@@ -1,13 +1,4 @@
|
|
1
|
-
import {
|
2
|
-
|
3
|
-
const events = [
|
4
|
-
'change',
|
5
|
-
'input',
|
6
|
-
'blur',
|
7
|
-
'focus',
|
8
|
-
'invalid',
|
9
|
-
'valid',
|
10
|
-
]
|
1
|
+
import { createDispatchEvent } from "../helpers/mixinsHelpers";
|
11
2
|
|
12
3
|
const observedAttributes = [
|
13
4
|
'required',
|
@@ -18,7 +9,7 @@ const errorAttributes = {
|
|
18
9
|
valueMissing: 'data-errormessage-value-missing',
|
19
10
|
patternMismatch: 'data-errormessage-pattern-mismatch'
|
20
11
|
}
|
21
|
-
export const
|
12
|
+
export const inputValidationMixin = (superclass) => class InputValidationMixinClass extends superclass {
|
22
13
|
static get observedAttributes() {
|
23
14
|
return [
|
24
15
|
...superclass.observedAttributes || [],
|
@@ -30,18 +21,19 @@ export const inputMixin = (superclass) => class InputMixinClass extends supercla
|
|
30
21
|
return true;
|
31
22
|
}
|
32
23
|
|
24
|
+
#dispatchValid = createDispatchEvent.bind(this, 'valid')
|
25
|
+
#dispatchInvalid = createDispatchEvent.bind(this, 'invalid')
|
26
|
+
|
33
27
|
#internals
|
34
28
|
|
29
|
+
#boundedHandleInput
|
30
|
+
|
35
31
|
constructor() {
|
36
32
|
super();
|
37
33
|
|
38
34
|
this.#internals = this.attachInternals();
|
39
35
|
|
40
|
-
|
41
|
-
this[`dispatch${upperFirst(event)}`] = function () {
|
42
|
-
this.dispatchInputEvent(event)
|
43
|
-
}
|
44
|
-
}
|
36
|
+
this.#boundedHandleInput = this.#handleInput.bind(this);
|
45
37
|
}
|
46
38
|
|
47
39
|
get defaultErrorMsgValueMissing() {
|
@@ -67,13 +59,7 @@ export const inputMixin = (superclass) => class InputMixinClass extends supercla
|
|
67
59
|
}
|
68
60
|
}
|
69
61
|
|
70
|
-
get isReadOnly() {
|
71
|
-
return this.getAttribute('readonly') !== 'false'
|
72
|
-
}
|
73
|
-
|
74
62
|
setValidity() {
|
75
|
-
if (this.isReadOnly) return;
|
76
|
-
|
77
63
|
const validity = this.getValidity()
|
78
64
|
this.#internals.setValidity(validity, this.getErrorMessage(validity))
|
79
65
|
}
|
@@ -83,7 +69,7 @@ export const inputMixin = (superclass) => class InputMixinClass extends supercla
|
|
83
69
|
}
|
84
70
|
|
85
71
|
getValidity() {
|
86
|
-
|
72
|
+
console.warn('getValidity', 'is not implemented')
|
87
73
|
}
|
88
74
|
|
89
75
|
checkValidity() {
|
@@ -115,36 +101,11 @@ export const inputMixin = (superclass) => class InputMixinClass extends supercla
|
|
115
101
|
return this.getAttribute('pattern')
|
116
102
|
}
|
117
103
|
|
118
|
-
|
119
|
-
throw Error('get value', 'is not implemented')
|
120
|
-
}
|
121
|
-
|
122
|
-
set value(value) {
|
123
|
-
throw Error('set value', 'is not implemented')
|
124
|
-
}
|
125
|
-
|
126
|
-
handleFocus() {
|
127
|
-
throw Error('handleFocus', 'is not implemented')
|
128
|
-
}
|
129
|
-
|
130
|
-
handleInput() {
|
104
|
+
#handleInput() {
|
131
105
|
this.setValidity()
|
132
106
|
this.handleDispatchValidationEvents()
|
133
107
|
}
|
134
108
|
|
135
|
-
handleBlur() {
|
136
|
-
throw Error('handleBlur', 'is not implemented')
|
137
|
-
}
|
138
|
-
|
139
|
-
handleChange() {
|
140
|
-
throw Error('handleChange', 'is not implemented')
|
141
|
-
}
|
142
|
-
|
143
|
-
dispatchInputEvent(eventName) {
|
144
|
-
this[`on${eventName}`]?.(); // in case we got an event callback as property
|
145
|
-
this.dispatchEvent(new InputEvent(eventName));
|
146
|
-
}
|
147
|
-
|
148
109
|
attributeChangedCallback(attrName, oldValue, newValue) {
|
149
110
|
super.attributeChangedCallback?.(attrName, oldValue, newValue);
|
150
111
|
|
@@ -155,24 +116,22 @@ export const inputMixin = (superclass) => class InputMixinClass extends supercla
|
|
155
116
|
|
156
117
|
handleDispatchValidationEvents() {
|
157
118
|
if (this.checkValidity()) {
|
158
|
-
this
|
119
|
+
this.#dispatchValid()
|
159
120
|
} else {
|
160
|
-
this
|
121
|
+
this.#dispatchInvalid()
|
161
122
|
}
|
162
123
|
}
|
163
124
|
|
164
125
|
connectedCallback() {
|
165
126
|
super.connectedCallback?.();
|
166
127
|
|
128
|
+
this.addEventListener('input', this.#boundedHandleInput)
|
129
|
+
|
167
130
|
this.setValidity();
|
168
131
|
this.handleDispatchValidationEvents();
|
132
|
+
}
|
169
133
|
|
170
|
-
|
171
|
-
|
172
|
-
// of this element and not the nested element's events
|
173
|
-
this.onfocus = this.handleFocus.bind(this);
|
174
|
-
this.addEventListener('input', this.handleInput.bind(this))
|
175
|
-
this.addEventListener('blur', this.handleBlur.bind(this))
|
176
|
-
this.addEventListener('change', this.handleBlur.bind(this))
|
134
|
+
disconnectedCallback() {
|
135
|
+
this.removeEventListener('input', this.#boundedHandleInput)
|
177
136
|
}
|
178
137
|
}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import { inputValidationMixin } from "./inputValidationMixin";
|
2
2
|
|
3
3
|
const errorAttrs = ['invalid', 'has-error-message'];
|
4
4
|
|
@@ -29,18 +29,28 @@ const getNestedInput = (ele) => {
|
|
29
29
|
}
|
30
30
|
|
31
31
|
export const proxyInputMixin = (superclass) =>
|
32
|
-
class proxyInputMixinClass extends
|
32
|
+
class proxyInputMixinClass extends inputValidationMixin(superclass) {
|
33
33
|
static get observedAttributes() {
|
34
34
|
return [...superclass.observedAttributes || [], ...errorAttrs];
|
35
35
|
}
|
36
36
|
|
37
37
|
#inputElement
|
38
38
|
|
39
|
+
#boundHandleFocus
|
40
|
+
#boundHandleInvalid
|
41
|
+
#boundHandleValid
|
42
|
+
|
39
43
|
constructor() {
|
40
44
|
super();
|
41
45
|
|
42
46
|
this.#inputElement = super.inputElement
|
43
47
|
|
48
|
+
this.#boundHandleFocus = this.#handleFocus.bind(this);
|
49
|
+
this.#boundHandleInvalid = this.#handleInvalid.bind(this);
|
50
|
+
this.#boundHandleValid = this.#handleValid.bind(this);
|
51
|
+
|
52
|
+
this.baseEle = this.shadowRoot.querySelector(this.baseSelector);
|
53
|
+
|
44
54
|
}
|
45
55
|
|
46
56
|
get inputElement() {
|
@@ -48,7 +58,7 @@ export const proxyInputMixin = (superclass) =>
|
|
48
58
|
const textAreaSlot = this.baseEle.shadowRoot.querySelector('slot[name="textarea"]')
|
49
59
|
|
50
60
|
this.#inputElement ??= getNestedInput(inputSlot) || getNestedInput(textAreaSlot)
|
51
|
-
|
61
|
+
|
52
62
|
if (!this.#inputElement) throw Error('no input was found');
|
53
63
|
|
54
64
|
return this.#inputElement
|
@@ -64,27 +74,17 @@ export const proxyInputMixin = (superclass) =>
|
|
64
74
|
|
65
75
|
reportValidityOnInternalInput() {
|
66
76
|
setTimeout(() => {
|
77
|
+
this.baseEle.focus() //TODO: check if this is needed
|
67
78
|
this.inputElement.reportValidity()
|
68
|
-
}
|
69
|
-
}
|
70
|
-
|
71
|
-
handleBlur() { }
|
72
|
-
|
73
|
-
handleFocus() {
|
74
|
-
this.inputElement.focus();
|
75
|
-
if (this.hasAttribute('invalid')) {
|
76
|
-
this.reportValidityOnInternalInput()
|
77
|
-
}
|
79
|
+
})
|
78
80
|
}
|
79
81
|
|
80
82
|
// we want reportValidity to behave like form submission
|
81
83
|
reportValidity() {
|
82
|
-
const isValid = super.reportValidity()
|
83
84
|
if (!isValid) {
|
84
85
|
this.setAttribute('invalid', 'true');
|
85
|
-
this.
|
86
|
+
this.reportValidityOnInternalInput()
|
86
87
|
}
|
87
|
-
this.reportValidityOnInternalInput()
|
88
88
|
}
|
89
89
|
|
90
90
|
setInternalInputErrorMessage() {
|
@@ -93,48 +93,47 @@ export const proxyInputMixin = (superclass) =>
|
|
93
93
|
}
|
94
94
|
}
|
95
95
|
|
96
|
-
|
97
|
-
|
96
|
+
// when clicking on the form submit button and the input is invalid
|
97
|
+
// we want it to appear as invalid
|
98
|
+
#handleFocus(e) {
|
99
|
+
if (e.relatedTarget?.form) {
|
100
|
+
if (!this.checkValidity()) {
|
101
|
+
this.setAttribute('invalid', 'true');
|
102
|
+
}
|
98
103
|
|
99
|
-
|
100
|
-
|
101
|
-
this.addEventListener('focus', (e) => {
|
102
|
-
if (e.relatedTarget?.form) {
|
103
|
-
if (!this.checkValidity()) {
|
104
|
-
this.setAttribute('invalid', 'true');
|
105
|
-
}
|
106
|
-
|
107
|
-
if (this.hasAttribute('invalid')) {
|
108
|
-
this.reportValidityOnInternalInput()
|
109
|
-
}
|
104
|
+
if (this.hasAttribute('invalid')) {
|
105
|
+
this.reportValidityOnInternalInput()
|
110
106
|
}
|
111
|
-
}
|
107
|
+
}
|
108
|
+
}
|
112
109
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
110
|
+
#handleInvalid() {
|
111
|
+
this.setInternalInputErrorMessage()
|
112
|
+
this.setAttribute('error-message', this.validationMessage)
|
113
|
+
}
|
117
114
|
|
118
|
-
|
119
|
-
|
120
|
-
|
115
|
+
#handleValid() {
|
116
|
+
this.removeAttribute('invalid')
|
117
|
+
}
|
121
118
|
|
119
|
+
connectedCallback() {
|
122
120
|
super.connectedCallback?.();
|
123
121
|
|
124
|
-
this
|
122
|
+
// this is our way to identify that the form was submitted
|
123
|
+
// in this case, we want the input to be in error state if it's not valid
|
124
|
+
this.addEventListener('focus', this.#boundHandleFocus)
|
125
|
+
|
126
|
+
this.addEventListener('invalid', this.#boundHandleInvalid)
|
127
|
+
this.addEventListener('valid', this.#boundHandleValid)
|
128
|
+
|
129
|
+
this.addEventListener('input', () => {
|
125
130
|
this.inputElement.setCustomValidity('')
|
126
131
|
if (!this.inputElement.checkValidity())
|
127
132
|
this.setInternalInputErrorMessage()
|
128
133
|
})
|
129
134
|
|
130
|
-
this.inputElement.addEventListener('invalid', () => {
|
131
|
-
this.setValidity()
|
132
|
-
this.setInternalInputErrorMessage()
|
133
|
-
this.setAttribute('error-message', this.validationMessage)
|
134
|
-
})
|
135
|
-
|
136
135
|
// this is needed in order to make sure the form input validation is working
|
137
|
-
if (!this.hasAttribute('tabindex')) {
|
136
|
+
if (!this.hasAttribute('tabindex') && this.getRootNode() === document) {
|
138
137
|
this.setAttribute('tabindex', 0);
|
139
138
|
}
|
140
139
|
|
@@ -143,6 +142,12 @@ export const proxyInputMixin = (superclass) =>
|
|
143
142
|
this.setSelectionRange = this.inputElement.setSelectionRange?.bind(this.inputElement);
|
144
143
|
}
|
145
144
|
|
145
|
+
disconnectedCallback() {
|
146
|
+
this.removeEventListener('focus', this.#boundHandleFocus)
|
147
|
+
this.removeEventListener('invalid', this.#boundHandleInvalid)
|
148
|
+
this.removeEventListener('valid', this.#boundHandleValid)
|
149
|
+
}
|
150
|
+
|
146
151
|
attributeChangedCallback(attrName, oldValue, newValue) {
|
147
152
|
super.attributeChangedCallback?.(attrName, oldValue, newValue);
|
148
153
|
|
package/dist/umd/860.js
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
"use strict";(self.webpackChunkDescopeUI=self.webpackChunkDescopeUI||[]).push([[860],{9989:(t,e,s)=>{s.d(e,{V:()=>i});class i extends HTMLElement{}},5279:(t,e,s)=>{s.d(e,{gh:()=>i,k4:()=>n,qM:()=>a,qg:()=>r});const i="descope",n=3,r="host",a="@"},4567:(t,e,s)=>{s.d(e,{Db:()=>u,FX:()=>r,P$:()=>a,Tk:()=>c,iY:()=>h,oP:()=>d,tg:()=>l});var i=s(2061),n=s(5279);const r=(t,e,{excludeAttrs:s=[],includeAttrs:i=[]})=>{const n=Array.from(t.attributes).filter((t=>!s.includes(t.name)&&(!i.length||i.includes(t.name)))).map((t=>t.name));e(n),new MutationObserver((t=>{for(const n of t)"attributes"!==n.type||s.includes(n.attributeName)||i.length&&!i.includes(n.attributeName)||e([n.attributeName])})).observe(t,{attributes:!0})},a=(t,e)=>{e({addedNodes:Array.from(t.children),removedNodes:[]}),new MutationObserver((t=>{for(const s of t)"childList"===s.type&&e(s)})).observe(t,{childList:!0})},o=(t,e,s={})=>i=>{i.forEach((i=>{const n=s[i]||i,r=t.getAttribute(i);null!==r?e.getAttribute(n)!==r&&e.setAttribute(n,r):e.removeAttribute(n)}))},l=(t,e,s)=>{r(t,o(t,e),s),r(e,o(e,t),s)},h=t=>(0,i.E3)(n.gh,t),c=(...t)=>`--${(0,i.E3)(...t)}`,d=(t,e,s={})=>{r(t,o(t,e,s.mapAttrs),s)},u=(t,e,s=[])=>{if(!s.length)return;const i=s.reduce(((t,s)=>Object.assign(t,{[s]:{get:()=>e[s],set(t){e[s]=t}}})),{});Object.defineProperties(t,i)}},2061:(t,e,s)=>{s.d(e,{E3:()=>n,GL:()=>i,jC:()=>a,qC:()=>r});const i=t=>t.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[\s_.]+/g,"-").toLowerCase(),n=(...t)=>i(t.filter((t=>!!t)).join("-")),r=(...t)=>e=>t.reduceRight(((t,e)=>e(t)),e),a=t=>t.charAt(0).toUpperCase()+t.slice(1)},6860:(t,e,s)=>{s.d(e,{Ae:()=>C,DM:()=>p,yk:()=>c,e4:()=>d,_A:()=>m,y7:()=>g,Iw:()=>A,dj:()=>f});var i=s(5279),n=s(2061),r=s(4567),a=s(5561);const o=(t,...e)=>`var(${t}${e.length?` , ${o(...e)}`:""})`;class l{constructor(){this.styleMap=new Map}add(t,e,s){this.styleMap.has(t)||this.styleMap.set(t,[]),this.styleMap.set(t,[...this.styleMap.get(t),{property:e,value:s}])}toString(){return Array.from(this.styleMap.entries()).reduce(((t,[e,s])=>t+`${e} { \n${s.map((({property:t,value:e})=>`${t}: ${e}`)).join(";\n")} \n}\n\n`),"")}}const h=(t,e)=>Object.keys(e).reduce(((e,s)=>Object.assign(e,{[s]:(0,r.Tk)(t,s)})),{}),c=({mappings:t={}})=>e=>class extends e{static get cssVarList(){return{...e.cssVarList,...h(e.componentName,{...t})}}#t;#e;#s;#i;#n;#r;#a;#o;constructor({getRootElement:e,componentNameSuffix:s="",themeSection:r=i.qg,baseSelector:a}={}){super(),this.#i=s,this.#n=r,this.#r=e?.(this)||this.shadowRoot,this.#a=a??this.baseSelector,this.#o=Object.keys(t).map((t=>(0,n.E3)("st",s,t)))}get componentTheme(){return a.componentsThemeManager.currentTheme?.[e.componentName]||""}#l(){this.#e.innerHTML=this.componentTheme[this.#n]}#h(){this.#e=document.createElement("style"),this.#e.id="style-mixin-theme",this.#r.prepend(this.#e),this.#s=a.componentsThemeManager.onCurrentThemeChange(this.#l.bind(this)),this.#l()}#c(){this.#t=document.createElement("style"),this.#t.id="style-mixin-overrides";const t=(s=e.componentName,n=i.k4,Array(n).fill(`.${s}`).join(""));var s,n;this.#t.innerText=`:host(${t}) {}`,this.#r.append(this.#t)}#d(t,s){const i=this.#t?.sheet?.cssRules[0].style;if(!i)return;const n=(0,r.Tk)(e.componentName,t.replace(new RegExp("^st-"),""));s?i?.setProperty(n,s):i?.removeProperty(n)}#u(t=[]){for(const e of t)this.#o.includes(e)&&this.#d(e,this.getAttribute(e));this.#t.innerHTML=this.#t?.sheet?.cssRules[0].cssText}#m(){const s=document.createElement("style");s.id="style-mixin-mappings",s.innerHTML=((t,e,s)=>{const i=new l;return Object.keys(s).forEach((a=>{const l=((t,e)=>{const s={selector:"",property:(0,n.GL)(t)};return e&&Object.keys(e).length?Array.isArray(e)?e.map((t=>Object.assign({},s,t))):[Object.assign({},s,e)]:[s]})(a,s[a]),h=(0,r.Tk)(t,a);l.forEach((({selector:t,property:s})=>{i.add(((t="",e="")=>"function"==typeof e?e(t):`${t}${/^[A-Za-z]/.test(e)?` ${e}`:e}`)(e,t),s,o(h))}))})),i.toString()})((0,n.E3)(e.componentName,this.#i),this.#a,t),this.#r.prepend(s)}#p(t){(this.#r.classList||this.#r.host.classList).add(t)}connectedCallback(){super.connectedCallback?.(),this.shadowRoot.isConnected&&(this.#p(e.componentName),this.#m(),this.#h(),this.#c(),(0,r.FX)(this,this.#u.bind(this),{}))}disconnectedCallback(){this.#s?.()}},d=t=>class extends t{#b=null;static get observedAttributes(){return[...t.observedAttributes||[],"draggable"]}constructor(){super(),this.#b=document.createElement("style"),this.#b.innerText=`${this.baseSelector} { cursor: inherit }`}#y(t){t?this.shadowRoot.appendChild(this.#b):this.#b.remove()}attributeChangedCallback(t,e,s){super.attributeChangedCallback?.(t,e,s),"draggable"===t&&this.#y("true"===s)}};var u=s(9989);const m=(t="")=>e=>class extends e{connectedCallback(){super.connectedCallback?.(),this.shadowRoot.querySelector(this.baseSelector+t).addEventListener("mouseover",(t=>{this.shadowRoot.host.setAttribute("hover","true"),t.target.addEventListener("mouseleave",(()=>this.shadowRoot.host.removeAttribute("hover")),{once:!0})}))}},p=({componentName:t,wrappedEleName:e,slots:s=[],style:i,excludeAttrsSync:a=[],includeAttrsSync:o=[],includeForwardProps:l=[]})=>{const h=`\n\t\t<style id="create-proxy"></style>\n\t\t<${e}>\n\t\t<slot></slot>\n\t\t${s.map((t=>`<slot name="${t}" slot="${t}"></slot>`)).join("")}\n\t\t</${e}>\n\t`;class c extends u.V{static get componentName(){return t}constructor(){super().attachShadow({mode:"open"}).innerHTML=h,this.hostElement=this.shadowRoot.host,this.baseSelector=e,this.shadowRoot.getElementById("create-proxy").innerHTML="function"==typeof i?i():i}connectedCallback(){this.shadowRoot.isConnected&&(this.proxyElement=this.shadowRoot.querySelector(e),(0,r.Db)(this.hostElement,this.proxyElement,l),this.setAttribute("tabindex","0"),this.addEventListener("focus",(()=>{this.proxyElement.focus()})),this.proxyElement.onkeydown=t=>{t.shiftKey&&9===t.keyCode&&(this.removeAttribute("tabindex"),setTimeout((()=>this.setAttribute("tabindex","0")),0))},this.addEventListener=(...t)=>this.proxyElement.addEventListener(...t),(0,r.tg)(this.proxyElement,this.hostElement,{excludeAttrs:a,includeAttrs:o}))}disconnectedCallback(){this.proxyElement.removeEventListener("mouseover",this.mouseoverCbRef)}attributeChangedCallback(){this.proxyElement}}return(0,n.qC)(m())(c)},b=["change","input","blur","focus","invalid","valid"],y=["required","pattern"],g=t=>class extends t{static get observedAttributes(){return[...t.observedAttributes||[],...y]}static get formAssociated(){return!0}#g;constructor(){super(),this.#g=this.attachInternals();for(const t of b)this[`dispatch${(0,n.jC)(t)}`]=function(){this.dispatchInputEvent(t)}}get defaultErrorMsgValueMissing(){return"Please fill out this field."}get defaultErrorMsgPatternMismatch(){return"Please match the requested format."}getErrorMessage(t){switch(!0){case t.valueMissing:return this.getAttribute("data-errormessage-value-missing")||this.defaultErrorMsgValueMissing;case t.patternMismatch||t.typeMismatch:return this.getAttribute("data-errormessage-pattern-mismatch")||this.defaultErrorMsgPatternMismatch;case t.customError:return this.validationMessage;default:return""}}get isReadOnly(){return"false"!==this.getAttribute("readonly")}setValidity(){if(this.isReadOnly)return;const t=this.getValidity();this.#g.setValidity(t,this.getErrorMessage(t))}get validationMessage(){return this.#g.validationMessage}getValidity(){throw Error("getValidity","is not implemented")}checkValidity(){return this.#g.validity.valid}reportValidity(){return this.#g.reportValidity()}get validity(){return this.#g.validity}setCustomValidity(t){t?this.#g.setValidity({customError:!0},t):(this.#g.setValidity({}),this.setValidity())}get isRequired(){return this.hasAttribute("required")&&"false"!==this.getAttribute("required")}get pattern(){return this.getAttribute("pattern")}get value(){throw Error("get value","is not implemented")}set value(t){throw Error("set value","is not implemented")}handleFocus(){throw Error("handleFocus","is not implemented")}handleInput(){this.setValidity(),this.handleDispatchValidationEvents()}handleBlur(){throw Error("handleBlur","is not implemented")}handleChange(){throw Error("handleChange","is not implemented")}dispatchInputEvent(t){this[`on${t}`]?.(),this.dispatchEvent(new InputEvent(t))}attributeChangedCallback(t,e,s){super.attributeChangedCallback?.(t,e,s),y.includes(t)&&this.setValidity()}handleDispatchValidationEvents(){this.checkValidity()?this.dispatchValid():this.dispatchInvalid()}connectedCallback(){super.connectedCallback?.(),this.setValidity(),this.handleDispatchValidationEvents(),this.onfocus=this.handleFocus.bind(this),this.addEventListener("input",this.handleInput.bind(this)),this.addEventListener("blur",this.handleBlur.bind(this)),this.addEventListener("change",this.handleBlur.bind(this))}},E=["invalid","has-error-message"],v=t=>{if(!t)return;let e=t;for(let t=0;t<10;t++)if(e=e.assignedElements()[0],"slot"!==e.localName)return e},f=t=>class extends(g(t)){static get observedAttributes(){return[...t.observedAttributes||[],...E]}#E;constructor(){super(),this.#E=super.inputElement}get inputElement(){const t=this.baseEle.shadowRoot.querySelector('slot[name="input"]'),e=this.baseEle.shadowRoot.querySelector('slot[name="textarea"]');if(this.#E??=v(t)||v(e),!this.#E)throw Error("no input was found");return this.#E}set inputElement(t){this.#E=t}getValidity(){return this.inputElement.validity}reportValidityOnInternalInput(){setTimeout((()=>{this.inputElement.reportValidity()}),0)}handleBlur(){}handleFocus(){this.inputElement.focus(),this.hasAttribute("invalid")&&this.reportValidityOnInternalInput()}reportValidity(){super.reportValidity()||(this.setAttribute("invalid","true"),this.inputElement.focus()),this.reportValidityOnInternalInput()}setInternalInputErrorMessage(){this.checkValidity()||this.inputElement.setCustomValidity(this.validationMessage)}connectedCallback(){var t,e;this.baseEle=this.shadowRoot.querySelector(this.baseSelector),this.addEventListener("focus",(t=>{t.relatedTarget?.form&&(this.checkValidity()||this.setAttribute("invalid","true"),this.hasAttribute("invalid")&&this.reportValidityOnInternalInput())})),this.addEventListener("invalid",(()=>{this.setInternalInputErrorMessage(),this.setAttribute("error-message",this.validationMessage)})),this.addEventListener("valid",(()=>{this.removeAttribute("invalid")})),super.connectedCallback?.(),this.inputElement.addEventListener("input",(()=>{this.inputElement.setCustomValidity(""),this.inputElement.checkValidity()||this.setInternalInputErrorMessage()})),this.inputElement.addEventListener("invalid",(()=>{this.setValidity(),this.setInternalInputErrorMessage(),this.setAttribute("error-message",this.validationMessage)})),this.hasAttribute("tabindex")||this.setAttribute("tabindex",0),t=this.inputElement,e="value",Object.defineProperty(this,e,{set:function(s){return t[e]=s},get:function(){return t[e]},configurable:!0}),this.setSelectionRange=this.inputElement.setSelectionRange?.bind(this.inputElement)}attributeChangedCallback(t,e,s){super.attributeChangedCallback?.(t,e,s),"invalid"===t&&""===s&&this.setAttribute("invalid","true")}},C=t=>class extends t{#v(){const e=this.shadowRoot.host.tagName.toLowerCase();if(!t.componentName)throw Error('component name is not defined on super class, make sure you have a static get for "componentName"');if(e!==t.componentName)throw Error(`component name mismatch, expected "${t.componentName}", current "${e}"`)}connectedCallback(){super.connectedCallback?.(),this.shadowRoot.isConnected&&this.#v()}},A=({name:t,selector:e,mappings:s={}})=>a=>{const o=t||(t=>t.replace(/[^\w\s]/gi,""))(e),l=c({mappings:s})(a);return class extends l{static get cssVarList(){return{...l.cssVarList,...h(a.componentName,(t=s,e=o,Object.keys(t).reduce(((s,i)=>Object.assign(s,{[e+(0,n.jC)(i)]:t[i]})),{})))};var t,e}#f;constructor(){const t=t=>{const s=t.shadowRoot.querySelector(t.baseSelector).shadowRoot.querySelector(e);return s.shadowRoot||s};var s;super({getRootElement:t,componentNameSuffix:o,themeSection:i.qM+o,baseSelector:":host"}),this.#f=(s=t(this)).host||s}#C(){this.#f.onmouseenter=t=>{t.target.setAttribute("hover","true")},this.#f.onmouseleave=t=>{t.target.removeAttribute("hover")}}connectedCallback(){super.connectedCallback?.(),(0,r.oP)(this,this.#f,{excludeAttrs:["hover"]}),this.#C()}}}}}]);
|
@@ -1 +0,0 @@
|
|
1
|
-
export class DescopeBaseClass extends HTMLElement {}
|