@aurodesignsystem-dev/auro-formkit 0.0.0-pr1398.2 → 0.0.0-pr1398.3

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.
Files changed (61) hide show
  1. package/components/checkbox/demo/api.min.js +1 -1
  2. package/components/checkbox/demo/index.min.js +1 -1
  3. package/components/checkbox/demo/keyboardBehavior.md +0 -0
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/api.min.js +129 -166
  7. package/components/combobox/demo/index.min.js +129 -166
  8. package/components/combobox/demo/keyboardBehavior.html +81 -0
  9. package/components/combobox/demo/keyboardBehavior.md +308 -0
  10. package/components/combobox/dist/index.js +87 -134
  11. package/components/combobox/dist/registered.js +87 -134
  12. package/components/counter/demo/api.min.js +157 -160
  13. package/components/counter/demo/index.min.js +157 -160
  14. package/components/counter/demo/keyboardBehavior.html +81 -0
  15. package/components/counter/demo/keyboardBehavior.md +127 -0
  16. package/components/counter/dist/auro-counter.d.ts +0 -7
  17. package/components/counter/dist/index.js +157 -160
  18. package/components/counter/dist/keyboardStrategy.d.ts +4 -0
  19. package/components/counter/dist/registered.js +157 -160
  20. package/components/datepicker/demo/api.min.js +89 -137
  21. package/components/datepicker/demo/index.min.js +89 -137
  22. package/components/datepicker/demo/keyboardBehavior.html +81 -0
  23. package/components/datepicker/demo/keyboardBehavior.md +24 -0
  24. package/components/datepicker/dist/index.js +84 -132
  25. package/components/datepicker/dist/registered.js +84 -132
  26. package/components/dropdown/demo/api.md +0 -1
  27. package/components/dropdown/demo/api.min.js +99 -140
  28. package/components/dropdown/demo/index.md +2 -2
  29. package/components/dropdown/demo/index.min.js +99 -140
  30. package/components/dropdown/demo/keyboardBehavior.html +81 -0
  31. package/components/dropdown/demo/keyboardBehavior.md +77 -0
  32. package/components/dropdown/dist/auro-dropdown.d.ts +0 -8
  33. package/components/dropdown/dist/auro-dropdownBib.d.ts +1 -50
  34. package/components/dropdown/dist/dropdownBibKeyboardStrategy.d.ts +7 -0
  35. package/components/dropdown/dist/index.js +83 -128
  36. package/components/dropdown/dist/registered.js +83 -128
  37. package/components/form/demo/api.min.js +466 -599
  38. package/components/form/demo/index.min.js +466 -599
  39. package/components/form/demo/keyboardBehavior.md +0 -0
  40. package/components/input/demo/api.min.js +1 -1
  41. package/components/input/demo/index.min.js +1 -1
  42. package/components/input/demo/keyboardBehavior.md +0 -0
  43. package/components/input/dist/index.js +1 -1
  44. package/components/input/dist/registered.js +1 -1
  45. package/components/menu/demo/api.min.js +42 -32
  46. package/components/menu/demo/index.min.js +42 -32
  47. package/components/menu/dist/auro-menu.d.ts +3 -11
  48. package/components/menu/dist/index.js +42 -32
  49. package/components/menu/dist/registered.js +42 -32
  50. package/components/radio/demo/api.min.js +1 -1
  51. package/components/radio/demo/index.min.js +1 -1
  52. package/components/radio/dist/index.js +1 -1
  53. package/components/radio/dist/registered.js +1 -1
  54. package/components/select/demo/api.min.js +132 -167
  55. package/components/select/demo/index.min.js +132 -167
  56. package/components/select/demo/keyboardBehavior.html +81 -0
  57. package/components/select/demo/keyboardBehavior.md +246 -0
  58. package/components/select/dist/index.js +90 -135
  59. package/components/select/dist/registered.js +90 -135
  60. package/custom-elements.json +61 -89
  61. package/package.json +2 -2
