@aurodesignsystem-dev/auro-formkit 0.0.0-pr1608.0 → 0.0.0-pr1608.1
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/accessibility.md +15 -4
- package/components/checkbox/demo/customize.min.js +25 -10
- package/components/checkbox/demo/getting-started.min.js +25 -10
- package/components/checkbox/demo/index.min.js +25 -10
- package/components/checkbox/dist/auro-checkbox-group.d.ts +9 -0
- package/components/checkbox/dist/index.js +25 -10
- package/components/checkbox/dist/registered.js +25 -10
- package/components/combobox/demo/customize.min.js +46 -4
- package/components/combobox/demo/getting-started.min.js +46 -4
- package/components/combobox/demo/index.min.js +46 -4
- package/components/combobox/dist/index.js +46 -4
- package/components/combobox/dist/registered.js +46 -4
- package/components/counter/demo/customize.min.js +339 -23
- package/components/counter/demo/getting-started.min.js +339 -23
- package/components/counter/demo/index.min.js +339 -23
- package/components/counter/dist/counterGroupKeyboardStrategy.d.ts +1 -0
- package/components/counter/dist/index.js +339 -23
- package/components/counter/dist/registered.js +339 -23
- package/components/datepicker/demo/customize.min.js +46 -4
- package/components/datepicker/demo/getting-started.min.js +46 -4
- package/components/datepicker/demo/index.min.js +46 -4
- package/components/datepicker/dist/index.js +46 -4
- package/components/datepicker/dist/registered.js +46 -4
- package/components/dropdown/demo/customize.min.js +44 -2
- package/components/dropdown/demo/getting-started.min.js +45 -3
- package/components/dropdown/demo/index.min.js +44 -2
- package/components/dropdown/dist/index.js +44 -2
- package/components/dropdown/dist/registered.js +44 -2
- package/components/form/demo/customize.min.js +527 -57
- package/components/form/demo/getting-started.min.js +527 -57
- package/components/form/demo/index.min.js +527 -57
- package/components/form/demo/registerDemoDeps.min.js +527 -57
- package/components/input/demo/customize.min.js +1 -1
- package/components/input/demo/getting-started.min.js +1 -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/radio/demo/accessibility.md +13 -4
- package/components/radio/demo/customize.min.js +25 -12
- package/components/radio/demo/getting-started.min.js +25 -12
- package/components/radio/demo/index.min.js +25 -12
- package/components/radio/dist/auro-radio-group.d.ts +9 -0
- package/components/radio/dist/index.js +25 -12
- package/components/radio/dist/registered.js +25 -12
- package/components/select/demo/customize.min.js +45 -3
- package/components/select/demo/getting-started.min.js +45 -3
- package/components/select/demo/index.min.js +45 -3
- package/components/select/dist/index.js +45 -3
- package/components/select/dist/registered.js +45 -3
- package/custom-elements.json +1507 -1485
- package/package.json +3 -3
|
@@ -8,12 +8,13 @@ For keyboard interaction details, see the <auro-hyperlink href="keyboard-behavio
|
|
|
8
8
|
|
|
9
9
|
<auro-header level="2" id="ariaRolesAndAttributes">ARIA Roles and Attributes</auro-header>
|
|
10
10
|
<auro-header level="3" id="checkboxGroup">Checkbox Group</auro-header>
|
|
11
|
-
The `<auro-checkbox-group>` element uses a `<fieldset>` with a `<legend>` internally, providing native grouping semantics:
|
|
11
|
+
The `<auro-checkbox-group>` element uses a `<fieldset>` with a `<legend>` internally, providing native grouping semantics. These attributes are applied to that shadow-DOM `<fieldset>`, **not** to the `<auro-checkbox-group>` host element:
|
|
12
12
|
|
|
13
13
|
| Attribute | Value | Description |
|
|
14
14
|
|---|---|---|
|
|
15
|
-
| `role` | `group` (implicit via `fieldset`) | Groups related checkboxes together. |
|
|
16
|
-
| `aria-invalid` | `true`
|
|
15
|
+
| `role` | `group` (implicit via `fieldset`) | Groups related checkboxes together. There is no ARIA `checkboxgroup` role, so the `<fieldset>`'s implicit `group` role is used as-is. |
|
|
16
|
+
| `aria-invalid` | `true` | Present only while the group is in an invalid state. The attribute is **omitted entirely** when the group is valid — it is never set to `false`. |
|
|
17
|
+
| `aria-describedby` | id reference | Points at the `id` of the group's help-text/error element, so assistive technology can associate the message with the group on demand rather than relying only on the one-time live-region announcement. |
|
|
17
18
|
|
|
18
19
|
<auro-header level="3" id="checkboxElement">Checkbox</auro-header>
|
|
19
20
|
Each `<auro-checkbox>` renders a native `<input type="checkbox">` inside its shadow DOM:
|
|
@@ -23,12 +24,22 @@ Each `<auro-checkbox>` renders a native `<input type="checkbox">` inside its sha
|
|
|
23
24
|
| `type` | `checkbox` | Native checkbox input type. |
|
|
24
25
|
| `aria-checked` | `true` / `false` | Reflects the checked state of the checkbox. |
|
|
25
26
|
| `aria-disabled` | `true` / `false` | Indicates whether the checkbox is disabled. |
|
|
27
|
+
| `aria-invalid` | `true` | Mirrored onto each checkbox from the group while the group is invalid, and removed when it becomes valid. Omitted rather than set to `false`. |
|
|
28
|
+
|
|
29
|
+
<auro-header level="4" id="invalidStatePlacement">Why the invalid state appears twice</auro-header>
|
|
30
|
+
While the group is invalid, `aria-invalid` is set on both the `<fieldset>` and every individual `<auro-checkbox>`. This is intentional: some assistive-technology and browser combinations announce a container's invalid state only when focus first enters the group, so mirroring the state onto each checkbox keeps it conveyed as focus moves through the options.
|
|
31
|
+
|
|
32
|
+
The `checkbox` role is in `aria-invalid`'s supported-role list in every ARIA version, so the per-checkbox placement is unambiguous. The group-level placement is worth one note: `aria-invalid` is a global attribute in ARIA 1.1, applicable to any role including `group`, but ARIA 1.2 deprecates that global use in favor of a supported-role list that does not include `group`. Keeping it on the `<fieldset>` is a deliberate choice — it is not a *prohibited* attribute for `group`, current axe-core resolves it as global and reports no violation, and it gives the group a real invalid signal that would otherwise be lost. This is covered by an automated axe assertion in the component's test suite so that a future change in tooling surfaces here rather than in a consumer's audit.
|
|
33
|
+
|
|
34
|
+
<auro-header level="4" id="attributePlacementNote">Attribute placement</auro-header>
|
|
35
|
+
`aria-invalid` is applied to the internal `<fieldset>`, not to the `<auro-checkbox-group>` host element. Do not write CSS selectors or test assertions against `auro-checkbox-group[aria-invalid]`; query the internal fieldset or read the `validity` property instead.
|
|
26
36
|
|
|
27
37
|
<auro-header level="2" id="screenReaderAnnouncements">Screen Reader Announcements</auro-header>
|
|
28
38
|
- **Focus** — When focus moves to a checkbox, the screen reader announces the checkbox label, its checked/unchecked state, and role ("checkbox").
|
|
29
39
|
- **State change** — Toggling the checkbox announces the new state ("checked" or "unchecked").
|
|
30
40
|
- **Group context** — The legend text provides group context when navigating between groups.
|
|
31
|
-
- **Error** — When validation fails, the error message is announced
|
|
41
|
+
- **Error** — When validation fails, the error message is announced immediately via the help text's `role="alert"` live region, and stays discoverable afterward through the group's `aria-describedby` association.
|
|
42
|
+
- **Invalid state** — While the group is invalid, entering it or moving between its checkboxes conveys the invalid state.
|
|
32
43
|
|
|
33
44
|
<auro-header level="2" id="accessibleLabels">Accessible Labels</auro-header>
|
|
34
45
|
- The `legend` slot content provides the accessible group label via the native `<legend>` element.
|
|
@@ -1300,7 +1300,7 @@ class AuroHelpText extends i$2 {
|
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
1302
|
|
|
1303
|
-
var formkitVersion = '
|
|
1303
|
+
var formkitVersion = '202609022217';
|
|
1304
1304
|
|
|
1305
1305
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1306
1306
|
// See LICENSE in the project root for license information.
|
|
@@ -1633,6 +1633,29 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1633
1633
|
this.handlePreselectedItems();
|
|
1634
1634
|
|
|
1635
1635
|
this.validate();
|
|
1636
|
+
this.syncCheckboxValidity();
|
|
1637
|
+
}
|
|
1638
|
+
|
|
1639
|
+
/**
|
|
1640
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
1641
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
1642
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
1643
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
1644
|
+
* @private
|
|
1645
|
+
* @returns {void}
|
|
1646
|
+
*/
|
|
1647
|
+
syncCheckboxValidity() {
|
|
1648
|
+
const invalid = Boolean(this.validity && this.validity !== 'valid');
|
|
1649
|
+
|
|
1650
|
+
this.checkboxes.forEach((el) => {
|
|
1651
|
+
if (invalid) {
|
|
1652
|
+
el.setAttribute('error', true);
|
|
1653
|
+
el.setAttribute('aria-invalid', 'true');
|
|
1654
|
+
} else {
|
|
1655
|
+
el.removeAttribute('error');
|
|
1656
|
+
el.removeAttribute('aria-invalid');
|
|
1657
|
+
}
|
|
1658
|
+
});
|
|
1636
1659
|
}
|
|
1637
1660
|
|
|
1638
1661
|
/**
|
|
@@ -1664,15 +1687,7 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1664
1687
|
}
|
|
1665
1688
|
|
|
1666
1689
|
if (changedProperties.has('validity')) {
|
|
1667
|
-
this.
|
|
1668
|
-
if (this.validity && this.validity !== 'valid') {
|
|
1669
|
-
el.setAttribute('error', true);
|
|
1670
|
-
el.setAttribute('aria-invalid', 'true');
|
|
1671
|
-
} else {
|
|
1672
|
-
el.removeAttribute('error');
|
|
1673
|
-
el.removeAttribute('aria-invalid');
|
|
1674
|
-
}
|
|
1675
|
-
});
|
|
1690
|
+
this.syncCheckboxValidity();
|
|
1676
1691
|
}
|
|
1677
1692
|
|
|
1678
1693
|
if (changedProperties.has('required')) {
|
|
@@ -1300,7 +1300,7 @@ class AuroHelpText extends i$2 {
|
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
1302
|
|
|
1303
|
-
var formkitVersion = '
|
|
1303
|
+
var formkitVersion = '202609022217';
|
|
1304
1304
|
|
|
1305
1305
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1306
1306
|
// See LICENSE in the project root for license information.
|
|
@@ -1633,6 +1633,29 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1633
1633
|
this.handlePreselectedItems();
|
|
1634
1634
|
|
|
1635
1635
|
this.validate();
|
|
1636
|
+
this.syncCheckboxValidity();
|
|
1637
|
+
}
|
|
1638
|
+
|
|
1639
|
+
/**
|
|
1640
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
1641
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
1642
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
1643
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
1644
|
+
* @private
|
|
1645
|
+
* @returns {void}
|
|
1646
|
+
*/
|
|
1647
|
+
syncCheckboxValidity() {
|
|
1648
|
+
const invalid = Boolean(this.validity && this.validity !== 'valid');
|
|
1649
|
+
|
|
1650
|
+
this.checkboxes.forEach((el) => {
|
|
1651
|
+
if (invalid) {
|
|
1652
|
+
el.setAttribute('error', true);
|
|
1653
|
+
el.setAttribute('aria-invalid', 'true');
|
|
1654
|
+
} else {
|
|
1655
|
+
el.removeAttribute('error');
|
|
1656
|
+
el.removeAttribute('aria-invalid');
|
|
1657
|
+
}
|
|
1658
|
+
});
|
|
1636
1659
|
}
|
|
1637
1660
|
|
|
1638
1661
|
/**
|
|
@@ -1664,15 +1687,7 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1664
1687
|
}
|
|
1665
1688
|
|
|
1666
1689
|
if (changedProperties.has('validity')) {
|
|
1667
|
-
this.
|
|
1668
|
-
if (this.validity && this.validity !== 'valid') {
|
|
1669
|
-
el.setAttribute('error', true);
|
|
1670
|
-
el.setAttribute('aria-invalid', 'true');
|
|
1671
|
-
} else {
|
|
1672
|
-
el.removeAttribute('error');
|
|
1673
|
-
el.removeAttribute('aria-invalid');
|
|
1674
|
-
}
|
|
1675
|
-
});
|
|
1690
|
+
this.syncCheckboxValidity();
|
|
1676
1691
|
}
|
|
1677
1692
|
|
|
1678
1693
|
if (changedProperties.has('required')) {
|
|
@@ -1300,7 +1300,7 @@ class AuroHelpText extends i$2 {
|
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
1302
|
|
|
1303
|
-
var formkitVersion = '
|
|
1303
|
+
var formkitVersion = '202609022217';
|
|
1304
1304
|
|
|
1305
1305
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1306
1306
|
// See LICENSE in the project root for license information.
|
|
@@ -1633,6 +1633,29 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1633
1633
|
this.handlePreselectedItems();
|
|
1634
1634
|
|
|
1635
1635
|
this.validate();
|
|
1636
|
+
this.syncCheckboxValidity();
|
|
1637
|
+
}
|
|
1638
|
+
|
|
1639
|
+
/**
|
|
1640
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
1641
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
1642
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
1643
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
1644
|
+
* @private
|
|
1645
|
+
* @returns {void}
|
|
1646
|
+
*/
|
|
1647
|
+
syncCheckboxValidity() {
|
|
1648
|
+
const invalid = Boolean(this.validity && this.validity !== 'valid');
|
|
1649
|
+
|
|
1650
|
+
this.checkboxes.forEach((el) => {
|
|
1651
|
+
if (invalid) {
|
|
1652
|
+
el.setAttribute('error', true);
|
|
1653
|
+
el.setAttribute('aria-invalid', 'true');
|
|
1654
|
+
} else {
|
|
1655
|
+
el.removeAttribute('error');
|
|
1656
|
+
el.removeAttribute('aria-invalid');
|
|
1657
|
+
}
|
|
1658
|
+
});
|
|
1636
1659
|
}
|
|
1637
1660
|
|
|
1638
1661
|
/**
|
|
@@ -1664,15 +1687,7 @@ class AuroCheckboxGroup extends i$2 {
|
|
|
1664
1687
|
}
|
|
1665
1688
|
|
|
1666
1689
|
if (changedProperties.has('validity')) {
|
|
1667
|
-
this.
|
|
1668
|
-
if (this.validity && this.validity !== 'valid') {
|
|
1669
|
-
el.setAttribute('error', true);
|
|
1670
|
-
el.setAttribute('aria-invalid', 'true');
|
|
1671
|
-
} else {
|
|
1672
|
-
el.removeAttribute('error');
|
|
1673
|
-
el.removeAttribute('aria-invalid');
|
|
1674
|
-
}
|
|
1675
|
-
});
|
|
1690
|
+
this.syncCheckboxValidity();
|
|
1676
1691
|
}
|
|
1677
1692
|
|
|
1678
1693
|
if (changedProperties.has('required')) {
|
|
@@ -168,6 +168,15 @@ export class AuroCheckboxGroup extends LitElement {
|
|
|
168
168
|
*/
|
|
169
169
|
private handleItems;
|
|
170
170
|
checkboxes: Element[] | undefined;
|
|
171
|
+
/**
|
|
172
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
173
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
174
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
175
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
176
|
+
* @private
|
|
177
|
+
* @returns {void}
|
|
178
|
+
*/
|
|
179
|
+
private syncCheckboxValidity;
|
|
171
180
|
/**
|
|
172
181
|
* Resets component to initial state.
|
|
173
182
|
* @returns {void}
|
|
@@ -1253,7 +1253,7 @@ class AuroHelpText extends LitElement {
|
|
|
1253
1253
|
}
|
|
1254
1254
|
}
|
|
1255
1255
|
|
|
1256
|
-
var formkitVersion = '
|
|
1256
|
+
var formkitVersion = '202609022217';
|
|
1257
1257
|
|
|
1258
1258
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1259
1259
|
// See LICENSE in the project root for license information.
|
|
@@ -1586,6 +1586,29 @@ class AuroCheckboxGroup extends LitElement {
|
|
|
1586
1586
|
this.handlePreselectedItems();
|
|
1587
1587
|
|
|
1588
1588
|
this.validate();
|
|
1589
|
+
this.syncCheckboxValidity();
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
/**
|
|
1593
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
1594
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
1595
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
1596
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
1597
|
+
* @private
|
|
1598
|
+
* @returns {void}
|
|
1599
|
+
*/
|
|
1600
|
+
syncCheckboxValidity() {
|
|
1601
|
+
const invalid = Boolean(this.validity && this.validity !== 'valid');
|
|
1602
|
+
|
|
1603
|
+
this.checkboxes.forEach((el) => {
|
|
1604
|
+
if (invalid) {
|
|
1605
|
+
el.setAttribute('error', true);
|
|
1606
|
+
el.setAttribute('aria-invalid', 'true');
|
|
1607
|
+
} else {
|
|
1608
|
+
el.removeAttribute('error');
|
|
1609
|
+
el.removeAttribute('aria-invalid');
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1589
1612
|
}
|
|
1590
1613
|
|
|
1591
1614
|
/**
|
|
@@ -1617,15 +1640,7 @@ class AuroCheckboxGroup extends LitElement {
|
|
|
1617
1640
|
}
|
|
1618
1641
|
|
|
1619
1642
|
if (changedProperties.has('validity')) {
|
|
1620
|
-
this.
|
|
1621
|
-
if (this.validity && this.validity !== 'valid') {
|
|
1622
|
-
el.setAttribute('error', true);
|
|
1623
|
-
el.setAttribute('aria-invalid', 'true');
|
|
1624
|
-
} else {
|
|
1625
|
-
el.removeAttribute('error');
|
|
1626
|
-
el.removeAttribute('aria-invalid');
|
|
1627
|
-
}
|
|
1628
|
-
});
|
|
1643
|
+
this.syncCheckboxValidity();
|
|
1629
1644
|
}
|
|
1630
1645
|
|
|
1631
1646
|
if (changedProperties.has('required')) {
|
|
@@ -1253,7 +1253,7 @@ class AuroHelpText extends LitElement {
|
|
|
1253
1253
|
}
|
|
1254
1254
|
}
|
|
1255
1255
|
|
|
1256
|
-
var formkitVersion = '
|
|
1256
|
+
var formkitVersion = '202609022217';
|
|
1257
1257
|
|
|
1258
1258
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1259
1259
|
// See LICENSE in the project root for license information.
|
|
@@ -1586,6 +1586,29 @@ class AuroCheckboxGroup extends LitElement {
|
|
|
1586
1586
|
this.handlePreselectedItems();
|
|
1587
1587
|
|
|
1588
1588
|
this.validate();
|
|
1589
|
+
this.syncCheckboxValidity();
|
|
1590
|
+
}
|
|
1591
|
+
|
|
1592
|
+
/**
|
|
1593
|
+
* Method for mirroring the group's invalid state onto each checkbox.
|
|
1594
|
+
* `validity` is the authoritative invalid state, and it has to be re-applied from
|
|
1595
|
+
* `handleItems()` as well, because a slot change can happen without `validity` itself
|
|
1596
|
+
* changing — a checkbox slotted into an already-invalid group would otherwise be missed.
|
|
1597
|
+
* @private
|
|
1598
|
+
* @returns {void}
|
|
1599
|
+
*/
|
|
1600
|
+
syncCheckboxValidity() {
|
|
1601
|
+
const invalid = Boolean(this.validity && this.validity !== 'valid');
|
|
1602
|
+
|
|
1603
|
+
this.checkboxes.forEach((el) => {
|
|
1604
|
+
if (invalid) {
|
|
1605
|
+
el.setAttribute('error', true);
|
|
1606
|
+
el.setAttribute('aria-invalid', 'true');
|
|
1607
|
+
} else {
|
|
1608
|
+
el.removeAttribute('error');
|
|
1609
|
+
el.removeAttribute('aria-invalid');
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1589
1612
|
}
|
|
1590
1613
|
|
|
1591
1614
|
/**
|
|
@@ -1617,15 +1640,7 @@ class AuroCheckboxGroup extends LitElement {
|
|
|
1617
1640
|
}
|
|
1618
1641
|
|
|
1619
1642
|
if (changedProperties.has('validity')) {
|
|
1620
|
-
this.
|
|
1621
|
-
if (this.validity && this.validity !== 'valid') {
|
|
1622
|
-
el.setAttribute('error', true);
|
|
1623
|
-
el.setAttribute('aria-invalid', 'true');
|
|
1624
|
-
} else {
|
|
1625
|
-
el.removeAttribute('error');
|
|
1626
|
-
el.removeAttribute('aria-invalid');
|
|
1627
|
-
}
|
|
1628
|
-
});
|
|
1643
|
+
this.syncCheckboxValidity();
|
|
1629
1644
|
}
|
|
1630
1645
|
|
|
1631
1646
|
if (changedProperties.has('required')) {
|
|
@@ -3003,6 +3003,48 @@ const computePosition = (reference, floating, options) => {
|
|
|
3003
3003
|
});
|
|
3004
3004
|
};
|
|
3005
3005
|
|
|
3006
|
+
/**
|
|
3007
|
+
* Generates a v4 UUID with a three-tier fallback for insecure contexts.
|
|
3008
|
+
*
|
|
3009
|
+
* Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
|
|
3010
|
+
* Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
|
|
3011
|
+
* modern browsers regardless of secure-context status.
|
|
3012
|
+
* Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
|
|
3013
|
+
* but sufficient for element IDs where collision risk is negligible.
|
|
3014
|
+
*
|
|
3015
|
+
* See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
|
|
3016
|
+
*/
|
|
3017
|
+
function generateUUID() {
|
|
3018
|
+
let uuid;
|
|
3019
|
+
|
|
3020
|
+
if (
|
|
3021
|
+
typeof crypto !== "undefined" &&
|
|
3022
|
+
typeof crypto.randomUUID === "function"
|
|
3023
|
+
) {
|
|
3024
|
+
uuid = crypto.randomUUID();
|
|
3025
|
+
} else if (
|
|
3026
|
+
typeof crypto !== "undefined" &&
|
|
3027
|
+
typeof crypto.getRandomValues === "function"
|
|
3028
|
+
) {
|
|
3029
|
+
const bytes = new Uint8Array(16);
|
|
3030
|
+
crypto.getRandomValues(bytes);
|
|
3031
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
3032
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
3033
|
+
const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
|
|
3034
|
+
uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
3035
|
+
} else {
|
|
3036
|
+
let d = new Date().getTime();
|
|
3037
|
+
uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
3038
|
+
const r = (d % 16) | 0;
|
|
3039
|
+
d = (d - r) / 16 || new Date().getTime();
|
|
3040
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
3041
|
+
});
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
// CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
|
|
3045
|
+
return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
|
|
3046
|
+
}
|
|
3047
|
+
|
|
3006
3048
|
/* eslint-disable line-comment-position, no-inline-comments */
|
|
3007
3049
|
|
|
3008
3050
|
|
|
@@ -4021,7 +4063,7 @@ class AuroFloatingUI {
|
|
|
4021
4063
|
|
|
4022
4064
|
this.id = element.getAttribute("id");
|
|
4023
4065
|
if (!this.id) {
|
|
4024
|
-
this.id =
|
|
4066
|
+
this.id = generateUUID();
|
|
4025
4067
|
element.setAttribute("id", this.id);
|
|
4026
4068
|
}
|
|
4027
4069
|
|
|
@@ -5066,7 +5108,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
|
|
|
5066
5108
|
}
|
|
5067
5109
|
};
|
|
5068
5110
|
|
|
5069
|
-
var formkitVersion$2 = '
|
|
5111
|
+
var formkitVersion$2 = '202609022217';
|
|
5070
5112
|
|
|
5071
5113
|
/**
|
|
5072
5114
|
* AuroElement is the shared base class for layout-aware Auro form components.
|
|
@@ -18935,7 +18977,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
|
|
|
18935
18977
|
}
|
|
18936
18978
|
};
|
|
18937
18979
|
|
|
18938
|
-
var formkitVersion$1 = '
|
|
18980
|
+
var formkitVersion$1 = '202609022217';
|
|
18939
18981
|
|
|
18940
18982
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18941
18983
|
// See LICENSE in the project root for license information.
|
|
@@ -20127,7 +20169,7 @@ class AuroBibtemplate extends i$3 {
|
|
|
20127
20169
|
}
|
|
20128
20170
|
}
|
|
20129
20171
|
|
|
20130
|
-
var formkitVersion = '
|
|
20172
|
+
var formkitVersion = '202609022217';
|
|
20131
20173
|
|
|
20132
20174
|
var styleCss$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
|
|
20133
20175
|
|
|
@@ -3003,6 +3003,48 @@ const computePosition = (reference, floating, options) => {
|
|
|
3003
3003
|
});
|
|
3004
3004
|
};
|
|
3005
3005
|
|
|
3006
|
+
/**
|
|
3007
|
+
* Generates a v4 UUID with a three-tier fallback for insecure contexts.
|
|
3008
|
+
*
|
|
3009
|
+
* Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
|
|
3010
|
+
* Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
|
|
3011
|
+
* modern browsers regardless of secure-context status.
|
|
3012
|
+
* Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
|
|
3013
|
+
* but sufficient for element IDs where collision risk is negligible.
|
|
3014
|
+
*
|
|
3015
|
+
* See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
|
|
3016
|
+
*/
|
|
3017
|
+
function generateUUID() {
|
|
3018
|
+
let uuid;
|
|
3019
|
+
|
|
3020
|
+
if (
|
|
3021
|
+
typeof crypto !== "undefined" &&
|
|
3022
|
+
typeof crypto.randomUUID === "function"
|
|
3023
|
+
) {
|
|
3024
|
+
uuid = crypto.randomUUID();
|
|
3025
|
+
} else if (
|
|
3026
|
+
typeof crypto !== "undefined" &&
|
|
3027
|
+
typeof crypto.getRandomValues === "function"
|
|
3028
|
+
) {
|
|
3029
|
+
const bytes = new Uint8Array(16);
|
|
3030
|
+
crypto.getRandomValues(bytes);
|
|
3031
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
3032
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
3033
|
+
const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
|
|
3034
|
+
uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
3035
|
+
} else {
|
|
3036
|
+
let d = new Date().getTime();
|
|
3037
|
+
uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
3038
|
+
const r = (d % 16) | 0;
|
|
3039
|
+
d = (d - r) / 16 || new Date().getTime();
|
|
3040
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
3041
|
+
});
|
|
3042
|
+
}
|
|
3043
|
+
|
|
3044
|
+
// CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
|
|
3045
|
+
return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
|
|
3046
|
+
}
|
|
3047
|
+
|
|
3006
3048
|
/* eslint-disable line-comment-position, no-inline-comments */
|
|
3007
3049
|
|
|
3008
3050
|
|
|
@@ -4021,7 +4063,7 @@ class AuroFloatingUI {
|
|
|
4021
4063
|
|
|
4022
4064
|
this.id = element.getAttribute("id");
|
|
4023
4065
|
if (!this.id) {
|
|
4024
|
-
this.id =
|
|
4066
|
+
this.id = generateUUID();
|
|
4025
4067
|
element.setAttribute("id", this.id);
|
|
4026
4068
|
}
|
|
4027
4069
|
|
|
@@ -5066,7 +5108,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
|
|
|
5066
5108
|
}
|
|
5067
5109
|
};
|
|
5068
5110
|
|
|
5069
|
-
var formkitVersion$2 = '
|
|
5111
|
+
var formkitVersion$2 = '202609022217';
|
|
5070
5112
|
|
|
5071
5113
|
/**
|
|
5072
5114
|
* AuroElement is the shared base class for layout-aware Auro form components.
|
|
@@ -18935,7 +18977,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
|
|
|
18935
18977
|
}
|
|
18936
18978
|
};
|
|
18937
18979
|
|
|
18938
|
-
var formkitVersion$1 = '
|
|
18980
|
+
var formkitVersion$1 = '202609022217';
|
|
18939
18981
|
|
|
18940
18982
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18941
18983
|
// See LICENSE in the project root for license information.
|
|
@@ -20127,7 +20169,7 @@ class AuroBibtemplate extends i$3 {
|
|
|
20127
20169
|
}
|
|
20128
20170
|
}
|
|
20129
20171
|
|
|
20130
|
-
var formkitVersion = '
|
|
20172
|
+
var formkitVersion = '202609022217';
|
|
20131
20173
|
|
|
20132
20174
|
var styleCss$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
|
|
20133
20175
|
|
|
@@ -3018,6 +3018,48 @@ const computePosition = (reference, floating, options) => {
|
|
|
3018
3018
|
});
|
|
3019
3019
|
};
|
|
3020
3020
|
|
|
3021
|
+
/**
|
|
3022
|
+
* Generates a v4 UUID with a three-tier fallback for insecure contexts.
|
|
3023
|
+
*
|
|
3024
|
+
* Tier 1 (secure contexts): crypto.randomUUID() — native, fully random.
|
|
3025
|
+
* Tier 2 (insecure contexts): crypto.getRandomValues() — available on all
|
|
3026
|
+
* modern browsers regardless of secure-context status.
|
|
3027
|
+
* Tier 3 (last resort, no crypto API): new Date().getTime() — lower entropy,
|
|
3028
|
+
* but sufficient for element IDs where collision risk is negligible.
|
|
3029
|
+
*
|
|
3030
|
+
* See: https://w3c.github.io/webcrypto/#dom-crypto-randomuuid (secure-context restriction)
|
|
3031
|
+
*/
|
|
3032
|
+
function generateUUID() {
|
|
3033
|
+
let uuid;
|
|
3034
|
+
|
|
3035
|
+
if (
|
|
3036
|
+
typeof crypto !== "undefined" &&
|
|
3037
|
+
typeof crypto.randomUUID === "function"
|
|
3038
|
+
) {
|
|
3039
|
+
uuid = crypto.randomUUID();
|
|
3040
|
+
} else if (
|
|
3041
|
+
typeof crypto !== "undefined" &&
|
|
3042
|
+
typeof crypto.getRandomValues === "function"
|
|
3043
|
+
) {
|
|
3044
|
+
const bytes = new Uint8Array(16);
|
|
3045
|
+
crypto.getRandomValues(bytes);
|
|
3046
|
+
bytes[6] = (bytes[6] & 0x0f) | 0x40;
|
|
3047
|
+
bytes[8] = (bytes[8] & 0x3f) | 0x80;
|
|
3048
|
+
const hex = Array.from(bytes).map((b) => b.toString(16).padStart(2, "0"));
|
|
3049
|
+
uuid = `${hex.slice(0, 4).join("")}-${hex.slice(4, 6).join("")}-${hex.slice(6, 8).join("")}-${hex.slice(8, 10).join("")}-${hex.slice(10).join("")}`;
|
|
3050
|
+
} else {
|
|
3051
|
+
let d = new Date().getTime();
|
|
3052
|
+
uuid = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
|
|
3053
|
+
const r = (d % 16) | 0;
|
|
3054
|
+
d = (d - r) / 16 || new Date().getTime();
|
|
3055
|
+
return (c === "x" ? r : (r & 0x3) | 0x8).toString(16);
|
|
3056
|
+
});
|
|
3057
|
+
}
|
|
3058
|
+
|
|
3059
|
+
// CSS selectors require IDs starting with a letter; replace a leading digit with 'a'.
|
|
3060
|
+
return /^[0-9]/.test(uuid) ? `a${uuid.slice(1)}` : uuid;
|
|
3061
|
+
}
|
|
3062
|
+
|
|
3021
3063
|
/* eslint-disable line-comment-position, no-inline-comments */
|
|
3022
3064
|
|
|
3023
3065
|
|
|
@@ -4036,7 +4078,7 @@ class AuroFloatingUI {
|
|
|
4036
4078
|
|
|
4037
4079
|
this.id = element.getAttribute("id");
|
|
4038
4080
|
if (!this.id) {
|
|
4039
|
-
this.id =
|
|
4081
|
+
this.id = generateUUID();
|
|
4040
4082
|
element.setAttribute("id", this.id);
|
|
4041
4083
|
}
|
|
4042
4084
|
|
|
@@ -5081,7 +5123,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
|
|
|
5081
5123
|
}
|
|
5082
5124
|
};
|
|
5083
5125
|
|
|
5084
|
-
var formkitVersion$2 = '
|
|
5126
|
+
var formkitVersion$2 = '202609022217';
|
|
5085
5127
|
|
|
5086
5128
|
/**
|
|
5087
5129
|
* AuroElement is the shared base class for layout-aware Auro form components.
|
|
@@ -18950,7 +18992,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
|
|
|
18950
18992
|
}
|
|
18951
18993
|
};
|
|
18952
18994
|
|
|
18953
|
-
var formkitVersion$1 = '
|
|
18995
|
+
var formkitVersion$1 = '202609022217';
|
|
18954
18996
|
|
|
18955
18997
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18956
18998
|
// See LICENSE in the project root for license information.
|
|
@@ -20142,7 +20184,7 @@ class AuroBibtemplate extends i$3 {
|
|
|
20142
20184
|
}
|
|
20143
20185
|
}
|
|
20144
20186
|
|
|
20145
|
-
var formkitVersion = '
|
|
20187
|
+
var formkitVersion = '202609022217';
|
|
20146
20188
|
|
|
20147
20189
|
var styleCss$3 = i$6`.util_displayInline{display:inline}.util_displayInlineBlock{display:inline-block}.util_displayBlock{display:block}.util_displayFlex{display:flex}.util_displayHidden{display:none}.util_displayHiddenVisually{position:absolute;overflow:hidden;clip:rect(1px, 1px, 1px, 1px);width:1px;height:1px;padding:0;border:0}:host{display:block;text-align:left}:host [auro-dropdown]{--ds-auro-dropdown-trigger-background-color: transparent}:host #inputInBib::part(wrapper){box-shadow:none}:host #inputInBib::part(accent-left){display:none}:host([layout*=classic]) [auro-input]{width:100%}:host([layout*=classic]) [auro-input]::part(helpText){display:none}:host([layout*=classic]) #slotHolder{display:none}`;
|
|
20148
20190
|
|