@aurodesignsystem-dev/auro-formkit 0.0.0-pr1600.3 → 0.0.0-pr1602.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.
Files changed (64) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +110 -4
  7. package/components/combobox/demo/getting-started.md +49 -0
  8. package/components/combobox/demo/getting-started.min.js +129 -4
  9. package/components/combobox/demo/index.min.js +110 -4
  10. package/components/combobox/dist/auro-combobox.d.ts +22 -0
  11. package/components/combobox/dist/index.js +94 -4
  12. package/components/combobox/dist/registered.js +94 -4
  13. package/components/counter/demo/api.md +2 -0
  14. package/components/counter/demo/customize.min.js +320 -22
  15. package/components/counter/demo/getting-started.html +3 -1
  16. package/components/counter/demo/getting-started.md +49 -0
  17. package/components/counter/demo/getting-started.min.js +8766 -0
  18. package/components/counter/demo/index.min.js +320 -22
  19. package/components/counter/dist/auro-counter-group.d.ts +6 -0
  20. package/components/counter/dist/auro-counter.d.ts +6 -0
  21. package/components/counter/dist/counterGroupKeyboardStrategy.d.ts +1 -0
  22. package/components/counter/dist/index.js +320 -22
  23. package/components/counter/dist/registered.js +320 -22
  24. package/components/datepicker/demo/customize.min.js +3 -3
  25. package/components/datepicker/demo/getting-started.html +3 -1
  26. package/components/datepicker/demo/getting-started.md +39 -0
  27. package/components/datepicker/demo/getting-started.min.js +37626 -0
  28. package/components/datepicker/demo/index.min.js +3 -3
  29. package/components/datepicker/dist/index.js +3 -3
  30. package/components/datepicker/dist/registered.js +3 -3
  31. package/components/dropdown/demo/customize.min.js +1 -1
  32. package/components/dropdown/demo/getting-started.min.js +2 -2
  33. package/components/dropdown/demo/index.min.js +1 -1
  34. package/components/dropdown/dist/index.js +1 -1
  35. package/components/dropdown/dist/registered.js +1 -1
  36. package/components/form/demo/customize.min.js +444 -35
  37. package/components/form/demo/getting-started.min.js +444 -35
  38. package/components/form/demo/index.min.js +444 -35
  39. package/components/form/demo/registerDemoDeps.min.js +438 -34
  40. package/components/form/dist/index.js +6 -1
  41. package/components/form/dist/registered.js +6 -1
  42. package/components/input/demo/customize.md +0 -37
  43. package/components/input/demo/customize.min.js +1 -10
  44. package/components/input/demo/getting-started.md +33 -0
  45. package/components/input/demo/getting-started.min.js +21 -1
  46. package/components/input/demo/index.min.js +1 -1
  47. package/components/input/dist/index.js +1 -1
  48. package/components/input/dist/registered.js +1 -1
  49. package/components/menu/demo/index.min.js +16 -0
  50. package/components/menu/dist/index.js +16 -0
  51. package/components/menu/dist/registered.js +16 -0
  52. package/components/radio/demo/customize.min.js +1 -1
  53. package/components/radio/demo/getting-started.min.js +1 -1
  54. package/components/radio/demo/index.min.js +1 -1
  55. package/components/radio/dist/index.js +1 -1
  56. package/components/radio/dist/registered.js +1 -1
  57. package/components/select/demo/customize.min.js +18 -2
  58. package/components/select/demo/getting-started.md +49 -0
  59. package/components/select/demo/getting-started.min.js +40 -3
  60. package/components/select/demo/index.min.js +18 -2
  61. package/components/select/dist/index.js +2 -2
  62. package/components/select/dist/registered.js +2 -2
  63. package/custom-elements.json +606 -566
  64. package/package.json +1 -1
@@ -1077,7 +1077,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
1077
1077
  }
1078
1078
  };
1079
1079
 
1080
- var formkitVersion$1 = '202609011635';
1080
+ var formkitVersion$1 = '202609021726';
1081
1081
 
1082
1082
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1083
1083
  // See LICENSE in the project root for license information.
@@ -1435,6 +1435,17 @@ class AuroCounter extends LitElement {
1435
1435
  this.validation.validate(this, force);
1436
1436
  }
1437
1437
 