@@ -1233,7 +1233,7 @@ function restoreTriggerAfterClose(dropdown, focusTarget) {
1233
1233
  * @returns {{isExpanded: boolean, isModal: boolean, isPopover: boolean, activeInput: HTMLElement|null}}
1234
1234
  * isModal and isPopover reflect the display mode (fullscreen vs not) regardless of expanded state.
1235
1235
  */
1236
- function createDisplayContext(component, options = {}) {
1236
+ function createDisplayContext$1(component, options = {}) {
1237
1237
  const dd = options.dropdown || component.dropdown;
1238
1238
  // isPopoverVisible reflects as the `open` attribute.
1239
1239
  // It reports whether the bib is open in any mode (popover or modal).
@@ -1263,11 +1263,11 @@ function createDisplayContext(component, options = {}) {
1263
1263
  * @param {Object} strategy - Map of key names to handler functions.
1264
1264
  * @param {Object} [options] - Optional config passed to createDisplayContext.
1265
1265
  */
1266
- function applyKeyboardStrategy(component, strategy, options = {}) {
1266
+ function applyKeyboardStrategy$1(component, strategy, options = {}) {
1267
1267
  component.addEventListener('keydown', async (evt) => {
1268
1268
  const handler = strategy[evt.key] || strategy.default;
1269
1269
  if (typeof handler === 'function') {
1270
- const ctx = createDisplayContext(component, options);
1270
+ const ctx = createDisplayContext$1(component, options);
1271
1271
  await handler(component, evt, ctx);
1272
1272
  }
1273
1273
  });
@@ -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.contains(activeElement) ||
3462
- this.element.bib?.contains(activeElement)
3460
+ this.element.matches(":focus") ||
3461
+ this.element.matches(":focus-within")
3463
3462
  ) {
3464
3463
  return;
3465
3464
  }
@@ -4298,12 +4297,83 @@ let p$3 = class p{registerComponent(t,a){customElements.get(t)||customElements.d
4298
4297
 
4299
4298
  var iconVersion$2 = '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$6`: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$6`.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$1 = i$6`: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,26 +4498,11 @@ class AuroDropdownBib extends i$3 {
4428
4498
  },
4429
4499
 
4430
4500
  /**
4431
- * Set by auro-dropdown when a menu option is highlighted via
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: {
4439
4505
  type: Boolean
4440
- },
4441
-
4442
- /**
4443
- * When true, the keyboard bridge allows native Tab behavior
4444
- * instead of intercepting it. Set this for bib consumers
4445
- * (e.g. counter) whose content contains real focusable elements
4446
- * that need native Tab navigation.
4447
- * @private
4448
- */
4449
- nativeFocusableContent: {
4450
- type: Boolean
4451
4506
  }
4452
4507
  };
4453
4508
  }
@@ -4517,7 +4572,7 @@ class AuroDropdownBib extends i$3 {
4517
4572
 
4518
4573
  const dialog = this.shadowRoot.querySelector('dialog');
4519
4574
  this._setupCancelHandler(dialog);
4520
- this._setupKeyboardBridge(dialog);
4575
+ applyKeyboardStrategy(dialog, createDropdownBibKeyboardStrategy());
4521
4576
 
4522
4577
  this.dispatchEvent(new CustomEvent('auro-dropdownbib-connected', {
4523
4578
  bubbles: true,
@@ -4544,98 +4599,6 @@ class AuroDropdownBib extends i$3 {
4544
4599
  });
4545
4600
  }
4546
4601
 
4547
- /**
4548
- * showModal() creates a closed focus scope — keyboard events inside
4549
- * the dialog's shadow DOM do NOT bubble out to the combobox/select
4550
- * keydown handlers in the parent shadow DOM. This handler bridges
4551
- * that gap by re-dispatching navigation keys so they cross the
4552
- * shadow boundary and reach the menu navigation logic in the parent
4553
- * component.
4554
- *
4555
- * The trade-off: intercepting these keys means native keyboard
4556
- * behaviors that would normally "just work" must be manually
4557
- * re-implemented here:
4558
- *
4559
- * - Enter on buttons: Custom elements (auro-button) don't get the
4560
- * native Enter→click that <button> provides, so we call .click()
4561
- * directly when Enter is pressed on a button-like element.
4562
- *
4563
- * - Tab: Intercepted and re-dispatched so parent components
4564
- * (select/combobox) can select the active option and close the
4565
- * dialog. The <dialog> provides containment and isolation
4566
- * (inert background, VoiceOver focus trapping, top layer), while
4567
- * the content inside is a role="listbox" navigated via
4568
- * aria-activedescendant (options are not focusable). Tab keyboard
4569
- * behavior follows listbox conventions (select + close) because
4570
- * the dialog's native Tab trap only cycles between the close
4571
- * button and browser chrome.
4572
- *
4573
- * - Escape: The native <dialog> fires a `cancel` event on ESC
4574
- * (handled by _setupCancelHandler), so the re-dispatched Escape
4575
- * is a secondary path for parent components that also listen for
4576
- * Escape keydown.
4577
- *
4578
- * @param {HTMLDialogElement} dialog - The dialog element to attach the keyboard bridge to.
4579
- * @private
4580
- */
4581
- _setupKeyboardBridge(dialog) {
4582
- const navKeys = new Set([
4583
- 'ArrowUp',
4584
- 'ArrowDown',
4585
- 'Enter',
4586
- 'Escape',
4587
- 'Tab'
4588
- ]);
4589
-
4590
- dialog.addEventListener('keydown', (event) => {
4591
- if (!navKeys.has(event.key)) {
4592
- return;
4593
- }
4594
-
4595
- // Custom elements (auro-button) don't get the native Enter→click
4596
- // behavior that <button> has. Find the button in the composed path
4597
- // and click it directly — but only when no menu option is
4598
- // highlighted. In fullscreen mode focus stays on the close button
4599
- // while arrow keys move the active-descendant highlight through
4600
- // the listbox. If the user presses Enter with an option
4601
- // highlighted, the intent is to select that option, not to click
4602
- // the close button. In that case we fall through and bridge the
4603
- // Enter key to the parent component's keyboard strategy.
4604
- if (event.key === 'Enter') {
4605
- if (!this.hasActiveDescendant) {
4606
- const buttonSelector = 'button, [role="button"], auro-button, [auro-button]';
4607
- const btn = event.composedPath().find((el) => el.matches && el.matches(buttonSelector));
4608
- if (btn) {
4609
- event.preventDefault();
4610
- event.stopPropagation();
4611
- btn.click();
4612
- return;
4613
- }
4614
- }
4615
- }
4616
-
4617
- // Allow native Tab when the bib contains focusable content
4618
- // (e.g. counter buttons) that needs normal Tab navigation.
4619
- if (event.key === 'Tab' && this.nativeFocusableContent) {
4620
- return;
4621
- }
4622
-
4623
- event.preventDefault();
4624
- event.stopPropagation();
4625
- const newEvent = new KeyboardEvent('keydown', {
4626
- key: event.key,
4627
- code: event.code,
4628
- shiftKey: event.shiftKey,
4629
- altKey: event.altKey,
4630
- ctrlKey: event.ctrlKey,
4631
- metaKey: event.metaKey,
4632
- bubbles: true,
4633
- composed: true,
4634
- cancelable: true
4635
- });
4636
- this.dispatchEvent(newEvent);
4637
- });
4638
- }
4639
4602
 
4640
4603
  /**
4641
4604
  * Blocks touch-driven page scroll while a fullscreen modal dialog is open.
@@ -5010,7 +4973,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
5010
4973
  }
5011
4974
  };
5012
4975
 
5013
- var formkitVersion$1 = '202603271519';
4976
+ var formkitVersion$1 = '202604012043';
5014
4977
 
5015
4978
  class AuroElement extends i$3 {
5016
4979
  static get properties() {
@@ -5191,7 +5154,6 @@ class AuroDropdown extends AuroElement {
5191
5154
  this.appearance = 'default';
5192
5155
  this.chevron = false;
5193
5156
  this.disabled = false;
5194
- this.disableFocusTrap = false;
5195
5157
  this.error = false;
5196
5158
  this.tabIndex = 0;
5197
5159
  this.noToggle = false;
@@ -5289,9 +5251,8 @@ class AuroDropdown extends AuroElement {
5289
5251
  // showModal() fires asynchronously via Lit's update cycle, which
5290
5252
  // falls outside the user activation window and causes iOS to
5291
5253
  // dismiss the keyboard.
5292
- if (this.isBibFullscreen && this.bibElement && this.bibElement.value) {
5293
- const useModal = !this.disableFocusTrap;
5294
- this.bibElement.value.open(useModal);
5254
+ if (this.bibElement && this.bibElement.value) {
5255
+ this.bibElement.value.open(this.isBibFullscreen);
5295
5256
  }
5296
5257
  }
5297
5258
 
@@ -5404,14 +5365,6 @@ class AuroDropdown extends AuroElement {
5404
5365
  reflect: true
5405
5366
  },
5406
5367
 
5407
- /**
5408
- * If declared, the focus trap inside of bib will be turned off.
5409
- */
5410
- disableFocusTrap: {
5411
- type: Boolean,
5412
- reflect: true
5413
- },
5414
-
5415
5368
  /**
5416
5369
  * @private
5417
5370
  */
@@ -5685,7 +5638,7 @@ class AuroDropdown extends AuroElement {
5685
5638
  if (this.isPopoverVisible) {
5686
5639
  // Fullscreen: use showModal() for native accessibility (inert outside, focus trap)
5687
5640
  // Desktop: use show() for Floating UI positioning + FocusTrap for focus management
5688
- const useModal = this.isBibFullscreen && !this.disableFocusTrap;
5641
+ const useModal = this.isBibFullscreen;
5689
5642
  this.bibElement.value.open(useModal);
5690
5643
  } else {
5691
5644
  this.bibElement.value.close();
@@ -5695,7 +5648,7 @@ class AuroDropdown extends AuroElement {
5695
5648
  // When fullscreen strategy changes while open, re-open dialog with correct mode
5696
5649
  // (e.g. resizing from desktop → mobile while dropdown is open)
5697
5650
  if (changedProperties.has('isBibFullscreen') && this.isPopoverVisible && this.bibElement.value) {
5698
- const useModal = this.isBibFullscreen && !this.disableFocusTrap;
5651
+ const useModal = this.isBibFullscreen;
5699
5652
  this.bibElement.value.close();
5700
5653
  this.bibElement.value.open(useModal);
5701
5654
  }
@@ -5807,7 +5760,7 @@ class AuroDropdown extends AuroElement {
5807
5760
  * @private
5808
5761
  */
5809
5762
  updateFocusTrap() {
5810
- if (this.isPopoverVisible && !this.disableFocusTrap) {
5763
+ if (this.isPopoverVisible) {
5811
5764
  if (!this.isBibFullscreen) {
5812
5765
  // Desktop: show() doesn't trap focus, so use FocusTrap
5813
5766
  this.focusTrap = new FocusTrap(this.bibContent);
@@ -6763,7 +6716,7 @@ class AuroHelpText extends i$3 {
6763
6716
  }
6764
6717
  }
6765
6718
 
6766
- var formkitVersion = '202603271519';
6719
+ var formkitVersion = '202604012043';
6767
6720
 
6768
6721
  var styleCss$2 = 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);line-height:var(--wcss-body-default-line-height, 1.5rem)}.body-default,.body-lg{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-lg{font-size:var(--wcss-body-lg-font-size, 1.125rem);line-height:var(--wcss-body-lg-line-height, 1.625rem)}.body-sm{font-size:var(--wcss-body-sm-font-size, 0.875rem);line-height:var(--wcss-body-sm-line-height, 1.25rem)}.body-sm,.body-xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0)}.body-xs{font-size:var(--wcss-body-xs-font-size, 0.75rem);line-height:var(--wcss-body-xs-line-height, 1rem)}.body-2xs{font-family:var(--wcss-body-family, "AS Circular"),system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;font-size:var(--wcss-body-2xs-font-size, 0.625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-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, 450);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, 450);letter-spacing:var(--wcss-heading-2xs-letter-spacing, 0);line-height:var(--wcss-heading-2xs-line-height, 1.3)}.accent-2xl{font-family:var(--wcss-accent-2xl-family, "Good OT"),var(--wcss-accent-2xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xl-font-size, clamp(2rem, 3.1666666667vw, 2.375rem));font-weight:var(--wcss-accent-2xl-weight, 450);letter-spacing:var(--wcss-accent-2xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-2xl-line-height, 1)}.accent-2xl,.accent-xl{text-transform:uppercase}.accent-xl{font-family:var(--wcss-accent-xl-family, "Good OT"),var(--wcss-accent-xl-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xl-font-size, clamp(1.625rem, 2.3333333333vw, 2rem));font-weight:var(--wcss-accent-xl-weight, 450);letter-spacing:var(--wcss-accent-xl-letter-spacing, 0.05em);line-height:var(--wcss-accent-xl-line-height, 1.3)}.accent-lg{font-family:var(--wcss-accent-lg-family, "Good OT"),var(--wcss-accent-lg-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-lg-font-size, clamp(1.5rem, 2.1666666667vw, 1.75rem));font-weight:var(--wcss-accent-lg-weight, 450);letter-spacing:var(--wcss-accent-lg-letter-spacing, 0.05em);line-height:var(--wcss-accent-lg-line-height, 1.3)}.accent-lg,.accent-md{text-transform:uppercase}.accent-md{font-family:var(--wcss-accent-md-family, "Good OT"),var(--wcss-accent-md-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-md-font-size, clamp(1.375rem, 1.8333333333vw, 1.5rem));font-weight:var(--wcss-accent-md-weight, 500);letter-spacing:var(--wcss-accent-md-letter-spacing, 0.05em);line-height:var(--wcss-accent-md-line-height, 1.3)}.accent-sm{font-family:var(--wcss-accent-sm-family, "Good OT"),var(--wcss-accent-sm-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-sm-font-size, clamp(1.125rem, 1.5vw, 1.25rem));font-weight:var(--wcss-accent-sm-weight, 500);letter-spacing:var(--wcss-accent-sm-letter-spacing, 0.05em);line-height:var(--wcss-accent-sm-line-height, 1.3)}.accent-sm,.accent-xs{text-transform:uppercase}.accent-xs{font-family:var(--wcss-accent-xs-family, "Good OT"),var(--wcss-accent-xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-xs-font-size, clamp(1rem, 1.3333333333vw, 1rem));font-weight:var(--wcss-accent-xs-weight, 500);letter-spacing:var(--wcss-accent-xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-xs-line-height, 1.3)}.accent-2xs{font-family:var(--wcss-accent-2xs-family, "Good OT"),var(--wcss-accent-2xs-family-fallback, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif);font-size:var(--wcss-accent-2xs-font-size, clamp(0.875rem, 1.1666666667vw, 0.875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, 0.1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}[auro-dropdown]{--ds-auro-dropdown-trigger-border-color: var(--ds-auro-select-border-color);--ds-auro-dropdown-trigger-background-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-container-color: var(--ds-auro-select-background-color);--ds-auro-dropdown-trigger-outline-color: var(--ds-auro-select-outline-color)}:host{display:inline-block;text-align:left;vertical-align:top}:host([layout*=emphasized]) [auro-dropdown],:host([layout*=snowflake]) [auro-dropdown]{--ds-auro-select-border-color: transparent}:host([layout*=emphasized]) .mainContent,:host([layout*=snowflake]) .mainContent{text-align:center}.mainContent{position:relative;display:flex;overflow:hidden;flex:1;flex-direction:column;align-items:center;justify-content:center}.valueContainer [slot=displayValue]{display:none}.accents{display:flex;flex-direction:row;align-items:center;justify-content:center}::slotted([slot=typeIcon]){margin-right:var(--ds-size-100, 0.5rem)}.displayValue{display:block}.displayValue:not(.force){display:none}.displayValue:not(.force).hasContent:is(.withValue):not(.hasFocus){display:block}.triggerContent{display:flex;width:100%;align-items:center;justify-content:center}:host([layout*=emphasized]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-300, 1.5rem)}:host([layout*=snowflake]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem) 0 var(--ds-size-200, 1rem)}:host([layout*=snowflake]) label{padding-block:var(--ds-size-25, 0.125rem)}:host([layout*=classic]) .triggerContent{padding:0 var(--ds-size-100, 0.5rem)}:host([layout*=classic]) .mainContent{align-items:start}:host([layout*=classic]) label{overflow:hidden;cursor:text;text-overflow:ellipsis;white-space:nowrap}:host([layout*=classic]) .value{height:auto}label{color:var(--ds-auro-select-label-text-color)}:host(:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-select-outline-color: var(--ds-basic-color-status-error, #e31f26);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-default, #2a2a2a)}:host([ondark]:is([validity]:not([validity=valid]))) [auro-dropdown],:host([appearance=inverse]:is([validity]:not([validity=valid]))) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-select-outline-color: var(--ds-advanced-color-state-error-inverse, #f9a4a8);--ds-auro-dropdown-helptext-text-color: var(--ds-basic-color-texticon-inverse, #ffffff)}#slotHolder{display:none}:host([fluid]){width:100%}:host([disabled]){pointer-events:none;user-select:none}:host([disabled]:not([ondark])) [auro-dropdown],:host([disabled]:not([appearance=inverse])) [auro-dropdown]{--ds-auro-select-border-color: var(--ds-basic-color-border-subtle, #dddddd)}:host(:not([layout*=classic])[disabled][ondark]) [auro-dropdown],:host(:not([layout*=classic])[disabled][appearance=inverse]) [auro-dropdown]{--ds-auro-select-border-color: transparent}`;
6769
6722
 
@@ -7285,7 +7238,7 @@ class AuroSelect extends AuroElement$1 {
7285
7238
 
7286
7239
  // Prevent dropdown from closing on focus loss since menu content is slotted
7287
7240
  // from select's light DOM and won't be detected by dropdown's contains() check.
7288
- // Select handles Tab key closing explicitly, ESC via dialog cancel, and
7241
+ // Select handles Tab key closing explicitly, `Escape` key via dialog cancel, and
7289
7242
  // click outside works correctly via composedPath().
7290
7243
  this.dropdown.noHideOnThisFocusLoss = true;
7291
7244
 
@@ -7298,7 +7251,9 @@ class AuroSelect extends AuroElement$1 {
7298
7251
  this.dropdown.setActiveDescendant(null);
7299
7252
  this.optionActive = null;
7300
7253
 
7301
- restoreTriggerAfterClose(this.dropdown, this.dropdown.trigger);
7254
+ if (this.dropdown.isBibFullscreen) {
7255
+ restoreTriggerAfterClose(this.dropdown, this.dropdown.trigger);
7256
+ }
7302
7257
  }
7303
7258
 
7304
7259
  if (this.dropdown.isPopoverVisible) {
@@ -7572,7 +7527,7 @@ class AuroSelect extends AuroElement$1 {
7572
7527
  configureSelect() {
7573
7528
  this.nativeSelect = this.shadowRoot.querySelector('select');
7574
7529
 
7575
- applyKeyboardStrategy(this, selectKeyboardStrategy);
7530
+ applyKeyboardStrategy$1(this, selectKeyboardStrategy);
7576
7531
 
7577
7532
  this.addEventListener('focusin', this.handleFocusin);
7578
7533
 
@@ -9623,10 +9578,10 @@ class AuroMenu extends AuroElement$1 {
9623
9578
 
9624
9579
  // Event Bindings
9625
9580
 
9626
- /**
9627
- * @private
9628
- */
9629
- this.handleKeyDown = this.handleKeyDown.bind(this);
9581
+ // /**
9582
+ // * @private
9583
+ // */
9584
+ // this.handleKeyDown = this.handleKeyDown.bind(this);
9630
9585
 
9631
9586
 
9632
9587
  /**
@@ -9875,6 +9830,13 @@ class AuroMenu extends AuroElement$1 {
9875
9830
  * @protected
9876
9831
  */
9877
9832
  provideContext() {
9833
+ if (this.parentElement && this.parentElement.closest('auro-menu, [auro-menu]')) {
9834
+ this.rootMenu = false;
9835
+ this.menuService = this.parentElement.menuService;
9836
+ this._contextProvider = this.parentElement._contextProvider;
9837
+ return;
9838
+ }
9839
+
9878
9840
  this.menuService = new MenuService({host: this});
9879
9841
  this.menuService.setProperties(this.propertyValues);
9880
9842
  this.menuService.subscribe(this.handleMenuChange.bind(this));
@@ -9968,7 +9930,7 @@ class AuroMenu extends AuroElement$1 {
9968
9930
 
9969
9931
  this.provideContext();
9970
9932
 
9971
- this.addEventListener('keydown', this.handleKeyDown);
9933
+ // this.addEventListener('keydown', this.handleKeyDown);
9972
9934
  this.addEventListener('auroMenuOption-click', this.handleMouseSelect);
9973
9935
  this.addEventListener('auroMenuOption-mouseover', this.handleOptionHover);
9974
9936
  this.addEventListener('slotchange', this.handleSlotChange);
@@ -9976,7 +9938,7 @@ class AuroMenu extends AuroElement$1 {
9976
9938
  }
9977
9939
 
9978
9940
  disconnectedCallback() {
9979
- this.removeEventListener('keydown', this.handleKeyDown);
9941
+ // this.removeEventListener('keydown', this.handleKeyDown);
9980
9942
  this.removeEventListener('auroMenuOption-click', this.handleMouseSelect);
9981
9943
  this.removeEventListener('auroMenuOption-mouseover', this.handleOptionHover);
9982
9944
  this.removeEventListener('slotchange', this.handleSlotChange);
@@ -10057,9 +10019,9 @@ class AuroMenu extends AuroElement$1 {
10057
10019
  if (this.multiSelect) {
10058
10020
  this.setAttribute('aria-multiselectable', 'true');
10059
10021
  }
10060
-
10061
- this.handleNestedMenus(this);
10062
10022
  }
10023
+
10024
+ this.handleNestedMenus(this);
10063
10025
  }
10064
10026
 
10065
10027
  /**
@@ -10117,26 +10079,33 @@ class AuroMenu extends AuroElement$1 {
10117
10079
 
10118
10080
  // Event Handlers
10119
10081
 
10120
- /**
10121
- * Handles keyboard navigation.
10122
- * @private
10123
- * @param {KeyboardEvent} event - Event object from the browser.
10124
- */
10125
- handleKeyDown(event) {
10126
- event.preventDefault();
10127
- switch (event.key) {
10128
- case "ArrowDown":
10129
- this.menuService.highlightNext();
10130
- break;
10131
- case "ArrowUp":
10132
- this.menuService.highlightPrevious();
10133
- break;
10134
- case "Tab":
10135
- case "Enter":
10136
- this.menuService.selectHighlightedOption();
10137
- break;
10138
- }
10139
- }
10082
+ // /**
10083
+ // * Handles keyboard navigation.
10084
+ // * @private
10085
+ // * @param {KeyboardEvent} event - Event object from the browser.
10086
+ // */
10087
+ // handleKeyDown(event) {
10088
+ // // Update to Chris keyboard handler
10089
+ // // We have a new "navigateArrow" function in that handler, maybe that replaces those keys here?
10090
+ // event.preventDefault();
10091
+ // switch (event.key) {
10092
+ // case "ArrowDown":
10093
+ // console.warn("ArrowDown key is pressed and heard from menu");
10094
+ // this.menuService.highlightNext();
10095
+ // break;
10096
+ // case "ArrowUp":
10097
+ // console.warn("ArrowUp key is pressed and heard from menu");
10098
+ // this.menuService.highlightPrevious();
10099
+ // break;
10100
+ // case "Tab":
10101
+ // case "Enter":
10102
+ // this.menuService.selectHighlightedOption();
10103
+ // // Does this need to get separated into two cases to handle the different expected behavior of tab vs enter?
10104
+ // break;
10105
+ // default:
10106
+ // break;
10107
+ // }
10108
+ // }
10140
10109
 
10141
10110
  /**
10142
10111
  * Navigates the menu options in the specified direction.
@@ -10156,10 +10125,6 @@ class AuroMenu extends AuroElement$1 {
10156
10125
  * @private
10157
10126
  */
10158
10127
  handleSlotChange() {
10159
- if (this.parentElement && this.parentElement.closest('auro-menu, [auro-menu]')) {
10160
- this.rootMenu = false;
10161
- }
10162
-
10163
10128
  if (this.rootMenu) {
10164
10129
  this.initializeMenu();
10165
10130
  }
@@ -0,0 +1,81 @@
1
+ <!--
2
+ Copyright (c) Alaska Air. All right reserved. Licensed under the Apache-2.0 license
3
+ See LICENSE in the project root for license information.
4
+
5
+ HTML in this document is standardized and NOT to be edited.
6
+ All demo code should be added/edited in ./demo/index.md
7
+
8
+ With the exception of adding custom elements if needed for the demo.
9
+
10
+ ----------------------- DO NOT EDIT -----------------------------
11
+
12
+ -->
13
+
14
+ <!DOCTYPE html>
15
+ <html lang="en">
16
+ <head>
17
+ <meta charset="UTF-8" />
18
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
19
+ <title>Auro Web Component Demo | auro-select</title>
20
+
21
+ <!-- Prism.js Stylesheet -->
22
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/prismjs@1.24.1/themes/prism.css"/>
23
+
24
+ <!-- Legacy reference is still needed to support auro-select's use of legacy token values at this time -->
25
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@aurodesignsystem/design-tokens@latest/dist/legacy/auro-classic/CSSCustomProperties.css"/>
26
+
27
+ <!-- Design Token Alaska Theme -->
28
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@aurodesignsystem/design-tokens@latest/dist/themes/alaska/CSSCustomProperties--alaska.min.css"/>
29
+
30
+ <!-- Webcore Stylesheet Alaska Theme -->
31
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@aurodesignsystem/webcorestylesheets@latest/dist/bundled/themes/alaska.global.min.css" />
32
+
33
+ <!-- Demo Specific Styles -->
34
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@aurodesignsystem/webcorestylesheets@latest/dist/demoWrapper.css" />
35
+ <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/@aurodesignsystem/webcorestylesheets@latest/dist/elementDemoStyles.css" />
36
+ <style>
37
+ table {
38
+ --ds-color-container-secondary-default: transparent;
39
+ }
40
+
41
+ tr:not(:last-of-type) {
42
+ border-bottom: 1px solid var(--ds-color-border-tertiary-default);
43
+ }
44
+
45
+ sup {
46
+ font-size: 60%;
47
+ font-style: italic;
48
+ opacity: 0.6;
49
+ top: -.5rem;
50
+ }
51
+
52
+ .note {
53
+ margin: 10px 0;
54
+ padding: 10px;
55
+ border-radius: 6px;
56
+ font-style: italic;
57
+ color: var(--ds-basic-color-texticon-muted);
58
+ background-color: var(--ds-basic-color-surface-neutral-subtle);
59
+ }
60
+ </style>
61
+ </head>
62
+ <body class="auro-markdown">
63
+ <main></main>
64
+
65
+ <script type="module">
66
+ import 'https://cdn.jsdelivr.net/npm/marked@latest/marked.min.js';
67
+ import 'https://cdn.jsdelivr.net/npm/prismjs@latest/prism.js';
68
+ fetch('./keyboardBehavior.md')
69
+ .then((response) => response.text())
70
+ .then((text) => {
71
+ const rawHtml = marked.parse(text);
72
+ document.querySelector('main').innerHTML = rawHtml;
73
+ Prism.highlightAll();
74
+ })
75
+ </script>
76
+
77
+ <!-- If additional elements are needed for the demo, add them here. -->
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>
80
+ </body>
81
+ </html>