@aurodesignsystem-dev/auro-formkit 0.0.0-pr1578.0 → 0.0.0-pr1581.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 (69) hide show
  1. package/ai/README.md +142 -0
  2. package/ai/_a11y-baseline.md +27 -0
  3. package/ai/_authored/_defaults.overlay.yaml +81 -0
  4. package/ai/_authored/auro-checkbox.overlay.yaml +22 -0
  5. package/ai/_authored/auro-combobox.overlay.yaml +37 -0
  6. package/ai/_authored/auro-counter.overlay.yaml +23 -0
  7. package/ai/_authored/auro-datepicker.overlay.yaml +44 -0
  8. package/ai/_authored/auro-dropdown.overlay.yaml +35 -0
  9. package/ai/_authored/auro-form.overlay.yaml +12 -0
  10. package/ai/_authored/auro-input.overlay.yaml +33 -0
  11. package/ai/_authored/auro-menu.overlay.yaml +21 -0
  12. package/ai/_authored/auro-radio.overlay.yaml +19 -0
  13. package/ai/_authored/auro-select.overlay.yaml +37 -0
  14. package/ai/_prompt-template.md +33 -0
  15. package/ai/llms.txt +26 -0
  16. package/ai/specs/auro-checkbox.spec.yaml +181 -0
  17. package/ai/specs/auro-combobox.spec.yaml +349 -0
  18. package/ai/specs/auro-counter.spec.yaml +215 -0
  19. package/ai/specs/auro-datepicker.spec.yaml +395 -0
  20. package/ai/specs/auro-dropdown.spec.yaml +295 -0
  21. package/ai/specs/auro-form.spec.yaml +148 -0
  22. package/ai/specs/auro-input.spec.yaml +392 -0
  23. package/ai/specs/auro-menu.spec.yaml +213 -0
  24. package/ai/specs/auro-radio.spec.yaml +184 -0
  25. package/ai/specs/auro-select.spec.yaml +324 -0
  26. package/components/checkbox/demo/customize.min.js +1 -1
  27. package/components/checkbox/demo/getting-started.min.js +1 -1
  28. package/components/checkbox/demo/index.min.js +1 -1
  29. package/components/checkbox/dist/index.js +1 -1
  30. package/components/checkbox/dist/registered.js +1 -1
  31. package/components/combobox/demo/customize.min.js +12 -3
  32. package/components/combobox/demo/getting-started.min.js +12 -3
  33. package/components/combobox/demo/index.min.js +12 -3
  34. package/components/combobox/dist/index.js +12 -3
  35. package/components/combobox/dist/registered.js +12 -3
  36. package/components/counter/demo/customize.min.js +12 -3
  37. package/components/counter/demo/index.min.js +12 -3
  38. package/components/counter/dist/index.js +12 -3
  39. package/components/counter/dist/registered.js +12 -3
  40. package/components/datepicker/demo/customize.min.js +12 -3
  41. package/components/datepicker/demo/index.min.js +12 -3
  42. package/components/datepicker/dist/index.js +12 -3
  43. package/components/datepicker/dist/registered.js +12 -3
  44. package/components/dropdown/demo/customize.min.js +10 -1
  45. package/components/dropdown/demo/getting-started.min.js +11 -2
  46. package/components/dropdown/demo/index.min.js +10 -1
  47. package/components/dropdown/dist/index.js +10 -1
  48. package/components/dropdown/dist/registered.js +10 -1
  49. package/components/form/demo/customize.min.js +50 -14
  50. package/components/form/demo/getting-started.min.js +50 -14
  51. package/components/form/demo/index.min.js +50 -14
  52. package/components/form/demo/registerDemoDeps.min.js +50 -14
  53. package/components/input/demo/customize.min.js +1 -1
  54. package/components/input/demo/getting-started.min.js +1 -1
  55. package/components/input/demo/index.min.js +1 -1
  56. package/components/input/dist/index.js +1 -1
  57. package/components/input/dist/registered.js +1 -1
  58. package/components/radio/demo/customize.min.js +1 -1
  59. package/components/radio/demo/getting-started.min.js +1 -1
  60. package/components/radio/demo/index.min.js +1 -1
  61. package/components/radio/dist/index.js +1 -1
  62. package/components/radio/dist/registered.js +1 -1
  63. package/components/select/demo/customize.min.js +11 -2
  64. package/components/select/demo/getting-started.min.js +11 -2
  65. package/components/select/demo/index.min.js +11 -2
  66. package/components/select/dist/index.js +11 -2
  67. package/components/select/dist/registered.js +11 -2
  68. package/custom-elements.json +1521 -1521
  69. package/package.json +6 -3
