@aurodesignsystem-dev/auro-formkit 0.0.0-pr1508.0 → 0.0.0-pr1508.2
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/bibtemplate/dist/index.js +1 -1
- package/components/bibtemplate/dist/registered.js +1 -1
- package/components/checkbox/demo/customize.min.js +8 -6
- package/components/checkbox/demo/getting-started.min.js +8 -6
- package/components/checkbox/demo/index.min.js +8 -6
- package/components/checkbox/dist/index.js +8 -6
- package/components/checkbox/dist/registered.js +8 -6
- package/components/combobox/README.md +1 -1
- package/components/combobox/demo/customize.md +2 -10
- package/components/combobox/demo/customize.min.js +386 -305
- package/components/combobox/demo/getting-started.min.js +386 -301
- package/components/combobox/demo/index.md +1 -1
- package/components/combobox/demo/index.min.js +386 -301
- package/components/combobox/demo/keyboard-behavior.md +2 -142
- package/components/combobox/demo/readme.md +1 -1
- package/components/combobox/demo/why-combobox.md +2 -2
- package/components/combobox/dist/auro-combobox.d.ts +23 -16
- package/components/combobox/dist/index.js +385 -300
- package/components/combobox/dist/registered.js +385 -300
- package/components/counter/demo/customize.min.js +18 -8
- package/components/counter/demo/index.min.js +18 -8
- package/components/counter/dist/index.js +18 -8
- package/components/counter/dist/registered.js +18 -8
- package/components/datepicker/demo/accessibility.md +2 -1
- package/components/datepicker/demo/api.md +63 -62
- package/components/datepicker/demo/customize.md +12 -1
- package/components/datepicker/demo/customize.min.js +932 -335
- package/components/datepicker/demo/index.min.js +932 -335
- package/components/datepicker/dist/{src/auro-calendar-cell.d.ts → auro-calendar-cell.d.ts} +20 -3
- package/components/datepicker/dist/{src/auro-calendar.d.ts → auro-calendar.d.ts} +121 -7
- package/components/datepicker/dist/{src/auro-datepicker.d.ts → auro-datepicker.d.ts} +78 -5
- package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
- package/components/datepicker/dist/index.js +932 -335
- package/components/datepicker/dist/registered.js +932 -335
- package/components/dropdown/demo/customize.min.js +2 -1
- package/components/dropdown/demo/getting-started.min.js +2 -1
- package/components/dropdown/demo/index.min.js +2 -1
- package/components/dropdown/dist/index.js +2 -1
- package/components/dropdown/dist/registered.js +2 -1
- package/components/form/demo/customize.min.js +1690 -826
- package/components/form/demo/getting-started.min.js +1690 -826
- package/components/form/demo/index.min.js +1690 -826
- package/components/form/demo/registerDemoDeps.min.js +1690 -826
- package/components/input/demo/api.md +5 -5
- package/components/input/demo/customize.md +8 -8
- package/components/input/demo/customize.min.js +137 -95
- package/components/input/demo/getting-started.min.js +137 -95
- package/components/input/demo/index.min.js +137 -95
- package/components/input/dist/base-input.d.ts +33 -44
- package/components/input/dist/index.js +150 -96
- package/components/input/dist/registered.js +137 -95
- package/components/radio/demo/customize.min.js +8 -6
- package/components/radio/demo/getting-started.min.js +8 -6
- package/components/radio/demo/index.min.js +8 -6
- package/components/radio/dist/index.js +8 -6
- package/components/radio/dist/registered.js +8 -6
- package/components/select/demo/customize.md +86 -0
- package/components/select/demo/customize.min.js +194 -68
- package/components/select/demo/getting-started.min.js +196 -115
- package/components/select/demo/index.min.js +194 -68
- package/components/select/demo/keyboard-behavior.md +18 -4
- package/components/select/dist/auro-select.d.ts +20 -8
- package/components/select/dist/index.js +194 -68
- package/components/select/dist/registered.js +194 -68
- package/custom-elements.json +2365 -1819
- package/package.json +6 -2
- package/components/checkbox/demo/customize.js +0 -22
- package/components/checkbox/demo/demo-support.js +0 -1
- package/components/checkbox/demo/getting-started.js +0 -22
- package/components/checkbox/demo/index.js +0 -8
- package/components/checkbox/demo/styles.scss +0 -1
- package/components/combobox/demo/customize.js +0 -24
- package/components/combobox/demo/demo-support.js +0 -1
- package/components/combobox/demo/getting-started.js +0 -21
- package/components/combobox/demo/index.js +0 -23
- package/components/combobox/demo/styles.scss +0 -1
- package/components/counter/demo/customize.js +0 -21
- package/components/counter/demo/demo-support.js +0 -1
- package/components/counter/demo/index.js +0 -21
- package/components/counter/demo/styles.scss +0 -1
- package/components/datepicker/demo/customize.js +0 -17
- package/components/datepicker/demo/demo-support.js +0 -1
- package/components/datepicker/demo/index.js +0 -23
- package/components/datepicker/demo/styles.scss +0 -1
- package/components/dropdown/demo/customize.js +0 -9
- package/components/dropdown/demo/demo-support.js +0 -1
- package/components/dropdown/demo/getting-started.js +0 -9
- package/components/dropdown/demo/index.js +0 -16
- package/components/dropdown/demo/styles.scss +0 -1
- package/components/form/demo/customize.js +0 -28
- package/components/form/demo/demo-support.js +0 -1
- package/components/form/demo/getting-started.js +0 -9
- package/components/form/demo/index.js +0 -5
- package/components/form/demo/registerDemoDeps.js +0 -23
- package/components/form/demo/styles.scss +0 -1
- package/components/input/demo/customize.js +0 -25
- package/components/input/demo/demo-support.js +0 -1
- package/components/input/demo/getting-started.js +0 -8
- package/components/input/demo/index.js +0 -8
- package/components/input/demo/styles.css +0 -974
- package/components/input/demo/styles.scss +0 -1
- package/components/menu/demo/demo-support.js +0 -1
- package/components/menu/demo/index.js +0 -25
- package/components/menu/demo/styles.scss +0 -1
- package/components/radio/demo/customize.js +0 -22
- package/components/radio/demo/demo-support.js +0 -1
- package/components/radio/demo/getting-started.js +0 -24
- package/components/radio/demo/index.js +0 -8
- package/components/radio/demo/styles.scss +0 -1
- package/components/select/demo/customize.js +0 -11
- package/components/select/demo/demo-support.js +0 -1
- package/components/select/demo/getting-started.js +0 -26
- package/components/select/demo/index.js +0 -11
- package/components/select/demo/styles.scss +0 -1
- /package/components/datepicker/dist/{src/auro-calendar-month.d.ts → auro-calendar-month.d.ts} +0 -0
- /package/components/datepicker/dist/{src/buttonVersion.d.ts → buttonVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/datepickerKeyboardStrategy.d.ts → datepickerKeyboardStrategy.d.ts} +0 -0
- /package/components/datepicker/dist/{src/iconVersion.d.ts → iconVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/index.d.ts → index.d.ts} +0 -0
- /package/components/datepicker/dist/{src/popoverVersion.d.ts → popoverVersion.d.ts} +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/classic/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/classic/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-calendar-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-cell-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/color-month-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/shapeSize-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/snowflake/color-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/snowflake/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-cell-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-auro-calendar-month-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/style-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/styles → styles}/tokens-css.d.ts +0 -0
- /package/components/datepicker/dist/{src/utilities.d.ts → utilities.d.ts} +0 -0
- /package/components/datepicker/dist/{src/utilitiesCalendar.d.ts → utilitiesCalendar.d.ts} +0 -0
- /package/components/datepicker/dist/{src/utilitiesCalendarRender.d.ts → utilitiesCalendarRender.d.ts} +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/day.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-calendar.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker-cell.d.ts +0 -0
- /package/components/datepicker/dist/{src/vendor → vendor}/wc-range-datepicker/range-datepicker.d.ts +0 -0
|
@@ -553,15 +553,17 @@ class AuroFormValidation {
|
|
|
553
553
|
);
|
|
554
554
|
}
|
|
555
555
|
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
556
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
557
|
+
|
|
558
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
559
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
560
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
561
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
562
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
559
563
|
hasValue = false;
|
|
560
564
|
}
|
|
561
565
|
}
|
|
562
566
|
|
|
563
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
564
|
-
|
|
565
567
|
if (isCombobox) {
|
|
566
568
|
|
|
567
569
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -959,19 +961,28 @@ const selectKeyboardStrategy = {
|
|
|
959
961
|
},
|
|
960
962
|
|
|
961
963
|
End(component, evt, ctx) {
|
|
962
|
-
if (!ctx.isExpanded) {
|
|
963
|
-
return;
|
|
964
|
-
}
|
|
965
964
|
evt.preventDefault();
|
|
966
965
|
evt.stopPropagation();
|
|
967
966
|
// `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
|
|
968
967
|
const lastOption = getEnabledOptions(component.menu).pop();
|
|
969
|
-
if (lastOption) {
|
|
970
|
-
|
|
968
|
+
if (!lastOption) {
|
|
969
|
+
return;
|
|
970
|
+
}
|
|
971
|
+
// Pre-stash before show() so the auroDropdown-toggled handler's
|
|
972
|
+
// `!optionActive` guard short-circuits the firstActive/selected fallback —
|
|
973
|
+
// otherwise show() synchronously fires the handler and writes
|
|
974
|
+
// aria-activedescendant once before we overwrite it.
|
|
975
|
+
component.menu.updateActiveOption(lastOption);
|
|
976
|
+
if (!ctx.isExpanded) {
|
|
977
|
+
component.dropdown.show();
|
|
971
978
|
}
|
|
972
979
|
},
|
|
973
980
|
|
|
974
981
|
Enter(component, evt, ctx) {
|
|
982
|
+
// Prevent the keypress from bubbling to parent containers (e.g., forms)
|
|
983
|
+
// which could interpret Enter as a submit. Matches APG select-only combobox
|
|
984
|
+
// and native <select> behavior: Enter opens the listbox when closed, selects
|
|
985
|
+
// the active option when open — it does not submit a parent form.
|
|
975
986
|
evt.preventDefault();
|
|
976
987
|
evt.stopPropagation();
|
|
977
988
|
if (!ctx.isExpanded) {
|
|
@@ -982,14 +993,16 @@ const selectKeyboardStrategy = {
|
|
|
982
993
|
},
|
|
983
994
|
|
|
984
995
|
Home(component, evt, ctx) {
|
|
985
|
-
if (!ctx.isExpanded) {
|
|
986
|
-
return;
|
|
987
|
-
}
|
|
988
996
|
evt.preventDefault();
|
|
989
997
|
evt.stopPropagation();
|
|
990
998
|
const [firstOption] = getEnabledOptions(component.menu);
|
|
991
|
-
if (firstOption) {
|
|
992
|
-
|
|
999
|
+
if (!firstOption) {
|
|
1000
|
+
return;
|
|
1001
|
+
}
|
|
1002
|
+
// See End() for why this must run before show().
|
|
1003
|
+
component.menu.updateActiveOption(firstOption);
|
|
1004
|
+
if (!ctx.isExpanded) {
|
|
1005
|
+
component.dropdown.show();
|
|
993
1006
|
}
|
|
994
1007
|
},
|
|
995
1008
|
|
|
@@ -4961,7 +4974,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
4961
4974
|
}
|
|
4962
4975
|
};
|
|
4963
4976
|
|
|
4964
|
-
var formkitVersion$1 = '
|
|
4977
|
+
var formkitVersion$1 = '202607010104';
|
|
4965
4978
|
|
|
4966
4979
|
class AuroElement extends i$2 {
|
|
4967
4980
|
static get properties() {
|
|
@@ -6233,6 +6246,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6233
6246
|
role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
|
|
6234
6247
|
aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
|
|
6235
6248
|
aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
|
|
6249
|
+
aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
|
|
6236
6250
|
aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
|
|
6237
6251
|
aria-disabled="${o(this.disabled ? 'true' : undefined)}"
|
|
6238
6252
|
@focusin="${this.handleFocusin}"
|
|
@@ -6359,7 +6373,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6359
6373
|
|
|
6360
6374
|
var colorCss$3 = i$5`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
|
|
6361
6375
|
|
|
6362
|
-
var styleCss$4 = i$5`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1
|
|
6376
|
+
var styleCss$4 = i$5`#bibTemplate{display:flex;overflow:hidden;height:100%;max-height:100%;flex-direction:column}#headerContainer{display:flex;flex-direction:column;padding:var(--ds-size-200, 1rem);padding-top:var(--ds-size-400, 2rem);padding-bottom:0}#headerContainer .titleRow{display:flex;flex-direction:row;justify-content:space-between;gap:var(--ds-size-100, 0.5rem)}#headerContainer .header{max-width:calc(100vw - var(--ds-size-900, 4.5rem));padding-top:var(--ds-size-200, 1rem)}#headerContainer .subheader{width:100%}#closeButton [auro-icon]{--ds-auro-icon-size: var(--ds-size-500, 2.5rem)}#bodyContainer{position:relative;overflow:auto;flex:1}:host([isfullscreen]) #bibTemplate{max-height:100dvh}:host([isfullscreen]) #bodyContainer{margin-top:var(--ds-size-100, 0.5rem)}#footerContainer{padding:var(--ds-size-200, 1rem)}`;
|
|
6363
6377
|
|
|
6364
6378
|
var tokenCss = i$5`:host{--ds-auro-dropdownbib-header-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-footer-container-color: var(--ds-basic-color-surface-default, #ffffff)}`;
|
|
6365
6379
|
|
|
@@ -6982,7 +6996,7 @@ class AuroHelpText extends i$2 {
|
|
|
6982
6996
|
}
|
|
6983
6997
|
}
|
|
6984
6998
|
|
|
6985
|
-
var formkitVersion = '
|
|
6999
|
+
var formkitVersion = '202607010104';
|
|
6986
7000
|
|
|
6987
7001
|
var styleCss$2 = i$5`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}.body-default{font-size:var(--wcss-body-default-font-size, 1rem);font-weight:var(--wcss-body-default-weight, );line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-default-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-default-emphasized{font-size:var(--wcss-body-default-emphasized-font-size, 1rem);font-weight:var(--wcss-body-default-emphasized-weight, );line-height:var(--wcss-body-default-emphasized-line-height, 1.5rem)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);font-weight:var(--wcss-body-lg-weight, );line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-lg,.body-lg-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg-emphasized{font-size:var(--wcss-body-lg-emphasized-font-size, 1.125rem);font-weight:var(--wcss-body-lg-emphasized-weight, );line-height:var(--wcss-body-lg-emphasized-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);font-weight:var(--wcss-body-sm-weight, );line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-sm-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-sm-emphasized{font-size:var(--wcss-body-sm-emphasized-font-size, 0.875rem);font-weight:var(--wcss-body-sm-emphasized-weight, );line-height:var(--wcss-body-sm-emphasized-line-height, 1.25rem)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);font-weight:var(--wcss-body-xs-weight, );line-height:var(--wcss-body-xs-line-height, 1rem)}.body-xs,.body-xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs-emphasized{font-size:var(--wcss-body-xs-emphasized-font-size, 0.75rem);font-weight:var(--wcss-body-xs-emphasized-weight, );line-height:var(--wcss-body-xs-emphasized-line-height, 1rem)}.body-2xs{font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-weight, );line-height:var(--wcss-body-2xs-line-height, 0.875rem)}.body-2xs,.body-2xs-emphasized{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-2xs-emphasized{font-size:var(--wcss-body-2xs-emphasized-font-size, 0.625rem);font-weight:var(--wcss-body-2xs-emphasized-weight, );line-height:var(--wcss-body-2xs-emphasized-line-height, 0.875rem)}.display-2xl{font-family:var(--wcss-display-2xl-family, "AS Circular"),var(--wcss-display-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-2xl-font-size, clamp(3.5rem, 6vw, 5.375rem));font-weight:var(--wcss-display-2xl-weight, 300);letter-spacing:var(--wcss-display-2xl-letter-spacing, 0);line-height:var(--wcss-display-2xl-line-height, 1.3)}.display-xl{font-family:var(--wcss-display-xl-family, "AS Circular"),var(--wcss-display-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xl-font-size, clamp(3rem, 5.3333333333vw, 4.5rem));font-weight:var(--wcss-display-xl-weight, 300);letter-spacing:var(--wcss-display-xl-letter-spacing, 0);line-height:var(--wcss-display-xl-line-height, 1.3)}.display-lg{font-family:var(--wcss-display-lg-family, "AS Circular"),var(--wcss-display-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-lg-font-size, clamp(2.75rem, 4.6666666667vw, 4rem));font-weight:var(--wcss-display-lg-weight, 300);letter-spacing:var(--wcss-display-lg-letter-spacing, 0);line-height:var(--wcss-display-lg-line-height, 1.3)}.display-md{font-family:var(--wcss-display-md-family, "AS Circular"),var(--wcss-display-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-md-font-size, clamp(2.5rem, 4vw, 3.5rem));font-weight:var(--wcss-display-md-weight, 300);letter-spacing:var(--wcss-display-md-letter-spacing, 0);line-height:var(--wcss-display-md-line-height, 1.3)}.display-sm{font-family:var(--wcss-display-sm-family, "AS Circular"),var(--wcss-display-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-sm-font-size, clamp(2rem, 3.6666666667vw, 3rem));font-weight:var(--wcss-display-sm-weight, 300);letter-spacing:var(--wcss-display-sm-letter-spacing, 0);line-height:var(--wcss-display-sm-line-height, 1.3)}.display-xs{font-family:var(--wcss-display-xs-family, "AS Circular"),var(--wcss-display-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-display-xs-font-size, clamp(1.75rem, 3vw, 2.375rem));font-weight:var(--wcss-display-xs-weight, 300);letter-spacing:var(--wcss-display-xs-letter-spacing, 0);line-height:var(--wcss-display-xs-line-height, 1.3)}.heading-xl{font-family:var(--wcss-heading-xl-family, "AS Circular"),var(--wcss-heading-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xl-font-size, clamp(2rem, 3vw, 2.5rem));font-weight:var(--wcss-heading-xl-weight, 300);letter-spacing:var(--wcss-heading-xl-letter-spacing, 0);line-height:var(--wcss-heading-xl-line-height, 1.3)}.heading-lg{font-family:var(--wcss-heading-lg-family, "AS Circular"),var(--wcss-heading-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-lg-font-size, clamp(1.75rem, 2.6666666667vw, 2.25rem));font-weight:var(--wcss-heading-lg-weight, 300);letter-spacing:var(--wcss-heading-lg-letter-spacing, 0);line-height:var(--wcss-heading-lg-line-height, 1.3)}.heading-md{font-family:var(--wcss-heading-md-family, "AS Circular"),var(--wcss-heading-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-md-font-size, clamp(1.625rem, 2.3333333333vw, 1.75rem));font-weight:var(--wcss-heading-md-weight, 300);letter-spacing:var(--wcss-heading-md-letter-spacing, 0);line-height:var(--wcss-heading-md-line-height, 1.3)}.heading-sm{font-family:var(--wcss-heading-sm-family, "AS Circular"),var(--wcss-heading-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-sm-font-size, clamp(1.375rem, 2vw, 1.5rem));font-weight:var(--wcss-heading-sm-weight, 300);letter-spacing:var(--wcss-heading-sm-letter-spacing, 0);line-height:var(--wcss-heading-sm-line-height, 1.3)}.heading-xs{font-family:var(--wcss-heading-xs-family, "AS Circular"),var(--wcss-heading-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-xs-font-size, clamp(1.25rem, 1.6666666667vw, 1.25rem));font-weight:var(--wcss-heading-xs-weight, 300);letter-spacing:var(--wcss-heading-xs-letter-spacing, 0);line-height:var(--wcss-heading-xs-line-height, 1.3)}.heading-2xs{font-family:var(--wcss-heading-2xs-family, "AS Circular"),var(--wcss-heading-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-heading-2xs-font-size, clamp(1.125rem, 1.5vw, 1.125rem));font-weight:var(--wcss-heading-2xs-weight, 300);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
|
|
6988
7002
|
|
|
@@ -7314,14 +7328,6 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7314
7328
|
reflect: true
|
|
7315
7329
|
},
|
|
7316
7330
|
|
|
7317
|
-
/**
|
|
7318
|
-
* @private
|
|
7319
|
-
*/
|
|
7320
|
-
options: {
|
|
7321
|
-
type: Array,
|
|
7322
|
-
state: true
|
|
7323
|
-
},
|
|
7324
|
-
|
|
7325
7331
|
/**
|
|
7326
7332
|
* Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
|
|
7327
7333
|
* @type {HTMLElement|Array<HTMLElement>}
|
|
@@ -7609,16 +7615,68 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7609
7615
|
this.dropdown.dropdownWidth = this.customBibWidth;
|
|
7610
7616
|
}
|
|
7611
7617
|
|
|
7612
|
-
|
|
7613
|
-
const labelElement = this.querySelector('span[slot="label"]');
|
|
7614
|
-
if (labelElement) {
|
|
7615
|
-
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
7616
|
-
}
|
|
7618
|
+
this._syncLabelText();
|
|
7617
7619
|
|
|
7618
7620
|
// Exposes the CSS parts from the dropdown for styling
|
|
7619
7621
|
this.dropdown.exposeCssParts();
|
|
7620
7622
|
}
|
|
7621
7623
|
|
|
7624
|
+
/**
|
|
7625
|
+
* Reads the current label slot text and pushes it to the dropdown bib
|
|
7626
|
+
* (for dialog naming) and the menu (for listbox aria-label). Safe to call
|
|
7627
|
+
* before either child has been wired up — each branch self-guards.
|
|
7628
|
+
* @private
|
|
7629
|
+
*/
|
|
7630
|
+
_syncLabelText() {
|
|
7631
|
+
const labelElement = this.querySelector('[slot="label"]');
|
|
7632
|
+
const text = labelElement ? labelElement.textContent.trim() : '';
|
|
7633
|
+
if (this.dropdown) {
|
|
7634
|
+
this.dropdown.bibDialogLabel = text || undefined;
|
|
7635
|
+
}
|
|
7636
|
+
if (this.menu) {
|
|
7637
|
+
if (text) {
|
|
7638
|
+
this.menu.setAttribute('aria-label', text);
|
|
7639
|
+
} else {
|
|
7640
|
+
this.menu.removeAttribute('aria-label');
|
|
7641
|
+
}
|
|
7642
|
+
}
|
|
7643
|
+
}
|
|
7644
|
+
|
|
7645
|
+
/**
|
|
7646
|
+
* Keeps the dialog/menu accessible names in sync when consumers mutate the
|
|
7647
|
+
* label slot at runtime (e.g., i18n locale swap). `slotchange` alone is
|
|
7648
|
+
* insufficient — it doesn't fire when textContent of an already-assigned
|
|
7649
|
+
* slotted node changes, which is the common case. We scope the observer to
|
|
7650
|
+
* the label node itself (not the whole host subtree) so option-content
|
|
7651
|
+
* mutations don't trigger label re-syncs, and re-target on `slotchange`
|
|
7652
|
+
* when consumers add or replace the label element.
|
|
7653
|
+
* @private
|
|
7654
|
+
*/
|
|
7655
|
+
_observeLabelChanges() {
|
|
7656
|
+
if (this._labelObserver) return;
|
|
7657
|
+
this._labelObserver = new MutationObserver(() => this._syncLabelText());
|
|
7658
|
+
|
|
7659
|
+
const retarget = () => {
|
|
7660
|
+
this._labelObserver.disconnect();
|
|
7661
|
+
const labelElement = this.querySelector('[slot="label"]');
|
|
7662
|
+
if (labelElement) {
|
|
7663
|
+
this._labelObserver.observe(labelElement, {
|
|
7664
|
+
childList: true,
|
|
7665
|
+
subtree: true,
|
|
7666
|
+
characterData: true
|
|
7667
|
+
});
|
|
7668
|
+
}
|
|
7669
|
+
this._syncLabelText();
|
|
7670
|
+
};
|
|
7671
|
+
|
|
7672
|
+
retarget();
|
|
7673
|
+
|
|
7674
|
+
this._retargetLabelObserver = retarget;
|
|
7675
|
+
this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
|
|
7676
|
+
slot.addEventListener('slotchange', retarget);
|
|
7677
|
+
});
|
|
7678
|
+
}
|
|
7679
|
+
|
|
7622
7680
|
/**
|
|
7623
7681
|
* This will register this element with the browser.
|
|
7624
7682
|
* @param {string} [name="auro-select"] - The name of element that you want to register to.
|
|
@@ -7769,11 +7827,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7769
7827
|
this.updateMenuShapeSize();
|
|
7770
7828
|
this.setMenuValue(this.value);
|
|
7771
7829
|
|
|
7772
|
-
|
|
7773
|
-
const labelElement = this.querySelector('[slot="label"]');
|
|
7774
|
-
if (labelElement) {
|
|
7775
|
-
this.menu.setAttribute('aria-label', labelElement.textContent.trim());
|
|
7776
|
-
}
|
|
7830
|
+
this._syncLabelText();
|
|
7777
7831
|
|
|
7778
7832
|
if (this.multiSelect) {
|
|
7779
7833
|
this.menu.multiSelect = this.multiSelect;
|
|
@@ -7785,8 +7839,21 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7785
7839
|
if (typeof this.menu.initItems === 'function') {
|
|
7786
7840
|
this.menu.initItems();
|
|
7787
7841
|
}
|
|
7788
|
-
this.options = this.menu.options;
|
|
7789
7842
|
this.updateOptionPositions();
|
|
7843
|
+
// renderNativeSelect reads this.menu.options, which the parent doesn't
|
|
7844
|
+
// observe — request an update so the hidden native <option> list reflects
|
|
7845
|
+
// the menu's options after initItems populates them.
|
|
7846
|
+
this.requestUpdate();
|
|
7847
|
+
|
|
7848
|
+
// Keep aria-setsize/aria-posinset (and the native <option> list) in sync
|
|
7849
|
+
// when the menu re-initializes its items — e.g., slotchange, async/lazy
|
|
7850
|
+
// loads, value-triggered re-init. Without this, stale set-size is
|
|
7851
|
+
// announced and the native select goes stale after dynamic mutations.
|
|
7852
|
+
this.menu.addEventListener('auroMenu-optionsChange', () => {
|
|
7853
|
+
this.updateOptionPositions();
|
|
7854
|
+
this.requestUpdate();
|
|
7855
|
+
});
|
|
7856
|
+
|
|
7790
7857
|
this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
|
|
7791
7858
|
|
|
7792
7859
|
this.menu.addEventListener("auroMenu-selectValueFailure", () => {
|
|
@@ -7805,11 +7872,26 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7805
7872
|
this.dropdown.setActiveDescendant(this.optionActive);
|
|
7806
7873
|
}
|
|
7807
7874
|
|
|
7808
|
-
//
|
|
7809
|
-
|
|
7875
|
+
// Live-region announce only for [not selected] options. For activations
|
|
7876
|
+
// on an already-selected option — auto-activation on bib open, arrow
|
|
7877
|
+
// navigation back to the selection, or click in multiSelect — rely on
|
|
7878
|
+
// aria-activedescendant + aria-selected="true" to convey state per the
|
|
7879
|
+
// WAI-ARIA listbox pattern. This is intentional, not limited to the
|
|
7880
|
+
// initial activation on open: it also prevents a duplicate "X, selected"
|
|
7881
|
+
// when Enter on the active+selected option re-fires
|
|
7882
|
+
// auroMenu-selectedOption (see 03b289e39).
|
|
7883
|
+
if (this.optionActive && !this.optionActive.hasAttribute('selected')) {
|
|
7810
7884
|
const optionText = this.optionActive.textContent.trim();
|
|
7811
|
-
const
|
|
7812
|
-
|
|
7885
|
+
const message = `${optionText}, not selected`;
|
|
7886
|
+
if (this.dropdown.isPopoverVisible) {
|
|
7887
|
+
announceToScreenReader(this._getAnnouncementRoot(), message);
|
|
7888
|
+
} else {
|
|
7889
|
+
// Typeahead-on-closed fires this event before `show()` flips
|
|
7890
|
+
// isPopoverVisible. Defer so the announcement targets the bib's
|
|
7891
|
+
// live region once the fullscreen <dialog> opens — otherwise it
|
|
7892
|
+
// lands in the host root, which is inert under the active modal.
|
|
7893
|
+
queueMicrotask(() => announceToScreenReader(this._getAnnouncementRoot(), message));
|
|
7894
|
+
}
|
|
7813
7895
|
}
|
|
7814
7896
|
|
|
7815
7897
|
if (this.dropdown.isPopoverVisible) {
|
|
@@ -7818,6 +7900,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7818
7900
|
});
|
|
7819
7901
|
|
|
7820
7902
|
this.menu.addEventListener('auroMenu-selectedOption', () => {
|
|
7903
|
+
const previousSelected = this.optionSelected;
|
|
7821
7904
|
|
|
7822
7905
|
// Update the displayed value
|
|
7823
7906
|
this.updateDisplayedValue();
|
|
@@ -7837,13 +7920,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7837
7920
|
this.dropdown.trigger.focus();
|
|
7838
7921
|
}
|
|
7839
7922
|
|
|
7840
|
-
//
|
|
7841
|
-
//
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
|
|
7846
|
-
|
|
7923
|
+
// Describe the actual change. In multiSelect, currentLabel is the
|
|
7924
|
+
// concatenated remaining list — announcing "{list}, selected" after a
|
|
7925
|
+
// deselect would falsely claim every remaining label was just added.
|
|
7926
|
+
// Diff previous vs next to recover the toggled option.
|
|
7927
|
+
let announcement = '';
|
|
7928
|
+
if (this.multiSelect) {
|
|
7929
|
+
const prev = Array.isArray(previousSelected) ? previousSelected : [];
|
|
7930
|
+
const removed = prev.find((opt) => !nextSelected.includes(opt));
|
|
7931
|
+
const added = nextSelected.find((opt) => !prev.includes(opt));
|
|
7932
|
+
if (removed) {
|
|
7933
|
+
announcement = `${removed.textContent.trim()}, not selected`;
|
|
7934
|
+
} else if (added) {
|
|
7935
|
+
announcement = `${added.textContent.trim()}, selected`;
|
|
7936
|
+
}
|
|
7937
|
+
} else {
|
|
7938
|
+
announcement = `${this.menu.currentLabel}, selected`;
|
|
7939
|
+
}
|
|
7940
|
+
|
|
7941
|
+
// Delay so the utterance isn't overridden by VoiceOver's "collapsed"
|
|
7942
|
+
// announcement from aria-expanded when the dropdown closes.
|
|
7943
|
+
if (announcement) {
|
|
7944
|
+
const announcementDelay = 300;
|
|
7945
|
+
setTimeout(() => {
|
|
7946
|
+
announceToScreenReader(this._getAnnouncementRoot(), announcement);
|
|
7947
|
+
}, announcementDelay);
|
|
7948
|
+
}
|
|
7847
7949
|
});
|
|
7848
7950
|
}
|
|
7849
7951
|
|
|
@@ -7941,24 +8043,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7941
8043
|
|
|
7942
8044
|
this.typeaheadBuffer += key;
|
|
7943
8045
|
|
|
7944
|
-
|
|
8046
|
+
// Prefer the literal buffer as a prefix per WAI-ARIA APG ("focus moves to the
|
|
8047
|
+
// next item with a name that starts with the string of characters typed").
|
|
8048
|
+
// Only fall back to single-char cycling when the repeated buffer has no
|
|
8049
|
+
// longer prefix match — e.g. "aa" cycles through ["Apple", "Apricot"] only
|
|
8050
|
+
// because no option starts with "aa".
|
|
8051
|
+
let match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
|
|
7945
8052
|
|
|
7946
|
-
|
|
8053
|
+
const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
|
|
7947
8054
|
if (isRepeatedChar) {
|
|
7948
8055
|
const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
|
|
7949
8056
|
if (matches.length) {
|
|
7950
8057
|
const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
|
|
7951
8058
|
match = matches[cycleIndex];
|
|
7952
8059
|
}
|
|
7953
|
-
} else {
|
|
7954
|
-
match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
|
|
7955
8060
|
}
|
|
7956
8061
|
|
|
8062
|
+
// Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
|
|
7957
8063
|
if (match) {
|
|
8064
|
+
// Pre-stash the match so the auroDropdown-toggled handler's `!optionActive`
|
|
8065
|
+
// guard short-circuits and skips the firstActive/selected fallback —
|
|
8066
|
+
// otherwise show() synchronously fires the handler, which writes
|
|
8067
|
+
// aria-activedescendant once before we overwrite it.
|
|
8068
|
+
this.menu.updateActiveOption(match);
|
|
7958
8069
|
if (!this.dropdown.isPopoverVisible) {
|
|
7959
8070
|
this.dropdown.show();
|
|
7960
8071
|
}
|
|
7961
|
-
this.menu.updateActiveOption(match);
|
|
7962
8072
|
}
|
|
7963
8073
|
}
|
|
7964
8074
|
|
|
@@ -8075,6 +8185,28 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8075
8185
|
disconnectedCallback() {
|
|
8076
8186
|
super.disconnectedCallback();
|
|
8077
8187
|
this._clearTypeaheadBuffer();
|
|
8188
|
+
if (this._labelObserver) {
|
|
8189
|
+
this._labelObserver.disconnect();
|
|
8190
|
+
this._labelObserver = null;
|
|
8191
|
+
}
|
|
8192
|
+
if (this._retargetLabelObserver && this.shadowRoot) {
|
|
8193
|
+
this.shadowRoot.querySelectorAll('slot[name="label"]').forEach((slot) => {
|
|
8194
|
+
slot.removeEventListener('slotchange', this._retargetLabelObserver);
|
|
8195
|
+
});
|
|
8196
|
+
this._retargetLabelObserver = null;
|
|
8197
|
+
}
|
|
8198
|
+
}
|
|
8199
|
+
|
|
8200
|
+
connectedCallback() {
|
|
8201
|
+
super.connectedCallback();
|
|
8202
|
+
// Regression guard: firstUpdated() fires once per instance, so the label
|
|
8203
|
+
// observer setup it triggers does NOT re-run on reconnect. After a
|
|
8204
|
+
// disconnect+reconnect (reparent, SPA route swap), runtime label mutations
|
|
8205
|
+
// would silently stop syncing menu aria-label / dropdown.bibDialogLabel
|
|
8206
|
+
// unless we re-wire the observer here.
|
|
8207
|
+
if (this.hasUpdated) {
|
|
8208
|
+
this._observeLabelChanges();
|
|
8209
|
+
}
|
|
8078
8210
|
}
|
|
8079
8211
|
|
|
8080
8212
|
// lifecycle runs only after the element's DOM has been updated the first time
|
|
@@ -8085,6 +8217,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8085
8217
|
this.configureDropdown();
|
|
8086
8218
|
this.configureMenu();
|
|
8087
8219
|
this.configureSelect();
|
|
8220
|
+
this._observeLabelChanges();
|
|
8088
8221
|
}
|
|
8089
8222
|
|
|
8090
8223
|
setMenuValue(value) {
|
|
@@ -8217,25 +8350,18 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8217
8350
|
* @private
|
|
8218
8351
|
*/
|
|
8219
8352
|
_handleNativeSelectChange(event) {
|
|
8353
|
+
// Hidden native <select> has no `multiple` attribute, so any change it fires
|
|
8354
|
+
// is a single raw value — applying it in multiSelect mode would collapse the
|
|
8355
|
+
// JSON-array `value` shape. Bfcache/autofill can reach this on a name-bearing
|
|
8356
|
+
// form control even with aria-hidden/tabindex=-1.
|
|
8357
|
+
if (this.multiSelect) return;
|
|
8358
|
+
|
|
8220
8359
|
const selectedOption = event.target.options[event.target.selectedIndex];
|
|
8221
8360
|
if (!selectedOption) return;
|
|
8222
8361
|
const selectedValue = selectedOption.value;
|
|
8223
8362
|
|
|
8224
|
-
if (this.
|
|
8225
|
-
|
|
8226
|
-
|
|
8227
|
-
if (!currentArray.includes(selectedValue)) {
|
|
8228
|
-
this.value = JSON.stringify([
|
|
8229
|
-
...currentArray,
|
|
8230
|
-
selectedValue
|
|
8231
|
-
]);
|
|
8232
|
-
}
|
|
8233
|
-
} else {
|
|
8234
|
-
const currentValue = this.value;
|
|
8235
|
-
|
|
8236
|
-
if (currentValue !== selectedValue) {
|
|
8237
|
-
this.value = selectedValue;
|
|
8238
|
-
}
|
|
8363
|
+
if (this.value !== selectedValue) {
|
|
8364
|
+
this.value = selectedValue;
|
|
8239
8365
|
}
|
|
8240
8366
|
}
|
|
8241
8367
|
|