@helixui/react 3.3.1 → 3.4.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.
- package/dist/components/HxAccordionItem/HxAccordionItem.d.ts +35 -0
- package/dist/components/HxAccordionItem/HxAccordionItem.d.ts.map +1 -1
- package/dist/components/HxColorPicker/types.d.ts +16 -1
- package/dist/components/HxColorPicker/types.d.ts.map +1 -1
- package/dist/components/HxCombobox/types.d.ts +1 -1
- package/dist/components/HxCombobox/types.d.ts.map +1 -1
- package/dist/components/HxDatePicker/types.d.ts +4 -0
- package/dist/components/HxDatePicker/types.d.ts.map +1 -1
- package/dist/components/HxDialog/HxDialog.d.ts +78 -0
- package/dist/components/HxDialog/HxDialog.d.ts.map +1 -1
- package/dist/components/HxDrawer/HxDrawer.d.ts +53 -0
- package/dist/components/HxDrawer/HxDrawer.d.ts.map +1 -1
- package/dist/components/HxDropdown/HxDropdown.d.ts +45 -0
- package/dist/components/HxDropdown/HxDropdown.d.ts.map +1 -1
- package/dist/components/HxField/HxField.d.ts +20 -0
- package/dist/components/HxField/HxField.d.ts.map +1 -1
- package/dist/components/HxIconButton/types.d.ts +5 -0
- package/dist/components/HxIconButton/types.d.ts.map +1 -1
- package/dist/components/HxLink/types.d.ts +4 -0
- package/dist/components/HxLink/types.d.ts.map +1 -1
- package/dist/components/HxList/HxList.d.ts +6 -0
- package/dist/components/HxList/HxList.d.ts.map +1 -1
- package/dist/components/HxListItem/HxListItem.d.ts +8 -0
- package/dist/components/HxListItem/HxListItem.d.ts.map +1 -1
- package/dist/components/HxMenu/HxMenu.d.ts +15 -0
- package/dist/components/HxMenu/HxMenu.d.ts.map +1 -1
- package/dist/components/HxMenu/types.d.ts +4 -2
- package/dist/components/HxMenu/types.d.ts.map +1 -1
- package/dist/components/HxMenuDivider/HxMenuDivider.d.ts +7 -0
- package/dist/components/HxMenuDivider/HxMenuDivider.d.ts.map +1 -1
- package/dist/components/HxMenuItem/HxMenuItem.d.ts +15 -1
- package/dist/components/HxMenuItem/HxMenuItem.d.ts.map +1 -1
- package/dist/components/HxMeter/HxMeter.d.ts +10 -0
- package/dist/components/HxMeter/HxMeter.d.ts.map +1 -1
- package/dist/components/HxOverflowMenu/HxOverflowMenu.d.ts +19 -0
- package/dist/components/HxOverflowMenu/HxOverflowMenu.d.ts.map +1 -1
- package/dist/components/HxOverflowMenu/types.d.ts +3 -1
- package/dist/components/HxOverflowMenu/types.d.ts.map +1 -1
- package/dist/components/HxPopover/HxPopover.d.ts +40 -0
- package/dist/components/HxPopover/HxPopover.d.ts.map +1 -1
- package/dist/components/HxProgressBar/HxProgressBar.d.ts +12 -0
- package/dist/components/HxProgressBar/HxProgressBar.d.ts.map +1 -1
- package/dist/components/HxSelect/HxSelect.d.ts +1 -0
- package/dist/components/HxSelect/HxSelect.d.ts.map +1 -1
- package/dist/components/HxSelect/index.js +1 -1
- package/dist/components/HxSelect/types.d.ts +2 -0
- package/dist/components/HxSelect/types.d.ts.map +1 -1
- package/dist/components/HxSplitButton/HxSplitButton.d.ts +21 -0
- package/dist/components/HxSplitButton/HxSplitButton.d.ts.map +1 -1
- package/dist/components/HxSplitButton/types.d.ts +0 -8
- package/dist/components/HxSplitButton/types.d.ts.map +1 -1
- package/dist/components/HxStat/HxStat.d.ts +7 -0
- package/dist/components/HxStat/HxStat.d.ts.map +1 -1
- package/dist/components/HxTab/HxTab.d.ts +10 -0
- package/dist/components/HxTab/HxTab.d.ts.map +1 -1
- package/dist/components/HxTabPanel/HxTabPanel.d.ts +6 -0
- package/dist/components/HxTabPanel/HxTabPanel.d.ts.map +1 -1
- package/dist/components/HxTabs/HxTabs.d.ts +10 -0
- package/dist/components/HxTabs/HxTabs.d.ts.map +1 -1
- package/dist/components/HxTabs/types.d.ts +10 -3
- package/dist/components/HxTabs/types.d.ts.map +1 -1
- package/dist/components/HxTd/HxTd.d.ts +5 -0
- package/dist/components/HxTd/HxTd.d.ts.map +1 -1
- package/dist/components/HxTd/types.d.ts +7 -3
- package/dist/components/HxTd/types.d.ts.map +1 -1
- package/dist/components/HxTh/HxTh.d.ts +6 -0
- package/dist/components/HxTh/HxTh.d.ts.map +1 -1
- package/dist/components/HxTimePicker/types.d.ts +4 -0
- package/dist/components/HxTimePicker/types.d.ts.map +1 -1
- package/dist/components/HxTooltip/HxTooltip.d.ts +31 -0
- package/dist/components/HxTooltip/HxTooltip.d.ts.map +1 -1
- package/dist/components/HxTr/HxTr.d.ts +8 -0
- package/dist/components/HxTr/HxTr.d.ts.map +1 -1
- package/dist/components/HxTreeItem/HxTreeItem.d.ts +21 -0
- package/dist/components/HxTreeItem/HxTreeItem.d.ts.map +1 -1
- package/dist/components/HxTreeView/HxTreeView.d.ts +14 -4
- package/dist/components/HxTreeView/HxTreeView.d.ts.map +1 -1
- package/dist/components/HxTreeView/types.d.ts +5 -2
- package/dist/components/HxTreeView/types.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/shared/HxAccordionItem-C26EIvJG.js.map +1 -1
- package/dist/shared/HxDialog-DMF3crTa.js.map +1 -1
- package/dist/shared/HxDrawer-Y1QnaHrU.js.map +1 -1
- package/dist/shared/HxDropdown-DJiYTVXP.js.map +1 -1
- package/dist/shared/HxField-CbrmkDYu.js.map +1 -1
- package/dist/shared/HxList-B35ueWrO.js.map +1 -1
- package/dist/shared/HxListItem-DegXnlK0.js.map +1 -1
- package/dist/shared/HxMenu-B1tRT8Lm.js.map +1 -1
- package/dist/shared/HxMenuDivider-RE1AMxqi.js.map +1 -1
- package/dist/shared/HxMenuItem-CLdUUCJS.js.map +1 -1
- package/dist/shared/HxMeter-C3R4U7cD.js.map +1 -1
- package/dist/shared/HxOverflowMenu-CdTWx4X5.js.map +1 -1
- package/dist/shared/HxPopover-D0zfUXPF.js.map +1 -1
- package/dist/shared/HxProgressBar-FupceIzI.js.map +1 -1
- package/dist/shared/{HxSelect-BEm8srcF.js → HxSelect-BAt_veRr.js} +3 -2
- package/dist/shared/{HxSelect-BEm8srcF.js.map → HxSelect-BAt_veRr.js.map} +1 -1
- package/dist/shared/HxSplitButton-BVNWYaAl.js.map +1 -1
- package/dist/shared/HxStat-C_colBF2.js.map +1 -1
- package/dist/shared/HxTab-Dhb27BDp.js.map +1 -1
- package/dist/shared/HxTabPanel-CmFKupoK.js.map +1 -1
- package/dist/shared/HxTabs-DIIy0X3K.js.map +1 -1
- package/dist/shared/HxTd-l5ZrD1Ai.js.map +1 -1
- package/dist/shared/HxTh-Bo7R_MVI.js.map +1 -1
- package/dist/shared/HxTooltip-DD8Uc78f.js.map +1 -1
- package/dist/shared/HxTr-CjhQyD3e.js.map +1 -1
- package/dist/shared/HxTreeItem-B2_rGgy6.js.map +1 -1
- package/dist/shared/HxTreeView-BKbPPPhF.js.map +1 -1
- package/package.json +2 -2
|
@@ -14,7 +14,9 @@ export interface HxOverflowMenuProps {
|
|
|
14
14
|
disabled?: boolean;
|
|
15
15
|
/** Icon orientation: vertical (kebab ⋮) or horizontal (meatball ···). */
|
|
16
16
|
icon?: 'vertical' | 'horizontal';
|
|
17
|
-
/** Accessible label for the trigger button.
|
|
17
|
+
/** Accessible label for the trigger button. Used as a fallback when no
|
|
18
|
+
consumer-supplied `aria-label` / `aria-labelledby` is present on the
|
|
19
|
+
host. Consumer host attributes win in the AccName 1.2 §4.3.1 cascade. */
|
|
18
20
|
label?: string;
|
|
19
21
|
/** Accessible label for the menu panel. Reflected as `label-menu`. */
|
|
20
22
|
labelMenu?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxOverflowMenu/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EACN,MAAM,GACN,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACjC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxOverflowMenu/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EACN,MAAM,GACN,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;IAChB,kCAAkC;IAClC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yEAAyE;IACzE,IAAI,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACjC;;0EAEsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,+CAA+C;IAC/C,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC"}
|
|
@@ -3,6 +3,46 @@ import { HxPopoverProps } from './types.js';
|
|
|
3
3
|
export type { HxPopoverProps };
|
|
4
4
|
/**
|
|
5
5
|
* A popover that displays rich floating content attached to a trigger element.
|
|
6
|
+
|
|
7
|
+
## Architecture Note: Host-Attribute Label Mirror (group-4 round-1)
|
|
8
|
+
|
|
9
|
+
Unlike modal dialogs (`hx-dialog` / `hx-drawer`) where the HOST is the
|
|
10
|
+
announced surface and `ElementInternals` projects consumer IDREFs across
|
|
11
|
+
the shadow boundary, `hx-popover`'s announced surface is the inner
|
|
12
|
+
`[part="body"]` element which carries `role="dialog"`. The host does not
|
|
13
|
+
claim a role — it is a structural wrapper around an anchor slot and a
|
|
14
|
+
separate floating panel.
|
|
15
|
+
|
|
16
|
+
IDL element references on `internals.ariaLabelledByElements` therefore
|
|
17
|
+
cannot help: AT walks the inner body's accessibility node, and IDL refs
|
|
18
|
+
declared on the host are not visible from a shadow-internal descendant
|
|
19
|
+
looking up. The viable cross-shadow path is the host-attribute mirror:
|
|
20
|
+
|
|
21
|
+
1. The host observes `aria-label` / `aria-labelledby` mutations.
|
|
22
|
+
2. On every sync, `aria-labelledby` IDREFs are resolved via
|
|
23
|
+
`resolveIdrefTokens` (composed-tree walk: host root → ancestor
|
|
24
|
+
shadow hosts → owner document) and **text-flattened** via
|
|
25
|
+
`flattenAccName` (AccName 1.2 §4.3.10 hidden-aware).
|
|
26
|
+
3. The flattened name is written to the inner body's `aria-label`,
|
|
27
|
+
overriding the `label` property only when consumer naming is set.
|
|
28
|
+
|
|
29
|
+
Naming precedence (W3C AccName 1.2 §4.3.1):
|
|
30
|
+
|
|
31
|
+
1. Host `aria-labelledby` (resolved IDREFs, text-flattened)
|
|
32
|
+
2. Host `aria-label`
|
|
33
|
+
3. `label` property
|
|
34
|
+
4. Hard-coded literal `"Popover"` (last-resort accessible name)
|
|
35
|
+
|
|
36
|
+
The text-flatten approach forfeits live IDL-ref tracking (mutating a
|
|
37
|
+
referenced element's text re-fires through the shared root observer; see
|
|
38
|
+
`installAriaIdrefMirror`). `aria-controls` is intentionally omitted on
|
|
39
|
+
the trigger — the body lives in shadow DOM and consumer IDREFs cannot
|
|
40
|
+
resolve cross-root from light-DOM (axe-core flags this as a critical
|
|
41
|
+
violation if attempted; see line documenting this exception below).
|
|
42
|
+
|
|
43
|
+
Slotted label support (e.g. `<slot name="title">`) is deliberately NOT
|
|
44
|
+
added in this round — it would expand the public API surface and is
|
|
45
|
+
tracked as a follow-up enhancement.
|
|
6
46
|
*
|
|
7
47
|
* @example
|
|
8
48
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxPopover.d.ts","sourceRoot":"","sources":["../../../src/components/HxPopover/HxPopover.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B
|
|
1
|
+
{"version":3,"file":"HxPopover.d.ts","sourceRoot":"","sources":["../../../src/components/HxPopover/HxPopover.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,eAAO,MAAM,SAAS;;;;;EAWpB,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -3,6 +3,18 @@ import { HxProgressBarProps } from './types.js';
|
|
|
3
3
|
export type { HxProgressBarProps };
|
|
4
4
|
/**
|
|
5
5
|
* A linear progress indicator for determinate and indeterminate states.
|
|
6
|
+
|
|
7
|
+
Group 7 host-canonical: `role="progressbar"` is mirrored onto the **host**
|
|
8
|
+
via `_internals.role` (cross-shadow IDREF wiring) AND kept on the inner
|
|
9
|
+
`[role="progressbar"]` track for legacy AT and consumer queries. This is
|
|
10
|
+
the hx-progress-ring dual-surface pattern (Group 7 gold-standard).
|
|
11
|
+
Consumer-supplied `aria-labelledby` / `aria-describedby` on the host
|
|
12
|
+
resolves through the shared IDREF mirror so cross-shadow naming reaches
|
|
13
|
+
the announced surface even when the labels live in another shadow tree.
|
|
14
|
+
|
|
15
|
+
The internal `aria-live="polite"` announcer for the "Complete" milestone
|
|
16
|
+
is preserved (`role="progressbar"` does NOT imply a live region — an
|
|
17
|
+
explicit live announcer is required for value-update announcements).
|
|
6
18
|
*
|
|
7
19
|
* @example
|
|
8
20
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/HxProgressBar/HxProgressBar.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"HxProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/HxProgressBar/HxProgressBar.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,aAAa;;EAQxB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxSelect.d.ts","sourceRoot":"","sources":["../../../src/components/HxSelect/HxSelect.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"HxSelect.d.ts","sourceRoot":"","sources":["../../../src/components/HxSelect/HxSelect.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ;;;EASnB,CAAC;AAEH,eAAe,QAAQ,CAAC"}
|
|
@@ -42,5 +42,7 @@ export interface HxSelectProps {
|
|
|
42
42
|
labelNoOptions?: string;
|
|
43
43
|
/** Dispatched when the selected option changes. */
|
|
44
44
|
onHxChange?: (event: Event) => void;
|
|
45
|
+
/** Platform constraint-validation event fired when checkValidity() / reportValidity() determine the value is invalid (form-associated component contract via ElementInternals.setValidity). */
|
|
46
|
+
onInvalid?: (event: Event) => void;
|
|
45
47
|
}
|
|
46
48
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxSelect/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;;;;;;4CAQwC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxSelect/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,aAAa;IAC5B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;;;;;;;;4CAQwC;IACxC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,qDAAqD;IACrD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IAGxB,mDAAmD;IACnD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACpC,+LAA+L;IAC/L,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACpC"}
|
|
@@ -5,6 +5,27 @@ export type { HxSplitButtonProps };
|
|
|
5
5
|
* A split button combining a primary action button with an attached dropdown
|
|
6
6
|
menu for secondary actions. Implements the ARIA menu button pattern for
|
|
7
7
|
full keyboard and screen reader support.
|
|
8
|
+
|
|
9
|
+
## Architecture Note: Composite host with two interactive children (Group 5b)
|
|
10
|
+
|
|
11
|
+
The host wraps a primary `<button>`, a dropdown trigger `<button>`, and a
|
|
12
|
+
panel `<div role="menu">` — three ARIA-bearing surfaces that cannot all
|
|
13
|
+
collapse onto the host. Group 5b keeps role placement on the inner
|
|
14
|
+
elements (consistent with `hx-overflow-menu`). The host carries no role.
|
|
15
|
+
|
|
16
|
+
What Group 5b adds:
|
|
17
|
+
- **Host-attribute label mirror** via `installAriaIdrefMirror`: consumer
|
|
18
|
+
`aria-label` / `aria-labelledby` on the host flow to the inner primary
|
|
19
|
+
button's `aria-label`. Replaces the legacy `accessible-label` shim,
|
|
20
|
+
which was a workaround for ARIAMixin shadowing on the host. The shim
|
|
21
|
+
is preserved with a one-time devWarn for one minor version of back-
|
|
22
|
+
compat; new code should use the standard `aria-label` attribute.
|
|
23
|
+
- **Roving tabindex** on slotted `hx-menu-item` children inside the
|
|
24
|
+
panel. Only the focused item carries `tabindex=0`; arrow key
|
|
25
|
+
navigation rewrites the tabindex map via `_applyRovingTabIndex()`.
|
|
26
|
+
`setRovingTabIndex` is the same setter used by `hx-menu` for cross-
|
|
27
|
+
family pattern alignment.
|
|
28
|
+
- **First-character typeahead** with 500ms timeout matching `hx-menu`.
|
|
8
29
|
*
|
|
9
30
|
* @example
|
|
10
31
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxSplitButton.d.ts","sourceRoot":"","sources":["../../../src/components/HxSplitButton/HxSplitButton.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"HxSplitButton.d.ts","sourceRoot":"","sources":["../../../src/components/HxSplitButton/HxSplitButton.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6CAA6C,CAAC;AAE/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,YAAY,EAAE,kBAAkB,EAAE,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,aAAa;;;EASxB,CAAC;AAEH,eAAe,aAAa,CAAC"}
|
|
@@ -15,14 +15,6 @@ export interface HxSplitButtonProps {
|
|
|
15
15
|
disabled?: boolean;
|
|
16
16
|
/** Primary button label text. When set, overrides the default slot content. */
|
|
17
17
|
label?: string | undefined;
|
|
18
|
-
/** Accessible label for the primary action button. Required for icon-only usage
|
|
19
|
-
or when the button label alone is insufficient context.
|
|
20
|
-
Uses `accessible-label` attribute instead of `aria-label` to avoid
|
|
21
|
-
ARIAMixin shadowing on the host element.
|
|
22
|
-
|
|
23
|
-
Note: `mixinDelegatesAria` is not applied to this component because the
|
|
24
|
-
`accessible-label` attribute approach avoids the ARIAMixin property conflict
|
|
25
|
-
without requiring mixin overhead. */
|
|
26
18
|
accessibleLabel?: string;
|
|
27
19
|
/** Accessible label for the dropdown trigger button. Override for localization. */
|
|
28
20
|
labelTrigger?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxSplitButton/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAChF,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;4CACwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxSplitButton/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;IAChF,gCAAgC;IAChC,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B;4CACwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,yEAAyE;IACzE,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACnC,iEAAiE;IACjE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC"}
|
|
@@ -3,6 +3,13 @@ import { HxStatProps } from './types.js';
|
|
|
3
3
|
export type { HxStatProps };
|
|
4
4
|
/**
|
|
5
5
|
* A static stat display component for presenting key metrics in a healthcare dashboard.
|
|
6
|
+
|
|
7
|
+
Group 7 host-canonical: `role="group"` lives on the **host** via
|
|
8
|
+
`_internals.role`. The host carries the resolved accessible name so AT
|
|
9
|
+
walks `<hx-stat>` (role=group, label="value: label") directly. The
|
|
10
|
+
internal `aria-live="polite"` announcer remains in the shadow tree —
|
|
11
|
+
`role="group"` does NOT imply a live region, so the announcer is required
|
|
12
|
+
for value/label/trend update announcements.
|
|
6
13
|
*
|
|
7
14
|
* @example
|
|
8
15
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxStat.d.ts","sourceRoot":"","sources":["../../../src/components/HxStat/HxStat.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"HxStat.d.ts","sourceRoot":"","sources":["../../../src/components/HxStat/HxStat.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,MAAM,uDAMjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -4,6 +4,16 @@ export type { HxTabProps };
|
|
|
4
4
|
/**
|
|
5
5
|
* An individual tab button, designed to be used inside an `<hx-tabs>` container.
|
|
6
6
|
Must be placed in the `tab` named slot of `<hx-tabs>`.
|
|
7
|
+
|
|
8
|
+
Group 5a host-canonical: `role="tab"` lives on the **host** via
|
|
9
|
+
`_internals.role`. The host is the focusable surface (carries the roving
|
|
10
|
+
tabindex); the inner `<button>` retains click activation semantics
|
|
11
|
+
(Enter/Space and pointer events) but is no longer the AT-announced surface
|
|
12
|
+
— its role and ARIA state are stripped on the modern path so the host's
|
|
13
|
+
canonical surface wins. `internals.ariaSelected`, `ariaDisabled`, and
|
|
14
|
+
`ariaControlsElements` mirror reactive state. The host `aria-label` /
|
|
15
|
+
`aria-labelledby` resolved via the shared IDREF mirror name the tab
|
|
16
|
+
cross-shadow.
|
|
7
17
|
*
|
|
8
18
|
* @example
|
|
9
19
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTab.d.ts","sourceRoot":"","sources":["../../../src/components/HxTab/HxTab.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B
|
|
1
|
+
{"version":3,"file":"HxTab.d.ts","sourceRoot":"","sources":["../../../src/components/HxTab/HxTab.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,YAAY,EAAE,UAAU,EAAE,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,KAAK,sDAMhB,CAAC;AAEH,eAAe,KAAK,CAAC"}
|
|
@@ -3,6 +3,12 @@ import { HxTabPanelProps } from './types.js';
|
|
|
3
3
|
export type { HxTabPanelProps };
|
|
4
4
|
/**
|
|
5
5
|
* A content panel associated with an `<hx-tab>`, managed by a parent `<hx-tabs>`.
|
|
6
|
+
Group 5a host-canonical: `role="tabpanel"` lives on the host via
|
|
7
|
+
`_internals.role`. The host carries the canonical AT surface — consumer
|
|
8
|
+
`aria-labelledby` / `aria-describedby` on the host resolve through the
|
|
9
|
+
shared IDREF mirror. The parent `hx-tabs` writes `internals.ariaLabelledByElements`
|
|
10
|
+
referencing the corresponding `<hx-tab>` host so cross-shadow naming works
|
|
11
|
+
via IDL element references (the modern path) without serializing tab text.
|
|
6
12
|
*
|
|
7
13
|
* @example
|
|
8
14
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTabPanel.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabPanel/HxTabPanel.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"HxTabPanel.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabPanel/HxTabPanel.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,2DAMrB,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -5,6 +5,16 @@ export type { HxTabsProps };
|
|
|
5
5
|
* A tabbed content organizer that manages a set of `<hx-tab>` and `<hx-tab-panel>` children.
|
|
6
6
|
Supports horizontal and vertical orientations, automatic and manual activation modes,
|
|
7
7
|
and full keyboard navigation per the ARIA Authoring Practices Guide.
|
|
8
|
+
|
|
9
|
+
Group 5a host-canonical: `role="tablist"` lives on the host via
|
|
10
|
+
`_internals.role`. `aria-orientation`, `aria-label`, and consumer
|
|
11
|
+
`aria-labelledby` resolve through the host. Per-tab `role="tab"` and
|
|
12
|
+
per-panel `role="tabpanel"` likewise live on their respective hosts.
|
|
13
|
+
|
|
14
|
+
Activation defaults to **manual** per healthcare patterns — keyboard arrow
|
|
15
|
+
keys move focus only; Enter/Space activates. APG explicitly allows both
|
|
16
|
+
automatic and manual activation; manual is safer when panels are heavy or
|
|
17
|
+
announce changes via live regions.
|
|
8
18
|
*
|
|
9
19
|
* @example
|
|
10
20
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTabs.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabs/HxTabs.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"HxTabs.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabs/HxTabs.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,YAAY,EAAE,WAAW,EAAE,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,MAAM;;EAQjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
|
|
@@ -10,10 +10,17 @@ export interface HxTabsProps {
|
|
|
10
10
|
orientation?: 'horizontal' | 'vertical';
|
|
11
11
|
/** Controls how keyboard navigation activates tabs.
|
|
12
12
|
In `automatic` mode, focus also activates the tab.
|
|
13
|
-
In `manual` mode, focus moves independently; Space or Enter activates.
|
|
13
|
+
In `manual` mode, focus moves independently; Space or Enter activates.
|
|
14
|
+
|
|
15
|
+
Group 5a default: `manual` — safer for healthcare patterns where panel
|
|
16
|
+
content may be heavy or announce updates via live regions. APG explicitly
|
|
17
|
+
allows both modes; manual avoids disorienting auto-activation when users
|
|
18
|
+
scan tabs with arrow keys. */
|
|
14
19
|
activation?: 'manual' | 'automatic';
|
|
15
|
-
/** Accessible label for the tablist.
|
|
16
|
-
Provide a brief description of what the tabs represent (e.g., "Patient
|
|
20
|
+
/** Accessible label for the tablist. Drives the host `internals.ariaLabel`.
|
|
21
|
+
Provide a brief description of what the tabs represent (e.g., "Patient
|
|
22
|
+
record sections"). Consumer `aria-label` / `aria-labelledby` on the host
|
|
23
|
+
override this property when present. */
|
|
17
24
|
label?: string;
|
|
18
25
|
/** Gets or sets the zero-based index of the currently selected tab.
|
|
19
26
|
Setting this programmatically activates the tab at the given index.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabs/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTabs/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACxC;;;;;;;+BAO2B;IAC3B,UAAU,CAAC,EAAE,QAAQ,GAAG,WAAW,CAAC;IACpC;;;yCAGqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;gDAG4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IAGvB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC"}
|
|
@@ -3,6 +3,11 @@ import { HxTdProps } from './types.js';
|
|
|
3
3
|
export type { HxTdProps };
|
|
4
4
|
/**
|
|
5
5
|
* Semantic table data cell. Must be a child of `hx-tr`.
|
|
6
|
+
|
|
7
|
+
Group 7 host-canonical: `role="cell"` lives on the **host** via
|
|
8
|
+
`_internals.role`. The host carries the cell's accessible name (resolved
|
|
9
|
+
from the `label` property — fixing audit B-A1, where mobile screen reader
|
|
10
|
+
users lost column context because `data-label` was visual-only).
|
|
6
11
|
*
|
|
7
12
|
* @example
|
|
8
13
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTd.d.ts","sourceRoot":"","sources":["../../../src/components/HxTd/HxTd.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B
|
|
1
|
+
{"version":3,"file":"HxTd.d.ts","sourceRoot":"","sources":["../../../src/components/HxTd/HxTd.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,4DAMf,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
@@ -12,9 +12,13 @@ export interface HxTdProps {
|
|
|
12
12
|
colspan?: number;
|
|
13
13
|
/** Number of rows this cell spans. */
|
|
14
14
|
rowspan?: number;
|
|
15
|
-
/** Column header label for this cell. Forwarded as `data-label` on the native
|
|
16
|
-
the mobile card layout (`td::before { content: attr(data-label) }`)
|
|
17
|
-
so screen readers identify the column when
|
|
15
|
+
/** Column header label for this cell. Forwarded as `data-label` on the native
|
|
16
|
+
`<td>` for the mobile card layout (`td::before { content: attr(data-label) }`)
|
|
17
|
+
AND projected to `aria-label` so screen readers identify the column when
|
|
18
|
+
the header row is hidden via the mobile breakpoint. Group 7 audit B-A1
|
|
19
|
+
fix: prior to migration, the JSDoc claimed aria-label projection but the
|
|
20
|
+
implementation only set `data-label` — `::before { content: attr(...) }`
|
|
21
|
+
is not reliably announced by VoiceOver / NVDA across versions. */
|
|
18
22
|
label?: string;
|
|
19
23
|
}
|
|
20
24
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTd/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTd/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,SAAS;IACxB,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;mEAM+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -4,6 +4,12 @@ export type { HxThProps };
|
|
|
4
4
|
/**
|
|
5
5
|
* Semantic table header cell. Must be a child of `hx-tr`.
|
|
6
6
|
Supports sortable columns with accessible sort state.
|
|
7
|
+
|
|
8
|
+
Group 7 host-canonical: `role="columnheader"` lives on the **host** via
|
|
9
|
+
`_internals.role`. The host carries `aria-sort` reflecting the current
|
|
10
|
+
sort direction (when `sortable` is true). The sort `<button>` aria-label
|
|
11
|
+
incorporates the slotted column text so AT users hear "Sort by Patient
|
|
12
|
+
name, currently sorted ascending" rather than just "Sort ascending".
|
|
7
13
|
*
|
|
8
14
|
* @example
|
|
9
15
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTh.d.ts","sourceRoot":"","sources":["../../../src/components/HxTh/HxTh.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B
|
|
1
|
+
{"version":3,"file":"HxTh.d.ts","sourceRoot":"","sources":["../../../src/components/HxTh/HxTh.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,IAAI;;EAQf,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
@@ -26,6 +26,10 @@ export interface HxTimePickerProps {
|
|
|
26
26
|
error?: string;
|
|
27
27
|
/** Display format for the time input. '12h' shows AM/PM; '24h' is bare HH:MM. */
|
|
28
28
|
format?: '12h' | '24h';
|
|
29
|
+
/** Accessible name for screen readers, if different from the visible label.
|
|
30
|
+
Uses `accessible-label` attribute instead of `aria-label` to avoid
|
|
31
|
+
ARIAMixin shadowing on the host element. Highest-precedence naming source. */
|
|
32
|
+
accessibleLabel?: string | null;
|
|
29
33
|
/** Dispatched when the selected time changes. Detail value is HH:MM (24h). */
|
|
30
34
|
onHxChange?: (event: Event) => void;
|
|
31
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTimePicker/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTimePicker/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,iBAAiB;IAChC,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,yEAAyE;IACzE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iFAAiF;IACjF,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IACvB;;+EAE2E;IAC3E,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAGhC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC"}
|
|
@@ -3,6 +3,37 @@ import { HxTooltipProps } from './types.js';
|
|
|
3
3
|
export type { HxTooltipProps };
|
|
4
4
|
/**
|
|
5
5
|
* A tooltip that displays contextual help text on hover or focus.
|
|
6
|
+
|
|
7
|
+
## Architecture Note: Light-DOM Description Shim (group-4 round-1)
|
|
8
|
+
|
|
9
|
+
`aria-describedby` IDREFs cannot resolve across the Shadow DOM boundary —
|
|
10
|
+
the trigger lives in the consumer's light DOM and references a tooltip
|
|
11
|
+
whose body is in this component's shadow root. The tooltip text must
|
|
12
|
+
therefore be exposed in DOCUMENT scope.
|
|
13
|
+
|
|
14
|
+
The shim is a single visually-hidden `<span>` appended to `document.body`
|
|
15
|
+
with the `_tooltipId` as its `id`. The trigger's `aria-describedby` points
|
|
16
|
+
at this span. The text content is mirrored from the slotted `content`
|
|
17
|
+
slot on every relevant signal:
|
|
18
|
+
|
|
19
|
+
1. `firstUpdated` (initial wiring)
|
|
20
|
+
2. `slotchange` on the default slot AND the `content` slot (the slotted
|
|
21
|
+
element list changes)
|
|
22
|
+
3. **Text-content mutations on the assigned `content` slot elements**
|
|
23
|
+
(round-23 P2 pattern). Without this observer a framework that
|
|
24
|
+
rewrites the slotted `<span slot="content">` `textContent` IN PLACE
|
|
25
|
+
(Vue / React keyed text rerender) would leave the shim stale.
|
|
26
|
+
|
|
27
|
+
Cleanup: `disconnectedCallback` removes the shim from `document.body`,
|
|
28
|
+
disconnects the slot-text observer, and clears the timers. SSR is
|
|
29
|
+
sidestepped by guarding `document` access — the shim is created lazily
|
|
30
|
+
the first time `_setupTriggerAria()` runs in a browser environment.
|
|
31
|
+
|
|
32
|
+
`role="tooltip"` is the correct APG role and is NEVER promoted to
|
|
33
|
+
`role="dialog"` — APG explicitly forbids tooltips from holding focus and
|
|
34
|
+
the tooltip body is not a focus target. No host-canonical `_internals`
|
|
35
|
+
work is owed: the trigger is the announced surface, and it correctly
|
|
36
|
+
references the tooltip via `aria-describedby`.
|
|
6
37
|
*
|
|
7
38
|
* @example
|
|
8
39
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/HxTooltip/HxTooltip.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B
|
|
1
|
+
{"version":3,"file":"HxTooltip.d.ts","sourceRoot":"","sources":["../../../src/components/HxTooltip/HxTooltip.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,eAAO,MAAM,SAAS,0DAMpB,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -4,6 +4,14 @@ export type { HxTrProps };
|
|
|
4
4
|
/**
|
|
5
5
|
* Semantic table row. Must be a child of `hx-thead`, `hx-tbody`, or `hx-tfoot`.
|
|
6
6
|
Contains `hx-th` or `hx-td` cells.
|
|
7
|
+
|
|
8
|
+
Group 7 host-canonical: `role="row"` lives on the **host** via
|
|
9
|
+
`_internals.role`. The host carries `aria-selected` / `aria-disabled`
|
|
10
|
+
mirroring `selected` / `disabled` reflected attributes. Consumer-supplied
|
|
11
|
+
`aria-label` / `aria-labelledby` on the host project to the host's
|
|
12
|
+
announced surface so AT walks `<hx-tr>` (role=row) directly. Fallback
|
|
13
|
+
path keeps the inner `<tr role="row">` as the announced surface for
|
|
14
|
+
engines without IDL element references.
|
|
7
15
|
*
|
|
8
16
|
* @example
|
|
9
17
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTr.d.ts","sourceRoot":"","sources":["../../../src/components/HxTr/HxTr.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B
|
|
1
|
+
{"version":3,"file":"HxTr.d.ts","sourceRoot":"","sources":["../../../src/components/HxTr/HxTr.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAErE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,YAAY,EAAE,SAAS,EAAE,CAAC;AAE1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,IAAI,2DAMf,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
|
@@ -4,6 +4,27 @@ export type { HxTreeItemProps };
|
|
|
4
4
|
/**
|
|
5
5
|
* A tree item used within an hx-tree-view component.
|
|
6
6
|
Supports expand/collapse, selection, keyboard navigation, and icon/children slots.
|
|
7
|
+
|
|
8
|
+
Group 5c host-canonical: `role="treeitem"` lives on the **host** via
|
|
9
|
+
`_internals.role`. The roving tabindex is written to the host on the
|
|
10
|
+
modern path so the host is the focusable surface and lands directly
|
|
11
|
+
under the parent `<hx-tree-view>` (which carries `role="tree"`) in the
|
|
12
|
+
AT-walked tree. The inner `.item-row` is presentational on the modern
|
|
13
|
+
path — no role, no aria-* attributes — and carries only click/keyboard
|
|
14
|
+
event handlers. Keyboard activation (Enter/Space) and expand/collapse
|
|
15
|
+
(ArrowLeft/Right at the leaf level) are owned by the host's `keydown`
|
|
16
|
+
handler; ArrowUp/Down/Home/End and typeahead bubble to the parent
|
|
17
|
+
`<hx-tree-view>` for navigation.
|
|
18
|
+
|
|
19
|
+
The nested `[role="group"]` element that wraps the `slot="children"`
|
|
20
|
+
stays in the inner shadow DOM regardless of path — that group is a
|
|
21
|
+
separate sub-surface for the children, not a duplicate of the
|
|
22
|
+
treeitem role.
|
|
23
|
+
|
|
24
|
+
On the legacy fallback path the inner `.item-row` carries
|
|
25
|
+
`role="treeitem"` + aria-* state, the host role is suppressed, and the
|
|
26
|
+
roving tabindex is written to the inner element so there is only ONE
|
|
27
|
+
focusable surface per item (mirrors hx-menu-item round-8).
|
|
7
28
|
*
|
|
8
29
|
* @example
|
|
9
30
|
* ```tsx
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTreeItem.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeItem/HxTreeItem.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"HxTreeItem.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeItem/HxTreeItem.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,UAAU;;EAQrB,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -5,10 +5,20 @@ export type { HxTreeViewProps };
|
|
|
5
5
|
* A hierarchical tree component for navigating nested data structures.
|
|
6
6
|
Used in healthcare applications for org charts, ICD-10 code hierarchies, and department navigation.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
Group 5c host-canonical: `role="tree"` lives on the **host** via
|
|
9
|
+
`_internals.role` on the modern path. The host carries the announced
|
|
10
|
+
surface so AT walks `<hx-tree-view>` (role=tree) → slotted
|
|
11
|
+
`<hx-tree-item>` (role=treeitem on host) directly without two layers of
|
|
12
|
+
indirection. Consumer-supplied `aria-label` / `aria-labelledby` on the
|
|
13
|
+
host are resolved via the shared IDREF mirror; cross-shadow naming uses
|
|
14
|
+
`ariaLabelledByElements` (modern) with a flattened-string fallback
|
|
15
|
+
(legacy). On the legacy fallback path the inner `[role="tree"]` carries
|
|
16
|
+
the role + accessible name and the host role is suppressed so AT only
|
|
17
|
+
sees one tree per logical surface (mirrors `hx-menu` round-8).
|
|
18
|
+
|
|
19
|
+
Full keyboard navigation: Arrow keys for movement, Enter/Space for
|
|
20
|
+
selection, Home/End for first/last item, ArrowRight/Left for
|
|
21
|
+
expand/collapse + parent/child traversal, typeahead.
|
|
12
22
|
|
|
13
23
|
## Scale Limits
|
|
14
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxTreeView.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeView/HxTreeView.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC
|
|
1
|
+
{"version":3,"file":"HxTreeView.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeView/HxTreeView.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,eAAO,MAAM,UAAU;;EAQrB,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -6,8 +6,11 @@ export interface HxTreeViewProps {
|
|
|
6
6
|
className?: string;
|
|
7
7
|
/** Inline styles */
|
|
8
8
|
style?: React.CSSProperties;
|
|
9
|
-
/** Accessible label for the tree.
|
|
10
|
-
|
|
9
|
+
/** Accessible label for the tree. Used as a fallback when no
|
|
10
|
+
consumer-supplied `aria-label` / `aria-labelledby` is present on the
|
|
11
|
+
host. On the modern host-canonical path this projects onto
|
|
12
|
+
`internals.ariaLabel`; on the legacy fallback path it appears as
|
|
13
|
+
`aria-label` on the inner `[role="tree"]` element. */
|
|
11
14
|
label?: string;
|
|
12
15
|
/** Selection mode for the tree.
|
|
13
16
|
- `none` — items cannot be selected
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeView/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/HxTreeView/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,MAAM,WAAW,eAAe;IAC9B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B;;;;uDAImD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;kDAG8C;IAC9C,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAG3C,6DAA6D;IAC7D,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC"}
|
package/dist/index.js
CHANGED
|
@@ -60,7 +60,7 @@ import { H as H59 } from "./shared/HxProse-CVNyZuax.js";
|
|
|
60
60
|
import { H as H60 } from "./shared/HxRadio-YLIQfNL9.js";
|
|
61
61
|
import { H as H61 } from "./shared/HxRadioGroup-D0xVuMDM.js";
|
|
62
62
|
import { H as H62 } from "./shared/HxRating-Ba5zWXvJ.js";
|
|
63
|
-
import { H as H63 } from "./shared/HxSelect-
|
|
63
|
+
import { H as H63 } from "./shared/HxSelect-BAt_veRr.js";
|
|
64
64
|
import { H as H64 } from "./shared/HxSideNav-Bsna09yU.js";
|
|
65
65
|
import { H as H65 } from "./shared/HxSkeleton-CCMzx9TK.js";
|
|
66
66
|
import { H as H66 } from "./shared/HxSlider-BC8SGKvf.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxAccordionItem-C26EIvJG.js","sources":["../../src/components/HxAccordionItem/HxAccordionItem.ts"],"sourcesContent":["'use client';\n/**\n * React wrapper for <hx-accordion-item> web component.\n * Auto-generated by scripts/generate-react-wrappers.ts — DO NOT EDIT MANUALLY.\n * Re-run: pnpm --filter=@helixui/react run generate\n */\n\nimport React from 'react';\nimport { createComponent } from '@lit/react';\nimport { HelixAccordionItem } from '@helixui/library/components/hx-accordion';\n\nimport type { HxAccordionItemProps } from './types.js';\n\nexport type { HxAccordionItemProps };\n\n/**\n * An individual accordion item with collapsible content.\n *\n * @example\n * ```tsx\n * import { HxAccordionItem } from '@helixui/react';\n *\n * <HxAccordionItem />\n * ```\n */\nexport const HxAccordionItem = createComponent({\n tagName: 'hx-accordion-item',\n elementClass: HelixAccordionItem,\n react: React,\n events: {\n onHxExpand: 'hx-expand',\n onHxCollapse: 'hx-collapse',\n },\n displayName: 'HxAccordionItem',\n});\n\nexport default HxAccordionItem;\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HxAccordionItem-C26EIvJG.js","sources":["../../src/components/HxAccordionItem/HxAccordionItem.ts"],"sourcesContent":["'use client';\n/**\n * React wrapper for <hx-accordion-item> web component.\n * Auto-generated by scripts/generate-react-wrappers.ts — DO NOT EDIT MANUALLY.\n * Re-run: pnpm --filter=@helixui/react run generate\n */\n\nimport React from 'react';\nimport { createComponent } from '@lit/react';\nimport { HelixAccordionItem } from '@helixui/library/components/hx-accordion';\n\nimport type { HxAccordionItemProps } from './types.js';\n\nexport type { HxAccordionItemProps };\n\n/**\n * An individual accordion item with collapsible content.\n\n## Architecture Note: Slot Projection vs. Host-Canonical (group-4 round-1)\n\n`hx-accordion-item` deliberately does NOT participate in the\nhost-canonical / `internals.ariaLabelledByElements` pattern used by every\nother group-2/3/4 component. Rationale:\n\n 1. The trigger label comes from `<slot name=\"trigger\">` — consumer\n light-DOM projected directly into the `<summary>` element. AT reads\n the slot-projected text natively because slot projection preserves\n accessible name (the `<summary>` IS the heading and consumes the\n slotted text in its own accessible name computation).\n 2. `aria-labelledby=\"${_uid}-trigger\"` on the inner content region and\n `aria-controls=\"${_uid}-content\"` on the summary BOTH resolve\n same-shadow-root, which works correctly across every AT — these\n IDREFs never cross a shadow boundary.\n 3. Pushing these ids through `internals.ariaLabelledByElements` would\n either duplicate the wiring (heading announced twice) or break the\n native `<details>/<summary>` toggle semantics (the host carrying\n `role=\"heading\"` would shadow the summary's own heading projection).\n\n`role=\"heading\"` on `<summary>` (with `aria-level=N`) is the APG-canonical\nAccordion pattern. Per the APG note, `<summary>` MUST be a direct child\nof `<details>` for the native toggle to function — wrapping it in an\n`<h3>` would forfeit native disclosure. The role-on-summary approach is\nthe authoritative compromise. NVDA, JAWS, and VoiceOver all announce the\nsummary as a heading at the configured level when this pattern is used.\n\n`aria-controls` on the summary points at the shadow-internal content\nregion; APG marks the relationship as implicit via the heading + region\nstructure, so AT not following the IDREF still announces correctly. The\nIDREF is a hint, not a requirement — and because both ids are in the\nsame shadow root, it resolves cleanly when AT does follow it. This\nmatches the popover/dropdown intentional `aria-controls` omission for\nthe cross-shadow case (see those components' code comments).\n *\n * @example\n * ```tsx\n * import { HxAccordionItem } from '@helixui/react';\n *\n * <HxAccordionItem />\n * ```\n */\nexport const HxAccordionItem = createComponent({\n tagName: 'hx-accordion-item',\n elementClass: HelixAccordionItem,\n react: React,\n events: {\n onHxExpand: 'hx-expand',\n onHxCollapse: 'hx-collapse',\n },\n displayName: 'HxAccordionItem',\n});\n\nexport default HxAccordionItem;\n"],"names":[],"mappings":";;;AA4DO,MAAM,kBAAkB,gBAAgB;AAAA,EAC7C,SAAS;AAAA,EACT,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,IACN,YAAY;AAAA,IACZ,cAAc;AAAA,EAAA;AAAA,EAEhB,aAAa;AACf,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HxDialog-DMF3crTa.js","sources":["../../src/components/HxDialog/HxDialog.ts"],"sourcesContent":["'use client';\n/**\n * React wrapper for <hx-dialog> web component.\n * Auto-generated by scripts/generate-react-wrappers.ts — DO NOT EDIT MANUALLY.\n * Re-run: pnpm --filter=@helixui/react run generate\n */\n\nimport React from 'react';\nimport { createComponent } from '@lit/react';\nimport { HelixDialog } from '@helixui/library/components/hx-dialog';\n\nimport type { HxDialogProps } from './types.js';\n\nexport type { HxDialogProps };\n\n/**\n * A modal and non-modal dialog component built on the native HTML `<dialog>` element.\nProvides focus trapping, backdrop interaction, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.\n *\n * @example\n * ```tsx\n * import { HxDialog } from '@helixui/react';\n *\n * <HxDialog />\n * ```\n */\nexport const HxDialog = createComponent({\n tagName: 'hx-dialog',\n elementClass: HelixDialog,\n react: React,\n events: {\n onHxOpen: 'hx-open',\n onHxClose: 'hx-close',\n onHxCancel: 'hx-cancel',\n },\n displayName: 'HxDialog',\n});\n\nexport default HxDialog;\n"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"HxDialog-DMF3crTa.js","sources":["../../src/components/HxDialog/HxDialog.ts"],"sourcesContent":["'use client';\n/**\n * React wrapper for <hx-dialog> web component.\n * Auto-generated by scripts/generate-react-wrappers.ts — DO NOT EDIT MANUALLY.\n * Re-run: pnpm --filter=@helixui/react run generate\n */\n\nimport React from 'react';\nimport { createComponent } from '@lit/react';\nimport { HelixDialog } from '@helixui/library/components/hx-dialog';\n\nimport type { HxDialogProps } from './types.js';\n\nexport type { HxDialogProps };\n\n/**\n * A modal and non-modal dialog component built on the native HTML `<dialog>` element.\nProvides focus trapping, backdrop interaction, keyboard navigation, and full\nARIA labelling for enterprise healthcare accessibility requirements.\n\n## Architecture Note: Host-Canonical ARIA (group-4a round-1, Path A — native-dialog adaptation)\n\nUnlike `hx-drawer` (which uses an inner `<div role=\"dialog\">` and can fully\nhost-canonicalize the role), `hx-dialog` is built on the native\n`<dialog>` HTMLDialogElement. The native element has an **implicit\n`role=\"dialog\"`** baked in by the browser that **cannot be stripped**, so\nfull host-canonical role takeover would create nested-dialog announcements.\n\n**Path A (adopted):** the host owns label / description projection via\n`ElementInternals` (`internals.ariaLabelledByElements`,\n`internals.ariaDescribedByElements`, `internals.ariaLabel`) but **does NOT**\nset `internals.role`. The native inner `<dialog>` continues to be the\nannounced surface. Consumer light-DOM IDREFs project across the shadow\nboundary via `internals.aria*Elements` on the host.\n\n**Hybrid fallback (always-on belt-and-suspenders):** because some assistive\ntechnologies may walk the native `<dialog>` first and ignore host\n`internals.aria*Elements`, the resolved label / description text is **also**\nserialized into `aria-label` / `aria-describedby` on the inner native\n`<dialog>` element. Consumers therefore get name/description on every AT,\nwith the IDL-ref path providing live DOM-text-update tracking when the AT\nhonours it. This forfeits live-text tracking on the inner-dialog fallback\n(the serialized text is recomputed on every sync, which is good enough since\nmutation observers re-fire `_syncHostAriaSemantics` on consumer text edits).\n\nWhy we do NOT set `internals.role = 'alertdialog'` either: setting role on\nthe host while the native `<dialog>` keeps `role=\"dialog\"` would announce\nBOTH a host alertdialog AND an inner dialog. Instead, the alertdialog\nvariant continues to write `role=\"alertdialog\"` directly on the inner\n`<dialog>` element (the platform allows overriding the implicit `dialog`\nrole with the more specific `alertdialog`).\n\nNaming precedence (W3C AccName 1.2 §4.3.1):\n\n 1. Consumer `aria-labelledby` on the host — IDREFs resolved across the\n shadow boundary via `resolveIdrefTokens` (closest scope first, then\n ancestor shadow hosts, then owner document).\n 2. Consumer `aria-label` on the host.\n 3. `<slot name=\"header\">` text content (multi-node aggregation per\n AccName 1.2 §4.3.10 — decorative `aria-hidden` / `[hidden]` subtrees\n contribute zero to the name).\n 4. `heading` property — explicit author-provided heading text.\n 5. Hard-coded literal `\"Dialog\"` (last-resort accessible name).\n\nDescription channel: the host's `internals.ariaDescribedByElements` carries\nthe resolved IDREF chain on the modern path. The inner native `<dialog>` ALSO\nreceives a serialized `aria-describedby` chain — when a consumer description\nresolves, a synthesized in-shadow `<span id=\"${id}-consumer-desc\">` is\nappended to the existing `description` span (if any) and the inner\n`<dialog>`'s `aria-describedby` references both same-root ids. `aria-description`\nis intentionally NEVER written — W3C AccName ignores it whenever\n`aria-describedby` is also present.\n\nSlot mutation observers track:\n 1. The header slot's text content (in-place i18n re-renders).\n 2. Consumer-resolved external IDREF targets (so a consumer mutating\n `<label id=\"x\">Patient</label>` in place re-flows the name).\n 3. Host attribute mutations (delegated to `installAriaIdrefMirror`,\n which also catches late-inserted IDREF targets and id renames in\n every relevant root).\n 4. Authentic consumer `aria-describedby` retraction (oldValue !== null &&\n newValue === null) via a dedicated `attributeOldValue: true` observer.\n\n**First-paint slot state seeding intentionally omitted:** seeding\n`_hasHeaderSlot` / `_headerSlotText` from `firstUpdated()` would schedule an\nextra Lit re-render that subtly reorders the open-dialog promise chain\n(`updateComplete.then(...) → showModal() → updateComplete.then(...) →\nfocus first focusable`). On Chromium, that reordering interleaves the\nnative dialog's modal activation with the focus-restore step and causes\nfocus-trap test failures. The slotchange handler runs one microtask later\nand `_syncHostAriaSemantics()` from `updated()` picks up the resolved state\non the next paint — close enough that AT never observes the unnamed window.\nMirrors the same intentional decision documented in hx-drawer round-1.\n\nFocus trap, ESC dismiss with `hx-cancel` BEFORE `hx-close`, focus-restore\nvia `_triggerElement`, and native `showModal()` semantics are unchanged\nfrom the pre-host-canonical implementation.\n *\n * @example\n * ```tsx\n * import { HxDialog } from '@helixui/react';\n *\n * <HxDialog />\n * ```\n */\nexport const HxDialog = createComponent({\n tagName: 'hx-dialog',\n elementClass: HelixDialog,\n react: React,\n events: {\n onHxOpen: 'hx-open',\n onHxClose: 'hx-close',\n onHxCancel: 'hx-cancel',\n },\n displayName: 'HxDialog',\n});\n\nexport default HxDialog;\n"],"names":[],"mappings":";;;AAyGO,MAAM,WAAW,gBAAgB;AAAA,EACtC,SAAS;AAAA,EACT,cAAc;AAAA,EACd,OAAO;AAAA,EACP,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,EAAA;AAAA,EAEd,aAAa;AACf,CAAC;"}
|