aria-ease 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +2 -3
  2. package/dist/Types.d-p85gN5m_.d.cts +22 -0
  3. package/dist/Types.d-p85gN5m_.d.ts +22 -0
  4. package/dist/chunk-4366LRNM.js +38 -0
  5. package/dist/chunk-4366LRNM.js.map +1 -0
  6. package/dist/chunk-4WO5XJ5K.js +58 -0
  7. package/dist/chunk-4WO5XJ5K.js.map +1 -0
  8. package/dist/chunk-5HQ6LLC5.js +21 -0
  9. package/dist/chunk-5HQ6LLC5.js.map +1 -0
  10. package/dist/chunk-FBQ5LF2T.js +21 -0
  11. package/dist/chunk-FBQ5LF2T.js.map +1 -0
  12. package/dist/chunk-KGYGCX67.js +18 -0
  13. package/dist/chunk-KGYGCX67.js.map +1 -0
  14. package/dist/chunk-KVTLMA4J.js +58 -0
  15. package/dist/chunk-KVTLMA4J.js.map +1 -0
  16. package/dist/chunk-MEA5U2G4.js +24 -0
  17. package/dist/chunk-MEA5U2G4.js.map +1 -0
  18. package/dist/chunk-RK3JUAFZ.js +18 -0
  19. package/dist/chunk-RK3JUAFZ.js.map +1 -0
  20. package/dist/chunk-RT5IROW4.js +99 -0
  21. package/dist/chunk-RT5IROW4.js.map +1 -0
  22. package/dist/index.cjs +6 -55
  23. package/dist/index.cjs.map +1 -1
  24. package/dist/index.d.cts +7 -115
  25. package/dist/index.d.ts +7 -115
  26. package/dist/index.js +7 -313
  27. package/dist/index.js.map +1 -1
  28. package/dist/src/accordion/index.cjs +25 -0
  29. package/dist/src/accordion/index.cjs.map +1 -0
  30. package/dist/src/accordion/index.d.cts +13 -0
  31. package/dist/src/accordion/index.d.ts +13 -0
  32. package/dist/src/accordion/index.js +2 -0
  33. package/dist/src/accordion/index.js.map +1 -0
  34. package/dist/src/block/index.cjs +121 -0
  35. package/dist/src/block/index.cjs.map +1 -0
  36. package/dist/src/block/index.d.cts +8 -0
  37. package/dist/src/block/index.d.ts +8 -0
  38. package/dist/src/block/index.js +3 -0
  39. package/dist/src/block/index.js.map +1 -0
  40. package/dist/src/checkbox/index.cjs +19 -0
  41. package/dist/src/checkbox/index.cjs.map +1 -0
  42. package/dist/src/checkbox/index.d.cts +13 -0
  43. package/dist/src/checkbox/index.d.ts +13 -0
  44. package/dist/src/checkbox/index.js +2 -0
  45. package/dist/src/checkbox/index.js.map +1 -0
  46. package/dist/src/menu/index.cjs +155 -0
  47. package/dist/src/menu/index.cjs.map +1 -0
  48. package/dist/src/menu/index.d.cts +17 -0
  49. package/dist/src/menu/index.d.ts +17 -0
  50. package/dist/src/menu/index.js +3 -0
  51. package/dist/src/menu/index.js.map +1 -0
  52. package/dist/src/radio/index.cjs +22 -0
  53. package/dist/src/radio/index.cjs.map +1 -0
  54. package/dist/src/radio/index.d.cts +13 -0
  55. package/dist/src/radio/index.d.ts +13 -0
  56. package/dist/src/radio/index.js +2 -0
  57. package/dist/src/radio/index.js.map +1 -0
  58. package/dist/src/toggle/index.cjs +22 -0
  59. package/dist/src/toggle/index.cjs.map +1 -0
  60. package/dist/src/toggle/index.d.cts +13 -0
  61. package/dist/src/toggle/index.d.ts +13 -0
  62. package/dist/src/toggle/index.js +2 -0
  63. package/dist/src/toggle/index.js.map +1 -0
  64. package/package.json +26 -2
  65. package/dist/index.d.mts +0 -140
  66. package/dist/index.mjs +0 -110
  67. package/dist/index.mjs.map +0 -1
