@govtechsg/sgds-web-component 3.30.1-rc.4 → 3.30.1-rc.6
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/components/Datepicker/index.umd.min.js +3 -3
- package/components/Datepicker/index.umd.min.js.map +1 -1
- package/components/Datepicker/sgds-datepicker.d.ts +1 -1
- package/components/Datepicker/sgds-datepicker.js +5 -1
- package/components/Datepicker/sgds-datepicker.js.map +1 -1
- package/components/Input/index.umd.min.js +2 -2
- package/components/Input/index.umd.min.js.map +1 -1
- package/components/Input/sgds-input.d.ts +1 -0
- package/components/Input/sgds-input.js +7 -0
- package/components/Input/sgds-input.js.map +1 -1
- package/components/QuantityToggle/index.umd.min.js +230 -230
- package/components/QuantityToggle/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.d.ts +1 -0
- package/components/QuantityToggle/sgds-quantity-toggle.js +9 -0
- package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/components/Radio/index.umd.min.js +1 -1
- package/components/Radio/index.umd.min.js.map +1 -1
- package/components/Radio/sgds-radio-group.d.ts +1 -1
- package/components/Radio/sgds-radio-group.js +5 -1
- package/components/Radio/sgds-radio-group.js.map +1 -1
- package/components/Textarea/index.umd.min.js +1 -1
- package/components/Textarea/index.umd.min.js.map +1 -1
- package/components/Textarea/sgds-textarea.d.ts +1 -1
- package/components/Textarea/sgds-textarea.js +6 -2
- package/components/Textarea/sgds-textarea.js.map +1 -1
- package/components/index.umd.min.js +7 -7
- package/components/index.umd.min.js.map +1 -1
- package/custom-elements.json +11 -1
- package/index.umd.min.js +7 -7
- package/index.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/react/components/Datepicker/sgds-datepicker.cjs.js +5 -1
- package/react/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
- package/react/components/Datepicker/sgds-datepicker.js +5 -1
- package/react/components/Datepicker/sgds-datepicker.js.map +1 -1
- package/react/components/Input/sgds-input.cjs.js +7 -0
- package/react/components/Input/sgds-input.cjs.js.map +1 -1
- package/react/components/Input/sgds-input.js +7 -0
- package/react/components/Input/sgds-input.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +9 -0
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.js +9 -0
- package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.cjs.js +5 -1
- package/react/components/Radio/sgds-radio-group.cjs.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.js +5 -1
- package/react/components/Radio/sgds-radio-group.js.map +1 -1
- package/react/components/Textarea/sgds-textarea.cjs.js +6 -2
- package/react/components/Textarea/sgds-textarea.cjs.js.map +1 -1
- package/react/components/Textarea/sgds-textarea.js +6 -2
- package/react/components/Textarea/sgds-textarea.js.map +1 -1
- package/react/utils/ssr-nonce-patch.js +1 -2
|
@@ -61,6 +61,7 @@ export declare class SgdsQuantityToggle extends SgdsQuantityToggle_base implemen
|
|
|
61
61
|
* Returns the validation message based on the ValidityState
|
|
62
62
|
*/
|
|
63
63
|
get validationMessage(): string;
|
|
64
|
+
_handleValuePropertyChange(): Promise<void>;
|
|
64
65
|
private _handleValueChange;
|
|
65
66
|
private _mixinResetFormControl;
|
|
66
67
|
private _handleKeyDown;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.150.0/helpers/esm/decorate.js";
|
|
2
|
+
import { watch } from "../../utils/watch.js";
|
|
2
3
|
import css_248z from "../../styles/form-text-control.js";
|
|
3
4
|
import { defaultValue } from "../../utils/defaultvalue.js";
|
|
4
5
|
import { SgdsFormValidatorMixin } from "../../utils/validatorMixin.js";
|
|
@@ -74,6 +75,13 @@ var SgdsQuantityToggle = class extends SgdsFormValidatorMixin(FormControlElement
|
|
|
74
75
|
get validationMessage() {
|
|
75
76
|
return this._mixinGetValidationMessage();
|
|
76
77
|
}
|
|
78
|
+
async _handleValuePropertyChange() {
|
|
79
|
+
this._mixinSetFormValue();
|
|
80
|
+
await this.updateComplete;
|
|
81
|
+
if (this._mixinShouldSkipSgdsValidation()) return;
|
|
82
|
+
const sgdsInput = await this._sgdsInput;
|
|
83
|
+
this._mixinValidate(sgdsInput.input);
|
|
84
|
+
}
|
|
77
85
|
async _handleValueChange(e, eventName) {
|
|
78
86
|
e.stopPropagation();
|
|
79
87
|
const sgdsInput = await this._sgdsInput;
|
|
@@ -261,6 +269,7 @@ __decorate([property({
|
|
|
261
269
|
})], SgdsQuantityToggle.prototype, "readonly", void 0);
|
|
262
270
|
__decorate([defaultValue()], SgdsQuantityToggle.prototype, "defaultValue", void 0);
|
|
263
271
|
__decorate([queryAsync("sgds-input")], SgdsQuantityToggle.prototype, "_sgdsInput", void 0);
|
|
272
|
+
__decorate([watch("value", { waitUntilFirstUpdate: true })], SgdsQuantityToggle.prototype, "_handleValuePropertyChange", null);
|
|
264
273
|
//#endregion
|
|
265
274
|
export { SgdsQuantityToggle, SgdsQuantityToggle as default };
|
|
266
275
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sgds-quantity-toggle.js","names":["formPlaceholderStyles","svgStyles","formControlStyle","quantityToggleStyle"],"sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query, queryAsync } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport formPlaceholderStyles from \"../../styles/form-placeholder.css\";\nimport svgStyles from \"../../styles/svg.css\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport SgdsInput from \"../Input/sgds-input\";\nimport quantityToggleStyle from \"./quantity-toggle.css\";\nimport formControlStyle from \"../../styles/form-text-control.css\";\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-invalid - Emitted when the control's invalid state is set to true.\n * @event sgds-valid - Emitted when the control's invalid state is set to false.\n *\n */\nexport class SgdsQuantityToggle extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [\n ...FormControlElement.styles,\n formPlaceholderStyles,\n svgStyles,\n formControlStyle,\n quantityToggleStyle\n ];\n\n /** @internal */\n static dependencies = {\n \"sgds-input\": SgdsInput,\n \"sgds-icon-button\": SgdsIconButton\n };\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='increase by']\") private plusBtn: HTMLButtonElement;\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n /** The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Controls the incremental / decremental value of the input */\n @property({ type: Number }) step = 1;\n\n /** The input's minimum value. Only applies number input types. */\n @property({ type: Number }) min: number;\n\n /** The input's maximum value. Only applies number input types. */\n @property({ type: Number }) max: number;\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: String, reflect: true }) hasFeedback: \"style\" | \"text\" | \"both\";\n\n /**Feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback: string;\n /** Disables native and sgds validation for the quantity toggle. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n /** Sets the quantity toggle as readonly */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n @queryAsync(\"sgds-input\") private _sgdsInput: Promise<SgdsInput>;\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n private async _handleValueChange(e: Event, eventName: \"sgds-change\" | \"sgds-input\") {\n e.stopPropagation();\n const sgdsInput = await this._sgdsInput;\n if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === \"\") {\n sgdsInput.value = \"0\";\n }\n this.value = parseInt(sgdsInput.value);\n this._mixinSetFormValue();\n this.emit(eventName);\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (eventName === \"sgds-input\") {\n this.invalid = false;\n }\n this._mixinValidate(sgdsInput.input);\n if (eventName === \"sgds-change\") {\n this.invalid = !this._mixinReportValidity();\n }\n }\n\n private async _mixinResetFormControl() {\n const sgdsInput = await this._sgdsInput;\n this.value = this.defaultValue;\n sgdsInput.input.value = this.value.toString();\n this._mixinResetValidity(sgdsInput.input);\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString()),\n \"Tab\"\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n private _handleInvalid() {\n this.invalid = true;\n }\n private _handleValid() {\n this.invalid = false;\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n private async _onPlus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(sgdsInput.value) + parseInt(sgdsInput.step.toString());\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n private async _onMinus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(sgdsInput.value) - parseInt(sgdsInput.step.toString());\n }\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n\n /**\n * Validates the input on button clicks of the toggle.\n * Input is validated every time the button is click to update the invalid state\n * to indiciate the validity of quantity toggle\n * @param input native HTMLInputElement\n */\n private async _validateOnClick(input: HTMLInputElement) {\n const sgdsInput = await this._sgdsInput;\n await sgdsInput.updateComplete;\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(input);\n this.invalid = !this._mixinReportValidity();\n }\n\n protected _renderFeedback() {\n const wantFeedbackText = this.hasFeedback === \"both\" || this.hasFeedback === \"text\";\n return this.invalid && wantFeedbackText\n ? html` <div class=\"invalid-feedback-container\">\n <slot name=\"invalidIcon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM10 6.25C9.49805 6.25 9.10584 6.68339 9.15578 7.18285L9.48461 10.4711C9.51109 10.7359 9.7339 10.9375 10 10.9375C10.2661 10.9375 10.4889 10.7359 10.5154 10.4711L10.8442 7.18285C10.8942 6.68339 10.5019 6.25 10 6.25ZM10.0014 11.875C9.48368 11.875 9.06394 12.2947 9.06394 12.8125C9.06394 13.3303 9.48368 13.75 10.0014 13.75C10.5192 13.75 10.9389 13.3303 10.9389 12.8125C10.9389 12.2947 10.5192 11.875 10.0014 11.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n </slot>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.validationMessage}\n </div>\n </div>`\n : html`${this._renderHintText()}`;\n }\n\n protected _renderLabel() {\n const labelTemplate = html`\n <label\n for=${this._controlId}\n id=${this._labelId}\n class=${classMap({\n \"form-label\": true,\n disabled: this.disabled\n })}\n >${this.label}</label\n >\n `;\n return this.label && labelTemplate;\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n render() {\n return html`\n <div class=\"form-control-container m-width-160\">\n ${this._renderLabel()}\n <div class=\"input-group\">\n <sgds-icon-button\n class=\"minus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`decrease by ${this.step}`}\n ?disabled=${this.disabled ||\n (this.min !== undefined ? this.value <= this.min : this.value < 1) ||\n this.readonly}\n @click=${this._onMinus}\n name=\"dash\"\n >\n </sgds-icon-button>\n <sgds-input\n type=\"number\"\n class=\"quantity-toggle\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value)}\n @sgds-change=${(e: Event) => this._handleValueChange(e, \"sgds-change\")}\n @sgds-input=${(e: Event) => this._handleValueChange(e, \"sgds-input\")}\n @sgds-invalid=${this._handleInvalid}\n @sgds-valid=${this._handleValid}\n @keydown=${this._handleKeyDown}\n ?disabled=${this.disabled}\n ?noValidate=${this._mixinShouldSkipSgdsValidation()}\n id=${this._controlId}\n ?invalid=${this.invalid}\n hasFeedback=${ifDefined(this.hasFeedback !== \"text\" ? \"style\" : undefined)}\n ></sgds-input>\n <sgds-icon-button\n class=\"plus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`increase by ${this.step}`}\n @click=${this._onPlus}\n ?disabled=${this.disabled ||\n (this.max !== undefined && this.max && this.value >= this.max) ||\n this.readonly}\n name=\"plus\"\n >\n </sgds-icon-button>\n </div>\n <div id=\"${this._controlId}-announcer\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n ${this._renderFeedback()}\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sgds-quantity-toggle.js","names":["formPlaceholderStyles","svgStyles","formControlStyle","quantityToggleStyle"],"sources":["../../../src/components/QuantityToggle/sgds-quantity-toggle.ts"],"sourcesContent":["import { property, query, queryAsync } from \"lit/decorators.js\";\nimport { classMap } from \"lit/directives/class-map.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { live } from \"lit/directives/live.js\";\nimport { html } from \"lit/static-html.js\";\nimport FormControlElement from \"../../base/form-control-element\";\nimport formPlaceholderStyles from \"../../styles/form-placeholder.css\";\nimport svgStyles from \"../../styles/svg.css\";\nimport { defaultValue } from \"../../utils/defaultvalue\";\nimport { SgdsFormControl } from \"../../utils/formSubmitController\";\nimport { SgdsFormValidatorMixin } from \"../../utils/validatorMixin\";\nimport { watch } from \"../../utils/watch\";\nimport SgdsIconButton from \"../IconButton/sgds-icon-button\";\nimport SgdsInput from \"../Input/sgds-input\";\nimport quantityToggleStyle from \"./quantity-toggle.css\";\nimport formControlStyle from \"../../styles/form-text-control.css\";\n/**\n * @summary The quantity toggle component is used to increase or decrease an incremental venue, best used when the user needs to enter or adjust the quantity of a selected item.\n *\n * @slot invalidIcon - The slot for invalid icon\n *\n * @event sgds-change - Emitted when an alteration to the control's value is committed by the user.\n * @event sgds-input - Emitted when the control receives input and its value changes.\n * @event sgds-invalid - Emitted when the control's invalid state is set to true.\n * @event sgds-valid - Emitted when the control's invalid state is set to false.\n *\n */\nexport class SgdsQuantityToggle extends SgdsFormValidatorMixin(FormControlElement) implements SgdsFormControl {\n static styles = [\n ...FormControlElement.styles,\n formPlaceholderStyles,\n svgStyles,\n formControlStyle,\n quantityToggleStyle\n ];\n\n /** @internal */\n static dependencies = {\n \"sgds-input\": SgdsInput,\n \"sgds-icon-button\": SgdsIconButton\n };\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='increase by']\") private plusBtn: HTMLButtonElement;\n /** @internal */\n @query(\"sgds-icon-button[ariaLabel^='decrease by']\") private minusBtn: HTMLButtonElement;\n\n /** The input's value. Set to 0 by default */\n @property({ type: Number, reflect: true }) value = 0;\n\n /** Controls the incremental / decremental value of the input */\n @property({ type: Number }) step = 1;\n\n /** The input's minimum value. Only applies number input types. */\n @property({ type: Number }) min: number;\n\n /** The input's maximum value. Only applies number input types. */\n @property({ type: Number }) max: number;\n /** Allows invalidFeedback, invalid and valid styles to be visible with the input */\n @property({ type: String, reflect: true }) hasFeedback: \"style\" | \"text\" | \"both\";\n\n /**Feedback text for error state when validated */\n @property({ type: String, reflect: true }) invalidFeedback: string;\n /** Disables native and sgds validation for the quantity toggle. */\n @property({ type: Boolean, reflect: true }) noValidate = false;\n /** Sets the quantity toggle as readonly */\n @property({ type: Boolean, reflect: true }) readonly = false;\n\n /** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */\n @defaultValue()\n defaultValue = 0;\n\n @queryAsync(\"sgds-input\") private _sgdsInput: Promise<SgdsInput>;\n\n /**\n * Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state\n * Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput\n */\n public reportValidity(): boolean {\n return this._mixinReportValidity();\n }\n /**\n * Checks for validity without any native error popup message\n */\n public checkValidity(): boolean {\n return this._mixinCheckValidity();\n }\n\n /**\n * Returns the ValidityState object\n */\n public get validity(): ValidityState {\n return this._mixinGetValidity();\n }\n /**\n * Returns the validation message based on the ValidityState\n */\n public get validationMessage() {\n return this._mixinGetValidationMessage();\n }\n\n @watch(\"value\", { waitUntilFirstUpdate: true })\n async _handleValuePropertyChange() {\n this._mixinSetFormValue();\n await this.updateComplete;\n if (this._mixinShouldSkipSgdsValidation()) return;\n const sgdsInput = await this._sgdsInput;\n this._mixinValidate(sgdsInput.input);\n }\n\n private async _handleValueChange(e: Event, eventName: \"sgds-change\" | \"sgds-input\") {\n e.stopPropagation();\n const sgdsInput = await this._sgdsInput;\n if (parseInt(sgdsInput.value) < this.step || sgdsInput.value === \"\") {\n sgdsInput.value = \"0\";\n }\n this.value = parseInt(sgdsInput.value);\n this._mixinSetFormValue();\n this.emit(eventName);\n if (this._mixinShouldSkipSgdsValidation()) return;\n if (eventName === \"sgds-input\") {\n this.invalid = false;\n }\n this._mixinValidate(sgdsInput.input);\n if (eventName === \"sgds-change\") {\n this.invalid = !this._mixinReportValidity();\n }\n }\n\n private async _mixinResetFormControl() {\n const sgdsInput = await this._sgdsInput;\n this.value = this.defaultValue;\n sgdsInput.input.value = this.value.toString();\n this._mixinResetValidity(sgdsInput.input);\n }\n\n private _handleKeyDown(event: KeyboardEvent) {\n const allowedKeys = [\n \"Backspace\",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n ...Array.from(Array(10).keys()).map(key => key.toString()),\n \"Tab\"\n ];\n\n // Allow keydown event only if the pressed key is in the allowedKeys array\n if (!allowedKeys.includes(event.key)) {\n event.preventDefault();\n }\n }\n\n private _handleInvalid() {\n this.invalid = true;\n }\n private _handleValid() {\n this.invalid = false;\n }\n\n /** Simulates a click on the plus button */\n public plus() {\n this.plusBtn.click();\n }\n\n /** Simulates a click on the minus button */\n public minus() {\n this.minusBtn.click();\n }\n\n private async _onPlus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n this.value = parseInt(sgdsInput.value) + parseInt(sgdsInput.step.toString());\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n private async _onMinus(event: MouseEvent) {\n const sgdsInput = await this._sgdsInput;\n event.preventDefault();\n event.stopPropagation();\n if (this.value < this.step) {\n this.value = 0;\n } else {\n this.value = parseInt(sgdsInput.value) - parseInt(sgdsInput.step.toString());\n }\n this._validateOnClick(sgdsInput.input);\n this.emit(\"sgds-change\");\n }\n\n /**\n * Validates the input on button clicks of the toggle.\n * Input is validated every time the button is click to update the invalid state\n * to indiciate the validity of quantity toggle\n * @param input native HTMLInputElement\n */\n private async _validateOnClick(input: HTMLInputElement) {\n const sgdsInput = await this._sgdsInput;\n await sgdsInput.updateComplete;\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this._mixinValidate(input);\n this.invalid = !this._mixinReportValidity();\n }\n\n protected _renderFeedback() {\n const wantFeedbackText = this.hasFeedback === \"both\" || this.hasFeedback === \"text\";\n return this.invalid && wantFeedbackText\n ? html` <div class=\"invalid-feedback-container\">\n <slot name=\"invalidIcon\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M17.5 10C17.5 14.1421 14.1421 17.5 10 17.5C5.85786 17.5 2.5 14.1421 2.5 10C2.5 5.85786 5.85786 2.5 10 2.5C14.1421 2.5 17.5 5.85786 17.5 10ZM10 6.25C9.49805 6.25 9.10584 6.68339 9.15578 7.18285L9.48461 10.4711C9.51109 10.7359 9.7339 10.9375 10 10.9375C10.2661 10.9375 10.4889 10.7359 10.5154 10.4711L10.8442 7.18285C10.8942 6.68339 10.5019 6.25 10 6.25ZM10.0014 11.875C9.48368 11.875 9.06394 12.2947 9.06394 12.8125C9.06394 13.3303 9.48368 13.75 10.0014 13.75C10.5192 13.75 10.9389 13.3303 10.9389 12.8125C10.9389 12.2947 10.5192 11.875 10.0014 11.875Z\"\n fill=\"currentColor\"\n />\n </svg>\n </slot>\n <div id=\"${this._controlId}-invalid\" class=\"invalid-feedback\">\n ${this.invalidFeedback ? this.invalidFeedback : this.validationMessage}\n </div>\n </div>`\n : html`${this._renderHintText()}`;\n }\n\n protected _renderLabel() {\n const labelTemplate = html`\n <label\n for=${this._controlId}\n id=${this._labelId}\n class=${classMap({\n \"form-label\": true,\n disabled: this.disabled\n })}\n >${this.label}</label\n >\n `;\n return this.label && labelTemplate;\n }\n\n protected _renderHintText() {\n const hintTextTemplate = html` <div id=\"${this._controlId}Help\" class=\"form-text\">${this.hintText}</div> `;\n return this.hintText && hintTextTemplate;\n }\n\n render() {\n return html`\n <div class=\"form-control-container m-width-160\">\n ${this._renderLabel()}\n <div class=\"input-group\">\n <sgds-icon-button\n class=\"minus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`decrease by ${this.step}`}\n ?disabled=${this.disabled ||\n (this.min !== undefined ? this.value <= this.min : this.value < 1) ||\n this.readonly}\n @click=${this._onMinus}\n name=\"dash\"\n >\n </sgds-icon-button>\n <sgds-input\n type=\"number\"\n class=\"quantity-toggle\"\n name=${ifDefined(this.name)}\n step=${ifDefined(this.step)}\n min=${ifDefined(this.min)}\n max=${ifDefined(this.max)}\n .value=${live(this.value)}\n @sgds-change=${(e: Event) => this._handleValueChange(e, \"sgds-change\")}\n @sgds-input=${(e: Event) => this._handleValueChange(e, \"sgds-input\")}\n @sgds-invalid=${this._handleInvalid}\n @sgds-valid=${this._handleValid}\n @keydown=${this._handleKeyDown}\n ?disabled=${this.disabled}\n ?noValidate=${this._mixinShouldSkipSgdsValidation()}\n id=${this._controlId}\n ?invalid=${this.invalid}\n hasFeedback=${ifDefined(this.hasFeedback !== \"text\" ? \"style\" : undefined)}\n ></sgds-input>\n <sgds-icon-button\n class=\"plus-btn\"\n variant=\"outline\"\n tone=\"neutral\"\n size=\"md\"\n ariaLabel=${`increase by ${this.step}`}\n @click=${this._onPlus}\n ?disabled=${this.disabled ||\n (this.max !== undefined && this.max && this.value >= this.max) ||\n this.readonly}\n name=\"plus\"\n >\n </sgds-icon-button>\n </div>\n <div id=\"${this._controlId}-announcer\" aria-live=\"assertive\" class=\"visually-hidden\">${this.value}</div>\n ${this._renderFeedback()}\n </div>\n `;\n }\n}\n\nexport default SgdsQuantityToggle;\n"],"mappings":"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"}
|
|
@@ -100,7 +100,7 @@ let W={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},je=
|
|
|
100
100
|
* Copyright 2020 Google LLC
|
|
101
101
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
102
102
|
*/
|
|
103
|
-
if(super(e),e.type!==W.PROPERTY&&e.type!==W.ATTRIBUTE&&e.type!==W.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Re(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===M||t===N)return t;let n=e.element,r=e.name;if(e.type===W.PROPERTY){if(t===n[r])return M}else if(e.type===W.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return M}else if(e.type===W.ATTRIBUTE&&n.getAttribute(r)===t+``)return M;return Be(e),t}});var He=o`.invalid-feedback-container{display:flex;gap:var(--sgds-form-gap-sm)}.invalid-feedback,.invalid-feedback-container{color:var(--sgds-form-danger-color-default);line-height:var(--sgds-line-height-20)}.invalid-feedback{font-size:var(--sgds-font-size-label-sm);font-weight:var(--sgds-font-weight-regular)}.valid-icon{color:var(--sgds-form-success-color-default)}`,Ue=o`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-label-sm);line-height:var(--sgds-line-height-2-xs)}.form-text.disabled{opacity:var(--sgds-opacity-40)}`,We=o`.form-control::placeholder{color:var(--sgds-form-color-subtle);font-family:var(--sgds-font-family-label);font-weight:var(--sgds-font-weight-light);line-height:var(--sgds-line-height-24)}`,Q=class extends J{constructor(...e){super(...e),this.label=``,this.hintText=``,this.disabled=!1,this.invalid=!1,this._controlId=Y(`input`),this._labelId=Y(`label`)}static{this.styles=[...J.styles,He,Ue,Pe,We]}setInvalid(e){this.invalid=e,e?this.emit(`sgds-invalid`):this.emit(`sgds-valid`)}};q([H({reflect:!0})],Q.prototype,`label`,void 0),q([H({reflect:!0})],Q.prototype,`hintText`,void 0),q([H({reflect:!0})],Q.prototype,`name`,void 0),q([H({type:Boolean,reflect:!0})],Q.prototype,`disabled`,void 0),q([H({type:Boolean,reflect:!0})],Q.prototype,`invalid`,void 0);var Ge=class{constructor(e,t){(this.host=e).addController(this),this._internals=e._internals||this.host.attachInternals(),this.options={setInvalid:(e,t)=>{e.invalid=t},value:e=>e.value,input:e=>e.input,...t}}hostConnected(){this.host.addEventListener(`invalid`,e=>this.handleInvalid(e))}hostDisconnected(){this.host.removeEventListener(`invalid`,e=>this.handleInvalid(e))}handleInvalid(e){e.preventDefault(),this.options.setInvalid(this.host,!0)}handleInput(e){let t=e.target;this.options.setInvalid(this.host,!1),this.validateInput(t)}handleChange(e){let t=e.target;this.validateInput(t),this.options.setInvalid(this.host,!this.checkValidity())}get form(){return this._internals.form}get validity(){return this._internals.validity}get validationMessage(){return this._internals.validationMessage}get willValidate(){return this._internals.willValidate}updateInvalidState(){this.options.setInvalid(this.host,!this.checkValidity())}resetValidity(){return this._internals.setValidity({})}checkValidity(){return this._internals.checkValidity()}reportValidity(){return this._internals.reportValidity()}setValidity(e,t,n){return this._internals.setValidity(e,t,n)}setFormValue(){let e=this.options.value(this.host);this._internals.setFormValue(e)}validateInput(e){if(this.options.input(this.host).disabled)return this._internals.setValidity({});let t=e.validity;if(t.valid)this._internals.setValidity({});else for(let n in t)t[n]&&(this.validationError=n.toString(),this._internals.setValidity({[this.validationError]:!0},e.validationMessage,e))}};let Ke=e=>{class t extends e{static{this.formAssociated=!0}constructor(...e){super(...e),this._isTouched=!1,this._internals=this.attachInternals()}connectedCallback(){super.connectedCallback(),this.inputValidationController??=new Ge(this)}async firstUpdated(e){super.firstUpdated(e),this.input=this.shadowRoot.querySelector(`input`)||await this.sgdsInput||this.shadowRoot.querySelector(`textarea`)||await this.sgdsDatepickerInput,this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this._mixinValidate(this.input)}formResetCallback(){this._mixinResetFormControl?this._mixinResetFormControl():(this.value=this.defaultValue,this._mixinResetValidity(this.input)),this._mixinSetFormValue()}_mixinHandleChange(e){this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.handleChange(e)}_mixinHandleInputChange(e){this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.handleInput(e)}_mixinResetValidity(e){this.inputValidationController.resetValidity(),this.inputValidationController.updateInvalidState(),this._isTouched&&=!1,!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.validateInput(e)}_mixinValidate(e){this._mixinShouldSkipSgdsValidation()||this.inputValidationController.validateInput(e)}_mixinSetFormValue(){let e=this.value;this._internals.setFormValue(e)}_mixinCheckValidity(){return this._mixinShouldSkipSgdsValidation()?!0:this.inputValidationController.checkValidity()}_mixinReportValidity(){return this._mixinShouldSkipSgdsValidation()?!0:this.inputValidationController.reportValidity()}_mixinGetValidity(){return this._internals.validity}_mixinGetValidationMessage(){return this._internals.validationMessage}_mixinSetValidity(e,t,n){if(!this._mixinShouldSkipSgdsValidation())return this.inputValidationController.setValidity(e,t,n)}_mixinShouldSkipSgdsValidation(){return this.closest(`form`)?.noValidate||this.noValidate}}return q([ke(`sgds-input`)],t.prototype,`sgdsInput`,void 0),q([ke(`sgds-datepicker-input`)],t.prototype,`sgdsDatepickerInput`,void 0),t};var qe=o`fieldset{border:0;gap:var(--sgds-form-gap-md);margin:0;min-width:0;padding:0}.label-hint-container,fieldset{display:flex;flex-direction:column}.label-hint-container{gap:var(--sgds-form-gap-sm)}.radio-group-validation-input{display:none}.radio-container{display:flex;flex-direction:column;gap:var(--sgds-form-gap-md)}:host([disabled]) .label-hint-container{cursor:not-allowed;opacity:var(--sgds-opacity-40)}`,$=class extends Ke(Q){constructor(...e){super(...e),this.defaultValue=``,this.value=``,this.invalidFeedback=``,this.hasFeedback=!1,this.required=!1,this.noValidate=!1,this.autofocus=!1,this._isTouched=!1}static{this.styles=[...Q.styles,qe]}_handleValueChange(){this._updateCheckedRadio()}_handleInvalidChange(){this._radios.forEach(e=>e.invalid=this.invalid)}_mixinResetFormControl(){this.value=this.input.value=this.defaultValue,this._updateInputValue(`reset`),this._mixinResetValidity(this.input)}connectedCallback(){super.connectedCallback(),this.defaultValue=this.value,this.addEventListener(`sgds-blur`,()=>{this._isTouched=!0})}firstUpdated(e){super.firstUpdated(e);let t=this._radios;t.forEach((e,n)=>{if(t.length>1)switch(n){case 0:e.setAttribute(`first-of-type`,``);break;case t.length-1:e.setAttribute(`last-of-type`,``);break;default:e.setAttribute(`nth-of-type`,``)}}),this.value&&this._updateInputValue(`change`)}_handleRadioClick(e){e.preventDefault();let t=e.target;t.disabled||(this.value=t.value,this.emit(`sgds-change`,{detail:{value:this.value}}),this._updateInputValue(),this._radios.forEach(e=>e.checked=e===t))}_updateInputValue(e=`change`){this.input.value=this.value,this.input.dispatchEvent(new InputEvent(e))}_handleKeyDown(e){if(![`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,` `].includes(e.key))return;let t=this._radios.filter(e=>!e.disabled),n=t.find(e=>e.checked)??t[0],r=e.key===` `?0:[`ArrowUp`,`ArrowLeft`].includes(e.key)?-1:1,i=t.indexOf(n)+r;i<0&&(i=t.length-1),i>t.length-1&&(i=0),this._radios.forEach(e=>{e.checked=!1,e.tabIndex=-1}),this.value=t[i].value,this.emit(`sgds-change`,{detail:{value:this.value}}),this._updateInputValue(),t[i].checked=!0,t[i].tabIndex=0,e.preventDefault()}_handleSlotChange(){let e=this._radios;e.forEach(e=>(e.autofocus=this.autofocus,e.checked=e.value===this.value,e)),this._disabledChildRadios(),e.some(e=>e.checked)||e[0]&&(e[0].tabIndex=0)}_updateCheckedRadio(){this._radios.forEach(e=>e.checked=e.value===this.value)}_renderHintText(){let e=j` <div id="${this._controlId}Help" class="form-text">${this.hintText}</div> `;return this.hintText&&e}reportValidity(){return this._mixinReportValidity()}checkValidity(){return this._mixinCheckValidity()}get validity(){return this._mixinGetValidity()}get validationMessage(){return this._mixinGetValidationMessage()}_handleIsTouched(){this._mixinShouldSkipSgdsValidation()||this._isTouched&&(this.invalid=!this.input.checkValidity())}_handleDisabledChange(){this.setInvalid(!1),this._disabledChildRadios()}_disabledChildRadios(){this.disabled&&this._radios.forEach(e=>e.disabled=this.disabled)}render(){let e=j`
|
|
103
|
+
if(super(e),e.type!==W.PROPERTY&&e.type!==W.ATTRIBUTE&&e.type!==W.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Re(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===M||t===N)return t;let n=e.element,r=e.name;if(e.type===W.PROPERTY){if(t===n[r])return M}else if(e.type===W.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return M}else if(e.type===W.ATTRIBUTE&&n.getAttribute(r)===t+``)return M;return Be(e),t}});var He=o`.invalid-feedback-container{display:flex;gap:var(--sgds-form-gap-sm)}.invalid-feedback,.invalid-feedback-container{color:var(--sgds-form-danger-color-default);line-height:var(--sgds-line-height-20)}.invalid-feedback{font-size:var(--sgds-font-size-label-sm);font-weight:var(--sgds-font-weight-regular)}.valid-icon{color:var(--sgds-form-success-color-default)}`,Ue=o`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-label-sm);line-height:var(--sgds-line-height-2-xs)}.form-text.disabled{opacity:var(--sgds-opacity-40)}`,We=o`.form-control::placeholder{color:var(--sgds-form-color-subtle);font-family:var(--sgds-font-family-label);font-weight:var(--sgds-font-weight-light);line-height:var(--sgds-line-height-24)}`,Q=class extends J{constructor(...e){super(...e),this.label=``,this.hintText=``,this.disabled=!1,this.invalid=!1,this._controlId=Y(`input`),this._labelId=Y(`label`)}static{this.styles=[...J.styles,He,Ue,Pe,We]}setInvalid(e){this.invalid=e,e?this.emit(`sgds-invalid`):this.emit(`sgds-valid`)}};q([H({reflect:!0})],Q.prototype,`label`,void 0),q([H({reflect:!0})],Q.prototype,`hintText`,void 0),q([H({reflect:!0})],Q.prototype,`name`,void 0),q([H({type:Boolean,reflect:!0})],Q.prototype,`disabled`,void 0),q([H({type:Boolean,reflect:!0})],Q.prototype,`invalid`,void 0);var Ge=class{constructor(e,t){(this.host=e).addController(this),this._internals=e._internals||this.host.attachInternals(),this.options={setInvalid:(e,t)=>{e.invalid=t},value:e=>e.value,input:e=>e.input,...t}}hostConnected(){this.host.addEventListener(`invalid`,e=>this.handleInvalid(e))}hostDisconnected(){this.host.removeEventListener(`invalid`,e=>this.handleInvalid(e))}handleInvalid(e){e.preventDefault(),this.options.setInvalid(this.host,!0)}handleInput(e){let t=e.target;this.options.setInvalid(this.host,!1),this.validateInput(t)}handleChange(e){let t=e.target;this.validateInput(t),this.options.setInvalid(this.host,!this.checkValidity())}get form(){return this._internals.form}get validity(){return this._internals.validity}get validationMessage(){return this._internals.validationMessage}get willValidate(){return this._internals.willValidate}updateInvalidState(){this.options.setInvalid(this.host,!this.checkValidity())}resetValidity(){return this._internals.setValidity({})}checkValidity(){return this._internals.checkValidity()}reportValidity(){return this._internals.reportValidity()}setValidity(e,t,n){return this._internals.setValidity(e,t,n)}setFormValue(){let e=this.options.value(this.host);this._internals.setFormValue(e)}validateInput(e){if(this.options.input(this.host).disabled)return this._internals.setValidity({});let t=e.validity;if(t.valid)this._internals.setValidity({});else for(let n in t)t[n]&&(this.validationError=n.toString(),this._internals.setValidity({[this.validationError]:!0},e.validationMessage,e))}};let Ke=e=>{class t extends e{static{this.formAssociated=!0}constructor(...e){super(...e),this._isTouched=!1,this._internals=this.attachInternals()}connectedCallback(){super.connectedCallback(),this.inputValidationController??=new Ge(this)}async firstUpdated(e){super.firstUpdated(e),this.input=this.shadowRoot.querySelector(`input`)||await this.sgdsInput||this.shadowRoot.querySelector(`textarea`)||await this.sgdsDatepickerInput,this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this._mixinValidate(this.input)}formResetCallback(){this._mixinResetFormControl?this._mixinResetFormControl():(this.value=this.defaultValue,this._mixinResetValidity(this.input)),this._mixinSetFormValue()}_mixinHandleChange(e){this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.handleChange(e)}_mixinHandleInputChange(e){this._mixinSetFormValue(),!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.handleInput(e)}_mixinResetValidity(e){this.inputValidationController.resetValidity(),this.inputValidationController.updateInvalidState(),this._isTouched&&=!1,!this._mixinShouldSkipSgdsValidation()&&this.inputValidationController.validateInput(e)}_mixinValidate(e){this._mixinShouldSkipSgdsValidation()||this.inputValidationController.validateInput(e)}_mixinSetFormValue(){let e=this.value;this._internals.setFormValue(e)}_mixinCheckValidity(){return this._mixinShouldSkipSgdsValidation()?!0:this.inputValidationController.checkValidity()}_mixinReportValidity(){return this._mixinShouldSkipSgdsValidation()?!0:this.inputValidationController.reportValidity()}_mixinGetValidity(){return this._internals.validity}_mixinGetValidationMessage(){return this._internals.validationMessage}_mixinSetValidity(e,t,n){if(!this._mixinShouldSkipSgdsValidation())return this.inputValidationController.setValidity(e,t,n)}_mixinShouldSkipSgdsValidation(){return this.closest(`form`)?.noValidate||this.noValidate}}return q([ke(`sgds-input`)],t.prototype,`sgdsInput`,void 0),q([ke(`sgds-datepicker-input`)],t.prototype,`sgdsDatepickerInput`,void 0),t};var qe=o`fieldset{border:0;gap:var(--sgds-form-gap-md);margin:0;min-width:0;padding:0}.label-hint-container,fieldset{display:flex;flex-direction:column}.label-hint-container{gap:var(--sgds-form-gap-sm)}.radio-group-validation-input{display:none}.radio-container{display:flex;flex-direction:column;gap:var(--sgds-form-gap-md)}:host([disabled]) .label-hint-container{cursor:not-allowed;opacity:var(--sgds-opacity-40)}`,$=class extends Ke(Q){constructor(...e){super(...e),this.defaultValue=``,this.value=``,this.invalidFeedback=``,this.hasFeedback=!1,this.required=!1,this.noValidate=!1,this.autofocus=!1,this._isTouched=!1}static{this.styles=[...Q.styles,qe]}async _handleValueChange(){this._updateCheckedRadio(),this._mixinSetFormValue(),await this.updateComplete,!this._mixinShouldSkipSgdsValidation()&&this._mixinValidate(this.input)}_handleInvalidChange(){this._radios.forEach(e=>e.invalid=this.invalid)}_mixinResetFormControl(){this.value=this.input.value=this.defaultValue,this._updateInputValue(`reset`),this._mixinResetValidity(this.input)}connectedCallback(){super.connectedCallback(),this.defaultValue=this.value,this.addEventListener(`sgds-blur`,()=>{this._isTouched=!0})}firstUpdated(e){super.firstUpdated(e);let t=this._radios;t.forEach((e,n)=>{if(t.length>1)switch(n){case 0:e.setAttribute(`first-of-type`,``);break;case t.length-1:e.setAttribute(`last-of-type`,``);break;default:e.setAttribute(`nth-of-type`,``)}}),this.value&&this._updateInputValue(`change`)}_handleRadioClick(e){e.preventDefault();let t=e.target;t.disabled||(this.value=t.value,this.emit(`sgds-change`,{detail:{value:this.value}}),this._updateInputValue(),this._radios.forEach(e=>e.checked=e===t))}_updateInputValue(e=`change`){this.input.value=this.value,this.input.dispatchEvent(new InputEvent(e))}_handleKeyDown(e){if(![`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`,` `].includes(e.key))return;let t=this._radios.filter(e=>!e.disabled),n=t.find(e=>e.checked)??t[0],r=e.key===` `?0:[`ArrowUp`,`ArrowLeft`].includes(e.key)?-1:1,i=t.indexOf(n)+r;i<0&&(i=t.length-1),i>t.length-1&&(i=0),this._radios.forEach(e=>{e.checked=!1,e.tabIndex=-1}),this.value=t[i].value,this.emit(`sgds-change`,{detail:{value:this.value}}),this._updateInputValue(),t[i].checked=!0,t[i].tabIndex=0,e.preventDefault()}_handleSlotChange(){let e=this._radios;e.forEach(e=>(e.autofocus=this.autofocus,e.checked=e.value===this.value,e)),this._disabledChildRadios(),e.some(e=>e.checked)||e[0]&&(e[0].tabIndex=0)}_updateCheckedRadio(){this._radios.forEach(e=>e.checked=e.value===this.value)}_renderHintText(){let e=j` <div id="${this._controlId}Help" class="form-text">${this.hintText}</div> `;return this.hintText&&e}reportValidity(){return this._mixinReportValidity()}checkValidity(){return this._mixinCheckValidity()}get validity(){return this._mixinGetValidity()}get validationMessage(){return this._mixinGetValidationMessage()}_handleIsTouched(){this._mixinShouldSkipSgdsValidation()||this._isTouched&&(this.invalid=!this.input.checkValidity())}_handleDisabledChange(){this.setInvalid(!1),this._disabledChildRadios()}_disabledChildRadios(){this.disabled&&this._radios.forEach(e=>e.disabled=this.disabled)}render(){let e=j`
|
|
104
104
|
<slot
|
|
105
105
|
class="radio-container"
|
|
106
106
|
@click=${this._handleRadioClick}
|