@aurodesignsystem-dev/auro-formkit 0.0.0-pr1507.0 → 0.0.0-pr1508.1
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.html +1 -2
- 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/demo/customize.html +1 -2
- package/components/combobox/demo/customize.md +105 -137
- package/components/combobox/demo/customize.min.js +506 -568
- package/components/combobox/demo/getting-started.min.js +506 -564
- package/components/combobox/demo/index.min.js +506 -564
- package/components/combobox/demo/keyboard-behavior.md +2 -142
- package/components/combobox/demo/why-combobox.md +1 -1
- package/components/combobox/dist/auro-combobox.d.ts +30 -14
- package/components/combobox/dist/index.js +505 -563
- package/components/combobox/dist/registered.js +505 -563
- package/components/counter/demo/customize.min.js +26 -8
- package/components/counter/demo/index.min.js +26 -8
- package/components/counter/dist/index.js +26 -8
- package/components/counter/dist/registered.js +26 -8
- package/components/datepicker/demo/accessibility.md +2 -1
- package/components/datepicker/demo/api.md +65 -62
- package/components/datepicker/demo/customize.md +150 -39
- package/components/datepicker/demo/customize.min.js +988 -500
- package/components/datepicker/demo/index.min.js +988 -482
- 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} +80 -5
- package/components/datepicker/dist/blackoutUtils.d.ts +43 -0
- package/components/datepicker/dist/index.js +988 -482
- package/components/datepicker/dist/registered.js +988 -482
- package/components/dropdown/demo/customize.min.js +10 -1
- package/components/dropdown/demo/getting-started.min.js +10 -1
- package/components/dropdown/demo/index.min.js +10 -1
- package/components/dropdown/dist/auro-dropdown.d.ts +1 -0
- package/components/dropdown/dist/index.js +10 -1
- package/components/dropdown/dist/registered.js +10 -1
- package/components/form/demo/customize.html +6 -6
- package/components/form/demo/customize.md +203 -51
- package/components/form/demo/customize.min.js +2357 -1419
- package/components/form/demo/getting-started.min.js +2285 -1419
- package/components/form/demo/index.min.js +2285 -1419
- package/components/form/demo/registerDemoDeps.min.js +1922 -1382
- package/components/form/dist/auro-form.d.ts +122 -4
- package/components/form/dist/index.js +363 -37
- package/components/form/dist/registered.js +363 -37
- package/components/input/demo/api.md +5 -5
- package/components/input/demo/customize.html +1 -2
- package/components/input/demo/customize.md +62 -61
- package/components/input/demo/customize.min.js +177 -241
- package/components/input/demo/getting-started.min.js +177 -241
- package/components/input/demo/index.min.js +177 -241
- package/components/input/dist/base-input.d.ts +34 -93
- package/components/input/dist/index.js +190 -242
- package/components/input/dist/registered.js +177 -241
- 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.html +1 -2
- package/components/select/demo/customize.md +86 -0
- package/components/select/demo/customize.min.js +202 -68
- package/components/select/demo/getting-started.min.js +204 -115
- package/components/select/demo/index.min.js +202 -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 +202 -68
- package/components/select/dist/registered.js +202 -68
- package/custom-elements.json +1035 -604
- 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 -19
- 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 -9
- 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
|
@@ -1,34 +1,3 @@
|
|
|
1
|
-
function valueExample() {
|
|
2
|
-
const valueExample = document.querySelector('#valueExample');
|
|
3
|
-
|
|
4
|
-
document.querySelector('#validValueExampleBtn').addEventListener('click', () => {
|
|
5
|
-
valueExample.value = '["arrival", "prefer alaska"]';
|
|
6
|
-
});
|
|
7
|
-
|
|
8
|
-
document.querySelector('#invalidValueExampleBtn').addEventListener('click', () => {
|
|
9
|
-
valueExample.value = '["flight course"]';
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
function resetStateExample() {
|
|
14
|
-
const elem = document.querySelector('#resetStateExample');
|
|
15
|
-
|
|
16
|
-
document.querySelector('#resetStateBtn').addEventListener('click', () => {
|
|
17
|
-
elem.reset();
|
|
18
|
-
});
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function updateActiveOptionExample() {
|
|
22
|
-
const select = document.getElementById('updateActiveOptionExample');
|
|
23
|
-
const dropdown = select.dropdown;
|
|
24
|
-
|
|
25
|
-
dropdown.addEventListener('auroDropdown-toggled', () => {
|
|
26
|
-
if (dropdown.isPopoverVisible) {
|
|
27
|
-
select.updateActiveOption(2); // Set the active option to the third item (index 2)
|
|
28
|
-
}
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
1
|
/**
|
|
33
2
|
* @license
|
|
34
3
|
* Copyright 2019 Google LLC
|
|
@@ -584,15 +553,17 @@ class AuroFormValidation {
|
|
|
584
553
|
);
|
|
585
554
|
}
|
|
586
555
|
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
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) {
|
|
590
563
|
hasValue = false;
|
|
591
564
|
}
|
|
592
565
|
}
|
|
593
566
|
|
|
594
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
595
|
-
|
|
596
567
|
if (isCombobox) {
|
|
597
568
|
|
|
598
569
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -990,19 +961,28 @@ const selectKeyboardStrategy = {
|
|
|
990
961
|
},
|
|
991
962
|
|
|
992
963
|
End(component, evt, ctx) {
|
|
993
|
-
if (!ctx.isExpanded) {
|
|
994
|
-
return;
|
|
995
|
-
}
|
|
996
964
|
evt.preventDefault();
|
|
997
965
|
evt.stopPropagation();
|
|
998
966
|
// `pop()` is safe here: getEnabledOptions returns a fresh filtered array.
|
|
999
967
|
const lastOption = getEnabledOptions(component.menu).pop();
|
|
1000
|
-
if (lastOption) {
|
|
1001
|
-
|
|
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();
|
|
1002
978
|
}
|
|
1003
979
|
},
|
|
1004
980
|
|
|
1005
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.
|
|
1006
986
|
evt.preventDefault();
|
|
1007
987
|
evt.stopPropagation();
|
|
1008
988
|
if (!ctx.isExpanded) {
|
|
@@ -1013,14 +993,16 @@ const selectKeyboardStrategy = {
|
|
|
1013
993
|
},
|
|
1014
994
|
|
|
1015
995
|
Home(component, evt, ctx) {
|
|
1016
|
-
if (!ctx.isExpanded) {
|
|
1017
|
-
return;
|
|
1018
|
-
}
|
|
1019
996
|
evt.preventDefault();
|
|
1020
997
|
evt.stopPropagation();
|
|
1021
998
|
const [firstOption] = getEnabledOptions(component.menu);
|
|
1022
|
-
if (firstOption) {
|
|
1023
|
-
|
|
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();
|
|
1024
1006
|
}
|
|
1025
1007
|
},
|
|
1026
1008
|
|
|
@@ -4992,7 +4974,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
4992
4974
|
}
|
|
4993
4975
|
};
|
|
4994
4976
|
|
|
4995
|
-
var formkitVersion$1 = '
|
|
4977
|
+
var formkitVersion$1 = '202607010100';
|
|
4996
4978
|
|
|
4997
4979
|
class AuroElement extends i$2 {
|
|
4998
4980
|
static get properties() {
|
|
@@ -5943,6 +5925,14 @@ class AuroDropdown extends AuroElement {
|
|
|
5943
5925
|
};
|
|
5944
5926
|
this.addEventListener('keydown', this._bibTabHandler);
|
|
5945
5927
|
|
|
5928
|
+
// Suppress AuroFloatingUI's auto-hide-on-focus-loss while the
|
|
5929
|
+
// desktopModal trap owns focus management. Without this, the very
|
|
5930
|
+
// first focus move into the bib (from the RAF below) triggers
|
|
5931
|
+
// handleFocusLoss → hideBib, tearing down the trap before the
|
|
5932
|
+
// user can press Tab.
|
|
5933
|
+
this._priorNoHideOnFocusLoss = this.noHideOnThisFocusLoss;
|
|
5934
|
+
this.noHideOnThisFocusLoss = true;
|
|
5935
|
+
|
|
5946
5936
|
// Move initial focus into the bib content, matching FocusTrap behavior
|
|
5947
5937
|
requestAnimationFrame(() => {
|
|
5948
5938
|
const focusables = getFocusableElements(this.bibContent);
|
|
@@ -6256,6 +6246,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6256
6246
|
role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
|
|
6257
6247
|
aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
|
|
6258
6248
|
aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
|
|
6249
|
+
aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
|
|
6259
6250
|
aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
|
|
6260
6251
|
aria-disabled="${o(this.disabled ? 'true' : undefined)}"
|
|
6261
6252
|
@focusin="${this.handleFocusin}"
|
|
@@ -6382,7 +6373,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6382
6373
|
|
|
6383
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)}`;
|
|
6384
6375
|
|
|
6385
|
-
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)}`;
|
|
6386
6377
|
|
|
6387
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)}`;
|
|
6388
6379
|
|
|
@@ -7005,7 +6996,7 @@ class AuroHelpText extends i$2 {
|
|
|
7005
6996
|
}
|
|
7006
6997
|
}
|
|
7007
6998
|
|
|
7008
|
-
var formkitVersion = '
|
|
6999
|
+
var formkitVersion = '202607010100';
|
|
7009
7000
|
|
|
7010
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}`;
|
|
7011
7002
|
|
|
@@ -7337,14 +7328,6 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7337
7328
|
reflect: true
|
|
7338
7329
|
},
|
|
7339
7330
|
|
|
7340
|
-
/**
|
|
7341
|
-
* @private
|
|
7342
|
-
*/
|
|
7343
|
-
options: {
|
|
7344
|
-
type: Array,
|
|
7345
|
-
state: true
|
|
7346
|
-
},
|
|
7347
|
-
|
|
7348
7331
|
/**
|
|
7349
7332
|
* Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
|
|
7350
7333
|
* @type {HTMLElement|Array<HTMLElement>}
|
|
@@ -7632,16 +7615,68 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7632
7615
|
this.dropdown.dropdownWidth = this.customBibWidth;
|
|
7633
7616
|
}
|
|
7634
7617
|
|
|
7635
|
-
|
|
7636
|
-
const labelElement = this.querySelector('span[slot="label"]');
|
|
7637
|
-
if (labelElement) {
|
|
7638
|
-
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
7639
|
-
}
|
|
7618
|
+
this._syncLabelText();
|
|
7640
7619
|
|
|
7641
7620
|
// Exposes the CSS parts from the dropdown for styling
|
|
7642
7621
|
this.dropdown.exposeCssParts();
|
|
7643
7622
|
}
|
|
7644
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
|
+
|
|
7645
7680
|
/**
|
|
7646
7681
|
* This will register this element with the browser.
|
|
7647
7682
|
* @param {string} [name="auro-select"] - The name of element that you want to register to.
|
|
@@ -7792,11 +7827,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7792
7827
|
this.updateMenuShapeSize();
|
|
7793
7828
|
this.setMenuValue(this.value);
|
|
7794
7829
|
|
|
7795
|
-
|
|
7796
|
-
const labelElement = this.querySelector('[slot="label"]');
|
|
7797
|
-
if (labelElement) {
|
|
7798
|
-
this.menu.setAttribute('aria-label', labelElement.textContent.trim());
|
|
7799
|
-
}
|
|
7830
|
+
this._syncLabelText();
|
|
7800
7831
|
|
|
7801
7832
|
if (this.multiSelect) {
|
|
7802
7833
|
this.menu.multiSelect = this.multiSelect;
|
|
@@ -7808,8 +7839,21 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7808
7839
|
if (typeof this.menu.initItems === 'function') {
|
|
7809
7840
|
this.menu.initItems();
|
|
7810
7841
|
}
|
|
7811
|
-
this.options = this.menu.options;
|
|
7812
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
|
+
|
|
7813
7857
|
this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
|
|
7814
7858
|
|
|
7815
7859
|
this.menu.addEventListener("auroMenu-selectValueFailure", () => {
|
|
@@ -7828,11 +7872,26 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7828
7872
|
this.dropdown.setActiveDescendant(this.optionActive);
|
|
7829
7873
|
}
|
|
7830
7874
|
|
|
7831
|
-
//
|
|
7832
|
-
|
|
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')) {
|
|
7833
7884
|
const optionText = this.optionActive.textContent.trim();
|
|
7834
|
-
const
|
|
7835
|
-
|
|
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
|
+
}
|
|
7836
7895
|
}
|
|
7837
7896
|
|
|
7838
7897
|
if (this.dropdown.isPopoverVisible) {
|
|
@@ -7841,6 +7900,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7841
7900
|
});
|
|
7842
7901
|
|
|
7843
7902
|
this.menu.addEventListener('auroMenu-selectedOption', () => {
|
|
7903
|
+
const previousSelected = this.optionSelected;
|
|
7844
7904
|
|
|
7845
7905
|
// Update the displayed value
|
|
7846
7906
|
this.updateDisplayedValue();
|
|
@@ -7860,13 +7920,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7860
7920
|
this.dropdown.trigger.focus();
|
|
7861
7921
|
}
|
|
7862
7922
|
|
|
7863
|
-
//
|
|
7864
|
-
//
|
|
7865
|
-
|
|
7866
|
-
|
|
7867
|
-
|
|
7868
|
-
|
|
7869
|
-
|
|
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
|
+
}
|
|
7870
7949
|
});
|
|
7871
7950
|
}
|
|
7872
7951
|
|
|
@@ -7964,24 +8043,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7964
8043
|
|
|
7965
8044
|
this.typeaheadBuffer += key;
|
|
7966
8045
|
|
|
7967
|
-
|
|
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));
|
|
7968
8052
|
|
|
7969
|
-
|
|
8053
|
+
const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
|
|
7970
8054
|
if (isRepeatedChar) {
|
|
7971
8055
|
const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
|
|
7972
8056
|
if (matches.length) {
|
|
7973
8057
|
const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
|
|
7974
8058
|
match = matches[cycleIndex];
|
|
7975
8059
|
}
|
|
7976
|
-
} else {
|
|
7977
|
-
match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
|
|
7978
8060
|
}
|
|
7979
8061
|
|
|
8062
|
+
// Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
|
|
7980
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);
|
|
7981
8069
|
if (!this.dropdown.isPopoverVisible) {
|
|
7982
8070
|
this.dropdown.show();
|
|
7983
8071
|
}
|
|
7984
|
-
this.menu.updateActiveOption(match);
|
|
7985
8072
|
}
|
|
7986
8073
|
}
|
|
7987
8074
|
|
|
@@ -8098,6 +8185,28 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8098
8185
|
disconnectedCallback() {
|
|
8099
8186
|
super.disconnectedCallback();
|
|
8100
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
|
+
}
|
|
8101
8210
|
}
|
|
8102
8211
|
|
|
8103
8212
|
// lifecycle runs only after the element's DOM has been updated the first time
|
|
@@ -8108,6 +8217,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8108
8217
|
this.configureDropdown();
|
|
8109
8218
|
this.configureMenu();
|
|
8110
8219
|
this.configureSelect();
|
|
8220
|
+
this._observeLabelChanges();
|
|
8111
8221
|
}
|
|
8112
8222
|
|
|
8113
8223
|
setMenuValue(value) {
|
|
@@ -8240,25 +8350,18 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8240
8350
|
* @private
|
|
8241
8351
|
*/
|
|
8242
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
|
+
|
|
8243
8359
|
const selectedOption = event.target.options[event.target.selectedIndex];
|
|
8244
8360
|
if (!selectedOption) return;
|
|
8245
8361
|
const selectedValue = selectedOption.value;
|
|
8246
8362
|
|
|
8247
|
-
if (this.
|
|
8248
|
-
|
|
8249
|
-
|
|
8250
|
-
if (!currentArray.includes(selectedValue)) {
|
|
8251
|
-
this.value = JSON.stringify([
|
|
8252
|
-
...currentArray,
|
|
8253
|
-
selectedValue
|
|
8254
|
-
]);
|
|
8255
|
-
}
|
|
8256
|
-
} else {
|
|
8257
|
-
const currentValue = this.value;
|
|
8258
|
-
|
|
8259
|
-
if (currentValue !== selectedValue) {
|
|
8260
|
-
this.value = selectedValue;
|
|
8261
|
-
}
|
|
8363
|
+
if (this.value !== selectedValue) {
|
|
8364
|
+
this.value = selectedValue;
|
|
8262
8365
|
}
|
|
8263
8366
|
}
|
|
8264
8367
|
|
|
@@ -10057,26 +10160,12 @@ class AuroMenuOption extends AuroElement$1 {
|
|
|
10057
10160
|
AuroMenu.register();
|
|
10058
10161
|
AuroMenuOption.register();
|
|
10059
10162
|
|
|
10060
|
-
/* eslint-disable jsdoc/require-jsdoc
|
|
10163
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
10061
10164
|
|
|
10062
10165
|
|
|
10063
10166
|
AuroSelect.register();
|
|
10064
10167
|
AuroSelect.register('custom-select');
|
|
10065
10168
|
|
|
10066
|
-
function initExamples(
|
|
10067
|
-
initCount = initCount || 0;
|
|
10068
|
-
|
|
10069
|
-
try {
|
|
10070
|
-
valueExample();
|
|
10071
|
-
resetStateExample();
|
|
10072
|
-
updateActiveOptionExample();
|
|
10073
|
-
} catch (err) {
|
|
10074
|
-
if (initCount <= 20) {
|
|
10075
|
-
setTimeout(() => {
|
|
10076
|
-
initExamples(initCount + 1);
|
|
10077
|
-
}, 100);
|
|
10078
|
-
}
|
|
10079
|
-
}
|
|
10080
|
-
}
|
|
10169
|
+
function initExamples() {}
|
|
10081
10170
|
|
|
10082
10171
|
export { initExamples };
|