@aurodesignsystem-dev/auro-formkit 0.0.0-pr1408.9 → 0.0.0-pr1411.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/checkbox/demo/api.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/demo/keyboardBehavior.md +0 -0
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/api.min.js +121 -144
- package/components/combobox/demo/index.min.js +121 -144
- package/components/combobox/demo/keyboardBehavior.html +1 -0
- package/components/combobox/demo/keyboardBehavior.md +20 -21
- package/components/combobox/dist/index.js +87 -117
- package/components/combobox/dist/registered.js +87 -117
- package/components/counter/demo/api.md +1 -1
- package/components/counter/demo/api.min.js +184 -148
- package/components/counter/demo/index.min.js +184 -148
- package/components/counter/demo/keyboardBehavior.html +1 -0
- package/components/counter/demo/keyboardBehavior.md +1 -1
- package/components/counter/dist/auro-counter.d.ts +11 -8
- package/components/counter/dist/index.js +184 -148
- package/components/counter/dist/keyboardStrategy.d.ts +4 -0
- package/components/counter/dist/registered.js +184 -148
- package/components/datepicker/demo/api.min.js +89 -120
- package/components/datepicker/demo/index.min.js +89 -120
- package/components/datepicker/demo/keyboardBehavior.html +1 -0
- package/components/datepicker/demo/keyboardBehavior.md +14 -13
- package/components/datepicker/dist/index.js +84 -115
- package/components/datepicker/dist/registered.js +84 -115
- package/components/dropdown/demo/api.md +0 -1
- package/components/dropdown/demo/api.min.js +99 -123
- package/components/dropdown/demo/index.md +2 -2
- package/components/dropdown/demo/index.min.js +99 -123
- package/components/dropdown/demo/keyboardBehavior.html +1 -0
- package/components/dropdown/dist/auro-dropdown.d.ts +0 -8
- package/components/dropdown/dist/auro-dropdownBib.d.ts +1 -40
- package/components/dropdown/dist/dropdownBibKeyboardStrategy.d.ts +7 -0
- package/components/dropdown/dist/index.js +83 -111
- package/components/dropdown/dist/registered.js +83 -111
- package/components/form/demo/api.min.js +542 -564
- package/components/form/demo/index.min.js +542 -564
- package/components/form/demo/keyboardBehavior.md +0 -0
- package/components/input/demo/api.min.js +1 -1
- package/components/input/demo/index.min.js +1 -1
- package/components/input/demo/keyboardBehavior.md +0 -0
- package/components/input/dist/index.js +1 -1
- package/components/input/dist/registered.js +1 -1
- package/components/menu/demo/api.min.js +34 -27
- package/components/menu/demo/index.min.js +34 -27
- package/components/menu/dist/auro-menu.d.ts +0 -6
- package/components/menu/dist/index.js +34 -27
- package/components/menu/dist/registered.js +34 -27
- package/components/radio/demo/api.min.js +1 -1
- package/components/radio/demo/index.min.js +1 -1
- package/components/radio/dist/index.js +1 -1
- package/components/radio/dist/registered.js +1 -1
- package/components/select/demo/api.min.js +181 -178
- package/components/select/demo/index.min.js +181 -178
- package/components/select/demo/keyboardBehavior.html +1 -0
- package/components/select/demo/keyboardBehavior.md +240 -239
- package/components/select/dist/index.js +147 -151
- package/components/select/dist/registered.js +147 -151
- package/components/select/dist/selectKeyboardStrategy.d.ts +3 -1
- package/custom-elements.json +101 -83
- package/package.json +5 -3
|
@@ -1165,7 +1165,7 @@ function restoreTriggerAfterClose(dropdown, focusTarget) {
|
|
|
1165
1165
|
* @returns {{isExpanded: boolean, isModal: boolean, isPopover: boolean, activeInput: HTMLElement|null}}
|
|
1166
1166
|
* isModal and isPopover reflect the display mode (fullscreen vs not) regardless of expanded state.
|
|
1167
1167
|
*/
|
|
1168
|
-
function createDisplayContext(component, options = {}) {
|
|
1168
|
+
function createDisplayContext$1(component, options = {}) {
|
|
1169
1169
|
const dd = options.dropdown || component.dropdown;
|
|
1170
1170
|
// isPopoverVisible reflects as the `open` attribute.
|
|
1171
1171
|
// It reports whether the bib is open in any mode (popover or modal).
|
|
@@ -1195,11 +1195,11 @@ function createDisplayContext(component, options = {}) {
|
|
|
1195
1195
|
* @param {Object} strategy - Map of key names to handler functions.
|
|
1196
1196
|
* @param {Object} [options] - Optional config passed to createDisplayContext.
|
|
1197
1197
|
*/
|
|
1198
|
-
function applyKeyboardStrategy(component, strategy, options = {}) {
|
|
1198
|
+
function applyKeyboardStrategy$1(component, strategy, options = {}) {
|
|
1199
1199
|
component.addEventListener('keydown', async (evt) => {
|
|
1200
1200
|
const handler = strategy[evt.key] || strategy.default;
|
|
1201
1201
|
if (typeof handler === 'function') {
|
|
1202
|
-
const ctx = createDisplayContext(component, options);
|
|
1202
|
+
const ctx = createDisplayContext$1(component, options);
|
|
1203
1203
|
await handler(component, evt, ctx);
|
|
1204
1204
|
}
|
|
1205
1205
|
});
|
|
@@ -3455,11 +3455,10 @@ class AuroFloatingUI {
|
|
|
3455
3455
|
return;
|
|
3456
3456
|
}
|
|
3457
3457
|
|
|
3458
|
-
const { activeElement } = document;
|
|
3459
3458
|
// if focus is still inside of trigger or bib, do not close
|
|
3460
3459
|
if (
|
|
3461
|
-
this.element.
|
|
3462
|
-
this.element.
|
|
3460
|
+
this.element.matches(":focus") ||
|
|
3461
|
+
this.element.matches(":focus-within")
|
|
3463
3462
|
) {
|
|
3464
3463
|
return;
|
|
3465
3464
|
}
|
|
@@ -4298,12 +4297,83 @@ let p$4 = class p{registerComponent(t,a){customElements.get(t)||customElements.d
|
|
|
4298
4297
|
|
|
4299
4298
|
var iconVersion$3 = '9.1.2';
|
|
4300
4299
|
|
|
4300
|
+
/**
|
|
4301
|
+
* Computes display state once per keydown event.
|
|
4302
|
+
* Centralizes null-safety checks and makes the shared/modal/popover branching explicit.
|
|
4303
|
+
*
|
|
4304
|
+
* @param {HTMLElement} component - The component with a dropdown reference.
|
|
4305
|
+
* @param {Object} [options] - Optional config.
|
|
4306
|
+
* @param {HTMLElement} [options.dropdown] - Explicit dropdown reference. Falls back to component.dropdown.
|
|
4307
|
+
* @param {Function} [options.inputResolver] - Called with (component, ctx) to resolve the active input element.
|
|
4308
|
+
* @returns {{isExpanded: boolean, isModal: boolean, isPopover: boolean, activeInput: HTMLElement|null}}
|
|
4309
|
+
* isModal and isPopover reflect the display mode (fullscreen vs not) regardless of expanded state.
|
|
4310
|
+
*/
|
|
4311
|
+
function createDisplayContext(component, options = {}) {
|
|
4312
|
+
const dd = options.dropdown || component.dropdown;
|
|
4313
|
+
// isPopoverVisible reflects as the `open` attribute.
|
|
4314
|
+
// It reports whether the bib is open in any mode (popover or modal).
|
|
4315
|
+
const isExpanded = Boolean(dd && dd.isPopoverVisible);
|
|
4316
|
+
const isFullscreen = Boolean(dd && dd.isBibFullscreen);
|
|
4317
|
+
|
|
4318
|
+
const ctx = {
|
|
4319
|
+
isExpanded,
|
|
4320
|
+
isModal: isFullscreen,
|
|
4321
|
+
isPopover: !isFullscreen,
|
|
4322
|
+
activeInput: null,
|
|
4323
|
+
};
|
|
4324
|
+
|
|
4325
|
+
if (options.inputResolver) {
|
|
4326
|
+
const resolvedInput = options.inputResolver(component, ctx);
|
|
4327
|
+
// Guard against resolvers returning undefined or non-HTMLElement values.
|
|
4328
|
+
ctx.activeInput = resolvedInput instanceof HTMLElement ? resolvedInput : null;
|
|
4329
|
+
}
|
|
4330
|
+
|
|
4331
|
+
return ctx;
|
|
4332
|
+
}
|
|
4333
|
+
|
|
4334
|
+
/**
|
|
4335
|
+
* Wires up a keydown listener that dispatches to strategy[evt.key] or strategy.default.
|
|
4336
|
+
* Handles both sync and async handlers.
|
|
4337
|
+
* @param {HTMLElement} component - The component to attach the listener to.
|
|
4338
|
+
* @param {Object} strategy - Map of key names to handler functions.
|
|
4339
|
+
* @param {Object} [options] - Optional config passed to createDisplayContext.
|
|
4340
|
+
*/
|
|
4341
|
+
function applyKeyboardStrategy(component, strategy, options = {}) {
|
|
4342
|
+
component.addEventListener('keydown', async (evt) => {
|
|
4343
|
+
const handler = strategy[evt.key] || strategy.default;
|
|
4344
|
+
if (typeof handler === 'function') {
|
|
4345
|
+
const ctx = createDisplayContext(component, options);
|
|
4346
|
+
await handler(component, evt, ctx);
|
|
4347
|
+
}
|
|
4348
|
+
});
|
|
4349
|
+
}
|
|
4350
|
+
|
|
4301
4351
|
var styleCss$2$1 = i$7`:host{position:fixed;z-index:var(--depth-tooltip, 400);display:none;isolation:isolate}:host dialog{width:auto;max-width:none;height:auto;max-height:none;padding:0;border:none;margin:0;outline:none;transform:translateZ(0)}:host dialog::backdrop{background:transparent}:host(:not([isfullscreen])) dialog{position:relative;inset:unset}:host(:not([isfullscreen])) .container.shape-box{border-radius:unset}:host(:not([isfullscreen])) .container[class*=shape-pill],:host(:not([isfullscreen])) .container[class*=shape-snowflake]{border-radius:30px}:host(:not([isfullscreen])) .container[class*=shape-rounded]{border-radius:16px}:host(:not([matchWidth])) .container{min-width:fit-content}:host([isfullscreen]){position:fixed;top:0;left:0}:host([isfullscreen]) .container{width:100dvw;max-width:none;height:100dvh;max-height:none;border-radius:unset;margin-top:0;box-shadow:unset;overscroll-behavior:contain}:host([isfullscreen]) .container::backdrop{background:var(--ds-color-background-primary, #fff)}:host(:popover-open){position:fixed;overflow:visible;padding:0;border:none;margin:0;background:transparent;inset:unset;outline:none}:host([data-show]){display:flex}:host([common]:not([isfullscreen])) .container,:host([rounded]:not([isfullscreen])) .container{border-radius:var(--ds-border-radius, 0.375rem)}:host([common][isfullscreen]) .container,:host([rounded][isfullscreen]) .container{border-radius:unset;box-shadow:unset}.container{display:inline-block;overflow:auto;box-sizing:border-box;border-radius:var(--ds-border-radius, 0.375rem);margin:var(--ds-size-50, 0.25rem) 0}.util_displayHiddenVisually{position:absolute;overflow:hidden;width:1px;height:1px;padding:0;border:0;margin:-1px;clip-path:inset(50%);white-space:nowrap}`;
|
|
4302
4352
|
|
|
4303
4353
|
var colorCss$2$1 = i$7`.container{background-color:var(--ds-auro-dropdownbib-container-color);box-shadow:var(--ds-auro-dropdownbib-boxshadow-color);color:var(--ds-auro-dropdownbib-text-color)}`;
|
|
4304
4354
|
|
|
4305
4355
|
var tokensCss$1$2 = i$7`:host(:not([ondark])),:host(:not([appearance=inverse])){--ds-auro-dropdown-label-text-color: var(--ds-basic-color-texticon-muted, #676767);--ds-auro-dropdown-trigger-background-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-dropdown-trigger-hover-background-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-dropdown-trigger-container-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-dropdown-trigger-border-color: var(--ds-basic-color-border-bold, #585e67);--ds-auro-dropdown-trigger-outline-color: transparent;--ds-auro-dropdown-trigger-text-color: var(--ds-basic-color-texticon-default, #2a2a2a);--ds-auro-dropdownbib-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-background-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-dropdownbib-container-color: var(--ds-basic-color-surface-default, #ffffff);--ds-auro-dropdownbib-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-dropdown-label-text-color: var(--ds-basic-color-texticon-inverse-muted, #ccd2db);--ds-auro-dropdown-trigger-background-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-dropdown-trigger-hover-background-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-dropdown-trigger-container-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-dropdown-trigger-border-color: var(--ds-basic-color-border-inverse, #ffffff);--ds-auro-dropdown-trigger-outline-color: transparent;--ds-auro-dropdown-trigger-text-color: var(--ds-basic-color-texticon-inverse, #ffffff);--ds-auro-dropdownbib-boxshadow-color: var(--ds-elevation-200, 0px 0px 10px rgba(0, 0, 0, 0.15));--ds-auro-dropdownbib-background-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-dropdownbib-container-color: var(--ds-advanced-color-shared-background-inverse, rgba(255, 255, 255, 0.15));--ds-auro-dropdownbib-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}`;
|
|
4306
4356
|
|
|
4357
|
+
/**
|
|
4358
|
+
* Creates a keyboard strategy for dialog-specific key handling.
|
|
4359
|
+
* All other keydown behavior is left to the browser's native bubbling path.
|
|
4360
|
+
* @param {HTMLElement} bib - The dropdown bib element.
|
|
4361
|
+
* @returns {Object} Keyboard handlers keyed by `event.key`.
|
|
4362
|
+
*/
|
|
4363
|
+
// eslint-disable-next-line no-unused-vars
|
|
4364
|
+
function createDropdownBibKeyboardStrategy(bib) {
|
|
4365
|
+
return {
|
|
4366
|
+
// eslint-disable-next-line no-unused-vars
|
|
4367
|
+
Enter(_dialog, event) {
|
|
4368
|
+
// Floating UI handles Enter key to open the dropdown
|
|
4369
|
+
},
|
|
4370
|
+
// eslint-disable-next-line no-unused-vars
|
|
4371
|
+
Escape(_dialog, event) {
|
|
4372
|
+
// Floating UI handles Escape key to close the dropdown
|
|
4373
|
+
}
|
|
4374
|
+
};
|
|
4375
|
+
}
|
|
4376
|
+
|
|
4307
4377
|
// Copyright (c) 2020 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
4308
4378
|
// See LICENSE in the project root for license information.
|
|
4309
4379
|
/* eslint-disable max-lines */
|
|
@@ -4428,11 +4498,7 @@ class AuroDropdownBib extends i$4 {
|
|
|
4428
4498
|
},
|
|
4429
4499
|
|
|
4430
4500
|
/**
|
|
4431
|
-
*
|
|
4432
|
-
* aria-activedescendant. The dialog keyboard bridge checks this
|
|
4433
|
-
* flag so that Enter selects the highlighted option instead of
|
|
4434
|
-
* activating the focused interactive element (e.g. the trigger
|
|
4435
|
-
* button, or the bibtemplate close button in fullscreen).
|
|
4501
|
+
* Tracks whether a menu option is currently highlighted.
|
|
4436
4502
|
* @private
|
|
4437
4503
|
*/
|
|
4438
4504
|
hasActiveDescendant: {
|
|
@@ -4506,7 +4572,7 @@ class AuroDropdownBib extends i$4 {
|
|
|
4506
4572
|
|
|
4507
4573
|
const dialog = this.shadowRoot.querySelector('dialog');
|
|
4508
4574
|
this._setupCancelHandler(dialog);
|
|
4509
|
-
|
|
4575
|
+
applyKeyboardStrategy(dialog, createDropdownBibKeyboardStrategy());
|
|
4510
4576
|
|
|
4511
4577
|
this.dispatchEvent(new CustomEvent('auro-dropdownbib-connected', {
|
|
4512
4578
|
bubbles: true,
|
|
@@ -4533,92 +4599,6 @@ class AuroDropdownBib extends i$4 {
|
|
|
4533
4599
|
});
|
|
4534
4600
|
}
|
|
4535
4601
|
|
|
4536
|
-
/**
|
|
4537
|
-
* showModal() creates a closed focus scope — keyboard events inside
|
|
4538
|
-
* the dialog's shadow DOM do NOT bubble out to the combobox/select
|
|
4539
|
-
* keydown handlers in the parent shadow DOM. This handler bridges
|
|
4540
|
-
* that gap by re-dispatching navigation keys so they cross the
|
|
4541
|
-
* shadow boundary and reach the menu navigation logic in the parent
|
|
4542
|
-
* component.
|
|
4543
|
-
*
|
|
4544
|
-
* The trade-off: intercepting these keys means native keyboard
|
|
4545
|
-
* behaviors that would normally "just work" must be manually
|
|
4546
|
-
* re-implemented here:
|
|
4547
|
-
*
|
|
4548
|
-
* - Enter on buttons: Custom elements (auro-button) don't get the
|
|
4549
|
-
* native Enter→click that <button> provides, so we call .click()
|
|
4550
|
-
* directly when Enter is pressed on a button-like element.
|
|
4551
|
-
*
|
|
4552
|
-
* - Tab: Intercepted and re-dispatched so parent components
|
|
4553
|
-
* (select/combobox) can select the active option and close the
|
|
4554
|
-
* dialog. The <dialog> provides containment and isolation
|
|
4555
|
-
* (inert background, VoiceOver focus trapping, top layer), while
|
|
4556
|
-
* the content inside is a role="listbox" navigated via
|
|
4557
|
-
* aria-activedescendant (options are not focusable). Tab keyboard
|
|
4558
|
-
* behavior follows listbox conventions (select + close) because
|
|
4559
|
-
* the dialog's native Tab trap only cycles between the close
|
|
4560
|
-
* button and browser chrome.
|
|
4561
|
-
*
|
|
4562
|
-
* - Escape: The native <dialog> fires a `cancel` event on ESC
|
|
4563
|
-
* (handled by _setupCancelHandler), so the re-dispatched Escape
|
|
4564
|
-
* is a secondary path for parent components that also listen for
|
|
4565
|
-
* Escape keydown.
|
|
4566
|
-
*
|
|
4567
|
-
* @param {HTMLDialogElement} dialog - The dialog element to attach the keyboard bridge to.
|
|
4568
|
-
* @private
|
|
4569
|
-
*/
|
|
4570
|
-
_setupKeyboardBridge(dialog) {
|
|
4571
|
-
const navKeys = new Set([
|
|
4572
|
-
'ArrowUp',
|
|
4573
|
-
'ArrowDown',
|
|
4574
|
-
'Enter',
|
|
4575
|
-
'Escape',
|
|
4576
|
-
'Tab'
|
|
4577
|
-
]);
|
|
4578
|
-
|
|
4579
|
-
dialog.addEventListener('keydown', (event) => {
|
|
4580
|
-
if (!navKeys.has(event.key)) {
|
|
4581
|
-
return;
|
|
4582
|
-
}
|
|
4583
|
-
|
|
4584
|
-
// Custom elements (auro-button) don't get the native Enter→click
|
|
4585
|
-
// behavior that <button> has. Find the button in the composed path
|
|
4586
|
-
// and click it directly — but only when no menu option is
|
|
4587
|
-
// highlighted. In fullscreen mode focus stays on the close button
|
|
4588
|
-
// while arrow keys move the active-descendant highlight through
|
|
4589
|
-
// the listbox. If the user presses Enter with an option
|
|
4590
|
-
// highlighted, the intent is to select that option, not to click
|
|
4591
|
-
// the close button. In that case we fall through and bridge the
|
|
4592
|
-
// Enter key to the parent component's keyboard strategy.
|
|
4593
|
-
if (event.key === 'Enter') {
|
|
4594
|
-
if (!this.hasActiveDescendant) {
|
|
4595
|
-
const buttonSelector = 'button, [role="button"], auro-button, [auro-button]';
|
|
4596
|
-
const btn = event.composedPath().find((el) => el.matches && el.matches(buttonSelector));
|
|
4597
|
-
if (btn) {
|
|
4598
|
-
event.preventDefault();
|
|
4599
|
-
event.stopPropagation();
|
|
4600
|
-
btn.click();
|
|
4601
|
-
return;
|
|
4602
|
-
}
|
|
4603
|
-
}
|
|
4604
|
-
}
|
|
4605
|
-
|
|
4606
|
-
event.preventDefault();
|
|
4607
|
-
event.stopPropagation();
|
|
4608
|
-
const newEvent = new KeyboardEvent('keydown', {
|
|
4609
|
-
key: event.key,
|
|
4610
|
-
code: event.code,
|
|
4611
|
-
shiftKey: event.shiftKey,
|
|
4612
|
-
altKey: event.altKey,
|
|
4613
|
-
ctrlKey: event.ctrlKey,
|
|
4614
|
-
metaKey: event.metaKey,
|
|
4615
|
-
bubbles: true,
|
|
4616
|
-
composed: true,
|
|
4617
|
-
cancelable: true
|
|
4618
|
-
});
|
|
4619
|
-
this.dispatchEvent(newEvent);
|
|
4620
|
-
});
|
|
4621
|
-
}
|
|
4622
4602
|
|
|
4623
4603
|
/**
|
|
4624
4604
|
* Blocks touch-driven page scroll while a fullscreen modal dialog is open.
|
|
@@ -4993,7 +4973,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$4 {
|
|
|
4993
4973
|
}
|
|
4994
4974
|
};
|
|
4995
4975
|
|
|
4996
|
-
var formkitVersion$2 = '
|
|
4976
|
+
var formkitVersion$2 = '202604021512';
|
|
4997
4977
|
|
|
4998
4978
|
let AuroElement$2 = class AuroElement extends i$4 {
|
|
4999
4979
|
static get properties() {
|
|
@@ -5174,7 +5154,6 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5174
5154
|
this.appearance = 'default';
|
|
5175
5155
|
this.chevron = false;
|
|
5176
5156
|
this.disabled = false;
|
|
5177
|
-
this.disableFocusTrap = false;
|
|
5178
5157
|
this.error = false;
|
|
5179
5158
|
this.tabIndex = 0;
|
|
5180
5159
|
this.noToggle = false;
|
|
@@ -5272,9 +5251,8 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5272
5251
|
// showModal() fires asynchronously via Lit's update cycle, which
|
|
5273
5252
|
// falls outside the user activation window and causes iOS to
|
|
5274
5253
|
// dismiss the keyboard.
|
|
5275
|
-
if (this.
|
|
5276
|
-
|
|
5277
|
-
this.bibElement.value.open(useModal);
|
|
5254
|
+
if (this.bibElement && this.bibElement.value) {
|
|
5255
|
+
this.bibElement.value.open(this.isBibFullscreen);
|
|
5278
5256
|
}
|
|
5279
5257
|
}
|
|
5280
5258
|
|
|
@@ -5387,14 +5365,6 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5387
5365
|
reflect: true
|
|
5388
5366
|
},
|
|
5389
5367
|
|
|
5390
|
-
/**
|
|
5391
|
-
* If declared, the focus trap inside of bib will be turned off.
|
|
5392
|
-
*/
|
|
5393
|
-
disableFocusTrap: {
|
|
5394
|
-
type: Boolean,
|
|
5395
|
-
reflect: true
|
|
5396
|
-
},
|
|
5397
|
-
|
|
5398
5368
|
/**
|
|
5399
5369
|
* @private
|
|
5400
5370
|
*/
|
|
@@ -5668,7 +5638,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5668
5638
|
if (this.isPopoverVisible) {
|
|
5669
5639
|
// Fullscreen: use showModal() for native accessibility (inert outside, focus trap)
|
|
5670
5640
|
// Desktop: use show() for Floating UI positioning + FocusTrap for focus management
|
|
5671
|
-
const useModal = this.isBibFullscreen
|
|
5641
|
+
const useModal = this.isBibFullscreen;
|
|
5672
5642
|
this.bibElement.value.open(useModal);
|
|
5673
5643
|
} else {
|
|
5674
5644
|
this.bibElement.value.close();
|
|
@@ -5678,7 +5648,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5678
5648
|
// When fullscreen strategy changes while open, re-open dialog with correct mode
|
|
5679
5649
|
// (e.g. resizing from desktop → mobile while dropdown is open)
|
|
5680
5650
|
if (changedProperties.has('isBibFullscreen') && this.isPopoverVisible && this.bibElement.value) {
|
|
5681
|
-
const useModal = this.isBibFullscreen
|
|
5651
|
+
const useModal = this.isBibFullscreen;
|
|
5682
5652
|
this.bibElement.value.close();
|
|
5683
5653
|
this.bibElement.value.open(useModal);
|
|
5684
5654
|
}
|
|
@@ -5790,7 +5760,7 @@ class AuroDropdown extends AuroElement$2 {
|
|
|
5790
5760
|
* @private
|
|
5791
5761
|
*/
|
|
5792
5762
|
updateFocusTrap() {
|
|
5793
|
-
if (this.isPopoverVisible
|
|
5763
|
+
if (this.isPopoverVisible) {
|
|
5794
5764
|
if (!this.isBibFullscreen) {
|
|
5795
5765
|
// Desktop: show() doesn't trap focus, so use FocusTrap
|
|
5796
5766
|
this.focusTrap = new FocusTrap(this.bibContent);
|
|
@@ -12757,7 +12727,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$4 {
|
|
|
12757
12727
|
}
|
|
12758
12728
|
};
|
|
12759
12729
|
|
|
12760
|
-
var formkitVersion$1 = '
|
|
12730
|
+
var formkitVersion$1 = '202604021512';
|
|
12761
12731
|
|
|
12762
12732
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
12763
12733
|
// See LICENSE in the project root for license information.
|
|
@@ -13796,7 +13766,7 @@ class AuroBibtemplate extends i$4 {
|
|
|
13796
13766
|
}
|
|
13797
13767
|
}
|
|
13798
13768
|
|
|
13799
|
-
var formkitVersion = '
|
|
13769
|
+
var formkitVersion = '202604021512';
|
|
13800
13770
|
|
|
13801
13771
|
var styleCss$3 = i$7`.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}`;
|
|
13802
13772
|
|
|
@@ -15290,7 +15260,7 @@ class AuroCombobox extends AuroElement {
|
|
|
15290
15260
|
* @returns {void}
|
|
15291
15261
|
*/
|
|
15292
15262
|
configureCombobox() {
|
|
15293
|
-
applyKeyboardStrategy(this, comboboxKeyboardStrategy, {
|
|
15263
|
+
applyKeyboardStrategy$1(this, comboboxKeyboardStrategy, {
|
|
15294
15264
|
// In modal mode the input moves into the bib; route keyboard events to that element instead.
|
|
15295
15265
|
inputResolver: (comp, ctx) => (ctx.isModal && comp.inputInBib ? comp.inputInBib : comp.input),
|
|
15296
15266
|
});
|
|
@@ -16299,7 +16269,7 @@ class AuroMenuOption extends AuroElement {
|
|
|
16299
16269
|
});
|
|
16300
16270
|
|
|
16301
16271
|
return u$7`
|
|
16302
|
-
<div class="${classes}">
|
|
16272
|
+
<div class="${classes}" aria-disabled="${this.disabled ? 'true' : 'false'}">
|
|
16303
16273
|
${this.selected && !this.noCheckmark
|
|
16304
16274
|
? this.generateIconHtml(checkmarkIcon.svg)
|
|
16305
16275
|
: undefined}
|
|
@@ -17070,10 +17040,10 @@ class AuroMenu extends AuroElement {
|
|
|
17070
17040
|
|
|
17071
17041
|
// Event Bindings
|
|
17072
17042
|
|
|
17073
|
-
/**
|
|
17074
|
-
|
|
17075
|
-
|
|
17076
|
-
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
17043
|
+
// /**
|
|
17044
|
+
// * @private
|
|
17045
|
+
// */
|
|
17046
|
+
// this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
17077
17047
|
|
|
17078
17048
|
|
|
17079
17049
|
/**
|
|
@@ -17422,7 +17392,7 @@ class AuroMenu extends AuroElement {
|
|
|
17422
17392
|
|
|
17423
17393
|
this.provideContext();
|
|
17424
17394
|
|
|
17425
|
-
this.addEventListener('keydown', this.handleKeyDown);
|
|
17395
|
+
// this.addEventListener('keydown', this.handleKeyDown);
|
|
17426
17396
|
this.addEventListener('auroMenuOption-click', this.handleMouseSelect);
|
|
17427
17397
|
this.addEventListener('auroMenuOption-mouseover', this.handleOptionHover);
|
|
17428
17398
|
this.addEventListener('slotchange', this.handleSlotChange);
|
|
@@ -17430,7 +17400,7 @@ class AuroMenu extends AuroElement {
|
|
|
17430
17400
|
}
|
|
17431
17401
|
|
|
17432
17402
|
disconnectedCallback() {
|
|
17433
|
-
this.removeEventListener('keydown', this.handleKeyDown);
|
|
17403
|
+
// this.removeEventListener('keydown', this.handleKeyDown);
|
|
17434
17404
|
this.removeEventListener('auroMenuOption-click', this.handleMouseSelect);
|
|
17435
17405
|
this.removeEventListener('auroMenuOption-mouseover', this.handleOptionHover);
|
|
17436
17406
|
this.removeEventListener('slotchange', this.handleSlotChange);
|
|
@@ -17571,26 +17541,33 @@ class AuroMenu extends AuroElement {
|
|
|
17571
17541
|
|
|
17572
17542
|
// Event Handlers
|
|
17573
17543
|
|
|
17574
|
-
/**
|
|
17575
|
-
|
|
17576
|
-
|
|
17577
|
-
|
|
17578
|
-
|
|
17579
|
-
handleKeyDown(event) {
|
|
17580
|
-
|
|
17581
|
-
|
|
17582
|
-
|
|
17583
|
-
|
|
17584
|
-
|
|
17585
|
-
|
|
17586
|
-
|
|
17587
|
-
|
|
17588
|
-
|
|
17589
|
-
|
|
17590
|
-
|
|
17591
|
-
|
|
17592
|
-
|
|
17593
|
-
|
|
17544
|
+
// /**
|
|
17545
|
+
// * Handles keyboard navigation.
|
|
17546
|
+
// * @private
|
|
17547
|
+
// * @param {KeyboardEvent} event - Event object from the browser.
|
|
17548
|
+
// */
|
|
17549
|
+
// handleKeyDown(event) {
|
|
17550
|
+
// // Update to Chris keyboard handler
|
|
17551
|
+
// // We have a new "navigateArrow" function in that handler, maybe that replaces those keys here?
|
|
17552
|
+
// event.preventDefault();
|
|
17553
|
+
// switch (event.key) {
|
|
17554
|
+
// case "ArrowDown":
|
|
17555
|
+
// console.warn("ArrowDown key is pressed and heard from menu");
|
|
17556
|
+
// this.menuService.highlightNext();
|
|
17557
|
+
// break;
|
|
17558
|
+
// case "ArrowUp":
|
|
17559
|
+
// console.warn("ArrowUp key is pressed and heard from menu");
|
|
17560
|
+
// this.menuService.highlightPrevious();
|
|
17561
|
+
// break;
|
|
17562
|
+
// case "Tab":
|
|
17563
|
+
// case "Enter":
|
|
17564
|
+
// this.menuService.selectHighlightedOption();
|
|
17565
|
+
// // Does this need to get separated into two cases to handle the different expected behavior of tab vs enter?
|
|
17566
|
+
// break;
|
|
17567
|
+
// default:
|
|
17568
|
+
// break;
|
|
17569
|
+
// }
|
|
17570
|
+
// }
|
|
17594
17571
|
|
|
17595
17572
|
/**
|
|
17596
17573
|
* Navigates the menu options in the specified direction.
|
|
@@ -76,5 +76,6 @@
|
|
|
76
76
|
|
|
77
77
|
<!-- If additional elements are needed for the demo, add them here. -->
|
|
78
78
|
<script src="https://cdn.jsdelivr.net/npm/@aurodesignsystem/auro-header@latest/+esm" type="module"></script>
|
|
79
|
+
<script src="https://cdn.jsdelivr.net/npm/@aurodesignsystem/auro-hyperlink@latest/+esm" type="module"></script>
|
|
79
80
|
</body>
|
|
80
81
|
</html>
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<li><strong>Input</strong></li>
|
|
9
9
|
<li><strong>Clear button:</strong> only shown when the input has a value.</li>
|
|
10
10
|
</ol>
|
|
11
|
-
<p>Each focusable element <em>(when shown)</em> participates in the browser
|
|
11
|
+
<p>Each focusable element <em>(when shown)</em> participates in the browser window's default <code>tabindex</code> sequence.</p>
|
|
12
12
|
<p>When the component is <code>disabled</code> it is removed from the <code>tabindex</code> sequence. VoiceOver's virtual cursor <em>(swipe navigation)</em> can still encounter the component, but standard keyboard <code>Tab</code> navigation skips it.</p>
|
|
13
13
|
<p>On <strong>large viewport devices</strong> (e.g., desktop browser, tablet) there is no focusable content inside the component bib.</p>
|
|
14
14
|
<p>On <strong>small viewport devices</strong> (e.g., phone) the bib opens a modal dialog with a focusable <strong>input</strong> and <strong>clear button</strong> which may be tabbed through naturally.</p>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
<!-- AURO-GENERATED-CONTENT:START (FILE:src=./../docs/partials/keyEvents.md) -->
|
|
17
17
|
<!-- The below content is automatically added from ./../docs/partials/keyEvents.md -->
|
|
18
18
|
<div class="note">
|
|
19
|
-
<p><
|
|
19
|
+
<p><strong>Static vs Dynamic Option List:</strong> The <strong>expanded</strong> state can never be applied without list options rendered into the DOM. Since the component supports dynamic option lists generated <em>after</em> a value is typed into the <strong>input</strong>, certain key events (as noted in the <strong>Current State</strong> column of the table below) only function with the option list rendered into the DOM.</p>
|
|
20
20
|
</div>
|
|
21
21
|
<table>
|
|
22
22
|
<thead>
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
<td>
|
|
44
44
|
Input element, <strong>NOT</strong> the input clear button
|
|
45
45
|
<div class="note">
|
|
46
|
-
<
|
|
46
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs depending on viewport size.
|
|
47
47
|
</div>
|
|
48
48
|
</td>
|
|
49
49
|
<td>
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
<td>
|
|
64
64
|
Input element, <strong>NOT</strong> the input clear button
|
|
65
65
|
<div class="note">
|
|
66
|
-
<
|
|
66
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
67
67
|
</div>
|
|
68
68
|
</td>
|
|
69
69
|
<td>
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
<td>
|
|
84
84
|
Input element, <strong>NOT</strong> the input clear button
|
|
85
85
|
<div class="note">
|
|
86
|
-
<
|
|
86
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
87
87
|
</div>
|
|
88
88
|
</td>
|
|
89
89
|
<td>
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
<td>
|
|
105
105
|
Input element, <strong>NOT</strong> the input clear button
|
|
106
106
|
<div class="note">
|
|
107
|
-
<
|
|
107
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
108
108
|
</div>
|
|
109
109
|
</td>
|
|
110
110
|
<td>
|
|
@@ -124,7 +124,7 @@
|
|
|
124
124
|
<td>
|
|
125
125
|
Input element, <strong>NOT</strong> the input clear button
|
|
126
126
|
<div class="note">
|
|
127
|
-
<
|
|
127
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
128
128
|
</div>
|
|
129
129
|
</td>
|
|
130
130
|
<td>
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
<td>
|
|
145
145
|
Input element, <strong>NOT</strong> the input clear button
|
|
146
146
|
<div class="note">
|
|
147
|
-
<
|
|
147
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
148
148
|
</div>
|
|
149
149
|
</td>
|
|
150
150
|
<td>
|
|
@@ -158,7 +158,7 @@
|
|
|
158
158
|
<td>
|
|
159
159
|
Input element, <strong>NOT</strong> the input clear button
|
|
160
160
|
<div class="note">
|
|
161
|
-
<
|
|
161
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
162
162
|
</div>
|
|
163
163
|
</td>
|
|
164
164
|
<td>
|
|
@@ -220,13 +220,13 @@
|
|
|
220
220
|
</td>
|
|
221
221
|
</tr>
|
|
222
222
|
<tr>
|
|
223
|
-
<td>
|
|
223
|
+
<td>Escape</td>
|
|
224
224
|
<td>-</td>
|
|
225
225
|
<td>Expanded</td>
|
|
226
226
|
<td>
|
|
227
227
|
Input element, <strong>NOT</strong> the input clear button
|
|
228
228
|
<div class="note">
|
|
229
|
-
<
|
|
229
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
230
230
|
</div>
|
|
231
231
|
</td>
|
|
232
232
|
<td>
|
|
@@ -240,7 +240,7 @@
|
|
|
240
240
|
<td>
|
|
241
241
|
Input element, <strong>NOT</strong> the input clear button
|
|
242
242
|
<div class="note">
|
|
243
|
-
<
|
|
243
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
244
244
|
</div>
|
|
245
245
|
</td>
|
|
246
246
|
<td>
|
|
@@ -254,23 +254,22 @@
|
|
|
254
254
|
<td>
|
|
255
255
|
Input element, <strong>NOT</strong> the input clear button
|
|
256
256
|
<div class="note">
|
|
257
|
-
<
|
|
257
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
258
258
|
</div>
|
|
259
259
|
</td>
|
|
260
260
|
<td>
|
|
261
|
-
The current <code>focused</code> option is selected, the bib is closed and <strong>focus</strong> is moved to the <strong>clear button</strong> in the component trigger
|
|
262
|
-
</div>
|
|
261
|
+
The current <code>focused</code> option is selected, the bib is closed and <strong>focus</strong> is moved to the <strong>clear button</strong> in the component trigger.
|
|
263
262
|
</td>
|
|
264
263
|
</tr>
|
|
265
264
|
<tr>
|
|
266
265
|
<td>
|
|
267
266
|
Input clear button, <strong>NOT</strong> the input element
|
|
268
267
|
<div class="note">
|
|
269
|
-
<
|
|
268
|
+
<strong>Note:</strong> Includes both trigger and bib content input clear buttons.
|
|
270
269
|
</div>
|
|
271
270
|
</td>
|
|
272
271
|
<td>
|
|
273
|
-
<span style="background-color: pink; color: red;"> 
|
|
272
|
+
<span style="background-color: pink; color: red;"> What do we do here? </span>
|
|
274
273
|
</td>
|
|
275
274
|
</tr>
|
|
276
275
|
<tr>
|
|
@@ -279,13 +278,13 @@
|
|
|
279
278
|
<td>
|
|
280
279
|
Input element, <strong>NOT</strong> the input clear button
|
|
281
280
|
<div class="note">
|
|
282
|
-
<
|
|
281
|
+
<strong>Note:</strong> Includes both trigger and bib content inputs.
|
|
283
282
|
</div>
|
|
284
283
|
</td>
|
|
285
284
|
<td>
|
|
286
285
|
Advances the <code>focused</code> option to the first enabled option in the list.
|
|
287
286
|
<div class="note">
|
|
288
|
-
<
|
|
287
|
+
<strong>Note:</strong> the bib will <strong>NOT</strong> close and the page will <strong>NOT</strong> navigate to the previous focusable element in the tabindex order.
|
|
289
288
|
</div>
|
|
290
289
|
</td>
|
|
291
290
|
</tr>
|
|
@@ -295,8 +294,8 @@
|
|
|
295
294
|
<div class="note">
|
|
296
295
|
<p><strong>Note:</strong> The following keyboard behavior is unsupported at this time:</p>
|
|
297
296
|
<ul>
|
|
298
|
-
<li><strong>PageUp:</strong> The browser
|
|
299
|
-
<li><strong>PageDown:</strong> The browser
|
|
297
|
+
<li><strong>PageUp:</strong> The browser moves the <code>focused</code> option up by approximately one <strong>page</strong> of visible options (typically equal to the number of rendered rows). The scroll position updates in tandem so that the newly focused option is brought into view, usually aligning near the top of the visible list.</li>
|
|
298
|
+
<li><strong>PageDown:</strong> The browser advances the <code>focused</code> option down by approximately one <strong>page</strong> of visible items (typically equal to the number of rendered rows). The scroll position updates accordingly so the newly focused option is brought into view, often aligning near the bottom of the visible list.</li>
|
|
300
299
|
</ul>
|
|
301
300
|
</div>
|
|
302
301
|
</div>
|