@@ -0,0 +1,13 @@
1
+ import { C as CheckboxStates } from '../../Types.d-p85gN5m_.cjs';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to multiple checkboxes. Updates the aria attributes of the checkboxes. Checkbox elements must possess the following aria attributes; aria-checked and aria-label.
5
+ * @param {string} checkboxId The id of the checkbox parent container.
6
+ * @param {string} checkboxesClass The shared class of all the checkboxes.
7
+ * @param {CheckboxStates[]} checkboxStates Array of objects containing checkboxes state information.
8
+ * @param {number} currentPressedCheckboxIndex Index of the currently checked or unchecked checkbox.
9
+ */
10
+
11
+ declare function updateCheckboxAriaAttributes(checkboxId: string, checkboxesClass: string, checkboxStates: CheckboxStates[], currentPressedCheckboxIndex: number): void;
12
+
13
+ export { updateCheckboxAriaAttributes };
@@ -0,0 +1,13 @@
1
+ import { C as CheckboxStates } from '../../Types.d-p85gN5m_.js';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to multiple checkboxes. Updates the aria attributes of the checkboxes. Checkbox elements must possess the following aria attributes; aria-checked and aria-label.
5
+ * @param {string} checkboxId The id of the checkbox parent container.
6
+ * @param {string} checkboxesClass The shared class of all the checkboxes.
7
+ * @param {CheckboxStates[]} checkboxStates Array of objects containing checkboxes state information.
8
+ * @param {number} currentPressedCheckboxIndex Index of the currently checked or unchecked checkbox.
9
+ */
10
+
11
+ declare function updateCheckboxAriaAttributes(checkboxId: string, checkboxesClass: string, checkboxStates: CheckboxStates[], currentPressedCheckboxIndex: number): void;
12
+
13
+ export { updateCheckboxAriaAttributes };
@@ -0,0 +1,2 @@
1
+ export { updateCheckboxAriaAttributes } from '../../chunk-RK3JUAFZ.js'; //# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/checkbox/index.js"],"names":["updateCheckboxAriaAttributes"],"mappings":"AAAA,SAASA,4BAA4B,QAAQ,0BAA0B,CACvE,iCAAiC","sourcesContent":["export { updateCheckboxAriaAttributes } from '../../chunk-KGYGCX67.js';\n//# sourceMappingURL=index.js.map\n"]}
@@ -0,0 +1,155 @@
1
+ 'use strict';
2
+ // src/utils/handleKeyPress/handleKeyPress.ts
3
+ function isTextInput(el) {
4
+ if (el.tagName !== "INPUT") return false;
5
+ var type = el.type;
6
+ return [
7
+ "text",
8
+ "email",
9
+ "password",
10
+ "tel",
11
+ "number"
12
+ ].includes(type);
13
+ }
14
+ function isTextArea(el) {
15
+ return el.tagName === "TEXTAREA";
16
+ }
17
+ function isNativeButton(el) {
18
+ return el.tagName === "BUTTON" || el.tagName === "INPUT" && [
19
+ "button",
20
+ "submit",
21
+ "reset"
22
+ ].includes(el.type);
23
+ }
24
+ function isLink(el) {
25
+ return el.tagName === "A";
26
+ }
27
+ function moveFocus(elementItems, currentIndex, direction) {
28
+ var len = elementItems.length;
29
+ var nextIndex = (currentIndex + direction + len) % len;
30
+ elementItems.item(nextIndex).focus();
31
+ }
32
+ function isClickableButNotSemantic(el) {
33
+ return el.getAttribute("data-custom-click") !== null || el.getAttribute("data-custom-click") !== void 0;
34
+ }
35
+ function handleMenuEscapeKeyPress(menuElement, menuTriggerButton) {
36
+ menuElement.style.display = "none";
37
+ var menuTriggerButtonId = menuTriggerButton.getAttribute("id");
38
+ if (!menuTriggerButtonId) {
39
+ throw new Error("Menu trigger button does not have id attribute");
40
+ }
41
+ menuTriggerButton.setAttribute("aria-expanded", "false");
42
+ }
43
+ function handleKeyPress(event, elementItems, elementItemIndex, menuElementDiv, triggerButton) {
44
+ var currentEl = elementItems.item(elementItemIndex);
45
+ switch(event.key){
46
+ case "ArrowUp":
47
+ case "ArrowLeft":
48
+ {
49
+ if (!isTextInput(currentEl) && !isTextArea(currentEl)) {
50
+ event.preventDefault();
51
+ moveFocus(elementItems, elementItemIndex, -1);
52
+ } else if (isTextInput(currentEl) || isTextArea(currentEl)) {
53
+ var cursorStart = currentEl.selectionStart;
54
+ if (cursorStart === 0) {
55
+ event.preventDefault();
56
+ moveFocus(elementItems, elementItemIndex, -1);
57
+ }
58
+ }
59
+ break;
60
+ }
61
+ case "ArrowDown":
62
+ case "ArrowRight":
63
+ {
64
+ if (!isTextInput(currentEl) && !isTextArea(currentEl)) {
65
+ event.preventDefault();
66
+ moveFocus(elementItems, elementItemIndex, 1);
67
+ } else if (isTextInput(currentEl) || isTextArea(currentEl)) {
68
+ var value = currentEl.value;
69
+ var cursorEnd = currentEl.selectionStart;
70
+ if (cursorEnd === value.length) {
71
+ event.preventDefault();
72
+ moveFocus(elementItems, elementItemIndex, 1);
73
+ }
74
+ }
75
+ break;
76
+ }
77
+ case "Escape":
78
+ {
79
+ event.preventDefault();
80
+ if (menuElementDiv && triggerButton) {
81
+ if (getComputedStyle(menuElementDiv).display === "block") {
82
+ handleMenuEscapeKeyPress(menuElementDiv, triggerButton);
83
+ }
84
+ triggerButton.focus();
85
+ }
86
+ break;
87
+ }
88
+ case "Enter":
89
+ case " ":
90
+ {
91
+ if (!isNativeButton(currentEl) && !isLink(currentEl) && isClickableButNotSemantic(currentEl)) {
92
+ event.preventDefault();
93
+ currentEl.click();
94
+ }
95
+ break;
96
+ }
97
+ }
98
+ }
99
+ // src/menu/src/makeMenuAccessible/makeMenuAccessible.ts
100
+ function makeMenuAccessible(param) {
101
+ var menuId = param.menuId, menuElementsClass = param.menuElementsClass, triggerId = param.triggerId;
102
+ var menuDiv = document.querySelector("#".concat(menuId));
103
+ if (!menuDiv) throw new Error("Invalid menu div id provided");
104
+ var triggerButton = document.querySelector("#".concat(triggerId));
105
+ if (!triggerButton) throw new Error("Invalid trigger button id provided");
106
+ var handlerMap = /* @__PURE__ */ new Map();
107
+ function setAria(isOpen) {
108
+ triggerButton.setAttribute("aria-expanded", isOpen ? "true" : "false");
109
+ }
110
+ function addListeners() {
111
+ var menuItems = menuDiv.querySelectorAll(".".concat(menuElementsClass));
112
+ menuItems.forEach(function(menuItem, index) {
113
+ if (!handlerMap.has(menuItem)) {
114
+ var handler = function(event) {
115
+ return handleKeyPress(event, menuItems, index, menuDiv, triggerButton);
116
+ };
117
+ menuItem.addEventListener("keydown", handler);
118
+ handlerMap.set(menuItem, handler);
119
+ }
120
+ });
121
+ }
122
+ function removeListeners() {
123
+ var menuItems = menuDiv.querySelectorAll(".".concat(menuElementsClass));
124
+ menuItems.forEach(function(menuItem) {
125
+ var handler = handlerMap.get(menuItem);
126
+ if (handler) {
127
+ menuItem.removeEventListener("keydown", handler);
128
+ handlerMap.delete(menuItem);
129
+ }
130
+ });
131
+ }
132
+ function openMenu() {
133
+ menuDiv.style.display = "block";
134
+ setAria(true);
135
+ addListeners();
136
+ var menuItems = menuDiv.querySelectorAll(".".concat(menuElementsClass));
137
+ if (menuItems.length > 0) menuItems[0].focus();
138
+ }
139
+ function closeMenu() {
140
+ removeListeners();
141
+ menuDiv.style.display = "none";
142
+ setAria(false);
143
+ triggerButton.focus();
144
+ }
145
+ function cleanup() {
146
+ removeListeners();
147
+ }
148
+ return {
149
+ openMenu: openMenu,
150
+ closeMenu: closeMenu,
151
+ cleanup: cleanup
152
+ };
153
+ }
154
+ exports.makeMenuAccessible = makeMenuAccessible; //# sourceMappingURL=index.cjs.map
155
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/menu/index.cjs","../../../src/utils/handleKeyPress/handleKeyPress.ts"],"names":["includes","type","isTextArea","el","tagName","isNativeButton","isLink","moveFocus","elementItems","currentIndex","direction","len","length","nextIndex","item","focus","isClickableButNotSemantic","getAttribute","handleMenuEscapeKeyPress","menuElement","menuTriggerButton","style","display","menuTriggerButtonId","Error","setAttribute","handleKeyPress","event","elementItemIndex","menuElementDiv","triggerButton","currentEl","key","isTextInput","preventDefault","cursorStart","selectionStart","value","cursorEnd","getComputedStyle","click"],"mappings":"AAAA;QCMI,CAAA,CAAA,CAAA,EAAO,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,OAAA,MAAA;YAAC,CAAA,IAAA,CAAA,EAAA,CAAA,EAAA,CAAA,QAAA,OAAA;YAAA,CAAA,IAAA,CAAA,EAAA,GAAA,CAAA,QAAA,OAAA;UAAA,CAAA,IAAA,GAAA,IAAA;UAAA,CAAA;QAAA;QAAA;QAAA;QAAA;QAAA;KAAA,CAAA,QAAA,CAAA;QAAA;QAAA,CAAA,WAAA,EAAA;UAAA,CAAA,GAAA,OAAA,KAAA;QAAA;KAAA,CAAA,GAAA,KAAA,CAAA,SAAA,EAAA;UAAA,CAAA,GAAA,OAAA,KAAA,YAAA,GAAA,OAAA,KAAA,WAAA;QAAA;QAAA;QAAA;KAAA,CAAA,QAAA,CAAA,GAAA,IAAA;QAAA,CAAA,WAAA,EAAA;UAAA,CAAA,GAAA,EAAA,EAAA,GAAA,KAAA;UAAA,CAAA,GAAA,OAAA,KAAA;KAAA,CAAA,GAAA,KAAA,CAAA,SAAA,EAAA;UAAA,CAAA,GAAA,KAAA,EAAA,KAAA,KAAA,EAAA,KAAA,GAAA,IAAA,EAAA,CAAA,KAAA,GAAA,QAAA;QAAA,MAAA,aAAA,MAAA;QAAA,YAAA,CAAA,eAAA,YAAA,GAAA,IAAA;UAAA,OAAA,IAAA,CAAA,WAAA,KAAA;KAAA,CAAA,QAAA,CAAA,GAAA,IAAA;QAAA,CAAA,WAAA,EAAA,aAAA,EAAA;YAAA,CAAA,CAAA,EAAA,EAAA,EAAA,GAAA,GAAA,CAAA,CAAA,wBAAA,QAAA,GAAA,YAAA,CAAA,yBAAA,KAAA;UAAA,CAAA,GAAA,OAAA,KAAA;KAAA,CAAA,GAAA,KAAA,CAAA,SAAA,EAAA,QAAA,WAAA,EAAA,iBAAA;YAAQ,CAAA,GAAA,KAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,EAAA,KAAA,GAAA,IAAA,EAAA,CAAA,KAAA,GAAA,QAAA;QAAA,MAAA,aAAA,GAAA,GAAA,eAAA,YAAA,CAAA;UAAA,YAAA,CAAA,OAAA,QAAA,YAAA,GAAA,IAAA;cAAA,IAAA,GAAA,GAAA,CAAA,CAAA,WAAA,KAAA;OAAA,CAAA,QAAA,CAAA,GAAA,IAAA;UAAS,CAAA,WAAA,EAAA,UAAA,CAAA,EAAA,EAAA,aAAA;YAAY,CAAA,CAAA,EAAA,EAAA,EAAA,GAAA,GAAA,CAAA,CAAA,wBAAA,QAAA,GAAA,YAAA,CAAA,yBAAA,KAAA;UAAO,CAAA,GAAA,OAAA,GAAA,EAAA,GAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,cAAA,EAAA,aAAA;OAAQ,CAAEA,CAAAA,KAAA,CAASC,KAAAA,IAAAA,EAAAA,OAAAA,CAAAA,GAAAA,CAAAA,OAAAA,EAAAA,iBAAAA;QACnE,GAAA,CAAA,EAAA,GAAA,GAAA,EAAA,CAAA,CAAA,KAAA,CAAA,GAAA,CAAA,EAAA,KAAA,GAAA,IAAA,EAAA,CAAA,KAAA,GAAA,QAAA;YAAA,CAAA,KAAA,aAAA,GAAA,GAAA,eAAA,YAAA,CAAA;cAAA;YAAA,CAAA,OAAA,QAAA,YAAA,GAAA,IAAA;wBAAA,IAAA,GAAA,EAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IAAA,OAAA,YAAA;oBAAA,MAAA,EAAA,CAAA,GAAA,IAAA,IAAA;oBAEA,GAASC,OAAAA,IAAWC,EAAA,QAAA,EAAA,CAAA,EAAA,EAAA,WAAA,CAAA,CAAA;gBAChB,KAAA,EAAOA,CAAAA,EAAGC,CAAAA,CAAAA,EAAAA,GAAA,GAAA,CAAA,CAAY,CAAA,cAAA,SAAA,EAAA,MAAA,GAAA,GAAA,SAAA,CAAA,yBAAA,KAAA;oBAC1B,CAAA,EAAA,CAAA,OAAA,GAAA,EAAA,EAAA,CAAA,EAAA,OAAA,KAAA,EAAA,OAAA,SAAA,EAAA,cAAA,EAAA,aAAA;oBAEO,CAASC,GAAAA,QAAAA,IAAeF,EAAA,EAAA,GAAA,EAAA,CAAA,GAAA,CAAA,OAAA,EAAA,iBAAA;wBAC3B,CAAA,CAAA,EAAOA,EAAAA,CAAGC,GAAAA,EAAAA,CAAAA,CAAA,KAAY,CAAA,GAAA,CAAA,EAAA,KAAaD,GAAGC,IAAAA,EAAAA,CAAA,KAAY,GAAA,QAAW;0BAAC,CAAA,KAAA,EAAA,WAAA,GAAA,GAAA,eAAA,CAAA,WAAA,CAAA;0BAAU;sBAAA,CAAA,OAAA,QAAA,YAAA,GAAA,IAAA;kCAAU,IAAA,GAAA,EAAA,CAAA,CAAA,CAAA,WAAA,CAAA,IAAA,OAAA,YAAA;4BAASJ,MAAAA,EAAA,CAAUG,GAAwBF,IAAI,IAAA;wBACrI,GAAA,OAAA,IAAA,UAAA,EAAA,CAAA,EAAA,EAAA,WAAA,CAAA,CAAA;oBAEO,KAASK;YAAAA,CAAAA,GAAAA,CAAOH,EAAA,MAAA,CAAA,EAAA,cAAA,SAAA,EAAA,MAAA,GAAA,GAAA,SAAA,CAAA,yBAAA,KAAA;8BACnB,CAAA,EAAOA,CAAGC,OAAA,GAAA,EAAY,CAAA,CAAA,CAAA,EAAA,OAAA,CAAA,IAAA,EAAA,MAAA,CAAA,SAAA,EAAA,cAAA,EAAA,aAAA;gCAC1B,CAAA,GAAA,IAAA,IAAA,QAAA,GAAA,EAAA,CAAA,GAAA,CAAA,OAAA,EAAA,iBAAA;oCAEA,CAAA,CAASG,IAAAA,CAAAA,CAAAA,EAAAA,EAAUC,CAAAA,OAAAA,GAAAA,CAAA,EAAqCC,YAAA,EAAsBC,SAAA;kCAC1E,EAAMC,CAAAA,EAAAA,GAAMH,EAAAA,SAAAA,EAAaI,GAAAA,GAAA,GAAA,YAAA,CAAA,WAAA,CAAA;gCACzB,EAAA,CAAA,CAAMC,MAAAA,KAAAA;gCAAaJ,CAAAA,GAAAA,IAAAA,MAAAA,EAAeC,YAAYC,GAAA,IAAOA;wCACrDH,EAAAA,CAAAA,CAAAA,EAAAA,IAAAA,EAAAA,CAAaM,EAAAA,CAAAA,CAAA,CAAKD,WAAWE,CAAAA,IAAA,OAAA,YAAA;0CACjC,EAAA,IAAA,cAAA;sCAEA,GAASC,OAAAA,IAAAA,UAAAA,EAAAA,CAAAA,CAAAA,CAA0Bb,EAAA,WAAA,CAAA,CAAA;gCAC/B,KAAOA;sBAAAA,CAAGc,GAAAA,SAAA,CAAa,EAAA,cAAA,SAAyB,EAAA,MAAQd,GAAGc,GAAAA,SAAA,CAAa,yBAAyB,KAAA;wCACrG,CAAA,EAAA,CAAA,UAAA,GAAA,CAAA,CAAA,EAAA,OAAA,CAAA,IAAA,EAAA,MAAA,CAAA,SAAA,EAAA,cAAA,EAAA,aAAA;wCAEA,CAASC,GAAAA,IAAAA,IAAAA,QAAAA,GAAAA,EAAAA,CAAyBC,GAAAA,CAAAA,OAAA,EAA0BC,iBAAA;;6BACxDD,CAAAA,KAAAA,CAAYE,CAAAA,EAAAA,EAAA,CAAMC,OAAA,GAAU,GAAA;4CAC5B,EAAMC,CAAAA,EAAAA,KAAAA,SAAAA,KAAsBH,MAAAA,YAAkBH,CAAAA,WAAA,CAAa;wCAC3D,EAAA,EAAI,CAACM,OAAAA,CAAAA,IAAAA;4CAAAA,IAAAA,IAAqB,KAAA,CAAA,MAAA,KAAA,GAAA,MAAA;sDACtB,EAAA,CAAA,CAAA,EAAM,IAAIC,CAAAA,CAAAA,GAAAA,CAAM,aAAA,CAAA,WAAA,YAAA;sDACpB,EAAA,IAAA,cAAA;kDACAJ,UAAAA,IAAkBK,UAAAA,EAAA,CAAa,CAAA,cAAA,CAAA,CAAiB;0CACpD;gCAAA,IAAA,YAAA,cAAA,WAAA,YAAA;gDAEO,CAASC,EAAAA,CAAAA,UACZC,GAAAA,CAAAA,CAAA,EACAnB,OAAAA,CAAAA,IAAA,EACAoB,MAAAA,CAAAA,SAAA,EACAC,cAAA,EACAC,aAAA;4CAEMC,IAAAA,IAAAA,IAAYvB,QAAAA,GAAAA,EAAaM,IAAA,CAAKc;;;uCACpC,CAAQD,KAAAA,CAAMK,CAAAA,EAAA,CAAA,CAAA,OAAA,CAAA,MAAA,OAAA,0BAAA,YAAA;wDACV,GAAK,EAAA,KAAA,SAAA,KAAA,MAAA,YAAA,CAAA;oDACL,EAAA,GAAK,OAAA,CAAA,IAAA;sDAAa,IAAA,SAAA,CAAA,MAAA,KAAA,GAAA,MAAA;8DACd,IAAI,CAACC,CAAAA,MAAAA,CAAAA,CAAAA,GAAYF,cAAc,CAAC7B,WAAW6B,YAAY;8DACnDJ,EAAAA,IAAMO,cAAA;oDACN3B,UAAUC,cAAcoB,IAAAA,cAAkB,CAAA;0CAC9C;gDACI,GAAA,CAAMO,IAAAA,SAAAA,CAAeJ,UAAqDK,CAAAA,YAAAA,CAAA;iCACnD;+DAAvB,IAAID,IAAAA,KAAAA,kBAAAA,OAAgB,GAAG;;;uCACnBR,MAAMO,CAAAA,CAAAA,EAAAA,EAAA,IAAA,GAAAA,IAAA,GAAAA,CAAA,sBAAA,YAAA;0DACN3B,KAAAA,KAAUC,SAAAA,KAAcoB,MAAAA,YAAkB,CAAA;oDAC9C,EAAA,UAAA,CAAA,IAAA;kDACJ,GAAA,OAAA,SAAA,CAAA,MAAA,KAAA,GAAA,MAAA;wDACA,KAAA,EAAA,GAAA,IAAA,EAAA,MAAA,CAAA,CAAA;gDACJ,IAAA,cAAA;wCACA,GAAK,OAAA,cAAA,kBAAA;gCACL,KAAK,WAAA,CAAA,IAAA,OAAA;8CACD,IAAI,CAACK,YAAYF,KAAAA,SAAc,CAAC7B,WAAW6B,YAAY;uCAC7C,IAAA;uCAANJ;2BAAAA,eAAAA,OAAMO,WAAAA,GAAA,IAAA,CAAA,QAAA,UAAA;;;;6BACN3B,CAAAA,SAAUC,GAAAA,UAAAA,CAAcoB,EAAAA,EAAAA,IAAkB,GAAlBA,IAAkB,GAAlBA,uBAAkB,YAAA;4CAC9C,EAAA,KAAA,GAAA,CAAWK,YAAYF,cAAc7B,WAAW6B,YAAY;4CACxD,IAAMM,IAAAA,IAASN,UAAqDM,CAAAA,IAAA;8CACpE,IAAMC,KAAAA,OAAaP,SAAAA,CAAqDK,MAAAA,KAAAA,GAAA,MAAA;iDACxE,IAAkBC,CAAAA,EAAMzB,IAAxB,CAAI0B,CAAoB,CAAA,CAAQ,MAA5BA,EAAAA,GAAcD;0DACdV,MAAMO,cAAA;4CACN3B,GAAAA,OAAUC,cAAcoB,kBAAkB;sCAC9C,gBAAA,CAAA,IAAA,OAAA;4CAEJ,CAAA,QAAA,GAAA,oBAAA;8BACJ,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,KAAA,IAAA;sBAAA,IAAA,GAAA,MAAA,CAAA,SAAA,MAAA;+BAAA,eAAA,CAAA,MAAA,WAAA,OAAA,CAAA,QAAA,IAAA,MAAA;;sBACA,CAAA,IAAK,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,IAAA,OAAA;0BAAA,GAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,IAAA,KAAA,CAAA;gCAAU,EAAA,SAAA,GAAA,UAAA,CAAA,EAAA,EAAA,OAAA,IAAA,GAAA,uBAAA,YAAA;sCACXD,IAAAA,EAAMO,IAAAA,EAAAA,QAAA;gCACN,EAAA,EAAIL,EAAAA,CAAAA,EAAAA,IAAAA,GAAAA,CAAAA,IAAiC,OAAjCA,CAAkBC,eAAe;sCACjC,IAAIS,CAAAA,CAAAA,EAAAA,CAAAA,KAAAA,OAAiBV,gBAAgBP,OAAA,KAAY,SAAS;0CACtDJ,QAAAA,CAAAA,IAAyBW,CAAAA,MAAzBX,CAAAA,EAAyCY,OAAzCZ,EAAyBW;4CAC7B;gCACAC,SAAAA,GAAAA,CAAAA,CAAcf,KAAA;4BAClB,CAAA,GAAA,EAAA,QAAA,gBAAA,CAAA,IAAA,OAAA;4BAEJ,CAAA,CAAA,OAAA,CAAA,SAAA,CAAA,CAAA,QAAA,GAAA,oBAAA;0BACA,CAAA,CAAA,CAAA,EAAK,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,KAAA,IAAA;wBAAA,IAAA,GAAA,MAAA,CAAA,SAAA,MAAA;iCAAA,eAAA,CAAA,MAAA,WAAA,OAAA,CAAA,QAAA,IAAA,MAAA;;oBACL,KAAK,IAAA,CAAA,SAAA,MAAA,CAAA,MAAA,CAAA,IAAA,OAAA;;;wBAAK,GAAA,CAAA,CAAA;iBAAA,EAAA,CAAA,CAAA;IAAA,KAAA,CAAA;0BACN,IAAI,CAACV,GAAAA,SAAAA,GAAe0B,UAAAA,CAAAA,EAAc,EAAQA,OAAPzB,IAAqBU,GAAde,uBAAwCA,YAAY;wBAE1FA,CAAAA,CAAAA,GAAAA,GAAAA,EAAUS,IAAAA,CAAA,EAAA,IAAA,GAAA,CAAA,IAAA,OAAA,aACd,GAAA,CAAA,GAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,KAAA","sourcesContent":["'use strict';\n\n// src/utils/handleKeyPress/handleKeyPress.ts\nfunction isTextInput(el) {\n if (el.tagName !== \"INPUT\") return false;\n const type = el.type;\n return [\"text\", \"email\", \"password\", \"tel\", \"number\"].includes(type);\n}\nfunction isTextArea(el) {\n return el.tagName === \"TEXTAREA\";\n}\nfunction isNativeButton(el) {\n return el.tagName === \"BUTTON\" || el.tagName === \"INPUT\" && [\"button\", \"submit\", \"reset\"].includes(el.type);\n}\nfunction isLink(el) {\n return el.tagName === \"A\";\n}\nfunction moveFocus(elementItems, currentIndex, direction) {\n const len = elementItems.length;\n const nextIndex = (currentIndex + direction + len) % len;\n elementItems.item(nextIndex).focus();\n}\nfunction isClickableButNotSemantic(el) {\n return el.getAttribute(\"data-custom-click\") !== null || el.getAttribute(\"data-custom-click\") !== void 0;\n}\nfunction handleMenuEscapeKeyPress(menuElement, menuTriggerButton) {\n menuElement.style.display = \"none\";\n const menuTriggerButtonId = menuTriggerButton.getAttribute(\"id\");\n if (!menuTriggerButtonId) {\n throw new Error(\"Menu trigger button does not have id attribute\");\n }\n menuTriggerButton.setAttribute(\"aria-expanded\", \"false\");\n}\nfunction handleKeyPress(event, elementItems, elementItemIndex, menuElementDiv, triggerButton) {\n const currentEl = elementItems.item(elementItemIndex);\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowLeft\": {\n if (!isTextInput(currentEl) && !isTextArea(currentEl)) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, -1);\n } else if (isTextInput(currentEl) || isTextArea(currentEl)) {\n const cursorStart = currentEl.selectionStart;\n if (cursorStart === 0) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, -1);\n }\n }\n break;\n }\n case \"ArrowDown\":\n case \"ArrowRight\": {\n if (!isTextInput(currentEl) && !isTextArea(currentEl)) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, 1);\n } else if (isTextInput(currentEl) || isTextArea(currentEl)) {\n const value = currentEl.value;\n const cursorEnd = currentEl.selectionStart;\n if (cursorEnd === value.length) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, 1);\n }\n }\n break;\n }\n case \"Escape\": {\n event.preventDefault();\n if (menuElementDiv && triggerButton) {\n if (getComputedStyle(menuElementDiv).display === \"block\") {\n handleMenuEscapeKeyPress(menuElementDiv, triggerButton);\n }\n triggerButton.focus();\n }\n break;\n }\n case \"Enter\":\n case \" \": {\n if (!isNativeButton(currentEl) && !isLink(currentEl) && isClickableButNotSemantic(currentEl)) {\n event.preventDefault();\n currentEl.click();\n }\n break;\n }\n }\n}\n\n// src/menu/src/makeMenuAccessible/makeMenuAccessible.ts\nfunction makeMenuAccessible({ menuId, menuElementsClass, triggerId }) {\n const menuDiv = document.querySelector(`#${menuId}`);\n if (!menuDiv) throw new Error(\"Invalid menu div id provided\");\n const triggerButton = document.querySelector(`#${triggerId}`);\n if (!triggerButton) throw new Error(\"Invalid trigger button id provided\");\n const handlerMap = /* @__PURE__ */ new Map();\n function setAria(isOpen) {\n triggerButton.setAttribute(\"aria-expanded\", isOpen ? \"true\" : \"false\");\n }\n function addListeners() {\n const menuItems = menuDiv.querySelectorAll(`.${menuElementsClass}`);\n menuItems.forEach((menuItem, index) => {\n if (!handlerMap.has(menuItem)) {\n const handler = (event) => handleKeyPress(event, menuItems, index, menuDiv, triggerButton);\n menuItem.addEventListener(\"keydown\", handler);\n handlerMap.set(menuItem, handler);\n }\n });\n }\n function removeListeners() {\n const menuItems = menuDiv.querySelectorAll(`.${menuElementsClass}`);\n menuItems.forEach((menuItem) => {\n const handler = handlerMap.get(menuItem);\n if (handler) {\n menuItem.removeEventListener(\"keydown\", handler);\n handlerMap.delete(menuItem);\n }\n });\n }\n function openMenu() {\n menuDiv.style.display = \"block\";\n setAria(true);\n addListeners();\n const menuItems = menuDiv.querySelectorAll(`.${menuElementsClass}`);\n if (menuItems.length > 0) menuItems[0].focus();\n }\n function closeMenu() {\n removeListeners();\n menuDiv.style.display = \"none\";\n setAria(false);\n triggerButton.focus();\n }\n function cleanup() {\n removeListeners();\n }\n return { openMenu, closeMenu, cleanup };\n}\n\nexports.makeMenuAccessible = makeMenuAccessible;\n//# sourceMappingURL=index.cjs.map\n","import { NodeListOfHTMLElement, HTMLElement } from \"../../../Types\";\n\n\nfunction isTextInput(el: HTMLElement): boolean {\n if (el.tagName !== 'INPUT') return false;\n const type = (el as HTMLInputElement).type;\n return ['text', 'email', 'password', 'tel', 'number'].includes(type);\n}\n\nfunction isTextArea(el: HTMLElement): boolean {\n return el.tagName === 'TEXTAREA';\n}\n\nexport function isNativeButton(el: HTMLElement): boolean {\n return el.tagName === 'BUTTON' || (el.tagName === 'INPUT' && ['button', 'submit', 'reset'].includes((el as HTMLInputElement).type));\n}\n\nexport function isLink(el: HTMLElement): boolean {\n return el.tagName === 'A';\n}\n\nfunction moveFocus(elementItems: NodeListOfHTMLElement, currentIndex: number, direction: -1 | 1) {\n const len = elementItems.length;\n const nextIndex = (currentIndex + direction + len) % len;\n elementItems.item(nextIndex).focus();\n}\n\nfunction isClickableButNotSemantic(el: HTMLElement): boolean {\n return el.getAttribute(\"data-custom-click\") !== null || el.getAttribute(\"data-custom-click\") !== undefined;\n}\n\nfunction handleMenuEscapeKeyPress(menuElement: HTMLElement, menuTriggerButton: HTMLElement) {\n menuElement.style.display = 'none';\n const menuTriggerButtonId = menuTriggerButton.getAttribute('id');\n if (!menuTriggerButtonId) {\n throw new Error(\"Menu trigger button does not have id attribute\");\n }\n menuTriggerButton.setAttribute(\"aria-expanded\", \"false\");\n}\n\nexport function handleKeyPress(\n event: KeyboardEvent,\n elementItems: NodeListOfHTMLElement,\n elementItemIndex: number,\n menuElementDiv?: HTMLElement,\n triggerButton?: HTMLElement\n): void {\n const currentEl = elementItems.item(elementItemIndex);\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowLeft': {\n if (!isTextInput(currentEl) && !isTextArea(currentEl)) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, -1);\n } else if (isTextInput(currentEl) || isTextArea(currentEl)) {\n const cursorStart = (currentEl as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n if (cursorStart === 0) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, -1);\n }\n }\n break;\n }\n case 'ArrowDown':\n case 'ArrowRight': {\n if (!isTextInput(currentEl) && !isTextArea(currentEl)) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, 1);\n } else if (isTextInput(currentEl) || isTextArea(currentEl)) {\n const value = (currentEl as HTMLInputElement | HTMLTextAreaElement).value;\n const cursorEnd = (currentEl as HTMLInputElement | HTMLTextAreaElement).selectionStart;\n if (cursorEnd === value.length) {\n event.preventDefault();\n moveFocus(elementItems, elementItemIndex, 1);\n }\n }\n break;\n }\n case 'Escape': {\n event.preventDefault();\n if (menuElementDiv && triggerButton) {\n if (getComputedStyle(menuElementDiv).display === 'block') {\n handleMenuEscapeKeyPress(menuElementDiv, triggerButton);\n }\n triggerButton.focus();\n }\n break;\n }\n case 'Enter':\n case ' ': {\n if (!isNativeButton(currentEl) && !isLink(currentEl) && isClickableButNotSemantic(currentEl)) {\n event.preventDefault();\n currentEl.click();\n }\n break;\n }\n default:\n break;\n }\n}"]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Adds keyboard interaction to toggle menu. The menu traps focus and can be interacted with using the keyboard. The first interactive item of the menu has focus when menu open.
3
+ * @param {string} menuId - The id of the menu.
4
+ * @param {string} menuElementsClass - The class of the items that are children of the menu.
5
+ * @param {string} triggerId - The id of the button that triggers the menu.
6
+ */
7
+ declare function makeMenuAccessible({ menuId, menuElementsClass, triggerId }: {
8
+ menuId: string;
9
+ menuElementsClass: string;
10
+ triggerId: string;
11
+ }): {
12
+ openMenu: () => void;
13
+ closeMenu: () => void;
14
+ cleanup: () => void;
15
+ };
16
+
17
+ export { makeMenuAccessible };
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Adds keyboard interaction to toggle menu. The menu traps focus and can be interacted with using the keyboard. The first interactive item of the menu has focus when menu open.
3
+ * @param {string} menuId - The id of the menu.
4
+ * @param {string} menuElementsClass - The class of the items that are children of the menu.
5
+ * @param {string} triggerId - The id of the button that triggers the menu.
6
+ */
7
+ declare function makeMenuAccessible({ menuId, menuElementsClass, triggerId }: {
8
+ menuId: string;
9
+ menuElementsClass: string;
10
+ triggerId: string;
11
+ }): {
12
+ openMenu: () => void;
13
+ closeMenu: () => void;
14
+ cleanup: () => void;
15
+ };
16
+
17
+ export { makeMenuAccessible };
@@ -0,0 +1,3 @@
1
+ export { makeMenuAccessible } from '../../chunk-KVTLMA4J.js';
2
+ import '../../chunk-RT5IROW4.js'; //# sourceMappingURL=index.js.map
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/menu/index.js"],"names":["makeMenuAccessible"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,0BAA0B;AAC7D,OAAO,0BAA0B,CACjC,iCAAiC","sourcesContent":["export { makeMenuAccessible } from '../../chunk-4WO5XJ5K.js';\nimport '../../chunk-RT5IROW4.js';\n//# sourceMappingURL=index.js.map\n"]}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+ // src/radio/src/updateRadioAriaAttributes/updateRadioAriaAttributes.ts
3
+ function updateRadioAriaAttributes(radioId, radiosClass, radioStates, currentPressedRadioIndex) {
4
+ var radioDiv = document.querySelector("#".concat(radioId));
5
+ if (!radioDiv) {
6
+ throw new Error("Invalid radio main div id provided.");
7
+ }
8
+ var radioItems = Array.from(radioDiv.querySelectorAll(".".concat(radiosClass)));
9
+ if (radioItems.length === 0) {
10
+ throw new Error("Invalid radios shared class provided.");
11
+ }
12
+ radioItems.forEach(function(radioItem, index) {
13
+ var state = radioStates[index];
14
+ var checked = radioItem.getAttribute("aria-checked");
15
+ var shouldBeChecked = index === currentPressedRadioIndex ? state.checked ? "true" : "false" : "false";
16
+ if (checked && checked !== shouldBeChecked) {
17
+ radioItem.setAttribute("aria-checked", shouldBeChecked);
18
+ }
19
+ });
20
+ }
21
+ exports.updateRadioAriaAttributes = updateRadioAriaAttributes; //# sourceMappingURL=index.cjs.map
22
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/radio/index.cjs","../../../src/radio/src/updateRadioAriaAttributes/updateRadioAriaAttributes.ts"],"names":["Error","radioItems","Array","from","radioDiv","querySelectorAll","radiosClass","length","forEach","radioItem","index","state","radioStates","checked","getAttribute","shouldBeChecked","currentPressedRadioIndex","setAttribute","exports","updateRadioAriaAttributes"],"mappings":"AAAA;UCaQ,MAAM,GAAA,CAAIA,MAAM,EAAA,OAAA,MAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,CAAA,uBAAA;UACpB,MAAA,GAAA,CAAA,MAAA,EAAA,OAAA,MAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,wBAAA;YAEA,IAAMC,GAAAA,CAAAA,MAAAA,EAAAA,CAA4BC,MAAMC,IAAA,CAAKC,CAAAA,CAAAA,IAASC,OAATD,GAASC,CAAA,CAAiB,IAAe,OAAXC;cAC3E,EAAGL,GAAAA,CAAAA,MAAAA,CAAWM,EAAAA,IAAA,EAAA,GAAW,CAAA,CAAA,CAAG,QAAA,gBAAA,CAAA,IAAA,OAAA;gBAC1B,EAAA,IAAM,EAAA,CAAA,CAAIP,CAAAA,IAAAA,CAAM,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,gBAAA,CAAA,IAAA,OAAA;YAClB,MAAA,GAAA,CAAA,CAAA,IAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,QAAA,gBAAA,CAAA,IAAA,OAAA;YAEAC,IAAAA,GAAAA,CAAAA,CAAAA,EAAWO,EAAAA,CAAAA,CAAAA,GAAA,CAAQ,CAAA,CAAA,OAACC,CAAAA,UAAwBC,MAAAA,CAAAA,IAAAA,OAAAA;kBACxC,CAAA,CAAA,EAAMC,CAAAA,EAAAA,CAAAA,IAAQC,CAAAA,EAAAA,OAAAA,SAAA,CAAYF,CAAAA,KAAK;oBAC/B,CAAA,CAAMG,EAAAA,IAAAA,CAAAA,SAAAA,EAAUJ,OAAAA,CAAAA,CAAAA,CAAUK,IAAAA,QAAA,CAAa;kBACvC,EAAMC,IAAAA,CAAAA,SAAAA,EAAAA,OAAAA,CAAAA,CAAAA,CAAkBL,IAAAA,MAAUM,EAAAA,CAAAA,wBAA4BL,MAAME,OAAA,GAAU,SAAS,UAAW;kBAClG,EAAIA,EAAAA,CAAAA,SAAAA,EAAAA,KAAWA,EAAAA,CAAAA,CAAAA,CAAAA,IAAAA,GAAYE,GAAAA,EAAAA,CAAAA,WAAiB,aAAA,MAAA,OAAA,GAAA,SAAA,UAAA;sBACxCN,EAAAA,KAAAA,EAAAA,CAAUQ,EAAAA,IAAAA,GAAAA,GAAA,CAAa,CAAA,CAAA,WAAA,GAAgBF,UAAAA,MAAAA,OAAAA,GAAAA,SAAAA,UAAAA;sBAC3C,KAAA,GAAA,EAAA,OAAA,GAAA,CAAA,CAAA,CAAA,WAAA,GAAA,UAAA,MAAA,OAAA,GAAA,SAAA,UAAA;oBACJ,KAAA,GAAA,EAAA,OAAA,GAAA,CAAA,aAAA,GAAA,UAAA,MAAA,OAAA,GAAA,SAAA,UAAA;kBACJ,KAAA,GAAA,SAAA,GAAA,CAAA,aAAA,GAAA;cDPAG,MAAQC,EAAAA,YAAAA,CAAAA,UAAyB,GAAGA,GAAAA,wBACpC,kCAAkC","sourcesContent":["'use strict';\n\n// src/radio/src/updateRadioAriaAttributes/updateRadioAriaAttributes.ts\nfunction updateRadioAriaAttributes(radioId, radiosClass, radioStates, currentPressedRadioIndex) {\n const radioDiv = document.querySelector(`#${radioId}`);\n if (!radioDiv) {\n throw new Error(\"Invalid radio main div id provided.\");\n }\n const radioItems = Array.from(radioDiv.querySelectorAll(`.${radiosClass}`));\n if (radioItems.length === 0) {\n throw new Error(\"Invalid radios shared class provided.\");\n }\n radioItems.forEach((radioItem, index) => {\n const state = radioStates[index];\n const checked = radioItem.getAttribute(\"aria-checked\");\n const shouldBeChecked = index === currentPressedRadioIndex ? state.checked ? \"true\" : \"false\" : \"false\";\n if (checked && checked !== shouldBeChecked) {\n radioItem.setAttribute(\"aria-checked\", shouldBeChecked);\n }\n });\n}\n\nexports.updateRadioAriaAttributes = updateRadioAriaAttributes;\n//# sourceMappingURL=index.cjs.map\n","/**\n * Adds screen reader accessibility to multiple radio buttons. Updates the aria attributes of the radio buttons. Radio elements must possess the following aria attributes; aria-checked and aria-label.\n * @param {string} radioId The id of the radio parent container.\n * @param {string} radiosClass The shared class of all the radios.\n * @param {RadioStates[]} radioStates Array of objects containing radio buttons state information.\n * @param {number} currentPressedRadioIndex Index of the currently checked or unchecked radio button.\n */\n\nimport { HTMLElement, RadioStates } from \"../../../../Types\";\n\nexport function updateRadioAriaAttributes(radioId: string, radiosClass: string, radioStates: RadioStates[], currentPressedRadioIndex: number): void {\n const radioDiv: HTMLElement | null = document.querySelector(`#${radioId}`);\n if (!radioDiv) {\n throw new Error(\"Invalid radio main div id provided.\");\n }\n \n const radioItems: HTMLElement[] = Array.from(radioDiv.querySelectorAll(`.${radiosClass}`));\n if(radioItems.length === 0) {\n throw new Error('Invalid radios shared class provided.');\n }\n\n radioItems.forEach((radioItem: HTMLElement, index: number) => {\n const state = radioStates[index];\n const checked = radioItem.getAttribute(\"aria-checked\");\n const shouldBeChecked = index === currentPressedRadioIndex ? (state.checked ? \"true\" : \"false\") : \"false\";\n if (checked && checked !== shouldBeChecked) {\n radioItem.setAttribute(\"aria-checked\", shouldBeChecked);\n }\n });\n}"]}
@@ -0,0 +1,13 @@
1
+ import { R as RadioStates } from '../../Types.d-p85gN5m_.cjs';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to multiple radio buttons. Updates the aria attributes of the radio buttons. Radio elements must possess the following aria attributes; aria-checked and aria-label.
5
+ * @param {string} radioId The id of the radio parent container.
6
+ * @param {string} radiosClass The shared class of all the radios.
7
+ * @param {RadioStates[]} radioStates Array of objects containing radio buttons state information.
8
+ * @param {number} currentPressedRadioIndex Index of the currently checked or unchecked radio button.
9
+ */
10
+
11
+ declare function updateRadioAriaAttributes(radioId: string, radiosClass: string, radioStates: RadioStates[], currentPressedRadioIndex: number): void;
12
+
13
+ export { updateRadioAriaAttributes };
@@ -0,0 +1,13 @@
1
+ import { R as RadioStates } from '../../Types.d-p85gN5m_.js';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to multiple radio buttons. Updates the aria attributes of the radio buttons. Radio elements must possess the following aria attributes; aria-checked and aria-label.
5
+ * @param {string} radioId The id of the radio parent container.
6
+ * @param {string} radiosClass The shared class of all the radios.
7
+ * @param {RadioStates[]} radioStates Array of objects containing radio buttons state information.
8
+ * @param {number} currentPressedRadioIndex Index of the currently checked or unchecked radio button.
9
+ */
10
+
11
+ declare function updateRadioAriaAttributes(radioId: string, radiosClass: string, radioStates: RadioStates[], currentPressedRadioIndex: number): void;
12
+
13
+ export { updateRadioAriaAttributes };
@@ -0,0 +1,2 @@
1
+ export { updateRadioAriaAttributes } from '../../chunk-5HQ6LLC5.js'; //# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/radio/index.js"],"names":["updateRadioAriaAttributes"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,0BAA0B,CACpE,iCAAiC","sourcesContent":["export { updateRadioAriaAttributes } from '../../chunk-5HQ6LLC5.js';\n//# sourceMappingURL=index.js.map\n"]}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+ // src/toggle/src/updateToggleAriaAttribute/updateToggleAriaAttribute.ts
3
+ function updateToggleAriaAttribute(toggleId, togglesClass, toggleStates, currentPressedToggleIndex) {
4
+ var toggleDiv = document.querySelector("#".concat(toggleId));
5
+ if (!toggleDiv) {
6
+ throw new Error("Invalid toggle main div id provided.");
7
+ }
8
+ var toggleItems = Array.from(toggleDiv.querySelectorAll(".".concat(togglesClass)));
9
+ if (toggleItems.length === 0) {
10
+ throw new Error("Invalid toggles shared class provided.");
11
+ }
12
+ if (toggleItems.length !== toggleStates.length) {
13
+ throw new Error("Toggle state/DOM length mismatch: found ".concat(toggleItems.length, " triggers, but got ").concat(toggleStates.length, " state objects."));
14
+ }
15
+ toggleItems.forEach(function(toggle, index) {
16
+ if (index === currentPressedToggleIndex) {
17
+ toggle.setAttribute("aria-pressed", toggleStates[index].pressed ? "true" : "false");
18
+ }
19
+ });
20
+ }
21
+ exports.updateToggleAriaAttribute = updateToggleAriaAttribute; //# sourceMappingURL=index.cjs.map
22
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/toggle/index.cjs","../../../src/toggle/src/updateToggleAriaAttribute/updateToggleAriaAttribute.ts"],"names":["Error","toggleItems","Array","from","toggleDiv","querySelectorAll","togglesClass","length","toggleStates","forEach","toggle","index","currentPressedToggleIndex","setAttribute","pressed","exports","updateToggleAriaAttribute"],"mappings":"AAAA;UCaI,MAAM,IAAIA,MAAM,GAAA,MAAA,OAAA,CAAA,EAAA,EAAA,OAAA,GAAA,EAAA,YAAA,CAAA,CAAA,yBAAA;UAClB,MAAA,IAAA,MAAA,GAAA,MAAA,OAAA,CAAA,EAAA,EAAA,OAAA,GAAA,EAAA,YAAA,EAAA,yBAAA;YAEA,IAAMC,IAAAA,MAAAA,GAAAA,CAA6BC,MAAMC,IAAA,CAAKC,CAAAA,CAAAA,IAAUC,OAAVD,IAAU,AAAAC,CAAiB,IAAgB,OAAZC;cAC7E,EAAIL,IAAAA,MAAAA,EAAYM,EAAAA,IAAA,EAAA,GAAW,CAAA,CAAA,CAAG,SAAA,gBAAA,CAAA,IAAA,OAAA;gBAC5B,EAAA,IAAM,EAAA,EAAIP,EAAAA,IAAM,EAAA,GAAA,CAAA,CAAA,CAAA,SAAA,gBAAA,CAAA,IAAA,OAAA;YAClB,MAAA,IAAA,EAAA,IAAA,EAAA,GAAA,CAAA,CAAA,CAAA,SAAA,gBAAA,CAAA,IAAA,OAAA;YAEA,IAAGC,IAAAA,EAAAA,IAAAA,EAAYM,GAAAA,CAAAA,CAAAA,CAAA,KAAWC,IAAAA,SAAaD,MAAA,CAAA,CAAQ,IAAA,OAAA;kBAC7C,EAAA,IAAM,EAAA,EAAIP,GAAAA,GAAM,KAAA,aAAA,MAAA,EAAA,iBAAmFQ,OAAxCP,YAAYM,MAAM,EAAA,uBAAyC,OAAnBC,aAAaD,MAAM,EAAA;gBACxH,EAAA,IAAA,EAAA,EAAA,MAAA,KAAA,aAAA,MAAA,EAAA,iBAAA,OAAA,YAAA,MAAA,EAAA,uBAAA,OAAA,aAAA,MAAA,EAAA;cAEAN,IAAAA,IAAAA,IAAYQ,EAAAA,IAAA,CAAQ,SAACC,IAAAA,IAAQC,EAAAA,EAAAA,iBAAAA,OAAAA,YAAAA,MAAAA,EAAAA,uBAAAA,OAAAA,aAAAA,MAAAA,EAAAA;kBAC3B,EAAA,EAAIA,EAAAA,EAAAA,IAAAA,CAAUC,SAAAA,IAAAA,IAAAA,EAAAA,EAAAA,cAA2B,GAAA,OAAA,YAAA,MAAA,EAAA,uBAAA,OAAA,aAAA,MAAA,EAAA;wBACvCF,IAAAA,CAAAA,SAAOG,QAAAA,IAAA,CAAa,aAAA,UAAA,CAAgBL,WAAAA,CAAA,CAAaG,IAAAA,EAAAA,CAAK,CAAEG,OAAA,GAAU,WAAS,OAAA,aAAA,MAAA,EAAA;sBAC7E,GAAA,CAAA,SAAA,QAAA,IAAA,CAAA,aAAA,GAAA,YAAA,CAAA,MAAA,CAAA,OAAA,GAAA,SAAA;oBACF,GAAA,CAAA,SAAA,QAAA,IAAA,CAAA,aAAA,GAAA,YAAA,CAAA,MAAA,CAAA,OAAA,GAAA,SAAA;kBACF,IAAA,CAAA,YAAA,CAAA,aAAA,GAAA,YAAA,CAAA,MAAA,CAAA,OAAA,GAAA,SAAA;cDRAC,KAAAA,CAAQC,WAAAA,CAAAA,aAAyB,GAAGA,YAAAA,CAAAA,MAAAA,CAAAA,OACpC,GAAA,SAAA,sBAAkC","sourcesContent":["'use strict';\n\n// src/toggle/src/updateToggleAriaAttribute/updateToggleAriaAttribute.ts\nfunction updateToggleAriaAttribute(toggleId, togglesClass, toggleStates, currentPressedToggleIndex) {\n const toggleDiv = document.querySelector(`#${toggleId}`);\n if (!toggleDiv) {\n throw new Error(\"Invalid toggle main div id provided.\");\n }\n const toggleItems = Array.from(toggleDiv.querySelectorAll(`.${togglesClass}`));\n if (toggleItems.length === 0) {\n throw new Error(\"Invalid toggles shared class provided.\");\n }\n if (toggleItems.length !== toggleStates.length) {\n throw new Error(`Toggle state/DOM length mismatch: found ${toggleItems.length} triggers, but got ${toggleStates.length} state objects.`);\n }\n toggleItems.forEach((toggle, index) => {\n if (index === currentPressedToggleIndex) {\n toggle.setAttribute(\"aria-pressed\", toggleStates[index].pressed ? \"true\" : \"false\");\n }\n });\n}\n\nexports.updateToggleAriaAttribute = updateToggleAriaAttribute;\n//# sourceMappingURL=index.cjs.map\n","/**\n * Adds screen reader accessibility to toggle buttons. Updates the aria attributes of the toggle buttons. Button must be a semantic button element or a non-semantic element with a role of button, and possess the aria-pressed attribute.\n * @param {string} toggleId The id of the toggle buttons parent container.\n * @param {string} togglesClass The shared class of all the toggle buttons.\n * @param {ToggleStates[]} toggleStates Array of objects containing toggle buttons state information.\n * @param {number} currentPressedToggleIndex Index of the currently pressed or unpressed toggle button.\n*/\n\nimport { HTMLElement, ToggleStates } from \"../../../../Types\";\n\nexport function updateToggleAriaAttribute(toggleId: string, togglesClass: string, toggleStates: ToggleStates[], currentPressedToggleIndex: number): void {\n const toggleDiv: HTMLElement | null = document.querySelector(`#${toggleId}`);\n if (!toggleDiv) {\n throw new Error(\"Invalid toggle main div id provided.\");\n }\n\n const toggleItems: HTMLElement[] = Array.from(toggleDiv.querySelectorAll(`.${togglesClass}`));\n if (toggleItems.length === 0) {\n throw new Error('Invalid toggles shared class provided.');\n }\n\n if(toggleItems.length !== toggleStates.length) {\n throw new Error(`Toggle state/DOM length mismatch: found ${toggleItems.length} triggers, but got ${toggleStates.length} state objects.`);\n }\n\n toggleItems.forEach((toggle, index) => {\n if (index === currentPressedToggleIndex) {\n toggle.setAttribute(\"aria-pressed\", toggleStates[index].pressed ? 'true' : 'false');\n }\n });\n}"]}
@@ -0,0 +1,13 @@
1
+ import { T as ToggleStates } from '../../Types.d-p85gN5m_.cjs';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to toggle buttons. Updates the aria attributes of the toggle buttons. Button must be a semantic button element or a non-semantic element with a role of button, and possess the aria-pressed attribute.
5
+ * @param {string} toggleId The id of the toggle buttons parent container.
6
+ * @param {string} togglesClass The shared class of all the toggle buttons.
7
+ * @param {ToggleStates[]} toggleStates Array of objects containing toggle buttons state information.
8
+ * @param {number} currentPressedToggleIndex Index of the currently pressed or unpressed toggle button.
9
+ */
10
+
11
+ declare function updateToggleAriaAttribute(toggleId: string, togglesClass: string, toggleStates: ToggleStates[], currentPressedToggleIndex: number): void;
12
+
13
+ export { updateToggleAriaAttribute };
@@ -0,0 +1,13 @@
1
+ import { T as ToggleStates } from '../../Types.d-p85gN5m_.js';
2
+
3
+ /**
4
+ * Adds screen reader accessibility to toggle buttons. Updates the aria attributes of the toggle buttons. Button must be a semantic button element or a non-semantic element with a role of button, and possess the aria-pressed attribute.
5
+ * @param {string} toggleId The id of the toggle buttons parent container.
6
+ * @param {string} togglesClass The shared class of all the toggle buttons.
7
+ * @param {ToggleStates[]} toggleStates Array of objects containing toggle buttons state information.
8
+ * @param {number} currentPressedToggleIndex Index of the currently pressed or unpressed toggle button.
9
+ */
10
+
11
+ declare function updateToggleAriaAttribute(toggleId: string, togglesClass: string, toggleStates: ToggleStates[], currentPressedToggleIndex: number): void;
12
+
13
+ export { updateToggleAriaAttribute };
@@ -0,0 +1,2 @@
1
+ export { updateToggleAriaAttribute } from '../../chunk-FBQ5LF2T.js'; //# sourceMappingURL=index.js.map
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/macx/aria-ease/package/dist/src/toggle/index.js"],"names":["updateToggleAriaAttribute"],"mappings":"AAAA,SAASA,yBAAyB,QAAQ,0BAA0B,CACpE,iCAAiC","sourcesContent":["export { updateToggleAriaAttribute } from '../../chunk-FBQ5LF2T.js';\n//# sourceMappingURL=index.js.map\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aria-ease",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Out-of-the-box accessibility utility package to develop production ready applications.",
5
5
  "main": "dist/index.cjs",
