@aurodesignsystem-dev/auro-formkit 0.0.0-pr1408.16 → 0.0.0-pr1408.18
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/checkbox/demo/api.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/api.min.js +187 -141
- package/components/combobox/demo/index.min.js +187 -141
- package/components/combobox/demo/keyboardBehavior.md +9 -36
- package/components/combobox/dist/auro-combobox.d.ts +17 -0
- package/components/combobox/dist/comboboxKeyboardStrategy.d.ts +6 -3
- package/components/combobox/dist/index.js +187 -141
- package/components/combobox/dist/registered.js +187 -141
- package/components/counter/demo/api.min.js +2 -2
- package/components/counter/demo/index.min.js +2 -2
- package/components/counter/dist/index.js +2 -2
- package/components/counter/dist/registered.js +2 -2
- package/components/datepicker/demo/api.md +1 -1
- package/components/datepicker/demo/api.min.js +77 -157
- package/components/datepicker/demo/index.min.js +77 -157
- package/components/datepicker/demo/keyboardBehavior.md +1 -6
- package/components/datepicker/dist/auro-datepicker.d.ts +8 -7
- package/components/datepicker/dist/datepickerKeyboardStrategy.d.ts +1 -4
- package/components/datepicker/dist/index.js +77 -157
- package/components/datepicker/dist/registered.js +77 -157
- package/components/dropdown/demo/api.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/api.min.js +382 -390
- package/components/form/demo/index.min.js +382 -390
- package/components/input/demo/api.min.js +106 -77
- package/components/input/demo/index.min.js +106 -77
- package/components/input/dist/auro-input.d.ts +11 -0
- package/components/input/dist/base-input.d.ts +1 -0
- package/components/input/dist/index.js +36 -18
- package/components/input/dist/registered.js +36 -18
- package/components/menu/demo/keyboardBehavior.md +0 -0
- package/components/radio/demo/api.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/demo/keyboardBehavior.md +0 -0
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/api.min.js +13 -4
- package/components/select/demo/index.min.js +13 -4
- package/components/select/dist/index.js +13 -4
- package/components/select/dist/registered.js +13 -4
- package/custom-elements.json +1449 -1401
- package/package.json +3 -3
- /package/components/datepicker/demo/{keyboardBehavior.html → keyboard-behavior.html} +0 -0
|
@@ -1088,7 +1088,13 @@ function guardTouchPassthrough(element) {
|
|
|
1088
1088
|
}
|
|
1089
1089
|
|
|
1090
1090
|
/**
|
|
1091
|
-
* Restores the dropdown trigger after a fullscreen dialog closes
|
|
1091
|
+
* Restores the dropdown trigger after a fullscreen dialog closes
|
|
1092
|
+
* when focus doesn't leave the component (e.g. using Esc or Enter keys).
|
|
1093
|
+
* When leaving the component (e.g., tabbing out of the combobox after closing
|
|
1094
|
+
* the fullscreen dialog), focus restoration is handled by the browser's native
|
|
1095
|
+
* dialog focus restoration behavior, so this function only restores focus
|
|
1096
|
+
* when focus remains inside the component after the dialog closes.
|
|
1097
|
+
|
|
1092
1098
|
*
|
|
1093
1099
|
* Removes the `inert` attribute from the trigger so it is accessible again,
|
|
1094
1100
|
* and restores focus to the given target after one animation frame. The rAF
|
|
@@ -1104,8 +1110,11 @@ function guardTouchPassthrough(element) {
|
|
|
1104
1110
|
function restoreTriggerAfterClose(dropdown, focusTarget) {
|
|
1105
1111
|
dropdown.trigger.inert = false;
|
|
1106
1112
|
|
|
1113
|
+
// Wait a frame so that dialog.close() has completed and the browser's
|
|
1114
|
+
// native focus restoration has run before we attempt to focus the
|
|
1115
|
+
// trigger / input programmatically.
|
|
1107
1116
|
requestAnimationFrame(() => {
|
|
1108
|
-
if (!dropdown.isPopoverVisible) {
|
|
1117
|
+
if (!dropdown.isPopoverVisible && dropdown.trigger.contains(document.activeElement)) {
|
|
1109
1118
|
focusTarget.focus();
|
|
1110
1119
|
}
|
|
1111
1120
|
});
|
|
@@ -1206,102 +1215,33 @@ function isClearBtnFocused(ctx, clearBtn = getClearBtn(ctx)) {
|
|
|
1206
1215
|
if (!clearBtn) {
|
|
1207
1216
|
return false;
|
|
1208
1217
|
}
|
|
1209
|
-
|
|
1218
|
+
const isFocused = Boolean(clearBtn.shadowRoot && clearBtn.shadowRoot.activeElement !== null);
|
|
1219
|
+
return isFocused;
|
|
1210
1220
|
}
|
|
1211
1221
|
|
|
1212
1222
|
const comboboxKeyboardStrategy = {
|
|
1213
|
-
|
|
1214
|
-
// If the clear button has focus, let the browser
|
|
1215
|
-
// stopPropagation prevents parent containers (e.g., forms) from treating
|
|
1216
|
-
// Enter as a submit, but we must NOT call preventDefault — that would
|
|
1217
|
-
// block the browser's built-in "Enter activates focused button" behavior.
|
|
1223
|
+
ArrowDown(component, evt, ctx) {
|
|
1224
|
+
// If the clear button has focus, let the browser handle ArrowDown normally.
|
|
1218
1225
|
if (isClearBtnFocused(ctx)) {
|
|
1219
|
-
evt.stopPropagation();
|
|
1220
1226
|
return;
|
|
1221
1227
|
}
|
|
1222
1228
|
|
|
1223
|
-
if
|
|
1224
|
-
|
|
1225
|
-
await component.updateComplete;
|
|
1226
|
-
evt.preventDefault();
|
|
1227
|
-
evt.stopPropagation();
|
|
1228
|
-
component.setClearBtnFocus();
|
|
1229
|
-
} else {
|
|
1230
|
-
// Prevent the keypress from bubbling to parent containers (e.g., forms)
|
|
1231
|
-
// which could interpret Enter as a submit or trigger other unintended behavior.
|
|
1232
|
-
// This is safe because showBib() opens the dialog programmatically,
|
|
1233
|
-
// not via event propagation.
|
|
1234
|
-
evt.preventDefault();
|
|
1235
|
-
evt.stopPropagation();
|
|
1236
|
-
component.showBib();
|
|
1237
|
-
}
|
|
1238
|
-
},
|
|
1239
|
-
|
|
1240
|
-
Tab(component, evt, ctx) {
|
|
1241
|
-
if (!ctx.isExpanded) {
|
|
1242
|
-
return;
|
|
1243
|
-
}
|
|
1244
|
-
|
|
1245
|
-
// Shift+Tab moves the highlight to the first non-disabled option
|
|
1246
|
-
// without making a selection or closing the bib.
|
|
1247
|
-
if (evt.shiftKey) {
|
|
1229
|
+
// option display and navigation are prevented if there are no available options
|
|
1230
|
+
if (component.availableOptions.length > 0) {
|
|
1248
1231
|
evt.preventDefault();
|
|
1249
|
-
const firstActive = component.menu.menuService.menuOptions.find((option) => option.isActive);
|
|
1250
|
-
if (firstActive) {
|
|
1251
|
-
component.menu.updateActiveOption(firstActive);
|
|
1252
|
-
}
|
|
1253
|
-
return;
|
|
1254
|
-
}
|
|
1255
1232
|
|
|
1256
|
-
|
|
1257
|
-
if (
|
|
1258
|
-
return;
|
|
1259
|
-
}
|
|
1260
|
-
const clearBtn = getClearBtn(ctx);
|
|
1261
|
-
const clearBtnHasFocus = isClearBtnFocused(ctx, clearBtn);
|
|
1262
|
-
|
|
1263
|
-
// Tab from input: if clear button exists and doesn't have focus, focus it
|
|
1264
|
-
if (clearBtn && !clearBtnHasFocus && ctx.activeInput.value) {
|
|
1265
|
-
// Force clear button container visible to work around Safari not
|
|
1266
|
-
// propagating :focus-within through shadow DOM boundaries, which
|
|
1267
|
-
// causes .wrapper:not(:focus-within) to hide .notification.clear.
|
|
1268
|
-
const clearContainer = clearBtn.closest('.clear');
|
|
1269
|
-
if (clearContainer) {
|
|
1270
|
-
clearContainer.style.display = 'flex';
|
|
1271
|
-
clearBtn.addEventListener('focusout', () => {
|
|
1272
|
-
// Delay cleanup so :focus-within settles when focus moves
|
|
1273
|
-
// to a sibling (e.g., Shift+Tab back to the input).
|
|
1274
|
-
requestAnimationFrame(() => {
|
|
1275
|
-
clearContainer.style.display = '';
|
|
1276
|
-
});
|
|
1277
|
-
}, { once: true });
|
|
1278
|
-
}
|
|
1233
|
+
// navigate if bib is open otherwise open it
|
|
1234
|
+
if (component.dropdown.isPopoverVisible) {
|
|
1279
1235
|
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
const nativeBtn = clearBtn.shadowRoot && clearBtn.shadowRoot.querySelector('button');
|
|
1283
|
-
if (nativeBtn) {
|
|
1284
|
-
nativeBtn.focus();
|
|
1236
|
+
if (evt.altKey || evt.metaKey) {
|
|
1237
|
+
component.activateLastEnabledAvailableOption();
|
|
1285
1238
|
} else {
|
|
1286
|
-
|
|
1239
|
+
navigateArrow(component, 'down');
|
|
1287
1240
|
}
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
// Tab from clear button (or no clear button / no value) →
|
|
1292
|
-
// select the highlighted option if any, then close
|
|
1293
|
-
if (component.optionActive) {
|
|
1294
|
-
component.menu.makeSelection();
|
|
1241
|
+
} else {
|
|
1242
|
+
component.showBib();
|
|
1295
1243
|
}
|
|
1296
|
-
component.hideBib();
|
|
1297
|
-
return;
|
|
1298
|
-
}
|
|
1299
|
-
|
|
1300
|
-
// Non-fullscreen: select + close
|
|
1301
|
-
if (component.menu.optionActive && component.menu.optionActive.value) {
|
|
1302
|
-
component.menu.value = component.menu.optionActive.value;
|
|
1303
1244
|
}
|
|
1304
|
-
component.hideBib();
|
|
1305
1245
|
},
|
|
1306
1246
|
|
|
1307
1247
|
ArrowUp(component, evt, ctx) {
|
|
@@ -1310,31 +1250,85 @@ const comboboxKeyboardStrategy = {
|
|
|
1310
1250
|
return;
|
|
1311
1251
|
}
|
|
1312
1252
|
|
|
1253
|
+
// option display and navigation are prevented if there are no available options
|
|
1313
1254
|
if (component.availableOptions.length > 0) {
|
|
1314
|
-
|
|
1255
|
+
evt.preventDefault();
|
|
1256
|
+
|
|
1257
|
+
// navigate if bib is open otherwise open it
|
|
1258
|
+
if (component.dropdown.isPopoverVisible) {
|
|
1259
|
+
if (evt.altKey || evt.metaKey) {
|
|
1260
|
+
component.activateFirstEnabledAvailableOption();
|
|
1261
|
+
} else {
|
|
1262
|
+
navigateArrow(component, 'up');
|
|
1263
|
+
}
|
|
1264
|
+
} else {
|
|
1265
|
+
component.showBib();
|
|
1266
|
+
}
|
|
1315
1267
|
}
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1268
|
+
},
|
|
1269
|
+
|
|
1270
|
+
End(component, evt, ctx) {
|
|
1271
|
+
if (ctx.isExpanded) {
|
|
1319
1272
|
evt.preventDefault();
|
|
1320
|
-
|
|
1273
|
+
evt.stopPropagation();
|
|
1274
|
+
component.activateLastEnabledAvailableOption();
|
|
1321
1275
|
}
|
|
1322
1276
|
},
|
|
1323
1277
|
|
|
1324
|
-
|
|
1325
|
-
// If the clear button has focus, let the browser handle ArrowDown normally.
|
|
1278
|
+
Enter(component, evt, ctx) {
|
|
1326
1279
|
if (isClearBtnFocused(ctx)) {
|
|
1327
|
-
|
|
1328
|
-
|
|
1280
|
+
// If the clear button has focus, let the browser activate it normally.
|
|
1281
|
+
// stopPropagation prevents parent containers (e.g., forms) from treating
|
|
1282
|
+
// Enter as a submit, but we must NOT call preventDefault — that would
|
|
1283
|
+
// block the browser's built-in "Enter activates focused button" behavior.
|
|
1284
|
+
evt.stopPropagation();
|
|
1285
|
+
} else if (ctx.isExpanded && component.menu.optionActive) {
|
|
1286
|
+
component.menu.makeSelection();
|
|
1329
1287
|
|
|
1330
|
-
|
|
1288
|
+
if (ctx.isModal) {
|
|
1289
|
+
component.setTriggerInputFocus();
|
|
1290
|
+
}
|
|
1291
|
+
|
|
1292
|
+
evt.preventDefault();
|
|
1293
|
+
evt.stopPropagation();
|
|
1294
|
+
} else {
|
|
1295
|
+
// Prevent the keypress from bubbling to parent containers (e.g., forms)
|
|
1296
|
+
// which could interpret Enter as a submit or trigger other unintended behavior.
|
|
1297
|
+
// This is safe because showBib() opens the dialog programmatically,
|
|
1298
|
+
// not via event propagation.
|
|
1299
|
+
evt.preventDefault();
|
|
1300
|
+
evt.stopPropagation();
|
|
1331
1301
|
component.showBib();
|
|
1332
1302
|
}
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1303
|
+
},
|
|
1304
|
+
|
|
1305
|
+
Escape(component, _evt, ctx) {
|
|
1306
|
+
if (ctx.isExpanded && ctx.isModal) {
|
|
1307
|
+
component.setTriggerInputFocus();
|
|
1308
|
+
}
|
|
1309
|
+
},
|
|
1310
|
+
|
|
1311
|
+
Home(component, evt, ctx) {
|
|
1312
|
+
if (ctx.isExpanded) {
|
|
1336
1313
|
evt.preventDefault();
|
|
1337
|
-
|
|
1314
|
+
evt.stopPropagation();
|
|
1315
|
+
component.activateFirstEnabledAvailableOption();
|
|
1316
|
+
}
|
|
1317
|
+
},
|
|
1318
|
+
|
|
1319
|
+
Tab(component, evt, ctx) {
|
|
1320
|
+
if (ctx.isExpanded && !isClearBtnFocused(ctx)) {
|
|
1321
|
+
// ClearBtn will not bubble up tab key events when it's focused, so need to manage it here when focused
|
|
1322
|
+
component.menu.makeSelection();
|
|
1323
|
+
component.hideBib();
|
|
1324
|
+
|
|
1325
|
+
// In fullscreen modal mode, closing the dialog does not
|
|
1326
|
+
// automatically restores focus to the input. In the tab case,
|
|
1327
|
+
// Explicitly move focus to the trigger's clear button so the
|
|
1328
|
+
// user can continues tabbing through the page normally.
|
|
1329
|
+
if (ctx.isModal && !evt.shiftKey) {
|
|
1330
|
+
component.setClearBtnFocus();
|
|
1331
|
+
}
|
|
1338
1332
|
}
|
|
1339
1333
|
},
|
|
1340
1334
|
};
|
|
@@ -4916,7 +4910,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
4916
4910
|
}
|
|
4917
4911
|
};
|
|
4918
4912
|
|
|
4919
|
-
var formkitVersion$2 = '
|
|
4913
|
+
var formkitVersion$2 = '202604032311';
|
|
4920
4914
|
|
|
4921
4915
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
4922
4916
|
static get properties() {
|
|
@@ -11650,6 +11644,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
11650
11644
|
this.wrapperElement = this.shadowRoot.querySelector('.wrapper');
|
|
11651
11645
|
this.inputElement = this.renderRoot.querySelector('input');
|
|
11652
11646
|
this.labelElement = this.shadowRoot.querySelector('label');
|
|
11647
|
+
this.clearBtn = this.clearButtonRef.value;
|
|
11648
|
+
|
|
11649
|
+
// This must get moved into inputKeyboardStrategy when implemented
|
|
11650
|
+
this.clearBtn.addEventListener('keydown', (evt) => {
|
|
11651
|
+
evt.stopPropagation();
|
|
11652
|
+
});
|
|
11653
|
+
|
|
11654
|
+
this.clearBtn.addEventListener('click', (evt) => {
|
|
11655
|
+
evt.stopPropagation();
|
|
11656
|
+
});
|
|
11653
11657
|
|
|
11654
11658
|
this.patchInputEvent(this.inputElement);
|
|
11655
11659
|
|
|
@@ -12673,7 +12677,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
12673
12677
|
}
|
|
12674
12678
|
};
|
|
12675
12679
|
|
|
12676
|
-
var formkitVersion$1 = '
|
|
12680
|
+
var formkitVersion$1 = '202604032311';
|
|
12677
12681
|
|
|
12678
12682
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
12679
12683
|
// See LICENSE in the project root for license information.
|
|
@@ -12730,6 +12734,11 @@ class AuroInput extends BaseInput {
|
|
|
12730
12734
|
* @private
|
|
12731
12735
|
*/
|
|
12732
12736
|
this.iconTag = versioning.generateTag('auro-formkit-input-icon', iconVersion$1, _$1);
|
|
12737
|
+
|
|
12738
|
+
/**
|
|
12739
|
+
* @private
|
|
12740
|
+
*/
|
|
12741
|
+
this.clearButtonRef = createRef();
|
|
12733
12742
|
}
|
|
12734
12743
|
|
|
12735
12744
|
static get styles() {
|
|
@@ -12747,6 +12756,19 @@ class AuroInput extends BaseInput {
|
|
|
12747
12756
|
];
|
|
12748
12757
|
}
|
|
12749
12758
|
|
|
12759
|
+
/**
|
|
12760
|
+
* Returns classmap configuration for the clear button visibility.
|
|
12761
|
+
* The button is hidden when the input has no value, is read-only, or is disabled.
|
|
12762
|
+
* @private
|
|
12763
|
+
* @returns {Record<string, boolean>} - Classmap object controlling clear button display state.
|
|
12764
|
+
*/
|
|
12765
|
+
get clearBtnClassMap() {
|
|
12766
|
+
return {
|
|
12767
|
+
'util_displayHidden': !this.hasValue || this.readyOnly || this.disabled
|
|
12768
|
+
};
|
|
12769
|
+
}
|
|
12770
|
+
|
|
12771
|
+
|
|
12750
12772
|
/**
|
|
12751
12773
|
* Determines if the HTML input element should be visually hidden.
|
|
12752
12774
|
* Returns true when display value content exists without focus and has a value,
|
|
@@ -13066,10 +13088,11 @@ class AuroInput extends BaseInput {
|
|
|
13066
13088
|
<${this.buttonTag}
|
|
13067
13089
|
@click="${this.handleClickClear}"
|
|
13068
13090
|
appearance="${this.onDark ? 'inverse' : this.appearance}"
|
|
13069
|
-
class="notificationBtn clearBtn"
|
|
13091
|
+
class="notificationBtn clearBtn ${classMap(this.clearBtnClassMap)}"
|
|
13070
13092
|
shape="circle"
|
|
13071
13093
|
size="sm"
|
|
13072
|
-
variant="ghost"
|
|
13094
|
+
variant="ghost"
|
|
13095
|
+
${ref(this.clearButtonRef)}>
|
|
13073
13096
|
<span><slot name="ariaLabel.clear">Clear Input</slot></span>
|
|
13074
13097
|
<${this.iconTag}
|
|
13075
13098
|
aria-hidden="true"
|
|
@@ -13214,11 +13237,7 @@ class AuroInput extends BaseInput {
|
|
|
13214
13237
|
<div part="accent-right" class="accents right">
|
|
13215
13238
|
${this.renderValidationErrorIconHtml()}
|
|
13216
13239
|
${this.hasValue && this.type === 'password' ? this.renderHtmlNotificationPassword() : undefined}
|
|
13217
|
-
${this.
|
|
13218
|
-
${!this.disabled && !this.readonly ? html`
|
|
13219
|
-
${this.renderHtmlActionClear()}
|
|
13220
|
-
` : undefined}
|
|
13221
|
-
` : undefined}
|
|
13240
|
+
${this.renderHtmlActionClear()}
|
|
13222
13241
|
</div>
|
|
13223
13242
|
</div>
|
|
13224
13243
|
<div class="helpTextWrapper leftIndent rightIndent" part="inputHelpText">
|
|
@@ -13250,11 +13269,7 @@ class AuroInput extends BaseInput {
|
|
|
13250
13269
|
${this.layout.includes('right') || this.layout === "emphasized" ? html`
|
|
13251
13270
|
${this.renderValidationErrorIconHtml()}
|
|
13252
13271
|
` : undefined}
|
|
13253
|
-
${this.
|
|
13254
|
-
${!this.disabled && !this.readonly ? html`
|
|
13255
|
-
${this.renderHtmlActionClear()}
|
|
13256
|
-
` : undefined}
|
|
13257
|
-
` : undefined}
|
|
13272
|
+
${this.renderHtmlActionClear()}
|
|
13258
13273
|
</div>
|
|
13259
13274
|
</div>
|
|
13260
13275
|
<div class="${classMap(this.helpTextClasses)}" part="inputHelpText">
|
|
@@ -13282,11 +13297,7 @@ class AuroInput extends BaseInput {
|
|
|
13282
13297
|
</div>
|
|
13283
13298
|
<div class="accents right">
|
|
13284
13299
|
${this.renderValidationErrorIconHtml()}
|
|
13285
|
-
${this.
|
|
13286
|
-
${!this.disabled && !this.readonly ? html`
|
|
13287
|
-
${this.renderHtmlActionClear()}
|
|
13288
|
-
` : undefined}
|
|
13289
|
-
` : undefined}
|
|
13300
|
+
${this.renderHtmlActionClear()}
|
|
13290
13301
|
</div>
|
|
13291
13302
|
</div>
|
|
13292
13303
|
<div class="helpTextWrapper leftIndent rightIndent" part="inputHelpText">
|
|
@@ -13712,7 +13723,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
13712
13723
|
}
|
|
13713
13724
|
}
|
|
13714
13725
|
|
|
13715
|
-
var formkitVersion = '
|
|
13726
|
+
var formkitVersion = '202604032311';
|
|
13716
13727
|
|
|
13717
13728
|
var styleCss$1 = css`.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}`;
|
|
13718
13729
|
|
|
@@ -14191,6 +14202,7 @@ class AuroCombobox extends AuroElement {
|
|
|
14191
14202
|
|
|
14192
14203
|
/**
|
|
14193
14204
|
* Array of available options to display in the dropdown.
|
|
14205
|
+
* This array contains all non-hidden options (e.g., hidden by filtering on input value).
|
|
14194
14206
|
* @private
|
|
14195
14207
|
*/
|
|
14196
14208
|
availableOptions: {
|
|
@@ -14568,12 +14580,40 @@ class AuroCombobox extends AuroElement {
|
|
|
14568
14580
|
AuroLibraryRuntimeUtils$4.prototype.registerComponent(name, AuroCombobox);
|
|
14569
14581
|
}
|
|
14570
14582
|
|
|
14583
|
+
/**
|
|
14584
|
+
* Mark the first available (non-hidden), enabled option as `active`.
|
|
14585
|
+
* @private
|
|
14586
|
+
* @returns {void}
|
|
14587
|
+
*/
|
|
14588
|
+
activateFirstEnabledAvailableOption() {
|
|
14589
|
+
const firstEnabledOptionIndex = this.availableOptions.findIndex((opt) => !opt.disabled);
|
|
14590
|
+
this.updateActiveOption(firstEnabledOptionIndex);
|
|
14591
|
+
}
|
|
14592
|
+
|
|
14593
|
+
/**
|
|
14594
|
+
* Mark the last available (non-hidden), enabled option as `active`.
|
|
14595
|
+
* @private
|
|
14596
|
+
* @returns {void}
|
|
14597
|
+
*/
|
|
14598
|
+
activateLastEnabledAvailableOption() {
|
|
14599
|
+
let lastEnabledOptionIndex = -1;
|
|
14600
|
+
|
|
14601
|
+
// Work backwards through the available options array to find the last enabled option
|
|
14602
|
+
for (let index = this.availableOptions.length - 1; index >= 0; index -= 1) {
|
|
14603
|
+
if (!this.availableOptions[index].disabled) {
|
|
14604
|
+
lastEnabledOptionIndex = index;
|
|
14605
|
+
break;
|
|
14606
|
+
}
|
|
14607
|
+
}
|
|
14608
|
+
|
|
14609
|
+
this.updateActiveOption(lastEnabledOptionIndex);
|
|
14610
|
+
}
|
|
14611
|
+
|
|
14571
14612
|
/**
|
|
14572
14613
|
* Updates the filter for the available options based on the input value.
|
|
14573
14614
|
* @private
|
|
14574
14615
|
*/
|
|
14575
14616
|
updateFilter() {
|
|
14576
|
-
|
|
14577
14617
|
// Reset available options if noFilter is set to false after being true.
|
|
14578
14618
|
if (this.noFilter) {
|
|
14579
14619
|
this.availableOptions = [...this.options];
|
|
@@ -14692,6 +14732,10 @@ class AuroCombobox extends AuroElement {
|
|
|
14692
14732
|
if (this.value && this.input.value && !this.menu.value) {
|
|
14693
14733
|
this.syncValuesAndStates();
|
|
14694
14734
|
}
|
|
14735
|
+
|
|
14736
|
+
if (!this.availableOptions.includes(this.menu.optionActive)) {
|
|
14737
|
+
this.activateFirstEnabledAvailableOption();
|
|
14738
|
+
}
|
|
14695
14739
|
}
|
|
14696
14740
|
|
|
14697
14741
|
/**
|
|
@@ -14765,9 +14809,6 @@ class AuroCombobox extends AuroElement {
|
|
|
14765
14809
|
if (this.dropdownOpen) {
|
|
14766
14810
|
const expandedDelay = 150;
|
|
14767
14811
|
this._expandedTimeout = setTimeout(() => {
|
|
14768
|
-
if (!this.value) {
|
|
14769
|
-
this.updateActiveOption(0);
|
|
14770
|
-
}
|
|
14771
14812
|
this.triggerExpandedState = true;
|
|
14772
14813
|
}, expandedDelay);
|
|
14773
14814
|
} else {
|
|
@@ -14777,22 +14818,16 @@ class AuroCombobox extends AuroElement {
|
|
|
14777
14818
|
// Clear aria-activedescendant when dropdown closes
|
|
14778
14819
|
if (!this.dropdownOpen && this.input) {
|
|
14779
14820
|
this.input.setActiveDescendant(null);
|
|
14780
|
-
this.optionActive = null;
|
|
14781
|
-
|
|
14782
|
-
// Remove the highlighted state from all menu options so re-opening
|
|
14783
|
-
// the dropdown doesn't show a stale highlight.
|
|
14784
|
-
if (this.options) {
|
|
14785
|
-
this.options.forEach((opt) => {
|
|
14786
|
-
opt.active = false;
|
|
14787
|
-
opt.classList.remove('active');
|
|
14788
|
-
});
|
|
14789
|
-
}
|
|
14790
14821
|
|
|
14791
14822
|
// Restore pointer events on the menu in case they were disabled
|
|
14792
14823
|
// during fullscreen open to prevent touch pass-through.
|
|
14793
14824
|
this.menu.style.pointerEvents = '';
|
|
14794
14825
|
|
|
14795
|
-
|
|
14826
|
+
// When closing a fullscreen bib, restore focus to the trigger so that
|
|
14827
|
+
// keyboard navigation continues from the correct place in the page
|
|
14828
|
+
if (this.dropdown.isBibFullscreen) {
|
|
14829
|
+
restoreTriggerAfterClose(this.dropdown, this.input);
|
|
14830
|
+
}
|
|
14796
14831
|
}
|
|
14797
14832
|
|
|
14798
14833
|
if (this.dropdownOpen) {
|
|
@@ -14827,13 +14862,6 @@ class AuroCombobox extends AuroElement {
|
|
|
14827
14862
|
this.setInputFocus();
|
|
14828
14863
|
this._inFullscreenTransition = false;
|
|
14829
14864
|
});
|
|
14830
|
-
} else {
|
|
14831
|
-
// wait a frame in case the bib gets hidden immediately after showing because there is no value
|
|
14832
|
-
setTimeout(() => {
|
|
14833
|
-
if (this.componentHasFocus) {
|
|
14834
|
-
this.setInputFocus();
|
|
14835
|
-
}
|
|
14836
|
-
}, 0);
|
|
14837
14865
|
}
|
|
14838
14866
|
}
|
|
14839
14867
|
});
|
|
@@ -14883,7 +14911,25 @@ class AuroCombobox extends AuroElement {
|
|
|
14883
14911
|
setClearBtnFocus() {
|
|
14884
14912
|
const clearBtn = this.input.shadowRoot.querySelector('.clearBtn');
|
|
14885
14913
|
if (clearBtn) {
|
|
14886
|
-
|
|
14914
|
+
// Wait for the element to fully render across
|
|
14915
|
+
// multiple Lit update cycles before moving focus
|
|
14916
|
+
doubleRaf(() => {
|
|
14917
|
+
clearBtn.focus();
|
|
14918
|
+
});
|
|
14919
|
+
}
|
|
14920
|
+
}
|
|
14921
|
+
|
|
14922
|
+
/**
|
|
14923
|
+
* @private
|
|
14924
|
+
*/
|
|
14925
|
+
setTriggerInputFocus() {
|
|
14926
|
+
const input = this.input.shadowRoot.querySelector('input');
|
|
14927
|
+
if (input) {
|
|
14928
|
+
// Wait for the element to fully render across
|
|
14929
|
+
// multiple Lit update cycles before moving focus
|
|
14930
|
+
doubleRaf(() => {
|
|
14931
|
+
input.focus();
|
|
14932
|
+
});
|
|
14887
14933
|
}
|
|
14888
14934
|
}
|
|
14889
14935
|
|
|
@@ -1521,7 +1521,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1521
1521
|
}
|
|
1522
1522
|
};
|
|
1523
1523
|
|
|
1524
|
-
var formkitVersion$1 = '
|
|
1524
|
+
var formkitVersion$1 = '202604032311';
|
|
1525
1525
|
|
|
1526
1526
|
// Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
1527
1527
|
// See LICENSE in the project root for license information.
|
|
@@ -5580,7 +5580,7 @@ class AuroHelpText extends i$2 {
|
|
|
5580
5580
|
}
|
|
5581
5581
|
}
|
|
5582
5582
|
|
|
5583
|
-
var formkitVersion = '
|
|
5583
|
+
var formkitVersion = '202604032311';
|
|
5584
5584
|
|
|
5585
5585
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5586
5586
|
static get properties() {
|
|
@@ -1521,7 +1521,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1521
1521
|
}
|
|
1522
1522
|
};
|
|
1523
1523
|
|
|
1524
|
-
var formkitVersion$1 = '
|
|
1524
|
+
var formkitVersion$1 = '202604032311';
|
|
1525
1525
|
|
|
1526
1526
|
// Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
1527
1527
|
// See LICENSE in the project root for license information.
|
|
@@ -5580,7 +5580,7 @@ class AuroHelpText extends i$2 {
|
|
|
5580
5580
|
}
|
|
5581
5581
|
}
|
|
5582
5582
|
|
|
5583
|
-
var formkitVersion = '
|
|
5583
|
+
var formkitVersion = '202604032311';
|
|
5584
5584
|
|
|
5585
5585
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5586
5586
|
static get properties() {
|
|
@@ -1471,7 +1471,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1471
1471
|
}
|
|
1472
1472
|
};
|
|
1473
1473
|
|
|
1474
|
-
var formkitVersion$1 = '
|
|
1474
|
+
var formkitVersion$1 = '202604032311';
|
|
1475
1475
|
|
|
1476
1476
|
// Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
1477
1477
|
// See LICENSE in the project root for license information.
|
|
@@ -5512,7 +5512,7 @@ class AuroHelpText extends LitElement {
|
|
|
5512
5512
|
}
|
|
5513
5513
|
}
|
|
5514
5514
|
|
|
5515
|
-
var formkitVersion = '
|
|
5515
|
+
var formkitVersion = '202604032311';
|
|
5516
5516
|
|
|
5517
5517
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5518
5518
|
static get properties() {
|
|
@@ -1471,7 +1471,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1471
1471
|
}
|
|
1472
1472
|
};
|
|
1473
1473
|
|
|
1474
|
-
var formkitVersion$1 = '
|
|
1474
|
+
var formkitVersion$1 = '202604032311';
|
|
1475
1475
|
|
|
1476
1476
|
// Copyright (c) 2026 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
1477
1477
|
// See LICENSE in the project root for license information.
|
|
@@ -5512,7 +5512,7 @@ class AuroHelpText extends LitElement {
|
|
|
5512
5512
|
}
|
|
5513
5513
|
}
|
|
5514
5514
|
|
|
5515
|
-
var formkitVersion = '
|
|
5515
|
+
var formkitVersion = '202604032311';
|
|
5516
5516
|
|
|
5517
5517
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5518
5518
|
static get properties() {
|
|
@@ -32,7 +32,7 @@ The `auro-datepicker` component provides users with a way to select a date or da
|
|
|
32
32
|
| [offset](#offset) | `offset` | | `number` | "0" | Gap between the trigger element and bib. |
|
|
33
33
|
| [onDark](#onDark) | `onDark` | | `boolean` | false | DEPRECATED - use `appearance="inverse"` instead. |
|
|
34
34
|
| [placeholder](#placeholder) | `placeholder` | | `string` | | Placeholder text to display in the input(s) when no value is set. |
|
|
35
|
-
| [placeholderEndDate](#placeholderEndDate) | `placeholderEndDate` | | `string` | | Optional placeholder text to display in the second input when using date range.<br />By default, datepicker will use `placeholder` for both inputs if placeholder is<br />specified, but
|
|
35
|
+
| [placeholderEndDate](#placeholderEndDate) | `placeholderEndDate` | | `string` | | Optional placeholder text to display in the second input when using date range.<br />By default, datepicker will use `placeholder` for both inputs if placeholder is<br />specified, but placeholderEndDate is not. |
|
|
36
36
|
| [placement](#placement) | `placement` | | `'top' \| 'right' \| 'bottom' \| 'left' \| 'bottom-start' \| 'top-start' \| 'top-end' \| 'right-start' \| 'right-end' \| 'bottom-end' \| 'left-start' \| 'left-end'` | "'bottom-start'" | Position where the bib should appear relative to the trigger. |
|
|
37
37
|
| [range](#range) | `range` | | `boolean` | false | If set, turns on date range functionality in auro-calendar. |
|
|
38
38
|
| [referenceDates](#referenceDates) | `referenceDates` | | `array` | | Dates that the user should have for reference as part of their decision making when selecting a date.<br />This should be a JSON string array of dates in the format of `MM-DD-YYYY`. |
|