@aurodesignsystem-dev/auro-formkit 0.0.0-pr1530.0 → 0.0.0-pr1530.2
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 +42 -29
- package/components/combobox/demo/getting-started.min.js +42 -29
- package/components/combobox/demo/index.min.js +42 -29
- package/components/combobox/dist/index.js +42 -29
- package/components/combobox/dist/registered.js +42 -29
- package/components/counter/demo/customize.min.js +2 -2
- package/components/counter/demo/index.min.js +2 -2
- package/components/counter/dist/index.js +2 -2
- package/components/counter/dist/registered.js +2 -2
- package/components/datepicker/demo/accessibility.md +7 -7
- package/components/datepicker/demo/customize.min.js +121 -47
- package/components/datepicker/demo/index.min.js +121 -47
- package/components/datepicker/demo/keyboard-behavior.md +3 -3
- package/components/datepicker/demo/voiceover.md +3 -3
- package/components/datepicker/demo/why-datepicker.md +2 -2
- package/components/datepicker/dist/auro-calendar-cell.d.ts +9 -0
- package/components/datepicker/dist/auro-calendar.d.ts +9 -0
- package/components/datepicker/dist/index.js +121 -47
- package/components/datepicker/dist/registered.js +121 -47
- package/components/dropdown/demo/customize.min.js +1 -1
- package/components/dropdown/demo/getting-started.min.js +1 -1
- 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 +269 -123
- package/components/form/demo/getting-started.min.js +269 -123
- package/components/form/demo/index.min.js +269 -123
- package/components/form/demo/registerDemoDeps.min.js +269 -123
- package/components/input/demo/customize.min.js +40 -27
- package/components/input/demo/getting-started.min.js +40 -27
- package/components/input/demo/index.min.js +40 -27
- package/components/input/dist/base-input.d.ts +20 -4
- package/components/input/dist/index.js +40 -27
- package/components/input/dist/registered.js +40 -27
- 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 +62 -16
- package/components/select/demo/getting-started.min.js +62 -16
- package/components/select/demo/index.min.js +62 -16
- package/components/select/dist/auro-select.d.ts +6 -0
- package/components/select/dist/index.js +62 -16
- package/components/select/dist/registered.js +62 -16
- package/custom-elements.json +427 -343
- package/package.json +1 -1
|
@@ -4812,7 +4812,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
4812
4812
|
}
|
|
4813
4813
|
};
|
|
4814
4814
|
|
|
4815
|
-
var formkitVersion$2 = '
|
|
4815
|
+
var formkitVersion$2 = '202607022225';
|
|
4816
4816
|
|
|
4817
4817
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
4818
4818
|
static get properties() {
|
|
@@ -16820,14 +16820,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
16820
16820
|
this.label = 'Input label is undefined';
|
|
16821
16821
|
this.layout = 'classic';
|
|
16822
16822
|
this.locale = 'en-US';
|
|
16823
|
+
this._format = undefined;
|
|
16824
|
+
|
|
16825
|
+
/** @private */
|
|
16826
|
+
this._userSetFormat = false;
|
|
16823
16827
|
this.max = undefined;
|
|
16824
16828
|
this.maxLength = undefined;
|
|
16825
16829
|
this.min = undefined;
|
|
16826
16830
|
this.minLength = undefined;
|
|
16827
16831
|
this.noValidate = false;
|
|
16828
16832
|
this.onDark = false;
|
|
16829
|
-
// Raw values returned from the input mask before model normalization.
|
|
16830
|
-
this._rawMaskValue = undefined;
|
|
16831
16833
|
this.required = false;
|
|
16832
16834
|
this.setCustomValidityForType = undefined;
|
|
16833
16835
|
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
@@ -16985,7 +16987,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
16985
16987
|
*/
|
|
16986
16988
|
format: {
|
|
16987
16989
|
type: String,
|
|
16988
|
-
reflect: true
|
|
16990
|
+
reflect: true,
|
|
16991
|
+
noAccessor: true
|
|
16989
16992
|
},
|
|
16990
16993
|
|
|
16991
16994
|
/**
|
|
@@ -17323,6 +17326,34 @@ class BaseInput extends AuroElement$1 {
|
|
|
17323
17326
|
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
17324
17327
|
}
|
|
17325
17328
|
|
|
17329
|
+
get format() {
|
|
17330
|
+
return this._format;
|
|
17331
|
+
}
|
|
17332
|
+
|
|
17333
|
+
/**
|
|
17334
|
+
* Overrides LitElement's generated accessor so we can track whether the
|
|
17335
|
+
* consumer explicitly set `format`. Locale-derived updates use
|
|
17336
|
+
* `_setFormatFromLocale` instead, which skips this flag.
|
|
17337
|
+
*/
|
|
17338
|
+
set format(value) {
|
|
17339
|
+
const oldValue = this._format;
|
|
17340
|
+
this._format = value ? value.toLowerCase() : value;
|
|
17341
|
+
this._userSetFormat = Boolean(value);
|
|
17342
|
+
this.requestUpdate('format', oldValue);
|
|
17343
|
+
}
|
|
17344
|
+
|
|
17345
|
+
/**
|
|
17346
|
+
* Sets format without marking it as user-set. Used by locale auto-derive
|
|
17347
|
+
* so that a subsequent locale change can still update the format.
|
|
17348
|
+
* @private
|
|
17349
|
+
* @param {string} value
|
|
17350
|
+
*/
|
|
17351
|
+
_setFormatFromLocale(value) {
|
|
17352
|
+
const oldValue = this._format;
|
|
17353
|
+
this._format = value ? value.toLowerCase() : value;
|
|
17354
|
+
this.requestUpdate('format', oldValue);
|
|
17355
|
+
}
|
|
17356
|
+
|
|
17326
17357
|
connectedCallback() {
|
|
17327
17358
|
super.connectedCallback();
|
|
17328
17359
|
|
|
@@ -17370,15 +17401,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17370
17401
|
|
|
17371
17402
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
17372
17403
|
|
|
17373
|
-
// Normalize the format token to lowercase so case-mixed values supplied
|
|
17374
|
-
// via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
|
|
17375
|
-
// lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
|
|
17376
|
-
// format silently misses the map and leaves `setCustomValidityForType`
|
|
17377
|
-
// unset.
|
|
17378
|
-
if (this.format) {
|
|
17379
|
-
this.format = this.format.toLowerCase();
|
|
17380
|
-
}
|
|
17381
|
-
|
|
17382
17404
|
// use validity message override if declared when initializing the component
|
|
17383
17405
|
if (this.hasAttribute('setCustomValidity')) {
|
|
17384
17406
|
this.ValidityMessageOverride = this.setCustomValidity;
|
|
@@ -17485,12 +17507,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
17485
17507
|
updated(changedProperties) {
|
|
17486
17508
|
super.updated(changedProperties);
|
|
17487
17509
|
|
|
17488
|
-
// When locale changes
|
|
17489
|
-
// Only runs if the current format is still the previous locale's default (not user-overridden).
|
|
17510
|
+
// When locale changes, auto-derive format unless the consumer explicitly set one.
|
|
17490
17511
|
if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
|
|
17491
|
-
|
|
17492
|
-
|
|
17493
|
-
this.format = getDateFormatFromLocale(this.locale);
|
|
17512
|
+
if (!this._userSetFormat) {
|
|
17513
|
+
this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
|
|
17494
17514
|
}
|
|
17495
17515
|
}
|
|
17496
17516
|
|
|
@@ -17661,9 +17681,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17661
17681
|
this.maskInstance.on('accept', () => {
|
|
17662
17682
|
if (this._configuringMask) return;
|
|
17663
17683
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17664
|
-
if (this.type === "date") {
|
|
17665
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
17666
|
-
}
|
|
17667
17684
|
});
|
|
17668
17685
|
|
|
17669
17686
|
// Mask fires 'complete' on the restore step below for any value that
|
|
@@ -17671,9 +17688,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17671
17688
|
this.maskInstance.on('complete', () => {
|
|
17672
17689
|
if (this._configuringMask) return;
|
|
17673
17690
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17674
|
-
if (this.type === "date") {
|
|
17675
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
17676
|
-
}
|
|
17677
17691
|
});
|
|
17678
17692
|
|
|
17679
17693
|
// Write existingValue through the mask (not the input directly) so
|
|
@@ -17910,8 +17924,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17910
17924
|
|
|
17911
17925
|
// Set default date format if type=date and no format is defined
|
|
17912
17926
|
if (this.type === "date" && !this.format) {
|
|
17913
|
-
|
|
17914
|
-
this.format = this.util.getDateMaskFromLocale().toLowerCase();
|
|
17927
|
+
this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
|
|
17915
17928
|
this.util.updateFormat(this.format);
|
|
17916
17929
|
}
|
|
17917
17930
|
}
|
|
@@ -17940,7 +17953,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17940
17953
|
const creditCard = this.matchInputValueToCreditCard();
|
|
17941
17954
|
const previousFormat = this.format;
|
|
17942
17955
|
|
|
17943
|
-
this.
|
|
17956
|
+
this._setFormatFromLocale(creditCard.maskFormat);
|
|
17944
17957
|
|
|
17945
17958
|
this.maxLength = creditCard.formatLength;
|
|
17946
17959
|
this.minLength = creditCard.formatMinLength;
|
|
@@ -18414,7 +18427,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
18414
18427
|
}
|
|
18415
18428
|
};
|
|
18416
18429
|
|
|
18417
|
-
var formkitVersion$1 = '
|
|
18430
|
+
var formkitVersion$1 = '202607022225';
|
|
18418
18431
|
|
|
18419
18432
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18420
18433
|
// See LICENSE in the project root for license information.
|
|
@@ -19540,7 +19553,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
19540
19553
|
}
|
|
19541
19554
|
}
|
|
19542
19555
|
|
|
19543
|
-
var formkitVersion = '
|
|
19556
|
+
var formkitVersion = '202607022225';
|
|
19544
19557
|
|
|
19545
19558
|
var styleCss$1 = css`.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}`;
|
|
19546
19559
|
|
|
@@ -4812,7 +4812,7 @@ let AuroHelpText$2 = class AuroHelpText extends LitElement {
|
|
|
4812
4812
|
}
|
|
4813
4813
|
};
|
|
4814
4814
|
|
|
4815
|
-
var formkitVersion$2 = '
|
|
4815
|
+
var formkitVersion$2 = '202607022225';
|
|
4816
4816
|
|
|
4817
4817
|
let AuroElement$2 = class AuroElement extends LitElement {
|
|
4818
4818
|
static get properties() {
|
|
@@ -16820,14 +16820,16 @@ class BaseInput extends AuroElement$1 {
|
|
|
16820
16820
|
this.label = 'Input label is undefined';
|
|
16821
16821
|
this.layout = 'classic';
|
|
16822
16822
|
this.locale = 'en-US';
|
|
16823
|
+
this._format = undefined;
|
|
16824
|
+
|
|
16825
|
+
/** @private */
|
|
16826
|
+
this._userSetFormat = false;
|
|
16823
16827
|
this.max = undefined;
|
|
16824
16828
|
this.maxLength = undefined;
|
|
16825
16829
|
this.min = undefined;
|
|
16826
16830
|
this.minLength = undefined;
|
|
16827
16831
|
this.noValidate = false;
|
|
16828
16832
|
this.onDark = false;
|
|
16829
|
-
// Raw values returned from the input mask before model normalization.
|
|
16830
|
-
this._rawMaskValue = undefined;
|
|
16831
16833
|
this.required = false;
|
|
16832
16834
|
this.setCustomValidityForType = undefined;
|
|
16833
16835
|
// Credit Card is intentionally excluded — its mask manages the cursor
|
|
@@ -16985,7 +16987,8 @@ class BaseInput extends AuroElement$1 {
|
|
|
16985
16987
|
*/
|
|
16986
16988
|
format: {
|
|
16987
16989
|
type: String,
|
|
16988
|
-
reflect: true
|
|
16990
|
+
reflect: true,
|
|
16991
|
+
noAccessor: true
|
|
16989
16992
|
},
|
|
16990
16993
|
|
|
16991
16994
|
/**
|
|
@@ -17323,6 +17326,34 @@ class BaseInput extends AuroElement$1 {
|
|
|
17323
17326
|
return this.max && dateFormatter.isValidDate(this.max) ? dateFormatter.stringToDateInstance(this.max) : undefined;
|
|
17324
17327
|
}
|
|
17325
17328
|
|
|
17329
|
+
get format() {
|
|
17330
|
+
return this._format;
|
|
17331
|
+
}
|
|
17332
|
+
|
|
17333
|
+
/**
|
|
17334
|
+
* Overrides LitElement's generated accessor so we can track whether the
|
|
17335
|
+
* consumer explicitly set `format`. Locale-derived updates use
|
|
17336
|
+
* `_setFormatFromLocale` instead, which skips this flag.
|
|
17337
|
+
*/
|
|
17338
|
+
set format(value) {
|
|
17339
|
+
const oldValue = this._format;
|
|
17340
|
+
this._format = value ? value.toLowerCase() : value;
|
|
17341
|
+
this._userSetFormat = Boolean(value);
|
|
17342
|
+
this.requestUpdate('format', oldValue);
|
|
17343
|
+
}
|
|
17344
|
+
|
|
17345
|
+
/**
|
|
17346
|
+
* Sets format without marking it as user-set. Used by locale auto-derive
|
|
17347
|
+
* so that a subsequent locale change can still update the format.
|
|
17348
|
+
* @private
|
|
17349
|
+
* @param {string} value
|
|
17350
|
+
*/
|
|
17351
|
+
_setFormatFromLocale(value) {
|
|
17352
|
+
const oldValue = this._format;
|
|
17353
|
+
this._format = value ? value.toLowerCase() : value;
|
|
17354
|
+
this.requestUpdate('format', oldValue);
|
|
17355
|
+
}
|
|
17356
|
+
|
|
17326
17357
|
connectedCallback() {
|
|
17327
17358
|
super.connectedCallback();
|
|
17328
17359
|
|
|
@@ -17370,15 +17401,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17370
17401
|
|
|
17371
17402
|
this.inputId = this.id ? `${this.id}-input` : window.crypto.randomUUID();
|
|
17372
17403
|
|
|
17373
|
-
// Normalize the format token to lowercase so case-mixed values supplied
|
|
17374
|
-
// via attribute (e.g. `format="MM/DD/YYYY"`) hit the `dateFormatMap`
|
|
17375
|
-
// lookup inside `setCustomHelpTextMessage`. Without this, an uppercase
|
|
17376
|
-
// format silently misses the map and leaves `setCustomValidityForType`
|
|
17377
|
-
// unset.
|
|
17378
|
-
if (this.format) {
|
|
17379
|
-
this.format = this.format.toLowerCase();
|
|
17380
|
-
}
|
|
17381
|
-
|
|
17382
17404
|
// use validity message override if declared when initializing the component
|
|
17383
17405
|
if (this.hasAttribute('setCustomValidity')) {
|
|
17384
17406
|
this.ValidityMessageOverride = this.setCustomValidity;
|
|
@@ -17485,12 +17507,10 @@ class BaseInput extends AuroElement$1 {
|
|
|
17485
17507
|
updated(changedProperties) {
|
|
17486
17508
|
super.updated(changedProperties);
|
|
17487
17509
|
|
|
17488
|
-
// When locale changes
|
|
17489
|
-
// Only runs if the current format is still the previous locale's default (not user-overridden).
|
|
17510
|
+
// When locale changes, auto-derive format unless the consumer explicitly set one.
|
|
17490
17511
|
if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
|
|
17491
|
-
|
|
17492
|
-
|
|
17493
|
-
this.format = getDateFormatFromLocale(this.locale);
|
|
17512
|
+
if (!this._userSetFormat) {
|
|
17513
|
+
this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
|
|
17494
17514
|
}
|
|
17495
17515
|
}
|
|
17496
17516
|
|
|
@@ -17661,9 +17681,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17661
17681
|
this.maskInstance.on('accept', () => {
|
|
17662
17682
|
if (this._configuringMask) return;
|
|
17663
17683
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17664
|
-
if (this.type === "date") {
|
|
17665
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
17666
|
-
}
|
|
17667
17684
|
});
|
|
17668
17685
|
|
|
17669
17686
|
// Mask fires 'complete' on the restore step below for any value that
|
|
@@ -17671,9 +17688,6 @@ class BaseInput extends AuroElement$1 {
|
|
|
17671
17688
|
this.maskInstance.on('complete', () => {
|
|
17672
17689
|
if (this._configuringMask) return;
|
|
17673
17690
|
this.value = this.util.toModelValue(this.maskInstance.value, this.format);
|
|
17674
|
-
if (this.type === "date") {
|
|
17675
|
-
this._rawMaskValue = this.maskInstance.value;
|
|
17676
|
-
}
|
|
17677
17691
|
});
|
|
17678
17692
|
|
|
17679
17693
|
// Write existingValue through the mask (not the input directly) so
|
|
@@ -17910,8 +17924,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17910
17924
|
|
|
17911
17925
|
// Set default date format if type=date and no format is defined
|
|
17912
17926
|
if (this.type === "date" && !this.format) {
|
|
17913
|
-
|
|
17914
|
-
this.format = this.util.getDateMaskFromLocale().toLowerCase();
|
|
17927
|
+
this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
|
|
17915
17928
|
this.util.updateFormat(this.format);
|
|
17916
17929
|
}
|
|
17917
17930
|
}
|
|
@@ -17940,7 +17953,7 @@ class BaseInput extends AuroElement$1 {
|
|
|
17940
17953
|
const creditCard = this.matchInputValueToCreditCard();
|
|
17941
17954
|
const previousFormat = this.format;
|
|
17942
17955
|
|
|
17943
|
-
this.
|
|
17956
|
+
this._setFormatFromLocale(creditCard.maskFormat);
|
|
17944
17957
|
|
|
17945
17958
|
this.maxLength = creditCard.formatLength;
|
|
17946
17959
|
this.minLength = creditCard.formatMinLength;
|
|
@@ -18414,7 +18427,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
18414
18427
|
}
|
|
18415
18428
|
};
|
|
18416
18429
|
|
|
18417
|
-
var formkitVersion$1 = '
|
|
18430
|
+
var formkitVersion$1 = '202607022225';
|
|
18418
18431
|
|
|
18419
18432
|
// Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
|
|
18420
18433
|
// See LICENSE in the project root for license information.
|
|
@@ -19540,7 +19553,7 @@ class AuroBibtemplate extends LitElement {
|
|
|
19540
19553
|
}
|
|
19541
19554
|
}
|
|
19542
19555
|
|
|
19543
|
-
var formkitVersion = '
|
|
19556
|
+
var formkitVersion = '202607022225';
|
|
19544
19557
|
|
|
19545
19558
|
var styleCss$1 = css`.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}`;
|
|
19546
19559
|
|
|
@@ -1114,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1114
1114
|
}
|
|
1115
1115
|
};
|
|
1116
1116
|
|
|
1117
|
-
var formkitVersion$1 = '
|
|
1117
|
+
var formkitVersion$1 = '202607022225';
|
|
1118
1118
|
|
|
1119
1119
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1120
1120
|
// See LICENSE in the project root for license information.
|
|
@@ -5460,7 +5460,7 @@ class AuroHelpText extends i$2 {
|
|
|
5460
5460
|
}
|
|
5461
5461
|
}
|
|
5462
5462
|
|
|
5463
|
-
var formkitVersion = '
|
|
5463
|
+
var formkitVersion = '202607022225';
|
|
5464
5464
|
|
|
5465
5465
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5466
5466
|
static get properties() {
|
|
@@ -1114,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
|
|
|
1114
1114
|
}
|
|
1115
1115
|
};
|
|
1116
1116
|
|
|
1117
|
-
var formkitVersion$1 = '
|
|
1117
|
+
var formkitVersion$1 = '202607022225';
|
|
1118
1118
|
|
|
1119
1119
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1120
1120
|
// See LICENSE in the project root for license information.
|
|
@@ -5460,7 +5460,7 @@ class AuroHelpText extends i$2 {
|
|
|
5460
5460
|
}
|
|
5461
5461
|
}
|
|
5462
5462
|
|
|
5463
|
-
var formkitVersion = '
|
|
5463
|
+
var formkitVersion = '202607022225';
|
|
5464
5464
|
|
|
5465
5465
|
let AuroElement$1 = class AuroElement extends i$2 {
|
|
5466
5466
|
static get properties() {
|
|
@@ -1064,7 +1064,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1064
1064
|
}
|
|
1065
1065
|
};
|
|
1066
1066
|
|
|
1067
|
-
var formkitVersion$1 = '
|
|
1067
|
+
var formkitVersion$1 = '202607022225';
|
|
1068
1068
|
|
|
1069
1069
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1070
1070
|
// See LICENSE in the project root for license information.
|
|
@@ -5392,7 +5392,7 @@ class AuroHelpText extends LitElement {
|
|
|
5392
5392
|
}
|
|
5393
5393
|
}
|
|
5394
5394
|
|
|
5395
|
-
var formkitVersion = '
|
|
5395
|
+
var formkitVersion = '202607022225';
|
|
5396
5396
|
|
|
5397
5397
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5398
5398
|
static get properties() {
|
|
@@ -1064,7 +1064,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
|
|
|
1064
1064
|
}
|
|
1065
1065
|
};
|
|
1066
1066
|
|
|
1067
|
-
var formkitVersion$1 = '
|
|
1067
|
+
var formkitVersion$1 = '202607022225';
|
|
1068
1068
|
|
|
1069
1069
|
// Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
|
|
1070
1070
|
// See LICENSE in the project root for license information.
|
|
@@ -5392,7 +5392,7 @@ class AuroHelpText extends LitElement {
|
|
|
5392
5392
|
}
|
|
5393
5393
|
}
|
|
5394
5394
|
|
|
5395
|
-
var formkitVersion = '
|
|
5395
|
+
var formkitVersion = '202607022225';
|
|
5396
5396
|
|
|
5397
5397
|
let AuroElement$1 = class AuroElement extends LitElement {
|
|
5398
5398
|
static get properties() {
|
|
@@ -35,17 +35,17 @@ The calendar uses the WAI-ARIA grid pattern for screen reader navigation:
|
|
|
35
35
|
| `role="rowgroup"` | Body group | Groups the week rows. |
|
|
36
36
|
| `role="row"` | Week row | Groups each week of date cells. |
|
|
37
37
|
| `role="columnheader"` | Day-of-week header | Each weekday cell in the header row exposes the abbreviated day name as visible text and the full localized day name via `aria-label` (e.g. `aria-label="Sunday"`). |
|
|
38
|
-
| `role="gridcell"` | In-range date cell
|
|
38
|
+
| `role="gridcell"` | In-range date cell | Each selectable date cell. Includes `aria-selected`, `aria-current="date"` (for today), and an `aria-label` on the host with the full localized date string. |
|
|
39
39
|
| Out-of-range date cell | Cells outside the valid min/max range | The button uses the native `disabled` attribute (spec-compliant way to express "not actionable" on a `<button>`) and is filtered out of keyboard navigation. The host cell drops its `role` and `aria-label` so assistive tech does not browse into it — no `aria-hidden` or `role="presentation"` is applied. |
|
|
40
40
|
| `aria-disabled="true"` | Blackout date cell | Cells matching the `blackout` dates list. Unlike out-of-range cells, blackout cells **remain focusable** via arrow-key navigation so screen reader users can discover them. The cell's label includes ", unavailable" to communicate that the date cannot be selected. |
|
|
41
41
|
| `aria-selected` | Date cell button | `"true"` for the selected date(s), `"false"` for all other in-range cells. |
|
|
42
|
-
| Accessible name | Date cell
|
|
42
|
+
| Accessible name | Date cell host | Provided via `aria-label` on the cell host element (set by `updateHostAria()` on each render), with the button's inner content marked `aria-hidden="true"` so screen readers don't double-announce. Localized label built from `Intl.DateTimeFormat` (weekday, month, day, year), plus any date slot content (e.g. prices), the range position label (e.g., "range start"), and availability status (", unavailable" for blackout dates). |
|
|
43
43
|
|
|
44
44
|
<auro-header level="2" id="focusManagement">Focus Management</auro-header>
|
|
45
45
|
The component uses `delegatesFocus: true` on its shadow root, meaning focus is automatically delegated to the first focusable element inside the component (the date input).
|
|
46
46
|
|
|
47
|
-
<auro-header level="3" id="
|
|
48
|
-
The calendar
|
|
47
|
+
<auro-header level="3" id="activeCellTracking">Active Cell Tracking</auro-header>
|
|
48
|
+
The calendar tracks a single active cell across the rendered month(s). DOM focus stays on the `#calendarGrid` wrapper the entire time — arrow keys never move focus onto individual cell buttons. `setActiveCell()` imperatively marks the chosen cell (adds the `active` property on the cell host and an `.activeCell` class on its button) without a Lit re-render. Screen-reader awareness of the active cell is provided by an `aria-live` region rather than by `aria-activedescendant`, so the reader is never asked to shift its point of regard on every arrow keypress — a debounce coalesces bursts (see [Screen Reader Announcements](#screenReaderAnnouncements)).
|
|
49
49
|
|
|
50
50
|
The active cell receives an `.activeCell` CSS class to display a visible focus ring, since the native `:focus-visible` pseudo-class applies to the grid wrapper (which holds actual DOM focus), not to individual cells.
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ The initial active cell is determined in priority order:
|
|
|
57
57
|
4. The first past enabled date.
|
|
58
58
|
|
|
59
59
|
<auro-header level="3" id="focusOnOpen">Focus on Open</auro-header>
|
|
60
|
-
When the calendar bib opens, focus moves to the calendar grid wrapper (`#calendarGrid`). The
|
|
60
|
+
When the calendar bib opens, focus moves to the calendar grid wrapper (`#calendarGrid`). The initial active cell is marked via `setActiveCell()`, and the `aria-live` region announces its full localized label so screen readers describe the starting position. This applies to both desktop and fullscreen modes.
|
|
61
61
|
|
|
62
62
|
<auro-header level="2" id="screenReaderAnnouncements">Screen Reader Announcements</auro-header>
|
|
63
63
|
- **Date selection** — When a date is selected, the calendar's live region (`aria-live="assertive"`) announces the formatted date (e.g., "Wednesday, January 15, 2025"). For range datepickers, both the start and end date selections are announced.
|
|
@@ -67,10 +67,10 @@ When the calendar bib opens, focus moves to the calendar grid wrapper (`#calenda
|
|
|
67
67
|
- **Help text** — The help text content is associated with the input so that screen readers announce it as part of the element description when focused.
|
|
68
68
|
|
|
69
69
|
<auro-header level="3" id="ariaLiveDeviation">Documented Deviation: `aria-live="assertive"` for Arrow-Key Navigation</auro-header>
|
|
70
|
-
WCAG 2.1 SC 4.1.3 (Status Messages) generally recommends `aria-live="polite"` for non-critical status updates so screen readers don't interrupt the user. The calendar's navigation live region intentionally uses `aria-live="assertive"` instead. This is a knowing deviation, made for the following
|
|
70
|
+
WCAG 2.1 SC 4.1.3 (Status Messages) generally recommends `aria-live="polite"` for non-critical status updates so screen readers don't interrupt the user. The calendar's navigation live region intentionally uses `aria-live="assertive"` instead. This is a knowing deviation, made for the following reasons:
|
|
71
71
|
|
|
72
72
|
- **VoiceOver behavior** — VoiceOver treats `polite` announcements as "wait until idle," and during active arrow-key traversal the screen reader is never idle. Polite announcements are silently dropped, leaving keyboard users with no feedback about which cell is now active. `assertive` is the only reliable way to communicate the newly focused date on macOS/iOS VoiceOver during navigation.
|
|
73
|
-
- **Interruption mitigation** — A 150 ms debounce is applied in [`announceFocusDebounced`](
|
|
73
|
+
- **Interruption mitigation** — A 150 ms debounce is applied in [`announceFocusDebounced`](../../src/auro-calendar.js) so only the final cell after a burst of arrow keys is announced. Rapid navigation produces one announcement per pause, not one per keystroke, which minimizes the interruption cost of `assertive`.
|
|
74
74
|
- **Scope** — The same live region is reused for date selection and month-change announcements, all of which are user-initiated and expected. It is never used for background/system-generated updates.
|
|
75
75
|
|
|
76
76
|
Consumers auditing against APG or WCAG 4.1.3 should treat this as an intentional, documented trade-off between spec-preferred politeness and reliable VoiceOver support.
|