@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
|
@@ -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 = '202607010104';
|
|
4996
4978
|
|
|
4997
4979
|
class AuroElement extends i$2 {
|
|
4998
4980
|
static get properties() {
|
|
@@ -6264,6 +6246,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6264
6246
|
role="${o(this.triggerContentFocusable ? undefined : this.a11yRole)}"
|
|
6265
6247
|
aria-expanded="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.isPopoverVisible)}"
|
|
6266
6248
|
aria-controls="${o(this.a11yRole === 'button' || this.triggerContentFocusable ? undefined : this.dropdownId)}"
|
|
6249
|
+
aria-haspopup="${o(this.a11yRole === 'combobox' && !this.triggerContentFocusable ? 'listbox' : undefined)}"
|
|
6267
6250
|
aria-labelledby="${o(this.triggerContentFocusable ? undefined : 'triggerLabel')}"
|
|
6268
6251
|
aria-disabled="${o(this.disabled ? 'true' : undefined)}"
|
|
6269
6252
|
@focusin="${this.handleFocusin}"
|
|
@@ -6390,7 +6373,7 @@ class AuroDropdown extends AuroElement {
|
|
|
6390
6373
|
|
|
6391
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)}`;
|
|
6392
6375
|
|
|
6393
|
-
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)}`;
|
|
6394
6377
|
|
|
6395
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)}`;
|
|
6396
6379
|
|
|
@@ -7013,7 +6996,7 @@ class AuroHelpText extends i$2 {
|
|
|
7013
6996
|
}
|
|
7014
6997
|
}
|
|
7015
6998
|
|
|
7016
|
-
var formkitVersion = '
|
|
6999
|
+
var formkitVersion = '202607010104';
|
|
7017
7000
|
|
|
7018
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}`;
|
|
7019
7002
|
|
|
@@ -7345,14 +7328,6 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7345
7328
|
reflect: true
|
|
7346
7329
|
},
|
|
7347
7330
|
|
|
7348
|
-
/**
|
|
7349
|
-
* @private
|
|
7350
|
-
*/
|
|
7351
|
-
options: {
|
|
7352
|
-
type: Array,
|
|
7353
|
-
state: true
|
|
7354
|
-
},
|
|
7355
|
-
|
|
7356
7331
|
/**
|
|
7357
7332
|
* Specifies the current selected menuOption. Default type is `HTMLElement`, changing to `Array<HTMLElement>` when `multiSelect` is true.
|
|
7358
7333
|
* @type {HTMLElement|Array<HTMLElement>}
|
|
@@ -7640,16 +7615,68 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7640
7615
|
this.dropdown.dropdownWidth = this.customBibWidth;
|
|
7641
7616
|
}
|
|
7642
7617
|
|
|
7643
|
-
|
|
7644
|
-
const labelElement = this.querySelector('span[slot="label"]');
|
|
7645
|
-
if (labelElement) {
|
|
7646
|
-
this.dropdown.bibDialogLabel = labelElement.textContent.trim() || undefined;
|
|
7647
|
-
}
|
|
7618
|
+
this._syncLabelText();
|
|
7648
7619
|
|
|
7649
7620
|
// Exposes the CSS parts from the dropdown for styling
|
|
7650
7621
|
this.dropdown.exposeCssParts();
|
|
7651
7622
|
}
|
|
7652
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
|
+
|
|
7653
7680
|
/**
|
|
7654
7681
|
* This will register this element with the browser.
|
|
7655
7682
|
* @param {string} [name="auro-select"] - The name of element that you want to register to.
|
|
@@ -7800,11 +7827,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7800
7827
|
this.updateMenuShapeSize();
|
|
7801
7828
|
this.setMenuValue(this.value);
|
|
7802
7829
|
|
|
7803
|
-
|
|
7804
|
-
const labelElement = this.querySelector('[slot="label"]');
|
|
7805
|
-
if (labelElement) {
|
|
7806
|
-
this.menu.setAttribute('aria-label', labelElement.textContent.trim());
|
|
7807
|
-
}
|
|
7830
|
+
this._syncLabelText();
|
|
7808
7831
|
|
|
7809
7832
|
if (this.multiSelect) {
|
|
7810
7833
|
this.menu.multiSelect = this.multiSelect;
|
|
@@ -7816,8 +7839,21 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7816
7839
|
if (typeof this.menu.initItems === 'function') {
|
|
7817
7840
|
this.menu.initItems();
|
|
7818
7841
|
}
|
|
7819
|
-
this.options = this.menu.options;
|
|
7820
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
|
+
|
|
7821
7857
|
this.menu.addEventListener("auroMenu-loadingChange", (event) => this.handleMenuLoadingChange(event));
|
|
7822
7858
|
|
|
7823
7859
|
this.menu.addEventListener("auroMenu-selectValueFailure", () => {
|
|
@@ -7836,11 +7872,26 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7836
7872
|
this.dropdown.setActiveDescendant(this.optionActive);
|
|
7837
7873
|
}
|
|
7838
7874
|
|
|
7839
|
-
//
|
|
7840
|
-
|
|
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')) {
|
|
7841
7884
|
const optionText = this.optionActive.textContent.trim();
|
|
7842
|
-
const
|
|
7843
|
-
|
|
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
|
+
}
|
|
7844
7895
|
}
|
|
7845
7896
|
|
|
7846
7897
|
if (this.dropdown.isPopoverVisible) {
|
|
@@ -7849,6 +7900,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7849
7900
|
});
|
|
7850
7901
|
|
|
7851
7902
|
this.menu.addEventListener('auroMenu-selectedOption', () => {
|
|
7903
|
+
const previousSelected = this.optionSelected;
|
|
7852
7904
|
|
|
7853
7905
|
// Update the displayed value
|
|
7854
7906
|
this.updateDisplayedValue();
|
|
@@ -7868,13 +7920,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7868
7920
|
this.dropdown.trigger.focus();
|
|
7869
7921
|
}
|
|
7870
7922
|
|
|
7871
|
-
//
|
|
7872
|
-
//
|
|
7873
|
-
|
|
7874
|
-
|
|
7875
|
-
|
|
7876
|
-
|
|
7877
|
-
|
|
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
|
+
}
|
|
7878
7949
|
});
|
|
7879
7950
|
}
|
|
7880
7951
|
|
|
@@ -7972,24 +8043,32 @@ class AuroSelect extends AuroElement$1 {
|
|
|
7972
8043
|
|
|
7973
8044
|
this.typeaheadBuffer += key;
|
|
7974
8045
|
|
|
7975
|
-
|
|
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));
|
|
7976
8052
|
|
|
7977
|
-
|
|
8053
|
+
const isRepeatedChar = !match && this.typeaheadBuffer.length > 1 && new Set(this.typeaheadBuffer).size === 1;
|
|
7978
8054
|
if (isRepeatedChar) {
|
|
7979
8055
|
const matches = options.filter((option) => this._getOptionDisplayText(option).startsWith(key));
|
|
7980
8056
|
if (matches.length) {
|
|
7981
8057
|
const cycleIndex = (this.typeaheadBuffer.length - 1) % matches.length;
|
|
7982
8058
|
match = matches[cycleIndex];
|
|
7983
8059
|
}
|
|
7984
|
-
} else {
|
|
7985
|
-
match = options.find((option) => this._getOptionDisplayText(option).startsWith(this.typeaheadBuffer));
|
|
7986
8060
|
}
|
|
7987
8061
|
|
|
8062
|
+
// Intentional: no-match leaves the bib closed (deviates from APG / some native <select>).
|
|
7988
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);
|
|
7989
8069
|
if (!this.dropdown.isPopoverVisible) {
|
|
7990
8070
|
this.dropdown.show();
|
|
7991
8071
|
}
|
|
7992
|
-
this.menu.updateActiveOption(match);
|
|
7993
8072
|
}
|
|
7994
8073
|
}
|
|
7995
8074
|
|
|
@@ -8106,6 +8185,28 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8106
8185
|
disconnectedCallback() {
|
|
8107
8186
|
super.disconnectedCallback();
|
|
8108
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
|
+
}
|
|
8109
8210
|
}
|
|
8110
8211
|
|
|
8111
8212
|
// lifecycle runs only after the element's DOM has been updated the first time
|
|
@@ -8116,6 +8217,7 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8116
8217
|
this.configureDropdown();
|
|
8117
8218
|
this.configureMenu();
|
|
8118
8219
|
this.configureSelect();
|
|
8220
|
+
this._observeLabelChanges();
|
|
8119
8221
|
}
|
|
8120
8222
|
|
|
8121
8223
|
setMenuValue(value) {
|
|
@@ -8248,25 +8350,18 @@ class AuroSelect extends AuroElement$1 {
|
|
|
8248
8350
|
* @private
|
|
8249
8351
|
*/
|
|
8250
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
|
+
|
|
8251
8359
|
const selectedOption = event.target.options[event.target.selectedIndex];
|
|
8252
8360
|
if (!selectedOption) return;
|
|
8253
8361
|
const selectedValue = selectedOption.value;
|
|
8254
8362
|
|
|
8255
|
-
if (this.
|
|
8256
|
-
|
|
8257
|
-
|
|
8258
|
-
if (!currentArray.includes(selectedValue)) {
|
|
8259
|
-
this.value = JSON.stringify([
|
|
8260
|
-
...currentArray,
|
|
8261
|
-
selectedValue
|
|
8262
|
-
]);
|
|
8263
|
-
}
|
|
8264
|
-
} else {
|
|
8265
|
-
const currentValue = this.value;
|
|
8266
|
-
|
|
8267
|
-
if (currentValue !== selectedValue) {
|
|
8268
|
-
this.value = selectedValue;
|
|
8269
|
-
}
|
|
8363
|
+
if (this.value !== selectedValue) {
|
|
8364
|
+
this.value = selectedValue;
|
|
8270
8365
|
}
|
|
8271
8366
|
}
|
|
8272
8367
|
|
|
@@ -10065,26 +10160,12 @@ class AuroMenuOption extends AuroElement$1 {
|
|
|
10065
10160
|
AuroMenu.register();
|
|
10066
10161
|
AuroMenuOption.register();
|
|
10067
10162
|
|
|
10068
|
-
/* eslint-disable jsdoc/require-jsdoc
|
|
10163
|
+
/* eslint-disable jsdoc/require-jsdoc */
|
|
10069
10164
|
|
|
10070
10165
|
|
|
10071
10166
|
AuroSelect.register();
|
|
10072
10167
|
AuroSelect.register('custom-select');
|
|
10073
10168
|
|
|
10074
|
-
function initExamples(
|
|
10075
|
-
initCount = initCount || 0;
|
|
10076
|
-
|
|
10077
|
-
try {
|
|
10078
|
-
valueExample();
|
|
10079
|
-
resetStateExample();
|
|
10080
|
-
updateActiveOptionExample();
|
|
10081
|
-
} catch (err) {
|
|
10082
|
-
if (initCount <= 20) {
|
|
10083
|
-
setTimeout(() => {
|
|
10084
|
-
initExamples(initCount + 1);
|
|
10085
|
-
}, 100);
|
|
10086
|
-
}
|
|
10087
|
-
}
|
|
10088
|
-
}
|
|
10169
|
+
function initExamples() {}
|
|
10089
10170
|
|
|
10090
10171
|
export { initExamples };
|