se-design 1.0.72 → 1.0.73-dev2

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 (330) hide show
  1. package/dist/assets/style.css +1 -1
  2. package/dist/assets/typographyMixin.scss +8 -0
  3. package/dist/components/BreadCrumbs/index.d.ts +3 -1
  4. package/dist/components/CustomAccordion/index.d.ts +3 -0
  5. package/dist/components/Icon/index.d.ts +7 -7
  6. package/dist/components/NavigationBar/TabButton.d.ts +1 -1
  7. package/dist/components/Pagination/index.d.ts +1 -0
  8. package/dist/components/Popover/index.d.ts +2 -2
  9. package/dist/components/TableLayout/index.d.ts +4 -0
  10. package/dist/components/Tabs/index.d.ts +6 -1
  11. package/dist/index.js +132 -128
  12. package/dist/index.js.map +1 -1
  13. package/dist/index100.js +1 -1
  14. package/dist/index100.js.map +1 -1
  15. package/dist/index101.js +2 -2
  16. package/dist/index101.js.map +1 -1
  17. package/dist/index102.js +1 -1
  18. package/dist/index102.js.map +1 -1
  19. package/dist/index103.js +1 -1
  20. package/dist/index103.js.map +1 -1
  21. package/dist/index104.js +2 -2
  22. package/dist/index104.js.map +1 -1
  23. package/dist/index105.js +1 -1
  24. package/dist/index105.js.map +1 -1
  25. package/dist/index106.js +2 -2
  26. package/dist/index106.js.map +1 -1
  27. package/dist/index107.js +1 -1
  28. package/dist/index107.js.map +1 -1
  29. package/dist/index108.js +1 -1
  30. package/dist/index108.js.map +1 -1
  31. package/dist/index109.js +1 -1
  32. package/dist/index109.js.map +1 -1
  33. package/dist/index110.js +2 -2
  34. package/dist/index110.js.map +1 -1
  35. package/dist/index111.js +1 -1
  36. package/dist/index111.js.map +1 -1
  37. package/dist/index112.js +2 -2
  38. package/dist/index112.js.map +1 -1
  39. package/dist/index113.js +2 -2
  40. package/dist/index113.js.map +1 -1
  41. package/dist/index114.js +1 -1
  42. package/dist/index114.js.map +1 -1
  43. package/dist/index115.js +2 -2
  44. package/dist/index115.js.map +1 -1
  45. package/dist/index116.js +2 -2
  46. package/dist/index116.js.map +1 -1
  47. package/dist/index117.js +1 -1
  48. package/dist/index117.js.map +1 -1
  49. package/dist/index118.js +1 -1
  50. package/dist/index118.js.map +1 -1
  51. package/dist/index119.js +1 -1
  52. package/dist/index119.js.map +1 -1
  53. package/dist/index120.js +2 -2
  54. package/dist/index120.js.map +1 -1
  55. package/dist/index121.js +2 -2
  56. package/dist/index121.js.map +1 -1
  57. package/dist/index122.js +2 -2
  58. package/dist/index122.js.map +1 -1
  59. package/dist/index123.js +1 -1
  60. package/dist/index123.js.map +1 -1
  61. package/dist/index124.js +1 -1
  62. package/dist/index124.js.map +1 -1
  63. package/dist/index125.js +1 -1
  64. package/dist/index125.js.map +1 -1
  65. package/dist/index126.js +1 -1
  66. package/dist/index126.js.map +1 -1
  67. package/dist/index127.js +1 -1
  68. package/dist/index127.js.map +1 -1
  69. package/dist/index128.js +1 -1
  70. package/dist/index128.js.map +1 -1
  71. package/dist/index129.js +1 -1
  72. package/dist/index129.js.map +1 -1
  73. package/dist/index130.js +1 -1
  74. package/dist/index130.js.map +1 -1
  75. package/dist/index131.js +2 -2
  76. package/dist/index131.js.map +1 -1
  77. package/dist/index132.js +2 -2
  78. package/dist/index132.js.map +1 -1
  79. package/dist/index133.js +1 -1
  80. package/dist/index133.js.map +1 -1
  81. package/dist/index134.js +1 -1
  82. package/dist/index134.js.map +1 -1
  83. package/dist/index135.js +1 -1
  84. package/dist/index135.js.map +1 -1
  85. package/dist/index136.js +1 -1
  86. package/dist/index136.js.map +1 -1
  87. package/dist/index137.js +1 -1
  88. package/dist/index137.js.map +1 -1
  89. package/dist/index138.js +1 -1
  90. package/dist/index138.js.map +1 -1
  91. package/dist/index139.js +1 -1
  92. package/dist/index139.js.map +1 -1
  93. package/dist/index140.js +2 -2
  94. package/dist/index140.js.map +1 -1
  95. package/dist/index141.js +1 -1
  96. package/dist/index141.js.map +1 -1
  97. package/dist/index142.js +2 -2
  98. package/dist/index142.js.map +1 -1
  99. package/dist/index143.js +2 -2
  100. package/dist/index143.js.map +1 -1
  101. package/dist/index144.js +2 -2
  102. package/dist/index144.js.map +1 -1
  103. package/dist/index145.js +2 -2
  104. package/dist/index145.js.map +1 -1
  105. package/dist/index146.js +1 -1
  106. package/dist/index146.js.map +1 -1
  107. package/dist/index147.js +1 -1
  108. package/dist/index147.js.map +1 -1
  109. package/dist/index148.js +1 -1
  110. package/dist/index148.js.map +1 -1
  111. package/dist/index149.js +1 -1
  112. package/dist/index149.js.map +1 -1
  113. package/dist/index15.js +2 -2
  114. package/dist/index150.js +1 -1
  115. package/dist/index150.js.map +1 -1
  116. package/dist/index151.js +1 -1
  117. package/dist/index151.js.map +1 -1
  118. package/dist/index152.js +1 -1
  119. package/dist/index152.js.map +1 -1
  120. package/dist/index153.js +1 -1
  121. package/dist/index153.js.map +1 -1
  122. package/dist/index154.js +1 -1
  123. package/dist/index154.js.map +1 -1
  124. package/dist/index155.js +1 -1
  125. package/dist/index155.js.map +1 -1
  126. package/dist/index156.js +1 -1
  127. package/dist/index156.js.map +1 -1
  128. package/dist/index157.js +1 -1
  129. package/dist/index157.js.map +1 -1
  130. package/dist/index158.js +1 -1
  131. package/dist/index158.js.map +1 -1
  132. package/dist/index159.js +1 -1
  133. package/dist/index159.js.map +1 -1
  134. package/dist/index160.js +1 -1
  135. package/dist/index160.js.map +1 -1
  136. package/dist/index161.js +1 -1
  137. package/dist/index161.js.map +1 -1
  138. package/dist/index162.js +1 -1
  139. package/dist/index162.js.map +1 -1
  140. package/dist/index163.js +1 -1
  141. package/dist/index163.js.map +1 -1
  142. package/dist/index164.js +1 -1
  143. package/dist/index164.js.map +1 -1
  144. package/dist/index165.js +1 -1
  145. package/dist/index165.js.map +1 -1
  146. package/dist/index166.js +1 -1
  147. package/dist/index166.js.map +1 -1
  148. package/dist/index167.js +1 -1
  149. package/dist/index167.js.map +1 -1
  150. package/dist/index168.js +1 -1
  151. package/dist/index168.js.map +1 -1
  152. package/dist/index169.js +1 -1
  153. package/dist/index169.js.map +1 -1
  154. package/dist/index170.js +2 -2
  155. package/dist/index170.js.map +1 -1
  156. package/dist/index171.js +2 -2
  157. package/dist/index171.js.map +1 -1
  158. package/dist/index172.js +1 -1
  159. package/dist/index172.js.map +1 -1
  160. package/dist/index173.js +1 -1
  161. package/dist/index173.js.map +1 -1
  162. package/dist/index174.js +2 -2
  163. package/dist/index174.js.map +1 -1
  164. package/dist/index175.js +2 -2
  165. package/dist/index175.js.map +1 -1
  166. package/dist/index176.js +1 -1
  167. package/dist/index176.js.map +1 -1
  168. package/dist/index177.js +1 -1
  169. package/dist/index177.js.map +1 -1
  170. package/dist/index178.js +1 -1
  171. package/dist/index178.js.map +1 -1
  172. package/dist/index179.js +1 -1
  173. package/dist/index179.js.map +1 -1
  174. package/dist/index18.js +160 -156
  175. package/dist/index18.js.map +1 -1
  176. package/dist/index180.js +1 -1
  177. package/dist/index180.js.map +1 -1
  178. package/dist/index181.js +1 -1
  179. package/dist/index181.js.map +1 -1
  180. package/dist/index182.js +1 -1
  181. package/dist/index182.js.map +1 -1
  182. package/dist/index183.js +1 -1
  183. package/dist/index183.js.map +1 -1
  184. package/dist/index184.js +2 -2
  185. package/dist/index184.js.map +1 -1
  186. package/dist/index185.js +2 -2
  187. package/dist/index185.js.map +1 -1
  188. package/dist/index186.js +2 -2
  189. package/dist/index186.js.map +1 -1
  190. package/dist/index187.js +2 -149
  191. package/dist/index187.js.map +1 -1
  192. package/dist/index188.js +149 -9
  193. package/dist/index188.js.map +1 -1
  194. package/dist/index189.js +8 -5
  195. package/dist/index189.js.map +1 -1
  196. package/dist/index190.js +5 -4
  197. package/dist/index190.js.map +1 -1
  198. package/dist/index191.js +8 -0
  199. package/dist/index191.js.map +1 -0
  200. package/dist/{index193.js → index194.js} +1 -1
  201. package/dist/{index193.js.map → index194.js.map} +1 -1
  202. package/dist/{index195.js → index196.js} +3 -3
  203. package/dist/{index195.js.map → index196.js.map} +1 -1
  204. package/dist/{index197.js → index198.js} +1 -1
  205. package/dist/{index197.js.map → index198.js.map} +1 -1
  206. package/dist/{index205.js → index206.js} +1 -1
  207. package/dist/{index205.js.map → index206.js.map} +1 -1
  208. package/dist/index21.js +34 -30
  209. package/dist/index21.js.map +1 -1
  210. package/dist/{index213.js → index214.js} +1 -1
  211. package/dist/{index213.js.map → index214.js.map} +1 -1
  212. package/dist/index217.js +42 -42
  213. package/dist/index217.js.map +1 -1
  214. package/dist/index22.js +3 -3
  215. package/dist/index228.js +1 -1
  216. package/dist/index229.js +20 -52
  217. package/dist/index229.js.map +1 -1
  218. package/dist/index230.js +52 -20
  219. package/dist/index230.js.map +1 -1
  220. package/dist/index24.js +2 -2
  221. package/dist/index27.js +2 -2
  222. package/dist/index28.js +119 -60
  223. package/dist/index28.js.map +1 -1
  224. package/dist/index29.js +1 -1
  225. package/dist/index3.js +1 -1
  226. package/dist/index30.js +56 -41
  227. package/dist/index30.js.map +1 -1
  228. package/dist/index31.js +11 -10
  229. package/dist/index32.js +59 -44
  230. package/dist/index32.js.map +1 -1
  231. package/dist/index34.js +1 -1
  232. package/dist/index35.js +56 -49
  233. package/dist/index35.js.map +1 -1
  234. package/dist/index37.js +2 -2
  235. package/dist/index38.js +3 -3
  236. package/dist/index39.js +1 -1
  237. package/dist/index40.js +1 -1
  238. package/dist/index40.js.map +1 -1
  239. package/dist/index41.js +8 -7
  240. package/dist/index42.js +7 -6
  241. package/dist/index43.js +18 -18
  242. package/dist/index43.js.map +1 -1
  243. package/dist/index44.js +3 -3
  244. package/dist/index45.js +4 -4
  245. package/dist/index48.js +53 -56
  246. package/dist/index48.js.map +1 -1
  247. package/dist/index49.js +35 -25
  248. package/dist/index49.js.map +1 -1
  249. package/dist/index5.js +294 -307
  250. package/dist/index5.js.map +1 -1
  251. package/dist/index50.js +48 -48
  252. package/dist/index50.js.map +1 -1
  253. package/dist/index51.js +2 -2
  254. package/dist/index54.js +20 -19
  255. package/dist/index54.js.map +1 -1
  256. package/dist/index56.js +1 -1
  257. package/dist/index57.js +13 -9
  258. package/dist/index57.js.map +1 -1
  259. package/dist/index6.js +8 -7
  260. package/dist/index62.js +1 -1
  261. package/dist/index63.js +1 -1
  262. package/dist/index64.js +3 -2
  263. package/dist/index66.js +1 -1
  264. package/dist/index69.js +59 -5
  265. package/dist/index69.js.map +1 -1
  266. package/dist/index70.js +5 -9
  267. package/dist/index70.js.map +1 -1
  268. package/dist/index71.js +12 -0
  269. package/dist/index71.js.map +1 -0
  270. package/dist/index73.js +2 -2
  271. package/dist/index73.js.map +1 -1
  272. package/dist/index74.js +2 -2
  273. package/dist/index74.js.map +1 -1
  274. package/dist/index75.js +2 -2
  275. package/dist/index75.js.map +1 -1
  276. package/dist/index76.js +1 -1
  277. package/dist/index76.js.map +1 -1
  278. package/dist/index77.js +1 -1
  279. package/dist/index77.js.map +1 -1
  280. package/dist/index78.js +1 -1
  281. package/dist/index78.js.map +1 -1
  282. package/dist/index79.js +1 -1
  283. package/dist/index79.js.map +1 -1
  284. package/dist/index8.js +3 -3
  285. package/dist/index80.js +1 -1
  286. package/dist/index80.js.map +1 -1
  287. package/dist/index81.js +1 -1
  288. package/dist/index81.js.map +1 -1
  289. package/dist/index82.js +1 -1
  290. package/dist/index82.js.map +1 -1
  291. package/dist/index83.js +1 -1
  292. package/dist/index83.js.map +1 -1
  293. package/dist/index84.js +1 -1
  294. package/dist/index84.js.map +1 -1
  295. package/dist/index85.js +1 -1
  296. package/dist/index85.js.map +1 -1
  297. package/dist/index86.js +1 -1
  298. package/dist/index86.js.map +1 -1
  299. package/dist/index87.js +1 -1
  300. package/dist/index87.js.map +1 -1
  301. package/dist/index88.js +1 -1
  302. package/dist/index88.js.map +1 -1
  303. package/dist/index89.js +1 -1
  304. package/dist/index89.js.map +1 -1
  305. package/dist/index90.js +1 -1
  306. package/dist/index90.js.map +1 -1
  307. package/dist/index91.js +1 -1
  308. package/dist/index91.js.map +1 -1
  309. package/dist/index92.js +1 -1
  310. package/dist/index92.js.map +1 -1
  311. package/dist/index93.js +1 -1
  312. package/dist/index93.js.map +1 -1
  313. package/dist/index94.js +1 -1
  314. package/dist/index94.js.map +1 -1
  315. package/dist/index95.js +1 -1
  316. package/dist/index95.js.map +1 -1
  317. package/dist/index96.js +1 -1
  318. package/dist/index96.js.map +1 -1
  319. package/dist/index97.js +1 -1
  320. package/dist/index97.js.map +1 -1
  321. package/dist/index98.js +1 -1
  322. package/dist/index98.js.map +1 -1
  323. package/dist/index99.js +2 -2
  324. package/dist/index99.js.map +1 -1
  325. package/package.json +1 -1
  326. package/dist/components/NavigationBar/useTabsA11y.d.ts +0 -36
  327. package/dist/index216.js +0 -35
  328. package/dist/index216.js.map +0 -1
  329. package/dist/index72.js +0 -5
  330. package/dist/index72.js.map +0 -1