6
6
  "type": "module",
@@ -8,7 +8,7 @@
8
8
  "types": "dist/index.d.ts",
9
9
  "scripts": {
10
10
  "dev": "tsup ./index.ts --watch",
11
- "build": "tsup ./index.ts --format esm,cjs --dts --treeshake --sourcemap",
11
+ "build": "tsup ./index.ts ./src/accordion/index.ts ./src/block/index.ts ./src/checkbox/index.ts ./src/menu/index.ts ./src/radio/index.ts ./src/toggle/index.ts --format esm,cjs --dts --treeshake --sourcemap --outDir dist",
12
12
  "test": "vitest run --reporter verbose -- --config ./vitest.config.mts",
13
13
  "bench": "node --loader ts-node/esm benchmarks/sample.bench.ts",
14
14
  "lint": "eslint src --ext .ts",
@@ -50,6 +50,30 @@
50
50
  ".": {
51
51
  "import": "./dist/index.js",
52
52
  "require": "./dist/index.cjs"
53
+ },
54
+ "./accordion": {
55
+ "import": "./dist/src/accordion/index.js",
56
+ "require": "./dist/src/accordion/index.cjs"
57
+ },
58
+ "./block": {
59
+ "import": "./dist/src/block/index.js",
60
+ "require": "./dist/src/block/index.cjs"
61
+ },
62
+ "./checkbox": {
63
+ "import": "./dist/src/checkbox/index.js",
64
+ "require": "./dist/src/checkbox/index.cjs"
65
+ },
66
+ "./menu": {
67
+ "import": "./dist/src/menu/index.js",
68
+ "require": "./dist/src/menu/index.cjs"
69
+ },
70
+ "./radio": {
71
+ "import": "./dist/src/radio/index.js",
72
+ "require": "./dist/src/radio/index.cjs"
73
+ },
74
+ "./toggle": {
75
+ "import": "./dist/src/toggle/index.js",
76
+ "require": "./dist/src/toggle/index.cjs"
53
77
  }
54
78
  },
