@mgdis/mg-components 5.1.0 → 5.2.0
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/loader.cjs.js +1 -1
- package/dist/cjs/mg-badge_27.cjs.entry.js +354 -236
- package/dist/cjs/mg-components.cjs.js +1 -1
- package/dist/collection/components/atoms/mg-badge/mg-badge.js +1 -1
- package/dist/collection/components/atoms/mg-button/mg-button.js +3 -3
- package/dist/collection/components/atoms/mg-tag/mg-tag.js +1 -1
- package/dist/collection/components/molecules/inputs/MgInput.js +3 -11
- package/dist/collection/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.js +41 -20
- package/dist/collection/components/molecules/inputs/mg-input-date/mg-input-date.js +50 -39
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.css +25 -6
- package/dist/collection/components/molecules/inputs/mg-input-numeric/mg-input-numeric.js +42 -33
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.css +25 -6
- package/dist/collection/components/molecules/inputs/mg-input-password/mg-input-password.js +36 -17
- package/dist/collection/components/molecules/inputs/mg-input-radio/mg-input-radio.js +35 -14
- package/dist/collection/components/molecules/inputs/mg-input-select/doc/mg-input-select.stories.js +2 -3
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.css +28 -6
- package/dist/collection/components/molecules/inputs/mg-input-select/mg-input-select.js +36 -17
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.css +25 -6
- package/dist/collection/components/molecules/inputs/mg-input-text/mg-input-text.js +38 -19
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.css +25 -6
- package/dist/collection/components/molecules/inputs/mg-input-textarea/mg-input-textarea.js +37 -18
- package/dist/collection/components/molecules/inputs/mg-input-toggle/mg-input-toggle.js +1 -1
- package/dist/collection/components/molecules/mg-form/mg-form.js +73 -27
- package/dist/collection/components/molecules/mg-illustrated-message/doc/mg-illustrated-message.stories.js +6 -6
- package/dist/collection/components/molecules/mg-message/mg-message.js +1 -1
- package/dist/collection/components/molecules/mg-modal/mg-modal.js +0 -4
- package/dist/collection/utils/unit.test.utils.js +51 -0
- package/dist/collection/variables.css +6 -6
- package/dist/components/MgInput.js +4 -12
- package/dist/components/mg-badge2.js +1 -1
- package/dist/components/mg-button2.js +3 -3
- package/dist/components/mg-form.js +67 -26
- package/dist/components/mg-input-checkbox.js +36 -21
- package/dist/components/mg-input-date.js +44 -39
- package/dist/components/mg-input-numeric.js +37 -34
- package/dist/components/mg-input-password.js +32 -19
- package/dist/components/mg-input-radio.js +30 -15
- package/dist/components/mg-input-select2.js +32 -19
- package/dist/components/mg-input-text2.js +34 -21
- package/dist/components/mg-input-textarea.js +32 -19
- package/dist/components/mg-input-toggle.js +1 -1
- package/dist/components/mg-message.js +1 -1
- package/dist/components/mg-modal.js +0 -4
- package/dist/components/mg-tag.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/mg-badge_27.entry.js +354 -236
- package/dist/esm/mg-components.js +1 -1
- package/dist/mg-components/mg-components.css +1 -1
- package/dist/mg-components/mg-components.esm.js +1 -1
- package/dist/mg-components/p-b2b07c3f.entry.js +1 -0
- package/dist/mg-components/variables.css +6 -6
- package/dist/types/components/atoms/mg-button/mg-button.d.ts +2 -2
- package/dist/types/components/molecules/inputs/mg-input-checkbox/mg-input-checkbox.d.ts +10 -8
- package/dist/types/components/molecules/inputs/mg-input-date/mg-input-date.d.ts +3 -8
- package/dist/types/components/molecules/inputs/mg-input-numeric/mg-input-numeric.d.ts +3 -8
- package/dist/types/components/molecules/inputs/mg-input-password/mg-input-password.d.ts +4 -3
- package/dist/types/components/molecules/inputs/mg-input-radio/mg-input-radio.d.ts +4 -2
- package/dist/types/components/molecules/inputs/mg-input-select/mg-input-select.d.ts +4 -3
- package/dist/types/components/molecules/inputs/mg-input-text/mg-input-text.d.ts +5 -4
- package/dist/types/components/molecules/inputs/mg-input-textarea/mg-input-textarea.d.ts +4 -3
- package/dist/types/components/molecules/mg-form/mg-form.d.ts +21 -1
- package/dist/types/components/molecules/mg-message/mg-message.d.ts +3 -0
- package/dist/types/components/molecules/mg-modal/mg-modal.d.ts +3 -0
- package/package.json +7 -8
- package/dist/collection/utils/test.utils.js +0 -38
- package/dist/mg-components/p-e131701a.entry.js +0 -1
- package/dist/types/utils/test.utils.d.ts +0 -17
|
@@ -27,6 +27,8 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
27
27
|
************/
|
|
28
28
|
// HTML selector
|
|
29
29
|
this.inputs = [];
|
|
30
|
+
// hasDisplayedError (triggered by blur event)
|
|
31
|
+
this.hasDisplayedError = false;
|
|
30
32
|
/**
|
|
31
33
|
* Input name
|
|
32
34
|
* If not set the value equals the identifier
|
|
@@ -81,25 +83,27 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
81
83
|
this.handleBlur = () => {
|
|
82
84
|
// Check validity
|
|
83
85
|
this.checkValidity();
|
|
84
|
-
this.
|
|
86
|
+
this.setErrorMessage();
|
|
85
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* get invalid element
|
|
90
|
+
*
|
|
91
|
+
* @returns {HTMLInputElement} element
|
|
92
|
+
*/
|
|
93
|
+
this.getInvalidElement = () => this.inputs.find((input) => input !== null && !input.disabled && !input.checkValidity());
|
|
86
94
|
/**
|
|
87
95
|
* Check if input is valid
|
|
88
96
|
*/
|
|
89
97
|
this.checkValidity = () => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
this.invalid = !validity;
|
|
95
|
-
//Send event
|
|
96
|
-
this.inputValid.emit(validity);
|
|
97
|
-
}
|
|
98
|
+
this.valid = this.readonly || this.disabled || this.getInvalidElement() === undefined;
|
|
99
|
+
this.invalid = !this.valid;
|
|
100
|
+
// We need to send valid event even if it is the same value
|
|
101
|
+
this.inputValid.emit(this.valid);
|
|
98
102
|
};
|
|
99
103
|
/**
|
|
100
|
-
*
|
|
104
|
+
* Set input error message
|
|
101
105
|
*/
|
|
102
|
-
this.
|
|
106
|
+
this.setErrorMessage = () => {
|
|
103
107
|
const invalidElement = this.getInvalidElement();
|
|
104
108
|
// Set error message
|
|
105
109
|
this.errorMessage = undefined;
|
|
@@ -107,12 +111,6 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
107
111
|
this.errorMessage = this.messages.errors.required;
|
|
108
112
|
}
|
|
109
113
|
};
|
|
110
|
-
/**
|
|
111
|
-
* get invalid element
|
|
112
|
-
*
|
|
113
|
-
* @returns {HTMLInputElement} element
|
|
114
|
-
*/
|
|
115
|
-
this.getInvalidElement = () => this.inputs.find((element) => !element.disabled && !element.checkValidity());
|
|
116
114
|
}
|
|
117
115
|
validateValue(newValue) {
|
|
118
116
|
if (newValue && newValue.every(item => isCheckboxItem(item))) {
|
|
@@ -128,6 +126,16 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
128
126
|
throw new Error('<mg-input-checkbox> prop "value" is required and all values must be the same type, CheckboxItem.');
|
|
129
127
|
}
|
|
130
128
|
}
|
|
129
|
+
handleValidityChange(newValue, _oldValue, prop) {
|
|
130
|
+
this.inputs.forEach(input => {
|
|
131
|
+
input[prop] = newValue;
|
|
132
|
+
});
|
|
133
|
+
this.checkValidity();
|
|
134
|
+
if (this.hasDisplayedError) {
|
|
135
|
+
this.setErrorMessage();
|
|
136
|
+
this.hasDisplayedError = false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
131
139
|
/**
|
|
132
140
|
* Public method to display errors
|
|
133
141
|
*
|
|
@@ -135,7 +143,8 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
135
143
|
*/
|
|
136
144
|
async displayError() {
|
|
137
145
|
this.checkValidity();
|
|
138
|
-
this.
|
|
146
|
+
this.setErrorMessage();
|
|
147
|
+
this.hasDisplayedError = this.invalid;
|
|
139
148
|
}
|
|
140
149
|
/*************
|
|
141
150
|
* Lifecycle *
|
|
@@ -163,15 +172,21 @@ const MgInputCheckbox$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
163
172
|
* @returns {HTMLElement} HTML Element
|
|
164
173
|
*/
|
|
165
174
|
render() {
|
|
166
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: undefined, mgWidth: undefined, disabled: this.disabled, value: this.value && this.value.toString(), readonlyValue: undefined, tooltip: !this.readonly
|
|
175
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: !this.readonly ? this.required : undefined, readonly: undefined, mgWidth: undefined, disabled: this.disabled, value: this.value && this.value.toString(), readonlyValue: undefined, tooltip: !this.readonly ? this.tooltip : undefined, helpText: !this.readonly ? this.helpText : undefined, errorMessage: !this.readonly ? this.errorMessage : undefined, isFieldset: true }, h("ul", { class: { 'mg-input__input-group-container': true, 'mg-input__input-group-container--vertical': this.inputVerticalList } }, this.checkboxItems
|
|
167
176
|
.filter(item => {
|
|
168
177
|
return !this.readonly || item.value;
|
|
169
178
|
})
|
|
170
|
-
.map(input => (h("li", { class: { 'mg-input__input-group': true, 'mg-input__input-group--disabled': this.disabled || input.disabled } }, h("input", { type: "checkbox", id: input.id, name: this.identifier, value: input.value && input.value.toString(), checked: Boolean(input.value), disabled: this.readonly || this.disabled || input.disabled, required: this.required, indeterminate: input.value === null, onInput: this.handleInput, onBlur: this.handleBlur, ref: el =>
|
|
179
|
+
.map((input, index) => (h("li", { class: { 'mg-input__input-group': true, 'mg-input__input-group--disabled': this.disabled || input.disabled } }, h("input", { type: "checkbox", id: input.id, name: this.identifier, value: input.value && input.value.toString(), checked: Boolean(input.value), disabled: this.readonly || this.disabled || input.disabled, required: this.required, indeterminate: input.value === null, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
|
|
180
|
+
if (el !== null)
|
|
181
|
+
this.inputs[index] = el;
|
|
182
|
+
} }), h("label", { htmlFor: input.id }, input.title)))))));
|
|
171
183
|
}
|
|
172
184
|
get element() { return this; }
|
|
173
185
|
static get watchers() { return {
|
|
174
|
-
"value": ["validateValue"]
|
|
186
|
+
"value": ["validateValue"],
|
|
187
|
+
"required": ["handleValidityChange"],
|
|
188
|
+
"readonly": ["handleValidityChange"],
|
|
189
|
+
"disabled": ["handleValidityChange"]
|
|
175
190
|
}; }
|
|
176
191
|
static get style() { return mgInputCheckboxCss; }
|
|
177
192
|
}, [1, "mg-input-checkbox", {
|
|
@@ -24,8 +24,8 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
24
24
|
this.__attachShadow();
|
|
25
25
|
this.valueChange = createEvent(this, "value-change", 7);
|
|
26
26
|
this.inputValid = createEvent(this, "input-valid", 7);
|
|
27
|
-
//
|
|
28
|
-
this.
|
|
27
|
+
// hasDisplayedError (triggered by blur event)
|
|
28
|
+
this.hasDisplayedError = false;
|
|
29
29
|
/**
|
|
30
30
|
* Input name
|
|
31
31
|
* If not set the value equals the identifier
|
|
@@ -56,8 +56,8 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
56
56
|
*/
|
|
57
57
|
this.handleInput = () => {
|
|
58
58
|
this.checkValidity();
|
|
59
|
-
if (this.
|
|
60
|
-
this.
|
|
59
|
+
if (this.hasDisplayedError) {
|
|
60
|
+
this.setErrorMessage();
|
|
61
61
|
}
|
|
62
62
|
this.value = this.input.value;
|
|
63
63
|
};
|
|
@@ -71,14 +71,11 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
71
71
|
* Check if input is valid
|
|
72
72
|
*/
|
|
73
73
|
this.checkValidity = () => {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
//Send event
|
|
80
|
-
this.inputValid.emit(validity);
|
|
81
|
-
}
|
|
74
|
+
var _a;
|
|
75
|
+
this.valid = this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true);
|
|
76
|
+
this.invalid = !this.valid;
|
|
77
|
+
// We need to send valid event even if it is the same value
|
|
78
|
+
this.inputValid.emit(this.valid);
|
|
82
79
|
};
|
|
83
80
|
/**
|
|
84
81
|
* get input error code
|
|
@@ -107,48 +104,50 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
107
104
|
return inputError;
|
|
108
105
|
};
|
|
109
106
|
/**
|
|
110
|
-
*
|
|
107
|
+
* Check input errors
|
|
111
108
|
*
|
|
112
109
|
* @returns {void}
|
|
113
110
|
*/
|
|
114
111
|
this.setErrorMessage = () => {
|
|
115
112
|
var _a;
|
|
116
|
-
const inputError = this.getInputError();
|
|
117
|
-
// required
|
|
118
|
-
if (inputError === InputError.REQUIRED) {
|
|
119
|
-
this.errorMessage = this.messages.errors[inputError];
|
|
120
|
-
}
|
|
121
|
-
// min, max & minMax
|
|
122
|
-
else if ([InputError.MIN, InputError.MAX, InputError.MINMAX].includes(inputError)) {
|
|
123
|
-
this.errorMessage = this.messages.errors.date[inputError].replace('{min}', localeDate(this.min, this.locale)).replace('{max}', localeDate(this.max, this.locale));
|
|
124
|
-
}
|
|
125
|
-
// wrong date format
|
|
126
|
-
// element.validity.badInput is default error message
|
|
127
|
-
else {
|
|
128
|
-
this.errorMessage = this.messages.errors.date.badInput.replace('{min}', ((_a = this.min) === null || _a === void 0 ? void 0 : _a.length) > 0 ? localeDate(this.min, this.locale) : localeDate('1900-01-01', this.locale));
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
/**
|
|
132
|
-
* Check input errors
|
|
133
|
-
*
|
|
134
|
-
* @returns {void}
|
|
135
|
-
*/
|
|
136
|
-
this.checkError = () => {
|
|
137
113
|
// Set error message
|
|
138
114
|
this.errorMessage = undefined;
|
|
139
115
|
if (!this.valid) {
|
|
140
|
-
this.
|
|
116
|
+
const inputError = this.getInputError();
|
|
117
|
+
// required
|
|
118
|
+
if (inputError === InputError.REQUIRED) {
|
|
119
|
+
this.errorMessage = this.messages.errors[inputError];
|
|
120
|
+
}
|
|
121
|
+
// min, max & minMax
|
|
122
|
+
else if ([InputError.MIN, InputError.MAX, InputError.MINMAX].includes(inputError)) {
|
|
123
|
+
this.errorMessage = this.messages.errors.date[inputError].replace('{min}', localeDate(this.min, this.locale)).replace('{max}', localeDate(this.max, this.locale));
|
|
124
|
+
}
|
|
125
|
+
// wrong date format
|
|
126
|
+
// element.validity.badInput is default error message
|
|
127
|
+
else {
|
|
128
|
+
this.errorMessage = this.messages.errors.date.badInput.replace('{min}', ((_a = this.min) === null || _a === void 0 ? void 0 : _a.length) > 0 ? localeDate(this.min, this.locale) : localeDate('1900-01-01', this.locale));
|
|
129
|
+
}
|
|
141
130
|
}
|
|
142
131
|
};
|
|
143
132
|
}
|
|
144
133
|
validateValue(newValue) {
|
|
145
|
-
if (newValue !== undefined && (typeof newValue !== 'string' || !dateRegExp.test(newValue))) {
|
|
134
|
+
if (newValue !== undefined && newValue !== null && (typeof newValue !== 'string' || !dateRegExp.test(newValue))) {
|
|
146
135
|
throw new Error("<mg-input-date> props 'value' doesn't match pattern: yyyy-mm-dd");
|
|
147
136
|
}
|
|
148
137
|
else {
|
|
149
138
|
this.valueChange.emit(this.value);
|
|
150
139
|
}
|
|
151
140
|
}
|
|
141
|
+
handleValidityChange(newValue, _oldValue, prop) {
|
|
142
|
+
if (this.input !== undefined) {
|
|
143
|
+
this.input[prop] = newValue;
|
|
144
|
+
this.checkValidity();
|
|
145
|
+
if (this.hasDisplayedError) {
|
|
146
|
+
this.setErrorMessage();
|
|
147
|
+
this.hasDisplayedError = false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
152
151
|
validateMinMax(newValue) {
|
|
153
152
|
if ((newValue === null || newValue === void 0 ? void 0 : newValue.length) === 0 || ((newValue === null || newValue === void 0 ? void 0 : newValue.length) > 0 && !(typeof newValue === 'string' && dateRegExp.test(newValue)))) {
|
|
154
153
|
throw new Error("<mg-input-date> props 'min/max' doesn't match pattern: yyyy-mm-dd");
|
|
@@ -161,8 +160,8 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
161
160
|
*/
|
|
162
161
|
async displayError() {
|
|
163
162
|
this.checkValidity();
|
|
164
|
-
this.
|
|
165
|
-
this.
|
|
163
|
+
this.setErrorMessage();
|
|
164
|
+
this.hasDisplayedError = this.invalid;
|
|
166
165
|
}
|
|
167
166
|
/*************
|
|
168
167
|
* Lifecycle *
|
|
@@ -194,11 +193,17 @@ const MgInputDate$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement
|
|
|
194
193
|
* @returns {HTMLElement} HTML Element
|
|
195
194
|
*/
|
|
196
195
|
render() {
|
|
197
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: undefined, disabled: this.disabled, value: this.value, readonlyValue: localeDate(this.value, this.locale), tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "date", class: "mg-input__box", min: this.min, max: this.max, value: this.value, id: this.identifier, name: this.name, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, pattern: "[0-9]{4}-[0-9]{2}-[0-9]{2}", ref: el =>
|
|
196
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: undefined, disabled: this.disabled, value: this.value, readonlyValue: localeDate(this.value, this.locale), tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "date", class: "mg-input__box", min: this.min, max: this.max, value: this.value, id: this.identifier, name: this.name, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, pattern: "[0-9]{4}-[0-9]{2}-[0-9]{2}", ref: el => {
|
|
197
|
+
if (el !== null)
|
|
198
|
+
this.input = el;
|
|
199
|
+
} })));
|
|
198
200
|
}
|
|
199
201
|
get element() { return this; }
|
|
200
202
|
static get watchers() { return {
|
|
201
203
|
"value": ["validateValue"],
|
|
204
|
+
"required": ["handleValidityChange"],
|
|
205
|
+
"readonly": ["handleValidityChange"],
|
|
206
|
+
"disabled": ["handleValidityChange"],
|
|
202
207
|
"min": ["validateMinMax"],
|
|
203
208
|
"max": ["validateMinMax"]
|
|
204
209
|
}; }
|
|
@@ -19,7 +19,7 @@ var InputError;
|
|
|
19
19
|
InputError["REQUIRED"] = "required";
|
|
20
20
|
})(InputError || (InputError = {}));
|
|
21
21
|
|
|
22
|
-
const mgInputNumericCss = ":host{display:block}.mg-input{display:flex;align-items:flex-start;min-height:var(--default-size);max-width:100%;margin-bottom:var(--mg-inputs-margin-bottom, 0);}.mg-input mg-input-title{flex-shrink:var(--mg-inputs-shrink, 1);width:var(--mg-inputs-title-width, auto);margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);margin-right:var(--mg-inputs-title-horizontal-space, var(--mg-inputs-spacer));text-align:right}.mg-input.mg-input--label-on-top{flex-direction:column}.mg-input.mg-input--label-on-top .mg-input__input-container{width:100%}.mg-input__title{display:flex;align-items:baseline;margin-bottom:0.3rem}.mg-input__title mg-input-title{flex-shrink:1;width:auto;margin-top:0;margin-right:var(--mg-inputs-spacer);text-align:left}.mg-input__title mg-tooltip{margin-top:0}.mg-input__title mg-icon{display:inline-flex;vertical-align:text-bottom}.mg-input__input-container{min-height:var(--default-size);}.mg-input__input-container>strong{display:inline-block;margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);min-height:var(--font-size)}.mg-input__input-container mg-tooltip{display:inline-flex;width:var(--mg-icon-regular-size);height:var(--mg-icon-regular-size);margin-left:var(--mg-inputs-spacer)}.mg-input__input-container .mg-input__help-text,.mg-input__input-container .mg-input__error{text-align:start;font-size:1.2rem}.mg-input__input{display:flex;}.mg-input__input mg-tooltip{margin-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input__input.mg-input__input--has-error .mg-input__box{border-color:hsl(var(--color-danger))}.mg-input__input+.mg-input__help-text,.mg-input__input+.mg-input__error{margin-top:0.5rem}.mg-input__error{display:inline-block;margin-top:0.2rem;padding:0.3rem 0.8rem;border-radius:0.3rem;background:hsl(var(--mg-inputs-error-bg-color));color:hsl(var(--color-danger))}.mg-input__input mg-icon,.mg-input__error mg-icon{display:flex}.mg-input__box{padding:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2) var(--mg-inputs-spacer);height:var(--default-size);box-sizing:border-box;border-width:var(--mg-inputs-border-width);border-style:solid;border-color:var(--mg-inputs-color);border-radius:var(--mg-inputs-border-radius);background-color:hsl(var(--color-light));font-family:inherit;color:hsl(var(--color-dark));font-size:var(--font-size);text-align:var(--mg-inputs-text-align, left)}.mg-input__box::placeholder{color:var(--mg-inputs-color);font-style:italic}.mg-input__box:focus{box-shadow:0 0 0.6rem hsla(var(--mg-inputs-color-shadow-focus-hsl), 0.5)}.mg-input__box:disabled{opacity:0.3}.mg-input.mg-input--is-input-group-append{--mg-button-border-radius-top-left:0;--mg-button-border-radius-bottom-left:0;}.mg-input.mg-input--is-input-group-append .mg-input__box{margin-right:-0.1rem;border-top-right-radius:0%;border-bottom-right-radius:0%}.mg-input.mg-input--is-input-group-append .mg-input__box:focus-visible{outline-style:solid;outline-offset:-0.2rem;outline-width:0.2rem}.mg-input.mg-input--is-input-group-append.mg-input--readonly slot[name=append-input]{display:none}.mg-input.mg-input--label-on-top .mg-input__box{width:auto;max-width:100%}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]){--mg-button-border-radius-top-right:0;--mg-button-border-radius-bottom-right:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:not(:last-of-type)){--mg-button-border-right-width:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:last-of-type){--mg-button-border-radius-top-right:var(--mg-inputs-border-radius);--mg-button-border-radius-bottom-right:var(--mg-inputs-border-radius)}.mg-input.mg-input--is-append-input-slot-content:not(.mg-input--readonly) ::slotted([slot=append-input]){padding-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input.mg-input--width-full:not(.mg-input--label-on-top){justify-content:space-between}.mg-input.mg-input--width-full .mg-input__input-container{flex:auto;width:100%}.mg-input.mg-input--width-full .mg-input__input-container .mg-input__box{width:100%}.mg-input.mg-input--width-16 .mg-input__box{width:21rem}.mg-input.mg-input--width-4 .mg-input__box{width:7rem}.mg-input.mg-input--width-2 .mg-input__box{width:5rem}.sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}.mg-input .mg-input__box{text-align:var(--mg-inputs-text-align, right)}";
|
|
22
|
+
const mgInputNumericCss = ":host{display:block}.mg-input{display:flex;align-items:flex-start;min-height:var(--default-size);max-width:100%;margin-bottom:var(--mg-inputs-margin-bottom, 0);}.mg-input mg-input-title{flex-shrink:var(--mg-inputs-shrink, 1);width:var(--mg-inputs-title-width, auto);margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);margin-right:var(--mg-inputs-title-horizontal-space, var(--mg-inputs-spacer));text-align:right}.mg-input.mg-input--label-on-top{flex-direction:column}.mg-input.mg-input--label-on-top .mg-input__input-container{width:100%}.mg-input__title{display:flex;align-items:baseline;margin-bottom:0.3rem}.mg-input__title mg-input-title{flex-shrink:1;width:auto;margin-top:0;margin-right:var(--mg-inputs-spacer);text-align:left}.mg-input__title mg-tooltip{margin-top:0}.mg-input__title mg-icon{display:inline-flex;vertical-align:text-bottom}.mg-input__input-container{min-height:var(--default-size);}.mg-input__input-container>strong{display:inline-block;margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);min-height:var(--font-size)}.mg-input__input-container mg-tooltip{display:inline-flex;width:var(--mg-icon-regular-size);height:var(--mg-icon-regular-size);margin-left:var(--mg-inputs-spacer)}.mg-input__input-container .mg-input__help-text,.mg-input__input-container .mg-input__error{text-align:start;font-size:1.2rem}.mg-input__input{display:flex;}.mg-input__input mg-tooltip{margin-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input__input.mg-input__input--has-error .mg-input__box{border-color:hsl(var(--color-danger))}.mg-input__input+.mg-input__help-text,.mg-input__input+.mg-input__error{margin-top:0.5rem}.mg-input__error{display:inline-block;margin-top:0.2rem;padding:0.3rem 0.8rem;border-radius:0.3rem;background:hsl(var(--mg-inputs-error-bg-color));color:hsl(var(--color-danger))}.mg-input__input mg-icon,.mg-input__error mg-icon{display:flex}.mg-input__box{padding:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2) var(--mg-inputs-spacer);height:var(--default-size);box-sizing:border-box;border-width:var(--mg-inputs-border-width);border-style:solid;border-color:var(--mg-inputs-color);border-radius:var(--mg-inputs-border-radius);background-color:hsl(var(--color-light));font-family:inherit;color:hsl(var(--color-dark));font-size:var(--font-size);text-align:var(--mg-inputs-text-align, left)}.mg-input__box::placeholder{color:var(--mg-inputs-color);font-style:italic}.mg-input__box:focus{box-shadow:0 0 0.6rem hsla(var(--mg-inputs-color-shadow-focus-hsl), 0.5)}.mg-input__box:disabled{opacity:0.3}.mg-input.mg-input--is-input-group-append{--mg-button-border-radius-top-left:0;--mg-button-border-radius-bottom-left:0;}.mg-input.mg-input--is-input-group-append .mg-input__box{margin-right:-0.1rem;border-top-right-radius:0%;border-bottom-right-radius:0%}.mg-input.mg-input--is-input-group-append .mg-input__box:focus-visible{outline-style:solid;outline-offset:-0.2rem;outline-width:0.2rem}.mg-input.mg-input--is-input-group-append.mg-input--readonly slot[name=append-input]{display:none}.mg-input.mg-input--label-on-top .mg-input__box{width:auto;max-width:100%}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]){--mg-button-border-radius-top-right:0;--mg-button-border-radius-bottom-right:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:not(:last-of-type)){--mg-button-border-right-width:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:last-of-type){--mg-button-border-radius-top-right:var(--mg-inputs-border-radius);--mg-button-border-radius-bottom-right:var(--mg-inputs-border-radius)}.mg-input.mg-input--is-append-input-slot-content:not(.mg-input--readonly) ::slotted([slot=append-input]){padding-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input.mg-input--width-full:not(.mg-input--label-on-top){justify-content:space-between}.mg-input.mg-input--width-full.mg-input--label-on-top .mg-input__box{width:100%}.mg-input.mg-input--width-full .mg-input__input-container{flex:auto;width:100%}.mg-input.mg-input--width-full .mg-input__input-container .mg-input__box{max-width:100%}.mg-input:not(.mg-input--label-on-top) .mg-input__box{width:100%;max-width:calc(17.7rem + var(--mg-inputs-spacer) * 2);min-width:5rem}.mg-input.mg-input--width-16 .mg-input__input-container{width:100%}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__input{width:100%;max-width:21rem}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__with-character-left{width:100%}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__box{max-width:21rem;min-width:100%}.mg-input.mg-input--width-4 .mg-input__input-container .mg-input__box{max-width:7rem}.mg-input.mg-input--width-2 .mg-input__input-container .mg-input__box{max-width:5rem}.sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}.mg-input .mg-input__box{text-align:var(--mg-inputs-text-align, right)}";
|
|
23
23
|
|
|
24
24
|
const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
25
25
|
constructor() {
|
|
@@ -28,8 +28,8 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
28
28
|
this.__attachShadow();
|
|
29
29
|
this.valueChange = createEvent(this, "value-change", 7);
|
|
30
30
|
this.inputValid = createEvent(this, "input-valid", 7);
|
|
31
|
-
//
|
|
32
|
-
this.
|
|
31
|
+
// hasDisplayedError (triggered by blur event)
|
|
32
|
+
this.hasDisplayedError = false;
|
|
33
33
|
/**
|
|
34
34
|
* Input name
|
|
35
35
|
* If not set the value equals the identifier
|
|
@@ -85,8 +85,8 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
85
85
|
this.handleInput = () => {
|
|
86
86
|
// Check validity
|
|
87
87
|
this.checkValidity();
|
|
88
|
-
if (this.
|
|
89
|
-
this.
|
|
88
|
+
if (this.hasDisplayedError) {
|
|
89
|
+
this.setErrorMessage();
|
|
90
90
|
}
|
|
91
91
|
this.value = this.input.value;
|
|
92
92
|
};
|
|
@@ -114,40 +114,27 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
114
114
|
* @returns {void}
|
|
115
115
|
*/
|
|
116
116
|
this.checkValidity = () => {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
this.invalid = !validity;
|
|
122
|
-
//Send event
|
|
123
|
-
this.inputValid.emit(validity);
|
|
124
|
-
}
|
|
117
|
+
this.valid = this.readonly || this.disabled || this.getInputError() === null;
|
|
118
|
+
this.invalid = !this.valid;
|
|
119
|
+
// We need to send valid event even if it is the same value
|
|
120
|
+
this.inputValid.emit(this.valid);
|
|
125
121
|
};
|
|
126
122
|
/**
|
|
127
|
-
* Set error message
|
|
123
|
+
* Set input error message
|
|
128
124
|
*
|
|
129
125
|
* @returns {void}
|
|
130
126
|
*/
|
|
131
127
|
this.setErrorMessage = () => {
|
|
132
|
-
const inputError = this.getInputError();
|
|
133
|
-
if (inputError === InputError.REQUIRED) {
|
|
134
|
-
this.errorMessage = this.messages.errors[inputError];
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
this.errorMessage = this.messages.errors.numeric[inputError].replace('{min}', `${this.formatValue(this.min)}`).replace('{max}', `${this.formatValue(this.max)}`);
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
/**
|
|
141
|
-
* Check input errors
|
|
142
|
-
*
|
|
143
|
-
* @returns {void}
|
|
144
|
-
*/
|
|
145
|
-
this.checkError = () => {
|
|
146
128
|
// Set error message
|
|
147
129
|
this.errorMessage = undefined;
|
|
148
|
-
// Update class
|
|
149
130
|
if (!this.valid) {
|
|
150
|
-
this.
|
|
131
|
+
const inputError = this.getInputError();
|
|
132
|
+
if (inputError === InputError.REQUIRED) {
|
|
133
|
+
this.errorMessage = this.messages.errors[inputError];
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
this.errorMessage = this.messages.errors.numeric[inputError].replace('{min}', `${this.formatValue(this.min)}`).replace('{max}', `${this.formatValue(this.max)}`);
|
|
137
|
+
}
|
|
151
138
|
}
|
|
152
139
|
};
|
|
153
140
|
/**
|
|
@@ -157,7 +144,7 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
157
144
|
*/
|
|
158
145
|
this.getInputError = () => {
|
|
159
146
|
let inputError = null;
|
|
160
|
-
if (this.input === undefined)
|
|
147
|
+
if (this.input === undefined || this.input === null)
|
|
161
148
|
return inputError;
|
|
162
149
|
// required
|
|
163
150
|
if (!this.input.checkValidity() && this.input.validity.valueMissing) {
|
|
@@ -224,6 +211,16 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
224
211
|
this.readonlyValue = this.numericValue !== null ? this.formatValue(this.numericValue) : '';
|
|
225
212
|
}
|
|
226
213
|
}
|
|
214
|
+
handleValidityChange(newValue, _oldValue, prop) {
|
|
215
|
+
if (this.input !== undefined) {
|
|
216
|
+
this.input[prop] = newValue;
|
|
217
|
+
this.checkValidity();
|
|
218
|
+
if (this.hasDisplayedError) {
|
|
219
|
+
this.setErrorMessage();
|
|
220
|
+
this.hasDisplayedError = false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
227
224
|
validateType(newValue) {
|
|
228
225
|
if (!types.includes(newValue)) {
|
|
229
226
|
throw new Error(`<mg-input-numeric> prop "type" must be one of : ${types.join(', ')}`);
|
|
@@ -246,8 +243,8 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
246
243
|
*/
|
|
247
244
|
async displayError() {
|
|
248
245
|
this.checkValidity();
|
|
249
|
-
this.
|
|
250
|
-
this.
|
|
246
|
+
this.setErrorMessage();
|
|
247
|
+
this.hasDisplayedError = this.invalid;
|
|
251
248
|
}
|
|
252
249
|
/**
|
|
253
250
|
* Displayed value in input
|
|
@@ -290,11 +287,17 @@ const MgInputNumeric$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElem
|
|
|
290
287
|
* @returns {HTMLElement} HTML Element
|
|
291
288
|
*/
|
|
292
289
|
render() {
|
|
293
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: this.value, readonlyValue: this.readonlyValue, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "text", class: "mg-input__box", value: this.displayValue(), id: this.identifier, name: this.name, placeholder: this.placeholder, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, ref: el =>
|
|
290
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: this.value, readonlyValue: this.readonlyValue, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "text", class: "mg-input__box", value: this.displayValue(), id: this.identifier, name: this.name, placeholder: this.placeholder, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onFocus: this.handleFocus, onBlur: this.handleBlur, ref: el => {
|
|
291
|
+
if (el !== null)
|
|
292
|
+
this.input = el;
|
|
293
|
+
} }), h("slot", { name: "append-input" })));
|
|
294
294
|
}
|
|
295
295
|
get element() { return this; }
|
|
296
296
|
static get watchers() { return {
|
|
297
297
|
"value": ["validateValue"],
|
|
298
|
+
"required": ["handleValidityChange"],
|
|
299
|
+
"readonly": ["handleValidityChange"],
|
|
300
|
+
"disabled": ["handleValidityChange"],
|
|
298
301
|
"type": ["validateType"],
|
|
299
302
|
"integerLength": ["validateIntegerLength"],
|
|
300
303
|
"decimalLength": ["validateDecimalLength"]
|
|
@@ -6,7 +6,7 @@ import { d as defineCustomElement$4 } from './mg-icon2.js';
|
|
|
6
6
|
import { d as defineCustomElement$3 } from './mg-input-title2.js';
|
|
7
7
|
import { d as defineCustomElement$2 } from './mg-tooltip2.js';
|
|
8
8
|
|
|
9
|
-
const mgInputPasswordCss = ":host{display:block}.mg-input{display:flex;align-items:flex-start;min-height:var(--default-size);max-width:100%;margin-bottom:var(--mg-inputs-margin-bottom, 0);}.mg-input mg-input-title{flex-shrink:var(--mg-inputs-shrink, 1);width:var(--mg-inputs-title-width, auto);margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);margin-right:var(--mg-inputs-title-horizontal-space, var(--mg-inputs-spacer));text-align:right}.mg-input.mg-input--label-on-top{flex-direction:column}.mg-input.mg-input--label-on-top .mg-input__input-container{width:100%}.mg-input__title{display:flex;align-items:baseline;margin-bottom:0.3rem}.mg-input__title mg-input-title{flex-shrink:1;width:auto;margin-top:0;margin-right:var(--mg-inputs-spacer);text-align:left}.mg-input__title mg-tooltip{margin-top:0}.mg-input__title mg-icon{display:inline-flex;vertical-align:text-bottom}.mg-input__input-container{min-height:var(--default-size);}.mg-input__input-container>strong{display:inline-block;margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);min-height:var(--font-size)}.mg-input__input-container mg-tooltip{display:inline-flex;width:var(--mg-icon-regular-size);height:var(--mg-icon-regular-size);margin-left:var(--mg-inputs-spacer)}.mg-input__input-container .mg-input__help-text,.mg-input__input-container .mg-input__error{text-align:start;font-size:1.2rem}.mg-input__input{display:flex;}.mg-input__input mg-tooltip{margin-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input__input.mg-input__input--has-error .mg-input__box{border-color:hsl(var(--color-danger))}.mg-input__input+.mg-input__help-text,.mg-input__input+.mg-input__error{margin-top:0.5rem}.mg-input__error{display:inline-block;margin-top:0.2rem;padding:0.3rem 0.8rem;border-radius:0.3rem;background:hsl(var(--mg-inputs-error-bg-color));color:hsl(var(--color-danger))}.mg-input__input mg-icon,.mg-input__error mg-icon{display:flex}.mg-input__box{padding:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2) var(--mg-inputs-spacer);height:var(--default-size);box-sizing:border-box;border-width:var(--mg-inputs-border-width);border-style:solid;border-color:var(--mg-inputs-color);border-radius:var(--mg-inputs-border-radius);background-color:hsl(var(--color-light));font-family:inherit;color:hsl(var(--color-dark));font-size:var(--font-size);text-align:var(--mg-inputs-text-align, left)}.mg-input__box::placeholder{color:var(--mg-inputs-color);font-style:italic}.mg-input__box:focus{box-shadow:0 0 0.6rem hsla(var(--mg-inputs-color-shadow-focus-hsl), 0.5)}.mg-input__box:disabled{opacity:0.3}.mg-input.mg-input--is-input-group-append{--mg-button-border-radius-top-left:0;--mg-button-border-radius-bottom-left:0;}.mg-input.mg-input--is-input-group-append .mg-input__box{margin-right:-0.1rem;border-top-right-radius:0%;border-bottom-right-radius:0%}.mg-input.mg-input--is-input-group-append .mg-input__box:focus-visible{outline-style:solid;outline-offset:-0.2rem;outline-width:0.2rem}.mg-input.mg-input--is-input-group-append.mg-input--readonly slot[name=append-input]{display:none}.mg-input.mg-input--label-on-top .mg-input__box{width:auto;max-width:100%}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]){--mg-button-border-radius-top-right:0;--mg-button-border-radius-bottom-right:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:not(:last-of-type)){--mg-button-border-right-width:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:last-of-type){--mg-button-border-radius-top-right:var(--mg-inputs-border-radius);--mg-button-border-radius-bottom-right:var(--mg-inputs-border-radius)}.mg-input.mg-input--is-append-input-slot-content:not(.mg-input--readonly) ::slotted([slot=append-input]){padding-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input.mg-input--width-full:not(.mg-input--label-on-top){justify-content:space-between}.mg-input.mg-input--width-full .mg-input__input-container{flex:auto;width:100%}.mg-input.mg-input--width-full .mg-input__input-container .mg-input__box{width:100%}.mg-input.mg-input--width-16 .mg-input__box{width:21rem}.mg-input.mg-input--width-4 .mg-input__box{width:7rem}.mg-input.mg-input--width-2 .mg-input__box{width:5rem}.sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}";
|
|
9
|
+
const mgInputPasswordCss = ":host{display:block}.mg-input{display:flex;align-items:flex-start;min-height:var(--default-size);max-width:100%;margin-bottom:var(--mg-inputs-margin-bottom, 0);}.mg-input mg-input-title{flex-shrink:var(--mg-inputs-shrink, 1);width:var(--mg-inputs-title-width, auto);margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);margin-right:var(--mg-inputs-title-horizontal-space, var(--mg-inputs-spacer));text-align:right}.mg-input.mg-input--label-on-top{flex-direction:column}.mg-input.mg-input--label-on-top .mg-input__input-container{width:100%}.mg-input__title{display:flex;align-items:baseline;margin-bottom:0.3rem}.mg-input__title mg-input-title{flex-shrink:1;width:auto;margin-top:0;margin-right:var(--mg-inputs-spacer);text-align:left}.mg-input__title mg-tooltip{margin-top:0}.mg-input__title mg-icon{display:inline-flex;vertical-align:text-bottom}.mg-input__input-container{min-height:var(--default-size);}.mg-input__input-container>strong{display:inline-block;margin-top:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2);min-height:var(--font-size)}.mg-input__input-container mg-tooltip{display:inline-flex;width:var(--mg-icon-regular-size);height:var(--mg-icon-regular-size);margin-left:var(--mg-inputs-spacer)}.mg-input__input-container .mg-input__help-text,.mg-input__input-container .mg-input__error{text-align:start;font-size:1.2rem}.mg-input__input{display:flex;}.mg-input__input mg-tooltip{margin-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input__input.mg-input__input--has-error .mg-input__box{border-color:hsl(var(--color-danger))}.mg-input__input+.mg-input__help-text,.mg-input__input+.mg-input__error{margin-top:0.5rem}.mg-input__error{display:inline-block;margin-top:0.2rem;padding:0.3rem 0.8rem;border-radius:0.3rem;background:hsl(var(--mg-inputs-error-bg-color));color:hsl(var(--color-danger))}.mg-input__input mg-icon,.mg-input__error mg-icon{display:flex}.mg-input__box{padding:calc((var(--default-size) - var(--font-size) * var(--line-height)) / 2) var(--mg-inputs-spacer);height:var(--default-size);box-sizing:border-box;border-width:var(--mg-inputs-border-width);border-style:solid;border-color:var(--mg-inputs-color);border-radius:var(--mg-inputs-border-radius);background-color:hsl(var(--color-light));font-family:inherit;color:hsl(var(--color-dark));font-size:var(--font-size);text-align:var(--mg-inputs-text-align, left)}.mg-input__box::placeholder{color:var(--mg-inputs-color);font-style:italic}.mg-input__box:focus{box-shadow:0 0 0.6rem hsla(var(--mg-inputs-color-shadow-focus-hsl), 0.5)}.mg-input__box:disabled{opacity:0.3}.mg-input.mg-input--is-input-group-append{--mg-button-border-radius-top-left:0;--mg-button-border-radius-bottom-left:0;}.mg-input.mg-input--is-input-group-append .mg-input__box{margin-right:-0.1rem;border-top-right-radius:0%;border-bottom-right-radius:0%}.mg-input.mg-input--is-input-group-append .mg-input__box:focus-visible{outline-style:solid;outline-offset:-0.2rem;outline-width:0.2rem}.mg-input.mg-input--is-input-group-append.mg-input--readonly slot[name=append-input]{display:none}.mg-input.mg-input--label-on-top .mg-input__box{width:auto;max-width:100%}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]){--mg-button-border-radius-top-right:0;--mg-button-border-radius-bottom-right:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:not(:last-of-type)){--mg-button-border-right-width:0}.mg-input.mg-input--has-buttons-group-append ::slotted([slot=append-input]:last-of-type){--mg-button-border-radius-top-right:var(--mg-inputs-border-radius);--mg-button-border-radius-bottom-right:var(--mg-inputs-border-radius)}.mg-input.mg-input--is-append-input-slot-content:not(.mg-input--readonly) ::slotted([slot=append-input]){padding-top:calc((var(--default-size) - var(--mg-icon-regular-size)) / 2)}.mg-input.mg-input--width-full:not(.mg-input--label-on-top){justify-content:space-between}.mg-input.mg-input--width-full.mg-input--label-on-top .mg-input__box{width:100%}.mg-input.mg-input--width-full .mg-input__input-container{flex:auto;width:100%}.mg-input.mg-input--width-full .mg-input__input-container .mg-input__box{max-width:100%}.mg-input:not(.mg-input--label-on-top) .mg-input__box{width:100%;max-width:calc(17.7rem + var(--mg-inputs-spacer) * 2);min-width:5rem}.mg-input.mg-input--width-16 .mg-input__input-container{width:100%}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__input{width:100%;max-width:21rem}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__with-character-left{width:100%}.mg-input.mg-input--width-16 .mg-input__input-container .mg-input__box{max-width:21rem;min-width:100%}.mg-input.mg-input--width-4 .mg-input__input-container .mg-input__box{max-width:7rem}.mg-input.mg-input--width-2 .mg-input__input-container .mg-input__box{max-width:5rem}.sr-only{border:0 !important;clip:rect(1px, 1px, 1px, 1px) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}*:focus:not(:focus-visible){outline:none}";
|
|
10
10
|
|
|
11
11
|
const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
|
|
12
12
|
constructor() {
|
|
@@ -15,8 +15,8 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
15
15
|
this.__attachShadow();
|
|
16
16
|
this.valueChange = createEvent(this, "value-change", 7);
|
|
17
17
|
this.inputValid = createEvent(this, "input-valid", 7);
|
|
18
|
-
//
|
|
19
|
-
this.
|
|
18
|
+
// hasDisplayedError (triggered by blur event)
|
|
19
|
+
this.hasDisplayedError = false;
|
|
20
20
|
/**
|
|
21
21
|
* Input name
|
|
22
22
|
* If not set the value equals the identifier
|
|
@@ -51,8 +51,8 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
51
51
|
*/
|
|
52
52
|
this.handleInput = () => {
|
|
53
53
|
this.checkValidity();
|
|
54
|
-
if (this.
|
|
55
|
-
this.
|
|
54
|
+
if (this.hasDisplayedError) {
|
|
55
|
+
this.setErrorMessage();
|
|
56
56
|
}
|
|
57
57
|
this.value = this.input.value;
|
|
58
58
|
};
|
|
@@ -66,19 +66,16 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
66
66
|
* Check if input is valid
|
|
67
67
|
*/
|
|
68
68
|
this.checkValidity = () => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
//Send event
|
|
75
|
-
this.inputValid.emit(validity);
|
|
76
|
-
}
|
|
69
|
+
var _a;
|
|
70
|
+
this.valid = this.readonly || this.disabled || (((_a = this.input) === null || _a === void 0 ? void 0 : _a.checkValidity) !== undefined ? this.input.checkValidity() : true);
|
|
71
|
+
this.invalid = !this.valid;
|
|
72
|
+
// We need to send valid event even if it is the same value
|
|
73
|
+
this.inputValid.emit(this.valid);
|
|
77
74
|
};
|
|
78
75
|
/**
|
|
79
|
-
*
|
|
76
|
+
* Set input error message
|
|
80
77
|
*/
|
|
81
|
-
this.
|
|
78
|
+
this.setErrorMessage = () => {
|
|
82
79
|
// Set error message
|
|
83
80
|
this.errorMessage = undefined;
|
|
84
81
|
// required
|
|
@@ -90,6 +87,16 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
90
87
|
handleValue(newValue) {
|
|
91
88
|
this.valueChange.emit(newValue);
|
|
92
89
|
}
|
|
90
|
+
handleValidityChange(newValue, _oldValue, prop) {
|
|
91
|
+
if (this.input !== undefined) {
|
|
92
|
+
this.input[prop] = newValue;
|
|
93
|
+
this.checkValidity();
|
|
94
|
+
if (this.hasDisplayedError) {
|
|
95
|
+
this.setErrorMessage();
|
|
96
|
+
this.hasDisplayedError = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
93
100
|
/**
|
|
94
101
|
* Public method to display errors
|
|
95
102
|
*
|
|
@@ -97,8 +104,8 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
97
104
|
*/
|
|
98
105
|
async displayError() {
|
|
99
106
|
this.checkValidity();
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
107
|
+
this.setErrorMessage();
|
|
108
|
+
this.hasDisplayedError = this.invalid;
|
|
102
109
|
}
|
|
103
110
|
/*************
|
|
104
111
|
* Lifecycle *
|
|
@@ -124,11 +131,17 @@ const MgInputPassword$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLEle
|
|
|
124
131
|
* @returns {HTMLElement} HTML Element
|
|
125
132
|
*/
|
|
126
133
|
render() {
|
|
127
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: this.value, readonlyValue: this.value !== undefined ? '•'.repeat(this.value.length) : undefined, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "password", class: "mg-input__box", value: this.value, id: this.identifier, name: this.name, placeholder: this.placeholder, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el =>
|
|
134
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, readonly: this.readonly, mgWidth: this.mgWidth, disabled: this.disabled, value: this.value, readonlyValue: this.value !== undefined ? '•'.repeat(this.value.length) : undefined, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: false }, h("input", { type: "password", class: "mg-input__box", value: this.value, id: this.identifier, name: this.name, placeholder: this.placeholder, title: this.placeholder, disabled: this.disabled, required: this.required, onInput: this.handleInput, onBlur: this.handleBlur, ref: el => {
|
|
135
|
+
if (el !== null)
|
|
136
|
+
this.input = el;
|
|
137
|
+
} })));
|
|
128
138
|
}
|
|
129
139
|
get element() { return this; }
|
|
130
140
|
static get watchers() { return {
|
|
131
|
-
"value": ["handleValue"]
|
|
141
|
+
"value": ["handleValue"],
|
|
142
|
+
"required": ["handleValidityChange"],
|
|
143
|
+
"readonly": ["handleValidityChange"],
|
|
144
|
+
"disabled": ["handleValidityChange"]
|
|
132
145
|
}; }
|
|
133
146
|
static get style() { return mgInputPasswordCss; }
|
|
134
147
|
}, [1, "mg-input-password", {
|
|
@@ -27,6 +27,8 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
27
27
|
************/
|
|
28
28
|
// HTML selector
|
|
29
29
|
this.inputs = [];
|
|
30
|
+
// hasDisplayedError (triggered by blur event)
|
|
31
|
+
this.hasDisplayedError = false;
|
|
30
32
|
/**
|
|
31
33
|
* Input name
|
|
32
34
|
* If not set the value equals the identifier
|
|
@@ -77,7 +79,7 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
77
79
|
*/
|
|
78
80
|
this.handleBlur = () => {
|
|
79
81
|
this.checkValidity();
|
|
80
|
-
this.
|
|
82
|
+
this.setErrorMessage();
|
|
81
83
|
};
|
|
82
84
|
/**
|
|
83
85
|
* Check if input is valid
|
|
@@ -85,21 +87,17 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
85
87
|
* @returns {void}
|
|
86
88
|
*/
|
|
87
89
|
this.checkValidity = () => {
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
this.invalid = !validity;
|
|
93
|
-
//Send event
|
|
94
|
-
this.inputValid.emit(validity);
|
|
95
|
-
}
|
|
90
|
+
this.valid = this.readonly || this.disabled || this.getInvalidElement() === undefined;
|
|
91
|
+
this.invalid = !this.valid;
|
|
92
|
+
// We need to send valid event even if it is the same value
|
|
93
|
+
this.inputValid.emit(this.valid);
|
|
96
94
|
};
|
|
97
95
|
/**
|
|
98
|
-
*
|
|
96
|
+
* Set input error message
|
|
99
97
|
*
|
|
100
98
|
* @returns {void}
|
|
101
99
|
*/
|
|
102
|
-
this.
|
|
100
|
+
this.setErrorMessage = () => {
|
|
103
101
|
const invalidElement = this.getInvalidElement();
|
|
104
102
|
// Set error message
|
|
105
103
|
this.errorMessage = undefined;
|
|
@@ -112,7 +110,7 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
112
110
|
*
|
|
113
111
|
* @returns {HTMLInputElement} element
|
|
114
112
|
*/
|
|
115
|
-
this.getInvalidElement = () => this.inputs.find((
|
|
113
|
+
this.getInvalidElement = () => this.inputs.find((input) => !input.disabled && !input.readOnly && !input.checkValidity());
|
|
116
114
|
}
|
|
117
115
|
handleValue(newValue) {
|
|
118
116
|
this.valueChange.emit(newValue);
|
|
@@ -134,6 +132,16 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
134
132
|
throw new Error('<mg-input-radio> prop "items" is required and all items must be the same type, string or RadioOption.');
|
|
135
133
|
}
|
|
136
134
|
}
|
|
135
|
+
handleValidityChange(newValue, _oldValue, prop) {
|
|
136
|
+
this.inputs.forEach(input => {
|
|
137
|
+
input[prop] = newValue;
|
|
138
|
+
});
|
|
139
|
+
this.checkValidity();
|
|
140
|
+
if (this.hasDisplayedError) {
|
|
141
|
+
this.setErrorMessage();
|
|
142
|
+
this.hasDisplayedError = false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
137
145
|
/**
|
|
138
146
|
* Public method to display errors
|
|
139
147
|
*
|
|
@@ -141,7 +149,8 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
141
149
|
*/
|
|
142
150
|
async displayError() {
|
|
143
151
|
this.checkValidity();
|
|
144
|
-
this.
|
|
152
|
+
this.setErrorMessage();
|
|
153
|
+
this.hasDisplayedError = this.invalid;
|
|
145
154
|
}
|
|
146
155
|
/*************
|
|
147
156
|
* Lifecycle *
|
|
@@ -169,12 +178,18 @@ const MgInputRadio$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElemen
|
|
|
169
178
|
* @returns {HTMLElement} HTML Element
|
|
170
179
|
*/
|
|
171
180
|
render() {
|
|
172
|
-
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, disabled: this.disabled, readonly: this.readonly, mgWidth: undefined, value: this.value, readonlyValue: this.value, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: true }, h("ul", { class: { 'mg-input__input-group-container': true, 'mg-input__input-group-container--vertical': this.inputVerticalList } }, this.options.map((input, index) => (h("li", { class: { 'mg-input__input-group': true, 'mg-input__input-group--disabled': this.disabled || input.disabled } }, h("input", { type: "radio", id: this.identifier + '_' + index, name: this.identifier, value: index, checked: JSON.stringify(this.value) === JSON.stringify(this.options[index].value), disabled: this.disabled || input.disabled, required: this.required, onBlur: this.handleBlur, onInput: this.handleInput, ref: el =>
|
|
181
|
+
return (h(MgInput, { identifier: this.identifier, classList: this.classList, ariaDescribedbyIDs: [], label: this.label, labelOnTop: this.labelOnTop, labelHide: this.labelHide, required: this.required, disabled: this.disabled, readonly: this.readonly, mgWidth: undefined, value: this.value, readonlyValue: this.value, tooltip: this.tooltip, helpText: this.helpText, errorMessage: this.errorMessage, isFieldset: true }, h("ul", { class: { 'mg-input__input-group-container': true, 'mg-input__input-group-container--vertical': this.inputVerticalList } }, this.options.map((input, index) => (h("li", { class: { 'mg-input__input-group': true, 'mg-input__input-group--disabled': this.disabled || input.disabled } }, h("input", { type: "radio", id: this.identifier + '_' + index, name: this.identifier, value: index, checked: JSON.stringify(this.value) === JSON.stringify(this.options[index].value), disabled: this.disabled || input.disabled, required: this.required, onBlur: this.handleBlur, onInput: this.handleInput, ref: el => {
|
|
182
|
+
if (el !== null)
|
|
183
|
+
this.inputs[index] = el;
|
|
184
|
+
} }), h("label", { htmlFor: this.identifier + '_' + index }, input.title)))))));
|
|
173
185
|
}
|
|
174
186
|
get element() { return this; }
|
|
175
187
|
static get watchers() { return {
|
|
176
188
|
"value": ["handleValue"],
|
|
177
|
-
"items": ["validateItems"]
|
|
189
|
+
"items": ["validateItems"],
|
|
190
|
+
"required": ["handleValidityChange"],
|
|
191
|
+
"readonly": ["handleValidityChange"],
|
|
192
|
+
"disabled": ["handleValidityChange"]
|
|
178
193
|
}; }
|
|
179
194
|
static get style() { return mgInputRadioCss; }
|
|
180
195
|
}, [1, "mg-input-radio", {
|