1438
+ /**
1439
+ * Resets the counter to its default state, clearing validity/touched state and returning
1440
+ * the value to `min` — matching the clear-on-reset behavior of the other Auro form elements.
1441
+ * @returns {void}
1442
+ */
1443
+ reset() {
1444
+ // validation.reset() clears validity/touched and sets value to undefined; initValue() then restores the min floor.
1445
+ this.validation.reset(this);
1446
+ this.initValue();
1447
+ }
1448
+
1438
1449
  firstUpdated() {
1439
1450
  this.initValue();
1440
1451
  this.setTagAttribute("auro-counter");
@@ -4405,7 +4416,7 @@ class AuroFloatingUI {
4405
4416
  }
4406
4417
 
4407
4418
  // Selectors for focusable elements
4408
- const FOCUSABLE_SELECTORS = [
4419
+ const FOCUSABLE_SELECTORS$1 = [
4409
4420
  "a[href]",
4410
4421
  "button:not([disabled])",
4411
4422
  "textarea:not([disabled])",
@@ -4419,7 +4430,7 @@ const FOCUSABLE_SELECTORS = [
4419
4430
  ];
4420
4431
 
4421
4432
  // List of custom components that are known to be focusable
4422
- const FOCUSABLE_COMPONENTS = [
4433
+ const FOCUSABLE_COMPONENTS$1 = [
4423
4434
  "auro-checkbox",
4424
4435
  "auro-radio",
4425
4436
  "auro-dropdown",
@@ -4441,12 +4452,12 @@ const FOCUSABLE_COMPONENTS = [
4441
4452
  * @param {HTMLElement} element The element to check for focusability.
4442
4453
  * @returns {boolean} True if the element is a focusable custom component, false otherwise.
4443
4454
  */
4444
- function isFocusableComponent(element) {
4455
+ function isFocusableComponent$1(element) {
4445
4456
  const componentName = element.tagName.toLowerCase();
4446
4457
 
4447
4458
  // Guard Clause: Element is a focusable component
4448
4459
  if (
4449
- !FOCUSABLE_COMPONENTS.some(
4460
+ !FOCUSABLE_COMPONENTS$1.some(
4450
4461
  (name) => element.hasAttribute(name) || componentName === name,
4451
4462
  )
4452
4463
  )
@@ -4470,7 +4481,7 @@ function isFocusableComponent(element) {
4470
4481
  * @param {HTMLElement} element The element whose tabindex to read.
4471
4482
  * @returns {?number} The numeric tabindex or null if missing/invalid.
4472
4483
  */
4473
- function getNumericTabIndex(element) {
4484
+ function getNumericTabIndex$1(element) {
4474
4485
  const raw = element.getAttribute("tabindex");
4475
4486
  if (raw == null) return null;
4476
4487
 
@@ -4486,7 +4497,7 @@ function getNumericTabIndex(element) {
4486
4497
  * @param {HTMLElement} container The container to search within
4487
4498
  * @returns {Array<HTMLElement>} An array of focusable elements within the container.
4488
4499
  */
4489
- function getFocusableElements(container) {
4500
+ function getFocusableElements$1(container) {
4490
4501
  // Get elements in DOM order by walking the tree
4491
4502
  const orderedFocusableElements = [];
4492
4503
 
@@ -4495,7 +4506,7 @@ function getFocusableElements(container) {
4495
4506
  // Check if current element is focusable
4496
4507
  if (root.nodeType === Node.ELEMENT_NODE) {
4497
4508
  // Check if this is a custom component that is focusable
4498
- const isComponentFocusable = isFocusableComponent(root);
4509
+ const isComponentFocusable = isFocusableComponent$1(root);
4499
4510
 
4500
4511
  if (isComponentFocusable) {
4501
4512
  // Add the component itself as a focusable element and don't traverse its shadow DOM
@@ -4504,7 +4515,7 @@ function getFocusableElements(container) {
4504
4515
  }
4505
4516
 
4506
4517
  // Check if the element itself matches any selector
4507
- for (const selector of FOCUSABLE_SELECTORS) {
4518
+ for (const selector of FOCUSABLE_SELECTORS$1) {
4508
4519
  if (root.matches?.(selector)) {
4509
4520
  orderedFocusableElements.push(root);
4510
4521
  break; // Once we know it's focusable, no need to check other selectors
@@ -4558,20 +4569,20 @@ function getFocusableElements(container) {
4558
4569
 
4559
4570
  // First extract elements with valid positive tabindex
4560
4571
  const elementsWithTabindex = uniqueElements.filter((el) => {
4561
- const tabindex = getNumericTabIndex(el);
4572
+ const tabindex = getNumericTabIndex$1(el);
4562
4573
  return tabindex !== null && tabindex > 0;
4563
4574
  });
4564
4575
 
4565
4576
  // Sort these elements by their tabindex value
4566
4577
  elementsWithTabindex.sort((a, b) => {
4567
- const aIndex = getNumericTabIndex(a) ?? 0;
4568
- const bIndex = getNumericTabIndex(b) ?? 0;
4578
+ const aIndex = getNumericTabIndex$1(a) ?? 0;
4579
+ const bIndex = getNumericTabIndex$1(b) ?? 0;
4569
4580
  return aIndex - bIndex;
4570
4581
  });
4571
4582
 
4572
4583
  // Elements without tabindex (preserving their original order)
4573
4584
  const elementsWithoutTabindex = uniqueElements.filter((el) => {
4574
- const tabindex = getNumericTabIndex(el);
4585
+ const tabindex = getNumericTabIndex$1(el);
4575
4586
 
4576
4587
  // Elements without tabindex or with tabindex of 0 stay in DOM order
4577
4588
  return tabindex === null || tabindex === 0;
@@ -5366,7 +5377,7 @@ class AuroHelpText extends LitElement {
5366
5377
  }
5367
5378
  }
5368
5379
 
5369
- var formkitVersion = '202609011635';
5380
+ var formkitVersion = '202609021726';
5370
5381
 
5371
5382
  /**
5372
5383
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -5666,7 +5677,7 @@ class AuroDropdown extends AuroElement$1 {
5666
5677
  */
5667
5678
  focus() {
5668
5679
  if (this.isPopoverVisible && this.bibContent) {
5669
- const focusables = getFocusableElements(this.bibContent);
5680
+ const focusables = getFocusableElements$1(this.bibContent);
5670
5681
  if (focusables.length > 0) {
5671
5682
  focusables[0].focus();
5672
5683
  }
@@ -5698,7 +5709,7 @@ class AuroDropdown extends AuroElement$1 {
5698
5709
  // wrappers like <div> containing a <button>). If none found, try
5699
5710
  // focusing the element directly (works for custom elements like
5700
5711
  // auro-input that have delegatesFocus or a custom focus() method).
5701
- const descendants = getFocusableElements(el);
5712
+ const descendants = getFocusableElements$1(el);
5702
5713
  if (descendants.length > 0) {
5703
5714
  descendants[0].focus();
5704
5715
  return;
@@ -5710,7 +5721,7 @@ class AuroDropdown extends AuroElement$1 {
5710
5721
  }
5711
5722
  }
5712
5723
  // Fallback: try DOM children (non-slotted content)
5713
- const focusables = getFocusableElements(this.trigger);
5724
+ const focusables = getFocusableElements$1(this.trigger);
5714
5725
  if (focusables.length > 0) {
5715
5726
  focusables[0].focus();
5716
5727
  }
@@ -6389,7 +6400,7 @@ class AuroDropdown extends AuroElement$1 {
6389
6400
  }
6390
6401
 
6391
6402
  // Collect focusable elements from the bib content.
6392
- const focusables = getFocusableElements(this.bibContent);
6403
+ const focusables = getFocusableElements$1(this.bibContent);
6393
6404
 
6394
6405
  // Fallback: try from slotted content directly
6395
6406
  if (!focusables.length) {
@@ -6398,7 +6409,7 @@ class AuroDropdown extends AuroElement$1 {
6398
6409
 
6399
6410
  for (const node of assignedNodes) {
6400
6411
  if (node.nodeType === Node.ELEMENT_NODE) {
6401
- focusables.push(...getFocusableElements(node));
6412
+ focusables.push(...getFocusableElements$1(node));
6402
6413
  }
6403
6414
  }
6404
6415
  }
@@ -6458,7 +6469,7 @@ class AuroDropdown extends AuroElement$1 {
6458
6469
 
6459
6470
  // Move initial focus into the bib content, matching FocusTrap behavior
6460
6471
  requestAnimationFrame(() => {
6461
- const focusables = getFocusableElements(this.bibContent);
6472
+ const focusables = getFocusableElements$1(this.bibContent);
6462
6473
  if (focusables.length) {
6463
6474
  focusables[0].focus();
6464
6475
  }
@@ -6471,7 +6482,7 @@ class AuroDropdown extends AuroElement$1 {
6471
6482
  // popover asynchronously — a synchronous focus() would target
6472
6483
  // zero-dimension elements and be silently ignored.
6473
6484
  requestAnimationFrame(() => {
6474
- const focusables = getFocusableElements(this.bibContent);
6485
+ const focusables = getFocusableElements$1(this.bibContent);
6475
6486
  if (focusables.length) {
6476
6487
  focusables[0].focus();
6477
6488
  }
@@ -6689,7 +6700,7 @@ class AuroDropdown extends AuroElement$1 {
6689
6700
  if (triggerContentNodes) {
6690
6701
 
6691
6702
  // See if any of them are focusable elements
6692
- this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements(node).length > 0);
6703
+ this.triggerContentFocusable = triggerContentNodes.some((node) => getFocusableElements$1(node).length > 0);
6693
6704
 
6694
6705
  // If any of them are focusable elements
6695
6706
  if (this.triggerContentFocusable) {
@@ -7451,9 +7462,241 @@ class AuroElement extends LitElement {
7451
7462
  }
7452
7463
  }
7453
7464
 
7465
+ // Selectors for focusable elements
7466
+ const FOCUSABLE_SELECTORS = [
7467
+ "a[href]",
7468
+ "button:not([disabled])",
7469
+ "textarea:not([disabled])",
7470
+ "input:not([disabled])",
7471
+ "select:not([disabled])",
7472
+ '[role="tab"]:not([disabled])',
7473
+ '[role="link"]:not([disabled])',
7474
+ '[role="button"]:not([disabled])',
7475
+ '[tabindex]:not([tabindex="-1"])',
7476
+ '[contenteditable]:not([contenteditable="false"])',
7477
+ ];
7478
+
7479
+ // List of custom components that are known to be focusable
7480
+ const FOCUSABLE_COMPONENTS = [
7481
+ "auro-checkbox",
7482
+ "auro-radio",
7483
+ "auro-dropdown",
7484
+ "auro-button",
7485
+ "auro-combobox",
7486
+ "auro-input",
7487
+ "auro-counter",
7488
+ // 'auro-menu', // Auro menu is not focusable by default, it uses a different interaction model
7489
+ "auro-select",
7490
+ "auro-datepicker",
7491
+ "auro-hyperlink",
7492
+ "auro-accordion",
7493
+ ];
7494
+
7495
+ /**
7496
+ * Determines if a given element is a custom focusable component.
7497
+ * Returns true if the element matches a known focusable component and is not disabled.
7498
+ *
7499
+ * @param {HTMLElement} element The element to check for focusability.
7500
+ * @returns {boolean} True if the element is a focusable custom component, false otherwise.
7501
+ */
7502
+ function isFocusableComponent(element) {
7503
+ const componentName = element.tagName.toLowerCase();
7504
+
7505
+ // Guard Clause: Element is a focusable component
7506
+ if (
7507
+ !FOCUSABLE_COMPONENTS.some(
7508
+ (name) => element.hasAttribute(name) || componentName === name,
7509
+ )
7510
+ )
7511
+ return false;
7512
+
7513
+ // Guard Clause: Element is not disabled
7514
+ if (element.hasAttribute("disabled")) return false;
7515
+
7516
+ // Guard Clause: The element is a hyperlink and has no href attribute
7517
+ if (componentName.match("hyperlink") && !element.hasAttribute("href"))
7518
+ return false;
7519
+
7520
+ // If all guard clauses pass, the element is a focusable component
7521
+ return true;
7522
+ }
7523
+
7524
+ /**
7525
+ * Safely get a numeric tabindex for an element.
7526
+ * Returns a number if the tabindex is a valid integer, otherwise null.
7527
+ *
7528
+ * @param {HTMLElement} element The element whose tabindex to read.
7529
+ * @returns {?number} The numeric tabindex or null if missing/invalid.
7530
+ */
7531
+ function getNumericTabIndex(element) {
7532
+ const raw = element.getAttribute("tabindex");
7533
+ if (raw == null) return null;
7534
+
7535
+ const value = Number.parseInt(raw, 10);
7536
+ return Number.isNaN(value) ? null : value;
7537
+ }
7538
+
7539
+ /**
7540
+ * Retrieves all focusable elements within the container in DOM order, including those in shadow DOM and slots.
7541
+ * Returns a unique, ordered array of elements that can receive focus.
7542
+ * Also sorts elements with tabindex first, preserving their order.
7543
+ *
7544
+ * @param {HTMLElement} container The container to search within
7545
+ * @returns {Array<HTMLElement>} An array of focusable elements within the container.
7546
+ */
7547
+ function getFocusableElements(container) {
7548
+ // Get elements in DOM order by walking the tree
7549
+ const orderedFocusableElements = [];
7550
+
7551
+ // Define a recursive function to collect focusable elements in DOM order
7552
+ const collectFocusableElements = (root) => {
7553
+ // Check if current element is focusable
7554
+ if (root.nodeType === Node.ELEMENT_NODE) {
7555
+ // Check if this is a custom component that is focusable
7556
+ const isComponentFocusable = isFocusableComponent(root);
7557
+
7558
+ if (isComponentFocusable) {
7559
+ // Add the component itself as a focusable element and don't traverse its shadow DOM
7560
+ orderedFocusableElements.push(root);
7561
+ return; // Skip traversing inside this component
7562
+ }
7563
+
7564
+ // Check if the element itself matches any selector
7565
+ for (const selector of FOCUSABLE_SELECTORS) {
7566
+ if (root.matches?.(selector)) {
7567
+ orderedFocusableElements.push(root);
7568
+ break; // Once we know it's focusable, no need to check other selectors
7569
+ }
7570
+ }
7571
+
7572
+ // Process shadow DOM only for non-Auro components
7573
+ if (root.shadowRoot) {
7574
+ // Process shadow DOM children in order
7575
+ if (root.shadowRoot.children) {
7576
+ Array.from(root.shadowRoot.children).forEach((child) => {
7577
+ collectFocusableElements(child);
7578
+ });
7579
+ }
7580
+ }
7581
+
7582
+ // Process slots and their assigned nodes in order
7583
+ if (root.tagName === "SLOT") {
7584
+ const assignedNodes = root.assignedNodes({ flatten: true });
7585
+ for (const node of assignedNodes) {
7586
+ collectFocusableElements(node);
7587
+ }
7588
+ } else {
7589
+ // Process light DOM children in order
7590
+ if (root.children) {
7591
+ Array.from(root.children).forEach((child) => {
7592
+ collectFocusableElements(child);
7593
+ });
7594
+ }
7595
+ }
7596
+ }
7597
+ };
7598
+
7599
+ // Start the traversal from the container
7600
+ collectFocusableElements(container);
7601
+
7602
+ // Remove duplicates that might have been collected through different paths
7603
+ // while preserving order
7604
+ const uniqueElements = [];
7605
+ const seen = new Set();
7606
+
7607
+ for (const element of orderedFocusableElements) {
7608
+ if (!seen.has(element)) {
7609
+ seen.add(element);
7610
+ uniqueElements.push(element);
7611
+ }
7612
+ }
7613
+
7614
+ // Move tab-indexed elements to the front while preserving their order
7615
+ // This ensures that elements with tabindex are prioritized in the focus order
7616
+
7617
+ // First extract elements with valid positive tabindex
7618
+ const elementsWithTabindex = uniqueElements.filter((el) => {
7619
+ const tabindex = getNumericTabIndex(el);
7620
+ return tabindex !== null && tabindex > 0;
7621
+ });
7622
+
7623
+ // Sort these elements by their tabindex value
7624
+ elementsWithTabindex.sort((a, b) => {
7625
+ const aIndex = getNumericTabIndex(a) ?? 0;
7626
+ const bIndex = getNumericTabIndex(b) ?? 0;
7627
+ return aIndex - bIndex;
7628
+ });
7629
+
7630
+ // Elements without tabindex (preserving their original order)
7631
+ const elementsWithoutTabindex = uniqueElements.filter((el) => {
7632
+ const tabindex = getNumericTabIndex(el);
7633
+
7634
+ // Elements without tabindex or with tabindex of 0 stay in DOM order
7635
+ return tabindex === null || tabindex === 0;
7636
+ });
7637
+
7638
+ // Combine both arrays with tabindex elements first
7639
+ const tabIndexedUniqueElements = [
7640
+ ...elementsWithTabindex,
7641
+ ...elementsWithoutTabindex,
7642
+ ];
7643
+
7644
+ return tabIndexedUniqueElements;
7645
+ }
7646
+
7454
7647
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
7455
7648
  // See LICENSE in the project root for license information.
7456
7649
 
7650
+
7651
+ /**
7652
+ * Whether `el` is currently visible enough to receive focus. Prefers the
7653
+ * browser's `checkVisibility()`; otherwise combines a display/visibility check
7654
+ * with an ancestor-hidden probe that keeps position:fixed elements visible.
7655
+ * @param {Element} el - The element to test.
7656
+ * @returns {boolean}
7657
+ */
7658
+ function isVisibleForFocus(el) {
7659
+ if (typeof el.checkVisibility === 'function') {
7660
+ return el.checkVisibility();
7661
+ }
7662
+ const style = el.ownerDocument.defaultView.getComputedStyle(el);
7663
+ if (style.display === 'none' || style.visibility === 'hidden') {
7664
+ return false;
7665
+ }
7666
+ return el.offsetParent !== null || style.position === 'fixed';
7667
+ }
7668
+
7669
+ /**
7670
+ * Return the tab stop that comes before the counter-group in page tab order,
7671
+ * skipping any hidden entries the walker doesn't filter itself. The group host
7672
+ * itself is not a tab stop; its focusables (the internal dropdown and the
7673
+ * counters) are, so anchor the search on the group's earliest focusable.
7674
+ * @param {Element} component - The auro-counter-group host element.
7675
+ * @returns {Element|null}
7676
+ */
7677
+ function getPreviousTabStop(component) {
7678
+ const tabStops = getFocusableElements(component.ownerDocument.body);
7679
+ const counters = component.counters || [];
7680
+ const owned = [
7681
+ component,
7682
+ component.dropdown,
7683
+ ...counters
7684
+ ].filter(Boolean);
7685
+ let groupStart = tabStops.length;
7686
+ owned.forEach((node) => {
7687
+ const index = tabStops.indexOf(node);
7688
+ if (index >= 0 && index < groupStart) {
7689
+ groupStart = index;
7690
+ }
7691
+ });
7692
+ for (let index = groupStart - 1; index >= 0; index -= 1) {
7693
+ if (isVisibleForFocus(tabStops[index])) {
7694
+ return tabStops[index];
7695
+ }
7696
+ }
7697
+ return null;
7698
+ }
7699
+
7457
7700
  const counterGroupKeyboardStrategy = {
7458
7701
  Escape(component, evt) {
7459
7702
  if (!component.dropdown || !component.dropdown.isPopoverVisible) {
@@ -7467,6 +7710,48 @@ const counterGroupKeyboardStrategy = {
7467
7710
 
7468
7711
  component.dropdown.hide();
7469
7712
  },
7713
+
7714
+ Tab(component, evt, ctx) {
7715
+ // Forward Tab already exits past the bib content and the focusout handler
7716
+ // closes the bib. Fullscreen relies on the dialog's native focus trapping.
7717
+ if (!ctx.isExpanded || ctx.isModal || !evt.shiftKey) {
7718
+ return;
7719
+ }
7720
+
7721
+ // The trigger precedes the bib content in the flattened tab order, so a
7722
+ // native Shift+Tab off the first counter lands back on the trigger and
7723
+ // leaves the bib open. Only intercept when focus is on the first focusable
7724
+ // in the bib; otherwise let the browser move to the previous counter.
7725
+ // `composedPath()` reports the real event origin through every shadow
7726
+ // boundary, unlike `document.activeElement`, which retargets to the first
7727
+ // slotted counter and cannot tell the counters apart.
7728
+ const focusables = getFocusableElements(component.dropdown.bibContent);
7729
+ if (!focusables.length) {
7730
+ return;
7731
+ }
7732
+
7733
+ const path = evt.composedPath();
7734
+ const activeIndex = focusables.findIndex((el) => path.includes(el));
7735
+ if (activeIndex !== 0) {
7736
+ return;
7737
+ }
7738
+
7739
+ const previousTabStop = getPreviousTabStop(component);
7740
+
7741
+ // Always suppress the native Shift+Tab. Otherwise it fires against the bib
7742
+ // as it is torn down and lands focus on the trigger (which precedes the
7743
+ // first counter), re-opening the exact loop this handler prevents. When
7744
+ // nothing precedes the group, focus falls to the body instead of the
7745
+ // trigger, which reads as exiting the group backward.
7746
+ evt.preventDefault();
7747
+ component.hideBib();
7748
+
7749
+ if (!previousTabStop) {
7750
+ return;
7751
+ }
7752
+
7753
+ doubleRaf(() => previousTabStop.focus());
7754
+ },
7470
7755
  };
7471
7756
 
7472
7757
  /* eslint-disable lit/no-invalid-html, lit/binding-positions, max-lines, no-underscore-dangle, arrow-parens, no-confusing-arrow, curly, dot-location, no-inline-comments, line-comment-position,
@@ -8094,6 +8379,19 @@ class AuroCounterGroup extends AuroElement {
8094
8379
  this.validation.validate(this, force);
8095
8380
  }
8096
8381
 
8382
+ /**
8383
+ * Resets the counter group to its initial state by resetting each child counter and clearing validity.
8384
+ * Each child reset dispatches an `input` event, which triggers `updateValue()` to recompute `value`/`total`.
8385
+ * @returns {void}
8386
+ */
8387
+ reset() {
8388
+ if (this.counters) {
8389
+ this.counters.forEach((counter) => counter.reset());
8390
+ }
8391
+
8392
+ this.validation.reset(this);
8393
+ }
8394
+
8097
8395
  updated(changedProperties) {
8098
8396
  if (changedProperties.has("value")) {
8099
8397
  this.validate();
@@ -13825,7 +13825,7 @@ class AuroBibtemplate extends i$1 {
13825
13825
  }
13826
13826
  }
13827
13827
 
13828
- var formkitVersion$2 = '202609011635';
13828
+ var formkitVersion$2 = '202609021726';
13829
13829
 
13830
13830
  let l$1 = class l{generateElementName(t,e){let o=t;return o+="-",o+=e.replace(/[.]/g,"_"),o}generateTag(o,s,a){const r=this.generateElementName(o,s),i=i$5`${s$5(r)}`;return customElements.get(r)||customElements.define(r,class extends a{}),i}};let d$1 = class d{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}getSlotText(t,e){const o=t.shadowRoot?.querySelector(`slot[name="${e}"]`),s=(o?.assignedNodes({flatten:true})||[]).map(t=>t.textContent?.trim()).join(" ").trim();return s||null}};let h$4 = class h{registerComponent(t,e){customElements.get(t)||customElements.define(t,class extends e{});}closestElement(t,e=this,o=(e,s=e&&e.closest(t))=>e&&e!==document&&e!==window?s||o(e.getRootNode().host):null){return o(e)}handleComponentTagRename(t,e){const o=e.toLowerCase();t.tagName.toLowerCase()!==o&&t.setAttribute(o,true);}elementMatch(t,e){const o=e.toLowerCase();return t.tagName.toLowerCase()===o||t.hasAttribute(o)}};var c$3=i$3`:host{color:var(--ds-auro-loader-color)}:host>span{background-color:var(--ds-auro-loader-background-color);border-color:var(--ds-auro-loader-border-color)}:host([onlight]),:host([appearance=brand]){--ds-auro-loader-color: var(--ds-basic-color-brand-primary, #01426a)}:host([ondark]),:host([appearance=inverse]){--ds-auro-loader-color: var(--ds-basic-color-texticon-inverse, #ffffff)}:host([orbit])>span{--ds-auro-loader-background-color: transparent}:host([orbit])>span:nth-child(1){--ds-auro-loader-border-color: currentcolor;opacity:.25}:host([orbit])>span:nth-child(2){--ds-auro-loader-border-color: currentcolor;border-right-color:transparent;border-bottom-color:transparent;border-left-color:transparent}
13831
13831
  `,u$6=i$3`.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, .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, .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, .625rem);font-weight:var(--wcss-body-weight, 450);letter-spacing:var(--wcss-body-letter-spacing, 0);line-height:var(--wcss-body-2xs-line-height, .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, .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, .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, .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, .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, .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, .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(.875rem, 1.1666666667vw, .875rem));font-weight:var(--wcss-accent-2xs-weight, 450);letter-spacing:var(--wcss-accent-2xs-letter-spacing, .1em);line-height:var(--wcss-accent-2xs-line-height, 1.3);text-transform:uppercase}:focus:not(:focus-visible){outline:3px solid transparent}:host,:host>span{position:relative}:host{width:2rem;height:2rem;display:inline-block;font-size:0}:host>span{position:absolute;display:inline-block;float:none;top:0;left:0;width:2rem;height:2rem;border-radius:100%;border-style:solid;border-width:0;box-sizing:border-box}:host([xs]),:host([xs])>span{width:1.2rem;height:1.2rem}:host([sm]),:host([sm])>span{width:3rem;height:3rem}:host([md]),:host([md])>span{width:5rem;height:5rem}:host([lg]),:host([lg])>span{width:8rem;height:8rem}:host{--margin: .375rem;--margin-xs: .2rem;--margin-sm: .5rem;--margin-md: .75rem;--margin-lg: 1rem}:host([pulse]),:host([pulse])>span{position:relative}:host([pulse]){width:calc(3rem + var(--margin) * 6);height:calc(1rem + var(--margin) * 2)}:host([pulse])>span{width:1rem;height:1rem;margin:var(--margin);animation:pulse 1.5s ease infinite}:host([pulse][xs]){width:calc(1.95rem + var(--margin-xs) * 6);height:calc(.65rem + var(--margin-xs) * 2)}:host([pulse][xs])>span{margin:var(--margin-xs);width:.65rem;height:.65rem}:host([pulse][sm]){width:calc(6rem + var(--margin-sm) * 6);height:calc(2rem + var(--margin-sm) * 2)}:host([pulse][sm])>span{margin:var(--margin-sm);width:2rem;height:2rem}:host([pulse][md]){width:calc(9rem + var(--margin-md) * 6);height:calc(3rem + var(--margin-md) * 2)}:host([pulse][md])>span{margin:var(--margin-md);width:3rem;height:3rem}:host([pulse][lg]){width:calc(15rem + var(--margin-lg) * 6);height:calc(5rem + var(--margin-lg) * 2)}:host([pulse][lg])>span{margin:var(--margin-lg);width:5rem;height:5rem}:host([pulse])>span:nth-child(1){animation-delay:-.4s}:host([pulse])>span:nth-child(2){animation-delay:-.2s}:host([pulse])>span:nth-child(3){animation-delay:0ms}@keyframes pulse{0%,to{opacity:.1;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}:host([orbit]),:host([orbit])>span{opacity:1}:host([orbit])>span{border-width:5px}:host([orbit])>span:nth-child(2){animation:orbit 2s linear infinite}:host([orbit][sm])>span{border-width:8px}:host([orbit][md])>span{border-width:13px}:host([orbit][lg])>span{border-width:21px}@keyframes orbit{0%{transform:rotate(0)}to{transform:rotate(360deg)}}:host([ringworm])>svg{animation:rotate 2s linear infinite;height:100%;width:100%;stroke:currentcolor;stroke-width:8}:host([ringworm]) .path{stroke-dashoffset:0;animation:ringworm 1.5s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes ringworm{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}:host([laser]){position:static;width:100%;display:block;height:0;overflow:hidden;font-size:unset}:host([laser])>span{position:fixed;width:100%;height:.25rem;border-radius:0;z-index:100}:host([laser])>span:nth-child(1){border-color:currentcolor;opacity:.25}:host([laser])>span:nth-child(2){border-color:currentcolor;animation:laser 2s linear infinite;opacity:1;width:50%}:host([laser][sm])>span:nth-child(2){width:20%}:host([laser][md])>span:nth-child(2){width:30%}:host([laser][lg])>span:nth-child(2){width:50%;animation-duration:1.5s}:host([laser][xl])>span:nth-child(2){width:80%;animation-duration:1.5s}@keyframes laser{0%{left:-100%}to{left:110%}}:host>.no-animation{display:none}@media (prefers-reduced-motion: reduce){:host{display:flex;align-items:center;justify-content:center}:host>span{opacity:1}:host>.loader{display:none}:host>svg{display:none}:host>.no-animation{display:block}}
@@ -19693,7 +19693,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$1 {
19693
19693
  }
19694
19694
  };
19695
19695
 
19696
- var formkitVersion$1 = '202609011635';
19696
+ var formkitVersion$1 = '202609021726';
19697
19697
 
19698
19698
  /**
19699
19699
  * AuroElement is the shared base class for layout-aware Auro form components.
@@ -33562,7 +33562,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$1 {
33562
33562
  }
33563
33563
  };
33564
33564
 
33565
- var formkitVersion = '202609011635';
33565
+ var formkitVersion = '202609021726';
33566
33566
 
33567
33567
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
33568
33568
  // See LICENSE in the project root for license information.
@@ -44,9 +44,11 @@
44
44
  <script type="module">
45
45
  import { renderPage } from './demo-support.min.js';
46
46
  await renderPage('./getting-started.md');
47
+ import { initExamples } from './getting-started.min.js';
48
+ initExamples();
47
49
  </script>
48
50
 
49
51
  <!-- Component scripts -->
50
- <script type="module" src="./index.min.js"></script>
52
+ <script src="./getting-started.min.js" data-demo-script="true" type="module"></script>
51
53
  </body>
52
54
  </html>
@@ -351,6 +351,45 @@ Ensure your <code>tsconfig.json</code> uses <code>"moduleResolution": "bundler"<
351
351
  <p>Programmatically hides the dropdown bib (calendar) if it is currently open.</p>
352
352
  <auro-header level="3" id="reset">reset()</auro-header>
353
353
  <p>Resets the component to its initial state, clearing the selected date(s) and validation state.</p>
354
+ <div class="exampleWrapper">
355
+ <!-- AURO-GENERATED-CONTENT:START (FILE:src=./../apiExamples/reset-state.html) -->
356
+ <!-- The below content is automatically added from ./../apiExamples/reset-state.html -->
357
+ <auro-button id="resetStateBtn">Reset</auro-button>
358
+ <br />
359
+ <auro-datepicker id="resetStateExample" range minDate="2025-06-30" calendarStartDate="2025-06-30" calendarFocusDate="2025-06-30" value="2025-02-14" valueEnd="2025-04-05" setCustomValidityRangeUnderflow="The date you entered is too early.">
360
+ <span slot="bib.fullscreen.headline">Reset Example</span>
361
+ <span slot="fromLabel">Departure</span>
362
+ <span slot="toLabel">Return</span>
363
+ <span slot="bib.fullscreen.fromLabel">Departure</span>
364
+ <span slot="bib.fullscreen.toLabel">Return</span>
365
+ </auro-datepicker>
366
+ <!-- AURO-GENERATED-CONTENT:END -->
367
+ </div>
368
+ <auro-accordion alignRight>
369
+ <span slot="trigger">See code</span>
370
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/reset-state.html) -->
371
+ <!-- The below code snippet is automatically added from ./../apiExamples/reset-state.html -->
372
+ <pre class="language-html"><code class="language-html">&lt;auro-button id="resetStateBtn"&gt;Reset&lt;/auro-button&gt;
373
+ &lt;br /&gt;
374
+ &lt;auro-datepicker id="resetStateExample" range minDate="2025-06-30" calendarStartDate="2025-06-30" calendarFocusDate="2025-06-30" value="2025-02-14" valueEnd="2025-04-05" setCustomValidityRangeUnderflow="The date you entered is too early."&gt;
375
+ &lt;span slot="bib.fullscreen.headline"&gt;Reset Example&lt;/span&gt;
376
+ &lt;span slot="fromLabel"&gt;Departure&lt;/span&gt;
377
+ &lt;span slot="toLabel"&gt;Return&lt;/span&gt;
378
+ &lt;span slot="bib.fullscreen.fromLabel"&gt;Departure&lt;/span&gt;
379
+ &lt;span slot="bib.fullscreen.toLabel"&gt;Return&lt;/span&gt;
380
+ &lt;/auro-datepicker&gt;</code></pre>
381
+ <!-- AURO-GENERATED-CONTENT:END -->
382
+ <!-- AURO-GENERATED-CONTENT:START (CODE:src=./../apiExamples/reset-state.js) -->
383
+ <!-- The below code snippet is automatically added from ./../apiExamples/reset-state.js -->
384
+ <pre class="language-js"><code class="language-js">export function resetStateExample() {
385
+ const elem = document.querySelector('#resetStateExample');
386
+ ​
387
+ document.querySelector('#resetStateBtn').addEventListener('click', () =&gt; {
388
+ elem.reset();
389
+ });
390
+ }</code></pre>
391
+ <!-- AURO-GENERATED-CONTENT:END -->
392
+ </auro-accordion>
354
393
  <auro-header level="3" id="showBib">showBib()</auro-header>
355
394
  <p>Programmatically shows the dropdown bib (calendar) if it is not already open.</p>
356
395
  <auro-header level="3" id="validate">validate()</auro-header>