55
79
  "files": [
package/dist/index.d.mts DELETED
@@ -1,140 +0,0 @@
1
- declare global {
2
- type HTMLElement = Element;
3
- type NodeListOf<HTMLElement> = Iterable<HTMLElement>;
4
- }
5
-
6
- interface AccordionStates {
7
- display: boolean;
8
- openedAriaLabel: string;
9
- closedAriaLabel: string;
10
- }
11
-
12
- interface CheckboxStates {
13
- checked: boolean;
14
- checkedAriaLabel: string;
15
- uncheckedAriaLabel: string;
16
- }
17
-
18
- interface RadioStates {
19
- checked: boolean;
20
- }
21
-
22
- interface ToggleStates {
23
- pressed: boolean;
24
- }
25
-
26
- /**
27
- * Adds screen reader accessibility to accordions. Updates the aria attributes of the accordion trigger button. Trigger button element must possess the following aria attributes; aria-expanded and aria-label.
28
- * @param {AccordionStates[]} accordionStates Array of objects containing accordions state information
29
- * @param {string} accordionsClass The shared class of all the accordion triggers
30
- * @param {number} currentClickedTriggerIndex Index of the currently clicked accordion trigger
31
- */
32
-
33
- declare function updateAccordionTriggerAriaAttributes(accordionStates: AccordionStates[], accordionsClass: string, currentClickedTriggerIndex: number): void;
34
-
35
- declare const index$5_updateAccordionTriggerAriaAttributes: typeof updateAccordionTriggerAriaAttributes;
36
- declare namespace index$5 {
37
- export { index$5_updateAccordionTriggerAriaAttributes as updateAccordionTriggerAriaAttributes };
38
- }
39
-
40
- /**
41
- * Adds keyboard interaction to block. The block traps focus and can be interacted with using the keyboard.
42
- * @param {string} blockId The id of the block
43
- * @param {string} blockItemsClass The shared class of the items that are children of thes block
44
- */
45
- declare function makeBlockAccessible(blockId: string, blockItemsClass: string): void;
46
-
47
- declare const index$4_makeBlockAccessible: typeof makeBlockAccessible;
48
- declare namespace index$4 {
49
- export { index$4_makeBlockAccessible as makeBlockAccessible };
50
- }
51
-
52
- /**
53
- * Adds screen reader accessibility to a single checkbox. Updates the aria attributes of the checkbox. Checkbox element must possess the following aria attributes; aria-checked and aria-label.
54
- * @param {string} checkboxClass The shared class of all the checkboxes
55
- * @param {string} updatedAriaLabel The aria label to be updated to checkbox element
56
- */
57
- declare function updateSingleCheckboxAriaAttributes(checkboxClass: string, updatedAriaLabel: string): void;
58
-
59
- /**
60
- * Adds screen reader accessibility to multiple checkboxes. Updates the aria attributes of the checkboxes. Checkbox elements must possess the following aria attributes; aria-checked and aria-label.
61
- * @param {CheckboxStates[]} checkboxStates Array of objects containing checkboxes state information
62
- * @param {string} checkboxesClass The shared class of all the checkboxes
63
- * @param {number} currentPressedCheckboxIndex Index of the currently checked or unchecked checkbox
64
- */
65
-
66
- declare function updateGroupCheckboxesAriaAttributes(checkboxStates: CheckboxStates[], checkboxesClass: string, currentPressedCheckboxIndex: number): void;
67
-
68
- declare const index$3_updateGroupCheckboxesAriaAttributes: typeof updateGroupCheckboxesAriaAttributes;
69
- declare const index$3_updateSingleCheckboxAriaAttributes: typeof updateSingleCheckboxAriaAttributes;
70
- declare namespace index$3 {
71
- export { index$3_updateGroupCheckboxesAriaAttributes as updateGroupCheckboxesAriaAttributes, index$3_updateSingleCheckboxAriaAttributes as updateSingleCheckboxAriaAttributes };
72
- }
73
-
74
- declare function cleanUpMenuEventListeners(menuId: string, menuItemsClass: string): void;
75
-
76
- /**
77
- * Adds keyboard interaction to toggle menu. The menu traps focus and can be interacted with using the keyboard. The first item of the menu has focus when menu appears.
78
- * @param {string} menuId The id of the menu
79
- * @param {string} menuItemsClass The shared class of the items that are children of the menu
80
- */
81
- declare function makeMenuAccessible(menuId: string, menuItemsClass: string): void;
82
-
83
- /**
84
- * Adds screen reader accessibility to menus. Updates the aria attributes of the menu trigger button. Trigger button element must possess the following aria attributes; aria-expanded and aria-label.
85
- * @param {string} triggerId The id of the trigger button that toggles the menu
86
- * @param {string} ariaLabel The aria label to be updated to trigger element
87
- */
88
- declare function updateMenuTriggerAriaAttributes(triggerId: string, ariaLabel: string): void;
89
-
90
- declare const index$2_cleanUpMenuEventListeners: typeof cleanUpMenuEventListeners;
91
- declare const index$2_makeMenuAccessible: typeof makeMenuAccessible;
92
- declare const index$2_updateMenuTriggerAriaAttributes: typeof updateMenuTriggerAriaAttributes;
93
- declare namespace index$2 {
94
- export { index$2_cleanUpMenuEventListeners as cleanUpMenuEventListeners, index$2_makeMenuAccessible as makeMenuAccessible, index$2_updateMenuTriggerAriaAttributes as updateMenuTriggerAriaAttributes };
95
- }
96
-
97
- /**
98
- * Adds screen reader accessibility to single radio button. Updates the aria attribute of the radio button. Radio element must possess the following aria attributes; aria-checked and aria-label.
99
- * @param {string} radioClass The class of the radio button
100
- * @param {string} updatedAriaLabel The aria label to be updated to button element
101
- */
102
- declare function updateSingleRadioAriaAttributes(radioClass: string): void;
103
-
104
- /**
105
- * Adds screen reader accessibility to multiple radio buttons. Updates the aria attributes of the radio buttons. Radio elements must possess the following aria attributes; aria-checked and aria-label.
106
- * @param {RadioStates[]} radioStates Array of objects containing radio buttons state information
107
- * @param {string} radiosClass The shared class of all the radio buttons
108
- * @param {number} currentPressedRadioIndex Index of the currently checked or unchecked radio button
109
- */
110
-
111
- declare function updateGroupRadiosAriaAttributes(radioStates: RadioStates[], radiosClass: string, currentPressedRadioIndex: number): void;
112
-
113
- declare const index$1_updateGroupRadiosAriaAttributes: typeof updateGroupRadiosAriaAttributes;
114
- declare const index$1_updateSingleRadioAriaAttributes: typeof updateSingleRadioAriaAttributes;
115
- declare namespace index$1 {
116
- export { index$1_updateGroupRadiosAriaAttributes as updateGroupRadiosAriaAttributes, index$1_updateSingleRadioAriaAttributes as updateSingleRadioAriaAttributes };
117
- }
118
-
119
- /**
120
- * Adds screen reader accessibility to a single toggle element. Updates the aria attribute of the toggle element. Toggle element must possess the aria-pressed attribute.
121
- * @param {string} toggleClass The class of all the toggle element
122
- */
123
- declare function updateSingleToggleAriaAttributes(toggleClass: string): void;
124
-
125
- /**
126
- * Adds screen reader accessibility to toggle buttons. Updates the aria attributes of the toggle buttons. Button must be button element with a role of button, and possess the aria-pressed attribute.
127
- * @param {ToggleStates[]} toggleStates Array of objects containing toggle buttons state information
128
- * @param {string} togglesClass The shared class of all the toggle buttons
129
- * @param {number} currentPressedToggleIndex Index of the currently pressed or unpressed toggle button
130
- */
131
-
132
- declare function updateGroupTogglesAriaAttributes(toggleStates: ToggleStates[], togglesClass: string, currentPressedToggleIndex: number): void;
133
-
134
- declare const index_updateGroupTogglesAriaAttributes: typeof updateGroupTogglesAriaAttributes;
135
- declare const index_updateSingleToggleAriaAttributes: typeof updateSingleToggleAriaAttributes;
136
- declare namespace index {
137
- export { index_updateGroupTogglesAriaAttributes as updateGroupTogglesAriaAttributes, index_updateSingleToggleAriaAttributes as updateSingleToggleAriaAttributes };
138
- }
139
-
140
- export { index$5 as Accordion, index$4 as Block, index$3 as Checkbox, index$2 as Menu, index$1 as Radio, index as Toggle };