package/dist/index229.js CHANGED
@@ -1,57 +1,25 @@
1
- import { useState as m, useEffect as w, useCallback as b } from "react";
2
- import { useScrollActiveIntoView as x } from "./index231.js";
3
- function E({
4
- items: u,
5
- isOpen: t,
6
- onSelect: o,
7
- onClose: c,
8
- onOpen: l,
9
- loop: i = !0,
10
- disabled: h = !1,
11
- listboxRef: k,
12
- optionSelector: g = '[role="option"]'
1
+ const l = ["button:not([disabled])", "[href]", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])", '[tabindex]:not([tabindex="-1"]):not([disabled])', '[contenteditable="true"]'].join(", "), a = [l, '[role="menuitem"]', '[role="option"]', '[role="menuitemcheckbox"]', '[role="menuitemradio"]'].join(", ");
2
+ function u({
3
+ container: e,
4
+ includeRoles: t = !1,
5
+ additionalSelectors: r = [],
6
+ filterHidden: s = !1
13
7
  }) {
14
- const [f, a] = m(-1);
15
- w(() => {
16
- t || a(-1);
17
- }, [t]), x({
18
- containerRef: k,
19
- activeIndex: f,
20
- itemSelector: g,
21
- enabled: t
22
- });
23
- const D = b((r) => {
24
- if (h) {
25
- r.key === "Escape" && t && (r.preventDefault(), c());
26
- return;
27
- }
28
- const e = u.length;
29
- switch (r.key) {
30
- case "ArrowDown":
31
- r.preventDefault(), !t && e > 0 ? (l?.(), a(0)) : t && e > 0 && a((n) => i ? (n + 1) % e : Math.min(n + 1, e - 1));
32
- break;
33
- case "ArrowUp":
34
- r.preventDefault(), t && e > 0 && a((n) => n === -1 ? e - 1 : i ? (n - 1 + e) % e : Math.max(n - 1, 0));
35
- break;
36
- case "Enter":
37
- t && f >= 0 && u[f] && (r.preventDefault(), o(u[f], f), a(-1));
38
- break;
39
- case "Escape":
40
- t && (r.preventDefault(), c(), a(-1));
41
- break;
42
- case "Tab":
43
- t && (c(), a(-1));
44
- break;
45
- }
46
- }, [h, u, t, f, o, c, l, i]), d = b((r, e) => `${r}-option-${e}`, []);
47
- return {
48
- highlightedIndex: f,
49
- setHighlightedIndex: a,
50
- handleKeyDown: D,
51
- getOptionId: d
52
- };
8
+ if (!e) return [];
9
+ const d = [t ? a : l, ...r].filter(Boolean).join(", "), i = Array.from(e.querySelectorAll(d));
10
+ return s ? i.filter((n) => {
11
+ const o = window.getComputedStyle(n);
12
+ return o.display !== "none" && o.visibility !== "hidden" && o.opacity !== "0" && !n.hasAttribute("hidden") && n.offsetWidth > 0 && n.offsetHeight > 0;
13
+ }) : i;
14
+ }
15
+ function c(e) {
16
+ const t = u(e);
17
+ return t.length > 0 ? t[0] : null;
53
18
  }
54
19
  export {
55
- E as useComboboxNavigation
20
+ l as FOCUSABLE_SELECTOR,
21
+ a as FOCUSABLE_WITH_ROLES_SELECTOR,
22
+ c as getFirstFocusableElement,
23
+ u as getFocusableElements
56
24
  };
57
25
  //# sourceMappingURL=index229.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index229.js","sources":["../src/utils/a11y/useComboboxNavigation.ts"],"sourcesContent":["import { useCallback, useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\nimport { useScrollActiveIntoView } from './useScrollActiveIntoView';\n\nexport interface UseComboboxNavigationOptions<T = any> {\n /**\n * Array of items to navigate through\n */\n items: T[];\n \n /**\n * Whether the dropdown is currently open\n */\n isOpen: boolean;\n \n /**\n * Callback when an item is selected (Enter key)\n */\n onSelect: (item: T, index: number) => void;\n \n /**\n * Callback to close the dropdown\n */\n onClose: () => void;\n \n /**\n * Optional: Callback to open the dropdown\n */\n onOpen?: () => void;\n \n /**\n * Whether to wrap around at the ends of the list.\n * Default: true\n */\n loop?: boolean;\n \n /**\n * Whether keyboard navigation is disabled\n * (e.g., for custom rendered content)\n */\n disabled?: boolean;\n \n /**\n * Ref to the listbox container for scroll management\n */\n listboxRef?: RefObject<HTMLElement | null>;\n \n /**\n * CSS selector for option elements (default: '[role=\"option\"]')\n */\n optionSelector?: string;\n}\n\nexport interface UseComboboxNavigationReturn {\n /**\n * Currently highlighted index (-1 if none)\n */\n highlightedIndex: number;\n \n /**\n * Set the highlighted index manually\n */\n setHighlightedIndex: (index: number | ((prev: number) => number)) => void;\n \n /**\n * Keyboard event handler for the combobox input\n */\n handleKeyDown: (e: React.KeyboardEvent) => void;\n \n /**\n * Generate stable ID for an option\n */\n getOptionId: (listboxId: string, index: number) => string;\n \n}\n\n/**\n * Hook for managing combobox keyboard navigation with aria-activedescendant.\n * \n * Implements WAI-ARIA 1.2 Combobox pattern:\n * - Arrow Up/Down to navigate options\n * - Enter to select highlighted option\n * - Escape to close dropdown\n * - Tab to close and move focus\n * - Auto-scrolls highlighted option into view\n * \n * @example\n * ```tsx\n * const { \n * highlightedIndex, \n * handleKeyDown, \n * getOptionId \n * } = useComboboxNavigation({\n * items: suggestions,\n * isOpen: isDropdownOpen,\n * onSelect: (item, idx) => handleSelect(item),\n * onClose: () => setIsOpen(false),\n * listboxRef\n * });\n * \n * <input\n * role=\"combobox\"\n * onKeyDown={handleKeyDown}\n * aria-activedescendant={highlightedIndex >= 0 ? getOptionId(listboxId, highlightedIndex) : undefined}\n * />\n * ```\n */\nexport function useComboboxNavigation<T = any>({\n items,\n isOpen,\n onSelect,\n onClose,\n onOpen,\n loop = true,\n disabled = false,\n listboxRef,\n optionSelector = '[role=\"option\"]'\n}: UseComboboxNavigationOptions<T>): UseComboboxNavigationReturn {\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n \n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!isOpen) {\n setHighlightedIndex(-1);\n }\n }, [isOpen]);\n \n // Auto-scroll highlighted item into view\n useScrollActiveIntoView({\n containerRef: listboxRef,\n activeIndex: highlightedIndex,\n itemSelector: optionSelector,\n enabled: isOpen\n });\n \n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) {\n // For disabled navigation, still handle Escape\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n onClose();\n }\n return;\n }\n \n const itemCount = items.length;\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen && itemCount > 0) {\n // Open dropdown and highlight first item\n onOpen?.();\n setHighlightedIndex(0);\n } else if (isOpen && itemCount > 0) {\n // Navigate down\n setHighlightedIndex((prev) => {\n if (loop) {\n return (prev + 1) % itemCount;\n }\n return Math.min(prev + 1, itemCount - 1);\n });\n }\n break;\n \n case 'ArrowUp':\n e.preventDefault();\n if (isOpen && itemCount > 0) {\n // Navigate up\n setHighlightedIndex((prev) => {\n // If nothing highlighted, go to last item\n if (prev === -1) {\n return itemCount - 1;\n }\n if (loop) {\n return (prev - 1 + itemCount) % itemCount;\n }\n return Math.max(prev - 1, 0);\n });\n }\n break;\n \n case 'Enter':\n if (isOpen && highlightedIndex >= 0 && items[highlightedIndex]) {\n e.preventDefault();\n onSelect(items[highlightedIndex], highlightedIndex);\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Tab':\n // Close dropdown on Tab (don't preventDefault - let focus move naturally)\n if (isOpen) {\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n }\n },\n [disabled, items, isOpen, highlightedIndex, onSelect, onClose, onOpen, loop]\n );\n \n const getOptionId = useCallback(\n (listboxId: string, index: number) => `${listboxId}-option-${index}`,\n []\n );\n \n return {\n highlightedIndex,\n setHighlightedIndex,\n handleKeyDown,\n getOptionId\n };\n}\n"],"names":["useState","useEffect","useCallback","useScrollActiveIntoView","useComboboxNavigation","items","isOpen","onSelect","onClose","onOpen","loop","disabled","listboxRef","optionSelector","highlightedIndex","setHighlightedIndex","containerRef","activeIndex","itemSelector","enabled","handleKeyDown","e","key","preventDefault","itemCount","length","prev","Math","min","max","getOptionId","listboxId","index"],"mappings":"AA2GO,SAAA,YAAAA,GAAA,aAAAC,GAAA,eAAAC,SAAA;AAAA,SAAA,2BAAAC,SAAA;AAAA,SAASC,EAA+B;AAAA,EAC7CC,OAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,YAAAA;AAAAA,EACAC,gBAAAA,IAAiB;AACc,GAAgC;AAC/D,QAAM,CAACC,GAAkBC,CAAmB,IAAIf,EAAiB,EAAE;AAGnEC,EAAAA,EAAU,MAAM;AACd,IAAKK,KACHS,EAAoB,EAAE;AAAA,EAE1B,GAAG,CAACT,CAAM,CAAC,GAGXH,EAAwB;AAAA,IACtBa,cAAcJ;AAAAA,IACdK,aAAaH;AAAAA,IACbI,cAAcL;AAAAA,IACdM,SAASb;AAAAA,EAAAA,CACV;AAED,QAAMc,IAAgBlB,EACpB,CAACmB,MAA2B;AAC1B,QAAIV,GAAU;AAEZ,MAAIU,EAAEC,QAAQ,YAAYhB,MACxBe,EAAEE,eAAAA,GACFf,EAAAA;AAEF;AAAA,IACF;AAEA,UAAMgB,IAAYnB,EAAMoB;AAExB,YAAQJ,EAAEC,KAAAA;AAAAA,MACR,KAAK;AACHD,QAAAA,EAAEE,eAAAA,GACE,CAACjB,KAAUkB,IAAY,KAEzBf,IAAAA,GACAM,EAAoB,CAAC,KACZT,KAAUkB,IAAY,KAE/BT,EAAqBW,CAAAA,MACfhB,KACMgB,IAAO,KAAKF,IAEfG,KAAKC,IAAIF,IAAO,GAAGF,IAAY,CAAC,CACxC;AAEH;AAAA,MAEF,KAAK;AACHH,QAAAA,EAAEE,eAAAA,GACEjB,KAAUkB,IAAY,KAExBT,EAAqBW,CAAAA,MAEfA,MAAS,KACJF,IAAY,IAEjBd,KACMgB,IAAO,IAAIF,KAAaA,IAE3BG,KAAKE,IAAIH,IAAO,GAAG,CAAC,CAC5B;AAEH;AAAA,MAEF,KAAK;AACH,QAAIpB,KAAUQ,KAAoB,KAAKT,EAAMS,CAAgB,MAC3DO,EAAEE,eAAAA,GACFhB,EAASF,EAAMS,CAAgB,GAAGA,CAAgB,GAClDC,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AACH,QAAIT,MACFe,EAAEE,eAAAA,GACFf,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AAEH,QAAIT,MACFE,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,IAAA;AAAA,EAEN,GACA,CAACJ,GAAUN,GAAOC,GAAQQ,GAAkBP,GAAUC,GAASC,GAAQC,CAAI,CAC7E,GAEMoB,IAAc5B,EAClB,CAAC6B,GAAmBC,MAAkB,GAAGD,CAAS,WAAWC,CAAK,IAClE,CAAA,CACF;AAEA,SAAO;AAAA,IACLlB,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAK,eAAAA;AAAAA,IACAU,aAAAA;AAAAA,EAAAA;AAEJ;"}
1
+ {"version":3,"file":"index229.js","sources":["../src/utils/a11y/focusableElements.ts"],"sourcesContent":["/**\n * Utilities for finding focusable elements within a container.\n * \n * Used for focus management in modals, popovers, and other interactive overlays.\n */\n\n/**\n * Base selector for standard focusable elements.\n * Matches: buttons, links, inputs, selects, textareas, elements with tabindex >= 0, contenteditable.\n */\nexport const FOCUSABLE_SELECTOR = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"]):not([disabled])',\n '[contenteditable=\"true\"]'\n].join(', ');\n\n/**\n * Extended selector that includes ARIA role-based focusable elements.\n * Useful for composite widgets like menus, listboxes, etc.\n */\nexport const FOCUSABLE_WITH_ROLES_SELECTOR = [\n FOCUSABLE_SELECTOR,\n '[role=\"menuitem\"]',\n '[role=\"option\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]'\n].join(', ');\n\n/**\n * Options for getFocusableElements\n */\nexport interface GetFocusableElementsOptions {\n /**\n * Container element to search within. If null/undefined, returns empty array.\n */\n container: HTMLElement | null;\n /**\n * Whether to include role-based focusable elements (menuitem, option, etc.).\n * Default: false (uses base selector only)\n */\n includeRoles?: boolean;\n /**\n * Additional custom selectors to include.\n */\n additionalSelectors?: string[];\n /**\n * Whether to filter out hidden/invisible elements.\n * Default: false (returns all matching elements regardless of visibility)\n */\n filterHidden?: boolean;\n}\n\n/**\n * Get all focusable elements within a container.\n * \n * @example Basic usage (standard focusable elements)\n * ```ts\n * const focusables = getFocusableElements({ container: dialogRef.current });\n * focusables[0]?.focus(); // Focus first element\n * ```\n * \n * @example With role-based elements (for menus/listboxes)\n * ```ts\n * const focusables = getFocusableElements({ \n * container: menuRef.current,\n * includeRoles: true \n * });\n * ```\n * \n * @example With custom selectors\n * ```ts\n * const focusables = getFocusableElements({ \n * container: customWidgetRef.current,\n * additionalSelectors: ['[data-focusable=\"true\"]']\n * });\n * ```\n */\nexport function getFocusableElements({\n container,\n includeRoles = false,\n additionalSelectors = [],\n filterHidden = false\n}: GetFocusableElementsOptions): HTMLElement[] {\n if (!container) return [];\n\n const selector = [\n includeRoles ? FOCUSABLE_WITH_ROLES_SELECTOR : FOCUSABLE_SELECTOR,\n ...additionalSelectors\n ].filter(Boolean).join(', ');\n\n const elements = Array.from(container.querySelectorAll<HTMLElement>(selector));\n\n if (!filterHidden) return elements;\n\n // Filter out hidden/invisible elements\n return elements.filter((el) => {\n const style = window.getComputedStyle(el);\n return (\n style.display !== 'none' &&\n style.visibility !== 'hidden' &&\n style.opacity !== '0' &&\n !el.hasAttribute('hidden') &&\n el.offsetWidth > 0 &&\n el.offsetHeight > 0\n );\n });\n}\n\n/**\n * Get the first focusable element in a container.\n * Returns null if none found.\n */\nexport function getFirstFocusableElement(\n options: GetFocusableElementsOptions\n): HTMLElement | null {\n const focusables = getFocusableElements(options);\n return focusables.length > 0 ? focusables[0] : null;\n}\n\n/**\n * Get the last focusable element in a container.\n * Returns null if none found.\n */\nexport function getLastFocusableElement(\n options: GetFocusableElementsOptions\n): HTMLElement | null {\n const focusables = getFocusableElements(options);\n return focusables.length > 0 ? focusables[focusables.length - 1] : null;\n}\n"],"names":["FOCUSABLE_SELECTOR","join","FOCUSABLE_WITH_ROLES_SELECTOR","getFocusableElements","container","includeRoles","additionalSelectors","filterHidden","selector","filter","Boolean","elements","Array","from","querySelectorAll","el","style","window","getComputedStyle","display","visibility","opacity","hasAttribute","offsetWidth","offsetHeight","getFirstFocusableElement","options","focusables","length"],"mappings":"AAUO,MAAMA,IAAqB,CAChC,0BACA,UACA,yBACA,0BACA,4BACA,mDACA,0BAA0B,EAC1BC,KAAK,IAAI,GAMEC,IAAgC,CAC3CF,GACA,qBACA,mBACA,6BACA,wBAAwB,EACxBC,KAAK,IAAI;AAmDJ,SAASE,EAAqB;AAAA,EACnCC,WAAAA;AAAAA,EACAC,cAAAA,IAAe;AAAA,EACfC,qBAAAA,IAAsB,CAAA;AAAA,EACtBC,cAAAA,IAAe;AACY,GAAkB;AAC7C,MAAI,CAACH,EAAW,QAAO,CAAA;AAEvB,QAAMI,IAAW,CACfH,IAAeH,IAAgCF,GAC/C,GAAGM,CAAmB,EACtBG,OAAOC,OAAO,EAAET,KAAK,IAAI,GAErBU,IAAWC,MAAMC,KAAKT,EAAUU,iBAA8BN,CAAQ,CAAC;AAE7E,SAAKD,IAGEI,EAASF,OAAQM,CAAAA,MAAO;AAC7B,UAAMC,IAAQC,OAAOC,iBAAiBH,CAAE;AACxC,WACEC,EAAMG,YAAY,UAClBH,EAAMI,eAAe,YACrBJ,EAAMK,YAAY,OAClB,CAACN,EAAGO,aAAa,QAAQ,KACzBP,EAAGQ,cAAc,KACjBR,EAAGS,eAAe;AAAA,EAEtB,CAAC,IAbyBb;AAc5B;AAMO,SAASc,EACdC,GACoB;AACpB,QAAMC,IAAaxB,EAAqBuB,CAAO;AAC/C,SAAOC,EAAWC,SAAS,IAAID,EAAW,CAAC,IAAI;AACjD;"}
package/dist/index230.js CHANGED
@@ -1,25 +1,57 @@
1
- const l = ["button:not([disabled])", "[href]", "input:not([disabled])", "select:not([disabled])", "textarea:not([disabled])", '[tabindex]:not([tabindex="-1"]):not([disabled])', '[contenteditable="true"]'].join(", "), a = [l, '[role="menuitem"]', '[role="option"]', '[role="menuitemcheckbox"]', '[role="menuitemradio"]'].join(", ");
2
- function u({
3
- container: e,
4
- includeRoles: t = !1,
5
- additionalSelectors: r = [],
6
- filterHidden: s = !1
1
+ import { useState as m, useEffect as w, useCallback as b } from "react";
2
+ import { useScrollActiveIntoView as x } from "./index231.js";
3
+ function E({
4
+ items: u,
5
+ isOpen: t,
6
+ onSelect: o,
7
+ onClose: c,
8
+ onOpen: l,
9
+ loop: i = !0,
10
+ disabled: h = !1,
11
+ listboxRef: k,
12
+ optionSelector: g = '[role="option"]'
7
13
  }) {
8
- if (!e) return [];
9
- const d = [t ? a : l, ...r].filter(Boolean).join(", "), i = Array.from(e.querySelectorAll(d));
10
- return s ? i.filter((n) => {
11
- const o = window.getComputedStyle(n);
12
- return o.display !== "none" && o.visibility !== "hidden" && o.opacity !== "0" && !n.hasAttribute("hidden") && n.offsetWidth > 0 && n.offsetHeight > 0;
13
- }) : i;
14
- }
15
- function c(e) {
16
- const t = u(e);
17
- return t.length > 0 ? t[0] : null;
14
+ const [f, a] = m(-1);
15
+ w(() => {
16
+ t || a(-1);
17
+ }, [t]), x({
18
+ containerRef: k,
19
+ activeIndex: f,
20
+ itemSelector: g,
21
+ enabled: t
22
+ });
23
+ const D = b((r) => {
24
+ if (h) {
25
+ r.key === "Escape" && t && (r.preventDefault(), c());
26
+ return;
27
+ }
28
+ const e = u.length;
29
+ switch (r.key) {
30
+ case "ArrowDown":
31
+ r.preventDefault(), !t && e > 0 ? (l?.(), a(0)) : t && e > 0 && a((n) => i ? (n + 1) % e : Math.min(n + 1, e - 1));
32
+ break;
33
+ case "ArrowUp":
34
+ r.preventDefault(), t && e > 0 && a((n) => n === -1 ? e - 1 : i ? (n - 1 + e) % e : Math.max(n - 1, 0));
35
+ break;
36
+ case "Enter":
37
+ t && f >= 0 && u[f] && (r.preventDefault(), o(u[f], f), a(-1));
38
+ break;
39
+ case "Escape":
40
+ t && (r.preventDefault(), c(), a(-1));
41
+ break;
42
+ case "Tab":
43
+ t && (c(), a(-1));
44
+ break;
45
+ }
46
+ }, [h, u, t, f, o, c, l, i]), d = b((r, e) => `${r}-option-${e}`, []);
47
+ return {
48
+ highlightedIndex: f,
49
+ setHighlightedIndex: a,
50
+ handleKeyDown: D,
51
+ getOptionId: d
52
+ };
18
53
  }
19
54
  export {
20
- l as FOCUSABLE_SELECTOR,
21
- a as FOCUSABLE_WITH_ROLES_SELECTOR,
22
- c as getFirstFocusableElement,
23
- u as getFocusableElements
55
+ E as useComboboxNavigation
24
56
  };
25
57
  //# sourceMappingURL=index230.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index230.js","sources":["../src/utils/a11y/focusableElements.ts"],"sourcesContent":["/**\n * Utilities for finding focusable elements within a container.\n * \n * Used for focus management in modals, popovers, and other interactive overlays.\n */\n\n/**\n * Base selector for standard focusable elements.\n * Matches: buttons, links, inputs, selects, textareas, elements with tabindex >= 0, contenteditable.\n */\nexport const FOCUSABLE_SELECTOR = [\n 'button:not([disabled])',\n '[href]',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"]):not([disabled])',\n '[contenteditable=\"true\"]'\n].join(', ');\n\n/**\n * Extended selector that includes ARIA role-based focusable elements.\n * Useful for composite widgets like menus, listboxes, etc.\n */\nexport const FOCUSABLE_WITH_ROLES_SELECTOR = [\n FOCUSABLE_SELECTOR,\n '[role=\"menuitem\"]',\n '[role=\"option\"]',\n '[role=\"menuitemcheckbox\"]',\n '[role=\"menuitemradio\"]'\n].join(', ');\n\n/**\n * Options for getFocusableElements\n */\nexport interface GetFocusableElementsOptions {\n /**\n * Container element to search within. If null/undefined, returns empty array.\n */\n container: HTMLElement | null;\n /**\n * Whether to include role-based focusable elements (menuitem, option, etc.).\n * Default: false (uses base selector only)\n */\n includeRoles?: boolean;\n /**\n * Additional custom selectors to include.\n */\n additionalSelectors?: string[];\n /**\n * Whether to filter out hidden/invisible elements.\n * Default: false (returns all matching elements regardless of visibility)\n */\n filterHidden?: boolean;\n}\n\n/**\n * Get all focusable elements within a container.\n * \n * @example Basic usage (standard focusable elements)\n * ```ts\n * const focusables = getFocusableElements({ container: dialogRef.current });\n * focusables[0]?.focus(); // Focus first element\n * ```\n * \n * @example With role-based elements (for menus/listboxes)\n * ```ts\n * const focusables = getFocusableElements({ \n * container: menuRef.current,\n * includeRoles: true \n * });\n * ```\n * \n * @example With custom selectors\n * ```ts\n * const focusables = getFocusableElements({ \n * container: customWidgetRef.current,\n * additionalSelectors: ['[data-focusable=\"true\"]']\n * });\n * ```\n */\nexport function getFocusableElements({\n container,\n includeRoles = false,\n additionalSelectors = [],\n filterHidden = false\n}: GetFocusableElementsOptions): HTMLElement[] {\n if (!container) return [];\n\n const selector = [\n includeRoles ? FOCUSABLE_WITH_ROLES_SELECTOR : FOCUSABLE_SELECTOR,\n ...additionalSelectors\n ].filter(Boolean).join(', ');\n\n const elements = Array.from(container.querySelectorAll<HTMLElement>(selector));\n\n if (!filterHidden) return elements;\n\n // Filter out hidden/invisible elements\n return elements.filter((el) => {\n const style = window.getComputedStyle(el);\n return (\n style.display !== 'none' &&\n style.visibility !== 'hidden' &&\n style.opacity !== '0' &&\n !el.hasAttribute('hidden') &&\n el.offsetWidth > 0 &&\n el.offsetHeight > 0\n );\n });\n}\n\n/**\n * Get the first focusable element in a container.\n * Returns null if none found.\n */\nexport function getFirstFocusableElement(\n options: GetFocusableElementsOptions\n): HTMLElement | null {\n const focusables = getFocusableElements(options);\n return focusables.length > 0 ? focusables[0] : null;\n}\n\n/**\n * Get the last focusable element in a container.\n * Returns null if none found.\n */\nexport function getLastFocusableElement(\n options: GetFocusableElementsOptions\n): HTMLElement | null {\n const focusables = getFocusableElements(options);\n return focusables.length > 0 ? focusables[focusables.length - 1] : null;\n}\n"],"names":["FOCUSABLE_SELECTOR","join","FOCUSABLE_WITH_ROLES_SELECTOR","getFocusableElements","container","includeRoles","additionalSelectors","filterHidden","selector","filter","Boolean","elements","Array","from","querySelectorAll","el","style","window","getComputedStyle","display","visibility","opacity","hasAttribute","offsetWidth","offsetHeight","getFirstFocusableElement","options","focusables","length"],"mappings":"AAUO,MAAMA,IAAqB,CAChC,0BACA,UACA,yBACA,0BACA,4BACA,mDACA,0BAA0B,EAC1BC,KAAK,IAAI,GAMEC,IAAgC,CAC3CF,GACA,qBACA,mBACA,6BACA,wBAAwB,EACxBC,KAAK,IAAI;AAmDJ,SAASE,EAAqB;AAAA,EACnCC,WAAAA;AAAAA,EACAC,cAAAA,IAAe;AAAA,EACfC,qBAAAA,IAAsB,CAAA;AAAA,EACtBC,cAAAA,IAAe;AACY,GAAkB;AAC7C,MAAI,CAACH,EAAW,QAAO,CAAA;AAEvB,QAAMI,IAAW,CACfH,IAAeH,IAAgCF,GAC/C,GAAGM,CAAmB,EACtBG,OAAOC,OAAO,EAAET,KAAK,IAAI,GAErBU,IAAWC,MAAMC,KAAKT,EAAUU,iBAA8BN,CAAQ,CAAC;AAE7E,SAAKD,IAGEI,EAASF,OAAQM,CAAAA,MAAO;AAC7B,UAAMC,IAAQC,OAAOC,iBAAiBH,CAAE;AACxC,WACEC,EAAMG,YAAY,UAClBH,EAAMI,eAAe,YACrBJ,EAAMK,YAAY,OAClB,CAACN,EAAGO,aAAa,QAAQ,KACzBP,EAAGQ,cAAc,KACjBR,EAAGS,eAAe;AAAA,EAEtB,CAAC,IAbyBb;AAc5B;AAMO,SAASc,EACdC,GACoB;AACpB,QAAMC,IAAaxB,EAAqBuB,CAAO;AAC/C,SAAOC,EAAWC,SAAS,IAAID,EAAW,CAAC,IAAI;AACjD;"}
1
+ {"version":3,"file":"index230.js","sources":["../src/utils/a11y/useComboboxNavigation.ts"],"sourcesContent":["import { useCallback, useState, useEffect } from 'react';\nimport type { RefObject } from 'react';\nimport { useScrollActiveIntoView } from './useScrollActiveIntoView';\n\nexport interface UseComboboxNavigationOptions<T = any> {\n /**\n * Array of items to navigate through\n */\n items: T[];\n \n /**\n * Whether the dropdown is currently open\n */\n isOpen: boolean;\n \n /**\n * Callback when an item is selected (Enter key)\n */\n onSelect: (item: T, index: number) => void;\n \n /**\n * Callback to close the dropdown\n */\n onClose: () => void;\n \n /**\n * Optional: Callback to open the dropdown\n */\n onOpen?: () => void;\n \n /**\n * Whether to wrap around at the ends of the list.\n * Default: true\n */\n loop?: boolean;\n \n /**\n * Whether keyboard navigation is disabled\n * (e.g., for custom rendered content)\n */\n disabled?: boolean;\n \n /**\n * Ref to the listbox container for scroll management\n */\n listboxRef?: RefObject<HTMLElement | null>;\n \n /**\n * CSS selector for option elements (default: '[role=\"option\"]')\n */\n optionSelector?: string;\n}\n\nexport interface UseComboboxNavigationReturn {\n /**\n * Currently highlighted index (-1 if none)\n */\n highlightedIndex: number;\n \n /**\n * Set the highlighted index manually\n */\n setHighlightedIndex: (index: number | ((prev: number) => number)) => void;\n \n /**\n * Keyboard event handler for the combobox input\n */\n handleKeyDown: (e: React.KeyboardEvent) => void;\n \n /**\n * Generate stable ID for an option\n */\n getOptionId: (listboxId: string, index: number) => string;\n \n}\n\n/**\n * Hook for managing combobox keyboard navigation with aria-activedescendant.\n * \n * Implements WAI-ARIA 1.2 Combobox pattern:\n * - Arrow Up/Down to navigate options\n * - Enter to select highlighted option\n * - Escape to close dropdown\n * - Tab to close and move focus\n * - Auto-scrolls highlighted option into view\n * \n * @example\n * ```tsx\n * const { \n * highlightedIndex, \n * handleKeyDown, \n * getOptionId \n * } = useComboboxNavigation({\n * items: suggestions,\n * isOpen: isDropdownOpen,\n * onSelect: (item, idx) => handleSelect(item),\n * onClose: () => setIsOpen(false),\n * listboxRef\n * });\n * \n * <input\n * role=\"combobox\"\n * onKeyDown={handleKeyDown}\n * aria-activedescendant={highlightedIndex >= 0 ? getOptionId(listboxId, highlightedIndex) : undefined}\n * />\n * ```\n */\nexport function useComboboxNavigation<T = any>({\n items,\n isOpen,\n onSelect,\n onClose,\n onOpen,\n loop = true,\n disabled = false,\n listboxRef,\n optionSelector = '[role=\"option\"]'\n}: UseComboboxNavigationOptions<T>): UseComboboxNavigationReturn {\n const [highlightedIndex, setHighlightedIndex] = useState<number>(-1);\n \n // Reset highlighted index when dropdown closes\n useEffect(() => {\n if (!isOpen) {\n setHighlightedIndex(-1);\n }\n }, [isOpen]);\n \n // Auto-scroll highlighted item into view\n useScrollActiveIntoView({\n containerRef: listboxRef,\n activeIndex: highlightedIndex,\n itemSelector: optionSelector,\n enabled: isOpen\n });\n \n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (disabled) {\n // For disabled navigation, still handle Escape\n if (e.key === 'Escape' && isOpen) {\n e.preventDefault();\n onClose();\n }\n return;\n }\n \n const itemCount = items.length;\n \n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!isOpen && itemCount > 0) {\n // Open dropdown and highlight first item\n onOpen?.();\n setHighlightedIndex(0);\n } else if (isOpen && itemCount > 0) {\n // Navigate down\n setHighlightedIndex((prev) => {\n if (loop) {\n return (prev + 1) % itemCount;\n }\n return Math.min(prev + 1, itemCount - 1);\n });\n }\n break;\n \n case 'ArrowUp':\n e.preventDefault();\n if (isOpen && itemCount > 0) {\n // Navigate up\n setHighlightedIndex((prev) => {\n // If nothing highlighted, go to last item\n if (prev === -1) {\n return itemCount - 1;\n }\n if (loop) {\n return (prev - 1 + itemCount) % itemCount;\n }\n return Math.max(prev - 1, 0);\n });\n }\n break;\n \n case 'Enter':\n if (isOpen && highlightedIndex >= 0 && items[highlightedIndex]) {\n e.preventDefault();\n onSelect(items[highlightedIndex], highlightedIndex);\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Escape':\n if (isOpen) {\n e.preventDefault();\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n \n case 'Tab':\n // Close dropdown on Tab (don't preventDefault - let focus move naturally)\n if (isOpen) {\n onClose();\n setHighlightedIndex(-1);\n }\n break;\n }\n },\n [disabled, items, isOpen, highlightedIndex, onSelect, onClose, onOpen, loop]\n );\n \n const getOptionId = useCallback(\n (listboxId: string, index: number) => `${listboxId}-option-${index}`,\n []\n );\n \n return {\n highlightedIndex,\n setHighlightedIndex,\n handleKeyDown,\n getOptionId\n };\n}\n"],"names":["useState","useEffect","useCallback","useScrollActiveIntoView","useComboboxNavigation","items","isOpen","onSelect","onClose","onOpen","loop","disabled","listboxRef","optionSelector","highlightedIndex","setHighlightedIndex","containerRef","activeIndex","itemSelector","enabled","handleKeyDown","e","key","preventDefault","itemCount","length","prev","Math","min","max","getOptionId","listboxId","index"],"mappings":"AA2GO,SAAA,YAAAA,GAAA,aAAAC,GAAA,eAAAC,SAAA;AAAA,SAAA,2BAAAC,SAAA;AAAA,SAASC,EAA+B;AAAA,EAC7CC,OAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,UAAAA;AAAAA,EACAC,SAAAA;AAAAA,EACAC,QAAAA;AAAAA,EACAC,MAAAA,IAAO;AAAA,EACPC,UAAAA,IAAW;AAAA,EACXC,YAAAA;AAAAA,EACAC,gBAAAA,IAAiB;AACc,GAAgC;AAC/D,QAAM,CAACC,GAAkBC,CAAmB,IAAIf,EAAiB,EAAE;AAGnEC,EAAAA,EAAU,MAAM;AACd,IAAKK,KACHS,EAAoB,EAAE;AAAA,EAE1B,GAAG,CAACT,CAAM,CAAC,GAGXH,EAAwB;AAAA,IACtBa,cAAcJ;AAAAA,IACdK,aAAaH;AAAAA,IACbI,cAAcL;AAAAA,IACdM,SAASb;AAAAA,EAAAA,CACV;AAED,QAAMc,IAAgBlB,EACpB,CAACmB,MAA2B;AAC1B,QAAIV,GAAU;AAEZ,MAAIU,EAAEC,QAAQ,YAAYhB,MACxBe,EAAEE,eAAAA,GACFf,EAAAA;AAEF;AAAA,IACF;AAEA,UAAMgB,IAAYnB,EAAMoB;AAExB,YAAQJ,EAAEC,KAAAA;AAAAA,MACR,KAAK;AACHD,QAAAA,EAAEE,eAAAA,GACE,CAACjB,KAAUkB,IAAY,KAEzBf,IAAAA,GACAM,EAAoB,CAAC,KACZT,KAAUkB,IAAY,KAE/BT,EAAqBW,CAAAA,MACfhB,KACMgB,IAAO,KAAKF,IAEfG,KAAKC,IAAIF,IAAO,GAAGF,IAAY,CAAC,CACxC;AAEH;AAAA,MAEF,KAAK;AACHH,QAAAA,EAAEE,eAAAA,GACEjB,KAAUkB,IAAY,KAExBT,EAAqBW,CAAAA,MAEfA,MAAS,KACJF,IAAY,IAEjBd,KACMgB,IAAO,IAAIF,KAAaA,IAE3BG,KAAKE,IAAIH,IAAO,GAAG,CAAC,CAC5B;AAEH;AAAA,MAEF,KAAK;AACH,QAAIpB,KAAUQ,KAAoB,KAAKT,EAAMS,CAAgB,MAC3DO,EAAEE,eAAAA,GACFhB,EAASF,EAAMS,CAAgB,GAAGA,CAAgB,GAClDC,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AACH,QAAIT,MACFe,EAAEE,eAAAA,GACFf,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,MAEF,KAAK;AAEH,QAAIT,MACFE,EAAAA,GACAO,EAAoB,EAAE;AAExB;AAAA,IAAA;AAAA,EAEN,GACA,CAACJ,GAAUN,GAAOC,GAAQQ,GAAkBP,GAAUC,GAASC,GAAQC,CAAI,CAC7E,GAEMoB,IAAc5B,EAClB,CAAC6B,GAAmBC,MAAkB,GAAGD,CAAS,WAAWC,CAAK,IAClE,CAAA,CACF;AAEA,SAAO;AAAA,IACLlB,kBAAAA;AAAAA,IACAC,qBAAAA;AAAAA,IACAK,eAAAA;AAAAA,IACAU,aAAAA;AAAAA,EAAAA;AAEJ;"}
package/dist/index24.js CHANGED
@@ -4,8 +4,8 @@ import { Icon as M } from "./index5.js";
4
4
  import { Checkbox as me } from "./index22.js";
5
5
  import { Button as R } from "./index3.js";
6
6
  import { InputWithIcon as fe } from "./index51.js";
7
- import { useStableId as T } from "./index189.js";
8
- import { useCombobox as pe } from "./index195.js";
7
+ import { useStableId as T } from "./index190.js";
8
+ import { useCombobox as pe } from "./index196.js";
9
9
  function m() {
10
10
  return m = Object.assign ? Object.assign.bind() : function(t) {
11
11
  for (var a = 1; a < arguments.length; a++) {
package/dist/index27.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import d, { useMemo as S, useRef as D, useEffect as c } from "react";
2
2
  import { Icon as j } from "./index5.js";
3
- import { getA11yNameAttributes as B } from "./index70.js";
4
- import { useDismissOnEscape as M } from "./index197.js";
3
+ import { getA11yNameAttributes as B } from "./index71.js";
4
+ import { useDismissOnEscape as M } from "./index198.js";
5
5
  /* empty css */
6
6
  function m() {
7
7
  return m = Object.assign ? Object.assign.bind() : function(r) {
package/dist/index28.js CHANGED
@@ -1,84 +1,143 @@
1
- import r, { useState as f, useEffect as k } from "react";
2
- import { Icon as E } from "./index5.js";
3
- import { Popover as N } from "./index18.js";
4
- import { MenuList as I } from "./index17.js";
1
+ import o, { useState as F, useMemo as R, useRef as S, useEffect as _ } from "react";
2
+ import { Icon as $ } from "./index5.js";
3
+ import { Popover as j } from "./index18.js";
4
+ import { MenuList as B } from "./index17.js";
5
+ import { useStableId as z } from "./index190.js";
6
+ import { getA11yNameAttributes as H } from "./index71.js";
7
+ import { useTabsA11y as V, getPanelId as q } from "./index69.js";
5
8
  /* empty css */
6
- const M = ({
7
- defaultActiveTab: a,
8
- tabs: o,
9
- onTabChange: p,
10
- primaryTabCount: i = 0,
11
- singleTabAsHeading: y = !1
9
+ function s() {
10
+ return s = Object.assign ? Object.assign.bind() : function(l) {
11
+ for (var t = 1; t < arguments.length; t++) {
12
+ var i = arguments[t];
13
+ for (var c in i) ({}).hasOwnProperty.call(i, c) && (l[c] = i[c]);
14
+ }
15
+ return l;
16
+ }, s.apply(null, arguments);
17
+ }
18
+ const ee = ({
19
+ defaultActiveTab: l,
20
+ tabs: t,
21
+ onTabChange: i,
22
+ primaryTabCount: c,
23
+ headingLevel: v,
24
+ id: A,
25
+ ariaLabel: D = "Tabs",
26
+ ariaLabelledBy: L,
27
+ panelId: f
12
28
  }) => {
13
- const T = a || (o[0] ? o[0].id : ""), [n, c] = f(T), [d, m] = f(!1), v = i || o?.length, h = o.slice(0, v), l = o.slice(v), s = l.find((e) => e.id === n), x = y && o.length === 1;
14
- k(() => {
15
- c(a || "");
16
- }, [a]);
17
- const u = (e) => {
18
- c(e?.id), p?.(e?.id);
19
- }, b = (e, t) => e.id === t;
20
- if (x) {
21
- const e = o[0];
22
- return /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement("div", {
23
- className: "se-design-tabs-heading text-xl font-semibold text-[var(--color-gray-900)] mb-4"
24
- }, e.label), /* @__PURE__ */ r.createElement("div", {
29
+ const O = l || (t[0] ? t[0].id : ""), [d, g] = F(O), [p, h] = F(!1), T = c ?? t?.length, b = t.slice(0, T), m = t.slice(T), u = m.find((e) => e.id === d), w = t.some((e) => e.renderTabContent), y = z(A, "tabs"), M = R(() => {
30
+ const e = b.filter((a) => !a.disabled), r = m.filter((a) => !a.disabled), n = e.map((a) => a.id);
31
+ return r.length > 0 ? [...n, "overflow"] : n;
32
+ }, [b, m]), {
33
+ getTabProps: E,
34
+ getPanelProps: K,
35
+ handleKeyDown: I,
36
+ setFocusedTabId: x
37
+ } = V({
38
+ itemIds: M,
39
+ activeItem: d,
40
+ orientation: "horizontal",
41
+ idBase: y,
42
+ includePanelLinks: w || !!f,
43
+ externalPanelId: f
44
+ }), k = S(null);
45
+ _(() => {
46
+ g(l || "");
47
+ }, [l]);
48
+ const C = (e) => {
49
+ g(e?.id), i?.(e?.id);
50
+ }, P = (e, r) => e.id === r;
51
+ if (v && t.length === 1) {
52
+ const e = t[0];
53
+ return /* @__PURE__ */ o.createElement(o.Fragment, null, /* @__PURE__ */ o.createElement(v, {
54
+ className: "se-design-tabs se-design-tabs-heading"
55
+ }, e.label), /* @__PURE__ */ o.createElement("div", {
25
56
  className: "se-design-tabs-content"
26
- }, /* @__PURE__ */ r.createElement("div", {
57
+ }, /* @__PURE__ */ o.createElement("div", {
27
58
  className: "tab-content block"
28
59
  }, e?.renderTabContent && e?.renderTabContent(e))));
29
60
  }
30
- return /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement("div", {
31
- className: "se-design-tabs flex items-center relative border rounded-md border-[var(--color-gray-400)] w-fit",
61
+ return /* @__PURE__ */ o.createElement(o.Fragment, null, /* @__PURE__ */ o.createElement("div", s({
62
+ className: "se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit",
63
+ role: "tablist",
32
64
  "data-automation-id": "tabs-container"
33
- }, h.map((e) => {
34
- const t = n === e.id, g = e.disabled;
35
- return /* @__PURE__ */ r.createElement("div", {
36
- key: e.label,
37
- onClick: () => !g && u(e),
38
- className: `se-design-tab-item text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${g ? "text-[var(--color-gray-400)] cursor-not-allowed" : t ? "se-design-tab-item-active text-[var(--color-blue-500)] bg-[var(--color-blue-100)] font-medium hover:cursor-pointer" : "text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out"}`,
65
+ }, H({
66
+ ariaLabel: D,
67
+ ariaLabelledBy: L
68
+ })), b.map((e) => {
69
+ const r = d === e.id, n = !!e.disabled, a = E(e.id);
70
+ return /* @__PURE__ */ o.createElement("button", s({
71
+ type: "button",
72
+ key: e.id
73
+ }, a, {
74
+ disabled: n,
75
+ "aria-label": e.ariaLabel,
76
+ onFocus: () => !n && x(e.id),
77
+ onKeyDown: I,
78
+ onClick: () => C(e),
79
+ className: `se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${n ? "" : "focus-outline"} ${n ? "text-[var(--color-gray-400)] cursor-not-allowed" : r ? "se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer" : "text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out"}`,
39
80
  "data-automation-id": `tab-item-${e.automationId || e.id || ""}`
40
- }, e.label);
41
- }), l.length > 0 && /* @__PURE__ */ r.createElement(N, {
81
+ }), e.label);
82
+ }), m.length > 0 && /* @__PURE__ */ o.createElement(j, {
42
83
  className: "se-design-overflow-tabs",
43
84
  position: "bottom-left",
44
85
  automationId: "tabs-kebab-menu",
45
86
  noBorder: !0,
87
+ disableClickToggle: !0,
88
+ onPopoverToggle: (e) => {
89
+ e || k.current?.focus();
90
+ },
46
91
  renderPopoverSrcElement: ({
47
- displayPopover: e
48
- }) => /* @__PURE__ */ r.createElement("div", {
49
- className: `overflow-tabs-src-element border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${e ? "bg-[var(--color-blue-100)]" : ""} ${s?.label ? "bg-[var(--color-blue-100)]" : "hover:bg-[var(--color-gray-50)]"}`,
50
- onMouseEnter: () => m(!0),
51
- onMouseLeave: () => m(!1)
52
- }, s?.label ? /* @__PURE__ */ r.createElement(r.Fragment, null, /* @__PURE__ */ r.createElement("span", {
53
- className: "text-[var(--color-blue-500)]"
54
- }, s?.label), /* @__PURE__ */ r.createElement(E, {
55
- name: "chevron",
56
- rotation: e ? "180" : "0",
57
- stroke: d ? "var(--color-gray-900)" : "var(--color-gray-700)"
58
- })) : /* @__PURE__ */ r.createElement(E, {
59
- name: "kebab-menu",
60
- fill: d ? "var(--color-gray-900)" : "var(--color-gray-700)"
61
- })),
92
+ displayPopover: e,
93
+ togglePopover: r
94
+ }) => {
95
+ const n = E("overflow"), a = u ? q(u.id, y) : void 0;
96
+ return /* @__PURE__ */ o.createElement("div", s({}, n, {
97
+ ref: (N) => {
98
+ k.current = N, n.ref(N);
99
+ },
100
+ "aria-controls": a,
101
+ "aria-haspopup": "true",
102
+ "aria-expanded": e,
103
+ onClick: () => r(),
104
+ onFocus: () => x("overflow"),
105
+ onKeyDown: I,
106
+ className: `overflow-tabs-src-element focus-outline border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${e ? "bg-[var(--color-blue-100)]" : ""} ${u?.label ? "bg-[var(--color-blue-500)]" : "hover:bg-[var(--color-gray-50)]"}`,
107
+ onMouseEnter: () => h(!0),
108
+ onMouseLeave: () => h(!1)
109
+ }), u?.label ? /* @__PURE__ */ o.createElement(o.Fragment, null, /* @__PURE__ */ o.createElement("span", {
110
+ className: "text-[var(--color-white)]"
111
+ }, u?.label), /* @__PURE__ */ o.createElement($, {
112
+ name: "chevron",
113
+ rotation: e ? "180" : "0",
114
+ stroke: p ? "var(--color-gray-100)" : "var(--color-white)"
115
+ })) : /* @__PURE__ */ o.createElement($, {
116
+ name: "kebab-menu",
117
+ fill: p ? "var(--color-gray-900)" : "var(--color-gray-700)"
118
+ }));
119
+ },
62
120
  renderPopoverContents: ({
63
121
  closePopoverCb: e
64
- }) => /* @__PURE__ */ r.createElement(I, {
65
- items: l.map((t) => ({
66
- id: t?.id,
67
- label: t?.label,
68
- automationId: t?.automationId || t?.id,
122
+ }) => /* @__PURE__ */ o.createElement(B, {
123
+ items: m.map((r) => ({
124
+ id: r?.id,
125
+ label: r?.label,
126
+ automationId: r?.automationId || r?.id,
69
127
  onClick: () => {
70
- u(t), e();
128
+ C(r), e();
71
129
  }
72
130
  }))
73
131
  })
74
- })), /* @__PURE__ */ r.createElement("div", {
132
+ })), w && /* @__PURE__ */ o.createElement("div", {
75
133
  className: "se-design-tabs-content"
76
- }, o.map((e) => /* @__PURE__ */ r.createElement("div", {
77
- key: e.id,
78
- className: `tab-content ${b(e, n) ? "block" : "hidden"}`
79
- }, b(e, n) && e?.renderTabContent && e?.renderTabContent(e)))));
134
+ }, t.map((e) => /* @__PURE__ */ o.createElement("div", s({
135
+ key: e.id
136
+ }, K(e.id), {
137
+ className: `tab-content ${P(e, d) ? "block" : "hidden"}`
138
+ }), P(e, d) && e.renderTabContent?.(e)))));
80
139
  };
81
140
  export {
82
- M as Tabs
141
+ ee as Tabs
83
142
  };
84
143
  //# sourceMappingURL=index28.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index28.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\n\nimport './style.scss';\n\ninterface TabProps {\n label: string;\n id: string;\n disabled?: boolean;\n renderTabContent?: (tab: TabProps) => ReactNode;\n automationId?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n singleTabAsHeading?: boolean; // prop for rendering single tab as heading\n automationId?: string;\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount = 0,\n singleTabAsHeading = false\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n const [activeTab, setActiveTab] = useState(defaultTabId);\n const [isIconTabHover, setIsIconTabHover] = useState(false);\n\n const visibleTabCount = primaryTabCount ? primaryTabCount : tabs?.length;\n const visibleTabs = tabs.slice(0, visibleTabCount);\n const overflowTabs = tabs.slice(visibleTabCount);\n const activeOverflowTab = overflowTabs.find((tab) => tab.id === activeTab);\n\n // Check if we should render as heading (single tab and singleTabAsHeading is true)\n const shouldRenderAsHeading = singleTabAsHeading && tabs.length === 1;\n\n useEffect(() => {\n setActiveTab(defaultActiveTab || '');\n }, [defaultActiveTab]);\n\n const handleTabClick = (tab: TabProps) => {\n setActiveTab(tab?.id);\n onTabChange?.(tab?.id);\n };\n\n const isTabActive = (tab: TabProps, activeTab: string) => {\n return tab.id === activeTab;\n };\n\n // If single tab and should render as heading, render just the heading\n if (shouldRenderAsHeading) {\n const singleTab = tabs[0];\n return (\n <>\n <div className=\"se-design-tabs-heading text-xl font-semibold text-[var(--color-gray-900)] mb-4\">\n {singleTab.label}\n </div>\n <div className=\"se-design-tabs-content\">\n <div className=\"tab-content block\">\n {singleTab?.renderTabContent && singleTab?.renderTabContent(singleTab)}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div\n className=\"se-design-tabs flex items-center relative border rounded-md border-[var(--color-gray-400)] w-fit\"\n data-automation-id=\"tabs-container\"\n >\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = tab.disabled;\n return (\n <div\n key={tab.label}\n onClick={() => !isDisabled && handleTabClick(tab)}\n className={`se-design-tab-item text-base px-3 py-0.5 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-200)] ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? 'se-design-tab-item-active text-[var(--color-blue-500)] bg-[var(--color-blue-100)] font-medium hover:cursor-pointer'\n : 'text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </div>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n automationId=\"tabs-kebab-menu\"\n noBorder\n renderPopoverSrcElement={({ displayPopover }) => {\n return (\n <div\n className={`overflow-tabs-src-element border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n } ${activeOverflowTab?.label ? 'bg-[var(--color-blue-100)]' : 'hover:bg-[var(--color-gray-50)]'}`}\n onMouseEnter={() => setIsIconTabHover(true)}\n onMouseLeave={() => setIsIconTabHover(false)}\n >\n {activeOverflowTab?.label ? (\n <>\n <span className=\"text-[var(--color-blue-500)]\">{activeOverflowTab?.label}</span>\n <Icon\n name=\"chevron\"\n rotation={displayPopover ? '180' : '0'}\n stroke={isIconTabHover ? 'var(--color-gray-900)' : 'var(--color-gray-700)'}\n />\n </>\n ) : (\n <Icon name=\"kebab-menu\" fill={isIconTabHover ? 'var(--color-gray-900)' : 'var(--color-gray-700)'} />\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n id: tab?.id,\n label: tab?.label,\n automationId: tab?.automationId || tab?.id,\n onClick: () => {\n handleTabClick(tab);\n closePopoverCb();\n }\n }))}\n />\n )}\n />\n )}\n </div>\n\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div key={tab.id} className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}>\n {isTabActive(tab, activeTab) && tab?.renderTabContent && tab?.renderTabContent(tab)}\n </div>\n ))}\n </div>\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","singleTabAsHeading","defaultTabId","id","activeTab","setActiveTab","useState","isIconTabHover","setIsIconTabHover","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","shouldRenderAsHeading","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","renderTabContent","map","isActive","isDisabled","disabled","key","onClick","automationId","Popover","position","noBorder","renderPopoverSrcElement","displayPopover","onMouseEnter","onMouseLeave","Icon","name","rotation","stroke","fill","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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"}
1
+ {"version":3,"file":"index28.js","sources":["../src/components/Tabs/index.tsx"],"sourcesContent":["import React, { FC, ReactNode, useState, useEffect, useMemo, useRef } from 'react';\nimport { Icon } from '../Icon';\nimport { Popover } from '../Popover';\nimport { MenuList } from '../MenuList';\nimport { useStableId } from '../../utils/useStableId';\nimport { useTabsA11y, getPanelId, getA11yNameAttributes } from '../../utils/a11y';\n\nimport './style.scss';\n\ninterface TabProps {\n label: string;\n id: string;\n disabled?: boolean;\n renderTabContent?: (tab: TabProps) => ReactNode;\n automationId?: string;\n ariaLabel?: string;\n}\ninterface TabsProps {\n defaultActiveTab?: string;\n tabs: TabProps[];\n onTabChange?: (tabId: string) => void;\n primaryTabCount?: number; // prop for controlling primary tabs\n headingLevel?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span'; // heading tag to render single tab as a heading element when only one tab is present\n automationId?: string;\n id?: string; // custom ID for baseId (passed to useStableId)\n ariaLabel?: string; // Accessible name when no visible label exists\n ariaLabelledBy?: string; // ID of element that labels this tablist (preferred over ariaLabel)\n panelId?: string; // When consumer manages a single external panel, pass its id here\n}\n\nexport const Tabs: FC<TabsProps> = ({\n defaultActiveTab,\n tabs,\n onTabChange,\n primaryTabCount,\n headingLevel: HeadingTag,\n id,\n ariaLabel = 'Tabs',\n ariaLabelledBy,\n panelId\n}) => {\n const defaultTabId = defaultActiveTab || (tabs[0] ? tabs[0].id : '');\n const [activeTab, setActiveTab] = useState(defaultTabId);\n const [isIconTabHover, setIsIconTabHover] = useState(false);\n\n const visibleTabCount = primaryTabCount ?? tabs?.length;\n const visibleTabs = tabs.slice(0, visibleTabCount);\n const overflowTabs = tabs.slice(visibleTabCount);\n const activeOverflowTab = overflowTabs.find((tab) => tab.id === activeTab);\n\n // Only render internal panels if at least one tab provides content via renderTabContent\n const hasPanelContent = tabs.some(t => t.renderTabContent);\n\n // A11y setup\n const baseId = useStableId(id, 'tabs');\n const itemIds = useMemo(() => {\n const enabledVisibleTabs = visibleTabs.filter(t => !t.disabled);\n const enabledOverflowTabs = overflowTabs.filter(t => !t.disabled);\n const visibleIds = enabledVisibleTabs.map(t => t.id);\n return enabledOverflowTabs.length > 0 ? [...visibleIds, 'overflow'] : visibleIds;\n }, [visibleTabs, overflowTabs]);\n\n const { getTabProps, getPanelProps, handleKeyDown, setFocusedTabId } = useTabsA11y({\n itemIds,\n activeItem: activeTab,\n orientation: 'horizontal',\n idBase: baseId,\n includePanelLinks: hasPanelContent || !!panelId,\n externalPanelId: panelId\n });\n\n // Ref for the overflow button div — needed to return focus after menu closes\n const overflowDivRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n setActiveTab(defaultActiveTab || '');\n }, [defaultActiveTab]);\n\n const handleTabClick = (tab: TabProps) => {\n setActiveTab(tab?.id);\n onTabChange?.(tab?.id);\n };\n\n const isTabActive = (tab: TabProps, activeTab: string) => {\n return tab.id === activeTab;\n };\n\n if (HeadingTag && tabs.length === 1) {\n const singleTab = tabs[0];\n return (\n <>\n <HeadingTag className=\"se-design-tabs se-design-tabs-heading\">\n {singleTab.label}\n </HeadingTag>\n <div className=\"se-design-tabs-content\">\n <div className=\"tab-content block\">\n {singleTab?.renderTabContent && singleTab?.renderTabContent(singleTab)}\n </div>\n </div>\n </>\n );\n }\n\n return (\n <>\n <div\n className=\"se-design-tabs flex items-stretch relative border rounded-md border-[var(--color-gray-400)] w-fit\"\n role=\"tablist\"\n data-automation-id=\"tabs-container\"\n {...getA11yNameAttributes({\n ariaLabel,\n ariaLabelledBy\n })}\n >\n {visibleTabs.map((tab) => {\n const isActive = activeTab === tab.id;\n const isDisabled = !!tab.disabled;\n const tabProps = getTabProps(tab.id);\n return (\n <button\n type=\"button\"\n key={tab.id}\n {...tabProps}\n disabled={isDisabled}\n aria-label={tab.ariaLabel}\n onFocus={() => !isDisabled && setFocusedTabId(tab.id)}\n onKeyDown={handleKeyDown}\n onClick={() => handleTabClick(tab)}\n className={`se-design-tab-item flex items-center text-base px-3 py-0.5 min-w-0 border-l first:border-l-0 first:rounded-l-[0.3rem] last:rounded-r-[0.3rem] border-[var(--color-gray-400)] ${!isDisabled ? 'focus-outline' : ''} ${\n isDisabled\n ? 'text-[var(--color-gray-400)] cursor-not-allowed'\n : isActive\n ? 'se-design-tab-item-active text-[var(--color-white)] bg-[var(--color-blue-500)] font-medium hover:cursor-pointer'\n : 'text-[var(--color-gray-700)] font-normal hover:bg-[var(--color-gray-50)] hover:text-[var(--color-gray-900)] cursor-pointer transition-all duration-200 ease-in-out'\n }`}\n data-automation-id={`tab-item-${tab.automationId || tab.id || ''}`}\n >\n {tab.label}\n </button>\n );\n })}\n\n {overflowTabs.length > 0 && (\n <Popover\n className=\"se-design-overflow-tabs\"\n position=\"bottom-left\"\n automationId=\"tabs-kebab-menu\"\n noBorder\n disableClickToggle={true}\n onPopoverToggle={(isOpen) => {\n // Return focus to the overflow button when the menu closes (e.g. Escape)\n if (!isOpen) overflowDivRef.current?.focus();\n }}\n renderPopoverSrcElement={({ displayPopover, togglePopover }) => {\n const overflowTabProps = getTabProps('overflow');\n const overflowAriaControls = activeOverflowTab\n ? getPanelId(activeOverflowTab.id, baseId)\n : undefined;\n\n return (\n <div\n {...overflowTabProps}\n ref={(el) => { overflowDivRef.current = el; overflowTabProps.ref(el); }}\n aria-controls={overflowAriaControls}\n aria-haspopup=\"true\"\n aria-expanded={displayPopover}\n onClick={() => togglePopover()}\n onFocus={() => setFocusedTabId('overflow')}\n onKeyDown={handleKeyDown}\n className={`overflow-tabs-src-element focus-outline border-l px-3 py-0.5 rounded-r-md font-medium hover:cursor-pointer transition-all duration-200 ease-in-out ${\n displayPopover ? 'bg-[var(--color-blue-100)]' : ''\n } ${activeOverflowTab?.label ? 'bg-[var(--color-blue-500)]' : 'hover:bg-[var(--color-gray-50)]'}`}\n onMouseEnter={() => setIsIconTabHover(true)}\n onMouseLeave={() => setIsIconTabHover(false)}\n >\n {activeOverflowTab?.label ? (\n <>\n <span className=\"text-[var(--color-white)]\">{activeOverflowTab?.label}</span>\n <Icon\n name=\"chevron\"\n rotation={displayPopover ? '180' : '0'}\n stroke={isIconTabHover ? 'var(--color-gray-100)' : 'var(--color-white)'}\n />\n </>\n ) : (\n <Icon name=\"kebab-menu\" fill={isIconTabHover ? 'var(--color-gray-900)' : 'var(--color-gray-700)'} />\n )}\n </div>\n );\n }}\n renderPopoverContents={({ closePopoverCb }) => (\n <MenuList\n items={overflowTabs.map((tab) => ({\n id: tab?.id,\n label: tab?.label,\n automationId: tab?.automationId || tab?.id,\n onClick: () => {\n handleTabClick(tab);\n closePopoverCb();\n }\n }))}\n />\n )}\n />\n )}\n </div>\n\n {hasPanelContent && (\n <div className=\"se-design-tabs-content\">\n {tabs.map((tab) => (\n <div\n key={tab.id}\n {...getPanelProps(tab.id)}\n className={`tab-content ${isTabActive(tab, activeTab) ? 'block' : 'hidden'}`}\n >\n {isTabActive(tab, activeTab) && tab.renderTabContent?.(tab)}\n </div>\n ))}\n </div>\n )}\n </>\n );\n};\n"],"names":["Tabs","defaultActiveTab","tabs","onTabChange","primaryTabCount","headingLevel","HeadingTag","id","ariaLabel","ariaLabelledBy","panelId","defaultTabId","activeTab","setActiveTab","useState","isIconTabHover","setIsIconTabHover","visibleTabCount","length","visibleTabs","slice","overflowTabs","activeOverflowTab","find","tab","hasPanelContent","some","t","renderTabContent","baseId","useStableId","itemIds","useMemo","enabledVisibleTabs","filter","disabled","enabledOverflowTabs","visibleIds","map","getTabProps","getPanelProps","handleKeyDown","setFocusedTabId","useTabsA11y","activeItem","orientation","idBase","includePanelLinks","externalPanelId","overflowDivRef","useRef","useEffect","handleTabClick","isTabActive","singleTab","createElement","React","Fragment","className","label","_extends","role","getA11yNameAttributes","isActive","isDisabled","tabProps","type","key","onFocus","onKeyDown","onClick","automationId","Popover","position","noBorder","disableClickToggle","onPopoverToggle","isOpen","current","focus","renderPopoverSrcElement","displayPopover","togglePopover","overflowTabProps","overflowAriaControls","getPanelId","undefined","ref","el","onMouseEnter","onMouseLeave","Icon","name","rotation","stroke","fill","renderPopoverContents","closePopoverCb","MenuList","items"],"mappings":"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"}
package/dist/index29.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import e, { forwardRef as H } from "react";
2
2
  import { Icon as J } from "./index5.js";
3
3
  import { Button as b } from "./index3.js";
4
- import { useStableId as I } from "./index189.js";
4
+ import { useStableId as I } from "./index190.js";
5
5
  import { getRegionAttributes as K } from "./index65.js";
6
6
  import { useAccessiblePress as M } from "./index66.js";
7
7
  /* empty css */
package/dist/index3.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import r, { forwardRef as I } from "react";
2
- import { getA11yNameAttributes as R } from "./index70.js";
2
+ import { getA11yNameAttributes as R } from "./index71.js";
3
3
  import { useAccessiblePress as z } from "./index66.js";
4
4
  import { Icon as b } from "./index5.js";
5
5
  /* empty css */