inclusive-elements 0.6.0 → 0.6.1
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/CHANGELOG.md +10 -1
- package/dist/index.js +13 -5
- package/dist/types/menu/menu.d.ts +2 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
### [0.6.1](https://github.com/tobyzerner/inclusive-elements/compare/v0.6.0...v0.6.1) (2026-03-23)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Bug Fixes
|
|
7
|
+
|
|
8
|
+
* **demo:** hide reactions menu ([df0afa8](https://github.com/tobyzerner/inclusive-elements/commit/df0afa896688cf342f7c3d7808296f881aaaa1a7))
|
|
9
|
+
* **menu:** return focus to root trigger on Escape and Tab ([9c9b28a](https://github.com/tobyzerner/inclusive-elements/commit/9c9b28ae181f42efd76abc10809ac1f4a7a6c9e6))
|
|
10
|
+
* **tabs:** prevent attribute observer loop ([48e2043](https://github.com/tobyzerner/inclusive-elements/commit/48e2043350267b3fc7aa7b649b235d74d25cbc07))
|
|
11
|
+
|
|
3
12
|
## [0.6.0](https://github.com/tobyzerner/inclusive-elements/compare/v0.5.5...v0.6.0) (2026-03-23)
|
|
4
13
|
|
|
5
14
|
### Overview
|
|
@@ -355,4 +364,4 @@ The runtime surface is now centered on `ui-alerts`, `ui-menu`, `ui-tabs`, `ui-to
|
|
|
355
364
|
[0.1.0-beta.5]: https://github.com/tobyzerner/inclusive-elements/compare/v0.1.0-beta.4...v0.1.0-beta.5
|
|
356
365
|
[0.1.0-beta.4]: https://github.com/tobyzerner/inclusive-elements/compare/v0.1.0-beta.3...v0.1.0-beta.4
|
|
357
366
|
[0.1.0-beta.3]: https://github.com/tobyzerner/inclusive-elements/compare/v0.1.0-beta.2...v0.1.0-beta.3
|
|
358
|
-
[0.1.0-beta.2]: https://github.com/tobyzerner/inclusive-elements/compare/v0.1.0-beta.1...v0.1.0-beta.2
|
|
367
|
+
[0.1.0-beta.2]: https://github.com/tobyzerner/inclusive-elements/compare/v0.1.0-beta.1...v0.1.0-beta.2
|
package/dist/index.js
CHANGED
|
@@ -405,11 +405,11 @@ var I = class e extends HTMLElement {
|
|
|
405
405
|
onKeyDown = (e) => {
|
|
406
406
|
if (!this.isActive()) return;
|
|
407
407
|
if (e.key === "Tab") {
|
|
408
|
-
this.closeMenuTree();
|
|
408
|
+
this.closeMenuTree(), this.focusRootMenuTrigger();
|
|
409
409
|
return;
|
|
410
410
|
}
|
|
411
411
|
if (e.key === "Escape") {
|
|
412
|
-
e.preventDefault(), this.closeMenuTree();
|
|
412
|
+
e.preventDefault(), this.closeMenuTree(), this.focusRootMenuTrigger();
|
|
413
413
|
return;
|
|
414
414
|
}
|
|
415
415
|
let t = this.getEnabledItems(), n = this.getActiveItem(t), r = n ? t.indexOf(n) : -1;
|
|
@@ -531,6 +531,13 @@ var I = class e extends HTMLElement {
|
|
|
531
531
|
closeMenuTree() {
|
|
532
532
|
this.closeSelfAndDescendants(), this.getParentMenu()?.closeMenuTree();
|
|
533
533
|
}
|
|
534
|
+
focusRootMenuTrigger() {
|
|
535
|
+
this.getRootMenuTrigger()?.focus({ preventScroll: !0 });
|
|
536
|
+
}
|
|
537
|
+
getRootMenuTrigger() {
|
|
538
|
+
let e = this.getParentMenu();
|
|
539
|
+
return e ? e.getRootMenuTrigger() : this.getTriggers()[0] || null;
|
|
540
|
+
}
|
|
534
541
|
handleTypeahead(e, t, n) {
|
|
535
542
|
if (e.key === " " || e.key.length > 1 || e.ctrlKey || e.metaKey || e.altKey || !t.length) return;
|
|
536
543
|
e.preventDefault();
|
|
@@ -733,7 +740,7 @@ var I = class e extends HTMLElement {
|
|
|
733
740
|
subtree: !0,
|
|
734
741
|
childList: !0,
|
|
735
742
|
attributes: !0,
|
|
736
|
-
attributeFilter: ["role", "
|
|
743
|
+
attributeFilter: ["role", "aria-selected"]
|
|
737
744
|
}, () => this.syncStructure()), this.structureSync.observe(), this.structureSync.queue();
|
|
738
745
|
}
|
|
739
746
|
disconnectedCallback() {
|
|
@@ -798,11 +805,12 @@ var I = class e extends HTMLElement {
|
|
|
798
805
|
let a = this.getSelectedIndex(e);
|
|
799
806
|
return e.forEach(({ tab: e, panel: n }, i) => {
|
|
800
807
|
let a = i === t;
|
|
801
|
-
e.setAttribute("aria-selected", String(a)), a ? (e.removeAttribute("tabindex"), n.hidden = !1, r && e.focus()) : (e.setAttribute("tabindex", "-1"), n.hidden = !0), this.syncPanelTabindex(n, a);
|
|
808
|
+
e.getAttribute("aria-selected") !== String(a) && e.setAttribute("aria-selected", String(a)), a ? (e.removeAttribute("tabindex"), n.hidden = !1, r && e.focus()) : (e.setAttribute("tabindex", "-1"), n.hidden = !0), this.syncPanelTabindex(n, a);
|
|
802
809
|
}), i && a !== t && this.dispatchEvent(new Event("change")), a !== t;
|
|
803
810
|
}
|
|
804
811
|
syncPanelTabindex(e, t) {
|
|
805
|
-
|
|
812
|
+
let n = me(e).filter((t) => t !== e);
|
|
813
|
+
if (t && !this.hasAuthorManagedTabindex(e) && n.length === 0) {
|
|
806
814
|
e.setAttribute("tabindex", "0"), this.managedPanelTabindex.add(e);
|
|
807
815
|
return;
|
|
808
816
|
}
|
|
@@ -32,6 +32,8 @@ export default class MenuElement extends HTMLElement {
|
|
|
32
32
|
private closeSubmenus;
|
|
33
33
|
private closeSelfAndDescendants;
|
|
34
34
|
private closeMenuTree;
|
|
35
|
+
private focusRootMenuTrigger;
|
|
36
|
+
private getRootMenuTrigger;
|
|
35
37
|
private handleTypeahead;
|
|
36
38
|
private updateTypeaheadSearch;
|
|
37
39
|
private findTypeaheadMatch;
|
package/package.json
CHANGED