@@ -0,0 +1,184 @@
1
+ # GENERATED by packages/build-tools/src/aiSpecGenerator.mjs — do not edit by hand.
2
+ # Authored inputs live in ai/_authored/auro-radio.overlay.yaml
3
+ component: auro-radio
4
+ version: 0.0.0
5
+ summary: Radio button for selecting exactly one option from a set; composes into a radio-group. Native equivalent is a set of <input type="radio"> sharing a name.
6
+ generatedFrom:
7
+ cem: custom-elements.json#auro-radio
8
+ cssRecipe: components/radio/demo/css-only.md
9
+ overlay: ai/_authored/auro-radio.overlay.yaml
10
+ sourceOfTruth:
11
+ component: components/radio/src/auro-radio.js
12
+ visual:
13
+ tokensImport: ./node_modules/@aurodesignsystem/design-tokens/dist/tokens/CSSCustomProperties.css
14
+ rule: NEVER hardcode a hex, px, rem, or font-family value. Every visual value MUST be an Auro --ds-* token via var(--ds-token, fallback). Literal values are allowed only as the second argument (fallback) of var().
15
+ css: |-
16
+ @import "./node_modules/@aurodesignsystem/design-tokens/dist/tokens/CSSCustomProperties.css";
17
+
18
+ .radio {
19
+ appearance: none;
20
+ -webkit-appearance: none;
21
+ width: var(--ds-size-300, 1.5rem);
22
+ height: var(--ds-size-300, 1.5rem);
23
+ border: 1px solid var(--ds-color-border-ui-default, #6e767f);
24
+ border-radius: 50%;
25
+ background-color: var(--ds-color-container-primary-default, #ffffff);
26
+ cursor: pointer;
27
+ vertical-align: middle;
28
+ }
29
+
30
+ .radio:checked {
31
+ background-color: var(--ds-color-container-ui-selected-default, #01426a);
32
+ border-color: var(--ds-color-border-ui-selected-default, #01426a);
33
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='5' fill='white'/%3E%3C/svg%3E");
34
+ background-repeat: no-repeat;
35
+ background-position: center;
36
+ background-size: 100%;
37
+ }
38
+
39
+ .radio:focus-visible {
40
+ outline: 2px solid var(--ds-color-border-active-default, #01426a);
41
+ outline-offset: 2px;
42
+ }
43
+
44
+ .radio:disabled {
45
+ cursor: not-allowed;
46
+ opacity: 0.5;
47
+ }
48
+ api:
49
+ attributes:
50
+ - name: appearance
51
+ tier: wc-only
52
+ default: '''default'''
53
+ description: Defines whether the component will be on lighter or darker backgrounds.
54
+ - name: checked
55
+ tier: core
56
+ native: checked
57
+ description: If set to true, the radio button will be filled.
58
+ - name: disabled
59
+ tier: core
60
+ native: disabled
61
+ description: If set to true, the radio button will be non-clickable.
62
+ - name: error
63
+ tier: wc-only
64
+ description: If set to true, sets an error state on the radio button.
65
+ - name: id
66
+ tier: core
67
+ native: id
68
+ description: The id global attribute defines an identifier (ID) which must be unique in the whole document.
69
+ - name: label
70
+ tier: enhanced
71
+ native: associate a <label> via for/id (label is not a native attribute)
72
+ description: Label for the radio button.
73
+ - name: name
74
+ tier: core
75
+ native: name
76
+ description: Name for the radio button group.
77
+ - name: onDark
78
+ tier: wc-only
79
+ description: DEPRECATED - use `appearance="inverse"` instead.
80
+ - name: required
81
+ tier: core
82
+ native: required
83
+ description: Defines element as required.
84
+ - name: role
85
+ tier: enhanced
86
+ description: Don't add to api.md since changing of this can easily break a11y.
87
+ - name: value
88
+ tier: core
89
+ native: value
90
+ description: The value of the radio button.
91
+ slots: []
92
+ events:
93
+ - name: toggleSelected
94
+ tier: core
95
+ description: Notifies that the component has toggled the checked/selected state.
96
+ - name: focusSelected
97
+ tier: core
98
+ description: Notifies that the component has gained focus.
99
+ - name: auroRadio-blur
100
+ tier: wc-only
101
+ description: Notifies that the component has lost focus.
102
+ - name: resetRadio
103
+ tier: core
104
+ description: Notifies that the component has reset the checked/selected state.
105
+ - name: auroRadio-selected
106
+ tier: wc-only
107
+ description: Notifies that the component has been marked as checked/selected.
108
+ - name: change
109
+ tier: core
110
+ description: (Deprecated) Notifies when checked value is changed.
111
+ - name: input
112
+ tier: core
113
+ description: Notifies when when checked value is changed by user's interface.
114
+ methods:
115
+ - name: _initializeDefaults
116
+ tier: wc-only
117
+ - name: register
118
+ tier: wc-only
119
+ - name: reset
120
+ tier: wc-only
121
+ behavior:
122
+ a11y:
123
+ - Every control MUST have a programmatically associated <label> (for/id or wrapping).
124
+ - Link help text via aria-describedby so it is announced after the label.
125
+ - Reflect invalid state with aria-invalid="true|false" on the control.
126
+ - Render validation errors with role="alert" aria-live="assertive" so they announce immediately.
127
+ - Use native <input type="radio"> elements that share the same `name` to form one group.
128
+ - Wrap the group in a <fieldset> with a <legend> as the group label.
129
+ keyboard:
130
+ - All interactive affordances are real, focusable elements in DOM order.
131
+ - Arrow keys move selection within the group; only the checked radio is in the tab order (native roving).
132
+ validation:
133
+ - Mark one radio in the group `required` to require a selection (native).
134
+ gaps:
135
+ - id: group-level-validation
136
+ feature: Group-level validation
137
+ guidance: auro-radio-group supports a required attribute that validates "one radio in the group must be selected." Native HTML required on a radio input enforces the same constraint, but the validation message surfaces on a single input rather than being coordinated across the group.
138
+ - id: custom-validation-messages
139
+ feature: Custom validation messages
140
+ guidance: auro-radio-group exposes setCustomValidity and setCustomValidityValueMissing for fully customizable error messages per validity state.
141
+ - id: touched-state-tracking
142
+ feature: Touched-state tracking
143
+ guidance: auro-radio-group tracks a touched state so validation errors only appear after the user has interacted with the group.
144
+ - id: coordinated-value-property
145
+ feature: Coordinated value property
146
+ guidance: auro-radio-group exposes a single value property that reflects the selected radio's value and dispatches a single change event when that value changes.
147
+ - id: automatic-label-binding
148
+ feature: Automatic label binding
149
+ guidance: auro-radio automatically associates slot content as the accessible label, eliminating the need for <label for> wiring or wrapping <label> elements.
150
+ - id: disabled-propagation
151
+ feature: Disabled propagation
152
+ guidance: auro-radio-group propagates a single disabled attribute to all child radios.
153
+ - id: form-integration-events
154
+ feature: Form integration events
155
+ guidance: auro-radio-group dispatches auroFormElement-validated events so parent auro-form elements can coordinate validation across all child fields.
156
+ - id: horizontal-layout
157
+ feature: Horizontal layout
158
+ guidance: auro-radio-group supports a horizontal attribute for compact groups of up to three items, with spacing and alignment handled by the component.
159
+ - id: reset-behavior
160
+ feature: Reset behavior
161
+ guidance: auro-radio-group provides a single reset() method that clears the selection and resets validation state in one call.
162
+ - id: multi-brand-theming
163
+ feature: Multi-brand theming
164
+ guidance: auro-radio consumes Auro design tokens through its component logic, so it automatically picks up brand-specific theming when token packages are swapped.
165
+ examples:
166
+ - id: basic-radio
167
+ html: |-
168
+ <label>
169
+ <input type="radio" class="radio" name="subscribe" value="yes" />
170
+ Subscribe to updates
171
+ </label>
172
+ - id: group-of-radios
173
+ html: |-
174
+ <fieldset>
175
+ <legend>Choose a delivery method</legend>
176
+ <label><input type="radio" class="radio" name="delivery" value="email" /> Email</label>
177
+ <label><input type="radio" class="radio" name="delivery" value="sms" /> SMS</label>
178
+ <label><input type="radio" class="radio" name="delivery" value="push" /> Push notification</label>
179
+ </fieldset>
180
+ verify:
181
+ - every color, size, spacing, radius, and font value uses var(--ds-*)
182
+ - each control has an associated <label>
183
+ - controls with aria-invalid="true" have a role="alert" message referenced by aria-describedby
184
+ - 'axe: label, aria-valid-attr-value, color-contrast pass'
@@ -0,0 +1,324 @@
1
+ # GENERATED by packages/build-tools/src/aiSpecGenerator.mjs — do not edit by hand.
2
+ # Authored inputs live in ai/_authored/auro-select.overlay.yaml
3
+ component: auro-select
4
+ version: 0.0.0
5
+ summary: Select control (wraps auro-dropdown + auro-menu). Native equivalent is a <select> with <option>/<optgroup>; the option panel cannot be styled natively.
6
+ generatedFrom:
7
+ cem: custom-elements.json#auro-select
8
+ cssRecipe: components/select/demo/css-only.md
9
+ overlay: ai/_authored/auro-select.overlay.yaml
10
+ sourceOfTruth:
11
+ component: components/select/src/auro-select.js
12
+ visual:
13
+ tokensImport: ./node_modules/@aurodesignsystem/design-tokens/dist/tokens/CSSCustomProperties.css
14
+ rule: NEVER hardcode a hex, px, rem, or font-family value. Every visual value MUST be an Auro --ds-* token via var(--ds-token, fallback). Literal values are allowed only as the second argument (fallback) of var().
15
+ css: |-
16
+ @import "./node_modules/@aurodesignsystem/design-tokens/dist/tokens/CSSCustomProperties.css";
17
+
18
+ .select {
19
+ appearance: none;
20
+ -webkit-appearance: none;
21
+ -moz-appearance: none;
22
+ width: 100%;
23
+ min-height: var(--ds-size-600, 3rem);
24
+ padding: var(--ds-size-100, 0.5rem) var(--ds-size-400, 2rem) var(--ds-size-100, 0.5rem) var(--ds-size-200, 1rem);
25
+ border: 1px solid var(--ds-color-border-ui-default, #6e767f);
26
+ border-radius: var(--ds-border-radius, 4px);
27
+ background-color: var(--ds-color-container-primary-default, #ffffff);
28
+ color: var(--ds-color-text-primary-default, #1d1d1d);
29
+ font-family: inherit;
30
+ font-size: 1rem;
31
+ line-height: 1.5;
32
+ cursor: pointer;
33
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d1d1d' stroke-width='2'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
34
+ background-repeat: no-repeat;
35
+ background-position: right var(--ds-size-150, 0.75rem) center;
36
+ background-size: var(--ds-size-200, 1rem);
37
+ }
38
+
39
+ .select:focus-visible {
40
+ outline: 2px solid var(--ds-color-border-active-default, #01426a);
41
+ outline-offset: 2px;
42
+ border-color: var(--ds-color-border-active-default, #01426a);
43
+ }
44
+
45
+ .select:disabled {
46
+ cursor: not-allowed;
47
+ opacity: 0.5;
48
+ }
49
+
50
+ .select:invalid {
51
+ border-color: var(--ds-color-border-error-default, #d6371e);
52
+ }
53
+ api:
54
+ attributes:
55
+ - name: appearance
56
+ tier: wc-only
57
+ default: '''default'''
58
+ description: Defines whether the component will be on lighter or darker backgrounds.
59
+ - name: autoPlacement
60
+ tier: wc-only
61
+ default: 'false'
62
+ description: If declared, bib's position will be automatically calculated where to appear.
63
+ - name: autocomplete
64
+ tier: core
65
+ native: autocomplete
66
+ description: If declared, sets the autocomplete attribute for the select element.
67
+ - name: disabled
68
+ tier: core
69
+ native: disabled
70
+ description: When attribute is present, element shows disabled state.
71
+ - name: error
72
+ tier: wc-only
73
+ description: When defined, sets persistent validity to `customError` and sets `setCustomValidity` = attribute value.
74
+ - name: flexMenuWidth
75
+ tier: wc-only
76
+ description: If declared, make the width of the bib match the width of the content, rather than the trigger.
77
+ - name: fluid
78
+ tier: wc-only
79
+ description: When attribute is present, element will be 100% width of container element.
80
+ - name: forceDisplayValue
81
+ tier: wc-only
82
+ default: 'false'
83
+ description: If declared, the label and value will be visually hidden and the displayValue will render 100% of the time.
84
+ - name: fullscreenBreakpoint
85
+ tier: wc-only
86
+ default: '''sm'''
87
+ description: Defines the screen size breakpoint at which the dropdown switches to fullscreen mode on mobile.
88
+ - name: isPopoverVisible
89
+ tier: wc-only
90
+ - name: largeFullscreenHeadline
91
+ tier: wc-only
92
+ description: If declared, make bib.fullscreen.headline in HeadingDisplay.
93
+ - name: layout
94
+ tier: wc-only
95
+ default: '''classic'''
96
+ description: Determines the overall layout of the select component.
97
+ - name: matchWidth
98
+ tier: wc-only
99
+ default: 'false'
100
+ description: If declared, the popover and trigger will be set to the same width.
101
+ - name: multiselect
102
+ tier: core
103
+ native: multiple
104
+ description: Sets multi-select mode, allowing multiple options to be selected at once.
105
+ - name: name
106
+ tier: core
107
+ native: name
108
+ description: The name for the select element.
109
+ - name: noCheckmark
110
+ tier: wc-only
111
+ description: When true, checkmark on selected option will no longer be present.
112
+ - name: noFlip
113
+ tier: wc-only
114
+ default: 'false'
115
+ description: If declared, the bib will NOT flip to an alternate position when there isn't enough space in the specified `placement`.
116
+ - name: noValidate
117
+ tier: wc-only
118
+ description: If set, disables auto-validation on blur.
119
+ - name: offset
120
+ tier: wc-only
121
+ default: '0'
122
+ description: Gap between the trigger element and bib.
123
+ - name: onDark
124
+ tier: wc-only
125
+ description: DEPRECATED - use `appearance="inverse"` instead.
126
+ - name: optionSelected
127
+ tier: wc-only
128
+ description: Specifies the current selected menuOption.
129
+ - name: placeholder
130
+ tier: core
131
+ native: placeholder
132
+ description: Define custom placeholder text.
133
+ - name: placement
134
+ tier: wc-only
135
+ default: '''bottom-start'''
136
+ description: Position where the bib should appear relative to the trigger.
137
+ - name: required
138
+ tier: core
139
+ native: required
140
+ description: Populates the `required` attribute on the element.
141
+ - name: setCustomValidity
142
+ tier: wc-only
143
+ description: Sets a custom help text message to display for all validityStates.
144
+ - name: setCustomValidityCustomError
145
+ tier: enhanced
146
+ description: Custom help text message to display when validity = `customError`.
147
+ - name: setCustomValidityValueMissing
148
+ tier: enhanced
149
+ description: Custom help text message to display when validity = `valueMissing`.
150
+ - name: shape
151
+ tier: wc-only
152
+ description: Determines the shape of the dropdown bib.
153
+ - name: shift
154
+ tier: wc-only
155
+ default: 'false'
156
+ description: If set, the dropdown will shift its position to avoid being cut off by the viewport.
157
+ - name: size
158
+ tier: enhanced
159
+ description: Determines the size of the dropdown bib.
160
+ - name: typeaheadTimeoutMs
161
+ tier: wc-only
162
+ default: '500'
163
+ description: Milliseconds of keyboard inactivity before the type-ahead buffer resets.
164
+ - name: validity
165
+ tier: wc-only
166
+ description: Specifies the `validityState` this element is in.
167
+ - name: value
168
+ tier: core
169
+ native: value
170
+ description: Value selected for the component.
171
+ - name: ondark
172
+ tier: wc-only
173
+ slots:
174
+ - name: (default)
175
+ tier: core
176
+ description: Default slot for the menu content.
177
+ - name: ariaLabel.bib.close
178
+ tier: core
179
+ description: Sets aria-label on close button in fullscreen bib
180
+ - name: bib.fullscreen.headline
181
+ tier: core
182
+ description: Defines the headline to display above menu-options
183
+ - name: label
184
+ tier: core
185
+ description: Defines the content of the label.
186
+ - name: optionalLabel
187
+ tier: core
188
+ description: Allows overriding the optional display text "(optional)", which appears next to the label.
189
+ - name: helpText
190
+ tier: core
191
+ description: Defines the content of the helpText.
192
+ - name: valueText
193
+ tier: core
194
+ description: Dropdown value text display.
195
+ - name: displayValue
196
+ tier: wc-only
197
+ description: Allows custom HTML content to display the selected value when select is not focused.
198
+ events:
199
+ - name: auroSelect-valueSet
200
+ tier: wc-only
201
+ description: Notifies that the component has a new value set.
202
+ - name: input
203
+ tier: core
204
+ description: Notifies every time the value prop of the element is changed.
205
+ - name: auroFormElement-validated
206
+ tier: wc-only
207
+ description: Notifies that the `validity` and `errorMessage` values have changed.
208
+ methods:
209
+ - name: register
210
+ tier: wc-only
211
+ - name: updateActiveOption
212
+ tier: wc-only
213
+ - name: hideBib
214
+ tier: wc-only
215
+ - name: showBib
216
+ tier: wc-only
217
+ - name: setMenuValue
218
+ tier: wc-only
219
+ - name: reset
220
+ tier: wc-only
221
+ - name: validate
222
+ tier: wc-only
223
+ - name: resetShapeClasses
224
+ tier: wc-only
225
+ - name: resetLayoutClasses
226
+ tier: wc-only
227
+ - name: updateComponentArchitecture
228
+ tier: wc-only
229
+ behavior:
230
+ a11y:
231
+ - Every control MUST have a programmatically associated <label> (for/id or wrapping).
232
+ - Link help text via aria-describedby so it is announced after the label.
233
+ - Reflect invalid state with aria-invalid="true|false" on the control.
234
+ - Render validation errors with role="alert" aria-live="assertive" so they announce immediately.
235
+ - Use a native <select> with an associated <label>; group options with <optgroup label="...">.
236
+ - Multi-select uses the native `multiple` attribute.
237
+ keyboard:
238
+ - All interactive affordances are real, focusable elements in DOM order.
239
+ - Type-ahead, Up/Down, and Home/End are provided natively by <select>.
240
+ validation:
241
+ - Set `required` on <select> with an empty-value first <option> to enforce a selection natively.
242
+ gaps:
243
+ - id: stylable-dropdown-panel
244
+ feature: Stylable dropdown panel
245
+ guidance: auro-select renders its dropdown panel (the "bib") as part of the component, so option spacing, borders, elevation, and selected-state styling all match the Auro design system.
246
+ - id: rich-option-content
247
+ feature: Rich option content
248
+ guidance: auro-select accepts auro-menuoption children whose default slot can contain any HTML — icons, two-line descriptions, badges, or custom markup.
249
+ - id: custom-display-value
250
+ feature: Custom display value
251
+ guidance: auro-select exposes a displayValue slot and a forceDisplayValue attribute so the collapsed trigger can show formatted content (markup, icons, a different string than the selected option's label).
252
+ - id: custom-validation-messages
253
+ feature: Custom validation messages
254
+ guidance: auro-select exposes setCustomValidity, setCustomValidityValueMissing, setCustomValidityCustomError, and an error attribute for fully customizable error messages per validity state.
255
+ - id: help-text-and-error-slots
256
+ feature: Help text and error slots
257
+ guidance: auro-select provides a helpText slot that renders below the trigger and automatically swaps to the active validation message when the field is invalid.
258
+ - id: multi-select-with-checkmarks
259
+ feature: Multi-select with checkmarks
260
+ guidance: auro-select supports a multiSelect attribute that keeps the dropdown open between selections, renders checkmarks next to chosen options, and exposes the selection as an array via optionSelected.
261
+ - id: type-ahead-navigation
262
+ feature: Type-ahead navigation
263
+ guidance: auro-select implements its own keyboard strategy (see selectKeyboardStrategy.js) for type-ahead matching, arrow-key navigation, and focus management that is consistent across browsers.
264
+ - id: mobile-fullscreen-behavior
265
+ feature: Mobile fullscreen behavior
266
+ guidance: auro-select automatically switches its dropdown to a fullscreen sheet on small viewports via the fullscreenBreakpoint attribute, with a configurable headline slot (bib.fullscreen.headline) and close-button label.
267
+ - id: placement-and-layout-control
268
+ feature: Placement and layout control
269
+ guidance: auro-select supports placement, autoPlacement, noFlip, shift, offset, matchWidth, and flexMenuWidth attributes to control where and how the dropdown opens.
270
+ - id: aria-wiring
271
+ feature: ARIA wiring
272
+ guidance: auro-select manages the ARIA relationships between the trigger, label, help text, listbox, and active option automatically.
273
+ - id: value-sync-and-events
274
+ feature: Value sync and events
275
+ guidance: auro-select exposes a single value property plus an optionSelected reference to the chosen option element, and dispatches auroSelect-valueSet, input, and auroFormElement-validated events for integration with auro-form.
276
+ - id: touched-state-tracking
277
+ feature: Touched-state tracking
278
+ guidance: auro-select tracks a touched state so validation errors only appear after the user has interacted with the field.
279
+ - id: reset-behavior
280
+ feature: Reset behavior
281
+ guidance: auro-select provides a single reset() method that clears the value and resets validation state in one call.
282
+ - id: layout-and-shape-variants
283
+ feature: Layout and shape variants
284
+ guidance: auro-select supports layout (classic, emphasized, snowflake) and shape (classic, pill, pill-left, pill-right, snowflake) attributes for design-system-aligned visual variants.
285
+ - id: multi-brand-theming
286
+ feature: Multi-brand theming
287
+ guidance: auro-select consumes Auro design tokens through its component logic, so it automatically picks up brand-specific theming when token packages are swapped.
288
+ examples:
289
+ - id: basic-select
290
+ html: |-
291
+ <label for="destination">Destination</label>
292
+ <select id="destination" name="destination" class="select">
293
+ <option value="">Choose a destination</option>
294
+ <option value="sea">Seattle</option>
295
+ <option value="pdx">Portland</option>
296
+ <option value="anc">Anchorage</option>
297
+ </select>
298
+ - id: select-with-optgroup
299
+ html: |-
300
+ <label for="airport">Airport</label>
301
+ <select id="airport" name="airport" class="select">
302
+ <optgroup label="Pacific Northwest">
303
+ <option value="sea">Seattle</option>
304
+ <option value="pdx">Portland</option>
305
+ </optgroup>
306
+ <optgroup label="Alaska">
307
+ <option value="anc">Anchorage</option>
308
+ <option value="fai">Fairbanks</option>
309
+ </optgroup>
310
+ </select>
311
+ - id: multiple-select
312
+ html: |-
313
+ <label for="preferences">Travel preferences</label>
314
+ <select id="preferences" name="preferences" class="select" multiple size="4">
315
+ <option value="window">Window seat</option>
316
+ <option value="aisle">Aisle seat</option>
317
+ <option value="meal">Special meal</option>
318
+ <option value="early">Early boarding</option>
319
+ </select>
320
+ verify:
321
+ - every color, size, spacing, radius, and font value uses var(--ds-*)
322
+ - each control has an associated <label>
323
+ - controls with aria-invalid="true" have a role="alert" message referenced by aria-describedby
324
+ - 'axe: label, aria-valid-attr-value, color-contrast pass'
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202608042147';
1278
+ var formkitVersion = '202608071813';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202608042147';
1278
+ var formkitVersion = '202608071813';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1275,7 +1275,7 @@ class AuroHelpText extends i$2 {
1275
1275
  }
1276
1276
  }
1277
1277
 
1278
- var formkitVersion = '202608042147';
1278
+ var formkitVersion = '202608071813';
1279
1279
 
1280
1280
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1281
1281
  // See LICENSE in the project root for license information.
@@ -1228,7 +1228,7 @@ class AuroHelpText extends LitElement {
1228
1228
  }
1229
1229
  }
1230
1230
 
1231
- var formkitVersion = '202608042147';
1231
+ var formkitVersion = '202608071813';
1232
1232
 
1233
1233
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1234
1234
  // See LICENSE in the project root for license information.
@@ -1228,7 +1228,7 @@ class AuroHelpText extends LitElement {
1228
1228
  }
1229
1229
  }
1230
1230
 
1231
- var formkitVersion = '202608042147';
1231
+ var formkitVersion = '202608071813';
1232
1232
 
1233
1233
  // Copyright (c) 2026 Alaska Airlines. All rights reserved. Licensed under the Apache-2.0 license
1234
1234
  // See LICENSE in the project root for license information.
@@ -4977,7 +4977,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4977
4977
  }
4978
4978
  };
4979
4979
 
4980
- var formkitVersion$2 = '202608042147';
4980
+ var formkitVersion$2 = '202608071813';
4981
4981
 
4982
4982
  let AuroElement$2 = class AuroElement extends i$3 {
4983
4983
  static get properties() {
@@ -5679,6 +5679,15 @@ class AuroDropdown extends AuroElement$2 {
5679
5679
 
5680
5680
  connectedCallback() {
5681
5681
  super.connectedCallback();
5682
+ // Re-register trigger event listeners removed by floater.disconnect() in
5683
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5684
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5685
+ // so without this the trigger click/keydown handlers are permanently gone.
5686
+ // Guard on floater.element so this is a no-op on the initial connect
5687
+ // (before firstUpdated() has called configure()).
5688
+ if (this.floater?.element) {
5689
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5690
+ }
5682
5691
  }
5683
5692
 
5684
5693
  disconnectedCallback() {
@@ -18666,7 +18675,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18666
18675
  }
18667
18676
  };
18668
18677
 
18669
- var formkitVersion$1 = '202608042147';
18678
+ var formkitVersion$1 = '202608071813';
18670
18679
 
18671
18680
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18672
18681
  // See LICENSE in the project root for license information.
@@ -19822,7 +19831,7 @@ class AuroBibtemplate extends i$3 {
19822
19831
  }
19823
19832
  }
19824
19833
 
19825
- var formkitVersion = '202608042147';
19834
+ var formkitVersion = '202608071813';
19826
19835
 
19827
19836
  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}`;
19828
19837
 
@@ -4977,7 +4977,7 @@ let AuroHelpText$2 = class AuroHelpText extends i$3 {
4977
4977
  }
4978
4978
  };
4979
4979
 
4980
- var formkitVersion$2 = '202608042147';
4980
+ var formkitVersion$2 = '202608071813';
4981
4981
 
4982
4982
  let AuroElement$2 = class AuroElement extends i$3 {
4983
4983
  static get properties() {
@@ -5679,6 +5679,15 @@ class AuroDropdown extends AuroElement$2 {
5679
5679
 
5680
5680
  connectedCallback() {
5681
5681
  super.connectedCallback();
5682
+ // Re-register trigger event listeners removed by floater.disconnect() in
5683
+ // disconnectedCallback(). Fires when a parent element (e.g. auro-drawer)
5684
+ // moves this element to a new DOM location. firstUpdated() won't re-run,
5685
+ // so without this the trigger click/keydown handlers are permanently gone.
5686
+ // Guard on floater.element so this is a no-op on the initial connect
5687
+ // (before firstUpdated() has called configure()).
5688
+ if (this.floater?.element) {
5689
+ this.floater.configure(this, 'auroDropdown', !this.disableKeyboardHandling);
5690
+ }
5682
5691
  }
5683
5692
 
5684
5693
  disconnectedCallback() {
@@ -18666,7 +18675,7 @@ let AuroHelpText$1 = class AuroHelpText extends i$3 {
18666
18675
  }
18667
18676
  };
18668
18677
 
18669
- var formkitVersion$1 = '202608042147';
18678
+ var formkitVersion$1 = '202608071813';
18670
18679
 
18671
18680
  // Copyright (c) 2025 Alaska Airlines. All right reserved. Licensed under the Apache-2.0 license
18672
18681
  // See LICENSE in the project root for license information.
@@ -19822,7 +19831,7 @@ class AuroBibtemplate extends i$3 {
19822
19831
  }
19823
19832
  }
19824
19833
 
19825
- var formkitVersion = '202608042147';
19834
+ var formkitVersion = '202608071813';
19826
19835
 
19827
19836
  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}`;
19828
19837