@helixui/library 3.3.1-next.115 → 3.3.1-next.117
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/custom-elements.json +182 -13
- package/dist/components/hx-accordion/hx-accordion-item.d.ts +35 -0
- package/dist/components/hx-accordion/hx-accordion-item.d.ts.map +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts +153 -1
- package/dist/components/hx-checkbox/hx-checkbox.d.ts.map +1 -1
- package/dist/components/hx-checkbox/hx-checkbox.styles.d.ts.map +1 -1
- package/dist/components/hx-checkbox/index.js +1 -1
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts +151 -2
- package/dist/components/hx-checkbox-group/hx-checkbox-group.d.ts.map +1 -1
- package/dist/components/hx-checkbox-group/index.js +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts +163 -1
- package/dist/components/hx-color-picker/hx-color-picker.d.ts.map +1 -1
- package/dist/components/hx-color-picker/hx-color-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-color-picker/index.js +1 -1
- package/dist/components/hx-combobox/hx-combobox.d.ts +311 -2
- package/dist/components/hx-combobox/hx-combobox.d.ts.map +1 -1
- package/dist/components/hx-combobox/index.js +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.d.ts +182 -56
- package/dist/components/hx-date-picker/hx-date-picker.d.ts.map +1 -1
- package/dist/components/hx-date-picker/hx-date-picker.styles.d.ts.map +1 -1
- package/dist/components/hx-date-picker/index.js +1 -1
- package/dist/components/hx-dialog/hx-dialog.d.ts +240 -0
- package/dist/components/hx-dialog/hx-dialog.d.ts.map +1 -1
- package/dist/components/hx-dialog/index.js +1 -1
- package/dist/components/hx-dropdown/hx-dropdown.d.ts +80 -0
- package/dist/components/hx-dropdown/hx-dropdown.d.ts.map +1 -1
- package/dist/components/hx-dropdown/index.js +1 -1
- package/dist/components/hx-field/hx-field.d.ts +109 -0
- package/dist/components/hx-field/hx-field.d.ts.map +1 -1
- package/dist/components/hx-field/index.js +1 -1
- package/dist/components/hx-popover/hx-popover.d.ts +91 -0
- package/dist/components/hx-popover/hx-popover.d.ts.map +1 -1
- package/dist/components/hx-popover/index.js +1 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts +152 -1
- package/dist/components/hx-radio-group/hx-radio-group.d.ts.map +1 -1
- package/dist/components/hx-radio-group/hx-radio.d.ts +14 -0
- package/dist/components/hx-radio-group/hx-radio.d.ts.map +1 -1
- package/dist/components/hx-radio-group/index.js +1 -1
- package/dist/components/hx-select/hx-select.d.ts +303 -2
- package/dist/components/hx-select/hx-select.d.ts.map +1 -1
- package/dist/components/hx-select/hx-select.styles.d.ts.map +1 -1
- package/dist/components/hx-select/index.js +1 -1
- package/dist/components/hx-side-nav/hx-nav-item.styles.d.ts.map +1 -1
- package/dist/components/hx-side-nav/index.js +1 -1
- package/dist/components/hx-switch/hx-switch.d.ts +78 -1
- package/dist/components/hx-switch/hx-switch.d.ts.map +1 -1
- package/dist/components/hx-switch/hx-switch.styles.d.ts.map +1 -1
- package/dist/components/hx-switch/index.js +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts +110 -0
- package/dist/components/hx-toggle-button/hx-toggle-button.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/hx-toggle-button.styles.d.ts.map +1 -1
- package/dist/components/hx-toggle-button/index.js +1 -1
- package/dist/components/hx-tooltip/hx-tooltip.d.ts +52 -0
- package/dist/components/hx-tooltip/hx-tooltip.d.ts.map +1 -1
- package/dist/components/hx-tooltip/index.js +1 -1
- package/dist/css/helix-all.css +98 -1
- package/dist/css/helix-forms.css +98 -1
- package/dist/css/hx-checkbox.css +18 -0
- package/dist/css/hx-color-picker.css +25 -0
- package/dist/css/hx-date-picker.css +2 -1
- package/dist/css/hx-select.css +19 -0
- package/dist/css/hx-switch.css +17 -0
- package/dist/css/hx-toggle-button.css +17 -0
- package/dist/css/index.css +1 -1
- package/dist/css/manifest.json +2 -1
- package/dist/index.js +15 -15
- package/dist/shared/aria-flatten-DY6v2vah.js +22 -0
- package/dist/shared/aria-flatten-DY6v2vah.js.map +1 -0
- package/dist/shared/aria-idref-Q0yiSR3p.js +104 -0
- package/dist/shared/aria-idref-Q0yiSR3p.js.map +1 -0
- package/dist/shared/hx-accordion-ZVzgDzTG.js.map +1 -1
- package/dist/shared/hx-checkbox-BdgoUeWi.js +696 -0
- package/dist/shared/hx-checkbox-BdgoUeWi.js.map +1 -0
- package/dist/shared/hx-checkbox-group-LWezHrvS.js +496 -0
- package/dist/shared/hx-checkbox-group-LWezHrvS.js.map +1 -0
- package/dist/shared/hx-color-picker-DVhZl88b.js +1221 -0
- package/dist/shared/hx-color-picker-DVhZl88b.js.map +1 -0
- package/dist/shared/hx-combobox-DvlezcDV.js +1359 -0
- package/dist/shared/hx-combobox-DvlezcDV.js.map +1 -0
- package/dist/shared/{hx-date-picker-2iRG1p74.js → hx-date-picker-N-0aG5XL.js} +542 -206
- package/dist/shared/hx-date-picker-N-0aG5XL.js.map +1 -0
- package/dist/shared/hx-dialog-DzB7VytW.js +717 -0
- package/dist/shared/hx-dialog-DzB7VytW.js.map +1 -0
- package/dist/shared/{hx-dropdown-LyaRc8Rf.js → hx-dropdown-DJWlF94E.js} +130 -77
- package/dist/shared/hx-dropdown-DJWlF94E.js.map +1 -0
- package/dist/shared/{hx-field-B3Qo8OLS.js → hx-field-zw0U1KVi.js} +99 -38
- package/dist/shared/hx-field-zw0U1KVi.js.map +1 -0
- package/dist/shared/{hx-nav-item-xqRPOCWX.js → hx-nav-item-CODtUlew.js} +13 -9
- package/dist/shared/{hx-nav-item-xqRPOCWX.js.map → hx-nav-item-CODtUlew.js.map} +1 -1
- package/dist/shared/{hx-popover-B-FP3-wW.js → hx-popover-CHxWY_cd.js} +123 -66
- package/dist/shared/hx-popover-CHxWY_cd.js.map +1 -0
- package/dist/shared/hx-radio-CeGzARNk.js +822 -0
- package/dist/shared/hx-radio-CeGzARNk.js.map +1 -0
- package/dist/shared/hx-select-DrcS-YRJ.js +1089 -0
- package/dist/shared/hx-select-DrcS-YRJ.js.map +1 -0
- package/dist/shared/hx-switch-BX_8uNUs.js +540 -0
- package/dist/shared/hx-switch-BX_8uNUs.js.map +1 -0
- package/dist/shared/{hx-toggle-button-iLiYrMbD.js → hx-toggle-button-Dcz9IlUm.js} +226 -65
- package/dist/shared/hx-toggle-button-Dcz9IlUm.js.map +1 -0
- package/dist/shared/{hx-tooltip-nYOv9OLu.js → hx-tooltip-DVqtKPCD.js} +68 -46
- package/dist/shared/hx-tooltip-DVqtKPCD.js.map +1 -0
- package/dist/utils/aria-flatten.d.ts +56 -0
- package/dist/utils/aria-flatten.d.ts.map +1 -0
- package/dist/utils/aria-idref.d.ts +127 -0
- package/dist/utils/aria-idref.d.ts.map +1 -0
- package/figma-inventory.json +64 -1
- package/package.json +2 -2
- package/dist/shared/hx-checkbox-D7xma9YH.js +0 -524
- package/dist/shared/hx-checkbox-D7xma9YH.js.map +0 -1
- package/dist/shared/hx-checkbox-group-C9n315Ju.js +0 -323
- package/dist/shared/hx-checkbox-group-C9n315Ju.js.map +0 -1
- package/dist/shared/hx-color-picker-uRc865FJ.js +0 -882
- package/dist/shared/hx-color-picker-uRc865FJ.js.map +0 -1
- package/dist/shared/hx-combobox-DDzqNKEW.js +0 -924
- package/dist/shared/hx-combobox-DDzqNKEW.js.map +0 -1
- package/dist/shared/hx-date-picker-2iRG1p74.js.map +0 -1
- package/dist/shared/hx-dialog-DRN_1-Y-.js +0 -514
- package/dist/shared/hx-dialog-DRN_1-Y-.js.map +0 -1
- package/dist/shared/hx-dropdown-LyaRc8Rf.js.map +0 -1
- package/dist/shared/hx-field-B3Qo8OLS.js.map +0 -1
- package/dist/shared/hx-popover-B-FP3-wW.js.map +0 -1
- package/dist/shared/hx-radio-CJvNU2yP.js +0 -621
- package/dist/shared/hx-radio-CJvNU2yP.js.map +0 -1
- package/dist/shared/hx-select-C8fEHQhC.js +0 -807
- package/dist/shared/hx-select-C8fEHQhC.js.map +0 -1
- package/dist/shared/hx-switch-BrZFaRue.js +0 -420
- package/dist/shared/hx-switch-BrZFaRue.js.map +0 -1
- package/dist/shared/hx-toggle-button-iLiYrMbD.js.map +0 -1
- package/dist/shared/hx-tooltip-nYOv9OLu.js.map +0 -1
|
@@ -102,9 +102,22 @@ declare const HelixSelect_base: typeof HelixElement & (new (...args: any[]) => i
|
|
|
102
102
|
* @cssprop [--hx-font-size-xs] - Font size.
|
|
103
103
|
*/
|
|
104
104
|
export declare class HelixSelect extends HelixSelect_base {
|
|
105
|
-
static styles: import('lit').CSSResult
|
|
105
|
+
static styles: import('lit').CSSResult;
|
|
106
106
|
/** Marks this element as form-associated for ElementInternals support. @internal */
|
|
107
107
|
static formAssociated: boolean;
|
|
108
|
+
/**
|
|
109
|
+
* Test seam (round-3 finding 4): when set to `true` or `false`, overrides
|
|
110
|
+
* the platform `supportsIdrefElementReferences` probe before
|
|
111
|
+
* `connectedCallback` seeds `_supportsIdrefRefs`. Mid-life flag flips on a
|
|
112
|
+
* connected instance allowed stale modern internals (set during connect)
|
|
113
|
+
* to leak into the fallback branch — tests must select the path BEFORE
|
|
114
|
+
* the host connects so the synthetic environment matches a legacy engine.
|
|
115
|
+
*
|
|
116
|
+
* Production code MUST NOT touch this field. It is a `static` so the test
|
|
117
|
+
* stub cleanup is global and obvious.
|
|
118
|
+
* @internal
|
|
119
|
+
*/
|
|
120
|
+
static __testSupportsIdrefRefsOverride: boolean | null;
|
|
108
121
|
/** @internal */
|
|
109
122
|
private _selectId;
|
|
110
123
|
/** @internal */
|
|
@@ -192,16 +205,258 @@ export declare class HelixSelect extends HelixSelect_base {
|
|
|
192
205
|
private _options;
|
|
193
206
|
/** Whether the named error slot contains projected content. @internal */
|
|
194
207
|
private _hasErrorSlot;
|
|
208
|
+
/**
|
|
209
|
+
* Whether the named label slot contributes a useful name. Round-3 finding 3:
|
|
210
|
+
* the previous boolean tracked `assignedNodes().length > 0`, which is `true`
|
|
211
|
+
* for whitespace-only slot content. That suppressed the unlabeled devWarn
|
|
212
|
+
* even when the slot only carried a stray newline. This flag now requires
|
|
213
|
+
* either a labellable element OR non-empty trimmed text content.
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
private _hasLabelSlot;
|
|
217
|
+
/**
|
|
218
|
+
* Source of the accessible name. Round-3 finding 8 replaces the magic
|
|
219
|
+
* sentinel `'*slotted*'` with a discriminated union so a future caller
|
|
220
|
+
* setting `label="*slotted*"` literally cannot be confused with a slotted
|
|
221
|
+
* label.
|
|
222
|
+
* @internal
|
|
223
|
+
*/
|
|
224
|
+
private _labelSource;
|
|
225
|
+
/**
|
|
226
|
+
* Flattened, trimmed text content of any text nodes in the label slot —
|
|
227
|
+
* used to drive `internals.ariaLabel` when the consumer projects only a
|
|
228
|
+
* text node (no element to add to `labelEls`). Round-3 finding 3.
|
|
229
|
+
* @internal
|
|
230
|
+
*/
|
|
231
|
+
private _labelSlotText;
|
|
232
|
+
/** Whether the help-text slot contains projected content. @internal */
|
|
233
|
+
private _hasHelpSlot;
|
|
234
|
+
/**
|
|
235
|
+
* Direct reference to the first labellable element projected into the
|
|
236
|
+
* `<slot name="label">`. Round-3 finding 5 replaces the previous round-trip
|
|
237
|
+
* through `document.getElementById(this._slottedLabelId)` so we no longer
|
|
238
|
+
* mutate consumer light-DOM (assigning ids) and the lookup is robust under
|
|
239
|
+
* nested shadow roots (round-3 finding 6).
|
|
240
|
+
* @internal
|
|
241
|
+
*/
|
|
242
|
+
private _slottedLabelEl;
|
|
195
243
|
/** Zero-based index of the keyboard-focused option in the listbox; -1 means none. @internal */
|
|
196
244
|
private _focusedOptionIndex;
|
|
245
|
+
/**
|
|
246
|
+
* Whether the platform supports IDL element references on `ElementInternals`.
|
|
247
|
+
* Drives the cross-shadow naming strategy: modern path uses
|
|
248
|
+
* `internals.ariaLabelledByElements` / `internals.ariaDescribedByElements`
|
|
249
|
+
* to bridge consumer light-DOM IDREFs into the host accessible node;
|
|
250
|
+
* fallback path mirrors the consumer's `aria-labelledby` / `aria-describedby`
|
|
251
|
+
* tokens onto host attributes and text-mirrors shadow help/error wrappers
|
|
252
|
+
* via `internals.ariaDescription`.
|
|
253
|
+
*
|
|
254
|
+
* ARCHITECTURE — Round-3 host-canonical (overturns scope doc Path A).
|
|
255
|
+
* Codex round-2 finding 1 demonstrated that the dual-channel approach
|
|
256
|
+
* (host roleless on modern, host-announced on fallback) creates a "named
|
|
257
|
+
* surface ≠ focused surface" gap on legacy engines. Round-3 commits to a
|
|
258
|
+
* single canonical surface — the HOST — on BOTH paths:
|
|
259
|
+
*
|
|
260
|
+
* - `internals.role = 'combobox'` on both paths (and `role="combobox"`
|
|
261
|
+
* attribute mirror so CSS / `getAttribute` / AT inspecting the DOM see it).
|
|
262
|
+
* - `tabindex="0"` on the host (so it is the focusable surface).
|
|
263
|
+
* - Click + keydown listeners on the host (so user input lands on the
|
|
264
|
+
* announced surface).
|
|
265
|
+
* - `focus()` routes to the host (so programmatic focus matches AT focus).
|
|
266
|
+
* - `setValidity()` anchor = host (so UA validation UI routes to the
|
|
267
|
+
* focusable announced surface).
|
|
268
|
+
* - Inner trigger drops `role`, `tabindex`, and the combobox ARIA mirror
|
|
269
|
+
* on both paths so AT does not see a doubled accessible.
|
|
270
|
+
*
|
|
271
|
+
* This matches Group 2's host-canonical pattern (PR #1625, validated for
|
|
272
|
+
* `hx-radio-group` and `hx-checkbox-group`). The scope doc's APG concern
|
|
273
|
+
* about doubled comboboxes is moot once the inner role is dropped.
|
|
274
|
+
* @internal
|
|
275
|
+
*/
|
|
276
|
+
private _supportsIdrefRefs;
|
|
277
|
+
/**
|
|
278
|
+
* Deferred copy of `error` driven through reactive state so the persistent
|
|
279
|
+
* live region can re-announce on transitions without direct DOM mutation.
|
|
280
|
+
* Aligned with Group 2 round-1 finding #10.
|
|
281
|
+
* @internal
|
|
282
|
+
*/
|
|
283
|
+
private _announcedError;
|
|
284
|
+
/**
|
|
285
|
+
* Cached invalidity flag derived from `internals.validity.valid` after the
|
|
286
|
+
* latest `setValidity()` call. Both the modern (`internals.ariaInvalid`)
|
|
287
|
+
* and fallback (host attribute) writes read from the same source so they
|
|
288
|
+
* cannot disagree. Round-2 finding 2.
|
|
289
|
+
* @internal
|
|
290
|
+
*/
|
|
291
|
+
private _invalid;
|
|
197
292
|
/** Reference to the hidden native select element used for form participation. @internal */
|
|
198
293
|
private _select;
|
|
199
294
|
/** Reference to the visible combobox trigger element that receives keyboard focus. @internal */
|
|
200
295
|
private _trigger;
|
|
201
296
|
/** @internal */
|
|
202
297
|
private get _displayValue();
|
|
298
|
+
/**
|
|
299
|
+
* Handle for the shared IDREF observer. See `installAriaIdrefMirror()`.
|
|
300
|
+
* @internal
|
|
301
|
+
*/
|
|
302
|
+
private _ariaMirror;
|
|
303
|
+
/**
|
|
304
|
+
* Watches assigned `<slot name="help-text">` nodes for in-place text
|
|
305
|
+
* mutations so the no-IDL-ref fallback `internals.ariaDescription` stays in
|
|
306
|
+
* sync. Aligned with Group 2 round-23 P2 (Finding C).
|
|
307
|
+
* @internal
|
|
308
|
+
*/
|
|
309
|
+
private _helpSlotTextObserver;
|
|
310
|
+
/**
|
|
311
|
+
* Watches assigned `<slot name="error">` nodes for in-place text mutations.
|
|
312
|
+
* Aligned with Group 2 round-23 P2 (Finding C).
|
|
313
|
+
* @internal
|
|
314
|
+
*/
|
|
315
|
+
private _errorSlotTextObserver;
|
|
316
|
+
/**
|
|
317
|
+
* Round-10 finding 1 (supersedes round-8 counter): dedicated host observer
|
|
318
|
+
* scoped to `aria-describedby` with `attributeOldValue: true`. The fallback
|
|
319
|
+
* path strips the host `aria-describedby` attribute on every sync (per
|
|
320
|
+
* round-6 single-channel design). Once stripped, a subsequent consumer
|
|
321
|
+
* `removeAttribute('aria-describedby')` causes NO DOM mutation (the
|
|
322
|
+
* attribute is already absent), so the post-sync `getAttribute()` baseline
|
|
323
|
+
* diff at the top of `_syncHostAriaSemantics` cannot detect the retraction
|
|
324
|
+
* — `_consumerDescribedBy` would remain pinned to the originally-cached
|
|
325
|
+
* string forever and the consumer's external help text would keep
|
|
326
|
+
* concatenating into `internals.ariaDescription` indefinitely.
|
|
327
|
+
*
|
|
328
|
+
* Round-10 architectural lockdown (`.reports/aria-group-3-architecture-
|
|
329
|
+
* decision-r10.md` section 7.1): the observer is governed by the
|
|
330
|
+
* **disconnect-during-strip** discipline. Before the fallback strip
|
|
331
|
+
* `removeAttribute('aria-describedby')` runs, this observer is
|
|
332
|
+
* `disconnect()`ed; immediately after the strip, it is re-`observe()`d.
|
|
333
|
+
* Self-mutations are therefore never delivered to the callback, so the
|
|
334
|
+
* observer only sees consumer-driven mutations. This eliminates the
|
|
335
|
+
* round-8 pending-strip counter / discriminator entirely and the lockstep
|
|
336
|
+
* invariant it depended on.
|
|
337
|
+
*
|
|
338
|
+
* The observer detects `oldValue !== null && newValue === null`
|
|
339
|
+
* (consumer authentically retracted the attribute) and clears
|
|
340
|
+
* `_consumerDescribedBy`. Framework-batched attach-then-detach (Vue /
|
|
341
|
+
* React / Lit reconciliation flipping `aria-describedby` from a string to
|
|
342
|
+
* null in one render commit) produces two records in the same callback
|
|
343
|
+
* batch — the second record's `oldValue` is observable. The bare
|
|
344
|
+
* `removeAttribute` no-op on an already-absent attribute is unobservable
|
|
345
|
+
* by design (a null → null DOM operation is not a mutation); see
|
|
346
|
+
* `hx-select.test.ts` round-10 contract block for the three documented
|
|
347
|
+
* retraction sequences.
|
|
348
|
+
*
|
|
349
|
+
* @internal
|
|
350
|
+
*/
|
|
351
|
+
private _hostDescribedByObserver;
|
|
352
|
+
/**
|
|
353
|
+
* Last value of `aria-labelledby` we wrote to the host. Used to distinguish
|
|
354
|
+
* external (consumer) attribute mutations from our own internal augmentation
|
|
355
|
+
* writes. Aligned with Group 2 round-10 P2.
|
|
356
|
+
* @internal
|
|
357
|
+
*/
|
|
358
|
+
private _lastWrittenLabelledBy;
|
|
359
|
+
/** @internal — see `_lastWrittenLabelledBy`. */
|
|
360
|
+
private _lastWrittenDescribedBy;
|
|
361
|
+
/**
|
|
362
|
+
* Last value of `aria-label` we wrote to the host. Used to distinguish
|
|
363
|
+
* external (consumer) attribute mutations from our own internal mirror
|
|
364
|
+
* writes on the fallback path. Round-5 finding 1: without this snapshot
|
|
365
|
+
* the round-3 fallback `aria-label` mirror was self-sealing — sync N
|
|
366
|
+
* wrote `aria-label="Country"`, sync N+1 read that same string back via
|
|
367
|
+
* `getAttribute('aria-label')` and treated it as a consumer override,
|
|
368
|
+
* caching it into `internals.ariaLabel` and short-circuiting
|
|
369
|
+
* `_writeHostAttributeMirror`. Subsequent label/accessibleLabel/slot
|
|
370
|
+
* mutations never propagated.
|
|
371
|
+
* @internal
|
|
372
|
+
*/
|
|
373
|
+
private _lastWrittenAriaLabel;
|
|
374
|
+
/**
|
|
375
|
+
* Most recently observed *consumer-supplied* `aria-labelledby` baseline.
|
|
376
|
+
* Refreshed only when the host attribute changes via an external write —
|
|
377
|
+
* internal writes leave the baseline untouched. Cached so consumer tokens
|
|
378
|
+
* can replay if their target element later attaches to the DOM.
|
|
379
|
+
* @internal
|
|
380
|
+
*/
|
|
381
|
+
private _consumerLabelledBy;
|
|
382
|
+
/** @internal — see `_consumerLabelledBy`. */
|
|
383
|
+
private _consumerDescribedBy;
|
|
384
|
+
connectedCallback(): void;
|
|
203
385
|
disconnectedCallback(): void;
|
|
204
386
|
updated(changedProperties: PropertyValues<this>): void;
|
|
387
|
+
firstUpdated(changedProperties: PropertyValues<this>): void;
|
|
388
|
+
/**
|
|
389
|
+
* Reads the label slot's assigned nodes and computes the discriminated
|
|
390
|
+
* naming state. Round-3 finding 3 + 5 + 8: an empty whitespace-only slot
|
|
391
|
+
* does NOT count as a useful name; the first labellable element is
|
|
392
|
+
* captured by reference (no consumer-DOM mutation); the result drives a
|
|
393
|
+
* discriminated `_labelSource` rather than a magic `'*slotted*'` string.
|
|
394
|
+
* @internal
|
|
395
|
+
*/
|
|
396
|
+
private _readLabelSlotState;
|
|
397
|
+
/**
|
|
398
|
+
* Mirrors combobox semantics onto the host via ElementInternals so that the
|
|
399
|
+
* host IS the canonical announced surface on BOTH the modern (IDL element
|
|
400
|
+
* references) and fallback paths. Round-3 finding 1: codex round-2
|
|
401
|
+
* demonstrated that putting `role="combobox"` on the host on fallback while
|
|
402
|
+
* leaving focus/click/keyboard/validity anchored to the inner trigger
|
|
403
|
+
* created a "named surface ≠ focused surface" gap. Round-3 collapses both
|
|
404
|
+
* paths to the host-canonical model used by Group 2's `hx-radio-group` /
|
|
405
|
+
* `hx-checkbox-group` (PR #1625):
|
|
406
|
+
*
|
|
407
|
+
* - `internals.role = 'combobox'` so AT advertises the combobox role.
|
|
408
|
+
* - Host attribute `role="combobox"` mirror so legacy engines, axe-core,
|
|
409
|
+
* and `getAttribute('role')` agree with the internals default.
|
|
410
|
+
* - Host attribute `tabindex="0"` so the host is the focusable surface.
|
|
411
|
+
* - Host attributes `aria-expanded`, `aria-haspopup`, `aria-controls`,
|
|
412
|
+
* `aria-activedescendant`, `aria-required`, `aria-invalid`,
|
|
413
|
+
* `aria-disabled` so AT walking the host's attribute graph sees the
|
|
414
|
+
* combobox state without depending on internals defaults.
|
|
415
|
+
* - Modern path additionally sets `internals.ariaLabelledByElements` /
|
|
416
|
+
* `internals.ariaDescribedByElements` so consumer light-DOM IDREFs cross
|
|
417
|
+
* the shadow boundary into the host's accessible node.
|
|
418
|
+
* - Fallback path mirrors consumer label/desc tokens onto the host
|
|
419
|
+
* attribute and text-mirrors shadow help/error wrappers via
|
|
420
|
+
* `internals.ariaDescription`.
|
|
421
|
+
* @internal
|
|
422
|
+
*/
|
|
423
|
+
private _syncHostAriaSemantics;
|
|
424
|
+
/**
|
|
425
|
+
* Writes host `role="combobox"` and `tabindex` so the host is the
|
|
426
|
+
* focusable, AT-visible canonical surface. Round-3 finding 1.
|
|
427
|
+
* @internal
|
|
428
|
+
*/
|
|
429
|
+
private _writeHostRoleAndTabindex;
|
|
430
|
+
/**
|
|
431
|
+
* Writes the host's combobox state attributes (`aria-expanded`,
|
|
432
|
+
* `aria-haspopup`, `aria-controls`, `aria-activedescendant`,
|
|
433
|
+
* `aria-required`, `aria-invalid`, `aria-disabled`) on every sync. CSS
|
|
434
|
+
* selectors and AT inspecting the live attribute graph read these — the
|
|
435
|
+
* `internals.aria*` defaults are invisible. Round-3 finding 1.
|
|
436
|
+
* @internal
|
|
437
|
+
*/
|
|
438
|
+
private _writeHostComboboxStateAttributes;
|
|
439
|
+
/**
|
|
440
|
+
* Writes a host `aria-label` attribute mirror on the fallback path so AT
|
|
441
|
+
* inspecting the live attribute graph sees the resolved name even when
|
|
442
|
+
* the platform lacks IDL element references. Skip when an effective
|
|
443
|
+
* `aria-labelledby` is already set on the host (labelledby > label by
|
|
444
|
+
* ARIA priority). Round-3 finding 1 + round-2 finding 5.
|
|
445
|
+
* @internal
|
|
446
|
+
*/
|
|
447
|
+
private _writeHostAttributeMirror;
|
|
448
|
+
/**
|
|
449
|
+
* (Re-)installs the mutation observer over the current set of assigned
|
|
450
|
+
* help-text-slot nodes. Aligned with Group 2 round-23 P2 (Finding C).
|
|
451
|
+
* @internal
|
|
452
|
+
*/
|
|
453
|
+
private _installHelpSlotTextObserver;
|
|
454
|
+
/**
|
|
455
|
+
* (Re-)installs the mutation observer over the current set of assigned
|
|
456
|
+
* error-slot nodes. Aligned with Group 2 round-23 P2 (Finding C).
|
|
457
|
+
* @internal
|
|
458
|
+
*/
|
|
459
|
+
private _installErrorSlotTextObserver;
|
|
205
460
|
/** @internal */
|
|
206
461
|
private _updateFormValue;
|
|
207
462
|
/** @internal */
|
|
@@ -220,10 +475,51 @@ export declare class HelixSelect extends HelixSelect_base {
|
|
|
220
475
|
*/
|
|
221
476
|
/** @internal */
|
|
222
477
|
private _handleSlotChange;
|
|
478
|
+
/**
|
|
479
|
+
* Tracks the slotted label so projected `<span slot="label">` content joins
|
|
480
|
+
* the accessible-name chain without forcing the consumer to also pass the
|
|
481
|
+
* `label` property.
|
|
482
|
+
*
|
|
483
|
+
* Round-3 findings 3, 5, 6, 8:
|
|
484
|
+
* - 3: count whitespace-only text as "no useful name" (devWarn must fire).
|
|
485
|
+
* - 5: hold the slotted element by direct reference instead of mutating
|
|
486
|
+
* consumer light DOM with a tracked id.
|
|
487
|
+
* - 6: lookup is by reference, so it survives nested shadow roots without
|
|
488
|
+
* the fragile `getElementById` chain.
|
|
489
|
+
* - 8: discriminated `_labelSource` replaces the magic `'*slotted*'`
|
|
490
|
+
* sentinel string.
|
|
491
|
+
* @internal
|
|
492
|
+
*/
|
|
493
|
+
private _handleLabelSlotChange;
|
|
494
|
+
/**
|
|
495
|
+
* Recomputes the discriminated label source. Round-3 finding 8.
|
|
496
|
+
*
|
|
497
|
+
* CodeRabbit F2: slotted label wins over the `label` prop. When a
|
|
498
|
+
* consumer provides BOTH a `<span slot="label">` AND a `label="..."`
|
|
499
|
+
* attribute the visible label is the slotted node (rendered by the
|
|
500
|
+
* named slot's default content branch never firing). Preferring the
|
|
501
|
+
* string form here would route the accessible name through the prop
|
|
502
|
+
* and diverge from the rendered text. The slot is the canonical
|
|
503
|
+
* source whenever it has useful content.
|
|
504
|
+
* @internal
|
|
505
|
+
*/
|
|
506
|
+
private _refreshLabelSource;
|
|
223
507
|
/** @internal */
|
|
224
508
|
private _handleErrorSlotChange;
|
|
225
509
|
/** @internal */
|
|
510
|
+
private _handleHelpSlotChange;
|
|
511
|
+
/** @internal */
|
|
226
512
|
private _toggleDropdown;
|
|
513
|
+
/**
|
|
514
|
+
* Click handler attached to the host. Round-3 finding 1: the host is the
|
|
515
|
+
* canonical combobox surface, so user input listeners live here. Clicks
|
|
516
|
+
* inside the open listbox are handled by the per-option `@click` binding
|
|
517
|
+
* in `_renderOptions()` and stop here only if `composedPath` indicates
|
|
518
|
+
* the original click target was the open listbox panel (so option clicks
|
|
519
|
+
* don't double-toggle the dropdown).
|
|
520
|
+
* @internal
|
|
521
|
+
*/
|
|
522
|
+
private _handleHostClick;
|
|
227
523
|
/** @internal */
|
|
228
524
|
private _handleKeydown;
|
|
229
525
|
/** @internal */
|
|
@@ -234,7 +530,12 @@ export declare class HelixSelect extends HelixSelect_base {
|
|
|
234
530
|
private _handleNativeChange;
|
|
235
531
|
/** @internal */
|
|
236
532
|
private _handleOutsideClick;
|
|
237
|
-
/**
|
|
533
|
+
/**
|
|
534
|
+
* Moves focus to the host. Round-3 finding 1: the host is the canonical
|
|
535
|
+
* combobox surface (`role="combobox"`, `tabindex="0"`), so programmatic
|
|
536
|
+
* focus must land there to match where AT routes focus and where
|
|
537
|
+
* `setValidity()` anchors recovery.
|
|
538
|
+
*/
|
|
238
539
|
focus(options?: FocusOptions): void;
|
|
239
540
|
/** @internal */
|
|
240
541
|
private _optionId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-select.d.ts","sourceRoot":"","sources":["../../../src/components/hx-select/hx-select.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;AAKpD,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hx-select.d.ts","sourceRoot":"","sources":["../../../src/components/hx-select/hx-select.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-select.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-select/hx-select.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"hx-select.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-select/hx-select.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBAyY7B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-nav-item.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-side-nav/hx-nav-item.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hx-nav-item.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-side-nav/hx-nav-item.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,kBAAkB,yBAiT9B,CAAC"}
|
|
@@ -136,7 +136,69 @@ export declare class HelixSwitch extends HelixSwitch_base {
|
|
|
136
136
|
* @attr required-message
|
|
137
137
|
*/
|
|
138
138
|
requiredMessage: string;
|
|
139
|
+
/**
|
|
140
|
+
* Handle for the shared IDREF observer. Installed in `connectedCallback()`
|
|
141
|
+
* so late-mutated `aria-labelledby`/`aria-describedby` and late-inserted
|
|
142
|
+
* IDREF targets are picked up. See `installAriaIdrefMirror()`.
|
|
143
|
+
* @internal
|
|
144
|
+
*/
|
|
145
|
+
private _ariaMirror;
|
|
146
|
+
/**
|
|
147
|
+
* No-IDL-ref fallback tokens applied to the inner button so consumer
|
|
148
|
+
* labelling resolves through the shadow root. Tracked as reactive state
|
|
149
|
+
* so values flow through the next `render()`.
|
|
150
|
+
* @internal
|
|
151
|
+
*/
|
|
152
|
+
private _fallbackAriaLabelledBy;
|
|
153
|
+
/** @internal */
|
|
154
|
+
private _fallbackAriaDescribedBy;
|
|
155
|
+
/** @internal */
|
|
156
|
+
private _fallbackAriaLabel;
|
|
157
|
+
/**
|
|
158
|
+
* Whether the platform supports IDL element references on `ElementInternals`.
|
|
159
|
+
* Drives the render-time branch between the modern path (host is the
|
|
160
|
+
* announced surface, inner button is `aria-hidden + tabindex=-1`) and the
|
|
161
|
+
* fallback path (inner button is the announced surface, host is demoted).
|
|
162
|
+
* Codex round-2 finding #2.
|
|
163
|
+
* @internal
|
|
164
|
+
*/
|
|
165
|
+
private _supportsIdrefRefs;
|
|
166
|
+
/**
|
|
167
|
+
* Tracks whether the host's `tabindex` is managed by the component itself
|
|
168
|
+
* (vs. set explicitly by a consumer). Codex round-14 P2: a consumer-supplied
|
|
169
|
+
* `tabindex` (e.g. roving-tabindex toolbar pattern with `tabindex="-1"`)
|
|
170
|
+
* must survive disabled flips and re-renders. Only re-assert tabindex in
|
|
171
|
+
* `updated()` when the component originally claimed it.
|
|
172
|
+
* @internal
|
|
173
|
+
*/
|
|
174
|
+
private _internalTabindexManaged;
|
|
175
|
+
connectedCallback(): void;
|
|
176
|
+
disconnectedCallback(): void;
|
|
177
|
+
/**
|
|
178
|
+
* Host-level keydown handler. Active only on the modern path; on the
|
|
179
|
+
* no-IDL-ref fallback the inner `<button>` owns native activation.
|
|
180
|
+
* Codex round-2 finding #2.
|
|
181
|
+
* @internal
|
|
182
|
+
*/
|
|
183
|
+
private _handleHostKeyDown;
|
|
184
|
+
/**
|
|
185
|
+
* Host-level click handler. Active only on the modern path; on the
|
|
186
|
+
* fallback path AT activation flows directly to the inner button.
|
|
187
|
+
* Codex round-2 finding #2.
|
|
188
|
+
* @internal
|
|
189
|
+
*/
|
|
190
|
+
private _handleHostClick;
|
|
139
191
|
updated(changedProperties: PropertyValues<this>): void;
|
|
192
|
+
/**
|
|
193
|
+
* Mirrors switch semantics onto the host via ElementInternals so that
|
|
194
|
+
* consumer-supplied `aria-label`, `aria-labelledby`, and `aria-describedby`
|
|
195
|
+
* on `<hx-switch>` reach the announced control. The codex aria-group-2
|
|
196
|
+
* finding identified that the inner shadow `<button role=switch>` was the
|
|
197
|
+
* only carrier of switch semantics, leaving host-level IDREF tokens stranded
|
|
198
|
+
* on the wrong side of the shadow boundary.
|
|
199
|
+
* @internal
|
|
200
|
+
*/
|
|
201
|
+
private _syncHostAriaSemantics;
|
|
140
202
|
/** Recalculates and sets the validity state based on required and checked. */
|
|
141
203
|
/** @internal */
|
|
142
204
|
_updateValidity(): void;
|
|
@@ -152,12 +214,18 @@ export declare class HelixSwitch extends HelixSwitch_base {
|
|
|
152
214
|
/** Whether the default slot has assigned content (slotted label). */
|
|
153
215
|
/** @internal */
|
|
154
216
|
private _hasDefaultSlot;
|
|
217
|
+
/** Whether the help-text slot has assigned content. */
|
|
218
|
+
/** @internal */
|
|
219
|
+
private _hasHelpTextSlot;
|
|
155
220
|
/** Updates _hasErrorSlot when error slot content changes. */
|
|
156
221
|
/** @internal */
|
|
157
222
|
private _handleErrorSlotChange;
|
|
158
223
|
/** Updates _hasDefaultSlot when default slot content changes. */
|
|
159
224
|
/** @internal */
|
|
160
225
|
private _handleDefaultSlotChange;
|
|
226
|
+
/** Updates _hasHelpTextSlot when help-text slot content changes. */
|
|
227
|
+
/** @internal */
|
|
228
|
+
private _handleHelpTextSlotChange;
|
|
161
229
|
/** Toggles checked state and dispatches hx-change event. */
|
|
162
230
|
/** @internal */
|
|
163
231
|
private _toggle;
|
|
@@ -167,7 +235,16 @@ export declare class HelixSwitch extends HelixSwitch_base {
|
|
|
167
235
|
/** Handles keydown events — Space toggles the switch per ARIA APG. */
|
|
168
236
|
/** @internal */
|
|
169
237
|
private _handleKeyDown;
|
|
170
|
-
/**
|
|
238
|
+
/**
|
|
239
|
+
* Moves focus to the announced switch surface. Codex round-1 finding #1
|
|
240
|
+
* relocated the focus target to the host so AT announces a single widget;
|
|
241
|
+
* the host carries the canonical role/state on modern engines. Round-7
|
|
242
|
+
* finding #7 extends that contract to the no-IDL-ref fallback: when the
|
|
243
|
+
* host is demoted (`tabindex=-1`, role/state cleared on `internals`) the
|
|
244
|
+
* inner `<button role=switch>` owns the announced semantics and tab order,
|
|
245
|
+
* so programmatic `focus()` must redirect there — otherwise scripted focus
|
|
246
|
+
* and error recovery land on the demoted host on unsupported engines.
|
|
247
|
+
*/
|
|
171
248
|
focus(options?: FocusOptions): void;
|
|
172
249
|
/** Unique ID for this switch instance, used for ARIA associations. */
|
|
173
250
|
/** @internal */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-switch.d.ts","sourceRoot":"","sources":["../../../src/components/hx-switch/hx-switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;AAIpD,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"hx-switch.d.ts","sourceRoot":"","sources":["../../../src/components/hx-switch/hx-switch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;AAIpD,OAAO,EAAE,YAAY,EAAmB,MAAM,qBAAqB,CAAC;AAapE,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2EG;AACH,qBACa,WAAY,SAAQ,gBAAuB;IACtD,OAAgB,MAAM,4BAA0C;IAIhE,gBAAgB;IAChB,OAAgB,cAAc,UAAQ;IAItC;;;OAGG;IAEH,OAAO,UAAS;IAEhB;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,QAAQ,UAAS;IAEjB;;;OAGG;IAEH,IAAI,SAAM;IAEV;;;OAGG;IAEH,KAAK,SAAQ;IAEb;;;OAGG;IAEH,KAAK,SAAM;IAEX;;;OAGG;IAEH,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAQ;IAEhC;;;OAGG;IAEH,KAAK,SAAM;IAEX;;;OAGG;IAEH,QAAQ,SAAM;IAEd;;;OAGG;IAEH,eAAe,SAA6B;IAE5C;;;;;OAKG;IACH,OAAO,CAAC,WAAW,CAAsC;IAEzD;;;;;OAKG;IACM,OAAO,CAAC,uBAAuB,CAAuB;IAC/D,gBAAgB;IACP,OAAO,CAAC,wBAAwB,CAAuB;IAChE,gBAAgB;IACP,OAAO,CAAC,kBAAkB,CAAuB;IAE1D;;;;;;;OAOG;IACM,OAAO,CAAC,kBAAkB,CAAQ;IAE3C;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB,CAAS;IAIhC,iBAAiB,IAAI,IAAI;IAgCzB,oBAAoB,IAAI,IAAI;IAQrC;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB,CAQxB;IAEF;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB,CAMtB;IAEO,OAAO,CAAC,iBAAiB,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI;IA0B/D;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;IA4F9B,8EAA8E;IAC9E,gBAAgB;IACP,eAAe,IAAI,IAAI;cAyBb,YAAY,IAAI,IAAI;cAMpB,mBAAmB,CACpC,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,QAAQ,GAAG,IAAI,EACtC,KAAK,EAAE,SAAS,GAAG,cAAc,GAChC,IAAI;cAMY,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;IAI3D;OACG;IAEH,OAAO,CAAC,QAAQ,CAAuC;IAEvD,mDAAmD;IACnD,gBAAgB;IACP,OAAO,CAAC,aAAa,CAAS;IAEvC,qEAAqE;IACrE,gBAAgB;IACP,OAAO,CAAC,eAAe,CAAS;IAEzC,uDAAuD;IACvD,gBAAgB;IACP,OAAO,CAAC,gBAAgB,CAAS;IAI1C,6DAA6D;IAC7D,gBAAgB;IAChB,OAAO,CAAC,sBAAsB;IAK9B,iEAAiE;IACjE,gBAAgB;IAChB,OAAO,CAAC,wBAAwB;IAKhC,oEAAoE;IACpE,gBAAgB;IAChB,OAAO,CAAC,yBAAyB;IAOjC,4DAA4D;IAC5D,gBAAgB;IAChB,OAAO,CAAC,OAAO;IAcf,yCAAyC;IACzC,gBAAgB;IAChB,OAAO,CAAC,YAAY;IAYpB,sEAAsE;IACtE,gBAAgB;IAChB,OAAO,CAAC,cAAc;IAStB;;;;;;;;;OASG;IACM,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI;IAU5C,sEAAsE;IACtE,gBAAgB;IAChB,OAAO,CAAC,SAAS,CAAmB;IACpC,+DAA+D;IAC/D,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAA6B;IAC7C,oEAAoE;IACpE,gBAAgB;IAChB,OAAO,CAAC,WAAW,CAA4B;IAC/C,gEAAgE;IAChE,gBAAgB;IAChB,OAAO,CAAC,QAAQ,CAA6B;IAEpC,MAAM;CA+HhB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/D;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,qBAAqB;QAC7B,WAAW,EAAE,WAAW,CAAC;KAC1B;CACF;AAED,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-switch.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-switch/hx-switch.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"hx-switch.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-switch/hx-switch.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iBAAiB,yBA6P7B,CAAC"}
|
|
@@ -127,8 +127,118 @@ export declare class HelixToggleButton extends HelixElement {
|
|
|
127
127
|
checkValidity(): boolean;
|
|
128
128
|
/** Reports validity and shows the browser's constraint validation UI. */
|
|
129
129
|
reportValidity(): boolean;
|
|
130
|
+
/**
|
|
131
|
+
* Handle for the shared IDREF observer. See `installAriaIdrefMirror()`.
|
|
132
|
+
* @internal
|
|
133
|
+
*/
|
|
134
|
+
private _ariaMirror;
|
|
135
|
+
/**
|
|
136
|
+
* Default-slot text content captured for use as the host's accessible name
|
|
137
|
+
* when no explicit `label`/`aria-label`/`aria-labelledby` is supplied.
|
|
138
|
+
* Codex round-1 finding #9.
|
|
139
|
+
* @internal
|
|
140
|
+
*/
|
|
141
|
+
private _slotLabelText;
|
|
142
|
+
/** No-IDL-ref fallback tokens applied to the inner button. @internal */
|
|
143
|
+
private _fallbackAriaLabelledBy;
|
|
144
|
+
/** @internal */
|
|
145
|
+
private _fallbackAriaDescribedBy;
|
|
146
|
+
/** @internal */
|
|
147
|
+
private _fallbackAriaLabel;
|
|
148
|
+
/**
|
|
149
|
+
* Whether the platform supports IDL element references on `ElementInternals`.
|
|
150
|
+
* Drives the render-time branch between the modern path (host is the
|
|
151
|
+
* announced surface, inner button is `aria-hidden + tabindex=-1`) and the
|
|
152
|
+
* fallback path (inner button is the announced surface, host is demoted).
|
|
153
|
+
* Codex round-2 finding #2.
|
|
154
|
+
* @internal
|
|
155
|
+
*/
|
|
156
|
+
private _supportsIdrefRefs;
|
|
157
|
+
/**
|
|
158
|
+
* Tracks whether the host's `tabindex` is managed by the component itself
|
|
159
|
+
* (vs. set explicitly by a consumer). Codex round-14 P2: a consumer-supplied
|
|
160
|
+
* `tabindex` (e.g. roving-tabindex toolbar pattern with `tabindex="-1"`)
|
|
161
|
+
* must survive disabled flips and re-renders. Only re-assert tabindex in
|
|
162
|
+
* `updated()` when the component originally claimed it.
|
|
163
|
+
* @internal
|
|
164
|
+
*/
|
|
165
|
+
private _internalTabindexManaged;
|
|
166
|
+
connectedCallback(): void;
|
|
167
|
+
disconnectedCallback(): void;
|
|
168
|
+
/**
|
|
169
|
+
* Host-level keydown handler. Active only on the modern path; on the
|
|
170
|
+
* no-IDL-ref fallback the inner `<button>` owns native Space/Enter
|
|
171
|
+
* activation. Codex round-2 finding #2.
|
|
172
|
+
* @internal
|
|
173
|
+
*/
|
|
174
|
+
private _handleHostKeyDown;
|
|
175
|
+
/**
|
|
176
|
+
* Host-level click router. The inner `<button>` is `aria-hidden + tabindex=-1`
|
|
177
|
+
* on modern browsers but still receives clicks via mouse activation; toggling
|
|
178
|
+
* is handled by the inner `_handleClick`. Host-level clicks (composed path
|
|
179
|
+
* origin === host) only come from AT activation or programmatic triggers,
|
|
180
|
+
* so we route those to the toggle pipeline.
|
|
181
|
+
*
|
|
182
|
+
* Codex round-2 finding #2: on no-IDL-ref browsers the inner button is the
|
|
183
|
+
* announced surface so this host-level routing is a no-op — AT activation
|
|
184
|
+
* lands on the inner button directly.
|
|
185
|
+
* @internal
|
|
186
|
+
*/
|
|
187
|
+
private _handleHostClickRouted;
|
|
188
|
+
/** @internal */
|
|
189
|
+
private _invokeToggle;
|
|
190
|
+
/**
|
|
191
|
+
* Moves focus to the announced toggle-button surface. Codex round-1 finding
|
|
192
|
+
* `#1` made the host the canonical focus target on modern engines so AT
|
|
193
|
+
* announces a single widget. Round-7 finding `#9` extends that contract to
|
|
194
|
+
* the no-IDL-ref fallback: when the host is demoted (`tabindex=-1`,
|
|
195
|
+
* role/state cleared on `internals`) the inner `<button>` owns the announced
|
|
196
|
+
* semantics and tab order, so programmatic `focus()` must redirect there —
|
|
197
|
+
* otherwise scripted focus and error recovery land on the demoted host on
|
|
198
|
+
* unsupported engines.
|
|
199
|
+
*/
|
|
200
|
+
focus(options?: FocusOptions): void;
|
|
130
201
|
firstUpdated(changedProperties: PropertyValues<this>): void;
|
|
131
202
|
updated(changedProperties: PropertyValues<this>): void;
|
|
203
|
+
/**
|
|
204
|
+
* Reads the default slot's flattened text content into `_slotLabelText`.
|
|
205
|
+
* Called from `firstUpdated()` and `slotchange` so host-canonical semantics
|
|
206
|
+
* pick up slotted label text. Codex round-1 finding #9.
|
|
207
|
+
* @internal
|
|
208
|
+
*/
|
|
209
|
+
private _captureSlotLabelText;
|
|
210
|
+
/**
|
|
211
|
+
* Watches assigned default-slot nodes for in-place text mutations so the
|
|
212
|
+
* cached `_slotLabelText` (and thus `internals.ariaLabel`) stays in sync
|
|
213
|
+
* when a framework rewrites textContent of an already-assigned node without
|
|
214
|
+
* replacing it. `slotchange` does NOT fire for those mutations, so a
|
|
215
|
+
* separate observer is required. Codex round-13 P2.
|
|
216
|
+
* @internal
|
|
217
|
+
*/
|
|
218
|
+
private _slotTextObserver;
|
|
219
|
+
/**
|
|
220
|
+
* (Re-)installs the mutation observer over the current set of assigned
|
|
221
|
+
* default-slot nodes. Disconnects any prior observer first so detached
|
|
222
|
+
* nodes stop firing into a torn-down host.
|
|
223
|
+
* @internal
|
|
224
|
+
*/
|
|
225
|
+
private _installSlotTextObserver;
|
|
226
|
+
/** @internal */
|
|
227
|
+
private _handleDefaultSlotChange;
|
|
228
|
+
/**
|
|
229
|
+
* Mirrors toggle-button semantics onto the host via ElementInternals so that
|
|
230
|
+
* consumer-supplied `aria-label`, `aria-labelledby`, and `aria-describedby`
|
|
231
|
+
* on `<hx-toggle-button>` reach the announced control. The codex aria-group-2
|
|
232
|
+
* finding identified that the inner shadow `<button>` was the only carrier of
|
|
233
|
+
* the toggle role + pressed state, leaving host-level IDREF tokens stranded
|
|
234
|
+
* across the shadow boundary.
|
|
235
|
+
*
|
|
236
|
+
* The shadow `<button>` keeps `aria-pressed`/`aria-label` mirrored for
|
|
237
|
+
* backwards-compat with existing tests and for browsers without IDL element
|
|
238
|
+
* references; the host is the canonical announced surface.
|
|
239
|
+
* @internal
|
|
240
|
+
*/
|
|
241
|
+
private _syncHostAriaSemantics;
|
|
132
242
|
protected _onFormReset(): void;
|
|
133
243
|
protected _onFormStateRestore(state: string | File | FormData | null, _mode: 'restore' | 'autocomplete'): void;
|
|
134
244
|
protected _onFormDisabled(disabled: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-toggle-button.d.ts","sourceRoot":"","sources":["../../../src/components/hx-toggle-button/hx-toggle-button.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,4CAA4C,CAAC;
|
|
1
|
+
{"version":3,"file":"hx-toggle-button.d.ts","sourceRoot":"","sources":["../../../src/components/hx-toggle-button/hx-toggle-button.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hx-toggle-button.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-toggle-button/hx-toggle-button.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"hx-toggle-button.styles.d.ts","sourceRoot":"","sources":["../../../src/components/hx-toggle-button/hx-toggle-button.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,uBAAuB,yBAkRnC,CAAC"}
|