@aurodesignsystem-dev/auro-formkit 0.0.0-pr1515.4 → 0.0.0-pr1518.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +383 -467
- package/components/combobox/demo/getting-started.min.js +383 -463
- package/components/combobox/demo/index.md +1 -1
- package/components/combobox/demo/index.min.js +383 -463
- 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 +30 -14
- package/components/combobox/dist/index.js +383 -463
- package/components/combobox/dist/registered.js +383 -463
- package/components/counter/demo/customize.min.js +10 -8
- package/components/counter/demo/index.min.js +10 -8
- package/components/counter/dist/index.js +10 -8
- package/components/counter/dist/registered.js +10 -8
- package/components/datepicker/demo/customize.min.js +226 -206
- package/components/datepicker/demo/index.min.js +226 -206
- package/components/datepicker/dist/auro-calendar-cell.d.ts +6 -0
- package/components/datepicker/dist/auro-calendar.d.ts +30 -1
- package/components/datepicker/dist/index.js +226 -206
- package/components/datepicker/dist/registered.js +226 -206
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +1 -1
- package/components/dropdown/demo/index.min.js +1 -1
- package/components/dropdown/dist/index.js +1 -1
- package/components/dropdown/dist/registered.js +1 -1
- package/components/form/demo/customize.min.js +712 -856
- package/components/form/demo/getting-started.min.js +712 -856
- package/components/form/demo/index.min.js +712 -856
- package/components/form/demo/registerDemoDeps.min.js +712 -856
- package/components/input/demo/customize.min.js +67 -159
- package/components/input/demo/getting-started.min.js +67 -159
- package/components/input/demo/index.min.js +67 -159
- package/components/input/dist/auro-input.d.ts +1 -1
- package/components/input/dist/base-input.d.ts +3 -51
- package/components/input/dist/index.js +67 -159
- package/components/input/dist/registered.js +67 -159
- package/components/input/dist/utilities.d.ts +1 -1
- 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.min.js +10 -8
- package/components/select/demo/getting-started.min.js +10 -8
- package/components/select/demo/index.min.js +10 -8
- package/components/select/dist/index.js +10 -8
- package/components/select/dist/registered.js +10 -8
- package/custom-elements.json +1472 -1668
- package/package.json +1 -1
|
@@ -500,15 +500,17 @@ let AuroFormValidation$1 = class AuroFormValidation {
|
|
|
500
500
|
);
|
|
501
501
|
}
|
|
502
502
|
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
503
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
504
|
+
|
|
505
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
506
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
507
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
508
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
509
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
506
510
|
hasValue = false;
|
|
507
511
|
}
|
|
508
512
|
}
|
|
509
513
|
|
|
510
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
511
|
-
|
|
512
514
|
if (isCombobox) {
|
|
513
515
|
|
|
514
516
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -825,6 +827,8 @@ function navigateArrow(component, direction, options = {}) {
|
|
|
825
827
|
}
|
|
826
828
|
}
|
|
827
829
|
|
|
830
|
+
/* eslint-disable no-underscore-dangle */
|
|
831
|
+
|
|
828
832
|
/**
|
|
829
833
|
* Returns the clear button element from the active input's shadow
|
|
830
834
|
* DOM, if available.
|
|
@@ -860,11 +864,9 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
|
|
|
860
864
|
* @param {Object} menu - The menu component.
|
|
861
865
|
*/
|
|
862
866
|
function reconcileMenuIndex(menu) {
|
|
863
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
864
867
|
if (menu._index < 0 && menu.optionActive && menu.items) {
|
|
865
868
|
const idx = menu.items.indexOf(menu.optionActive);
|
|
866
869
|
if (idx >= 0) {
|
|
867
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
868
870
|
menu._index = idx;
|
|
869
871
|
}
|
|
870
872
|
}
|
|
@@ -883,11 +885,7 @@ const comboboxKeyboardStrategy = {
|
|
|
883
885
|
|
|
884
886
|
// navigate if bib is open otherwise open it
|
|
885
887
|
if (component.dropdown.isPopoverVisible) {
|
|
886
|
-
|
|
887
|
-
component.activateLastEnabledAvailableOption();
|
|
888
|
-
} else {
|
|
889
|
-
navigateArrow(component, 'down');
|
|
890
|
-
}
|
|
888
|
+
navigateArrow(component, 'down');
|
|
891
889
|
} else {
|
|
892
890
|
component.showBib();
|
|
893
891
|
}
|
|
@@ -906,11 +904,7 @@ const comboboxKeyboardStrategy = {
|
|
|
906
904
|
|
|
907
905
|
// navigate if bib is open otherwise open it
|
|
908
906
|
if (component.dropdown.isPopoverVisible) {
|
|
909
|
-
|
|
910
|
-
component.activateFirstEnabledAvailableOption();
|
|
911
|
-
} else {
|
|
912
|
-
navigateArrow(component, 'up');
|
|
913
|
-
}
|
|
907
|
+
navigateArrow(component, 'up');
|
|
914
908
|
} else {
|
|
915
909
|
component.showBib();
|
|
916
910
|
}
|
|
@@ -926,13 +920,18 @@ const comboboxKeyboardStrategy = {
|
|
|
926
920
|
},
|
|
927
921
|
|
|
928
922
|
Enter(component, evt, ctx) {
|
|
923
|
+
// Forms should not submit on Enter from a combobox, regardless of which
|
|
924
|
+
// child element (input, clear button, menu) is focused.
|
|
925
|
+
evt.stopPropagation();
|
|
926
|
+
|
|
929
927
|
if (isClearBtnFocused(ctx)) {
|
|
930
|
-
//
|
|
931
|
-
//
|
|
932
|
-
//
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
928
|
+
// Let the browser dispatch Enter to the focused clear button so its
|
|
929
|
+
// built-in activation fires and clears the selection. Do NOT call
|
|
930
|
+
// preventDefault — that would block the activation.
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
if (ctx.isExpanded && component.menu.optionActive) {
|
|
936
935
|
reconcileMenuIndex(component.menu);
|
|
937
936
|
component.menu.makeSelection();
|
|
938
937
|
|
|
@@ -941,14 +940,8 @@ const comboboxKeyboardStrategy = {
|
|
|
941
940
|
}
|
|
942
941
|
|
|
943
942
|
evt.preventDefault();
|
|
944
|
-
evt.stopPropagation();
|
|
945
943
|
} else {
|
|
946
|
-
// Prevent the keypress from bubbling to parent containers (e.g., forms)
|
|
947
|
-
// which could interpret Enter as a submit or trigger other unintended behavior.
|
|
948
|
-
// This is safe because showBib() opens the dialog programmatically,
|
|
949
|
-
// not via event propagation.
|
|
950
944
|
evt.preventDefault();
|
|
951
|
-
evt.stopPropagation();
|
|
952
945
|
component.showBib();
|
|
953
946
|
}
|
|
954
947
|
},
|
|
@@ -993,7 +986,7 @@ const comboboxKeyboardStrategy = {
|
|
|
993
986
|
component.setClearBtnFocus();
|
|
994
987
|
}
|
|
995
988
|
}
|
|
996
|
-
}
|
|
989
|
+
}
|
|
997
990
|
};
|
|
998
991
|
|
|
999
992
|
/**
|
|
@@ -4888,7 +4881,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
|
|
|
4888
4881
|
}
|
|
4889
4882
|
};
|
|
4890
4883
|
|
|
4891
|
-
var formkitVersion$2 = '
|
|
4884
|
+
var formkitVersion$2 = '202607011652';
|
|
4892
4885
|
|
|
4893
4886
|
let AuroElement$2 = class AuroElement extends i$3 {
|
|
4894
4887
|
static get properties() {
|
|
@@ -6294,7 +6287,7 @@ const u$4=(e,s,t)=>{const r=new Map;for(let l=s;l<=t;l++)r.set(e[l],l);return r}
|
|
|
6294
6287
|
|
|
6295
6288
|
var shapeSizeCss = i$6`.shape-classic-xl,.shape-classic-lg,.shape-classic-md,.shape-classic-sm,.shape-classic-xs{min-height:56px;max-height:56px;border-style:solid;border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}.shape-classic-xl.simple,.shape-classic-lg.simple,.shape-classic-md.simple,.shape-classic-sm.simple,.shape-classic-xs.simple{border-width:0px;min-height:58px;max-height:58px;background-color:unset;box-shadow:none}.shape-classic-xl.thin,.shape-classic-lg.thin,.shape-classic-md.thin,.shape-classic-sm.thin,.shape-classic-xs.thin{border-width:1px;min-height:56px;max-height:56px;background-color:unset}.shape-classic-xl.parentBorder,.shape-classic-lg.parentBorder,.shape-classic-md.parentBorder,.shape-classic-sm.parentBorder,.shape-classic-xs.parentBorder{border:0;box-shadow:unset;min-height:54px;max-height:54px}.shape-snowflake-xl,.shape-snowflake-lg,.shape-snowflake-md,.shape-snowflake-sm,.shape-snowflake-xs{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:30px}.shape-snowflake-xl.simple,.shape-snowflake-lg.simple,.shape-snowflake-md.simple,.shape-snowflake-sm.simple,.shape-snowflake-xs.simple{border-width:0px;min-height:60px;max-height:60px;background-color:unset;box-shadow:none}.shape-snowflake-xl.thin,.shape-snowflake-lg.thin,.shape-snowflake-md.thin,.shape-snowflake-sm.thin,.shape-snowflake-xs.thin{border-width:1px;min-height:58px;max-height:58px;background-color:unset}.shape-snowflake-xl.parentBorder,.shape-snowflake-lg.parentBorder,.shape-snowflake-md.parentBorder,.shape-snowflake-sm.parentBorder,.shape-snowflake-xs.parentBorder{border:0;box-shadow:unset;min-height:56px;max-height:56px}.shape-box-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-box-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-box-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-box-lg{min-height:52px;max-height:52px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-lg.simple{border-width:0px;min-height:56px;max-height:56px;background-color:unset;box-shadow:none}.shape-box-lg.thin{border-width:1px;min-height:54px;max-height:54px;background-color:unset}.shape-box-lg.parentBorder{border:0;box-shadow:unset;min-height:52px;max-height:52px}.shape-box-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-box-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-box-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-box-sm{min-height:32px;max-height:32px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-sm.simple{border-width:0px;min-height:36px;max-height:36px;background-color:unset;box-shadow:none}.shape-box-sm.thin{border-width:1px;min-height:34px;max-height:34px;background-color:unset}.shape-box-sm.parentBorder{border:0;box-shadow:unset;min-height:32px;max-height:32px}.shape-box-xs{min-height:20px;max-height:20px;border-style:solid;border-width:2px;border-color:transparent}.shape-box-xs.simple{border-width:0px;min-height:24px;max-height:24px;background-color:unset;box-shadow:none}.shape-box-xs.thin{border-width:1px;min-height:22px;max-height:22px;background-color:unset}.shape-box-xs.parentBorder{border:0;box-shadow:unset;min-height:20px;max-height:20px}.shape-rounded-lg{min-height:56px;max-height:56px;border-style:solid;border-width:2px;border-color:transparent;border-radius:6px}.shape-rounded-lg.simple{border-width:0px;min-height:56px;max-height:56px;background-color:unset;box-shadow:none}.shape-rounded-lg.thin{border-width:1px;min-height:54px;max-height:54px;background-color:unset}.shape-rounded-lg.parentBorder{border:0;box-shadow:unset;min-height:52px;max-height:52px}.shape-pill-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-left-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-left-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-left-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-right-xl{min-height:68px;max-height:68px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-xl.simple{border-width:0px;min-height:72px;max-height:72px;background-color:unset;box-shadow:none}.shape-pill-right-xl.thin{border-width:1px;min-height:70px;max-height:70px;background-color:unset}.shape-pill-right-xl.parentBorder{border:0;box-shadow:unset;min-height:68px;max-height:68px}.shape-pill-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px}.shape-pill-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-left-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:36px 0 0 36px}.shape-pill-left-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-left-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-left-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}.shape-pill-right-md{min-height:44px;max-height:44px;border-style:solid;border-width:2px;border-color:transparent;border-radius:0 36px 36px 0}.shape-pill-right-md.simple{border-width:0px;min-height:48px;max-height:48px;background-color:unset;box-shadow:none}.shape-pill-right-md.thin{border-width:1px;min-height:46px;max-height:46px;background-color:unset}.shape-pill-right-md.parentBorder{border:0;box-shadow:unset;min-height:44px;max-height:44px}`;
|
|
6296
6289
|
|
|
6297
|
-
var styleCss$1$1 = i$6`.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}:host{display:block}.wrapper:has(:enabled){cursor:text}.wrapper:has(:enabled) label{cursor:text}.helpTextClasses{cursor:default}input{overflow:clip !important;width:100%;padding:0;border:0;background:unset;outline:none;overflow-clip-margin:0 !important;text-overflow:ellipsis}input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.displayValue{display:none}.displayValue.hasContent:is(.withValue):not(.hasFocus){display:flex;align-items:center}.accents:not(.util_displayHidden){display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px}.wrapper:not(:focus-within):not(:hover) .notificationBtn.passwordBtn,.wrapper:not(:focus-within):not(:hover) .notification.clear{display:none}.notification{display:flex;align-items:center;justify-content:center}`;
|
|
6290
|
+
var styleCss$1$1 = i$6`.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}:host{display:block}.wrapper:has(:enabled){cursor:text}.wrapper:has(:enabled) label{cursor:text}.helpTextClasses{cursor:default}input{overflow:clip !important;width:100%;padding:0;border:0;background:unset;outline:none;overflow-clip-margin:0 !important;text-overflow:ellipsis}input[type=number]{appearance:textfield}input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none}.displayValue{display:none}.displayValue.hasContent:is(.withValue):not(.hasFocus){display:flex;align-items:center}.accents:not(.util_displayHidden){display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px}.wrapper:not(:focus-within):not(:hover) .notificationBtn.passwordBtn,.wrapper:not(:focus-within):not(:hover) .notification.clear{display:none}.notification{display:flex;align-items:center;justify-content:center}`;
|
|
6298
6291
|
|
|
6299
6292
|
var styleDefaultCss = i$6`.layoutDefault .typeIcon,:host(:not([layout])) .typeIcon{display:flex;flex-direction:row;align-items:center}.layoutDefault .typeIcon [auro-icon],:host(:not([layout])) .typeIcon [auro-icon]{--ds-auro-icon-size: var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);margin-right:var(--ds-size-100, 0.5rem)}.layoutDefault .notificationIcons,:host(:not([layout])) .notificationIcons{display:flex;flex-direction:row;padding-right:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .typeIcon,:host(:not([layout])[bordered]) .typeIcon{padding-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .notificationIcons,:host(:not([layout])[bordered]) .notificationIcons{align-items:center}:host([class=layoutDefault][bordered]) .notification:not(:first-of-type),:host(:not([layout])[bordered]) .notification:not(:first-of-type){margin-left:var(--ds-size-100, 0.5rem)}:host([class=layoutDefault][bordered]) .alertNotification,:host(:not([layout])[bordered]) .alertNotification{width:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-300, 1.5rem) + var(--ds-size-25, 0.125rem))}:host([class=layoutDefault][bordered]) .passwordBtn,:host(:not([layout])[bordered]) .passwordBtn{width:calc(var(--ds-size-300, 1.5rem));height:calc(var(--ds-size-300, 1.5rem))}:host([class=layoutDefault][bordered]) .notificationBtn,:host(:not([layout])[bordered]) .notificationBtn{display:block;width:var(--ds-size-300, 1.5rem);height:var(--ds-size-300, 1.5rem);padding:0;border:0;background:unset;cursor:pointer}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon],:host(:not([layout])[bordered]) .notificationBtn [auro-icon]{display:block;height:var(--ds-size-300, 1.5rem);--ds-auro-icon-size: var(--ds-size-300, 1.5rem)}:host([class=layoutDefault][bordered]) .notificationBtn [auro-icon][hidden],:host(:not([layout])[bordered]) .notificationBtn [auro-icon][hidden]{display:none}:host([class=layoutDefault]:not([bordered])) .typeIcon,:host([class=layoutDefault]:not([bordered])) .notificationIcons,:host(:not([layout]):not([bordered])) .typeIcon,:host(:not([layout]):not([bordered])) .notificationIcons{align-items:flex-end;padding-bottom:var(--ds-size-50, 0.25rem)}:host([class=layoutDefault]:not([bordered])) .clearBtn,:host(:not([layout]):not([bordered])) .clearBtn{transition:all .3s cubic-bezier(0.215, 0.61, 0.355, 1);overflow:hidden;width:0;opacity:0}.layoutDefault .wrapper:hover .clearBtn,.layoutDefault .wrapper:focus-within .clearBtn,:host(:not([layout])) .wrapper:hover .clearBtn,:host(:not([layout])) .wrapper:focus-within .clearBtn{width:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));height:calc(var(--ds-size-200, 1rem) + var(--ds-size-25, 0.125rem));opacity:1}:host([class=layoutDefault]:focus-within[type=password]) .notificationIcons[hasValue] .alertNotification,:host(:not([layout]):focus-within[type=password]) .notificationIcons[hasValue] .alertNotification{overflow:hidden;width:0;height:0;padding:0;margin:0;visibility:hidden}.layoutDefault input,:host(:not([layout])) input{border:unset}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{position:relative;overflow:hidden;border-style:solid}:host([class=layoutDefault]:not([bordered],[borderless])) .wrapper,:host(:not([layout]):not([bordered],[borderless])) .wrapper{border-width:1px 0}:host([class=layoutDefault][bordered]) .wrapper,:host(:not([layout])[bordered]) .wrapper{border-width:1px;border-radius:var(--ds-border-radius, 0.375rem)}:host([class=layoutDefault]:not([borderless])) .wrapper:focus-within:before,:host(:not([layout]):not([borderless])) .wrapper:focus-within:before{position:absolute;display:block;border-bottom-width:1px;border-bottom-style:solid;content:"";inset:0;pointer-events:none}:host([class=layoutDefault][validity]:not([validity=valid])) .wrapper:before,:host(:not([layout])[validity]:not([validity=valid])) .wrapper:before{border-bottom:0}:focus:not(:focus-visible){outline:3px solid transparent}.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock,:host{display:block}.util_displayFlex{display:flex}.util_displayHidden,:host([hidden]:not(:focus):not(:active)){display:none}.util_displayHiddenVisually,:host([hiddenVisually]:not(:focus):not(:active)){position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{text-align:left}.layoutDefault :host,:host(:not([layout])) :host{position:relative;display:block}.layoutDefault .wrapper,:host(:not([layout])) .wrapper{display:flex;flex-direction:row}.layoutDefault .main,:host(:not([layout])) .main{display:flex;flex-direction:row;position:relative;flex:1}`;
|
|
6300
6293
|
|
|
@@ -10670,15 +10663,17 @@ class AuroFormValidation {
|
|
|
10670
10663
|
);
|
|
10671
10664
|
}
|
|
10672
10665
|
|
|
10673
|
-
|
|
10674
|
-
|
|
10675
|
-
|
|
10666
|
+
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
10667
|
+
|
|
10668
|
+
// If there is a second input in the elem and that value is undefined or an empty string set hasValue to false.
|
|
10669
|
+
// Skip for combobox: its second auro-input is the fullscreen-bib mirror of the same value, not an independent
|
|
10670
|
+
// field (datepicker is the intended consumer — start/end are independently required).
|
|
10671
|
+
if (this.auroInputElements?.length === 2 && !isCombobox) {
|
|
10672
|
+
if (!this.auroInputElements[1].value || this.auroInputElements[1].value.length === 0) {
|
|
10676
10673
|
hasValue = false;
|
|
10677
10674
|
}
|
|
10678
10675
|
}
|
|
10679
10676
|
|
|
10680
|
-
const isCombobox = this.runtimeUtils.elementMatch(elem, 'auro-combobox');
|
|
10681
|
-
|
|
10682
10677
|
if (isCombobox) {
|
|
10683
10678
|
|
|
10684
10679
|
if (!elem.persistInput || elem.behavior === "filter") {
|
|
@@ -16359,8 +16354,6 @@ function cleanEscapedString(input) {
|
|
|
16359
16354
|
return input.match(escapedStringRegExp)[1].replace(doubleQuoteRegExp, "'");
|
|
16360
16355
|
}
|
|
16361
16356
|
|
|
16362
|
-
/* eslint-disable max-lines */
|
|
16363
|
-
|
|
16364
16357
|
class AuroInputUtilities {
|
|
16365
16358
|
|
|
16366
16359
|
/**
|
|
@@ -16403,7 +16396,7 @@ class AuroInputUtilities {
|
|
|
16403
16396
|
/**
|
|
16404
16397
|
* Converts an IMask-style date mask to a date-fns compatible format string.
|
|
16405
16398
|
* @param {string} mask - IMask date mask (e.g. "MM/DD/YYYY").
|
|
16406
|
-
* @returns {string} date-fns format string (e.g. "MM/dd/yyyy").
|
|
16399
|
+
* @returns {string} A date-fns format string (e.g. "MM/dd/yyyy").
|
|
16407
16400
|
*/
|
|
16408
16401
|
toDateFnsMask(mask) {
|
|
16409
16402
|
return mask
|
|
@@ -16625,6 +16618,7 @@ class AuroInputUtilities {
|
|
|
16625
16618
|
const maskOptions = this.getMaskOptions('date', normalizedFormat);
|
|
16626
16619
|
|
|
16627
16620
|
if (!(valueObject instanceof Date) || Number.isNaN(valueObject.getTime()) || !maskOptions || typeof maskOptions.format !== 'function') {
|
|
16621
|
+
console.debug('Invalid date object or mask options for formatting', { valueObject, maskOptions }); // eslint-disable-line no-console
|
|
16628
16622
|
return undefined;
|
|
16629
16623
|
}
|
|
16630
16624
|
|
|
@@ -16782,6 +16776,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
16782
16776
|
// so a parent (datepicker/combobox) calling `validate()` synchronously
|
|
16783
16777
|
// during its own update cycle sees a populated util instance.
|
|
16784
16778
|
this.activeLabel = false;
|
|
16779
|
+
|
|
16785
16780
|
/** @private */
|
|
16786
16781
|
this.allowedInputTypes = [
|
|
16787
16782
|
"text",
|
|
@@ -16792,6 +16787,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
16792
16787
|
"tel"
|
|
16793
16788
|
];
|
|
16794
16789
|
this.appearance = "default";
|
|
16790
|
+
|
|
16795
16791
|
/** @private */
|
|
16796
16792
|
this.dateFormatMap = {
|
|
16797
16793
|
'mm/dd/yyyy': 'dateMMDDYYYY',
|
|
@@ -16810,23 +16806,24 @@ class BaseInput extends AuroElement$1 {
|
|
|
16810
16806
|
'mm/dd': 'dateMMDD'
|
|
16811
16807
|
};
|
|
16812
16808
|
this.disabled = false;
|
|
16809
|
+
|
|
16813
16810
|
/** @private */
|
|
16814
16811
|
this.domHandler = new DomHandler();
|
|
16815
16812
|
this.dvInputOnly = false;
|
|
16816
16813
|
this.hasValue = false;
|
|
16817
16814
|
this.hideLabelVisually = false;
|
|
16818
16815
|
this.icon = false;
|
|
16816
|
+
|
|
16819
16817
|
/** @private */
|
|
16820
16818
|
this.inputIconName = undefined;
|
|
16819
|
+
|
|
16821
16820
|
/** @private */
|
|
16822
16821
|
this.label = 'Input label is undefined';
|
|
16823
16822
|
this.layout = 'classic';
|
|
16824
16823
|
this.locale = 'en-US';
|
|
16825
16824
|
this.max = undefined;
|
|
16826
|
-
this._maxObject = undefined;
|
|
16827
16825
|
this.maxLength = undefined;
|
|
16828
16826
|
this.min = undefined;
|
|
16829
|
-
this._minObject = undefined;
|
|
16830
16827
|
this.minLength = undefined;
|
|
16831
16828
|
this.noValidate = false;
|
|
16832
16829
|
this.onDark = false;
|
|
@@ -16843,23 +16840,27 @@ class BaseInput extends AuroElement$1 {
|
|
|
16843
16840
|
"email"
|
|
16844
16841
|
];
|
|
16845
16842
|
this.shape = 'classic';
|
|
16843
|
+
|
|
16846
16844
|
/** @private */
|
|
16847
16845
|
this.showPassword = false;
|
|
16848
16846
|
this.size = 'lg';
|
|
16849
16847
|
this.touched = false;
|
|
16848
|
+
|
|
16850
16849
|
/** @private */
|
|
16851
16850
|
this.uniqueId = new UniqueId().create();
|
|
16851
|
+
|
|
16852
16852
|
/** @private */
|
|
16853
16853
|
this.util = new AuroInputUtilities({
|
|
16854
16854
|
locale: this.locale,
|
|
16855
16855
|
format: this.format
|
|
16856
16856
|
});
|
|
16857
|
+
|
|
16857
16858
|
/** @private */
|
|
16858
16859
|
this.validation = new AuroFormValidation();
|
|
16860
|
+
|
|
16859
16861
|
/** @private */
|
|
16860
16862
|
this.validationCCLength = undefined;
|
|
16861
16863
|
this.value = undefined;
|
|
16862
|
-
this._valueObject = undefined;
|
|
16863
16864
|
}
|
|
16864
16865
|
|
|
16865
16866
|
// function to define props used within the scope of this component
|
|
@@ -17297,7 +17298,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17297
17298
|
* @returns {Date|undefined}
|
|
17298
17299
|
*/
|
|
17299
17300
|
get valueObject() {
|
|
17300
|
-
return this.
|
|
17301
|
+
return this.value && dateFormatter.isValidDate(this.value) ? dateFormatter.stringToDateInstance(this.value) : undefined;
|
|
17301
17302
|
}
|
|
17302
17303
|
|
|
17303
17304
|
/**
|
|
@@ -17305,7 +17306,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17305
17306
|
* @returns {Date|undefined}
|
|
17306
17307
|
*/
|
|
17307
17308
|
get minObject() {
|
|
17308
|
-
return this.
|
|
17309
|
+
return this.min && dateFormatter.isValidDate(this.min) ? dateFormatter.stringToDateInstance(this.min) : undefined;
|
|
17309
17310
|
}
|
|
17310
17311
|
|
|
17311
17312
|
/**
|
|
@@ -17313,50 +17314,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17313
17314
|
* @returns {Date|undefined}
|
|
17314
17315
|
*/
|
|
17315
17316
|
get maxObject() {
|
|
17316
|
-
return this.
|
|
17317
|
-
}
|
|
17318
|
-
|
|
17319
|
-
/**
|
|
17320
|
-
* Parses a date string into a Date object when the corresponding `_*Object`
|
|
17321
|
-
* field hasn't been synced yet by `updated()`. Returns undefined when the
|
|
17322
|
-
* input type/format isn't a full date or the string is not a valid date.
|
|
17323
|
-
*
|
|
17324
|
-
* Why this exists: a parent (datepicker) can call `inputN.validate()` from
|
|
17325
|
-
* inside its own `updated()` before this input's `updated()` has run
|
|
17326
|
-
* `syncDateValues()` — so `_valueObject`/`_maxObject` are still `undefined`
|
|
17327
|
-
* and range checks would otherwise silently no-op (flipping the result to
|
|
17328
|
-
* `valid` or `patternMismatch`).
|
|
17329
|
-
* @private
|
|
17330
|
-
* @param {string|undefined} dateStr - ISO date string from `value`/`min`/`max`.
|
|
17331
|
-
* @returns {Date|undefined}
|
|
17332
|
-
*/
|
|
17333
|
-
_computeDateObjectFallback(dateStr) {
|
|
17334
|
-
if (!dateStr || !this.util || !this.util.isFullDateFormat(this.type, this.format)) {
|
|
17335
|
-
return undefined;
|
|
17336
|
-
}
|
|
17337
|
-
if (!dateFormatter.isValidDate(dateStr)) {
|
|
17338
|
-
return undefined;
|
|
17339
|
-
}
|
|
17340
|
-
return dateFormatter.stringToDateInstance(dateStr);
|
|
17341
|
-
}
|
|
17342
|
-
|
|
17343
|
-
/**
|
|
17344
|
-
* Internal setter for readonly date object properties.
|
|
17345
|
-
* @private
|
|
17346
|
-
* @param {'valueObject'|'minObject'|'maxObject'} propertyName - Public object property name.
|
|
17347
|
-
* @param {Date|undefined} propertyValue - Value to assign.
|
|
17348
|
-
* @returns {void}
|
|
17349
|
-
*/
|
|
17350
|
-
setDateObjectProperty(propertyName, propertyValue) {
|
|
17351
|
-
const internalPropertyName = `_${propertyName}`;
|
|
17352
|
-
const previousValue = this[internalPropertyName];
|
|
17353
|
-
|
|
17354
|
-
if (previousValue === propertyValue) {
|
|
17355
|
-
return;
|
|
17356
|
-
}
|
|
17357
|
-
|
|
17358
|
-
this[internalPropertyName] = propertyValue;
|
|
17359
|
-
this.requestUpdate(propertyName, previousValue);
|
|
17317
|
+
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
17360
17318
|
}
|
|
17361
17319
|
|
|
17362
17320
|
connectedCallback() {
|
|
@@ -17385,7 +17343,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17385
17343
|
format: this.format
|
|
17386
17344
|
});
|
|
17387
17345
|
this.configureDataForType();
|
|
17388
|
-
this.syncDateValues();
|
|
17389
17346
|
}
|
|
17390
17347
|
|
|
17391
17348
|
disconnectedCallback() {
|
|
@@ -17424,7 +17381,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17424
17381
|
this.setCustomHelpTextMessage();
|
|
17425
17382
|
this.configureAutoFormatting();
|
|
17426
17383
|
this.configureDataForType();
|
|
17427
|
-
this.syncDateValues();
|
|
17428
17384
|
}
|
|
17429
17385
|
|
|
17430
17386
|
/**
|
|
@@ -17482,7 +17438,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17482
17438
|
|
|
17483
17439
|
/**
|
|
17484
17440
|
* @private
|
|
17485
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
17441
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
17486
17442
|
* @returns {void} Sets the default help text for the input.
|
|
17487
17443
|
*/
|
|
17488
17444
|
setCustomHelpTextMessage() {
|
|
@@ -17568,8 +17524,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17568
17524
|
this.configureDataForType();
|
|
17569
17525
|
}
|
|
17570
17526
|
|
|
17571
|
-
this.syncDateValues(changedProperties);
|
|
17572
|
-
|
|
17573
17527
|
if (changedProperties.has('value')) {
|
|
17574
17528
|
if (this.value && this.value.length > 0) {
|
|
17575
17529
|
this.hasValue = true;
|
|
@@ -17591,14 +17545,14 @@ class BaseInput extends AuroElement$1 {
|
|
|
17591
17545
|
|
|
17592
17546
|
if (formattedValue !== this.inputElement.value) {
|
|
17593
17547
|
this.skipNextProgrammaticInputEvent = true;
|
|
17594
|
-
if (this.maskInstance && this.type
|
|
17548
|
+
if (this.maskInstance && this.type !== 'date') {
|
|
17595
17549
|
// Route through the mask so its _value and el.value stay in lock-step
|
|
17596
17550
|
// (set value calls updateControl which writes el.value = displayValue).
|
|
17597
17551
|
// Writing el.value directly leaves the mask thinking displayValue is
|
|
17598
|
-
// stale; _saveSelection on the next focus/click then warns.
|
|
17599
|
-
//
|
|
17600
|
-
//
|
|
17601
|
-
//
|
|
17552
|
+
// stale; _saveSelection on the next focus/click then warns. Date is
|
|
17553
|
+
// excluded because its formattedValue can be raw ISO when the calendar
|
|
17554
|
+
// is invalid, and re-masking through mm/dd/yyyy would truncate it and
|
|
17555
|
+
// flip validity from patternMismatch to tooShort.
|
|
17602
17556
|
this.maskInstance.value = formattedValue || '';
|
|
17603
17557
|
} else if (formattedValue) {
|
|
17604
17558
|
this.inputElement.value = formattedValue;
|
|
@@ -17640,120 +17594,65 @@ class BaseInput extends AuroElement$1 {
|
|
|
17640
17594
|
}));
|
|
17641
17595
|
}
|
|
17642
17596
|
|
|
17643
|
-
|
|
17644
|
-
/**
|
|
17645
|
-
* Synchronizes the ISO string values and Date object representations for date-related properties.
|
|
17646
|
-
* This keeps the model and display values aligned when either side changes.
|
|
17647
|
-
*
|
|
17648
|
-
* When a full date format is in use, this method updates `value`, `min`, and `max` from their corresponding
|
|
17649
|
-
* Date objects or vice versa, based on which properties have changed. It only runs when the current configuration
|
|
17650
|
-
* represents a full year/month/day date format.
|
|
17651
|
-
*
|
|
17652
|
-
* @param {Map<string, unknown>|undefined} [changedProperties=undefined] - Optional map of changed properties used to limit which values are synchronized.
|
|
17653
|
-
* @returns {void}
|
|
17654
|
-
* @private
|
|
17655
|
-
*/
|
|
17656
|
-
syncDateValues(changedProperties = undefined) {
|
|
17657
|
-
if (!this.util.isFullDateFormat(this.type, this.format)) {
|
|
17658
|
-
return;
|
|
17659
|
-
}
|
|
17660
|
-
|
|
17661
|
-
this.syncSingleDateValue(changedProperties, 'valueObject', 'value');
|
|
17662
|
-
this.syncSingleDateValue(changedProperties, 'minObject', 'min');
|
|
17663
|
-
this.syncSingleDateValue(changedProperties, 'maxObject', 'max');
|
|
17664
|
-
}
|
|
17665
|
-
|
|
17666
|
-
/**
|
|
17667
|
-
* Synchronizes one date object/string property pair.
|
|
17668
|
-
* @private
|
|
17669
|
-
* @param {Map<string, unknown>|undefined} changedProperties - Map of changed properties from Lit.
|
|
17670
|
-
* @param {string} objectProperty - Date object property name.
|
|
17671
|
-
* @param {string} valueProperty - ISO string property name.
|
|
17672
|
-
* @returns {void}
|
|
17673
|
-
*/
|
|
17674
|
-
syncSingleDateValue(changedProperties, objectProperty, valueProperty) {
|
|
17675
|
-
const objectPropertyChanged = !changedProperties || changedProperties.has(objectProperty);
|
|
17676
|
-
|
|
17677
|
-
// objectProperty wins over valueProperty when both changed
|
|
17678
|
-
if (objectPropertyChanged && this[objectProperty]) {
|
|
17679
|
-
this[valueProperty] = dateFormatter.toISOFormatString(this[objectProperty]);
|
|
17680
|
-
return;
|
|
17681
|
-
}
|
|
17682
|
-
|
|
17683
|
-
const valuePropertyChanged = !changedProperties || changedProperties.has(valueProperty);
|
|
17684
|
-
if (!valuePropertyChanged) {
|
|
17685
|
-
return;
|
|
17686
|
-
}
|
|
17687
|
-
|
|
17688
|
-
// when value is newly set to the same ISO string that corresponds to the existing Date object, do not clear the Date object (avoid unnecessary updates)
|
|
17689
|
-
if (
|
|
17690
|
-
changedProperties &&
|
|
17691
|
-
valueProperty === 'value' &&
|
|
17692
|
-
changedProperties.get('value') === undefined &&
|
|
17693
|
-
this[objectProperty] instanceof Date &&
|
|
17694
|
-
this[valueProperty] === dateFormatter.toISOFormatString(this[objectProperty])
|
|
17695
|
-
) {
|
|
17696
|
-
return;
|
|
17697
|
-
}
|
|
17698
|
-
|
|
17699
|
-
if (dateFormatter.isValidDate(this[valueProperty])) {
|
|
17700
|
-
this.setDateObjectProperty(objectProperty, dateFormatter.stringToDateInstance(this[valueProperty]));
|
|
17701
|
-
} else {
|
|
17702
|
-
this.setDateObjectProperty(objectProperty, undefined);
|
|
17703
|
-
}
|
|
17704
|
-
}
|
|
17705
|
-
|
|
17706
17597
|
/**
|
|
17707
17598
|
* Sets up IMasks and logic based on auto-formatting requirements.
|
|
17708
17599
|
* @private
|
|
17709
17600
|
* @returns {void}
|
|
17710
17601
|
*/
|
|
17711
17602
|
configureAutoFormatting() {
|
|
17712
|
-
//
|
|
17713
|
-
//
|
|
17714
|
-
//
|
|
17715
|
-
//
|
|
17603
|
+
// _configuringMask gates two things: external re-entry into this method
|
|
17604
|
+
// while setup is mid-flight (from property changes that call back here),
|
|
17605
|
+
// and the accept/complete listeners below — both need to ignore the mask
|
|
17606
|
+
// events fired by our own value-restore step.
|
|
17716
17607
|
if (this._configuringMask) return;
|
|
17717
17608
|
this._configuringMask = true;
|
|
17718
17609
|
try {
|
|
17610
|
+
// Destroy any prior mask so IMask can attach fresh under the new format.
|
|
17611
|
+
// Null the reference too — if the new maskOptions.mask is falsy (e.g.
|
|
17612
|
+
// type switched from credit-card to text) the IMask() reassignment
|
|
17613
|
+
// below is skipped, and downstream writes at line ~823 would otherwise
|
|
17614
|
+
// route through the destroyed instance.
|
|
17719
17615
|
if (this.maskInstance) {
|
|
17720
17616
|
this.maskInstance.destroy();
|
|
17617
|
+
this.maskInstance = null;
|
|
17721
17618
|
}
|
|
17722
17619
|
|
|
17723
|
-
// Pass new format to util
|
|
17724
17620
|
this.util.updateFormat(this.format);
|
|
17725
17621
|
|
|
17726
17622
|
const maskOptions = this.util.getMaskOptions(this.type, this.format);
|
|
17727
17623
|
|
|
17728
17624
|
if (this.inputElement && maskOptions.mask) {
|
|
17729
|
-
|
|
17730
|
-
//
|
|
17731
|
-
//
|
|
17732
|
-
//
|
|
17733
|
-
// When the format changes (e.g. locale switch) and we have a valid ISO
|
|
17734
|
-
// model value, compute the display string for the NEW format instead of
|
|
17735
|
-
// re-using the old display string, which may be invalid in the new mask.
|
|
17625
|
+
// Capture the current display so it can be re-applied after IMask
|
|
17626
|
+
// attaches. The restore at the bottom goes through maskInstance.value
|
|
17627
|
+
// (not inputElement.value directly) so the mask's internal state and
|
|
17628
|
+
// the input's displayed text stay in lock-step.
|
|
17736
17629
|
let existingValue = this.inputElement.value;
|
|
17630
|
+
|
|
17631
|
+
// Format-change case (e.g. locale switch): existingValue is the OLD
|
|
17632
|
+
// mask's display string and may not parse under the new mask. When
|
|
17633
|
+
// we have a valid date model, rebuild the display from valueObject
|
|
17634
|
+
// (the canonical source) using the new mask's format function.
|
|
17737
17635
|
if (
|
|
17738
17636
|
this.util.isFullDateFormat(this.type, this.format) &&
|
|
17739
17637
|
this.value &&
|
|
17740
|
-
|
|
17741
|
-
this.valueObject instanceof Date &&
|
|
17742
|
-
!Number.isNaN(this.valueObject.getTime()) &&
|
|
17638
|
+
this.valueObject &&
|
|
17743
17639
|
typeof maskOptions.format === 'function'
|
|
17744
17640
|
) {
|
|
17745
17641
|
existingValue = maskOptions.format(this.valueObject);
|
|
17746
17642
|
}
|
|
17747
17643
|
|
|
17644
|
+
// Clear before IMask attaches so the constructor seeds an empty
|
|
17645
|
+
// internal value. Otherwise IMask reads the stale unmasked string
|
|
17646
|
+
// and emits a spurious 'accept' before the restore below runs.
|
|
17748
17647
|
this.skipNextProgrammaticInputEvent = true;
|
|
17749
17648
|
this.inputElement.value = '';
|
|
17750
17649
|
|
|
17751
17650
|
this.maskInstance = IMask(this.inputElement, maskOptions);
|
|
17752
17651
|
|
|
17652
|
+
// Mask fires 'accept' on every value change, including the restore
|
|
17653
|
+
// step below. Skip events fired during configureAutoFormatting so
|
|
17654
|
+
// we don't overwrite a value the parent just pushed.
|
|
17753
17655
|
this.maskInstance.on('accept', () => {
|
|
17754
|
-
// Suppress propagation during configureAutoFormatting's own value-restoration
|
|
17755
|
-
// (line below) — the mask emits 'accept' on every value-set, including ours,
|
|
17756
|
-
// and we don't want to overwrite a value the parent just pushed.
|
|
17757
17656
|
if (this._configuringMask) return;
|
|
17758
17657
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17759
17658
|
if (this.type === "date") {
|
|
@@ -17761,6 +17660,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
17761
17660
|
}
|
|
17762
17661
|
});
|
|
17763
17662
|
|
|
17663
|
+
// Mask fires 'complete' on the restore step below for any value that
|
|
17664
|
+
// happens to be a complete match. Same setup-suppression as 'accept'.
|
|
17764
17665
|
this.maskInstance.on('complete', () => {
|
|
17765
17666
|
if (this._configuringMask) return;
|
|
17766
17667
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
@@ -17769,7 +17670,9 @@ class BaseInput extends AuroElement$1 {
|
|
|
17769
17670
|
}
|
|
17770
17671
|
});
|
|
17771
17672
|
|
|
17772
|
-
//
|
|
17673
|
+
// Write existingValue through the mask (not the input directly) so
|
|
17674
|
+
// the mask reformats it under the new rules and keeps its internal
|
|
17675
|
+
// _value aligned with the input's displayed text.
|
|
17773
17676
|
if (existingValue) {
|
|
17774
17677
|
this.maskInstance.value = existingValue;
|
|
17775
17678
|
}
|
|
@@ -17863,10 +17766,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
17863
17766
|
// the gated types currently support it, since the list is a public
|
|
17864
17767
|
// property a consumer could mutate.
|
|
17865
17768
|
if (this.setSelectionInputTypes.includes(this.type)) {
|
|
17866
|
-
let selectionStart;
|
|
17769
|
+
let selectionStart = null;
|
|
17867
17770
|
try {
|
|
17868
|
-
selectionStart = this.inputElement
|
|
17869
|
-
} catch
|
|
17771
|
+
({ selectionStart } = this.inputElement);
|
|
17772
|
+
} catch {
|
|
17870
17773
|
return;
|
|
17871
17774
|
}
|
|
17872
17775
|
if (typeof selectionStart !== 'number') {
|
|
@@ -17875,7 +17778,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17875
17778
|
this.updateComplete.then(() => {
|
|
17876
17779
|
try {
|
|
17877
17780
|
this.inputElement.setSelectionRange(selectionStart, selectionStart);
|
|
17878
|
-
} catch
|
|
17781
|
+
} catch {
|
|
17879
17782
|
// Some input types (number/email in certain UAs) throw on
|
|
17880
17783
|
// setSelectionRange; swallow and let the native cursor stand.
|
|
17881
17784
|
}
|
|
@@ -17969,7 +17872,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17969
17872
|
*/
|
|
17970
17873
|
reset() {
|
|
17971
17874
|
this.value = undefined;
|
|
17972
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
17973
17875
|
this.validation.reset(this);
|
|
17974
17876
|
}
|
|
17975
17877
|
|
|
@@ -17978,7 +17880,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17978
17880
|
*/
|
|
17979
17881
|
clear() {
|
|
17980
17882
|
this.value = undefined;
|
|
17981
|
-
this.setDateObjectProperty('valueObject', undefined);
|
|
17982
17883
|
}
|
|
17983
17884
|
|
|
17984
17885
|
/**
|
|
@@ -18053,7 +17954,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
18053
17954
|
/**
|
|
18054
17955
|
* Function to support credit-card feature type.
|
|
18055
17956
|
* @private
|
|
18056
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
17957
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
18057
17958
|
* @returns {object} JSON with data for credit card formatting.
|
|
18058
17959
|
*/
|
|
18059
17960
|
matchInputValueToCreditCard() {
|
|
@@ -18507,7 +18408,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
|
|
|
18507
18408
|
}
|
|
18508
18409
|
};
|
|
18509
18410
|
|
|
18510
|
-
var formkitVersion$1 = '
|
|
18411
|
+
var formkitVersion$1 = '202607011652';
|
|
18511
18412
|
|
|
18512
18413
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18513
18414
|
// See LICENSE in the project root for license information.
|
|
@@ -18830,7 +18731,7 @@ class AuroInput extends BaseInput {
|
|
|
18830
18731
|
/**
|
|
18831
18732
|
* Determines default help text string.
|
|
18832
18733
|
* @private
|
|
18833
|
-
* @deprecated https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296
|
|
18734
|
+
* @deprecated See https://dev.azure.com/itsals/E_Retain_Content/_workitems/edit/1557296.
|
|
18834
18735
|
* @returns {string} Evaluates pre-determined help text.
|
|
18835
18736
|
*/
|
|
18836
18737
|
getHelpText() {
|
|
@@ -19238,7 +19139,7 @@ class AuroInput extends BaseInput {
|
|
|
19238
19139
|
|
|
19239
19140
|
var colorCss$3 = i$6`#headerContainer{box-shadow:var(--ds-auro-dropdownbib-header-boxshadow-color)}#footerContainer{background-color:var(--ds-auro-dropdownbib-footer-container-color)}`;
|
|
19240
19141
|
|
|
19241
|
-
var styleCss$4 = i$6`#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
|
|
19142
|
+
var styleCss$4 = i$6`#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)}`;
|
|
19242
19143
|
|
|
19243
19144
|
var tokenCss = i$6`: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)}`;
|
|
19244
19145
|
|
|
@@ -19633,7 +19534,7 @@ class AuroBibtemplate extends i$3 {
|
|
|
19633
19534
|
}
|
|
19634
19535
|
}
|
|
19635
19536
|
|
|
19636
|
-
var formkitVersion = '
|
|
19537
|
+
var formkitVersion = '202607011652';
|
|
19637
19538
|
|
|
19638
19539
|
var styleCss$3 = i$6`.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}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
|
|
19639
19540
|
|
|
@@ -20001,12 +19902,23 @@ function getOptionLabel(option) {
|
|
|
20001
19902
|
if (!option) {
|
|
20002
19903
|
return '';
|
|
20003
19904
|
}
|
|
20004
|
-
|
|
20005
|
-
|
|
20006
|
-
if (
|
|
20007
|
-
|
|
19905
|
+
|
|
19906
|
+
// Consumer-provided override: short-circuit the DOM walk entirely.
|
|
19907
|
+
if (option.dataset && option.dataset.label) {
|
|
19908
|
+
return option.dataset.label;
|
|
19909
|
+
}
|
|
19910
|
+
|
|
19911
|
+
// Walk direct children — the `slot` attribute only applies to direct children
|
|
19912
|
+
// of the slot host, so a shallow filter is sufficient. Avoids the cloneNode +
|
|
19913
|
+
// querySelector allocation that ran on every keystroke via syncValuesAndStates.
|
|
19914
|
+
let text = '';
|
|
19915
|
+
for (const node of option.childNodes) {
|
|
19916
|
+
const isDisplayValueSlot = node.nodeType === Node.ELEMENT_NODE && node.getAttribute('slot') === 'displayValue';
|
|
19917
|
+
if (!isDisplayValueSlot) {
|
|
19918
|
+
text += node.textContent || '';
|
|
19919
|
+
}
|
|
20008
19920
|
}
|
|
20009
|
-
return
|
|
19921
|
+
return text.replace(/\s+/gu, ' ').trim();
|
|
20010
19922
|
}
|
|
20011
19923
|
|
|
20012
19924
|
// See https://git.io/JJ6SJ for "How to document your components using JSDoc"
|
|
@@ -20081,8 +19993,6 @@ class AuroCombobox extends AuroElement {
|
|
|
20081
19993
|
this.availableOptions = [];
|
|
20082
19994
|
this.dropdownId = undefined;
|
|
20083
19995
|
this.dropdownOpen = false;
|
|
20084
|
-
this.triggerExpandedState = false;
|
|
20085
|
-
this._expandedTimeout = null;
|
|
20086
19996
|
this._inFullscreenTransition = false;
|
|
20087
19997
|
this.errorMessage = null;
|
|
20088
19998
|
this.isHiddenWhileLoading = false;
|
|
@@ -20093,6 +20003,30 @@ class AuroCombobox extends AuroElement {
|
|
|
20093
20003
|
this.touched = false;
|
|
20094
20004
|
this.validation = new AuroFormValidation$1();
|
|
20095
20005
|
this.validity = undefined;
|
|
20006
|
+
this._userTyped = false;
|
|
20007
|
+
// Tracks every setTimeout scheduled via _scheduleTimer so
|
|
20008
|
+
// disconnectedCallback can cancel them. Without this, a detached
|
|
20009
|
+
// combobox's pending timers still fire — most are no-ops, but
|
|
20010
|
+
// configureMenu's racing-condition retry would otherwise loop.
|
|
20011
|
+
this._pendingTimers = new Set();
|
|
20012
|
+
}
|
|
20013
|
+
|
|
20014
|
+
/**
|
|
20015
|
+
* Wraps setTimeout and records the timer id so disconnectedCallback
|
|
20016
|
+
* can cancel any outstanding callbacks. The id is removed from the set
|
|
20017
|
+
* once the callback fires so the set doesn't grow unbounded.
|
|
20018
|
+
* @param {Function} fn - Callback to run.
|
|
20019
|
+
* @param {number} ms - Delay in milliseconds.
|
|
20020
|
+
* @returns {number} The timer id.
|
|
20021
|
+
* @private
|
|
20022
|
+
*/
|
|
20023
|
+
_scheduleTimer(fn, ms) {
|
|
20024
|
+
const id = setTimeout(() => {
|
|
20025
|
+
this._pendingTimers.delete(id);
|
|
20026
|
+
fn();
|
|
20027
|
+
}, ms);
|
|
20028
|
+
this._pendingTimers.add(id);
|
|
20029
|
+
return id;
|
|
20096
20030
|
}
|
|
20097
20031
|
|
|
20098
20032
|
// This function is to define props used within the scope of this component
|
|
@@ -20454,17 +20388,6 @@ class AuroCombobox extends AuroElement {
|
|
|
20454
20388
|
attribute: false
|
|
20455
20389
|
},
|
|
20456
20390
|
|
|
20457
|
-
/**
|
|
20458
|
-
* Deferred aria-expanded state for the trigger input.
|
|
20459
|
-
* Delays the "true" transition so VoiceOver finishes its character echo
|
|
20460
|
-
* before announcing "expanded".
|
|
20461
|
-
* @private
|
|
20462
|
-
*/
|
|
20463
|
-
triggerExpandedState: {
|
|
20464
|
-
type: Boolean,
|
|
20465
|
-
reflect: false,
|
|
20466
|
-
attribute: false
|
|
20467
|
-
},
|
|
20468
20391
|
};
|
|
20469
20392
|
}
|
|
20470
20393
|
|
|
@@ -20487,13 +20410,6 @@ class AuroCombobox extends AuroElement {
|
|
|
20487
20410
|
return this.input.value;
|
|
20488
20411
|
}
|
|
20489
20412
|
|
|
20490
|
-
// /**
|
|
20491
|
-
// * Sets the value of the input element within the combobox.
|
|
20492
|
-
// */
|
|
20493
|
-
// set inputValue(value) {
|
|
20494
|
-
// this.input.value = value;
|
|
20495
|
-
// }
|
|
20496
|
-
|
|
20497
20413
|
/**
|
|
20498
20414
|
* Checks if the element is valid.
|
|
20499
20415
|
* @returns {boolean} - Returns true if the element is valid, false otherwise.
|
|
@@ -20620,7 +20536,7 @@ class AuroCombobox extends AuroElement {
|
|
|
20620
20536
|
if (this.menu) {
|
|
20621
20537
|
this.menu.matchWord = normalizeFilterValue(this.input.value);
|
|
20622
20538
|
}
|
|
20623
|
-
const label = getOptionLabel(this.menu.optionSelected)
|
|
20539
|
+
const label = getOptionLabel(this.menu.optionSelected);
|
|
20624
20540
|
this.updateTriggerTextDisplay(label || this.value);
|
|
20625
20541
|
}
|
|
20626
20542
|
|
|
@@ -20634,44 +20550,16 @@ class AuroCombobox extends AuroElement {
|
|
|
20634
20550
|
// in suggestion mode, do not override input value if no selection has been made and the input currently has focus
|
|
20635
20551
|
const isInputFocusedWithNoSelection = !this.menu.value && (this.input.matches(':focus-within') || (this.inputInBib && this.inputInBib.matches(':focus-within')));
|
|
20636
20552
|
|
|
20637
|
-
|
|
20638
|
-
|
|
20639
|
-
|
|
20640
|
-
// syncValuesAndStates re-enters here during typing when both inputs
|
|
20641
|
-
// already match, and a no-op flag flip would make the bib branch's
|
|
20642
|
-
// bail eat legitimate user-input events.
|
|
20643
|
-
const triggerNeedsSync = this.input.value !== nextValue;
|
|
20644
|
-
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
20645
|
-
if (triggerNeedsSync || bibNeedsSync) {
|
|
20646
|
-
this._syncingDisplayValue = true;
|
|
20647
|
-
if (triggerNeedsSync) {
|
|
20648
|
-
this.input.value = nextValue;
|
|
20649
|
-
}
|
|
20650
|
-
if (bibNeedsSync) {
|
|
20651
|
-
this.inputInBib.value = nextValue;
|
|
20652
|
-
}
|
|
20653
|
-
const pending = [];
|
|
20654
|
-
if (triggerNeedsSync) {
|
|
20655
|
-
pending.push(this.input.updateComplete);
|
|
20656
|
-
}
|
|
20657
|
-
if (bibNeedsSync) {
|
|
20658
|
-
pending.push(this.inputInBib.updateComplete);
|
|
20659
|
-
}
|
|
20660
|
-
Promise.all(pending).then(() => {
|
|
20661
|
-
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
20662
|
-
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
20663
|
-
this.input.maskInstance.updateValue();
|
|
20664
|
-
}
|
|
20665
|
-
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
20666
|
-
this.inputInBib.maskInstance.updateValue();
|
|
20667
|
-
}
|
|
20668
|
-
this._syncingDisplayValue = false;
|
|
20669
|
-
});
|
|
20670
|
-
}
|
|
20553
|
+
const suppressed = this.persistInput || (this.behavior === 'suggestion' && isInputFocusedWithNoSelection);
|
|
20554
|
+
if (!suppressed) {
|
|
20555
|
+
this.syncInputValuesAcrossTriggerAndBib(label || this.value);
|
|
20671
20556
|
}
|
|
20672
20557
|
|
|
20673
|
-
//
|
|
20674
|
-
|
|
20558
|
+
// Replace any previously appended displayValue clone in the trigger.
|
|
20559
|
+
// :not(slot) excludes the template's <slot name="displayValue"
|
|
20560
|
+
// slot="displayValue"> forwarder, which also has slot="displayValue"
|
|
20561
|
+
// and would otherwise be matched first and removed.
|
|
20562
|
+
const displayValueInTrigger = this.input.querySelector('[slot="displayValue"]:not(slot)');
|
|
20675
20563
|
|
|
20676
20564
|
if (displayValueInTrigger) {
|
|
20677
20565
|
displayValueInTrigger.remove();
|
|
@@ -20695,6 +20583,53 @@ class AuroCombobox extends AuroElement {
|
|
|
20695
20583
|
this.requestUpdate();
|
|
20696
20584
|
}
|
|
20697
20585
|
|
|
20586
|
+
/**
|
|
20587
|
+
* Writes nextValue to the trigger input and the bib input when their current
|
|
20588
|
+
* value differs, then re-asserts imask after Lit's update flushes.
|
|
20589
|
+
* @param {string} nextValue - The value to write to both inputs.
|
|
20590
|
+
* @returns {Promise<void>} Resolves after both inputs flush and imask
|
|
20591
|
+
* re-asserts; resolves immediately when no sync is needed.
|
|
20592
|
+
* @private
|
|
20593
|
+
*/
|
|
20594
|
+
async syncInputValuesAcrossTriggerAndBib(nextValue) {
|
|
20595
|
+
// Only set the flag when there's an actual write to suppress —
|
|
20596
|
+
// syncValuesAndStates re-enters here during typing when both inputs
|
|
20597
|
+
// already match, and a no-op flag flip would make the bib branch's
|
|
20598
|
+
// bail eat legitimate user-input events.
|
|
20599
|
+
const triggerNeedsSync = this.input.value !== nextValue;
|
|
20600
|
+
const bibNeedsSync = Boolean(this.inputInBib) && this.inputInBib.value !== nextValue;
|
|
20601
|
+
if (!triggerNeedsSync && !bibNeedsSync) {
|
|
20602
|
+
return;
|
|
20603
|
+
}
|
|
20604
|
+
|
|
20605
|
+
this._syncingDisplayValue = true;
|
|
20606
|
+
|
|
20607
|
+
const pending = [];
|
|
20608
|
+
if (triggerNeedsSync) {
|
|
20609
|
+
this.input.value = nextValue;
|
|
20610
|
+
pending.push(this.input.updateComplete);
|
|
20611
|
+
}
|
|
20612
|
+
if (bibNeedsSync) {
|
|
20613
|
+
this.inputInBib.value = nextValue;
|
|
20614
|
+
pending.push(this.inputInBib.updateComplete);
|
|
20615
|
+
}
|
|
20616
|
+
// finally — not a bare .then — so that an imask throw (see commit
|
|
20617
|
+
// d1857401c: imask can throw on credit-card format change) doesn't strand
|
|
20618
|
+
// _syncingDisplayValue=true and silently swallow every subsequent input.
|
|
20619
|
+
try {
|
|
20620
|
+
await Promise.all(pending);
|
|
20621
|
+
// imask reasserts otherwise, and handleBlur reverts to its stale value.
|
|
20622
|
+
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
20623
|
+
this.input.maskInstance.updateValue();
|
|
20624
|
+
}
|
|
20625
|
+
if (bibNeedsSync && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
20626
|
+
this.inputInBib.maskInstance.updateValue();
|
|
20627
|
+
}
|
|
20628
|
+
} finally {
|
|
20629
|
+
this._syncingDisplayValue = false;
|
|
20630
|
+
}
|
|
20631
|
+
}
|
|
20632
|
+
|
|
20698
20633
|
/**
|
|
20699
20634
|
* Processes hidden state of all menu options and determines if there are any available options not hidden.
|
|
20700
20635
|
* @private
|
|
@@ -20703,6 +20638,13 @@ class AuroCombobox extends AuroElement {
|
|
|
20703
20638
|
handleMenuOptions() {
|
|
20704
20639
|
this.generateOptionsArray();
|
|
20705
20640
|
this.availableOptions = [];
|
|
20641
|
+
// Single source of truth for the menu's filter/highlight token per call.
|
|
20642
|
+
// syncValuesAndStates re-writes the same value on exact-match keystrokes —
|
|
20643
|
+
// Lit's hasChanged makes that a no-op — and the prior duplicate set inside
|
|
20644
|
+
// handleTriggerInputValueChange is gone.
|
|
20645
|
+
if (this.menu) {
|
|
20646
|
+
this.menu.matchWord = normalizeFilterValue(this.input.value);
|
|
20647
|
+
}
|
|
20706
20648
|
this.updateFilter();
|
|
20707
20649
|
|
|
20708
20650
|
// Set aria-setsize/aria-posinset on each visible option so screen readers
|
|
@@ -20714,17 +20656,14 @@ class AuroCombobox extends AuroElement {
|
|
|
20714
20656
|
option.setAttribute('aria-posinset', index + 1);
|
|
20715
20657
|
});
|
|
20716
20658
|
|
|
20717
|
-
if (this.value && this.
|
|
20718
|
-
|
|
20719
|
-
this.setMenuValue(this.value);
|
|
20720
|
-
}
|
|
20721
|
-
|
|
20659
|
+
if (this.input.value && this.menu.options && this.menu.options.some((opt) => opt.value === this.input.value)) {
|
|
20660
|
+
this.setMenuValue(this.input.value);
|
|
20722
20661
|
this.syncValuesAndStates();
|
|
20723
20662
|
}
|
|
20724
20663
|
|
|
20725
|
-
// Re-activate when optionActive is
|
|
20726
|
-
// been reset (e.g. by clearSelection in an async update)
|
|
20727
|
-
// makeSelection() can find the correct option.
|
|
20664
|
+
// Re-activate when optionActive is not in the current scrollable viewport,
|
|
20665
|
+
// or when _index has been reset (e.g. by clearSelection in an async update)
|
|
20666
|
+
// so that makeSelection() can find the correct option.
|
|
20728
20667
|
if (!this.availableOptions.includes(this.menu.optionActive) || this.menu._index < 0) {
|
|
20729
20668
|
this.activateFirstEnabledAvailableOption();
|
|
20730
20669
|
}
|
|
@@ -20797,18 +20736,6 @@ class AuroCombobox extends AuroElement {
|
|
|
20797
20736
|
this.dropdownOpen = ev.detail.expanded;
|
|
20798
20737
|
this.updateMenuShapeSize();
|
|
20799
20738
|
|
|
20800
|
-
// Defer aria-expanded "true" so VoiceOver finishes character echo
|
|
20801
|
-
// before announcing "expanded". Set "false" immediately on close.
|
|
20802
|
-
clearTimeout(this._expandedTimeout);
|
|
20803
|
-
if (this.dropdownOpen) {
|
|
20804
|
-
const expandedDelay = 150;
|
|
20805
|
-
this._expandedTimeout = setTimeout(() => {
|
|
20806
|
-
this.triggerExpandedState = true;
|
|
20807
|
-
}, expandedDelay);
|
|
20808
|
-
} else {
|
|
20809
|
-
this.triggerExpandedState = false;
|
|
20810
|
-
}
|
|
20811
|
-
|
|
20812
20739
|
// Clear aria-activedescendant when dropdown closes
|
|
20813
20740
|
if (!this.dropdownOpen && this.input) {
|
|
20814
20741
|
this.input.setActiveDescendant(null);
|
|
@@ -20858,28 +20785,25 @@ class AuroCombobox extends AuroElement {
|
|
|
20858
20785
|
|
|
20859
20786
|
guardTouchPassthrough(this.menu);
|
|
20860
20787
|
|
|
20861
|
-
//
|
|
20862
|
-
//
|
|
20863
|
-
//
|
|
20788
|
+
// showModal() takes focus away from the trigger. Early focus once
|
|
20789
|
+
// the dialog has painted; the shared doubleRaf below is the fallback
|
|
20790
|
+
// for when the dialog needs an extra frame and also clears the
|
|
20791
|
+
// validation guard.
|
|
20864
20792
|
requestAnimationFrame(() => {
|
|
20865
20793
|
this.setInputFocus();
|
|
20866
20794
|
});
|
|
20867
|
-
|
|
20868
|
-
doubleRaf(() => {
|
|
20869
|
-
this.setInputFocus();
|
|
20870
|
-
this._inFullscreenTransition = false;
|
|
20871
|
-
});
|
|
20872
|
-
} else {
|
|
20873
|
-
// Desktop popover-open: restore the trigger caret to end-of-text.
|
|
20874
|
-
// Clicking the trigger lands on auro-input's floating <label for="…">
|
|
20875
|
-
// overlay; Chrome resets the native input's selection to [0, 0] on
|
|
20876
|
-
// label-focus before any JS runs. setInputFocus()'s non-fullscreen
|
|
20877
|
-
// branch parks the caret at end. doubleRaf lets the dropdown layout
|
|
20878
|
-
// settle first, matching the fullscreen branch timing.
|
|
20879
|
-
doubleRaf(() => {
|
|
20880
|
-
this.setInputFocus();
|
|
20881
|
-
});
|
|
20882
20795
|
}
|
|
20796
|
+
// else (desktop popover-open): Chrome resets the trigger caret to
|
|
20797
|
+
// [0, 0] when its floating <label for="…"> overlay receives focus.
|
|
20798
|
+
// The shared doubleRaf below parks the caret back at end-of-text
|
|
20799
|
+
// after the dropdown layout settles.
|
|
20800
|
+
|
|
20801
|
+
doubleRaf(() => {
|
|
20802
|
+
this.setInputFocus();
|
|
20803
|
+
if (this._inFullscreenTransition) {
|
|
20804
|
+
this._inFullscreenTransition = false;
|
|
20805
|
+
}
|
|
20806
|
+
});
|
|
20883
20807
|
}
|
|
20884
20808
|
});
|
|
20885
20809
|
|
|
@@ -20916,7 +20840,7 @@ class AuroCombobox extends AuroElement {
|
|
|
20916
20840
|
this.dropdown.trigger.inert = false;
|
|
20917
20841
|
}
|
|
20918
20842
|
|
|
20919
|
-
|
|
20843
|
+
this._scheduleTimer(() => {
|
|
20920
20844
|
this.setInputFocus();
|
|
20921
20845
|
}, 0);
|
|
20922
20846
|
});
|
|
@@ -21060,7 +20984,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21060
20984
|
|
|
21061
20985
|
// racing condition on custom-combobox with custom-menu
|
|
21062
20986
|
if (!this.menu) {
|
|
21063
|
-
|
|
20987
|
+
this._scheduleTimer(() => {
|
|
21064
20988
|
this.configureMenu();
|
|
21065
20989
|
}, 0);
|
|
21066
20990
|
return;
|
|
@@ -21090,7 +21014,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21090
21014
|
if (this.menu.optionSelected) {
|
|
21091
21015
|
const selected = this.menu.optionSelected;
|
|
21092
21016
|
|
|
21093
|
-
if (
|
|
21017
|
+
if (this.optionSelected !== selected) {
|
|
21094
21018
|
this.optionSelected = selected;
|
|
21095
21019
|
}
|
|
21096
21020
|
|
|
@@ -21103,7 +21027,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21103
21027
|
}
|
|
21104
21028
|
|
|
21105
21029
|
// Update display
|
|
21106
|
-
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected)
|
|
21030
|
+
this.updateTriggerTextDisplay(getOptionLabel(this.optionSelected));
|
|
21107
21031
|
|
|
21108
21032
|
// Update match word for filtering
|
|
21109
21033
|
const trimmedInput = normalizeFilterValue(this.input.value);
|
|
@@ -21115,17 +21039,24 @@ class AuroCombobox extends AuroElement {
|
|
|
21115
21039
|
// Hide dropdown on selection (except during slot changes)
|
|
21116
21040
|
if (evt.detail && evt.detail.source !== 'slotchange') {
|
|
21117
21041
|
// do not close while typing in suggestion mode with no value selected, to allow freeform input
|
|
21118
|
-
|
|
21119
|
-
|
|
21042
|
+
this.hideBib();
|
|
21043
|
+
|
|
21044
|
+
// Move focus to the clear button when the user makes a selection.
|
|
21045
|
+
if (!isEcho && this.menu.value !== undefined) {
|
|
21046
|
+
this.setClearBtnFocus();
|
|
21120
21047
|
}
|
|
21121
21048
|
|
|
21122
21049
|
// Announce the selection after the dropdown closes so it isn't
|
|
21123
21050
|
// overridden by VoiceOver's "collapsed" announcement from aria-expanded.
|
|
21051
|
+
// Skip when there's no selected value (e.g. menu.clearSelection() from
|
|
21052
|
+
// the unmatched-value path), otherwise VoiceOver reads "undefined".
|
|
21124
21053
|
const selectedValue = this.menu.value;
|
|
21125
|
-
|
|
21126
|
-
|
|
21127
|
-
|
|
21128
|
-
|
|
21054
|
+
if (selectedValue) {
|
|
21055
|
+
const announcementDelay = 300;
|
|
21056
|
+
this._scheduleTimer(() => {
|
|
21057
|
+
announceToScreenReader(this._getAnnouncementRoot(), `${selectedValue}, selected`);
|
|
21058
|
+
}, announcementDelay);
|
|
21059
|
+
}
|
|
21129
21060
|
}
|
|
21130
21061
|
|
|
21131
21062
|
// Programmatic value syncs leave availableOptions stale because
|
|
@@ -21134,22 +21065,6 @@ class AuroCombobox extends AuroElement {
|
|
|
21134
21065
|
// only — fresh user selections take the existing hideBib path.
|
|
21135
21066
|
if (isEcho && this.menu.optionSelected) {
|
|
21136
21067
|
this._programmaticFilterRefresh = true;
|
|
21137
|
-
this.handleMenuOptions();
|
|
21138
|
-
setTimeout(() => {
|
|
21139
|
-
this._programmaticFilterRefresh = false;
|
|
21140
|
-
}, 0);
|
|
21141
|
-
}
|
|
21142
|
-
|
|
21143
|
-
// base-input skips auto-validate when focus is inside its own shadow,
|
|
21144
|
-
// which it is after setTriggerInputFocus — re-run so prior tooShort
|
|
21145
|
-
// clears. processCreditCard reasserts errorMessage on every render.
|
|
21146
|
-
if (!isEcho && this.menu.optionSelected && this.input.validate) {
|
|
21147
|
-
this.input.updateComplete.then(() => {
|
|
21148
|
-
this.input.validate(true);
|
|
21149
|
-
if (this.input.validity === 'valid') {
|
|
21150
|
-
this.input.errorMessage = '';
|
|
21151
|
-
}
|
|
21152
|
-
});
|
|
21153
21068
|
}
|
|
21154
21069
|
});
|
|
21155
21070
|
|
|
@@ -21162,6 +21077,14 @@ class AuroCombobox extends AuroElement {
|
|
|
21162
21077
|
// stale option. Safe from re-entrancy because any resulting
|
|
21163
21078
|
// input.value changes dispatch isProgrammatic events.
|
|
21164
21079
|
this.menu.addEventListener('auroMenu-selectValueFailure', () => {
|
|
21080
|
+
// Announce the rejection BEFORE we clear `this.value` so the live
|
|
21081
|
+
// region carries the attempted value — without this the bib closes
|
|
21082
|
+
// silently and screen-reader users get no signal that their request
|
|
21083
|
+
// (e.g. a direct setMenuValue() call) was dropped.
|
|
21084
|
+
const attemptedValue = this.value;
|
|
21085
|
+
if (attemptedValue) {
|
|
21086
|
+
announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${attemptedValue}`);
|
|
21087
|
+
}
|
|
21165
21088
|
this.value = undefined;
|
|
21166
21089
|
this.optionSelected = undefined;
|
|
21167
21090
|
});
|
|
@@ -21173,10 +21096,13 @@ class AuroCombobox extends AuroElement {
|
|
|
21173
21096
|
this.input.setActiveDescendant(this.optionActive);
|
|
21174
21097
|
}
|
|
21175
21098
|
|
|
21176
|
-
//
|
|
21177
|
-
//
|
|
21178
|
-
//
|
|
21179
|
-
|
|
21099
|
+
// In fullscreen mode the menu sits inside a nested <dialog> shadow root,
|
|
21100
|
+
// and aria-activedescendant references across that boundary are lost —
|
|
21101
|
+
// VoiceOver/NVDA don't read the active option natively, so we mirror it
|
|
21102
|
+
// into the polite live region. In popover mode aria-activedescendant on
|
|
21103
|
+
// the trigger input is read natively; double-announcing would flood the
|
|
21104
|
+
// queue on arrow-key repeat.
|
|
21105
|
+
if (this.optionActive && this.dropdown.isBibFullscreen) {
|
|
21180
21106
|
const optionText = this.optionActive.textContent.trim();
|
|
21181
21107
|
const selectedState = this.optionActive.hasAttribute('selected') ? ', selected' : ', not selected';
|
|
21182
21108
|
const optionIndex = this.availableOptions.indexOf(this.optionActive) + 1;
|
|
@@ -21209,7 +21135,12 @@ class AuroCombobox extends AuroElement {
|
|
|
21209
21135
|
* Validate every time we remove focus from the combo box.
|
|
21210
21136
|
*/
|
|
21211
21137
|
this.addEventListener('focusout', () => {
|
|
21212
|
-
|
|
21138
|
+
// Skip while the dropdown is open — focus transits out briefly on
|
|
21139
|
+
// mousedown of a menu option (popover top-layer breaks :focus-within),
|
|
21140
|
+
// and validating against the pre-selection value flashes a stale error
|
|
21141
|
+
// between mousedown and mouseup. The next focusout fires after the
|
|
21142
|
+
// dropdown closes and validates against the post-selection value.
|
|
21143
|
+
if (!this.componentHasFocus && !this._inFullscreenTransition && !this.dropdownOpen) {
|
|
21213
21144
|
this.validate();
|
|
21214
21145
|
}
|
|
21215
21146
|
});
|
|
@@ -21272,49 +21203,40 @@ class AuroCombobox extends AuroElement {
|
|
|
21272
21203
|
if (this._syncingDisplayValue) {
|
|
21273
21204
|
return;
|
|
21274
21205
|
}
|
|
21275
|
-
this._syncingBibValue = true;
|
|
21276
|
-
this.input.value = this.inputInBib.value;
|
|
21277
|
-
this.input.updateComplete.then(() => {
|
|
21278
|
-
this._syncingBibValue = false;
|
|
21279
|
-
});
|
|
21280
|
-
|
|
21281
|
-
// Run filtering inline — the re-entrant event won't reach this code.
|
|
21282
|
-
this.menu.matchWord = normalizeFilterValue(this.inputInBib.value);
|
|
21283
|
-
this.optionActive = null;
|
|
21284
21206
|
|
|
21285
|
-
//
|
|
21286
|
-
//
|
|
21287
|
-
//
|
|
21288
|
-
if (this.
|
|
21289
|
-
this.
|
|
21207
|
+
// Filtering runs via re-entrance: writing this.input.value below
|
|
21208
|
+
// dispatches an 'input' event that the trigger's listener routes to
|
|
21209
|
+
// handleTriggerInputValueChange, which refreshes the menu filter.
|
|
21210
|
+
if (this.input.value !== this.inputInBib.value) {
|
|
21211
|
+
this._syncingBibValue = true;
|
|
21212
|
+
this.input.value = this.inputInBib.value;
|
|
21213
|
+
this.input.updateComplete.then(() => {
|
|
21214
|
+
this._syncingBibValue = false;
|
|
21215
|
+
});
|
|
21290
21216
|
}
|
|
21291
21217
|
|
|
21292
|
-
this.handleMenuOptions();
|
|
21293
21218
|
this.dispatchEvent(new CustomEvent('inputValue', { detail: { value: this.inputValue } }));
|
|
21294
|
-
|
|
21219
|
+
} else if (event.target === this.input) {
|
|
21220
|
+
|
|
21221
|
+
// Also sync the native input immediately so keystrokes arriving
|
|
21222
|
+
// before Lit's async update cycle (e.g. rapid Backspaces during a
|
|
21223
|
+
// fullscreen transition) operate on the correct content.
|
|
21224
|
+
// Skip the next programmatic input event to prevent the patched setter
|
|
21225
|
+
// from re-entering handleInputValueChange via the bib path.
|
|
21226
|
+
const bibNativeInput = this.inputInBib.inputElement;
|
|
21227
|
+
if (bibNativeInput && bibNativeInput.value !== this.input.value) {
|
|
21228
|
+
this.inputInBib.skipNextProgrammaticInputEvent = true;
|
|
21229
|
+
bibNativeInput.value = this.input.value || '';
|
|
21230
|
+
}
|
|
21295
21231
|
}
|
|
21296
21232
|
|
|
21233
|
+
this.value = this.input.value;
|
|
21234
|
+
|
|
21297
21235
|
// Ignore re-entrant input events caused by programmatic value sets.
|
|
21298
21236
|
if (this._syncingBibValue || this._syncingDisplayValue) {
|
|
21299
21237
|
return;
|
|
21300
21238
|
}
|
|
21301
21239
|
|
|
21302
|
-
this.inputInBib.value = this.input.value;
|
|
21303
|
-
|
|
21304
|
-
// Also sync the native input immediately so keystrokes arriving
|
|
21305
|
-
// before Lit's async update cycle (e.g. rapid Backspaces during a
|
|
21306
|
-
// fullscreen transition) operate on the correct content.
|
|
21307
|
-
// Skip the next programmatic input event to prevent the patched setter
|
|
21308
|
-
// from re-entering handleInputValueChange via the bib path.
|
|
21309
|
-
const bibNativeInput = this.inputInBib.inputElement;
|
|
21310
|
-
if (bibNativeInput && bibNativeInput.value !== this.input.value) {
|
|
21311
|
-
this.inputInBib.skipNextProgrammaticInputEvent = true;
|
|
21312
|
-
bibNativeInput.value = this.input.value || '';
|
|
21313
|
-
}
|
|
21314
|
-
|
|
21315
|
-
this.menu.matchWord = normalizeFilterValue(this.input.value);
|
|
21316
|
-
this.optionActive = null;
|
|
21317
|
-
|
|
21318
21240
|
if (this.behavior === 'suggestion') {
|
|
21319
21241
|
this.value = this.input.value;
|
|
21320
21242
|
}
|
|
@@ -21322,7 +21244,6 @@ class AuroCombobox extends AuroElement {
|
|
|
21322
21244
|
if (!this.input.value && !this._clearing) {
|
|
21323
21245
|
this.clear();
|
|
21324
21246
|
}
|
|
21325
|
-
this.handleMenuOptions();
|
|
21326
21247
|
|
|
21327
21248
|
// Validate only if the value was set programmatically (not during user
|
|
21328
21249
|
// interaction). In fullscreen dialog mode, componentHasFocus returns false
|
|
@@ -21332,34 +21253,44 @@ class AuroCombobox extends AuroElement {
|
|
|
21332
21253
|
this.validate();
|
|
21333
21254
|
}
|
|
21334
21255
|
|
|
21335
|
-
|
|
21336
|
-
|
|
21337
|
-
|
|
21338
|
-
|
|
21339
|
-
|
|
21340
|
-
|
|
21341
|
-
|
|
21342
|
-
|
|
21343
|
-
|
|
21256
|
+
this.dispatchEvent(new CustomEvent('inputValue', { detail: { value: this.inputValue } }));
|
|
21257
|
+
}
|
|
21258
|
+
|
|
21259
|
+
/**
|
|
21260
|
+
* Handles input value changes originating from the trigger input.
|
|
21261
|
+
* Refreshes menu options and filtering, delegates to handleInputValueChange
|
|
21262
|
+
* for value synchronization, and manages fullscreen bib focus.
|
|
21263
|
+
* @private
|
|
21264
|
+
* @param {Event} event - The input event from the trigger input element.
|
|
21265
|
+
* @returns {void}
|
|
21266
|
+
*/
|
|
21267
|
+
handleTriggerInputValueChange(event) {
|
|
21268
|
+
// 'input' fires for every user-initiated value change — typing, paste,
|
|
21269
|
+
// IME composition end, dead-key composition, drag-drop. Flip _userTyped
|
|
21270
|
+
// here so updated('availableOptions') auto-opens the bib for sources
|
|
21271
|
+
// that keydown alone misses: paste fires no keydown, IME uses
|
|
21272
|
+
// key='Process', and dead keys produce multi-char keys (all bypass the
|
|
21273
|
+
// prior keydown.key.length===1 gate). Skip programmatic syncs.
|
|
21274
|
+
if (!this._syncingDisplayValue && !this._syncingBibValue && !this._programmaticFilterRefresh) {
|
|
21275
|
+
this._userTyped = true;
|
|
21344
21276
|
}
|
|
21345
21277
|
|
|
21346
|
-
|
|
21347
|
-
|
|
21348
|
-
|
|
21349
|
-
|
|
21350
|
-
|
|
21351
|
-
// dialog opens — the user then has to tap the input again to resume
|
|
21352
|
-
// typing.
|
|
21353
|
-
if (this.dropdown.isBibFullscreen && this.input.value && this.input.value.length > 0) {
|
|
21354
|
-
if (!this.dropdown.isPopoverVisible) {
|
|
21355
|
-
this.showBib();
|
|
21356
|
-
}
|
|
21357
|
-
if (this.dropdown.isPopoverVisible) {
|
|
21358
|
-
this.setInputFocus();
|
|
21359
|
-
}
|
|
21278
|
+
this.handleMenuOptions();
|
|
21279
|
+
this.optionActive = null;
|
|
21280
|
+
|
|
21281
|
+
if (this.value === this.input.value) {
|
|
21282
|
+
return;
|
|
21360
21283
|
}
|
|
21361
21284
|
|
|
21362
|
-
this.
|
|
21285
|
+
this.handleInputValueChange(event);
|
|
21286
|
+
|
|
21287
|
+
if (this.dropdown.isBibFullscreen && this.input.value && this.input.value.length > 0 && this.dropdown.isPopoverVisible) {
|
|
21288
|
+
this.setInputFocus();
|
|
21289
|
+
}
|
|
21290
|
+
|
|
21291
|
+
if (this._programmaticFilterRefresh) {
|
|
21292
|
+
this._programmaticFilterRefresh = false;
|
|
21293
|
+
}
|
|
21363
21294
|
}
|
|
21364
21295
|
|
|
21365
21296
|
/**
|
|
@@ -21427,6 +21358,11 @@ class AuroCombobox extends AuroElement {
|
|
|
21427
21358
|
disconnectedCallback() {
|
|
21428
21359
|
super.disconnectedCallback();
|
|
21429
21360
|
this._inFullscreenTransition = false;
|
|
21361
|
+
// Cancel any outstanding timers so detached callbacks don't fire on
|
|
21362
|
+
// disposed DOM — most are no-ops, but configureMenu's racing-condition
|
|
21363
|
+
// retry would otherwise keep rescheduling itself indefinitely.
|
|
21364
|
+
this._pendingTimers.forEach((id) => clearTimeout(id));
|
|
21365
|
+
this._pendingTimers.clear();
|
|
21430
21366
|
}
|
|
21431
21367
|
|
|
21432
21368
|
firstUpdated() {
|
|
@@ -21468,7 +21404,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21468
21404
|
this.menu.value = value;
|
|
21469
21405
|
// Backup clear: if menu.value === menu.optionSelected.value already, the
|
|
21470
21406
|
// listener won't fire and the flag would swallow the next user click.
|
|
21471
|
-
|
|
21407
|
+
this._scheduleTimer(() => {
|
|
21472
21408
|
this._pendingMenuValueSync = false;
|
|
21473
21409
|
}, 0);
|
|
21474
21410
|
}
|
|
@@ -21485,15 +21421,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21485
21421
|
this.menu.value = undefined;
|
|
21486
21422
|
this.validation.reset(this);
|
|
21487
21423
|
this.touched = false;
|
|
21488
|
-
// Force validity back to the cleared state. validation.reset() calls
|
|
21489
|
-
// validate() at the end, and (post-credit-card-fix) the trigger input's
|
|
21490
|
-
// residual validity may still be copied into the combobox by the
|
|
21491
|
-
// auroInputElements loop. Explicitly clear here so reset() actually
|
|
21492
|
-
// leaves the component in a "no validity" state.
|
|
21493
21424
|
this.validity = undefined;
|
|
21494
|
-
this.errorMessage = '';
|
|
21495
|
-
this.input.validity = undefined;
|
|
21496
|
-
this.input.errorMessage = '';
|
|
21497
21425
|
}
|
|
21498
21426
|
|
|
21499
21427
|
/**
|
|
@@ -21511,6 +21439,17 @@ class AuroCombobox extends AuroElement {
|
|
|
21511
21439
|
this.optionSelected = undefined;
|
|
21512
21440
|
this.value = undefined;
|
|
21513
21441
|
|
|
21442
|
+
// Clear the appended displayValue clone in the trigger if present.
|
|
21443
|
+
// :not(slot) excludes the template's <slot name="displayValue"
|
|
21444
|
+
// slot="displayValue"> forwarder (line 1816), which also has
|
|
21445
|
+
// slot="displayValue" and would otherwise be matched first and removed,
|
|
21446
|
+
// permanently breaking the consumer-provided displayValue slot.
|
|
21447
|
+
const displayValueInTrigger = this.input.querySelector('[slot="displayValue"]:not(slot)');
|
|
21448
|
+
|
|
21449
|
+
if (displayValueInTrigger) {
|
|
21450
|
+
displayValueInTrigger.remove();
|
|
21451
|
+
}
|
|
21452
|
+
|
|
21514
21453
|
if (this.input.value) {
|
|
21515
21454
|
this.input.clear();
|
|
21516
21455
|
}
|
|
@@ -21534,81 +21473,50 @@ class AuroCombobox extends AuroElement {
|
|
|
21534
21473
|
}
|
|
21535
21474
|
|
|
21536
21475
|
updated(changedProperties) {
|
|
21537
|
-
// After the component is ready,
|
|
21476
|
+
// After the component is ready, propagate direct changes down to child components.
|
|
21538
21477
|
if (changedProperties.has('value')) {
|
|
21539
|
-
|
|
21540
|
-
|
|
21541
|
-
|
|
21542
|
-
|
|
21478
|
+
// Only flag programmatic refreshes — user-typed value changes must not
|
|
21479
|
+
// suppress the availableOptions branch's showBib(). Firefox batches
|
|
21480
|
+
// 'value' and 'availableOptions' into the same updated() call, so
|
|
21481
|
+
// setting the flag unconditionally here masks the user-typed open path.
|
|
21482
|
+
if (!this._userTyped) {
|
|
21483
|
+
this._programmaticFilterRefresh = true;
|
|
21543
21484
|
}
|
|
21544
21485
|
|
|
21545
|
-
if (this.
|
|
21546
|
-
|
|
21547
|
-
|
|
21486
|
+
if (this.input.value !== this.value) {
|
|
21487
|
+
// Clear menu.value AND menu.optionSelected together. Clearing only
|
|
21488
|
+
// menu.value leaves the previously-selected option element pinned
|
|
21489
|
+
// as menu.optionSelected; a later auroMenu-selectedOption event
|
|
21490
|
+
// would then write its stale .value back into combobox.value
|
|
21491
|
+
// (e.g. Tab-after-Backspace re-selecting the prior option).
|
|
21492
|
+
if (this.menu.value || this.menu.optionSelected) {
|
|
21493
|
+
this.menu.clearSelection();
|
|
21494
|
+
}
|
|
21548
21495
|
|
|
21549
|
-
|
|
21550
|
-
|
|
21551
|
-
|
|
21552
|
-
|
|
21553
|
-
|
|
21554
|
-
|
|
21555
|
-
|
|
21556
|
-
|
|
21557
|
-
|
|
21558
|
-
|
|
21559
|
-
|
|
21560
|
-
|
|
21561
|
-
|
|
21562
|
-
|
|
21563
|
-
|
|
21564
|
-
|
|
21565
|
-
|
|
21566
|
-
|
|
21567
|
-
// matches to avoid spurious events during the normal typing path.
|
|
21568
|
-
const nextValue = this.value || '';
|
|
21569
|
-
const triggerNeedsSync = this.input.value !== nextValue;
|
|
21570
|
-
const bibNeedsSync = Boolean(this.inputInBib && this.inputInBib !== this.input && this.inputInBib.value !== nextValue);
|
|
21571
|
-
if (triggerNeedsSync || bibNeedsSync) {
|
|
21572
|
-
this._syncingDisplayValue = true;
|
|
21573
|
-
if (triggerNeedsSync) {
|
|
21574
|
-
this.input.value = nextValue;
|
|
21575
|
-
}
|
|
21576
|
-
if (bibNeedsSync) {
|
|
21577
|
-
this.inputInBib.value = nextValue;
|
|
21578
|
-
}
|
|
21579
|
-
const pending = [];
|
|
21580
|
-
if (triggerNeedsSync) {
|
|
21581
|
-
pending.push(this.input.updateComplete);
|
|
21582
|
-
}
|
|
21583
|
-
if (bibNeedsSync) {
|
|
21584
|
-
pending.push(this.inputInBib.updateComplete);
|
|
21585
|
-
}
|
|
21586
|
-
Promise.all(pending).then(() => {
|
|
21587
|
-
if (triggerNeedsSync && this.input.maskInstance && typeof this.input.maskInstance.updateValue === 'function') {
|
|
21588
|
-
this.input.maskInstance.updateValue();
|
|
21589
|
-
}
|
|
21590
|
-
if (bibNeedsSync && this.inputInBib && this.inputInBib.maskInstance && typeof this.inputInBib.maskInstance.updateValue === 'function') {
|
|
21591
|
-
this.inputInBib.maskInstance.updateValue();
|
|
21592
|
-
}
|
|
21593
|
-
this._syncingDisplayValue = false;
|
|
21594
|
-
// handleInputValueChange bailed on the flag — refresh the filter.
|
|
21595
|
-
this._programmaticFilterRefresh = true;
|
|
21596
|
-
this.handleMenuOptions();
|
|
21597
|
-
setTimeout(() => {
|
|
21598
|
-
this._programmaticFilterRefresh = false;
|
|
21599
|
-
}, 0);
|
|
21600
|
-
});
|
|
21601
|
-
}
|
|
21496
|
+
if (!this.persistInput) {
|
|
21497
|
+
this.syncInputValuesAcrossTriggerAndBib(this.value || '');
|
|
21498
|
+
}
|
|
21499
|
+
|
|
21500
|
+
// Programmatic value with no matching option: updateFilter will close
|
|
21501
|
+
// the bib silently (see line 648 — no noMatchOption + 0 results
|
|
21502
|
+
// hides). Announce so screen-reader users hear the request was
|
|
21503
|
+
// dropped. Gated on `input.value !== this.value` so this never fires
|
|
21504
|
+
// for user typing — that path always reconciles input.value to
|
|
21505
|
+
// this.value before updated() runs.
|
|
21506
|
+
if (
|
|
21507
|
+
this.value &&
|
|
21508
|
+
this.menu &&
|
|
21509
|
+
this.menu.options &&
|
|
21510
|
+
this.menu.options.length > 0 &&
|
|
21511
|
+
!this.menu.options.some((opt) => opt.value === this.value)
|
|
21512
|
+
) {
|
|
21513
|
+
announceToScreenReader(this._getAnnouncementRoot(), `No matching option for ${this.value}`);
|
|
21602
21514
|
}
|
|
21603
21515
|
}
|
|
21516
|
+
|
|
21604
21517
|
if (!this.value) {
|
|
21605
21518
|
this.clear();
|
|
21606
21519
|
}
|
|
21607
|
-
if (this.value && !this.componentHasFocus) {
|
|
21608
|
-
// If the value got set programmatically make sure we hide the bib
|
|
21609
|
-
// when input is not taking the focus (input can be in dropdown.trigger or in bibtemplate)
|
|
21610
|
-
this.hideBib();
|
|
21611
|
-
}
|
|
21612
21520
|
|
|
21613
21521
|
// Sync the input and match word, but don't directly set menu.value again
|
|
21614
21522
|
if (this.menu) {
|
|
@@ -21621,7 +21529,7 @@ class AuroCombobox extends AuroElement {
|
|
|
21621
21529
|
composed: true,
|
|
21622
21530
|
detail: {
|
|
21623
21531
|
optionSelected: this.menu.optionSelected,
|
|
21624
|
-
value: this.
|
|
21532
|
+
value: this.value
|
|
21625
21533
|
}
|
|
21626
21534
|
}));
|
|
21627
21535
|
|
|
@@ -21644,16 +21552,28 @@ class AuroCombobox extends AuroElement {
|
|
|
21644
21552
|
// from a programmatic filter refresh after a value swap — the user
|
|
21645
21553
|
// didn't interact, so we shouldn't auto-open the bib (especially for
|
|
21646
21554
|
// the no-match path where the existing condition unconditionally fires).
|
|
21647
|
-
if (this._programmaticFilterRefresh) {
|
|
21648
|
-
|
|
21649
|
-
|
|
21650
|
-
|
|
21555
|
+
if ((this.menu && !this._programmaticFilterRefresh)) {
|
|
21556
|
+
if (
|
|
21557
|
+
this.availableOptions.length > 0 ||
|
|
21558
|
+
this.menu.loading ||
|
|
21559
|
+
this.noMatchOption
|
|
21560
|
+
) {
|
|
21561
|
+
if (this._userTyped && !this.dropdownOpen) {
|
|
21562
|
+
this.showBib();
|
|
21563
|
+
}
|
|
21564
|
+
this._userTyped = false;
|
|
21565
|
+
}
|
|
21566
|
+
|
|
21651
21567
|
if (!this.availableOptions.includes(this.menu.optionActive)) {
|
|
21652
21568
|
this.activateFirstEnabledAvailableOption();
|
|
21653
21569
|
}
|
|
21654
|
-
} else if (this.dropdown
|
|
21570
|
+
} else if (!this.dropdown.isBibFullscreen) {
|
|
21655
21571
|
this.hideBib();
|
|
21656
21572
|
}
|
|
21573
|
+
|
|
21574
|
+
if (this._programmaticFilterRefresh) {
|
|
21575
|
+
this._programmaticFilterRefresh = false;
|
|
21576
|
+
}
|
|
21657
21577
|
}
|
|
21658
21578
|
|
|
21659
21579
|
if (changedProperties.has('error')) {
|
|
@@ -21795,10 +21715,10 @@ class AuroCombobox extends AuroElement {
|
|
|
21795
21715
|
shape="${this.shape}"
|
|
21796
21716
|
size="${this.size}">
|
|
21797
21717
|
<${this.inputTag}
|
|
21798
|
-
@input="${this.
|
|
21718
|
+
@input="${this.handleTriggerInputValueChange}"
|
|
21799
21719
|
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
21800
21720
|
.a11yActivedescendant="${this.dropdownOpen && this.optionActive ? this.optionActive.id : undefined}"
|
|
21801
|
-
.a11yExpanded="${this.
|
|
21721
|
+
.a11yExpanded="${this.dropdownOpen}"
|
|
21802
21722
|
.a11yControls="${this.dropdownId}"
|
|
21803
21723
|
.autocomplete="${this.autocomplete}"
|
|
21804
21724
|
.inputmode="${this.inputmode}"
|