@aurodesignsystem-dev/auro-formkit 0.0.0-pr1530.1 → 0.0.0-pr1531.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/components/checkbox/demo/customize.min.js +1 -1
  2. package/components/checkbox/demo/getting-started.min.js +1 -1
  3. package/components/checkbox/demo/index.min.js +1 -1
  4. package/components/checkbox/dist/index.js +1 -1
  5. package/components/checkbox/dist/registered.js +1 -1
  6. package/components/combobox/demo/customize.min.js +43 -21
  7. package/components/combobox/demo/getting-started.min.js +43 -21
  8. package/components/combobox/demo/index.min.js +43 -21
  9. package/components/combobox/dist/index.js +43 -21
  10. package/components/combobox/dist/registered.js +43 -21
  11. package/components/counter/demo/customize.min.js +2 -2
  12. package/components/counter/demo/index.min.js +2 -2
  13. package/components/counter/dist/index.js +2 -2
  14. package/components/counter/dist/registered.js +2 -2
  15. package/components/datepicker/demo/accessibility.md +4 -13
  16. package/components/datepicker/demo/api.md +1 -1
  17. package/components/datepicker/demo/customize.min.js +69 -193
  18. package/components/datepicker/demo/index.min.js +69 -193
  19. package/components/datepicker/demo/voiceover.md +1 -1
  20. package/components/datepicker/dist/auro-calendar-cell.d.ts +0 -11
  21. package/components/datepicker/dist/auro-calendar.d.ts +2 -26
  22. package/components/datepicker/dist/auro-datepicker.d.ts +1 -9
  23. package/components/datepicker/dist/index.js +69 -193
  24. package/components/datepicker/dist/registered.js +69 -193
  25. package/components/dropdown/demo/customize.min.js +1 -1
  26. package/components/dropdown/demo/getting-started.min.js +1 -1
  27. package/components/dropdown/demo/index.min.js +1 -1
  28. package/components/dropdown/dist/index.js +1 -1
  29. package/components/dropdown/dist/registered.js +1 -1
  30. package/components/form/demo/customize.min.js +159 -239
  31. package/components/form/demo/getting-started.min.js +159 -239
  32. package/components/form/demo/index.min.js +159 -239
  33. package/components/form/demo/registerDemoDeps.min.js +159 -239
  34. package/components/input/demo/customize.min.js +41 -19
  35. package/components/input/demo/getting-started.min.js +41 -19
  36. package/components/input/demo/index.min.js +41 -19
  37. package/components/input/dist/base-input.d.ts +20 -4
  38. package/components/input/dist/index.js +41 -19
  39. package/components/input/dist/registered.js +41 -19
  40. package/components/radio/demo/customize.min.js +1 -1
  41. package/components/radio/demo/getting-started.min.js +1 -1
  42. package/components/radio/demo/index.min.js +1 -1
  43. package/components/radio/dist/index.js +1 -1
  44. package/components/radio/dist/registered.js +1 -1
  45. package/components/select/demo/customize.min.js +2 -2
  46. package/components/select/demo/getting-started.min.js +2 -2
  47. package/components/select/demo/index.min.js +2 -2
  48. package/components/select/dist/index.js +2 -2
  49. package/components/select/dist/registered.js +2 -2
  50. package/custom-elements.json +1619 -1595
  51. 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 = '202607022134';
