@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.
- package/components/checkbox/demo/customize.min.js +1 -1
- package/components/checkbox/demo/getting-started.min.js +1 -1
- package/components/checkbox/demo/index.min.js +1 -1
- package/components/checkbox/dist/index.js +1 -1
- package/components/checkbox/dist/registered.js +1 -1
- package/components/combobox/demo/customize.min.js +110 -4
- package/components/combobox/demo/getting-started.md +49 -0
- package/components/combobox/demo/getting-started.min.js +129 -4
- package/components/combobox/demo/index.min.js +110 -4
- package/components/combobox/dist/auro-combobox.d.ts +22 -0
- package/components/combobox/dist/index.js +94 -4
- package/components/combobox/dist/registered.js +94 -4
- package/components/counter/demo/api.md +2 -0
- package/components/counter/demo/customize.min.js +320 -22
- package/components/counter/demo/getting-started.html +3 -1
- package/components/counter/demo/getting-started.md +49 -0
- package/components/counter/demo/getting-started.min.js +8766 -0
- package/components/counter/demo/index.min.js +320 -22
- package/components/counter/dist/auro-counter-group.d.ts +6 -0
- package/components/counter/dist/auro-counter.d.ts +6 -0
- package/components/counter/dist/counterGroupKeyboardStrategy.d.ts +1 -0
- package/components/counter/dist/index.js +320 -22
- package/components/counter/dist/registered.js +320 -22
- package/components/datepicker/demo/customize.min.js +3 -3
- package/components/datepicker/demo/getting-started.html +3 -1
- package/components/datepicker/demo/getting-started.md +39 -0
- package/components/datepicker/demo/getting-started.min.js +37626 -0
- package/components/datepicker/demo/index.min.js +3 -3
- package/components/datepicker/dist/index.js +3 -3
- package/components/datepicker/dist/registered.js +3 -3
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +2 -2
- package/components/dropdown/demo/index.min.js +1 -1
- package/components/dropdown/dist/index.js +1 -1
- package/components/dropdown/dist/registered.js +1 -1
- package/components/form/demo/customize.min.js +444 -35
- package/components/form/demo/getting-started.min.js +444 -35
- package/components/form/demo/index.min.js +444 -35
- package/components/form/demo/registerDemoDeps.min.js +438 -34
- package/components/form/dist/index.js +6 -1
- package/components/form/dist/registered.js +6 -1
- package/components/input/demo/customize.md +0 -37
- package/components/input/demo/customize.min.js +1 -10
- package/components/input/demo/getting-started.md +33 -0
- package/components/input/demo/getting-started.min.js +21 -1
- package/components/input/demo/index.min.js +1 -1
- package/components/input/dist/index.js +1 -1
- package/components/input/dist/registered.js +1 -1
- package/components/menu/demo/index.min.js +16 -0
- package/components/menu/dist/index.js +16 -0
- package/components/menu/dist/registered.js +16 -0
- package/components/radio/demo/customize.min.js +1 -1
- package/components/radio/demo/getting-started.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/customize.min.js +18 -2
- package/components/select/demo/getting-started.md +49 -0
- package/components/select/demo/getting-started.min.js +40 -3
- package/components/select/demo/index.min.js +18 -2
- package/components/select/dist/index.js +2 -2
- package/components/select/dist/registered.js +2 -2
- package/custom-elements.json +606 -566
- 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 = '
|
|
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 = '
|
|
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 = '
|
|
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 = '
|
|
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 = '
|
|
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
|
|
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"><auro-button id="resetStateBtn">Reset</auro-button>
|
|
373
|
+
<br />
|
|
374
|
+
<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.">
|
|
375
|
+
<span slot="bib.fullscreen.headline">Reset Example</span>
|
|
376
|
+
<span slot="fromLabel">Departure</span>
|
|
377
|
+
<span slot="toLabel">Return</span>
|
|
378
|
+
<span slot="bib.fullscreen.fromLabel">Departure</span>
|
|
379
|
+
<span slot="bib.fullscreen.toLabel">Return</span>
|
|
380
|
+
</auro-datepicker></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', () => {
|
|
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>
|