@descope/web-components-ui 1.0.67 → 1.0.68
Sign up to get free protection for your applications and to get access to all the features.
- 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.hasAttribute('readonly') && 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 this.hasAttribute("readonly")&&"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 {}
|