4815
+ var formkitVersion$2 = '202607022131';
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;
17341
+ this._userSetFormat = true;
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;
17354
+ this.requestUpdate('format', oldValue);
17355
+ }
17356
+
17326
17357
  connectedCallback() {
17327
17358
  super.connectedCallback();
17328
17359
 
@@ -17376,7 +17407,7 @@ class BaseInput extends AuroElement$1 {
17376
17407
  // format silently misses the map and leaves `setCustomValidityForType`
17377
17408
  // unset.
17378
17409
  if (this.format) {
17379
- this.format = this.format.toLowerCase();
17410
+ this._setFormatFromLocale(this.format.toLowerCase());
17380
17411
  }
17381
17412
 
17382
17413
  // use validity message override if declared when initializing the component
@@ -17485,12 +17516,10 @@ class BaseInput extends AuroElement$1 {
17485
17516
  updated(changedProperties) {
17486
17517
  super.updated(changedProperties);
17487
17518
 
17488
- // When locale changes without an explicit format override, derive format from the new locale.
17489
- // Only runs if the current format is still the previous locale's default (not user-overridden).
17519
+ // When locale changes, auto-derive format unless the consumer explicitly set one.
17490
17520
  if (changedProperties.has('locale') && !changedProperties.has('format') && this.type === 'date') {
17491
- const previousLocaleFormat = getDateFormatFromLocale(changedProperties.get('locale'));
17492
- if (!this.format || this.format.toLowerCase() === previousLocaleFormat) {
17493
- this.format = getDateFormatFromLocale(this.locale);
17521
+ if (!this._userSetFormat) {
17522
+ this._setFormatFromLocale(getDateFormatFromLocale(this.locale));
17494
17523
  }
17495
17524
  }
17496
17525
 
@@ -17661,9 +17690,6 @@ class BaseInput extends AuroElement$1 {
17661
17690
  this.maskInstance.on('accept', () => {
17662
17691
  if (this._configuringMask) return;
17663
17692
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
17664
- if (this.type === "date") {
17665
- this._rawMaskValue = this.maskInstance.value;
17666
- }
17667
17693
  });
17668
17694
 
17669
17695
  // Mask fires 'complete' on the restore step below for any value that
@@ -17671,9 +17697,6 @@ class BaseInput extends AuroElement$1 {
17671
17697
  this.maskInstance.on('complete', () => {
17672
17698
  if (this._configuringMask) return;
17673
17699
  this.value = this.util.toModelValue(this.maskInstance.value, this.format);
17674
- if (this.type === "date") {
17675
- this._rawMaskValue = this.maskInstance.value;
17676
- }
17677
17700
  });
17678
17701
 
17679
17702
  // Write existingValue through the mask (not the input directly) so
@@ -17910,8 +17933,7 @@ class BaseInput extends AuroElement$1 {
17910
17933
 
17911
17934
  // Set default date format if type=date and no format is defined
17912
17935
  if (this.type === "date" && !this.format) {
17913
- // Use locale to determine default date format
17914
- this.format = this.util.getDateMaskFromLocale().toLowerCase();
17936
+ this._setFormatFromLocale(this.util.getDateMaskFromLocale().toLowerCase());
17915
17937
  this.util.updateFormat(this.format);
17916
17938
  }
17917
17939
  }
@@ -17940,7 +17962,7 @@ class BaseInput extends AuroElement$1 {
17940
17962
  const creditCard = this.matchInputValueToCreditCard();
17941
17963
  const previousFormat = this.format;
17942
17964
 
17943
- this.format = creditCard.maskFormat;
17965
+ this._setFormatFromLocale(creditCard.maskFormat);
17944
17966
 
17945
17967
  this.maxLength = creditCard.formatLength;
17946
17968
  this.minLength = creditCard.formatMinLength;
@@ -18414,7 +18436,7 @@ let AuroHelpText$1 = class AuroHelpText extends LitElement {
18414
18436
  }
18415
18437
  };
18416
18438
 
18417
- var formkitVersion$1 = '202607022134';
18439
+ var formkitVersion$1 = '202607022131';
18418
18440
 
18419
18441
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18420
18442
  // See LICENSE in the project root for license information.
@@ -19540,7 +19562,7 @@ class AuroBibtemplate extends LitElement {
19540
19562
  }
19541
19563
  }
19542
19564
 
19543
- var formkitVersion = '202607022134';
19565
+ var formkitVersion = '202607022131';
19544
19566
 
19545
19567
  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
19568
 
@@ -1114,7 +1114,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$2 {
1114
1114
  }
1115
1115
  };
1116
1116
 
1117
- var formkitVersion$1 = '202607022134';
1117
+ var formkitVersion$1 = '202607022131';
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 = '202607022134';
5463
+ var formkitVersion = '202607022131';
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 = '202607022134';
1117
+ var formkitVersion$1 = '202607022131';
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 = '202607022134';
5463
+ var formkitVersion = '202607022131';
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 = '202607022134';
1067
+ var formkitVersion$1 = '202607022131';
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 = '202607022134';
5395
+ var formkitVersion = '202607022131';
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 = '202607022134';
1067
+ var formkitVersion$1 = '202607022131';
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 = '202607022134';
5395
+ var formkitVersion = '202607022131';
5396
5396
 
5397
5397
  let AuroElement$1 = class AuroElement extends LitElement {
5398
5398
  static get properties() {
@@ -32,14 +32,14 @@ The calendar uses the WAI-ARIA grid pattern for screen reader navigation:
32
32
  | Attribute | Applied to | Description |
33
33
  |---|---|---|
34
34
  | `role="grid"` | Calendar table | Identifies the calendar as a grid. The month heading is rendered as visible text adjacent to the grid but is excluded from the accessibility tree (announcements are handled via the live region described below). |
35
- | `role="rowgroup"` | Body group | Groups the week rows. |
35
+ | `role="rowgroup"` | Body group | Groups the week rows. The day-of-week header row is `aria-hidden="true"` (see below). |
36
36
  | `role="row"` | Week row | Groups each week of date cells. |
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"`). |
37
+ | Day-of-week header | Day-of-week row | Rendered as visible `<abbr>` elements with the full day name in the `title` attribute, but the row is `aria-hidden="true"` since the per-cell accessible name already includes the weekday name. |
38
38
  | `role="gridcell"` | In-range date cell, active-descendant proxy | Each selectable date cell. Includes `aria-selected`, `aria-current="date"` (for today), and a visually-hidden text label. A proxy `<span>` inside the calendar grid wrapper mirrors the active cell's ARIA attributes for `aria-activedescendant`. |
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. |
39
+ | `role="presentation"` | Out-of-range date cell | Cells outside the valid min/max range. Also receive `aria-hidden="true"` and `tabindex="-1"` to remove them from both the accessibility tree and the tab order. |
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 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). |
42
+ | Accessible name | Date cell button | Provided via visually-hidden text content (not an `aria-label` attribute). 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).
@@ -66,15 +66,6 @@ When the calendar bib opens, focus moves to the calendar grid wrapper (`#calenda
66
66
  - **Validation errors** — When a validation error occurs, the error message is rendered with `role="alert"` and `aria-live="assertive"`, causing it to be announced immediately without requiring focus.
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
- <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 reasons:
71
-
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`](../../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
- - **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
-
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.
77
-
78
69
  <auro-header level="2" id="accessibleLabels">Accessible Labels</auro-header>
79
70
  - The `fromLabel` slot content is used as the accessible name for the first date input. It is also forwarded to the dropdown bib as the dialog's accessible name (`aria-labelledby`).
80
71
  - When `range` is set, the `toLabel` slot content provides the accessible name for the second date input.
@@ -11,7 +11,7 @@ The `auro-datepicker` component provides users with a way to select a date or da
11
11
  |-----------------------------------|-----------------------------------|-----------|--------------------------------------------------|--------------------------------|--------------------------------------------------|
12
12
  | `appearance` | `appearance` | | `'default' \| 'inverse'` | "'default'" | Defines whether the component will be on lighter or darker backgrounds. |
13
13
  | `autoPlacement` | `autoPlacement` | | `boolean` | "false" | If declared, bib's position will be automatically calculated where to appear. |
14
- | `blackoutDates` | `blackoutDates` | | `array` | [] | Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD).<br /><br />**Immutable update required.** The datepicker treats this array as<br />immutable and memoizes a lookup Set keyed on the array's reference<br />identity — matching Lit's own reactivity semantics for array<br />properties. In-place mutations (`blackoutDates.push(...)`,<br />`blackoutDates[i] = ...`, `blackoutDates.splice(...)`) will not<br />invalidate the cache and the new entries will be silently ignored.<br />To update, reassign the property: `el.blackoutDates = [...el.blackoutDates, '2024-12-25']`. |
14
+ | `blackoutDates` | `blackoutDates` | | `array` | [] | Array of dates that cannot be selected. Dates should be in ISO format (YYYY-MM-DD). |
15
15
  | `blackoutLabel` | `blackoutLabel` | | `string` | "'unavailable'" | Label announced for blackout (disabled but in-range) date cells. |
16
16
  | `calendarEndDate` | `calendarEndDate` | | `string` | "undefined" | The last date that may be displayed in the calendar. |
17
17
  | `calendarEndDateObject` | | readonly | `Date \| undefined` | | Read-only `Date` object derived from `calendarEndDate`. Returns `undefined` when `calendarEndDate` is empty or not a valid date. |